跳转至

神经网络和反向传播算法

1 神经元

  1. 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。如下图所示:

1614968548806

  1. 函数性质

2 神经网络

  1. 概念:神经网络其实就是按照一定规则连接起来的多个神经元。下图展示了一个全连接(full connected, FC)神经网络

1614968564671

  1. 全连接神经网络

  2. 神经元按照来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的。

  3. 同一层的神经元之间没有连接。
  4. 第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入。
  5. 每个连接都有一个权值

3 神经网络的输出

  1. 一般形式

1614968587289

  1. 向量形式

  • 1614968605803

4 神经网络的训练

4.1 反向传播算法

  1. 网络结构

1614968614155

  1. 假设每个训练样本为, 是样本的特征,是样本的目标值。每个节点的误差项为

  2. 误差计算方法

  3. 对于输出层节点

  4. 对于隐藏层节点

  5. 更新权值

  6. 通式

  • 偏置项

4.2 推导过程

  1. 反向传播算法其实就是链式求导法则的应用

  2. 目标函数

  3. 随机梯度下降法优化函数

  4. 节点的加权输入

  5. 根据链式法则

  6. 对于输出层

  7. 对于隐藏层

    定义直接下游节点, 可以看到只能通过影响再影响

4.3 梯度检查

  1. 为了检查自己的神经网络是否正确,最重要的是检测偏导值。

  2. 步骤

  3. 首先使用一个样本对神经网络进行训练,这样就能获得每个权重的梯度。

  4. 将加上一个很小的值(),重新计算神经网络在这个样本下的。
  5. 将减上一个很小的值(10^{-4}),重新计算神经网络在这个样本下的。
  6. 根据式, 它们应该几乎想等(至少4位有效数字相同)。

4.4 向量化

现在有一个四层的BP神经网络

1614968624230

  • 对于第3层

  • 对于第2层

  • 对于第一层

和第二层一致,都是隐藏层

5 编程实战

5.1 超参数的确定

  1. 隐藏层节点数量是不好确定的,从1到100万都可以。下面有几个经验公式: