開篇初衷#
以前看過李沐等人的動手學深度學習,覺得不錯。但不重視總結和實踐,感到愧對如此優質的學習材料。故寫此篇,作學習路上的總結,並希望能給需要的人帶來幫助。
限於篇幅,僅摘要理論部分。
習題解答參見 https://datawhalechina.github.io/d2l-ai-solutions-manual/#/
線性回歸#
模型 y ^ = w ⊤ x + b . \hat{y} = \mathbf{w}^\top \mathbf{x} + b. y ^ = w ⊤ x + b . 其中 w ∈ R d \mathbf{w} \in \mathbb{R}^d w ∈ R d ,而 x ∈ R d \mathbf{x} \in \mathbb{R}^d x ∈ R d 是單個數據樣本的特徵。
對於特徵集合X \mathbf{X} X , y ^ = X w + b {\hat{\mathbf{y}}} = \mathbf{X} \mathbf{w} + b y ^ = Xw + b 給出了預測向量。
損失函數採用平方誤差函數
Copy l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 . l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2. l ( i ) ( w , b ) = 2 1 ( y ^ ( i ) − y ( i ) ) 2 .
求和並對樣本數取平均後
Copy L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w ⊤ x ( i ) + b − y ( i ) ) 2 . L(\mathbf{w}, b) =\frac{1}{n}\sum_{i=1}^n l^{(i)}(\mathbf{w}, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2. L ( w , b ) = n 1 i = 1 ∑ n l ( i ) ( w , b ) = n 1 i = 1 ∑ n 2 1 ( w ⊤ x ( i ) + b − y ( i ) ) 2 .
故希望找到 w ∗ , b ∗ = argmin w , b L ( w , b ) \mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b) w ∗ , b ∗ = argmin w , b L ( w , b ) ,解析解為最小化 ∥ y − X w ∥ 2 \|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 ∥ y − Xw ∥ 2 ,其對 w \mathbf{w} w 導數為 0,得
Copy w ∗ = ( X ⊤ X ) − 1 X ⊤ y . \mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}. w ∗ = ( X ⊤ X ) − 1 X ⊤ y .
SGD#
對於更一般的問題,採用 gradient descent ,原理是沿梯度減少的方向更新。實際應用中出於計算量考慮,隨機抽取小批量樣本,稱 minibatch stochastic gradient descent 。其更新過程如下:
Copy w ← w − η ∣ B ∣ ∑ i ∈ B ∂ w l ( i ) ( w , b ) , b ← b − η ∣ B ∣ ∑ i ∈ B ∂ b l ( i ) ( w , b ) . \begin{aligned}
\mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_b l^{(i)}(\mathbf{w}, b) .
\end{aligned} w b ← w − ∣ B ∣ η i ∈ B ∑ ∂ w l ( i ) ( w , b ) , ← b − ∣ B ∣ η i ∈ B ∑ ∂ b l ( i ) ( w , b ) .
在上述線性模型中,具體來說就是
Copy w ← w − η ∣ B ∣ ∑ i ∈ B x ( i ) ( w ⊤ x ( i ) + b − y ( i ) ) , b ← b − η ∣ B ∣ ∑ i ∈ B ( w ⊤ x ( i ) + b − y ( i ) ) . \begin{aligned}
\mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right).
\end{aligned} w b ← w − ∣ B ∣ η i ∈ B ∑ x ( i ) ( w ⊤ x ( i ) + b − y ( i ) ) , ← b − ∣ B ∣ η i ∈ B ∑ ( w ⊤ x ( i ) + b − y ( i ) ) .
最小化均方誤和合理性#
在噪聲為高斯噪聲時,最小化均方誤等價對線性模型的極大似然估計。故最小化均方誤差是合理的。論證如下:
當 y = w ⊤ x + b + ϵ , y = \mathbf{w}^\top \mathbf{x} + b + \epsilon, y = w ⊤ x + b + ϵ , ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathcal{N}(0, \sigma^2) ϵ ∼ N ( 0 , σ 2 ) 時,
Copy P ( y ∣ x ) = 1 2 π σ 2 exp ( − 1 2 σ 2 ( y − w ⊤ x − b ) 2 ) . P ( y ∣ X ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ) . \begin{aligned}
P(y \mid \mathbf{x}) &= \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (y - \mathbf{w}^\top \mathbf{x} - b)^2\right).\\
P(\mathbf y \mid \mathbf X) &= \prod_{i=1}^{n} p(y^{(i)}|\,\mathbf{x}^{(i)}).
\end{aligned} P ( y ∣ x ) P ( y ∣ X ) = 2 π σ 2 1 exp ( − 2 σ 2 1 ( y − w ⊤ x − b ) 2 ) . = i = 1 ∏ n p ( y ( i ) ∣ x ( i ) ) .
帶入得
Copy argmin { − log P ( y ∣ X ) } = argmin { ∑ i = 1 n 1 2 log ( 2 π σ 2 ) + 1 2 σ 2 ( y ( i ) − w ⊤ x ( i ) − b ) 2 } . \begin{aligned}
&\text{argmin}\,\{-\log P(\mathbf y \mid \mathbf X)\} \\= &\text{argmin}\,\{\sum_{i=1}^n \frac{1}{2} \log(2 \pi \sigma^2) + \frac{1}{2 \sigma^2} \left(y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)} - b\right)^2\}.
\end{aligned} = argmin { − log P ( y ∣ X )} argmin { i = 1 ∑ n 2 1 log ( 2 π σ 2 ) + 2 σ 2 1 ( y ( i ) − w ⊤ x ( i ) − b ) 2 } .
第一項是常數,第二項常系數可忽略。於是可以看到,在噪聲為高斯噪聲時,最小化均方誤等價對線性模型的極大似然估計。
分類問題 - 引#
主要用於解決分類問題。
首先,對於分類問題輸出的編碼,採取獨熱向量編碼 one-hot encoding 。譬如:芙莉蓮,修塔爾克和費倫,用 ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) 編碼芙莉蓮,用 ( 0 , 1 , 0 ) (0,1,0) ( 0 , 1 , 0 ) 編碼修塔爾克,用 ( 0 , 0 , 1 ) (0,0,1) ( 0 , 0 , 1 ) 編碼費倫。
不用 1,2,3 等自然數編碼是因為:自然數是線性的,而分類問題中這種線性性並不天然存在(譬如我們不能說芙莉蓮相比於費倫和修塔爾克長得更像,而用自然數編碼某種程度上就暗示了這一點)。
其次,對於分類問題的網絡結構,其採取和線性模型類似的單層網絡,不同在於分類問題輸出層是一個向量(而非實數)。稱其為(未規範化的)預測 logit 。
對單數據而言,矩陣乘法形式是 o = W x + b \mathbf{o} = \mathbf{W} \mathbf{x} + \mathbf{b} o = Wx + b 。其中 W \mathbf{W} W 和 b \mathbf{b} b 是待學參數。
比如對一個 4 特徵 3 分類的問題,x \mathbf{x} x 是一個 4-1 矩陣,W \mathbf{W} W 是一個 3-4 矩陣,b \mathbf{b} b 和 o \mathbf{o} o 都是一個 3-1 矩陣。
可見全連接層開銷巨大。一篇文章指出節省開銷的方法(“其他” )
分類問題 - softmax 回歸#
那麼我們已經有了輸出 o \mathbf{o} o ,然而由於 o \mathbf{o} o 不滿足概率公理定義,所以我們通過所謂 softmax 操作使其滿足歸一化、校準(calibration)。
Copy y ^ = s o f t m a x ( o ) y ^ j = exp ( o j ) ∑ k exp ( o k ) \begin{aligned}
\hat{\mathbf{y}} &= \mathrm{softmax}(\mathbf{o})\\
\hat{y}_j &= \frac{\exp(o_j)}{\sum_k \exp(o_k)}
\end{aligned} y ^ y ^ j = softmax ( o ) = ∑ k exp ( o k ) exp ( o j )
於是,這樣的 y ^ \hat{\mathbf{y}} y ^ 就可以當作 “概率預測輸出” 了。從定義式可以看到 softmax 操作保持了大小次序,因此可以通過直接找到最大 o j o_j o j 來找出最有可能的類別。
我們仍稱 softmax 為線性模型 linear model, 因為其參數部分集中在線性部分。這是很好理解的。
在實際 GPU 計算中會被採取一種叫做矢量化的計算。
Copy X ∈ R n × d W ∈ R d × q b ∈ R 1 × q i O ∈ R n × q Y ∈ R n × q O = X W + b Y ^ = softmax ( O ) \begin{aligned}
&\mathbf{X}\in \mathbb{R}^{n\times d}\quad\mathbf{W}\in \mathbb{R}^{d\times q}\quad \mathbf{b}\in \mathbb{R}^{1\times q}i\\& \mathbf{O}\in \mathbb{R}^{n\times q}\quad \mathbf{Y}\in \mathbb{R}^{n\times q}\\\\
&\mathbf{O}=\mathbf{X}\mathbf{W}+\mathbf{b}\\
&\hat{\mathbf{Y}}=\text{softmax}(\mathbf{O})
\end{aligned} X ∈ R n × d W ∈ R d × q b ∈ R 1 × q i O ∈ R n × q Y ∈ R n × q O = XW + b Y ^ = softmax ( O )
小批量矢量化加快了 X \mathbf{X} X 和 W \mathbf{W} W 的矩陣 - 向量乘法。
類似地採取對數似然法,最小化負對數似然。比較不同的是損失函數為
Copy l ( y , y ^ ) = − ∑ j = 1 q y j log y ^ j . l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j. l ( y , y ^ ) = − j = 1 ∑ q y j log y ^ j .
稱之為交叉熵損失 cross-entropy loss ,是分類問題常用損失函數之一。
分佈 P P P 的熵 entropy H [ P ] = ∑ j − P ( j ) log P ( j ) H[P] = \sum_j - P(j) \log P(j) H [ P ] = ∑ j − P ( j ) log P ( j ) ,信息論的基本定理之一指出,為了對從分佈 P P P 中隨機抽取的數據 進行編碼,我們至少需要 H [ P ] H[P] H [ P ] 納特 nat 對其進行編碼。
如果我們很容易預測下一個數據,那麼這個數據就很容易壓縮。如果我們不能完全預測每一個事件,那麼我們有時可能會感到 “驚異”。 我們可以把交叉熵想象為 “主觀概率 為 Q Q Q 的觀察者在看到根據概率 P P P 生成的數據 時的預期驚異”。
當 P = Q P=Q P = Q 時,交叉熵達到最低。在這種情況下,從 P P P 到 Q Q Q 的交叉熵是 H ( P , P ) = H ( P ) H(P, P)= H(P) H ( P , P ) = H ( P ) 。
softmax 的導數#
Copy l ( y , y ^ ) = − ∑ j = 1 q y j log exp ( o j ) ∑ k = 1 q exp ( o k ) = ∑ j = 1 q y j log ∑ k = 1 q exp ( o k ) − ∑ j = 1 q y j o j = log ∑ k = 1 q exp ( o k ) − ∑ j = 1 q y j o j . \begin{aligned}
l(\mathbf{y}, \hat{\mathbf{y}}) &= - \sum_{j=1}^q y_j \log \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} \\
&= \sum_{j=1}^q y_j \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j\\
&= \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j.
\end{aligned} l ( y , y ^ ) = − j = 1 ∑ q y j log ∑ k = 1 q exp ( o k ) exp ( o j ) = j = 1 ∑ q y j log k = 1 ∑ q exp ( o k ) − j = 1 ∑ q y j o j = log k = 1 ∑ q exp ( o k ) − j = 1 ∑ q y j o j .
Copy ∂ o j l ( y , y ^ ) = exp ( o j ) ∑ k = 1 q exp ( o k ) − y j = s o f t m a x ( o ) j − y j . \partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) = \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j. ∂ o j l ( y , y ^ ) = ∑ k = 1 q exp ( o k ) exp ( o j ) − y j = softmax ( o ) j − y j .
層概念介紹
輸入維度(輸入數) feature dimensionality 為 d,輸出維度為 1。由於模型重點在於發生計算的地方,故計算層數時通常考慮輸出層而不考慮輸入層。可以將線性回歸模型視為僅由單個人工神經元組成的神經網絡,或稱為單層神經網絡。
對於線性回歸,每個輸入都與每個輸出相連,稱其為全連接層 fully-connected layer 或稠密層 dense layer 。
一些生物學基礎,挺有趣的,但是略去。摘錄一下發現的好玩的英語單詞。
樹突(dendrites ,輸入終端)
細胞核(nucleus ,CPU)
軸突(axon ,輸出線)
軸突端子(axon terminal ,輸出端子)
突觸(synapse )
提及關於全連接層開銷節省的文章,有空看一下,更新一篇博客出來 x
https://openreview.net/pdf?id=rcQdycl0zyk
BEYOND FULLY-CONNECTED LAYERS WITH QUATERNIONS: PARAMETERIZATION OF HYPERCOMPLEX MULTIPLICATIONS WITH 1/n PARAMETERS
社會科學家邓肯・盧斯於 1959 年在選擇模型(choice model)的理論基礎上發明了 softmax 函數
習題摘要#
什麼時候(使用解析解)可能比使用隨機梯度下降更好?這種方法何時會失效?
答:當數據集較小時,解析解可能比隨機梯度下降更好。然而,在大型數據集上,計算解析解可能會非常耗時,或者存在多個局部最小的情況。此外,當矩陣 X ⊤ X \mathbf X^\top \mathbf X X ⊤ X 不可逆時,解析解不存在。在這種情況下,需要使用正則化或數值優化方法。(注:w ∗ = ( X ⊤ X ) − 1 X ⊤ y . \mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}. w ∗ = ( X ⊤ X ) − 1 X ⊤ y . )
假定控制附加噪聲 ϵ \epsilon ϵ 的噪聲模型是指數分佈,也就是說,p ( ϵ ) = 1 2 exp ( − ∣ ϵ ∣ ) p(\epsilon) = \frac{1}{2} \exp(-|\epsilon|) p ( ϵ ) = 2 1 exp ( − ∣ ϵ ∣ ) 時,模型 − log P ( y ∣ X ) -\log P(\mathbf y \mid \mathbf X) − log P ( y ∣ X ) 下的負對數似然的解析解是不存在的,而用 SGD 在駐點附近梯度不會平滑地趨向於零,而是存在突變。
解決方案是
使用平滑的損失函數,可使用 MSE、Smooth L1 損失函數等。
調整學習率,逐漸減小學習率,使得在駐點附近的參數更新更加穩定
使用動量法或自適應學習率優化算法
如果我們將權重初始化為零,會發生什麼。算法仍然有效嗎?
如果將權重初始化為零,那麼每個神經元的輸出都是相同的,這意味著每個神經元學到的參數也是相同的。(為什麼?)因此,每個神經元都會更新相同的參數,最終導致所有神經元學到相同的特徵。因此,權重初始化為零會使算法失效。這樣就失去了神經網絡的優勢,即可以學到不同特徵的能力。
邏輯回歸和神經網絡有不同的權重初始化方法。對於邏輯回歸,可以將權重初始化為零,因為這是一個線性模型,梯度下降算法仍然可以更新它們。然而,對於神經網絡來說,將權重初始化為零可能會導致對稱性問題,並阻止隱藏單元學習不同的特徵。因此,最好使用隨機或其他方法來初始化神經網絡的權重。