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 是严格意义上的损失函数还是激活函数?的主要内容,如果未能解决你的问题,请参考以下文章

fm 梯度计算

Excel函数OFFSET意义及作用

常见的激活函数

激活函数和损失函数

损失函数,优化方式:梯度下降法 ,激活函数的作用,最小二乘法是什么

Keras深度学习实战——深度学习中常用激活函数和损失函数详解