當我們在談論 Deep Learning:DNN 與它的參數們(壹)

本系列意在長期連載分享,內容上可能也會有所增刪改減;

因此如果轉載,請務必保留源地址,非常感謝!

知乎專欄:當我們在談論數據挖掘

引言

在上一篇文章中我們介紹了 DNN 的基本結構,以及使用 BP(Backpropagation)求解w, b的說明,並簡單介紹了在 DNN 中可以使用 Mini-batchGD(Stochastic Gradient Descent)來獲得更好的結果。這幾個方面算是 DNN 的基礎,也即較為固定的。同時,還有其他一些方面,隨著對 Deep Learning 認識、試錯的增加,有過一些改變或發展,而且以後可能還會繼續演進。接下來會從幾個方面進行具體介紹:ActivationFunction、Cost Function、Optimization、Dropout 等。

Activation Function

Sigmoid

最開始接觸 ANN 的時候,大家聽說的 Activation Function 應該還都是 Sigmoid 函數。它的定義如下:

f(x)=frac 1{1+e^{-x}}

其圖形如下

Sigmoid 函數優點很多:

  1. 作為 Activation Function,它是單調遞增的,能夠很好地描述被激活的程度

  2. Sigmoid 能將(-infty,+infty)轉換為(0,1),避免數據在傳遞過程中太過發散,同時輸出還能被理解成某種概率

  3. Sigmoid 在定義域內處處可導,而且導數很好算。f^{prime}(x)=f(x)(1-f(x)),圖形如下,可以看出f^{prime}(x)<1

但是,Sigmoid 的導數也帶來了一些問題。在上一部分我們介紹過如何通過 BP 來計算frac{partial C^r}{partial w^l_{ij}},如下

egin{align}& frac{partial C^r}{partial w^l_{ij}}=a^{l-1}_j delta^l_j \& delta^l=(W^{l+1})^Tdelta^{l+1}odot sigma^{prime}(z^l) \end{align}

假設sigma(z)為 Sigmoid 函數,有sigma^{prime}(z)<1。因此隨著l的減小,delta^l會越來越小,從而frac{partial C^r}{partial w^l_{ij}}也會越來越小。當 DNN 比較深的時,較前層的參數求出的梯度會非常小,幾乎不會再更新,這種現象被稱為 Gradient Vanish。

ReLU

為了緩解 Gradient Vanish 現象,現在大家都會使用 ReLU(Rectified Linear Unit),其定義如下

y=egin{cases}x,& 	ext{if $ xgeq  $0} \0,& 	ext{if $ x< $0}end{cases}

對應的圖形如下

ReLU 除了具有 Sigmoid 函數大部分的優點外,還有

  1. 對某個神經元,當x>0時,其導數為1,因而緩解了 Gradient Vanish 現象。因此,ReLU 也是最近幾年非常受歡迎的激活函數

  2. 對某個神經元,當x<0時,其輸出也是0,也就是對後續的網路不起作用,可以看作從網路中被移除了。因此在整個訓練過程結束後,整個網路會呈現出一種稀疏的狀態,也就是會有很多的神經元由於在網路中不起作用,可以當成不存在。這種稀疏也表明 ReLU 對避免網路過擬合有一定作用。

同時,ReLU 也有自己的缺陷:

  1. 可以看出當x<0時,不僅輸出為0,ReLU 的導數也為0。即對應的參數不再更新。因此這個神經元再也沒有被激活的機會了,這種現象被稱為 dying ReLU

  2. 第二個現象叫 Bias shift。在將數據輸入 DNN 時我們一般會進行高斯歸一,但是由於 ReLU 的輸出恆大於0,會導致後續層輸出的數據分布發生偏移。對於很深的網路,這可能會導致無法收斂。

LReLU、PReLU

為了解決 dying ReLU 的問題,有學者提出了 LReLU(Leaky Rectified Linear Unit)、PReLU(Prametric Rectified Linear Unit) 。它們被定義為

y_i=egin{cases}x_i & 	ext{if}(x_i>0) \a_ix_i & 	ext{if}(x_ile0)end{cases}

對應的圖形如下

LReLU 可以避免 dying ReLU,使神經元在任何輸入下都能持續更新參數。對於 LReLU,a_i是需要我們提前設定好的較小的數,比如0.01。但是,提前設定a_i也帶來了調參的難度。為了解決難以選擇合適參數的問題,出現了 PReLU。

PReLU 公式跟 LReLU 是一樣的,不同的是PReLU的a_i是通過訓練樣本自動學習的。學習的方式依然是 BP 演算法。但是,PReLU 在小數據下容易過擬合。具體的步驟可以參考"He, Kaiming, Zhang, Xiangyu, Ren, Shaoqing, and Sun, Jian. Delving deep into rectiers: Surpassing human-level performance on imagenet classication.2015."

RReLU

