当只使用最可能的类时是不是使用 softmax?

Posted

技术标签:

【中文标题】当只使用最可能的类时是不是使用 softmax?【英文标题】:Is softmax used when only the most probable class will be used?当只使用最可能的类时是否使用 softmax? 【发布时间】:2019-09-29 11:37:38 【问题描述】:

我有一个包含 17 个类的深度学习分类问题,我正在使用 Pytorch。该架构包括交叉熵损失,在线性层之后实现。

我相信,通常情况下,计算一个 softmax 激活并将其解释为相应输出类的概率。但是softmax是一个单调函数,如果我只想要最可能的类,我可以简单地选择线性层之后得分最高的类,而将softmax排除在外。

鉴于 softmax 是默认的,在分类问题中广泛使用的激活,我想知道我是否遗漏了一些重要的东西。谁能指导我?

请注意,我搜索了大量网站,但据我所知,没有一个回答这个基本问题(尽管提供了很多信息)。

谢谢

【问题讨论】:

This 和 this 可能会有所帮助。 谢谢,这些很有用。 【参考方案1】:

你是对的,你不需要 softmax 来预测最可能的班级 - 你确实可以选择得分最高的班级。

但是,您需要在训练时间内使用 softmax 来计算损失函数(交叉熵),因为它仅适用于类的概率分布。 softmax 变换保证您的网络的输出确实看起来像一个分布:所有分数都是正数,并且总和为 1。如果它们不是正数,则无法计算交叉熵,因为它涉及对数。如果分数总和不等于一个(或任何其他常数),那么模型可以通过使所有分数无限大来最小化损失,而实际上并没有学到任何有用的东西。

此外,在预测时 softmax 也很有用,因为当您报告概率而不是仅仅得分时,您可以将其解释为 置信度:例如该模型的预测有 98% 的把握。

在某些情况下,它可能不是您最感兴趣的课程。例如如果您进行信用评分,那么即使违约概率很低(例如 20%)也可能足以拒绝贷款申请。在这种情况下,您希望查看概率本身而不是最可能的类 - 而 softmax 有助于正确估计它们。

【讨论】:

好的,谢谢。我会尝试添加它,看看它对收敛有什么影响。 好的,这就是我想要的答案。原来pytorch直接把softmax构建成交叉熵,所以我不需要加进去。 如here 所述,您仍然需要softmax 来避免除以0

以上是关于当只使用最可能的类时是不是使用 softmax?的主要内容,如果未能解决你的问题,请参考以下文章

当只需要 2 个参数时,没有匹配的函数来调用 6 个参数

NHibernate:在更新/删除/插入视图上映射的类时是否可以使用存储过程?

怎么可能将 softmax 用于 word2vec?

返回多个类时使用jQuery使用一个类

向上转换到基类时如何使用继承的类成员的值

使用包含 Stdafx.h 的类时 Qt 程序编译错误