真正零門檻!小白都能輕松看懂的 Transformer 教程來了。
在自然語言處理和計算機視覺領域,Transformer 先後替代了 RNN、CNN 的地位成為首選模型,最近爆火的 ChatGPT 也都是基于這個模型。
換言之,想進入機器學習的領域,就必須得懂 Transformer。
這不,量子位就發現了一篇零基礎也能學的教程,作者是前微軟、Facebook 首席數據科學家,也是 MIT 機械工程的碩博士,從視覺化矩陣乘法開始,帶你一步步入門。
DeepMind 研究科學家 Andrew 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、字節對編碼(Byte pair encoding)
作者介紹
Brandon Rohrer,目前是 Linkedin 的一名機器學習工程師,曾先後在微軟,Facebook 擔任首席數據科學家。
在 Facebook 工作期間,他建立了一種更精确的電網映射預測模型,以評估全球的中壓電網的連通性和路由。
寫教程算是 Brandon 的一大愛好了,目前他所有的教程都不斷更新在他的新書《如何訓練你的機器人》中,帖子的跨度從職業發展到各種編程工具的介紹。
傳送門:
https://e2eml.school/transformers.html#softmax
更多教程:
https://e2eml.school/blog.html