点击上方,选择星标置顶,每天给你送干货

阅读大概需要8分钟

跟随小博主,每天进步一丢丢

每日英文

Do not, for one repulse, forgo the purpose that you resolved to effort.

不要因一次挫败,就放弃你原来决心想达到的目的。

Recommender:云不见

作者:Sewade Ogun

翻译:王萌 澳门城市大学(深度学习自然语言处理公众号)

Softmax函数是分类模型中使用的主要函数之一。它通常在机器学习课程的早期介绍里。它以长度为d的实值向量作为输入,并将其归一化为概率分布。这很容易理解和解释,但其核心是一些需要注意的陷阱。这包括其在实践中的实现,数值稳定性和应用。这篇文章是关于该主题的专题文章。

我们将介绍以下内容:

  1. 介绍

  2. Softmax数值稳定性

  3. Log Softmax

  4. Log-Softmax推导

  5. Softmax温度机制

  6. 结论

1. 介绍

Softmax是一个非线性函数,主要用于多类分类的分类器输出。给定一个向量[x1,x2,x3,…xd],i=1,2,…d,此时softmax函数形式如下:

其中d为分类数。

所有指数值的总和,是一个归一化常数,有助于确保它保持概率分布的特性,即:a)值总和必须为1。b)它们必须介于0和1之间(含0和1)。

例如,给定一个向量x=[10,2,40,4],对每个元素的计算softmax;

  • 对向量中的每个值取幂ex=[e10,e2,e40,e4],

  • 计算总和  ∑ex=e10+e2+e40+e4=2.353…e17

  • 然后用每个exi除以计算总和sm(x)=[9.35762297e14,3.13913279e−17,1.00000000e+00,2.31952283e−16]

用像numpy这种数值计算库可以很容易地实现,

  • 问题

  • 观察输出你可以看出什么?

  • 输出总和为1吗?

这些指标是我们下次要讨论的内容吗?

2. Softmax数值稳定性

从上面的softmax概率,我们可以推断出,在数值范围很大的情况下,softmax可能会变得数值不稳定。考虑将输入向量中的第3个值更改为10000,然后重新评估softmax。

“nan”所代表的不是一个数字时就会发生溢出或下溢的。但是,为什么是 0值 和 nan?这是否暗示我们无法从向量中获得概率分布?

  • 问题:你能找出导致溢出的原因吗?

取像10000这样的大数的幂会得到一个非常非常大的数。大约是210000。这导致溢出。

  • 我们可以做得更好吗?当然,我们可以。根据我们的原始方程式,

在x处减去一个常数c

我们只是把xi平移了一个常数。如果这个移动常数c是向量的最大值,max(x),那么我们就可以稳定softmax的计算。

  • 问题:我们得到与原始softmax相同的答案吗?

这里可以证明它等同于原始的softmax函数:

产生相同的初始softmax

这个稳定的softmax用numpy实现如下所示:

如果我们将其应用于我们的旧问题:

好了,问题解决了! ! !

  • 问题:为什么softmax中所有其他值都为0。这是否意味着它们没有出现的可能性?

3. Log Softmax

对softmax计算的严格评估显示出幂和除法模式。我们可以减少这些计算吗?相反,我们可以优化log-softmax。这样做能给我们很好的特性,例如;

  1. 数值稳定性。

  2. 因为log(a/b)=log(a)−log(b),所以log softmax的梯度变得可叠加。

  3. 它有更少的除法和乘法计算,加法有更小的计算量。

  4. log也是一个单调递增的函数。我们可以免费得到这个属性。

引用一个关于使用log softmax超过softmax在 stackoverflow的回答:

“使用logsoftmax比使用softmax多很多优势,包括实际原因,如改进的数值性能和梯度优化。这些优势对于实现特别重要,特别是当训练一个模型时在计算上具有挑战性和昂贵成本的时候。使用log-softmax而不是softmax的核心是使用log概率胜于概率,这方面具有很好的信息理论解释。当用于分类器时,log-softmax会在无法预测正确的分类时严重惩罚模型。惩罚是否能很好地解决您的问题尚待您测试,因此log-softmax和softmax都值得使用。”

如果我们将对数函数简单地应用于概率分布,我们将得到:

我们回到了数值不稳定性,尤其表现为数值下溢。

  • 问题:为什么会这样?

答案在于对单个元素取对数。log(0)未定义。我们能做得更好吗?当然!

4. Log-Softmax推导

  • 如果我们想找回原来的概率怎么办?那么,我们可以对对数softmax或对数概率值取幂并归一化。

让我们通过代码对此进行具体说明。

5. Softmax温度机制

在NLP领域中,将softmax应用于分类器的输出以获取tokens的概率分布。softmax可能过于确定其预测,并且可能会使其他字词不太可能被预先采样。softmax可以非常肯定它的预测,并可以使其他单词不太可能预先采样。

例如,如果我们有这样一个语句;

The boy ___ to the market.

可能的答案有,[goes,go,went,comes]。假设我们从分类器中得到[38,20,40,39]的logit值,然后将其馈入softmax函数。

如果我们从这个分布中抽样,60%的情况下,我们的预测是“went”,但我们知道答案也可能是“goes”或“comes”,这取决于上下文。初始对数也显示单词的接近值,但softmax将其推开。最初的logit值也显示了单词的接近值,但是softmax把它们分远了。

