深度學習Bible學習筆記:第六章 深度前饋網絡

第四章 數值計算(numerical calculation)和第五章 機器學習基礎下去本身看。算法

 

1、深度前饋網絡(Deep Feedfarward Network,DFN)概要:網絡

DFN:深度前饋網絡,或前饋神經網絡(FFN)/多層感知機(MLP)架構

目標:近似模擬某函數f  y=f(x;θ)機器學習

  學習參數θ的值,獲得最佳的函數近似。函數

  注:並不是完美模擬大腦,只是實現統計泛化,函數近似機。源於大腦,但遠遠比不上大腦工具

結構:  f(x)=f(3)(f(2)(f(1)(x)))性能

  前饋(feedforward):信息一直往下流動,一路向前,不回頭。例如:CNN學習

  反饋(feedbackward):前饋的擴展,增長反饋鏈接,走一段,回頭看看。例如:RCNN測試

線性模型:優化

  優勢:簡單快速,線性迴歸和邏輯迴歸(廣義線性迴歸)

  侷限性:受限於線性函數,沒法表示任意變量間的相互做用

非線性模型(擴展):

  套上一層皮:非線性變換

如何選擇非線性變換?映射φ

  (1)找通用函數:高維,過擬合。

    只要函數維度足夠高,總能擬合訓練集,然而,測試集泛化不佳

    非通用函數基於局部光滑原則

  (2)人工設計函數:主流,極度依賴專家+領域,難以遷移

  (3)自動學習函數:一箭雙鵰

    同時學習函數參數+權重參數

    惟一放棄凸性的方法,利大於弊

    通用:只須要一個普遍的函數族,不用太精確

    可控:專家知識輔助泛化,只須要找函數族φ(x;θ)

訓練一個前饋網絡須要作什麼?

設計決策同線性模型

  優化模型

  代價函數

  輸出單元

網絡結構該如何設計?

  多少層,鏈接如何設置,每層多少個單元

如何高效地計算梯度?

  反向傳播

補充:線性變換
  什麼是線性變換?

    仿射變換:線性變換+平移

    具體:縮放、旋轉、錯切、翻轉等

    參考:《如何通俗講解仿射變換》

  什麼是非線性變換?

  參考第二章分享筆記或3Blue 1 Brown的《線性代數本質》

  書面定義:加法+數乘——抽象

  形象理解:

    只需知足兩點要求:原點不變,直線仍是直線(不能扭曲)

 

2、如何解決異或問題

XOR函數(「異或」邏輯):兩個二進制的運算

  注:這道題毫不簡單,曾引起AI的第一個寒冬

  異或門是神經網絡的命門!

  解決:非線性變換+BP

人:

  簡單規則:if。。。else。。。

  找規律:x+y=1,怎麼自動學習

機器:

  肯定性、自動化、泛化能力

其餘。

 

線性方法:f(x,w,b)=xTw+b

  迴歸問題

  均方偏差

  結果:任意點都輸出0.5,失敗。(w=0,以及b=0.5)

爲何會這樣?

  線性模型中各變量的參數固定

  不能經過一個變量改變另一個變量

結論:

  線性模型沒法解決異或問題。

那麼,怎麼辦?——空間變換

  低維線性不可分,高維線性可分(SVM)

  非線性變換實現空間變換

兩層神經網絡能夠無限逼近任意連續函數

網絡結構:

  兩個輸入,一個隱含層,一個輸出

 

激活函數:

  ReLU(整流線性單元)

一個解:

 

 補充:

  ReLUc長的是挺簡單,可某個點有點膈應,可導嗎?——不可導

  那爲何還用它?——計算友好,特殊點特殊處理(給0或1),仿生

可導,可微,連續?

  連續:有定義、光滑(極限存在)、無間斷點。

  可微和可導近似等效(多元情形不適用)

  可積容許間斷點

  可導必連續,必可積。反之不可行。

見證奇蹟的時刻(睜大眼睛看):

步驟:

X--->XW--->XW+c--->ReLU--->*w

空間變換:正方形--->直線--->分段直線(線性可分)

--->--->--->--->--->

回想一下:

  線性模型沒法解決異或問題

  低維線性不可分,高維線性可分

  多個低級分類器組合成複雜分類器

