ITエンジニア ノイのブログ

ITエンジニアのノイです。 YouTubeで ITエンジニアのお勉強という学習用の動画を公開しています。チャンネル登録お願いします!https://m.youtube.com/channel/UCBKfJIMVWXd3ReG_FDh31Aw/playlists

ソフトマックス関数

ソフトマックス関数とは

ソフトマックス関数は、複数の数値からなるベクトルを受け取り、それを正規化して確率分布として表現するための関数です。主に機械学習や深層学習の分野で使用されます。この関数は、多クラス分類の出力層や、ニューラルネットワークの最終的な出力を確率分布に変換するために一般的に利用されます。

ソフトマックス関数は、次の式で表されます。

ここで、Nはベクトルの次元数を表し、eは自然対数の底であるネイピア数です。各要素に対して、指数関数を計算し、全ての指数の和で割って正規化しています。

ソフトマックス関数の特性

  1. 正規化性: ソフトマックス関数の出力は0から1の範囲に収束し、それらの合計は1になります。これにより、出力を確率分布として解釈できます。

  2. 強調効果: 入力ベクトルの中で最大の要素が他の要素よりも大きな確率を持つようになります。つまり、最大の要素が他の要素に比べて強調される性質があります。

  3. 微分可能性: ソフトマックス関数は微分可能な関数であり、これが勾配降下法などの最適化アルゴリズムで重要です。

機械学習モデルでは、ソフトマックス関数の出力を使用してクラスの確率分布を得ることができ、最終的な予測を行います。

ソフトマックス関数の図示

ソフトマックス関数を図示するためのPythonコードです

import numpy as np
import matplotlib.pyplot as plt

def softmax(z):
    exp_z = np.exp(z - np.max(z))  # 数値安定性のため、指数関数の計算前に最大値で引く
    return exp_z / np.sum(exp_z)

def plot_softmax(x_values):
    y_values = softmax(x_values)
    
    plt.figure(figsize=(8, 6))
    plt.plot(x_values, y_values, label='Softmax Function')
    plt.title('Softmax Function')
    plt.xlabel('Input Values')
    plt.ylabel('Softmax Output')
    plt.legend()
    plt.grid(True)
    plt.show()

# ソフトマックス関数をプロットするための入力値
x_values = np.arange(-5, 5, 0.1)

# ソフトマックス関数のプロット
plot_softmax(x_values)

ソフトマックス関数

値の比は入力の差に依存する

ソフトマックス関数が入力の差に依存する理由は、指数関数が入力値に対して非常に敏感で急激に増加する性質にあります。具体的には、同じ入力ベクトル (z) の各要素の指数関数を取るため、入力の小さな差異が指数関数の値に大きな差異を生むことになります。

例を挙げてみましょう:

[ z = [2, 1, 0] ]

このとき、各要素の指数関数を計算すると:

[ e2, e1, e0 ]

これらの値はそれぞれ (7.39, 2.72, 1) となります。 計算すると [0.84, 0.11, 0.03] になります。

このように、入力の差が指数関数を介してソフトマックス関数の出力に大きな影響を与えます。その結果、入力値の相対的な大小関係が強調され、確率分布として表現されます。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)