第三章-线性模型

开篇初衷

以前看过李沐等人的动手学深度学习，觉得不错。但不重视总结和实践，感到愧对如此优质的学习材料。故写此篇，作学习路上的总结，并希望能给需要的人带来帮助。
限于篇幅，仅摘要理论部分。

习题解答参见 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∈Rd\mathbf{w} \in \mathbb{R}^dw∈Rd，而 x∈Rd \mathbf{x} \in \mathbb{R}^dx∈Rd 是单个数据样本的特征。
对于特征集合X\mathbf{X}X， y^=Xw+b{\hat{\mathbf{y}}} = \mathbf{X} \mathbf{w} + by^​=Xw+b 给出了预测向量。

损失函数采用平方误差函数

Copyl(i)(w,b)=12(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)=21​(y^​(i)−y(i))2.

求和并对样本数取平均后

CopyL(w,b)=1n∑i=1nl(i)(w,b)=1n∑i=1n12(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)=n1​i=1∑n​l(i)(w,b)=n1​i=1∑n​21​(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∗=argminw,b​ L(w,b)，解析解为最小化 ∥y−Xw∥2\|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2∥y−Xw∥2 ，其对 w\mathbf{w}w 导数为 0，得

Copyw∗=(X⊤X)−1X⊤y.\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.w∗=(X⊤X)−1X⊤y.

SGD

对于更一般的问题，采用 gradient descent ，原理是沿梯度减少的方向更新。实际应用中出于计算量考虑，随机抽取小批量样本，称 minibatch stochastic gradient descent 。其更新过程如下：

Copyw←w−η∣B∣∑i∈B∂wl(i)(w,b),b←b−η∣B∣∑i∈B∂bl(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}wb​←w−∣B∣η​i∈B∑​∂w​l(i)(w,b),←b−∣B∣η​i∈B∑​∂b​l(i)(w,b).​

在上述线性模型中，具体来说就是

Copyw←w−η∣B∣∑i∈Bx(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}wb​←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) 时，

CopyP(y∣x)=12πσ2exp⁡(−12σ2(y−w⊤x−b)2).P(y∣X)=∏i=1np(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σ21​(y−w⊤x−b)2).=i=1∏n​p(y(i)∣x(i)).​

带入得

Copyargmin {−log⁡P(y∣X)}=argmin {∑i=1n12log⁡(2πσ2)+12σ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{−logP(y∣X)}argmin{i=1∑n​21​log(2πσ2)+2σ21​(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=Wx+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）。

Copyy^=softmax(o)y^j=exp⁡(oj)∑kexp⁡(ok)\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(ok​)exp(oj​)​​

于是，这样的 y^\hat{\mathbf{y}}y^​ 就可以当作 “概率预测输出” 了。从定义式可以看到 softmax 操作保持了大小次序，因此可以通过直接找到最大 ojo_joj​ 来找出最有可能的类别。

我们仍称 softmax 为线性模型 linear model, 因为其参数部分集中在线性部分。这是很好理解的。

在实际 GPU 计算中会被采取一种叫做矢量化的计算。

CopyX∈Rn×dW∈Rd×qb∈R1×qiO∈Rn×qY∈Rn×qO=XW+bY^=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∈Rn×dW∈Rd×qb∈R1×qiO∈Rn×qY∈Rn×qO=XW+bY^=softmax(O)​

小批量矢量化加快了 X\mathbf{X}X 和 W\mathbf{W}W 的矩阵 - 向量乘法。

类似地采取对数似然法，最小化负对数似然。比较不同的是损失函数为

Copyl(y,y^)=−∑j=1qyjlog⁡y^j.l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j. l(y,y^​)=−j=1∑q​yj​logy^​j​.

称之为交叉熵损失 cross-entropy loss ，是分类问题常用损失函数之一。

分布 PPP 的熵 entropy H[P]=∑j−P(j)log⁡P(j)H[P] = \sum_j - P(j) \log P(j)H[P]=∑j​−P(j)logP(j)，信息论的基本定理之一指出，为了对从分布 PPP 中随机抽取的数据进行编码，我们至少需要 H[P]H[P]H[P] 纳特 nat 对其进行编码。

如果我们很容易预测下一个数据，那么这个数据就很容易压缩。如果我们不能完全预测每一个事件，那么我们有时可能会感到 “惊异”。 我们可以把交叉熵想象为 “主观概率为 QQQ 的观察者在看到根据概率 PPP 生成的数据时的预期惊异”。
当 P=QP=QP=Q 时，交叉熵达到最低。在这种情况下，从 PPP 到 QQQ 的交叉熵是 H(P,P)=H(P)H(P, P)= H(P)H(P,P)=H(P) 。

softmax 的导数

Copyl(y,y^)=−∑j=1qyjlog⁡exp⁡(oj)∑k=1qexp⁡(ok)=∑j=1qyjlog⁡∑k=1qexp⁡(ok)−∑j=1qyjoj=log⁡∑k=1qexp⁡(ok)−∑j=1qyjoj.\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​yj​log∑k=1q​exp(ok​)exp(oj​)​=j=1∑q​yj​logk=1∑q​exp(ok​)−j=1∑q​yj​oj​=logk=1∑q​exp(ok​)−j=1∑q​yj​oj​.​

Copy∂ojl(y,y^)=exp⁡(oj)∑k=1qexp⁡(ok)−yj=softmax(o)j−yj.\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.∂oj​​l(y,y^​)=∑k=1q​exp(ok​)exp(oj​)​−yj​=softmax(o)j​−yj​.

其他

层概念介绍

输入维度（输入数） 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 XX⊤X 不可逆时，解析解不存在。在这种情况下，需要使用正则化或数值优化方法。（注：w∗=(X⊤X)−1X⊤y.\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.w∗=(X⊤X)−1X⊤y.）

假定控制附加噪声 ϵ\epsilonϵ 的噪声模型是指数分布，也就是说，p(ϵ)=12exp⁡(−∣ϵ∣)p(\epsilon) = \frac{1}{2} \exp(-|\epsilon|)p(ϵ)=21​exp(−∣ϵ∣) 时，模型 −log⁡P(y∣X)-\log P(\mathbf y \mid \mathbf X)−logP(y∣X) 下的负对数似然的解析解是不存在的，而用 SGD 在驻点附近梯度不会平滑地趋向于零，而是存在突变。

解决方案是

使用平滑的损失函数，可使用 MSE、Smooth L1 损失函数等。

调整学习率，逐渐减小学习率，使得在驻点附近的参数更新更加稳定

使用动量法或自适应学习率优化算法

如果我们将权重初始化为零，会发生什么。算法仍然有效吗？

如果将权重初始化为零，那么每个神经元的输出都是相同的，这意味着每个神经元学习到的参数也是相同的。（为什么？）因此，每个神经元都会更新相同的参数，最终导致所有神经元学习到相同的特征。因此，权重初始化为零会使算法失效。这样就失去了神经网络的优势，即可以学习到不同特征的能力。

逻辑回归和神经网络有不同的权重初始化方法。对于逻辑回归，可以将权重初始化为零，因为这是一个线性模型，梯度下降算法仍然可以更新它们。然而，对于神经网络来说，将权重初始化为零可能会导致对称性问题，并阻止隐藏单元学习不同的特征。因此，最好使用随机或其他方法来初始化神经网络的权重。