0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解析LSTM的全貌

8g3K_AI_Thinker ? 2018-02-02 10:39 ? 次閱讀

第一次接觸長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)時(shí),我驚呆了。

原來,LSTM是神經(jīng)網(wǎng)絡(luò)的擴(kuò)展,非常簡(jiǎn)單。深度學(xué)習(xí)在過去的幾年里取得了許多驚人的成果,均與LSTM息息相關(guān)。因此,在本篇文章中我會(huì)用盡可能直觀的方式為大家介紹LSTM——方便大家日后自己進(jìn)行相關(guān)的探索。

首先,請(qǐng)看下圖:

深度解析LSTM的全貌

LSTM是不是很漂亮?

注意:如果你對(duì)神經(jīng)網(wǎng)絡(luò)和LSTM很熟悉,請(qǐng)直接跳到本文的中間部分——前半部分相當(dāng)于入門教程

神經(jīng)網(wǎng)絡(luò)

假設(shè)我們從某部電影中截取出了一系列的圖像,并且我們想對(duì)每張圖像進(jìn)行標(biāo)記,使其成為某個(gè)事件(是打斗嗎?演員們?cè)谡f話嗎?演員們?cè)诔詵|西嗎?)

我們?cè)撛趺醋觯?/p>

其中一種方法就是,在忽視圖像連續(xù)屬性的情況下構(gòu)建一個(gè)單獨(dú)處理各個(gè)圖像的單圖像分類器。例如,提供足夠多的圖像和標(biāo)簽

我們的算法首先可能需要學(xué)習(xí)檢測(cè)低級(jí)圖形,如形狀和棱邊等。

在數(shù)據(jù)變多的情況下,算法可能會(huì)學(xué)習(xí)將這些圖形與更為復(fù)雜的形式結(jié)合在一起,如人臉(一個(gè)橢圓形的東西的上方是一個(gè)三角形,三角形上有兩個(gè)圓形)或貓。

如果數(shù)據(jù)量進(jìn)一步增多的話,算法可能會(huì)學(xué)習(xí)將這些高級(jí)圖樣映射至活動(dòng)本身(包含嘴、肉排和餐叉的場(chǎng)景可能就是在用餐)

這就是一個(gè)深度神經(jīng)網(wǎng)絡(luò):輸入一張圖像而后輸出相應(yīng)的事件——這與我們?cè)趯?duì)犬類一無所知的情況下仍可能會(huì)通過幼犬行為學(xué)習(xí)檢測(cè)其各種特征是一樣的(在觀察了足夠多的柯基犬后,我們發(fā)現(xiàn)它們有一些共同特征,如蓬松的臀部和短小的四肢等;接下來,我們繼續(xù)學(xué)習(xí)更加高級(jí)的特性,如排泄行為等)——在這兩個(gè)步驟之間,算法通過隱含圖層的向量表示來學(xué)習(xí)描述圖像。

數(shù)學(xué)表達(dá)

雖然大家可能對(duì)基本的神經(jīng)網(wǎng)絡(luò)已經(jīng)非常熟悉,但是此處我們?nèi)钥焖俚鼗仡櫼幌拢?/p>

單隱含層的神經(jīng)網(wǎng)絡(luò)將向量x作為輸入,我們可以將其視作為一組神經(jīng)元。

算法通過一組學(xué)習(xí)后的權(quán)重將每個(gè)輸入神經(jīng)元連接至神經(jīng)元的一個(gè)隱含層。

第j個(gè)隱層神經(jīng)元輸出為,其中??是激活函數(shù)。

隱含層與輸出層完全連接在一起,第j個(gè)輸出神經(jīng)元輸出為,如果需要知道其概率的話,我們可以借助softmax函數(shù)對(duì)輸出層進(jìn)行轉(zhuǎn)換。

用矩陣符號(hào)表示為:

h=?(Wx)h=?(Wx)

y=Vhy=Vh

其中

matchx 是輸入向量

W是連接輸入層和隱含層的權(quán)重矩陣

V是連接隱含層和輸出層的權(quán)重矩陣

? 的激活函數(shù)通常為雙彎曲函數(shù)(sigmoid function) σ(x) ,它將數(shù)字縮小到 (0, 1)區(qū)間內(nèi);雙曲線函數(shù)(hyperbolic tangent)tanh(x),它將數(shù)字縮小至(-1, 1)區(qū)間內(nèi),修正線性單位 ReLU(x)=max(0,x)。

下圖為圖形視圖:

注意:為了使符號(hào)更加簡(jiǎn)潔些,我假設(shè)x和h各包含一個(gè)額外的偏差神經(jīng)元,偏差設(shè)置為1固定不變,方便學(xué)習(xí)偏差權(quán)重。

利用RNN記憶信息

忽視電影圖像的連續(xù)屬性像是ML 101的做法。如果我們看到一個(gè)沙灘的場(chǎng)景,我們應(yīng)該在接下來的幀數(shù)中增強(qiáng)沙灘活動(dòng):如果圖像中的人在海水中,那么這個(gè)圖像可能會(huì)被標(biāo)記為“游泳”;如果圖像中的人閉著眼睛躺在沙灘上,那么這個(gè)圖像可能會(huì)被標(biāo)記為“日光浴”。如果如果我們能夠記得Bob剛剛抵達(dá)一家超市的話,那么即使沒有任何特別的超市特征,Bob手拿一塊培根的圖像都可能會(huì)被標(biāo)記為“購物”而不是“烹飪”。

