返回介绍

1.13 使用矩阵乘法进行反向传播误差

发布于 2024-01-27 20:58:55 字数 2990 浏览 0 评论 0 收藏 0

我们可以使用矩阵乘法来简化所有这些劳心费力的计算吗?此前,当我们执行大量计算以得到前馈输入信号时,矩阵乘法帮助了我们。

要明白误差反向传播是否可用通过使用矩阵乘法变得更加简洁,让我们使用符号写出步骤。顺便说一句,这就是尝试所谓的将过程(vectorise the process)矢量化。

我们可以相对简单地以矩阵形式表达大批量的计算,这有利于我们的书写,并且由于这种方法利用了所需计算中的相似性,因此这允许计算机更高效地完成所有计算工作。

计算的起始点是在神经网络最终输出层中出现的误差。此时,在输出层,神经网络只有两个节点,因此误差只有e1 和e2

接下来,我们需要为隐藏层的误差构建矩阵。这听起来好像是一件挺辛苦的事情,好吧,让我们以蚕食的方式,一点一点地做这件事。第一件事与隐藏层中的第一个节点相关。如果你再次观察上图可以看到,在输出层中,有两条路径对隐藏层第一个节点的误差做出了“贡献”。沿着这些路径,我们发现了误差信号e1 * w1,1 / ( w1,1 + w2,1 ) 和e 2 * w 1,2 / ( w1,2 + w2,2 )。现在,让我们看看隐藏层的第二个节点,同样,我们看到了有两条路径对这个误差做出了“贡献”,我们得到误差信号e1 * w2,1 / ( w2,1 + w1,1 )和 e2 * w2,2 / ( w2,2 + w1,2 )。先前,我们就已经明白了这些表达式是如何计算得到的。

因此,我们得到了下列的隐藏层矩阵。这比想要的矩阵要复杂一些。

如果这个矩阵能够重写,变成一种我们已知可用、简单的矩阵乘法,那就太棒了。这是权重、前向信号和输出误差矩阵。请记住,如果我们能够重写矩阵,那将是大有裨益的。

遗憾的是,我们不能像先前在处理前馈信号时一样,很容易就将这种矩阵转换为超级简单的矩阵乘法。在这个超级麻烦的大矩阵中,这些分数难以处理!如果我们能够将这个麻烦的矩阵整齐地分割成简单可用的矩阵组合,就大有益处了。

我们可以做些什么呢?我们依然非常希望利用矩阵乘法有效完成计算,给我们带来好处。

我想,这是该变得淘气一点的时候了!

再次观察上面的表达式。你可以观察到,最重要的事情是输出误差与链接权重wij 的乘法。较大的权重就意味着携带较多的输出误差给隐藏层。这是非常重要的一点。这些分数的分母是一种归一化因子。如果我们忽略了这个因子,那么我们仅仅失去后馈误差的大小。也就是说,我们使用简单得多的e1 * w1,1 来代替e1 * w1,1 / ( w1,1 + w2,1 )。

如果我们采用这种方法,那么矩阵乘法就非常容易辨认。如下所示:

这个权重矩阵与我们先前构建的矩阵很像,但是这个矩阵沿对角线进行了翻转,因此现在右上方的元素变成了左下方的元素,左下方的元素变成了左上方的元素。我们称此为转置矩阵,记为wT

此处,有两个数字转置矩阵的示例,因此,我们可以清楚地观察到所发生的事情。你可以看到,即使矩阵的行数和列数不同,也是可以进行转置的。

因此,我们得到所希望的矩阵,使用矩阵的方法来向后传播误差:

虽然这样做看起来不错,但是将归一化因子切除,我们做得正确吗?实践证明,这种相对简单的误差信号反馈方式,与我们先前相对复杂的方式一样有效。这本书的相关博客中,有一篇博文就显示了使用不同方法进行反向误差传播的结果。如果这种相对简单的方式行之有效,那么我们就应该坚持这种方法。

如果我们要进一步思考这个问题,那么我们可以观察到,即使反馈的误差过大或过小,在下一轮的学习迭代中,网络也可以自行纠正。重要的是,由于链接权重的强度给出了共享误差的最好指示,因此反馈的误差应该遵循链接权重的强度。

我们已经做了海量的工作了!


关键点

· 反向传播误差可以表示为矩阵乘法。

· 无论网络规模大小,这使我们能够简洁地表达反向传播误差,同时也允许理解矩阵计算的计算机语言更高效、更快速地完成工作。

· 这意味着前向馈送信号和反向传播误差都可以使用矩阵计算而变得高效。

接下来,下面一节的理论相当酷炫,这需要一个清醒的大脑,因此请好好休息调整一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文