【週末AI課堂】SELU和ResNet(理論篇) | 機器學習你會遇到的
AI課堂開講,就差你了!
很多人說,看了再多的文章,可是沒有人手把手地教授,還是很難真正地入門AI。為了將AI知識體系以最簡單的方式呈現給你,從這個星期開始,芯君邀請AI專業人士開設“週末學習課堂”——每週就AI學習中的一個重點問題進行深度分析,課程會分為理論篇和程式碼篇,理論與實操,一個都不能少!
來,退出讓你廢寢忘食的遊戲頁面,取消只有胡吃海塞的週末聚會吧。未來你與同齡人的差異,也許就從每週末的這堂AI課開啟了!
讀芯術讀者交流群,請加小編微訊號:zhizhizhuji。等你。後臺回覆“週末AI課堂”,查閱相關原始碼。
全文共1762字,預計學習時長3分鐘
對神經網路的深度加深是最有效的提升效能的辦法,同時網路越深,梯度消失和梯度爆炸的問題,會給優化帶來極大的困難。我們前面介紹了加強優化的幾種通用技術:
1、隱藏單元。最明顯的改變來自於sigmoid改為ReLU。
2、優化演算法。從簡單的SGD到動量演算法,再到RMSProp和Adam。
3、輸出單元。最明顯的改變是分類中MSE改為交叉熵,一種來自於極大似然估計的做法。
4、BatchNormalization.削弱層與層之間協調更新的問題。
在幾乎任何深度學習的任務中,我們都會用到以上幾種方法。我們已經在實踐中看到了這些有助於我們訓練更好的引數但是我們接下來的課程可能會涉及到比較深的網路,還有兩種技術是非常值得介紹的:
1、一種叫做SELU的隱藏單元,它可以構建出一個自歸一化的神經網路(Self-Normalizing Neural Networks),在很多實踐中證明,這樣的網路更容易優化(Klambauer ,2017)。
2、另一種是著名的ResNet(Kaiming He,2015 ),它採用了跨層的連線,這種highway network的思想並不是由ResNet首創,但是ResNet中恆等連線使得梯度更快更好地到達之前highway network無法有效到達的層。目前在很深的網路中,ResNet提出殘差模組幾乎是必須存在的。
在這裡,我們以理論和實踐相結合的方式來介紹這兩種“神奇”的技術。
自歸一化神經網路:SELU
我們在《常見隱藏單元》中提到過ELU隱藏單元,它具有軟飽和和輸出均值為零的特性:
而所謂的SELU似乎也很簡單,它將這個式子變為了:
乘以,則是將在
時原本為1的梯度稍微變大了一點點,其中有兩個關鍵點:
1、權重係數服從均值為零,方差為的高斯分佈。
2、引數和
(保留兩位小數)。
其中第一點是第二點的前提,不使用啟用函式就可以推出來,而第二點的證明太過冗餘,此處不做詳解。回憶一下,我們在對每一層做Batch Normalization,目的就是希望讓每一層的輸出都是一個均值為零,方差為1的正態分佈。那麼SELU作為啟用函式,就是希望能將通過啟用函式來直接得到均值為0,方差為1的正態分佈。
根據中心極限定理,我們假設輸入變數X服從均值為0,方差為1的高斯分佈,即:
那麼在進入啟用函式之前,就有:
我們希望,那麼就有:
從這裡看出,依據我們對輸入均值為零的假設,無論怎樣,z的均值總是零的,但我們為順利推匯出方差的關係,最好也將權值的均值也設為零。
同時我們希望,那麼就有:
這個二階項可以拆成兩部分來計算,因為它只包含了權重與輸入的平方項和交叉項:
所以上述一項可以被寫為:
此時我們再推導,就利用了權值均值為零的條件,使得我們可以簡單的將其看作對權值平方求平均的結果,就是我們的方差,所以我們就得到了
我們就得到了第一個對權值的要求。在具體的實踐中,這一點往往不太好保證,但是我們可以將權值的初始化服從該分佈。
越來越深的利器:ResNet
實踐中發現,網路層數的增加會使得效能不佳,這當然不是深度模型的容量不夠或者產生了過擬合,而是因為深層模型更難訓練。一般來說,我們在BP演算法中可以看到,隨著網路層數的增加,淺層的梯度計算鏈也會變的越來越長。即便引入了Batch Normalization,也只是削弱層與層的依賴性,更有利於優化。
如圖,在CIFAR-10上的資料集上,左圖代表著訓練誤差,右圖代表著測試誤差,我們可以發現,更深的網路並不會帶來更好的效能,反而比淺層的網路還要弱。
我們可以假設,如果深層網路相比於淺層的網路多出的層,並沒有執行學習任務,而是隻是將淺層所得到的表示,複製到下一層。在反向傳播時,我們對這些只執行復制任務的層不進行更新,訓練完成之後,我們將這些層再加進去。
表面看起來,這是個深層網路,實際上卻等價於一個淺層網路。這個假設有什麼用嗎?ResNet中所新增的恆等對映本質上也是添加了一個跨層的複製操作:
圖中展示了ResNet的基本結構,直觀看來,如果這一層本來學得的特徵分佈為F(x),我們只是將某一層的輸入x跨層與F(x)相加,那麼就有最後學得的特徵分佈H(x)=F(x)+x。
F(x)的引數更新依賴於H(x)-x,如果殘差為零,說明H(x)=x,那麼只是簡單跨層的複製操作,至少不會使得深度網路比淺層網路更差。
我們仍然採用簡化版的神經網路來分析梯度,可見有2層,每一層都只有一個神經元,沒有閾值,並且不使用啟用函式,同時在第3層新增恆等對映,那麼就有輸出:
那麼對於第三層的反向傳播,權值引數、的更新會給出:
如圖,我們在執行反向傳播的過程中,假設每流經一層,梯度流都需要乘以0.1,意味著在訓練中會產生梯度消失,但是在流經恆等對映塊的時候,梯度保持不變,在最後相加的時候,就仍然能享有較大的梯度。
留言 點贊 發個朋友圈
我們一起分享AI學習與發展的乾貨
作者:唐僧不用海飛絲