9、Neural Networks:Learning(神经网络:学习)
9.1 Cost function(代价函数)
对于分类问题,分为二分类和多分类问题。对于二分类,输出层只需要一个单元(unit);对于多分类,输出层需要分类数个单元。如下图所示:
代价函数如下图所示:
注:和以前提到的一样,正则项对所有的偏置单元所对应的
θ
0
\theta_0
θ0(西瓜书中的阈值)都不作用,只对其余的参数(权重)进行惩罚。
9.2 Backpropagation algorithm(反向传播算法)
对应于西瓜书中的误差逆传播算法(error Backpropagation algorithm),简称“BP算法”。
BP算法的核心思想就是:“链式法则”求导。先求出代价函数对各个层级单元的偏导,然后再根据该层级对前一层级的参数(权重)求导,利用链式法则,就能求出代价函数对每个层级的参数(权重)的偏导,然后就可以利用优化算法进行优化。根据代价函数,从输出层,按照层级的顺序反向对各个层次求导,因此被称为“反向传播算法”。
现在的库这么高级,一般不需要编程人员自己收到编写反向传播算法,可以直接调用库。
9.3 Backpropagation intuition(理解反向传播)
上图是将神经网络的步骤分的更细了,其中的
z
(
l
)
z^{(l)}
z(l)是第
l
l
l层激活函数的输入,
a
(
l
)
a^{(l)}
a(l)是第
l
l
l层激活函数的输出,这意味着
a
(
l
)
a
(
l
)
=
g
(
z
(
l
)
)
a^{(l)}a^{(l)}=g(z^{(l)})
a(l)a(l)=g(z(l)),
g
g
g是激活函数,并且
z
(
l
+
1
)
=
Θ
(
l
)
a
(
l
)
z^{(l+1)}=\Theta^{(l)}a^{(l)}
z(l+1)=Θ(l)a(l),这样写的目的就是第八章中所说的为了更简洁地写出反向传播算法中的链式法则求导的形式。
9.5 Gradient checking(梯度检测)
这一节所说的是:利用数值梯度去检测根据反向传播算法算出来的梯度是否一样(这里的一样是指相近)。不一样的原因在于,反向传播算法编程的时候有bug,和数学无关。
注:不用每一次迭代都进行检查,可以每隔几次迭代检查一次。因为,求解数值梯度计算量大。
9.6 Random initialization(随机初始化)
优化过程中的初始化,通常是随机给的,而不是都选0,这是因为如果都选0,则下图中,任意两条相同颜色的线所对应的参数(权重)就会在整个迭代优化过程中,始终都是一样的(这种情况称为“对称”),这样明显不合理。
随机初始化的方法,如下图所示,其中
ϵ
\epsilon
ϵ是小值。
9.7 Putting it together(组合到一起)
本节就是把前面讲的总结到一起,说明了神经网络的总体实现过程。
第一步,选择神经网络结构
第二步,训练神经网络
注:训练集,验证集,测试集等后面会讲到。