目錄鏈接:吳恩達Deep Learning學(xué)習(xí)筆記目錄
?1.循環(huán)序列模型
?2.自然語言處理與詞嵌入
?3.序列模型和注意力機制
1. 循環(huán)序列模型
??序列模型所要解決的問題是,如何來處理具有序列化特點的數(shù)據(jù)。如下圖,是序列化數(shù)據(jù)及我們需要從序列化數(shù)據(jù)中所獲取的結(jié)果。如在一段音頻中,音頻是按時序播放的,無論是音頻中的單詞還是音調(diào),都是有序的,如果希望從一段音頻中,將其說說的話轉(zhuǎn)化為一個文字性的描述,這是一個序列化到序列化的過程。??1.1 符號約定
??如下圖是一個最簡單的序列描述:
??一種最粗暴的方法是,如下圖所示,構(gòu)建一個詞表(現(xiàn)假設(shè)10000詞),通過one-hot對每個單詞進行編碼,將單詞數(shù)字化。這樣的編碼簡單有效,但存在幾個問題,①每個單詞的編碼長度與詞表長度等長,而且非常稀疏,計算代價太高;②通過one-hot編碼后,相鄰單詞之間距離相同,每個單詞獨立,這將造成語義相近的單詞之間毫無關(guān)聯(lián)。
??1.2 循環(huán)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
??如果采用一個標準的神經(jīng)網(wǎng)絡(luò)來處理文本序列,如下圖,相對于將每個詞向量作為一個特征,將整個句子作為一個樣本作為輸入,而輸出是一個與句子等長的向量。這樣的模型存在兩個問題:①輸入和輸出長度恒等,但在實際的文本序列中,基本上每個樣本的長度是不等的;②在文本的不同位置特征是不共享的,而在標準網(wǎng)絡(luò)中統(tǒng)計的位置信息,而這些位置上的特征類似(如可能在標準網(wǎng)絡(luò)中輸出是在2-5,10-15等這些位置上大概率是人名,但在實際文本中,人名可能出現(xiàn)在任何主語、賓語的位置,而標準網(wǎng)絡(luò)無法推斷語義結(jié)構(gòu)及其語義)。
??1.3 循環(huán)神經(jīng)網(wǎng)絡(luò)反向傳播
??首先,在前向傳播過程中,將相同的參數(shù)Wa、Wy都賦予給每一步的計算,向前依次計算每個詞的預(yù)測結(jié)果和loss,然后將每個詞的loss求和得到Loss。反向時,通過Loss反向傳遞給每個loss,每個loss傳遞給每個預(yù)測值,每個預(yù)測值再傳遞給Wa和Wy。??1.4 不同類型循環(huán)神經(jīng)網(wǎng)絡(luò)
??前述過程中,是輸出一個與輸入序列等長的輸出,而在實際問題中,輸出的長很可能與輸入序列長度不同。如文本情感評價中,文本是一個長序列,而輸出只是一個評分。又如將一句英語翻譯為一句漢語,輸入序列長度一般與輸出不等。在人名識別中是一種多對多的結(jié)構(gòu),而在文本評分中則是一個多對一的結(jié)構(gòu)(如輸入影評,對該影評預(yù)測一個評分作為對電影的評分),此外還有一對一,一對多的情況。而多對多的還有一種情況,如翻譯過程:??1.5 語言模型和序列生成
??給出一個語料庫(包含很多句子),基于語料庫的訓(xùn)練,在輸入一個詞后,如何自動生成文本?通過RNN可以實現(xiàn)這個功能。首先對句子的標記進行處理,對于未出現(xiàn)在詞表中的單詞通過<UNK>來標記,句子結(jié)束通過<EOS>來標記。句子的單詞通過yt標記。模型在t時刻的輸入為上一時刻的輸出a和上一時刻輸出的y(y為在此位置出現(xiàn)概率最大的詞)。在訓(xùn)練過程中輸入的y為訓(xùn)練樣本中上一個單詞,在預(yù)測過程則為上一時刻預(yù)測輸出。每一時刻的輸出是基于前面所有出現(xiàn)單詞的條件概率。
??1.6 對新序列采樣
??前述方法中,對于每一個單詞,預(yù)測的輸出是詞表中每個單詞出現(xiàn)的概率分布,而此時我們選擇了概率值最大作為輸出,那么輸出只有一種情況。另一種方法是在每一時刻的輸出的概率分布中進行隨機抽樣作為該時刻的預(yù)測輸出,隨后作為下一時刻的輸入,此時生成的文本將會有很多可能性:另一種文本生成時采用的詞表將不再是以單詞為一個預(yù)測單位,而是將字符作為預(yù)測單位,這樣做的好處是,將不用處理未知的單詞或字符串,但缺點是可能會得到太多太長的序列,且基于字符的模型在捕捉前后文的關(guān)系上不如基于詞匯的模型。
??1.7 GRU單元
?? RNN雖然可以處理序列問題,并在處理過程中來捕捉其他時刻的信息,但其只能捕捉到近期的信息,對于更遠的信息難以捕捉(難以記憶下來),而且隨著序列長度的增加,如同深層神經(jīng)網(wǎng)絡(luò)一般,容易出現(xiàn)梯度消失問題。而采用門控單元(GRU)可以有效增加捕捉信息的深度、改善梯度消失問題。
??GRU是通過一個增加一個記憶單元來作為門控,控制是否更新輸入到t時刻的上一時刻的輸出。如下圖所示,將a替換為c,作為記憶細胞,在當前時刻,①根據(jù)公式(1)計算新的c;②根據(jù)公式(2)計算門控值(輸出為1或0);③根據(jù)公式(3),通過門控值來決定這一時刻計算的輸出信息是新的c還是上一時刻的c。比如在句子The cat,which already ate...,was full.
中,在cat位置處門控值為1,表示更新c(相當于將cat的信息記錄下來,擦除之前的信息),在中間部分,門控值均為0,表示不更新c(在這一過程中,一直記錄的是cat的信息),直到was位置(在此處需要使用到cat是否為單復(fù)數(shù)的信息,此后不再需要),門控值為1,表示更新信息c。實際上Γ的計算值并不實際為0和1,而是逼近這兩個值,但也能起到類似的效果,同時避免了梯度消失的問題。
??1.8 LSTM
?? 在GRU中含兩個門控(更新門及在前述基礎(chǔ)上增加更相關(guān)性門Γr)和一個輸出單元,而在LSTM中含三個門控(跟新門、遺忘門和輸出門)和輸出單元,其中,遺忘門代替了GRU中的(1-Γu),同時通過輸出門來進一步控制了輸出信息。這解決GRU僅記憶某時刻信息的問題(實際上門控值不嚴格為0,那么實際上其他時刻的信息也會被記錄),在LSTM中通過更新門和遺忘門將不同時刻的信息記錄下來(有選擇的記憶)。??1.9 雙向RNN
?? 前述的RNN是單向的,其存在一個問題,僅能夠參考前面時刻的信息來作出預(yù)測,而對于后續(xù)的信息沒有加入預(yù)測。即僅處理了上文,未處理下文,這是不合理的。如下兩個句子:
He said,"Teddy bears are on sale"
He said,"Teddy Roosevelt was a great President"
?? 顯然第一個句子中Teddy不是一個人名,而在第二個句子中則是一個人名,但是僅僅通過前三個單詞,實際上是無法對Teddy是不是人名分別對兩個句子作出準確預(yù)測的。而雙向RNN則是將后續(xù)信息也加入到預(yù)測過程中來,從而解決這個問題。
??1.10 深層RNN
?? 類似深層神經(jīng)網(wǎng)絡(luò),RNN也可以進行堆疊來實現(xiàn)深層的RNN:2.自然語言處理與詞嵌入
??2.1 詞匯表征
?? 前述中詞匯的表征是通過one-hot來表示,其存在一個缺點就是將每個單詞孤立起來了,對于相關(guān)性的詞泛化能力很弱,比如無法推斷男人和女人具有相關(guān)性,如句子I want a glass of orange _____?
,空格處如果學(xué)習(xí)到填juice
,但是如果將orange
替換為apple
,可能模型就不知道空格處需要填寫juice
。因為在one-hot編碼中,如果要計算兩個詞的相關(guān)性,兩個向量的內(nèi)積總是為0,所有詞匯之間相關(guān)性都為0,或者說都沒有相關(guān)性。
?? 現(xiàn)在,如果我們采用其他表征,以使得具有相關(guān)性的詞表達之間的內(nèi)積較大,而不具相關(guān)性的詞表達之間內(nèi)積較小,那么就可以改善上述問題,如下圖,倘若,將一個詞在300個特性上進行賦值來表達一個詞(特征化):
??2.1 詞匯表征
?? (1)詞嵌入的特性:學(xué)習(xí)類比關(guān)系
??詞嵌入的方法可以另模型基于詞的相關(guān)性進行推理,如,基于學(xué)習(xí)了man和woman之間的關(guān)系,能否推導(dǎo)出king對應(yīng)什么?如下圖,設(shè)詞嵌入維度為4,man和woman兩個詞向量之差約為[-2,0,0,0],而我們發(fā)現(xiàn)king和queen之差,在各個維度上與man—woman相近,那么根據(jù)man-woman關(guān)系,推導(dǎo)出king對應(yīng)queen:
?? (2)詞嵌入矩陣
??詞嵌入矩陣是一個二維的矩陣,第一個維度是特征化數(shù)量,第二個維度是詞數(shù)量,將一個詞嵌入矩陣乘以一個詞的one-hot的編碼,即得到該詞匯的詞嵌入表達:
?? (3)學(xué)習(xí)詞嵌入
??學(xué)習(xí)詞嵌入就是學(xué)習(xí)詞嵌入矩陣。通過構(gòu)建語言模型,抽取上下文與目標詞進行監(jiān)督學(xué)習(xí)以獲得詞嵌入矩陣,能夠達到較好的效果。通過one-hot編碼乘以詞嵌入矩陣E得到詞向量,一般截取需預(yù)測詞前幾個詞,將其詞向量輸入神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,來優(yōu)化E。
?? (4)Word2vec
??NNLM
(生成連續(xù)詞向量后輸出一個非線性隱層和softmax層,將連續(xù)詞向量映射為長度為V(詞表數(shù)量)的概率分布向量,從而計算上下文條件概率)
存在一些問題:①只能處理定長的序列(截取的上下文詞數(shù)量固定);②訓(xùn)練速度太慢。在NNLM模型中,首先是通過簡單的模型來訓(xùn)練出連續(xù)的詞向量,隨后將連續(xù)的詞向量輸入到神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練,模型的計算耗時主要在第二步中。由于我們只想得到連續(xù)的詞向量,那么對于第二步中的神經(jīng)網(wǎng)絡(luò)則可進行簡化。??word2vec思想中,移除了NNLM中的非線性隱層,直接將連續(xù)詞向量與softmax層連接(如上圖),忽略上下文序列信息,將所有詞匯總得到一個Embedding layer,將特征詞納入上下文環(huán)境(選取幾個詞),這得到的是CBow模型。CBow仍然是通過以context預(yù)測target word的過程來學(xué)習(xí)詞向量的表達。
??而skip-gram模型則是計算輸入word的詞向量表達與目標詞的輸出向量之間的余弦相似度并歸一化。個人理解為,θTt是目標詞通過softmax輸出的向量,與ec等長,即計算了target word輸出詞向量與context輸入詞向量之間的相似度:
參見NLP之——Word2Vec詳解
?? (5)負采樣
??前述模型中還是存在softmax計算過慢的問題,在負采樣算法中,首先構(gòu)造context-target詞對,如orange-juice將會被標記為正樣本1,而orange-其他詞,則會被標記為負樣本0.
?? (6)GloVe詞向量
??不同于word2vec,GloVe是基于全局詞頻統(tǒng)計的。Xij表示單詞i和congtext單詞j在特定大小context window內(nèi)共同出現(xiàn)的次數(shù),對于距離越遠的兩個單詞所占的總計算的權(quán)重越小。詞向量和共現(xiàn)矩陣之間的近似關(guān)系如下:
GloVe希望實現(xiàn)的是:
①
共現(xiàn)次數(shù)很多的詞的權(quán)重要大于很少共現(xiàn)的詞;
②
但這個權(quán)重不應(yīng)過大,應(yīng)達到一定程度后不再增加;
③
如果兩個單詞沒有共現(xiàn),即Xij=0,那么將不參與loss計算,即f(x)=0。
GloVe作者采樣了下述分段函數(shù)來滿足上述條件:
?? (7)情緒分類
??
?? (8)詞嵌入除偏
??根據(jù)語料庫來學(xué)習(xí)詞嵌入,實際上是一個學(xué)習(xí)單詞語義類比的過程(個人認為,錯誤求改)。基于語料庫的詞嵌入表達會造成很明顯的偏見,如Man對應(yīng)computer programmer,Woman對應(yīng)homemaker。明顯的反應(yīng)了現(xiàn)實中的性別、種族、年齡等偏見歧視:
3. 序列模型和注意力機制
??3.1 基礎(chǔ)模型
??(1)Seq2Seq
??在機器翻譯中采用的模型就是Seq2Seq,通過編碼→解碼的方式來進行序列到序列的轉(zhuǎn)換:
??
??3.2 選擇最可能的句子
??相對于語言模型,Seq2Seq中的Decoder與語言模型相近,不同之處是初始輸入的a被替換為Encoder的輸出,所以Seq2Seq是計算一個句子基于被翻譯句子的條件概率。在語言模型的生成文本中,希望的是生成各種各樣的文本,而在機器翻譯中則希望翻譯足夠準確,所以在Seq2Seq模型中不是隨機采樣輸出,而是輸出概率最大的句子。
貪心搜索法
。但是在機器翻譯中貪心法
不一定是最優(yōu)解,如下圖going
在英語中出現(xiàn)的頻率一般高于visiting
,所以在貪心法中很可能會得到下圖第二個句子的翻譯(相比第一個較差):??3.3 Beam search
??既然不能使用貪心法,也不能使用隨機法,也不可能將所有可能的組合都計算一遍(計算量太大)。那么。在第一時刻的輸出的詞,選取概率top B的詞,在第二時刻輸出時,將這B個詞與詞表中其他詞配對,再計算其概率,輸出其中概率top B的組合,重復(fù)下去,如下圖,B=3:
in september
、jane is
、jane visiting
那么,第一時刻中以September結(jié)尾的所有組合都拋棄。
??3.4 改善Beam search
??如果直接采用條件概率累乘的方式來最大化整個序列的概率,會存在兩個問題:①通常每一個條件概率都很小,累乘后得到的整體概率值將會非常小,會造成數(shù)值下溢問題;②由于每個條件概率都小于1,那么隨著序列長度增加,整體概率是減小的,所以翻譯會傾向于較短的翻譯;
??解決第一個問題的方法是將概率取對數(shù)求和,以避免上述兩個問題,但依然存在傾向短翻譯問題:由于每一條件概率都小于1,取對數(shù)后的值將為負數(shù),且隨序列增長,值越來越小,對數(shù)值越負,所以得到的整體結(jié)果是越來越負。
??3.5 Beam search誤差分析
????3.5 注意力模型
??在翻譯過程中,如果是人工翻譯,并不會像機器一樣通讀整個句子,然后記憶里面的東西,再去從0開始翻譯。而是會通過記憶句子部分,然后翻譯一部分。在前述的翻譯模型中,對于所需翻譯序列長度,其性能如下:
??注意力機制,將不再單獨使用Encoder的輸出直接整體輸入到Decoder中,如下圖,將會使Decoder中每一單元與Encoder中鄰近的一些單元相連,并添加注意力權(quán)重α:
??完結(jié)。