1. 程式人生 > >迴圈神經網路(RNN)

迴圈神經網路(RNN)

1.NN & RNN

神經網路從原理到實現一文中已經比較詳細地介紹了神經網路,下面用一張圖直觀地比較NN與RNN地不同。從圖1中可以看出,RNN比NN多了指向自己的環,即圖1中的7,8,9,10節點及其連線。圖2顯示RNN展開的網路結構。

在傳統的神經網路中,我們假設所有的輸入(包括輸出)之間是相互獨立的。對於很多工來說,這是一個非常糟糕的假設。如果你想預測一個序列中的下一個詞,你最好能知道哪些詞在它前面。RNN之所以迴圈的,是因為它針對系列中的每一個元素都執行相同的操作,每一個操作都依賴於之前的計算結果。換一種方式思考,可以認為RNN記憶了到當前為止已經計算過的資訊。理論上,RNN可以利用任意長的序列資訊,但實際中只能回顧之前的幾步。


圖1

圖2

2.demo

Character Language Model,通過預測下一個字元,從而產生整篇文章。程式碼:min-char-rnn.py

3.前向傳播


圖3

在圖3中

4.後向傳播

一共有T個時刻,引數求導如下:

對t時刻求導,需要用到前面k=1到t的資訊:

[k,t]之間的求導,可以轉換為[k+1,t]對前一時刻求導的乘積:

其中,對前一時刻進行求導:

所以,最終引數更新公式如下:

4.簡單應用

from __future__ import print_function

from keras.datasets import
mnist from keras.models import Sequential from keras.layers import Dense, Activation from keras.layers import SimpleRNN from keras.initializations import normal, identity from keras.optimizers import RMSprop from keras.utils import np_utils batch_size = 32 nb_classes = 10 nb_epochs = 200 hidden_units = 100
learning_rate = 1e-6 clip_norm = 1.0 # the data, shuffled and split between train and test sets (X_train, y_train), (X_test, y_test) = mnist.load_data() X_train = X_train.reshape(X_train.shape[0], -1, 1) X_test = X_test.reshape(X_test.shape[0], -1, 1) X_train = X_train.astype('float32') X_test = X_test.astype('float32') X_train /= 255 X_test /= 255 print('X_train shape:', X_train.shape) print(X_train.shape[0], 'train samples') print(X_test.shape[0], 'test samples') # convert class vectors to binary class matrices Y_train = np_utils.to_categorical(y_train, nb_classes) Y_test = np_utils.to_categorical(y_test, nb_classes) print('Evaluate IRNN...') model = Sequential() model.add(SimpleRNN(output_dim=hidden_units, init=lambda shape, name: normal(shape, scale=0.001, name=name), inner_init=lambda shape, name: identity(shape, scale=1.0, name=name), activation='relu', input_shape=X_train.shape[1:])) model.add(Dense(nb_classes)) model.add(Activation('softmax')) rmsprop = RMSprop(lr=learning_rate) model.compile(loss='categorical_crossentropy', optimizer=rmsprop, metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epochs, verbose=1, validation_data=(X_test, Y_test)) scores = model.evaluate(X_test, Y_test, verbose=0) print('IRNN test score:', scores[0]) print('IRNN test accuracy:', scores[1])

5.RNN還可以做什麼

語言模型和文字生成

給定一個詞的序列,我們想預測在前面的詞確定之後,每個詞出現的概率。語言模型可以度量一個句子出現的可能性,這可以作為機器翻譯的一個重要輸入(因為出現概率高的句子通常是正確的)。能預測下一個詞所帶來的額外效果是我們得到了一個生成模型,這可以讓我們通過對輸出概率取樣來生成新的文字。根據訓練資料的具體內容,我們可以生成任意東西。在語言模型中,輸入通常是詞的序列(編碼成one hot向量),輸出是預測得到的詞的序列。在訓練網路是,設定,因為我們想要的時刻的輸出是下一個詞。

關於語言模型和文字生成的研究論文:

機器翻譯

機器翻譯與語言模型相似,輸入是源語言中的一個詞的序列(例如,德語),輸出是目標語言(例如,英語)的一個詞的序列。一個關鍵不同點在於在接收到了完整的輸入後才會開始輸出,因為我們要翻譯得到的句子的第一個詞可能需要前面整個輸入序列的資訊。

關於機器翻譯的研究論文:

6.擴充套件

相關推薦

迴圈神經網路RNN到LSTM網路

  通常,資料的存在形式有語音、文字、影象、視訊等。因為我的研究方向主要是影象識別,所以很少用有“記憶性”的深度網路。懷著對迴圈神經網路的興趣,在看懂了有關它的理論後,我又看了Github上提供的tensorflow實現,覺得收穫很大,故在這裡把我的理解記錄下來,也希望對大家能有所幫助。

迴圈神經網路RNN原理通俗解釋

1.RNN怎麼來的? 2.RNN的網路結構及原理 3.RNN的改進1:雙向RNN 4.RNN的改進2:深層雙向RNN 4.1 Pyramidal RNN

吳恩達序列模型學習筆記--迴圈神經網路RNN

1. 序列模型的應用 序列模型能解決哪些激動人心的問題呢? 語音識別:將輸入的語音訊號直接輸出相應的語音文字資訊。無論是語音訊號還是文字資訊均是序列資料。 音樂生成:生成音樂樂譜。只有輸出的音樂樂譜是序列資料,輸入可以是空或者一個整數。 情感分類:將輸入的評論句子轉換

迴圈神經網路RNN中time step的理解

微信公眾號 1. 傳統的迴圈神經網路 傳統的神經網路可以看作只有兩個time step。如果輸入是“Hello”(第一個time step),它會預測“World”(第二個time step),但是它無法預測更多的time step。

