机器学习算法 —— 反向传播

本文详细介绍了反向传播算法及其在神经网络中的应用,包括梯度的概念、梯度下降法的工作原理以及如何通过链式求导更新神经网络中的权重。

一、简介

  反向传播算法,也叫BP(Backpropagation)算法,是一种在神经网络中用于根据误差更新各层连接权重的算法,其核心为梯度下降。


二、理论

 (1)梯度

  在二元函数的情形,设函数f(x,y){f(x,y)}f(x,y)在平面区域D{D}D内具有一阶连续偏导数,则对于每一点P0(x0,y0)∈D{P_0(x_0,y_0)\in{D}}P0(x0,y0)D,都可定出一个向量
fx(x0,y0)i+fy(x0,y0)j, {f_x(x_0,y_0)\mathbf{i}+f_y(x_0,y_0)\mathbf{j}}, fx(x0,y0)i+fy(x0,y0)j,这向量称为函数f(x,y){f(x,y)}f(x,y)在点P0(x0,y0){P_0(x_0,y_0)}P0(x0,y0)的梯度,记作gradf(x0,y0){\mathbf{grad}f(x_0,y_0)}gradf(x0,y0)∇f(x0,y0){\nabla{f(x_0,y_0)}}f(x0,y0),即
gradf(x0,y0)=∇f(x0,y0)=fx(x0,y0)i+fy(x0,y0)j. {\mathbf{grad}f(x_0,y_0)=\nabla{f(x_0,y_0)}=f_x(x_0,y_0)\mathbf{i}+f_y(x_0,y_0)\mathbf{j}}. gradf(x0,y0)=f(x0,y0)=fx(x0,y0)i+fy(x0,y0)j.

  这是同济版高等数学教材中对梯度的定义。根据梯度的定义我们可以看出梯度是一个向量,在k{k}k维空间中(k≥3{k\ge3}k3),函数某一点的梯度可以理解为在该点对其中k−1{k-1}k1维求偏导所得的k−1{k-1}k1个一维向量(即切线)的向量和。由此可知,函数在某点的梯度方向即为函数值增长最快的方向

 (2)梯度下降

  梯度下降(Gradient Descent)是一种常用的最优化算法,其思想是通过不断迭代,使初始解不断逼近最优解,而其核心就是梯度。
  在(1)中我们得出,函数在某点的梯度方向即为函数值增长最快的方向,所以梯度的反方向就是函数值减少最快的方向。在机器学习领域,我们常用梯度下降法优化损失函数的参数,使损失函数达到最小值,优化的依据就是梯度。
  梯度下降法的核心可用如下公式表示:
θ1=θ0−α∇F(θ0) {\theta_1=\theta_0-\alpha\nabla{F(\theta_0)}} θ1=θ0αF(θ0)其中θ0{\theta_0}θ0为原参数,θ1{\theta_1}θ1为更新后的参数,∇F(θ0){\nabla{F(\theta_0)}}F(θ0)为函数在θ0{\theta_0}θ0处的梯度,α{\alpha}α为学习率或步长,意为参数沿梯度方向“走多远”。使用梯度下降法即不断重复这一过程,当误差小于给定阈值后停止迭代,得到近似最优解。
  不难看出,这里的α{\alpha}α为超参数。α{\alpha}α的取值不宜过大也不宜过小,若过大则在更新时可能跳过最优解,若过小则会导致收敛过慢。
  若待优化函数为凸函数,则使用梯度下降法总能得到全局最优解;若为非凸函数,则可能到达局部最优解。
  本文中介绍梯度下降的只是最原始的形式,还有很多种梯度下降的优化算法,如SGD、Adam等,这里不再详细介绍。

 (3)反向传播

  当我们使用神经网络近似目标函数时通常使用反向传播算法,根据输出层的输出与真实值的误差更新各层间的权重。
  假设一个单隐藏层神经网络,记wjki{w^i_{jk}}wjki为第i{i}i层的第j{j}j个神经元与第i+1{i+1}i+1层的第k{k}k个神经元间的权重,记输入矩阵为Xi{X^i}Xi,偏置矩阵为Bi{B^i}Bi,输出矩阵为Yi{Y^i}Yi,激活后的输出矩阵为Zi{Z^i}Zi,假设激活函数为sigmoid{sigmoid}sigmoid,则
