累计BP和标准BP

标准BP算法

每次仅仅针对一个训练样例进行更新更新权值和阈值,参数更新非常频繁,而且不同样例的更新效果可能出现“抵消”的现象。

累计BP算法

累计误差:

E=1mk=1mEk
<script type="math/tex; mode=display" id="MathJax-Element-150">E=\dfrac{1}{m}\sum_{k=1}^{m}E_k</script>
直接针对累计误差最小化,再读取整个训练集D<script type="math/tex" id="MathJax-Element-151">D</script>一遍之后才对参数进行更新,对参数更新的频率会比标准BP算法低好多。
但是累计误差在下降到一定程度之后,进一步下降会非常缓慢,这时候使用标准BP算法会更快获得较好的结果。尤其是在训练集D<script type="math/tex" id="MathJax-Element-152">D</script>非常大的时候。

缺点和应对办法

过拟合

BP神经网络常常遭遇过拟合,此时训练误差不断降低,但是测试误差不断升高。

早停

将数据集分成训练集和验证集,
训练集:用来计算梯度,更新连接权值,和阈值
验证集:估计误差,若训练集误差降低但是验证误差升高则停止训练,同时返回具有最小验证集误差的连接权和阈值。

正则化

基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权值和阈值的平方和,
累计误差函数:

E=λ1mk=1mEk+(1λ)iw2i
<script type="math/tex; mode=display" id="MathJax-Element-237">E=\lambda\dfrac{1}{m}\sum_{k=1}^{m}E_k+(1-\lambda)\sum_{i}w_i^2</script>
其中λ(0,1)<script type="math/tex" id="MathJax-Element-238">\lambda\in(0,1)</script>wi<script type="math/tex" id="MathJax-Element-239">w_i</script>表示连接权值和阈值的和
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