Verilog HDL 訓練】第 03 天">【Verilog HDL 訓練】第 03 天
1108
2025-03-31
Transformer學習
細摳Transformer
Self-Attention詳解
如何計算encoder self attention?
muti-headed attention
用位置編碼表示句子的序列中詞的順序
殘差
Decoder 部分
最后的Linear和softmax層
基礎:Attention model
A High-Level Look
模型如何運作?
細摳Transformer
基礎:Attention model
attention model是從輸入句
輸入句中的每個文字是由一系列成對的
上圖(左)中Query和各個Key的相似性是score e_{ij}= Similarity(Query, Key_{i}),計算方法是內積,我們通過softmax算出Softmax(sim_{i})=a_{i}得到attention score a_{i},然后透過attention score a_{i}乘上Value_{i}的序列和加總所得 = Attention(Query, Source)。
A High-Level Look
首先把模型看做一個黑箱子:
在機器翻譯任務中,就是輸入一個語言的一句話,輸出另一語言對應的翻譯。
把黑箱子打開看:
我們可以看到一個編碼組件、一個解碼組件,和它倆之間的鏈接。
編碼組件就是一堆編碼器的堆疊(論文中用了6個),同樣解碼組件就是6個解碼器堆疊在一起。
編碼器之間參數不共享,每個編碼器可分解為兩層:
輸入數據首先流向一個自注意力層-這一層的作用是通過句子中的其他單詞,針對某個特定的詞進行編碼,自注意力層的輸出流入一個前饋的神經網絡,所以這樣每一個編碼器都重點關注輸入的句子中的某個詞。
一個decoder是在自注意力層和前饋網絡層中間再加一個attention layer
模型如何運作?
首先我們把輸入的單詞轉為詞向量。
編碼之后的詞向量再分別的流向encoder里面的兩層網絡。
Self-Attention詳解
我們輸入一句話:”The animal didn’t cross the street because it was too tired”。
“it”是指什么?動物?街道?自注意力機制的作用就是把“it”和“animal”聯系起來;
當模型處理每個詞的時候,自注意力機制將句子中的其他詞作為線索,針對某個特定的詞進行更好的編碼,所以自注意力機制其實就是通過句子中的其他單詞去理解某一個單詞的方法。
如何計算encoder self attention?
第一步是創造三個encoder的輸入向量Q,K,V,舉例來說,“Are you very big?”中的每一個字的隱向量都有各自的Q,K,V,是通過詞向量乘一個初始化矩陣得到,論文中是512維。Q,K,V的維數都比詞向量要小,論文中是64維。
第二步通過內積計算score
第三步是將算出的分數除以根號d_{k},論文中是64,目的是避免內積過大時,softmax產出的結果非0即1。然后第四步就是通過softmax得出attention score,表示在這個位置上我們應該放多少注意力。
第五步是用value vector乘以上面算出的softmax注意力得分,目的是保留我們集中注意力的單詞的value,同時稀釋那些不相關的詞的value。
第六步就是把上一步加權的value加總,得到自注意力層的輸出值z。
在實際操作中,是直接將每個文字同時處理,因此會變成一個矩陣,而非單一詞向量,計算后的結果attention vector也會變成attention matrix Z:
6. 計算Query, Key, and Value 矩陣:把通過訓練得到的權重矩陣(WQ, WK, WV)和詞向量X相乘
使用矩陣乘法,我們就能把前面計算self-attention的六步合并成一步:
muti-headed attention
論文在自注意力機制的基礎上又加了一個多頭注意力機制,這個機制從兩個方面增強了注意力層的表現:
增加了模型將注意力集中在多個不同位置的能力
muti-headed attention可以使我們擁有多組的 Query/Key/Value 權重矩陣(論文中是8組)。每一組都隨機初始化經過訓練之后,能夠將輸入的詞向量轉化為具有不同代表意義的子空間(different representation subspace)
通過將詞向量與8個不同的權重矩陣相乘,我們得到的事8個不同的Z矩陣
然而前饋層只處理一個矩陣而不是8個,所以我們要把8個壓縮成1個,方法就是再創造一個權重矩陣WO:
所以multi-headed attention整個流程串起來就是:
那么不同的attention head的注意力都集中在什么地方呢? 我們先看一個例子:
給“it”編碼時,一個attention head集中在“animal”,另一個集中在“tired”
但是當我們把全部的attention head都加上時,卻變得難以解釋:
用位置編碼表示句子的序列中詞的順序
Transformer 給每個輸入的詞向量又加了一個向量,這些向量的作用的定義每個詞在句子中的位置以及不同詞之間的距離:
假設位置向量是4維的,那么例子中的位置向量就長這樣:
那么為什么長這樣呢?
下圖中每行都代表一個字的位置向量,那么第一行就是位置中的第一個詞,每行是512維的向量,每個值都是-1-1之間。 可以看到在一半的位置(第255維左右),圖被劈了一半,因為左半邊的值是sine算的,右半邊用cosine算的;具體的可以自己看論文,代碼get_timing_signal_1d():
殘差
對于每個encoder里面的每個sub-layer,它們都有一個殘差的連接(不懂?),而且每個sub-layer后面還有一步 layer-normalization(不懂,以后再看)。
具體長這樣(不懂):
對于decoder模塊也是一樣的操作:
Decoder 部分
encoder部分說完了,decoder怎么工作也有了大致的了解,那么它倆是怎么一起工作的呢?
最后一層encoder的輸出會被轉化為一組attention vector:K和V。 然后這一組attention vector會再decoder層的encoder-decoder attention層被用到,目的是幫助decoder專注在輸入序列中合適的位置:
接著重復上面的步驟,直到decoder全部輸出完成
decoder中的self-attention layer和encoder中的有一點區別:在decoder中,自注意力層只能處理輸出序列中當前詞之前的序列,做法是在計算softmax之前把后面的詞都設成 -inf。
“Encoder-Decoder Attention”層就和multiheaded self-attention的運作方式一樣。
最后的Linear和softmax層
Linear層就是一個全連接網絡,作用是把decoder輸出的向量映射到一個大很多的logits 向量上。
比如模型從訓練集中學會10,000個英文單詞,那么logits vector就是10000維的,沒一維對應一個詞,記過softmax計算后輸出分數最高的那個詞就是這一步的輸出
相關Transformer必讀文章一:https://www.cnblogs.com/huangyc/p/9813907.html
相關Transformer必讀文章二:https://www.jianshu.com/p/feaf7138c847
相關Transformer必讀文章三(與本文區別):https://blog.csdn.net/qq_41664845/article/details/84969266
相關Transformer詳細原理必讀文章四:https://blog.csdn.net/randompeople/article/details/90651250
相關Transformer必讀文章五:https://blog.csdn.net/weixin_40005743/article/details/85460869
人工智能 AI
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。