我应该如何通过 CNN 的扁平层实现反向传递?

人工智能 神经网络 卷积神经网络 反向传播 执行
2021-11-02 14:31:36

我正在制作一个没有任何其他外部 NN 库的 NN 库,因此我正在从头开始实现所有层,包括展平层和算法(前向和后向传递)。我知道 flatten 层的前向实现,但是后向是否只是重塑它?如果是,我可以调用一个简单的 NumPyreshape函数来重塑它吗?

2个回答

Flatten层本身没有可学习的参数(它执行的操作完全由构造定义);仍然,它必须将梯度传播到前一层。

通常,该Flatten操作是适定的,因为无论输入形状是什么,您都知道输出形状是什么。

当你反向传播时,你应该做一个“Unflatten”,它将一个扁平的张量映射到一个给定形状的张量,并且你知道那个特定的形状是从前向传递中得到的,所以它也是一个合适的操作。

更正式的

假设您Img1输入了Flatten图层

(F1,1(X;w1,1)F1,2(X;w1,2)F2,1(X;w2,1)F2,2(X;w2,2))

所以,在你的输出中

(F1,1(X;w1,1)F1,2(X;w1,2)F2,1(X;w2,1)F2,2(X;w2,2))

当你计算梯度时,你有

dF一世,j(X;w一世,j)dw一世,j

并且所有内容都与前向传递中的位置相同,因此 unflatten 从张量映射到(1, 4)(2, 2)量。

是的,一个简单的重塑就可以了。扁平化层只是重塑数据/激活以使其与其他层/功能兼容的工具。展平层本身不会改变激活,因此除了改变形状之外不需要特殊的反向传播处理。