lw2333

lw2333

Keep calm and study.

第三章-线性模型

开篇初衷#

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

习题解答参见 https://datawhalechina.github.io/d2l-ai-solutions-manual/#/

线性回归#

模型 y^=wx+b.\hat{y} = \mathbf{w}^\top \mathbf{x} + b. 其中 wRd\mathbf{w} \in \mathbb{R}^d,而 xRd \mathbf{x} \in \mathbb{R}^d 是单个数据样本的特征。
对于特征集合X\mathbf{X}y^=Xw+b{\hat{\mathbf{y}}} = \mathbf{X} \mathbf{w} + b 给出了预测向量。

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

l(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(w,b)=1ni=1nl(i)(w,b)=1ni=1n12(wx(i)+by(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.

故希望找到 w,b=argminw,b L(w,b)\mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b),解析解为最小化 yXw2\|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 ,其对 w\mathbf{w} 导数为 0,得

w=(XX)1Xy.\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.

SGD#

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

wwηBiBwl(i)(w,b),bbηBiBbl(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}

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

wwηBiBx(i)(wx(i)+by(i)),bbηBiB(wx(i)+by(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}

最小化均方误和合理性#

在噪声为高斯噪声时,最小化均方误等价对线性模型的极大似然估计。故最小化均方误差是合理的。论证如下:

y=wx+b+ϵ,y = \mathbf{w}^\top \mathbf{x} + b + \epsilon, ϵN(0,σ2)\epsilon \sim \mathcal{N}(0, \sigma^2) 时,

P(yx)=12πσ2exp(12σ2(ywxb)2).P(yX)=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}

带入得

argmin{logP(yX)}=argmin{i=1n12log(2πσ2)+12σ2(y(i)wx(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}

第一项是常数,第二项常系数可忽略。于是可以看到,在噪声为高斯噪声时,最小化均方误等价对线性模型的极大似然估计。


分类问题 - 引#

主要用于解决分类问题。

首先,对于分类问题输出的编码,采取独热向量编码 one-hot encoding 。譬如:芙莉莲,修塔尔克和费伦,用 (1,0,0)(1,0,0) 编码芙莉莲,用 (0,1,0)(0,1,0) 编码修塔尔克,用 (0,0,1)(0,0,1) 编码费伦。
不用 1,2,3 等自然数编码是因为:自然数是线性的,而分类问题中这种线性性并不天然存在(譬如我们不能说芙莉莲相比于费伦和修塔尔克长得更像,而用自然数编码某种程度上就暗示了这一点)。

其次,对于分类问题的网络结构,其采取和线性模型类似的单层网络,不同在于分类问题输出层是一个向量(而非实数)。称其为(未规范化的)预测 logit

对单数据而言,矩阵乘法形式是 o=Wx+b\mathbf{o} = \mathbf{W} \mathbf{x} + \mathbf{b} 。其中 W\mathbf{W}b\mathbf{b} 是待学参数。
比如对一个 4 特征 3 分类的问题,x \mathbf{x} 是一个 4-1 矩阵,W\mathbf{W} 是一个 3-4 矩阵,b\mathbf{b}o\mathbf{o} 都是一个 3-1 矩阵。


可见全连接层开销巨大。一篇文章指出节省开销的方法(“其他” )


分类问题 - softmax 回归#

那么我们已经有了输出 o\mathbf{o} ,然而由于 o\mathbf{o} 不满足概率公理定义,所以我们通过所谓 softmax 操作使其满足归一化、校准(calibration)。

y^=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^\hat{\mathbf{y}} 就可以当作 “概率预测输出” 了。从定义式可以看到 softmax 操作保持了大小次序,因此可以通过直接找到最大 ojo_j 来找出最有可能的类别。

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

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

XRn×dWRd×qbR1×qiORn×qYRn×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\mathbf{X}W\mathbf{W} 的矩阵 - 向量乘法。

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

l(y,y^)=j=1qyjlogy^j.l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j.

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

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

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

softmax 的导数#

l(y,y^)=j=1qyjlogexp(oj)k=1qexp(ok)=j=1qyjlogk=1qexp(ok)j=1qyjoj=logk=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}
ojl(y,y^)=exp(oj)k=1qexp(ok)yj=softmax(o)jyj.\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.

其他#

  • 层概念介绍
    • 输入维度(输入数) 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 函数

习题摘要#

什么时候(使用解析解)可能比使用随机梯度下降更好?这种方法何时会失效?

  • 答:当数据集较小时,解析解可能比随机梯度下降更好。然而,在大型数据集上,计算解析解可能会非常耗时,或者存在多个局部最小的情况。此外,当矩阵 XX\mathbf X^\top \mathbf X 不可逆时,解析解不存在。在这种情况下,需要使用正则化或数值优化方法。(注:w=(XX)1Xy.\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.

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

  • 解决方案是
    • 使用平滑的损失函数,可使用 MSE、Smooth L1 损失函数等。
    • 调整学习率,逐渐减小学习率,使得在驻点附近的参数更新更加稳定
    • 使用动量法或自适应学习率优化算法

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

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

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。