《AI時代:碼農的涅盤重生》第102章 深度學習進階(1)

作者:Flint8·54分鐘前

窗外的鵬城灣在晨曦中泛起粼粼波光,林晨已經坐在電腦前兩個小時了。

書桌上攤開著打印出來的論文——《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於對,表詞的詞多萬三

猜你喜歡

同題材或同分類的其他作品。