- 本文首發(fā)自公眾號:RAIS,點擊直接關(guān)注。
前言
本系列文章為《Deep Learning》讀書筆記,可以參看原書一起閱讀,效果更佳。從本文開始將繼續(xù)學習本書的第二部分,將從第一部分介紹深度學習所需要的基礎(chǔ)知識過渡到構(gòu)建深度網(wǎng)絡(luò),是理論的應(yīng)用與提高。
深度前饋網(wǎng)絡(luò)
也叫 多層感知機 或者是 前饋神經(jīng)網(wǎng)絡(luò),是典型的深度學習模型。這種模型是一種前向的映射模型,由最初的輸入,經(jīng)過函數(shù) f 映射到結(jié)果 y,模型的輸出和模型本身沒有反饋(有反饋的稱作循環(huán)神經(jīng)網(wǎng)絡(luò))。這里網(wǎng)絡(luò)的概念是一種有向無環(huán)圖,最簡單的是鏈式連接,輸入的 x 經(jīng)過 f1 再經(jīng)過 f2 再經(jīng)過 f3,最后的到結(jié)果 y。引入層的概念,如 f2 就是一層,f3 為輸出層,訓練數(shù)據(jù)給出了 x 和 y,卻沒有定義其中中間層的輸入和輸出,因此中間層也被稱為隱藏層。
線性模型分為邏輯回歸(分類問題)和線性回歸(連續(xù)值預測問題),可以高效可靠的擬合,但問題是其能力距現(xiàn)在了線性函數(shù)范圍內(nèi),無法理解輸入變量間的相互作用,因此我們考慮將輸入 x,先做非線性變換 φ(x),然后線性函數(shù)作用在 φ(x) 上。這里涉及到的問題是 φ(x) 如何選擇:
通用的 φ,有足夠高的維數(shù),則可以將輸入與輸出很好的擬合,問題是泛化往往很不好。
手動設(shè)計 φ,專家去設(shè)計算法,手動編碼 φ,問題是這是針對特定問題進行的算法設(shè)計,難以遷移。
去學習 φ,φ(x;θ) 將以 θ 為參數(shù),進行訓練,并且可以通過使用廣泛的函數(shù)族或人為編碼幫助泛化使之可以實現(xiàn)上述兩種情況。
學習異或函數(shù)(XOR)
異或的含義為:x1 和 x2 相同為 0,不同為 1。我們設(shè)置代價函數(shù)為:
解得:w=0,b=1/2,這顯然是不對的,為什么會這樣?x1=0 時,模型輸出隨著 x2 增大而增大,x1=1 時,模型輸出隨著 x2 增大而減小,這用線性模型怎么可能做得到,因此得到了錯誤的結(jié)果。
要解決這個問題,我們引入了一層隱藏層,構(gòu)成前饋神經(jīng)網(wǎng)絡(luò):
這里我們需要考慮 h 應(yīng)為怎樣的函數(shù),如果是線性函數(shù),代入 y 得到的結(jié)果仍然為線性函數(shù),前面的分析我們知道這無法滿足需求,因此 h 需為非線性函數(shù)。這里使用激活函數(shù),修正線性單元(RELU,Rectified Linear Unit):g(z)=max{0, z}。
則網(wǎng)絡(luò)為:
則可以計算結(jié)果:
到這里,就完成異或函數(shù)的基于深度學習模型的構(gòu)建。
總結(jié)
到這里,我們構(gòu)建了一個非常簡單的深度前饋網(wǎng)絡(luò)。知道了網(wǎng)絡(luò)模型,就是一種數(shù)學的映射或函數(shù)表達,沒有類似于相同為 0 不同為 1 這樣的判斷,而都是一種矩陣的運算,這也是需要轉(zhuǎn)換的一種思維。計算機是一種固化的數(shù)學,在這里體現(xiàn)的尤為明顯。下一篇我們重新從新的角度討論梯度學習。
- 本文首發(fā)自公眾號:RAIS,點擊直接關(guān)注。