图像识别(九)

2023-10-27

大家好啊,我是董董灿。

很多同学在做深度学习时,都会遇到难以理解的算法,SoftMax肯定是其中一个。初学者大都对它一知半解,只知道SoftMax可以用来做分类,输出属于某个类别的概率。

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

应用场景

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

现在有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算法。而这个算法,也几乎完美地解决了这两个问题。

为什么叫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的底层原理。

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

One More Thing

SoftMax 其实也是一种激活函数,它广泛的应用于多分类任务中。在二分类任务重,其实有个函数也被广泛的使用,它就是 Sigmoid,可以查看图像识别(六)|  激活函数 这一章了解Sigmoid函数。

比如,有个朋友告诉我,在一些互联网的广告或者商品推荐(比如某宝的猜你喜欢)中,曾经广泛的使用Sigmod函数来预测点击的可能性,如果Sigmoid函数的输出值越大,那么说明这个内容被用户点击的可能性就越大。

想想吧,我们逛淘宝的每次点击,背后都有一个函数在分析你的行为,你还会点击么?


 往期文章推荐:

图像识别(一)| 从像素说起_董董灿是个攻城狮的博客-CSDN博客

图像识别(二)| 图像的色彩空间_董董灿是个攻城狮的博客-CSDN博客

图像识别(三)| 初识卷积_董董灿是个攻城狮的博客-CSDN博客

图像识别(四)| 卷积的核心,特征提取_董董灿是个攻城狮的博客-CSDN博客_卷积图像特征提取

图像识别(五)| 春天花开却不识?打开百度识图,残差和卷积带你识遍路边野花_董董灿是个攻城狮的博客-CSDN博客

图像识别(六)| 激活函数_董董灿是个攻城狮的博客-CSDN博客

图像识别(七)| 池化层是什么?有什么作用?_董董灿是个攻城狮的博客-CSDN博客

图像识别(八)| 还对全连接层迷迷糊糊?背会一首诗就行了_董董灿是个攻城狮的博客-CSDN博客

更多信息,请查看专栏

https://blog.csdn.net/dongtuoc/category_11863193.htmlhttps://blog.csdn.net/dongtuoc/category_11863193.html

码字不易,如果你喜欢,请关注 董董灿是个攻城狮的博客_CSDN博客 或点赞。
近期开通个人微信公众号:图像识别(九)| 彻底搞懂SoftMax分类的底层逻辑分享人工智能科技文章,欢迎关注。



v v v v v v

**本文为作者原创,请勿转载,转载请联系作者。**
**点击下方卡片,关注我的公众号,有最新的文章和项目动态。**

v v v v v v

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像识别(九) 的相关文章

  • android 异步加载图片缩略图

    建一个AsyncLoadedImage类继承AsyncTask异步加载类 调用publishProgress方法更新onProgressUpdate贮存缩略图信息到Adapter 监听Adapter Change实现异步加载缩略图 main
  • Go基础(复杂类型):函数的闭包

    函数的闭包 Go 函数可以是一个闭包 闭包是一个函数值 它引用了其函数体之外的变量 该函数可以访问并赋予其引用的变量的值 换句话说 该函数被 绑定 在了这些变量上 例如 函数 adder 返回一个闭包 每个闭包都被绑定在其各自的 sum 变

