昨天已經把歸一化的部分介紹完也實作完了,那其實還有很多歸一化的方法,就看自己使用的場景。
今天我們來把這兩周學過的做個總結,方便自己做個檢視,看自己哪有不熟,可以再次複習,一回生二回熟。
已學:
Question
可以花些時間回答上面的問題,如果你同學或朋友問你,你又應該如何簡單說明讓他聽得懂呢?
會特別在這停留一段時間,主要是因為我身為家教老師,很清楚知道看著別人寫的並不代表自己會,要能說明讓別人明白,才代表自己是真的會也才記得長久,也是我這個系列的初衷,讓你 "0 → 1"。
如果你對上面的問題卡卡的,會強烈建議你再次複習。
雖然只有短短兩周,但回過頭你已經學了很多東西,但其實我們還少了一點東西
參考文章: https://www.cnblogs.com/rossiXYZ/p/18744797
參考文章當中的程式
import torch
import torch.nn.functional as F
d = 8 # 词嵌入维度
l = 3 # 句子长度
q = torch.randn(1,d) # 我
k = torch.randn(l,d) # 我爱你
v = torch.randn(l,d) # 我爱你
orig_attn = F.softmax(q@k.transpose(1,0),dim=1)@v
# 调转位置
k_shift = k[[2,1,0],:] # 你爱我
v_shift = v[[2,1,0],:] # 你爱我
shift_attn = F.softmax(q@k_shift.transpose(1,0),dim=1)@v_shift
print('我爱你:',orig_attn)
print('你爱我:',shift_attn)
你會發現 attention 計算時,順序並不會影響答案,那就尷尬了,如果是這樣 attention 怎麼知道你想表達的意思是什麼,所以我們還缺少最後一塊拼圖"位置編碼",今天就先到這囉~ 明天繼續介紹位置編碼。