当前位置: 首页 > news >正文

神经网络—— 优化

神经网络—— 优化

01 梯度下降法

核心概念

  • 偏导数:函数曲线上的切线斜率,即函数在某一点的变化率。对于多元函数,偏导数表示函数在坐标轴正方向上的变化率。

    • 偏导数fx(x,y)f_{x}(x, y)fx(x,y):曲面被平面y=y0y=y_{0}y=y0截取后,所得曲线在点M0M_{0}M0处的切线M0TxM_{0}T_{x}M0Tx对x轴的斜率。
    • 偏导数fy(x,y)f_{y}(x, y)fy(x,y):曲面被平面x=x0x=x_{0}x=x0截取后,所得曲线在点M0M_{0}M0处的切线M0TyM_{0}T_{y}M0Ty对y轴的斜率。
  • 方向导数:用于研究函数沿各个不同方向的变化率,是一个标量。其数学定义为:
    ∂f∂l∣(x0,y0)=lim⁡Δx→0Δy→0f(x0+Δx,y0+Δy)−f(x0,y0)Δx2+Δy2\left.\frac{\partial f}{\partial l}\right|_{\left(x_{0}, y_{0}\right)}=\lim _{\substack{\Delta x \to 0 \\ \Delta y \to 0}} \frac{f\left(x_{0}+\Delta x, y_{0}+\Delta y\right)-f\left(x_{0}, y_{0}\right)}{\sqrt{\Delta x^{2}+\Delta y^{2}}}lf(x0,y0)=limΔx0Δy0Δx2+Δy2f(x0+Δx,y0+Δy)f(x0,y0)

  • 梯度

    • 本质是矢量,其方向是方向导数取得最大值的方向,梯度的模等于最大方向导数的值。
    • 单变量函数中,梯度即函数的微分,代表函数在某一给定点的切线斜率(或该点的上升最快方向)。
    • 多变量函数中,梯度是一个向量,指明函数在给定点的上升最快方向。
    • 存在条件:函数需具有一阶连续偏导数。
    • 几何性质:梯度垂直于原函数的等值面(如x2+y2=Cx^2+y^2=Cx2+y2=C的梯度∇w=(2x,2y)\nabla w=(2x,2y)w=(2x,2y)垂直于该圆)。
  • 单变量与多变量导数

    • 单变量函数导数:df(x)dx=lim⁡h→0f(x+h)−f(x)h\frac{d f(x)}{d x}=\lim _{h \to 0} \frac{f(x+h)-f(x)}{h}dxdf(x)=limh0hf(x+h)f(x)
    • 多变量函数中,梯度是偏导数构成的向量。

梯度下降法的核心思想与算法

核心思想

梯度指示函数的“上升最快方向”,因此负梯度方向就是函数的“下降最快方向”。通过沿负梯度方向逐步迭代更新参数,可找到函数的局部最优值。其数学保证是:若步长足够小,沿负梯度方向移动时,函数值必然减小。

算法步骤
  1. 随机选择初始点x0x_{0}x0
  2. 迭代更新参数直至收敛,更新公式为:
    xt+1=xt−γt∇f(xt)x_{t+1}=x_{t}-\gamma _{t}\nabla f(x_{t})xt+1=xtγtf(xt)
    其中,γt\gamma_{t}γt为第ttt步的步长(有时也称为学习率)。
  3. 收敛判定条件:当梯度的模小于某一极小值ϵ\epsilonϵϵ>0\epsilon>0ϵ>0)时,即∥∇f(xt)∥≤ϵ\left\|\nabla f(x_{t})\right\| ≤\epsilonf(xt)ϵ,停止迭代。

步长(学习率)的影响

以函数f(x)=x2f(x)=x^2f(x)=x2为例(初始点x(0)=−4x(0)=-4x(0)=4),步长对迭代过程的影响如下:

  • 步长为0.8时

    • 第1步更新:x(1)=−4−0.8×2×(−4)=2.4x(1)=-4 - 0.8×2×(-4)=2.4x(1)=40.8×2×(4)=2.4
    • 第2步更新:x(2)=2.4−0.8×2×2.4=0.4x(2)=2.4 - 0.8×2×2.4=0.4x(2)=2.40.8×2×2.4=0.4(逐步向最优值0靠近)。
  • 不同步长的全局影响(通过损失函数曲线观察):

    • 学习率过高:损失函数波动剧烈,甚至可能不收敛(参数在最优值附近震荡或偏离)。
    • 学习率过低:损失函数下降缓慢,迭代次数多,训练效率低。
    • 学习率适中:损失函数平稳下降,快速趋近最优值。