随机推荐

  • OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换 FFT 用于图像和视频流的模糊检测 翻译自 OpenCV Fast Fourier Transform FFT for blur detection in images and video streams 原文链
  • PHP实现一个简单的登录和注册,以及实现方法和页面

    下面是一个简单的PHP代码示例 实现了登录和注册功能 首先 创建一个名为index php的文件 用于显示登录和注册表单 h2 登录 h2
  • Linux 安装JDK17

    1 官网下载JDK17 这里我们下载的是 x64 Compressed Archive版本 2 解压tar 文件 进入文件下载目录 自己定义 我这里都放在software cd usr local softwar 解压tar文件 tar v
  • 【毕业项目】自主设计HTTP

    博客介绍 运用之前学过的各种知识 自己独立做出一个HTTP服务器 自主设计WEB服务器 背景 目标 描述 技术特点 项目定位 开发环境 WWW介绍 网络协议栈介绍 网络协议栈整体 网络协议栈细节 与http相关的重要协议 HTTP背景知识补
  • 最强自动化测试框架Playwright(11)- 录制视频

    视频 使用playwright 您可以录制测试视频 录制视频 视频在测试结束时在浏览器上下文关闭时保存 如果手动创建浏览器上下文 请确保等待 browser context close context browser new context
  • 分布式任务调度可选方案

    1 除了基于jvm的java之处 新接触一个JVM语言 SCALA 一种同时面向脚本和面向函数的语言 spark大数据框架是基于scala语言 照着网络教程 简单的写了几个例子 感觉object class与java语境中还是有一定的差异
  • 2023美赛F题完整数据代码模型成品文章思路-- Green GDP

    论文摘要 模型和其他部分内容如下 摘要 现行的以GDP为核心的国民经济核算体系 由于忽略非市场产出 环境破坏 资源浪费方面的有关计算 这样的指标并不完整 由于经济活动中 对资源消耗和对环境的负面影响越来越大 而长期忽略这种负面影响的后果 高
  • Hexo在多台电脑上提交和更新

    文章目录 1 博客搭建 2 创建一个新文件夹new 用于上传hexo博客目录 3 github上创建hexo分支并设置为默认分支 创建hexo分支 将hexo分支设置为默认分支 4 进入新建的文件夹中git clone 再上传相关文件至he
  • navicat for mysql 连接 mysql 出现1251错误

    navicat for mysql下载地址 链接 https pan baidu com s 1Nh2ippFKHrWXnzPx hda8g 密码 fumf 客户端使用navicat for mysql 本地安装了mysql 8 0 但是在
  • CVE-2023-35843:NocoDB任意文件读取漏洞复现

    文章目录 NocoDB 存在任意文件读取漏洞CVE 2023 35843 0x01 前言 0x02 漏洞描述 0x03 影响范围 0x04 漏洞环境 0x05 漏洞复现 1 访问漏洞环境 2 构造POC 3 复现 0x06修复建议 Noco
  • zookeeper选举流程源码分析

    zookeeper选举流程源码分析 选举的代码主要是在QuorumPeer java这个类中 它有一个内部枚举类 用来表示当前节点的状态 public enum ServerState LOOKING FOLLOWING LEADING O
  • 关于vue项目的node、node-sass、sass-loader的版本问题

    后续博客全部搬迁至个人博客 欢迎访问 最近遇到一个问题 在下载vue项目的node modules的包时 node sass和sass loader版本总是不匹配 当两者匹配时 node和node sass版本又不匹配 导致我的服务一直起不
  • 简历中场景

    场景一 消息的发送 接收 利用rabbitmq的单通道模式 实现专家端发送消息 老师端监听消息 流程 subject accept server中producer消息 mq message中consumer监听消息 并保存在数据库中 调用m
  • 安装potobuf(make check通过)

    很多文章中给出的方法是在github上下载项目 然后创建build再安装googletest 但是在最后的make check时一直报错 如果是python中使用 直接sudo pip3 install i https pypi tuna
  • Spring 3整合Quartz 2实现定时任务一:常规整合

    最近工作中需要用到定时任务的功能 虽然Spring3也自带了一个轻量级的定时任务实现 但感觉不够灵活 功能也不够强大 在考虑之后 决定整合更为专业的Quartz来实现定时任务功能 首先 当然是添加依赖的jar文件 我的项目是maven管理的
  • Cannot run program “D:\Environment\jdk1.8\bin\java.exe”解决方法

    Cannot run program D Environment jdk1 8 bin java exe in directory D Project Java Idea project docker springboot CreatePr
  • Scratch的广播与消息

    在事件积木中 有一块触发积木叫当接收到 消息1 对应地 有两块积木 广播 消息1 广播 消息1 并等待 广播 消息机制就是编程中的全局事件 当一个消息被广播时 所有角色 包含广播者自身 都会接收到该消息 只要一个角色有该消息的接收脚本 即可
  • 【Linux】进程程序替换 &&简易mini_shell实现

    文章目录 替换原理 替换函数 替换函数的使用 简易shell实现程序 替换原理 目前 我们使用fork创建子进程 为了用if else让子进程执行父进程代码的一部分 如果想让子进程执行一个全新的程序 进程不变 仅仅替换当前进程的代码和数据
  • python怎么自学

    其实0基础选择python学习入行的不在少数 Python近段时间一直涨势迅猛 在各大编程排行榜中崭露头角 得益于它多功能性和简单易上手的特性 让它可以在很多不同的工作中发挥重大作用 正因如此 目前几乎所有大中型互联网企业都在使用 Pyth
  • 图像识别(九)

    大家好啊 我是董董灿 很多同学在做深度学习时 都会遇到难以理解的算法 SoftMax肯定是其中一个 初学者大都对它一知半解 只知道SoftMax可以用来做分类 输出属于某个类别的概率 但是 为什么要用SoftMax呢 这个算法又是如何将神经