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

關鍵詞: