入門必看:輕松了解LSTM全貌

作者 |?Edwin Chen

編譯 | AI100

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

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

首先扮叨,請看下圖:

LSTM是不是很漂亮缤弦?

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

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

假設(shè)我們從某部電影中截取出了一系列的圖像碍沐,并且我們想對每張圖像進行標記狸捅,使其成為某個事件(是打斗嗎?演員們在說話嗎累提?演員們在吃東西嗎尘喝?)

我們該怎么做?

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

我們的算法首先可能需要學習檢測低級圖形无虚,如形狀和棱邊等缔赠。

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

如果數(shù)據(jù)量進一步增多的話度宦,算法可能會學習將這些高級圖樣映射至活動本身(包含嘴梁棠、肉排和餐叉的場景可能就是在用餐)

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

數(shù)學表達

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

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

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

第j個隱層神經(jīng)元輸出為

,其中??是激活函數(shù)啰脚。

隱含層與輸出層完全連接在一起殷蛇,第j個輸出神經(jīng)元輸出為

,如果需要知道其概率的話橄浓,我們可以借助softmax函數(shù)對輸出層進行轉(zhuǎn)換粒梦。

用矩陣符號表示為:

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)准给。

下圖為圖形視圖:

注意

為了使符號更加簡潔些泄朴,我假設(shè)x和h各包含一個額外的偏差神經(jīng)元重抖,偏差設(shè)置為1固定不變,方便學習偏差權(quán)重祖灰。

利用RNN記憶信息

忽視電影圖像的連續(xù)屬性像是ML 101的做法钟沛。如果我們看到一個沙灘的場景,我們應該在接下來的幀數(shù)中增強沙灘活動:如果圖像中的人在海水中夫植,那么這個圖像可能會被標記為“游泳”讹剔;如果圖像中的人閉著眼睛躺在沙灘上,那么這個圖像可能會被標記為“日光浴”详民。如果如果我們能夠記得Bob剛剛抵達一家超市的話延欠,那么即使沒有任何特別的超市特征,Bob手拿一塊培根的圖像都可能會被標記為“購物”而不是“烹飪”沈跨。

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

在檢測完每個圖像后,模型會輸出一個標簽饿凛,同時模型對世界的認識也會有所更新狞玛。例如,模型可能會學習自主地去發(fā)現(xiàn)并跟蹤相關(guān)的信息涧窒,如位置信息(場景發(fā)生的地點是在家中還是在沙灘上心肪?)、時間(如果場景中包含月亮的圖像纠吴,模型應該記住該場景發(fā)生在晚上)和電影進度(這個圖像是第一幀還是第100幀硬鞍?)。重要的是戴已,正如神經(jīng)元在未收到隱含圖像(如棱邊固该、圖形和臉等)的情況下可以自動地去發(fā)現(xiàn)這些圖像,我們的模型本身可以自動發(fā)現(xiàn)有用的信息糖儡。

在向模型輸入新的圖像時伐坏,模型應該結(jié)合它收集到的信息,更加出色地完成任務握联。

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

數(shù)學表達

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

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

ht=?(Wxt+Uht?1)

yt=Vht

注意:

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

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

讓我們思考一下我們的模型是如何更新它對世界的認識的。到目前為止遵班,我們并未對其更新過程施加任何限制措施屠升,因此該認識更新過程可能十分混亂:在某一幀,模型可能會認為其中的人物是在美國狭郑;到了下一幀腹暖,當它觀察到人物在吃壽司時,便會認為這些人在日本翰萨;而在下一幀脏答,當它觀察到北極熊時,便認為他們是在伊德拉島 ( Hydra island )亩鬼。也有可能殖告,模型收集到的大量信息表明Alice是一名投資分析師,但是在看到她進行烹飪時又斷定她是一名職業(yè)殺手雳锋。

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

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

加遺忘機嚼隘。例如,如果某個場景結(jié)束了袒餐,模型就應該忘記當前場景的位置和時間飞蛹,并且重置任何與該場景有關(guān)的信息;但是灸眼,如果某個人物在該場景中死亡了卧檐,那么模型應該繼續(xù)記住該人物死亡的事實。因此焰宣,我們想要模型學習獨立的的遺忘/記憶機制:當收到新的輸入時霉囚,模型需要知道哪些認識應該保留以及哪些認識應該遺棄。

添加保存機制匕积。當模型看到新的圖像時盈罐,它需要學習關(guān)于該圖像的所有信息是否值得使用以及是否值得保存榜跌。也許你媽曾給你發(fā)過一篇關(guān)于卡戴珊一家的文章,但是誰在乎呢盅粪?

因此當收到新的輸入信息時钓葫,模型首先忘記所有它認為自己不再需要的長期信息。然后票顾,再學習新輸入信息的哪部分具有使用價值础浮,并且將它們保存到長期記憶中。

將長期記憶聚焦為工作記憶奠骄。最后豆同,模型需要學習哪一部分的長期記憶能立刻發(fā)揮作用。例如戚揭,Bob的年齡可能是一條有用的信息诱告,需要保存在長期記憶中(兒童更可能會爬行,而成人則更可能會工作)民晒,但是如果Bob并未出現(xiàn)在當前場景中精居,那么這條信息就可能是不相干的信息。因此潜必,模型并不是始終都在使用全部的長期記憶的靴姿,它只需要學習應該集中注意力于哪部分記憶。

這就是長短期記憶網(wǎng)絡(luò)磁滚。RNN在各個時間步中改寫記憶的方式可以說是相當無序的佛吓,而LSTM改寫自己記憶的方式是更加精確的:通過使用特定的學習機制來判斷哪些信息需要記憶、哪些信息需要更新以及哪些信息需要特別注意垂攘。這有助于LSTM對信息進行長期跟蹤维雇。

數(shù)學表達

讓我們用數(shù)學表達式來描述LSTM的添加機制。

在時間t時晒他,我們收到一個新的輸入xt吱型。我們還將長期記憶和工作記憶從前兩個時間步ltmt?1和wmt?1(兩者都為n-長度向量)傳遞到當前時間步,進行更新陨仅。

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

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

(請注意它與先前網(wǎng)絡(luò)方程式相似的地方孔祸;這只是一個淺層神經(jīng)網(wǎng)絡(luò)隆敢。另外,我們之所以使用S形激活函數(shù)是因為我們所需要的數(shù)字介于0至1之間崔慧。)

接下來拂蝎,我們需要計算可以從xt中學習的信息,也就是長期記憶的候選添加記憶:

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

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

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

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

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

我們的工作記憶為:

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

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

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

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

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

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

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

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

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

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

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

Snorlax

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

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

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

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

學習如何編碼

讓我們看幾個LSTM發(fā)揮作用的例子示损。效仿Andrej Karpathy的文章,我將使用字符級別的LSTM模型嚷硫,我給模型輸入字符序列并對其進行訓練检访,使它能夠預測序列中的下個字符。

盡管這種方法似乎有點幼稚仔掸,但是字符級別的模型其實真的十分有用脆贵,甚至超越文字模型。例如:

想象一個可以使你在手機上進行編碼的自動填充編碼插件(code autocompleter)起暮。LSTM(理論上)可以跟蹤你當前使用的方法的返回類型卖氨,并能對應當返回的變量做出更好的建議;它還能在不進行編譯的情況下通過返回錯誤類型得知你是否犯有錯誤负懦。

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

首先我啟動了一個EC2 p2.xlarge競價實例(spot instance),在Apache Commons Lang codebase上訓練了一個3層LSTM抛猫。這是該LSTM在數(shù)小時后生成的一個程序蟆盹。

盡管該編碼肯定不算完美,但是也比許多我認識的數(shù)據(jù)科學家編得好闺金。我們可以看出逾滥,LSTM學到了很多有趣(并且正確!)的編碼行為:

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

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

它甚至知道如何生成測試题暖。

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

這是一個似乎是用來跟蹤代碼縮進外層的神經(jīng)元(當模型讀取字符作為輸入時芙委,代碼的狀態(tài)會決定字符的顏色,也就是當模型試圖生成下個字符時狂秦;紅色cell為否定灌侣,藍色cell為肯定):

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

