導航:首頁 > 網路問題 > 怎麼降低循環神經網路的復雜度

怎麼降低循環神經網路的復雜度

發布時間:2022-10-15 17:34:32

① 入門 | 一文簡述循環神經網路

入門 | 一文簡述循環神經網路

本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 RNN 實現示例。

什麼是循環神經網路(RNN)?它們如何運行?可以用在哪裡呢?本文試圖回答上述這些問題,還展示了一個 RNN 實現 demo,你可以根據自己的需要進行擴展。

循環神經網路架構

基礎知識。Python、CNN 知識是必備的。了解 CNN 的相關知識,是為了與 RNN 進行對比:RNN 為什麼以及在哪些地方比 CNN 更好。

我們首先從「循環」(Recurrent)這個詞說起。為什麼將其稱為循環?循環的意思是:

經常或重復出現

將這類神經網路稱為循環神經網路是因為它對一組序列輸入重復進行同樣的操作。本文後續部分將討論這種操作的意義。

我們為什麼需要 RNN?

也許你現在想的是,已經有像卷積網路這樣表現非常出色的網路了,為什麼還需要其他類型的網路呢?有一個需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關知識,我們先來講一下序列。

序列是相互依賴的(有限或無限)數據流,比如時間序列數據、信息性的字元串、對話等。在對話中,一個句子可能有一個意思,但是整體的對話可能又是完全不同的意思。股市數據這樣的時間序列數據也是,單個數據表示當前價格,但是全天的數據會有不一樣的變化,促使我們作出買進或賣出的決定。

當輸入數據具有依賴性且是序列模式時,CNN 的結果一般都不太好。CNN 的前一個輸入和下一個輸入之間沒有任何關聯。所以所有的輸出都是獨立的。CNN 接受輸入,然後基於訓練好的模型輸出。如果你運行了 100 個不同的輸入,它們中的任何一個輸出都不會受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨立的(有些情況下與之後的單詞也是獨立的,這里暫不討論)。所以你需要有一些基於之前輸出的偏向。這就是需要 RNN 的地方。RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。

本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。

何時使用 RNN?

RNN 可用於許多不同的地方。下面是 RNN 應用最多的領域。

1. 語言建模和文本生成

給出一個詞語序列,試著預測下一個詞語的可能性。這在翻譯任務中是很有用的,因為最有可能的句子將是可能性最高的單片語成的句子。

2. 機器翻譯

將文本內容從一種語言翻譯成其他語言使用了一種或幾種形式的 RNN。所有日常使用的實用系統都用了某種高級版本的 RNN。

3. 語音識別

基於輸入的聲波預測語音片段,從而確定詞語。

4. 生成圖像描述

RNN 一個非常廣泛的應用是理解圖像中發生了什麼,從而做出合理的描述。這是 CNN 和 RNN 相結合的作用。CNN 做圖像分割,RNN 用分割後的數據重建描述。這種應用雖然基本,但可能性是無窮的。

5. 視頻標記

可以通過一幀一幀地標記視頻進行視頻搜索。

深入挖掘

本文按照以下主題進行。每一部分都是基於之前的部分進行的,所以不要跳著讀。

前饋網路循環網路循環神經元基於時間的反向傳播(BPTT)RNN 實現

前饋網路入門

前饋網路通過在網路的每個節點上做出的一系列操作傳遞信息。前饋網路每次通過每個層直接向後傳遞信息。這與其他循環神經網路不同。一般而言,前饋網路接受一個輸入並據此產生輸出,這也是大多數監督學習的步驟,輸出結果可能是一個分類結果。它的行為與 CNN 類似。輸出可以是以貓狗等作為標簽的類別。

前饋網路是基於一系列預先標注過的數據訓練的。訓練階段的目的是減少前饋網路猜類別時的誤差。一旦訓練完成,我們就可以用訓練後的權重對新批次的數據進行分類。

一個典型的前饋網路架構

還有一件事要注意。在前饋網路中,無論在測試階段展示給分類器的圖像是什麼,都不會改變權重,所以也不會影響第二個決策。這是前饋網路和循環網路之間一個非常大的不同。

與循環網路不同,前饋網路在測試時不會記得之前的輸入數據。它們始終是取決於時間點的。它們只會在訓練階段記得歷史輸入數據。

循環網路

