coursera机器学习课程第五周——课程笔记

  第五周课程学习结束,一直都是边上课边做笔记(纸质),没有想过在这里再梳理一遍然后将笔记整理出来,考虑之后觉得这一步很重要,可以借此对学过的这一周所有知识做一个梳理,方便自己更好的理解这些知识,而且这些笔记放在博客里也方便自己以后的回顾,所以要坚持将笔记做下去,待到所有课程结束之后再把前四周的课程笔记整理写到这里。

首先上周课程介绍了神经网络的结构和前向传播过程(feed forward),了解了神经网络是如何进行预测的;本周介绍了cost function作为结果比较的标准以及backpropagation方法作为错误修改的方法。

1、Cost function

假设给定m个样本,分别是:;L代表网络中的总层数;代表在第l层中神经元的数量(不包括偏差神经元)。

当遇到二分类问题时:

当遇到K分类问题时:(y的值应该用这种0-1矩阵表示)

逻辑回归和神经网络的损失函数比较(有正则化项,但不包括bias terms):

     

我们知道,逻辑回归一般用于二分类问题,但神经网络多用于K分类问题,根据逻辑回归方法的损失函数提出了神经网路的损失函数。需要注意的是,正则化项均不包括bias terms。

2、Backpropagation algorithm

神经网络中,我们需要最小化损失函数需要求的值有:

下面先来介绍一下BP神经网络,下面是神经网络的示意图:


Layer1,相当于外界的刺激,是刺激的来源并且将刺激传递给神经元,因此把Layer1命名为输入层(Input Layer)Layer2-Layer3,表示神经元相互之间传递刺激相当于人脑里面,因此命名为隐藏层(Hiddenlayers)Layer4,表示神经元经过多层次相互传递后对外界的反应,因此Layer4命名为输出层(Output Layer)

简单的描述就是,输入层将刺激传递给隐藏层,隐藏层通过神经元之间联系的强度(权重)和传递规则(激活函数)将刺激传到输出层,输出层整理隐藏层处理的后的刺激产生最终结果。若有正确的结果,那么将正确的结果和产生的结果进行比较,得到误差,再逆推对神经网中的链接权重进行反馈修正,从而来完成学习的过程。这就是BP神经网的反馈机制,也正是BPBackPropagation)名字的来源:运用向后反馈的学习机制,来修正神经网中的权重,最终达到输出正确结果的目的!

    当给定一个训练样本(x, y)时,前向传播的过程:


    在后向传播中定义了,表示第l层节点j的残差,即实际观察值与估计值(拟合值)之间的差。那么对于第四层:

    而对于前面几层:

    

    不计算第一层的delta值,因为第一层是训练数据,不需要考虑误差。

    下面是BP算法的伪代码:

   

    使用Δ来计算

           

上面j的值是否为零决定着bias regularization项的有无。

3、Backpropagation intuition

反向传播的具体计算:


对于每一层来说,delta分量都等于后面一层所有的delta加权和,其中权值就是参数theta。

4、Implemention note: Unrolling parameters

主要讲参数的向量化以及还原,因为有些高级算法要求所有参数都要展开成一个长向量的形式。


5、Gradient checking

如何确定你的代码是否正确呢?这里就提出了梯度检测的方法来确定你的方法是否正确,通过将该方法得到的梯

度值与计算得到的D值进行比较,如果近似相等则表示代码正确,否则错误。

需要注意

a、实现反向传播算法来计算梯度向量DVec(此处是由D(1)D(2)D(3)向量化得到的长向量);

b、实现梯度检测方法计算得到gradApprox;

c、确保DVec和gradApprox值得近似相等;

d、关闭梯度检测方法,然后使用反向传播进行学习。

特别注意:

使用梯度检测方法进行确认代码是否正确后,要关闭梯度检测方法再进行学习。因为该算法代价高,复杂度高。所以需要及时关闭,而且这也是不使用该方法来在学习过程中计算梯度的原因。


6、Random initialization

theta的值不能像逻辑/线性回归中那样初始化为0,需要随机初始化。因为当初始化为0时,所有的节点将会反复更新为同一个值,不会改变,所以需要随机初始化。随机初始化的过程如下:


7、Putting it together


首先要选取一个神经网络的结构(即神经元之间的连接模式)。需要确定的有:

a、输入节点的个数(特征X的维数)

b、输出节点的个数(类的数量)

一般默认只有一个隐藏层,当隐藏层大于一的时候,每个隐藏层节点的数量相同。理论上隐藏层的数量越多越好(深度网络),但数量越多计算量就越大,所以要综合考虑。


在确定完神经网络之后,按下面的步骤进行训练:

a、随机初始化权重值(theta);

b、实现前向传播来为每个得到对应的

c、实现代码来计算得到损失函数J(theta);

d、实现反向传播来计算偏导数:

下面是具体实现:


e、使用梯度检测方法计算得到梯度值与反向传播得到的D值进行比较是否近似相等。如果近似相等则进行下一步,切记关闭梯度检测算法;

f、使用梯度下降法或者是高级的优化方法(基于反向传播)来最小化J(theta)(关于参数theta的方程)。


此时J(theta)—non-convex(非凸函数),所以会得到局部最小值,但是该局部最小值也已经非常小。



慢慢积累。

By 信念

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值