[机器学习笔记]Note7--神经网络:学习

继续是机器学习课程的笔记,这节课会继续介绍神经网络的内容,上一节主要是基本的介绍,以及模型表示,而本节会介绍代价函数,反向传播算法等。

神经网络代价函数

 首先是有如下一个神经网络,这里将首先介绍一些标记符号的意思。
  • L 代表一个神经网络中的层数
  • Sl 代表第l层的处理单元(包括偏置单元)的个数
  • SL 代表最后一层中处理单元的个数
  • K 代表我们希望分类的类的个数,与SL相等

    这里写图片描述

    所以上图显示的神经网络是一个4层,输出结果也是4个结果,也就是K=4,SL=S4

    在逻辑回归归一化中,我们的代价函数如下所示:

    J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i)log(1hθ(x(i)))]+λ2mj=1nθ2j

这里我们只有一个输出变量,也称为标量(scalar),也就是一个因变量y.

但是在神经网络中,可以有很多输出变量,这里的hθ(x)是一个维度为K的向量,并且训练集中的因变量也是同样维度的一个向量,因此,得到的代价函数会比逻辑回归更加复杂一些,如下所示:

J(θ)=1m[i=1mk=1Ky(i)klog(hθ(x(i)))k+(1y(i)klog(1(hθ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(θ(l)ji)2

上述式子归一化那项中排除了每一层的 θ0,同时最里层的循环j循环所有的行(由 sl+1层的激活单元数决定),循环i则循环所有的列,由该层( sl层)的激活单元数所决定。

反向传播算法

在上一节中介绍了正向传播方法来计算神经网络的输出结果,现在需要计算代价函数的偏导数θ(l)ijJ(θ),需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层层反向求出各层的误差,直到倒数第二层。

下面以一个开头给出的4层神经网络来说明反向传播算法。
假设训练集只有一个实例(x(1),y(1)),使用一个四层的神经网络,其中,K=4,SL=4,L=4。

从最后一层的误差开始计算,误差δ是激活单元的预测a(4)k与实际值yk之间的误差,即δ(4)=a(4)y,这里是使用向量化表示,所以不需要使用下标k。

接着利用这个误差值计算前一层,也就是第三层的误差:

δ(3)=(θ(3))Tδ(4).g(z(3))

其中 g(z(3))是S形函数的导数, g(z(3))=a(3).(1a(3)),而 (θ(3))Tδ(4)是权重导致的误差的和。

下一步就是继续计算第二层的误差:

δ(2)=(θ(2))Tδ(3).g(z(2))

由于第一层是输入变量,不存在误差,我们有了所有的误差的表达式后,便可以计算代价函数的偏函数了,假设 λ=0,即不做任何归一化处理时,有:
θ(l)ijJ(θ)=a(l)jδ(l+1)i

如果考虑归一化处理,并且训练集是一个特征矩阵而非向量。在上述的特殊情况中,是需要计算每一层的误差单元来计算代价函数的偏导数。而在更为一般的情况中,同样需要计算每一层的误差单元,但是更需要为整个训练集计算误差单元,此时的误差单元就是一个矩阵。使用(l)ij来表示这个误差矩阵,第l层的第i个激活单元受到第j个参数影响而导致的误差。

算法如下所示:
这里写图片描述

即首先是用整向传播算法计算出每一层的激活单元,利用训练集的结果和神经网络预测的结果求出最后一层的误差,再利用该误差使用反向传播算法计算出直至第二层的所有误差。

求出了(l)ij之后,我们便可以计算代价函数的偏导数了,计算方法如下:

D(l)ij=1m(l)ij+λθ(l)ijif j0D(l)ij=1m(l)ijif j=0

梯度检验

当对一个比较复杂的模型,如神经网络,使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在减小,但最终的结果可能并不是最优解。

为了避免这样的问题,我们将采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。

对梯度估计采用的方法是在代价函数上沿着切线的方向选择两个非常近的点然后计算两个点的平均值用以估算梯度。也就是对于某个特定的θ,我们计算出在θϵ处和θ+ϵ的代价值(ϵ是一个非常小的值,通常选取0.001),然后求两个代价的平均,用以估算在θ处的值,如下图所示:
这里写图片描述

θ是一个向量时,我们则需要对偏导数进行检验,因为代价函数的偏导数检验只针对一个参数的改变进行检验,即如下所示,下面是一个只针对θ1进行检验的示例:

θ1=J(θ1+ϵ,θ2,θ3,,θn)J(θ1ϵ,θ2,θ3,,θn)2ϵ

然后需要通过反向传播算法计算出的偏导数进行检验,当两者比较接近就说明运行正确。

这里有几点需要注意的:

  • 在反向传播中计算出J(θ)θ的导数D,并组成向量
  • 用梯度检验法计算大概的梯度gradApprox=J(θ+ϵ)J(θϵ)2ϵ
  • 判断上述两者是否相同或者接近
  • 最重要的一点是,当需要使用神经网络学习的时候,必须停止使用梯度检验,否则会使得学习速度非常慢

随机初始化

对于梯度下降算法和其他优化算法都是需要初始的参数。在之前逻辑回归中,对于θ是初始化为0,这样做是对逻辑回归是可行的。但是对于神经网络却是不可行的,如果我们令所有的初始参数都为0,这意味着第二层的所有激活单元都会有相同的值。同理,如果将所有参数初始化为同一个非0的参数,结果也是一样的。

因此,我们通常初始参数为[ϵ,ϵ]的随机值。

小结

这里小结下使用神经网络时的步骤:

网络结构:

第一件事要做的是选择网络结构,即选择多少层以及决定每层分别有多少个单元。

  • 第一次的激活单元数就是训练集的特征数量
  • 最后一层的激活单元数是训练集的结果的类的数量
  • 如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好

所以我们真正要决定的是隐藏层的层数以及其单元数。

训练神经网络

  • 权重随机初始化
  • 使用正向传播方法计算所有的hθ(x)
  • 编写计算代价函数J(θ)的代码
  • 使用反向传播算法计算所有的偏导数
  • 使用梯度数值检验方法检验这些偏导数
  • 使用梯度下降算法或其他优化算法来最小化代价函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[机器学习笔记]Note8--机器学习应用建议

继续是机器学习课程的笔记,本节课的内容主要是一些机器学习应用的建议,包括对假设的评估,如何处理过拟合和欠拟合等。 觉得下一步做什么 到目前为止,我们已经学习了线性回归,逻辑回归以及神经网络,梯度下…

Unity3d 手机屏幕自动适配

现在,市场上的手机分辨率多样化。带给开放人员一个很大的“跨界问题”。本人,昨晚突发奇想。手机分辨率多样化,但手机开放人员,制作UI时,最为重要的两个因素就是Position(位置)、Scale(大小); 我引入一个“…

[机器学习笔记]Note9--机器学习系统设计

继续是机器学习课程的笔记,本节课的内容主要是介绍如何设计一个机器学习系统。 首先要做什么 这节课将介绍如何设计一个机器学习系统,首先是以设计一个垃圾邮件分类器算法作为例子。 为了解决这个问题,首先要决定的是如何选择并表达特征向…

java 图片阴影_Java 为 PPT 中的图形添加阴影效果

在PowerPoint文档中,给图形添加阴影效果能增强图形的立体感,使其贴近现实效果,提升文档的美观度。 本文将展示如何使用Free Spire.Presentation for Java为PPT中的图形添加阴影效果。除了文中展示的预设阴影效果,还可以添加内部阴…

nyoj 21 三个水杯 BFS

三个水杯 时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只…

论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels

这是阅读《Fine-grained Image Classification by Exploring Bipartite-Graph Labels》这篇论文所做的笔记。 这篇论文是来自NEC实验室,是一篇有关细粒度分类/精细分类方面的论文。 0. 摘要 首先提出一个问题,给定一张食物的图片,对于一个…

java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。注解可以看作是一种特殊的标记,在程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。本文对 Annotation 进行了…

[机器学习笔记]Note10--支持向量机(SVM)

继续是机器学习课程的笔记,这节课的内容是介绍支持向量机(SVM)的内容。SVM是一个非常强大且流行的算法,在一些情况下,面对一些复杂的非线性问题可以提供比逻辑回归或神经网络更加简洁更加有效的结果。 优化目标 首先…

[机器学习笔记]Note11--聚类

继续是机器学习课程的笔记,本节介绍的是聚类方法,主要是K-means算法。 非监督学习 首先介绍监督学习和非监督学习的区别。一个监督学习的例子如下图,给定训练集如:{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},每个训练实例都有对应的标签。 …

[机器学习笔记]Note12--降维

继续是机器学习课程的笔记,本节介绍的是降维方法,这也是非监督学习中的一个问题,主要介绍主要成分分析(Principal Component Analysis,PCA)算法。 降维 动机一:数据压缩 使用降维的一个原因是…

[机器学习笔记]Note13--异常检测

继续是机器学习课程的笔记,本节课内容是异常检测,它是一个非监督学习算法,用于发现可能不应该属于一个已定义的组中的数据。 密度估计 首先是给出一个例子,如下图所示,是一个测试飞机引擎的例子,给定数据…