chainer.functions.get_item 反向传播到底是怎么做到的?

How does chainer.functions.get_item back propagation exactly?

这个问题在之后 考虑一个典型的示例问题:假设我有卷积层 + FC 层,我的最后一个 FC 层输出一个向量。

因为在某些情况下我必须对向量进行切片来计算损失函数,例如在多标签分类中,ground truth标签向量大部分为0,只有少数为1,这种情况下,直接使用F.sigmoid_cross_entropy可能会造成标签不平衡的问题,所以我决定用a[0, 1](a是chainer.Variable最后一个FC层输出的)对特定元素进行切片计算损失函数。

在这种情况下,最后一个FC层如何进行梯度流(BP),如何更新其权重矩阵??

当您为变量 a 和切片 index 编写 b = a[index] 时(可能是奇特的索引),通过此操作反向传播会将 b.grad 的值设置为 a.grad[index],将a.grad的其他元素留零(因为a的对应元素不影响损失值)。然后最后一个 FC 层的反向传播计算梯度 w.r.t。 a.grad.

和往常一样的权重矩阵和偏置向量