一分钟理解SoftMax函数
郝伟 2021/04/19
SoftMax函数是常用的一个机器学习中的函数,网上的解释很多,但是大都是从论文中复制翻译过来,不容易理解。所以本文以示例和代码进行解释,非常简单直白式,让读者能够快速理解。
请从头到尾认真阅读本节,只要你认真看完成了,1分钟即可理解SoftMax函数。
正文开始:给定三个变量 ,SoftMax计算过程只有两步:
第1步 对求输入求对e的指数 (结果保留4位)
第2步 进行归一化处理
完成。
以下是使用代码实现的SoftMax函数。
import math def softmax(xs): ''' 函数:softmax 函数,用于数组归一化 输入:x的序列 输出:经过计算的y序列 ''' ys = [] sm = sum([math.exp(x) for x in xs]) for x in xs: ys.append(math.exp(x) / sm) return ys # 输出值 xs=[5, -3, 0.8] # 经过softmax函数计算的输出值 ys = softmax(xs) # 打印出 xs, ys 和 sum(ys) print('方法1'.center(60, '*')) print('xs:', xs) print('ys:', ys) print('sum(ys):', sum(ys)) # 和必然为1 print('方法2'.center(60, '*')) import numpy as np scores = np.array(xs) results = np.exp(scores) / np.sum(np.exp(scores)) print('scores:', scores) print('results:', results)
输出结果为
****************************方法1*****************************
xs: [5, -3, 0.8]
ys: [0.9849004523128639, 0.0003303972939552459, 0.014769150393180792]
sum(ys): 1.0
****************************方法2*****************************
scores: [ 5. -3. 0.8]
results: [9.84900452e-01 3.30397294e-04 1.47691504e-02]
SoftMax函数通过引入e的指数的方式,能够将计算的输出值拉开明显的距离,从而选择显著的结果。不过,其计算结果由于使用了指数,所以值可能非常大,有可能会造成数值溢出。
网上经常看到下面的图片,都是从论文中截图过来的,对初学者非常不友好。在有了以上的理解后,再看会感觉好些。

或者是这样的:
