【深度學習】補完計劃 和 Q&A

深度學習算法補完計劃和Q&A

不知不覺,自己入坑都快兩年了,從當初的caffe到PyTorch,感嘆世界變得也太快了八,手頭上的項目也快差不多結束,是時候該收拾一下,向下個一個階段邁進了。但是,起航前還是要準備一下的,把走過的坑再好好填一填,把以前的筆記也搬到小破站上面,回顧一下常見的一些疑問。


各種各樣的RNN

RNN
本質是像人一樣擁有記憶的能力網絡,一個單元結構重複使用,就像一個腦子可以一直在用哈哈哈。輸出就依賴於當前的輸入和記憶。

  • RNN的改進1—雙向RNN:把兩個預測的結果進行合併

LSTM(Long Short-Term Memory)長短期記憶網絡
LSTM是解決循環神經網絡RNN結構中存在的“梯度消失”問題而提出的,是一種特殊的循環神經網絡,能夠利用上下文的信息。在LSTM中,第一階段是遺忘門,遺忘層決定哪些信息需要從細胞狀態中被遺忘,下一階段是輸入門,輸入門確定哪些新信息能夠被存放到細胞狀態中,最後一個階段是輸出門,輸出門確定輸出什麼值。
三個輸入:RNN的輸入C,新增輸出H,新息輸入x,兩個輸出:RNN的輸出C
在這裏插入圖片描述

  • 遺忘門:以上一層的輸出H和本層要輸入的序列數據作爲輸入,通過一個激活函數sigmoid,得到融合了的輸入與上一部分的RNN的輸出C(t-1的狀態)相乘,實現遺忘。
  • 輸入門:以上一層的輸出H和本層要輸入的序列數據作爲輸入,後續包含兩個部分,第一部分使用sigmoid激活函數,這一部分可以當成是一個注意力的打分小模塊,第二部分使用tanh激活函數,這一部分可視爲真正的輸入,然後這兩部分進行點成,實現對新息打分這一功能。然後與遺忘門的輸入相加,得到第一個輸出C。
  • 輸出門:將輸入門的輸出先經過一個tanh激活函數,同時上一層的輸出H和本層要輸入的序列數據作爲輸入的部分也經過sigmoid激活函數,然後兩者相乘,完成新的打分,也得到了最後的新增輸出H。
  • 總結:雙重打分,同時保證信息的最大化利用。

雙向LSTM
雙向RNN由兩個普通的RNN所組成,一個正向的RNN,利用過去的信息,一個逆序的RNN,利用未來的信息,這樣在時刻t,既能夠使用t-1時刻的信息,又能夠利用到t+1時刻的信息。一般來說,由於雙向LSTM能夠同時利用過去時刻和未來時刻的信息,會比單向LSTM最終的預測更加準確。下圖爲雙向LSTM的結構。

GRU(Gated Recurrent Unit)
GRU包括兩個門,一個重置門和更新門。這兩個門的激活函數爲sigmoid函數,在[0,1]區間取值。
兩個輸入:新增輸出H,新息輸入x,一個輸出:RNN的輸出C
在這裏插入圖片描述

  • 更新門: 上一層的輸出和當前的數據作concatate一起通過一個sigmoid函數得到0到1的結果,其決定了上一個隱藏狀態有多少信息被保留下來,且新的內容有多少需要被添加進memory裏(被記憶)。
  • 重置門: 重置門的主要作用就是過去的多少信息需要被遺忘,操作也是上一層的輸出和當前的數據作concatate一起通過一個sigmoid函數得到0到1的結果,但是兩個門的訓練的權重是不一樣的。
  • 最後輸出:重置門通過重置 ,也就是有多少信息需要被遺忘,然後與當前數據一起送到tanh函數裏得到新的記憶內容。最後將更新門的權重賦予新的記憶內容,相應的1-w權重給予上一層的輸出,合在一起作爲輸出。
  • 總結:雙重打分,用伯努利分佈對新息和舊息做最後打分。

各種各樣的CNN

3D_CNN: 可以提高時空特徵的利用率,對於視頻序列這樣的數據,可以達到加強前後幀聯繫的作用。


各種各樣的Block

  • residual bottleneck(殘差網絡的瓶頸層):主要目的是爲了減少參數的數量,從而減少計算量,且在降維之後可以更加有效、直觀地進行數據的訓練和特徵提取(個人理解低維度的特徵包含更多的重要信息)。右圖是實際計算中使用到的結構,參數數量爲(核的大小 x 輸入通道數 x 輸出通道數)1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積,參數數目: 3x3x256x256x2 = 1179648,差了16.94倍。 。在這裏插入圖片描述
  • ShuffleNet:在瓶頸層中間多了一個通道的shuffle層,在分類當中有提升。
    在這裏插入圖片描述
  • densenet:前n層所有的結果進行concat,然後再進行非線性轉換。 爲了保證feature
    map的channel不會太大,而且size要保持統一才能concat,將上述作爲一個dense
    block,每個block之間通過池化層相連。在這裏插入圖片描述

學習率

