動畫圖解迴圈神經網路

AIBigbull2050發表於2019-09-09

遞迴神經網路的圖解指南:直觀理解

動畫圖解迴圈神經網路

如果你想學習機器學習,理解遞迴神經網路這一強大技術非常重要。如果你使用智慧手機或經常上網,你很有可能已經使用過應用了RNN的應用程式。遞迴神經網路用於語音識別,語言翻譯,股票預測; 甚至用於影像識別來描述圖片中的內容。

網上已經有許多關於遞迴神經網路的指南,本文透過分享插圖以及解釋我是如何理解它的。我將避免所有數學公式,而是專注於RNN背後的直覺。在這篇文章的最後,希望你應該對RNN有一個很好的理解,並有所啟發。

序列資料

RNN是神經網路,擅長建模序列資料。要理解這意味著什麼,讓做一個實驗。假設你拍攝一張移動的球在時間上的靜態快照。

動畫圖解迴圈神經網路

此時你想預測球的移動方向。因此,當你只有在螢幕上看到的資訊時,你將如何做呢?可以繼續猜測,你提出的任何答案都是隨機的猜測。如果不知道球的位置,就沒有足夠的資料來預測球的位置。

如果你連續記錄球的位置的許多快照,你將有足夠的資訊來做出更好的預測。

動畫圖解迴圈神經網路

所以這是一個序列,一個特定的順序,一個跟著另一個。有了這些資訊,您現在可以看到球向右移動。

序列資料有多種形式。音訊是一種自然序列, 你可以將音訊頻譜圖分成塊並將其輸入RNN。

動畫圖解迴圈神經網路

音訊頻譜圖切成塊

文字是另一種形式的序列。你可以將文字分成一系列字元或一系列單詞。

順序記憶

RNN擅長處理預測的序列資料,其透過順序記憶的概念來做到這一點。下面邀請你說出你腦海中的字母。

動畫圖解迴圈神經網路

這很簡單吧,如果你學過這個特定序列,它應該很快被腦海反饋出來。

現在嘗試反向說字母。

動畫圖解迴圈神經網路

我敢打賭,這要困難得多。除非你之前練過這個特定的序列,否則你可能會遇到困難。

下面從字母F開始。

動畫圖解迴圈神經網路

首先,你會在前幾個字母上掙扎,但是在你的大腦拿起模式後,剩下的就會自然而然。順序記憶是一種使大腦更容易識別序列模式的機制。

遞迴神經網路

就像人一樣,RNN也有順序記憶的這個抽象概念,但是RNN如何複製這個概念呢?那麼,來看一個傳統的神經網路,也稱為前饋神經網路。它有輸入層,隱藏層和輸出層。

動畫圖解迴圈神經網路

前饋神經網路

如何使得一個前饋神經網路,以便能夠使用以前的資訊來影響以後的資訊呢?如果在神經網路中新增一個可以傳遞先前資訊的迴圈怎麼辦?

動畫圖解迴圈神經網路

遞迴神經網路

下圖基本上就是一個遞迴的神經網路, RNN具有迴圈機制,其充當高速公路以允許資訊從一個步驟流到下一個步驟。

動畫圖解迴圈神經網路

將隱藏狀態傳遞給下一個步驟

此資訊是隱藏狀態,它是先前輸入的表示。讓透過一個RNN用例來更好地理解它是如何工作的。

假設想要構建一個聊天機器人。假設聊天機器人可以根據使用者輸入的文字對意圖進行分類。

動畫圖解迴圈神經網路

對使用者輸入的文字進行分類

解決這個問題。首先,將使用RNN對文字序列進行編碼。然後,將RNN輸出饋送到前饋神經網路,該網路將對意圖進行分類。

好的,所以使用者輸入:

What time is it?

首先,將句子分解為單個單詞, RNN按先後順序工作,所以一次只能輸入一個字。

動畫圖解迴圈神經網路

將一個句子分成單詞序列

第一步是將"What"輸入RNN。RNN編碼" What"併產生輸出。

動畫圖解迴圈神經網路

對於下一步,提供單詞"time"和上一步中的隱藏狀態。RNN現在有關於"What"和"time"這兩個詞的資訊。

