雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
今天寫給小白的機器學習入門貼,就來介紹一下什麼是循環神經網絡,也就是RNN。
循環神經網絡就是專門處理序列的。由于它們在處理文本方面的有效性,是以經常用于自然語言處理(NLP)任務。
還是之前介紹的那個作者——Victor Zhou。

RNN有什麼用?
傳統的神經網絡,以及CNN,它們存在的一個問題是,隻适用于預先設定的大小。
通俗一點,就是采用固定的大小的輸入并産生固定大小的輸出。
就比如上次提到的CNN例子,以4×4圖像為輸入,最終指定輸出2×2的圖像。
而RNN呢?它專注于處理文本,其輸入和輸出的長度是可變的,比如,一對一,一對多,多對一,多對多。
看這個圖,我想你就可以明白了。
其中,輸入是紅色、RNN本身是綠色,輸出為藍色。
這種處理序列的能力十分有用,于是,RNN就有了豐富的應用場景。
比如,機器翻譯。
像你見到的,某歌、某道、某度,還有最近很火的DeepL翻譯器,它們都是“多對多”進行的。
原始文本序列被饋送到RNN,然後RNN生成翻譯後的文本作為輸出。
再比如,情緒分析。
通常使用的是“多對一”的RNN進行。将想要分析的文本輸入到RNN中,然後産生一個單一的輸出分類。
舉個例子:分析一個評論是正面還是負面的評論。
輸出得出:這是一個肯定的評論。
怎樣實作RNN?
我們就先來考慮一下,“多對多的RNN,輸入為x0、x1、x2……xn,輸出為y0、y1、y2……yn,這些xi,yi都是向量,具有任意次元。
RNNs的工作原理是疊代更新一個隐藏狀态h,它是一可以有任意次元的向量。
而對于任意的一個ht:
1、由對應的輸入xt與上一個隐藏層ht-1來計算
2、輸出yt是由ht計算出的結果。
這樣,前一次的輸出結果,就會帶到下一次的隐藏層中,跟着一起訓練。這樣看,是不是就感受到了循環二字了。
每一個步驟都是采用的相同的權重,通常來講,一個典型的RNN通常隻需3組權重去完成它的計算。
此外,還需要兩個偏差。
由此,這3個權重跟2個偏差,就完成了整個RNN的計算。
将他們組合起來,方程式是這樣的。
需要注意的是,這裡的權重是矩陣,而其他變量是向量哦!
這裡的第一個方程式,激活函數采用的是雙曲線函數,當然用之前提到的S型函數也是OK的。
文本是肯定還是否定?
接着,我們就來試着從頭開始執行RNN吧。
以一個簡單的情感分析為例,就是判斷一串給定的文本字元串是肯定的表達還是否定的。
比如,這些資料集。
從這個表格看出,我們将使用“多對一”的RNN類型。
每個輸入x都将是一個向量,代表文本中的一個單詞。
而輸出y則是一個包含兩個數字的向量,一個代表正數,一個代表負數,然後應用Softmax将這些值轉化為機率,并最終得出正負。
預處理
首先,我們要先進行一些預處理——将資料集轉化為可用的格式。因為RNN暫且還不能識别單詞,是以,我們需要建構一個所有單詞的詞彙表,并給它編号。
在詞彙表中,有18個單詞,那就意味着每一個單詞是一個x,那麼輸入就是一個18維的向量。
訓練RNN
接下來,就是按照原始RNN所需的3個權重,與2個偏差開始。
就是我們前面見過的公式。
就像此前訓練CNN一樣,訓練RNN,首先需要一個損失函數。
此次将使用交叉熵損失與Softmax聯合計算:
(其中c表示某個文本标簽,比如 correct)
舉個例子,如果一個肯定文本測試顯示有90%的機率是肯定的,那麼它的損失函數是:
計算了損失函數以後,就要利用梯度下降的訓練來減小損失。
接下來,就涉及到多變量演算,計算思路跟之前的一樣,隻是具體計算公式有所不同。詳情就戳下方連結。
訓練之後,别忘了,還需要進行一番測試哦~
好了,今天有關RNN介紹,就到這裡了。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-05-31
本文作者:白交
本文來自:“
量子位公衆号”,了解相關資訊可以關注“公衆号 QbitAI”