因此,我們希望讓我們的模型能夠跟蹤世界上的各種狀態(tài):

在檢測(cè)完每個(gè)圖像后,模型會(huì)輸出一個(gè)標(biāo)簽,同時(shí)模型對(duì)世界的認(rèn)識(shí)也會(huì)有所更新。例如,模型可能會(huì)學(xué)習(xí)自主地去發(fā)現(xiàn)并跟蹤相關(guān)的信息,如位置信息(場(chǎng)景發(fā)生的地點(diǎn)是在家中還是在沙灘上?)、時(shí)間(如果場(chǎng)景中包含月亮的圖像,模型應(yīng)該記住該場(chǎng)景發(fā)生在晚上)和電影進(jìn)度(這個(gè)圖像是第一幀還是第100幀?)。重要的是,正如神經(jīng)元在未收到隱含圖像(如棱邊、圖形和臉等)的情況下可以自動(dòng)地去發(fā)現(xiàn)這些圖像,我們的模型本身可以自動(dòng)發(fā)現(xiàn)有用的信息。

在向模型輸入新的圖像時(shí),模型應(yīng)該結(jié)合它收集到的信息,更加出色地完成任務(wù)。

這就是遞歸神經(jīng)網(wǎng)絡(luò)(RNN),它不僅能夠完成簡(jiǎn)單地圖像輸入和事件輸出行為,還能保持對(duì)世界的記憶(給不同信息分配的權(quán)重),以幫助改進(jìn)自己的分類功能。

數(shù)學(xué)表達(dá)

接下來,讓我們把內(nèi)部知識(shí)的概念添加到方程式中,我們可以將其視為神經(jīng)網(wǎng)絡(luò)長久以來保存下的記憶或者信息。

非常簡(jiǎn)單:我們知道神經(jīng)網(wǎng)絡(luò)的隱含層已經(jīng)對(duì)關(guān)于輸入的有用信息進(jìn)行了編碼,因此,為什么不把這些隱含層作為記憶來使用呢?這一想法使我們得到了下面的RNN方程式:

ht=?(Wxt+Uht?1)

yt=Vht

注意:在時(shí)間t處計(jì)算得出的隱狀態(tài)(ht為我們的內(nèi)部知識(shí))在下個(gè)時(shí)間步長內(nèi)會(huì)被反饋給神經(jīng)網(wǎng)絡(luò)。(另外,我會(huì)在本文中交替使用隱狀態(tài)、知識(shí)、記憶和認(rèn)識(shí)等概念來描述ht)

深度解析LSTM的全貌

利用LSTM實(shí)現(xiàn)更長久的記憶

讓我們思考一下我們的模型是如何更新它對(duì)世界的認(rèn)識(shí)的。到目前為止,我們并未對(duì)其更新過程施加任何限制措施,因此該認(rèn)識(shí)更新過程可能十分混亂:在某一幀,模型可能會(huì)認(rèn)為其中的人物是在美國;到了下一幀,當(dāng)它觀察到人物在吃壽司時(shí),便會(huì)認(rèn)為這些人在日本;而在下一幀,當(dāng)它觀察到北極熊時(shí),便認(rèn)為他們是在伊德拉島 ( Hydra island )。也有可能,模型收集到的大量信息表明Alice是一名投資分析師,但是在看到她進(jìn)行烹飪時(shí)又?jǐn)喽ㄋ且幻殬I(yè)殺手。

這種混亂意味著信息會(huì)快速地改變并消失,模型很難保存長期記憶。因此,我們希望神經(jīng)網(wǎng)絡(luò)能學(xué)會(huì)如何更新自己的認(rèn)識(shí)(也就是說,沒有Bob的場(chǎng)景不應(yīng)該改變所有與Bob相關(guān)的信息,有Alice的場(chǎng)景就應(yīng)該專注于收集關(guān)于她的信息),這樣神經(jīng)網(wǎng)絡(luò)就可以相對(duì)緩慢地更新它對(duì)世界的認(rèn)識(shí)。

以下是我們的實(shí)現(xiàn)方法。

添加遺忘機(jī)制。例如,如果某個(gè)場(chǎng)景結(jié)束了,模型就應(yīng)該忘記當(dāng)前場(chǎng)景的位置和時(shí)間,并且重置任何與該場(chǎng)景有關(guān)的信息;但是,如果某個(gè)人物在該場(chǎng)景中死亡了,那么模型應(yīng)該繼續(xù)記住該人物死亡的事實(shí)。因此,我們想要模型學(xué)習(xí)獨(dú)立的的遺忘/記憶機(jī)制:當(dāng)收到新的輸入時(shí),模型需要知道哪些認(rèn)識(shí)應(yīng)該保留以及哪些認(rèn)識(shí)應(yīng)該遺棄。

添加保存機(jī)制。當(dāng)模型看到新的圖像時(shí),它需要學(xué)習(xí)關(guān)于該圖像的所有信息是否值得使用以及是否值得保存。也許你媽曾給你發(fā)過一篇關(guān)于卡戴珊一家的文章,但是誰在乎呢?

