神经网络中的参数的求解:前向和反向传播算法

神经网络最基本的知识可以参考神经网络基本知识,基本的东西说的很好了,然后这里讲一下神经网络中的参数的求解方法。



一些变量解释:

标上“”的圆圈被称为偏置节点,也就是截距项.

本例神经网络有参数 ,其中 (下面的式子中用到)是第 层第 单元与第 层第 单元之间的联接参数(其实就是连接线上的权重,注意标号顺序), 是第 层第 单元的偏置项。

表示第 层的节点数(偏置单元不计在内)

表示第 层第 单元的激活值(输出值)。当 时, ,也就是样本输入值的第 个特征。

表示第层各单元对第 层第 单元进行输入加权和(包括偏置单元),比如, ,所以 ,这里的f(.)就是激活函数,一般是sigmoid函数

表示最后的输出量,如果网络最终输出是一个值,那么就是一个标量,如果最终输出不止一个值(样本的label  y也是一个矢量),那么就是一个矢量。


对于上图:我们有

把这些公式利用向量变成另一中公式形式(激活函数 也扩展为用向量(分量的形式)来表示,即 )为:

这也就是我们把wij定义成上面那样的元素,这样直接根据wij的标号排成一个矩阵,而不用再变换或转置之类的了。

假设w和b已知的话,我们根据上两行的迭代公式不停的迭代就得到了神经网络里各个单元的激活值

上面的计算步骤叫作前向传播

因为我们w和b是不知道的,我们还得要通过训练学习到这些参数,那么我们怎么训练得到那?我们知道一些训练样本(注意这里里不一定是一个标量,而是),我们仍然使用梯度下降法来通过迭代得到收敛后的模型参数值。

我们在每一次迭代中,假设w和b是已知的,然后通过一次前向传播得到模型中激活值

我们根据每一次迭代中模型最后输出的跟样本的标记做差平方(如果都是矢量的话,做差平方是向量里的各个元素分别对应做差然后平方和),然后求出所有样本的这些误差平方和。然后得到每一次迭代的cost function (含L2正则项):

虽然这里每一个神经元类似于logistic回归模型,但是这里cost function中没用似然函数方法,还是利用的均方误差。其实这两种方法得到的结果是一样的(还记得利用似然函数求得的公式跟均方误差公式一样么)。类似的,在L2正则项中,参数不包括偏置参数,也就是常数项那些参数。

模型中如果使用的激活函数是sigmoid函数,那么这个模型最后输出层里的每个节点输出的值都在(0,1)之间,那么样本的标记向量里的元素就要求在(0,1)之间,所以我们首先要用某种方法转变样本的标记范围(类似标准化,如果模型的激活函数使用的是tanh函数,那么这里就是采用的标准化转变样本标记值)(译者注:也就是 ),以保证其范围为(0,1)之间。

我们有了cost function,接下来我们就需要最小化这个function,我们使用梯度下降法,也就是这俩公式:

……………………………………………………………………………………………………………………………………………………...(1)

但是我们这时候不能直接对cost function对每一个参数进行求偏导,因为这些参数都是相互关联的,没办法找到显式的偏导。我们只能曲线救国。我们怎么求偏导呢?我们使用反向传播算法求得,具体是这样的:

我们不是一下对整个操作,而是每一个样本和通过模型得到的做差平方,视为小,也就是,我们每一次处理一个样本的cost function,使用反向传播算法来计算 ,一旦我们求出每个样本的该偏导数,就可以推导出整体代价函数 的偏导数:

………………………………………………………………………………………………………..(2)

下面接着说我们怎么求每一个样本的

给定一个样例 ,我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括 的输出值。

这时候我们不把单个的看成输入量,而是把每一个单元的所有叠加和看成输入,于是我们看成求偏导。

求出的偏导分别叫每个单元的“残差” ,具体如下:

(1)最后一层(输出层)单元的残差:

我们通过前向传播算法求出了网络中所有的激活值,这个也是可以求出来的,比如当 是sigmoid函数,那么,所以这个残差就求出来了。

(2)接下来我们求   的各个层单元的残差:

先求l= 各单元的残差:

因为等于,所以红框里面就是一个复合函数求导。

倒数第三个到倒数第二个公式 只有k=i的时候求导存在,wij是个系数,所以这一步也很好理解。

最后结果中的代表的意义是:

然后再乘以,就是

再求l= 各个层单元的残差:

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

这时候每个单元的残差就求出来了,接下来计算我们需要的偏导数,计算公式如下:

求出每个样本cost function的各个偏导后,我们就能根据公式(2)求出所有整个cost function的各个偏导了。那么再根据公式(1),我们就求出了这一次梯度下降法迭代后的参数,然后我们不停的迭代,最终就找到了参数的收敛值。这里需要强调的是,一开始要将参数进行随机初始化,不是全部置为 。如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数(也就是说,对于所有 都会取相同的值,那么对于任何输入 都会有: )。随机初始化的目的是使对称失效。为了求解神经网络,我们需要将每一个参数 初始化为一个很小的、接近零的随机值(比如说,使用正态分布 生成的随机值,其中 设置为

参考: http://deeplearning.stanford.edu/wiki/index.php/反向传导算法

时间: 2024-08-29 14:12:34

神经网络中的参数的求解:前向和反向传播算法的相关文章

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) [email protected] http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此.曾记得,我们绞尽脑汁,搓手顿足,大喊“为什么我跑的模型不work?”,“为什么我实现的效果那么差?”,“为什么我复现的结果没有他论文里面说的那么好?”.有人会和你说“你不懂调参!

