数学嫌いリーマンのAI雑記

AI、IT、資格とか。

【分かりやすく】シグモイド関数とソフトマックス関数について解説【ディープラーニング】

 
ディープラーニングにおける「シグモイド関数」と「ソフトマックス関数」について、数学を極力使用せずに解説します。




シグモイド関数」と「ソフトマックス関数」って何?

 「シグモイド関数」「ソフトマックス関数」は、ディープラーニングにおいて

計算結果を出力する

役割をもつ、非常に重要な関数です。また、2つの関数の違いは

シグモイド関数 → 2値分類(〇か✕か)をしたいときに使う
ソフトマックス関数 → 多値分類(例:犬か猫か狼かを判定)をしたいときに使う

となります。

どう使う?

 この二つの関数の使い方について説明します。

そもそも、ディープラーニングのメイン機能は「データにフィットする関数を作る」ことです。

2値分類の例を下に示します。


データ点が二色(紫、黄)に分けられています。ディープラーニングは、これらの点を


このようにきれいに分割できる線を引くことができます。

しかし、線を引いたところで、実用的には全く嬉しくありません。上のグラフを例にすると、本来の目的は

あるデータが「紫」か「黄」かを判定する

ことだからです。そこで登場するのが「シグモイド関数」や「ソフトマックス関数」です。

上の例は2値分類のため、使用するのは「シグモイド関数」になります。

シグモイド関数の方がシンプルなので、まずはシグモイド関数から説明します。

シグモイド関数

 シグモイド関数は、以下のような数式で表せます(意味は分からなくても大丈夫です)。

 \displaystyle
y = \dfrac{1} {1+exp(-x)}


これをグラフにすると、以下のようになります。


これがどういう意味を持つかについて説明します。

まずはyに注目してください。値が0~1になっていますね。

これは、「yは確率値である」ことによるものです。y=0.2なら20%、といった具合です。

何故確率を使うのかというと、分類を簡単に行うためです。今回の場合、

yが0.5未満なら「紫」、yが0.5以上なら「黄」


とあらかじめ決めておきます。

そうすることで、yの値が出た瞬間に分類ができるようになります。

対してxについてですが、こちらは値の範囲に意味はありません。

xは「ディープラーニングの結果」を表します。

つまり、ディープラーニングの結果をシグモイド関数のxに代入すると、yという確率値が出てくるということになります。

そして、yの値が出てくることで、「紫」か「黄」の分類ができることになります。


これが、シグモイド関数の役割です。

ソフトマックス関数

 続いて、ソフトマックス関数について説明します。

先ほど説明した「シグモイド関数」は、2値分類用の関数です。3値以上の多値分類では、厳密に適用することは難しいです。

(例えば、3値分類にシグモイド関数を適用したいとき、yの境界を0.3333333.....と0.66666666....で分けるということになり、境界値付近の処理が厄介になってしまいます)

そこで登場するのがソフトマックス関数です。

ソフトマックス関数は以下の式で表されます(こちらも意味は理解しなくて大丈夫です)

 \displaystyle
y_i = \dfrac{exp(x_i)} {\sum\limits_{n=1}^m exp(x_i)}


ややこしい式ですね。これを3値分類の時用に変換すると、次のようになります。(i=1,2,3)

 \displaystyle
y_i = \dfrac{exp(x_i)} {exp(x_1)+exp(x_2)+exp(x_3)}


簡単にいうと、「分類する3つのものについてディープラーニングを通して結果(x)を出し、それぞれの値に対して全体における割合を計算する」ということです。

イメージは下のようになります。


ソフトマックス関数を使用することで、何値分類であっても分類を行うことができるのです。

これが、ソフトマックス関数の役割です。

まとめ

 最後にまとめです。

・「シグモイド関数」と「ソフトマックス関数」は、ディープラーニングの結果を実用化するためのもの

・2値分類であればシグモイド関数を、3値以上の多値分類であればソフトマックス関数を使う

ここまで読んでくださり、ありがとうございました。