9、1代价函数
二元分类和多元分类:
二元分类就是前面的logistic regression .
代价函数:
这里的代价函数和logistic函数代价函数主要区别是:
输出单元有1个变为k个,需要正则化的系数变多了。
9、2反向传播算法
前向传播:
这里我们是假设只有一个训练集(x,y)
反向传播算法:
这里我们从最后一层的误差开始计算,逐个计算前两层的误差。这里的误差值会被用于计算偏导数。
反向传播算法过程:
9、3理解反向传播算法
前向传播:
反向传播:
反向传播和正向传播计算所使用的权值(每条线段代表一个权值)是一样的,不同的是反向传播不需要使用最上面的一个权值。
9、4处理参数
如何把
θ
\theta
θ参数从矩阵形式变成向量形式:
例子:
这里的ThetaVec把三个矩阵变成了一个231*1的向量;
reshape就是从向量中取出一定数量的数构成新的矩阵。
算法表示:
9、5梯度检测
用前向/反向算法计算偏导数,由于反向算法比较复杂,经常出现一种现象:代价函数确实在每一次迭代后变得更小了,但最后算出来的结果并不是我们想要的,这是由于反向传播算法中的小bug 导致的。因此我们必须要进行梯度检测:
我们用双侧差分而不是单侧差分来近似估计导数。
对于多个参数:
算法表示:
反向传播计算出的偏导数DVec和这里的GradApprox是否相等。
先应用反向传播算法来计算Dvec,再应用梯度检测来计算gradApprox,来确定他们俩是否相等,然后结束梯度检测算法(这个算法的运算量十分大),使用反向传播算法。
9、6随机初始化
初始化为0:
会使得同一神经元发出的
θ
\theta
θ值一样,引起对称权重问题。
随机初始化:
随机初始化就是把这些权值初始化为:在0附近属于[-
ϵ
\epsilon
ϵ,
ϵ
\epsilon
ϵ]的值。
9、7神经网络整个过程
-
选择训练模型结构
确定输入层:特征项数
确定输出层:分类的种类
确定隐藏层:隐藏层一般默为1;如果>1的话,一般默认隐藏层的神经元个数相等(其中隐藏层神经元个数为特征项数的1倍、2倍、3倍,太大就会失去意义)。
注意;当分类种类只是在1-10之间时,输出层一定是个向量表示,而不是一个实数。 -
训练神经网络