【DeepLeaning】 ソフトマックス関数から見えたニューラルネットワークの目的

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

ソフトマックス関数はすごい関数

ソフトマックス関数のすごさを調査しました。

  1. 正規化:
    ソフトマックス関数はその引数を正規化(関数の出力が0から1までの値となること)します。値の和は1になります。
    これは出力を確率として解釈できることを意味し多クラス分類のような問題に適しています。
  2. 非線形性:
    ソフトマックス関数は非線形関数であり入力に対して複雑な変換を行います。
    多層ニューラルネットワークは、複数の層を持つことができ各層には複数のニューロンがあります。
    このような多層ニューラルネットワークは、入力から出力までの複雑な関数を表現できます。非線形性は多層ニューラルネットワークにおいて各層の間の関係を表現するために必要です。
    もし全ての層が線形関数であれば、全体としての関数は単一の線形関数になってしまいます。
    これはモデルが複雑なパターンを表現することができなくなる(各層の間の関係を表現できない)ということを意味します。しかし、非線形関数を用いることで多層ニューラルネットワークは複雑な関数を表現できます。
    ソフトマックス関数は、非線形関数の一種であり、多層ニューラルネットワークの出力層で使用されることがあります。
    したがって、ソフトマックス関数は、多層ニューラルネットワークの構築に役立つ重要な性質の一つです。
  3. 小さな入力値に強い:
    ソフトマックス関数は大きな入力値を持つときに不安定になる可能性がありますが小さな入力値には非常に強いです。
    ニューラルネットワークのトレーニングの安定性を向上させます。
  4. 微分可能:
    ソフトマックス関数は微分可能な関数であるためバックプロパゲーションによる誤差逆伝播法に使用できます。
    ニューラルネットワークのトレーニングに必要な重要な性質です

ソフトマックスは大きな入力値に弱い!?

ソフトマックス関数が小さな入力値に強いということは、入力値が大きくなると指数関数的に増加するためオーバーフロー(overflow)が発生しやすくなるということです。
オーバーフローは計算機の数値演算において表現できる値の上限を超えることで生じるエラーであり計算結果が不正確になることがあります。

大きな入力値を扱う場合、ソフトマックス関数を安定的に計算するためには、以下のような手法があります。

  1. 入力値を調整する:
    入力値から最大値を引いた値をソフトマックス関数の入力として利用することで入力値を調整することができます。
    これにより、指数関数の計算結果が小さくなりオーバーフローを防ぐことができます。
  2. 浮動小数点演算の精度を上げる:
    浮動小数点演算において演算の精度を上げることでオーバーフローを抑えることができます。
    例えば倍精度浮動小数点数を用いることでより正確な計算を行うことができます。
  3. 数値安定性の高いソフトマックス関数を使用する:数値安定性の高いソフトマックス関数として、ロジスティックソフトマックス関数S型ソフトマックス関数があります。
    これらの関数は、入力値の絶対値が大きくなっても指数関数の計算結果がオーバーフローしないように設計されています。

上記の手法の中でも、1.は特に一般的でありブログや学習動画でもこの手法がよく採用されている印象です。
3は・・・なにやら難しそう。

出力層のソフトマックス関数は省略できるらしい。

まとめ

出力層のソフトマックス関数はニューラルネットワークの出力を正規化するために用いられ多クラス分類問題などで一般的に使用されます。
出力層にソフトマックス関数を使用しない場合でも、二値分類問題ではシグモイド関数、回帰問題では恒等関数が一般的に使用されます。
ただし多クラス分類問題で出力層にソフトマックス関数を使用する場合でも訓練中に数値的な不安定性が生じることがあるため
対数尤度損失を最小化することが推奨されます。

対数尤度損失とニューラルネットワークの真の目的!?

対数尤度損失はニューラルネットワークの訓練において多クラス分類問題などで使用される損失関数の一つです。
対数尤度損失は、正解ラベルと予測確率の差を測る指標なのです。

ここで言う「損失 (loss)」とはニューラルネットワークの学習においてモデルが予測した値と正解の値との誤差を表す指標です。
損失関数はモデルの出力と正解の間の誤差を定量化するために使用されます。
ニューラルネットワークの目的は、この損失を最小化することです。

損失を最小化することは正確な予測を行うために必要であり学習の過程で損失を最小化するようにモデルのパラメータが調整されます。
つまり損失はニューラルネットワークが何かを「失う」わけではなくむしろ正確な予測を実現するための指標として機能するものということです