RReLU(Randomized Rectified Linear Unit)是 LReLU 的隨機版本。它最早出現在Kaggle NDSB比賽中,定義如下

y_{ji}=egin{cases} x_{ji}& 	ext{if}(x_{ji}>0)\ a_{ji}y_{ji}& 	ext{if}(x_{ji}le0) end{cases}

其中a_{ji} sim U(l,u),l<u;;and;;l,uin [0,1)

在訓練時,a_{ji}是一個保持在(l,u)內均勻分布的隨機變數,而在測試中被固定為frac{l+u}2。關於 RReLU 並沒有太多的文章,想進一步了解的話可以參考「Xu B, Wang N, Chen T, et al. Empirical Evaluation of Rectified Activations in Convolutional Network. 2015.」

Others

Activation Function 是一個比較發散的課題,在不同的任務中有不同的選擇,暫時先不做更多的介紹。其它的 Activation Function 比如 Maxou、ELU 等,有興趣的同學可以自己查找相關資料。

Cost Function

Softmax + Cross Entropy

在 DNN 中進行多類分類時,使用的最多的 Cost Function 就是 Cross Entropy Loss,這裡我們也主要介紹它。

首先,對於兩個分布p(x)q(x),交叉熵的定義為:

H(p,q)=-int p(x) log q(x) dx

交叉熵用于衡量兩個分布的相似性。當p(x)q(x)的分布完全一致時,H(p,q)最小。

對於分類問題,假設進行K類分類,我們將某個樣本x的真實的類別標記hat y用向量[hat y_1,...,hat y_k,...,hat y_K]描述,其中

hat y_k=egin{cases}1,& 	ext{if $ k=hat y$} \0,& 	ext{if $ k
e hat y$}end{cases}

於是,hat y_k可以被理解為x為第k類的概率。因此,DNN 的輸出y應該也是一個向量[y_1,...,y_k,...y_K],且需要與[hat y_1,...,hat y_k,...,hat y_K]儘可能的接近。為了描述這兩個分布的相似性,於是就引入了 Cross Entropy Loss,其定義如下:

C(y, hat y)=-sum^K_{k=1} hat y_klog(y_k)

對於兩類分類,hat yin{0,1}C(y, hat y)可以簡化為:

C(y, hat y)=-hat ylog(y)-(1-hat y)log(1-y)

還有一點需要注意,在上一章介紹DNN時,我們假設了 Output Layer 中從zy的變換是普通的 Activation Function,即sigma函數,如圖

但是在多類分類時,y_k表示的樣本屬於第k類的概率。此時將z_k轉換為y_k的操作即 Sotfmax,其公式如下

y_k=frac{e^{z_k}}{sum_{i=1}^{K} e^{z_i}}

用圖像來表述,如下

其實使用 Cross Entropy Loss 作為損失函數不是 DNN 的專屬,在「當我們在談論GBDT:Gradient Boosting 用於分類與回歸」中介紹過 GBDT 在進行多類分類的時候就是使用的 Softmax + Cross Entropy,只是當時它被稱為對數損失函數(Log-Likehood Loss)。有興趣的同學可以回去看看那個部分。

最後需要說明的是,當我們使用 MSE(均方誤差)作為 Cost Function ,會導致w,b的更新速度依賴於 Activation Function 的導數,在 Activation Function 為 Sigmoid 函數時很容易更新緩慢;而使用 Softmax + Cross Entropy Loss,能夠有效克服這個問題。這也是 Cross Entropy Loss 在分類問題中使用較多的原因之一。這裡先不展開介紹了,以後有機會再補充。

Regularization 與 Weight Decay

上面講完 Cost Function,按照套路,這個時候就要開始預防過擬合了,這裡我們再講一下 Regularization 相關。

Weight Decay

假設我們使用的是 L2 Regularization,則對應的公式如下:

Cprime(	heta)=C(	heta)+lambdafrac12||	heta||^2

其中,	heta={W^1,W^2... },即所有W的集合,注意這裡只考慮了W沒有考慮b(原因似乎是因為實驗表明b的約束對結果並沒有太大的提升,不過暫時還沒找到出處,以後看到再補充);||	heta||^2=sum_l (w^l_{ij})^2,即所有w的平方和;lambda用於控制 Regularization 的程度,也叫 Weight Decay,越大則模型越傾向於簡單。

在用 BP 更新參數時,有

frac{partial C^prime(	heta)}{partial w}=frac{partial C(	heta)}{partial w}+lambda w

於是在更新w時,更新式為

egin{align}w^{t+1} & = w^t-eta  frac{partial C^prime(	heta)}{partial w} \& = (1-etalambda)w^t-etafrac{partial C(	heta)}{partial w}\end{align}

可以看出,更新式比沒有 Weight Decay 多了(1-etalambda)這一項;且由於它小於1,w會在進行梯度下降的同時會被持續減小,這也是 Weight Decay 這個名稱的由來。

