1. 程式人生 > >李巨集毅機器學習課程筆記9:Recurrent Neural Network

李巨集毅機器學習課程筆記9:Recurrent Neural Network

臺灣大學李巨集毅老師的機器學習課程是一份非常好的ML/DL入門資料,李巨集毅老師將課程錄影上傳到了YouTube,地址:NTUEE ML 2016
這篇文章是學習本課程第25-26課所做的筆記和自己的理解。

Lecture 25,26: Recurrent Neural Network

RNN的基本概念與SimpleRNN

以訂票系統中的Slot Filling為例,我們希望訂票系統聽到使用者說:”I would like to arrive Taipei on November 2nd.” 時做好Slot Filling, 即識別出語音中 Taipei 屬於 Destination 這個slot, November 2nd 屬於 Time of arrival 這個slot, 而其它詞彙不屬於任何slot。
能否用Feedforward network解決這一問題呢?
先說結論:不能。
為什麼呢?我們把word變成vector(e.g. 1-of-N encoding, word hashing)作為Feedforward network的輸入,輸出是該詞彙屬於slots(Destination, Time of arrival) 的概率。但是這樣是不夠的,因為在slot filling的任務中,neural network是需要有記憶的,要記住在Taipei之前出現過的arrive或leave。這種有記憶的neural network叫做Recurrent Neural Network.
這裡寫圖片描述


在RNN中,hidden layer的neuron產生的output會被存到memory中,對之後的input, hidden layer的neuron不只考慮input, 還會考慮存在memory中的值。memory在沒有任何input時需要初始值。
RNN會考慮input sequence的order,改變input sequence的order,output會隨之改變。
這裡寫圖片描述

這裡寫圖片描述
圖中並不是三個neural network, 而是同一個neural network在三個不同的時間點被使用了三次(同樣的weight用同樣的顏色表示)。

RNN有不同的變形,Elman Network & Jordan Network.
這裡寫圖片描述


據說 Jordan Network 有更好的performance,因為在Elman Network 中放到memory裡的是沒有target的,有點難控制它學到什麼東西放到memory裡面,而在Jordan Network中放到memory裡的是有target的,我們比較清楚放到target中的是什麼東西。

RNN還可以是雙向的。剛才看到的例子中,輸入一個句子,RNN從句首讀到句尾。其實讀的順序也可以是反過來的。同時訓練正向RNN與逆向RNN,將二者的hidden layer都接給一個output layer。用雙向RNN的好處是,它產生output時看的範圍比較廣,看了整個input sequence。
這裡寫圖片描述

LSTM的基本概念與內部結構

現在常用的memory是LSTM(Long Short-Term Memory), 結構比較複雜,有三個Gate.
當外界想寫入memory cell的時候,必須通過input gate,只有在input gate被開啟的時候,memory gate才可以被寫入,input gate 是開啟還是關閉,是neural network自己學的。同理還有一個output gate, 它的開或關也是neural network 學到的。還有一個forget gate, 決定什麼時候將memory cell中的內容忘掉,它的開或關也是neural network 學到的。
可以將LSTM看做special neuron(4 inputs, 1 output), 4 inputs指的是外界想要存到memory cell 裡的值+控制三個門的訊號。
這裡寫圖片描述

順便一提,Long Short-term Memory 裡的Long 是形容Short-term Memory 的。在最開始看到的最簡單的RNN模型中,memory是short-term的,每次有新的輸入,memory都會被洗掉。而LSTM的short-term比較long: 只要控制forget gate的訊號決定不forget,memory的值就會被存起來。

下面這張圖更清晰的表現了LSTM的結構,z,zi,zo,zf 都是scalar, 這4個input scalar 是由input vector與weight vector計算內積再加上bias而來,weight vector與bias是由training data用gradient descent學到的。
函式f 常選sigmoid,因為sigmoid輸出的0-1之間的值可以表示gate開啟的程度(1:開啟,0:關閉)。f(zi)=1 時,允許輸入; f(zi)=0 時,相當於無輸入。f(zo)=1 時,允許輸出;f(zi)=0 時,相當於無法輸出。f(zf)=1 時,相當於記得memory cell中之前的值cf(zf)=0 時,相當於洗掉 c
memory cell中的值按圖中的公式進行更新。
這裡寫圖片描述

LSTM組成的網路

把之前的網路中的neuron換成LSTM,就是用LSTM的網路的結構。引數量變成了之前的4倍。
這裡寫圖片描述

假設現在一層有n個LSTM,n個memory cell的值組成vector ct1, 下圖中的z,zi,zf,zo 都是n維vector, 第i維控制第i個LSTM相應的gate。
這裡寫圖片描述

而實際中要更復雜一點:把每個LSTM在時刻t的output ht 接到該LSTM在下一時刻的輸入,同時所謂peephole的意思是把前一時刻memory cell中的值也拉到下一時刻的input中。即,操控LSTM4個input z,zi,zf,zo 時同時考慮了xt+1,ht,ct.
這裡寫圖片描述

一般一層不夠,所謂Multiple-layer LSTM就是把前一層各LSTM輸出的ht 作為下一層對應LSTM的輸入xt.

Keras支援三種RNN,分別是LSTM, GRU(LSTM的簡化,只有兩個gate,減少了引數避免了過擬合,performance與LSTM差不多), SimpleRNN(本節最開始的RNN結構)。

RNN的Learning

RNN在Learning時如何定義loss function呢?以slot filling 為例,對每個輸入xi, 其輸出的yi 與相應的reference vector計算cross entropy, cross entropy之和就是loss function. 訓練時word sequence不能打散,要先用x1 得到y1, 再用x2 得到y2.
定義好loss function之後,用gradient descent做training。gradient descent的演算法從BP進階為BPTT(Backpropagation through time).
但是,很遺憾的,RNN的訓練是比較困難的,其error surface要麼很平緩要麼很陡峭。這樣在做gradient descent時,引數可能跳到懸崖上,造成loss暴增,或者跳到懸崖邊上(gradient很大),造成引數飛出去(NAN)。解決辦法是clipping: 當gradient>某個閾值時,另gradient = 閾值。
這裡寫圖片描述

為何RNN會有rough的error surface?
並不是因為來自sigmoid的gradient vanish,因為換成ReLU也存在相同問題。(RNN中把sigmoid換成ReLU效果往往更差)
其實是因為RNN處理的是time sequence, 同樣的weight在不同時刻被多次使用。
這裡寫圖片描述
(gradient在w=1處很大,在w=0.99處很小)

如何解決這一問題呢?使用最廣泛的技巧是LSTM.
為什麼要把一般的RNN換成LSTM?因為LSTM可以處理gradient vanishing的問題:LSTM可以讓error surface不那麼崎嶇,把平坦的部分拿掉,這樣解決了gradient vanishing的問題,但沒有解決gradient explosion的問題。
那麼,為什麼LSTM可以處理gradient vanishing的問題呢?
在一般的RNN中,每個時刻neuron的output都會被放到memory中去,所以在每個時刻memory中的值都會被洗掉。但在LSTM中,是把memory中原來的值乘上一個數再加上一個數,即memory和input是想加的關係。所以LSTM中如果weight影響了memory中的值,那麼這個影響會永遠都存在(除非forget gate決定洗掉memory,有說法認為要給forget gate很大的bias以使其多數情況下開啟),而不像SimpleRNN中memory的值在每個時刻都會被洗掉。
若使用LSTM出現了過擬合,可考慮改用GRU。GRU的精神是“舊的不去,新的不來”,它將input gate與forget gate聯動起來:若input gate 開,則forget gate 關。

其它處理gradient descent的技巧還有clockwise RNN, SCRN……
如果random初始化一般RNN的weight,那麼用ReLU的效果要比用sigmoid的效果差。但[Quoc V. Le, arXiv’15]提出,如果用單位矩陣初始化一般RNN的weight,那麼用ReLU的效果要比用LSTM的效果好。
這裡寫圖片描述

李巨集毅機器學習課程筆記

相關推薦

巨集機器學習課程筆記9Recurrent Neural Network

臺灣大學李巨集毅老師的機器學習課程是一份非常好的ML/DL入門資料,李巨集毅老師將課程錄影上傳到了YouTube,地址:NTUEE ML 2016 。 這篇文章是學習本課程第25-26課所做的筆記和自己的理解。 Lecture 25,26: Recu

巨集機器學習課程筆記10Ensemble、Deep Reinforcement Learning

臺灣大學李巨集毅老師的機器學習課程是一份非常好的ML/DL入門資料,李巨集毅老師將課程錄影上傳到了YouTube,地址:NTUEE ML 2016 。 這篇文章是學習本課程第27-28課所做的筆記和自己的理解。 Lecture 27: Ensembl

巨集機器學習課程筆記-1.機器學習概論

# 機器學習是什麼 **機器學習就是讓機器能自動找到一個函式(function)** - 語音識別(Speech Recognition) 輸入是音訊,輸出是音訊對應的文字。 - 影象分類 輸入是圖片,輸出是類別(比如貓、狗)。 - AlphaGo下圍棋 輸入是當前棋盤的狀態,輸出是下一步

巨集機器學習課程筆記-4.1分類簡介及其與迴歸的區別

[TOC] # 分類模型應用案例(Classification Cases) - 信用評分(Credit Scoring) - 輸入:收入、儲蓄、職業、年齡、信用歷史等等 - 輸出:是否貸款 - 醫療診斷(Medical Diagnosis) - 輸入:現在症狀、年齡、性別、病史 - 輸出:哪種疾病

