反向传播算法一开始计算什么内容的梯度

反向传播算法一开始计算什么内容的梯度,第1张

反向传播算法一开始计算什么内容的梯度,之后将其反向传播(A)

A预测结果与样本标签之间的误差B各个输入样本的平方差之和C各个网络权重的平方差之和D都不对。

反向传播算法

反向传播算法,简称BP算法,适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。

BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。

动机:

反向传播算法被设计为减少公共子表达式的数量而不考虑存储的开销。 反向传播避免了重复子表达式的指数爆炸。 然而,其他算法可能通过对计算图进行简化来避免更多的子表达式,或者也可能通过重新计算而不是存储这些子表达式来节省内存。

算法简介:

反向传播算法主要由两个环节(激励传播、权重更新)反复循环迭代,直到网络的对输入的响应达到预定的目标范围为止。

BP算法的学习过程由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数。

转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,网络的学习在权值修改过程中完成。误差达到所期望值时,网络学习结束。

1普通的机器学习模型

其实,基本上所有的基本机器学习模型都可以概括为以下的特征:根据某个函数,将输入计算并输出。图形化表示为下图:

当我们的g(h)为sigmoid函数时候,它就是一个逻辑回归的分类器。当g(h)是一个只能取0或1值的函数时,它就是一个感知机。那么问题来了,这一类模型有明显缺陷:当模型线性不可分的时候,或者所选取得特征不完备(或者不够准确)的时候,上述分类器效果并不是特别喜人。如下例:

我们可以很轻易的用一个感知机模型(感知器算法)来实现一个逻辑与(and),逻辑或(or)和逻辑或取反的感知器模型,(感知器模型算法链接),因为上述三种模型是线性可分的。但是,如果我们用感知器模型取实现一个逻辑非异或(相同为1,不同为0),我们的训练模型的所有输出都会是错误的,该模型线性不可分!

2神经网络引入:

我们可以构造以下模型:

(其中,A代表逻辑与,B代表逻辑或取反,C代表逻辑或)

上述模型就是一个简单的神经网络,我们通过构造了三个感知器,并将两个感知器的输出作为了另一个感知其的输入,实现了我们想要的逻辑非异或模型,解决了上述的线性不可分问题。那么问题是怎么解决的呢?其实神经网络的实质就是每一层隐藏层(除输入和输出的节点,后面介绍)的生成,都生成了新的特征,新的特征在此生成新的特征,知道最新的特征能很好的表示该模型为止。这样就解决了线性不可分或特征选取不足或不精确等问题的产生。(以前曾介绍过线性不可分的实质就是特征不够)

神经网络的模型结构如下:

(蓝色,红色,**分别代表输入层,影藏层,输出层)

在此我们介绍的神经网络中的每一个训练模型用的都是逻辑回归模型即g(h)是sigmoid函数。

我们可以将神经网络表示如下:

3神经网络的预测结果(hypothesis函数)的计算和CostFunction的计算

预测结果的计算其实与普通的逻辑回归计算没有多大区别。只是有时候需要将某几个逻辑回归的输出作为其他逻辑回归模型的输入罢了,比如上例的输出结果为:

那么CostFunction的计算又和逻辑回归的CostFunction计算有什么区别呢?

逻辑回归的CostFunction如下:

上述式子的本质是将预测结果和实际标注的误差用某一种函数估算,但是我们的神经网络模型有时候输出不止一个,所以,神经网络的误差估算需要将输出层所有的CostFunction相加:

k:代表第几个输出。

补充:神经网络可以解决几分类问题?

理论上,当输出单元只有一个时,可以解决2分类问题,当输出单元为2时可以解决4分类问题,以此类推

实质上,我们三个输出单元时,可以解决三分类问题([1,0,0],[0,1,0],[0,0,1]),为什么如此设计?暂时留白,以后解决

ps:面试题:一个output机器,15%可能输出1,85%输出0,构造一个新的机器,使0,1输出可能性相同? 答:让output两次输出01代表0,10代表1,其余丢弃

4神经网络的训练

这儿也同于logistic回归,所谓的训练也就是调整w的权值,让我们再一次把神经网络的CostFunction写出来!

W代表所有层的特征权值,Wij(l)代表第l层的第i个元素与第j个特征的特征权值

m代表样本个数,k代表输出单元个数

hw(x(i))k代表第i个样本在输出层的第k个样本的输出 y(i)k代表第i个样本的第k个输出

然后同于logistic回归,将所有的W更新即可。难处在于此处的偏导数怎么求?首先得说说链式求导法则:

所以我们可以有:

接下来的问题就是有theta了,当我们要求的错误变化率是最后一层(最后一层既是输出层的前一层)且只看一个输出神经元时则:

多个相加即可

那么中间层次的神经元变化率如何求得呢?我们需要研究l层和了+1层之间的关系,如下图:

第l层的第i个Z与第l层的第i个a的关系就是取了一个sigmod函数,然而第l层的第i个a与和其对应的w相乘后在加上其他的节点与其权值的乘积构成了第l+1层的Z,好拗口,好难理解啊,看下式:

大体也就是这么个情况,具体的步骤为:

1利用前向传播算法,计算出每个神经元的输出

2对于输出层的每一个输出,计算出其所对应的误差

3计算出每个神经元的错误变化率即:

4计算CostFunction的微分,即:

以上就是关于反向传播算法一开始计算什么内容的梯度全部的内容,包括:反向传播算法一开始计算什么内容的梯度、如何理解神经网络里面的反向传播算法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9712424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存