给你3分钟,还搞不懂 softmax 来找我

大家好啊,我是董董灿。

很多同学在做深度学习时,都会遇到难以理解的算法,SoftMax 肯定是其中一个。

初学时大都对它一知半解,只知道 SoftMax 可以用来做分类,输出属于某个类别的概率。

但是,为什么要用 SoftMax 呢?这个算法又是如何将神经网络推理的数值,转换为一个类别的分类的呢?

1. 应用场景

假设要使用神经网络做图片分类。

现在有3个类别:猫,狗,人。给你下面一张图片,神经网络需要在这3个类别中选出一个。

上图人眼一看就知道是猫咪,但是神经网络需要通过计算才知道。

好,我们使用Resnet50这一分类网络进行推理运算。算到最后面的全连接层时,全连接输出了3个数值,分别为2,1,0.1。

之前写过文章,分析过全连接层输出的数值,大致可以代表了某一分类的得分。

现在我们假设猫、狗、人这三个分类的得分分别为:

分类

得分

2

1

0.1

猫得了2分,狗得了1分,人得了0.1分。

单看这个结果,我们大概知道,因为猫的得分最高,那最终神经网络会认为这张图片是一只猫。

这么理解是可以的,但是大概两个地方有点问题。

第一,神经网络最终选择某一分类,依据的不是得分,而是概率。

也就是说,最终神经网络会选择一个概率最高的分类作为它识别的结果。

为什么要把得分转为概率呢?因为多分类模型中,输出值为概率更利于反向推导和模型的迭代,概率之间更好的计算距离,而数值之间的计算的距离是无含义的。

所以,我们需要一种方法,将上面的得分转换为概率。

第二,得分相近如何准确判断的问题。

例子中猫的得分是2,狗的得分是1,人的得分是0.1,我们可以比较肯定的说,因为猫的得分最高,而且比狗和人都高很多,肯定就是猫。

但实际中,有很大的可能算出的猫的得分是2.1,狗的得分是1.9,人的得分是0.1。

这个时候,我们可能就没有像刚才那么肯定了。

因为猫的得分和狗的得分相差很少,而且两者都很高!

这也是为什么,很多神经网络最终都会以TOP1 和 TOP5的识别准确度来衡量神经网络的识别精度。

由于上述两个原因的存在,人们想到了SoftMax算法,而这个算法,也几乎完美地解决了这两个问题。

2. 为什么叫SoftMax以及它的实现原理

不知你有没有想过,为什么这个算法叫 SoftMax 呢?Soft 是软的意思,与之对应肯定有 HardMax。

而 HardMax,可以理解为我们平时认知的Max。比如两个数(3, 4), 那么这两个数的 HardMax(3,4) 结果就是4。

这个逻辑,小学生学会了10以内的加减法都知道。

但正如上面所说,SoftMax 不一样,它是要处理多个类别分类的问题。

并且,需要把每个分类的得分值换算成概率,同时解决两个分类得分值接近的问题。

先从公式上看,SoftMmax是怎么做到的。

公式中,每个 z 就对应了多个分类的得分值。SoftMax对得分值进行了如下处理:

  • 以e为底数进行了指数运算,算出每个分类的 eZi,作为公式的分子

  • 分母为各分类得分指数运算的加和。

  • 根据公式很自然可以想到,各个分类的SoftMax值加在一起是1,也就是100%。所以,每个分类的SoftMax的值,就是将得分转化为了概率,所有分类的概率加在一起是100%。

这个公式很自然的就解决了从得分映射到概率的问题。那它又是怎么解决两个得分相近的问题的呢?

其实也很简单,重点在选择的指数操作上。我们知道指数的曲线是下面的样子。

指数增长的特性就是,横轴变化很小的量,纵轴就会有很大的变化。

所以,从1.9变化到2.1,经过指数的运算,两者的差距立马被的拉大了。从而,我们可以更加明确的知道,图片的分类应该属于最大的那个。

下面是将猫、狗、人三个分类经过SoftMax计算之后得到的概率。

分类

得分

softmax 得分

2

70%

1

20%

0.1

10%

可以看到,分类是猫的概率遥遥领先。

所以,神经网络在经过softmax层之后,会以70%的概率,认为这张图片是一张猫。

这就是 SoftMax 的底层原理。

指数让得分大的分类最终的概率更大,得分小的分类最终的概率更小,而得分为负数的分类,几乎可以忽略。

写算法文章很久了,不少同学看了我的文章后,加我一起探讨如何快速学习算法,于是我最近开发一个从零入门计算机视觉的专栏,可以查看这里了解详情:计算机视觉从入门到调优.

目前已有将近 120 人加入一起学习啦,大家一起在探讨如何更加快速有效的入门学习,如果你感兴趣,欢迎一起加入呀。

相关推荐
钰爱&29 分钟前
【操作系统】Linux之线程同步二(头歌作业)
linux·运维·算法
Ws_33 分钟前
leetcode LCR 068 搜索插入位置
数据结构·python·算法·leetcode
灼华十一35 分钟前
数据结构-布隆过滤器和可逆布隆过滤器
数据结构·算法·golang
adam_life2 小时前
OpenJudge_ 简单英文题_04:0/1 Knapsack
算法·动态规划
龙的爹23333 小时前
论文翻译 | The Capacity for Moral Self-Correction in Large Language Models
人工智能·深度学习·算法·机器学习·语言模型·自然语言处理·prompt
鸣弦artha4 小时前
蓝桥杯——杨辉三角
java·算法·蓝桥杯·eclipse
我是聪明的懒大王懒洋洋4 小时前
力扣力扣力:动态规划入门(1)
算法·leetcode·动态规划
丶Darling.4 小时前
Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III
算法·动态规划
TN_stark9325 小时前
多进程/线程并发服务器
服务器·算法·php
汉克老师5 小时前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节