神经网络参数的更新
代价函数
首先,我们需要回顾一下linear regression以及logistic regression的代价函数,以及参数更新。暂时忽略正则化项。
(线性问题)线性回归的代价函数
- 对于一个简单的线性回归方程h_θ(x)
- 我们可以得到他的代价函数J(θ)
线性回归的代价函数也可以称为平方误差函数
- 对于θ的更新比较简单,不再讨论
(分类问题)逻辑回归的代价函数
- 对于一个简单的逻辑回归方程h_θ(x)
- 如果代价函数采用平方误差函数,将会导致局部最优,可能找不到全局最优解
- 因此我们得到逻辑回归中的代价函数
- 权重θ的更新以及J(θ)的导数如下,可以自己去求一求
神经网络的代价函数
首先视频中给出的代价函数J(θ)
与逻辑回归的代价函数类似
神经网络的权重更新
首先进行正向传播(Forward propagation)得到各个结点的z值也就是激活值
其次才是今天的重点反向传播,来对神经网络中的权重θ进行更新
其实反向传播就是通过输出层的误差一步步更新中间hidden layer的权重
反向传播算法
4. 对于这张图片,我们需要首先了解δ的定义
δ是代价函数J对z的微分
5. 知道了δ的定义,想必就能很好的理解每个δ的运算了
解惑
- 你可能会疑惑这里为什么对激活值z求导,那么如何更新权重θ和偏差值θ_0呢?
对于这个问题,你不妨想一想,既然代价函数对激活值的导数求出来了,那么在乘以激活值对权重和偏差值的导数,是不是就得到了代价函数对于权重和偏差值的导数了。
更新的关键在我理解重点是选择一个好的激活函数以及更新权重时学习率η的选择。 - 你可能会疑惑为什么要对激活值z求微分,为什么不直接对权重求微分呢?
我认为对激活值求微分可以帮你判断选择的激活函数是否合适,鉴于初学者的了解其他用处暂时还不懂,求大佬进行补充。
在反向传播中,我们通常要计算代价函数对激活值的微分,代价函数对权重的微分,代价函数对偏差值的微分,这三者都要计算。 - 神经网络的参数更新过程是如何进行的?
首先进入循环,执行以下步骤,知道迭代次数够了或者代价函数结果达到某一设定的值退出循环
1.正向传播,神经网络接受输入,通过每一层的权重和激活函数计算激活值(z)和激活函数的输出值(a)。正向传播的目标是计算网络的预测输出,并将其与实际标签进行比较以计算损失(误差)。
2.反向传播:反向传播是关键的学习步骤,其中你计算梯度,用于更新神经网络的权重和偏差。
·首先,计算损失函数对最后一层的激活值(z)的导数,通常表示为 ∂L/∂z,其中 L 代表损失函数。
·接下来,根据链式法则,计算损失函数对最后一层的权重和偏差值的导数。这可以通过将 ∂L/∂z 与 ∂z/∂w(权重的导数)和 ∂z/∂b(偏差的导数) 相乘来实现。
·然后,这个导数传播回前一层,计算损失函数对前一层的激活值的导数 ∂L/∂a,其中 a 是激活函数的输出。
·继续这个过程,反向传播到每一层,计算损失函数对权重和偏差值的导数。
·使用计算得到的梯度,更新权重和偏差值,通常使用梯度下降或其变种的方法。
以上便是我对于神经网络反向传播BP算法的理解,其实对于这个方法只需要知道是用来更新权重和偏差值即可,知道是用来干什么的。
有讲的欠缺的地方或者需要补充的,请大佬进行补充。