Coursera机器学习-第五周-Neural Network BackPropagation

本文详细介绍了神经网络中的成本函数和反向传播算法。在成本函数部分,讨论了二分类和多分类问题的成本函数。接着,解释了反向传播(BackPropagation)的基本原理,包括神经网络的结构、残差的定义以及如何计算每个层的误差δ。通过伪代码展示了BP算法的实现过程,并在实践中给出了简化神经网络成本函数的情况、误差计算以及初始化参数的重要性。最后,提到了训练神经网络时的梯度检查和随机初始化参数的必要性。
摘要由CSDN通过智能技术生成

Cost Function and Backpropagation


Cost Function

假设有样本m个。 x(m) 表示第m个样本输入, y(m) 表示第m个样本输出, L 表示网络的层数,sl表示在 l 层下,神经单元的总个数(不包括偏置bias units),SL表示输出单元的个数

当遇到二分问题时, SL=1y=0or1
遇到K分类问题时, SL=Kyi=1

例如遇到5分类问题时,输出并不是 y=1,y=2,...y=5 这类,而是标记成向量形式 [10000]T,[01000]T.....[00001]T

这里写图片描述

我们先看Logistic Regression Cost Function:
这里写图片描述

m表示样本个数,前半部分表示假设与样本之间的误差之和,后半部分是正则项(不包括bias terms)

logistic regression一般用于二分类,所以cost function写成上式,那么神经网络的Cost Function如何写呢?它可是K分类( K2 ),由上述 J(θ) 推广,我们可以得到如下:

这里写图片描述

其实,就是在上述的基础之上,对每个类的输出进行加和,后半部分是对bias项所有参数的平方和(不包括bias terms)


BackProgagation ALG

从第四周的课程当中,我们已经了解到了向前传播(Forward Propagation),向后传播(BackPropagation)无非是方向相反罢了。

先简述一下BP神经网络,下图是神经网络的示意图:
这里写图片描述

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

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

那么,算法是如何实现的呢?如何向后传播呢?
在BackPropagation中,定义了一个:
这里写图片描述

表示l层节点j的残差,残差是指实际观察值与估计值(拟合值)之间的差。
那么 δ(l)j 是如何得到的呢?

由上面提到的定义:残差是指实际观察值与估计值(拟合值)之间的差,那么对于Layer4而言 δ(4)j=a(4)jyj ,其中 a(4)j 表示拟合值, yj 表示实际观察值,要得到 a(4)j ,我们需要通过

Forward Propagation:
这里写图片描述

对于 δ(3)j,δ(2)j :
这里写图片描述

由此,我们得到计算 δ 的方式,下面来看BP算法的伪代码:

这里写图片描述
ps:最后一步之所以写+=而非直接赋值是把Δ看做了一个矩阵,每次在相应位置上做修改。

从后向前此计算每层依的δ,用Δ表示全局误差,每一层都对应一个Δ(l)。再引入D作为cost function对参数的求导结果。下图左边j是否等于0影响的是否有最后的bias regularization项。左边是定义,右边可证明(比较繁琐)。
这里写图片描述


Backpropagation in Practice


Backpropagation intuition

1.向前传播 Forward propagation,得到每个权重 θ ,若有疑惑可参考 第四周课程
这里写图片描述

PS:bias units 并不算在内。所以1,2,3层的神经元个数为2,而不是3

2.简化神经网络的代价函数(去除正则项,即 λ=0
这里写图片描述

我们仅关注一个样本 (x(i),y(i)) ,并且仅针对一个输出单元的神经网络(上例),这样Cost function可以简化为如下的形式:
这里写图片描述

3.计算误差
这里写图片描述
δ(l)j 记为l层神经元j的误差
BP算法主要是从输出层反向计算各个节点的误差的,故称之为反向传播算法,对于上例,计算的过程如下图所示:

这里写图片描述
换句话说, 对于每一层来说, δ 分量都等于后面一层所有的 δ 加权和,其中权值就是参数 θ


Implementation note: Unrolling parameters

这节主要是讲参数的向量化,以及将其还原
这里写图片描述
具体不懂可以实践一下。


Gradient Checking

神经网络中的参数很多,如何检测自己所编写的代码是否正确?
对于下面这个 θJ(θ) 图,取Θ点左右各一点 (θ+ε),(θε) ,则有点 θ 的导数(梯度)近似等于 J(θ+ε)J(θε)/(2ε)

对于每个参数的求导公式如下图所示
这里写图片描述

由于在back-propagation算法中我们一直能得到J(Θ)的导数D(derivative),那么就可以将这个近似值与D进行比较,如果这两个结果相近就说明code正确,否则错误,如下图所示:

这里写图片描述
实现时的注意点:

  1. 首先实现反向传播算法来计算梯度向量DVec;
  2. 其次实现梯度的近似gradApprox;
  3. 确保以上两步计算的值是近似相等的;
  4. 在实际的神经网络学习时使用反向传播算法,并且关掉梯度检查。

特别重要的是:
一定要确保在训练分类器时关闭梯度检查的代码。如果你在梯度下降的每轮迭代中都运行数值化的梯度计算,你的程序将会非常慢。


Random initialization

如何初始化参数向量or矩阵。通常情况下,我们会将参数全部初始化为0,这对于很多问题是足够的,但是对于神经网络算法,会存在一些问题,以下将会详细的介绍。

对于梯度下降和其他优化算法,对于参数 θ 向量的初始化是必不可少的。能不能将初始化的参数全部设置为0:
这里写图片描述
看下图,如果将参数全设置为0

这里写图片描述

这里写图片描述
会导致一个问题,例如对于上面的神经网络的例子,如果将参数全部初始化为0,在每轮参数更新的时候,与输入单元相关的两个隐藏单元的结果将是相同的,

a(2)1=a(2)2

因此,我们需要随机初始化:
这里写图片描述


Putting it together

这里写图片描述

首先需要确定一个神经网络的结构-神经元的连接模式, 包括:
输入单元的个数:特征 x(i) 的维数;
输出单元的格式:类的个数
隐藏层的设计:比较合适的是1个隐藏层,如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

这里写图片描述
这里写图片描述
在确定好神经网络的结构后,我们按如下的步骤训练神经网络:

  1. 随机初始化权重参数;

  2. 实现:对于每一个 x(i) 通过前向传播得到 hθ(x(i)) ;

  3. 实现:计算代价函数 J(θ)

  4. 实现:反向传播算法用于计算偏导数 ϑϑΘ(l)jkJ(Θ)

  5. 使用梯度检查来比较反向传播算法计算的 ϑϑΘ(l)jkJ(Θ) 和数值估计的 J(θ) 的梯度,如果没有问题,在实际训练时关闭这部分代码;

  6. 在反向传播的基础上使用梯度下降或其他优化算法来最小化 J(θ) ;

参考:http://blog.csdn.net/abcjennifer/article/details/7758797
http://52opencourse.com/174
http://blog.sina.com.cn/s/blog_88f0497e0102v79c.html

### 回答1: Coursera-ml-andrewng-notes-master.zip是一个包含Andrew Ng的机器学习课程笔记和代码的压缩包。这门课程是由斯坦福大学提供的计算机科学和人工智能实验室(CSAIL)的教授Andrew Ng教授开设的,旨在通过深入浅出的方式介绍机器学习的基础概念,包括监督学习、无监督学习、逻辑回归、神经网络等等。 这个压缩包中的笔记和代码可以帮助机器学习初学者更好地理解和应用所学的知识。笔记中包含了课程中涉及到的各种公式、算法和概念的详细解释,同时也包括了编程作业的指导和解答。而代码部分包含了课程中使用的MATLAB代码,以及Python代码的实现。 这个压缩包对机器学习爱好者和学生来说是一个非常有用的资源,能够让他们深入了解机器学习的基础,并掌握如何运用这些知识去解决实际问题。此外,这个压缩包还可以作为教师和讲师的教学资源,帮助他们更好地传授机器学习的知识和技能。 ### 回答2: coursera-ml-andrewng-notes-master.zip 是一个 Coursera Machine Learning 课程的笔记和教材的压缩包,由学生或者讲师编写。这个压缩包中包括了 Andrew Ng 教授在 Coursera 上发布的 Machine Learning 课程的全部讲义、练习题和答案等相关学习材料。 Machine Learning 课程是一个介绍机器学习的课程,它包括了许多重要的机器学习算法和理论,例如线性回归、神经网络、决策树、支持向量机等。这个课程的目标是让学生了解机器学习的方法,学习如何使用机器学习来解决实际问题,并最终构建自己的机器学习系统。 这个压缩包中包含的所有学习材料都是免费的,每个人都可以从 Coursera 的网站上免费获取。通过学习这个课程,你将学习到机器学习的基础知识和核心算法,掌握机器学习的实际应用技巧,以及学会如何处理不同种类的数据和问题。 总之,coursera-ml-andrewng-notes-master.zip 是一个非常有用的学习资源,它可以帮助人们更好地学习、理解和掌握机器学习的知识和技能。无论你是机器学习初学者还是资深的机器学习专家,它都将是一个重要的参考工具。 ### 回答3: coursera-ml-andrewng-notes-master.zip是一份具有高价值的文件,其中包含了Andrew Ng在Coursera上开授的机器学习课程的笔记。这份课程笔记可以帮助学习者更好地理解掌握机器学习技术和方法,提高在机器学习领域的实践能力。通过这份文件,学习者可以学习到机器学习的算法、原理和应用,其中包括线性回归、逻辑回归、神经网络、支持向量机、聚类、降维等多个内容。同时,这份笔记还提供了很多代码实现和模板,学习者可以通过这些实例来理解、运用和进一步深入研究机器学习技术。 总的来说,coursera-ml-andrewng-notes-master.zip对于想要深入学习和掌握机器学习技术和方法的学习者来说是一份不可多得的资料,对于企业中从事机器学习相关工作的从业人员来说也是进行技能提升或者知识更新的重要资料。因此,对于机器学习领域的学习者和从业人员来说,学习并掌握coursera-ml-andrewng-notes-master.zip所提供的知识和技能是非常有价值的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值