速記AI課程-深度學習入門(二)

高智敏
7 min readMar 17, 2018

--

Recurrent Neural Network、Application、Generative Adversarial Network

Recurrent Neural Network

前面介紹了最簡單的類神經網路, 前饋類神經網路( Feedforward Neural Networks,以下簡稱FNN),每一層計算完成的輸出,只會單方向往前傳遞給下一層的輸入,也就是說輸入與輸出是獨立沒有關係的。而更進階的變化之一,就是遞歸神經網路(Recurrent Neural Network,以下簡稱RNN)。RNN與FNN之差異在於,RNN可以將某層計算完成的輸出,再回傳給該層自己作為輸入。如下圖所示,藍色圓圈即為輸出,其同時也在下一個時間點(不是另一個隱藏層)成為自己的輸入之一。因此也有人說RNN具有記憶!

RNN動畫(From DL4J

那為什麼需要RNN呢?因為許多的應用場景,是有序列概念(Sequences)的,如文字(下一個字的機率會取決與上一個字是什麼)、影片(可視為圖片之序列)、聲音等。因此,要訓練RNN,就需要有序列型的資料,以下圖來看,比對FNN的輸入,RNN的輸入為每個時序中各變數的值。

FNN與RNN所需資料的差異(From DL4J

假設我們想訓練一個Model,可以在我們輸入一串文字時,就正確預測該字串每個字母的下一個字母會是什麼。以下圖來說,當我們輸入「h」時,會知道要輸出「e」;輸入到「he」時,輸出「l」;輸入到「hel」時,輸出「l」等,以此類推(假設訓練資料集只有「hello」這個字串)。假設一開始訓練時,輸入「h」得到「e」的機率只有2.2,並非最高,那麼就持續調整權重,直到「e」的機率最高。

RNN實例

既然前面(指時序上較早)輸出可以影響後面輸入,那麼後面的輸出可否也回過頭來影響前面?答案是可以的,也就是雙向遞歸神經網路(Bidirectional RNN)。

「Bidirectional RNN」的圖片搜尋結果
Bidirectional RNN示意圖

不過,RNN有一個缺點,就是越前面的資訊對於後面的決策影響越小,當所經過的時序越多,前面的資訊影響幾乎趨近於零(可以想像成金魚腦)。既然是金魚腦,這時候就需要長短期記憶(Long Short Term Memory,以下簡稱LSTM)這個名詞上有點弔詭的網路了!

LSTM導入了三個控制記憶的機制,分別是Input Gate、Output Gate與Forget Gate。這三個閘門的開與關變化也變成了變數之一,由機器透過資料自己學習要開還是關,由此決定哪些資訊是重點、哪些是雜訊。

LSTM的三大閘門

RNN還有一個缺點…(真是不少)就是輸出的長度等於輸入的長度。這在翻譯的應用上會很困擾,比如說輸入機器學習四個字,RNN就會吐出四個英文字,而不是正確的Machine Learning。這時就需要序列到序列(Sequence-to-sequence,以下簡稱Seq2Seq)了,它的輸出與輸入長度可以不同。

相關圖片

Seq2Seq透過Encoder與Decoder兩個RNN組成,以翻譯為例,Encoder負責閱讀與了解某語言文字,Decoder負責生成另一種語言的文字。Decoder會把自己的輸出再次當作輸入,所以才能產生出與Encoder長度不同的文字,但是一直這樣下去Decoder會沒有個盡頭,因此需要一個終止信號告訴Decoder「玩夠了可以停了」。

Google翻譯即是使用Seq2Seq的概念。

Application

講完抽象的理論,李舉了三種類型的應用,分別是機器如何看、聽與讀。

看的部分,除了傳統的物件辨識(Object Recognition,這張圖片是貓還是狗),現在比較流行的是為圖片加上標題(Image Caption),一樣透過CNN輸入圖片,輸出為標題,結果如下圖範例。

Image Caption

圖片看得懂,那麼更進階就可以看下面影片中某位女性正在炸魚。

即使懂了,還是覺得好科幻…

李提到了增強式學習(Reinforcement Learning,以下簡稱RL)。機器在一個環境中可以選擇執行幾個動作,不同的動作會影響這個還境,結果(獎勵或懲罰)會回饋給機器,機器會一直往結果好的地方持續校正。就如電影明日邊界一樣( Edge of Tomorrow),外星人死掉後會保持記憶,不再掉入人類設下的陷阱,而且死亡後可以一直重生…

以下就是利用RL訓練電腦玩打磚塊遊戲的實際畫面。

語音部分,聲音每0.1秒的取樣都是一個輸入,這樣的輸出不一定要一對一,如「好棒棒」可能有100個聲波輸入,但輸出只有三個字,因此可以用到前面所提到的Seq2Seq。

雖然微軟宣稱其語音辨識技術已達人類水準,不過在辨識沒有聽過的語者狀況下,其錯誤率約10%,仍高於人類的5.9%,且尚未考量所謂環境噪音。

李也提到了一個趣聞,Google小姐遇到特定字的發音會破音…

最後一個應用是讀文章。機器可以透過大量的閱讀,再把文字用向量表示(Word2Vector)後,就可以知道向量越接近的詞越有關係,甚至可以推論。比如說爬了大量ptt的文章,可以發現「好棒棒」跟「不就好棒棒」、「 好清高」等詞意比較接近;魯蛇之於窮,就像溫拿之於有錢。

而聊天機器人目前也是熱門的應用,但目前幾乎都是手寫規則,好的聊天機器人應該是有Free Style才對!

Generative Adversarial Network

這個縮寫為GAN唸起來有點尷尬的生成對抗網路(Generative Adversarial Network),其重點為讓一個稱為Generator之網路先產生一個結果,再讓Discriminator評斷好不好,如果不好則重新再來,直到Discriminator滿意。

尷尬的GAN

最常用的例子就是偽鈔辨識。Generator沒看過鈔票,所以就隨便偽造了一張品質粗糙的假鈔。Discriminator因為看過真鈔,所以就告訴它這個鈔票很假,中間連個人像都沒有。Generator知道以後,下次偽造時就會放個人像在中間,Discriminator又會再繼續挑剔細節…直到沒有意見為止。

好好笑的假鈔

因此,GAN可以說讓機器自己創造!像是低解析度照片的銳利化、自己擔任動漫畫家、產生某種畫家風格的照片、自己為新聞摘要出重點、甚至讓歐巴馬說出他從沒說過的話!

非常恐怖的技術

--

--