将介绍在给定训练集的情况下为神经网络拟合参数的学习算法。
介绍多类分类的代价函数反向传播算法(实现中出现的细节问题)
9.1 Cost Function
定义一些标记和两种不同的分类:
逻辑回归分类代价函数 进化到 多类分类的代价函数:
9.2 Backpropagation algorithm
从前向传播到反向传播算法:
因为 ,所以,右图中可以如此表示。
反向传播就是从输出层的误差向前一层传递。
首先正向算出每层的输出a,再反向计算每层的误差。
9.3 Backpropagation intuition
如上图,计算每层上每个神经元的输出误差,可表为后一层误差乘以对应权重之和。
9.4 Implementation note: Unrolling parameters
本节主要讲了实现中参数展开一些值得注意的细节,矩阵与向量之间的转换。
矩阵展开为向量;向量reshape为矩阵。
例子: 学习算法:
9.5 Gradient Checking
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,虽然代价看上去在不断减小,但最终的结果可能并不是最优解或者存在一些不容易察觉的小错误。
数值实验中,调用的函数的计算方法如右一,如右二我们还要检查是否等于或者近似于反向传播得到的梯度
在梯度检验完毕后,一定要关掉否则code将会很慢,因为数值计算梯度的时间很长,效率远低于反向传播DVec函数的计算效率。
9.6 Random initialization
如果把权重都初始化为0的话那么经过激活函数得到的a也相同,theta的变化想通过最后得到的theta值也一样,这就失去了神经网络学习参数的意义。所以采用随机初始化:
9.7 Putting it together
前面讲了很多神经网络算法的一些知识,这节做一个总结。
随机初始化权重矩阵,前向传播得到,计算代价函数,反向传播计算代价函数的偏导数,再进行梯度检验,最后利用计算的到的偏导数结合一些优化方法计算。
9.8 Backpropagation example: Autonomous driving (optional)
【matlab实例】
1、计算时要一层一层计算
2、计算J时,有含正则项和未含正则项两种情况
3、反向传播检验梯度时也分这两种情况
4、最后得到权重参数theta 结合输入X得到输出