2017CS231n筆記_S10循環神經網絡

目錄

S10.1循環神經網絡(Recurrent Neural Networks,RNN)

S10.1.1RNN通用架構

S10.1.2RNN的5種類型

S10.2語言建模(Language Modeling)

S10.2.1字符級語言模型例子

S10.2.2反向傳播

S10.3RNN應用

S10.3.1圖像標註

S10.3.2視覺問答Visual Question Answering

S10.4RNN變種


S10.1循環神經網絡(Recurrent Neural Networks,RNN)

在機器學習領域中,管理模型的梯度流是非常重要的。以前網絡的輸入和輸出大小是固定的。但對於圖像摘要,情感分析,翻譯等任務,輸入和輸出大小是不一樣的。遇到上述任務,我們就希望機器能夠靈活地處理各種數據類型。而RNN就有很大的發揮空間。RNN能夠處理各種類型的輸入和輸出數據。

S10.1.1RNN通用架構

RNN通用架構:每個RNN網絡都有一個循環單元,輸入,輸出。通用架構以及循環函數如下圖所示,左邊是循環函數,右邊是通用架構,綠色框爲循環單元。

RNN大致工作流程:首先,x傳入循環單元,循環單元會生成一個狀態h。這個狀態稱爲內部隱藏態(internal hidden state)。然後,當讀取下一次輸入時,這個狀態會反饋到循環單元,生成新的狀態。

RNN模式:讀取輸入,更新隱藏態,並生成輸出。

循環函數:f(h,x),其中h爲狀態,x爲輸入,這兩個變量都是f的輸入,f輸出新的狀態。該函數含有權重W,在循環時,W不變。

如何在每一時間步給出輸出y:在每一個時間步,將當時的狀態h輸入到全連接層中,進行決策。

S10.1.2RNN的5種類型

依據輸入或者輸出的尺寸是否可變,RNN可分爲5種情況,架構如下圖所示:

One to One/(Vanilla) Recurrent Neural Network:Vanilla是一種前饋網絡,所有的網絡架構都有該基礎架構。網絡模型如下,輸入是固定尺寸,經過一些隱層之後,給出單一的輸出結果。Vanilla的循環函數有兩個權重,兩個權重分別與前一個時間步狀態h和此時間步的輸入x進行相乘求和,然後使用tanh函數,將結果縮放至[-1,1]範圍。Vanilla簡單,但效果不怎麼好。

One to One

One to Many:該模型接收固定長的輸入項,然後輸出不定長的輸出項。在第一個時間步時,有初始狀態h0,通常情況下,h0=0。W是在進行f計算時的權重,可以看出,W不變。該類型網絡只有一次輸入x。在之後的時間步,僅使用前一個時間步h來進行f運算,得到該時間步的狀態ht。每個時間步得到的ht作爲輸入傳給之後的網絡,得到該時間步下的輸出yt。yt可以是每個時步的類別得分或者其他類似的東西。反向傳播時,在每一個時步,計算梯度。最終的W梯度是所有時步下獨立計算出的梯度之和。下圖是該類型RNN的計算圖。

One to Many

Many to One:h0和x1共同輸入,計算出下一個狀態h1。在後面的時間步,重複之前的步驟,直到用完輸入序列中的輸入項目xt。最後一個時間步得到的ht作爲輸入傳給之後的網絡,得到網絡的輸出yt。下圖是該類型RNN的計算圖。

Many to One

Many to Many:該模型接收固定長的輸入項,然後輸出固定長的輸出項。每個時間步得到的ht作爲輸入傳給之後的網絡,得到該時間步下的輸出yt。yt可以是每個時步的類別得分或者其他類似的東西。在每個時間步下,都有一個與輸入序列對應的真是標籤。這樣就可以計算出每個時間步的損失Lt。這裏的損失函數一般是softmax之類的。所有時間步的單獨的損失值的總和是網絡最終的損失值L。下圖是該類型RNN的計算圖。

Many to Many

Sequence to Sequence:該模型接收不定長的輸入項,然後輸出不定長的輸出項。該類型的網絡由兩部分組成,一部分是Many to One網絡,用於對輸入進行編碼;另一部分是One to Many網絡,用於對一個網絡的輸出進行解碼。

Sequence to Sequence

S10.2語言建模(Language Modeling)

一個經常使用RNN的領域是語言建模。在該任務中,模型讀取一些語句進行學習,使得模型在一定程度上學會生成自然語言。這在字符水平上或者單詞水平是可行的,使得模型逐個生成字符或單詞。模型的輸入可以是莎士比亞的詩,Linux內核源代碼,數學拓撲學知識等等。

