① 卷積神經網路(CNN)和循環神經網路(RNN)有什麼區別
簡單來說,卷積神經網路和循環神經網路都是深度學習的重要框架。區別在哪裡呢?區別就在循環層上。卷積神經網路沒有時序性的概念,輸入直接和輸出掛鉤;循環神經網路具有時序性,當前決策跟前一次決策有關。舉個例子,進行手寫數字識別的時候,我們並不在意前一個決策結果是什麼,需要用卷積神經網路;而自然語言生成時,上一個詞很大程度影響了下一個詞,需要用循環神經網路。
② 循環神經網路
為什麼卷積神經網路不會出現嚴重的數值問題呢?
卷積神經網路中每一層的權重矩陣 W 是不同的,並且在初始化時它們是獨立同分布的,因此可以相互抵消,在多層之後一般不會出現嚴重的數值問題。
循環神經網路採用 ReLu 激活函數,只有當 W 的取值在單位矩陣附近時才能取得比較好的效果,因此需要將 W 初始化為單位矩陣。
Seq2Seq 模型最基礎的解碼方法是貪心法,即選取一種度量標准後,每次都在當前狀態下選擇最佳的一個結果,直到結束。貪心法的計算代價低,適合作為基準結果與其他方法相比較。貪心法獲得的是一個局部最優解,由於實際問題的復雜性,該方法往往不能取得最好的結果。
集束搜索: 是一種啟發式演算法,會保存 beam size 個當前的較佳選擇,然後解碼時每一步根據保存的選則進行下一步擴展和排序,接著選擇前 b 個進行保存,循環迭代,知道結束時選擇最佳的一個作為解碼的結果。 b 往往選擇一個適中的范圍,以 8-12 為佳。
Seq2Seq 模型引入注意力機制是為了解決什麼問題?為什麼選用了雙向的循環神經網路模型?
編碼時輸入序列的全部信息壓縮到了一個向量中,隨著序列增長,句子越前面的詞的信息丟失越嚴重。同時,Seq2Seq 模型的輸出序列中,常常會損失部分輸入序列信息,這是解碼時,當前詞及對應的源語言詞的上下文信息和位置信息在編解碼過程中丟失了。 引入注意力機制,解決上述問題 。使用雙向的循環神經網路進行建模,可以獲取前後文的信息。
③ 循環神經網路
花書中關於RNN的內容記錄於 https://www.jianshu.com/p/206090600f13 。
在前饋神經網路中,信息的傳遞是單向的,這種限制雖然使得網路變得更容易學習,但在一定程度上也減弱了神經網路模型的能力。在生物神經網路中,神經元之間的連接關系要復雜的多。 前饋神經網路可以看作是一個復雜的函數,每次輸入都是獨立的,即網路的輸出只依賴於當前的輸入。但是在很多現實任務中,網路的輸入不僅和當前時刻的輸入相關,也和其過去一段時間的輸出相關 。因此,前饋網路難以處理時序數據,比如視頻、語音、文本等。時序數據的長度一般是不固定的,而前饋神經網路要求輸入和輸出的維數都是固定的,不能任意改變。因此,當處理這一類和時序相關的問題時,就需要一種能力更強的模型。
循環神經網路(Recurrent Neural Network,RNN)是一類具有短期記憶能力的神經網路。在循環神經網路中,神經元不但可以接受其它神經元的信息,也可以接受自身的信息,形成具有環路的網路結構。 和前饋神經網路相比,循環神經網路更加符合生物神經網路的結構。循環神經網路已經被廣泛應用在語音識別、語言模型以及自然語言生成等任務上。循環神經網路的參數學習可以通過 隨時間反向傳播演算法 來學習。
為了處理這些時序數據並利用其歷史信息,我們需要讓網路具有短期記憶能力。而前饋網路是一個靜態網路,不具備這種記憶能力。
一種簡單的利用歷史信息的方法是建立一個額外的延時單元,用來存儲網路的歷史信息(可以包括輸入、輸出、隱狀態等)。比較有代表性的模型是延時神經網路。
延時神經網路是在前饋網路中的非輸出層都添加一個延時器,記錄最近幾次神經元的輸出。在第 個時刻,第 層神經元和第 層神經元的最近 次輸出相關,即:
延時神經網路在時間維度上共享權值,以降低參數數量。因此對於序列輸入來講,延時神經網路就相當於卷積神經網路 。
自回歸模型(Autoregressive Model,AR) 是統計學上常用的一類時間序列模型,用一個變數 的歷史信息來預測自己:
其中 為超參數, 為參數, 為第 個時刻的雜訊,方差 和時間無關。
有外部輸入的非線性自回歸模型(Nonlinear Autoregressive with ExogenousInputs Model,NARX) 是自回歸模型的擴展,在每個時刻 都有一個外部輸入 ,產生一個輸出 。NARX通過一個延時器記錄最近幾次的外部輸入和輸出,第 個時刻的輸出 為:
其中 表示非線性函數,可以是一個前饋網路, 和 為超參數。
循環神經網路通過使用帶自反饋的神經元,能夠處理任意長度的時序數據。
給定一個輸入序列 ,循環神經網路通過下面
公式更新帶反饋邊的隱藏層的活性值 :
其中 , 為一個非線性函數,也可以是一個前饋網路。
從數學上講,上式可以看成一個動力系統。動力系統(Dynamical System)是一個數學上的概念,指 系統狀態按照一定的規律隨時間變化的系統 。具體地講,動力系統是使用一個函數來描述一個給定空間(如某個物理系統的狀態空間)中所有點隨時間的變化情況。因此, 隱藏層的活性值 在很多文獻上也稱為狀態(State)或隱狀態(Hidden States) 。理論上,循環神經網路可以近似任意的非線性動力系統。
簡單循環網路(Simple Recurrent Network,SRN)是一個非常簡單的循環神經網路,只有一個隱藏層的神經網路。
在一個兩層的前饋神經網路中,連接存在相鄰的層與層之間,隱藏層的節點之間是無連接的。而 簡單循環網路增加了從隱藏層到隱藏層的反饋連接 。
假設在時刻 時,網路的輸入為 ,隱藏層狀態(即隱藏層神經元活性值) 不僅和當前時刻的輸入 相關,也和上一個時刻的隱藏層狀態 相關:
其中 為隱藏層的凈輸入, 是非線性激活函數,通常為Logistic函數或Tanh函數, 為狀態-狀態權重矩陣, 為狀態-輸入權重矩陣, 為偏置。上面兩式也經常直接寫為:
如果我們把每個時刻的狀態都看作是前饋神經網路的一層的話,循環神經網路可以看作是在時間維度上權值共享的神經網路 。下圖給出了按時間展開的循環神經網路。
由於循環神經網路具有短期記憶能力,相當於存儲裝置,因此其計算能力十分強大。 前饋神經網路可以模擬任何連續函數,而循環神經網路可以模擬任何程序。
定義一個完全連接的循環神經網路,其輸入為 ,輸出為 :
其中 為隱狀態, 為非線性激活函數, 和 為網路參數。
這樣一個完全連接的循環神經網路可以近似解決所有的可計算問題 。
循環神經網路可以應用到很多不同類型的機器學習任務。根據這些任務的特點可以分為以下幾種模式: 序列到類別模式、同步的序列到序列模式、非同步的序列到序列模式 。
序列到類別模式主要用於序列數據的分類問題:輸入為序列,輸出為類別。比如在文本分類中,輸入數據為單詞的序列,輸出為該文本的類別。
假設一個樣本 為一個長度為 的序列,輸出為一個類別 。我們可以將樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱藏狀態 。我們可以將 看作整個序列的最終表示(或特徵),並輸入給分類器 進行分類:
其中 可以是簡單的線性分類器(比如Logistic 回歸)或復雜的分類器(比如多層前饋神經網路)
除了將最後時刻的狀態作為序列表示之外,我們還可以對整個序列的所有狀態進行平均,並用這個平均狀態來作為整個序列的表示:
同步的序列到序列模式 主要用於序列標注(Sequence Labeling)任務,即每一時刻都有輸入和輸出,輸入序列和輸出序列的長度相同 。比如詞性標注(Partof-Speech Tagging)中,每一個單詞都需要標注其對應的詞性標簽。
輸入為序列 ,輸出為序列 。樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱狀態 。每個時刻的隱狀態 代表當前和歷史的信息,並輸入給分類器 得到當前時刻的標簽 。
非同步的序列到序列模式也稱為 編碼器-解碼器(Encoder-Decoder)模型,即輸入序列和輸出序列不需要有嚴格的對應關系,也不需要保持相同的長度。 比如在機器翻譯中,輸入為源語言的單詞序列,輸出為目標語言的單詞序列。
在非同步的序列到序列模式中,輸入為長度為 的序列 ,輸出為長度為 的序列 。經常通過 先編碼後解碼 的方式來實現。先將樣本 按不同時刻輸入到一個循環神經網路(編碼器)中,並得到其編碼 。然後再使用另一個循環神經網路(解碼器)中,得到輸出序列 。為了建立輸出序列之間的依賴關系,在解碼器中通常使用非線性的自回歸模型。
其中 分別為用作編碼器和解碼器的循環神經網路, 為分類器, 為預測輸出 的向量表示。
循環神經網路的參數可以通過梯度下降方法來進行學習。給定一個訓練樣本 ,其中 為長度是 的輸入序列, 是長度為 的標簽序列。即在每個時刻 ,都有一個監督信息 ,我們定義時刻 的損失函數為:
其中 為第 時刻的輸出, 為可微分的損失函數,比如交叉熵。那麼整個序列上損失函數為:
整個序列的損失函數 關於參數 的梯度為:
即每個時刻損失 對參數 的偏導數之和。
循環神經網路中存在一個遞歸調用的函數 ,因此其計算參數梯度的方式和前饋神經網路不太相同。在循環神經網路中主要有兩種計算梯度的方式: 隨時間反向傳播(BPTT)和實時循環學習(RTRL)演算法。
隨時間反向傳播(Backpropagation Through Time,BPTT) 演算法的主要思想是通過類似前饋神經網路的錯誤反向傳播演算法來進行計算梯度。
BPTT演算法將循環神經網路看作是一個展開的多層前饋網路,其中「每一層」對應循環網路中的「每個時刻」。在「展開」的前饋網路中,所有層的參數是共享的,因此參數的真實梯度是將所有「展開層」的參數梯度之和 。
因為參數 和隱藏層在每個時刻 的凈輸入 有關,因此第 時刻的損失函數 關於參數 的梯度為:
其中 表示「直接」偏導數,即公式 中保持 不變,對 求偏導數,得到:
其中 為第 時刻隱狀態的第 維; 除了第 個值為 外,其餘都為 的行向量。
定義誤差項 為第 時刻的損失對第 時刻隱藏神經層的凈輸入 的導數,則:
從而:
寫成矩陣形式為:
由此得到整個序列的損失函數 關於參數 的梯度:
同理可得, 關於權重 和偏置 的梯度為:
在BPTT演算法中,參數的梯度需要在一個完整的「前向」計算和「反向」計算後才能得到並進行參數更新。如下圖所示。
與反向傳播的BPTT演算法不同的是,實時循環學習(Real-Time Recurrent Learning)是通過前向傳播的方式來計算梯度。
假設循環神經網路中第 時刻的狀態 為:
其關於參數 的偏導數為:
RTRL演算法從第1 個時刻開始,除了計算循環神經網路的隱狀態之外,還依次前向計算偏導數 。
兩種學習演算法比較:
RTRL演算法和BPTT演算法都是基於梯度下降的演算法,分別通過前向模式和反向模式應用鏈式法則來計算梯度。 在循環神經網路中,一般網路輸出維度遠低於輸入維度,因此BPTT演算法的計算量會更小,但BPTT演算法需要保存所有時刻的中間梯度,空間復雜度較高。RTRL演算法不需要梯度回傳,因此非常適合於需要在線學習或無限序列的任務中 。
循環神經網路在學習過程中的主要問題是由於 梯度消失或爆炸問題 ,很難建模長時間間隔(Long Range)的狀態之間的依賴關系。
在BPTT演算法中,我們有:
如果定義 ,則:
若 ,當 時, ,會造成系統不穩定,稱為梯度爆炸問題;相反,若 ,當 時, ,會出現和深度前饋神經網路類似的梯度消失問題。
雖然簡單循環網路理論上可以建立長時間間隔的狀態之間的依賴關系,但是由於梯度爆炸或消失問題,實際上只能學習到短期的依賴關系。這樣,如果t時刻的輸出 依賴於 時刻的輸入 ,當間隔 比較大時,簡單神經網路很難建模這種長距離的依賴關系,稱為 長程依賴問題(Long-Term dependencies Problem) 。
一般而言,循環網路的梯度爆炸問題比較容易解決,一般 通過權重衰減或梯度截斷來避免。 權重衰減是通過給參數增加 或 范數的正則化項來限制參數的取值范圍,從而使得 。梯度截斷是另一種有效的啟發式方法,當梯度的模大於一定閾值時,就將它截斷成為一個較小的數。
梯度消失是循環網路的主要問題。除了使用一些優化技巧外,更有效的方式就是改變模型,比如讓 ,同時使用 ,即:
其中 是一個非線性函數, 為參數。
上式中, 和 之間為線性依賴關系,且權重系數為1,這樣就不存在梯度爆炸或消失問題。但是,這種改變也丟失了神經元在反饋邊上的非線性激活的性質,因此也降低了模型的表示能力。
為了避免這個缺點,我們可以採用一種更加有效的改進策略:
這樣 和 之間為既有線性關系,也有非線性關系,並且可以緩解梯度消失問題。但這種改進依然存在兩個問題:
為了解決這兩個問題,可以通過引入 門控機制 來進一步改進模型。
為了改善循環神經網路的長程依賴問題,一種非常好的解決方案是引入門控機制來控制信息的累積速度,包括 有選擇地加入新的信息,並有選擇地遺忘之前累積的信息 。這一類網路可以稱為基於門控的循環神經網路(Gated RNN)。本節中,主要介紹兩種基於門控的循環神經網路: 長短期記憶網路和門控循環單元網路。
長短期記憶(Long Short-Term Memory,LSTM)網路 是循環神經網路的一個變體,可以有效地解決簡單循環神經網路的梯度爆炸或消失問題。
在 基礎上,LSTM網路主要改進在以下兩個方面:
其中 和 三個門(gate)來控制信息傳遞的路徑; 為向量元素乘積; 為上一時刻的記憶單元; 是通過非線性函數得到的候選狀態:
在每個時刻 ,LSTM網路的內部狀態 記錄了到當前時刻為止的歷史信息。
在數字電路中,門(Gate)為一個二值變數{0, 1},0代表關閉狀態,不許任何信息通過;1代表開放狀態,允許所有信息通過。LSTM網路中的「門」是一種「軟」門,取值在(0, 1) 之間,表示 以一定的比例運行信息通過 。LSTM網路中三個門的作用為:
(1)遺忘門 控制上一個時刻的內部狀態 需要遺忘多少信息。
(2)輸入門 控制當前時刻的候選狀態 有多少信息需要保存。
(3)輸出門
④ 入門 | 一文簡述循環神經網路
入門 | 一文簡述循環神經網路
本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 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 建的。我對該模型做了一些細微的改動以適合本文的要求。
⑤ 循環神經網路(RNN)——處理序列樣本
循環神經網路(Recurrent Neural Network,RNN)具有記憶功能,他可以發現樣本之間的序列關系,是處理序列樣本的首選模型。循環神經網路大量應用在數值、文本、聲音、視頻處理等領域。
循環神經網路模型是一個具有記憶功能的模型。它可以發現樣本之間的相互關系,多用於處理帶有序列特徵的樣本數據。
RNN模型有很多種結構,其最基本的結構是將全連接網路的輸出節點復制一份並傳回到輸入節點中,與輸入數據一起進行下一次運算。這種神經網路將數據從輸入層又傳回到輸出層,形成了循環結構,所以被叫做循環神經網路。
通過RNN模型,可以將上一個序列的樣本輸出結果與下一個序列樣本一起輸入模型中進行運算,使模型所處理的特徵信息中,既含有該樣本之前序列的信息,又含有該樣本自身的數據信息,從而使網路具有記憶功能。
在實際開發中,所使用的RNN模型還會基於上述的原理做更多的結構改進,使得網路的記憶功能更強。
在深層網路結構中,還會在RNN模型基礎上結合全連接網路、卷積網路、等組成擬合能力更強的模型。
⑥ 145自然語言處理進階手冊--循環神經網路
循環神經網路是一個有向循環的過程,「有向」是因為朝著序列方依次輸入各序列成分以及上一步的輸出成分,「循環」是因為每個序列成分進行運算的參數是一致的,因為它對數據的每個輸入執行相同的功能,而當前輸入的輸出取決於上一步的計算。
與前饋神經網路不同, 循環神經網路可以使用其內部狀態(隱狀態)來處理輸入序列。這使它們適用於諸如語音、文本等序列數據。而在其他神經網路中,所有輸入都是彼此獨立的。但是在循環神經網路中,所有輸入都是相互關聯的,如下圖所示為基本的循環神經網路模型結構: Vanilla RNN。
循環神經網路每一步的輸出都包含了前面步驟的信息,因此具備記憶功能,而記憶功能是解讀語境的關鍵。比如,對於「小梅很喜歡吃桔子,她不喜歡吃蘋果」這句話,如果逐詞輸入輸出但是缺少記憶性,我們只能解析出一個個獨立詞所表達的意思,反之,在具備記憶的情況下,當看到桔子時,可知其不僅僅指「水果的概念」,而是「一個人喜歡的食物對象」。因此循環神經網路很適合處理序列間存在聯系的場景。
上圖中展示了一個最基本最簡單的單向循環神經網路,實際上根據需求可以在此基礎上有所改進。如可以將單向序列行進的網路改為雙向循環神經網路,因為很多時候,對於一個序列,元素之間的影響可以是雙向的,即從前往後以及從後往前。還是以「小梅很喜歡吃桔子,她不喜歡吃蘋果」為例,如果從後往前看,先看過「她不喜歡吃蘋果」,再看到「桔子」,也能大概知道「桔子」可能和「一個人的喜好」相關。所以,雙向循環神經網路能夠提供更豐富的信息。
而在事實應用中,Vanilla RNN 並不常用,這是因為其在梯度下降過程中,存在累乘項及激活函數的值域導致的梯度消失和爆炸問題,也就是說,訓練 Vanilla RNN 是一項非常困難的任務,無法處理很長的序列,獲取不到遠距離的信息。
長短期記憶(LSTM)網路是 Vanilla RNN 的修改版,該網路由 Hochreiter & Schmidhuber (1997) 引入,並有許多人對其進行了改進和普及,可以更輕松地記住序列中的更長距離的過去數據,通過特製的門控結構改變了梯度更新的表達式,從而緩解了梯度消失問題(梯度爆炸可通過梯度裁剪解決)。LSTM 非常適合對序列數據進行分類,標注和預測。 LSTM 基本結構如下:
LSTM 的核心是細胞狀態,用貫穿細胞的水平線表示。細胞狀態像傳送帶一樣,貫穿整個細胞卻只有很少的分支,這樣能保證信息穩定地流過整個網路,就好比人的記憶狀態能夠貫穿人的一生。
以上便是 LSTM 的內部結構,通過門控狀態來控制傳輸狀態,記住對任務關鍵的信息,忘記不重要的信息;而不像普通的 RNN 那樣只僅有一種記憶疊加的簡單方式,可針對更長的文本。但同時也因為引入了很多內容,導致參數變多,也使得訓練難度加大了很多。因此很多時候我們往往會使用效果和 LSTM 相當,但參數更少的 GRU 來構建大訓練量的模型。
在 PyTorch 中直接調用 nn.LSTM() 便能獲取已構建好的 LSTM 層結構,首先介紹其參數。
input_size: 表示的是輸入的數據維數。
hidden_size: 表示的是輸出維數。
num_layers: 表示堆疊幾層的 LSTM,默認是 1。
bias: True 或者 False,決定是否使用 bias,默認為 True。
batch_first: 如果為 True, 接受的數據輸入是 (batch_size,seq_len,input_size),如果為 False,則為 (seq_len,batch_size,input_size),默認為 False。
dropout: 表示除了最後一層之外都引入一個 dropout。
bidirectional: 表示雙向 LSTM,默認為 False。
接下來介紹 LSTM 的輸入與輸出。
輸入包括:
input: 表示輸入數據,其維度為 (seq_len,batch_size,input_size)。
h_0: 初始隱狀態,維度為 (num_layers*num_directions,batch_size,hidden_size),num_layers 表示 LSTM 的層數,num_directions 在 LSTM 為單向時為 1,雙向時為 2,非必須輸入,網路會提供默認初始狀態。
c_0: 初始的細胞狀態,維度與 h_0 相同,非必須,網路會提供默認初始狀態。
輸出包括:
output: 最後輸出,維度為 (seq_len, batch_size, num_directions * hidden_size)。
h_n: 最後時刻的輸出隱藏狀態,維度為 (num_layers * num_directions, batch_size, hidden_size)。
c_n: 最後時刻的輸出單元狀態,維度與 h_n 相同。
定義 LSTM 層:
接下來定義輸入,輸入數據大小應為 (seq_len,batch_size,input_size):
在 LSTM 層中輸入 x,觀察輸出:
由於 num_layers 和 num_directions 均為 1,因此 h, c 的第一維度為 num_layers*num_directions = 1。
在處理文本數據進行諸如文本分類等任務時,一般在循環神經網路的基礎上加詞向量層以及最後的輸出層作為整體的神經網路模型,典型構架如下:
初始化 LSTM 模型:
定義輸入,查看輸出:
輸出大小為 2*3,即 batch_size * output_size。
⑦ 循環神經網路(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所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路
雙向循環神經網路示意圖
雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:
⑧ 神經網路優缺點,
優點:
(1)具有自學習功能。例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。
自學習功能對於預測有特別重要的意義。預期未來的人工神經網路計算機將為人類提供經濟預測、市場預測、效益預測,其應用前途是很遠大的。
(2)具有聯想存儲功能。用人工神經網路的反饋網路就可以實現這種聯想。
(3)具有高速尋找優化解的能力。尋找一個復雜問題的優化解,往往需要很大的計算量,利用一個針對某問題而設計的反饋型人工神經網路,發揮計算機的高速運算能力,可能很快找到優化解。
缺點:
(1)最嚴重的問題是沒能力來解釋自己的推理過程和推理依據。
(2)不能向用戶提出必要的詢問,而且當數據不充分的時候,神經網路就無法進行工作。
(3)把一切問題的特徵都變為數字,把一切推理都變為數值計算,其結果勢必是丟失信息。
(4)理論和學習演算法還有待於進一步完善和提高。
(8)循環神經網路有什麼好處擴展閱讀:
神經網路發展趨勢
人工神經網路特有的非線性適應性信息處理能力,克服了傳統人工智慧方法對於直覺,如模式、語音識別、非結構化信息處理方面的缺陷,使之在神經專家系統、模式識別、智能控制、組合優化、預測等領域得到成功應用。
人工神經網路與其它傳統方法相結合,將推動人工智慧和信息處理技術不斷發展。近年來,人工神經網路正向模擬人類認知的道路上更加深入發展,與模糊系統、遺傳演算法、進化機制等結合,形成計算智能,成為人工智慧的一個重要方向,將在實際應用中得到發展。
將信息幾何應用於人工神經網路的研究,為人工神經網路的理論研究開辟了新的途徑。神經計算機的研究發展很快,已有產品進入市場。光電結合的神經計算機為人工神經網路的發展提供了良好條件。
神經網路在很多領域已得到了很好的應用,但其需要研究的方面還很多。其中,具有分布存儲、並行處理、自學習、自組織以及非線性映射等優點的神經網路與其他技術的結合以及由此而來的混合方法和混合系統,已經成為一大研究熱點。
由於其他方法也有它們各自的優點,所以將神經網路與其他方法相結合,取長補短,繼而可以獲得更好的應用效果。目前這方面工作有神經網路與模糊邏輯、專家系統、遺傳演算法、小波分析、混沌、粗集理論、分形理論、證據理論和灰色系統等的融合。
參考資料:網路-人工神經網路
⑨ 循環神經網路(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模型用於實現一個語義預測模型。
⑩ 循環神經網路(RNN)的應用
循環神經網路(RNN)是目前深度學習最有前景的工具之一,它解決了傳統神經網路不能共享從數據中共享位置的特徵的問題。目前,RNN已經有了不少有意思的應用:
語音識別 :輸入的語音數據,生成相應的語音文本信息。比如微信的語音轉文字功能。
機器翻譯 :不同語言之間的相互轉換。像有道翻譯、騰訊翻譯官等。最近微軟據說實現了中翻英媲美人類的水平
音樂生成 :使用RNN網路生成音樂,一般會用到RNN中的LSTM演算法(該演算法可以解決RNN網路中相距較遠的節點梯度消失的問題)。下面這個github項目實現了jazz音樂的生成。
deepjazz
文本生成 :利用RNN亦可以生成某種風格的文字。有興趣的可以看一下一下兩個github項目
numpy實現字元層面的文本生成器
keras實現特定作家風格的文本
情感分類 :輸入文本或者語音的評論數據,輸出相應的打分數據。
DNA序列分析 :輸入的DNA序列,輸出蛋白質表達的子序列。
視頻行為識別 :識別輸入的視頻幀序列中的人物行為。
實體名字識別 :從文本中識別實體的名字。