是指導我們該如何通過損失函數的梯度調整網絡權重的超參數。學習率越低,損失函數的變化速度就越慢。雖然使用低學習率可以確保我們不會錯過任何局部極小值,但也意味着我們將花費更長的時間來進行收斂,特別是在被困在高原區域的情況下。

優化算法

推薦閱讀傳送門

Normalization方法

Batch Normalization(BN,2015年)、Layer Normalization(LN,2016年)、Instance Normalization(IN,2017年)、Group Normalization(GN,2018年)。它們都是從激活函數的輸入來考慮、做文章的,以不同的方式對激活函數的輸入進行 Norm 的。傳送門

  1. BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。BN適用於固定深度的前向神經網絡,如CNN,不適用於RNN。(抓住BN作者的啓發點,白化)傳送門來解釋
  2. LN在通道方向上,對C、H、W歸一化,主要對RNN效果明顯;
  3. IN在圖像像素上,對H、W做歸一化,用在風格化遷移;
  4. GN將channel分組,然後再做歸一化(G/C)。
    在這裏插入圖片描述

Skill for Network_train

  • 損失函數:計算的是一個樣本的誤差
    代價函數:是整個訓練集上所有樣本誤差的平均
    目標函數:代價函數 + 正則化項

  • 梯度裁剪: 一般用於解決 梯度爆炸(gradient explosion) 問題。具體的操作就是把較大的梯度投影到較小的範圍上,把所有梯度接成一個向量g,設置閾值參數,使得投影后較小得新向量不會超過這個閾值限定的範圍。當梯度小於/大於閾值時,更新的梯度爲閾值。
    在這裏插入圖片描述
    梯度爆炸問題在訓練 RNN 過程中出現得尤爲頻繁,所以訓練 RNN 基本都需要帶上這個參數(在RNN中,相同的權重參數 W 會在各個時間步複用,最終 W 的梯度 g = g1 + g2 + … + gT,即各個時間步的梯度之和,即梯度往往不會消失,而在不加入梯度剪裁的情況下往往會存在梯度爆炸的;而反過來說消失問題可以通過 gradient scaling 來解決,沒人這麼做的原因是這麼做太麻煩了,而且我們現在已經有了更好的方案(自適應學習率、LSTM/GRU)。)

  • one-hot 獨熱編碼 又稱爲一位有效編碼,主要是採用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候只有一位有效。 One-Hot編碼是分類變量作爲二進制向量的表示。這首先要求將分類值映射到整數值。然後,每個整數值被表示爲二進制向量,除了整數的索引之外,它都是零值,它被標記爲1。
    作用: 在迴歸,分類,聚類等機器學習算法中,特徵之間距離的計算或相似度的計算是非常重要的,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算餘弦相似性,基於的就是歐式空間。而我們使用one-hot編碼,將離散特徵的取值擴展到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點。比如使用這樣的特徵進行描述:[“足球”,“籃球”,“羽毛球”,“乒乓球”],就可以對其使用獨熱編碼:足球 => 1000 | 籃球 => 0100 | 羽毛球 => 0010 | 乒乓球 => 0001
    不使用的情況: 將離散型特徵進行one-hot編碼的作用,是爲了讓距離計算更合理,但如果特徵是離散的,並且不用one-hot編碼就可以很合理的計算出距離,那麼就沒必要進行one-hot編碼。比如,該離散特徵共有1000個取值,我們分成兩組,分別是400和600,兩個小組之間的距離有合適的定義,組內的距離也有合適的定義,那就沒必要用one-hot 編碼。


神經網絡——Train

隨機種子 https://blog.csdn.net/weixin_41013470/article/details/82956178

各種各樣的損失函數

  • 交叉熵損失函數(給予懲罰性,最終使得判斷的概率趨向1)
    https://blog.csdn.net/red_stone1/article/details/80735068
  • 迴歸損失函數 https://www.jiqizhixin.com/articles/2018-06-21-3

優化器(Optimizer)
優化器詳解:https://blog.csdn.net/weixin_41417982/article/details/81561210
優化器是爲了使得分批訓練的速度加快的同時,使得模型可以達到穩定,loss趨向真正的最小值,而不是陷於鞍點。
優化器對比 https://www.cnblogs.com/guoyaohua/p/8542554.html

  • 循環學習率:設置最小最大的學習值 https://blog.csdn.net/weixin_43896398/article/details/84762886
    cycle: 學習率從下界學習率(base_lr)到上界學習率(max_lr)再到下界學習率(base_lr),所經歷的迭代次數iterations。
    stepsize: cycle迭代次數的一半。

權重初始化
因爲訓練網絡是一個要找到全局最優解的過程,好比你在山上不同的位置下山,如果你把所有權重設置爲一樣的數,每個單元得到的信號等於輸入(和輸出)之和激活函數(sum(inputs))),就是好比你身處一個平地上,漫無目的地尋找那個最低的地方,很難也很久都找不到那個最優解。不同的初始化函數對於不同的模型有不同的效果,這個需要結合具體的模型和初始化函數來說。

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