從頭理解transformer,注意力機制(下)

交叉注意力

image-20240511214054520

image-20240511214111100

交叉注意力里面q和KV生成的數據不一樣

自注意力機制就是悶頭自學

image-20240511214625995

解碼器里面的每一層都會拿著編碼器結果進行參考,然后比較相互之間的差異。每做一次注意力計算都需要校準一次

image-20240511215943959

編碼器和解碼器是可以并行進行訓練的

訓練過程

好久不見輸入到編碼器,long time no see輸入到解碼器,按照transformer的編碼和解碼這個過程逐漸往上進行計算。

有交叉注意力進行互相匹配,看是不是一樣,最后得到損失函數,這個損失函數就是判斷編碼器和解碼器部分分別得到的潛空間詞向量是不是匹配,經過反向傳播再修改模型里的參數,最后達到編碼器和解碼器他們在潛空間里詞向量里表達的詞意是能對應起來的

推理過程

image-20240511220210488

直接把輸入變成詞向量,詞向量翻譯成對應的目標的語言是不行的

image-20240511224252420

編碼器部分:輸入好久不見,生成一組潛空間里的詞向量

解碼器部分:輸入一個特殊符號, 代表開始

經過交叉注意力進行計算得到一個結果,結果經過升維和softmax計算后,會將詞匯表的所有token都計算一個數值,拿出概率最大的值作為結果,結果代表下一個token將會是什么。

以此類推直到得到的結果是結束符號為止,代表整個生成過程結束,生成的結果就是好久不見的翻譯。相當于是逐步挨個對潛空間里的詞向量進行解壓,一個一個的還原成token,從而解決seq2seq

image-20240511225124344

位置編碼

多頭注意力機制其實就是能力更強的CNN,詞向量的維度就是CNN里面的通道,多頭對應的就是卷積核

image-20240512100412348

如果沒有位置編碼,transfomer會把所有token一起放到模型并行運算,這樣的話詞語的前后順序所攜帶的信息沒辦法體現

有兩種選擇增加位置信息:

  1. 通過權重增加位置信息(乘法)
  2. 通過偏置系數進行區分(加法)
image-20240512100349777

transformer用的是加法,因為如果用乘法,位置對詞向量影響就太大。而LLama模型用到的旋轉位置編碼,就是用乘法的方式實現

絕對位置編碼

針對數據進行修飾,直接讓數據攜帶了位置信息

把位置下標,一維的自然數集投射到與詞向量維度相同的連續空間,這樣詞向量矩陣就可以和位置編碼矩陣直接相加了。

image-20240511231635499

投射過程

image-20240511232458172

image-20240511233444991

值域中

image-20240511234016734

相對位置編碼

會更多的考慮一個詞向量和另一個詞向量之間的相對位置,一個詞向量和另一個詞向量進行對比。這個過程是在注意力機制里面發生的.

絕對位置編碼是對數據進行修飾的話,那相對位置編碼就是對注意力得分的那個A矩陣進行修飾,讓它具備相對位置的信息。這個矩陣考慮的是Q和K的相對關系.

對于這個注意力得分矩陣,用乘法的方式為每一項增加一個系數。這個系數是和相對位置有關的。

image-20240512092747728

多頭注意力機制

image-20240512093012433

形式

輸入的數據。假如說有兩詞向量,我們之前只是把這個數據進行一次注意力機制,然后得到一個新的詞向量。現在我們是多頭了,假如說我有三頭,分別去計算三次,這三個注意力機制里面系數是各自獨立的。

也就是說這里的三個矩陣是不一樣的。最后學到了什么可能會各不相同。最后得到的這三個結果也可能不一樣。而多頭對立就是把他們給拼起來

這個矩陣的行數和輸入數據的這個矩陣的行數是一樣的。因為行代表的是詞向量的個數,行是一樣的,維度就不同了。維度它是每一個輸出的維度,再乘以頭的個數,然后最后得到這個結果以后,還會再和一個W矩陣相乘,再得出一個輸出的詞向量

