Stanford机器学习 第四周:神经网络学习

1 代价函数

神经网络分类表述:

代价函数(cost function)

2 反向传播算法

得到了神经网络的代价函数后,接下来要做的就是找到参数Θ使J(Θ)取得最小值:

假设整个训练集只有一个训练样本(x,y),反向传播算法:

Forward propagation:

Backpropagation(反向传播):

之所以叫反向传播是因为我们是从输出层开始计算的,计算时不存在计算δ(1) 是因为第一层对应输入层,这是我们在训练集观察到的,所以不会存在误差。

 

假设整个训练集有非常大的训练样本时,反向传播算法:

3 反向传播直观理解

Forward Propagation(从左往右计算)原理:

Backpropagation(从右往左计算)原理:

 

4 Implementation note:Unrolling parameters

上一节介绍了利用反向传播算法计算代价函数的导数,本节介绍一个细节的实现过程,怎样把你的参数从矩阵展开成向量,以便我们在高级最优化步骤中的使用需要。

使用矩阵表达式的好处是:当你的参数以矩阵形式存储时,你在进行正向传播和反向传播时更加方便,充分利用了向量化的实现过程。向量表达式的优点是:当你拥有thetaVec或者Dvec这样的矩阵时,当你使用高级优化算法时,这些算法通常要求所有的参数都要展开成一个长向量的形式。

5 梯度检验

当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,为了避免这样的问题,我们采取一种叫做梯度检验的方法

梯度的数值估计,θ是一个实数

θ是一个n维向量

如果梯度的数值估计gradApprox与通过反向传播得到的DVec近似相等,就可以认为我们通过反向传播得到的DVec是正确的,就可以将DVec用在梯度下降或者其他优化算法里。一旦确定了反向传播算法是正确的就应该关闭梯度检验,如果不关闭会导致程序运行速度很慢。

6 Random initialization

对于梯度下降或者其他高级优化算法都需要进行参数Θ初始化,到目前为止我们都是初始所有参数为0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。

也就是说每一次更新,图中两个隐藏单元都是相等的。这就阻止了神经网络学习一些有趣的事儿。解决方法就是参数要随机初始化,打破对称性。

7 Putting it together

选择神经网络的结构

训练神经网络

注意J(Θ)一般是非凸函数,通过梯度下降算法一般都能得到比较不错的局部最小值,尽管不能保证是全局最小值。

猜你喜欢

转载自blog.csdn.net/king_jie0210/article/details/67640177