【變形金剛01】attention和transformer所有信息

圖1.來源:Arseny Togulev在Unsplash上的照片

一、說明

????????這是一篇 長文 ,幾乎討論了人們需要了解的有關注意力機制的所有信息,包括自我注意、查詢、鍵、值、多頭注意力、屏蔽多頭注意力和轉換器,包括有關 BERT 和 GPT 的一些細節。因此,我將本文分為兩部分。在本文中,我將介紹所有注意力塊,在下一個故事中,我將深入探討變壓器網絡架構。

二、RNN背景知識提要?

  1. RNN 面臨的挑戰以及轉換器模型如何幫助克服這些挑戰
  2. 注意力機制

2.1 自我注意

2.2 查詢、鍵和值

2.3 注意力的神經網絡表示

2.4 多頭注意力

3. 變形金剛(下篇繼續)

2.1 介紹

????????注意力機制于2014年首次用于計算機視覺,試圖理解神經網絡在進行預測時正在查看的內容。這是嘗試理解卷積神經網絡(CNN)輸出的第一步。2015年,注意力首先用于對齊機器翻譯中的自然語言處理(NLP)。最后,在2017年,注意力機制被用于Transformer網絡中的語言建模。此后,變壓器已經超越了遞歸神經網絡(RNN)的預測精度,成為NLP任務的最新技術。

2.2 . RNN 的挑戰以及轉換器模型如何幫助克服這些挑戰

????????1.1?RNN 問題 1?— 遇到長期依賴問題。RNN 不適用于長文本文檔。

????????變壓器解決方案?— 變壓器網絡幾乎只使用注意力塊。注意力有助于在序列的任何部分之間建立連接,因此長期依賴不再是問題。對于變壓器,長期依賴性與任何其他短程依賴性具有相同的可能性。

????????1.2.?RNN 問題 2?— 遭受梯度消失和梯度爆炸。

????????變壓器解決方案?— 幾乎沒有梯度消失或爆炸問題。在變壓器網絡中,整個序列是同時訓練的,并且在此基礎上僅添加幾層。因此,梯度消失或爆炸很少成為問題。

????????1.3. RNN?問題 3 — RNN?需要更大的訓練步驟才能達到局部/全局最小值。RNN可以可視化為一個非常深的展開網絡。網絡的大小取決于序列的長度。這產生了許多參數,并且這些參數中的大多數是相互關聯的。因此,優化需要更長的訓練時間和很多步驟。

????????變壓器解決方案?— 比 RNN 需要更少的訓練步驟。

????????1.4. RNN?問題 4 — RNN?不允許并行計算。GPU 有助于實現并行計算。但是RNN作為序列模型工作,也就是說,網絡中的所有計算都是按順序進行的,不能并行化。

????????變壓器解決方案?— 變壓器網絡中沒有重復出現,允許并行計算。因此,每一步都可以并行進行計算。

三. 注意力機制

3.1 自我注意

圖2.解釋自我注意的示例(來源:作者創建的圖片)

????????考慮一下這句話——“吠叫很可愛,他是一只狗”。這句話有9個單詞或標記。如果我們只考慮句子中的“他”這個詞,我們會發現“和”是“是兩個非常接近它的詞。但這些詞并沒有給“他”這個詞任何上下文。相反,“吠叫”和“狗”這兩個詞與句子中的“他”更相關。由此,我們了解到接近并不總是相關的,但上下文在句子中更相關。

????????當這個句子被饋送到計算機時,它將每個單詞視為一個標記t,并且每個標記都有一個單詞嵌入V。但是這些詞嵌入沒有上下文。因此,我們的想法是應用某種權重或相似性來獲得最終的單詞嵌入Y,它比初始嵌入V具有更多的上下文。

????????在嵌入空間中,相似的單詞看起來更靠近或具有相似的嵌入。比如“國王”這個詞會更與“女王”和“皇室”這個詞相關,而不是與“斑馬”這個詞相關。同樣,“斑馬”與“馬”和“條紋”的關系比與“情感”一詞的關系更大。要了解有關嵌入空間的更多信息,請訪問Andrew Ng(NLP和單詞嵌入)的視頻。

????????因此,直覺上,如果“國王”一詞出現在句子的開頭,而“女王”一詞出現在句子的末尾,它們應該相互提供更好的上下文。我們使用這個想法來找到權重向量?W,通過將單詞嵌入相乘(點積)以獲得更多的上下文。所以,在句子中,Bark非常可愛,他是一只狗,而不是按原樣使用單詞嵌入,我們將每個單詞的嵌入相乘。圖 3 應該能更好地說明這一點。

圖3.查找權重并獲得最終嵌入(來源:作者創建的圖像)

????????如圖 3 所示,我們首先通過將第一個單詞的初始嵌入乘以(點積)與句子中所有其他單詞的嵌入來找到權重。這些權重(W11 到 W19)也歸一化為總和為 1。接下來,將這些權重乘以句子中所有單詞的初始嵌入。

????????W11 V1 + W12 V2 + ....W19 V9 = Y1

????????W11 到 W19 都是具有第一個單詞 V1 上下文的權重。因此,當我們將這些權重乘以每個單詞時,我們實際上是在將所有其他單詞重新加權到第一個單詞。因此,從某種意義上說,“吠叫”這個詞現在更傾向于“”和“可愛”這兩個詞,而不是緊隨其后的詞。這在某種程度上提供了一些背景。

????????對所有單詞重復此操作,以便每個單詞從句子中的其他單詞中獲得一些上下文。

圖4.上述步驟的圖形表示(來源:作者創建的圖像)

????????圖4使用圖形圖更好地理解了獲得Y1的上述步驟。

????????有趣的是,沒有訓練權重,單詞的順序或接近度彼此沒有影響。此外,該過程不依賴于句子的長度,也就是說,句子中更多或更少的單詞無關緊要。這種為句子中的單詞添加一些上下文的方法稱為自我注意

3.2 查詢、鍵和值

????????自我注意的問題在于沒有任何東西被訓練。但也許如果我們添加一些可訓練的參數,網絡就可以學習一些模式,從而提供更好的上下文。此可訓練參數可以是訓練其值的矩陣。因此,引入了查詢、鍵和值的概念。

????????讓我們再考慮一下前面的一句話——“吠叫很可愛,他是一只狗”。在自我注意的圖 4 中,我們看到初始詞嵌入 (V) 使用了 3 次。1st作為句子中第一個單詞嵌入和所有其他單詞(包括其自身,2nd)之間的點積以獲得權重,然后再次將它們(第3次)乘以權重,以獲得帶有上下文的最終嵌入。這 3 個出現的 V 可以替換為三個術語查詢、

????????假設我們想使所有單詞與第一個單詞 V1 相似。然后,我們將 V1 作為查詢詞發送。然后,這個查詢詞將對句子中的所有單詞(V1 到 V9)做一個點積——這些就是鍵。因此,查詢和鍵的組合為我們提供了權重。然后將這些權重再次與充當值的所有單詞(V1 到 V9)相乘。我們有它,查詢,鍵和值。如果您仍然有一些疑問,圖 5 應該能夠清除它們。

圖5.表示查詢、鍵和值(來源:作者創建的圖像)

????????但是等等,我們還沒有添加任何可以訓練的矩陣。這很簡單。我們知道,如果將 1 x k 形向量乘以 k x k 形矩陣,我們得到一個 1 x k 形向量作為輸出。記住這一點,讓我們將每個鍵從 V1 乘以 V10 到 V1(每個形狀為 6 x k),并乘以形狀為 k x k 的矩陣 Mk(鍵矩陣)。類似地,查詢向量乘以矩陣 Mq(查詢矩陣),值向量乘以值矩陣 Mv。這些矩陣 Mk、Mq 和 Mv 中的所有值現在都可以由神經網絡訓練,并且比僅僅使用自我注意提供更好的上下文。同樣,為了更好地理解,圖 <> 顯示了我剛才解釋的內容的圖形表示。

圖6.鍵矩陣、查詢矩陣和值矩陣(來源:作者創建的圖像)

????????現在我們知道了鍵、查詢和值的直覺,讓我們看看數據庫分析以及注意力背后的官方步驟和公式。

????????讓我們通過查看數據庫的示例來嘗試理解注意力機制。因此,在數據庫中,如果我們想根據查詢?q 和鍵 k i 檢索某個值 vi,可以執行一些操作其中我們可以使用查詢來識別對應于某個。注意力可以被認為是與此數據庫技術類似的過程,但以更概率的方式。下圖對此進行了演示。

????????圖 7 顯示了在數據庫中檢索數據的步驟。假設我們將一個查詢發送到數據庫中,一些操作會找出數據庫中哪個鍵與查詢最相似。找到密鑰后,它將發送與該密鑰對應的值作為輸出。在圖中,該操作發現查詢與鍵 5 最相似,因此為我們提供了值 5 作為輸出。