迴圈神經網路RNN

1.NN & RNN 在神經網路從原理到實現一文中已經比較詳細地介紹了神經網路,下面用一張圖直觀地比較NN與RNN地不同。從圖1中可以看出,RNN比NN多了指向自己的環,即圖1中的7,8,9,

04-迴圈神經網路RNN和LSTM

RNN(Recurrent NeuralNetwork)和LSTM(Long Short Term Memory)RNN(Recurrent NeuralNetwork)RNN:存在隨著時間的流逝,訊號會不斷的衰弱(梯度消失)LSTM(Long Short Term Memo

深度學習【8】基於迴圈神經網路RNN的端到端end-to-end對話系統

注:本篇部落格主要內容來自:A Neural Conversational Model,這篇論文。 http://blog.csdn.net/linmingan/article/details/51077837         與傳統的基於資料庫匹配的對話\翻譯系統不一樣

大話迴圈神經網路RNN

—— 原文釋出於本人的微信公眾號“大資料與人工智慧Lab”(BigdataAILab),歡迎關注。 卷積神經網路CNN在影象識別中有著強大、廣泛的應用,但有一些場景用CNN卻無法得到有效地解決,例如:語音識別,要按順序處理每一幀的聲音資訊,有些結果需要根據上下文進行識別;自然

深度學習:迴圈神經網路RNN的變體LSTM、GRU

訪問請移步至,這裡有能“擊穿”平行宇宙的亂序並行位元組流… 假設我們試著去預測“I grew up in France… I speak fluent French”最後的詞French。當前的資訊建議下一個詞可能是一種語言的名字,但是如果我們需要弄清楚是什麼

機器學習之迴圈神經網路

摘要:        多層反饋RNN(Recurrent neural Network、迴圈神經網路)神經網路是一種節點定向連線成環的人工神經網路。這種網路的內部狀態可以展示動態時序行為。不同於前饋神經網路的是,RNN可以利用它內部的記憶來處理任意時序的輸入序列,這讓

基於PTB資料集實現RNN-LSTM迴圈神經網路智慧填詞

本篇直入主題,做一篇學習的記錄,在學習RNN的時候,跟著教程敲了一個案例 分為處理方法檔案,神經網路模型檔案,訓練方法檔案,測試檔案 所有的操作和重要內容都在程式碼中作了詳細的註釋 一、目標神經網路模型   二、資料集 PT

序列模型5-----雙向神經網路BRNN和深層迴圈神經網路Deep RNN

一、雙向迴圈神經網路BRNN 採用BRNN原因: 雙向RNN,即可以從過去的時間點獲取記憶,又可以從未來的時間點獲取資訊。為什麼要獲取未來的資訊呢? 判斷下面句子中Teddy是否是人名,如果只從前面兩個詞是無法得知Teddy是否是人名,如果能有後面的資訊就很好判斷了,這就需要用的雙向迴圈神經網路。

迴圈神經網路Recurrent Neural Network, RNN

1. 前向傳播 at=g(a)(Waaa<t−1>+Waxx<t>+ba)a^{t}=g^{(a)}(W_{aa}a^{<t-1>}+W_{ax}x^{<t&a

迴圈神經網路一般RNN推導

本文章的例子來自於WILDML vanillaRNN是相比於LSTMs和GRUs簡單的迴圈神經網路,可以說是最簡單的RNN。 RNN結構 RNN的一個特點是所有的隱層共享引數(U,V,W),整個網路只用這一套引數。 RNN前向傳導 st=tan

小白都理解的人工智慧系列5—— 長短期迴圈神經網路LSTM RNN NO4

問題1:什麼是LSTM RNN? LSTM(Long Short-Term Memory)——意思是長短期記憶,LSTM RNN即長短期記憶的迴圈神經網路。 問題2:傳統RNN有什麼弊端? 傳統的迴圈神經網路(RNN)是有弊端的——無法進行長久記憶! 我們知道,迴圈神經

DeepLearning.ai作業:(5-1)-- 迴圈神經網路Recurrent Neural Networks1

title: ‘DeepLearning.ai作業:(5-1)-- 迴圈神經網路(Recurrent Neural Networks)(1)’ id: dl-ai-5-1h1 tags: dl.ai homework categories: AI Deep

DeepLearning.ai筆記:(5-1)-- 迴圈神經網路Recurrent Neural Networks

title: ‘DeepLearning.ai筆記:(5-1)-- 迴圈神經網路(Recurrent Neural Networks)’ id: dl-ai-5-1 tags: dl.ai categories: AI Deep Learning date: 2

DeepLearning.ai作業:(5-1)-- 迴圈神經網路Recurrent Neural Networks2

title: ‘DeepLearning.ai作業:(5-1)-- 迴圈神經網路(Recurrent Neural Networks)(2)’ id: dl-ai-5-1h2 tags: dl.ai homework categories: AI Deep

DeepLearning.ai作業:(5-1)-- 迴圈神經網路Recurrent Neural Networks3

title: ‘DeepLearning.ai作業:(5-1)-- 迴圈神經網路(Recurrent Neural Networks)(3)’ id: dl-ai-5-1h3 tags: dl.ai homework categories: AI Deep

TensorFlow HOWTO 5.1 迴圈神經網路時間序列

5.1 迴圈神經網路(時間序列) 迴圈神經網路(RNN)用於建模帶有時間關係的資料。它的架構是這樣的。 在最基本的 RNN 中,單元(方框)中的操作和全連線層沒什麼區別,都是線性變換和啟用。它完全可以看做多個全連線層的橫向擴充套件。 但是運算元量多了之後,就會有梯度消失