十三、机器学习进阶知识:神经网络之反向传播算法(自适应梯度算法Adagrad)

自适应梯度算法(Adagrad)

自适应梯度算法(Adaptive gradient algorithm,Adagrad)与传统的误差反向传播算法不同的地方在于在该算法中使用累计平方梯度代替迭代过程中每一次计算的梯度值。
反向传播算法及梯度原理参考:
神经网络之反向传播算法(梯度、误差反向传播算法BP)

1、算法原理

假设对某个参数计算的梯度值为g,则自适应梯度算法需要通过下述公式计算出其梯度值的累积平方:
在这里插入图片描述

其中r的初始值为0。
之后通过累积平方对每次更新中的学习率进行调整,并使用更新后的学习率计算出参数的更新值。更新值的计算公式如下:
在这里插入图片描述

在上述公式中,μ为全局学习率,δ为避免分母为0而设置的极小值。
由前面的梯度值计算的相关原理可以得知,参数每次迭代更新的梯度与数据特征的稀疏性关联较大,当数据特征较为稀疏时,参数每次更新的梯度相对较小,此时累计梯度将长时间处于一个较小值,使得学习率的下降速度也会较慢,因此对参数的更新值会随之变大;当数据特征较为稠密时,参数每次更新的梯度相对较大,那么累计梯度将会较大,使得学习率加快下降速度,因此更新值会随之降低。由此带来的最直接的效果就是使得参数的调整速度随之加快进而使得神经网络的训练速度随之加快。
将自适应梯度算法应用于神经网络反向传播过程时的算法步骤如下:

  1. 随机初始化神经网络中所有的参数;
  2. 设置全局学习率μ及参数δ,初始化梯度的累积平方;
  3. 输入数据,按照前向传播过程计算网络的输出;
  4. 使用损失函数计算误差值;
  5. 根据误差值计算出隐含层、输出层每个参数的梯度项;
  6. 计算梯度累积平方;
  7. 利用梯度累积平方、全局学习率更新参数;
  8. 重复步骤3到步骤7,当满足停止迭代条件时输出训练后的参数。

参数初始化方法参考:
神经网络基础知识之参数初始化

2、算法实现

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

2.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)

#梯度累积平方计算函数,输入参数r为累积梯度平方,delta为当前梯度
def accumulation(r,delta):
    r =r + (delta**2)
    return  r
#参数更新函数,w为待更新参数,r为累积梯度平方,delta为当前梯度,另外0.01为学习率
def adjust(w,r,delta):
    change1 =0.000001+(r ** (0.5))
    change2 =delta/change1
    change = (-0.01)*change2
    w = w + change
    return w

maxepochs = 1000  #迭代训练次数
errorfinal = 0.65*10**(-3)  #停止训练误差阈值
samnum = 72  #输入数据数量
indim = 4  #输入层节点数
outdim = 1  #输出层节点数
hiddenunitnum = 8  #隐含层节点数

#输入数据的导入
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 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七层楼的疯子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值