高维函数的优化与牛顿法

对于高维函数f(x)f(x)f(x),优化目标是找到梯度为0的点(∇f(x)=0\nabla f(x)=0f(x)=0)。利用泰勒展开近似梯度:
∇f(x+h)=∇f(x)+hTHf(x)+O(∣∣h∣∣2)\nabla f(x+h)=\nabla f(x)+h^{T}H_{f}(x)+O(||h||^{2})f(x+h)=f(x)+hTHf(x)+O(∣∣h2)
其中,HfH_{f}Hf为函数fff的黑塞矩阵(二阶导数矩阵)。基于此,牛顿法的参数更新公式为:
xn+1=xn−Hf(xn)−1∇f(xn)x_{n+1}=x_{n}-H_{f}(x_{n})^{-1}\nabla f(x_{n})xn+1=xnHf(xn)1f(xn)
牛顿法收敛速度快于普通梯度下降,但计算黑塞矩阵的逆复杂度高(尤其高维场景)。

02 批量大小优化(随机梯度下降)

批量大小的分类与定义

批量大小(batch size)指每次迭代时用于计算梯度的训练样本数量,根据批量大小可将梯度下降分为三类:

类型批量大小核心特点
随机梯度下降(SGD)batch_size=1每次随机选1个样本更新参数;更新速度快,但方向随机性大,收敛波动明显。
小批量梯度下降(MBGD)1<batch_size<N(N为总样本数)综合SGD与BGD的优点:更新速度较快,波动较小;支持矩阵运算优化,无内存瓶颈。
朴素梯度下降(BGD)batch_size=N每次用全部样本计算梯度;更新方向准确、稳定,但训练时间长,不支持在线更新。

各方法的数学推导(以线性判别函数为例)

假设判别函数为fw(x(i))=wTx(i)f_{w}(x^{(i)})=w^{T} x^{(i)}fw(x(i))=wTx(i),损失函数为均方误差(MSE),三种方法的梯度计算与参数更新公式如下:

1. 随机梯度下降(SGD)
  • 目标函数(单样本):L(i)(w)=(fw(x(i))−y(i))2L^{(i)}(w)=(f_{w}(x^{(i)})-y^{(i)})^{2}L(i)(w)=(fw(x(i))y(i))2
  • 梯度计算:∇L(i)(w)∇wj=(fw(x(i))−y(i))xj(i)\frac{\nabla L^{(i)}(w)}{\nabla w_{j}}=\left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wjL(i)(w)=(fw(x(i))y(i))xj(i)
  • 参数更新:wj:=wj−η⋅(fw(x(i))−y(i))xj(i)w_{j}:=w_{j}-\eta \cdot \left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wj:=wjη(fw(x(i))y(i))xj(i)
    η\etaη为学习率,每次仅用1个样本更新)。
2. 朴素梯度下降(BGD)
  • 目标函数(全样本):L(w)=1M∑i=1M(fw(x(i))−y(i))2L(w)=\frac{1}{M} \sum_{i=1}^{M}(f_{w}(x^{(i)})-y^{(i)})^{2}L(w)=M1i=1M(fw(x(i))y(i))2M=NM=NM=N
  • 梯度计算:∇L(w)∇wj=1M∑i=1M(fw(x(i))−y(i))xj(i)\frac{\nabla L(w)}{\nabla w_{j}}=\frac{1}{M} \sum_{i=1}^{M}\left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wjL(w)=M1i=1M(fw(x(i))y(i))xj(i)
  • 参数更新:wj:=wj−η⋅1M∑i=1M(fw(x(i))−y(i))xj(i)w_{j}:=w_{j}-\eta \cdot \frac{1}{M} \sum_{i=1}^{M}\left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wj:=wjηM1i=1M(fw(x(i))y(i))xj(i)
    (每次用全部样本计算平均梯度,更新方向稳定)。
3. 小批量梯度下降(MBGD)
  • 目标函数(小批量样本):L(w)=1k∑i=1k(fw(x(i))−y(i))2L(w)=\frac{1}{k} \sum_{i=1}^{k}(f_{w}(x^{(i)})-y^{(i)})^{2}L(w)=k1i=1k(fw(x(i))y(i))2k<Nk<Nk<N
  • 梯度计算:∇L(w)∇wj=1k∑i=1k(fw(x(i))−y(i))xj(i)\frac{\nabla L(w)}{\nabla w_{j}}=\frac{1}{k} \sum_{i=1}^{k}\left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wjL(w)=k1i=1k(fw(x(i))y(i))xj(i)
  • 参数更新:wj:=wj−η⋅1k∑i=1k(fw(x(i))−y(i))xj(i)w_{j}:=w_{j}-\eta \cdot \frac{1}{k} \sum_{i=1}^{k}\left(f_{w}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}wj:=wjηk1i=1k(fw(x(i))y(i))xj(i)
    (平衡更新速度与稳定性,为当前主流方法)。

