深度學習學習心得 第二篇 === ![grade](https://img.shields.io/badge/Grade-新手-brightgreen) ![build](https://img.shields.io/badge/Build-keras-important) --- ## Backpropagation(反向傳播法) 1. Gradient Descent(梯度下降法) :::info 一階微分找最佳解的一種方法 一維的純量x的梯度就是算f(x)對x的微分 多維的向量x的梯度就是算f(x)對x所有元素的偏微分 ::: 2. Backpropagation是Gradient Descent的一種 3. 透過不斷更新參數來往目標移動 ---- :::info *有各種參數組合成一個set = θ , 初始值 = θ(0) 計算 θ(0)對loss function 的gradient (每個參數對loss(θ(0))的偏微分) θ(1)=θ(0)-學習率× θ(0)對loss function的gradient and so on ...* ::: **Backpropagation 是一種較有效率的算法** [更多有關梯度下降法](https://medium.com/@chih.sheng.huang821/機器學習-基礎數學-二-梯度下降法-gradient-descent-406e1fd001f) ---- Backpropagation --- 1. 核心技巧 : 微積分的Chain Rule >Forward & Backward Pass 都會用到 2. Forward & Backward Pass >正面算不出來就換一邊算回來 3. 不會推導沒有關係:smile: 4. 可以直接到後面看結論 ---- Forward pass --- 1. 正面算是輸入資料到網路中算結果的方向 2. 線上數字:權重 / 綠色框框:bias /圓形:激勵函數 3. ∂z/∂w = w's input :::spoiler 上面藍色為例,輸入到激勵函數之前的值z z = 1 x w(1)+(-1) x w(-1) + 1 ∂z/∂w(-1) = -1 = w(-1)'s input ::: ![](https://i.imgur.com/DTizWec.png) --- Forward pass --- ![](https://i.imgur.com/9ncOsQD.png) 1. C是所有參數的集合 2. z經過激勵函數: a = σ(z) 3. ∂C/∂z'= 一個值...我們先假設已知 ---- Forward pass --- ![](https://i.imgur.com/9ncOsQD.png) :::spoiler *∂C/∂a = [(∂z')/∂a] x [∂C/(∂z')] +[∂C/∂z'']x [∂C/∂z'']* ::: 1. *w3 = ∂C/∂z'* 2. *w4 = ∂C/∂z''* 3. *∂C/∂z'= σ'(z)[w3 x ∂C/(∂z')+w4 x ∂C/∂z'']* ---- Backward pass --- 1. 剛剛提到我們有一個不知道的值 2. 正面算的話無法算出值為何 3. 所以想像一個不存在的nueral,倒過來傳遞 ![](https://i.imgur.com/3WX2c9q.png) ---- Backward pass --- ![](https://i.imgur.com/5c9KEwO.png) **我們剩下兩項還沒算** **σ'(z)是常數,不用擔心** > ∂C/(∂z') > ∂C/(∂z'') ---- Backward pass --- ![](https://i.imgur.com/dYcmgmu.png) **現在有兩種情況** 1. z' & z''後面已經是最後output了 2. z' & z''後面不是最後output 3. 上圖為第一種情況 =>將output值帶入就ok了 ---- Backward pass --- ![](https://i.imgur.com/8nx8khq.png) 1. 若z' & z''後面不是最後output 2. 還是照case 1的方法反覆下去直到case 1的情況 ![](https://i.imgur.com/c0jTjxU.png) --- Summary --- ![](https://i.imgur.com/0MyIoEG.png) 1. Backward pass:建立反向的網路(input是 y) 2. 先進行forward 再 backward ---- Summary --- ![](https://i.imgur.com/6Sxfrri.png) 1. Forward pass:算出所有的激勵函數的output 也就是激勵函數所連接的weight的∂z/∂w = a 2. Backward pass:算出 ∂C/∂z 再將其與forward pass的a進行相乘 3. 我們知道每個點的∂C/∂w 就知道他們的總和 --- ## Next Lesson ... 1. Tensorflow 簡介 2. batch size & epoch ###### tags: `Deep learning` `beginner` `python` `keras` `tutorial`
{"metaMigratedAt":"2023-06-15T05:42:35.228Z","metaMigratedFrom":"YAML","title":"深度學習學習心得-2","breaks":true,"disqus":"hackmd","contributors":"[{\"id\":\"6bb13895-9bc1-441a-8b8f-cc9578e3b5bc\",\"add\":5652,\"del\":3262}]"}
    1162 views