Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning

此系列为 Coursera 网站Andrew Ng机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning

Week 5 —— Neural Networks : Learning

目录

  • Week 5 Neural Networks Learning
  • 目录
  • 一代价函数和反向传播
    • 1-1 代价函数
    • 1-2 误差反向传播
        • 神经网络误差反向传播补充
  • 二 神经网络的技巧
    • 2-1 展开参数unrolling parameter
    • 2-2 梯度检验Gradient Checking
    • 2-3 随机初始化
    • 2-4 神经网络总结

一代价函数和反向传播

1-1 代价函数

首先定义一些我们需要使用的变量:

  • L =网络中的总层数
  • sl =第l层中的单位数量(不包括偏差单位)
  • K =输出单元/类的数量

首先,回想一下“逻辑回归”正则化的成本函数是:
这里写图片描述
这里写图片描述
这个式子看着复杂,但其实并不难理解:我们只是添加了几个嵌套的求和,来解释我们的多个输出节点。

(1)在方程的第一部分,在方括号之前,我们有一个额外的嵌套总和,表示输出节点的数量。
(2)在正则化部分,在方括号后面,我们必须考虑多个theta矩阵。当前theta矩阵中的列数等于当前图层中的节点数(包括偏置单元)。在我们当前theta矩阵中的行数等于下一层中的节点数(不包括偏置单元)。与之前的逻辑回归一样,我们对每一项进行平方。

1-2 误差反向传播

建议神经网络知识多找一些资料好好学习,很重要!!!
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第1张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第2张图片

正则化:

这里写图片描述
从别的博客看到的关于反向传播的理解:

(1)由于参数选的不好,导致网络最后输出的结果与真实值相差甚远。我们很自然的求出了最后一层的误差(真实-输出)。
(2)但是,最后一层的神经元不服气:明明数值都是前面的神经元传递过来的,出了误差凭什么都赖我啊?我要兴师问罪!
(3)于是,最后一层的神经元就去找前面一层的神经元问罪,问罪的证据就是参数Θ。谁的Θ大,就说明谁传过来的误差大,责任也就越多。靠这个方法,最后一层的神经元,把误差的责任按照比例“推卸”给了前一层。
(4)前一层也按照这个方式,一层层往前“推诿责任”。这样,误差就反向传播给了每一层。

神经网络误差反向传播(补充)

Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第3张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第4张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第5张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第6张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第7张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第8张图片

二 神经网络的技巧

2-1 展开参数(unrolling parameter)

这一部分我们会讲一个在实现中需要注意的细节,怎样将矩阵转化为向量,以便高级最优化算法中使用。 在神经网络中,我们经常会对一些矩阵进行处理:
这里写图片描述
为了能够使用优化函数,例如fminunc(),我们会将矩阵展开成一个长长的向量:

thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]
deltaVector = [ D1(:); D2(:); D3(:) ]

如果Theta1的维数为10x11,Theta2为10x11,Theta3为1x11,则可以从“展开”后的向量获取原始矩阵,如下所示:

Theta1 = reshape(thetaVector(1:110),10,11)
Theta2 = reshape(thetaVector(111:220),10,11)
Theta3 = reshape(thetaVector(221:231),1,11)

2-2 梯度检验(Gradient Checking)

利用前面所说的前向传播和后向传播计算梯度时容易出现一些小错误而不被发现,导致表面上代价函数可能在减小,但你最后得到的结果可能与实际有很大的误差,这时候就需要进行梯度检验来检验我们计算的梯度是否是我们所需要的。

这里需要提出梯度的数值估计这个概念。

如下图所示的函数:
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第9张图片
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第10张图片
接下来我们要检验的就是下式是否成立,成立则说明反向传播算法是正确的。

数值估计的梯度≈后向传播计算得到的梯度

梯度检验的实现要点(步骤):

1、使用后向传播计算DVec(偏导数向量)
2、计算数值梯度的估计值gradApprox
3、确保DVec和gradApprox值相近
4、关闭梯度检验,再使用后向传播进行学习

注意:

在训练分类器之前一定要关闭梯度检验,如果没有关闭,则在梯度下降的每次迭代中都进行数值梯度的计算,代码运行将十分缓慢。梯度的数值估计相对于后向传播计算梯度来说是较大的工作量,我们使用数值估计的初衷仅仅是为了检验后向传播的实现是否正确。

2-3 随机初始化

2-4 神经网络总结

1.选择一个网络模型

  • 输入层单元数:特征 x(i) 的维数
  • 输出层单元数:分类的类别数。 多类别分类问题输出层有多个单元,输出的 y 不是一个数了,而是由一些 0 和一个 1 组成的向量。
  • 隐藏层数目:默认使用1个隐藏层,如果隐藏层数目多于1个,则每个隐藏层应该有相同的单元个数。 隐藏层单元数越多,效果越好,通常取稍大于输入特征的数目。

2.训练神经网络
Coursera-吴恩达-机器学习-(第5周笔记)Neural Networks——Learning_第11张图片
3.预测新样本

你可能感兴趣的:(Coursera机器学习)