--- title: 第二章|Deep Learning 學習基礎 Nikhil Buduma tags: Deep Learning --- # 誤差函數 / 目標函數 i 代表第 i 個訓練範例 $t^{(i)}$ 是第 i 個訓練範例的正確答案 $$ E=\frac{1}{2} {\textstyle \sum_{i}^{}}(t^{(i)}-y^{(i)})^{2} $$ 目的就是挑出讓 E 最接近 0 的最佳 $\mathbf{\theta}$ # 梯度遞減 # Delta 規則 和 學習率 ## 超參數 hyperparameters 權重就是一種超參數;而學習率就是另一種超參數 ## 學習率 Learning rate 每次都會讓梯度值乘上他,決定每步的大小 代號: $$ {\Huge \epsilon} $$ 第三章會介紹自動調整學習率的技巧 ## Delta 規則 / Delta rule 每次權重應該變動多少,這裡的 k 指第 k 個權重 $$ \Delta w_{k}=-\epsilon \frac{\partial E}{\partial w_{k}} $$ 下面是線性神經元的結果,就只有一個神經元 $$ y^{(i)}=w_{1}x_{1}^{(i)}+...+w_{k}x_{k}^{(i)} $$ $$ \Delta w_{k}={\textstyle -\epsilon\sum_{i}^{}}(t^{(i)}-y^{(i)})\frac{\partial y^{(i)}}{\partial w_{k}} = {\textstyle \sum_{i}^{}}\epsilon x^{(i)}_{k}(t^{(i)}-y^{(i)}) $$ ### S 神經元 自己推,簡單的微分運算,一樣只有一個神經元,結論: $$ z^{(i)}=w_{1}x_{1}^{(i)}+...+w_{k}x_{k}^{(i)} $$ $$ \Delta w_{k} = {\textstyle \sum_{i}^{}}\epsilon x^{(i)}_{k}y^{(i)}(1-y^{(i)})\frac{\partial E}{\partial y^{(i)}} $$ # 反向傳播演算法 Backpropagation 由於權重的變化量可以由誤差函數的導函數算出來,那現在的問題就是要怎麼知道每一層中每個權重的變化量 這裡使用 Dynamic Programming :假設目前知道第 j 層的誤差函數的導函數 想要知道前一層,第 i 層的誤差函數的導函數,可以藉由第 j 層的誤差函數的導函數來敘述 >畢竟是先有第 i 層的結果才有第 j 層 這邊一樣用 S 型神經元舉例 其實就是使用上面 S 神經元 Delta rule 的結果,只不過 $x^{(i)}_{k}$ 就是前一層的輸出 y 而已 $$ \Delta w_{ij} = {\textstyle \sum_{k\in 整組資料}^{}}\epsilon y^{(k)}_{i}y^{(k)}_{j}(1-y^{(k)}_{j})\frac{\partial E^{(k)}}{\partial y^{(k)}_{j}} $$ 也就是說知道了最尾端的誤差函數,就可以一路推回來了 :::warning 那個 k 很重要,上面的式子代表會將每筆資料的訓練結果納入考量 ::: # 批量梯度遞減 batch gradient descent $$ \Delta w_{ij} = {\textstyle \sum_{k\in 整組資料}^{}}\epsilon y^{(k)}_{i}y^{(k)}_{j}(1-y^{(k)}_{j})\frac{\partial E^{(k)}}{\partial y^{(k)}_{j}} $$ 也就是採用每筆資料的結果,會沿著梯度遞減最劇烈的路徑前進,但是容易掉入區域極值或是鞍點,就會卡住 # 隨機梯度遞減 stochastic gradient descent / SGD 每次只採用其中一筆資料的訓練結果,可以顯著提高在平緩區域內找出方向繼續前進的能力 但是因為每次都只看其中一筆,所以採用的誤差曲面可能不是恰當的誤差曲面,反而可能更花時間 # 小批量梯度遞減 mini-batch gradient descent 就是上面兩種方法的折衷版本,只採用所有訓練結果中的一部份作為考量 而這個「小批量 minibatch」也是其中一個超參數 $$ \Delta w_{ij} = {\textstyle \sum_{k\in 小批量資料}^{}}\epsilon y^{(k)}_{i}y^{(k)}_{j}(1-y^{(k)}_{j})\frac{\partial E^{(k)}}{\partial y^{(k)}_{j}} $$ # 過度套入 overfitting 神經網路中,連接數量的增加,或是深度(層數)的增加都會更容易產生過度套入 # 資料的分組 ## 訓練組 拿來訓練的組別 ## 測試組 用來測試的組別;如果訓練跟測試的資料都是同一筆的話根本看不出結果的好壞,所以才需要測試組 ## 驗證組 為了避免訓練的過程產生嚴重的過度套入,所以「每個階段 Epoch」都會跟驗證組比對 如果訓練組的準確性持續增加,但是驗證組的沒有改變或變差,就表示已經訓練過度該停止訓練了 ### 階段 Epoch 假設訓練組有 d 筆資料,然後小批量的的取樣數是 b ,那一次 Epoch,或者說一個階段 是指資料經過$\frac{d}{b}$次的更新 # 地毯式搜索 作者說前面提到了這麼多超參數,像是學習速率,小批量等等,但是到目前還沒有找出最佳值得做法 而可能的作法是使用地毯式搜索,也就是給超參數設定有限的選項,然後進行排列組合並訓練 # 防止過度套入的方法 ## 正則化 regularization 修改誤差函數:誤差函數 + $\lambda f(\theta)$ 其中 $f(\theta)$ 會隨著 $\theta$ 變大而變大 $\lambda$ 也是其中一個超參數;如果設為 0 就是不做任何預防 ## L2 正則化 修改誤差函數:誤差函數 + ${\textstyle \sum_{k}^{}} \frac{1}{2}\lambda w^{2}_{k}$ 這樣的話,會「嚴厲懲罰」極端的權重值,偏袒中庸的權重值 也就是多鼓勵採用每個輸入值,不要只採用特定幾個輸入值 ## L1 正則化 修改誤差函數:誤差函數 + ${\textstyle \sum_{k}^{}} \lambda |w_{k}|$ 作用剛好跟 L2 相反,會讓權重變得稀疏,也就是只傾向使用特定幾個輸入,也因此不易受雜訊干擾 因此如果特徵分析很重要,就用 L1 ,反之就用 L2 ## 最大範數約數 Max norm contraint 也是不要讓權重太大 對每個權重向量的大小設定一個絕對的上限,使用投射梯度遞減達到約束的效果 只要梯度遞減步驟使得 $||w||_{2}>c$ 就把向量投射到半徑為 c 的球體 好處是權重向量不會失控 ## 隨機拋棄 Dropout 最受青睞的方法之一 設定神經元只有在機率大於 p 的時候才會輸出值,不然就輸出 0 這樣可以讓神經網絡即使缺少特定資訊,還是可以得到正確的結果,不會過度依賴特定的幾個神經元 ### 反向隨機拋棄 inverted dropout 上面是在測試期間,要對輸出值進行比例的調整,也就是呈上機率值,這樣才能獲得跟訓練期一樣的預期結果 但是模型在測試期間的表現對於模型的評估很重要,所以最好改在訓練期間進行比例調整,不要在測試期間調整 而調整方法就是未失效的輸出值除以機率 p 在送到下一層
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up