瞭解革命性的NLP深度學習模型
> Source: https://unsplash.com/photos/vuMTQj6aQQ0
如果你是想在這裡瞭解電影《變形金剛》的更多資訊,可悲的是,這不是你要找的文章。我和下一個傢伙一樣喜歡擎天柱和汽車人,但是在這裡,我將談論深度學習模型Transformer!
《Transformer》於2017年首次在論文《注意力就是所需要的》中推出,可在此處(https://arxiv.org/abs/1706.03762)找到。會看到標題所示。
它確實徹底改變了NLP世界,因此絕對應該瞭解有關的NLP的知識。問題是這不是容易理解的模型。
值得慶幸的是,在本文中,我將以簡單的術語介紹需要了解的所有內容,希望你能夠理解。讓我們開始吧!
瞭解Transformer為什麼和是什麼?你可能會問自己,我為什麼需要這個?我已經瞭解RNN和LSTM。這樣還不夠嗎?
這兩個模型的問題在於,序列越長,模型往往會忘記長期資訊。從理論上講,來自令牌的資訊可以沿序列傳播得很遠,但實際上,我們保留資訊的機率呈指數遞減,而與特定單詞的距離越遠。
這個概念稱為消失梯度。由於引入了"忘記門"功能,LSTM比RNN的效能更好,但它們在更大的序列上卻做不到。如果你感興趣的話,以下文章非常清楚地說明了這個問題:https://towardsdatascience.com/the-fall-of-rnn-lstm-2d1594c74ce0
那就是Transformer起作用的地方!在接下來的部分中,我將介紹它們的構建方式。
注意力(真正的自我注意)Transformer不使用遞迴的概念。相反,他們使用稱為自我注意的注意力機制。
那是什麼這個想法是,透過使用一個函式(按比例縮放的點積注意),我們可以學習上下文的向量,這意味著我們在序列中使用其他單詞可以更好地理解特定單詞。
看下圖。
> Source: http://jalammar.github.io/illustrated-transformer/
" it"一詞與" The"和" Animal"密切相關。現在,我們不僅擁有一個單詞作為資訊,而且還擁有與其他單詞的關聯。那隻會有助於做出預測。
在下面,我們將快速看到如何精確計算這種自我注意。
點積乘積注意有關《Tansformer》的原始論文的作者定義其注意力函式的輸出如下:
> Source: https://arxiv.org/pdf/1706.03762.pdf
可以將其定義為將查詢Q以及一對鍵值K和V表示為輸出的過程。
我想使事情保持簡單,因此這裡需要理解的是,將分配給V的權重計算為序列Q中的每個單詞在多大程度上受該序列的所有其他單詞K的影響。
代表序列長度的dk根除以確保較長的序列在經過softmax函式後不會將結果推向太小的梯度。
如果你不知道,可以使用softmax函式將輸出標準化為分佈(0,1)。
多頭注意力在介紹模型的體系結構之前,我想解釋最後一件事,即多頭注意。
這樣做的目的是使Q,K和V的8個不同表示(具有不同的隨機權重)並行透過注意力機制。之後,將結果彙總並轉換為注意力機制的預期輸出。一個影象值一千個字。
> Source: https://arxiv.org/pdf/1706.03762.pdf
這背後的直覺是,它允許模型以不同的方式學習不同的表示形式,這最終將給出更可靠的結果。
Transformer的架構現在我們瞭解了注意力的機制,讓我們看一下Transformer的體系結構。
> Source: https://arxiv.org/pdf/1706.03762.pdf
左邊是編碼器,右邊是解碼器。這裡顯示的是單個堆疊,但是請記住,在實際架構中,我們有6個相同的堆疊。
在編碼器中,我們有2個主要子層,即1個Multi-Head注意層和1個前饋層。編碼器的輸入是序列本身的嵌入。
解碼器與編碼器非常相似。但是,我們還有一個子層,即"蒙版多頭注意"層。為什麼這樣稱呼它?嗯,這僅僅是因為解碼器會"隱藏"將來的輸入,以確保在時間做出的預測僅取決於之前的已知資訊。解碼器將編碼器的輸出作為輸入。
位置編碼你可能在上圖中注意到的最後一件事是位置編碼。之所以在此介紹,是因為與LSTM和RNN不同,我們沒有重複發生的情況。單詞不是按順序方式處理的,而是作為一個整體進行處理的。
位置編碼可以解決此問題。它使模型可以知道單詞在序列中的位置,並考慮序列的總長度,以便獲得相對位置。
這是有道理的,因為該詞在句子中使用的位置(開頭或結尾)可以更改其含義。
預訓練模型近年來已經開發了預訓練模型,以促進Transformer的使用。使用這些模型可以節省大量的訓練時間,同時仍可獲得驚人的結果。
它是由Google的工程師於2018年建立的。它接受了超過25億個單詞的訓練,可用於執行任何NLP任務。擁有超過110M的引數,該模型非常龐大。
幸運的是,透過使用預訓練的模型,你可以簡單地在資料上或特定任務上對其進行"微調",從而獲得出色的結果。
汽車人,變形出擊!