tensorflow - ArcFace 严格来说是损失函数还是激活函数?

标签 tensorflow keras deep-learning computer-vision classification

标题中问题的答案可能非常明显,因为它通常被称为“ArcFace Loss”。

然而,有一部分让我感到困惑:

我正在阅读以下 Arcface 损失的 Keras 实现:

https://github.com/4uiiurz1/keras-arcface

在其中,注意 model.compile 行仍然指定 loss='categorical_crossentropy'

此外,我看到很多资料都将 Softmax 称为损失函数,我之前将其理解为许多分类神经网络输出层的激活函数。

基于这两点混淆,我目前的理解是损失函数,即网络实际如何计算代表“错误幅度”的无论如何,给定的例子都是交叉熵。 ArcFace 和 Softmax 一样,是输出层的激活函数

这是正确的吗?如果是这样,为什么 Arcface 和 Softmax 被称为损失函数?如果不是,我的困惑可能来自哪里?

最佳答案

根据我的理解。您感到困惑的两件事如下-

  1. ArcFace 是损失函数还是激活函数?
  2. softmax 是损失函数还是激活函数?

ArcFace是损失函数还是激活函数

您认为 ArcFace 是激活函数的假设是不正确的。 ArcFace 确实是一个损失函数。 如果您阅读研究论文,作者会提到他们使用传统的 softmax 函数作为最后一层的激活函数。 (你可以查看调用函数是metrics.py文件。最后一行是 out = tf.nn.softmax(logits)). 这意味着在应用附加角度余量惩罚后,他们仅将 logits 传递给 softmax 函数。 ArcFace 本身就是一个损失函数,这听起来可能很困惑,那为什么要使用 softmax?答案很简单,只是为了获得类别的概率。

So basically what they have done is that they have applied the additive angular margin penalty, then passed the obtained logits to the softmax to get the class probabilities and applied categorical cross entropy loss on top of that.

为了更好地理解工作流程,请查看下图 -

ArcFace

I feel your confusion might be because of the fact that most people consider softmax to be a loss function, although it is not really a loss. I have explained it in detail below.

Softmax 是损失函数还是激活函数

我觉得您对 softmax 和分类交叉熵有点混淆。 我会尽力解释两者之间的区别。

软最大

Softmax 只是一个函数而不是损失。它压缩 0 和 1 之间的值。它确保所有这些值的总和等于 1,即它具有很好的概率解释。

Softmax Function

交叉熵损失

这实际上是一个损失函数。 Cross Entropy loss的一般形式如下-

Cross Entropy Loss

它有 2 个变体 -

  1. 二元交叉熵损失
  2. 分类交叉熵损失

二元交叉熵损失

它用于二元分类任务。

Binary Cross Entropy Loss

分类交叉熵损失/Softmax 损失

CCE loss其实就是softmax loss。 由于 softmax 函数提供的概率解释,它被用于多类分类。

Categorical Cross Entropy Loss

关于tensorflow - ArcFace 严格来说是损失函数还是激活函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367784/

相关文章:

numpy - ValueError : Cannot feed value of shape (128, 28, 28) 对于张量 'Placeholder:0' ,其形状为 '(?, 784)'

python - tensorflow 占位符 - 理解 `shape=[None,`

python - 如何优雅地计算两个张量的 MSE?

machine-learning - CNN 每个节点的范围更窄,因此每层的范围更大?

python - Keras多实例分类问题

tensorflow - Keras 和 Tensorflow : UnboundLocalError: local variable 'self' referenced before assignment

tensorflow - model.compile() 是否初始化 Keras( tensorflow 后端)中的所有权重和偏差?

python - 堆叠 RNN 的输入形状

python - 如何从具有 2 个输出神经元的 softmax 二元分类器绘制 ROC 曲线?

python - Tensorflow将字符串列转换为多列进行分类