我正在阅读this文件,他们说重量调整公式为:
新体重=旧体重+学习率* delta * df(e)/ de *输入
df(e)/de
部分是激活函数的衍生物,它通常是像tanh
这样的sigmoid函数。现在,这实际上是什么?为什么我们甚至成倍增加呢?为什么不只是learning rate * delta * input
?
这个问题出现在这个问题之后,与之密切相关:Why must a nonlinear activation function be used in a backpropagation neural network?。
答案 0 :(得分:16)
训练神经网络只是指找到权重矩阵中的每个单元格的值(其中有两个NN具有一个隐藏层),这样观察数据和预测数据之间的平方差异最小化。在实践中,包括两个权重矩阵的各个权重在每次迭代时被调整(它们的初始值通常被设置为随机值)。这也称为在线模型,而不是在经过大量迭代后调整权重的批量模型。
但是 如何调整权重 - 即,哪个方向+/-?多少钱?
这就是导数的来源。 导数的大值会导致对相应的权重进行大幅度调整。这是有道理的,因为如果导数很大意味着你远离最小值。换句话说,在每次迭代中,在由总误差(观察与预测)定义的成本函数表面上最陡下降方向(导数的最高值)调整权重。
在计算每个模式的误差之后(从该迭代期间NN预测的值中减去响应变量或输出矢量的实际值),权重矩阵中的每个权重与计算的误差梯度成比例地调整
因为误差计算从NN的末尾开始(即,在输出层通过从预测中减去观察值)并继续前进,所以它被称为 backprop 。
更一般地说,优化技术使用衍生物(或多变量问题的 梯度 )(对于backprop,共轭梯度可能是最常见的)找到目标的最小值(又名损失)功能。
它的工作原理如下:
一阶导数是曲线上的点,使得与其相切的线的斜率为0.
因此,如果您在目标函数定义的3D表面周围走动并且您走到斜率= 0的点,那么您位于底部 - 您已找到最小值(是否全局或本地)的功能。
但是,一阶导数比这更重要。它还 告诉您是否正朝着正确的方向 来达到最低功能。
如果您考虑到曲线/曲面上的点向下移向函数最小值时切线的斜率会发生什么,那么很容易理解为什么会这样。
斜率(因此该点处函数的导数的值)逐渐减小。换句话说,使函数最小化,遵循导数 - 即,如果值正在减小,那么您正朝着正确的方向移动。
答案 1 :(得分:2)
您引用的权重更新公式不仅仅是一些任意表达式。它是通过假设一个误差函数并通过梯度下降来最小化它来实现的。因此,激活函数的导数基本上是因为微积分的链式规则。
关于神经网络的书籍更有可能在反向传播中推导出更新规则。例如,Hertz,Krogh和Palmer的神经计算理论介绍。