因此當(dāng)收到新的輸入信息時(shí),模型首先忘記所有它認(rèn)為自己不再需要的長期信息。然后,再學(xué)習(xí)新輸入信息的哪部分具有使用價(jià)值,并且將它們保存到長期記憶中。

將長期記憶聚焦為工作記憶。最后,模型需要學(xué)習(xí)哪一部分的長期記憶能立刻發(fā)揮作用。例如,Bob的年齡可能是一條有用的信息,需要保存在長期記憶中(兒童更可能會(huì)爬行,而成人則更可能會(huì)工作),但是如果Bob并未出現(xiàn)在當(dāng)前場(chǎng)景中,那么這條信息就可能是不相干的信息。因此,模型并不是始終都在使用全部的長期記憶的,它只需要學(xué)習(xí)應(yīng)該集中注意力于哪部分記憶。

這就是長短期記憶網(wǎng)絡(luò)。RNN在各個(gè)時(shí)間步中改寫記憶的方式可以說是相當(dāng)無序的,而LSTM改寫自己記憶的方式是更加精確的:通過使用特定的學(xué)習(xí)機(jī)制來判斷哪些信息需要記憶、哪些信息需要更新以及哪些信息需要特別注意。這有助于LSTM對(duì)信息進(jìn)行長期跟蹤。

數(shù)學(xué)表達(dá)

讓我們用數(shù)學(xué)表達(dá)式來描述LSTM的添加機(jī)制。

在時(shí)間t時(shí),我們收到一個(gè)新的輸入xt。我們還將長期記憶和工作記憶從前兩個(gè)時(shí)間步ltmt?1和wmt?1(兩者都為n-長度向量)傳遞到當(dāng)前時(shí)間步,進(jìn)行更新。

我們先處理長期記憶。首先,我們需要知道哪些長期記憶需要繼續(xù)記憶,并且需要知道哪些長期記憶需要舍棄。因此,我們使用新的輸入和工作記憶來學(xué)習(xí)0和1之間n個(gè)數(shù)字的記憶門,各個(gè)記憶門決定某長期記憶元素需要保留的程度。(1表示保存,0表示完全遺忘)。

我們可以使用一個(gè)小型神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)這個(gè)時(shí)間門:

(請(qǐng)注意它與先前網(wǎng)絡(luò)方程式相似的地方;這只是一個(gè)淺層神經(jīng)網(wǎng)絡(luò)。另外,我們之所以使用S形激活函數(shù)是因?yàn)槲覀兯枰臄?shù)字介于0至1之間。)

接下來,我們需要計(jì)算可以從xt中學(xué)習(xí)的信息,也就是長期記憶的候選添加記憶:

?是一個(gè)激活函數(shù),通常被選作為tanh。在將候選記憶添加到長期記憶中之前,我們想要學(xué)習(xí)候選記憶的哪部分值得使用和保存:

(想象一下你在閱讀網(wǎng)頁時(shí)發(fā)生的事情。當(dāng)新的新聞可能包含關(guān)于希拉里的信息時(shí),如果該信息來自布萊巴特(Breitbart)網(wǎng)站,那么你就應(yīng)該忽視它。)

現(xiàn)在讓我們把所有這些步驟結(jié)合起來。在忘記我們認(rèn)為不再需要的記憶并保存輸入信息的有用部分后,我們就會(huì)得到更新后的長期記憶:

其中°表示以元素為單元 (Element-wise)的乘法。

接下來,讓我們更新一下工作記憶。我們想要學(xué)習(xí)如何將我們的長期記憶聚焦到能立刻發(fā)揮作用的信息上。(換句話說,我們想要學(xué)習(xí)需要將哪些數(shù)據(jù)從外接硬盤中轉(zhuǎn)移到用于工作的筆記本上)。因此,此處我們來學(xué)習(xí)一下關(guān)注/注意向量(focus/attention vector):

我們的工作記憶為:

換言之,我們注意關(guān)注向量為1的元素,忽視關(guān)注向量為0的元素。

我們完成了!希望你也將這些步驟記到了你的的長期記憶中。

總結(jié)來說,普通的RNN只利用一個(gè)方程式來更新它的隱狀態(tài)/記憶:

而 LSTM 則會(huì)利用數(shù)個(gè)方程式:

其中的每個(gè)記憶/注意子機(jī)制只是它自己的一個(gè)迷你大腦:

(注意:我使用的術(shù)語和變量名稱與常規(guī)文章中的用法不同。以下是標(biāo)準(zhǔn)名稱,我從此處起將會(huì)交替使用這些名稱:

長期記憶ltmt通常被稱為cell狀態(tài),表示為ct。

工作記憶wmt通常被稱為隱狀態(tài),表示為ht。它與普通RNN中的隱狀態(tài)類似

記憶向量remembert通常被稱為記憶門(盡管記憶門中的1仍表示保留記憶,0仍表示忘記),表示為ft。

保存向量savet通常被稱為輸入門(因?yàn)樗鼪Q定輸入信息中需要保存到cell狀態(tài)中的程度),表示為it。

關(guān)注向量focust通常被稱為輸出門,表示為ot。)

深度解析LSTM的全貌

Snorlax

寫這篇文章的時(shí)間我本來可以捉到一百只Pidgey的!下面Pidgey的卡通圖像。

神經(jīng)網(wǎng)絡(luò)

