背景
对比学习,使用dropout构造正样本,出现对比学习loss越来越大最终nan。但是如果事先对向量进行l2正则化,loss正常下降。
解决过程
考虑有如下原因,一一排除并最终锁定:
- batch_size太大,导致分母过大,负样本过多,log里面的项无限接近于0,loss项过大(但是对比学习一般说负样本越多越好,基本排除batch_size太大)
- 向量维度过大,导致直接点乘的结果过大
- 温度系数过小(温度系数设为1后,依然爆炸,排除)
- dropout p=0.4设置的过大,导致正样本中含0元素过多,和负样本与正样本的乘积都差不多,很难优化。(设置p=0.1后,梯度爆炸现象消失,暂时解决)