我需要帮助来理解通过串联操作的梯度流。
我正在实现一个具有串联操作(在pytorch中)的网络(主要是CNN)。该网络被定义为将通过 CNN 传递的两个不同图像的响应连接起来并通过另一个 CNN,并且训练是端到端完成的。
由于第一个 CNN 在连接的两个输入之间共享,我想知道在反向传播期间应该如何通过连接操作分配梯度?我不是反向传播专家,这是我第一次修改自定义反向实现,因此任何指针都会有所帮助。
如果你们需要,我可以提供更多细节。
我需要帮助来理解通过串联操作的梯度流。
我正在实现一个具有串联操作(在pytorch中)的网络(主要是CNN)。该网络被定义为将通过 CNN 传递的两个不同图像的响应连接起来并通过另一个 CNN,并且训练是端到端完成的。
由于第一个 CNN 在连接的两个输入之间共享,我想知道在反向传播期间应该如何通过连接操作分配梯度?我不是反向传播专家,这是我第一次修改自定义反向实现,因此任何指针都会有所帮助。
如果你们需要,我可以提供更多细节。
对于级联,反向传播期间的梯度值分裂到它们各自的源层。任何一个源层中的梯度之间都没有直接的相互作用。
连接层之后的层确实与两个网络交互,它会有一些权重参数乘以网络 A 的输出和一些乘以网络 B 的输出。不会有任何参数可以乘以来自两个层的输出(除非你通过权重共享迫使它们相同,但如果您正在堆叠来自两个起始网络的特征,情况就不会如此)。
您可能遇到的唯一问题是清楚地确定哪些参数链接到每个原始网络。这是一个实现细节,所以到目前为止,您需要共享您的代码,以便在出错时进行调试。