今天得主题是BP算法。大规模的神经网络可以使用batch gradient descent算法求解,也可以使用 stochastic gradient descent 算法,求解的关键问题在于求得每层中每个参数的偏导数,BP算法正是用来求解网络中参数的偏导数问题的。

先上一张吊炸天的图,可以看到BP的工作原理:

下面来看BP算法,用m个训练样本集合来train一个神经网络,对于该模型,首先需要定义一个代价函数,常见的代价函数有以下几种:

1)0-1损失函数:(0-1 loss function)

2)平方损失函数:(quadratic loss function)

3)绝对值损失函数:(absolute loss function)

4)负log损失函数(log loss function)

损失函数的意义在于,假设函数(hypothesis function,即模型)的输出与数据标签的值月接近,损失函数越小。反之损失函数越大,这样减小损失函数的值,来求得最优的参数即可,最后将最优的参数带入带假设函数中,即可求得最终的最优的模型。

在Neurons Network中,对于一个样本(x,y),其损失函数可表示为  

  

上式这种形式是平方损失函数(注意若采用交叉熵损失则与此损失形式不一样),对于所有的m个样本,对于所有训练数据,总的损失函数为:

  

上式中第一项为均方误差项,第二项为正则化项,用来限制权重W的大小,防止over-fitting,也即贝叶斯学派所说的给参数引入一个高斯先验的MAP(极大化后验)方法。为正则项的参数,用来控制两项的相对重要性, 比如若很大时,参数W,b必须很小才能使得最终的损失函数J(W,b) 很小。

常见的分类或者回归问题,都可以用这个损失函数,注意分类时标签y是离散值,回归时对于sigmod函数y为(0,1)之间的连续值。对于tanh为(-1,1)之间的值。

BP算法的目标就是求得一组最优的W、b ,使得损失函数 的值最小

首先将每个参数  和 初始化为一个很小的随机值(比如说,使用正态分布  生成的随机值,其中  设置为  ),然后使用批梯度下降算法来优化 和 的值,因为 是非凸函数,即存在不止一个极值点,梯度下降算法很可能会收敛到局部极值处,但通常效果很不错(在浅层网络中,比如说三层),需要强调的是要将参数随机初始化,而不是全部置0,如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数(也就是说,对于所有hidden unit 都会取相同的值,那么对于任何输入  都会有: ),随机初始化会消除这种对称效果。

批梯度下降算法中,每一次迭代都按照如下公式对参数  和 进行更新:

  

其中J(W,b)包含了所有的样本, 是学习速率,对于多层神经网络,如何计算每一层参数的偏导数是关键问题,BP算法正使用来计算每一项的偏导数的。

首先来看对于单个样例,参数 和  的偏导数分别为  和 

有了单个样例的偏导数后,根据,就可以很好求出损失函数  的偏导数:

  

 并不作用于bais unit b,所以第二个式子中没有第二项。

先看如下的式子,l+1层的输入等于l层的加权输出求和,即

课件hidden layer的输入z为参数的方程,为了求解对每个样本中参数 和  的偏导数,可以用根据链式求导法则有:

 

我们把上边的第一项称为残差,有了以上链式求导的思想,为了求得各个参数的偏导数,我们需要求得每一层的每个单元的残差。下面反向传播算法的思路:

1)给定 ,我们首先进行“前向传导”,计算出网络中所有的激活值,包括  的输出值

2)对第  层的每个节点 ,计算出其“残差” ,该残差表明节点对最终输出值的残差产生多少影响

3)对于最终的输出节点,直接算出网络产生的激活值与实际值之间的差距,将这个差距定义为 

4)对于隐藏单元,将第  层节点的残差的加权平均值计算 ,这些节点以  作为输入到  层

下面将给出反向传导算法的细节:

1)进行前馈传导计算,利用前向传导公式,得到  直到输出层  的激活值。

2)对于第  层(输出层)的每个输出单元 ,我们根据以下公式计算残差:

  
推倒:

  

3)对  的各个层,第  层的第  个节点的残差计算方法如下:

  

有了最后一层的层差,可以计算前一层的残差:

  

4)将上式中的  与  的关系替换为  与  的关系,就可以得到:

5)根据链式求导法则,计算方法如下:

其中,第二项的计算公式如下:
根据,有:
 

概括一下整个算法:

1)进行前馈传导计算,利用前向传导公式,得到 直到输出层  的激活值。

2)对输出层(第  层),计算:

  

3)对于  的各层,计算:

  

4)计算最终需要的偏导数值:

  

指的注意的是在以上的第2步和第3步中,我们需要为每一个 单元 值计算其 。假设  是sigmoid函数,f'(z)=f(z)*(1-f(z)),并且我们已经在前向传导运算中得到了 。那么,使用我们早先推导出的 表达式,就可以计算得到 

