### [Deep Learning 1:用Python進行深度學習的基礎理論實作](https://www.books.com.tw/products/0010761759)
### [Deep Learning 2:用Python進行自然語言處理的基礎理論實作](https://www.books.com.tw/products/0010817138?loc=P_br_r0vq68ygz_D_2aabd0_B_2)
### [Deep Learning 3:用Python進行深度學習框架的開發實作](https://www.books.com.tw/products/0010887759)
---
### 矩陣乘法微分
$$
A=\begin{bmatrix}
a_{1} & a_{2}
\end{bmatrix}
\qquad
C=\begin{bmatrix}
c_{11} & c_{12} & c_{13} \\
c_{21} & c_{22} & c_{23}
\end{bmatrix}
\qquad
X=\begin{bmatrix}
x_{1}\\
x_{2}\\
x_{3}
\end{bmatrix}
\qquad
Y=\begin{bmatrix}
y_{1}\\
y_{2}
\end{bmatrix}=CX
$$
$$
Z = AY = a_{1}y_{1} + a_{2}y_{2}
$$
$$
Z= ACX = a_{1}c_{11}x_{1}+a_{2}c_{21}x_{1}
+a_{1}c_{12}x_{2}+a_{2}c_{22}x_{2}
+a_{1}c_{13}x_{3}+a_{2}c_{23}x_{3}
$$
$$
\frac{dZ }{dy_{1}} =a_{1}
\qquad
\frac{dZ }{dy_{2}} =a_{2}
\qquad
\frac{dZ }{dY} =A^{T}
$$
$$
\frac{dZ }{da_{1}} =y_{1}
\qquad
\frac{dZ }{da_{2}} =y_{2}
\qquad
\frac{dZ }{dA} =Y^{T}
$$
$$
\frac{dY }{dX} =C^{T}
$$
$$
\frac{dZ }{dA} =(CX)^{T}
$$
$$
\frac{dZ }{dC} =\frac{dZ }{dY}\frac{dY }{dC} =(XA)^{T} = A^{T}X^{T}
$$
$$
\frac{dZ }{dX} =\frac{dY }{dX}\frac{dZ }{dY}=C^{T}A^{T}=(AC)^{T}
$$
---
### 感知器(Perceptron) AND 及閘 範例
$$
X=\begin{bmatrix}
0 & 0 \\
0 & 1 \\
1 & 0 \\
1 & 1
\end{bmatrix}
\qquad
T=\begin{bmatrix}
0 \\
0 \\
0 \\
1
\end{bmatrix}
$$
$X$為輸入矩陣,$T$為目標矩陣。$X$矩陣中每一列為一案例,每一行為一輸入參數。$T$矩陣中每一列為該案例的目標結果,在及閘的範例中只會有一個輸出
隨機產生一個內容值為 0 ~ 1 的 $2 \times 1$ 矩陣 $W$, 隨機產生一個內容值為 0 ~ 1 的 $4 \times 1$ 矩陣 $B$
$$
W=\begin{bmatrix}
0.7 \\
0.3
\end{bmatrix}
\qquad
B=\begin{bmatrix}
0.1 \\
0.7 \\
0.2 \\
0.8
\end{bmatrix}
$$
令 $Y=XW+B$ 矩陣為目前計算出來的結果
$$
XW + B = \begin{bmatrix}
0 & 0 \\
0 & 1 \\
1 & 0 \\
1 & 1
\end{bmatrix}
\begin{bmatrix}
0.7 \\
0.3
\end{bmatrix} + \begin{bmatrix}
0.1 \\
0.7 \\
0.2 \\
0.8
\end{bmatrix} = \begin{bmatrix}
0.0 \\
0.3 \\
0.7 \\
1.0
\end{bmatrix} + \begin{bmatrix}
0.1 \\
0.7 \\
0.2 \\
0.8
\end{bmatrix} = \begin{bmatrix}
0.1 \\
1.0 \\
0.9 \\
1.8
\end{bmatrix}
$$
$Y$ 與 $T$ 內容存在明顯落差,計算誤差值 $E$ 使用均方誤差
$$
均方誤差\quad E=\frac{1}{2}\sum_{k}^{}(y_k-t_k)^{2}
=\frac{1}{2}\sum_{k}^{}(\begin{bmatrix}
0.1 \\
1.0 \\
0.9 \\
1.8
\end{bmatrix}-\begin{bmatrix}
0 \\
0 \\
0 \\
1
\end{bmatrix})^{2} = 1.23
$$
今希望將其內容誤差降至最小,針對 $W$ 與 $B$ 計算 $E$ 的微分
$$
\frac{dE }{dW}
=\frac{dY }{dW} \frac{dE }{dY}
=\frac{dY }{dW} \frac{d(\frac{1}{2}\sum_{k}^{}(Y-T)^{2})}{dY}
=\frac{dY }{dW} (Y-T)
=\frac{d(XW+B) }{dW} (Y-T)
=X^{T} (Y-T)
$$
$$
=
\begin{bmatrix}
0 & 0 & 1 & 1\\
0 & 1 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
0.1 \\
1.0 \\
0.9 \\
0.8
\end{bmatrix}
=
\begin{bmatrix}
1.7 \\
1.1
\end{bmatrix}
$$
$$
\frac{dE }{dB}
=\frac{dY }{dB} \frac{dE }{dY}
=\frac{dY }{dB} (Y-T)
=(Y-T)
=\begin{bmatrix}
0.1 \\
1.0 \\
0.9 \\
0.8
\end{bmatrix}
$$
根據微分值(斜率)調整 $W$ 及 $B$ 的內容,調整幅度假設為 $\alpha = 0.3$
$$
W_{next}=W-\alpha\frac{dE }{dW} =\begin{bmatrix}
0.7 \\
0.3
\end{bmatrix}
-0.3
\begin{bmatrix}
1.7 \\
1.1
\end{bmatrix}
=
\begin{bmatrix}
0.19 \\
−0.03
\end{bmatrix}
$$
$$
B_{next}=B-\alpha\frac{dE }{dB} =\begin{bmatrix}
0.1 \\
0.7 \\
0.2 \\
0.8
\end{bmatrix}
-0.3
\begin{bmatrix}
0.1 \\
1.0 \\
0.9 \\
0.8
\end{bmatrix}
=
\begin{bmatrix}
0.07 \\
0.4 \\
−0.07 \\
0.56
\end{bmatrix}
$$
$$
Y_{next}=XW_{next}+B_{next}
=\begin{bmatrix}
0 & 0 \\
0 & 1 \\
1 & 0 \\
1 & 1
\end{bmatrix}\begin{bmatrix}
0.19 \\
−0.03
\end{bmatrix}
+
\begin{bmatrix}
0.07 \\
0.4 \\
−0.07 \\
0.56
\end{bmatrix}
=
\begin{bmatrix}
0.07 \\
0.37 \\
0.12 \\
0.72
\end{bmatrix}
$$
$$
E_{next}
=\frac{1}{2}\sum_{k}^{}(\begin{bmatrix}
0.07 \\
0.37 \\
0.12 \\
0.72
\end{bmatrix}-\begin{bmatrix}
0 \\
0 \\
0 \\
1
\end{bmatrix})^{2} = 0.1173
$$
---
### Dropout
DropoutLayer 是一種在深度學習中用來防止過擬合(overfitting)的層(layer)。在訓練過程中,每個神經元都有一定概率被隨機丟棄,從而減少神經元之間的相互適應性,增加模型的魯棒性,使其更好地適應未見過的數據。在訓練結束後,DropoutLayer 不會起作用,所有的神經元都會保留。
### BatchNormalization
BatchNormalization是一種神經網路中常用的正規化技術,可以提高訓練的穩定性和速度。BatchNormalization在每個小批次的輸入上計算其均值和標準差,並將其應用於歸一化輸出,從而加速收斂速度和改善泛化性能。