《A friendly intruduction to Deep Learning and Neural Networks》

 形象感知:

線性邊界到非線性邊界。

補充:直觀感覺異或分類

  問題:人工求解--->自動訓練?

  理論證實:兩層神經網絡能夠無限逼近任意連續函數

    層數越深,表示能力越強

  Google playground(能夠下去本身搜索體驗一下):

    理想--->現實(近似最優解)

3、基於梯度的學習

雖然異或是AI命門,但還只是小兒科

實際狀況,訓練樣本和參數都是數十億級別

怎麼辦?——梯度降低

  目前爲止,神經網絡和線性模型都用梯度降低

  但最大的區別是:神經網絡的非線性致使代價函數非凸,沒法收斂到全局最優。

  注:凸優化從任何一個初始值觸發均能收斂到全局最優

如何計算梯度?

  梯度降低升級版+BP算法

梯度降低:

  當前位置最陡峭的方向可能最快(局部)

   實際問題,高維空間如何收斂?(見第八章講解)

設計要點:

  優化算法:梯度降低

  代價函數:交叉熵(負最大似然)

       

    代價函數的梯度必須足夠大,並有足夠的預測能力,因此不要用sigmoid

    貫穿神經網絡設計的一個反覆出現的主題是代價函數的梯度必須足夠的大和具備足夠的預測性,來爲學習算法提供一個好的指引(見原書page111下)。

    代價函數是一個泛函(函數到實數的映射)

    如何對泛函求解?變分法

   

   

  輸出單元:線性單元,sigmoid單元,softmax單元等,等多細節請認真看書。

梯度降低對比(好好看書)。

4、反向傳播

怎麼更新網絡權重?傳統方法:固定其餘變量,只計算一個

反向傳播(back propagation):代價函數信息向後流動,以便計算梯度,甚至任意函數的導數

反向傳播僅用於計算梯度,並不是多層網絡的學習方法!

 

爲何要理解反向傳播?TensorFlow工具不是現成的嗎?

不要只會用工具,不然神經網絡永遠都是黑盒!不要在應用網絡的時候,出了問題,都不知道怎麼調試,學習任何技術,都要了解原理,不要只會使用工具,讓本身也變成了單純的工具。

 

計算圖:

 

鏈式求導:

要點:

  鏈式求導:導數=倍率

  計算圖

符號求導

損失函數

5、隱藏單元

如何選擇隱藏單元的類型?

  ReLU一定是極好的!

隱藏單元的選擇建議

  Relu及其擴展:絕對值整流,泄露整流,參數整流

  Logistic sigmoid及雙曲正切:易飽和,不宜作隱含層單元

  徑向基(RBF):radical basis function,大部分飽和到零,難以優化

  softplus:ReLU的平滑版,實際效果不如ReLU好

  硬雙曲正切:hard tanh

其餘

6、架構設計

有多少個單元,怎麼鏈接?

神經網絡大可能是鏈式架構(俄羅斯套娃)

要素:深度+寬度

  網絡越深,泛化能力越強,但越難優化

  深度和寬度折中

  理想的架構須要不斷實驗

能自動學習網絡深度嗎?——能夠,見書中「通用近似定理」?辯證去看

分段線性網絡(ReLU或maxout)可表示區域數量跟深度成指數關係

網絡越深,泛化越好。

7、總結

自1980年以來,前饋網絡核心思想並沒有多大變化,仍然是梯度降低和反向傳播

1986-2015,網絡性能出現重大提高,緣由是:

  大量的數據下降網絡泛化難度

  硬件和軟件能力的提高

  部分算法上的進步:交叉熵替換均方差,ReLU的出現

80年代就有ReLU,可是被sigmoid替代,直到2009年纔開始變天,緣由:

  網絡很是小,sigmoid表現較好

  迷信:必須避免不可導的激活函數

ReLU比隱含層權重還要重要,是系統性能提高的惟一因素

ReLU具有生物神經元的特性:閾值如下不活躍,閾值以上開始活躍,且活躍程度成正比

2006-2012,人們廣泛不看好前饋網絡,而今前饋網絡表現很是好,進一步發展出變分自動編碼器和生產對抗網絡(GAN)

附:學習金字塔,給有心人

相關文章
相關標籤/搜索