遞歸神經(jīng)網(wǎng)絡(luò)

深度解析LSTM的全貌

長短期記憶網(wǎng)絡(luò)

深度解析LSTM的全貌

學(xué)習(xí)如何編碼

讓我們看幾個(gè)LSTM發(fā)揮作用的例子。效仿Andrej Karpathy的文章,我將使用字符級(jí)別的LSTM模型,我給模型輸入字符序列并對(duì)其進(jìn)行訓(xùn)練,使它能夠預(yù)測(cè)序列中的下個(gè)字符。

盡管這種方法似乎有點(diǎn)幼稚,但是字符級(jí)別的模型其實(shí)真的十分有用,甚至超越文字模型。例如:

想象一個(gè)可以使你在手機(jī)上進(jìn)行編碼的自動(dòng)填充編碼插件(code autocompleter)。LSTM(理論上)可以跟蹤你當(dāng)前使用的方法的返回類型,并能對(duì)應(yīng)當(dāng)返回的變量做出更好的建議;它還能在不進(jìn)行編譯的情況下通過返回錯(cuò)誤類型得知你是否犯有錯(cuò)誤。

自然語言處理應(yīng)用(如機(jī)器翻譯)在處理罕見術(shù)語時(shí)通常會(huì)有困難。該如何翻譯一個(gè)你以前從未見過的單詞?或者如何將形容詞轉(zhuǎn)換為副詞呢?即使你知道某篇推文的意思,你該如何生成一個(gè)新的話題標(biāo)簽以方便其他人捕捉相關(guān)的信息呢?字符模型可以憑空想象出新的術(shù)語,這是另一個(gè)可以實(shí)現(xiàn)有趣應(yīng)用的領(lǐng)域。

首先我啟動(dòng)了一個(gè)EC2 p2.xlarge競(jìng)價(jià)實(shí)例(spot instance),在Apache Commons Lang codebase上訓(xùn)練了一個(gè)3層LSTM。這是該LSTM在數(shù)小時(shí)后生成的一個(gè)程序。

盡管該編碼肯定不算完美,但是也比許多我認(rèn)識(shí)的數(shù)據(jù)科學(xué)家編得好。我們可以看出,LSTM學(xué)到了很多有趣(并且正確?。┑木幋a行為:

它知道如何構(gòu)造類別:先是證書,然后是程序包和輸入,再是評(píng)論和類別定義,最后是變量和方法。同樣,它懂得如何創(chuàng)造方法:正確指令后跟裝飾符(先是描述,然后是@param,再是@return等),正確放置裝飾符,返回值非空的方法以合適的返回語句結(jié)尾。至關(guān)重要的是,這種行為貫穿長串長串的代碼!

它還能跟蹤子程序和嵌套層數(shù):語句的縮進(jìn)始終正確,并且Loop循環(huán)結(jié)構(gòu)始終關(guān)閉。

它甚至知道如何生成測(cè)試。

模型是如何做到的呢?讓我們觀察幾個(gè)隱狀態(tài)。

這是一個(gè)似乎是用來跟蹤代碼縮進(jìn)外層的神經(jīng)元(當(dāng)模型讀取字符作為輸入時(shí),代碼的狀態(tài)會(huì)決定字符的顏色,也就是當(dāng)模型試圖生成下個(gè)字符時(shí);紅色cell為否定,藍(lán)色cell為肯定):

這是一個(gè)倒數(shù)tab間空格數(shù)的神經(jīng)元:

這是一個(gè)與眾不同的3層LSTM,在TensorFlow的代碼庫中訓(xùn)練得出,供您試玩:

深度解析LSTM的全貌

鏈接:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

如果想查看更多的實(shí)例,你可以在網(wǎng)絡(luò)上找到許多其他有趣的實(shí)例。

探究LSTM內(nèi)部結(jié)構(gòu)

讓我們研究得更深一些。我們?cè)谏弦还?jié)中探討了幾個(gè)隱狀態(tài)的實(shí)例,但是我還想使用LSTM的cell狀態(tài)以及其他記憶機(jī)制。它們會(huì)如我們預(yù)期的那樣被激活嗎?或者說,是否存在令人意想不到的模式呢?

計(jì)數(shù)

為了進(jìn)行研究,讓我們先教LSTM進(jìn)行計(jì)數(shù)。(記住JavaPython語言下的LSTM是如何生成正確的縮進(jìn)的?。┮虼?,我生成了這種形式的序列

(N個(gè)"a"后跟著一個(gè)分隔符X,X后跟著N個(gè)"b"字符,其中1 <= N <= 10),并且訓(xùn)練了一個(gè)帶有10個(gè)隱層神經(jīng)元的單層LSTM。

不出所料,LSTM在它的訓(xùn)練范圍內(nèi)學(xué)習(xí)得非常好——它甚至在超出范圍后還能類推幾步。(但是當(dāng)我們?cè)囍顾鼣?shù)到19時(shí),它便開始出現(xiàn)錯(cuò)誤。)

深度解析LSTM的全貌

研究模型的內(nèi)部,我們期望找到一個(gè)能夠計(jì)算a's數(shù)量的隱層神經(jīng)元。我們也確實(shí)找到了一個(gè):

Neuron #2隱藏狀態(tài)

我用LSTM開發(fā)了一個(gè)小的網(wǎng)頁應(yīng)用(http://blog.echen.me/lstm-explorer),Neuron #2計(jì)數(shù)的似乎是它所能看到的a's和b's的總數(shù)。(記住根據(jù)神經(jīng)元的激活狀態(tài)對(duì)Cell進(jìn)行上色,顏色在暗紅色 [-1] 到暗藍(lán)色 [+1]之間變化。)

Cell狀態(tài)呢?它的表現(xiàn)類似:

Neuron #2Cell狀態(tài)

有趣的是,工作記憶看起來像是“更加清晰”的長期記憶。是不是整體都存在這種現(xiàn)象呢?

確實(shí)存在。(這和我們的預(yù)期完全相同,因?yàn)閠anh激活函數(shù)壓縮了長期記憶,同時(shí)輸出門會(huì)對(duì)記憶做出限制。)例如,以下是對(duì)所有10個(gè)cell狀態(tài)節(jié)點(diǎn)的快速概覽。我們看到許多淺色的cell,它們代表的是接近于0的數(shù)值。

深度解析LSTM的全貌

LSTM Cell狀態(tài)的統(tǒng)計(jì)

相比之下,10個(gè)工作記憶神經(jīng)元的表現(xiàn)非常集中。神經(jīng)元1、3、5、7在序列的前半部分甚至完全處于0的狀態(tài)。

深度解析LSTM的全貌

讓我們?cè)倏纯瓷窠?jīng)元#2。圖片中是候選記憶和輸出門,它們?cè)诟靼雮€(gè)序列中都相對(duì)較為穩(wěn)定——似乎神經(jīng)元每一步計(jì)算的都是a += 1或者b += 1。

輸入門

最后,這是對(duì)所有神經(jīng)元2的內(nèi)部的概覽。

深度解析LSTM的全貌

如果你想要研究不同的計(jì)數(shù)神經(jīng)元,你可以使用這里提供的觀察器(visualizer)。

鏈接:http://blog.echen.me/lstm-explorer/#/network?file=counter

深度解析LSTM的全貌

注意:這絕不是LSTM學(xué)習(xí)計(jì)數(shù)的唯一方法,我在本文中使用了相當(dāng)多的擬人手法。在我看來,觀察神經(jīng)網(wǎng)絡(luò)的行為非常有趣,也有助于構(gòu)建出更好的模型——畢竟神經(jīng)網(wǎng)絡(luò)中的許多想法都是對(duì)人類大腦的模擬,如果能觀察到我們未預(yù)料到的行為,也許可以設(shè)計(jì)出更加有效的學(xué)習(xí)機(jī)制。

Count von Count

讓我們看一個(gè)稍微復(fù)雜些的計(jì)數(shù)器。這次我生成了這種形式的序列:

(N個(gè)a's 中隨機(jī)夾雜幾個(gè)X's,然后加一個(gè)分隔符Y,Y后再跟N個(gè)b's)。LSTM仍需計(jì)算a's的數(shù)量,但是這次它需要忽視X's。

這是完整的LSTM(http://blog.echen.me/lstm-explorer/#/network?file=selective_counter)。我們預(yù)期看到一個(gè)計(jì)數(shù)神經(jīng)元,但是當(dāng)神經(jīng)元觀測(cè)到X時(shí),輸入門為零。的確是這樣!

上圖為Neuron 20的cell狀態(tài)。該狀態(tài)在讀到分隔符Y之前一直在增加,之后便一直減少至序列結(jié)尾——就如計(jì)算num_bs_left_to_print變量一樣,該變量在讀到a's時(shí)增加,讀到b's時(shí)減小)。

如果觀察它的輸入門,它的確在忽視X's :

有趣的是,候選記憶在讀到不相關(guān)的X's時(shí)完全激活——這表明了設(shè)置輸入門的必要性。(但是,如果該輸入門不是模型結(jié)構(gòu)的一部分,那么該神經(jīng)網(wǎng)絡(luò)則很可能會(huì)通過其他方法學(xué)會(huì)如何忽視X's,至少在當(dāng)下簡(jiǎn)單的實(shí)例中是這樣的。)

讓我們?cè)倏纯碞euron 10。

深度解析LSTM的全貌

這個(gè)神經(jīng)元很有趣,因?yàn)樗挥性谧x取到分隔符"Y"時(shí)才會(huì)激活——但它仍能成功編碼出序列中a's的數(shù)量。(也許從圖片中很難看出來,但是當(dāng)讀取到序列中的Y's和a's數(shù)量相同時(shí),所有cell狀態(tài)的值要么完全相同,要么彼此間的誤差不超過0.1%。你可以看到,a's較少的Y's比其他a's較多的Y's顏色更淺。)也許某些其他神經(jīng)元看到神經(jīng)元10偷懶便幫了它一下。

深度解析LSTM的全貌

記住狀態(tài)

接下來,我想看看LSTM是如何記住狀態(tài)的。我生成了這種形式的序列:

