這本書已經讀了好幾章,突然覺得有必要在閱讀的過程中做一些筆記或記錄一些問題什麼的,故現在有了此篇文章。
14.迴圈遞迴rnn,序列建模套路深
問題:(1)rnn中的「深度」與傳統的深度神經網路裡的「深度」有何不同?
答:rnn中的深度主要是指時間和空間(如網路中的隱含層個數)特性上的深度。
(2)rnn為什麼會有梯度瀰散或梯度**的問題?
答:如果用到sigmoid啟用函式(末尾推薦的兩個回答是基於tanh啟用函式),則它會將+∞~-∞之間的輸入壓縮到0~1之間,當input的值更新時,output會有很小的更新。又因為上一層的輸出將作為後一層的輸入,而輸出經過sigmoid後更新速率會逐步衰減,直到輸出層只會有微乎其微的更新。從數學的角度出發,可知sigmoid導數在0的位置取最大值1/4。當使用均值為0,方差為1的高斯分布及初始化引數w,有|w|<1. 隨網路層數加深,w的變化幅度會呈1/4的指數衰減,使得最後學不到東西,造成梯度瀰散。同樣,當|w|>1,w變化幅度會指數遞增,最後造成梯度**。
【另外,推薦知乎高讚回答(rnn梯度消失與梯度**的原因:和)】
(3)梯度瀰散或**問題在一定程度上阻礙了rnn的進一步發展,有什麼策略可以在一定程度上抑制這個問題嗎?
答:下圖展示了rnn網路損失函式對權重和偏置的關係:
上圖中存在乙個非常陡峭的面,在更新引數的過程中,如果當前引數所處的位置剛好位於這個高高的「誤差牆」上,由於這個面上的梯度非常大,那麼採用梯度下降法更新後的引數可能就跑得很遠,如圖中藍色的實線所示。因此,為了解決這個問題,gradient clipping演算法為梯度的範數設定了乙個閾值,當梯度的範數大於某個值的時候,將梯度設定為這個閾值,演算法描述如下:
但是這個方法只能夠解決梯度**的問題,要解決梯度瀰散的問題,可以從下面兩點入手:
除此之外,還可以更改內部結構來解決梯度消失和梯度**問題,那就是lstm,請見下回分解!
(4)除了梯度瀰散或**問題,rnn還存在什麼問題?如何解決?
答:(5)你能將rnn**正弦序列的實現範例用eager執行模式進行改寫嗎?
深度學習 讀書筆記(不斷更新)
0.機器學習常用的模型 例如,線性模型 邏輯回歸 softmax 神經網路 深度學習 svm 決策樹 隨機森林 gbdt 矩陣分解。1.神經網路 在乙個資料集上訓練成型的深度神經網路,在另外乙個完全不同的資料集上只需稍加訓練,就有可能 適應和完成那個新的任務。遷移學習 transfer learni...
架構之美讀書筆記
架構是乙個過程,而非乙個結果 藝術是不可能被生產出來的,生產出來的,叫藝術品 常見的架構技術 分層,元件化 服務化 標準化 快取 分離 佇列 複製 冗餘 好的架構致力於消除各種重複性 讓它盡可能簡單,但不要過於簡單 只有變化是永恆不變的 架構是一種這種,決定改進其中乙個特徵常常會對其他特徵產生負面影...
架構之美讀書筆記
架構是乙個過程,而非乙個結果 藝術是不可能被生產出來的,生產出來的,叫藝術品 常見的架構技術 分層,元件化 服務化 標準化 快取 分離 佇列 複製 冗餘 好的架構致力於消除各種重複性 讓它盡可能簡單,但不要過於簡單 只有變化是永恆不變的 架構是一種這種,決定改進其中乙個特徵常常會對其他特徵產生負面影...