Regularization 的理解

既然談到了 Regularization,順帶談一個經常被提及的問題——Regularization 的解釋,即它到底是為什麼會帶來正則化的效果的。

第一種,是從 PRML 中看到的

對於 L1、L2 Regularization,他們的 Cost Function 分別可以寫作

egin{align}& min_w Loss(w)+lambda||w||_1 \& min_w Loss(w)+lambda||w||_2 \end{align}

於是,我們可以寫出它們的等價形式,如下

egin{align}& min_w Loss(w) s.t.||w||_1 le C \& min_w Loss(w) s.t.||w||_2 le C \end{align}

可以看出,我們其實是通過 L1 或 L2 約束將w限制在一個空間中,在此基礎上求出使 Cost Function 最小的w

假設現在考慮w有兩維,如下圖。其中黃色區域分別是 L2 和 L1 約束,藍色是 Cost Function 的等高線。藍色與紅色的切點即求出的w,可以看出對於 L1 約束,w更容易出現在坐標軸上,即只有一個維度上有非0值;而對於 L2 約束,則可能出現在象限的任何位置。這也是 L1 正則會帶來稀疏解的解釋之一。

第二種,是從概率的角度

假設給定觀察數據為D,貝葉斯方法通過最大化後驗概率估計參數w,即

egin{align}w^* & = argmax_wp(w|D) \& = argmax_wfrac{p(D|w)p(w)}{p(D)} \& =  argmax_wp(D|w)p(w) \& = argmax_w log(p(D|w))+log(p(w)) \& = argmin_w -log(p(D|w))-log(p(w)) \end{align}

其中,p(D|w)是似然函數,p(w)是參數的先驗。

w服從M維0均值高斯分布,即

p(w)=N(w|0,alpha^{-1}I)=(frac{alpha}{2pi})^{M/2}exp{-fracalpha2w^Tw}

代入上式,有

egin{align}w^* & = argmin_w -log(p(D|w))-log(p(w)) \& = argmin_w -log(p(D|w))+fracalpha2w^Tw+C(alpha) \end{align}

其中,第一項就是我們平時所定義的 Cost Function;第二項就是 L2 正則項;第三項當給定了alpha那麼就是常數了。所以我們可以看出, L2 正則本質其實是給模型參數w添加了一個協方差為alpha^{-1}I的零均值高斯分布先驗。而alpha越小,則協方差alpha^{-1}I越大,表明先驗對w的約束越弱,模型的 variance 越大;反之,而alpha越大,則協方差alpha^{-1}I越小,表明先驗對w的約束越強,模型越穩定。這與我們平時的理解是吻合的。

w服從M維0均值同分布 Laplace 分布時,即

p(w)=frac{1}{(2b)^M}exp{-frac{||w||_1}{b}}

代入上式,有

egin{align}w^* & = argmin_w -log(p(D|w))-log(p(w)) \& = argmin_w -log(p(D|w))+frac1b||w||_1+C(b) \end{align}

同樣,第一項就是我們平時所定義的 Cost Function;第二項就是 L1 正則項;第三項當給定了b那麼就是常數了。一維 Laplace 分布如下:

p(w)=frac1{2b}exp{-frac{w-mu}{b}}

其概率密度如下圖所示,可以看出它取值的特點是很大概率落在一個小範圍內。當mu=0時,它會以很大概率取值在0的附近,這也就是 L1 約束會出現稀疏解的原因。

尾巴

在梳理 DNN 相關知識時,感覺現階段 DNN 相關的信息有一些特點:首先是涉及到的知識很廣泛,卻都比較零碎;其次,DNN 中對於參數的解釋更多地需要意會,理論上能解釋的特別好的並不太多。這種特點某種程度上也體現在了這篇文章中,可能也會體現在整個 DNN 系列中。同時,由於事情較多,每日寫 BLOG 時間很有限,如果文章有什麼錯誤或者建議,也歡迎指出。

本系列其他文章:

Supervised Learning:

當我們在談論 Deep Learning:DNN 與 Backpropagation

當我們在談論 Deep Learning:DNN 與它的參數們(壹)

當我們在談論 Deep Learning:DNN 與它的參數們(貳)

當我們在談論 Deep Learning:DNN 與它的參數們(叄)

當我們在談論 Deep Learning:CNN 其常見架構(上)

Unsupervised Learning:

Reinforcement Learning:


推薦閱讀:

人工智慧進化史:從麥卡錫到「索菲亞」 | 精選
全球人工智慧初創公司25強
怎樣看待2017科大訊飛發布會展示的腦波控制技術?
AI研究院 | 人工智慧是如何通過演算法進行舞步設計的?
機器人能否把自己的電源拔掉?

TAG:深度学习DeepLearning | 优化 | 人工智能 |