寫在前面

這節課講的內容是RNN有關的知識內容,本來是直接要做assignment3的,後來看完英文介紹和我下下來的代碼發現就像是做完形填空一樣我要把代碼填入預先設置好的位置。一下子蒙圈了,這怎麼填???

問了同學後才知道,Syllabus都已經設計好了,先看講義和視頻,一點點公式啊什麼的都有講,再自己去寫。所以第一篇筆記我就要直接先學習一下RNN,不想直接從頭,這樣很打擊我的積極性,因為前面有很多知識點我其實已經很熟了。如果後期我還有時間的話,我想我會把前面的cs231n的課程的學習筆記寫下來的。

正文

從 "Vanilla" Neural Network 開始

Vanilla是一種feed-forward network,很簡單的,一個fixed structure 的input,然後經過幾個hidden就output,進過發展,有了更多的類型的rnn網路,用於更多的業務場景。

上面這張圖中的第二個 one to many 就是用來做 Image Captioning 的,這的其實就是我想要學的東西,因為我最近剛把show and tell 跑通,過個幾天想要參加下challenger.ai的image caption比賽,網上搜到mscoco在16年就做了英文的類似項目,第一名是google的show and tell。

除了one to many 還可以有 many to one 來做視頻裏的情感分類。可以是一段劇情的對話最後分析出是什麼樣的情感。

之前傳出一個消息,google的專業翻譯準確率高達百分之99,非常驚人的實力,其實用的也是RNN,泛化來講就是上面的這種多對多的方式。但是肯定不是Input和output的個數一樣多,很好理解。可以去看看google的論文關於seq2seq的。但其實下面有講seq2seq不是這麼簡單的處理方式,是有個encoder+decoder的方式,也就是many to one 然後 one to many。

每一幀的視頻分類,這個我接觸不多,不太瞭解具體用途。

總的來說,rnn可以分成這麼幾種用途,那麼下面就要開始講講詳細的rnn了。

從一個舊的狀態傳遞到一個新的狀態,我們需要有一個係數矩陣W,之前的狀態向量以及新的輸入向量,通過公式的計算得到新的狀態值。

從下面這個最簡單的vanilla network入手。

現在的f函數使用的是tanh,然後看公式的下角標也很清楚,因為是加了一個隱含層的關係,所以不同的係數矩陣看的也很明白。

然後隱含層可以不斷地增多,就變成了RNN,在初始化時,每一層的W矩陣都是一樣的,如下圖。

從上面的圖我們可以很自然的推出下面我們需要計算loss了,計算每個層的loss,最後都相加起來成為最終的loss。

然後就是提到了我之前有講的seq2seq模型,顯示encoder生成一個vector,然後這個vector放到後面的decoder去生成一個新的sequence,也就是別的語言。可以不是句子的層面,也可以是character的層面,也就是一個vector就代表了一個單詞,但這樣就不是seq2seq了。

下面就講講一個簡單的character層面的example。

我們的訓練數據就是簡單的四個字母 [h,e,l,o]

使用了一個隱含層的方式

最後計算出來的結果選擇下一個字母應該是什麼字母,可以看到h的預測就是錯的,其認為o的可能性更大。那麼接下來就是需要softmax的時候了,如果對softmax不瞭解的同學可以去看看ufldl的 Softmax回歸,這個簡單來講就是用於處理多分類問題。

下面的四張圖片是一個test-example,先給定第一個字母,通過這個字母不斷地生成下一個直到結束,不用去看數值,我聽了視頻後才知道,雖然h後面o的可能性大,但是這裡假設就是e,然後e輸入到第二個time-step。

上面的過程很好理解,接下來我們就要利用loss來backpropagation,修正整個網路,但是如果直接是全局在計算的話,會發現顯存或內存不夠,而且會計算的十分的久,因為訓練集是十分巨大的。那麼有什麼辦法呢?truncated,也就是分塊計算,因為我們的sequence輸入是有個時間順序的,假設我們設置一個chunk是100,那麼我們跑了100個字母,後計算這100個的backpropagation,然後再跑100,現在有了200了,但是我們計算的是後100的backpropagation,如此反覆。

後面的內容我發現不用講了,剩下就是介紹他們在不同數據集上的實驗,以及最後因為梯度爆炸和梯度消散談起了LSTM和GRU,這兩個神經元的設計我以後可能會寫文章來講,但不是現在。1997年就有的東西,在20年後的今天被大範圍廣泛利用了。

看完這麼多最主要的是學習一下 min-char-rnn.py點擊預覽 這個代碼,順便給大家安利一個詳解代碼的地址 karpathyblog

另外,更多文章請關注我的 segmentfault : jasperyang .

推薦閱讀:

相關文章