NumPy, Python

【NumPy】softmax関数の実装


E資格の試験では、活性化関数を実装するプログラミング問題が出題されることがあります。

本記事では、活性化関数の一つであるsoftmax関数を実装する方法について解説します。

本記事における用語の説明

まずはいくつか用語の説明をします。

既に知っているという方は読み飛ばして下さい。

softmax関数とは

以下の式で定義される活性化関数です。

$$ Softmax(x_{ij}) = \frac{exp(x’_{ij})}{\sum_{k}^{M}exp(x’_{ik})} $$

なお、上式のxの形状は [ N : バッチサイズ, M : 次元数 ] となります。

出力の数はM個であり、それらの合計が1.0になるため、多クラス分類の予測を行うニューラルネットワークのモデルの出力層に導入されます。( 出力値を分類の予測確率として扱う )

処理の実装方法を解説

ここでは、softmax関数の実装例などを紹介しましょう。

実装例

前述の式を基に関数を実装します。使用する言語はPythonです。

import matplotlib.pyplot as plt
import numpy as np

def softmax(x):
    x = x - np.max(x, axis=0)
    return np.exp(x) / np.sum(np.exp(x), axis=0)

x = np.arange(0, 5)
y = softmax(x)

print(f'x: {x}')
print(f'y: {y}')
print(f'y.sum(): {y.sum()}')

このプログラムを実行すると以下の出力結果が得られます。

x: [0 1 2 3 4]
y: [0.01165623 0.03168492 0.08612854 0.23412166 0.63640865]
y.sum(): 1.0