Contrastive-Clustering icon indicating copy to clipboard operation
Contrastive-Clustering copied to clipboard

About loss backward and parameter update

Open skr998 opened this issue 3 years ago • 4 comments

作者您好,感谢您这出色的工作。

对于损失函数的传播和projector的参数更新我存在一点疑问:您的网络中并列存在instance_projector和cluster_projector,同时两个projector在正向传播过程中各自产生一个loss,您的做法是将两个projector的loss相加后再进行loss.backward(),这样的做法可以通过梯度下降同时优化两个并列的projector吗?这种方式和分别依次进行不同projector的loss.backward()有什么不同吗?

谢谢。

skr998 avatar Dec 27 '21 10:12 skr998

您好,相加后backward可以同时优化两个projector和整个backbone,其中两个loss分别只会对其中的一个projector产生梯度,而backbone则会同时被两个loss优化到,这与将两个loss分别backward一次应该是等价的。

Yunfan-Li avatar Dec 27 '21 11:12 Yunfan-Li

好的,谢谢您的回答。

skr998 avatar Dec 27 '21 11:12 skr998

@Yunfan-Li 您好, image 这里还有一个小疑问,你在代码里面是将熵的项和一个常数项相加使它变为正,我想知道如果不加这个常数项的话会影响到模型的效果吗?如果instance_loss为正,而cluster_loss算出来为负的话,网络能正常训练趋于最优值吗?因为我觉得损失函数不一定要恒大于零,即使是负数也是可以的吧?

skr998 avatar Jan 03 '22 08:01 skr998

您好,这个常数不影响梯度的计算的,只是为了保证loss打印出来始终为正数,去掉不影响优化。

Yunfan-Li avatar Jan 03 '22 08:01 Yunfan-Li