人工神经网络:反向传播算法的数学基础(Part4)
来源:互联网 发布:ping的端口号 编辑:程序博客网 时间:2024/06/05 10:00
文本翻译自briandolhansky的神经网络系列文章,本文是第四部分.
注: 此文章为译者初次尝试翻译, 加上非数学专业出身, 工作忙碌闲暇时间较少,因此在专业术语和词语表达上多有不当之处. 如有疑问欢迎评论交流.
目前为止,我们还没有看到神经网络强大的非线性能力 — 我们目前所使用的单层模型, 像多项逻辑斯地回归, 二项逻辑斯蒂回归均是线性模型. 这些单层模型的求导都很简单, 权重的输入可以 直接从结果反推. 不过单层模型连在一起形成神经网络时, 又会如何.
权重的增加和结果的变化之间不再是线性关系, 任意一个节点的改变都会导致后面层上的节点的变化, 那么在神经网我们该如何计算所有权重的梯度值 ? – 反向传播算法应运而生.
反向传播算法的核心在于在所有可能的传播路径上迭代的使用链式求导法则. 随着神经网络尺寸的增到从输入到输入之间的路径指数级的增加, 神经网络算法的优势逐渐凸显, 它以动态规划算法的形式重复使用中间结果来计算梯度, 极大地加快了计算速度, 在此过程中我们将误差(cost)从输出传回输入, 这也是反向传播算法命名的由来. 反向传播与正向传播密切相关, 正向传播将输入向前传递至结果, 反向传播将误差向后传播回结果
反向传播的基本规则
对于单个神经元节点, 连接方式总共有一下四种情形: 1.只有一个输入和一个 输出. 2.有多个输入和一个输出, 3.有一个输入和多个输出. 4. 有多个输入和多个输出. 在以下的推导中我们可以得出多个输入和多个输出是相互独立的事件, 情况4可以由2和3合并得出.
对于每种情景下的梯度, 我将使用简单的多层神经网络进行求解, 归纳相应的反向传播算法通用法则. 最后, 我们将得到一个适用于任意神经网络通用的算法.
(1).单个输入和单个输出
假设神经网络的构成如下:
简单的单一传播路径神经网络
图中每个变量值得求解如下:
本例很容易求得每个变量
找出
直接使用微分公式计算
你可以能已经注意了固定的模式出现在求导过程中, 这一模式是构建反向传播算法的基础 —— 即在求解前一个层的神经元导数时, 我们会使用后面层级神经元的求导时计算得出的值. 这些值包括神经网络的错误的导数, 神经元
以上可以得出, 对于这个简单神经网络:
(2).神经元存在多个输入
当一个神经元有多个输入时:
当一个神经元有多个输入时, 每个输入导数的求解相比与一个输入时有什么不同?
可以看出
(3).神经元存在多个输出
现在我们讨论一下当一个神经元有多个输出的情况.
与前一节的神经网络相比,该神经网络的新增了
有两点需要注意, 首先得到我们的第二条求导原则:当有多个输出层时权重的求导依赖于每个输出路径上的误差的导数.
更重要的是我们可以推演出后向传播和前向传播之间的关系. 在后向传播时, 我们计算结果误差, 然后传递结果误差到每一个神经元, 得到加权后的误差值(译者注: 因为
误差信号
一步一步推导出所有权重的导数相当繁琐, 尤其当神经网络中含有大量的神经元和隐含层时, 逐个更新更是不切实际. 在上一章节 在误差向后传播的过程中具有一定规律, 固定的模式不断重现, 这有助与归纳出通用后向传播算法. 本章节我们引入误差信号的概念, 即误差在每一个神经元上的累加值. 为了简化过程便于理解, 假设样本数为1, 因此
神经元
该公式计算神经元
假设
若神经元
注意
将此式代入
基于错误信号的定义可知,
由此便得到计算后向传播误差的简洁形式, 最后要做的便是将上面的公式整合成一个通用表达式.
后向传播算法的一般形式
回顾第一节我们用到的神经网络:
该神经网络上所有错误误差的求解如下:
同样权重更新的公式(节1.单个输入和单个输出):
带入错误信号得:
当神经网络中神经元有多个输出的时:
错误误差的求解如下:
虽然我们没有推导出所有的权重更新公式, 但是利用信号误差可得权重更新公式(如果感兴趣的话你可以手算一下):
现在可以很清楚的得到权重更新的一般公式:
最后要考虑的是使用批量数据算法(minibatch)更新梯度时, 公式变化情况. 通常每个样本都是独立的, 将所有样本的更新值累加起来便得到了一个权重的总更新值.(一般会除以样本数量N, 这样权重更新值不敏感于样本量的大小). 我们使用
由上可知,后向传播算法的一般公式计算由三部分组成:
1. 前向传播训练集, 计算每个
2. 计算每个样本
3. 根据公式
总结
希望通过本部分内容你可以全面的掌握后向传播算法的求解(译者注: 英文可以的朋友最好看原文 :-) 点击这里). 但是部分的公式的可编程性和扩展性仍然很差, 下一部分会拓展此公式成矩阵形式. 提供一个简单的神经网络模型, 并且用它来训练MNIST数据集.
- 人工神经网络:反向传播算法的数学基础(Part4)
- 人工神经网络之反向传播算法
- 人工神经网络之反向传播算法
- 反向传播人工神经网络
- 通俗语言描述人工神经网络,反向传播算法,卷积神经网络
- 机器学习经典算法-人工神经网络之反向传播算法
- Python实现人工神经网络(反向传播算法)
- 人工神经网络——【BP】反向传播算法证明
- 神经网络反向传播的数学原理
- 神经网络反向传播的数学原理
- 神经网络反向传播的数学原理
- 实现一个反向传播人工神经网络
- 神经网络-反向传播算法
- 神经网络反向传播算法
- 神经网络的反向传播BP算法
- 神经网络的反向传播算法Backpropagation
- 神经网络反向传播算法的推导
- 卷积神经网络的反向传播算法(笔记)
- MyBatis 笔记(四)——实体类属性和表字段的映射
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- Linux字符设备驱
- JVM_Java内存模型
- 面向对象的综合应用解析
- 人工神经网络:反向传播算法的数学基础(Part4)
- linux 下怎么设置终端快捷键
- Java中字段、属性、成员变量、局部变量、实例变量、静态变量、类变量、常量
- 字符流中第一个不重复的字符
- 【JZOJ5332】【NOIP2017提高A组模拟8.23】密码
- 个人总结2
- MySQL数据库基础(二)
- 哎呦不错哦!
- 国际电子邮件协会判定垃圾邮件规则