(即一個(gè)"A" or "B",緊跟1-10個(gè)x's,再跟一個(gè)分隔符"Y",結(jié)尾是開頭字符的小寫形式)。在這種情況下,神經(jīng)網(wǎng)絡(luò)需要記住它是處于"A" 狀態(tài)還是 "B"狀態(tài)中。我們期望找到一個(gè)在記憶以"A"開頭的序列時(shí)激活的神經(jīng)元,以及一個(gè)在記憶以"B"開頭的序列時(shí)激活的神經(jīng)元。我們的確找到了。

例如,下面是一個(gè)在讀到"A"時(shí)會(huì)激活的"A"神經(jīng)元,它在生成最后的字符之前會(huì)一直進(jìn)行記憶。注意:輸入門會(huì)忽視所有的"x"字符。

深度解析LSTM的全貌

這是一個(gè)"B"神經(jīng)元:

深度解析LSTM的全貌

有趣的是,盡管在神經(jīng)網(wǎng)絡(luò)讀到分隔符"Y" 之前,我們并不需要了解A狀態(tài)與B狀態(tài)的情況,但是隱狀態(tài)在讀取所有中間輸入的整個(gè)過程中都處于激活狀態(tài)。這似乎有些“效率低下”,或許是因?yàn)樯窠?jīng)元在計(jì)算x's的數(shù)量時(shí)還在完成一些其他的任務(wù)。

深度解析LSTM的全貌

復(fù)制任務(wù)

最后,讓我們探究一下LSTM是如何學(xué)習(xí)復(fù)制信息的。(Java LSTM能夠記憶和復(fù)制Apache許可證。)

注意:思考一下LSTM的工作方式你就會(huì)知道,LSTM并不十分擅長記憶大量單獨(dú)且詳細(xì)的信息。例如,你可能注意到由LSTM生成的代碼有個(gè)大缺陷,那就是它常常會(huì)使用未定義的變量——LSTM無法記住哪些變量已經(jīng)被定義過并不令人感到驚訝,因?yàn)楹茈y使用單一的cell來有效地編碼多值信息,如特征等。同時(shí),LSTM并沒有可以用來串連相鄰記憶形成相關(guān)話語的自然機(jī)制。記憶網(wǎng)絡(luò)和神經(jīng)圖靈機(jī)(neural Turing machines)是神經(jīng)網(wǎng)絡(luò)的兩個(gè)擴(kuò)展,它們可以借助外部記憶控件來增強(qiáng)記憶能力,從而幫助修復(fù)這個(gè)問題。因此,雖然LSTM并不能十分高效地進(jìn)行復(fù)制,但是觀察它們進(jìn)行各種嘗試也非常有趣。

為了完成復(fù)制任務(wù),我在如下形式的序列上訓(xùn)練了一個(gè)小的2層LSTM。

(即先是一個(gè)由a's、b's和 c's組成的3字符序列,中間插一個(gè)分隔符"X",后半部分則組前半部分的序列相同)。

我不確定“復(fù)制神經(jīng)元”長什么樣,因此為了找到記憶初始序列部分元素的神經(jīng)元,我在神經(jīng)網(wǎng)絡(luò)讀取分隔符X時(shí)觀察了它們的隱狀態(tài)。由于神經(jīng)網(wǎng)絡(luò)需要對(duì)初始序列進(jìn)行編碼,它的狀態(tài)應(yīng)當(dāng)根據(jù)學(xué)習(xí)的內(nèi)容呈現(xiàn)出不同的模式。

例如,下圖繪制了神經(jīng)網(wǎng)絡(luò)讀取分隔符"X"時(shí)神經(jīng)元5的隱狀態(tài)。該神經(jīng)元顯然能夠從不同序列中區(qū)分出以"c"開頭的序列。

再舉一個(gè)例子,下圖是神經(jīng)網(wǎng)絡(luò)讀取分隔符"X"時(shí)神經(jīng)元20的隱狀態(tài)。該神經(jīng)元似乎能挑選出以"b"開頭的序列。

有趣的是,如果我們觀察神經(jīng)元20的cell狀態(tài),可以看出它幾乎獨(dú)自捕捉了整個(gè)3字符序列(由于神經(jīng)元是一維的,這并不簡(jiǎn)單?。?/p>

這是神經(jīng)元20在整個(gè)序列中的cell狀態(tài)和隱狀態(tài)。注意:它的隱狀態(tài)在整個(gè)初始序列中都是關(guān)閉的(這也許是預(yù)料之中的事,因?yàn)橹恍枰谀骋稽c(diǎn)上被動(dòng)地保留該神經(jīng)元的記憶即可)。

但是,如果我們觀察得更仔細(xì)一些就會(huì)發(fā)現(xiàn):下一字符只要是"b",該神經(jīng)元就會(huì)激活。因此該神經(jīng)元并不是以"b"開頭的"b"神經(jīng)元,而是下一個(gè)字符是"b"的神經(jīng)元。

在我看來,這個(gè)模式適用于整個(gè)神經(jīng)網(wǎng)絡(luò)——所有神經(jīng)元似乎都在預(yù)測(cè)下一字符,而不是在記憶特定位置上的字符。例如,神經(jīng)元5似乎就是“預(yù)測(cè)下一字符是‘c’”的神經(jīng)元。

我不確定這是不是LSTM在復(fù)制信息時(shí)學(xué)習(xí)的默認(rèn)行為,也不確定是否存在其他復(fù)制機(jī)制。

狀態(tài)和門

為了真正深入探討和理解LSTM中不同狀態(tài)和門的用途,讓我們重復(fù)之前

狀態(tài)和隱藏狀態(tài)(記憶)cell.

我們?cè)緦ell狀態(tài)描述為長期記憶,將隱藏狀態(tài)描述為在需要時(shí)取出并聚焦這些記憶的方法。