Yi=WiXi+Bi, {Y^i=W^iX^i+B^i}, Yi=WiXi+Bi,Zi=sigmoid(Yi), {Z^i=sigmoid(Y^i)}, Zi=sigmoid(Yi),Xi+1=Zi. {X^{i+1}=Z^i}. Xi+1=Zi.  实际上,我们使用梯度下降法近似的目标函数,是关于Z3{Z^3}Z3的损失函数L(Z3){L(Z^3)}L(Z3),而Z3{Z^3}Z3又是Y3{Y^3}Y3的函数,Y3{Y^3}Y3又是W3{W^3}W3的函数,所以通过不断在梯度的反方向上更新W{W}W,使损失函数达到最小值。
  当有多个输出神经元时,由于每一个输出神经元的值都与其上一层的所有神经元有权重连接,且这些权重有大有小,所以我们将L(Z3){L(Z^3)}L(Z3)的值按比例分配给其上一层的每个神经元。接下来以两个输出神经元的情况为例。
  记真实值为R{R}R,令
L(Z3)=12∑(R−Z3)2, {L(Z^3)=\frac{1}{2}\sum(R-Z^3)^2}, L(Z3)=21(RZ3)2,w112{w^2_{11}}w112分得的权重为
l12=l112+l122=w112∑j=1nwj12⋅12(r1−z13)2+w122∑j=1nwj12⋅12(r2−z23)2, {l^2_1=l^2_{11}+l^2_{12}=\frac{w^2_{11}}{\sum^{n}_{j=1}{w^2_{j1}}}\cdot{\frac{1}{2}(r_1-z^3_1)^2}+\frac{w^2_{12}}{\sum^{n}_{j=1}{w^2_{j1}}}\cdot{\frac{1}{2}(r_2-z^3_2)^2}}, l12=l112+l122=j=1nwj12w11221(r1z13)2+j=1nwj12w12221(r2z23)2,所以当我们更新w112{w^2_{11}}w112时,根据(2)中的公式得
w112^=w112−α∂l12∂w112, {\hat{w^2_{11}}=w^2_{11}-\alpha\frac{\partial{l^2_1}}{\partial{w^2_{11}}}}, w112^=w112αw112l12,其中
∂l12∂w112=∂l12∂Z2⋅∂Z2∂Y2⋅∂Y2∂w112=−(R−Z2)⋅sigmoid(Y2)⋅(1−sigmoid(Y2))⋅X2. {\frac{\partial{l^2_1}}{\partial{w^2_{11}}}=\frac{\partial{l^2_1}}{\partial{Z^2}}\cdot\frac{\partial{Z^2}}{\partial{Y^2}}\cdot\frac{\partial{Y^2}}{\partial{w^2_{11}}}=-(R-Z^2)\cdot sigmoid(Y^2)\cdot(1-sigmoid(Y^2))\cdot X^2}. w112l12=Z2l12Y2Z2w112Y2=(RZ2)sigmoid(Y2)(1sigmoid(Y2))X2.  其余各层同理。


三、总结

  总的来说,神经网络中的反向传播算法就是通过链式求导,将整体误差分摊到网络中的每个权重上,并通过梯度下降对权重进行优化。通过迭代大量的数据集,使损失函数的参数逐渐收敛至最优解,从而使网络更好地对数据进行拟合。
  当然,这种算法也有一些缺点,比如当网络深度较高时会出现梯度消失现象等,这里不再详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoCalledHBY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值