也就是說,循環網路不僅將當前的輸入樣例作為網路輸入,還將它們之前感知到的一並作為輸入。

我們試著建立了一個多層感知器。從簡單的角度講,它有一個輸入層、一個具備特定激活函數的隱藏層,最終可以得到輸出。

多層感知器架構示例

如果在上述示例中的層數增加了,輸入層也接收輸入。那麼第一個隱藏層將激活傳遞到下一個隱藏層上,依此類推。最後到達輸出層。每一個隱藏層都有自己的權重和偏置項。現在問題變成了我們可以輸入到隱藏層嗎?

每一層都有自己的權重(W)、偏置項(B)和激活函數(F)。這些層的行為不同,合並它們從技術層面上講也極具挑戰性。為了合並它們,我們將所有層的權重和偏置項替換成相同的值。如下圖所示:

現在我們就可以將所有層合並在一起了。所有的隱藏層都可以結合在一個循環層中。所以看起來就像下圖:

我們在每一步都會向隱藏層提供輸入。現在一個循環神經元存儲了所有之前步的輸入,並將這些信息和當前步的輸入合並。因此,它還捕獲到一些當前數據步和之前步的相關性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類在生活中做決策的方式。我們將當前數據和近期數據結合起來,幫助解決手頭的特定問題。這個例子很簡單,但從原則上講這與人類的決策能力是一致的。這讓我非常想知道我們作為人類是否真的很智能,或者說我們是否有非常高級的神經網路模型。我們做出的決策只是對生活中收集到的數據進行訓練。那麼一旦有了能夠在合理時間段內存儲和計算數據的先進模型和系統時,是否可以數字化大腦呢?所以當我們有了比大腦更好更快的模型(基於數百萬人的數據訓練出的)時,會發生什麼?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點:人總是被自己的行為所困擾。

我們用一個例子來闡述上面的解釋,這個例子是預測一系列字母後的下一個字母。想像一個有 8 個字母的單詞 namaskar。

namaskar(合十禮):印度表示尊重的傳統問候或姿勢,將手掌合起置於面前或胸前鞠躬。

如果我們在向網路輸入 7 個字母後試著找出第 8 個字母,會發生什麼呢?隱藏層會經歷 8 次迭代。如果展開網路的話就是一個 8 層的網路,每一層對應一個字母。所以你可以想像一個普通的神經網路被重復了多次。展開的次數與它記得多久之前的數據是直接相關的。

循環神經網路的運作原理

循環神經元

這里我們將更深入地了解負責決策的實際神經元。以之前提到的 namaskar 為例,在給出前 7 個字母後,試著找出第 8 個字母。輸入數據的完整詞彙表是 {n,a,m,s,k,r}。在真實世界中單詞或句子都會更復雜。為了簡化問題,我們用的是下面這個簡單的詞彙表。

在上圖中,隱藏層或 RNN 塊在當前輸入和之前的狀態中應用了公式。在本例中,namaste 的字母 n 前面什麼都沒有。所以我們直接使用當前信息推斷,並移動到下一個字母 a。在推斷字母 a 的過程中,隱藏層應用了上述公式結合當前推斷 a 的信息與前面推斷 n 的信息。輸入在網路中傳遞的每一個狀態都是一個時間步或一步,所以時間步 t 的輸入是 a,時間步 t-1 的輸入就是 n。將公式同時應用於 n 和 a 後,就得到了一個新狀態。

用於當前狀態的公式如下所示:

h_t 是新狀態,h_t-1 是前一個狀態。x_t 是時間 t 時的輸入。在對之前的時間步應用了相同的公式後,我們已經能感知到之前的輸入了。我們將檢查 7 個這樣的輸入,它們在每一步的權重和函數都是相同的。

現在試著以簡單的方式定義 f()。我們使用 tanh 激活函數。通過矩陣 W_hh 定義權重,通過矩陣 W_xh 定義輸入。公式如下所示:

上例只將最後一步作為記憶,因此只與最後一步的數據合並。為了提升網路的記憶能力,並在記憶中保留較長的序列,我們必須在方程中添加更多的狀態,如 h_t-2、h_t-3 等。最後輸出可以按測試階段的計算方式進行計算:

其中,y_t 是輸出。對輸出與實際輸出進行對比,然後計算出誤差值。網路通過反向傳播誤差來更新權重,進行學習。本文後續部分會對反向傳播進行討論。

