上一章节中主要讲了神经网络的模型表达,但对于其中的参数如何求解没有讲,这一章主要讲如何训练神经网络得到最优参数。
1. Cost function of Neural Networks
(1)为了方便,首先定义以下参量:
- K为类别的个数
- L为神经网络的层数
- sl为第L层神经元个数
(2)代价函数
神经网络的代价函数和逻辑回归模型的代价函数形式上相似,只是多了多类别的处理。
逻辑回归模型的代价函数:
神经网络的代价函数:
2. Backpropagation Algorithm
(1)训练过程
神经网络的训练方法本质上是梯度下降法,主要包括两个过程:
- 前向传播(Forwardpropagation)
- 后向传播(Backpropagation)
核心是:
- 计算代价函数J(Θ)
- 最小化代价函数
利用高级优化算法训练神经网络需要计算J(Θ)和∂∂Θ(l)ijJ(Θ),下面主要讲如何计算代价函数的偏导数。
(2)前向传播(Forwardpropagation)
(3)后向传播(Backpropagation)
A. 假设我们只有一个训练样本
反向传播的关键在于求每一层上各神经元的误差δ(l)j,以图中的4层神经网络为例,计算过程如下:
- 输出层→隐藏层:残差 = -(输出值-样本值) * 激活函数的导数
- 隐藏层→隐藏层:残差 = (右层每个节点的残差加权求和)* 激活函数的导数
B. 假设我们有许多训练样本
3. Backpropagation Algorithm Intuition
(1)前向传播(Forward propagation)
(2)反向传播(Backpropagation)
根据代价函数可知,反向传播的作用就是使输出层的输出值与类别值相差最小
反向传播算法实际上就是在计算那些误差项δ(l)j,这些误差实质上是计算的代价函数关于中间项zlj的偏微分。
4. Implementation Note: Unrolling Parameters
为了使用某些高级优化算法,一般需要把参数矩阵和导数矩阵转化成向量形式,这样有利用计算,一般需要使用reshape命令。
5. Gradient Checking
反向传播算法是一种复杂的算法,如果你的编码出现错误,将会造成诡异的结果,所以需要进行梯度检验以保证算法的正确性。检查的方法是比较数值导数与反向传播算法中得出的倒数基本相等。
6. Random Initialization
神经网络的初始参数需要随机初始化,否则神经网络无法进行优化,总会得到相同的神经元。
7. Summary
(1)训练神经网络进行机器学习,首先要建立一个神经网络的结构,包括层数以及每一层的神经元个数,原则如下:
- 输入层个数即是你样本的特征个数
- 输出层即是你类别的个数
- 隐藏层是无法准确确定的,一般默认一个隐藏层,如果有多个隐藏层,则最好保证每个隐藏层的神经元个数相等(一般越多越好)
(2)训练神经网络的步骤是:
- 参数矩阵的初始化
- 针对每一个训练样本,执行前向传播得到输出层的激励函数值
- 编程实现自动计算大家函数J(Θ)
- 执行后向传播,计算代价函数关于每个参数的偏导数
→这个过程主要在于计算激励值a(l)和误差项δ - 利用梯度检验算法比较数值导数和反向传播计算的倒数基本相等以判断代码或模型的正确性(如果正确则删除)
- 利用梯度下降算法或其他高级优化算法使得代价函数最小,进而优化参数矩阵