转载:递归神经网络
遞歸神經(jīng)網(wǎng)絡(luò)
作者:阿里云云棲社區(qū)## 標(biāo)題
鏈接:https://www.jianshu.com/p/513e11ec9f6f
摘要: 遞歸神經(jīng)網(wǎng)絡(luò)是什么?傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)有哪些局限性?本文會(huì)為你揭開(kāi)遞歸神經(jīng)網(wǎng)絡(luò)的面紗。
在本文的第一部分中,我們將介紹遞歸神經(jīng)網(wǎng)絡(luò)的來(lái)源,說(shuō)明傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的局限性。然后,我們將深入探討其技術(shù)架構(gòu)的細(xì)節(jié),這對(duì)于我們?cè)谙乱徊糠钟胣umpy從頭進(jìn)行編碼很有用。
人類學(xué)習(xí)
B.J. Neblett曾經(jīng)說(shuō)過(guò):我們是經(jīng)驗(yàn)的總和,我們不會(huì)和昨天一樣,也不會(huì)和明天一樣。
他道出了一個(gè)固有的真理。我們的大腦將過(guò)去的經(jīng)驗(yàn)匯集在一起,并以一種很復(fù)雜的方式將它們結(jié)合在一起,來(lái)解決新的未知的任務(wù)。在生活中,我們很難處理曾經(jīng)存儲(chǔ)和呼叫的信息序列。人類學(xué)習(xí)可以被分解為兩個(gè)基本的過(guò)程:
1.記憶:每獲得一次新的信息,我們將其存儲(chǔ)起來(lái)作為將來(lái)的參考。
2.組合:并非所有的任務(wù)都是相同的,因此,我們將分析能力與記憶中的經(jīng)驗(yàn)結(jié)合起來(lái),然后進(jìn)行推理。
如上圖所示。即使這只貓的形狀很怪異,一個(gè)孩子也能夠立刻辨認(rèn)出這是一只貓。然而,孩子可能會(huì)無(wú)意識(shí)的想到人類伸展變形和姿勢(shì),并推斷出貓也發(fā)生了同樣的變化。
然而,并非所有任務(wù)都需要過(guò)去的經(jīng)驗(yàn)。有時(shí)候,解決問(wèn)題就是利用剛才處理的信息。例如,看看這個(gè)不完整的句子:
“我買了平時(shí)愛(ài)吃的焦糖爆米花和冰茶,然后前往___。”
如果讓你填寫遺漏的單詞,你可能會(huì)猜測(cè)“電影院”。但是,你怎么知道不是“圖書館”或者“星巴克”呢?也許是因?yàn)槟愀鶕?jù)上下文或者前面的信息來(lái)推斷正確的答案。現(xiàn)在,考慮以下幾點(diǎn):如果讓你倒序背誦最喜歡的歌曲的歌詞,你能做到嗎?倒序數(shù)數(shù)還差不多!
那么為什么倒序背誦歌詞很難呢?由于每個(gè)數(shù)字之間都有一個(gè)邏輯關(guān)系,并且知道9位數(shù)字的順序以及減法,這就意味著,即使以前從未這樣做過(guò),也可以將1845098倒序數(shù)數(shù)。另一方面,你以特定的順序來(lái)記歌曲的歌詞,從第一個(gè)單詞開(kāi)始,大腦就開(kāi)始對(duì)下一個(gè)單詞進(jìn)行索引。由于之前從未做過(guò)這種倒序索引,所以倒序背誦歌詞特別難。把要記憶的歌詞序列想象成一個(gè)巨大的毛線球,如上圖所示,只有在正向序列中正確的第一個(gè)字開(kāi)始,才可以繼續(xù)訪問(wèn)下去。
主要原因就是,我們的大腦可以很自然的處理序列,它依靠一種看似簡(jiǎn)單實(shí)則強(qiáng)大的信息持久性來(lái)實(shí)現(xiàn)識(shí)別。
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的困境
我們生活在一個(gè)有固定順序的世界中。音頻、視頻和語(yǔ)言(甚至是DNA!)只是數(shù)據(jù)的一些例子,在這些數(shù)據(jù)中,給定時(shí)間步的信息與以前時(shí)間步的信息錯(cuò)綜復(fù)雜。那么,這與深度學(xué)習(xí)有什么關(guān)系?比如從視頻中提取一系列幀送入神經(jīng)網(wǎng)絡(luò)中,我們來(lái)預(yù)測(cè)接下來(lái)會(huì)發(fā)生什么…….或者將一句不完整的話送入神經(jīng)網(wǎng)絡(luò)中,并要求它完成這個(gè)句子。
很明顯的是,過(guò)去的信息對(duì)于能否輸出一個(gè)合理的預(yù)測(cè)至關(guān)重要。但是傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)根本無(wú)法做到這一點(diǎn),因?yàn)樗鼈兊幕炯僭O(shè)是輸入是相互獨(dú)立的!這是一個(gè)問(wèn)題,因?yàn)檫@意味著任何一個(gè)時(shí)間點(diǎn)的輸出都完全并且唯一由輸入確定。沒(méi)有歷史紀(jì)錄,我們的神經(jīng)網(wǎng)絡(luò)就無(wú)法利用不同幀或單詞之間的復(fù)雜時(shí)間依賴性,進(jìn)而無(wú)法對(duì)輸出的預(yù)測(cè)進(jìn)行優(yōu)化。
需要注意的是,遞歸神經(jīng)網(wǎng)絡(luò)不僅僅局限于有序數(shù)據(jù),因?yàn)楹芏鄦?wèn)題都可以分解為一系列的子問(wèn)題。想法如下:我們并不要求神經(jīng)網(wǎng)絡(luò)一次性預(yù)測(cè)輸出(這樣會(huì)增加模型的負(fù)擔(dān)),而是對(duì)迭代子輸出進(jìn)行預(yù)測(cè),并且這相對(duì)來(lái)說(shuō)更加容易,其中每個(gè)子輸出都是前一次的改進(jìn)。例如,我們用遞歸神經(jīng)網(wǎng)絡(luò)產(chǎn)生帶有某種順序的手寫數(shù)字,模仿藝術(shù)家的字跡,來(lái)對(duì)作品進(jìn)行改進(jìn)和重新評(píng)估。
記憶增強(qiáng)神經(jīng)網(wǎng)絡(luò)
那么,我們?cè)鯓淤x予神經(jīng)網(wǎng)絡(luò)以記憶呢?為了回答這個(gè)問(wèn)題,我們來(lái)回顧一下基本的神經(jīng)網(wǎng)絡(luò)隱藏層:一個(gè)向量X作為輸入,乘以權(quán)重矩陣W并應(yīng)用一個(gè)非線性。當(dāng)我們將三個(gè)連續(xù)的輸入送入網(wǎng)絡(luò)時(shí),將會(huì)考慮輸出y。請(qǐng)注意,為了簡(jiǎn)化符號(hào),忽略偏差。我對(duì)如下的方程式做了彩色處理,以便能夠看出模型的結(jié)構(gòu)。
如上述函數(shù)所示,每個(gè)輸出完全由其輸入決定,也就是說(shuō),在計(jì)算其輸出值時(shí),并不存在過(guò)去的輸入。因此,我們?cè)陔[藏層上將當(dāng)前的輸入和前一個(gè)輸入組合起來(lái)作為一個(gè)新的輸入,看看發(fā)生了什么變化。
很棒!通過(guò)在公式中引入過(guò)去的輸入,我們?cè)O(shè)法在每個(gè)隱藏層中獲得了2種顏色的組合。直觀地來(lái)說(shuō),我們現(xiàn)在的網(wǎng)絡(luò)記憶深度為1,即相當(dāng)于“看到”時(shí)間倒退一步。請(qǐng)記住,我們的目標(biāo)是,捕獲到以前所有時(shí)間步的信息,因此,這不會(huì)削弱網(wǎng)絡(luò)的性能。
那么,如果我們將當(dāng)前的輸入和前一個(gè)隱藏層組合在一起,作為網(wǎng)絡(luò)的輸入,會(huì)發(fā)生什么情況呢?
好多了!我們的網(wǎng)絡(luò)層在每個(gè)時(shí)間步中都混合了之前所有的顏色,從而使我們的網(wǎng)絡(luò)在計(jì)算其輸出時(shí),會(huì)將所有的歷史時(shí)間步紀(jì)錄在內(nèi)。這是重現(xiàn)其輝煌的力量:創(chuàng)造一個(gè)信息可以持續(xù)跨越歷史時(shí)間步的循環(huán)。
遞歸神經(jīng)網(wǎng)絡(luò)原理
作為其核心部分,遞歸神經(jīng)網(wǎng)絡(luò)可以用一個(gè)內(nèi)部隱藏狀態(tài)h來(lái)表示,該狀態(tài)在每個(gè)時(shí)間步上都進(jìn)行更新。此更新方式的函數(shù)表示如下:
雖然看起來(lái)很復(fù)雜,我們來(lái)解剖一下,就會(huì)變得很簡(jiǎn)單。
1.Wxhxt:我們將輸入xt和一個(gè)權(quán)重矩陣Wxh作點(diǎn)積運(yùn)算。你可以將此點(diǎn)積運(yùn)算作為隱藏層從輸入中提取信息的一種方式。
2.Whhht?1:這個(gè)點(diǎn)積運(yùn)算允許網(wǎng)絡(luò)從過(guò)去的全部歷史輸入中提取信息,并和當(dāng)前輸入所收集到的信息組合在一起,來(lái)計(jì)算其輸出。這是遞歸神經(jīng)網(wǎng)絡(luò)最關(guān)鍵的一個(gè)自定義屬性。
3.f和g是激活函數(shù),將點(diǎn)積運(yùn)算壓縮到一定的范圍內(nèi)。函數(shù)f通常是tanh或ReLU。當(dāng)我們希望輸出是某個(gè)類別的概率時(shí),函數(shù)g通常是一個(gè)softmax。
4.b1和b2表示輸出和原值之間的偏差(類似于線性函數(shù)ax+b中的b)。
正如你所看到的那樣,Vanilla遞歸神經(jīng)網(wǎng)絡(luò)模型非常簡(jiǎn)單。我們一旦定義了它的架構(gòu),就可以像正常的神經(jīng)網(wǎng)絡(luò)一樣訓(xùn)練遞歸神經(jīng)網(wǎng)絡(luò),即初始化權(quán)重矩陣和偏差,定義損失函數(shù)并用某種形式的梯度下降將損失函數(shù)最小化。
以上為譯文。
本文由阿里云云棲社區(qū)組織翻譯。
文章原標(biāo)題《Understanding Recurrent Neural Networks - Part I》,譯者:Mags,審校:袁虎。
詳情請(qǐng)閱讀原文
總結(jié)
- 上一篇: 基于粒子群算法优化的ELMAN动态递归神
- 下一篇: 安卓解压文件