神经网络(三)

写在前面

  • 在这个章节, 我们将从头推导一个神经网络的反向传播过程. 反向传播在神经网络中非常重要, 要理解透彻神经网络的学习过程, 需要好好消化一下这里的内容.
  • 如果你对微积分还不够理解, 请先看微积分(一). 如果你对神经网络正向传播过程还不理解, 请先看神经网络(二)

误差

  • 我们需要有一个指标来了解预测有多差, 也就是误差 (error).
  • 这里 是预测值, y是真实值. 一个是所有输出单元j的和, 另一个是所有数据点 的和. 首先是内部这个对j的求和. 变量j代表网络输出单元. 所以这个内部的求和是指对于每一个输出单元, 计算预测值 与真实值y之间的差的平方, 再求和. 另一个对 的求和是针对所有的数据点. 也就是说, 对每一个数据点, 计算其对应输出单元的方差和, 然后把每个数据点的方差和加在一起. 这就是你整个输出的总误差.
  • 选择SSE有几个原因: 误差的平方总是正的, 对大误差的惩罚大于小误差. 同时, 它对数学运算也更友好.

反向传播

  • 依旧是上一个章节的例子, 再贴一下图:
  • 在上一个正向传播中, 我们是从Input->Hidden->Output, 而在反向传播中, 我们应该从总误差开始往上面推, 在这个图例, 就是从右边的Output Layer到左边的Input Layer, 一层一层的计算错误对节点的影响. 紧接着上一个章节, 我们假设正确的 , .
  • 总误差:


得出:


 

  • Output Layer到Hidden Layer: 以 为例, 对 求偏导, 计算 的影响.

同理可得:

 

 

  • ErrorTerm( ), 为激活函数, 为激活函数的导数:

则有:

带入到OutputGrade:

 

 

  • , 权重更新:

在这里 是学习率, 是ErrorTerm.
则有:

 

 

  • 更新后的权重值:

则有:

 

 

  • Input Layer, 以 为例, 对 求偏导, 计算 的影响(注意, 这里计算的时候Hidden Layer使用的是还未经过更新的权重值).

同理可推:

仔细看看:

得出:

同理可得:

 

 

  • 至此, 我们已经完整的将神经网络的学习过程(正反向传播)给推导了一遍.

写在后面

  • 在这篇文章里面, 我们对反向传播进行了推导, 但这还仅仅是开始.

神经网络(二)

写在前面

  • 在这个章节, 我们将从头推导一个神经网络的正向传播过程.

正向传播

  • 如图, 现有一神经网络拥有两个Input节点(i1, i2), 两个Hidden节点(h1, h2), 两个Output节点(o1, o2). 这里采用Sigmoid作为激活函数. 假设 , 为输入数据.
  • 从Input到HiddenInput:


    得出:

  • 激活HiddenInput得到HiddenOutput:

  • 从HiddenOutput到OutputInput:


    得出:

  • 激活OutputInput得到OutputOutput:

  • 到这里, 我们的正向传播就结束了, 最后得到两个输出节点的输出

写在后面

  • 在下个章节, 我们将从头推导一个神经网络的反向传播过程.

神经网络(一)

写在前面

  • 神经网络, 是深度学习领域中非常重要的概念, 在这个系列文章中, 将会带你理解一些基础概念, 并带你从头推导一个神经网络的正反向传播过程.
  • 在开始之前, 你可能需要掌握一部分微积分知识, 在这里, 附上之前写的微积分系列链接微积分(一), 如果觉得看文字描述比较吃力, 可以考虑看一下里面推荐的视频.

介绍

  • 神经网络, 顾名思义, 就是由多个神经元组成的网络结构. 上图为一个神经元的组成结构, 一个神经元通常具有多个树突, 主要用来接受传入信息. 而轴突只有一条, 轴突尾端有许多轴突末梢可以给其他多个神经元传递信息. 轴突末梢跟其他神经元的树突产生连接, 从而传递信号. 这个连接的位置在生物学上叫做'突触'.

只有一个Feature输入的一个神经元

  • 上图为只有一个Feature输入的一个神经元, 将 作为feature输入, 输入时神经元会对其输入做 的处理, 之后使用active(激活函数激活), 并将其输出. w在这里表示weight, 权重; b在这里表示bias, 偏差.
  • 稍微对线性代数有些了解的话, 应该知道 就是一条直线, 这里很好理解. 由于线性模型在某些场景表达能力不足, 加入了active(激活函数), 使其能表述非线性因素.

输入多个Features

  • 你可能第一眼看到这个图会有点懵, 在这里圆圈代表单元, 方块代表运算. 如果没看懂, 不要慌, 问题不大. 容我慢慢给你解释.
  • 我们用 来表示所有的Features, 那么这里的 中的两个Feature, 最后面那个1是权重的系数, 也就是说在求和这步应该是 , 简化一下就是 , 你应该非常熟悉这个公式, 它跟线性回归模型是一样的!
  • f(h)为激活函数.

激活函数

  • 神经网络中四种常见的激活函数: Sigmoid, ReLU, TanH, Softmax.

  • 上图为Sigmoid函数图形, Sigmoid函数值域是0到1之间, 它的输出还可以被解释为成功的概率. 实际上, 用Sigmoid函数作为激活函数的结果, 跟对数几率回归(Logistic回归)是一样的. 适用于二分类模型.
  • 优点: 在特征相差比较复杂或是相差不是特别大时效果比较好.
  • 缺点: 计算量大, 反向传播求误差梯度时, 求导涉及除法, 容易出现梯度消失的情况, 从而无法完成深层网络的训练.

  • TanH函数也被称为双切正切函数, 取值范围为[-1, 1].
  • 其实就是在Sigmoid函数的基础上做一个变形, 把曲线整体下拉0.5个单位(经过原点)就得到TanH.

  • ReLu函数, 输入信号<0时, 输出都是0; 输入信号>0的情况下, 输出等于输入.
  • 优点: 计算速度非常快, 只需要判断输入是否大于0, 收敛速度远快于Sigmoid和TanH.
  • 缺点: 某些神经元可能永远不会被激活, 导致相应的参数永远不能被更新.

  • Softmax函数主要用于多分类任务, 通常情况下, 我们只会在神经网络的最后一层会采用Softmax函数, 通过运算之后每个神经元会得到一个概率, 用于判断它属于哪个分类.

梯度下降

  • 在神经网络中的梯度下降, 就是对weights, bias进行学习的过程.

写在后面

  • 这个章节中, 对神经网络中的一些基本概念与常用函数做了介绍, 我们将在下个章节内推导正向传播过程.