SoftMax函数 郝伟 2021/04/19

[TOC]

1. 1 前言

SoftMax函数是常用的一个机器学习中的函数,网上的解释很多,但是大都是从论文中复制翻译过来,不容易理解。所以本文以示例和代码进行解释,非常简单直白式,让读者能够快速理解。

2. 2 1分钟理解SoftMax

请从头到尾认真阅读本节,只要你认真看完成了,1分钟即可理解SoftMax函数。

正文开始:给定三个变量 $x_1=5, x_2=-3, x_3=0.8$,SoftMax计算过程只有两步:

第1步 对求输入求对e的指数 (结果保留4位)

第2步 进行归一化处理

完成。

3. 3 代码示例

以下是使用代码实现的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]

4. 4 小结

SoftMax函数通过引入e的指数的方式,能够将计算的输出值拉开明显的距离,从而选择显著的结果。不过,其计算结果由于使用了指数,所以值可能非常大,有可能会造成数值溢出。

5. 附:复杂的学术图片

网上经常看到下面的图片,都是从论文中截图过来的,对初学者非常不友好。在有了以上的理解后,再看会感觉好些。 在这里插入图片描述 或者是这样的: 在这里插入图片描述

results matching ""

    No results matching ""