【问题标题】:Cosine similarity loss cause weight values to explode余弦相似度损失导致权重值爆炸
【发布时间】:2019-11-17 11:15:31
【问题描述】:

假设我的数据由气泡图像组成,标签是描述大小分布的直方图,例如:

0-10mm 10% 
10-20mm 30%
20-30mm 40%
30-40mm 20%

重要的是要注意 -

  • 所有尺寸百分比的总和为 100%(或更准确地说是 1.0)。
  • 我没有带注释的数据,因此我无法训练对象检测器,然后仅通过计算检测到的对象来计算分布。但是,我的数据确实有一个特征提取器训练。

我实现了一个简单的 CNN,它由 -

  • Resn​​et50 骨干网。
  • 全局最大池化。
  • 6 个过滤器的 1x1 卷积(标签中的 6 个分布箱)。

经过一些实验,我得出的结论是,softmax 和交叉熵作为损失函数不适合我的问题和需求。

我认为余弦相似度损失可能是一个不错的选择(归一化将是后期处理的一部分)。这是实现:

def cosine_similarity_loss(logits, probs, weights=1.0, label_smoothing=0):

    x1_val = tf.sqrt(tf.reduce_sum(tf.matmul(logits, tf.transpose(logits)), axis=1))
    x2_val = tf.sqrt(tf.reduce_sum(tf.matmul(probs, tf.transpose(probs)), axis=1))
    denom = tf.multiply(x1_val, x2_val)

    num = tf.reduce_sum(tf.multiply(logits, probs), axis=1)
    cosine_sim = tf.math.divide(num, denom)
    cosine_dist = tf.math.reduce_mean(1 - tf.square(cosine_sim))  # Cosine Distance. Reduce mean for shape compatibility.

    return cosine_dist

损失是余弦距离和权重 l2 正则化的总和。在第一次前馈后我得到了loss: 3.1267,在第二次前馈后我得到了loss: 96003645440.0000——这意味着权重爆炸了(logits: [[-785595.812 -553858.625 -545579.625 -148547.875 -12845.8633 19871.1055]]probs: [[0.466 0.297 0.19 0.047 0 0]])。

如此快速和极端的增长可能是什么原因?

【问题讨论】:

    标签: tensorflow deep-learning computer-vision


    【解决方案1】:

    我的猜测是余弦距离对 logits 进行了内部归一化,消除了幅度,因此没有梯度可以传播反对值增加。 BTW weights 未在您的实现中使用。

    在最后一层使用 sigmoid 而不是 softmax 的简单欧几里得距离怎么样。另外,我会尝试在 resnet50 和输出密集层之间再添加一两个密集层(比如大小 512)。

    【讨论】:

    • 为什么用 sigmoid 而不是 softmax?至少 softmax 是一种“全局”规范化,可以保持 logits 中的值之间的关系。
    • “没有与数值增加相反的梯度来传播” - 您能否详细说明为什么 删除 幅度会导致权重特别爆炸像那样?
    • @AlexGoft 从我所见,SoftMax 似乎用于多类问题(一个正类,所有其他负类)和 sigmoid 用于多标签(多个正类)和连续输出.我认为这是因为 SoftMax 倾向于将一个值推向 1,将其余值推向 0,但它可能适用于您的情况,我很想看看它的比较。
    • @AlexGoft 对于梯度,我的理解是通过查看预测值和实际值之间的差异进行训练,然后通过网络反向传播以计算每个权重的梯度,并且然后权重在那个方向上更新。当您移除幅度时,logits 可以更新并变得更大或更小而不改变余弦相似度,只要它们的相对值保持不变,所以没有什么可以阻止它们爆炸。
    • 将 logits 的 l2 范数添加到损失中可能会阻止这种情况,但这只是增加了幅度,因此您不妨使用欧几里得距离。
    猜你喜欢
    • 2020-08-12
    • 2011-01-01
    • 2017-12-12
    • 2013-10-16
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多