神經網絡 LSTM


神經網絡概述

這部分內容已經有很多人講的很清楚了,我就不再重復了,只是在這里簡單梳理一下詳細可見http://m.blog.csdn.net/article/details?id=7681000 對神經網絡的發展歷史感興趣的還可以看下http://fantasticinblur.iteye.com/blog/1012691

神經網絡的幾大要素

1.輸入向量X 實際輸出向量Y 理想輸出向量O 權重向量W(包括bias B)

2.輸入層(input layer)通常是線性的,隱含層(hidden layer),輸出層(output layer)通常為sigmoid(兩類),softmax(多類)

3.激活函數:常見的有線性函數,斜面函數,閾值函數,S形函數和雙S形函數。其中,S形函數和雙S形函數均可導,使用於BP(BP算法要求激活函數可導,我們之后會具體解釋)

4.網絡的結構:輸入層和輸出層差別不大,根據隱含層的結構大概可分為[前饋神經網絡Feed-forward Neural Networks(FNNs)],[反饋神經網絡]和[自組織網絡],這里的前饋指的是僅在訓練過程中有反饋信號,在分類的過程中數據只能向前傳送

5.損失函數:描述實際輸出與理想情況的偏差,常見的有平方和,交叉熵

訓練算法: 常見的有Back Propagation(BP)用於前饋神經網絡;Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)用於循環神經網絡

6.工作方式:[學習(訓練train)]使用學習算法(BP就是一種學習算法)調整神經元間的連接權重W,使得網絡的輸出更符合實際 [工作]通過訓練時求得的權值來預測,擬合新的輸入數據

BP反向傳播算法

數學基礎:鏈式偏微分

BP(Back Propagation)算法又稱為誤差反向傳播算法,是人工神經網絡中的一種監督式的學習算法。BP 神經網絡算法在理 論上可以逼近任意函數,基本的結構由非線性變化單元組成,具有很強的非線性映射能力

對於一個神經網絡,權值是通常隨機初始化的,實際的輸出必然和理想輸出存在偏差,這一偏差(error signal)沿着輸出流向輸入進行反饋,我們根據error signal從而做出參數的調整,使得實際輸出盡量貼近理想情況。

在機器學習中,我們一般會認為訓練的輸入數據是給定的常數,而權重則是我們可以控制的變量,通過求得損失函數對某一特定權重的偏導,我們就可以知道這一權重是如何影響損失函數的,比如求得偏導為2,則說明該權重每增長一個很小的值,損失函數將會增長2倍的這個很小的值,這個時候我們稍微減小(注意求導的極限思想,如果減小的過多也就沒有意義了)該權重的值將會使得損失函數也減小。

由於沿着梯度方向下降最快,為了使得實際輸出盡快的貼近理想輸出,我們用求得的梯度來修正神經網絡的權重

值得一提的是BP的求導算法也就注定了它很可能會將損失函數局限於某個極小值,而不是最小值,這是因為當一旦達到某一極小值,偏導全為0,神經網絡的權重也就會停止迭代了。

這里有兩個博客講的很好,非常推薦一看

http://cs231n.github.io/optimization-2/#intuitive 后向傳播算法的具體分析,要想透徹的理解BP可以看一下,作者特別提到了兩點:

緩存前向傳播的變量避免重復計算(很常見的以空間換取時間)

Cache forward pass variables. To compute the backward pass it is very helpful to have some of the variables that were used in the forward pass. In practice you want to structure your code so that you cache these variables, and so that they are available during backpropagation. If this is too difficult, it is possible (but wasteful) to recompute them.

如果表達式中多次涉及到了同一個變量,善用+=

Gradients add up at forks. The forward expression involves the variables x,y multiple times, so when we perform backpropagation we must be careful to use += instead of = to accumulate the gradient on these variables (otherwise we would overwrite it). This follows the multivariable chain rule in Calculus, which states that if a variable branches out to different parts of the circuit, then the gradients that flow back to it will add.

http://www.zybuluo.com/Feiteng/note/20154矩陣偏微分 重要原則:維數相容(畢竟實現神經網絡我們都是用的矩陣描述嘛)

RNN

這篇是MIT的大牛寫的博客 http://karpathy.github.io/2015/05/21/rnn-effectiveness/ 還有這篇(作者這一系列一共寫了四篇從最簡單的RNN到LSTM和GRU) http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/ 不同於傳統的前向反饋神經網絡,循環神經網絡(RNN)引入了定向循環,這使得信息得以從神經網絡的一步傳遞給下一步。這些環讓循環神經網絡看上去有些難以理解,但進一步觀察,其實它和一般的前饋神經網絡的區別並不太大。一個循環神經網絡可以被看作一系列相同(權重相同)的前饋神經網絡,只不過每一個神經網絡都會把信息傳遞給下一個,把它展開將會是這樣:

a RNN shares the same parameters (U, V, W above) across all steps. This reflects the fact that we are performing the same task at each step, just with different inputs. This greatly reduces the total number of parameters we need to learn.

我們可以把st看作t時刻神經網絡細胞的狀態,每一時刻細胞的狀態都與當前的輸入和前一時刻細胞狀態有關,而每一時刻的輸出僅與當前時刻的細胞狀態有關。

RNN信息流動的特點使得它可以處理前后相關的信息,事實上現實生活中的絕大多數事情都是前后相關的,這使得RNN可以處理很多一般前饋神經網絡難以處理的事情,比如機器翻譯,句子的語義分析,情感分析等。但接下來我們也會看到RNN也有其致命的缺點。

BPTT

訓練一個循環神經網絡和訓練一個傳統的前饋神經網絡類似,我們同樣使用到反向傳播算法,只是稍微做一些調整。因為神經網絡中的參數被每一步共享,因此對每一個輸出來說,為求得它的梯度不僅需要對當前時刻進行計算,還需要對之前時刻進行計算。例如為了計算t=3時的梯度,我們需要反向傳播三步,將每一步的梯度加起來得到總的梯度,這就叫做沿着時間的反向傳播Backpropagation Through Time (BPTT)。

梯度消失問題

事實上,標准的RNN隨着序列長度的增加,會很難捕捉到之前的信息,因此我們需要對RNN做一些變化,這也就引入了LSTM

LSTM

http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 整體來說,我們可以把LSTM看成一個封裝了的RNN

它的隱含層的具體推導如下:

input門:i_t=sigmoid(dot(W_i,x_t)+dot(U_i,h_prev)+b_i)

forget門:f_t=sigmoid(dot(W_f,x_t)+dot(U_f,h_prev)+b_f)

output門:o_t=sigmoid(dot(W_o,x_t)+dot(U_f,h_prev)+b_o)

c candidate:c_c=sigmoid(dot(W_c,x_t)+dot(U_c,h_prev)+b_c)

c=f_t * c_prev+i_t*tanh(c_c)

h=o_t*tanh(c)

LSTM最大的貢獻在於解決了梯度消失問題,通過引入門的概念(input gate,forget gate,output gate)

attention

The concept of attention is the most interesting recent architectural innovation in neural networks.

我們可以看到,不管一句話有多長,通過LSTM得到的最終表示都只是一個向量,能表示的信息還是有限,這里說是attention還不是特別恰當,更好的理解是memory,系統會記住產生最終結果哪一個單詞更重要,從而更多的關注這個單詞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM