天天看點

李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

一、應用舉例

  • Slot Filling
    • 假設訂票系統聽到使用者說:“ i would like to arrive Taipei on November 2nd”,你的系統有一些slot(有一個slot叫做Destination,一個slot叫做time of arrival),系統要自動知道這邊的每一個詞彙是屬于哪一個slot,比如Taipei屬于Destination這個slot,November 2nd屬于time of arrival這個slot。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 也可以使用一個feedforward neural network來解,也就是說我疊一個feedforward neural network,input是一個詞彙(把Taipei變成一個vector)丢到這個neural network裡面去(你要把一個詞彙丢到一個neural network裡面去,就必須把它變成一個向量來表示)。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 以下是把詞彙用向量來表示的方法:
    • 如果隻是用1-of-N encoding來描述一個詞彙的話你會遇到一些問題,因為有很多詞彙你可能都沒有見過,是以你需要在1-of-N encoding裡面多加dimension,這個dimension代表other。然後所有的詞彙,如果它不是在我們詞言有的詞彙就歸類到other裡面去(Gandalf,Sauron歸類到other裡面去)。你可以用每一個詞彙的字母來表示它的vector,比如說,你的詞彙是apple,apple裡面有出現app、ppl、ple,那在這個vector裡面對應到app,ple,ppl的dimension就是1,而其他都為0。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 假設把詞彙表示為vector,把這個vector丢到feedforward neural network裡面去,在這個task裡面,你就希望你的output是一個probability distribution。這個probability distribution代表着我們現在input這詞彙屬于每一個slot的幾率,比如Taipei屬于destination的幾率和Taipei屬于time of departure的幾率。
  • 但是光隻有這個是不夠的,feedforward neural network是沒有辦法解決這個問題。為什麼呢,假設現在有一個使用者說:“arrive Taipei on November 2nd”(arrive-other,Taipei-dest, on-other,November-time,2nd-time)。那現在有人說:"leave Taipei on November 2nd",這時候Taipei就變成了“place of departure”,它應該是出發地而不是目的地。但是對于neural network來說,input一樣的東西output就應該是一樣的東西(input "Taipei",output要麼是destination幾率最高,要麼就是place of departure幾率最高),你沒有辦法一會讓出發地的幾率最高,一會讓它目的地幾率最高。這個怎麼辦呢?這時候就希望我們的neural network是有記憶力的。如果今天我們的neural network是有記憶力的,它記得它看過紅色的Taipei之前它就已經看過arrive這個詞彙;它記得它看過綠色之前,它就已經看過leave這個詞彙,它就可以根據上下文産生不同的output。如果讓我們的neural network是有記憶力的話,它就可以解決input不同的詞彙,output不同的問題。

二、什麼是RNN?

2.1 RNN的介紹

  • 這種有記憶的neural network就叫做Recurrent Neural network(RNN)。在RNN裡面,每一次hidden layer的neuron産生output的時候,這個output會被存到memory裡去(用藍色方塊表示memory)。那下一次當有input時,這些neuron不隻是考慮input的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,還會考慮存到memory裡的值。對它來說除了
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    以外,這些存在memory裡的值
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​也會影響它的output。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.2 舉例

  • 舉個例子,假設我們現在圖上這個neural network,它所有的weight都是1,所有的neuron沒有任何的bias。假設所有的activation function都是linear(這樣可以不要讓計算太複雜)。現在假設我們的input 是sequence
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
     把這個sequence輸入到neural network裡面去會發生什麼事呢?在你開始要使用這個Recurrent Neural Network的時候,你必須要給memory初始值(假設他還沒有放進任何東西之前,memory裡面的值是0)。現在輸入第一個
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,接下來對發生什麼事呢?,對左邊的那個neural來說(第一個hidden layer),它除了接到input的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    還接到了memory(0跟0),output就是2(所有的weight都是1),右邊也是一樣output為2。第二層hidden laeyer output為4。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 接下來Recurrent Neural Network會将綠色neuron的output存在memory裡去,是以memory裡面的值被update為2。

    接下來再輸入

    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,接下來綠色的neuron輸入有四個
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,output為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,第二層的neural output為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。是以對Recurrent Neural Network來說,你就算input一樣的東西,它的output是可能不一樣了(因為有memory)
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 現在
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    存到memory裡去,接下來input是
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,output為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,第二層hidden layer為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。那在做Recurrent Neural Network時,有一件很重要的事情就是這個input sequence調換順序之後output不同(Recurrent Neural Network裡,它會考慮sequence的order)

2.3 RNN架構

  • 今天我們要用Recurrent Neural Network處理slot filling這件事,就像是這樣,使用者說:“arrive Taipei on November 2nd”,arrive就變成了一個vector丢到neural network裡面去,neural network的hidden layer的output寫成
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    (
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    是一排neural的output,是一個vector),
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    産生
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    就是“arrive”屬于每一個slot filling的幾率。接下來
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    會被存到memory裡面去,"Taipei會變為input",這個hidden layer會同時考慮“Taipei”這個input和存在memory裡面的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,根據
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    是屬于每一個slot filling的幾率。以此類推(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    )。有人看到這裡,說這是有三個network,這個不是三個network,這是同一個network在三個不同的時間點被使用了三次。(我這邊用同樣的weight用同樣的顔色表示)
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 那是以我們有了memory以後,剛才我們講了輸入同一個詞彙,我們希望output不同的問題就有可能被解決。比如說,同樣是輸入“Taipei”這個詞彙,但是因為紅色“Taipei”前接了“leave”,綠色“Taipei”前接了“arrive”(因為“leave”和“arrive”的vector不一樣,是以hidden layer的output會不同),是以存在memory裡面的值會不同。現在雖然x_2x2​的值是一樣的,因為存在memory裡面的值不同,是以hidden layer的output會不一樣,是以最後的output也就會不一樣。這是Recurrent Neural Network的基本概念。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4 其他RNN

  • Recurrent Neural Networ的架構是可以任意設計的,比如說,它當然是deep(剛才我們看到的Recurrent Neural Networ它隻有一個hidden layer),當然它也可以是deep Recurrent Neural Networ。比如說,我們把x^txt丢進去之後,它可以通過一個hidden layer,再通過第二個hidden layer,以此類推(通過很多的hidden layer)才得到最後的output。每一個hidden layer的output都會被存在memory裡面,在下一個時間點的時候,每一個hidden layer會把前一個時間點存的值再讀出來,以此類推最後得到output,這個process會一直持續下去。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.1 Elman network &Jordan network

  • Recurrent Neural Networ會有不同的變形,我們剛才講的是Elman network。(如果我們今天把hidden layer的值存起來,在下一個時間點在讀出來)。還有另外一種叫做Jordan network,Jordan network存的是整個network output的值,它把output值在下一個時間點在讀進來(把output存到memory裡)。傳說Jordan network會得到好的performance。
  • Elman network是沒有target,很難控制說它能學到什麼hidden layer information(學到什麼放到memory裡),但是Jordan network是有target,今天我們比較很清楚我們放在memory裡是什麼樣的東西。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.2 Bidirectional neural network

  • Recurrent Neural Networ還可以是雙向,什麼意思呢?我們剛才Recurrent Neural Networ你input一個句子的話,它就是從句首一直讀到句尾。假設句子裡的每一個詞彙我們都有
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    表示它。他就是先讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    在讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    在讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。但是它的讀取方向也可以是反過來的,它可以先讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,再讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,再讀
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。你可以同時train一個正向的Recurrent Neural Network,又可以train一個逆向的Recurrent Neural Network,然後把這兩個Recurrent Neural Network的hidden layer拿出來,都接給一個output layer得到最後的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。是以你把正向的network在input
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的時候跟逆向的network在input
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    時,都丢到output layer産生
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,然後産生
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,以此類推。用Bidirectional neural network的好處是,neural在産生output的時候,它看的範圍是比較廣的。如果你隻有正向的network,再産生
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的時候,你的neural隻看過
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的input。但是我們今天是Bidirectional neural network,在産生
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的時候,你的network不隻是看過
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    所有的input,它也看了從句尾到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的input。那network就等于整個input的sequence。假設你今天考慮的是slot filling的話,你的network就等于看了整個sentence後,才決定每一個詞彙的slot應該是什麼。這樣會比看sentence的一半還要得到更好的performance。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.3 Long Short-term Memory(LSTM)

  • 那我們剛才講的memory是最單純的,我們可以随時把值存到memory去,也可以把值讀出來。但現在最常用的memory稱之為Long Short-term Memory(長時間的短期記憶),簡寫LSTM.這個Long Short-term Memor是比較複雜的。
  • 這個Long Short-term Memor是有三個gate,當外界某個neural的output想要被寫到memory cell裡面的時候,必須通過一個input Gate,那這個input Gate要被打開的時候,你才能把值寫到memory cell裡面去,如果把這個關起來的話,就沒有辦法把值寫進去。至于input Gate是打開還是關起來,這個是neural network自己學的(它可以自己學說,它什麼時候要把input Gate打開,什麼時候要把input Gate關起來)。那麼輸出的地方也有一個output Gate,這個output Gate會決定說,外界其他的neural可不可以從這個memory裡面把值讀出來(把output Gate關閉的時候是沒有辦法把值讀出來,output Gate打開的時候,才可以把值讀出來)。那跟input Gate一樣,output Gate什麼時候打開什麼時候關閉,network是自己學到的。那第三個gate叫做forget Gate,forget Gate決定說:什麼時候memory cell要把過去記得的東西忘掉。這個forget Gate什麼時候會把存在memory的值忘掉,什麼時候會把存在memory裡面的值繼續保留下來),這也是network自己學到的。
  • 那整個LSTM你可以看成,它有四個input 1個output,這四個input中,一個是想要被存在memory cell的值(但它不一定存的進去)還有操控input Gate的訊号,操控output Gate的訊号,操控forget Gate的訊号,有着四個input但它隻會得到一個output.
  • 冷知識:這個“-”應該在short-term中間,是長時間的短期記憶。想想我們之前看的Recurrent Neural Network,它的memory在每一個時間點都會被洗掉,隻要有新的input進來,每一個時間點都會把memory 洗掉,是以的short-term是非常short的,但如果是Long Short-term Memory,它記得會比較久一點(隻要forget Gate不要決定要忘記,它的值就會被存起來)。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 這個memory cell更仔細來看它的formulation,它長的像這樣。
  • 底下這個是外界傳入cell的input,還有input gate,forget gate,output gate。現在我們假設要被存到cell的input叫做z,操控input gate的信号叫做
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​(一個數值),所謂操控forget gate的信号叫做
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​,操控output gate叫做
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​,綜合這些東西會得到一個output 記為a。假設cell裡面有這四個輸入之前,它裡面已經存了值c。
  • 假設要輸入的部分為z,那三個gate分别是由
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​​,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​​,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    所操控的。那output a會長什麼樣子的呢。我們把z通過activation function得到g(z),那
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    通過另外一個activation function得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​​,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​​,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
     通過的activation function 通常我們會選擇sigmoid function),選擇sigmoid function的意義是它的值是介在0到1之間的。這個0到1之間的值代表了這個gate被打開的程度(如果這個f的output是1,表示為被打開的狀态,反之代表這個gate是關起來的)。
  • 那接下來,把g(z)g(z)乘以
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,對于forget gate的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​,也通過sigmoid的function得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 接下來把存到memory裡面的值c乘以
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,然後加起來​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,那麼c′就是重新存到memory裡面的值。是以根據目前的運算說,這個
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    cortrol這個​g(z),可不可以輸入一個關卡(假設輸入​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,那​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    就等于0,那就好像是沒有輸入一樣,如果
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    等于1就等于是把​g(z)當做輸入) 。那這個​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    決定說:我們要不要把存在memory的值洗掉假設​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    為1(forget gate 開啟的時候),這時候c會直接通過(就是說把之前的值還會記得)。如果​f(z_f)f(zf​)等于0(forget gate關閉的時候)​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    等于0。然後把這個兩個值加起來(​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    )寫到memory裡面得到c′。這個forget gate的開關是跟我們的直覺是相反的,那這個forget gate打開的時候代表的是記得,關閉的時候代表的是遺忘。那這個​c′通過h(c′),将​h(c′)乘以
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    得到​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    (output gate受​f(z_o)f(zo​)所操控,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    等于1的話,就說明​h(c′)能通過,​
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    等于0的話,說明memory裡面存在的值沒有辦法通過output gate被讀取出來)
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.3.1 LSTM舉例

  • 我們的network裡面隻有一個LSTM的cell,那我們的input都是三維的vector,output都是一維的output。那這三維的vector跟output還有memory的關系是這樣的。假設第二個dimension
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值是1時,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值就會被寫到memory裡,假設
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值是-1時,就會reset the memory,假設
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的值為1時,你才會把output打開才能看到輸出。
  • 假設我們原來存到memory裡面的值是0,當第二個dimension
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的值是1時,3會被存到memory裡面去。第四個dimension的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​等于,是以4會被存到memory裡面去,是以會得到7。第六個dimension的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​等于1,這時候7會被輸出。第七個dimension的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值為-1,memory裡面的值會被洗掉變為0。第八個dimension的
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值為1,是以把6存進去,因為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的值為1,是以把6輸出。

