1、Cost Function
对于逻辑回归来说,归一化之后的成本函数形式如下所示:
神经网络的成本函数是上述逻辑回归成本函数的一般泛化,其形式如下所示:
其中 L L L表示神经网络的层数, s l s_l sl表示第 l l l层中的神经元的个数, K K K表示输出层神经元的个数,即分类的数量。注意归一化项中不包含偏置项的归一化处理。
2、反向传播算法-Backward Algorithm
目标是寻找成本函数的最小值,反向传播算法的目的是通过误差反向传播的方式来求解需要成本函数 J ( θ ) J(\theta) J(θ)关于预测参数 θ \theta θ的导数。误差反向传播的步骤如下所示:
δ(L)的计算方式如下所示:
最终近似求解偏导数的方式如下所示:
其中, D D D即为成本函数 J Θ的近似偏导数:
3、反向传播在实践中的应用
在进行正向传播求激活值或者反向传播求误差值时,权重矩阵一般采用矩阵的形式;但是在进行参数优化时,一般采用长向量的形式,所以在计算时需要灵活转换。反向传播机制下参数学习算法的流程如下所示:
3.1 梯度检验-Gradient Checking
为了保证梯度计算的正确性,通常使用梯度检验来测试算法。使用割线的斜率代替导数的值时近似计算导数的常规思路:
使用割线斜率检测误差反向传播计算的梯度的准确性:
当检验完反向传播计算的梯度没有问题之后,在训练模型参数时,需要将检验梯度正确性与否的代码屏蔽掉,否则训练的过程将非常缓慢,因为误差反向传播的计算速度远高于通过割线计算梯度的速度。
3.2 随机初始化-Random Initialization
若将参数 Θ \Theta Θ开始全部设置为0,则在每一次迭代之后,由同一个神经元连接的不同子神经元的输入结果 z z z全部相同,则使得神经网络探索的特征数量下降,会降低神经网络的性能。
为了使神经网络更加有效,通常采用随机初始化参数 Θ 的方式,将 Θ取值为 [ − ϵ , ϵ ] 中的任意值。随机初始化也叫作打破对称性-Symmetry Breaking。
4、神经网络算法整体流程
1、选择一个神经网络结构-神经元之间的连接方式
输入单元的数量即为:特征数量 x ( i ) x^{(i)} x(i),输出单元的数量即为:分类的个数;隐藏层若多于一层,则每一层应该含有相同数量的神经元,同时通常来说,层数越多,模型效果越好,但是相对的计算时间会加长。对于每一个隐藏层的神经元个数,其通常为输入特征数量的2-3倍。
2、训练一个神经网络,包含以下六步:
2.1 随机初始化权重,通常初始化为接近0的数;
2.2 执行前向传播,对于每一个输入 x ( i ) x(i) x(i)获得其输出结果 hΘ(x(i))
2.3 求解成本 J(Θ)
2.4 执行误差反向传播来计算偏导数∂Θ(jk)(l)∂J(Θ)
2.5 使用梯度检验来检查通过误差反向传播计算的梯度和通过数值估计计算的梯度是否近似相同,若相同,则将这部分代码注释掉,在训练模型参数时不进行使用
2.6 使用梯度下降或者高级优化方法来由于以 Θ 为参数的成本函数 J(Θ)