圖7.數據庫中的值檢索過程(來源:作者創建的圖像)

????????注意力機制是一種模仿這種檢索過程的神經架構。

  1. 注意力機制測量查詢 q 和每個鍵值 k i 之間的相似性
  2. 此相似性為每個鍵值返回一個權重。
  3. 最后,它生成一個輸出,該輸出是我們數據庫中所有值的加權組合。

????????從某種意義上說,數據庫檢索和注意力之間的唯一區別是,在數據庫檢索中,我們只得到一個值作為輸入,但在這里我們得到一個值的加權組合。在注意力機制中,如果查詢與鍵 1 和鍵 4 最相似,那么這兩個鍵將獲得最多的權重,輸出將是值 1 和值 4 的組合。

????????圖 8 顯示了從查詢、鍵和值獲取最終注意力值所需的步驟。下面將詳細解釋每個步驟。(鍵值?k?是向量,相似性值?S?是標量,權重值 (softmax) 值?a?是標量,值?V?是向量)

圖8.獲得注意力值的步驟(來源:作者創建的圖像)

第 1 步。

????????步驟 1 包含鍵和查詢以及相應的相似性度量。查詢?q?會影響相似性。我們擁有的是查詢和鍵,并計算相似性。相似性是查詢?q?和鍵?k?的某些函數。查詢和鍵都是一些嵌入向量。相似性?S?可以使用各種方法計算,如圖 9 所示。

圖9.計算相似性的方法(Souce:作者創建的圖像)

????????相似性可以是查詢和鍵的簡單點積。它可以是縮放點積,其中qk的點積除以每個鍵的維數d的平方根。?這是查找相似性最常用的兩種技術。

????????通常,使用權重矩陣 W 將查詢投影到新空間中,然后使用鍵?k?創建點積。內核方法也可以用作相似性。

第 2 步。

????????第 2 步是查找權重?a。這是使用“SoftMax”完成的。公式如下所示。(exp 是指數級的)

????????相似性像完全連接的層一樣與權重相連。

第 3 步。

????????步驟 3 是 softmax (a) 的結果與相應值 (V) 的加權組合。a 的第一個值乘以?V 的第一個值,然后與?a?的第 1 個值與值?V?的第 2 個值的乘積相加,依此類推。我們獲得的最終輸出是所需的結果注意力值。

三個步驟的摘要:

W在查詢?q?和鍵?k?的幫助下,我們獲得注意值,它是值 V 的加權和/線性組合權重來自查詢和鍵之間的某種相似性。

3.3 注意力的神經網絡表示

圖 10.注意力塊的神經網絡表示(來源:作者創建的圖像)

圖 10 顯示了注意力塊的神經網絡表示。詞嵌入首先傳遞到一些線性層中。這些線性層沒有“偏差”項,因此只不過是矩陣乘法。其中一個層表示為“鍵”,另一個表示為“查詢”,最后一個層表示為“值”。如果在鍵和查詢之間執行矩陣乘法,然后進行規范化,我們將得到權重。然后將這些權重乘以值并相加,得到最終的注意力向量。這個塊現在可以在神經網絡中使用,被稱為注意力塊。可以添加多個這樣的注意力塊以提供更多上下文。最好的部分是,我們可以獲得梯度反向傳播來更新注意力塊(鍵、查詢、值的權重)。

3.4 多頭注意力

????????為了克服使用單頭注意力的一些陷阱,使用了多頭注意力。讓我們回到那句話——“吠叫很可愛,他是一只狗”。在這里,如果我們使用“狗”這個詞,從語法上我們理解“吠叫”、“可愛”和“他”應該與“狗”這個詞有某種意義或相關性。這些話說,狗的名字叫樹皮,是公狗,是一只可愛的狗。僅憑一種注意力機制未必能正確識別出這三個詞與“狗”相關,我們可以說,這里用“狗”這個詞來表示這三個詞更好。這減少了一個注意力查找所有重要單詞的負擔,也增加了輕松找到更多相關單詞的機會。

????????因此,讓我們添加更多的線性層作為鍵、查詢和值。這些線性層是并行訓練的,并且彼此具有獨立的權重。所以現在,每個值、鍵和查詢都為我們提供了三個輸出,而不是一個。這 3 個鍵和查詢現在提供三種不同的權重。然后用矩陣乘以這三個值,得到三個倍數輸出。這三個注意力塊最終連接起來,給出一個最終的注意力輸出。此表示如圖 11 所示。

圖 11.具有3個線性層的多頭注意力(來源:作者創建的圖像)

