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

单元Cost Function and Backpropagation



Cost Function

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

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

遇到K分类问题时,SL=K,yi=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分类(K≥2),由上述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)j?yj,其中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

时间: 2024-10-09 13:45:07

Coursera机器学习-第五周-Neural Network BackPropagation的相关文章

coursera机器学习技法笔记(12)——Neural Network

12 Neural Network 12.1 Motivation 在神经网络的节点上使用感知机,那我们可以把神经网络看作是通过不同感知机以及常数的线性组合得到一个新的特征,将新的特征加上一个常数再进行线性组合得到结果.其原理和aggregation类似,但是在神经网络中进行了多层级的aggregation. 从生物的角度来说神经网络模拟了人脑神经网络. 12.2 Neural Network Hypothesis 如果神经元节点都用线性回归的话,那么无论怎么组合最终都是个线性回归,模型的能力没

吴恩达机器学习第5周Neural Networks(Cost Function and Backpropagation)

5.1 Cost Function 假设训练样本为:{(x1),y(1)),(x(2),y(2)),...(x(m),y(m))} L  = total no.of layers in network sL= no,of units(not counting bias unit) in layer L K = number of output units/classes 如图所示的神经网络,L = 4,s1 = 3,s2 = 5,s3 = 5, s4 = 4 逻辑回归的代价函数: 神经网络的代价

Coursera机器学习-第六周-Advice for Applying Machine Learning

Evaluating a Learning Algorithm Desciding What to Try Next 先来看一个有正则的线性回归例子: 当在预测时,有很大的误差,该如何处理? 1.得到更多的训练样本 2.选取少量的特征 3.得到更多的特征项 4.加入特征多项式 5.减少正则项系数λ 6.增加正则项系数λ 很多人,在遇到预测结果并不理想的时候,会凭着感觉在上面的6个方案中选取一个进行,但是往往花费了大量时间却得不到改进. 于是引入了机器学习诊断,在后面会详细阐述, Evaluati

CheeseZH: Stanford University: Machine Learning Ex4:Training Neural Network(Backpropagation Algorithm)

1. Feedforward and cost function; 2.Regularized cost function: 3.Sigmoid gradient The gradient for the sigmoid function can be computed as: where: 4.Random initialization randInitializeWeights.m 1 function W = randInitializeWeights(L_in, L_out) 2 %RA

Coursera机器学习-第三周-逻辑回归Logistic Regression

Classification and Representation 1. Classification Linear Regression (线性回归)考虑的是连续值([0,1]之间的数)的问题,而Logistic Regression(逻辑回归)考虑的是离散值(例如只能取0或1而不能取0到1之间的数)的问题.举个例子,你需要根据以往季度的电力数据,预测下一季度的电力数据,这个时候需要使用的是线性回归,因为这个值是连续的,而不是离散的.而当你需要判断这个人抽烟还是不抽烟的问题时,就需要使用逻辑回

Coursera 机器学习 第5章 Neural Networks: Learning 学习笔记

5.1节 Cost Function神经网络的代价函数. 上图回顾神经网络中的一些概念: L  神经网络的总层数. sl  第l层的单元数量(不包括偏差单元). 2类分类问题:二元分类和多元分类. 上图展现的是神经网络的损失函数,注意这是正则化的形式. 正则化部分,i.j不为0.当然i.j可以为0,此时的损失函数不会有太大的差异,只是当i.j不为0的形式更为常见. 5.2节 Backpropagation Algorithm最小化损失函数的算法——反向传播算法:找到合适的参数是J(θ)最小. 如

Coursera机器学习-第十周-Large Scale Machine Learning

Gradient Descent with Large Datasets Learning With Large Datasets 我们已经知道,得到一个高效的机器学习系统的最好的方式之一是,用一个低偏差(low bias)的学习算法,然后用很多数据来训练它. 下面是一个区分混淆词组的例子: 但是,大数据存在一个问题,当样本容量m=1,000时还行,但是当m=100,000,000呢?请看一下梯度下降的更新公式: 计算一个θ值需要对1亿个数据进行求和,计算量显然太大,所以时间消耗肯定也就大了.

Coursera机器学习-第八周-Unsupervised Learning(K-Means)

Clustering K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则.K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小.算法采用误差平方和准则函数作为聚类准则函数. Unsuperivised Learning:Intruduction 典型的Supervised Learning 有一组附标记(y(i))的训练数据集, 我们

神经网络详解 Detailed neural network

神经网络之BP算法,梯度检验,参数随机初始化 neural network(BackPropagation algorithm,gradient checking,random initialization) 一.代价函数(cost function) 对于训练集,代价函数(cost function)定义为: 其中红色方框圈起的部分为正则项,k:输出单元个数即classes个数,L:神经网络总层数,:第层的单元数(不包括偏置单元),:表示第层边上的权重. 二.误差逆传播(BackPropaga