动手学深度学习

动手学深度学习

GitHub地址:https://github.com/d2l-ai/d2l-zh

线性回归网络

线性回归

线性模型

\[\hat{\mathbf{y}}=\mathbf{Xw} + b\]

损失函数

\[l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^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.\]

\[\mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b).\]

解析解

线性回归的解可以用一个共识简单地表达出来,这类解叫做解析解。将偏置\(b\)合并到参数\(\mathbf{w}\)中,合并方法是所有参数的矩阵中附加一列。预测问题是最小化\(\|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2\)。这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小点。将损失关于\(\mathbf{w}\)的导数设为0,得到解析解: \[\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.\] 但不是所有问题都存在解析解。解析解可以进行很好的数学分析,但是对问题的限制很严格,无法广泛应用于深度学习。

随机梯度下降

随机梯度下降通过不断地在损失函数递减的方向上更新参数来降低误差。

梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(在这里可以称为梯度)。但是由于整个数据集可能会很大,遍历一遍的速度很慢,所以可以随机抽取一小批样本,这样的变体称为小批量随机梯度下降。

对于每次迭代,先随机抽样一个小批量\(\mathcal{B}\),计算小批量的平均损失关于模型参数的导数(或梯度)。最后,将梯度乘学习率\(\eta\),并从当前参数中减掉。

用数学公式表示为(\(\partial\)表示偏导数): \[(\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b).\] \[\begin{split}\begin{aligned} \mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b) = \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}} \partial_b l^{(i)}(\mathbf{w}, b) = b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right). \end{aligned}\end{split}\]

正态分布与平方损失

若随机变量\(x\)具有均值\(\mu\)和方差\(\sigma^2\)(标准差\(\sigma\)),其正态分布概率密度函数如下: \[p(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (x - \mu)^2\right).\]

1
2
3
def normal(x, mu, sigma):
p = 1 / math.sqrt(2 * math.pi * sigma**2)
return p * np.exp(-0.5 / sigma**2 * (x - mu)**2)

均方误差损失函数(简称均方损失)可以用于线性回归的一个原因是:假设观测中包含噪声,其中噪声服从正态分布。噪声正态分布如下式: \[y = \mathbf{w}^\top \mathbf{x} + b + \epsilon,\] 其中,\(\epsilon \sim \mathcal{N}(0, \sigma^2)\)

因此,我们现在可以写出通过给定\(\mathbf{x}\)的观测到特定\(y\)的似然(likelihood): \[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).\] 现在,根据极大似然估计法,参数\(\mathbf{w}\)\(b\)的最优值是使整个数据集的似然最大的值: \[P(\mathbf y \mid \mathbf X) = \prod_{i=1}^{n} p(y^{(i)}|\mathbf{x}^{(i)}).\] 使用对数来简化指数函数的乘积最大化问题,变为最小化负对数似然\(-\log P(\mathbf y \mid \mathbf X)\)\[-\log P(\mathbf y \mid \mathbf X) = \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.\]

softmax回归

softmax运算

不能将未规范化的预测\(o\)直接输出,因为没有限制这些数字的总和为1,且可能出现负值。运用softmax函数进行校准: \[\hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)}\] 这里,对于所有的\(j\)总有\(0 \leq \hat{y}_j \leq 1\)。输出最有可能的类别: \[\operatorname*{argmax}_j \hat y_j = \operatorname*{argmax}_j o_j.\]

小批量样本的矢量化

读入一个批量的样本\(\mathbf{X}\),特征维度(输入数量)为\(d\),批量大小为\(n\)。输出时有\(q\)个类别。那么小批量样本的特征为\(\mathbf{X} \in \mathbb{R}^{n \times d}\),权重为\(\mathbf{W} \in \mathbb{R}^{d \times q}\),偏置为\(\mathbf{b} \in \mathbb{R}^{1\times q}\)。softmax回归的矢量计算表达式为: \[\begin{split}\begin{aligned} \mathbf{O} &= \mathbf{X} \mathbf{W} + \mathbf{b}, \\ \hat{\mathbf{Y}} & = \mathrm{softmax}(\mathbf{O}). \end{aligned}\end{split}\]


动手学深度学习
http://k0145vin.xyz/2022/11/25/动手学深度学习/
作者
一瓶AD钙
发布于
2022年11月25日
许可协议