经过以上步骤,已经可以求出每个参数的偏导数,下一步就是更新参数,即使得参数沿梯度方向下降,下面给出梯度下降算法伪代码:

 是一个与矩阵  维度相同的矩阵, 是一个与  维度相同的向量。注意这里“”是一个矩阵,而不是“ 与  相乘”。下面,我们实现批量梯度下降法中的一次迭代:

不断更新W,b的值,直到W,b不再变化为止,即网络达到收敛。

有机会再补上代码#24!!

(六) 6.2 Neurons Networks Backpropagation Algorithm的更多相关文章

  1. CS229 6.2 Neurons Networks Backpropagation Algorithm

    今天得主题是BP算法.大规模的神经网络可以使用batch gradient descent算法求解,也可以使用 stochastic gradient descent 算法,求解的关键问题在于求得每层 ...

  2. (六) 6.1 Neurons Networks Representation

    面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示 ...

  3. (六) 6.3 Neurons Networks Gradient Checking

    BP算法很难调试,一般情况下会隐隐存在一些小问题,比如(off-by-one error),即只有部分层的权重得到训练,或者忘记计算bais unit,这虽然会得到一个正确的结果,但效果差于准确BP得 ...

  4. (六)6.10 Neurons Networks implements of softmax regression

    softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...

  5. The Backpropagation Algorithm

    https://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf 7.1 Learning as gradient descent We saw in ...

  6. BP反向传播算法的工作原理How the backpropagation algorithm works

    In the last chapter we saw how neural networks can learn their weights and biases using the gradient ...

  7. CS229 6.10 Neurons Networks implements of softmax regression

    softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...

  8. 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 t ...

  9. CS229 6.1 Neurons Networks Representation

    面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示 ...

随机推荐

  1. AutoCompleteTextView的应用

    现在我们上网几乎都会用百度或者谷歌搜索信息,当我们在输入框里输入一两个字后,就会自动提示我们想要的信息,这种效果在Android 里是如何实现的呢? 事实上,Android 的AutoComplete ...

  2. IIS 发布程序的一些心得

    1.应用程序池一般自己建立对应Framework版本的程序池,并托管管道模式为经典 2.在IIS根目录双击,右侧的“ISAPI和CGI限制” 双击打开,将自己所需要的Framework版本的限制设置为 ...

  3. C语言,一个彩票摇奖程序摇出22选5的中奖号码

    摇奖机摇奖,无非就是利用它的随机性,让球从摇奖机中随机地掉出,就成了中奖号码.而C语言中也同样有个rand()函数可以产生随机数,利用这个rand()函数产生的随机数,同样可以代替从摇奖机中随机摇出的 ...

  4. uploadify IO Error/http error 413

    阿里云的服务器 linux 服务器,php 环境,上传附件问题,记录分享一下: 开始测试的时候,都是图片,小附件,没什么问题 系统上线后,发现大的附件上传 有问题,报错 IO Error 开始检查程序 ...

  5. Java学习笔记之:Java 定时任务

    一.介绍 在应用里经常都有用到在后台跑定时任务的需求.比如网络运营商会在每个月的一号对数据进行一次统计.在java中我们可以继承timertask类来实现定时任务. 二.笔记 /** * 定时任务 * ...

  6. Keil 4.7a版本问题&Jlink Clone问题

    听PP说Keil 4.7A新出,支持代码自动补全.激动之至,keil官网急填,下载安装.  问题即刻遇见①,电脑蓝屏,安装包损坏.当下载安装包未下载完时,续传安装包没用了.还是重下载吧,免得浪费时间. ...

  7. 美丽渐变色的Form

    一直都非常喜欢渐变色的界面,但是没想到漂亮的渐变Form原来这么简单...实在是没想到...看来我不仅技术水平低,脑袋里的创意也是空空如也... --------------------------- ...

  8. c# ffmpeg视频转换

    c#  ffmpeg视频转换 什么是ffmpeg,它有什么作用呢,怎么可以使用它呢,带着问题去找答案吧!先参考百度百科把,我觉得它很强大无奇不有,为了方便大家我就把链接提供了! http://baik ...

  9. Virtualbox: Shared directory- “unknown filesystem type vboxsf”

    1. "设置”中,"共享文件夹”,把要共享的文件夹添加上. 2. 然后打开系统,找到“安装增强功能”,这时桌面上多了一个光盘或者看/media/下面是不是已经文件了,虽然这个时候可 ...

  10. ubuntu完美搭建git服务器【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/38779667 最近公司项目需要用到Git来管理项目,正好逢周末花了点时间在虚拟机的unbunt ...