RNN_一隻小白的觀察記錄

人工智能大火的當下,隨便搜一搜RNN,文章就一堆,很多講理論的,也有很多附上代碼的。不過咱看了理論後自己寫不出代碼,看人家的代碼也總是掌握不到要點。自己真正用到的時候還是懵。
那麼,本文就記錄一下我這個小白的學習思路吧。

什麼是rnn?

你以爲我要列出公式推導或者原理圖了嗎?不不不,我只會放鏈接:
原理性介紹https://blog.csdn.net/zhaojc1995/article/details/80572098

其實關於理論和代碼網上可以找到很多很多了。因此就引用一下大佬的文章。接下來我就談談自己對RNN的理解:(個人理解,如有不同見解歡迎討論!)
1)本質上來講,
RNN是一種計算方法,
是一個值到另一個值的映射,
是一個複雜的函數。
2)RNN的所謂“記憶”,其實可以理解爲前面的輸入信息會影響到下一次的計算
3)RNN的介紹中很多“長期記憶”“短期記憶”“遺忘”等詞彙的使用只是數學計算公式效果的一種形象化表示。不要因此覺得RNN有多麼的智能和類人。

下面這張圖是從這個博客裏截的

其實呢,從數學角度上看,就是一個向量x經過線性變換得到了h然後h經過非線性變換得到了o,然後o和y比較得到了L。
1)x經過線性變換得到了h h=Ux + Wh‘(用到線性代數知識,U,W是矩陣,是可以反向更新的參數;h’是上一時刻的h值)
2)非線性變換有很多種啦,關鍵在於“非線性”。如,tanh()函數
3)o就是預測值,y是實際值
4)L 即loss反映了預測值和實際值的差距,也是有很多數學公式可以實現,如,Cross-entropy loss,softmax-cross-entropy-loss 等,(其實你用 L = o-y 得到L也算是一種方法,就是這種方法太直接,不太好用罷了。在具體運用時也要根據不同情況來選擇不同的損失函數。)

那麼RNN“引以爲傲”的“記憶”體現在哪裏呢?
就是圖中的那個紅圈圈住的循環。

簡單來說就是:在計算h時要用到前一時刻的h值和當前的x輸入。這不就是考慮到了原來的輸入了嗎,考慮到了原來的輸入,上一時刻的輸入對本次輸入有影響,這不就是“記憶”的體現嗎。所以,還是說,形象化的表達在提升了科學技術親民性的同時,也爲科技蒙上了一層玄幻的面紗。其實放平心態慢慢探索就好。
在這裏插入圖片描述

RNN代碼實例

簡單的代碼實現(MNIST數據集識別):https://luanshiyinyang.github.io/pytorch/2019/04/21/RNN/

在運行過程中如果遇到錯誤:
在這裏插入圖片描述就把num_workers=4改成num_workers=0就好,涉及到’進程‘的知識,我想以後慢慢研究,要是有了解具體原因的小夥伴期待告知~

其實要是想從頭實現RNN是挺困難的,因爲涉及到很多公式的推導,把這些公式,更新過程改成代碼也不容易不是。現在又很多神經網絡的構架,如pytorch,tensorflow,kares等等。就是已經把函數寫好了,只需要調用,配置參數就可以實現RNN。

我們要了解rnn的原理,以及常見的網絡結構,對參數的配置就會很清楚了。
下面的代碼是pytorch下的結構設置

class RNN(nn.Module):
    def __init__(self):
        super(RNN, self).__init__()

        self.rnn = nn.LSTM(  # 這裏使用LSTM(長短時記憶單元)
            input_size=28,  # 圖片的行數據
            hidden_size=64,  # 隱層單元數目
            num_layers=1,  # 這樣的層數目
            batch_first=True,  # batch_size是否爲第一個維度如(batch_size, time_step, input_size)
        )
        self.output = nn.Linear(64, 10)  # 這裏使用全連接輸出
        #原文鏈接:https://luanshiyinyang.github.io/pytorch/2019/04/21/RNN/

這裏輸入和輸出這兩個參數都明白是怎麼回事了,batch_first也可以查到

關於num_layer我的困惑比較大,什麼是RNN的層數呢?
是這樣的,在上面的圖中,x經過線性變換得到了h,h非線性變換得到了o,這樣的只是一層的結構,如果我得到o之後再把o當成輸入,輸入到同樣的構架中呢?這就多了一層了。這就是RNN的層數概念。(詳情參見下面兩篇文章)
https://www.cnblogs.com/curtisxiao/p/10830369.html
http://www.pianshen.com/article/4068257457/
下面的圖片引用自:[http://www.pianshen.com/article/4068257457/]這篇文章就說明了RNN層數的問題。(http://www.pianshen.com/article/4068257457/)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章