为神经网络拟合参数
代价函数
回顾下逻辑回归算法的代价函数:
在神经网络中使用的代价函数是逻辑回归算法中使用的代价函数的一般化形式:
m:训练集的数量
K:分类问题中输出层的神经元的数量
:表示第 i 个输出层神经元的输出,是一个K维向量
L:神经网络的层数
sl:第 l 层的神经元数量
sl+1:s(l +1),第 l +1 层神经元的数量
第一个求和项求得是输出层每个神经元计算的代价函数值的和
第二个求和是正则化项的求和,每一层的每个神经元的每个参数矩阵(权重矩阵)的和
可以结合这样一个模拟的四层神经网络来理解,K=4,L=4,s1=3,s2=s3=5,s4=sL=4
代价函数最小化
反向传播算法
假设目前训练集的数量只有一个,先用向前传播算出神经网络每一层的输出值(关于向前传播在https://blog.csdn.net/After__today/article/details/81835011中有介绍)
接下来使用反向传播算法计算偏导数项
这里引入一个误差变量 来表示第 l 层的第 i 个神经元激励值的误差,会对着算法的迭代一步步更新
这里 的下标和视频中相反是因为视频中的下标与上一节课的写的反的,这里按上一节课的下标来写就好
在这个神经网络中,第四层的 计算化简得到的直观的是第四层的激励减去训练样本中的真实值
误差 的具体计算步骤:
这里的实际是计算的值(计算到最后就会发现),利用链式法则对偏导数项做处理
右边第一项:
简化代价函数,忽略求和项和正则化项来求它的偏导
(输出层中就等于)
所以
右边第二项:
,所以
这里恰好也等于这个式子,因此可以用这个式子来替换求导,即
所以,
对于输出层前的每一层的的计算:
这里没写下标代表对层整体计算,其实就是对每层的每个单元的误差求和
最后回到计算最初的代价函数:
很容易我们可以看出右边第一项就是上面计算的
右边第二项,所以
所以得出代价函数求偏导的最终结果:
计算到这里就可以理解上面计算 的计算为什么是 了。
反向传播算法的实现:
(这里下标 (i,j) 和上一节课写反的,表达意思相同)
首先有m个训练集,表示全局误差,每一层对应一个
遍历训练集,对每一个(),设定输出层激励,接下来用前向传播计算每一层的激励值
使用训练集的来计算网络输出层的
有了输出层的,根据前面的每一层的计算公式计算,不计算是因为不需要考虑输入层的误差项
最后用来累计前面计算的偏导数项。
然后得到最终的代价函数求偏导数的结果(左边为计算过程,右边是证明过程很复杂=。=),就可以应用在梯度下降法等算法的优化上了。
回顾一下向前传播的过程以及与反向传播的比较
再来看反向传播的过程,很容易可以发现其实两者的计算方法是一样的,只是方向相反