各方法的损失曲线对比

  • BGD:损失曲线平滑,稳定下降,但下降速度慢(迭代次数少,每次迭代计算量大)。
  • SGD:损失曲线振幅大,波动剧烈,收敛过程不稳定,但初始下降快。
  • MBGD:损失曲线介于两者之间,波动较小,下降速度适中,兼顾效率与稳定性。

03 类别优化(进阶优化算法)

为解决普通SGD收敛慢、波动大的问题,研究者提出了多种进阶优化算法,核心思路包括“优化梯度方向”和“个性化梯度衰减”。

1. 动量法(Momentum)

核心思想

模拟物理中“小球下坡”的动量效应:小球在梯度方向上运动时会积累速度,同时通过“摩擦力”抑制震荡。即使梯度方向变化,动量也能使参数沿之前的趋势继续更新,加快收敛并减少波动。

数学公式
  • 速度更新(积累动量):vt=αvt−1−η∇f(xt−1)v_{t}=\alpha v_{t-1}-\eta \nabla f\left(x_{t-1}\right)vt=αvt1ηf(xt1)
    α\alphaα为动量系数,通常取0.5、0.9或0.99,可随迭代逐步增大,如从0.5增至0.99)。
  • 参数更新:xt=xt−1+vtx_{t}=x_{t-1}+v_{t}xt=xt1+vt
特点
  • 抑制高曲率方向的震荡(如鞍点或局部极值附近)。
  • 在梯度平缓且方向一致的区域,积累速度,加快收敛。
  • 无法保证找到全局最优,但能有效逃离较差的局部最优。

2. 内斯特罗夫动量法(Nesterov Momentum)

核心改进

对普通动量法的“前瞻式”优化:先沿之前积累的动量方向大步移动,再根据新位置的梯度进行修正,避免“过度冲过”最优值。

数学公式

vt=αvt−1−η∇f(xt−1+αvt−1)v_{t}=\alpha v_{t-1}-\eta \nabla f\left(x_{t-1}+\alpha v_{t-1}\right)vt=αvt1ηf(xt1+αvt1)
xt=xt−1+vtx_{t}=x_{t-1}+v_{t}xt=xt1+vt

特点
  • 相比普通动量法,对参数更新方向的修正更及时,收敛更稳定。
  • 尤其适用于梯度变化较大的场景,减少“震荡冲过”的风险。

3. 自适应梯度算法(Adagrad)

核心思想

为不同参数分配“个性化学习率”:梯度较大的参数(更新频繁),学习率自动减小;梯度较小的参数(更新缓慢),学习率自动增大,避免在平缓区域徘徊。

数学公式
  • 累积梯度平方(缓存):cache+=dx2cache += dx^2cache+=dx2
  • 参数更新:x+=−ηcache+ϵ⋅dxx += -\frac{\eta}{\sqrt{cache}+\epsilon} \cdot dxx+=cache+ϵηdx
    ϵ=10−7\epsilon=10^{-7}ϵ=107,避免分母为0)。
优缺点
  • 优点:无需手动调整学习率,对稀疏数据(部分参数梯度小)友好。
  • 缺点:梯度平方累积会导致分母越来越大,最终学习率趋近于0,训练后期停止更新。

4. 均方根传播算法(RMSProp)

核心改进

解决Adagrad“学习率衰减至0”的问题:用指数加权移动平均替代梯度平方的累积,减少久远梯度的影响,保留近期梯度信息。

数学公式
  • 移动平均梯度平方:St=βSt−1+(1−β)∇f2(xt)S_{t}=\beta S_{t-1}+(1-\beta) \nabla f^{2}\left(x_{t}\right)St=βSt1+(1β)f2(xt)
    β=0.999\beta=0.999β=0.999,权重随时间指数衰减,近期梯度权重更大)。
  • 参数更新:xt+1=xt−ηSt+ε∇f(xt)x_{t+1}=x_{t}-\frac{\eta}{\sqrt{S_{t}}+\varepsilon} \nabla f\left(x_{t}\right)xt+1=xtSt+εηf(xt)ε=10−6\varepsilon=10^{-6}ε=106)。
