机器学习笔记-7(神经网络的实现)

第九部分终于出来了,迅速看完。总算了解些许神经网络的实现和运作流程。

Neural Network (Classification)

神经网络/分类

按照自己的理解是,神经网络一般用于特征规模比较大或者是特征粒度特别细的情况下,也就是用微粒去寻找内在的模式。比如,前面提到的汽车识别的问题。像素在特征粒度来看是非常细密的,单看像素信息,是没法看出内禀模式的,所以多层结构的神经网络在这种情况下,就变得比较厉害。隐层内的逻辑处理单元对应这神经结构中的神经元,同层中的多个逻辑单元其实就是对上一层的输入进行不同组合的操作(配以不同的参数/权重),这样子通过对像素信息的不同组合,就能抽象出其中的不同模式(例如,图片区域方向/材质之类的信息)。层数越多,寻找到的模式就有可能越抽象,能实现的东西就会越强大。

由于,多层多节点的结构特性和多输出的情况。神经网络中,逻辑单元的成本函数需要进行些许变动,也就是对输出层每节点的成本函数结果进行求和。
Cost function for neural network

神经网络中的成本函数

很好,现在我们得到了神经网络的成本函数,按照之前学习到的内容,下一步就是折腾出最小的Cost。由于神经网络的结构,所以求取梯度的方式跟之前的方法略有不同,但是求取最小Cost的思想跟下降法是一样的,不同的只有需要得到每层每节点梯度的求法,其中要还需要用到每层之间的误差数据,这是由于多层多节点结构的影响。这种求最小Cost的方法,在神经网络里面称之为”误差反向传播”。

Gradient computation-1

神经网络中的常规梯度计算

Gradient computation-2

神经网络中的正向传播过程

Gradient computation: Backprop algorithm

神经网络中的反向传播过程

Backprop algorithm

反向传播算法的实现

之前不是很理解这么酷炫的方法的,不过后面多看的几次大概知道了实现思想。之前我们讲到了正向传播,而反向传播正好与其方向相反。正向传播,是对于这个结构而言的,信息层层推进。而误差反向传播,其实是这种机器学习类型的训练方式。一开始特征通过初始化参数/权重进行正向传播,达到输出层得出结果。这时候,这个结果完全是蒙出来的。所以,需要通过一定的方式对参数进行调整。这里的方式就是误差反向传播了,将结果与训练数据相比较,获得误差,然后使用类似梯度下降的方法将误差逐层逐节点进行反向传递,并在传递的过程中不断地通过偏导对参数进行调整,一来一去,一来一去直至到达合适的最优点(全局/局部)。

Forward Prop

特征正向传播

Back prop

误差反向传播

扯虽然是这么扯,但是对于实现的机理还不怎么清楚的说。不过,教授说了~ 其实,即使是他用了这方法这么多年,有时候还是觉得这玩意儿有难以理解的地方。。。。嘛,那咱也先忽略更深入的细节问题好了。

这部分课程的第四节说的是对于参数的展开,其实就是矩阵和向量的转换,在某些情况下,这些转换更加直观和效率。不细扯~

由于神经网络的复杂程度,所以提前对算法正确性进行Check是比较有必要的。 so在这情况下,咱就会使用”梯度检测”(Gradient check)的方法,对算法的正确性进行验证。实现方法就是,用神经算法里面反向传播得到的梯度与数值化方法计算出来的梯度(其实就是导数/斜率)进行比较,差不多的话,就可以认为这算法基本跑的正常了。不过到真正开始训练的时候,请务必把它关掉,因为这检测使用了数值化计算的方式,会严重影响算法速度,所以训练时得关掉才行。

Numerical estimation of gradients

数值化计算梯度/斜率

Gradient check note

梯度检测的注意要点

第六节内容,开始讲到参数初始随机化的问题。之前的回归算法里,咱可以对参数全部初始化为0,而到了神经网络里面的话,如果还用这种方式的话,可能会出现些问题。那就是隐层节点的输入都是一样的,而且之后更新参数的时候,还是会出现这种情况。咱们把这的情形称之为对称权重。这对与算法正确性而言无疑是非常不利的,所以课程提供的解决方式就是把参数初始化在一个 [−ϵ,ϵ]区间内的随机数, ϵ 可以很小。不过这里的ϵ,跟前面的梯度检测里面的ϵ木有任何联系。
Zero initialization

零初始化的情况

最后,咱们把这些东西都放在一起,就构成了实现一个神经网络的大概步骤。在这之前需要确定神经网络的结构, 包括:

  • 输入单元的个数:特征 x(i) 的维数;
  • 输出单元的格式:类的个数
  • 隐藏层的设计:比较合适的是1个隐藏层,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

Training a neural network

选择神经网络结构的一般准则

然后是训练神经网络的步骤:

  1. 随机初始化各参数/权重向量
  2. 输入特征Xi,正向传播到各层各节点的hΘ(x(i))
  3. 计算成本函数J(Θ)
  4. 通过反向传播,计算偏导ϑJ(Θ)/ϑΘ(l)jk
  5. 使用梯度检测对使用反向传播计算出的偏导ϑJ(Θ)/ϑΘ(l)jk和数值化方法计算出J(Θ)的梯度进行比较,然后训练时候关掉
  6. 使用梯度下降或者其他高阶方法配合反向传播求出成本函数J(Θ)的最小值

Training a neural network-1

训练一个神经网络的一般步骤-1

Training a neural network-2

训练一个神经网络的一般步骤-2

Back prop intuition

反向传播求最小值的直观图像/等高线图

Well,这就是大概的几个流程。其实用言语来说明还是略显单薄无力,还是要配合着那些式子看才能理解。

总而言之,神经网络真是个非常流弊的算法模型。课程后面给出那个自动化汽车的视频,使用的就是神经网络,简直强大到丧心病狂。电脑经过两分多钟的学习,多个神经网络(三层)同时并行计算出操控的信心并综合出结果,然后就能够大概的自己驾驶起来了。。。。

后面,好像还有课程,不知道有没有Deep Learning相关呢?

“机器学习笔记-7(神经网络的实现)”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注