Deep Models for Text and Sequence
轉(zhuǎn)載請(qǐng)注明作者:夢(mèng)里風(fēng)林
Github工程地址:https://github.com/ahangchen/GDLnotes
歡迎star,有問(wèn)題可以到Issue區(qū)討論
官方教程地址
Rare Event
與其他機(jī)器學(xué)習(xí)不同躬充,在文本分析里仲器,陌生的東西(rare event)往往是最重要的怒炸,而最常見(jiàn)的東西往往是最不重要的。
語(yǔ)法多義性
一個(gè)東西可能有多個(gè)名字,對(duì)這種related文本能夠做參數(shù)共享是最好的
需要識(shí)別單詞,還要識(shí)別其關(guān)系,就需要過(guò)量label數(shù)據(jù)
無(wú)監(jiān)督學(xué)習(xí)
不用label進(jìn)行訓(xùn)練蜜自,訓(xùn)練文本是非常多的,關(guān)鍵是要找到訓(xùn)練的內(nèi)容
遵循這樣一個(gè)思想:相似的詞匯出現(xiàn)在相似的場(chǎng)景中
不需要知道一個(gè)詞真實(shí)的含義卢佣,詞的含義由它所處的歷史環(huán)境決定
Embeddings
將單詞映射到一個(gè)向量(Word2Vec)重荠,越相似的單詞的向量會(huì)越接近
新的詞可以由語(yǔ)境得到共享參數(shù)
Word2Vec
將每個(gè)詞映射到一個(gè)Vector列表(就是一個(gè)Embeddings)里,一開(kāi)始隨機(jī)虚茶,用這個(gè)Embedding進(jìn)行預(yù)測(cè)
Context即Vector列表里的鄰居
目標(biāo)是讓W(xué)indow里相近的詞放在相鄰的位置戈鲁,即預(yù)測(cè)一個(gè)詞的鄰居
用來(lái)預(yù)測(cè)這些相鄰位置單詞的模型只是一個(gè)Logistics Regression尾膊, just a simple Linear model
Comparing embeddings
比較兩個(gè)vector之間的夾角大小來(lái)判斷接近程度,用cos值而非L2計(jì)算荞彼,因?yàn)関ector的長(zhǎng)度和分類(lèi)是不相關(guān)的:
最好將要計(jì)算的vector都?xì)w一化
Predict Words
單詞經(jīng)過(guò)embedding變成一個(gè)vector
然后輸入一個(gè)WX+b冈敛,做一個(gè)線性模型
輸出的label概率為輸入文本中的詞匯
問(wèn)題在于WX+b輸出時(shí),label太多了鸣皂,計(jì)算這種softmax很低效
解決方法是抓谴,篩掉不可能是目標(biāo)的label,只計(jì)算某個(gè)label在某個(gè)局部的概率寞缝,sample softmax
t-SNE
查看某個(gè)詞在embedding里的最近鄰居可以看到單詞間的語(yǔ)義接近關(guān)系
將vector構(gòu)成的空間降維癌压,可以更高效地查找最近單詞,但降維過(guò)程中要保持鄰居關(guān)系(原來(lái)接近的降維后還要接近)
t-SNE就是這樣一種有效的方法
類(lèi)比
實(shí)際上我們能得到的不僅是單詞的鄰接關(guān)系荆陆,由于將單詞向量化滩届,可以對(duì)單詞進(jìn)行計(jì)算
可以通過(guò)計(jì)算進(jìn)行語(yǔ)義加減,語(yǔ)法加減
Sequence
文本(Text)是單詞(word)的序列被啼,一個(gè)關(guān)鍵特點(diǎn)是長(zhǎng)度可變帜消,就不能直接變?yōu)関ector
CNN and RNN
CNN 在空間上共享參數(shù),RNN在時(shí)間上(順序上)共享參數(shù)
在每輪訓(xùn)練中浓体,需要判斷至今為之發(fā)生了什么泡挺,過(guò)去輸入的所有數(shù)據(jù)都對(duì)當(dāng)下的分類(lèi)造成影響
一種思路是記憶之前的分類(lèi)器的狀態(tài),在這個(gè)基礎(chǔ)上訓(xùn)練新的分類(lèi)器命浴,從而結(jié)合歷史影響
這樣需要大量歷史分類(lèi)器
重用分類(lèi)器娄猫,只用一個(gè)分類(lèi)器總結(jié)狀態(tài),其他分類(lèi)器接受對(duì)應(yīng)時(shí)間的訓(xùn)練生闲,然后傳遞狀態(tài)
RNN Derivatives
BackPropagation Through time
對(duì)同一個(gè)weight參數(shù)媳溺,會(huì)有許多求導(dǎo)操作同時(shí)更新之
對(duì)SGD不友好,因?yàn)镾GD是用許多不相關(guān)的求導(dǎo)更新參數(shù)碍讯,以保證訓(xùn)練的穩(wěn)定性
由于梯度之間的相關(guān)性悬蔽,導(dǎo)致梯度爆炸或者梯度消失
使得訓(xùn)練時(shí)找不到優(yōu)化方向,訓(xùn)練失敗
Clip Gradient
計(jì)算到梯度爆炸的時(shí)候冲茸,使用一個(gè)比值來(lái)代替△W(梯度是回流計(jì)算的屯阀,橫坐標(biāo)從右往左看)
Hack but cheap and effective
LSTM(Long Short-Term Memory)
梯度消失會(huì)導(dǎo)致分類(lèi)器只對(duì)最近的消息的變化有反應(yīng)缅帘,淡化以前訓(xùn)練的參數(shù)轴术,也不能用比值的方法來(lái)解決
一個(gè)RNN的model包含兩個(gè)輸入,一個(gè)是過(guò)去狀態(tài)钦无,一個(gè)是新的數(shù)據(jù)逗栽,兩個(gè)輸出,一個(gè)是預(yù)測(cè)失暂,一個(gè)是將來(lái)狀態(tài)
中間是一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)
將中間的部分換成LSTM-cell就能解決梯度消失問(wèn)題
我們的目的是提高RNN的記憶能力
Memory Cell
三個(gè)門(mén)彼宠,決定是否寫(xiě)/讀/遺忘/寫(xiě)回
在每個(gè)門(mén)上鳄虱,不單純做yes/no的判斷,而是使用一個(gè)權(quán)重凭峡,決定對(duì)輸入的接收程度
這個(gè)權(quán)重是一個(gè)連續(xù)的函數(shù)拙已,可以求導(dǎo),也就可以進(jìn)行訓(xùn)練摧冀,這是LSTM的核心
用一個(gè)邏輯回歸訓(xùn)練這些門(mén)倍踪,在輸出進(jìn)行歸一化
這樣的模型能讓整個(gè)cell更好地記憶與遺忘
由于整個(gè)模型都是線性的,所以可以方便地求導(dǎo)和訓(xùn)練
LSTM Regularization
L2, works
Dropout on the input or output of data, works
Beam Search
有了上面的模型之后索昂,我們可以根據(jù)上文來(lái)推測(cè)下文建车,甚至創(chuàng)造下文,預(yù)測(cè)椒惨,篩選最大概率的詞缤至,喂回,繼續(xù)預(yù)測(cè)……
我們可以每次只預(yù)測(cè)一個(gè)字母康谆,but this is greedy领斥,每次都挑最好的那個(gè)
也可以每次多預(yù)測(cè)幾步,然后挑整體概率較高的那個(gè)沃暗,以減少偶然因素的影響
但這樣需要生成的sequence會(huì)指數(shù)增長(zhǎng)
因此我們?cè)诙囝A(yù)測(cè)幾步的時(shí)候戒突,只為概率比較高的幾個(gè)候選項(xiàng)做預(yù)測(cè),that's beam search.
翻譯與識(shí)圖
RNN將variable length sequence問(wèn)題變成了fixed length vector問(wèn)題描睦,同時(shí)因?yàn)閷?shí)際上我們能利用vector進(jìn)行預(yù)測(cè)膊存,我們也可以將vector變成sequence
我們可以利用這一點(diǎn),輸入一個(gè)序列忱叭,到一個(gè)RNN里隔崎,將輸出輸入到另一個(gè)逆RNN序列,形成另一種序列韵丑,比如爵卒,語(yǔ)言翻譯
如果我們將CNN的輸出接到一個(gè)RNN,就可以做一種識(shí)圖系統(tǒng)
作者:夢(mèng)里茶
鏈接:http://www.reibang.com/p/ba79aea19c95
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有撵彻,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處钓株。