巨集機器學習課程--迴歸(Regression)

  李老師用的是精靈寶可夢做的比喻,假設進化後的寶可夢的cp值(Combat Power)與未進化之前的寶可夢的cp值相關,我們想找出這兩者之間的函式關係,可以設進化後的cp值為y,進化之前的cp值為x:y = b + w*x (不只可以設一次項,還可以設定二次項,三次項

2018-3-21巨集機器學習視訊筆記(十三)--“Hello Wrold” of Deep learning

Keras:有關的介紹:總的來說就是一個深度學習框架keras - CSDN部落格https://blog.csdn.net/xiaomuworld/article/details/52076202軟體工程中的框架:一種可複用的設計構件(從巨集觀上大體結構的一種規定約束)軟體

巨集機器學習課程6~~~深度學習入門

深度學習歷史 深度學習經典步驟 神經網路的符合標記含義 Wij 代表的是從神經元j到神經元i,這樣寫的目的是便於表達,否則最後的表示式子就是Wij的

[機器學習入門] 巨集機器學習筆記-1(Learning Map 課程導覽圖)

在此就不介紹機器學習的概念了。 Learning Map(學習導圖) PDF VIDEO 先來看一張李大大的總圖↓ 鑑於看起來不是很直觀,我“照虎

【ML】 巨集機器學習筆記

我的github連結 - 課程相關程式碼: https://github.com/YidaoXianren/Machine-Learning-course-note 0. Introduction Machine Learning: define a set of function

巨集機器學習 P14 Backpropagation 筆記

chain rule:求導的鏈式法則。 接著上一節,我們想要minimize這個loss的值,我們需要計算梯度來更新w和b。 以一個neuron舉例: 這個偏微分的結果就是輸入x。 比如下面這個神經網路: 下面我們要計算這個偏微分:。這裡的以si

巨集機器學習 P13 Brief Introduction of Deep Learning 筆記

deep learning的熱度增長非常快。 下面看看deep learning的歷史。 最開始出現的是1958年的單層感知機,1969年發現單層感知機有限制,到了1980年代出現多層感知機(這和今天的深度學習已經沒有太大的區別),1986年又出現了反向傳播演算法(通常超過3

巨集機器學習 P12 HW2 Winner or Loser 筆記(不使用框架實現使用MBGD優化方法和z_score標準化的logistic regression模型)

建立logistic迴歸模型: 根據ADULT資料集中一個人的age,workclass,fnlwgt,education,education_num,marital_status,occupation等資訊預測其income大於50K或者相反(收入)。 資料集: ADULT資料集。

巨集機器學習P11 Logistic Regression 筆記

我們要找的是一個概率。 f即x屬於C1的機率。 上面的過程就是logistic regression。 下面將logistic regression與linear regression作比較。 接下來訓練模型,看看模型的好壞。 假設有N組trainin

巨集機器學習 P15 “Hello world” of deep learning 筆記

我們今天使用Keras來寫一個deep learning model。 tensorflow實際上是一個微分器,它的功能比較強大,但同時也不太好學。因此我們學Keras,相對容易,也有足夠的靈活性。 李教授開了一個玩笑: 下面我們來寫一個最簡單的deep learning mo

巨集機器學習P7 Gradient Descent (Demo by AOE) 筆記、P8 Gradient Descent (Demo by Minecraft) 筆記

P7 Gradient Descent (Demo by AOE) 筆記: 在進行Gradient Decent時,我們可以類似玩遊戲帝國時代時探索地圖的情況。 在地圖沒有探索前,你的視野範圍只有很小的一個圈,你不知道圈外的黑幕下面有什麼東西。 現在我們假設地圖上的海拔

巨集機器學習筆記——02.Where does the error come from ?

傳送門: 在上節課講到,如果選擇不同的function set就是選擇不同的model 在testing data上會得到不同的error,而且越複雜的model不見得會給你越低的error,我們要討論的問題就是error來自什麼地方? error有兩個來源,偏

巨集機器學習-學習筆記

function set就是model 機器學習3大步驟: 1. 定義模型(function)集合 2. 指定模型(function)好壞的評價指標 3. 通過演算法選擇到最佳的模型(function) alphago下棋模型抽象為棋局向下一步的分類問題: 減少擁有label的data用量的方法: 1.

[機器學習入門] 巨集機器學習筆記-5(Classification- Probabilistic Generative Model;分類概率生成模型)

[機器學習] 李巨集毅機器學習筆記-5(Classification: Probabilistic Generative Model;分類:概率生成模型) Classification

[機器學習入門] 巨集機器學習筆記-15 (Unsupervised Learning: Word Embedding;無監督學習詞嵌入)

[機器學習入門] 李巨集毅機器學習筆記-15 (Unsupervised Learning: Word Embedding;無監督學習:詞嵌入) PDF VIDEO

[機器學習入門] 巨集機器學習筆記-6 (Classification: Logistic Regression;邏輯迴歸)

[機器學習] 李巨集毅機器學習筆記-6 (Classification: Logistic Regression;Logistic迴歸) PDF VIDEO Three steps Step 1: Function Set