一步一步教你反向传播,求梯度(A Step by Step Backpropagation Example)

本文是我在学习反向传播时翻译的一篇文章。原文链接如下。
A Step by Step Backpropagation Example

实例学习
在这个例子里,我们将制作一个小型神经网络。它有两个输入,两个隐藏的神经元,两个输出神经元。
此外,隐藏和输出的神经元都包含了一个偏差(bias)。下图是这个神经网络的结构。
一步一步教你反向传播,求梯度(A Step by Step Backpropagation Example)_第1张图片
下面我们给各个参数设定一些值。权重(w) , 偏差(b) 和用来训练的输入输出
一步一步教你反向传播,求梯度(A Step by Step Backpropagation Example)_第2张图片
反向传播的目标是优化权重,以便神经网络能够学习如何正确地将任意输入映射到输出。
在这个例子里:给定输入0.05和0.10,我们希望神经网络输出0.01和0.99。

  • 正向计算
    我们假设这个神经网络的激活函数是 logistic 回归函数。
    我们来计算一下隐藏层神经元h1
    在这里插入图片描述
    带入权重的和偏差的值
    在这里插入图片描述
    带入激活函数计算得到h1的输出(这里套用了logistic回归的公式,不懂的同学请自行百度)
    在这里插入图片描述
    同样方法计算出h2的输出
    在这里插入图片描述
    根据神经网络图,我们把h1,h2的输出作为输出层神经元o1,o2的输入来同样计算。
    在这里插入图片描述
    带入数值
    在这里插入图片描述
    在这里插入图片描述
    同样方法计算出o2
    在这里插入图片描述
    这时我们就会发现,得出的结果(o1:0.75 , o2:0.77)和我们想要的结果(o1:0.01 , o2:0.99)相去甚远。
    这时我们就需要调整权重(w)来得到我们想要的输出结果。
    在调整之前,我们先算出和想要的结果的误差(loss,也叫损失)。在这个例子中我们使用平均方差函数来作为误差函数。
    在这里插入图片描述
    我们分别算一下o1的误差
    在这里插入图片描述
    同样公式算出o2的误差
    在这里插入图片描述
    误差合计
    在这里插入图片描述
  • 反向计算
    得到误差之后,我们就可以通过反向传播来更新权重,直到得到我们想要的输出。
    比如说,我们考虑一下w5,在w5上做出改变,会怎么样影响最后的误差?
    这个影响度,我们称之为误差对于w5的梯度(也叫对于w5的偏导数),算式为:
    在这里插入图片描述
    根据链式法则我们可以得到以下公式
    在这里插入图片描述
    也就是如下图所示
    一步一步教你反向传播,求梯度(A Step by Step Backpropagation Example)_第3张图片
    接下来我们一步一步把w5的梯度算出来。
    首先是我们之前计算误差的平均方差公式
    在这里插入图片描述
    先求总体误差对于o1输出的梯度,因为o1并不会影响o2的输出,所以对o2的梯度我们做为0处理。
    对于下面的公式不理解的同学,请自学一下偏导数的求解方法。概括来说,偏导数就是求一个变化率。
    也就是求out_o1的变化会影响E_total的变化率,所以,公式中的target_o1^2可以当一个常数来看,就是不会引起变化,所以舍去了。
    在这里插入图片描述
    在这里插入图片描述
    然后,我们该求o1的输入对于o1的输出的偏导数了。先回忆一下o1的输出激活函数
    在这里插入图片描述
    logistic激活函数的偏导数函数比较规范,百度一下就可以找到。
    在这里插入图片描述
    最后,我们来计算w5对于o1的偏导数
    在这里插入图片描述
    偏导数公式
    在这里插入图片描述
    总结一下,可以得到我们想要的w5对于输出的梯度
    在这里插入图片描述
    最后结果如下
    在这里插入图片描述
    我们知道了梯度,就可以根据一定的比例来调整权重,而使得输出的误差减小。
    比如我们设定这个比例为梯度的0.5倍。这个比例被称为学习率。
    在这里插入图片描述
    同样,我们也可以调整w6,w7,w8的新的权重,经过计算,如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    类似于同样的梯度求解,我们也可以求出w1,w2,w3,w4的新的权重。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们通过这些更新后的权重,重新输入0.05和0.10计算得出 的误差为0.29102792.
    比我们之前计算的误差0.29837110要小一些。虽然减小幅度不大,但是这样的梯度下降经过几百次以后就会是误差无限接近于0.我们也就得到了最合适的权重值。完成了学习的目的。

注意:非常欢迎讨论,有意见或建议请留下评论,如转载请注明出处。

你可能感兴趣的:(人工智能)