有什么意義

為什么要分別去計算,然后再拼在一起,而不是直接就用一個9維的W矩陣去進行訓練。

image-20240512093606117

詞向量的維度某種程度上是可以理解成是通道的。就是和圖片的RGB的通道是相同的。如果就是一個大的注意力機制,那最后得到的結果是九維,那就是相當于九個通道。

現在是多頭的,每個頭計算出來都有三個維度。這三個計算結果的第一位,如果定性的去想的話,他們在語義上都是比較接近的,把這些語義接近的組成一組是更合理。那這三個通道經過一個系數相乘,然后再相加得到一個具體的值

image-20240512094425908

多頭注意力機制比卷積神經網絡它有更大的可能性,它不再局限于卷積核,必須是圍繞一個中心的,是可以中間可以跨越很多個頭頭,對很遠的地方去產生聯系,所以這個可能性就要更多,也可能會比卷積神經網絡更靈活。

在卷積神經網絡里面,它通過卷積操作,它可以疊加不同的層去識別出不同尺度的模式,或者說不同尺度的規律。就比如說這里這個圖最開始的卷積層可能是只能識別出非常簡單的一些模式。再往上去疊加更多的層,就能識別出復雜的模式來了。比如說眼睛、鼻子、嘴,再往上就可以把眼睛、鼻子、嘴再拼成人的臉。

image-20240512094521065

transformer它疊加了很多層,它其實也有類似的作用,不同層的疊加,最底層它很可能只能識別出一個單詞,跨越幾個單詞它們之間的關系。隨著層數越高,那可能就能識別出跨越段的語義關系,代表就識別出跨越文章的語義關系。

其他
1.掩碼

image-20240512094856372

第一個是在解碼器里面,這個注意力上會加一個掩碼,就是因為在推理的時候,解碼器部分是一個詞一個詞生成的這就代表了你生成到某個詞的時候,這個詞它只能受到它之前詞的影響,不應該被未來生成的詞所決定。我們前面說了,注意力機制里面那個助力得分矩陣A它可以表示一個詞和所有上下文之間的關系的,既包含了它之前的,也包含了它之后的。所以說這個時候就需要把矩陣A中的這部分詞給屏蔽掉。

屏蔽的方法就是在這些位置上分別加上一個無窮小這樣子。

image-20240512094811752

2.計算殘差和進行normal運算
image-20240512100759780 這部分它會完成兩個操作,一個是實現殘差網絡的功能,另一個是對上一層數據進行normal運算,也就是進行歸一化。反正它的計算很簡單,就是把輸入和輸出直接加起來,這么簡單一加之后就會讓注意力機制里面學習到的東西發生變化了。如果沒有做殘差,那注意力機制里面學到的是變化后的結果。而做了殘差注意力機制里面學到的就是變化的程度了。

這兩種情況的區別,做個類比的話,大概就是這樣一種情況,沒有做殘差,就相當于是你蒙著眼開車,你只能通過控制手的不來回晃動,讓自己車盡量走直線。理論上是可以做到的,但是對操作要求那就非常高了。做了殘差,就相當于是你可以看到路上的標線,你控制的其實是車子和標線的偏差。就算手再抖,這個偏差也不會太大,你還是能調整回來的。

至于norm,Transformer里面用到的是layer Normal, 簡單來說就是給模型里面輸入的是一個batch數據。如果簡單理解的話,你可以這么去想,你給模型說說一段話,一段話里面有不同的句子,每個句子都是一個句子的長短不一樣。所以說這個句子的行數也不一樣,那樣的話要做的就是你一個句子里面,不管你的這個行數是多少,反正是這個句子里的所有元素放在一起進行歸一,那就是layer Normal.

3.前饋神經網絡

其實也就是一個全連接神經網絡。CNN也有類似的東西,就是前面是一堆卷積層。卷積層計算完了之后還會把結果輸入到神經網絡里面。

image-20240512095704151