基於時間的反向傳播演算法(BPTT)

本節默認你已經了解了反向傳播概念。如果需要對反向傳播進行深入了解,請參閱鏈接:?http://cs231n.github.io/optimization-2/?。

現在我們了解了 RNN 是如何實際運作的,但是在實際工作中如何訓練 RNN 呢?該如何決定每個連接的權重呢?如何初始化這些隱藏單元的權重呢?循環網路的目的是要准確地對序列輸入進行分類。這要靠誤差值的反向傳播和梯度下降來實現。但是前饋網路中使用的標准反向傳播無法在此應用。

與有向無環的前饋網路不同,RNN 是循環圖,這也是問題所在。在前饋網路中可以計算出之前層的誤差導數。但 RNN 的層級排列與前饋網路並不相同。

答案就在之前討論過的內容中。我們需要展開網路。展開網路使其看起來像前饋網路就可以了。

展開 RNN

在每個時間步取出 RNN 的隱藏單元並復制。時間步中的每一次復制就像前饋網路中的一層。在時間步 t+1 中每個時間步 t 層與所有可能的層連接。因此我們對權重進行隨機初始化,展開網路,然後在隱藏層中通過反向傳播優化權重。通過向最低層傳遞參數完成初始化。這些參數作為反向傳播的一部分也得到了優化。

展開網路的結果是,現在每一層的權重都不同,因此最終會得到不同程度的優化。無法保證基於權重計算出的誤差是相等的。所以每一次運行結束時每一層的權重都不同。這是我們絕對不希望看到的。最簡單的解決辦法是以某種方式將所有層的誤差合並到一起。可以對誤差值取平均或者求和。通過這種方式,我們可以在所有時間步中使用一層來保持相同的權重。

RNN 實現

本文試著用 Keras 模型實現 RNN。我們試著根據給定的文本預測下一個序列。

代碼地址:?https://gist.github.com/.git?

該模型是 Yash Katariya 建的。我對該模型做了一些細微的改動以適合本文的要求。

② BP神經網路回歸的問題

是否過度訓練與你網路的復雜度有關,你可以比較訓練誤差和驗證誤差,如果訓練好的網路訓練誤差很小,而且驗證誤差增大,你可適當降低網路復雜度。

③ 為什麼說Transformer的注意力機制是相對廉價的注意力機制相對更對於RNN系列及CNN系列演算法有何優勢

QA形式對自然語言處理中注意力機制(Attention)進行總結,並對Transformer進行深入解析。


二、Transformer(Attention Is All You Need)詳解
1、Transformer的整體架構是怎樣的?由哪些部分組成?
2、Transformer Encoder 與 Transformer Decoder 有哪些不同?
3、Encoder-Decoder attention 與self-attention mechanism有哪些不同?
4、multi-head self-attention mechanism具體的計算過程是怎樣的?
5、Transformer在GPT和Bert等詞向量預訓練模型中具體是怎麼應用的?有什麼變化?

一、Attention機制剖析

1、為什麼要引入Attention機制?

根據通用近似定理,前饋網路和循環網路都有很強的能力。但為什麼還要引入注意力機制呢?

④ 循環神經網路(RNN)簡介

循環神經網路英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經元,能夠處理任意長度的 時序 數據。

給定輸入時序序列

式中, 表示一段時序數據, 為時間長度

以一段英文段落為例,其時序數據可以表示為:

若是一段視頻,將其每一幀通過CNN網路處理得到相應的編碼向量

循環神經網路通過以下公式更新隱藏層的活性值

循環神經網路圖示

RNN的基本模型如下圖所示,為便於理解,圖中將RNN的模型展開,按照時序方向對其前向傳播流程進行介紹

RNN的基本模型

利用數學表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:

將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:

RNN的前向傳播示意圖

缺陷:

沒有利用到模型後續的信息,可以通過雙向RNN網路進行優化

RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環學習法(RTRL)演算法

本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time

RNN的損失函數與任務有關,對於同步的序列對序列任務,其loss可以用交叉熵公式表示

然後通過BPTT演算法便可以進行梯度的反向傳播計算

梯度爆炸的解決方法:梯度修剪

梯度消失的解決方法:增加長程依賴 LSTM,GRU

GRU的基本思路:增加相關門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力

首先從數學角度對GRU的前向傳播過程進行介紹,具體公式如下:

公式中各變數的含義:

將上述數學公式轉化為圖像,可得

GRU Cell的前向傳播流程

LSTM意為長短時記憶網路 (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經網路的梯度消失和爆炸問題

在LSTM中,與GRU主要有兩點不同

同樣,先從數學公式入手,對LSTM的前向傳播過程進行了解

基於數學公式的過程,可將LSTM CELL的前向傳播過程總結為(圖片借用於nndl):

LSTM Cell的前向傳播示意圖

從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態:內部狀態 以及外部狀態 ,在整個傳播過程中 外部狀態(隱狀態) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內部狀態 可以在某個時刻捕捉一些關鍵信息,並將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)

此外,在LSTM網路初始化訓練的時候,需要手動將遺忘門的數值設置的大一些,否則在參數初始化的時候,遺忘門的數據會被初始化為一個很小的值,前一時刻的內部狀態 大部分都會丟失,這樣網路很難獲取到長距離的依賴信息,並且相鄰時間間隔的梯度會非常小,導致 梯度彌散 問題,因此遺忘門的 偏置變數 的初始值 一般很大,取 1或2

將 設置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能

三個門不僅依賴於 和 ,也依賴於

將兩者合並為一個門,即:

首先,我們要理解什麼是深層的RNN,對於單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數,則單個cell實際上是很淺顯的一層,因此深層循環神經網路要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網路的深度更深。

如何增加從輸入 到輸出 的路徑呢?兩種途徑:

堆疊循環神經網路示意圖

將網路帶入到實際應用場景中:假如我們要翻譯一段句子

在這里,is和are實際上是由後面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路

雙向循環神經網路示意圖

雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:

⑤ BP神經網路的原理的BP什麼意思

原文鏈接:http://tecdat.cn/?p=19936

在本教程中,您將學習如何在R語言中創建神經網路模型。

神經網路(或人工神經網路)具有通過樣本進行學習的能力。人工神經網路是一種受生物神經元系統啟發的信息處理模型。它由大量高度互連的處理元件(稱為神經元)組成,以解決問題。它遵循非線性路徑,並在整個節點中並行處理信息。神經網路是一個復雜的自適應系統。自適應意味著它可以通過調整輸入權重來更改其內部結構。

該神經網路旨在解決人類容易遇到的問題和機器難以解決的問題,例如識別貓和狗的圖片,識別編號的圖片。這些問題通常稱為模式識別。它的應用范圍從光學字元識別到目標檢測。

本教程將涵蓋以下主題:

⑥ BP神經網路模型各個參數的選取問題

樣本變數不需要那麼多,因為神經網路的信息存儲能力有限,過多的樣本會造成一些有用的信息被丟棄。如果樣本數量過多,應增加隱層節點數或隱層數目,才能增強學習能力。

一、隱層數
一般認為,增加隱層數可以降低網路誤差(也有文獻認為不一定能有效降低),提高精度,但也使網路復雜化,從而增加了網路的訓練時間和出現「過擬合」的傾向。一般來講應設計神經網路應優先考慮3層網路(即有1個隱層)。一般地,靠增加隱層節點數來獲得較低的誤差,其訓練效果要比增加隱層數更容易實現。對於沒有隱層的神經網路模型,實際上就是一個線性或非線性(取決於輸出層採用線性或非線性轉換函數型式)回歸模型。因此,一般認為,應將不含隱層的網路模型歸入回歸分析中,技術已很成熟,沒有必要在神經網路理論中再討論之。
二、隱層節點數
在BP 網路中,隱層節點數的選擇非常重要,它不僅對建立的神經網路模型的性能影響很大,而且是訓練時出現「過擬合」的直接原因,但是目前理論上還沒有一種科學的和普遍的確定方法。 目前多數文獻中提出的確定隱層節點數的計算公式都是針對訓練樣本任意多的情況,而且多數是針對最不利的情況,一般工程實踐中很難滿足,不宜採用。事實上,各種計算公式得到的隱層節點數有時相差幾倍甚至上百倍。為盡可能避免訓練時出現「過擬合」現象,保證足夠高的網路性能和泛化能力,確定隱層節點數的最基本原則是:在滿足精度要求的前提下取盡可能緊湊的結構,即取盡可能少的隱層節點數。研究表明,隱層節點數不僅與輸入/輸出層的節點數有關,更與需解決的問題的復雜程度和轉換函數的型式以及樣本數據的特性等因素有關。

