1. 程式人生 > >第十二週學習筆記

第十二週學習筆記

第十二週學習筆記

第六章 深度前饋網路

主要內容

1.特徵選擇

可以通過特徵選擇將性模型到擴充套件為非線性模型,特徵選擇是一個非線性對映,有多種方式來選擇這個非線性對映 ϕ \phi

  • 核函式
  • 專家手動設計
  • 學習 ϕ \phi
    (深度學習策略)
    • 缺點 放棄了問題的凸性。
    • 優點 通過廣泛的函式族 ϕ ( x ; θ )
      \phi(x;\theta)
      ,可以使其獲得第一種方法的優點——高度通用,通過限制函式族,可以融入專家的先驗知識,同時,只需要選擇函式族,而不必精確設定函式(特徵工程)。

2.XOR

線性模型無法解決亦或問題,因為在二維平面上的二進位制點是非線性可分的

3.損失函式

大多數情況中的損失函式就是定義了分佈 p (

y x ; θ ) p(y|x;\theta) ,損失函式為負對數似然(交叉熵)
J ( θ ) = E x , y p ^ d a t a l o g p m o d e l ( y x ) J(\theta)=-E_{x,y\sim \hat{p}_{data}}log p_{model}(y|x)

當最小化這個損失函式時,等價於最小化KL散度,因為交叉熵
H ( P , Q ) = E x P l o g Q ( x ) = H ( P ) + D K L ( P Q ) H(P,Q)=-E_{x\sim P}logQ(x)=H(P)+D_{KL}(P||Q)

二式對應可知, P P 是資料的分佈,是未知的,我們僅僅通過取樣來近似得到這個分佈, Q Q 是模型擬合的分佈, H ( P ) H(P) 在取樣完成後就固定了,與模型引數的選擇無關,故在梯度方法中可以省略,因此最小化交叉熵等價於最小化KL散度,同時,此時我們傾向於選擇給定x,當Q大時也大的P。

4.隱藏單元

  • 整流線性單元
    g ( z ) = m a x { 0 , z } g(z)=max\{0,z\}
    初始化時,往往將偏置項初始化為小的正值,使得初始狀態下大多數輸入被啟用,允許導數通過
  • logistic sigmoid與雙曲正切函式
    sigmoid在大部分定義域中都飽和,當飽和時,學習就變得十分困難,這是因為此時sigmoid的梯度接近於0,因此最後的梯度會很小
    雙曲正切函式通常比sigmoid函式更好

5.萬能近似定理

萬能近似定理表明,一個前饋神經網路如果具有線性輸出層和至少一層具有任何一種“擠壓”性質的啟用函式的隱藏層,只要給予網路足夠數量的隱藏單元,它可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的Borel可測函式。但並沒有說明如何找到這個網路

6.反向傳播(Back propagation)

計算圖能精確地描述反向傳播演算法。
反向傳播演算法的演算法一般包括兩種:

  • 符號到數值微分(Torch and Caffe):微分返回在輸入值處的一組梯度值
  • 符號到符號微分(Theano TensorFlow):新增額外的節點,提供導數的符號描述

反向傳播演算法本身並不需要知道任何微分法則,它只需要使用正確的引數呼叫每個操作的bprop方法即可。

動態規劃:在反向傳播演算法中,計算梯度會反覆計算很多相同的表示式,因此可以採用一個表格記錄中間結果。

值得注意的地方

1.sigmoid實現

在實現過程中,儘量將損失函式寫作 z = θ x + b z=\theta x+b 的函式,不要寫成 σ ( z ) \sigma(z) 的函式,因為指數和對數的運算可能導致數值問題。

2.softmax實現

過度引數化的softmax更加容易

3.更深的和更廣闊的模型

更深的模型往往表現更好,這不僅僅是因為模型更大,這可能導致學習由更簡單的表示所組成的表示,或者學習具有依賴步驟的程式。

4.定義梯度和自動求導

自動求導演算法中,需要人為定義一些基本運算的導數,然後按照求導法則將複雜計算圖的求導化歸成這些基本操作的組合,因此,演算法本身不需要知道微分的法則,只需要知道基本的運算的微分結果即可。
對於一些結果簡單,過程複雜的求導步驟,比如softmax的求導,直接定義導數比演算法逐步求導要快很多。

5.前饋神經網路效能提升的原因

  • 大資料
  • 高效能運算機
  • 交叉熵替代均方差
  • 分段線性整流單元替代Sigmoid

第七章 深度學習中的正則化

主要內容

1.正則化

正則化定義為“對學習演算法的修改——旨在減少泛化誤差而不是訓練誤差”,在學習模型上新增額外的約束和懲罰,它們可以是

  • 編碼特定的先驗知識
  • 偏好簡單的模型

2.引數範數懲罰

通常只對權重做懲罰而不對偏置做懲罰,對偏置的正則化可能導致明顯的欠擬合

  • L2引數正則化,使權重更加接近原點
  • L1引數正則化,可以匯出稀疏的特徵,因此被廣泛用於特徵選擇

3.資料集增強

平移、旋轉、縮放都是有效的資料集增強方法。

4.噪聲魯棒性

有些情況中,向輸入新增方差極小的噪聲等價於對權重加上範數懲罰,同時推動模型進入對權重小的變化相對不敏感的區域。

5.提前終止

提前終止,可能是深度學習中最常用的正則化形式,主要是因為

  • 簡單性,幾乎不影響原訓練過程
  • 有效性,能顯著減少測試誤差
  • 節約計算資源
    提前終止某種程度上將引數限制在了初始點的附近,防止引數搜尋空間過大導致的過擬合現象。

6.模型平均

模型平均是通過幾個模型降低泛化誤差的技術,主要思想是分別訓練幾個不同的模型,然後讓所有模型表決測試樣例的輸出,整合至少與它的任何成員表現得一樣好。

