人工神经网络—【BP】反向传播算法证明
第一步:前向传播
【注】此BP算法的证明仅限sigmoid激活函数情况。本博文讲道理是没错的,毕竟最后还利用代码还核对了一次理论证明结果。
简单的三层网络结构如下
参数定义:
可见层定义为X,共有n个单元,下标用 i表示
隐藏层定义为B,共有p个单元,下标用 j 表示
输出层定义为Y,共有q个单元,下标用 k表示
可见层到隐藏层权重矩阵为W,大小为 p*n
隐藏层到输出层权重矩阵为V,大小为q*p
① 计算隐藏层各神经元激活值
代表所有可见层单元乘以连接到第j个隐单元的权重,再减去偏置或者阈值
②计算隐含层单元的输出值
采用sigmoid函数即S型函数
③计算输出层各神经元激活值
④计算输出层单元的输出值
第二步:逆向传播
校正是从后往前进行的,所以称为误差逆传播,计算是从输出层到隐藏层,再从隐藏层到输入层。更新的是权重和偏置,称为模型参数
两层的权重和偏置的更新是类似的,下面以输出层到隐藏层的权重和偏置更新为例。
采用平方和误差衡量期望输出与实际输出的差别:
输出层→隐藏层的更新
先对权重求梯度:
【注】上式中最后一个等号左边第二项求导利用对sigmoid函数求导
接下来对偏置求梯度
隐藏层→输入层的更新
【注】建议这一层的更新,读者认真推导,这样会对BP的更新有更深刻的印象
第四步:模型参数校正
这一步就非常简单啦,直接用原始的模型参数,减去现在的模型参数就行啦,其中会加入一个学习率η,控制梯度下降速度
第五步:一般性推导
【注】以下纯为个人理解,与网络上那些复杂点的公式可能有出入,实际情况有待考证..............
上面只是三层BP神经网络的推导,看着已经很复杂了,这时候会产生一个想法:如果是很多层的BP神经网络该如何去推导?难道是每一层都得从最后一层挨个朝前推导一次?这时候就得考察我们的归纳能力。这里有一个题外话,何为归纳?何为演绎?简单点,归纳就是从特殊性到一般性,而演绎则是从一般到特殊。当然内中道理还有很多,就不说了。
如何去归纳,这里就得说到BP中经常遇到的一个词语:链式求导。如果不知道具体定义也没事,朝下看:
①从最后一个权重开始看:这个权重连接了中间隐层和最后的输出层,求导过程是对输出层的sigmoid激活函数求导,然后进一步得到的结果是:输出误差*输出值*(1-输出值)*(隐层值),换个方法说:权重右边的输出误差*权重右边的输出*(1-权重右边的输出)*(权重左边的输出);——分割线——权重连接的右边层的偏置更新就是去掉权重更新中乘以的权重左端值的那一参数(即权重连接的左层单元的值)。
②然后看倒数第二个权重:这个权重连接了原始输出层和中间隐层,求导过程还是对输出层的sigmoid激活函数求导,只不过求导对象是第二个权重,而不是①中的权重。接下来发现不好求导,需要按照求导法则变换,变成了最后的输出层对隐层的输出求导乘以隐层输出对第二个权重的求导,可以发现这两个都好求,因为他们都直接存在与被求导的激活函数(也就是分母的表达式)中。然后发现输出层关于第二层权重的导数变成了:权重右边某种值*权重右边的输出*(1-权重右边的输出)*(权重左边的输出)。发现与①很相似,只不过第一项有差别,然后观察何为“权重右边某式”,发现就是此层权重的后一层权重连接的层的偏置更新乘以连接到后一层的权重。
这样总结出一个规律:
建立的一个BP网络如下,注意,最后的伪层只是第n层的副本,实际的BP是没有这一层的,此处只是为了方便理解罢了,原因继续看下去:
如图所示,W左边连接层A,右边连接层B,B层的下一层是C,B和C的连接权重为V,C的偏置更新为△c,B的偏置更新为△b,则按照归纳的结论可以得到下式:
其实这里的V是被转置了的,因为V是从B到C的权重,那么从C的维度到B的维度,就必须通过转置相乘。具体涉及到矩阵求导法则,后面有博客更新这一内容。
【注】有时候面试会经常问:权重可以初始化为零?为什么?直接看这两个公式就能很清晰发现是不能的,因为这两个公式的更新都与权重有关,如果初始权重为0的时候,这两个梯度就都是0了。
但是突然想到当A是第n-1层的时候,并没有对应的"C"层去计算第n-1层到第n层的连接权重,也就是最后一层的权重, 那么怎么办?
方法一:
我们建立了第n层数据的副本,称为伪层,那么此时C就是伪层了,对应的伪层偏置设置为:
对应的第n层到伪层的连接权重为主对角线为1,其它值都为0的矩阵.
这样一来,我们可以轻松发现,BP的更新步骤可以用一个递归来解决:
步骤1:建立一个伪层副本,伪层偏置设置为△c,伪层与输出层(第n层)的连接权重为V
步骤2:从伪层往前推,建立一个层数为3的滑动窗口,从左到右依次称为上面介绍过的A、B、C层
步骤3:套用上面ABC更新△W和△b的方法去计算权重与偏置梯度
步骤4:返回步骤2(即往前移动一层)
步骤5:每一层的更新后参数就是
方法二:
忽视方法一种的伪层, 因为我们发现除了最后一层的所有的偏置都能用相同的公式解决,那么我们怎么得到最后一层的偏置?简单,直接轱辘上一节看《输出层→隐藏层的更新》这一节, 记住最后一层,也就是输出层的偏置更新, 然后再去套那个三层的通用公式就OK了
【注】最近看了一个关于残差项的博文:https://zhuanlan.zhihu.com/p/27664917,感觉文章的残差项其实就是这里的偏置变化量,然后在这个博客的基础上继续推导(每层输出相对于激活函数的导数)就能得到我们的式子咯。所以本博客的结论(ABC三层递归求解)是无问题的
关于从sigmoid激活的三层BP到任意激活函数的三层BP到任意激活函数任意层的BP的证明请移步这里
验证
说了这么多公式,还是一句话说得好: no can no bb, show me your code →__→
那么,就扒一扒matlab的deep learning toolbox里面的BP代码,以sigmoid为例,对照第五步的那个三层递推公式看:
伪层的建立其实就是链式求导的开端,伪层的△c就是那个减法公式:
nn.e = y - nn.a{n};
然后推导出最后一层的△c:
switch nn.output
case 'sigm'
d{n} = - nn.e .* (nn.a{n} .* (1 - nn.a{n}));
case {'softmax','linear'}
d{n} = - nn.e;
end
然后从倒数第二层开始
for i = (n - 1) : -1 : 2
计算我们的ABC三层推导中的B(1-B):
switch nn.activation_function
case 'sigm'
d_act = nn.a{i} .* (1 - nn.a{i});
case 'tanh_opt'
d_act = 1.7159 * 2/3 * (1 - 1/(1.7159)^2 * nn.a{i}.^2);
end
随后计算△c*V*B(1-B),也就是当前层的偏置更新量△b:
if i+1==n % in this case in d{n} there is not the bias term to be removed
d{i} = (d{i + 1} * nn.W{i} + sparsityError) .* d_act; % Bishop (5.56)
else % in this case in d{i} the bias term has to be removed
d{i} = (d{i + 1}(:,2:end) * nn.W{i} + sparsityError) .* d_act;
end
至此上一层循环结束,计算得到了当前层的偏置更新量。
对于权重,可以发现是△c*V*B(1-B)*A,其实就是△b乘以当前层的上一层输出就行了,直接在最后单独开启新的循环乘一下就行了:
for i = 1 : (n - 1)
if i+1==n
nn.dW{i} = (d{i + 1}' * nn.a{i}) / size(d{i + 1}, 1);
else
nn.dW{i} = (d{i + 1}(:,2:end)' * nn.a{i}) / size(d{i + 1}, 1);
end
end
数据分析咨询请扫描二维码
在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16