机器学习10-神经网络反向传播算法

一,神经网络的代价函数

  首先引入一些便于稍后讨论的新标记方法:假设神经网络的训练样本有个,每个包含一组输入和一组输出信号 y,L 表示神经网络层数,Sl 表示每层的 neuron 个数(SL 表示输出层神经元个数),SL  代表最后一层中处理单元的个数。将神经网络的分类定义为两种情况:二类分类和多类分类,二类分类:SL=1, y=0 or 1 表示哪一类;K 类分类:SL=K, yi = 1 表示分到第 i 类;(K>2)


我们回顾逻辑回归问题中我们的代价函数为:


在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量 y,但是在神经网络中,我们可以有很多输出变量,我们的 hθ(x)是一个维度为的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为:


    这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K 个预测,基本上我们可以利用循环,对每一行特征都预测 K 个不同结果,然后在利用循环在 K 个预测中选择可能性最高的一个,将其与 y 中的实际数据进行比较。归一化的那一项只是排除了每一层 θ0 后,每一层的 θ 矩阵的和。最里层的循环循环所有的行(由 sl +1 层的激活单元数决定),循环则循环所有的列,由该层(sl 层)的激活单元数所决定。即:hθ(x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization 的 bias 项处理所有参数的平方和。


二,反向传播算法

    反向传播算法作用:求出神经网络代价函数的偏导数,便于进行梯度下降

   之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的 hθ(x)。现在,为了计算代价函数的偏导数,我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。以一个例子来说明反向传播算法。假设我们的训练集只有一个实例(x(1),y(1)),我们的神经网络是一个四层的神经网络,其中 K=4,SL=4,L=4:

前向传播算法:


反向传播算法:

我们从最后一层的误差开始计算,误差是激活单元的预测(ak)与实际值(yk)之间的误差,(k=1:K)。我们用 δ 来表示误差,则:



重要的是清楚地知道上面式子中上下标的含义:

 l 代表目前所计算的是第几层

 j 代表目前计算层中的激活单元的下标,也将是下一层的第 j 个输入变量的下标。

 i 代表下一层中误差单元的下标,是受到权重矩阵中第 i 行影响的下一层中的误差单元的下标。

 如果我们考虑归一化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用 来表示这个误差矩阵。第 l 层的第 i 个激活单元受到第 j个参数影响而导致的误差。

 我们的算法表示为:


 即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值