[cv231n] Backpropagation for a Linear Layer

Backpropagation for a Linear Layer 是李飞飞大牛学生Justin Johnson(注意断句),点击可以看他的个人主页发表的论文涉及了多个领域,博士期间在CVPR/ICCV/ECCV顶会上发表多达13篇论文。本文是他为cs231n课程撰写关于Backpropagation的notes,也是我迄今为止见过最简洁,数学推理比较完备的一篇notes。


在本篇笔记中主要是在线性层中推导反向传播的公式,使用Mini-batch。

在前向反馈中,线性层有一个大小是 [cv231n] Backpropagation for a Linear Layer 的输入 [cv231n] Backpropagation for a Linear Layer ,以及一个大小是 [cv231n] Backpropagation for a Linear Layer 的矩阵 [cv231n] Backpropagation for a Linear Layer 。

通过两个输入的矩阵内积计算出大小是 [cv231n] Backpropagation for a Linear Layer 的输出 [cv231n] Backpropagation for a Linear Layer 。

为了让这个例子更具体,我们令 [cv231n] Backpropagation for a Linear Layer 现在我们以这个例子可以写出前向传播的输入:

       [cv231n] Backpropagation for a Linear Layer

       [cv231n] Backpropagation for a Linear Layer

在前向传播后,我们假设输入会在网络的其他部分被使用,最后被用来计算损失 [cv231n] Backpropagation for a Linear Layer

在反向传播中,我们假设它的导数(实际上是偏导)[cv231n] Backpropagation for a Linear Layer 已经被计算出来。比如说如果线性层是线性分类器的一部分,那么矩阵 [cv231n] Backpropagation for a Linear Layer 给出了分类的打分;这些分数被喂到了损失函数中(例如SVM中的softmax),用来基于打分scores计算损失 [cv231n] Backpropagation for a Linear Layer 和 导数 [cv231n] Backpropagation for a Linear Layer 。

当 [cv231n] Backpropagation for a Linear Layer 是矩阵 [cv231n] Backpropagation for a Linear Layer 的一个标量,大小为 [cv231n] Backpropagation for a Linear Layer 。梯度 [cv231n] Backpropagation for a Linear Layer 会使一个矩阵并且和矩阵 [cv231n] Backpropagation for a Linear Layer 的大小一样都是 [cv231n] Backpropagation for a Linear Layer 。并且梯度 [cv231n] Backpropagation for a Linear Layer 的每一个元素都给出了损失 [cv231n] Backpropagation for a Linear Layer 基于矩阵 [cv231n] Backpropagation for a Linear Layer 的每一个元素的导数[cv231n] Backpropagation for a Linear Layer

                                                                    [cv231n] Backpropagation for a Linear Layer

在反向传播中,我们的目标是使用partial [cv231n] Backpropagation for a Linear Layer [cv231n] Backpropagation for a Linear Layer 来计算 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer。并且,当损失 [cv231n] Backpropagation for a Linear Layer 是标量时, [cv231n] Backpropagation for a Linear Layer 大小必须是 [cv231n] Backpropagation for a Linear Layer , [cv231n] Backpropagation for a Linear Layer 大小必须是 [cv231n] Backpropagation for a Linear Layer 。

通过链式法则[cv231n] Backpropagation for a Linear Layer,我们有(Goal):

                                                                [cv231n] Backpropagation for a Linear Layer

上式中 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer 称为雅可比矩阵 [cv231n] Backpropagation for a Linear Layer ,包含矩阵 [cv231n] Backpropagation for a Linear Layer 的每一个元素基于输入 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer 每一个元素的偏微分 [cv231n] Backpropagation for a Linear Layer


然而我们不想单独对 [cv231n] Backpropagation for a Linear Layer [cv231n] Backpropagation for a Linear Layer  [cv231n] Backpropagation for a Linear Layer 单独计算,因为我们知道他们会非常大。在经典的神经网络中,我们大概率有 [cv231n] Backpropagation for a Linear Layer ,然后我们的 [cv231n] Backpropagation for a Linear Layer 包含了 [cv231n] Backpropagation for a Linear Layer 个标量值。(这足够有680万个数,使用32位的浮点数,这个[cv231n] Backpropagation for a Linear Layer会占据256G的存储空间)。因此需要额外单独存储[cv231n] Backpropagation for a Linear Layer矩阵。

