機器學習相關

Posted by Adam on August 24, 2022
### [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在每個小批次的輸入上計算其均值和標準差,並將其應用於歸一化輸出,從而加速收斂速度和改善泛化性能。