⑦ 在模式識別、人工神經網路方法中,為什麼要進行數據預處理呢

原數據可能含有大量的雜訊,去除雜訊是有必要的。
原數據可能數據量很大,維數很,計算機處理起來時間復雜度很高,預處理可以降低數據維度。

⑧ 輸入循環的三種主要控制方式

1.查詢方式、2.中斷方式、3.DMA方式。

循環神經網路(RNN/recurrentneuralnetwork)是一類人工神經網路,其可以通過為網路添加額外的權重來在網路圖(networkgraph)中創建循環,以便維持一個內部狀態。為神經網路添加狀態的好處是它們將能在序列預測問題中明確地學習和利用背景信息(context)。

這類問題包括帶有順序或時間組件的問題。在這篇文章中,你將踏上了解用於深度學習的循環神經網路的旅程。在讀完這篇文章後,你將了解:用於深度學習的頂級循環神經網路的工作方式,其中包括LSTM、GRU和NTM、頂級RNN與人工神經網路中更廣泛的循環(recurrence)研究的相關性。

RNN研究如何在一系列高難度問題上實現了當前最佳的表現。注意,我們並不會覆蓋每一種可能的循環神經網路,而是會重點關注幾種用於深度學習的循環神經網路(LSTM、GRU和NTM)以及用於理解它們的背景。

那就讓我們開始吧!概述我們首先會設置循環神經網路領域的場景;然後,我們將深入了解用於深度學習的LSTM、GRU和NTM;之後我們會花點時間介紹一些與用於深度學習的RNN相關的高級主題。

⑨ 循環神經網路(RNN)淺析

RNN是兩種神經網路模型的縮寫,一種是遞歸神經網路(Recursive Neural Network),一種是循環神經網路(Recurrent Neural Network)。雖然這兩種神經網路有著千絲萬縷的聯系,但是本文主要討論的是第二種神經網路模型——循環神經網路(Recurrent Neural Network)。

循環神經網路是指一個隨著時間的推移,重復發生的結構。在自然語言處理(NLP),語音圖像等多個領域均有非常廣泛的應用。RNN網路和其他網路最大的不同就在於RNN能夠實現某種「記憶功能」,是進行時間序列分析時最好的選擇。如同人類能夠憑借自己過往的記憶更好地認識這個世界一樣。RNN也實現了類似於人腦的這一機制,對所處理過的信息留存有一定的記憶,而不像其他類型的神經網路並不能對處理過的信息留存記憶。

循環神經網路的原理並不十分復雜,本節主要從原理上分析RNN的結構和功能,不涉及RNN的數學推導和證明,整個網路只有簡單的輸入輸出和網路狀態參數。一個典型的RNN神經網路如圖所示:

由上圖可以看出:一個典型的RNN網路包含一個輸入x,一個輸出h和一個神經網路單元A。和普通的神經網路不同的是,RNN網路的神經網路單元A不僅僅與輸入和輸出存在聯系,其與自身也存在一個迴路。這種網路結構就揭示了RNN的實質:上一個時刻的網路狀態信息將會作用於下一個時刻的網路狀態。如果上圖的網路結構仍不夠清晰,RNN網路還能夠以時間序列展開成如下形式:

等號右邊是RNN的展開形式。由於RNN一般用來處理序列信息,因此下文說明時都以時間序列來舉例,解釋。等號右邊的等價RNN網路中最初始的輸入是x0,輸出是h0,這代表著0時刻RNN網路的輸入為x0,輸出為h0,網路神經元在0時刻的狀態保存在A中。當下一個時刻1到來時,此時網路神經元的狀態不僅僅由1時刻的輸入x1決定,也由0時刻的神經元狀態決定。以後的情況都以此類推,直到時間序列的末尾t時刻。

上面的過程可以用一個簡單的例子來論證:假設現在有一句話「I want to play basketball」,由於自然語言本身就是一個時間序列,較早的語言會與較後的語言存在某種聯系,例如剛才的句子中「play」這個動詞意味著後面一定會有一個名詞,而這個名詞具體是什麼可能需要更遙遠的語境來決定,因此一句話也可以作為RNN的輸入。回到剛才的那句話,這句話中的5個單詞是以時序出現的,我們現在將這五個單詞編碼後依次輸入到RNN中。首先是單詞「I」,它作為時序上第一個出現的單詞被用作x0輸入,擁有一個h0輸出,並且改變了初始神經元A的狀態。單詞「want」作為時序上第二個出現的單詞作為x1輸入,這時RNN的輸出和神經元狀態將不僅僅由x1決定,也將由上一時刻的神經元狀態或者說上一時刻的輸入x0決定。之後的情況以此類推,直到上述句子輸入到最後一個單詞「basketball」。