因此,當(dāng)某段記憶當(dāng)前不相干時(shí),我們猜想隱藏狀態(tài)會(huì)關(guān)閉——這正是這個(gè)序列復(fù)制神經(jīng)元采取的行為。

遺忘門

遺忘門舍棄cell狀態(tài)的信息(0代表完全遺忘,1代表完全記?。虼宋覀儾孪耄哼z忘門在需要準(zhǔn)確記憶什么時(shí)會(huì)完全激活,而當(dāng)不再需要已記住的信息時(shí)則會(huì)關(guān)閉。

我們認(rèn)為這個(gè)"A"記憶神經(jīng)元用的是同樣的原理:當(dāng)該神經(jīng)元在讀取x's時(shí),記憶門完全激活,以記住這是一個(gè)"A"狀態(tài),當(dāng)它準(zhǔn)備生成最后一個(gè)"a"時(shí),記憶門關(guān)閉。

輸入門(保存門)

我們將輸入門(我原理稱其為“保存門“)的作用描述為決定是否保存來自某一新輸入的信息。因此,在識(shí)別到無用的信息時(shí),它會(huì)自動(dòng)關(guān)閉。

這就是這個(gè)選擇計(jì)數(shù)神經(jīng)元的作用:它計(jì)算a's和b's的數(shù)量,但是忽略不相關(guān)的x's。

令人驚奇的是我們并未在LSTM方程式中明確規(guī)定輸入(保存)、遺忘(記憶)和輸出(注意)門的工作方式。神經(jīng)網(wǎng)絡(luò)自己學(xué)會(huì)了最好的工作方式。

擴(kuò)展閱讀

讓我們重新概括一下如何獨(dú)自認(rèn)識(shí)LSTM。

首先,我們要解決的許多問題在某種程度上都是連續(xù)的或暫時(shí)的,因此我們應(yīng)該將過去學(xué)到的知識(shí)整合到我們的模型中。但是我們知道,神經(jīng)網(wǎng)絡(luò)的隱層能編碼有用的信息。因此,為什么不將這些隱層用作為記憶,從某一時(shí)間步傳遞到下一時(shí)間步呢?于是我們便得到RNN。

從自己的行為中我們可以知道,我們不能隨心所欲地跟蹤信息;但當(dāng)我們閱讀關(guān)于政策的新文章時(shí),我們并不會(huì)立即相信它寫內(nèi)容并將其納入我們對(duì)世界的認(rèn)識(shí)中。我們會(huì)有選擇地決定哪些信息需要進(jìn)行保存、哪些信息需要舍棄以及下次閱讀該新聞時(shí)需要使用哪些信息來作出決策。因此,我們想要學(xué)習(xí)如何收集、更新和使用信息——為什么不借助它們自己的迷你神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)這些東西呢?這樣我們就得到了LSTM。

現(xiàn)在,我們已經(jīng)瀏覽了整個(gè)的過程,可以自己進(jìn)行模型的調(diào)整了。

例如,你可能認(rèn)為用LSTM區(qū)分長期記憶和短期記憶很沒意義——為什么不直接構(gòu)建一個(gè)LSTM?或者,你也有可能發(fā)現(xiàn),分離的記憶門和保存門有點(diǎn)冗余——任何被遺忘的信息都應(yīng)該由新的信息替換,反之亦然。這樣一來便可提出另一個(gè)很受歡迎的LSTM變量——GRU。

又或者,也許你認(rèn)為在決定需要記憶、保存和注意哪些信息時(shí)我們不應(yīng)該只依賴于工作記憶——為什么不使用長期記憶呢?這樣一來,你就會(huì)發(fā)現(xiàn)Peephole LSTMs。

復(fù)興神經(jīng)網(wǎng)絡(luò)

最后讓我們?cè)倏匆粋€(gè)實(shí)例,這個(gè)實(shí)例是用特朗普總統(tǒng)的推文訓(xùn)練出的2層LSTM。盡管這個(gè)數(shù)據(jù)集很小,但是足以學(xué)習(xí)很多模式。例如,下面是一個(gè)在話題標(biāo)簽、URL和@mentions中跟蹤推文位置的神經(jīng)元:

以下是一個(gè)正確的名詞檢測(cè)器(注意:它不只是在遇到大寫單詞時(shí)激活):

