开篇初衷#
以前看过李沐等人的动手学深度学习,觉得不错。但不重视总结和实践,感到愧对如此优质的学习材料。故写此篇,作学习路上的总结,并希望能给需要的人带来帮助。
限于篇幅,仅摘要理论部分。
习题解答参见 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 损失函数等。
调整学习率,逐渐减小学习率,使得在驻点附近的参数更新更加稳定
使用动量法或自适应学习率优化算法
如果我们将权重初始化为零,会发生什么。算法仍然有效吗?
如果将权重初始化为零,那么每个神经元的输出都是相同的,这意味着每个神经元学习到的参数也是相同的。(为什么?)因此,每个神经元都会更新相同的参数,最终导致所有神经元学习到相同的特征。因此,权重初始化为零会使算法失效。这样就失去了神经网络的优势,即可以学习到不同特征的能力。
逻辑回归和神经网络有不同的权重初始化方法。对于逻辑回归,可以将权重初始化为零,因为这是一个线性模型,梯度下降算法仍然可以更新它们。然而,对于神经网络来说,将权重初始化为零可能会导致对称性问题,并阻止隐藏单元学习不同的特征。因此,最好使用随机或其他方法来初始化神经网络的权重。