7.Dropout

在一種近似下,Dropout可以被認為是整合大量深層神經網路的實用Bagging方法,Dropout提供了一種廉價的Bagging整合近似。Dropout在抑制不同神經元時,類似於訓練不同的分類器,最終得到的結果就近似於各種不同分類器的近似整合。但是,Dropout與Bagging又有不一樣,在Bagging情況下,所有模型都是獨立的,但在Dropout下所有模型共享引數。在Bagging下,所有模型被訓練到收斂,但在Dropout下,只訓練一小部分子網路。
Dropout的優點:

  • 計算方便
  • 不限制適用的模型或訓練過程

但是Dropout減少了模型的有效容量,因此需要增大模型規模
重要的觀點:Dropout是一種共享隱藏單元的整合模型。

深度模型中的優化

主要內容

1.學習和純優化的不同

ERM和代理損失函式

所有學習模型的目標是最小化

J ( θ ) = E ( x , y ) p d a t a L ( f ( x ; θ ) , y ) J^{\star}(\theta)=E_{(x,y)\sim p_{data}}L(f(x;\theta),y)

其中, L L 是一個樣本的誤差函式, f f 是學習的模型。
但通常無法知道 p d a t a p_{data} ,因此,只能最小化經驗風險

J ( θ ) = E ( x , y ) p ^ d a t a L ( f ( x ; θ ) , y ) J^{\star}(\theta)=E_{(x,y)\sim \hat{p}_{data}}L(f(x;\theta),y)

這被稱為經驗風險最小化(Empirical risk minimization)ERM但這有很高的過擬合風險,高容量的模型會簡單地記住訓練集

當關心的損失函式無法被高效優化時,我們會優化代理損失函式,有時優化代理損失函式能給我們更好的模型。

批量演算法和小批量演算法

批量演算法更新一次的代價很大,而且大部分樣本對更新的方向貢獻是相似的,因此可以使用小批量演算法替代批量演算法,小批量的樣本個數通常設定為2的冪數,為了與硬體的結構適配。
小批量應當是隨機抽取的,以保證樣本間的獨立性而產生導數的無偏估計,避免自然排列的樣本前後直接的相關性。有趣的是,當模型遍歷一遍樣本後,第二次遍歷時,結果將會是有偏的。

2.神經網路優化中的挑戰

區域性極值與不可辨識性

神經網路的代價函式中可能存在很多區域性極小值點,切神經網路模型是不可辨識的,因為任意交換同層的兩個隱層節點可以得到相同的模型。然而,神經網路的區域性極小點很多時候是一個可以接受的解。

梯度法與牛頓法

高緯非凸函式中,鞍點遠多於區域性極值,梯度法的目標是向下坡移動,而牛頓法的目標是找到梯度為零的點,實驗中梯度下降可以在許多情況下逃離鞍點,而牛頓法可能跳入一個鞍點,這可能解釋了神經網路訓練中為什麼二階方法無法取代梯度下降的原因。

懸崖和梯度爆炸

損失函式在懸崖處會出現大梯度從而大大增加引數的更新步伐,但需要記住的是梯度僅提供了更新的最佳方向而非步長,梯度截斷可以幫助解決此時更新步伐過大的問題。

梯度消失和梯度爆炸

深層的計算圖中,涉及大量連續的矩陣乘法,可能導致梯度消失和爆炸的問題。

良好的初始解

訓練時間往往與引數到區域性極值的路徑長度決定,一個好的初始解是十分重要的。

3.基本演算法

隨機梯度下降

沿著隨機挑選的小批量資料的梯度下降方向,在實踐中有必要使用逐漸降低的學習率,如線性衰減學習率

ϵ k = ( 1 α ) ϵ 0 + α ϵ τ \epsilon_k=(1-\alpha)\epsilon_0+\alpha\epsilon_{\tau}

其中 α = k τ \alpha=\frac{k}{\tau} ,在 τ \tau 步迭代之後,保持 τ \tau 為常數。

經驗上, ϵ τ \epsilon_\tau 設定為 ϵ 0 \epsilon_0 的1%, τ \tau 被設定為幾百次,可以檢測前幾輪迭代,從中選擇更大的學習率。

動量

動量旨在加速學習,處理高曲率、小但一致的梯度,或帶噪聲的梯度,積累之前梯度的指數級衰減的移動平均,並繼續沿著該方向移動。其更新準則是

v α v ϵ θ ( 1 m i = 1 m L ( f ( x ( i ) ; θ ) , y ( i ) ) ) v\leftarrow\alpha v - \epsilon\nabla_{\theta}\left( \dfrac{1}{m}\sum_{i=1}^m{L(f(x^{(i)};\theta),y^{(i)})} \right)\\

θ θ + v \theta\leftarrow\theta+v

實踐時候, α \alpha 通常設定為0.5,0.9和0.99。
物理上理解,將梯度理解為力,引數更新的步長理解為速度,之前的梯度不斷給粒子力使得更新的梯度在各次更新一致的方向上的速度(梯度)越來越大,而由於噪聲導致的其他方向的力由於相互抵消而消失,最後使得粒子向著正確的梯度方向大幅前進!

4.引數初始化策略

深度學習演算法通常是迭代的,而且初始點能夠決定演算法是否收斂。
初始化時需要破壞引數的對稱性
引數初始化的優化觀點和正則化觀點:

  • 優化觀點:初始化越大越好,從而能傳播資訊
  • 正則化觀點:初始化越小越好,從而引入引數為0的先驗,即單元之間不互動比互動更可能的先驗,從而在訓練過程中,表現出強烈互動願望的權值才會更突出。

如果計算資源允許,將每層權重的初始值範圍設為超引