但是我们对于大多数常见的神经网络层,我们的导数计算 [cv231n] Backpropagation for a Linear Layer 时不需要单独计算[cv231n] Backpropagation for a Linear Layer [cv231n] Backpropagation for a Linear Layer 。甚至我们连[cv231n] Backpropagation for a Linear Layer [cv231n] Backpropagation for a Linear Layer 也不需要单独计算;在许多场景中,我们只需要算出小样例的数据,然后在内部进行推导。

让我们看看这个如何对我们的例子来计算。


设置 [cv231n] Backpropagation for a Linear Layer,首先我们固定 [cv231n] Backpropagation for a Linear Layer ,然后我们知道 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer 大小相同。

[cv231n] Backpropagation for a Linear Layer

对上式中每一项,首先我们计算 [cv231n] Backpropagation for a Linear Layer,通过链式法则,我们知道:

[cv231n] Backpropagation for a Linear Layer

上式我们可以知道 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer 都是标量,所以 [cv231n] Backpropagation for a Linear Layer 也是一个标量。如果我们看见 [cv231n] Backpropagation for a Linear Layer 不是一个矩阵,而是由多个标量组成的集合,我们可以使用链式法则来单独计算标量导数 [cv231n] Backpropagation for a Linear Layer 。

为了避免求和,更方便来收集所有的 [cv231n] Backpropagation for a Linear Layer 变成一个单独的矩阵 [cv231n] Backpropagation for a Linear Layer,这里的 [cv231n] Backpropagation for a Linear Layer 是一个标量,[cv231n] Backpropagation for a Linear Layer 是一个矩阵,[cv231n] Backpropagation for a Linear Layer 的大小也是和 [cv231n] Backpropagation for a Linear Layer 一样的 [cv231n] Backpropagation for a Linear Layer ,[cv231n] Backpropagation for a Linear Layer 给出了 [cv231n] Backpropagation for a Linear Layer 基于 [cv231n] Backpropagation for a Linear Layer 的每一个元素的导数。我们再简单的收集所有的 [cv231n] Backpropagation for a Linear Layer 变成 [cv231n] Backpropagation for a Linear Layer;因为 [cv231n] Backpropagation for a Linear Layer 是一个矩阵 [cv231n] Backpropagation for a Linear Layer 是一个标量,[cv231n] Backpropagation for a Linear Layer 大小也是和 [cv231n] Backpropagation for a Linear Layer 一样的 [cv231n] Backpropagation for a Linear Layer。然后将[cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer做点乘。

接下来我们有 [cv231n] Backpropagation for a Linear Layer,然后我们只需要计算 [cv231n] Backpropagation for a Linear Layer ,我们简单从[cv231n] Backpropagation for a Linear Layer 计算微分:

[cv231n] Backpropagation for a Linear Layer

综合上面两个式子,我们重新得到 [cv231n] Backpropagation for a Linear Layer

[cv231n] Backpropagation for a Linear Layer

然后继续重复计算 [cv231n] Backpropagation for a Linear Layer ,其他三个元素:

[cv231n] Backpropagation for a Linear Layer

最后我们综合上面4个元素 [cv231n] Backpropagation for a Linear Layer 的运算,给出 [cv231n] Backpropagation for a Linear Layer 基于 [cv231n] Backpropagation for a Linear Layer 和 [cv231n] Backpropagation for a Linear Layer 的式子:

[cv231n] Backpropagation for a Linear Layer

在式子24中,[cv231n] Backpropagation for a Linear Layer 大小是 [cv231n] Backpropagation for a Linear Layer ,矩阵 [cv231n] Backpropagation for a Linear Layer 大小是 [cv231n] Backpropagation for a Linear Layer ;尽管最终 [cv231n] Backpropagation for a Linear Layer 大小是 [cv231n] Backpropagation for a Linear Layer ,它同样和X大小相同。

 同理使用相同的原则,我们得到 [cv231n] Backpropagation for a Linear Layer :

[cv231n] Backpropagation for a Linear Layer

这种每次只考虑一个元素的策略可以帮助推导出一个层的反向传播方程,即使该层的输入和输出是任意形状的张量;这在推导卷积层的反向传播时尤其有价值。

****的latex格式我还在摸索,有时候有花体时候会用别的字体,有强迫症的朋友抱歉了lol~