基於keras的深度學習(1)(轉)

學習網址:

http://www.jianshu.com/p/64172378a178

小結:

1.softmax

softmax一般作爲神經網絡最後一層,作爲輸出層進行多分類,Softmax的輸出的每個值都是>=0,並且其總和爲1,所以可以認爲其爲概率分佈。

softmax 示意圖

softmax示意圖

softmax 輸出層示意圖

 

 

2.損失函數

交叉熵(cross-entropy)就是神經網絡中常用的損失函數。對於預測值Yi和真實值Y' ,兩者的乘積越大,coss-entropy越小。

 

 

3.梯度下降

如果對於所有的權重和所有的偏置計算交叉熵的偏導數(如何計算呢?),就得到一個對於給定圖像、標籤和當前權重和偏置的「梯度」(圖像、標籤和偏置在圖上什麼地方呢?),如圖所示:

我們希望損失函數最小,也就是需要到達交叉熵最小的凹點的低部(極值位置)。在上圖中,交叉熵被表示爲一個具有兩個權重的函數。而學習速率,即在梯度下降中的步伐大小。

4.激活函數

激活函數(activation function)可以使得模型加入非線性因素的。

解決非線性問題有兩個辦法:線性變換、引入非線性函數。

(1)原本一個線性不可分的模型如:X^2 + Y^2 = 1,將座標軸進行高維變換,橫座標變成X^2,縱座標變成 Y^2,這是表達式變爲了 X + Y = 1,這樣,原來的非線性問題,就變成了一個線性可分的問題,變成了一個簡單的一元一次方程了。

                          

(2)引入非線性函數

異或是一種基於二進制的位運算,用符號XOR 表示(Python中的異或操作符爲 ^ ),其運算法則是對運算符兩側數的每一個二進制位,同值取0,異值取1。

爲了解決問題,我們來構建一個兩層的神經網絡,該神經網絡有兩個激活函數,F(x,y)和 H(x,y), 具體如下圖所示:

F(x,y)爲一個閾值爲1的閾值函數:

if AX+BY > 1:
    F = 1
else:
    F = 0

H(x,y)爲一個閾值爲0的閾值函數:

if AX+BY > 0:
    H = 1
else:
    H = 0

- 對於(1,1)的點,第二層從左到右隱藏層的值分別爲(1,1,1),最後輸出爲(1,1,1)*(1,-2,1)=0;

    - 對於(0,0)的點,第二層從左到右隱藏層的值分別爲(0,0,0),最後輸出爲(0,0,0)*(1,-2,1)=0;

    - 對於(1,0)的點,第二層從左到右隱藏層的值分別爲(1,0,0),最後輸出爲(1,0,0)*(1,-2,1)= 1;

    - 對於(0,1)的點,第二層從左到右隱藏層的值分別爲(0,0,1),最後輸出爲(0,0,1)*(1,-2,1)= 1;

5.sigmoid
sigmoid是一個用來做二分類的"S"形邏輯迴歸曲線。
sigmod有個缺點,sigmoid函數反向傳播時,很容易就會出現梯度消失,在接近飽和區的時候,導數趨向0,會變得非常緩慢。因此,在優化器選擇時選用Adam優化器。
6. ReLu

ReLu來自於對人腦神經細胞工作時的稀疏性的研究,在 Lennie,P.(2003)提出人腦神經元有95%-99%是閒置的,而更少工作的神經元意味着更小的計算複雜度,更不容易過擬合

 

ReLU在訓練時是非常脆弱的,並且可能會“死”。例如,經過ReLU神經元的一個大梯度可能導致權重更新後該神經元接收到任何數據點都不會再激活。如果發生這種情況,之後通過該單位點的梯度將永遠是零。也就是說,ReLU可能會在訓練過程中不可逆地死亡,並且破壞數據流形。如果學習率太高,大部分網絡將會“死亡”(即,在整個訓練過程中神經元都沒有激活)。而設置一個適當的學習率,可以在一定程度上避免這一問題。

 

7.Dropout

隨着迭代次數的增加,我們可以發現測試數據的loss值和訓練數據的loss存在着巨大的差距, 隨着迭代次數增加,train loss 越來越好,但test loss 的結果確越來越差,test loss 和 train loss 差距越來越大,模型開始過擬合

Dropout是指對於神經網絡單元按照一定的概率將其暫時從網絡中丟棄,從而解決過擬合問題。

 

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