这篇文章写得很好理解。
74年就出现了的算法,我们现在还在用,真的很震惊,,
大概很多网络模型都会用到bp算法,真的是很经典的一个算法了。比如CNN
bp算法是一种训练方法,就是可以训练一个很简单的神经网络。
全称叫做误差反向传播
BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。
其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
核心思想:链式求导法则
神经网络的结构非常地简单,对于每个神经元来说,有好几个箭头都指向它,那么这个神经元的输入就是所有箭头的权值*上一个神经元的输出。
先说一下阈值,这个概念我总觉得别扭,可能潜意识里觉得很多模型都不是0和1这么简单,大概就是神经元的输出大(小)于某个值的话,输出为1,小(大)于某个值的话,输出为0.
- 损失函数是什么
这个概念很简单,就是惯常的均方误差函数。就不写了
2. 参数是如何调整的
梯度下降算法,好像也没啥好说的,就是往梯度负方向对参数进行调整,同样也有一个alfa值,决定“步长”。
3. 计算输出层阈值的梯度。
准确的来说是误差对阈值的梯度(1中提到的损失函数)。为什么说链式法则是核心思想呢,因为这一步需要通过y作为中间量求这个梯度,这个梯度标记为g,应该会被用来反向调节权值。
4. 计算误差函数对隐层到输出层权值的梯度
这个的链式就是E(误差)->y(输出值)->beta(输出层的输入)->w(标题中提到的权值)
全部带进去就OK
5. 计算误差函数对隐层阈值gama的梯度
求法和上面一样,不细说
但是你会发现一个很神奇的事情,因为这个5的表达式跟上面求到的一些梯度会产生一些关联:(下面说的梯度都是误差函数对,,,的梯度)
隐层阈值的梯度取决于隐层神经元输出,输出层阈值梯度,隐层与输出层连接权值(w)
这句话也就是说当前层的阈值梯度取决于他后面一层的阈值梯度。
那么我们就可以利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。
可以回忆一下线性回归调节theta的过程,其实这个也是调节权值的过程,初始的权值都是随机的,然后一个随机的东西最后输出的结果肯定会有误差,那正好有上述提到的关系,我们可以根据这样的一个误差去调节前面的所有的权值,只到误差小到某一个范围内。
不过感觉最好还是写代码实现一下可能会理解得更好。
看了好几篇博客和我自己的理解,可能和别人写的会有相似的地方