西瓜书-机器学习5.3 误差逆传播算法

h多层网络学习,需要更强大的学习算法。误差逆传播(error BackPropagation, BP)算法是杰出的代表。

训练集 D = {((x_{1}, y_{1}), (x_{2}, y_{2}), ..., (x_{m}, y_{m}))}, x_{i} \subset \mathbb{R}^{d}, y_{i} \subset \mathbb{R}^{l},

即输入示例由d个属性描述,输出l维实值向量。

多层网络结构构成:

图5.7: d个输入神经元,l个输出神经元,q个隐层神经元。

阈值:输出层j个神经元:\theta _{j}隐层h个神经元:\gamma _{h}

连接权:输入层i 个神经元与隐层h个神经元:\upsilon _{ih}隐层h个神经元与输出层j个神经元:\omega _{hj }

输入:隐层h个神经元接收的输入 \alpha _{h} = \Sigma _{i=1}^{d}\nu _{ih}x_{i}输出层j个神经元接收到的输入\beta _{j} = \Sigma _{h=1}^{q}\omega _{hj}b_{h}

所有神经元使用Sigmoid函数

对训练例(x_{k}, y_{k}), 假定神经网络的输出为\hat{y}_{k} = (\hat{y}_{1}^{k}, \hat{y}_{2}^{k}, ... , \hat{y}_{l}^{k}),

     \hat{y} _{j}^{k} = f(\beta _{j} - \theta _{j}), (5.3)

网络在(x_{k}, y_{k})上的均方误差为

 E_{k} =\frac{1}{2} \sum_{j=1}^{1}(\hat{y}_{j}^{k}-y_{j}^{k})^{2} (5.4)

在网络中有 (d + l + 1)q + l 个参数需要确定:输入层到隐层的d x q个权值,隐层输入层的q x l个权值,q个隐层神经元的阈值,l个隐层神经元的阈值。

BP是一个迭代学习算法。

迭代学习

迭代学习控制(Iterative Learning Control、ILC)由Uchiyama于1978年首先提出。它通过反复应用先前试验得到的信息来获得能够产生期望输出轨迹的控制输入,以改善控制质量。

任意参数\upsilon的更新估计式是: \upsilon \leftarrow \upsilon + \Delta \upsilon (5.5)

推导:以\omega _{hj }为例

BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。

梯度

首先,一个多元函数的梯度方向是该函数值增大最陡的方向。具体化到一元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向;二元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。【一元时,曲线切线,向上为梯度方向;二元或多元时,导数】

梯度下降 

梯度下降法(steepest descend method)用来求解表达式最大或者最小值的,属于无约束优化问题。梯度下降法的基本思想还是挺简单的,现假设我们要求函数f的最小值,首先得选取一个初始点后,然后下一个点的产生时是沿着梯度直线方向,这里是沿着梯度的反方向(因为求的是最小值,如果是求最大值的话则沿梯度的正方向即可),如下图所示:

【摘:https://blog.csdn.net/QKK612501/article/details/52893803  】

学习率 \eta

对式5.4的误差E_{k} 给定学习率 \eta

\Delta w{_{hj}} = - \eta \frac{\partial E_{k}}{\partial w_{hj}}      (5.6)

隐层到输出层的连接权w{_{hj}} 先影响到第j输出层神经元输入值\beta _{j}, 再影响其输出值\hat{y}_{j}^{k},然后影响到均方误差E_{k}

\frac{\partial E_{k}}{\partial w_{hj}} = \frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}\cdot \frac{\partial \hat{y_{j}^{k}}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial \omega _{hj}}   (5.7)

j个输出神经元的输入\beta _{j } = \sum_{h=1}^{q}\omega _{hj}b_{h},         \frac{\partial \beta _{j}}{\partial \omega _{hj}} = b_{h}   (5.8)    

b_{h}是第h个隐层神经元的输出

sigmoid 函数有一个很好的特性:{f}'(x) = f(x)(1-f(x))   (5.9)

g_{i} = \frac{\partial E_{k}}{\partial \hat{y}_{j}^{k}}\cdot \frac{\partial \hat{y_{j}^{k}}}{\partial \beta _{j}} = -(\hat{y_{j}^{k}}- y_{j}^{k}){f}'(\beta _{j}-\theta _{j}) 

= \hat{y}_{j}^{k}(1-\hat{y}_{j}^{k}))(y_{j}^{k}-\hat{y}_{j}^{k})   (5.10)

[g_{i} 是指梯度项]

\Delta \omega _{hj} = \eta g_{j}b_{h}  (5.11)

类似的:

\Delta \theta _{j} = - \eta g_{i}, (5.12)

\Delta v_{ih} = \eta e_{h}x_{i}   (5.13) Q?为什么没有“-”

\Delta \gamma _{h} = -\eta e_{h}    (5.14)

e_{h} = b_{h}(1-b_{h})\sum_{j=1}^{l}\omega _{hj} g_{j} (5.15)

 

BP算法的工作流程:图5.8

目标:最小化训练集D上的累积误差

E = \frac{1}{m} \sum_{k=1}^{m}E_{k}  (5.16)

 

处理过拟合:

第一种策略:“早停”(early stopping) :

将数据分成训练集验证集

训练集用于计算梯度、更新连接权和阈值,验证集用于估计误差

若训练集误差降低,验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

第二种策略:“正则化”(regulatarization)

在误差目标函数中增加一个用于描述网络复杂度的部分

例如,连接权与阈值的平方和。E_{k}: 第k个训练样例上的误差,w_{i}:连接权和阈值

误差目标函数

E = \lambda \frac{1}{m}\sum_{k=1}^{m}E_{k}+(1-\lambda )\sum_{ }^{i}\omega _{i}^{2}   (5.17)

\lambda \in (0,1),用于对经验误差与网络复杂度两项进行折中。通过交叉验证来估计。

 

 

可以参考: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

 

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值