本章提要
深度學習可以在較少參數量的情況下得到比較低的loss: h a l l = a r g min ? h ∈ H L ( h , D a l l ) h^{all}=arg \min_{h \in H}L(h,D_{all}) hall=argminh∈H?L(h,Dall?)
引入
如何權衡模型的復雜程度 Tradeoff of Model Complexity
理論上,理想與現實接近的方法
- 增加訓練樣本數量,N越大 D t r a i n D_{train} Dtrain?越接近 D a l l D_{all} Dall?, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain??is?bad)的概率越小。
- 減少模型復雜性,|H|候選項的數目越小, P ( D t r a i n i s b a d ) P(D_{train} \ is \ bad) P(Dtrain??is?bad)的概率越小。
矛盾點
數據集中樣本的數量N我們難以控制,為了理想和現實比較接近,選了一個較小的|H|。|H|太小,能選擇的h數量太少,可能找不到使 L ( h , D a l l ) L(h,D_{all}) L(h,Dall?)最小的h。(大海撈針,針不在大海)
|H|較大,可以找到使 L ( h , D a l l ) L(h,D_{all}) L(h,Dall?)最小的h,但是這樣理想和現實的差距比較明顯。
在H中找出一個h使得 L ( h , D a l l ) L(h,D_{all}) L(h,Dall?)最小,把這個h稱為 h a l l h^{all} hall: h a l l = a r g min ? h ∈ H L ( h , D a l l ) h^{all}=arg \min_{h \in H}L(h,D_{all}) hall=argminh∈H?L(h,Dall?)
=> 最優情況(H很小但又可以讓L很低):如果可以找到一個H ① H is Small ,很少的候選成員 ② 成員h都是精英,可以讓Loss很低
=> 問題:深度學習如何做到這件事的?
Why Hidden Layer?
核心: 可以通過一個Hidden Layer
制造出所有可能的function
隱藏層 (Hidden Layer)是人工神經網絡中的中間層,位于輸入層和輸出層之間。它的作用是對輸入數據進行特征提取和變換,為最終的輸出層提供高層次特征。
隱藏層的主要任務是通過線性變換和激活函數來捕捉數據中的復雜模式和特征。
怎么找一個function(network)來逼近隨便畫的一條線? => 可以用Piecewise Linear Curves逼近任何連續曲線
- 先將這條線分段,然后將每個分段的端點連接起來,得到分段函數(圖中綠色的線) ,使用這個分段函數來逼近原來的黑線。
在這個案例中可能綠色的線不是很逼近黑色的線,但可以直覺的想如果分段分的越細,那么就綠色的線越接近黑色的線。
-
可以使用一個
hidden layer
的neural network
輕易制造出綠色的線。使用一個常數項+一堆階梯型的function制造綠色的線。觀察發現:綠色的線=常數項+一堆特定形狀的藍色function(這里的特定形狀指的是圖上藍色function的形狀) => 任何的function都可以`hidden layer的neural network制造出來
- 怎么表示階梯型的function(藍色的線)呢?
- 方法1:使用
Sigmoid Function
逼近藍色的線。
- 方法1:使用
藍色的線也稱為hard Sigmoid Function
Sigmoid Function
(S形函數): y = c 1 1 + e ? ( b + w x 1 ) = c s i g m o i d ( b + w x 1 ) y = c\frac{1}{{1+e^{-(b+wx_1)}}} = c\;sigmoid(b+wx_1) y=c1+e?(b+wx1?)1?=csigmoid(b+wx1?)
2. 方法2:使用`ReLU`Rectified Linear Unit線性整流單元(兩個水平線有一個轉折點)表示`Hard Sigmoid`
每一個hard sigmoid
可以使用兩個線性整流單元Rectified Linear Unit
(ReLU)疊加
總結
方式1:使用sigmoid function
- hidden layer里每一個neural都可以制造出一個階梯型的function
- 把不同的sigmoid function加起來再加上常數項就可以得到綠色的線
- 任何的Piecewise Linear Curves去逼近任何function
neural network選擇的activation function 是sigmoid,hidden layer通過設定不同的$ w,b $制造出不同的sigmoid function
方式2:使用ReLU,hidden layer里每一個neural選擇的激活函數是ReLU
問題引出:深度學習效果更好
每一列Neural
叫做一個hidden layer
,很多hidden layer
被叫做Deep
,這一套技術被叫做Deep Learning
深度學習
有一層hidden layer的neural可以產生任何的function,那為什么還要搞deep network(多層hidden layer)?
直覺:當Layer越疊越越深的時候,參數量越多,模型越復雜,理想越來越好。如果有足夠的訓練資料那么理想和現實也不會差太多。 => 所以深度學習需要很多的資料
這里的直覺只是我們通常這么認為,但不一定正確
問題:當參數量一樣(未知參數量一樣)的時候,Fat+Short的網絡和Thin+Tall的網絡誰的效果更好?
實驗表明:Thin+Tall的網絡效果更好
為什么深度學習效果更好?
雖然一層hidden layer的neural可以產生任何的function,但往往用一個deep的架構更有效率。
:::tips
deep learing的核心:產生同一個function,使用deep的架構需要的參數量更少,可能需要較少的訓練資料就可以了(不容易overfitting)。
:::
誤解:大模型很多個layer增加了參數,如果沒有足夠的data,就會產生overfitting。
原因探究:為什么deep?
類別案例
當剪窗花時,直接剪操作很復雜,但如果折起來剪比較有效率。
這里將紙對折的事情可以類比為deep learning里hidden layer做的事情。
當把一個network deep的時候會發生什么
一層的neural
一層的network里包含了兩個neural,輸入為x,輸出為 a 1 a_1 a1?,采用的激活函數為ReLU。
假設參數已知,第一個neural的weight=1,bias=-0.5;第二個neural的weight=-1,bias=0.5。所以進入neural的x分別為x-0.5
與-x+0.5
。
第一個neural:當輸入x>0.5
時,輸出=2*輸入。當輸入x<0.5
時,輸出為0。
第二個neural:當輸入x<0.5
時,輸出=2*輸入。當輸入x>0.5
時,輸出為0。
結合起來就可以得到輸入的x和輸出 a 1 a_1 a1?之間的關系。
第二層的neural
將 a 1 + b i a s a_1+bias a1?+bias,這里的bias設置為-0.5。
第二層第一個neural輸入為 a 1 ? 0.5 a_1-0.5 a1??0.5,放入一個ReLU
第二次第二個neural輸入為 ? a 1 + 0.5 -a_1+0.5 ?a1?+0.5,放入一個ReLU
可以很容易知道 a 1 a_1 a1?和 a 2 a_2 a2?的關系和 x x x和 a 1 a_1 a1?的關系一致。
x從0->0.5
時, a 1 a_1 a1?從1->0
, a 2 a_2 a2?從1->0->1
x從0.5->1
時, a 1 a_1 a1?從0->1
, a 2 a_2 a2?從1->0->1
這里從課堂上的講法來說,只有當neural的輸出2才會有這個結果,所以彈幕說的老師課后更正應該是正確的。兩個ReLu的結果2再求和得到輸出。
第三層的neural
a 2 a_2 a2?和 a 3 a_3 a3?的關系 = a 1 a_1 a1?和 a 2 a_2 a2?的關系 = x x x和 a 1 a_1 a1?的關系。、
使用同樣的思路,可以得到 x x x與 a 3 a_3 a3?的關系
以此類推
使用deep network輸入x與輸出y的關系:如果有k層layers,每層有兩個neural,總共 2 k 2k 2k個neural,那么輸出的y有 2 k 2^k 2k個線段。 => 參數量小,比較簡單的模型
使用一個shallow network表示同樣的關系:每一個neural只能制造一個線段, 2 k 2^k 2k個線段需要 2 k 2^k 2k個neural。 => 參數量大,比較復雜的模型,復雜的模型更容易overfitting,所以需要更多的資料
如果目標的function是復雜(也不用太復雜)且有規律的(音像、語音),那么deep network優于shallow network