全連接神經網絡到底和前面的數據怎么連,按照詞向量的維度去排列,作為輸入一個維度。對應一個輸入,因為只想讓你的維度某種程度上來說就是這個詞對應的詞義特征,把特征輸入到神經網絡,這應該算是標準操作了。神經網絡最后要做的就是各種特征的組合和抽象。

4.線性層

image-20240512100232329

線性層其實就是一個線性變化,也就是做一個矩陣運算。其實這部分我也沒有去仔細研究,我的理解是這里加入這一層是為了將前面潛空間里的子向量再進行一次維度變換訓練的時候,你就要把維度變換成可以計算損失值的形式。在推理的時候,你需要把詞向量變成讀熱編碼去判斷到底哪個token的概率最大。所以這部分應該也不是特別復雜。

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

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

相關文章

docker部署springboot+Vue項目

項目介紹:后臺springboot項目,該項目環境mysql、redis 。前臺Vue:使用nginx反向代理 方法一:docker run 手動逐個啟動容器 1.docker配置nginx代理 將vue項目打包上傳到服務器上。創建文件夾存儲數據卷,html存放打包…

計算機網絡實驗1:交換機基本配置管理

實驗目的和要求 安裝Packer Tracer,了解Packer Tracer的基本操作掌握交換機基本命令集實驗項目內容 認識Packet Tracer軟件 交換機的基本配置與管理 交換機的端口配置與管理 交換機的端口聚合配置 交換機劃分Vlan配置 實驗環境 硬件:PC機&#x…

Redisson分布式鎖原理

Redisson是基于Redis實現的客戶端庫,提供了多種Java并發API映射到Redis中,也實現了各種分布式服務,其中就有各種分布式鎖的實現。 Redisson鎖彌補了SETNX鎖的的局限性,實現了可重入、可重試和超時續約的功能。 可重入&#xff1a…

解決NVM 下載node.js慢問題->最新鏡像

一、NVM 介紹 nvm是node版本管理工具,可以運行在多種操作系統上。這里主要記錄一下在windows系統的安裝和使用。 在使用過程中,下載其他版本時會出現下載慢或卡住或下載失敗的情況,是因為服務器在國外,網絡原因導致,…

代碼隨想錄Day 41|Leetcode|Python|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每個…

在統計上城鄉是如何劃分的

城鄉二元結構,是長期以來我國經濟社會發展的顯著特點之一,黨和政府高度重視統籌城鄉發展,縮小城鄉差距。為了對城鄉發展予以準確反映和動態監測,提高在統計上劃分城鄉工作的一致性,國家統計局開展了統一的統計用區劃代…

【Docker學習】docker run的端口映射-p和-P選項

docker run的端口映射選項分為-p(小寫,全稱--publish),-P(大寫,全稱--publish-all),之前認為只有改變容器發布給宿主機的默認端口號才會進行-p的設置,而不改變默認端口號…

面試經典算法系列之數組/字符串6 -- 輪轉數組

面試經典算法題38-輪轉數組 LeetCode.189 公眾號:阿Q技術站 問題描述 給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪轉 1 …

YOLOv8訓練流程-原理解析[目標檢測理論篇]

關于YOLOv8的主干網絡在YOLOv8網絡結構介紹-CSDN博客介紹了,為了更好地學習本章內容,建議先去看預測流程的原理分析YOLOv8原理解析[目標檢測理論篇]-CSDN博客,再次把YOLOv8網絡結構圖放在這里,方便隨時查看。 ? 1.前言 YOLOv8訓練…

Map中KEY去除下劃線并首字母轉換為大寫工具類

在運維舊項目時候&#xff0c;碰上sql查詢結果只能返回List<Map>&#xff0c;key為表單字段名&#xff0c;value為獲取到的結果數據。 懶得一個一個敲出來&#xff0c;就直接寫個方法轉換&#xff0c;并賦值到相應實體對象里去。 Map中KEY去除下劃線并首字母轉換為大寫&…

算法提高之矩陣距離