循环神经网络(RNN)模型与前向反向传播算法

在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域. 1. RNN概述 在前面讲到的DNN和CNN中,训练样本的输入和输出是比较的确定的.但是有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不

机器学习之五:神经网络、反向传播算法

一.逻辑回归的局限 在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字. 但所使用的是一个一阶的模型,并没有使用多项式,为什么? 可以设想一下,在原有400个特征的数据样本中,增加二次.三次.四次多项式,会是什么情形? 很显然,训练样本的特征数量将会拔高多个数量级,而且,更重要的,要在一个式子中拟合这么多的特征,其难度是非常大的,可能无法收敛到一个比较理想的状态. 也就是说,逻辑回归没法提供很复杂的模型. 因为其本质上是一个线性的分类器,擅长解决的是线性可分的问题. 那么

DL4NLP——神经网络(一)前馈神经网络的BP反向传播算法步骤整理

这里把按[1]推导的BP算法(Backpropagation)步骤整理一下,备忘使用.[1] 中直接使用矩阵微分的记号进行推导,整个过程十分简洁.而且这种矩阵形式有一个非常大的优势就是对照其进行编程实现时非常方便. 但其实用标量计算推导也有一定的好处,比如可以清楚地知道某个权重是被谁所影响的. 记号约定: $L$:神经网络的层数.输入层不算. $n^l$:第 $l$ 层神经元的个数.偏置神经元不算在内. $W^{l}\in\mathbb R^{n^l\times n^{l-1}}$:第 $l-1

【神经网络和深度学习】笔记 - 第二章 反向传播算法

上一章中我们遗留了一个问题,就是在神经网络的学习过程中,在更新参数的时候,如何去计算损失函数关于参数的梯度.这一章,我们将会学到一种快速的计算梯度的算法:反向传播算法. 这一章相较于后面的章节涉及到的数学知识比较多,如果阅读上有点吃力的话也可以完全跳过这一章,把反向传播当成一个计算梯度的黑盒即可,但是学习这些数学知识可以帮助我们更深入的理解神经网络. 反向传播算法的核心目的是对于神经网络中的任何weight或bias计算损失函数$C$关于它们的偏导数$\frac{\partial C}{\par

《神经网络和深度学习》系列文章十六:反向传播算法代码

出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 李盛秋 声明:如需转载请联系[email protected],未经授权不得转载. 使用神经网络识别手写数字 反向传播算法是如何工作的 热身:一个基于矩阵的快速计算神经网络输出的方法 关于损失函数的两个假设 Hadamard积 反向传播背后的四个基本等式 四个基本等式的证明(选读) 反向传播算法 反向传播算法代码

神经网络和深度学习之——误差反向传播算法

在讲解误差反向传播算法之前,我们来回顾一下信号在神经网络中的流动过程.请细细体会,当输入向量\(X\)输入感知器时,第一次初始化权重向量\(W\)是随机组成的,也可以理解成我们任意设置了初始值,并和输入做点积运算,然后模型通过权重更新公式来计算新的权重值,更新后的权重值又接着和输入相互作用,如此迭代多次,得到最终的权重. 信号向前传播,权重的更新反向传播,是这样吗? 是的,你的直觉没错,确实是反向传播. 1. 前馈的实质 反向传播这个术语经常被误解为用于多层神经网络的整个学习算法.实际上,反向传

深度学习基础--神经网络--BP反向传播算法

BP算法: 1.是一种有监督学习算法,常被用来训练多层感知机.  2.要求每个人工神经元(即节点)所使用的激励函数必须可微. (激励函数:单个神经元的输入与输出之间的函数关系叫做激励函数.) (假如不使用激励函数,神经网络中的每层都只是做简单的线性变换,多层输入叠加后也还是线性变换.因为线性模型的表达能力不够,激励函数可以引入非线性因素) 下面两幅图分别为:无激励函数的神经网络和激励函数的神经网络 如图所示,加入非线性激活函数后的差异:上图为用线性组合逼近平滑曲线来分割平面,下图为使用平滑的曲线

神经网络反向传播算法(4,5)

"反向传播"是最小化成本函数的神经网络术语,就像我们在logistic回归和线性回归中的梯度下降一样.我们的目标是计算: 也就是说,我们希望在θ中使用一组最优参数来最小化我们的成本函数j.在这一节中我们将看看我们用来计算J(Θ)的偏导数方程: 为此,我们使用下面的算法: 反向传播算法实现: 1.得到训练集 2.设置所有i,j,l(因此你最终有一个矩阵全零) 3.遍历训练样本t = 1到m: (1) (2)进行正向传播计算a(j)  j从1到m: (3)使用y(t),计算 其中L是我们的