为神经网络拟合参数

代价函数

回顾下逻辑回归算法的代价函数:

我在b站学ML(十)

在神经网络中使用的代价函数是逻辑回归算法中使用的代价函数的一般化形式:

m:训练集的数量

K:分类问题中输出层的神经元的数量

我在b站学ML(十):表示第 i 个输出层神经元的输出,我在b站学ML(十)是一个K维向量

L:神经网络的层数

sl:第 l 层的神经元数量

sl+1:s(l +1),第 l +1 层神经元的数量

第一个求和项求得是输出层每个神经元计算的代价函数值的和

第二个求和是正则化项的求和,每一层每个神经元每个参数矩阵(权重矩阵)的和

可以结合这样一个模拟的四层神经网络来理解,K=4,L=4,s1=3,s2=s3=5,s4=sL=4

我在b站学ML(十)

我在b站学ML(十)

代价函数最小化

反向传播算法

假设目前训练集的数量只有一个,先用向前传播算出神经网络每一层的输出值(关于向前传播在https://blog.csdn.net/After__today/article/details/81835011中有介绍)

我在b站学ML(十)

接下来使用反向传播算法计算偏导数项我在b站学ML(十)

这里引入一个误差变量 我在b站学ML(十) 来表示第 l 层的第 i 个神经元激励值的误差,我在b站学ML(十)会对着算法的迭代一步步更新

这里 我在b站学ML(十) 的下标和视频中相反是因为视频中的下标与上一节课的写的反的,这里按上一节课的下标来写就好

我在b站学ML(十)

在这个神经网络中,第四层的 我在b站学ML(十) 计算化简得到的直观的是第四层的激励减去训练样本中的真实值

误差 我在b站学ML(十) 的具体计算步骤

这里的我在b站学ML(十)实际是计算我在b站学ML(十)的值(计算到最后就会发现),利用链式法则对偏导数项做处理

我在b站学ML(十)

右边第一项:

简化代价函数,忽略求和项和正则化项来求它的偏导

我在b站学ML(十) (输出层中我在b站学ML(十)就等于我在b站学ML(十)

所以我在b站学ML(十)

右边第二项:

我在b站学ML(十),所以我在b站学ML(十)

这里我在b站学ML(十)恰好也等于这个式子,因此可以用这个式子来替换求导,即我在b站学ML(十)

所以,我在b站学ML(十)

对于输出层前的每一层的我在b站学ML(十)的计算:

这里没写下标代表对层整体计算,其实就是对每层的每个单元的误差求和

我在b站学ML(十)

我在b站学ML(十)

最后回到计算最初的代价函数:

我在b站学ML(十)

很容易我们可以看出右边第一项就是上面计算的我在b站学ML(十)

右边第二项我在b站学ML(十),所以我在b站学ML(十)

所以得出代价函数求偏导的最终结果:我在b站学ML(十)

计算到这里就可以理解上面计算 我在b站学ML(十) 的计算为什么是 我在b站学ML(十) 了。

反向传播算法的实现:

我在b站学ML(十)

(这里下标 (i,j) 和上一节课写反的,表达意思相同)

首先有m个训练集,我在b站学ML(十)表示全局误差,每一层对应一个我在b站学ML(十)

遍历训练集,对每一个(我在b站学ML(十)),设定输出层激励我在b站学ML(十),接下来用前向传播计算每一层的激励值

使用训练集的我在b站学ML(十)来计算网络输出层的我在b站学ML(十)

有了输出层的我在b站学ML(十),根据前面的每一层我在b站学ML(十)的计算公式计算我在b站学ML(十),不计算我在b站学ML(十)是因为不需要考虑输入层的误差项

最后用我在b站学ML(十)来累计前面计算的偏导数项。

然后得到最终的代价函数求偏导数的结果(左边为计算过程,右边是证明过程很复杂=。=),就可以应用在梯度下降法等算法的优化上了。

我在b站学ML(十)我在b站学ML(十)

回顾一下向前传播的过程以及与反向传播的比较

我在b站学ML(十)

再来看反向传播的过程,很容易可以发现其实两者的计算方法是一样的,只是方向相反

我在b站学ML(十)

 

相关文章:

  • 2021-12-26
  • 2022-01-08
  • 2021-11-20
  • 2021-05-29
  • 2022-12-23
  • 2021-08-22
  • 2022-12-23
  • 2022-01-19
猜你喜欢
  • 2021-11-30
  • 2021-05-31
  • 2021-10-04
  • 2022-01-23
  • 2022-01-04
  • 2021-04-17
  • 2021-05-14
相关资源
相似解决方案