李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
2.4.3.2 LSTM運算舉例

  • 那我們就做一下實際的運算,這個是一個memory cell。這四個input scalar是這樣來的:input的三維vector乘以linear transform以後所得到的結果(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​乘以權重再加上bias),這些權重和bias是哪些值是通過train data用GD學到的。 假設我已經知道這些值是多少了,那用這樣的輸入會得到什麼樣的輸出。那我們就實際的運算一下。
  • 在實際運算之前,我們先根據它的input,參數分析下可能會得到的結果。底下這個外界傳入的cell,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​乘以1,其他的vector乘以0,是以就直接把
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​當做輸入。在input gate時,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​乘以100,bias乘以-10(假設
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​是沒有值的話,通常input gate是關閉的(bias等于-10)因為-10通過sigmoid函數之後會接近0,是以就代表是關閉的,若
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值大于1的話,結果會是一個正值,代表input gate會被打開) 。forget gate通常會被打開的,因為他的bias等于10(它平常會一直記得東西),隻有當
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​的值為一個很大的負值時,才會把forget gate關起來。output gate平常是被關閉的,因為bias是一個很大的負值,若
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​有一個很大的正值的話,壓過bias把output打開。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 接下來,我們實際的input一下看看。我們假設g和h都是linear(因為這樣計算會比較友善)。假設存到memory裡面的初始值是0,我們input第一個vector(3,1,0),input這邊3*1=3,這邊輸入的是的值為3。input gate這邊(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    )是被打開(input gate約等于1)。(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    )。forget gate(1∗100+10≈1)是被打開的(forget gate約等于1)。現在0 *1+3=3(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ),是以存到memory裡面的現在為3。output gate(-10)是被關起來的,是以3無關通過,是以輸出值為0。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 接下來input(4,1,0),傳入input的值為4,input gate會被打開,forget gate也會被打開,是以memory裡面存的值等于7(3+4=7),output gate仍然會被關閉的,是以7沒有辦法被輸出,是以整個memory的輸出為0。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