算法提高之矩陣距離 核心思想&#xff1a;多源bfs 從多個源頭做bfs&#xff0c;求距離 先把所有1的坐標存入隊列 再把所有1連接的位置存入 一層一層求 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1…

Kafka 面試題(八)

1. Kafka&#xff1a;硬件配置選擇和調優的建議 &#xff1f; Kafka的硬件配置選擇和調優是確保Kafka集群高效穩定運行的關鍵環節。以下是一些建議&#xff1a; 硬件配置選擇&#xff1a; 內存&#xff08;RAM&#xff09;&#xff1a;建議至少使用32GB內存的服務器。為Kafk…

Web3Tools - 助記詞生成

Web3Tools - 助記詞生成工具 本文介紹了一個簡單的助記詞生成工具&#xff0c;使用 React 和 Material-UI 構建。用戶可以選擇助記詞的語言和長度&#xff0c;然后生成隨機的助記詞并顯示在頁面上 功能介紹 選擇語言和長度&#xff1a; 用戶可以在下拉菜單中選擇助記詞的語言&…

uniapp 圖片添加水印代碼封裝(優化版、圖片上傳壓縮、生成文字根據頁面自適應比例、增加文字背景色

uniapp 圖片添加水印代碼封裝(優化版、圖片上傳壓縮、生成文字根據頁面自適應比例、增加文字背景色 多張照片上傳封裝 <template><view class"image-picker"><uni-file-picker v-model"imageValue" :auto-upload"false" :title…

關于服務端接口知識的匯總

大家好&#xff0c;今天給大家分享一下之前整理的關于接口知識的匯總&#xff0c;對于測試人員來說&#xff0c;深入了解接口知識能帶來諸多顯著的好處。 一、為什么要了解接口知識&#xff1f; 接口是系統不同模塊之間交互的關鍵通道。只有充分掌握接口知識&#xff0c;才能…

http-server實現本地服務器

要實現一個本地服務器&#xff0c;你可以使用Node.js的http-server模塊。首先&#xff0c;確保你已經安裝了Node.js和npm。然后&#xff0c;按照以下步驟操作&#xff1a; 打開終端或命令提示符&#xff0c;進入你想要作為服務器根目錄的文件夾&#xff1b;運行以下命令安裝ht…

Axure PR 10 制作頂部下拉三級菜單和側邊三級菜單教程和源碼

在線預覽地址&#xff1a;Untitled Document 2.側邊三級下拉菜單 在線預覽地址&#xff1a;Untitled Document 文件包和教程下載地址&#xff1a;https://pan.quark.cn/s/77e55945bfa4 程序員必備資源網站&#xff1a;天夢星服務平臺 (tmxkj.top)

Linux x86_64 dump_stack()函數基于FP棧回溯

文章目錄 前言一、dump_stack函數使用二、dump_stack函數源碼解析2.1 show_stack2.2 show_stack_log_lvl2.3 show_trace_log_lvl2.4 dump_trace2.5 print_context_stack 參考資料 前言 Linux x86_64 centos7 Linux&#xff1a;3.10.0 一、dump_stack函數使用 dump_stack函數…

Unity開發中導彈路徑散射的原理與實現

Unity開發中導彈路徑散射的原理與實現 前言邏輯原理代碼實現導彈自身腳本外部控制腳本 應用效果結語 前言 前面我們學習了導彈的追蹤的效果&#xff0c;但是在動畫或游戲中&#xff0c;我們經常可以看到導彈發射后的彈道是不規則的&#xff0c;扭扭曲曲的飛行&#xff0c;然后擊…

數字生態系統的演進與企業API管理的關鍵之路

數字生態系統的演進與企業API管理的關鍵之路 在數字化時代&#xff0c;企業正經歷著一場轉型的浪潮&#xff0c;而API&#xff08;應用程序編程接口&#xff09;扮演著至關重要的角色。API如同一座橋梁&#xff0c;將組織內部的價值轉化為可市場化的產品&#xff0c;從而增強企…