线性单元对输入作仿射组合,预测一个实数。本页推导平方损失的梯度,不使用经典感知机的硬阈值激活或按误分类更新的规则。
用线性单元做回归
训练通过调整权重和偏置,使选定损失最小化。这就是线性回归,不是神经元的生物学模型。《动手学深度学习》也采用相同的线性输出和半平方损失约定。
数学表示
给定输入 x1,x2,...,xn、对应权重 w1,w2,...,wn 及偏置项 b,线性单元的输出 y^ 为:
y^=i=1∑nwixi+b
在线性回归中,y^ 即为预测值,例如预测房屋价格。
损失函数
回归常用均方误差(MSE)。这里取其一半,以简化求导:
L(y,y^)=2N1i=1∑N(yi−y^i)2
其中 yi 为真实值,y^i 为预测值,N 为样本数。
梯度下降
梯度下降算法
为最小化损失函数,梯度下降按以下规则更新参数:
- wi(new)=wi(old)−α∂wi∂L
- b(new)=b(old)−α∂b∂L
这里 α 是学习率,控制优化过程中的步长。
导数计算
参数更新依赖损失函数对各参数的导数,需通过链式法则求解。对于简单的二次损失函数(L=21(y−y^)2),推导如下:
损失函数对预测值的导数
dy^dL=−(y−y^)
预测值对参数的偏导数
dbdy^=1
dw1dy^=x1
dw2dy^=x2
链式法则应用
结合上述结果,计算损失函数对各参数的梯度:
dbdL=dy^dL⋅dbdy^=−(y−y^)
dw1dL=dy^dL⋅dw1dy^=−(y−y^)⋅x1
dw2dL=dy^dL⋅dw2dy^=−(y−y^)⋅x2
更新规则
将导数代入梯度下降公式,参数迭代更新如下:
- w1(new)=w1(old)−α⋅[−(y−y^)⋅x1]
- w2(new)=w2(old)−α⋅[−(y−y^)⋅x2]
- b(new)=b(old)−α⋅[−(y−y^)]
通过反复迭代,梯度下降使 w1,w2 和 b 收敛至使损失函数最小的值,从而降低预测误差。
链式法则将损失的导数与预测的导数分开。同一方法可以扩展到非线性网络,但这里的模型关于输入仍是仿射的。
从单个样本到一个批次
公式中的 1/2 使损失等于均方误差的一半,求导时正好抵消平方项产生的 2。令 i 为样本下标、j 为特征下标,ri=y^i−yi,则全批次梯度为
∂wj∂L=N1i∑rixij,∂b∂L=N1i∑ri.
前面的标量公式对应 N=1。取 x=(2,−1)、y=3,所有参数初始为零,则 r=−3,梯度为 (∂L/∂w1,∂L/∂w2,∂L/∂b)=(−6,3,−3)。用 α=0.1 同时更新,得到 (w1,w2,b)=(0.6,−0.3,0.3)。预测值变为 1.8,半平方损失从 4.5 降到 0.72。
批量训练时,先用同一组参数计算并平均样本梯度,再更新。特征固定时,这个二次目标函数凸,但权重唯一还要求设计矩阵列满秩。收敛仍需要合适的步长。单个线性单元不能表达任意非线性关系,训练损失低也不能证明它对新数据预测得好。