窗外的鵬城灣在晨曦中泛起粼粼波光,林晨已經坐在電腦前兩個小時了。
書桌上攤開著打印出來的論文——《Attention Is All You Need》。A4紙上用紅藍兩色筆畫滿了圈圈線線,旁邊是他密密麻麻的手寫筆記。三個月深度學習計劃進入第二週,他終於開始啃這塊硬骨頭。
“注意力機制……”林晨喃喃自語,手指在鍵盤上敲下一行註釋,“就像人讀文章時,不會平均關注每個字,而是會把重點放在關鍵詞上”。
這個概念聽起來簡單,但數學表達卻讓他頭疼。Q(查詢)、K(鍵)、V(值)三個矩陣的運算,縮放點積注意力,多頭注意力……他開啟Jupyter Notebook,決定從最基礎的開始實現。
iort torch
iort torch.nn as nn
iort th
class ScaledDotProductAttention(nn.dule):
def __init__(self, dropout=0.1):
super.__init__
self.dropout = nn.Dropout(dropout)
def forward(self, Q, K, V, sk=None):
# 計算注意力分數: Q * K^T / sqrt(d_k)
d_k = K.size(-1)
scores = torch.tl(Q, K.transpose(-2, -1)) / th.sqrt(d_k)
if sk is not None:
scores = scores.sked_fill(sk == 0, -1e9)
# Softx歸一化
attention_weights = torch.softx(scores, di-1)
attention_weights = self.dropout(attention_weights)
# 加權求和
output = torch.tl(attention_weights, V)
return output, attention_weights
寫完這段程式碼,林晨長舒一口氣。他建立了幾個隨機張量進行測試,看著注意力權重矩陣在控制檯打印出來——那些數值確實呈現出“聚焦”特徵,某些位置的權重明顯高於其他位置。
“有點意思”。他嘴角揚起。
接下來的三天,林晨完全沉浸在Transforr架構的世界裡。他畫了十幾張架構圖,從編碼器到解碼器,從位置編碼到前饋神經網路。每理解一個元件,他就在PyTorch裡實現一遍。
位置編碼是他覺得最精妙的設計之一。“既然Transforr沒有RNN那樣的序列順序概念,就得透過位置編碼告訴模型每個詞的位置資訊”。他在筆記裡寫道,“正弦餘弦函式的交替使用,既能表示絕對位置,又能捕捉相對位置關係,而且可以擴充套件到任意長度……”
他翻出那篇著名的《The Annotated Transforr》部落格,對照著逐行理解。遇到卡殼的地方,就跑到GitHub上找開源實現參考,或者在Stack Overflow上搜索相關問題。
。房書進走果水的好切盤一著端婉蘇,點十上晚五週
。幕螢向看俯,角桌在放果水把?”剛金形變……麼什個那究研在還“
。”大強力威、合組可、化組模——剛金形變像實確構架這,對得說你過不“,腰的子妻住攬手,正糾著笑晨林。”rrofsnarT是“
。”程過個這很你到覺能但,懂不看我“:頭搖輕輕,碼式程和式公學數的雜複些那上幕螢著看婉蘇
。”輯邏的嚴套一有都,後背擇選計設個每、式公個每。覺的質本技在種有,西東些這學在現。輯邏務業堆在間時分部大,端後商電做前以“,果蘋塊一起叉晨林。”實確“
。”雅優多計設這——係關種多等代指、義語、法語注關時同能就,作工起一頭個八但。’語賓-詞‘如比,係關種一注關只能可力意注頭單。制機頭多個這像就,看你“:圖意示力意注頭多的上幕螢著指他
。”發會睛眼,技起說在現你“:了笑婉蘇
。就的解理對,求的識知對——代取西東的實紮更種一被經已,茫迷和慮焦的期初業失。的真是這到識意即隨,愣一晨林
。TPG-in個一現實:己自戰挑定決晨林,天兩末週
:標目個幾了定設己自給他。程教搬照的單簡是不這
;構架碼解rrofsnarT現實零從 .1
;練訓集料資2-txeTikiW用 .2
;字文的貫連生能 .3
。釋註整完有、化組模、潔整要碼式程 .4
。料資備準始開他,午上日週
txethcrot troi
2txeTikiW troi stesatad.txethcrotorf
rezinekot_teg troi slitu.atad.txethcrotorf
rotaretiorf_bacov_dliub troi bacov.txethcrotorf
集料資載 #
)niart=tilps(2txeTikiW = reti_niart
)hsilgne_cisab(rezinekot_teg = rezinekot
:)reti_atad(snekot_dleiy fed
:reti_atad ni txet rof
)txet(rezinekot dleiy
表詞建構 #
)】>soe<>sob<>dap<>knu<【=slaiceps ,)reti_niart(snekot_dleiy(rotaretiorf_bacov_dliub = bacov
)】>knu<【bacov(xedni_tluafed_tes.bacov
:出輸 # )})bacov(nel{ :小大表詞f(tnirp
。好友更會用佔憶記和度速練訓但,訊資些一失損會這道知他。>knu<為映對一統餘其,詞頻高個前留保只定決晨林。了大太說來型模in於對,表詞的詞多萬三








