神经网络反向传导算法
假设我们有一个固定样本集 ,它包含 个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例 ,其代价函数为:
这是一个(二分之一的)方差代价函数。给定一个包含 个样例的数据集,我们可以定义整体代价函数为:
以上公式中的第一项 是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。
[注:通常权重衰减的计算并不使用偏置项 ,比如我们在 的定义中就没有使用。一般来说,将偏置项包含在权重衰减项中只会对最终的神经网络产生很小的影响。如果你在斯坦福选修过CS229(机器学习)课程,或者在YouTube上看过课程视频,你会发现这个权重衰减实际上是课上提到的贝叶斯规则化方法的变种。在贝叶斯规则化方法中,我们将高斯先验概率引入到参数中计算MAP(极大后验)估计(而不是极大似然估计)。]
权重衰减参数 用于控制公式中两项的相对重要性。在此重申一下这两个复杂函数的含义: 是针对单个样例计算得到的方差代价函数; 是整体样本代价函数,它包含权重衰减项。
以上的代价函数经常被用于分类和回归问题。在分类问题中,我们用 或 ,来代表两种类型的标签(回想一下,这是因为 sigmoid激活函数的值域为 ;如果我们使用双曲正切型激活函数,那么应该选用 和 作为标签)。对于回归问题,我们首先要变换输出值域(译者注:也就是 ),以保证其范围为 (同样地,如果我们使用双曲正切型激活函数,要使输出值域为 )。
我们的目标是针对参数 和 来求其函数 的最小值。为了求解神经网络,我们需要将每一个参数 和 初始化为一个很小的、接近零的随机值(比如说,使用正态分布 生成的随机值,其中 设置为 ),之后对目标函数使用诸如批量梯度下降法的最优化算法。因为 是一个非凸函数,梯度下降法很可能会收敛到局部最优解;但是在实际应用中,梯度下降法通常能得到令人满意的结果。最后,需要再次强调的是,要将参数进行随机初始化,而不是全部置为 。如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数(也就是说,对于所有 ,都会取相同的值,那么对于任何输入 都会有: )。随机初始化的目的是使对称失效。
梯度下降法中每一次迭代都按照如下公式对参数 和 进行更新:
其中 是学习速率。其中关键步骤是计算偏导数。我们现在来讲一下反向传播算法,它是计算偏导数的一种有效方法。
我们首先来讲一下如何使用反向传播算法来计算 和 ,这两项是单个样例 的代价函数 的偏导数。一旦我们求出该偏导数,就可以推导出整体代价函数 的偏导数:
以上两行公式稍有不同,第一行比第二行多出一项,是因为权重衰减是作用于 而不是 。
反向传播算法的思路如下:给定一个样例 ,我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括 的输出值。之后,针对第 层的每一个节点 ,我们计算出其“残差” ,该残差表明了该节点对最终输出值的残差产生了多少影响。对于最终的输出节点,我们可以直接算出网络产生的激活值与实际值之间的差距,我们将这个差距定义为 (第 层表示输出层)。对于隐藏单元我们如何处理呢?我们将基于节点(译者注:第 层节点)残差的加权平均值计算 ,这些节点以 作为输入。下面将给出反向传导算法的细节:
- 进行前馈传导计算,利用前向传导公式,得到 直到输出层 的激活值。
- 对于第 层(输出层)的每个输出单元 ,我们根据以下公式计算残差:
[译者注:
]
- 对 的各个层,第 层的第 个节点的残差计算方法如下:
{译者注:
将上式中的与的关系替换为与的关系,就可以得到:
以上逐次从后向前求导的过程即为“反向传导”的本意所在。 ]
- 计算我们需要的偏导数,计算方法如下:
最后,我们用矩阵-向量表示法重写以上算法。我们使用“” 表示向量乘积运算符(在Matlab或Octave里用“.*”表示,也称作阿达马乘积)。若 ,则 。在上一个教程中我们扩展了 的定义,使其包含向量运算,这里我们也对偏导数 也做了同样的处理(于是又有 )。
那么,反向传播算法可表示为以下几个步骤:
- 进行前馈传导计算,利用前向传导公式,得到 直到输出层 的激活值。
- 对输出层(第 层),计算:
- 对于 的各层,计算:
- 计算最终需要的偏导数值:
实现中应注意:在以上的第2步和第3步中,我们需要为每一个 值计算其 。假设 是sigmoid函数,并且我们已经在前向传导运算中得到了 。那么,使用我们早先推导出的 表达式,就可以计算得到 。
最后,我们将对梯度下降算法做个全面总结。在下面的伪代码中, 是一个与矩阵 维度相同的矩阵, 是一个与 维度相同的向量。注意这里“”是一个矩阵,而不是“ 与 相乘”。下面,我们实现批量梯度下降法中的一次迭代:
- 对于所有 ,令 , (设置为全零矩阵或全零向量)
- 对于 到 ,
- 使用反向传播算法计算 和 。
- 计算 。
- 计算 。
- 更新权重参数:
现在,我们可以重复梯度下降法的迭代步骤来减小代价函数 的值,进而求解我们的神经网络。
中英文对照
- 反向传播算法 Backpropagation Algorithm
- (批量)梯度下降法 (batch) gradient descent
- (整体)代价函数 (overall) cost function
- 方差 squared-error
- 均方差 average sum-of-squares error
- 规则化项 regularization term
- 权重衰减 weight decay
- 偏置项 bias terms
- 贝叶斯规则化方法 Bayesian regularization method
- 高斯先验概率 Gaussian prior
- 极大后验估计 MAP
- 极大似然估计 maximum likelihood estimation
- 激活函数 activation function
- 双曲正切函数 tanh function
- 非凸函数 non-convex function
- 隐藏层单元 hidden (layer) units
- 对称失效 symmetry breaking
- 学习速率 learning rate
- 前向传导 forward pass
- 假设值 hypothesis
- 残差 error term
- 加权平均值 weighted average
- 前馈传导 feedforward pass
- 阿达马乘积 Hadamard product
- 前向传播 forward propagation
神经网络反向传导算法相关推荐
- 【机器学习笔记】神经网络反向传播算法 推导
神经网络反向传播算法 推导 (一) 概念及基本思想 (二)信息的前向传播 (三)误差反向传播 (1)输出层的权重参数更新 (2)隐藏层的权重参数更新 (3)输出层与隐藏层的偏置参数更新 (4)反向传播 ...
- CS229 6.18 CNN 的反向传导算法
本文主要内容是 CNN 的 BP 算法,看此文章前请保证对CNN有初步认识. 网络表示 CNN相对于传统的全连接DNN来说增加了卷积层与池化层,典型的卷积神经网络中(比如LeNet-5 ),开始几层都 ...
- 吴恩达机器学习:神经网络 | 反向传播算法
上一周我们学习了 神经网络 | 多分类问题.我们分别使用 逻辑回归 和 神经网络 来解决多分类问题,并了解到在特征数非常多的情况下,神经网络是更为有效的方法.这周的课程会给出训练 神经网络 所使用的 ...
- 神经网络-反向传播算法
一.前言 这是一场以误差(Error)为主导的反向传播(Back Propagation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去. 前向传递输入信号直至输出产生 ...
- 神经网络反向传播算法原理笔记
神经网络是一种是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型.该模型以并行分布的处理能力. ...
- 反向传播算法的理论基础,神经网络反向传播算法
1.如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法.其 ...
- 神经网络——反向传播算法
一.多元分类 之前讨论的神经网络都是以二元分类为目的进行介绍的. 当我们有不止两种分类时(也就是y=1,2,3-.y=1,2,3-.y=1,2,3-.),比如以下这种情况,该怎么办?如果我们要训练一个 ...
- BP神经网络(反向传播算法原理、推导过程、计算步骤)
BP神经网络 1.反向传播算法的原理 2.反向传播算法参数学习的推导 3.反向传播算法参数更新案例 3.1 反向传播的具体计算步骤 3.1.1 计算输出层的误差 3.1.2 计算隐藏层误差 3.1.3 ...
- 神经网络反向传播算法推导
反向传播是多数神经网络进行参数更新的基本方法,它的本质是巧妙利用了高数中的链式法则,下面对这一方法进行推导: (1)符号说明 :神经元的激活函数 :神经网络的权重向量 :神经网络的偏置向量 :某层的输 ...
最新文章
- mysql 函数返回表格_mysql 数据分析如何实现日报、周报、月报和年报?
- 观山湖区计算机培训班学校,2020年观山湖区教育系统办公室主任培训顺利开班...
- SSM实现根据后台控制禁用select
- hdu 2830(矩形dp)
- Django框架简介
- C++struct和class区别
- 仿微信未读RecyclerView平滑滚动定位效果
- linux不用命令开启ssh,不用密码也能ssh登陆Linux?
- LeetCode 第 26 场双周赛(363/1971,前18.4%)
- 企业微信H5_网页jssdk调用 agentconfig选人选照片等案例演示
- 【读书笔记】并发编程需要注意的几个典型问题
- MFCC梅尔频率倒谱系数
- android连接程序,android程序如何连接真机进行测试
- 创建oracle管理用户名和密码是什么情况,Oracle创建时默认创建的用户以及密码
- 这些年我用过的6个API接口在线管理平台
- Android 热补丁之 Tinker 原理解析
- 基础 网络架构 网络硬件名词 网络通信协议
- java程序设计课程简介_《JAVA语言程序设计》课程简介
- cad重新加载php命令,cad刷新命令是什么?
- 20181212——第五章 引用类型
热门文章
- 软考计算机基础:存储系统
- mac版crt8.0.2打开无响应怎么办_Mac电脑程序无响应怎么办?教你强制退出无响应程序...
- cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别
- 无法在计算机上创建文件夹iscsi,ISCSI连接后磁盘无法读写问题求解决
- python random函数_Python随机函数random使用详解
- Java 写时复制容器 —— CopyOnWriteArrayList
- 2021曲靖高考成绩查询时间,2021年曲靖高考成绩排名及成绩公布时间什么时候出来...
- php 设置agent,限制某个目录禁止解析php及user_agent、php相关配置
- php 判断同时存在英文跟数字,php判断输入是否是纯数字,英文,汉字的方法
- java compare equla_Java中的equals,==,compareTo和compare的比较