還在用 RNN 作 NLP ?NLP迎來新紀元了!快來學習下如今最火的BERT用的Transformer模型吧。 谷歌團隊在18年提出的用於生成詞向量的BERT算法在NLP的11項任務中取得了效果的大幅提高,堪稱2018年深度學習領域最振奮人心的消息。而BERT算法的最重要的部分谷歌團隊在17年發表的論文《Attention Is All You Need》中提出的Transformer的概念。 首先咱們來複習下基於RNN的Seq2Seq模型中的attention機制,來經過下面的動畫來大概瞭解下attention機制是用來幹嗎的。 在機器翻譯中經常使用的 Seq2Seq 模型中,加入 attention 機制是將每個 encoder 的 RNN 的隱層都傳遞給decoder ,decoder 再作以下的 attention 分析, 前端
下圖是 attention 分析的細節:
Attention 機制就是將decoder 的 hidden state 和與每個encoder的hidden state 的作一個匹配程度的分析,而後給出一個評分,這裏評分的機制有不少,能夠用一個小的網絡也能夠用線性計算,而後將這些score 用Softemax歸一化,再和相對應的hi相乘,再把全部的hi累加起來造成新的hidden state。也就是說,評分高的hidden state所佔的比重多,評分低的就佔比少。
先初始化一個hidden state 和一個 end 標記的向量做爲輸入,獲得一個hidden state: h4, 再把h4 和以前在encoder裏面獲得的全部隱藏狀態h1,h2,h3作attention分析,獲得最後的C4,而後將C4和h4 拼起來一塊兒輸入到一個前饋網絡獲得第一個詞的輸出。接下來就是將第一層的輸出和獲得的h4,做爲下一層的輸入,作一樣的操做,一直這樣繼續下去直到輸出 end 標記。
<br />在對 attention 有一個大概的概念以後,咱們來正式講下這篇論文,論文做者提出了一個Transformer 的模型,這個模型的特色主要在它是徹底基於 attention 機制來作 NLP,直接放棄了RNN和CNN,也就是爲何這篇論文叫Attention Is All You Need的緣由。放棄了RNN以後有一個很大的好處就是整個模型在訓練的時候有更好的並行性,訓練時間能夠大大減小,由於用RNN模型的時候在encoder裏面單詞都要一個一個順序輸入,而在若是用Transformer能夠直接輸入一句句子。模型結構以下圖所示:<br /> ![Transformer-model.png](https://cdn.nlark.com/yuque/0/2019/png/388662/1566874806977-60036b11-a127-41b1-908d-b33e0ac499c3.png#align=left&display=inline&height=481&name=Transformer-model.png&originHeight=1154&originWidth=1113&size=106833&status=done&width=464)<br />這個模型看上去很複雜,其實相對於RNN,要更簡單一點,下面咱們一點一點講。<br />在Transformer中一樣的有 encoders 和 decoders,encoder 對輸入進行編碼,decoder 對編碼獲得的結果進行解碼,下圖以黑盒的形式表現了模型的主要結構,輸入被傳輸進 encoder,encoder 會傳出一部份內容到 decoder,也會傳一部份內容到下一層的 encoder,encoder 和 decoder 都有一個 Self-Attention 模塊和 一個前饋網絡模塊,decoder 比 encoder 多一個 Encoder-Decoder Attention 模塊,<br /> ![Transformer_decoder.png](https://cdn.nlark.com/yuque/0/2019/png/388662/1566875060404-274cfa84-59ec-4dea-891c-ba7c8abc7a8b.png#align=left&display=inline&height=178&name=Transformer_decoder.png&originHeight=279&originWidth=879&size=38751&status=done&width=560)<br />這裏的 Self-Attention 模塊是整個結構的核心,咱們先用一個例子來幫助你們理解下什麼是Self-Attention:<br />這裏有句句子:The animal didn't cross the street because it was too tired <br />要讓計算機理解這句句子,須要讓計算機搞清楚裏面的
複製代碼
it 是指代那個單詞,是street仍是animal?也就是給輸入的句子中每一個單詞之間一個相關性程度的斷定。前文RNN的例子中的attention是輸入與輸出之間的attention,而self-attention是句子內部之間的attention。經過attention機制咱們能夠獲得以下圖的詞彙之間的關聯程度,It與The animal關聯程度最高。