天天看點

了解遞歸神經網絡-part1

在本文的第一部分中,我們将介紹遞歸神經網絡的來源,說明傳統神經網絡的局限性。然後,我們将深入探讨其技術架構的細節,這對于我們在下一部分用numpy從頭進行編碼很有用。

人類學習

B.J. Neblett曾經說過:我們是經驗的總和,我們不會和昨天一樣,也不會和明天一樣。

他道出了一個固有的真理。我們的大腦将過去的經驗彙集在一起,并以一種很複雜的方式将它們結合在一起,來解決新的未知的任務。在生活中,我們很難處理曾經存儲和呼叫的資訊序列。人類學習可以被分解為兩個基本的過程:

1.記憶:每獲得一次新的資訊,我們将其存儲起來作為将來的參考。

2.組合:并非所有的任務都是相同的,是以,我們将分析能力與記憶中的經驗結合起來,然後進行推理。

了解遞歸神經網絡-part1
了解遞歸神經網絡-part1

如上圖所示。即使這隻貓的形狀很怪異,一個孩子也能夠立刻辨認出這是一隻貓。然而,孩子可能會無意識的想到人類伸展變形和姿勢,并推斷出貓也發生了同樣的變化。

然而,并非所有任務都需要過去的經驗。有時候,解決問題就是利用剛才處理的資訊。例如,看看這個不完整的句子:

我買了平時愛吃的焦糖爆米花和冰茶,然後前往 ___

如果讓你填寫遺漏的單詞,你可能會猜測“電影院”。但是,你怎麼知道不是“圖書館”或者“星巴克”呢?也許是因為你根據上下文或者前面的資訊來推斷正确的答案。現在,考慮以下幾點:如果讓你倒序背誦最喜歡的歌曲的歌詞,你能做到嗎?倒序數數還差不多!

了解遞歸神經網絡-part1

那麼為什麼倒序背誦歌詞很難呢?由于每個數字之間都有一個邏輯關系,并且知道9位數字的順序以及減法,這就意味着,即使以前從未這樣做過,也可以将1845098倒序數數。另一方面,你以特定的順序來記歌曲的歌詞,從第一個單詞開始,大腦就開始對下一個單詞進行索引。由于之前從未做過這種倒序索引,是以倒序背誦歌詞特别難。把要記憶的歌詞序列想象成一個巨大的毛線球,如上圖所示,隻有在正向序列中正确的第一個字開始,才可以繼續通路下去。

主要原因就是,我們的大腦可以很自然的處理序列,它依靠一種看似簡單實則強大的

資訊持久性

來實作識别。

傳統神經網絡的困境

我們生活在一個有固定順序的世界中。音頻、視訊和語言(甚至是DNA!)隻是資料的一些例子,在這些資料中,給定時間步的資訊與以前時間步的資訊錯綜複雜。那麼,這與深度學習有什麼關系?比如從視訊中提取一系列幀送入神經網絡中,我們來預測接下來會發生什麼…….或者将一句不完整的話送入神經網絡中,并要求它完成這個句子。

很明顯的是,過去的資訊對于能否輸出一個合理的預測至關重要。但是傳統的神經網絡根本無法做到這一點,因為它們的基本假設是

輸入是互相獨立的

!這是一個問題,因為這意味着任何一個時間點的輸出都

完全并且唯一

由輸入确定。沒有曆史紀錄,我們的神經網絡就無法利用不同幀或單詞之間的複雜時間依賴性,進而無法對輸出的預測進行優化。

了解遞歸神經網絡-part1

需要注意的是,遞歸神經網絡不僅僅局限于有序資料,因為很多問題都可以分解為一系列的子問題。想法如下:我們并不要求神經網絡一次性預測輸出(這樣會增加模型的負擔),而是對疊代子輸出進行預測,并且這相對來說更加容易,其中每個子輸出都是前一次的改進。例如,我們用遞歸神經網絡産生帶有某種順序的手寫數字,模仿藝術家的字迹,來對作品進行改進和重新評估。

記憶增強神經網絡

那麼,我們怎樣賦予神經網絡以記憶呢?為了回答這個問題,我們來回顧一下基本的神經網絡隐藏層:一個向量

X

作為輸入,乘以權重矩陣

W

并應用一個非線性。當我們将三個連續的輸入送入網絡時,将會考慮輸出

y

。請注意,為了簡化符号,忽略偏差。我對如下的方程式做了彩色處理,以便能夠看出模型的結構。

了解遞歸神經網絡-part1

如上述函數所示,每個輸出完全由其輸入決定,也就是說,在計算其輸出值時,并不存在過去的輸入。是以,我們在隐藏層上将目前的輸入和前一個輸入組合起來作為一個新的輸入,看看發生了什麼變化。

了解遞歸神經網絡-part1

很棒!通過在公式中引入過去的輸入,我們設法在每個隐藏層中獲得了2種顔色的組合。直覺地來說,我們現在的網絡記憶深度為1,即相當于“看到”時間倒退一步。請記住,我們的目标是,捕獲到以前所有時間步的資訊,是以,這不會削弱網絡的性能。

那麼,如果我們将目前的輸入和前一個隐藏層組合在一起,作為網絡的輸入,會發生什麼情況呢?

了解遞歸神經網絡-part1

好多了!我們的網絡層在每個時間步中都混合了之前所有的顔色,進而使我們的網絡在計算其輸出時,會将所有的曆史時間步紀錄在内。這是重制其輝煌的力量:創造一個資訊可以持續跨越曆史時間步的循環。

遞歸神經網絡原理
了解遞歸神經網絡-part1

作為其核心部分,遞歸神經網絡可以用一個内部隐藏狀态h來表示,該狀态在每個時間步上都進行更新。此更新方式的函數表示如下:

了解遞歸神經網絡-part1

雖然看起來很複雜,我們來解剖一下,就會變得很簡單。

1.Wxhxt:我們将輸入xt和一個權重矩陣Wxh作點積運算。你可以将此點積運算作為隐藏層從輸入中提取資訊的一種方式。

2.Whhht−1:這個點積運算允許網絡從過去的全部曆史輸入中提取資訊,并和目前輸入所收集到的資訊組合在一起,來計算其輸出。這是遞歸神經網絡最關鍵的一個自定義屬性。

3.f和g是激活函數,将點積運算壓縮到一定的範圍内。函數f通常是tanh或ReLU。當我們希望輸出是某個類别的機率時,函數g通常是一個softmax。

4.b1和b2表示輸出和原值之間的偏差(類似于線性函數ax+b中的b)。

正如你所看到的那樣,Vanilla遞歸神經網絡模型非常簡單。我們一旦定義了它的架構,就可以像正常的神經網絡一樣訓練遞歸神經網絡,即初始化權重矩陣和偏差,定義損失函數并用某種形式的梯度下降将損失函數最小化。

數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!

以上為譯文。

本文由北郵

@愛可可-愛生活

 老師推薦,

阿裡雲雲栖社群

組織翻譯。

文章原标題《Understanding Recurrent Neural Networks - Part I》,譯者:Mags,審校:袁虎。 文章為簡譯,更為詳細的内容,請檢視 原文

繼續閱讀