ArcFace 是严格意义上的损失函数还是激活函数?
Posted
技术标签:
【中文标题】ArcFace 是严格意义上的损失函数还是激活函数?【英文标题】:Is ArcFace strictly a loss function or an activation function? 【发布时间】:2020-04-09 13:48:26 【问题描述】:标题中问题的答案可能非常明显,因为它通常被称为“ArcFace Loss”。
但是,有一部分让我感到困惑:
我正在阅读以下 Arcface 损失的 Keras 实现:
https://github.com/4uiiurz1/keras-arcface
在其中,请注意model.compile
行仍然指定loss='categorical_crossentropy'
此外,我看到很多消息来源将 Softmax 称为损失函数,而我之前将其理解为许多分类神经网络输出层的激活函数。
基于这两个混淆点,我目前的理解是loss函数,即网络实际如何计算代表“错误程度”的number无论如何,给定的示例都是交叉熵。而那个 ArcFace 和 Softmax 一样,是输出层的激活函数。
这是正确的吗?如果是这样,为什么将 Arcface 和 Softmax 称为损失函数?如果不是,我的困惑可能来自哪里?
【问题讨论】:
【参考方案1】:也可以定义为图层。
【讨论】:
【参考方案2】:根据我的理解。您感到困惑的两件事如下-
-
ArcFace 是损失函数还是激活函数?
softmax 是损失函数还是激活函数?
ArcFace 是损失函数还是激活函数
您认为 ArcFace 是激活函数的假设是不正确的。
ArcFace 确实是一个损失函数。
如果你仔细阅读研究论文,作者提到他们使用传统的 softmax 函数作为最后一层的激活函数。
(您可以检查调用函数是metrics.py文件。最后一行是
out = tf.nn.softmax(logits)
)。
这意味着在应用附加的角边距惩罚后,他们只将 logits 传递给了 softmax 函数。
ArcFace 本身就是一个损失函数,这听起来可能很令人困惑,那为什么要使用 softmax 呢?答案很简单,就是为了得到类的概率。
所以基本上他们所做的是他们已经应用了 附加角余量惩罚,然后将获得的 logits 传递给 softmax 得到类概率和应用分类交叉 最重要的是熵损失。
为了更好地理解工作流程,请查看下图 -
ArcFace
我觉得你的困惑可能是因为大多数人认为 softmax 是一个损失函数,尽管它并不是真正的 失利。我已经在下面详细解释了。
Softmax 是损失函数还是激活函数
我觉得你对 softmax 和分类交叉熵有点混淆。 我会尽力解释两者之间的区别。
Softmax
Softmax 只是一个函数,而不是损失。它压缩 0 和 1 之间的值。它确保所有这些值的总和等于 1,即它具有很好的概率解释。
Softmax Function
交叉熵损失
这实际上是一个损失函数。 Cross Entropy loss的一般形式如下-
Cross Entropy Loss
它有 2 个变种 -
-
二元交叉熵损失
分类交叉熵损失
二元交叉熵损失
用于二分类任务。
Binary Cross Entropy Loss
分类交叉熵损失/Softmax 损失
CCE 损失实际上称为 softmax 损失。 由于softmax函数提供的概率解释,它被用于多类分类。
Categorical Cross Entropy Loss
【讨论】:
以上是关于ArcFace 是严格意义上的损失函数还是激活函数?的主要内容,如果未能解决你的问题,请参考以下文章