Pine發(fā)自凹非寺量子位|公眾號(hào)Qbit@I真正零門檻!小白都能輕松看懂的Transformer教程來(lái)了。在自然語(yǔ)言處理和計(jì)算機(jī)視覺(jué)領(lǐng)域,Transf
Pine 發(fā)自 凹非寺
量子位 | 公眾號(hào) Qbit@I
(相關(guān)資料圖)
真正零門檻!小白都能輕松看懂的Transformer教程來(lái)了。
在自然語(yǔ)言處理和計(jì)算機(jī)視覺(jué)領(lǐng)域,Transformer先后替代了RNN、CNN的地位成為首選模型,最近爆火的ChatGPT也都是基于這個(gè)模型。
換言之,想進(jìn)入機(jī)器學(xué)習(xí)的領(lǐng)域,就必須得懂Transformer。
這不,量子位就發(fā)現(xiàn)了一篇零基礎(chǔ)也能學(xué)的教程,作者是前微軟、Facebook首席數(shù)據(jù)科學(xué)家,也是MIT機(jī)械工程的碩博士,從視覺(jué)化矩陣乘法開(kāi)始,帶你一步步入門。
DeepMind研究科學(xué)家@ndrew Trask也轉(zhuǎn)發(fā)評(píng)論道:
這是我至今見(jiàn)過(guò)最好的教程,它對(duì)入門者非常非常友好。
這條帖子也是掀起了一陣熱度,瀏覽量已經(jīng)有近30w。
網(wǎng)友們也紛紛在評(píng)論區(qū)作出“碼住”狀。
從視覺(jué)化矩陣乘法開(kāi)始學(xué)
因?yàn)檫@是一個(gè)新手入門的教程,所以在正式學(xué)Transformer之前,會(huì)有很多介紹矩陣乘法和反向傳播的內(nèi)容。
并且在介紹的過(guò)程中,作者逐個(gè)添加學(xué)習(xí)Transforme所需要了解的概念,并加以解釋。
具體有多新手友好,我們先來(lái)淺看下這篇教程~
基礎(chǔ)概念解釋
首先,了解Transformer的第一步就是編碼,就是把所有的單詞轉(zhuǎn)換成數(shù)字,進(jìn)而可以進(jìn)行數(shù)學(xué)計(jì)算。
一般來(lái)說(shuō),將符號(hào)轉(zhuǎn)換為數(shù)字的有效方法是先對(duì)所有單詞符號(hào)分配數(shù)字,每個(gè)單詞符號(hào)都會(huì)對(duì)應(yīng)一個(gè)獨(dú)立的數(shù)字,然后單詞組成的句子便可以通過(guò)數(shù)字序列來(lái)表示了。
舉個(gè)簡(jiǎn)單的例子,比如files=1、find=2和my=3。然后,句子“ Find my files”可以表示為數(shù)字序列[2,3,1]。
不過(guò)這里介紹的是另外一種方法,即獨(dú)熱編碼。
具體來(lái)說(shuō),就是將單詞符號(hào)轉(zhuǎn)換成一個(gè)數(shù)組,這個(gè)數(shù)組中只能有一個(gè)1,其他全為0。還是上面那個(gè)例子,用這種方式表示的話如下圖。
這樣一來(lái),句子“Find my files”就變成了一維數(shù)組的序列,壓縮到一塊也就像是二維數(shù)組了。
接下來(lái)就要再來(lái)了解下點(diǎn)積和矩陣乘法了。
點(diǎn)積這里也就不再過(guò)多贅述,元素相乘再相加便可以了。
它有兩個(gè)作用,一個(gè)是用來(lái)度量?jī)蓚€(gè)單詞之間的相似性,一個(gè)是顯示單詞的表示強(qiáng)度。
相似性很容易判別,一個(gè)單詞的獨(dú)熱矢量和自己的點(diǎn)積是1,和其他的點(diǎn)積為0.
至于表示強(qiáng)度,和一個(gè)能夠表示不同權(quán)重的值向量進(jìn)行點(diǎn)乘便可以了。
矩陣乘法,看下面這幅圖便足矣。
從簡(jiǎn)單的序列模型開(kāi)始介紹
了解完這些基礎(chǔ)概念之后,就要步入正軌了,開(kāi)始學(xué)習(xí)Transformer是如何處理命令的。
還是用例子來(lái)解釋,開(kāi)發(fā)NLP計(jì)算機(jī)界面時(shí),假設(shè)要處理3種不同的命令
Show me my directories please.(請(qǐng)給我看看我的目錄)
Show me my files please.(請(qǐng)給我看看我的檔案)
Show me my photos please.(請(qǐng)給我看看我的照片)
可以用下面這個(gè)流程圖(馬爾可夫鏈)來(lái)表示,箭頭上的數(shù)字表示下一個(gè)單詞出現(xiàn)的概率。
接下來(lái)解釋將馬爾可夫鏈轉(zhuǎn)換為矩陣形式了,如下圖。
每一列代表一個(gè)單詞,并且每一列中的數(shù)字代表這個(gè)單詞會(huì)出現(xiàn)的概率。
因?yàn)楦怕屎涂偸菫?,所以每行的數(shù)字相加都為1。
以my為例,要想知道它的下一個(gè)單詞的概率,可以創(chuàng)建一個(gè)my的獨(dú)熱向量,乘上面的轉(zhuǎn)移矩陣便能得出了
再然后,作者又詳細(xì)介紹了二階序列模型,帶跳躍的二階序列模型,掩碼。
至此,關(guān)于Transformer,已經(jīng)學(xué)到了最核心的部分,至少已經(jīng)了解了在解碼時(shí),Transformer是如何做的。
不過(guò)了解Transformer工作的原理和重新建造Transformer模型之間還是有很大差距的,后者還得考慮到實(shí)際情況。
因此教程中還進(jìn)一步展開(kāi),作了更大篇幅的學(xué)習(xí)教程,包括Transformer最重要的注意力機(jī)制。
換句話說(shuō),這個(gè)教程就是從最基礎(chǔ)的東西教我們重新構(gòu)建一個(gè)Transformer模型。
更加具體內(nèi)容就不在這里一一列出了,感興趣的朋友可以戳文末鏈接學(xué)習(xí)。
目錄先放在這里,可以根據(jù)自己的基礎(chǔ)知識(shí)選擇從哪個(gè)階段開(kāi)始學(xué)起:
1、獨(dú)熱(one-hot)編碼2、點(diǎn)積3、矩陣乘法4、矩陣乘法查表5、一階序列模型6、二階序列模型7、帶跳躍的二階序列模型—-分割線—-(學(xué)完上面這些,就已經(jīng)把握住Transformer的精髓了,不過(guò)要想知道Transformer,還得往下看)8、矩陣乘法中的注意力9、二階矩陣乘法序列模型10、完成序列11、嵌入12、位置編碼13、解除嵌入14、softmax函數(shù)15、多頭注意力機(jī)制16、使用多頭注意力機(jī)制的原因17、重現(xiàn)單頭注意力機(jī)制18、多頭注意力塊之間的跳過(guò)連接19、橫向規(guī)范化(Layer normalization)20、多注意力層21、解碼器堆棧22、編碼器堆棧23、編碼器和解碼器棧之間的交叉注意塊—-又一個(gè)分割線—-(如果你學(xué)到這里,那說(shuō)明Transformer你已經(jīng)掌握得差不多了,后面講的東西就是關(guān)于如何讓神經(jīng)網(wǎng)絡(luò)表現(xiàn)良好了)24、字節(jié)對(duì)編碼(?yte pair encoding)
作者介紹
?randon Rohrer,目前是Linkedin的一名機(jī)器學(xué)習(xí)工程師,曾先后在微軟,F(xiàn)acebook擔(dān)任首席數(shù)據(jù)科學(xué)家。
在Facebook工作期間,他建立了一種更精確的電網(wǎng)映射預(yù)測(cè)模型,以評(píng)估全球的中壓電網(wǎng)的連通性和路由。
寫教程算是?randon的一大愛(ài)好了,目前他所有的教程都不斷更新在他的新書(shū)《如何訓(xùn)練你的機(jī)器人》中,帖子的跨度從職業(yè)發(fā)展到各種編程工具的介紹。
傳送門:https://e2eml.school/transformers.html#softmax更多教程:https://e2eml.school/blog.html
— 完 —
量子位 Qbit@I · 頭條號(hào)簽約
關(guān)鍵詞: