在本周大部分時間中,你都在使用這個編碼解碼的構(gòu)架(a Encoder-Decoder architecture)來完成機器翻譯。當(dāng)你使用RNN讀一個句子,于是另一個會輸出一個句子。我們要對其做一些改變,稱為注意力模型(the Attention Model),并且這會使它工作得更好。 注意力模型或者說注意力這種思想(The attention algorithm, the attention idea)已經(jīng)是深度學(xué)習(xí)中最重要的思想之一,我們看看它是怎么運作的。 像這樣給定一個很長的法語句子,在你的神經(jīng)網(wǎng)絡(luò)中,這個綠色的編碼器要做的就是讀整個句子,然后記憶整個句子,再在感知機中傳遞(to read in the whole sentence and then memorize the whole sentences and store it in the activations conveyed her)。 而對于這個紫色的神經(jīng)網(wǎng)絡(luò),即解碼網(wǎng)絡(luò)(the decoder network)將生成英文翻譯,Jane去年九月去了非洲,非常享受非洲文化,遇到了很多奇妙的人,她回來就嚷嚷道,她經(jīng)歷了一個多棒的旅行,并邀請我也一起去。 人工翻譯并不會通過讀整個法語句子,再記憶里面的東西,然后從零開始,機械式地翻譯成一個英語句子。 而人工翻譯,首先會做的可能是先翻譯出句子的部分,再看下一部分,并翻譯這一部分??匆徊糠郑g一部分,一直這樣下去。你會通過句子,一點一點地翻譯,因為記憶整個的像這樣的的句子是非常困難的。你在下面這個編碼解碼結(jié)構(gòu)中,會看到它對于短句子效果非常好,于是它會有一個相對高的Bleu分(Bleu score),但是對于長句子而言,比如說大于30或者40詞的句子,它的表現(xiàn)就會變差。 Bleu評分看起來就會像是這樣,隨著單詞數(shù)量變化,短的句子會難以翻譯,因為很難得到所有詞。對于長的句子,效果也不好,因為在神經(jīng)網(wǎng)絡(luò)中,記憶非常長句子是非常困難的。在這個和下個視頻中,你會見識到注意力模型,它翻譯得很像人類,一次翻譯句子的一部分。而且有了注意力模型,機器翻譯系統(tǒng)的表現(xiàn)會像這個一樣,因為翻譯只會翻譯句子的一部分,你不會看到這個有一個巨大的下傾(huge dip),這個下傾實際上衡量了神經(jīng)網(wǎng)絡(luò)記憶一個長句子的能力,這是我們不希望神經(jīng)網(wǎng)絡(luò)去做的事情。在這個視頻中,我想要給你們注意力機制運行的一些直觀的東西。然后在下個筆記中,完善細節(jié)。 注意力模型源于Dimitri, Bahdanau, Camcrun Cho, Yoshe Bengio。(Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.) 雖然這個模型源于機器翻譯,但它也推廣到了其他應(yīng)用領(lǐng)域。我認為在深度學(xué)習(xí)領(lǐng)域,這個是個非常有影響力的,非常具有開創(chuàng)性的論文。 讓我們用一個短句舉例說明一下,即使這些思想可能是應(yīng)用于更長的句子。 但是用短句來舉例說明,講解這些思想會更簡單。我們有一個很平常的句子:(法語)Jane visite l'Afrique en Septembre。假定我們使用RNN,在這個情況中,我們將使用一個雙向的RNN(a bidirectional RNN),為了計算每個輸入單詞的的特征集(set of features),你必須要理解輸出^y^(<1>)到^y^(<3>)一直到^y^(<5>)的雙向RNN。 但是我們并不是只翻譯一個單詞,讓我們先去掉上面的Y,就用雙向的RNN。我們要對單詞做的就是,對于句子里的每五個單詞,計算一個句子中單詞的特征集,也有可能是周圍的詞,讓我們試試,生成英文翻譯。 我們將使用另一個RNN生成英文翻譯,這是我平時用的RNN記號。我不用A來表示感知機(the activation),這是為了避免和這里的感知機(the activations)混淆。 我會用另一個不同的記號,我會用S來表示RNN的隱藏狀態(tài)(the hidden state in this RNN),不用A^(<1>),而是用S^(<1>)。我們希望在這個模型里第一個生成的單詞將會是Jane,為了生成Jane visits Africa in September。 于是等式就是,當(dāng)你嘗試生成第一個詞,即輸出,那么我們應(yīng)該看輸入的法語句子的哪個部分?似乎你應(yīng)該先看第一個單詞,或者它附近的詞。但是你別看太遠了,比如說看到句尾去了。所以注意力模型就會計算注意力權(quán)重(a set of attention weights),我們將用a^(<1,1>)來表示當(dāng)你生成第一個詞時你應(yīng)該放多少注意力在這個第一塊信息處。 然后我們算第二個,這個叫注意力權(quán)重,a^(<1,2>)它告訴我們當(dāng)你嘗試去計算第一個詞Jane時,我們應(yīng)該花多少注意力在輸入的第二個詞上面。同理這里是a^(<1,3>),接下去也同理。這些將會告訴我們,我們應(yīng)該花多少注意力在記號為C的內(nèi)容上。 這就是RNN的一個單元,如何嘗試生成第一個詞的,這是RNN的其中一步,我們將會在下個筆記中講解細節(jié)。對于RNN的第二步,我們將有一個新的隱藏狀態(tài)S^(<2>),我們也會用一個新的注意力權(quán)值集(a new set of the attention weights),我們將用a^(<2,1>)來告訴我們什么時候生成第二個詞, 那么visits就會是第二個標(biāo)簽了(the ground trip label)。 我們應(yīng)該花多少注意力在輸入的第一個法語詞上。然后同理a^(<2,2>),接下去也同理,我們應(yīng)該花多少注意力在visite詞上,我們應(yīng)該花多少注意在詞l'Afique上面。當(dāng)然我們第一個生成的詞Jane也會輸入到這里,于是我們就有了需要花注意力的上下文。第二步,這也是個輸入,然后會一起生成第二個詞,這會讓我們來到第三步S^(<3>),這是輸入,我們再有上下文C,它取決于在不同的時間集(time sets),上面的a^(<3>)。這個告訴了我們我們要花注意力在不同的法語的輸入詞上面。 然后同理。 有些事情我還沒說清楚,但是在下個筆記中,我會講解一些細節(jié),比如如何準確定義上下文,還有第三個詞的上下文,是否真的需要去注意句子中的周圍的詞。 這里要用到的公式以及如何計算這些注意力權(quán)重(these attention weights),將會在下個筆記中講解到。在下個筆記中你會看到a^(<3,t>),即當(dāng)你嘗試去生成第三個詞,應(yīng)該是l'Afique,就得到了右邊這個輸出,這個RNN步驟應(yīng)該要花注意力在t時的法語詞上,這取決于在t時的雙向RNN的激活值。 那么它應(yīng)該是取決于第四個激活值,它會取決于上一步的狀態(tài),它會取決于S^(<2>)。然后這些一起影響你應(yīng)該花多少注意在輸入的法語句子的某個詞上面。我們會在下個筆記中講解這些細節(jié)。但是直觀來想就是RNN向前進一次生成一個詞,在每一步直到最終生成可能是<EOS>。 這些是注意力權(quán)重,即a^(<t,t>)告訴你,當(dāng)你嘗試生成第t個英文詞,它應(yīng)該花多少注意力在第t個法語詞上面。當(dāng)生成一個特定的英文詞時,這允許它在每個時間步去看周圍詞距內(nèi)的法語詞要花多少注意力。 我希望這個筆記傳遞了關(guān)于注意力模型的一些直觀的東西。我們現(xiàn)在可能對算法的運行有了大概的感覺,讓我們進入到下個筆記中,看看具體的細節(jié)。 注意力模型參考: |
|