Python NumPy 中的 Softmax

Muhammad Waiz Khan 2023年1月30日 2021年2月7日
  1. 在 Python 中实现一维数组的 NumPy Softmax 函数
  2. 在 Python 中对二维数组的 NumPy softmax 函数
Python NumPy 中的 Softmax

本教程将解释如何使用 Python 中的 NumPy 库实现 softmax 函数。softmax 函数是对数函数的一种广义多维形式,它被用于多项式对数回归和人工神经网络中的激活函数。它被用于多项式逻辑回归和人工神经网络中的激活函数。

softmax 函数将数组中的所有元素在区间 (0,1) 内进行归一化处理,使其可以作为概率处理。softmax 函数由以下公式定义。

softmax 公式

我们将看一下在 Python 中使用 NumPy 库对一维和二维数组实现 softmax 函数的方法。

在 Python 中实现一维数组的 NumPy Softmax 函数

假设我们需要定义一个 softmax 函数,将一个 1D 数组作为输入,并返回所需的归一化数组。

在应用 softmax 的时候,常见的问题是数值稳定性问题,也就是说,由于可能出现的指数和溢出误差,∑j e^(z_j) 可能会变得非常大。这个溢出误差可以通过用数组的每个值减去其最大值来解决。

下面的代码示例演示了 softmax 函数的原始实现和使用 Python 中的 NumPy 库进行最大减法的实现。

  • 原始 softmax:
import numpy as np

def softmax(x):
    
    f_x = np.exp(x) / np.sum(np.exp(x))
    return f_x
  • 数值稳定的 softmax:
import numpy as np

def softmax(x):

    y = np.exp(x - np.max(x))
    f_x = y / np.sum(np.exp(x))
    return f_x

在 Python 中对二维数组的 NumPy softmax 函数

二维数组的 softmax 函数会沿行进行 softmax 变换,也就是沿行计算最大和。在 1D 数组的情况下,我们不必担心这些事情,我们只需要在完整的数组上应用所有的操作。

下面的代码示例演示了如何使用 Python 中的 NumPy 库对一个 2D 数组输入进行 softmax 变换。

import numpy as np

def softmax(x):
    
    max = np.max(x,axis=1,keepdims=True) #returns max of each row and keeps same dims
    e_x = np.exp(x - max) #subtracts each row with its max value
    sum = np.sum(e_x,axis=1,keepdims=True) #returns sum of each row and keeps same dims
    f_x = e_x / sum 
    return f_x

假设我们需要沿着二维数组的列进行 softmax 变换,我们只需将输入和输出的 softmax() 方法进行传输即可。

示例代码:

softmax(x.T).T