這是一個(gè)“輔助動(dòng)詞+ ‘to be’”的檢測(cè)器(包括“will be”、“I've always been”、“has never been”等關(guān)鍵詞)。

這是一個(gè)引用判定器:

甚至還有一個(gè)MSGA和大寫神經(jīng)元:

這是LSTM生成的相關(guān)聲明(好吧,其中只有一篇是真的推文;猜猜看哪篇是真的推文吧?。?/p>

深度解析LSTM的全貌

深度解析LSTM的全貌

不幸的是,LSTM只學(xué)會(huì)了如何像瘋子一樣瘋言瘋語。

總結(jié)

總結(jié)一下,這就是你學(xué)到的內(nèi)容:

深度解析LSTM的全貌

這是你應(yīng)該儲(chǔ)存在記憶中的內(nèi)容:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:詳解LSTM:神經(jīng)網(wǎng)絡(luò)的記憶機(jī)制是這樣煉成的

文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Zstack中串口操作的深度解析(一)

    本帖最后由 eehome 于 2013-1-5 10:06 編輯 Zstack中串口操作的深度解析(一)歡迎研究ZigBee的朋友和我交流。。。
    發(fā)表于 08-12 21:11

    I2C通信設(shè)計(jì)深度解析

    I2C通信設(shè)計(jì)深度解析
    發(fā)表于 08-12 21:31

    java經(jīng)典面試題深度解析

    免費(fèi)視頻教程:java經(jīng)典面試題深度解析對(duì)于很多初學(xué)者來說,學(xué)好java在后期面試的階段都沒什么經(jīng)驗(yàn),為了讓大家更好的了解面試相關(guān)知識(shí),今天在這里給大家分享了一個(gè)java經(jīng)典面試題深度解析
    發(fā)表于 06-20 15:16

    圖解“新基建”產(chǎn)業(yè)鏈全貌!

    圖解“新基建”產(chǎn)業(yè)鏈全貌!
    發(fā)表于 05-13 08:57

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺實(shí)踐

    解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺實(shí)踐
    發(fā)表于 06-14 22:21

    什么是LSTM神經(jīng)網(wǎng)絡(luò)

    簡(jiǎn)單理解LSTM神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 01-28 07:16

    功能安全---AUTOSAR架構(gòu)深度解析 精選資料分享

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析AUTOSAR的分層式設(shè)計(jì),用于支持完整的軟件和硬件模塊的獨(dú)立性(Independence),中間RTE(Runtime
    發(fā)表于 07-23 08:34

    AUTOSAR架構(gòu)深度解析 精選資料推薦

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析目錄AUTOSAR架構(gòu)深度解析A
    發(fā)表于 07-28 07:40

    AUTOSAR架構(gòu)深度解析 精選資料分享

    AUTOSAR架構(gòu)深度解析本文轉(zhuǎn)載于:AUTOSAR架構(gòu)深度解析AUTOSAR的分層式設(shè)計(jì),用于支持完整的軟件和硬件模塊的獨(dú)立性(Independence),中間RTE(Runtime
    發(fā)表于 07-28 07:02

    C語言深度解析

    C語言深度解析,本資料來源于網(wǎng)絡(luò),對(duì)C語言的學(xué)習(xí)有很大的幫助,有著較為深刻的解析,可能會(huì)對(duì)讀者有一定的幫助。
    發(fā)表于 09-28 07:00

    一圖深度解析IoT領(lǐng)域4大“戰(zhàn)役”

    深度解析IoT領(lǐng)域4大“戰(zhàn)役”
    的頭像 發(fā)表于 01-22 10:25 ?4737次閱讀

    LSTM的硬件加速方式

    Long-short term memory,簡(jiǎn)稱LSTM,被廣泛的應(yīng)用于語音識(shí)別、機(jī)器翻譯、手寫識(shí)別等。LSTM涉及到大量的矩陣乘法和向量乘法運(yùn)算,會(huì)消耗大量的FPGA計(jì)算資源和帶寬。為了實(shí)現(xiàn)硬件加速,提出了稀疏LSTM
    發(fā)表于 08-24 10:32 ?2939次閱讀
    <b class='flag-5'>LSTM</b>的硬件加速方式

    基于LSTM和CNN融合的深度神經(jīng)網(wǎng)絡(luò)個(gè)人信用評(píng)分方法

    為提高信用風(fēng)險(xiǎn)評(píng)估的準(zhǔn)確性,基于互聯(lián)網(wǎng)行業(yè)的用戶行為數(shù)據(jù),提出一種基于長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)融合的深度神經(jīng)網(wǎng)絡(luò)個(gè)人信用評(píng)分方法。對(duì)每個(gè)用戶的行為數(shù)據(jù)進(jìn)行編碼,形成一個(gè)
    發(fā)表于 03-19 15:19 ?32次下載
    基于<b class='flag-5'>LSTM</b>和CNN融合的<b class='flag-5'>深度</b>神經(jīng)網(wǎng)絡(luò)個(gè)人信用評(píng)分方法

    基于深度LSTM和注意力機(jī)制的金融數(shù)據(jù)預(yù)測(cè)方法

    這些問題,文中提出了基于深度LSTM和注意力機(jī)制的金融數(shù)據(jù)預(yù)測(cè)模型。首先,該模型能處理復(fù)雜的金融市場(chǎng)數(shù)據(jù)輸入,主要是多序列的輸入;其次,該模型使用深度LSTM網(wǎng)絡(luò)對(duì)金融數(shù)據(jù)進(jìn)行建模,解
    發(fā)表于 04-23 11:32 ?7次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>LSTM</b>和注意力機(jī)制的金融數(shù)據(jù)預(yù)測(cè)方法

    深度學(xué)習(xí)——如何用LSTM進(jìn)行文本分類

    簡(jiǎn)介 主要內(nèi)容包括 如何將文本處理為Tensorflow LSTM的輸入 如何定義LSTM 用訓(xùn)練好的LSTM進(jìn)行文本分類 代碼 導(dǎo)入相關(guān)庫 #coding=utf-8 import
    的頭像 發(fā)表于 10-21 09:57 ?1455次閱讀