线性回归
在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。神经网络的整个训练过程,包括:定义简单的神经网络架构,数据处理,指定损失函数和如何训练模型。经典统计学西技术中的线性回归和softmax回归可以视为线性神经网络。
3.1 线性回归
回归(regression)是指一类为一个或多个自变量与因变量之间关系建模的方法。在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。
根据已有数据分布来预测可能的新数据。被称为回归。
3.1.1 线性回归的基本元素
线性回归(linear regression)
- 损失函数
在我们开始考虑如何用模型拟合(fit)数据之前,我们需要确定一个拟合程度度量。损失函数能够量化目标实际值与预测值之间的差距。
通俗来讲,就是模型代表的分布和真实分布之差。一般会选择非负数作为损失,且数值越小表示损失越小,完美预测时损失为0.
回归问题中最常用的损失函数是平方误差函数。预测值为y0,真实值为y,平方差公式如下:
l
(
i
)
(
w
,
b
)
=
1
2
(
y
0
−
y
)
2
l^{(i)}(w,b)=\frac{1}{2}(y_0-y)^2
l(i)(w,b)=21(y0−y)2
即为预测值减去真实值的平方乘以0.5
由于平方误差函数中的二次方项,估计值y0和观察值y之间较大^的差异将贡献更大的损失。为了度量模型在整个数据集上的质量,需要计算在训练集n个样本上的损失均值(也等于损失求和)
L
(
w
,
b
)
=
1
n
∑
i
=
1
n
l
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
w
T
x
(
i
)
,
b
−
y
(
i
)
)
n
L(w,b)=\frac{1}{n}\sum_{i=1}^{n}{l^{(i)}(w,b)}=\frac{1}{n} \sum_{i=1}^{n}{\frac{1}{2}(w^Tx^{(i)},b-y^{(i)})}{n}
L(w,b)=n1i=1∑nl(i)(w,b)=n1i=1∑n21(wTx(i),b−y(i))n
计算损失函数的平均值
在训练模型时,我们希望寻找一组参数(w* ,b*),这组参数能最小化在所有训练样本上的总损失。如下式子:
W
∗
,
b
∗
=
a
r
g
m
i
n
w
,
b
L
(
w
,
b
)
W*,b*=argmin_{w,b}L(w,b)
W∗,b∗=argminw,bL(w,b)
- 解析解
线性回归的解可以用一个公式简单地表达出来,这类解叫作解析解(analytical solution)。
像线性回归这样的简单问题存在解析解,但并不是所有问题都存在解析解。解析解可以进行很好的数学分析,但解析解的现在很严格,导致它无法应用在深度学习里。
小批量随机梯度下降
- 梯度下降(gradient descent)
通过不断地在损失函数递减的方向上更新参数来降低误差。
梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(在这里有可以称为梯度)。但实际中执行可能会非常慢:因为这每一次更新参数前,我们必须便利整个数据集。
因此,我们通常会长每次需要计算更新的时候随机抽取一批样本,这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent)。
在每次迭代中,我们首先随机抽样一个小批量B,它是由固定数量的训练样本组成的。然后,我们计算小批量的平均损失关于模型参数的导数(也可以称作梯度)。最后,我们将梯度乘以一个预先确定的正数η,并从当前参数的值中减掉。
我们用下面的数学公式来表示这一更新过程(∂表⽰偏导数):
总结一下,算法步骤如下:
(1)初始化模型参数的值,如随机初始化
(2)从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤。对于平方损失和仿射变换,我们考研明确地写成如下形式:
|B|表⽰每个小批量中的样本数,这也称为批量⼤小(batch size)。η表⽰学习率(learning rate)。批量大小和学习率的值通常是手动预先指定,而不是通过模型训练得到的。这些考研调整但不在训练过程中更新的参数背称为超参数(hyperparameter)。调参(hyperparameter turning)是选择超参数的过程。超参数通常是我们根据迭代结果来调整的,而训练迭代结果实在独立的严重数据集(validation dataset)上评估的到的。
在训练了预先确定的若干迭代次数后(或者直到满足某些其他停止条件后),我们记录下模型参数的估计值,表示为w0 ,b0。但是,即使我们的函数确实是线性的且无噪声,这些估计在也不会是损失函数真正地道道最小值。因为算法会使损失想最小值收敛,但却不能在有限的步数内非常精确地达到最小值。
3.1.2 矢量化加速
3.1.3 正态分布与平方损失
接下来,我们通过对噪声分布的假设来解读平方损失目标函数。
正态分布(normal distribution),也称为高斯分布(Gaussian distribution),最早由德国数学家高斯(Gauss)应用于天文学研究。正态分布和线性回归之间的关系很密切。简单的说,若随机变量x均有均值µ和方差σ2(标准差),其正态分布概率密度函数如下:
设计一个python函数来计算正态分布:
import numpy as np
import torch
import math
import matplotlib.pyplot as plt
from d2l import torch as d2l
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)
# 使用numpy进行可视化
x=torch.arange(-7,7,0.01)
print(x)
# 均值和标准差
params=[(0,1),(0,2),(3,1)]
d2l.plot(x,[normal(x,mu,sigma) for mu,sigma in params],xlabel='x',ylabel='p(x)',figsize=(4.5,2.5),
legend=[f'mean {mu},std {sigma}'for mu,sigma in params])
plt.show()
for mu,sigma in params:
print(normal(x,mu,sigma))
均方误差函数(简称均方损失)可以用于线性回归的一个原因是:我们假设了观测中包含噪声,其中噪声服从正态分布。噪声正态分布如下式子:
因此,我们现在可以通过给定的x观测到特定y的可能性(likelihood):
现在,根据最大释然估计法,参数w和b的最优值是使整个数据集的可能性最大的值:
根据最大似然估计法选择的估计量称为最大似然估计量。虽然使许多指数函数的乘积最大化看起来很困难,但我们可以做不改变目标的前提下,通过最大化似然对数简化。由于里是原因,优化通常是说最小化而不是最大化。我们可以改为最小化负对数似然− log P(y | X)。由此可以得到的数学公式是:
在高斯噪声的假设下,最小化均方误差等价于对线性模型的最大似然估计。
3.1.4 从线性回归到深度网络
- 神经网络图
可以将线性回归模型描述为一个神经网络。如图,该图纸显示每个输入如何连接到输出,隐去了权重和偏置的值。
由于模型重点在发生计算的地方,所以通常我们在计算层数时不考虑输入层。也就是说,上图中的神经网络层数为1.我们可以将线性回归模型视为仅由单个人工神经元组成的神经网络,或称为单层升级网络。
由于模型重点在发生计算的地方,所以通常我们在计算层数时不考虑输入层。也就是说,上图中的神经网络层数为1.我们可以将线性回归模型视为仅由单个人工神经元组成的神经网络,或称为单层升级网络。
每个输入都与每个输出相连,称为全连接层(fully-connected layer),或称为稠密层(dense layer)。