循環神經網絡(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
摘要:循環神經網絡(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
本文分享自華為雲社區《 【MindSpore易點通】深度學習系列-循環神經網絡上篇 》,作者:Skytier
循環神經網絡(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
1 應用場景
循環神經網絡(RNN)其實就是序列模型,我們先來看看其應用場景。
在語音識別時,給定了一個輸入音頻片段X ,並要求輸出對應的文字記錄Y 。這裏的輸入和輸出數據都是序列模型,輸入X是一個按時播放的音頻片段,輸出Y是一系列文字。
音樂生成問題也是一樣,輸出數據Y是序列,而輸入數據X可以是空集,也可以是個單一的整數(代表音符)。
而系列模型在DNA序列分析中也十分有用,DNA可以用A、C、G、T四個字母來表示。所以給定一段DNA序列,你能夠標記出哪部分是匹配某種蛋白質的嗎?
以上所有類似問題都可以被稱作使用標籤數據(X,Y)作為訓練集的監督學習,輸入數據X或者輸出數據Y是序列,即使兩者都是序列也有數據長度不同的問題。
2 模型構建
比如建立一個序列模型,它的輸入語句是這樣的:“Sam Li and Tom date on Tuesday.”。然後模型是可以自動識別句中人名位置的命名實體識別模型,可以用來查找不同類型的文本中的人名、公司名、時間、地點、國家名和貨幣名等等。
假定輸入數據x,序列模型的輸出y,使得輸入的每個單詞都對應一個輸出值,同時y還需要表明輸入的單詞是否是人名的一部分。
首先輸入語句是7個單詞組成的時序序列,所以最終會有7個特徵集x:x<1>,x<2>,...,x<7>,同時可以索引其序列中的位置。Tx表示輸出序列的長度,這裏Tx=7。
同理,輸出數據也是一樣,分別對應y<1>,y<2>,...,y<7>,Ty表示輸出序列的長度。
那麼問題來了,首先我們需要準備一個比較大的詞典庫,可能該庫裏的第一個單詞是a,and出現在第367個位置上,Sam是在7459這個位置,Tom則在8674。
那麼我們就可以在這個詞典庫的基礎上遍歷訓練集。
那麼也就是説,Sam由x<1>表示,其是一個第7459行是1,其餘值都是0的向量;Li由x<2>表示,其是一個第2420行是1,其餘值都是0的向量。
通常我們稱這種x指代句子裏的任意詞為one-hot向量,只有一個值是1,其餘值都是0,所以整句話中我們會有7個one-hot向量,用序列模型在X和Y目標輸出之間學習建立一個映射關係。
PS:如果遇到了一個在你詞表中的單詞,可以創建一個Unknow Word的偽造單詞,用<UNK>作為標記。
3 模型解釋
通常情況下,我們會首先選取標準的神經網絡,輸入7個one-hot向量,經過一些隱藏層,最終會輸出7個值為0或1的項,表明每個輸入單詞是否是人名的一部分。
但最後我們總會遇到這樣的問題:
1.輸入和輸出數據的長度並不完全一致,即使採用填充(pad)或零填充(zero pad)使每個輸入語句都達到最大長度,但最後的表達式會很奇怪。
2.簡單的神經網絡並不會共享從文本的不同位置上學到的特徵。因為我們希望,如果首次學習的時候我們已經知道了Tom是人名,那麼當Tom出現在其他位置時,其並不能夠自動識別,因此也不能夠減少模型中參數的數量。
那麼循環神經網絡為啥會比普通的神經網絡更加出眾呢?
另外循環神經網絡是從左向右掃描數據,同時每個時間步的參數也是共享的,用Wax來表示從x<1>到隱藏層的連接的一系列參數,每個時間步使用的都是相同的Wax參數,而激活值是由參數Waa決定的,輸出結果由Way決定。
先輸入零向量a<0>,接着進行前向傳播過程,計算激活值a<1>,然後再計算y<1>。
更普遍來説,在t時刻:
為了更加簡化一點,定義Wa:
,假設a是100維的,x是10,000維的,那麼Waa是(100,100)維的矩陣,Wax是(100,10000)維,Wa為(100,10100)。
同樣,假定
,Wy表明它是計算y類型的量的權重矩陣,而Wa和ba則表示這些參數是用來計算激活值的。
RNN前向傳播示意圖:
- 設計模式之狀態模式
- 如何實現數據庫讀一致性
- 我是怎麼入行做風控的
- C 11精要:部分語言特性
- 吳恩達來信:人工智能領域的求職小 tips
- EasyCV帶你復現更好更快的自監督算法-FastConvMAE
- 某車聯網App 通訊協議加密分析(四) Trace Code
- 帶你瞭解CANN的目標檢測與識別一站式方案
- EasyNLP玩轉文本摘要(新聞標題)生成
- PostgreSQL邏輯複製解密
- 基於 CoreDNS 和 K8s 構建雲原生場景下的企業級 DNS
- 循環神經網絡(RNN)可是在語音識別、自然語言處理等其他領域中引起了變革!
- 技術分享| 分佈式系統中服務註冊發現組件的原理及比較
- 利用谷歌地圖採集外貿客户的電話和手機號碼
- 跟我學Python圖像處理丨關於圖像金字塔的圖像向下取樣和向上取樣
- 帶你掌握如何使用CANN 算子ST測試工具msopst
- 一招教你如何高效批量導入與更新數據
- 一步步搞懂MySQL元數據鎖(MDL)
- 你知道如何用 PHP 實現多進程嗎?
- KubeSphere 網關的設計與實現(解讀)