向初学者解释反向传播(第 2 部分):必须有更好的方法

使反向传播成为可能的想法。《为初学者解释反向传播(第 2 部分):必须有更好的方法》一文首先出现在《走向数据科学》上。

来源:走向数据科学

欢迎回来!

我们详细了解反向传播的旅程。

让我们简要回顾一下到目前为止我们在第 1 部分中介绍的内容。

快速回顾

我们首先开始尝试使用简单的数据集来理解神经网络。

在这个过程中,我们首先构建了一个小型神经网络,并了解它如何通过前向传播的过程进行预测。

然后我们观察到预测值与实际值相差甚远,导致误差较大。

现在,我们想要训练这个神经网络以使其表现更好。

通过与简单线性回归进行比较,我们观察到,在我们的神经网络中,损失取决于七个参数。

\[w_1,w_2,w_3,w_4,b_1,b_2,b_3\]

我们完整的损失函数如下所示:

\[

L(w_1,w_2,w_3,w_4,b_1,b_2,b_3)=\frac{1}{n}\sum_{i=1}^{n}\left(y_i-\left(w_ 3\mathrm{ReLU}(w_1x_i+b_1)+w_4\mathrm{ReLU}(w_2x_i+b_2)+b_3\right)\right)^2

\]

接下来,就像我们在简单线性回归中所做的那样,我们想要区分每个参数的损失。

我们从经典的微分方法开始并使用它。最终,我们得到了以下结果:

\frac{\partial L}{\partial w_1}

=

-\frac{2}{n}

\sum_{i=1}^{n}

(y_i-\hat{y}_i)

w_3

\mathrm{ReLU}'(w_1x_i+b_1)

x_i

我们真的必须重复这个吗?

现在是时候思考了。

我们对损失进行了微分,这意味着我们试图找出损失如何随着​变化而变化。

这里我们使用了经典的微分方法。

我们现在还有六个参数来区分损失。

你觉得怎么样?

我们需要用同样的方法继续吗?

编号

链式法则的救援

如果您还记得的话,我们在第 1 部分中讨论了链式法则。

我们使用了一个简单的例子。

我们考虑了

y=x^2

z=y^3

我们注意到\(z\)并不直接依赖于\(x\)。

相反,关系看起来像

x \rightarrow y \rightarrow z。

这意味着当\(x\)改变时,它首先改变\(y\),然后\(y\)的改变影响\(z\)。

\frac{dz}{dx}

\frac{dz}{dy}

\cdot

\frac{dy}{dx}

遵循依赖路径

L.