十三、机器学习进阶知识:神经网络之反向传播算法(加入Nesterov动量的误差反向传播算法)

1、Nesterov动量

在动量法提出不久之后,Nesterov动量也随之被提了出来,此方法属于动量法的进一步发展,与动量法不同的是,在动量法中会用每一次迭代中计算得来动量项作为参数调整的方向和速率,而在Nesterov动量法中,在计算新的动量项之前,会用当前的动量项进行一次参数的调整,然后用调整的临时参数计算梯度值,然后再利用该梯度值进行新的动量项的计算,最后进行参数的更新,此过程可以看作在动量法中添加了一个较正因子。Nesterov动量法的核心思想在于在每次计算梯度的时候使用下一次的权重,然后将下一次的变化情况反映在这次计算的梯度上。
Nesterov动量法的具体步骤如下:

  1. 使用当前的动量项进行参数的临时调整;
  2. 使用调整后的临时参数计算出临时梯度值g;
  3. 使用临时梯度值计算获得新的动量项;
  4. 利用新的动量项对参数进行调整以获得新的参数值。

基于动量项的参数更新原理参考:
神经网络之反向传播算法(加入动量momentum的误差反向传播算法)
梯度g的计算原理参考:
神经网络之反向传播算法(梯度、误差反向传播算法BP)

2、结合Nesterov动量的误差反向传播算法

将加入动量法的误差反向传播算法应用于神经网络参数优化时的算法步骤如下:

  1. 随机初始化神经网络中所有的参数;
  2. 设置学习率、动量参数,设置变量v的初始值为0;
  3. 输入数据,利用变量v(动量项)对参数进行临时更新;
  4. 按照前向传播过程计算网络的输出;
  5. 使用损失函数计算误差值;
  6. 根据误差值计算出隐含层、输出层每个参数的临时梯度值;
  7. 利用临时梯度值计算变量v;
  8. 利用变量v对参数进行更新;
  9. 重复步骤3到步骤8,当满足停止迭代条件时输出训练后的参数。

误差反向传播算法BP原理参考:
神经网络之反向传播算法(梯度、误差反向传播算法BP)
参数初始化方法参考:
神经网络基础知识之参数初始化

3、算法实现

以数据预测为例,下面介绍加入Nesterov动量的误差反向传播算法的实现过程,将加入Nesterov动量的误差反向传播算法应用于普通的三层神经网络(输入层、隐含层、输出层)的反向传播过程。
选用某省市的表层土壤重金属元素数据集作为实验数据,该数据集总共96组,随机选择其中的24组作为测试数据集,72组作为训练数据集。选取重金属Ti的含量作为待预测的输出特征,选取重金属Co、Cr、Mg、Pb作为模型的输入特征。

3.1 训练过程

#库的导入
import numpy as np
import pandas as pd

#激活函数tanh
def tanh(x):
    return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
#激活函数偏导数
def de_tanh(x):
    return (1-x**2)

# 梯度加权平均函数,0.9为衰减系数
def accumulation(v,delta):
    v = 0.9 * v + 0.1 * delta
    return  v

# 参数更新量计算函数
def adjust(v):
    change = (-0.01)*v
    return change

#输入数据的导入
df = pd.read_csv("train.csv")
df.columns = ["Co", "Cr", "Mg", "Pb", "Ti"]
Co = df["Co"]
Co = np.array(Co)
Cr = df["Cr"]
Cr = np.array(Cr)
Mg=df["Mg"]
Mg=np.array(Mg)
Pb = df["Pb"]
Pb =np.array(Pb)
Ti = df["Ti"]
Ti = np.array(Ti)
samplein = np.mat([Co,Cr,Mg,Pb])

#数据归一化,将输入数据压缩至0到1之间,便于计算,后续通过反归一化恢复原始值
sampleinminmax = np.array([samplein.min(axis=1).T<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七层楼的疯子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值