????????但 3 只是我們選擇的隨機數。在實際場景中,這些可以是任意數量的線性層,這些層稱為頭部(h)。也就是說,可以有 h?個線性層,給出?h?個注意力輸出,然后將其連接在一起。這正是它被稱為多頭注意力(多頭)的原因。圖 11 的簡化版本,但頭部數量為?h?如圖 12 所示。

圖 12.具有“h”層的多頭注意力(來源:作者創建的圖片)

????????N由于我們了解了注意力、查詢、鍵、值和多頭注意力背后的機制和思想,我們已經涵蓋了變壓器網絡的所有重要構建塊。在下一個故事中,我將討論所有這些塊如何堆疊在一起形成變壓器網絡,并討論一些基于變壓器的網絡,例如BERT和GPT。

四、引用:

2017. 注意力就是你所需要的一切。第31屆神經信息處理系統國際會議論文集(NIPS'17)。Curran Associates Inc.,Red Hook,NY,USA,6000–6010。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV圖像處理——輪廓檢測

目錄 圖像的輪廓查找輪廓繪制輪廓 輪廓的特征輪廓面積輪廓周長輪廓近似凸包邊界矩形最小外接圓橢圓擬合直線擬合 圖像的矩特征矩的概念圖像中的矩特征 圖像的輪廓 查找輪廓 binary,contours,hierarchycv.findContours(img,mode,method)繪制輪廓 cv.drawContours(img,coutours…

WSL2安裝Ubuntu,配置機器學習環境

文章目錄 1.WSL2安裝Ubuntu&#xff0c;更改安裝位置&#xff0c;作為開發環境供vscode和pycharm使用&#xff1a;2.更換國內源&#xff1a;3.安裝圖形界面&#xff1a;4.安裝cudacudnntorch5.安裝opencv6.調用攝像頭7.使用yolov8測試 WSL全稱Windows Subsystem for Linux&…

印度貨代專線【我國到印度專線有哪些方式】

隨著全球貿易的不斷發展&#xff0c;我國與印度之間的貿易往來也日益頻繁。作為兩個人口最多的國家之一&#xff0c;中國和印度之間的貨物運輸需求不斷增長。為了滿足這一需求&#xff0c;印度貨代專線應運而生&#xff0c;為進出口商提供高效、可靠的貨物運輸服務。本文將探索…

939. 最小面積矩形;2166. 設計位集;2400. 恰好移動 k 步到達某一位置的方法數目

939. 最小面積矩形 核心思想&#xff1a;枚舉矩形的右邊那條邊的兩個點&#xff0c;并用一個哈希表存儲相同縱坐標的最近出現的列的列數,不斷更新最近出現的左邊那條邊。 2166. 設計位集 核心思想&#xff1a;這題主要是時間復雜度的優化&#xff0c;用一個flag來標記當前翻轉…

CSS自學框架之表單

首先我們看一下表單樣式&#xff0c;下面共有5張截圖 一、CSS代碼 /*表單*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend標簽是CSS中用于定義…

IOS開發-XCode14介紹與入門

IOS開發-XCode14介紹與入門 1. XCODE14的小吐槽2. XCODE的功能bar一覽3. XCODE項目配置一覽4. XCODE更改DEBUG/RELEASE模式5. XCODE單元測試 1. XCODE14的小吐槽 iOS開發工具一直有個毛病&#xff0c;就是新版本的開發工具的總會有一些奇奇怪怪的bug。比如在我的Mac-Pro&#…

Springboot 實踐(3)配置DataSource及創建數據庫

前文講述了利用MyEclipse2019開發工具&#xff0c;創建maven工程、加載springboot、swagger-ui功能。本文講述創建數據庫&#xff0c;為項目配置數據源&#xff0c;實現數據的增刪改查服務&#xff0c;并通過swagger-ui界面舉例調試服務控制器 創建數據庫 項目使用MySQL 8.0.…

vue基礎知識四:Vue實例掛載的過程

一、思考 我們都聽過知其然知其所以然這句話 那么不知道大家是否思考過new Vue()這個過程中究竟做了些什么&#xff1f; 過程中是如何完成數據的綁定&#xff0c;又是如何將數據渲染到視圖的等等 一、分析 首先找到vue的構造函數 源碼位置&#xff1a;src\core\instance\…

一生一芯4——使用星火應用商店在ubuntu下載QQ、微信、百度網盤

星火應用商店可以非常方便的完成一些應用的下載&#xff0c;下面是官方網址 http://spark-app.store/download 我使用的是intel處理器&#xff0c;無需下載依賴項&#xff0c;直接點擊軟件本體 我這里下載amd64,根據自己的處理器下載對應版本 sudo apt install ./spark-stor…

做視頻_Style

Video 1> 風格2> 技巧3> 借鑒 &#x1f517; B站視頻 1> 風格 記錄分享生活&#xff0c;工作&#xff0c;學習方面的總結&#xff1b; 4個段位&#xff1a; 實用 -> 簡潔 -> 清晰流暢 -> 生動有趣 2> 技巧 1> 大視頻分段錄制&#xff0c;最后合并…

pytorch入門-神經網絡

神經網絡的基本骨架 import torch from torch import nn #nn模塊是PyTorch中用于構建神經網絡模型的核心模塊。它提供了各種類和函數&#xff0c;可以幫助你定義和訓練神經網絡。class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__() #調用 super(Tudui,…

數據結構入門指南:二叉樹

目錄 文章目錄 前言 1. 樹的概念及結構 1.1 樹的概念 1.2 樹的基礎概念 1.3 樹的表示 1.4 樹的應用 2. 二叉樹 2.1 二叉樹的概念 2.2 二叉樹的遍歷 前言 在計算機科學中&#xff0c;數據結構是解決問題的關鍵。而二叉樹作為最基本、最常用的數據結構之一&#xff0c;不僅在算法…

java對大文件分片上傳

這里記錄一下&#xff0c;Java對大文件的切分&#xff0c;和后端接口分片上傳的實現邏輯 正常&#xff0c;前后端分離的項目其實是前端去切分文件&#xff0c;后端接口接收到切分后的分片文件去合并&#xff0c;這里都用java來記錄一下。特別說明&#xff1a;我這里用的是zip包…

vue+java實現在線播放mp4視頻

java: 讀取本地視頻文件的流然后給response的輸出流 File file new File("/Users/zhangqingtian/Documents/水庫/Floodforecast/static/" videoName);BufferedInputStream inputStream new BufferedInputStream(new FileInputStream(file));response.setContentT…

ReactDOM模塊react-dom/client沒有默認導出報錯解決辦法

import ReactDOM 模塊“"E:/Dpandata/Shbank/rt-pro/node_modules/.pnpm/registry.npmmirror.comtypesreact-dom18.2.7/node_modules/types/react-dom/client"”沒有默認導出。 解決辦法 只需要在tsconfig.json里面添加配置 "esModuleInterop": true 即…

【C++】queue容器

1.queue容器基本概念 2.queue常用接口 #include <iostream> using namespace std;//隊列queue #include<queue>//創建Person類 class Person { public:Person(string name, int age){this->m_Name name;this->m_Age age;}string m_Name; //姓名int m_Age; …

mysql創建新用戶并授權

目錄 前言登錄到mysql創建用戶用戶授權更改用戶密碼參考 前言 略 登錄到mysql shell> mysql -h127.0.0.1 -P3306 -uroot -p******創建用戶 mysql> CREATE USER abc% IDENTIFIED BY 123456;用戶授權 mysql> GRANT all privileges ON ruoyi.* TO abc%;用戶ruoyi擁有…

優維低代碼實踐:自定義模板

優維低代碼技術專欄&#xff0c;是一個全新的、技術為主的專欄&#xff0c;由優維技術委員會成員執筆&#xff0c;基于優維7年低代碼技術研發及運維成果&#xff0c;主要介紹低代碼相關的技術原理及架構邏輯&#xff0c;目的是給廣大運維人提供一個技術交流與學習的平臺。 優維…

禾賽科技Q2營收交付雙新高,國產激光雷達從量變到質變

隨著2022年激光雷達元年、2023年城市智能輔助駕駛&#xff08;NOA&#xff09;元年相繼到來&#xff0c;激光雷達產業迎來爆發期。 今年以來&#xff0c;自動駕駛公司、汽車制造商以及移動出行公司等各路人馬積極推動城市級別的智能輔助駕駛全面落地&#xff0c;北京、上海、深…

通過css設置filter 屬性,使整個頁面呈現灰度效果,讓整個網頁變灰

通過css設置filter 屬性設置頁面整體置灰 效果圖: 通過設置 filter 屬性為 grayscale(100%)&#xff0c;頁面中的所有元素都會被應用灰色濾鏡效果&#xff0c;使整個頁面呈現灰度效果。 <style type"text/css"> html { filter: grayscale(100%); -webkit-f…