(Tensorflow之四)激活函數、交叉熵及優化器

一、激活函數

激活函數的主要作用是提供網絡的非線性建模能力。如果沒有激活函數,那麼該網絡僅能夠表達線性映射,此時即便有再多的隱藏層,其整個網絡跟單層神經網絡也是等價的。因此也可以認爲,只有加入了激活函數之後,深度神經網絡才具備了分層的非線性映射學習能力。 那麼激活函數應該具有什麼樣的性質呢?

可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
單調性: 當激活函數是單調的時候,單層網絡能夠保證是凸函數。

1.1 sigmoid函數

f(x)=11+ex

激活函數
標準的sigmoid函數取值範圍在(0,1)之間,即將x映射在(0,1)之間分佈。在實際運用中,可調整輸出值分佈的區間,如下公式所示:
f(x)=A1+ex

則其分佈區間在:(0,A)之間;

1.2 softmax函數

將N維的向量值[X1,X2,,XN] 映射至0~1區間[Y1,Y2,..,YN] ,其中Y1+Y2++YN=1 ; 映射方法如下公式如示;

yi=eain1eaj

爲什麼要採用這麼複雜的公式,不直接用如下線性的映射方法呢?
yi=ain1aj

主要的原因是在深度學習時,大多采用反向傳播的方法,此時需要Loss函數N階可導,ex 導數是直自身,求導較爲簡便,同時ex 也是單調遞增函數也能反應出向量中元素xi 的概率值。
注意:softmax只是一種映射的方法,其本身並不是Loss函數

二、交叉熵

交叉熵可理解爲衡量預測概率P與直接概率q之間距離的一種方法,公式如下:
例如,對於3維數組的概率p爲[0.5,0.3,0,2],而真實分佈概率q爲[0.3,0.2,0.5],那麼p之間的距離是多少呢?我們不能通過簡單的加減法得到,而交叉熵函數則提供了一種計算方法,計算如下:
H(p,q) = -(0.5*log0.3+0.3*log0.2+0.1*log0.5)
若另有3維數組的概率p1爲[0.3,0.2,0.5],那麼其交叉熵爲
H(p,q) = -(0.3*log0.3+0.2*log0.2+0.5*log0.5)
在深度學習中,可以將交叉熵作爲Loss函數,目標減少p與q之間的距離;

三、優化器

3.1 梯度下降法GradientDescentOptimizer

原理:若函數f(x,y,z)可導,則(αf/αx0, αf/αy0, αf/αz0)爲函數在點(x0,y0,z0)中變化最快的方向。
對於深度學習,往往是求Loss函數是最小值,即函數f(x,y,z)的極小值點。在一定的區間內,越接近極值點時,梯度值越小,變化越慢,而越遠離極值點時,變化越快,從而可以實現Loss函數有方向的收斂。
這裏寫圖片描述

3.2 AdagradOptimizer

原理:基於梯度下降法,對梯度值的選取進行了優化。優法方法如下:

Δθ=Rt1i=1g2i+ϵgt

式中:
Δθ 爲每次優化的調整量;
R 爲設定的全局學習速率;
ϵ 爲防止爲零時的常量;
gt 爲求得的梯度值;
gi 爲前n次求得的梯度值;
由此公式可知:
Δθ 的變化受限於之前所有的梯度值。前期時,Δθ 較大,而後期Δθ 越來越小,該變化規律與深度學習的變化規律是一致的;
優點:若前期Δθ 較小時,可以通過學習率方大梯度,加速收斂;而後期Δθ 若較大,會因累積使之趨於穩定;
缺點:容易陷於局部最優,後期Δθ 因累積趨於零,提前結束學習;

3.3 MomentumOptimizerOptimizer

原理:基於梯度下降法,對於梯度值進行優化,優化方法如下:

Δθt=Υtg0+Υt1g1+Υt2g2+...+Υ0gn

式中:
Υ 爲衝量的衰減程度;
g0 爲每輪求得的梯度值;
t 爲迭代的輪數;
衝量優化法會累積之前所有梯度值,根據衰減程序疊加入優化的步長Δθ 中,使得梯度值不會產生較大的振盪;
普通方法
衝量法

3.4 AdamOptimizer

原理:基於梯度下降法,對於梯度值進行優化,優化方法類似矩估計法:

mt=μmt1+(1μ)gt

nt=νnt1+(1ν)g2t

mt=mt1μt

nt=nt1νt

Υ=mtnt+ϵgt

mtnt 類似對梯度的一階與二階進行矩估計,從而對調整梯度值。這麼調整有啥好處??還得研究一下吧。。

3.5 RMSPropOptimizer

原理:同樣,也是基於梯度法,優化了梯度值
求梯度的平均和

E|g2|t=ρE|g2|t1+(1ρ)g2t

再求隨機均根
RMS|g2|t=E|g2|t+ϵ

將RMS均根做爲學習率的約束
Δθ=ηRMS|g2|tgt

3.6 優化器的總結

上述的總總優化器,最基本的方法基實就是採用梯度法,其他的優化器都是對梯度法的調整步長進行改進。至於改進的效果怎麼樣,具體問題具體分析。

4 學習率

在Tensorflow中,所有的優化器,都需設定學習率。學習率並非是多高深的東西,其實就是對所求得的梯度值進行權重的調整。
例:設梯度向量法所求得的梯度值爲gt ,其調整步長:

Δθ=Rategt

學習率就是上述的Rate 值,學習率越大,則單次調整步長越大,可以會導致函數振盪而無法收斂;而學習率過小的話,調整步長太長,收斂速率慢,需更多的訓練次數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章