神经网络反向传播中的高阶向量化

机器算法验证 机器学习 神经网络 梯度下降 反向传播 雅可比
2022-03-31 07:51:02

我有一个关于反向传播期间雅可比行列式的问题。网络看起来像:

具有 n 个输入节点、第一个隐藏层中的 3 个节点、第二个隐藏层中的 2 个节点和一个输出节点的网络。

前向传播可以定义为:

正向计算

其中 g 是激活函数。

每个变量的维度也可以如下给出:

方面

现在,对于反向传播,通过使用链式法则,我们可以得到:

链式法则

为了匹配尺寸,我们有:

结果

我知道应用链式法则后,通常的方法是计算广义雅可比矩阵并进行矩阵乘法。然而,上面链式法则中每个部分的维度与广义雅可比矩阵给出的不匹配。例如,对于链式法则中的最后一项,广义雅可比矩阵的维数应为 (2 X 1) X (2 X 3)。但是,课程笔记说的是1 X 3。

为什么是真的?

任何意见表示赞赏!

2个回答

你是对的,这作为雅可比行列式是没有意义的。此外,如果乘以 jacobians 真的是 autodiff 的工作方式,那么任何点函数都应用于长度向量n会导致巨大的n×n正在创建雅可比行列式。在任何有竞争力的 autodiff 实现中都不会发生这种情况。

实际上,没有必要为了执行反向传播而计算雅可比。所需要的只是“矢量雅可比积”或 VJP。

如果你有一个功能f:RnRm, 然后VJP:Rm×RnRn是一个计算函数VJP(g,x)=Jf(x)Tg, 在哪里g是传入的梯度向量LfJf(x)是雅可比的f. 从技术上讲,这是一个 JVP 而不是 VJP,但这只是一个惯例问题。

关键是,尽管实现 VJP 的一种方法是显式计算雅可比,然后执行此向量矩阵乘积,但如果您能够在不这样做的情况下计算 VJP,那也很好。

例如,VJP 为sin(x)只是VJP(g,x)=gcos(x). 的VJPf(W,x)=Wx关于x简直就是VJP(g,W,x)=WTg和 VJP 关于WVJP(g,W,x)=gxT

回到你的问题:3.30 中的表达式实际上只是计算VJP(g,W,x)=gxT, RHS 上的所有项,除了最右边的项是g,最后一项是xT.

LW[2]必须是 2x3 就像尺寸一样W[2].

我建议您使用 Nielsen书中给出的反向传播公式(和符号)当网络变得更大时,很容易遵循

来自尼尔森的 BP

据此

δ3=a[3]yδ2=((W[3]T(a[3]y))g(z[2]))Lwjk[2]=ak[1]δj2

再走一步:

δ1=((W[2]Tδ2)g(z[1]))Lwjk[1]=xk(i)δj1

在哪里δ1R3×1

我希望至少对其他人有用