大家都喜愛的神經(jīng)網(wǎng)絡(luò)系列之LSTM

Neil Zhu银择,簡書ID Not_GOD邮旷,University AI 創(chuàng)始人 & Chief Scientist孤里,致力于推進世界人工智能化進程伏伯。制定并實施 UAI 中長期增長戰(zhàn)略和目標,帶領(lǐng)團隊快速成長為人工智能領(lǐng)域最專業(yè)的力量捌袜。
作為行業(yè)領(lǐng)導(dǎo)者说搅,他和UAI一起在2014年創(chuàng)建了TASA(中國最早的人工智能社團), DL Center(深度學(xué)習(xí)知識中心全球價值網(wǎng)絡(luò)),AI growth(行業(yè)智庫培訓(xùn))等虏等,為中國的人工智能人才建設(shè)輸送了大量的血液和養(yǎng)分弄唧。此外,他還參與或者舉辦過各類國際性的人工智能峰會和活動霍衫,產(chǎn)生了巨大的影響力套才,書寫了60萬字的人工智能精品技術(shù)內(nèi)容,生產(chǎn)翻譯了全球第一本深度學(xué)習(xí)入門書《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》慕淡,生產(chǎn)的內(nèi)容被大量的專業(yè)垂直公眾號和媒體轉(zhuǎn)載與連載。曾經(jīng)受邀為國內(nèi)頂尖大學(xué)制定人工智能學(xué)習(xí)規(guī)劃和教授人工智能前沿課程沸毁,均受學(xué)生和老師好評峰髓。

本文介紹 LSTM 基本原理,和在 torch 以及 Theano 下給出兩個例子息尺。
LSTM 本質(zhì)上是一種 RNN携兵。人們發(fā)現(xiàn) RNN 在訓(xùn)練中會遇到較為嚴重的梯度消失問題(誤差梯度隨重要事件的時間差的大小指數(shù)級下降)。使用 LSTM 模塊后搂誉,當誤差從輸出層反向傳播回來時徐紧,可以使用模塊的記憶元記下來。所以 LSTM 可以記住比較長時間內(nèi)的信息炭懊。

LSTM 現(xiàn)在應(yīng)用非常廣泛:

  1. Robot control[8]
  2. Time series prediction[9]
  3. Speech recognition[10][11][12]
  4. Rhythm learning[13]
  5. Music composition[14]
  6. Grammar learning[15][16][17]
  7. Handwriting recognition[18][19]
  8. Human action recognition[20]
  9. Protein Homology Detection[21]

我們的例子是訓(xùn)練一個基于字符的 LSTM 語言模型并级,使用中文的古詩詞數(shù)據(jù)來訓(xùn)練。

在語言建模中侮腹,我們的任務(wù)是對詞的序列的出現(xiàn)概率進行建模嘲碧,通常是使用詞,但這里使用的字符(為了看看實驗的情況)父阻。更加準確地說愈涩,就是對一個 T 長的詞列表 $$w_1,w_2,...,w_T$$,我們定義概率如下:
$$P(w_1,w_2,...,w_T) = \prod_{t=1}^T P(w_t | w_{1:(t-1)})$$
其中 $$1 : (t - 1)$$ 表示從 $$1$$ 到 $$t-1$$加矛。因此我們希望模型能夠給高的概率給更加合理的字符序列履婉,而非亂序的組合。

在我之前幾篇譯文里面介紹了很多神經(jīng)網(wǎng)絡(luò)的知識斟览,其中也包含了 LSTM 網(wǎng)絡(luò)毁腿。比如說梯度的消失和爆炸的情況。這里我再順手貼上幾個公式,顯得很專業(yè)一下狸棍。
其實這兩種關(guān)于梯度的問題身害,本質(zhì)上很簡單。梯度消失就是將一個導(dǎo)數(shù)的序列相乘草戈,由于其中的某些導(dǎo)數(shù)變的很小 $$< 1$$塌鸯,這樣最終的乘積就變成接近 $$0$$ 的值了。反過來唐片,若是梯度非常大丙猬,那乘積就是變得無比的大,也就爆炸了费韭。
這樣會導(dǎo)致梯度下降的快于在輸入的兩個相關(guān)事件的距離茧球。

LSTM 通過在傳播導(dǎo)數(shù)的時候,保證其能夠傳播得盡可能遠而不會明顯的改變星持。下面會解釋抢埋。所以 LSTM 就能夠?qū)W得更長的依賴關(guān)系。

仔細看看督暂,其實 LSTM 就是下面幾個方程:

  • 輸入門:控制當前輸入 $$x_t$$ 和前一步輸出 $$h_{t-1}$$ 進入新的 cell 的信息量:
  • 忘記門:決定是否清楚或者保持單一部分的狀態(tài)
  • cell 更新變換:變換輸出和前一狀態(tài)到最新狀態(tài)
  • cell 狀態(tài)更新步驟:計算下一個時間戳的狀態(tài)使用經(jīng)過門處理的前一狀態(tài)和輸入:


  • 輸出門:計算 cell 的輸出

  • 最終 LSTM 的輸出:使用一個對當前狀態(tài)的 tanh 變換進行重變換:

現(xiàn)在可以看看為何這樣的設(shè)計能夠解決梯度消失問題揪垄,對于 $$k<t$$,因為:


