HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

出力層で使うソフトマックス関数

 

 

follow us in feedly

ニューラルネットの分類問題

分類するクラスの数=出力層のユニットの数

ニューラルネットワークで分類問題を解く場合は、入力層はデータの次元の数に合わせ、中間層は任意の構造を持たせることができますが、出力層は分類したい種類(クラス)と同じ数のユニットで構成します。

 

あるデータから、男女を判別したいならば出力層のユニットは2つですし、お馴染みの手書き文字認識のmnistを使う場合は「0〜9」の手書き文字を認識するために10個のユニットを出力層に準備するということです。

 

ラベルデータ

入力データ\bf xに対してそのラベル(答え)を\bf tとした時に、\bf tは分類したいクラスの数(出力層のユニットの数)の次元を持つことになります。そしてそのラベルはクラスを10個に分ける場合は、あるデータが6番目のクラスに属するのであれば

 

\bf t = (0,0,0,0,0,1,0,0,0,0,)^T

 

とします。該当する成分のみを1にして、他の成分を0としてしまうということです。

学習されたニューラルネットワークは、理想的には新しい入力データに対して、データが属するべきクラスに該当する成分のみを1として出力してくれるのです。

 

現実の出力

しかし実際には上記のように上手くは行きません。

あるデータを入力した時、ニューラルネットワークの出力\bf yは例えば以下のようになるでしょう。

 

\bf y = (0.03,0.07,0.02,0.03,0.04,0.01,0.74,0.03,0.01,0.02)^T

 

ここで、「ラベル\bf tは1つの成分のみが1の値を取り、ほかの成分は0である」、すなわちすべての成分の和が必ず1であるということを思い出しましょう。そして、上記の実際のニューラルネットワークの出力も和が1になっています(そうなるように書いただけですが)。

 

従って、ニューラルネットワークの出力というのは、各成分が、そのクラスに属する確率を表していると(とりあえずは)解釈しても良いということです。

 

上記の出力では7番目の成分が最も大きな値なので、おそらく新しいデータは7番目のクラスに属するであろうと判断することにします。逆に、そのような判断をすることが妥当だと言えるようにニューラルネットワークを学習させなければなりません。

 

そこでソフトマックス関数というものが使われることになります。

 

ソフトマックス関数

確率を出力している

ソフトマックス関数は分類問題をニューラルネットワークで解く場合に、出力層の活性化関数として用いられる関数です。数式は以下で表されます。

 

y_i = \frac{\exp(a_i)}{\sum_j^D \exp(a_j)}

 

ここでy_iというのは出力層のi番目のユニットの出力、Dは出力層のユニットの数です。分母に和の式を導入することで、出力層のすべてのユニットの出力の和を取ると

 

\sum_i^D y_i = \frac{\sum_i^D \exp(a_i)}{\sum_j^D \exp(a_j)}=1

 

となってくれます。そして分母も分子も\exp関数ですから正の値であり、当然分母の方が大きいため

 

0≦y_i≦1

 

\sum_i^D y_i =1

 

を満たしてくれます。従って、これを出力層の活性化関数に用いることで、ニューラルネットワークの出力があたかもあるクラスに属する確率を表しているとして学習させることができるのです。 

 

交差エントロピー

損失関数

出力層にソフトマックス関数を用いる場合、損失関数は以下の交差エントロピーを用います。

 

E=-\sum_n^N \sum_i^D t_{ni} \log y_i

 

Nはデータの数で、Dが出力層のユニットの数(分類したいクラスの数)になります。

 

交差エントロピーを用いる理由

2つの確率分布p(x),q(x)の交差エントロピーとは

 

H(p(x),q(x))=-\sum_x p(x) \log q(x)

 

で与えられます。

交差エントロピーH(p,q)というのは、ある情報が真の確率分布pではなく、qに基づいて符号化された際に、その符号化の事象を特定するために必要なビット数の平均を表しています。要するに、pを使わなければならないところ、ちょっと違うqを使って符号化したときに、復元のため余分に使わなければならない労力と言ったところでしょう。

すなわちこのようなケースでqpに近いほうがいいに決まっていますし、交差エントロピーは小さいほうが良いということになります。

 

 

ニューラルネットワークでは交差エントロピーH(t,y)を使って、ニューラルネットの出力yがなるべくラベルtに近づき、データからそのクラスを復元できるように学習させようという戦略を取っているわけです。

更に、このように交差エントロピーH(t,y)ytに近づけていくことで最小化することは、KLダイバージェンスKL(t:y)を最小化することと一致します。

 

KLダイバージェンスが学習の損失関数として妥当なことはかなり理論的に認められているところです。

 

s0sem0y.hatenablog.com

 

 

 

本来は損失関数を設定した上で、出力yがどのような形になっているべきかが定められます。すなわち交差エントロピーを損失関数に選ぶことで、ソフトマックス関数が出力層の活性化関数として選ばれることになります。

 

 

 

ところで最近、分類問題における出力層の設計に新たな指針が示されました。

以下の記事から論文にアクセスできます。

s0sem0y.hatenablog.com