复习了一下BP算法… 之前看的迷迷糊糊的, 今天看到了一片很好的文章, 下面是一些总结.

正文


对于一个如上类似结构的神经网络, 用BP算法进行迭代更新参数, 其BP原理主要基于两个公式.

  1. 一个是导数的链式传播法则
  2. 一个是优化的参数迭代更新公式, $x^{*}=x-{\mu}f’(x)$

其实对于一个神经网路, 训练实际上就是一个寻优的过程, 把$w$与$b$向量化之后, 其本身就可以看做一个多变量函数的优化问题, 目标函数就是$$\Sigma\frac{1}{2}(target-output)^{2}$$, 使得该目标最小化, 其$\frac{1}{2}$只是一个常数, 对参数的优化结果没有影响, 只是为了在求导计算得时候更方便.

那么我们有迭代公式, 对每一个参数而言, 有$x^{*}=x-{\mu}f’(x)$, 而$f’(x)$就是我们要找到的值, 这个值可以通过神经网路反向来依据导数的链式法则传播回去, 那么算出了这个值后, 我们就有了每一个参数的更新方向, 以此为基础, 选定有一个可取的步长参数$\mu$, 我们就可以不断的进行迭代, 直到目标函数满足我们的优化需求即可.

关于步长参数$\mu$

另外对于步长问题, 我在看最优化导论的时候, 其在讨论一维函数的优化问题的时候就讨论到了一维优化在多维函数寻优过程中的应用, 其应用就在于这个迭代步长参数的选择上, 把目标函数看做以步长参数为变量的函数, 找到这样一个步长参数, 使得在该步长参数下, 该步长带来的总体优化结果最优, 这个想法很好, 但是书上也提到了, 在实际应用时, 由于这样求解每一步都要求解一个步长参数, 这样极大的加大了计算量, 因此在实际上不如选取一个合适的步长参数比如0.5更为实用.