遞迴神經網路(RNN)及其應用(一)

遞迴神經網路(RNN)及其應用(一)

傳統的神經網路模型,訓練和預測階段都是靜態方式表示,不考慮事件發生的順序。而遞迴神經網路預測則當前輸入向量和之前輸入的值。

本文主要討論下列主題:

介紹遞迴神經網路的主要原理

解釋以更高階模型實現的思想,比如LSTM

應用LSTM模型預測能耗週期

以研究J。S Bach音樂為基礎譜寫新曲

遞迴神經網路

遞迴神經網路,或RNN。遞迴神經網路可以定義為神經網路的順序模型,它具有重用已給出的資訊的屬性。它的主要假設之一是當前資訊對以前的資料有依賴性。下圖是RNN基本單元(cell)的簡化圖:

遞迴神經網路(RNN)及其應用(一)

單元的主要資訊元素是輸入(Xt)、狀態和輸出(Ht)。

下面講展開一個展開的RNN單元,顯示它是如何從初始狀態開始,輸出最後的Hn 值以及一些中間狀態。

遞迴神經網路(RNN)及其應用(一)

在最常見的標準RNN中,有一個簡單的神經網路層,它將輸入和先前狀態作為輸入,應用tanh運算後輸出一個新的狀態h(t+1)。

遞迴神經網路(RNN)及其應用(一)

這個簡單的設定能夠使得隨著迭代增加而總結資訊,但進一步實驗表名,對於複雜的知識,序列距離使得很難關聯一些像需要記住簡單結構的上下文。但上下文需要一個遞增的序列能夠關聯彼此概念,這也帶來了梯度消失和梯度爆炸的問題。

梯度爆炸和消失

遞迴神經網路的一個主要問題發生在反向傳播階段,由於其遞迴性質,誤差的反向傳播的步數對應於非常深的網路,這種梯度計算的級聯可能在最後階段產生的一個非常不顯著的值,或者相反,導致不斷增加的和無限制的引數。這些現象被稱為消失和爆炸梯度的名稱。這是建立LSTM體系結構的原因之一。

LSTM網路

長短時記憶網路(LSTM)是一種特定的RNN體系結構,其特殊的體系結構允許它們表示長期依賴關係。此外,它們被專門為用於在長時間內記憶資訊模式和資訊而設計的。

門操作-基本部件

為了更好理解LSTM單元內部的構建塊,需要描述LSTM的主要操作塊:門操作。這個操作具有多變數輸入,在這個塊中,只讓一些輸入透過,而阻塞其他的。可以把它看做是一個資訊過濾器,主要作用在於允許獲取和記住所需的資訊元素。

為實現這個功能,採用一個多變數控制向量,其與具有sigmoid啟用函式的神經網路連線。應用控制向量並透過sigmoid函式,將得到一個類二元向量。

下圖用多個開關符號表示這個功能:

遞迴神經網路(RNN)及其應用(一)

在定義二進位制向量之後,我們將把輸入函式與向量相乘,這樣我們就可以過濾它,只讓一部分資訊透過。我們將用一個三角形表示這個操作,指向資訊的方向。

遞迴神經網路(RNN)及其應用(一)

通用LSTM單元結構

在下面的圖片中,我們表示了一個LSTM單元的一般結構。它主要包括三個上述門操作,以保護和控制單元狀態。該操作將允許丟棄(希望不重要)低狀態資料,並將(希望重要)新資料合併到當前狀態。

遞迴神經網路(RNN)及其應用(一)

前一個圖試圖顯示關於一個LSTM單元的操作的所有概念。

作為輸入:

將儲存長期資訊的單元狀態,因為它從單元訓練開始進行執行最佳化的權重,以及

短期狀態h(t),它將在每次迭代中直接與當前輸入結合使用,因此它將對輸入的最新值產生更大的影響。

作為輸出,我們有組合所有門操作應用後的結果。

操作步驟

這節將概括出所有不同的子步驟更一般的過程:

步驟1-設定遺忘值(輸入門)

在本節中,將把來自短期的值與輸入本身結合起來,這個值將設定二進位制函式的值,用多變數sigmoid表示。

根據輸入和短期記憶體值,sigmoid輸出將允許或限制單元狀態上先前包含的一些知識或權重。

遞迴神經網路(RNN)及其應用(一)

步驟2-設定保持值(變化門)

然後是設定過濾器的時候了,過濾器將允許或拒絕合併新的和短期記憶到單元半永久性狀態。

因此,在這個階段,我們將確定新的和半新資訊中有多少將被納入新的單元狀態。此外,我們將最終透過我們正在配置的資訊過濾器,作為結果,將擁有一個更新的長期狀態。

為了標準化新的和短期的資訊,我們透過具有tanh啟用的神經網路傳遞新的和短期的資訊,這將允許在標準化的(-1,1)範圍內提供新的資訊。

遞迴神經網路(RNN)及其應用(一)

步驟3-輸出過濾後單元狀態

現在是短期狀態的轉折點。它還將使用新的和以前的短期狀態來傳遞新資訊,但是輸入將是長期狀態,點積乘以tanh函式,然後再次將輸入規範化為(-1,1)範圍。

遞迴神經網路(RNN)及其應用(一)

其他RNN結構

除了LSTM,還有其他的RNN的變種,例如:

LSTM with peepholes:在這個網路中,單元門連線到單元狀態。

門重複單元:該模型將遺忘門和輸入門相結合,將單元的狀態和隱藏狀態進行合併,從而大大簡化了網路的訓練。

Tensorflow LSTM可用的類和方法

下面將介紹tensorflow中用於構建LSTM層所需的類和方法。

class tf.nn.rnn_cell.BasicLSTMCell

LSTM遞迴網路單元的基礎類,具有遺忘偏差,並且沒有其他相關型別(如peep-holes)的奇特特性,這些特性允許該單元即使在不該對結果產生影響的階段上檢視單元狀態。

下面是主要引數:

num_units: int型, LSTM單元的單元數

forget_bias:Float型,這個bias(預設值是1)增加到遺忘門以便允許第一次迭代減少初始訓練步驟的資訊損失。

activation:內部狀態的啟用函式(預設值是標準的tanh函式)

遞迴神經網路(RNN)及其應用(一)

class MultiRNNCell(RNNCell)

不能使用單個單元格來考慮歷史值。在這種情況下,將使用一組連線的單元格。為此,我們將例項化MultiRNNCell類。

MultiRNNCell(cells, state_is_tuple=False)

multiRNNCell的建構函式,主引數是cells,它是我們將要stack的RNNCells的例項

遞迴神經網路(RNN)及其應用(一)

遞迴神經網路(RNN)及其應用(一)

--------------------------Boris編譯自《使用Tensorflow構建機器學習專案》一書。請勿轉載!