動畫圖解迴圈神經網路

重複這個過程,直到最後一步。你可以透過最後一步看到RNN編碼了前面步驟中所有單詞的資訊。

動畫圖解迴圈神經網路

由於最終輸出是從序列的其餘部分建立的,因此應該能夠獲取最終輸出並將其傳遞給前饋層以對意圖進行分類。

動畫圖解迴圈神經網路

對於那些喜歡檢視程式碼的人來說,下面的python程式碼展示了上述流程。

動畫圖解迴圈神經網路

RNN控制流的虛擬碼

首先,初始化網路層和初始隱藏狀態。隱藏狀態的形狀和維度將取決於你的遞迴神經網路的形狀和維度。然後迴圈輸入,將單詞和隱藏狀態傳遞給RNN。RNN返回輸出和修改的隱藏狀態。你繼續迴圈,直到你說不出話來。最後,將輸出傳遞給前饋層,然後返回預測。就是這樣!進行遞迴神經網路的正向傳遞的控制流程是for迴圈。

梯度消失

你可能已經注意到隱藏狀態中奇怪的顏色分佈, 這是為了說明RNN被稱為短期記憶的問題。

動畫圖解迴圈神經網路

RNN的最終隱藏狀態

短期記憶是由梯度消失問題引起的,這在其他神經網路架構中也很普遍。由於RNN處理更多步驟,因此難以保留先前步驟中的資訊。正如你所看到的,在最後的時間步驟中,"what"和"time"這個詞的資訊幾乎不存在。短期記憶和消失梯度是由於反向傳播的性質------反向傳播是用於訓練和最佳化神經網路的演算法。為了理解這是為什麼,讓來看看反向傳播對深度前饋神經網路的影響。

訓練神經網路有三個主要步驟。首先,它進行前向傳遞並進行預測。其次,它使用損失函式將預測與基礎事實進行比較。損失函式輸出一個錯誤值,該錯誤值是對網路執行得有多糟糕的估計。最後,它使用該誤差值進行反向傳播,計算網路中每個節點的梯度。

動畫圖解迴圈神經網路

梯度是用於調整網路內部權重的值,以便網路學習。梯度越大,調整越大,反之亦然。這就是問題所在。在進行反向傳播時,圖層中的每個節點都會根據梯度效果計算它在其前面的圖層中的漸變。因此,如果在它之前對層的調整很小,那麼對當前層的調整將更小。

這會導致梯度在向後傳播時呈指數級收縮。由於梯度極小,內部權重幾乎沒有調整,因此較早的層無法進行任何學習。這就是梯度消失問題。

動畫圖解迴圈神經網路

梯度向後傳播時收縮

讓看看這如何適用於遞迴神經網路。你可以將遞迴神經網路中的每個時間步驟視為一個層。為了訓練一個遞迴神經網路,你使用了一種稱為反向傳播的反向傳播方法。梯度值在每個時間步長傳播時將呈指數級收縮。

動畫圖解迴圈神經網路

隨著時間的推移,梯度會收縮

同樣,梯度用於在神經網路權重中進行調整,從而允許其學習。小漸變意味著小的調整。這導致早期層不學習。

由於梯度消失,RNN不會跨時間步驟學習遠端依賴性。這意味著在嘗試預測使用者的意圖時,有可能不考慮"what"和"time"這個詞。然後網路必須用" is it?"做出最好的猜測。這很模糊,即使是人類也很難。因此,無法在較早的時間步驟上學習會導致網路只具有短期記憶。

LSTM和GRU

那麼RNN會受到短期記憶的影響,那麼如何應對呢?為了減輕短期記憶,建立了兩個專門的遞迴神經網路。一種叫做長短期記憶或簡稱LSTM。另一個是門控迴圈單位或GRU。LSTM和GRU本質上就像RNN一樣,但它們能夠使用稱為"門"的機制來學習長期依賴性。這些門是不同的張量操作,可以學習新增或刪除隱藏狀態的資訊。由於這種能力,短期記憶對他們來說不是一個問題。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2656418/,如需轉載,請註明出處,否則將追究法律責任。

相關文章