十三、机器学习进阶知识:神经网络之反向传播算法(梯度、误差反向传播算法BP)

一、反向传播及梯度

在神经网络中,初始化生成的参数在使用时往往难以使网络获得最好的回归效果,因此除了前向传播过程外,需要通过反向传播过程对相关参数进行优化,从而使得回归效果达到最好,而神经网络的训练过程即为前向传播过程与反向传播过程的循环重复。在反向传播过程中,主要需要利用损失函数来获取输出层、隐含层参数的梯度,然后利用此梯度对参数进行更新,从而使损失函数计算结果达到一个较小值。
梯度可以被理解为一个矢量,它表示某个函数在这一点的方向导数在该方向上可以取得最大值,即函数在该点处沿着这个梯度方向变化最快、变化率最大。假设某一连续可微的多元函数为f(x_1,x_2,…,x_n),则在点(x_1,x_2,…,x_n)处,可以将其梯度表示为(∂f/(∂x_1 ),∂f/(∂x_2 ),…,∂f/(∂x_n )),此时函数f(x_1,x_2,…,x_n)在此方向上函数值增长的速度最快,而(-∂f/(∂x_1 ),-∂f/(∂x_2 ),…,-∂f/(∂x_n ))为该处的负梯度,即函数f(x_1,x_2,…,x_n)在此方向上函数值减少的速度最快。
根据上述梯度的定义我们可以将损失函数作为一个连续可微的多元函数,而由于输入数据为固定值,则由输出层的计算公式可以得知不同的参数值可以视作该多元函数上的不同的点,为了使该函数值能够达到目标值(最大或最小),则需要通过梯度值的计算,使得函数在梯度的方向上具有较快的增长(减小)速度。同理,隐含层的参数优化过程也是如此,由损失函数可计算得出隐含层输出数据,而隐含层的梯度值可以通过该数据计算过程,因此隐含层的参数可在此梯度方向上进行变化以获得最优值。
损失函数原理参考:
机器学习基础知识之损失函数
神经网络原理参考:
反向传播神经网络(BPNN)的实现(Python,附源码及数据集)

二、误差反向传播算法(BP)

反向传播过程中最常用的算法即为误差反向传播算法(Error BackPropagation,简称BP),下面以均方误差损失函数作为神经网络的损失函数,对误差反向传播算法的原理进行介绍。

1、算法原理

假设神经网络输入层、隐含层、输出层的节点数分别为n, i, m,其隐含层的权值为w,阈值为v,输出层的权值为u,阈值为γ,则其隐含层中第j个节点的输入的计算公式如下:
在这里插入图片描述

其输出层第t个节点的输入的计算公式如下:
在这里插入图片描述

其中b_j表示隐含层第j个节点的输出。
假设该神经网络最后的输出如下:
在这里插入图片描述

则第t个节点的输出为:
在这里插入图片描述

其中f为激活函数。
使用均方误差损失函数计算后,获得的均方误差为:
在这里插入图片描述

使用神经网络进行预测时要求预测值与目标值之间的误差达到最小,因此上述计算过程需要朝向负梯度的方向进行减小,此减小过程的计算公式如下:
在这里插入图片描述

其中μ为给定的学习率,而等号右边的梯度值可以通过以下公式进行计算:
在这里插入图片描述

而由β_t的计算公式可以得知:
在这里插入图片描述

假设输出层使用的激活函数为Sigmod函数,则对激活函数求导后可以求得:

在这里插入图片描述

由上述神经网络输出以及均方误差的计算公式可以求得:
在这里插入图片描述

最后可以得出参数u_jt的更新公式为:
在这里插入图片描述

同理,可分别计算得出参数γ_t、w_lj、v_j的更新公式分别如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在上述公式中
在这里插入图片描述

其中
在这里插入图片描述

则最后可以得出:
在这里插入图片描述

上述计算过程即为误差反向传播算法的主要原理,在实际的应用过程中,无论为哪一种神经网络,首先将输入数据输入神经网络,输入数据依次经过神经网络的隐含层、输出层,在每一层分别经由线性计算与非线性转换最后获得输出层的输出结果,然后使用损失函数计算出误差值,通过使用输出层的误差梯度来对输出层的参数进行调整,最后将误差反向传递至隐含层神经元并根据隐含层的误差梯度来对隐含层的参数进行调整。
需要注意的是,当激活函数使用Sigmod函数或Tanh函数时,由这两个函数的图像可以得知在x取向正负无穷大值,偏导数为趋近于0,则此时对连接权值的调整值也会趋近于0,因此无法进行调整,这就是误差反向传播算法中容易出现的梯度消失问题,因此在训练的过程中需要对学习率进行合理调整以反之梯度消失的现象发生。
激活函数原理参考:
神经网络基础知识之激活函数

2、算法实现

以数据预测为例,下面介绍误差反向传播算法的实现过程,将误差反向传播算法应用于普通的三层神经网络即为BP神经网络。
选用某省市的表层土壤重金属元素数据集作为实验数据,该数据集总共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)
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七层楼的疯子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值