Softmax原理

Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。

对于一个k维向量z,我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果,具体计算公式为:

\[softmax(x_i) = \frac{exp(x_i)}{\sum_j exp(x_j)}

\]

对于k维向量z来说,其中\(z_i \in R\),我们使用指数函数变换可以将元素的取值范围变换到\((0, +\infin)\),之后我们再所有元素求和将结果缩放到[0,1],形成概率分布。

常见的其他归一化方法,如max-min、z-score方法并不能保证各个元素为正,且和为1。

Softmax性质

输入向量x加上一个常数c后求softmax结算结果不变,即:

\[softmax(x) = softmax(x+c)

\]

我们使用softmax(x)的第i个元素的计算来进行证明:

\[softmax(x_i+c) = \frac{exp(x_i+c)}{\sum_jexp(x_j+c)} \\= \frac{exp(x_i) * exp(c)}{\sum_j[exp(x_j) * exp(c)]} \\=\frac{exp(x_i) * exp(c)}{exp(c) * sum_j exp(x_j)} \\=\frac{exp(x_i)}{\sum_jexp(x_j)} \\= softmax(x_i)

\]

函数实现

由于指数函数的放大作用过于明显,如果直接使用softmax计算公式\(softmax(x_i) = \frac{exp(x_i)}{\sum_j exp(x_j)}\)进行函数实现,容易导致数据溢出(上溢)。所以我们在函数实现时利用其性质:先对输入数据进行处理,之后再利用计算公式计算。具体使得实现步骤为:

查找每个向量x的最大值c;

每个向量减去其最大值c, 得到向量y = x-c;

利用公式进行计算,softmax(x) = softmax(x-c) = softmax(y)

代码如下:

import numpy as np

def softmax(x):

"""

softmax函数实现

参数:

x --- 一个二维矩阵, m * n,其中m表示向量个数,n表示向量维度

返回:

softmax计算结果

"""

assert(len(X.shape) == 2)

row_max = np.max(X, axis=axis).reshape(-1, 1)

X -= row_max

X_exp = np.exp(X)

s = X_exp / np.sum(X_exp, axis=axis, keepdims=True)

return s

测试一下:

a = [[1,2,3],[-1,-2,-3]]

b = [[1,2,3]]

c = [1,2,3]

a = np.array(a)

b = np.array(b)

c = np.array(c)

print(softmax(a))

print(softmax(b))

print(softmax(c)) # error

输出结果为:

[[ 0.09003057 0.24472847 0.66524096]

[ 0.66524096 0.24472847 0.09003057]]

[[ 0.09003057 0.24472847 0.66524096]]

Traceback (most recent call last):

assert(len(X.shape) == 2)

AssertionError

pythonmax函数原理_Softmax函数原理及Python实现相关推荐

  1. 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )

    文章目录 一.进程注入原理 二.远程调用流程 ( 获取 so 动态库地址 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 ) 一.进程注入原理 调试进程 At ...

  2. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  4. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞)  阿里云函数计算开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门" ...

  5. 【tensorflow】全连接层函数tf.layers.dense()原理

    TensorFlow全连接层函数tf.layers.dense()原理 - jian shu https://www.jianshu.com/p/3855908b4c29 最近在用TensorFlow ...

  6. JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化

    JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...

  7. SAP UI5和Angular的函数防抖(Debounce)和函数节流(Throttle)实现原理介绍

    这是Jerry 2021年的第 11 篇文章,也是汪子熙公众号总共第 282 篇原创文章. Jerry之前的文章 SAP UI5 OData谣言粉碎机:极短时间内发送两个Odata request, ...

  8. SAP CRM One Order函数CRM_Object_FILL_OW的设计原理

    标题:SAP CRM One Order函数CRM_FILL_OW的设计原理 There are totally 60 function modules in One order with namin ...

  9. 从零入门Serverless|一文搞懂函数计算及其工作原理

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 什么是函数计算? 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器 ...

最新文章

  1. MySQL的IFNULL函数
  2. 标准访问控制列表配置(51cto: 实验 34)
  3. linux串口上网的简单实现,Linux串口上网的简单实现(3)
  4. pyquery获取不到网页完整源代码_PyQuery 详解
  5. Flutter入门:如何只关闭自身页面
  6. 山东大学有人陪!真的吗?_10,000小时! 您真的需要那么多吗?
  7. vlookup两个条件匹配_用VLOOKUP进行同时满足两个条件的查找,几种方法都在这啦!||Excel技巧...
  8. 500万相机芯片尺寸_MGS二代系列500万像素新品面世
  9. Spring的事务管理
  10. mysql vc调用时内存错误
  11. wincc嵌入式excel报表 该报表系统能够读取WINCC中历史归档数据,产生出EXCEL报表文件,同时在画面中EXCEL控件实时显示
  12. 深度学习-22:信息论和信息熵
  13. 《相关性准则——大数据时代的高效能之道》一一1.6 相关性准则
  14. 照片上传分辨率低怎么改?图片分辨率dpi怎么调?
  15. Excel表格数据导入
  16. 斯嘉丽约翰逊60张pdf什么时间的?_什么叫美丽与演技并存?
  17. [CPNet]-理想亲和图的生成以及作用——Blank
  18. linux系统添加根证书 linux证书信任列表
  19. 『broadview2006』博文视点在SD2.0大会上以书会友
  20. 重视苹果和谷歌的警告信

热门文章

  1. HDU2572 终曲【字符串匹配】
  2. UVA11063 B2-Sequence【序列】
  3. UVA12657 Boxes in a Line【模拟】
  4. CCF NOI1011 正方形
  5. POJ NOI MATH-7831 计算星期几
  6. linux 代码行数统计利器 ——cloc
  7. 古人与古代(他们和他们的时代)
  8. 方阵的迹(trace)及其微分(导数)
  9. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高
  10. sql where中用case_一份虐你千百遍的SQL语句面试题,请笑纳