接下來我們需要關注RNN的神經元結構:

上圖依然是一個RNN神經網路的時序展開模型,中間t時刻的網路模型揭示了RNN的結構。可以看到,原始的RNN網路的內部結構非常簡單。神經元A在t時刻的狀態僅僅是t-1時刻神經元狀態與t時刻網路輸入的雙曲正切函數的值,這個值不僅僅作為該時刻網路的輸出,也作為該時刻網路的狀態被傳入到下一個時刻的網路狀態中,這個過程叫做RNN的正向傳播(forward propagation)。註:雙曲正切函數的解析式如下:

雙曲正切函數的求導如下:

雙曲正切函數的圖像如下所示:

這里就帶來一個問題:為什麼RNN網路的激活函數要選用雙曲正切而不是sigmod呢?(RNN的激活函數除了雙曲正切,RELU函數也用的非常多)原因在於RNN網路在求解時涉及時間序列上的大量求導運算,使用sigmod函數容易出現梯度消失,且sigmod的導數形式較為復雜。事實上,即使使用雙曲正切函數,傳統的RNN網路依然存在梯度消失問題,無法「記憶」長時間序列上的信息,這個bug直到LSTM上引入了單元狀態後才算較好地解決。

這一節主要介紹與RNN相關的數學推導,由於RNN是一個時序模型,因此其求解過程可能和一般的神經網路不太相同。首先需要介紹一下RNN完整的結構圖,上一節給出的RNN結構圖省去了很多內部參數,僅僅作為一個概念模型給出。

上圖表明了RNN網路的完整拓撲結構,從圖中我們可以看到RNN網路中的參數情況。在這里我們只分析t時刻網路的行為與數學推導。t時刻網路迎來一個輸入xt,網路此時刻的神經元狀態st用如下式子表達:

t時刻的網路狀態st不僅僅要輸入到下一個時刻t+1的網路狀態中去,還要作為該時刻的網路輸出。當然,st不能直接輸出,在輸出之前還要再乘上一個系數V,而且為了誤差逆傳播時的方便通常還要對輸出進行歸一化處理,也就是對輸出進行softmax化。因此,t時刻網路的輸出ot表達為如下形式:

為了表達方便,筆者將上述兩個公式做如下變換:

以上,就是RNN網路的數學表達了,接下來我們需要求解這個模型。在論述具體解法之前首先需要明確兩個問題:優化目標函數是什麼?待優化的量是什麼?

只有在明確了這兩個問題之後才能對模型進行具體的推導和求解。關於第一個問題,筆者選取模型的損失函數作為優化目標;關於第二個問題,我們從RNN的結構圖中不難發現:只要我們得到了模型的U,V,W這三個參數就能完全確定模型的狀態。因此該優化問題的優化變數就是RNN的這三個參數。順便說一句,RNN模型的U,V,W三個參數是全局共享的,也就是說不同時刻的模型參數是完全一致的,這個特性使RNN得參數變得稍微少了一些。

不做過多的討論,RNN的損失函數選用交叉熵(Cross Entropy),這是機器學習中使用最廣泛的損失函數之一了,其通常的表達式如下所示:

上面式子是交叉熵的標量形式,y_i是真實的標簽值,y_i*是模型給出的預測值,最外面之所以有一個累加符號是因為模型輸出的一般都是一個多維的向量,只有把n維損失都加和才能得到真實的損失值。交叉熵在應用於RNN時需要做一些改變:首先,RNN的輸出是向量形式,沒有必要將所有維度都加在一起,直接把損失值用向量表達就可以了;其次,由於RNN模型處理的是序列問題,因此其模型損失不能只是一個時刻的損失,應該包含全部N個時刻的損失。

故RNN模型在t時刻的損失函數寫成如下形式:

全部N個時刻的損失函數(全局損失)表達為如下形式:

