客至汲泉烹茶, 抚琴听者知音

Softmax的简单解释

原文地址

基础介绍

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

  1. 将它们作为 e) (一个数学常数) 的幂
  2. 加总所有以e为底的指数,结果作为分母
  3. 每个单独指数为分子
  4. 概率等于分子除以分母

更确切地说,Softmax对n个给定的$x_1 \ldots x_n$数字作以下转换 :

$$ s(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}} $$

输出始终在$[0, 1]$之间,并且加总为0.因此,它们形成一个概率分布

例子

假设我们有数字-1、0、3和5。首先,我们计算分母:

$$ \begin{aligned} \text{分母} &= e^{-1} + e^0 + e^3 + e^5 \\ &= \boxed{169.87} \\ \end{aligned} $$

然后,我们可以计算分子和概率:

$x$分子 ($e^x$)概率 ($\frac{e^x}{169.87}$)
-10.3680.002
010.006
320.090.118
5148.410.874

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() 将xs作为幂,e作为低

为什么Softmax如此有用?

想象建立一个 神经网络 来回答这个问题: 这张照片是狗还是猫?

该神经网络的一种常见的设计是:它输出2个实数,一个表示小狗,另一个表示猫猫,并应用Softmax处理这些值。例如,假设网络输出 $[-1, 2]$:

动物$x$$e^x$Probability概率
-10.3680.047
27.390.953

这意味着我们的网络有95.3%的置信度相信图片是猫。Softmax让我们用概率回答分类问题,比简单的答案(例如,二进制是/否)更有用。

添加新评论