深度學習學習心得
第二篇
===


---
## 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
:::

---
Forward pass
---

1. C是所有參數的集合
2. z經過激勵函數: a = σ(z)
3. ∂C/∂z'= 一個值...我們先假設已知
----
Forward pass
---

:::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,倒過來傳遞

----
Backward pass
---

**我們剩下兩項還沒算**
**σ'(z)是常數,不用擔心**
> ∂C/(∂z')
> ∂C/(∂z'')
----
Backward pass
---

**現在有兩種情況**
1. z' & z''後面已經是最後output了
2. z' & z''後面不是最後output
3. 上圖為第一種情況 =>將output值帶入就ok了
----
Backward pass
---

1. 若z' & z''後面不是最後output
2. 還是照case 1的方法反覆下去直到case 1的情況

---
Summary
---

1. Backward pass:建立反向的網路(input是 y)
2. 先進行forward 再 backward
----
Summary
---

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}]"}