什么是Softmax

什么是Softmax,本文是对Softmax函数的简单解释。什么是Softmax,如何使用它,以及如何在Python中实现它。

Softmax将任意实值转换为概率,这在机器学习中通常很有用。它背后的数学原理很简单:给定一些数字,

  • 取e(数学常数)的每一次方。
  • 把所有的指数(e的幂)加起来。这个结果是分母。
  • 用每个数的指数作为它的分子。
  • Probability= \frac{Numerator}{Denominator}

写得更妙的是,Softmax对n个数字x_1,x_2,…x_n执行以下转换:
s(x_i) = \frac{e^{x_i}}{\sum_{j=1}^N{e^{x_j}}}

Softmax变换的输出总是在[0,1]范围内,并且加起来等于1。因此,它们形成一个概率分布。

一个简单的例子

假设我们有数字-1,0,3和5。首先,我们计算分母(Denominator):
Denominator = e^{-1} + e^0 + e^3 + e^5 = 169.87
然后,我们可以计算分子和概率:
什么是Softmax
x越大,其概率越大。同样,注意概率加起来都是1,如前所述。

用Python实现Softmax

使用numpy使这个超级简单:

import numpy as np

def softmax(xs):
    return np.exp(xs) / sum(np.exp(xs))

xs = np.array([-1, 0, 3, 5])
print(softmax(xs)) # [0.0021657, 0.00588697, 0.11824302, 0.87370431]

np.exp()将e的幂提高到输入数组中每个元素的幂。

为什么Softmax有用?

想象一下建立一个神经网络来回答这个问题:这是一张狗还是猫的图片?
该神经网络的一个常见设计是输出两个实数,一个表示狗,另一个表示猫,并对这些值应用Softmax。例如,假设网络输出[-1,2]:
什么是Softmax
这意味着我们的网络对这张猫的图片有95.3%的信心。Softmax让我们用概率回答分类问题,这比简单的答案(例如二进制的yes/no)更有用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程