S10.2.1字符級語言模型例子

首先,語言模型有自己的詞典,在本例中,詞典爲[h,e,l,o]。該模型對輸入序列進行訓練,最後進行預測。

在訓練階段,設訓練序列爲"hello",模型學習過程如下圖所示。

Training Stage

在測試階段,一次一個字符返回給模型。當輸入一個字符時,會輸出一個採樣的值,如e。將e進行one-hot編碼,當作下一個輸入字符,放入模型中,生成下一個輸出字符。重複上述步驟直到結束。該模型使用softmax函數進行採樣。簡單來說,該函數把一些數據映射到(0-1)之間的實數,並且進行歸一化,從而保證和爲1,即使得多分類的概率之和也剛好爲1。模型不使用分數最高的進行輸出,而是使用softmax函數進行輸出。這樣做的原因是,當使用softmax的最大概率值輸出時,等同使用分數最高的進行輸出。但當使用softmax的採樣值(Sample)輸出時,(下圖中使用採樣輸出),這會增加模型的靈活性,使得每次模型的輸出都不一樣。

testing stage

 

S10.2.2反向傳播

Backpropagation through time :假設有一個序列,每個時間步生成y以及loss,這就是沿時間的反向傳播方法。但該方法在序列很長的情況下,十分耗時。因爲每次loss的計算,梯度計算和BP依賴於模型輸入序列的長度。當輸入序列很長時,BP就十分耗時。模型很難收斂,並且佔用非常大的內存。 

Truncated Backpropagation through time:在實際中,採用一種近似方法,被稱爲沿時間的截斷反向傳播方法。。每n個時間步,就計算一次損失以及梯度,在前n個時間步內進行BP,更新權重。min-char-rnn.py實現了該方法。


S10.3RNN應用

S10.3.1圖像標註

圖像標註是輸入一幅圖像,模型輸出關於該圖像的一個描述,這個文字描述是不定長的,考慮使用RNN或者帶有注意力機制的模型。處理該任務的一個簡單模型由兩部分組成,CNN和RNN。CNN部分去掉經典CNN架構的頂層,生成圖像的特徵。RNN接收CNN特徵v,x0(開始標記)和初始狀態,進行描述語句的生成。在RNN部分中,循環單元的函數f需要再加上CNN特徵項(Wv),一個f的示例:

該模型是一個監督學習模型。在訓練階段,每張圖片對應一段描述,每段描述需要有開始標記和結束標記,分別告訴RNN,描述可以開始或者停止。在測試階段,在t=0時,生成y0,從y0中進行採樣,得到的結果作爲x1輸入到循環單元中進行計算。重複上述步驟,直到採樣到停止標記。

Training Stage
Testing Stage

一些較好的結果是:

S10.3.2視覺問答Visual Question Answering

這裏給出一個視覺問答的模型。在這裏,模型的任務是,將圖片和問題輸入到模型中,模型輸出答案。模型由CNN和RNN組成。有時候也會結合soft spacial attention。CNN將圖像概括爲一個向量。輸入的問題概括爲一個向量。將CNN向量和輸入向量結合,輸入到RNN中,來對答案進行預測。


S10.4RNN變種

多層RNN:當網絡越深時,性能越好,RNN也是如此。但一般RNN不會太深,大約是一層到四層就夠了。下圖是一個三層RNN網絡結構。

Long Short Term Memory (LSTM):Vanilla RNN在反向傳播時,會發生梯度爆炸或消失現象。梯度爆炸可以通過梯度剪切來控制;梯度消失可通過添加額外的交互來控制(LSTM)。實際情況中,通常使用LSTM[Hochreiter et al., 1997]和GRU,它們改進了梯度流。LSTM中的循環單元以及函數如下所示。LSTM單元有隱藏狀態ht和單元狀態ct。單元狀態的值對其他單元不可見,只有隱藏狀態可見。LSTM循環單元接收上個時間步的隱藏狀態和單元狀態。分別計算i,f,o,g四個門的值。然後計算該時間步的隱藏狀態和單元狀態。相關論文[Hochreiter et al., 1997]和[LSTM: A Search Space Odyssey, Greff et al., 2015]。

GRU: [Learning phrase representations using rnn encoder-decoder for statistical machine translation, Cho et al. 2014]。門控循環單元,單元函數如下所示。類似於LSTM。使用元素乘法和加法一起相互作用來避免梯度消失問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章