需要說明的是:yt是t時刻輸入的真實標簽值,ot為模型的預測值,N代表全部N個時刻。下文中為了書寫方便,將Loss簡記為L。在結束本小節之前,最後補充一個softmax函數的求導公式:

由於RNN模型與時間序列有關,因此不能直接使用BP(back propagation)演算法。針對RNN問題的特殊情況,提出了BPTT演算法。BPTT的全稱是「隨時間變化的反向傳播演算法」(back propagation through time)。這個方法的基礎仍然是常規的鏈式求導法則,接下來開始具體推導。雖然RNN的全局損失是與全部N個時刻有關的,但為了簡單筆者在推導時只關注t時刻的損失函數。

首先求出t時刻下損失函數關於o_t*的微分:

求出損失函數關於參數V的微分:

因此,全局損失關於參數V的微分為:

求出t時刻的損失函數關於關於st*的微分:

求出t時刻的損失函數關於s_t-1*的微分:

求出t時刻損失函數關於參數U的偏微分。注意:由於是時間序列模型,因此t時刻關於U的微分與前t-1個時刻都有關,在具體計算時可以限定最遠回溯到前n個時刻,但在推導時需要將前t-1個時刻全部帶入:

因此,全局損失關於U的偏微分為:

求t時刻損失函數關於參數W的偏微分,和上面相同的道理,在這里仍然要計算全部前t-1時刻的情況:

因此,全局損失關於參數W的微分結果為:

至此,全局損失函數關於三個主要參數的微分都已經得到了。整理如下:

接下來進一步化簡上述微分表達式,化簡的主要方向為t時刻的損失函數關於ot的微分以及關於st*的微分。已知t時刻損失函數的表達式,求關於ot的微分:

softmax函數求導:

因此:

又因為:

且:

有了上面的數學推導,我們可以得到全局損失關於U,V,W三個參數的梯度公式:

由於參數U和W的微分公式不僅僅與t時刻有關,還與前面的t-1個時刻都有關,因此無法寫出直接的計算公式。不過上面已經給出了t時刻的損失函數關於s_t-1的微分遞推公式,想來求解這個式子也是十分簡單的,在這里就不贅述了。

以上就是關於BPTT演算法的全部數學推導。從最終結果可以看出三個公式的偏微分結果非常簡單,在具體的優化過程中可以直接帶入進行計算。對於這種優化問題來說,最常用的方法就是梯度下降法。針對本文涉及的RNN問題,可以構造出三個參數的梯度更新公式:

依靠上述梯度更新公式就能夠迭代求解三個參數,直到三個參數的值發生收斂。

這是筆者第一次嘗試推導RNN的數學模型,在推導過程中遇到了非常多的bug。非常感謝互聯網上的一些公開資料和博客,給了我非常大的幫助和指引。接下來筆者將嘗試實現一個單隱層的RNN模型用於實現一個語義預測模型。

⑩ 神經網路演算法中,參數的設置或者調整,有什麼方法可以採用

若果對你有幫助,請點贊。
神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。
而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。
學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end
詳細的可以看《神經網路之家》nnetinfo里的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化代碼

若果對你有幫助,請點贊。
祝學習愉快

閱讀全文

與怎麼降低循環神經網路的復雜度相關的資料

熱點內容
蘋果手機沒有熱點如何共享網路 瀏覽:845
手機沒欠費無法連接網路什麼原因 瀏覽:826
計算機網路安全法的內容 瀏覽:45
濟南學網路營銷 瀏覽:797
永城網路推廣怎麼做 瀏覽:620
python基礎教程之網路安全 瀏覽:701
萊蕪網路費在哪裡交 瀏覽:983
網路工程專業哪個筆記本好 瀏覽:506
網路安全宣傳周手抄報的圖片 瀏覽:762
小米wifi放大器連接後網路非常卡 瀏覽:963
社區網路安全培訓方案 瀏覽:788
蘋果藍牙網路很慢 瀏覽:499
小愛音響app如何連接網路 瀏覽:699
靜安區網路營銷技術服務電話多少 瀏覽:91
電腦沒網路怎麼辦wifi 瀏覽:22
社會網路分析密度怎麼計算 瀏覽:973
網路技術和多媒體哪個簡單 瀏覽:127
密碼學與網路安全第五版課後答案 瀏覽:11
中國網路安全委員是誰 瀏覽:651
網路制裁和開掛哪個好 瀏覽:789

友情鏈接