多层网络学习,需要更强大的学习算法。误差逆传播(error BackPropagation, BP)算法是杰出的代表。
训练集 {()},
即输入示例由个属性描述,输出维实值向量。
多层网络结构构成:
图5.7: 个输入神经元,个输出神经元,个隐层神经元。
阈值:输出层第个神经元:,隐层第个神经元:。
连接权:输入层第 个神经元与隐层第个神经元:, 隐层第个神经元与输出层第个神经元:。
输入:隐层第个神经元接收的输入 ; 输出层第个神经元接收到的输入为。
所有神经元使用Sigmoid函数。
对训练例(), 假定神经网络的输出为 即
(5.3)
网络在()上的均方误差为
(5.4)
在网络中有 个参数需要确定:输入层到隐层的 x 个权值,隐层输入层的 x 个权值,个隐层神经元的阈值,个隐层神经元的阈值。
BP是一个迭代学习算法。
迭代学习
迭代学习控制(Iterative Learning Control、ILC)由Uchiyama于1978年首先提出。它通过反复应用先前试验得到的信息来获得能够产生期望输出轨迹的控制输入,以改善控制质量。
任意参数的更新估计式是: (5.5)
推导:以为例
BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。
梯度
首先,一个多元函数的梯度方向是该函数值增大最陡的方向。具体化到一元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向;二元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。【一元时,曲线切线,向上为梯度方向;二元或多元时,导数】
梯度下降
梯度下降法(steepest descend method)用来求解表达式最大或者最小值的,属于无约束优化问题。梯度下降法的基本思想还是挺简单的,现假设我们要求函数f的最小值,首先得选取一个初始点后,然后下一个点的产生时是沿着梯度直线方向,这里是沿着梯度的反方向(因为求的是最小值,如果是求最大值的话则沿梯度的正方向即可),如下图所示:
【摘:https://blog.csdn.net/QKK612501/article/details/52893803 】
学习率
对式5.4的误差 给定学习率 :
(5.6)
隐层到输出层的连接权 先影响到第个输出层神经元的输入值, 再影响其输出值,然后影响到均方误差。
(5.7)
第个输出神经元的输入 = , (5.8)
是第个隐层神经元的输出
sigmoid 函数有一个很好的特性: (5.9)
= (5.10)
[ 是指梯度项]
(5.11)
类似的:
, (5.12)
(5.13) Q?为什么没有“-”
(5.14)
(5.15)
BP算法的工作流程:图5.8
目标:最小化训练集D上的累积误差
(5.16)
处理过拟合:
第一种策略:“早停”(early stopping) :
将数据分成训练集和验证集,
训练集用于计算梯度、更新连接权和阈值,验证集用于估计误差
若训练集误差降低,验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
第二种策略:“正则化”(regulatarization)
在误差目标函数中增加一个用于描述网络复杂度的部分
例如,连接权与阈值的平方和。: 第个训练样例上的误差,:连接权和阈值
误差目标函数
(5.17)
,用于对经验误差与网络复杂度两项进行折中。通过交叉验证来估计。
可以参考:https://blog.csdn.net/sinat_36394053/article/details/52943356
https://blog.csdn.net/yangwohenmai1/article/details/96955667
https://blog.csdn.net/jinyuan7708/article/details/82466653
https://blog.csdn.net/QKK612501/article/details/52893803