這是一個與眾不同的3層LSTM,在TensorFlow的代碼庫中訓練得出裂问,供您試玩:

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

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

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

讓我們研究得更深一些堪簿。我們在上一節(jié)中探討了幾個隱狀態(tài)的實例痊乾,但是我還想使用LSTM的cell狀態(tài)以及其他記憶機制。它們會如我們預期的那樣被激活嗎椭更?或者說哪审,是否存在令人意想不到的模式呢?

計數(shù)

為了進行研究虑瀑,讓我們先教LSTM進行計數(shù)湿滓。(記住Java和Python語言下的LSTM是如何生成正確的縮進的!)因此舌狗,我生成了這種形式的序列

(N個"a"后跟著一個分隔符X叽奥,X后跟著N個"b"字符,其中1 <= N <= 10)痛侍,并且訓練了一個帶有10個隱層神經(jīng)元的單層LSTM朝氓。

不出所料,LSTM在它的訓練范圍內(nèi)學習得非常好——它甚至在超出范圍后還能類推幾步主届。(但是當我們試著使它數(shù)到19時赵哲,它便開始出現(xiàn)錯誤。)

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

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

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

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

Neuron #2Cell狀態(tài)

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

確實存在扼倘。(這和我們的預期完全相同,因為tanh激活函數(shù)壓縮了長期記憶除呵,同時輸出門會對記憶做出限制再菊。)例如歇僧,以下是對所有10個cell狀態(tài)節(jié)點的快速概覽女轿。我們看到許多淺色的cell,它們代表的是接近于0的數(shù)值蜜氨。

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

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

讓我們再看看神經(jīng)元#2价卤。圖片中是候選記憶和輸出門劝萤,它們在各半個序列中都相對較為穩(wěn)定——似乎神經(jīng)元每一步計算的都是a += 1或者b += 1。

輸入門

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

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

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

Count von Count

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

