「ソフトマックス関数」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
7行目: 7行目:
 
[[ニューラルネットワーク]]の最後の[[活性化関数]]として、[[ルースの選択公理]]に基づいて、ネットワークの出力を予測される出力クラスに対する確率分布に正規化するためによく使われる。
 
[[ニューラルネットワーク]]の最後の[[活性化関数]]として、[[ルースの選択公理]]に基づいて、ネットワークの出力を予測される出力クラスに対する確率分布に正規化するためによく使われる。
  
 +
数式
 
:<math>\sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} </math>
 
:<math>\sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} </math>
  
 +
C# で書くとこんな感じ。
 
<source lang="csharp">
 
<source lang="csharp">
 
float[] softmax(float[] z)
 
float[] softmax(float[] z)

2022年9月13日 (火) 01:47時点における版

ソフトマックス関数(softmax function)とは、ロジスティック関数多次元一般化したもので、K次元の実数ベクトル(K個の実数配列)をK個の確率分布(0.0〜1.0)に変換し、かつその確率分布の合計が1.0になる関数のことである。

「softargmax」や「正規化指数関数」などとも呼ばれる。

「正規化指数関数」という名称からもわかるように、UnityMonoGameなんかで3Dゲームなどを作っているとよく使う正規化関数「normalize(vector3)」の亜種であり、3次元だけでなく4次元でも5次元でも100次元でも「合計1.0」にしてくれるというもの。

ニューラルネットワークの最後の活性化関数として、ルースの選択公理に基づいて、ネットワークの出力を予測される出力クラスに対する確率分布に正規化するためによく使われる。

数式

C# で書くとこんな感じ。

float[] softmax(float[] z)
{
    var exp = z.Select(System.MathF.Exp);
    var sum_exp = exp.Sum();
    var ret = exp.Select(j => j / sum_exp);
    return ret.ToArray();
}

// test
var a = new[] { 1.0f, 2.0f, 3.0f, 4.0f, 1.0f, 2.0f, 3.0f };
var b = softmax(a);
Console.WriteLine(String.Join(", ", b));

関連項目