深度學習各模組簡介及作用

2021-08-28 00:23:16 字數 3410 閱讀 3059

2、啟用函式

2.4 啟用函式使用總結

3、mask

4 softmax

參考文獻

1.1 簡介

batchnorm**參考**:ioffe s, szegedy c. batch normalization: accelerating deep network training by reducing internal covariate shift[j]. international conference on machine learning, 2015: 448-456.

作者認為:網路訓練過程中引數不斷改變導致後續每一層輸入的分布也發生變化,而學習的過程又要使每一層適應輸入的分布,因此我們不得不降低學習率、小心地初始化。作者將分布發生變化稱之為 internal covariate shift。

1.2 作用

而batchnorm是幹啥的呢?batchnorm就是在深度神經網路訓練過程中使得每一層神經網路的輸入保持相同分布的。在每個batch上將前一層的啟用值重新規範化,即使得其輸出資料的均值接近0,其標準差接近1。

訓練時,都是一批批的訓練資料,比如batch size=32,那一次輸入32個資料。這一資料可能滿足乙個分布a,如果a分布比較不規律,那分布a在通過啟用函式(非線性層)時,啟用的效果就不如我們期望。(神經網路就是通過特徵提取層(如conv)提取特徵再通過啟用函式選取特徵從而實現神經網路的函式表達力)

如圖:

對於一二兩種情況,要麼等於沒用啟用函式;要麼啟用作用得過多,一大批0傳到後面。當然,在不斷訓練的過程中,情況一二都會慢慢減少,因為特徵提取層越來越牛x。但這需要用更多訓練時間去填補,而且最終的效能不會很好,雖然是batch訓練,但它的視野沒到batch分布那個層面。視野太窄,也更容易過擬合。如果用其他啟用函式比如sigmoid/tanh等,還有梯度加速瀰散的問題存在。(自己可以畫圖看看,兩端抑制)

ok,我們想要的是上圖表示的第三種情況,啟用函式的修剪率適中。這就需要用到bn操作了。

使用batchnorm效果怎麼樣呢,非常好。經過這麼簡單的變換,不僅僅極大提公升了訓練速度,收斂過程大大加快,還提公升效果。

1.3 一般用法

fc + bn + relu (可以替代 fc + dropout + relu)

conv + bn + relu + maxpooling

2.1 簡介

啟用函式是指在網路中某一層的輸出位置加入乙個非線性函式,常用的啟用函式有sigmoid、relu、tanh等等。

2.2 作用

神經網路中啟用函式的主要作用是提供網路的非線性建模能力。假設乙個神經網路中僅包含線性卷積和全連線運算,那麼該網路僅能夠表達線性對映,即便增加網路的深度也依舊還是線性對映,難以有效建模實際環境中非線性分布的資料。加入(非線性)啟用函式之後,深度神經網路才具備了分層的非線性對映學習能力。

2.3 一般用法

2.3.1 sigmoid

sigmoid函式如下所示,有兩個缺陷:飽和性、非0均值。

飽和性是指函式的飽和區域梯度接近或等於0,訓練時梯度傳遞接近於0,梯度消失。

非0均值是指輸出不是0均值,稱為偏移現象,這將導致後一層的神經元將上一層輸出的非0均值的訊號作為輸入。關於原點對稱的輸入和中心對稱的輸出,網路會收斂地更好。

tanh函式如下圖說是,克服了sigmoid非0均值的缺點,但是飽和問題依然存在。

relu函式如下圖所示。從圖中可以看到,當x<0時,出現硬飽和,當x>0時,不存在飽和問題。因此,relu 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。然而,隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新,這種現象被稱為「神經元死亡」。

leaky-relu與p-relu函式在一定程度上解決了神經元死亡的問題。

elu函式在解決神經元死亡的基礎上將均值歸0。

2.4 啟用函式使用總結

use relu. be careful with your learning rates

try out leaky relu / elu

try out tanh but don』t expect much

don』t use sigmoid

3.1 簡介

眾所周知,lstm的一大優勢就是其能夠處理變長序列。而在使用keras搭建模型時,如果直接使用lstm層作為網路輸入的第一層,需要指定輸入的大小。如果需要使用變長序列,那麼,只需要在lstm層前加乙個masking層,或者embedding層即可。

from keras.layers import masking, embedding

from keras.layers import lstm

model = sequential(

) model.add(masking(mask_value=-1

,input_shape=

(sequencelength,23*

3,))

) model.add(lstm(

100, dropout_w=

0.2, dropout_u=

0.2, input_shape=

(sequencelength,23*

3,))

)

使用方法:首先將序列轉換為定長序列,如,選取乙個序列最大長度,不足這個長度的序列補-1。然後在masking層中mask_value中指定過濾字元。如上**所示,序列中補的-1全部被過濾掉。

此外,embedding層也有過濾的功能,但與masking層不同的是,它只能過濾0,不能指定其他字元,並且因為是embedding層,它會將序列對映到乙個固定維度的空間中。因此,如果訴求僅僅是讓keras中lstm能夠處理變長序列,使用masking層會比使用embedding層更加適合。

4.1 k.softmax

def

softmax

(x, axis=-1

):y = np.exp(x - np.

max(x, axis, keepdims=

true))

return y / np.

sum(y, axis, keepdims=

true

)

4.2 layer.softmax
[1]

深度學習簡介

一 概念 1.是機器學習研究中的乙個新的領域,其動機在於建立,模擬人腦進行分析學習的神經網路,它模擬人腦的機制進行解釋資料,學習方法也分為監督學習和非監督學習兩種方式。2.深度學習成功的條件 大資料 大規模計算能力 複雜模型 高效演算法 二 適於解決的問題的特徵 1.深度不足會出現問題 2.人腦具有...

深度學習簡介

一 人工智慧 機器學習與深度學習 1.定義 2.傳統機器學習和深度學習流程對比 3.人工智慧 機器學習以及深度學習之間的關係 二 深度學習的應用 1.計算機視覺 影象識別 2.語音識別 3.自然語言處理 nlp 4.人機博弈 三 深度學習工具介紹和對比 一 人工智慧 機器學習與深度學習 1.定義 業...

深度學習簡介

深度學習是指多層神經網路上運用各種機器學習演算法解決影象 文字等各種問題的演算法集合。深度學習從大類上可以歸入神經網路,不過在具體實現上有許多變化。深度學習的核心是特徵學習,旨在通過分層網路獲取分層次的特徵資訊,從而解決以往需要人工設計特徵的重要難題。深度學習是乙個框架,包含多個重要演算法 conv...