一个温度超参数 τ 被添加到softmax以抑制这种极端。softmax就变成了

其中 τ 在 (0,inf] 范围内。温度参数增加了对低概率候选词的敏感性,必须对其调整以获得最佳结果。我们来看看τ的不同情况

情况a:τ→0时认为 τ=0.001

这将创建一个更加自信的预测,并且不太可能从不太可能的候选样本中进行采样。

情况b:τ→inf时认为 τ=100

这会在tokens上产生较平滑的概率分布,并导致采样的更多多样性。

6. 结论

softmax是一个有趣的函数,需要深入了解。我们介绍了softmax函数及其计算方法。然后,我们研究了简单的实现存在的问题以及它如何导致数值不稳定的,并提出了解决方案。另外,我们引入了log-softmax,它使数值计算和梯度计算更加容易。最后,我们讨论了带温度常数的softmax。

原文链接:

https://ogunlao.github.io/2020/04/26/you_dont_really_know_softmax.html

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读


这样的Softmax你真的不了解!相关推荐

  1. Sampled Softmax,你真的会用了吗?

    作者 | 夜小白 整理 | NewBeeNLP 前面两篇关于文本匹配的博客中,都用到了Sampled-softmax训练方法来加速训练. 基于表征(Representation)的文本匹配.信息检索. ...

  2. Softmax和Cross-entropy是什么关系?

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 来自 | 知乎   作者 | 董鑫 https://www.zhihu.com/questio ...

  3. Softmax回归——logistic回归模型在多分类问题上的推广

    Softmax回归 Contents [hide] 1 简介 2 代价函数 3 Softmax回归模型参数化的特点 4 权重衰减 5 Softmax回归与Logistic 回归的关系 6 Softma ...

  4. Softmax 函数的特点和作用是什么?

    作者:张欣 链接:https://www.zhihu.com/question/23765351/answer/98897364 来源:知乎 著作权归作者所有,转载请联系作者获得授权. softmax ...

  5. Stanford UFLDL教程 Softmax回归

    Softmax回归 Contents [hide] 1简介 2代价函数 3Softmax回归模型参数化的特点 4权重衰减 5Softmax回归与Logistic 回归的关系 6Softmax 回归 v ...

  6. 【机器学习基础】Softmax与交叉熵的数学意义(信息论与概率论视角)

    经过我长时间的观察,发现很多人对人工智能/机器学习的理解只停留在"这是个经典/最新棒槌,我拿这个棒槌敲钉子贼6--"这个level.当然,如果真的敲得很6,那也是一个很厉害的大佬了 ...

  7. 探究Softmax的替代品:exp(x)的偶次泰勒展开式总是正的

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 刚看到一个有意思的结论: 对于任意实数 x 及偶数 n,总有 ,即 的偶次泰勒展开式总是正的. 下面我们来 ...

  8. 线性Attention的探索:Attention必须有个Softmax吗?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 众所周知,尽管基于 Attention 机制的 Transformer 类模型有着良好的并行性能,但它的空 ...

  9. softmax理论及代码解读——UFLDL

    前言 看了各种softmax以后迷迷糊糊的,还是研究一下UFLDL的教程稳点.当然还是得参考挺多教程的:UFLDL-softmax .Softmax的理解与应用 .Logistic 分类器与 soft ...

  10. 大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)

                                                        大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5) 上一节中,我们讲 ...

最新文章

  1. C#命名规则、开发习惯和风格
  2. python爬取贴吧所有帖子-Python爬虫爬取百度贴吧的帖子
  3. Java学习总结(二十)——JSON解析:官方解析,GSON解析,FastJSON解析,
  4. gtest 测试java_LangTest
  5. Linux下部署Tomcat项目笔记
  6. efcore技巧贴-也许有你不知道的使用技巧
  7. 谈谈surging引擎的tcp、http、ws协议和如何容器化部署
  8. oracle 存储过程打印语句,oracle学习之第一个存储过程:打印Hello World
  9. JAMstack简介:现代Web的体系结构
  10. word双引号间距大_微软判定:Word 编辑英文句号后“两个空格”为拼写异常
  11. 关联分析(三)--GSP算法
  12. TransE算法(Translating Embedding)
  13. python网易云音乐下载器爬取全网音乐
  14. Mr. Tsogt Batbayar 担任BCF理事
  15. su命令的隐患——用户提权
  16. pygame 入门实例教程 1 - 复古方块赛车游戏
  17. 语文数学英语计算机文理科,高考文理科英语试卷一样吗
  18. 编程语言评价标准:冯诺伊曼体系
  19. C++ - Copy Elision
  20. BT源代码学习心得(一):总体描述 -- 转贴自wolfenstein (NeverSayNever)

热门文章

  1. Jmeter如何远程监控服务器
  2. HDU 5643 约瑟夫环的应用
  3. C# 判断输入的字符串是否只包含数字和英文字母
  4. GMT时间转换为当地时间的方法
  5. 今天生日,高興!!!
  6. java day16 【异常、线程】
  7. DAY21 反射(hasattr,getattr,setattr,delattr)
  8. HDU 1251 - 统计难题(字典树模板题)
  9. 【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
  10. SonarLint插件的安装与使用