《动手学深度学习2》之线性回归神经网络
0. 推荐资料
首先感谢在Datawhale的组织下,联合了李沐老师一起举办了本次的学习计划,在本次计划下也记录一下自己的学习过程。
本次学习教程的参考书籍:动手学深度学习
本次学习教程的参考视频:李沐老师b站视频
1. 前言
本书个人认为需要有线性、高等、概率论的基础,以及掌握一些基础的Pytorch框架知识,至少达到能看懂书中代码的程度。
2. 《动手深度学习》第3章----线性回归神经网络学习总结
线性回归及其损失函数、随机梯度下降
线性回归,最简单的理解就是初中学的y=ax+b,其中我们称a是x的权重,b称为偏置。现在我们拓展一下,现实生活中我们拿到的数据基本都是高维的,即有很多个特征,则可以进一步表示为 y = ω 1 x 1 + ω 2 x 2 + . . . + ω n x n + b y=\omega_1x_1+\omega_2x_2+...+\omega_nx_n+b y=ω1x1+ω2x2+...+ωnxn+b,也可以换一个表达式== y = ω T x ( i ) + b y=\omega^Tx^{(i)}+b y=ωTx(i)+b==,其中 ω T = [ ω 1 , ω 2 . . . ω n ] , x ( i ) = [ x 1 , x 2 , . . . , x n ] T \omega^T=[\omega_1,\omega_2...\omega_n],x^{(i)}=[x_1,x_2,...,x_n]^T ωT=[ω1,ω2...ωn],x(i)=[x1,x2,...,xn]T。
看到上面的表达式,可以知道x是我们输入的,称为数据,我们的目的是找到一组参数 ω \omega ω和b来拟合数据,可以理解为找到一个最好的模型去拟合数据,得到的y称为预测值,记为 y ^ \widehat{y} y ,那么最终公式就变为: y ^ = ω T x ( i ) + b \widehat{y}=\omega^Tx^{(i)}+b y =ωTx(i)+b。我们都知道预测值与真实值之前总会出现误差,即 y ^ ≠ y \widehat{y}\not=y y =y,这时候就有了损失函数(loss function),损失函数能够量化目标的实际值与预测值之间的差距,通常线性回归最常用的就是平方误差,其公式为: l ( i ) ( ω , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(\omega,b)=\frac{1}{2}(\widehat{y}^{(i)}-y^{(i)})^2 l(i)(ω,b)=21(y (i)−y(i))2,其中 y ^ ( i ) \widehat{y}^{(i)} y (i)表示样本i的预测值, y ( i ) y^{(i)} y(i)表示其相应的真实值。
如上图所示,就可以很好地帮助我们理解损失函数,蓝色圆圈表示真实的值,黑线就是我们模型拟合的结果,可以看两者之间存在一定的距离,即误差(如果模型把每个点都连接起来了,称为过拟合),前面说过我们的目标是找到一组参数
ω
\omega
ω和b来拟合数据,找到这组参数
ω
∗
,
b
∗
\omega^*,b^*
ω∗,b∗,能最小化在所有训练样本上的损失均值,怎么找呢?其公式为
L
(
ω
,
b
)
=
1
n
∑
i
=
1
n
l
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
ω
T
x
(
i
)
+
b
−
y
(
i
)
)
2
L(\omega,b)=\frac{1}{n}\sum_{i=1}^{n}l^{(i)}(w,b)=\frac{1}{n}\sum_{i=1}^{n}\frac{1}{2}(\omega^Tx^{(i)}+b-y^{(i)})^2
L(ω,b)=n1i=1∑nl(i)(w,b)=n1i=1∑n21(ωTx(i)+b−y(i))2, 通过该公式找出一组参数
ω
∗
,
b
∗
\omega^*,b^*
ω∗,b∗能最小化在所有训练样本上的总损失。
梯度下降: 它通过不断地在损失函数递减的方向上更新参数来降低误差,换句话就是想办法使真实值和预测值之间差异最小,因此就需要确定优化的方向以及实际走一步要多长,最常用的方法就是小批量随机梯度下降:其思想是因为每次更新都需要计算训练集上所有的样本,耗费时间太长,那么就抽取一部分样本来更新参数,用数学公式表示如下图:
其中
-
∣
β
∣
|β|
∣β∣表示每个小批量中的样本数,这也称为批量大小**(batch size)**
- batchsize不能太大:内存消耗增加;浪费计算资源,一个极端的情况是可能会重复选取很多差不多的样本,浪费计算资源
- b也不能太小:每次计算量太小,很难以并行,不能最大限度利用GPU资源
- η表示学习率(learning rate)。
常见的其他梯度下降策略有:
线性回归简单实现
这里咱偷个懒,直接粘贴李沐老师的代码了,有两个代码:
- https://zh-v2.d2l.ai/chapter_linear-networks/linear-regression-scratch.html
- https://zh-v2.d2l.ai/chapter_linear-networks/linear-regression-concise.html
Softmax及其损失函数
Softmax是用来解决分类问题的,一般在模型的输出层最后一层都会使用softmax,其思想是将多分类的结果以概率的形式展现出来,或者说你输入了一张猫的图片到模型,而模型有{猫,狗,鸡}三种类别,那么softmax会返回出三个类别的概率值(总和为1且每个类别不为负数),比如{0.8,0.1,0.1},然后选择概率最大的值并输出其类别:猫,到这里应该对softmax有一定了解了吧。
Softmax定义如下
s
o
f
t
m
a
x
(
X
)
i
j
=
e
x
p
(
X
i
j
)
∑
k
e
x
p
(
X
i
k
)
softmax(X)_{ij}=\frac{exp(X_{ij})}{\sum_{k} exp(X_{ik})}
softmax(X)ij=∑kexp(Xik)exp(Xij)
- 这里推荐一篇文章,帮助学习:详解softmax函数以及相关求导过程 - 知乎 (zhihu.com)
对数似然损失函数: softmax输出结果是对给定任意输入x的每个类的条件概率x。假设整个数据集{X,Y}有n个样本,索引i的样本有特征向量
x
(
i
)
x^{(i)}
x(i)和独热标签向量
y
(
i
)
y^{(i)}
y(i)组成,则将预测值与真实值进行比较
P
(
Y
∣
X
)
=
∏
i
=
1
n
P
(
y
(
i
)
∣
x
(
i
)
)
P(Y|X)=\prod_{i=1}^{n}P(y^{(i)}|x^{(i)})
P(Y∣X)=i=1∏nP(y(i)∣x(i))
然后进行对数转化,
其中,任何标签y和预测值 y ^ \widehat{y} y 的损失函数为: l ( y , y ^ ) = − ∑ i y i l o g y i ^ = − l o g y y ^ l(y,\hat{y})=-\sum_{i}y_{i}log\hat{y_{i}}=-log\hat{y_y} l(y,y^)=−∑iyilogyi^=−logyy^,该函数也通常被称为交叉熵损失(cross-entropy loss)。
3. 总结
以上就是关于本书的第3章总结,后续会更新第4章的内容。