神经网络和反向传播算法¶
1 神经元¶
- 神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。如下图所示:
- 函数性质
2 神经网络¶
- 概念:神经网络其实就是按照一定规则连接起来的多个神经元。下图展示了一个全连接(full connected, FC)神经网络
-
全连接神经网络
-
神经元按照层来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的。
- 同一层的神经元之间没有连接。
- 第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入。
- 每个连接都有一个权值。
3 神经网络的输出¶
- 一般形式
-
向量形式
4 神经网络的训练¶
4.1 反向传播算法¶
- 网络结构
-
假设每个训练样本为, 是样本的特征,是样本的目标值。每个节点的误差项为
-
误差计算方法
-
对于输出层节点
-
对于隐藏层节点
-
更新权值
-
通式
- 偏置项
4.2 推导过程¶
-
反向传播算法其实就是链式求导法则的应用
-
目标函数
-
随机梯度下降法优化函数
-
节点的加权输入
-
根据链式法则
-
对于输出层
-
对于隐藏层
定义直接下游节点, 可以看到只能通过影响再影响。
4.3 梯度检查¶
-
为了检查自己的神经网络是否正确,最重要的是检测偏导值。
-
步骤
-
首先使用一个样本对神经网络进行训练,这样就能获得每个权重的梯度。
- 将加上一个很小的值(),重新计算神经网络在这个样本下的。
- 将减上一个很小的值(10^{-4}),重新计算神经网络在这个样本下的。
- 根据式, 它们应该几乎想等(至少4位有效数字相同)。
4.4 向量化¶
现在有一个四层的BP神经网络
- 对于第3层
-
对于第2层
-
对于第一层
和第二层一致,都是隐藏层
5 编程实战¶
5.1 超参数的确定¶
- 隐藏层节点数量是不好确定的,从1到100万都可以。下面有几个经验公式: