rnn學習筆記,我不是知識的創造者,我只是知識的搬運工。
rnn:遞迴神經網路,帶有乙個指向自身的環,用來表示它可以傳遞當前時刻處理的資訊給下一時刻使用,如下圖所示,一條鏈狀神經網路代表了乙個遞迴神經網路,可以認為它是對相同神經網路的多重複製,每一時刻的神經網路會傳遞資訊給下一時刻。
其中xt為網路層的輸入,a表示模型處理部分,ht為輸出,a的細節實現如下圖所示:
所有的遞迴神經網路都是由重複神經網路模組構成的一條鏈,可以看到它的處理層非常簡單,通常是乙個單tanh層,通過當前輸入及上一時刻的輸出來得到當前輸出。與神經網路相比,經過簡單地改造,它已經可以利用上一時刻學習到的資訊進行當前時刻的學習了。每條線表示乙個完整向量,從乙個節點的輸出到其他節點的輸入。粉紅色圓圈代表逐點操作,比如向量加法,而黃色框框表示的是已學習的神經網路層。線條合併表示串聯,線條分叉表示內容複製並輸入到不同地方。
遞迴神經網路因為具有一定的記憶功能,這種網路與序列和列表密切相關,可以被用來解決很多問題,例如:語音識別、語言模型、機器翻譯等。但是它並不能很好地處理長時依賴問題。
長時依賴問題是當**點與依賴的相關資訊距離比較遠的時候,就難以學到該相關資訊。例如在句子」我出生在法國,……,我會說法語「中,若要**末尾」法語「,我們需要用到上下文」法國「。理論上,遞迴神經網路是可以處理這樣的問題的,但是實際上,常規的遞迴神經網路並不能很好地解決長時依賴,於是lstms的使用很好地解決這個問題。
lstms:long short term mermory network是一種特殊的rnns,能夠學習長期依賴關係。它們由hochreiter和schmidhuber (1997)提出,在後期工作中又由許多人進行了調整和普及,lstm結構與rnn相似,處理模組a更為複雜,如下圖所示:
lstms的關鍵點是單元狀態,就是穿過圖中的水平線。單元狀態有點像是個傳送帶。它貫穿整個鏈條,只有一些小的線性相互作用。
sigmoid層輸出0到1之間的數字,描述了每個成分應該通過門限的程度。0表示「不讓任何成分通過」,而1表示「讓所有成分通過!」。lstm有三種這樣的門限,來保護和控制單元狀態。
細節解析:
1、決定哪些資訊需要從單元狀態中拋棄。這項決策是由乙個稱為「遺忘門限層」的sigmoid層決定的。它根據上一時刻的輸出和當前輸入來為單元狀態中的每個數字計算乙個0到1之間的數字。1表示「完全保留」,而0則表示「完全拋棄」。
2、決定在單元狀態中需要儲存哪些新資訊。這分為兩個部分。首先,乙個叫做「輸入門限層」的sigmoid層決定哪些值需要更新。接下來,乙個tanh層建立乙個向量,包含新候選值,這些值可以新增到這個狀態中。下一步我們將會結合這兩者來建立乙個狀態更新。
3、更新舊單元狀態了,輸入到新單元狀態。之前的步驟已經決定了需要做哪些事情,我們只需要實現這些事情就行了。我們在舊狀態上乘以ft,忘記之前決定需要忘記的。然後我們加上,這就是新的候選值,它的規模取決於我們決定每個狀態值需要更新多少。
4、決定需要輸出什麼。這個輸出將會建立在單元狀態的基礎上,但是個過濾版本。首先,我們執行乙個sigmoid層來決定單元狀態中哪些部分需要輸出。然後我們將單元狀態輸入到tanh函式(將值轉換成-1到1之間)中,然後乘以輸出的sigmoid門限值,所以我們只輸出了我們想要輸出的那部分。
參考:
深度學習 神經網路理論
但是,不要被複雜的定義嚇到。神經網路 包括現在的深度神經網路,卷積神經網路等等 的實質其實是一種加權疊加的思想,其通過不斷地訓練反饋更新權值,使得網路的輸出跟目標輸出一致,獲得所謂的 學習能力 這是乙個典型的神經網路結構,其分別由數個神經元組成輸入層,隱藏層,輸出層,其中輸入層,輸出層固定,隱藏層層...
遞迴神經網路RNN
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data 載入資料 mnist input data.read data sets mnist data one hot true 輸入是28 ...
遞迴神經網路RNN
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data in 2 載入資料集 mnist input data.read data sets mnist data one hot true ...