這里我們可以看到一條清晰的路徑逻翁,讓梯度無阻礙地進行流動(也就是說饥努,不會下降到 $$0$$),除非對來自忘記門的常量(wrt $$c_{t-1}$$)乘法因子這會總在 $$1$$ 的附近八回,所以不會導(dǎo)致太大的下降酷愧,除了忘記門清除了 cell 的狀態(tài),這樣的話梯度也不會回流了缠诅。

對比 RNN 的梯度流動的路徑溶浴,就可以看到不少 sigmoid 函數(shù)和權(quán)重矩陣的導(dǎo)數(shù),這兩類都更加可能遠離 $$1$$管引。

前向傳播

我們現(xiàn)在描述前向傳播如何進行戳葵。
模型有 3 個組成部分

  1. LSTM 模塊
  2. 映射詞(這里是字符)到連續(xù)值向量的嵌入模塊
  3. 線性模型加上一個 softmax,將 LSTM 的輸出 $$h_t$$ 映射到概率分布

準備動作:我們將 LSTM 展開到 T 個時間步汉匙,每次都有 LSTM 共享權(quán)重的副本($W_{xi}$拱烁、$W_{xo}$、$X_{xf}$ 等等)噩翠。我們按照同樣的操作完成 T 步的共享權(quán)重戏自。

前向傳播

  1. 將輸入通過嵌入層,來獲得 T 個嵌入
  2. 對每一步:
  3. 運行 LSTM 的一個時間步伤锚,使用時間 t 的嵌入作為輸入
  4. 獲得時間 t 處的輸出擅笔,這個就是在時間 t 的預(yù)測結(jié)果

反向傳播

現(xiàn)在反向傳播就是很簡單了:我們首先進行前向傳播,然后完全反序執(zhí)行,調(diào)用 backward 而非 forward猛们,保持每步 backward() 返回的 gradInput 的記錄
念脯,將其傳遞給下一個 backward 調(diào)用。細節(jié)請參考 train.lua弯淘。

LSMT 中采樣

在每個時間步绿店,LSTM 都使用了 softmax 輸出了一個在字符集上的概率分布。

給定每個時間步的分布庐橙,有幾種方法來獲得單個的字符假勿,每個字符獲得其相應(yīng)的嵌入然后傳遞給 LSTM 作為下一步的輸入:

  1. 獲得當前時間步最大的值(試試運行不加 -samplesample.lua看看)
  2. 從分布中使用 softmax 采樣
  3. 獲取前 k 個結(jié)果,使用 beam 搜索(這里并沒有實現(xiàn))

評價采樣的質(zhì)量

最簡單的方法:可視化數(shù)據(jù)态鳖!諸如“the”或者“and”這樣的詞出現(xiàn)得非常頻繁转培,即使就是訓(xùn)練很多的時間。隨著訓(xùn)練的繼續(xù)浆竭,樣本會越來越像真的英語浸须。

而更加形式化的性能評估就是測量 perplexity 在一個新的測試集合上。Perplexity 是測試集的逆概率邦泄,使用詞的數(shù)目正規(guī)化删窒。最小化 perplexity 和最大化概率是一樣的,所以一個更低的 perplexity 模型能夠更好地描述數(shù)據(jù)虎韵。Perplexity 是一種常用的度量語言模型的測度,其定義如下:


其中的 $$w_1, ..., w_N$$ 是訓(xùn)練數(shù)據(jù)的整個序列缸废;我們將整個這些看成是一個序列包蓝。在 bigram 模型中,條件是截斷的企量,

在實踐中测萎,我們沒有測試集,所以就不會測量 perplexity届巩,我們訓(xùn)練的字符層的模型硅瞧。perplexity 通常用在詞層的語言模型上。

參考牛津大學(xué)機器學(xué)習(xí)課程

[待續(xù)]

“忽如寄恕汇,壽無金酒固枝思, 歲上泰隨鳴餘娥, 采良隔逝閣附悲, 蟀箕袍德舉指鳥, 花有疏生佳柱蟀, 下佳能度”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腕唧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘾英,更是在濱河造成了極大的恐慌枣接,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缺谴,死亡現(xiàn)場離奇詭異但惶,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門膀曾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來县爬,“玉大人,你說我怎么就攤上這事添谊〔圃” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵碉钠,是天一觀的道長纲缓。 經(jīng)常有香客問我,道長喊废,這世上最難降的妖魔是什么祝高? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮污筷,結(jié)果婚禮上工闺,老公的妹妹穿的比我還像新娘。我一直安慰自己瓣蛀,他們只是感情好陆蟆,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惋增,像睡著了一般叠殷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诈皿,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天林束,我揣著相機與錄音,去河邊找鬼稽亏。 笑死壶冒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的截歉。 我是一名探鬼主播胖腾,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘪松!你這毒婦竟也來了咸作?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤宵睦,失蹤者是張志新(化名)和其女友劉穎性宏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體状飞,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡毫胜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年书斜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酵使。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡荐吉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出口渔,到底是詐尸還是另有隱情样屠,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布缺脉,位于F島的核電站痪欲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏攻礼。R本人自食惡果不足惜业踢,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望礁扮。 院中可真熱鬧知举,春花似錦、人聲如沸太伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僚焦。三九已至锰提,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芳悲,已是汗流浹背立肘。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芭概,地道東北人赛不。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓惩嘉,卻偏偏與公主長得像罢洲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子文黎,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容