我对BPNN的一些浅见

我们知道,在任何机器学习模型中,都会有一个代价函数的概念。当训练样本一定时,这个代价函数实际上是一个自变量为模型参数,因变量为代价大小的函数。那么我们训练一个机器学习模型的目的就是,通过改变模型参数,来最小化模型的代价。那么问题来了,以什么样的方式来改变模型参数?一个很直观的方法是令模型的参数在其梯度方向上改变(关于梯度与函数大小的关系大家可以参考高等数学相应章节)。所以切入点是要求每个参数的偏导数。
那么,我们这里依照梯度改变的思想,对BPNN的参数优化过程做一个推导。在做推导之前,先明确一个规定,一层是指本层神经元和由本层神经元所辐射出的连接权重:
我对BPNN的一些浅见_第1张图片
假设我们在这里要求代价函数J相对于第l-1层中的参数Wij的偏导数(第l-1层的第i个神经元与第l层的第j个神经元连接权重)。很显然,有下式。其中,我们把等号右边的第一项称为神经元j的“残差”(这个残差的作用实际上是衡量了它对于输入连接的敏感程度,大家知道,偏导数一般是衡量自变量中的分量对与函数因变量影响的大小程度)。因此可以看出,其实我们需要求得l层中第j个神经元的残差,和该神经元的输入相对于欲求得连接权重的导数。
我对BPNN的一些浅见_第2张图片
对于上式中右边第一项,很容易求得(假设神经元激活函数为sigmoid函数)为l-1层第i个神经元的激活值:
我对BPNN的一些浅见_第3张图片
而对于右边项,我们这里需要引入链式求导法则,从最后一层的输出层,一直往前进行求导。,假设总的层数为nl层。举例来讲,我们这里要求nl-2层中第i个神经元处的残差,然后再依次看它与第nl-1层和nl层中的残差有什么关系:
我对BPNN的一些浅见_第4张图片
显然,如果我们把上面第三个式子写成残差的表达形式的话,可以得到下式:
当我们把上式的表达代入第nl-1层中时,可以得到nl-1层中第p个神经元输入的残差可以表达为:
再将其代入第nl-2层,可以得到
通过三个式子的关系,我们可以知道,一个特定层中的神经元的残差都可以从最后一层开始求得,而在逐层求取残差时,可以依照下式进行计算:
我对BPNN的一些浅见_第5张图片
很显然,只要我们能够知道当前层欲求得权重所连接的本层的激活值和后一层的残差,就可以求得偏导数。
我对BPNN的一些浅见_第6张图片
很显然,要求得指定层总某一神经元i与后一层第j个神经元连接权重的偏导数,只需要求得本层中神经元激活值和后一层中被连接神经元的残差即可。
今天推导到这里,后续还会有新的内容。

你可能感兴趣的:(机器学习(Machine,Learning))