吴恩达机器学习笔记(7)——神经网络的一个学习算法

一、代价函数

首先我们定义:
L = 神经网络的总层数
​si = 第L层的单元数量(不含偏置单元)
K = 输出单元/类型的数量
​hΘ(x)k​ = 假设函数中的第k个输出

因为逻辑回归里的代价函数为:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第1张图片

推广到神经网络中:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第2张图片




二、代价函数的优化算法——反向传播算法(backpropagation algorithm)

1、含义
神经网络的代价函数已经求出来了,那么现在要进行min J也就是优化算法。这一节的主要目的是计算J的偏导数。
每当模型预测发生错误时,就需要调整模型参数,进行提高识别精度,这种情况中最有代表性的就是“误差反向传播”
反向传播算法从直观上说,就是对每一个节点,我们计算这样一项:
在这里插入图片描述

当得到最后一层的预测误差后,我们便通过取微分调整,使得上一层的误差变小。这样逐层递推回去,就使得总体的误差变小了。

2、简要步骤
首先我们可以得到最后一层的误差项和激活项的关系:
在这里插入图片描述
然后我们可以得到前几层的误差项:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第3张图片
PS:因为第一层没有误差,因此第一个误差项不存在。

3、一般步骤
对于一个给定的训练集:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第4张图片
结束for循环后:

在这里插入图片描述

公式推导可以点这里




三、理解反向传播

反向传播和前向传播的过程其实极为类似,只是计算方向不一样而已,都是权重乘以单元值。

前向传播:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第5张图片

反向传播:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第6张图片

PS:一些编程小技巧:矩阵和向量的转换:octave中使用reshape命令。




四、梯度检测(gradient checking)

1、目的:
反向传播算法有许多细节,实现起来比较困难,而且有一个不好的特性,就是容易产生bug。有时候神经网络可能在迭代过程中确实得到了很好的结果,但是有bug的情况下会比无bug高出一个量级。梯度检测就是专门解决这种bug的存在的。它将完全保证你的前向传播和反向传播是百分百正确。

2、数学方法
使用双侧差分算法:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第7张图片

3、伪代码:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第8张图片
在这里插入图片描述
一般的,epsolon被设置为10-4.

PS:注意!一旦使用梯度检测算法验证正确,就要关闭,不然会导致神经网络算法的速度减慢。




五、随机初始化(random initialization)

在神经网络开始梯度下降之前,我们都要Θ设置一个初始值。如果都设置为0,就会出现对称问题(symmetry breaking),即所有的单元值相等。
随机初始化就是解决这种问题的方法。

具体做法:
吴恩达机器学习笔记(7)——神经网络的一个学习算法_第9张图片




六、总体回顾

总而言之,训练一个神经网络的方法:首先要将权重随机初始化为一个接近0的数,然后进行反向传播,再进行梯度检验,最后使用梯度下降或者其他高级优化算法来最小化代价函数J。
具体步骤如下:
1、选择一种网络构架:
输入单元是由特征数目决定的。
输出单元是由所要区分的类别个数确定
隐藏层单元个数与数目:只使用单个隐藏层,如果隐藏层大于1 ,那么默认每一
个隐藏层都有相同数目的单元数(单元数越多越
好)。
2、训练一个神经网络:
(1)随机初始化权重
for循环:
(2)前向传播,得到h值
(3)计算代价函数J
(4)反向传播,得到偏导值
结束循环
(5)梯度检测
(6)停用梯度检测,梯度下降法计算J的最小值

PS第四次作业:1.求代价函数时,是X和对应的Y相乘,也就是对应元素相乘。

你可能感兴趣的:(吴恩达机器学习)