特点
  • 梯度平方的移动平均满足St=(1−β)∑i=0∞βi∇f2(xt−i)S_t=(1-\beta)\sum_{i=0}^{\infty}\beta^i \nabla f^2(x_{t-i})St=(1β)i=0βif2(xti),权重和为1,避免学习率过早衰减。
  • 适用于非平稳目标(如在线学习),收敛稳定。

5. 学习率衰减

上述算法(SGD、Momentum、Adagrad、RMSProp等)均需设置初始学习率,为进一步优化收敛,可采用学习率衰减策略

  • 步长衰减:每经过一定迭代轮次(如每10轮),学习率减半(如η=η0/2\eta=\eta_0/2η=η0/2)。
  • 指数衰减:学习率随轮次指数下降(如η=η0⋅e−kt\eta=\eta_0 \cdot e^{-kt}η=η0ektkkk为衰减系数)。
  • 1/t衰减:学习率与迭代次数成反比(如η=η0/(1+kt)\eta=\eta_0/(1+kt)η=η0/(1+kt))。

04 反向传播算法

算法背景与核心意义

  • 提出时间:1986年,解决了多层人工神经网络(ANN)的权重更新问题。
  • 核心思想:将网络的全局误差从输出层反向传播至输入层,根据误差对各层权重进行比例修正,是目前最重要的神经网络学习算法。
  • 关键依赖:基于链式法则计算误差对各权重的偏导数,依赖Sigmoid等可微激活函数实现误差传递。

算法流程

反向传播算法分为“前向传播”和“反向传播”两个阶段:

1. 前向传播(Feed-forward)

从输入层到输出层计算各节点的输出值:

  • 对于某一层节点iii,输入zi=∑jwjiyj+biz_i=\sum_{j}w_{ji}y_j + b_izi=jwjiyj+biwjiw_{ji}wji为前一层节点jjj到当前节点iii的权重,bib_ibi为偏置)。
  • 输出yi=f(zi)y_i=f(z_i)yi=f(zi)fff为激活函数,如Sigmoid函数f(x)=11+e−xf(x)=\frac{1}{1+e^{-x}}f(x)=1+ex1)。

示例(二层隐藏层网络):

  • 第一层隐藏层(节点3、4):z3=w31x1+w32x2+b3z_3=w_{31}x_1 + w_{32}x_2 + b_3z3=w31x1+w32x2+b3y3=f(z3)y_3=f(z_3)y3=f(z3)z4、y4z_4、y_4z4y4同理。
  • 第二层隐藏层(节点5):z5=w53y3+w54y4+b5z_5=w_{53}y_3 + w_{54}y_4 + b_5z5=w53y3+w54y4+b5y5=f(z5)y_5=f(z_5)y5=f(z5)
  • 输出层(节点6):z6=w65y5+b6z_6=w_{65}y_5 + b_6z6=w65y5+b6y6=f(z6)y_6=f(z_6)y6=f(z6)(最终输出)。
2. 反向传播(Back-propagation)

从输出层到输入层计算误差对各权重的偏导数,更新权重:

  • 误差定义:采用均方误差(MSE),E=12∑j(tj−oj)2E=\frac{1}{2}\sum_{j}(t_j - o_j)^2E=21j(tjoj)2tjt_jtj为目标输出,ojo_joj为实际输出)。
  • 核心工具:链式法则,即误差对权重的偏导数=误差对输出的偏导数×输出对输入的偏导数×输入对权重的偏导数。

Sigmoid函数的导数(关键推导):
f′(x)=f(x)(1−f(x))f'(x)=f(x)(1-f(x))f(x)=f(x)(1f(x))
(推导:f(x)=11+e−xf(x)=\frac{1}{1+e^{-x}}f(x)=1+ex1,求导后化简可得)。

权重更新示例(以W53W_{53}W53为例)

假设网络参数与输入如下:

  • 输入x1=0.35x_1=0.35x1=0.35x2=0.9x_2=0.9x2=0.9;初始权重w31=0.1w_{31}=0.1w31=0.1w32=0.8w_{32}=0.8w32=0.8w53=0.3w_{53}=0.3w53=0.3;目标输出t5=0.5t_5=0.5t5=0.5,激活函数为Sigmoid。