接下來input(2,0,0),傳入input的值為2,input gate關閉(\approx≈ 0),input被input gate給擋住了(0 *2=0),forget gate打開(10)。原來memory裡面的值還是7(1 *7+0=7).output gate仍然為0,是以沒有辦法輸出,是以整個output還是0。

李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 接下來input(1,0,1),傳入input的值為1,input gate是關閉的,forget gate是打開的,memory裡面存的值不變,output gate被打開,整個output為7(memory裡面存的7會被讀取出來)
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 最後input(3,-1,0),傳入input的值為3,input gate 關閉,forget gate關閉,memory裡面的值會被洗掉變為0,output gate關閉,是以整個output為0。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.3.3 LSTM原理

  • 我們可能會想這個跟我們的neural network有什麼樣的關系呢。你可以這樣想,在我們原來的neural network裡面,我們會有很多的neural,我們會把input乘以不同的weight當做不同neural的輸入,每一個neural都是一個function,輸入一個值然後輸出一個值。但是如果是LSTM的話,其實你隻要把LSTM那麼memory的cell想成是一個neuron就好了。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 是以我們今天要用一個LSTM的neuron,你做的事情其實就是原來簡單的neuron換成LSTM。現在的input(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​)會乘以不同的weight當做LSTM不同的輸入(假設我們這個hidden layer隻有兩個neuron,但實際上是有很多的neuron)。input(
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​)會乘以不同的weight會去操控output gate,乘以不同的weight操控input gate,乘以不同的weight當做底下的input,乘以不同的weight當做forget gate。第二個LSTM也是一樣的。是以LSTM是有四個input跟一個output,對于LSTM來說,這四個input是不一樣的。在原來的neural network裡是一個input一個output。在LSTM裡面它需要四個input,它才能産生一個output。
  • LSTM因為需要四個input,而且四個input都是不一樣,原來的一個neuron就隻有一個input和output,是以LSTM需要的參數量(假設你現在用的neural的數目跟LSTM是一樣的)是一般neural network的四倍。這個跟Recurrent Neural Network 的關系是什麼,這個看起來好像不一樣,是以我們要畫另外一張圖來表示。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 假設我們現在有一整排的neuron(LSTM),這些LSTM裡面的memory都存了一個值,把所有的值接起來就變成了vector,寫為
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    (一個值就代表一個dimension)。現在在時間點t,input一個vector
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,這個vector首先會乘上一matrix(一個linear transform變成一個vector z,z這個vector的dimension就代表了操控每一個LSTM的input(z這個dimension正好就是LSTM memory cell的數目)。z的第一維就丢給第一個cell(以此類推)
  • 這個x^txt會乘上另外的一個transform得到
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,然後這個
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的dimension也跟cell的數目一樣,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的每一個dimension都會去操控input gate(forget gate 跟output gate也都是一樣,這裡就不在贅述)。是以我們把
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    乘以四個不同的transform得到四個不同的vector,四個vector的dimension跟cell的數目一樣,這四個vector合起來就會去操控這些memory cell運作。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 一個memory cell就長這樣,現在input分别就是
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    (都是vector),丢到cell裡面的值其實是vector的一個dimension,因為每一個cell input的dimension都是不一樣的,是以每一個cell input的值都會是不一樣。是以cell是可以共同一起被運算的,怎麼共同一起被運算呢?我們說,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    通過activation function跟z相乘,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    通過activation function跟之前存在cell裡面的值相乘,然後将z跟
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    相乘的值加上
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    相乘的值,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    通過activation function的結果output,跟之前相加的結果再相乘,最後就得到了output
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 之前那個相加以後的結果就是memory裡面存放的值
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,這個process反複的進行,在下一個時間點input
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,把z跟input gate相乘,把forget gate跟存在memory裡面的值相乘,然後将前面兩個值再相加起來,在乘上output gate的值,然後得到下一個時間點的輸出
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 你可能認為說這很複雜了,但是這不是LSTM的最終形态,真正的LSTM,會把上一個時間的輸出接進來,當做下一個時間的input,也就說下一個時間點操控這些gate的值不是隻看那個時間點的input
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​,還看前一個時間點的output
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​。其實還不止這樣,還會加一個東西叫做“peephole”,這個peephole就是把存在memory cell裡面的值也拉過來。那操控LSTM四個gate的時候,你是同時考慮了
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,你把這三個vector并在一起乘上不同的transform得到四個不同的vector再去操控LSTM。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • LSTM通常不會隻有一層,若有五六層的話。大概是這個樣子。每一個第一次看這個的人,反映都會很難受。現在還是 quite standard now,當有一個人說我用RNN做了什麼,你不要去問他為什麼不用LSTM,因為他其實就是用了LSTM。現在當你說,你在做RNN的時候,其實你指的就用LSTM。Keras支援三種RNN:‘’LSTM‘’,“GRU”,"SimpleRNN"
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

2.4.4 GRU

  • GRU是LSTM稍微簡化的版本,它隻有兩個gate,雖然少了一個gate,但是performance跟LSTM差不多(少了1/3的參數,也是比較不容易overfitting)。如果你要用這堂課最開始講的那種RNN,你要說是simple RNN才行。

三、RNN怎麼學習?

3.1 RNN 怎麼學習?

  • 如果要做learning的話,你要定義一個cost function來evaluate你的model是好還是不好,選一個parameter要讓你的loss 最小。那在Recurrent Neural Network裡面,你會怎麼定義這個loss呢,下面我們先不寫算式,先直接舉個例子。
  • 假設我們現在做的事情是slot filling,那你會有train data,那這個train data是說:我給你一些sentence,你要給sentence一些label,告訴machine說第一個word它是屬于other slot,“Taipei是”Destination slot,"on"屬于other slot,“November”和“2nd”屬于time slot,然後接下來你希望說:你的cost咋樣定義呢。那“arrive”丢到Recurrent Neural Network的時候,Recurrent Neural Network會得到一個output 
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,接下來這個
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    會看它的reference vector算它的cross entropy。你會希望說,如果我們丢進去的是“arrive”,那他的reference vector應該對應到other slot的dimension(其他為0),這個reference vector的長度就是slot的數目(這樣四十個slot,reference vector的dimension就是40),那input的這個word對應到other slot的話,那對應到other slot dimension為1,其它為0。
  • 那現在把“Taipei”丢進去之後,因為“Taipei”屬于destination slot,就希望說把
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    丢進去的話,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    它要跟reference vector距離越近越好。那
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    的reference vector是對應到destination slot是1,其它為0。
  • 那這邊注意的事情就是,你在丢
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    之前,你一定要丢
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ​(在丢“Taipei”之前先把“arrive''丢進去),不然你就不知道存到memory裡面的值是多少。是以在做training的時候,你也不能夠把這些word打散來看,word sentence仍然要當做一個整體來看。把“on”丢進去,reference vector對應的other的dimension是1,其它是0.
  • RNN的損失函數output和reference vector的entropy的和就是要最小化的對象。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 有了這個loss function以後,對于training,也是用梯度下降來做。也就是說我們現在定義出了loss function(L),我要update這個neural network裡面的某個參數w,就是計算對w的偏微分,偏微分計算出來以後,就用GD的方法去update裡面的參數。在講feedforward neural network的時候,我們說GD用在feedforward neural network裡面你要用一個有效率的算法叫做Backpropagation。那Recurrent Neural Network裡面,為了要計算友善,是以也有開發一套算法是Backpropagation的進階版,叫做BPTT。它跟Backpropagation其實是很類似的,隻是Recurrent Neural Network它是在high sequence上運作,是以BPTT它要考慮時間上的information。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 不幸的是,RNN的training是比較困難的。一般而言,你在做training的時候,你會期待,你的learning curve是像藍色這條線,這邊的縱軸是total loss,橫軸是epoch的數目,你會希望說:随着epoch的數目越來越多,随着參數不斷的update,loss會慢慢的下降最後趨向收斂。但是不幸的是你在訓練Recurrent Neural Network的時候,你有時候會看到綠色這條線。如果你是第一次trai Recurrent Neural Network,你看到綠色這條learning curve非常劇烈的抖動,然後抖到某個地方,這時候你會有什麼想法,我相信你會:這程式有bug啊。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 分析了下RNN的性質,他發現說RNN的error surface是total loss的變化是非常陡峭的/崎岖的(error surface有一些地方非常的平坦,一些地方非常的陡峭,就像是懸崖峭壁一樣),縱軸是total loss,x和y軸代表是兩個參數。這樣會造成什麼樣的問題呢?假設你從橙色的點當做你的初始點,用GD開始調整你的參數(updata你的參數,可能會跳過一個懸崖,這時候你的loss會突然爆長,loss會非常上下劇烈的震蕩)。有時候你可能會遇到更慘的狀況,就是以正好你一腳踩到這個懸崖上,會發生這樣的事情,因為在懸崖上的gradient很大,之前的gradient會很小,是以你措手不及,因為之前gradient很小,是以你可能把learning rate調的比較大。很大的gradient乘上很大的learning rate結果參數就update很多,整個參數就飛出去了。
  • 用工程的思想來解決,這一招蠻關鍵的,在很長的一段時間,隻有他的code可以把RNN的model給train出來。
  • 這一招就是clipping(當gradient大于某一個threshold的時候,不要讓它超過那個threshold),當gradient大于15時,讓gradient等于15結束。因為gradient不會太大,是以你要做clipping的時候,就算是踩着這個懸崖上,也不飛出來,會飛到一個比較近的地方,這樣你還可以繼續做你得RNN的training。
  • 問題:為什麼RNN會有這種奇特的特性。有人會說,是不是來自sigmoid function,我們之前講過Relu activation function的時候,講過一個問題gradient vanish,這個問題是從sigmoid function來的,RNN會有很平滑的error surface是因為來自于gradient vanish,這問題我是不認同的。等一下來看這個問題是來自sigmoid function,你換成Relu去解決這個問題就不是這個問題了。跟大家講個秘密,一般在train neural network時,一般很少用Relu來當做activation function。為什麼呢?其實你把sigmoid function換成Relu,其實在RNN performance通常是比較差的。是以activation function并不是這裡的關鍵點。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 如果說我們今天講BPTT,你可能會從式子更直覺的看出為什麼會有這個問題。那今天我們沒有講BPTT。沒有關系,我們有更直覺的方法來知道一個gradient的大小。
  • 你把某一個參數做小小的變化,看它對network output的變化有多大,你就可以測出這個參數的gradient的大小。
  • 舉一個很簡單的例子,隻有一個neuron,這個neuron是linear。input沒有bias,input的weight是1,output的weight也是1,transition的weight是w。也就是說從memory接到neuron的input的weight是w。
  • 現在我假設給neural network的輸入是(1,0,0,0),那這個neural network的output會長什麼樣子呢?比如說,neural network在最後一個時間點(1000個output值是
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    )。
  • 現在假設w是我們要learn的參數,我們想要知道它的gradient,是以是知道當我們改變w的值時候,對neural的output有多大的影響。現在假設w=1,那現在
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,假設w=1.01,
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,這個就跟蝴蝶效應一樣,w有一點小小的變化,會對它的output影響是非常大的。是以w有很大的gradient。有很大的gradient也并沒有,我們把learning rate設小一點就好了。但我們把w設為0.99,那
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    ,那如果把w設為0.01,那
    李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
    。也就是說在1的這個地方有很大的gradient,但是在0.99這個地方就突然變得非常非常的小,這個時候你就需要一個很大的learning rate。設定learning rate很麻煩,你的error surface很崎岖,你的gardient是時大時小的,在非常小的區域内,gradient有很多的變化。從這個例子你可以看出來說,為什麼RNN會有問題,RNN training的問題其實來自它把同樣的東西在transition的時候反複使用。是以這個w隻要一有變化,它完全由可能沒有造成任何影響,一旦造成影響,影響都是天崩地裂的(是以gradient會很大,gradient會很小)。
  • 是以RNN不好訓練的原因不是來自activation function而是來自于它有high sequence同樣的weight在不同的時間點被反複的使用。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

3.2 如何解決RNN梯度消失或爆炸

  • 有什麼樣的技巧可以告訴我們可以解決這個問題呢?其實廣泛被使用的技巧就是LSTM,LSTM可以讓你的error surface不要那麼崎岖。它可以做到的事情是,它會把那些平坦的地方拿掉,解決gradient vanish的問題,不會解決gradient explode的問題。有些地方還是非常的崎岖的(有些地方仍然是變化非常劇烈的,但是不會有特别平坦的地方)。
  • 如果你要做LSTM時,大部分地方變化的很劇烈,是以當你做LSTM的時候,你可以放心的把你的learning rate設定的小一點,保證在learning rate很小的情況下進行訓練。
  • 那為什麼LSTM 可以解決梯度消失的問題呢,為什麼可以避免gradient特别小呢?RNN跟LSTM在面對memory的時候,它處理的操作其實是不一樣的。你想想看,在RNN裡面,在每一個時間點,memory裡面的值都是會被洗掉,在每一個時間點,neuron的output都要memory裡面去,是以在每一個時間點,memory裡面的值都是會被覆寫掉。但是在LSTM裡面不一樣,它是把原來memory裡面的值乘上一個值再把input的值加起來放到cell裡面。是以它的memory input是相加的。是以今天它和RNN不同的是,如果今天你的weight可以影響到memory裡面的值的話,一旦發生影響會永遠都存在。不像RNN在每個時間點的值都會被format掉,是以隻要這個影響被format掉它就消失了。但是在LSTM裡面,一旦對memory造成影響,那影響一直會被留着(除非forget gate要把memory的值洗掉),不然memory一旦有改變,隻會把新的東西加進來,不會把原來的值洗掉,是以它不會有gradient vanishing的問題
  • 那你想說們現在有forget gate可能會把memory的值洗掉。其實LSTM的第一個版本其實就是為了解決gradient vanishing的問題,是以它是沒有forget gate,forget gate是後來才加上去的。甚至,現在有個傳言是:你在訓練LSTM的時候,你要給forget gate特别大的bias,你要確定forget gate在多數的情況下都是開啟的,隻要少數的情況是關閉的
  • 那現在有另外一個版本用gate操控memory cell,叫做Gates Recurrent Unit(GRU),LSTM有三個Gate,而GRU有兩個gate,是以GRU需要的參數是比較少的。因為它需要的參數量比較少,是以它在training的時候是比較魯棒的。如果你今天在train LSTM,你覺得overfitting的情況很嚴重,你可以試下GRU。GRU的精神就是:舊的不去,新的不來。它會把input gate跟forget gate關聯起來,也就是說當input gate打開的時候,forget gate會自動的關閉(format存在memory裡面的值),當forget gate沒有要format裡面的值,input gate就會被關起來。也就是說你要把memory裡面的值清掉,才能把新的值放進來。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

3.3 其他方式

  • 其實還有其他的technique是來handle gradient vanishing的問題。比如說clockwise RNN或者說是Structurally Constrained Recurrent Network (SCRN)等等。
  • 有一個蠻有趣的paper是這樣的:一般的RNN用identity matrix(機關矩陣)來initialized transformation weight+ReLU activaton function它可以得到很好的performance。剛才不是說用ReLU的performance會比較呀,如果你說一般train的方法initiaed weight是random,那ReLU跟sigmoid function來比的話,sigmoid performance 會比較好。但是你今天用了identity matrix的話,這時候用ReLU performance會比較好。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

四、Attention-based Model

  • 現在除了RNN以外,還有另外一種有用到memory的network,叫做Attention-based Model,這個可以想成是RNN的進階的版本。
  • 那我們知道說,人的大腦有非常強的記憶力,是以你可以記得非常非常多的東西。比如說,你現在同時記得早餐吃了什麼,同時記得10年前夏天發生的事,同時記得在這幾門課中學到的東西。那當然有人問你說什麼是deep learning的時候,那你的腦中會去提取重要的information,然後再把這些information組織起來,産生答案。但是你的腦中會自動忽略那些無關的事情,比如說,10年前夏天發生的事情等等。
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 其實machine也可以做到類似的事情,machine也可以有很大的記憶的容量。它可以有很大的data base,在這個data base裡面,每一個vector就代表了某種information被存在machine的記憶裡面。
  • 當你輸入一個input的時候,這個input會被丢進一個中央處理器,這個中央處理器可能是一個DNN/RNN,那這個中央處理器會操控一個Reading Head Controller,這個Reading Head Controller會去決定這個reading head放的位置。machine再從這個reading head 的位置去讀取information,然後産生最後的output
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model
  • 這個model還有一個2.0的版本,它會去操控writing head controller。這個writing head controller會去決定writing head 放的位置。然後machine會去把它的information通過這個writing head寫進它的data base裡面。是以,它不僅有讀的功能,還可以discover出來的東西寫入它的memory裡面去。這個就是大名鼎鼎的Neural Turing Machine
李宏毅機器學習之RNN一、應用舉例二、什麼是RNN?三、RNN怎麼學習?四、Attention-based Model

繼續閱讀