(N個a's 中隨機夾雜幾個X's疙驾,然后加一個分隔符Y凶伙,Y后再跟N個b's)。LSTM仍需計算a's的數(shù)量它碎,但是這次它需要忽視X's函荣。

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

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

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

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

讓我們再看看Neuron 10底洗。

這個神經(jīng)元很有趣,因為它只有在讀取到分隔符"Y"時才會激活——但它仍能成功編碼出序列中a's的數(shù)量咕娄。(也許從圖片中很難看出來亥揖,但是當讀取到序列中的Y's和a's數(shù)量相同時,所有cell狀態(tài)的值要么完全相同圣勒,要么彼此間的誤差不超過0.1%费变。你可以看到,a's較少的Y's比其他a's較多的Y's顏色更淺圣贸。)也許某些其他神經(jīng)元看到神經(jīng)元10偷懶便幫了它一下挚歧。

記住狀態(tài)

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

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

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

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

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

復制任務

最后,讓我們探究一下LSTM是如何學習復制信息的疚膊。(Java LSTM能夠記憶和復制Apache許可證义辕。)

注意

思考一下LSTM的工作方式你就會知道,LSTM并不十分擅長記憶大量單獨且詳細的信息寓盗。例如灌砖,你可能注意到由LSTM生成的代碼有個大缺陷,那就是它常常會使用未定義的變量——LSTM無法記住哪些變量已經(jīng)被定義過并不令人感到驚訝傀蚌,因為很難使用單一的cell來有效地編碼多值信息基显,如特征等。同時善炫,LSTM并沒有可以用來串連相鄰記憶形成相關(guān)話語的自然機制撩幽。記憶網(wǎng)絡(luò)和神經(jīng)圖靈機(neural Turing machines)是神經(jīng)網(wǎng)絡(luò)的兩個擴展,它們可以借助外部記憶控件來增強記憶能力箩艺,從而幫助修復這個問題窜醉。因此,雖然LSTM并不能十分高效地進行復制艺谆,但是觀察它們進行各種嘗試也非常有趣榨惰。

為了完成復制任務,我在如下形式的序列上訓練了一個小的2層LSTM静汤。

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

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

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

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

有趣的是瓤漏,如果我們觀察神經(jīng)元20的cell狀態(tài)腾夯,可以看出它幾乎獨自捕捉了整個3字符序列(由于神經(jīng)元是一維的,這并不簡單J叱洹):

這是神經(jīng)元20在整個序列中的cell狀態(tài)和隱狀態(tài)蝶俱。注意:它的隱狀態(tài)在整個初始序列中都是關(guān)閉的(這也許是預料之中的事,因為只需要在某一點上被動地保留該神經(jīng)元的記憶即可)饥漫。

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

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

我不確定這是不是LSTM在復制信息時學習的默認行為,也不確定是否存在其他復制機制央勒。

狀態(tài)和門

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

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

我們原本將cell狀態(tài)描述為長期記憶,將隱藏狀態(tài)描述為在需要時取出并聚焦這些記憶的方法崔步。

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

遺忘門

遺忘門舍棄cell狀態(tài)的信息(0代表完全遺忘灶似,1代表完全記住)瑞你,因此我們猜想:遺忘門在需要準確記憶什么時會完全激活酪惭,而當不再需要已記住的信息時則會關(guān)閉。

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

輸入門(保存門)

我們將輸入門(我原理稱其為“保存門“)的作用描述為決定是否保存來自某一新輸入的信息嫩实。因此,在識別到無用的信息時窥岩,它會自動關(guān)閉甲献。

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

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

讓我們重新概括一下如何獨自認識LSTM锥累。

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

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

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

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

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

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

最后讓我們再看一個實例闪朱,這個實例是用特朗普總統(tǒng)的推文訓練出的2層LSTM月匣。盡管這個數(shù)據(jù)集很小,但是足以學習很多模式奋姿。例如锄开,下面是一個在話題標簽、URL和@mentions中跟蹤推文位置的神經(jīng)元:

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

這是一個“輔助動詞+ ‘to be’”的檢測器(包括“will be”称诗、“I've always been”萍悴、“has never been”等關(guān)鍵詞)。

這是一個引用判定器:

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

這是LSTM生成的相關(guān)聲明(好吧寓免,其中只有一篇是真的推文癣诱;猜猜看哪篇是真的推文吧!):

不幸的是袜香,LSTM只學會了如何像瘋子一樣瘋言瘋語撕予。

總結(jié)

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

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

作者:AI科技大本營

鏈接:http://www.reibang.com/p/6ef8d974de75

來源:簡書

著作權(quán)歸作者所有蜈首。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)实抡,非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欢策,一起剝皮案震驚了整個濱河市吆寨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踩寇,老刑警劉巖鸟废,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姑荷,居然都是意外死亡盒延,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門鼠冕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來添寺,“玉大人,你說我怎么就攤上這事懈费〖坡叮” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長票罐。 經(jīng)常有香客問我叉趣,道長,這世上最難降的妖魔是什么该押? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任疗杉,我火速辦了婚禮,結(jié)果婚禮上蚕礼,老公的妹妹穿的比我還像新娘烟具。我一直安慰自己,他們只是感情好奠蹬,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布朝聋。 她就那樣靜靜地躺著,像睡著了一般囤躁。 火紅的嫁衣襯著肌膚如雪冀痕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天狸演,我揣著相機與錄音言蛇,去河邊找鬼。 笑死严沥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的中姜。 我是一名探鬼主播消玄,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丢胚!你這毒婦竟也來了翩瓜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤携龟,失蹤者是張志新(化名)和其女友劉穎兔跌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峡蟋,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坟桅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕊蝗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅乓。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蓬戚,靈堂內(nèi)的尸體忽然破棺而出夸楣,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布豫喧,位于F島的核電站石洗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏紧显。R本人自食惡果不足惜讲衫,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸟妙。 院中可真熱鬧焦人,春花似錦、人聲如沸重父。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽房午。三九已至矿辽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郭厌,已是汗流浹背袋倔。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留折柠,地道東北人宾娜。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像扇售,于是被迫代替她去往敵國和親前塔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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