步骤1:前向传播计算输出
  • 第一层隐藏层节点3的输入:z3=0.1×0.35+0.8×0.9=0.755z_3=0.1×0.35 + 0.8×0.9=0.755z3=0.1×0.35+0.8×0.9=0.755,输出y3=f(0.755)=0.682y_3=f(0.755)=0.682y3=f(0.755)=0.682
  • 第二层隐藏层节点5的输入:z5=0.3×0.682+w54y4+b5z_5=0.3×0.682 + w_{54}y_4 + b_5z5=0.3×0.682+w54y4+b5(假设y4=0.663y_4=0.663y4=0.663),输出y5=f(z5)=0.69y_5=f(z_5)=0.69y5=f(z5)=0.69
步骤2:反向传播计算权重偏导数

根据链式法则:
∂E∂w53=∂E∂y5⋅∂y5∂z5⋅∂z5∂w53\frac{\partial E}{\partial w_{53}}=\frac{\partial E}{\partial y_5} \cdot \frac{\partial y_5}{\partial z_5} \cdot \frac{\partial z_5}{\partial w_{53}}w53E=y5Ez5y5w53z5

  • ∂E∂y5=y5−t5=0.69−0.5=0.19\frac{\partial E}{\partial y_5}=y_5 - t_5=0.69 - 0.5=0.19y5E=y5t5=0.690.5=0.19

  • ∂y5∂z5=y5(1−y5)=0.69×0.31≈0.2139\frac{\partial y_5}{\partial z_5}=y_5(1 - y_5)=0.69×0.31≈0.2139z5y5=y5(1y5)=0.69×0.310.2139

  • ∂z5∂w53=y3=0.682\frac{\partial z_5}{\partial w_{53}}=y_3=0.682w53z5=y3=0.682

  • 最终偏导数:∂E∂w53=0.19×0.2139×0.682≈0.02711\frac{\partial E}{\partial w_{53}}=0.19×0.2139×0.682≈0.02711w53E=0.19×0.2139×0.6820.02711

步骤3:更新权重

w53,new=w53,old−η⋅∂E∂w53w_{53,\text{new}} = w_{53,\text{old}} - \eta \cdot \frac{\partial E}{\partial w_{53}}w53,new=w53,oldηw53E
当假设学习率 η=1\eta=1η=1时,代入公式可计算出更新后的权重 w53,new=0.3−0.02711=0.27289w_{53,\text{new}}=0.3 - 0.02711=0.27289w53,new=0.30.02711=0.27289

算法特点

  • 误差传递:输出层误差可直接计算,隐藏层误差通过后续层的误差反向推导(解决了“隐藏层输出未知无法计算误差”的问题)。
  • 权重修正:各层权重的修正量与误差大小成正比,实现“精准优化”。
  • 适用场景:多层全连接神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等各类深度模型的训练。
http://www.dtcms.com/a/577614.html

相关文章:

  • 有名的网站制怎样才能把网站宣传做的更好
  • MIPI DSI和MIPI Tx IP 的建立
  • 基于时间的 SQL 盲注-延时判断和基于布尔的 SQL 盲注
  • 个人微信公众号怎么做微网站seo完整教程视频教程
  • C++_chapter10_C++IO流类库
  • 树莓派5-docker里的ros常用命令
  • 网站地图1 500 怎么做网站推广方案及预算
  • 餐饮网站方案一个完整的网站怎么做
  • 弄一个关于作文的网站怎么做如何建立网站卖东西
  • 在Ubunutu上学习C语言(二):数组和指针
  • 成品网站源码78w78使用方法网站建设服务领域
  • ESP32内存分布全解析
  • Graph-R1:智能图谱检索增强的结构化多轮推理框架
  • java学习--可变参数
  • 相序诊断,快速响应!安科瑞户用光储防逆流无线电能表,破解您的安装难题,安全防逆流。
  • FPGA核心约束类型与语法
  • 给网站做网络安全的报价wordpress直播
  • 零基础从头教学Linux(Day 60)
  • .NET Core WebAPI 中 HTTP 请求方法详解:从新手到精通
  • Socket编程实战:从基础API到多线程服务器
  • Oracle Goldengate 同步过程的同步用户权限设置
  • Rust编程学习 - 如何理解Rust 语言提供了所有权、默认move 语义、借用、生命周期、内部可变性
  • 自学建立网站网络品牌推广费用
  • 卑鄙的网站开发公司网站地图页面模板
  • php网站如何编辑WordPress图片一行多张
  • 学Java第四十一天-------查找算法和排序算法
  • 从0到1学习Qt -- 信号和槽(二)
  • AI、闪购、造车……双十一的第十七年,京东、阿里、美团还有“新活”
  • IDEA不切换当前分支,实现跨分支合并的终极方案
  • 法考资源合集