1
本文作者: 張大倩 | 2020-04-06 12:24 |
圖片來(lái)源 佩吉·喬卡爾
長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM),作為一種改進(jìn)之后的循環(huán)神經(jīng)網(wǎng)絡(luò),不僅能夠解決 RNN無(wú)法處理長(zhǎng)距離的依賴的問(wèn)題,還能夠解決神經(jīng)網(wǎng)絡(luò)中常見(jiàn)的梯度爆炸或梯度消失等問(wèn)題,在處理序列數(shù)據(jù)方面非常有效。
有效背后的根本原因有哪些?本文結(jié)合簡(jiǎn)單的案例,帶大家了解關(guān)于 LSTM 的五個(gè)秘密,也解釋了 LSTM如此有效的關(guān)鍵所在。
之前,我們介紹了遞歸神經(jīng)網(wǎng)絡(luò)(RNN),并演示了如何將它們用于情感分析。
RNN 的問(wèn)題是遠(yuǎn)程內(nèi)存。例如,它們能夠預(yù)測(cè)出“the clouds are in the…”這句話的下一個(gè)單詞“sky”,但卻無(wú)法預(yù)測(cè)出下面這句話中缺失的單詞:“她在法國(guó)長(zhǎng)大。現(xiàn)在到中國(guó)才幾個(gè)月。她說(shuō)一口流利的 …”(“She grew up in France. Now she has been in China for few months only. She speaks fluent …”)
隨著間隔的拉長(zhǎng),RNN變得無(wú)法學(xué)會(huì)信息連接。 在此示例中,最近的信息表明,下一個(gè)詞可能是一種語(yǔ)言的名稱,但是如果我們想縮小哪種語(yǔ)言的范圍,那么就需要到間隔很長(zhǎng)的前文中去找“法國(guó)”。 在自然語(yǔ)言文本中,這種問(wèn)題,完全有可能在相關(guān)信息和需要該信息的地方出現(xiàn)很大的差異。這種差異在德語(yǔ)中也很常見(jiàn)。
圖片來(lái)自FB Engineering Tejas Patil的博客上
為什么RNN在長(zhǎng)序列文本方面存在巨大的問(wèn)題? 根據(jù)設(shè)計(jì),RNN 在每個(gè)時(shí)間步長(zhǎng)上都會(huì)接受兩個(gè)輸入:一個(gè)輸入向量(例如,輸入句子中的一個(gè)詞)和一個(gè)隱藏狀態(tài)(例如,以前詞中的記憶表示)。
RNN下一個(gè)時(shí)間步長(zhǎng)采用第二個(gè)輸入向量和第一隱藏狀態(tài)來(lái)創(chuàng)建該時(shí)間步長(zhǎng)的輸出。 因此,為了捕獲長(zhǎng)序列中的語(yǔ)義,我們需要在多個(gè)時(shí)間步長(zhǎng)上運(yùn)行RNN,將展開(kāi)的RNN變成一個(gè)非常深的網(wǎng)絡(luò)。
閱讀參考:https://towardsdatascience.com/recurrent-neural-networks-explained-ffb9f94c5e09
長(zhǎng)序列并不是RNN的唯一麻煩制造者。 就像任何非常深的神經(jīng)網(wǎng)絡(luò)一樣,RNN也存在梯度消失和爆炸的問(wèn)題,因此需要花費(fèi)大量時(shí)間進(jìn)行訓(xùn)練。人們已經(jīng)提出了許多技術(shù)來(lái)緩解此問(wèn)題,但還無(wú)法完全消除該問(wèn)題,這些技術(shù)包括:
仔細(xì)地初始化參數(shù)
使用非飽和激活函數(shù),如ReLU
應(yīng)用批量歸一化、梯度消失、舍棄網(wǎng)絡(luò)細(xì)胞等方法
使用經(jīng)過(guò)時(shí)間截?cái)嗟姆聪騻鞑?/p>
這些方法仍然有其局限性。此外,除了訓(xùn)練時(shí)間長(zhǎng)之外,長(zhǎng)期運(yùn)行的RNN還面臨另一個(gè)問(wèn)題是:對(duì)首個(gè)輸入的記憶會(huì)逐漸消失。
一段時(shí)間后,RNN的狀態(tài)庫(kù)中幾乎沒(méi)有首個(gè)輸入的任何痕跡。 例如,如果我們想對(duì)以“我喜歡這款產(chǎn)品”開(kāi)頭的長(zhǎng)評(píng)論進(jìn)行情感分析,但其余評(píng)論列出了許多可能使該產(chǎn)品變得更好的因素,那么 RNN 將逐漸忘記首個(gè)評(píng)論中傳遞的正面情緒,并且會(huì)完全誤認(rèn)為該評(píng)論是負(fù)面的。
為了解決RNN的這些問(wèn)題,研究者已經(jīng)在研究中引入了各類具有長(zhǎng)期記憶的細(xì)胞。 實(shí)際上,不再使用基本的RNN的大多數(shù)工作是通過(guò)所謂的長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)完成的。 LSTM是由S. Hochreiter和J. Schmidhuber發(fā)明的。
每個(gè)LSTM細(xì)胞都控制著要記住的內(nèi)容、要忘記的內(nèi)容以及如何使用門來(lái)更新存儲(chǔ)器。 這樣,LSTM網(wǎng)絡(luò)解決了梯度爆炸或梯度消失的問(wèn)題,以及前面提到的所有其他問(wèn)題!
LSTM細(xì)胞的架構(gòu)如下圖所示:
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
h 是隱藏狀態(tài),表示的是短期記憶; C是細(xì)胞狀態(tài),表示的是長(zhǎng)期記憶;x表示輸入。
門只能執(zhí)行很少的矩陣轉(zhuǎn)換,激活 sigmoid函數(shù)和tanh函數(shù)可以神奇地解決所有RNN問(wèn)題。
在下一節(jié)中,我們將通過(guò)觀察這些細(xì)胞如何遺忘、記憶和更新其內(nèi)存來(lái)深入研究這一過(guò)程。
一個(gè)有趣的故事:
讓我們?cè)O(shè)置一個(gè)有趣的情節(jié)來(lái)探索這個(gè)圖表。假設(shè)你是老板,你的員工要求加薪。你會(huì)同意嗎?這取決于多個(gè)因素,比如你當(dāng)時(shí)的心情。
下面我們將你的大腦視為L(zhǎng)STM細(xì)胞,當(dāng)然我們無(wú)意冒犯你聰明的大腦。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
你的長(zhǎng)期狀態(tài)C將影響你的決定。平均來(lái)說(shuō),你有70%的時(shí)間心情很好,而你還剩下30%的預(yù)算。因此你的細(xì)胞狀態(tài)是C=[0.7, 0.3]。
最近,所有的事情對(duì)你來(lái)說(shuō)都很順利,100%地提升了你的好心情,而你有100%的可能性預(yù)留可操作的預(yù)算。這就把你的隱藏狀態(tài)變成了h=[1,1]。
今天,發(fā)生了三件事:你的孩子在學(xué)校考試中取得了好成績(jī),盡管你的老板對(duì)你的評(píng)價(jià)很差,但是你發(fā)現(xiàn)你仍然有足夠的時(shí)間來(lái)完成工作。因此,今天的輸入是x=[1, - 1,1]。
基于這個(gè)評(píng)估,你會(huì)給你的員工加薪嗎?
秘密3:LSTM通過(guò)使用“忘記門”來(lái)忘記
在上述情況下,你的第一步可能是弄清楚今天發(fā)生的事情(輸入x)和最近發(fā)生的事情(隱藏狀態(tài)h),二者會(huì)影響你對(duì)情況的長(zhǎng)期判斷(細(xì)胞狀態(tài)C)。 “忘記門”( Forget Gate)控制著過(guò)去存儲(chǔ)的內(nèi)存量。
在收到員工加薪的請(qǐng)求后,你的“忘記門”會(huì)運(yùn)行以下f_t的計(jì)算,其值最終會(huì)影響你的長(zhǎng)期記憶。
下圖中顯示的權(quán)重是為了便于說(shuō)明目的的隨意選擇。它們的值通常是在網(wǎng)絡(luò)訓(xùn)練期間計(jì)算的。結(jié)果[0,0]表示要抹去(完全忘記)你的長(zhǎng)期記憶,不要讓它影響你今天的決定。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
接下來(lái),你需要決定:最近發(fā)生的事情(隱藏狀態(tài)h)和今天發(fā)生的事情(輸入x)中的哪些信息需要記錄到你對(duì)所處情況的長(zhǎng)遠(yuǎn)判斷中(狀態(tài)狀態(tài)C)。LSTM通過(guò)使用“輸入門”( Input Gate)來(lái)決定要記住什么。
首先,你要計(jì)算輸入門的值 i_t,由于激活了sigmoid函數(shù),值落在0和1之間;接下來(lái),你要tanh激活函數(shù)在-1和1之間縮放輸入;最后,你要通過(guò)添加這兩個(gè)結(jié)果來(lái)估計(jì)新的細(xì)胞狀態(tài)。
結(jié)果[1,1]表明,根據(jù)最近和當(dāng)前的信息,你100%處于良好狀態(tài),給員工加薪有很高的可能性。這對(duì)你的員工來(lái)說(shuō)很有希望。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
現(xiàn)在,你知道最近發(fā)生的事情會(huì)如何影響你的狀態(tài)。接下來(lái),是時(shí)候根據(jù)新的理論來(lái)更新你對(duì)所處情況的長(zhǎng)期判斷了。
當(dāng)出現(xiàn)新值時(shí),LSTM 再次通過(guò)使用門來(lái)決定如何更新其內(nèi)存。 門控的新值將添加到當(dāng)前存儲(chǔ)器中。 這種加法運(yùn)算解決了簡(jiǎn)單RNN的梯度爆炸或梯度消失問(wèn)題。
LSTM 通過(guò)相加而不是相乘的方式來(lái)計(jì)算新?tīng)顟B(tài)。 結(jié)果C_t 被存儲(chǔ)為所處情況的新的長(zhǎng)期判斷(細(xì)胞狀態(tài))。
值[1,1]表示你整體有100%的時(shí)間保持良好的心情,并且有100%的可能性一直都有錢! 你是位無(wú)可挑剔的老板!
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
根據(jù)這些信息,你可以更新所處情況的短期判斷:h_t(下一個(gè)隱藏狀態(tài))。值[0.9,0.9]表示你有90%的可能性在下一步增加員工的工資!祝賀他!
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
1、門控循環(huán)單元
LSTM細(xì)胞的一種變體被稱為門控循環(huán)單元,簡(jiǎn)稱GRU。GRU 是Kyunghyun Cho等人在2014年的一篇論文中提出的。
GRU是LSTM細(xì)胞的簡(jiǎn)化版本,速度比LSTM快一點(diǎn),而且性能似乎也與LSTM相當(dāng),這就是它為什么越來(lái)越受歡迎的原因。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
如上所示,這兩個(gè)狀態(tài)向量合并為一個(gè)向量。單個(gè)門控制器控制“忘記門”和“輸入門”。如果門控制器輸出 1,則輸入門打開(kāi),忘記門關(guān)閉。如果輸出0,則相反。換句話說(shuō),每當(dāng)必須存儲(chǔ)內(nèi)存時(shí),其存儲(chǔ)位置先被刪除。
上圖中沒(méi)有輸出門,在每一步都輸出完整的狀態(tài)向量。但是,增加了一個(gè)新的門控制器,它控制之前狀態(tài)的哪一部分將呈現(xiàn)給主層。
2、堆疊LSTM細(xì)胞
通過(guò)對(duì)齊多個(gè)LSTM細(xì)胞,我們可以處理序列數(shù)據(jù)的輸入,例如下圖中有4個(gè)單詞的句子。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
LSTM單元通常是分層排列的,因此每個(gè)單元的輸出都是其他單元的輸入。在本例中,我們有兩個(gè)層,每個(gè)層有4個(gè)細(xì)胞。通過(guò)這種方式,網(wǎng)絡(luò)變得更加豐富,并捕獲到更多的依賴項(xiàng)。
3、雙向LSTM
RNN、LSTM和GRU是用來(lái)分析數(shù)值序列的。有時(shí)候,按相反的順序分析序列也是有意義的。
例如,在“老板對(duì)員工說(shuō),他需要更努力地工作”這個(gè)句子中,盡管“他”一開(kāi)始就出現(xiàn)了,但這句話中的他指的是:在句末提到的員工。
因此,分析序列的順序需要顛倒或通過(guò)組合向前和向后的順序。 下圖描述了這種雙向架構(gòu):
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
下圖進(jìn)一步說(shuō)明了雙向 LSTM。底部的網(wǎng)絡(luò)接收原始順序的序列,而頂部的網(wǎng)絡(luò)按相反順序接收相同的輸入。這兩個(gè)網(wǎng)絡(luò)不一定完全相同。重要的是,它們的輸出被合并為最終的預(yù)測(cè)。
來(lái)源:哈佛大學(xué) P. Protopapas教授的課堂講稿
想要知道更多的秘密?
正如我們剛剛提到的那樣,LSTM細(xì)胞可以學(xué)會(huì)識(shí)別重要的輸入(輸入門的作用),將該輸入存儲(chǔ)在長(zhǎng)期狀態(tài)下,學(xué)會(huì)在需要時(shí)將其保留(忘記門的作用),并在需要時(shí)學(xué)會(huì)提取它。
LSTM 已經(jīng)改變了機(jī)器學(xué)習(xí)范式,現(xiàn)在可以通過(guò)世界上最有價(jià)值的上市公司如谷歌、Amazon和Facebook向數(shù)十億用戶提供服務(wù)。
自2015年中期以來(lái),LSTM極大地改善了超過(guò)40億部Android手機(jī)的語(yǔ)音識(shí)別。
自2016年11月以來(lái),LSTM應(yīng)用在了谷歌翻譯中,極大地改善了機(jī)器翻譯。
Facebook每天執(zhí)行超過(guò)40億個(gè)基于LSTM的翻譯。
自2016年以來(lái),近20億部iPhone手機(jī)上搭載了基于LSTM的Siri。
亞馬遜的Alexa回答問(wèn)題也是基于 LSTM。
擴(kuò)展閱讀
如果你想知道更多關(guān)于LSTM和GRU的信息,可以閱讀Michael Nguyen寫的這篇帶有動(dòng)畫說(shuō)明的文章:https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
對(duì)于那些喜歡從頭構(gòu)建LSTM模型的人來(lái)說(shuō),這篇文章可能會(huì)有用:https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
下面,我將提供使用Python實(shí)踐實(shí)施LSTM網(wǎng)絡(luò)的方法。
1、情緒分析:一個(gè)基準(zhǔn)
地址:https://towardsdatascience.com/sentiment-analysis-a-benchmark-903279cab44a
基于注意力的序列到序列模型和Transformer超越了LSTM,最近在谷歌的機(jī)器翻譯和OpenAI的文本生成方面取得了令人驚嘆的成果。
2、NLU任務(wù)注意力機(jī)制的實(shí)踐指南
地址:https://towardsdatascience.com/practical-guide-to-attention-mechanism-for-nlu-tasks-ccc47be8d500
使用BERT、FastText、TextCNN、Transformer、Se2seq等可以全面實(shí)現(xiàn)文本分類,這個(gè)可以在 Github庫(kù)(https://github.com/brightmart/text_classification)中找到,或者你可以查看我的關(guān)于BERT的教程:https://towardsdatascience.com/bert-for-dummies-step-by-step-tutorial-fb90890ffe03 雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。