[ 機械学習 ] 活性化関数の実装 (ステップ関数、シグモイド関数、ReLU関数、ソフトマックス関数)

[ 機械学習 ] 活性化関数の実装 (ステップ関数、シグモイド関数、ReLU関数、ソフトマックス関数)

本記事では、ニューラルネットワークで使用される活性化関数についてまとめ、実装を行なっていきます。

 

活性化関数とは

活性化関数とは、ニューラルネットワーク(もしくはパーセプトロン・ネットワーク)において、「入力信号の総和を出力信号に変換する関数」のことを言います。

前回、パーセプトロンについて扱った記事で使用した図を以下に再掲します。

パーセプトロンとは、各入力 * 各重み + バイアス の総和により、出力が決定するものでした。

この図では Y が出力に相当しますが、出力値が決定される前に一つの判定が行われていることがわかります。ここでは、「総和が1以上であれば出力1、総和が1未満であれば出力0」というif構造です。

これが、活性化関数と呼ばれるものです。総和に対して何かしらの処理を行い出力を決定する、という機能を以っているのが活性化関数なのです。

ここで用いられている活性化関数は、その性質から「ステップ関数」と呼ぶことができます。また、入力総和への処理の違いにより、活性化関数はいくつもの種類に分類することができます。

次の項目から、いくつかの活性関数についての説明を行っていきます。

 

ステップ関数

ステップ関数とは

ステップ関数とは、「引数(ここでは入力値の総和)が閾値を超過した場合には1を、超過していない場合には0を出力する」機能を持った活性化関数です。活性化関数の中ではもっとも単純な機能の関数であり、パーセプトロンの実装では使用されますが、ニューラルネットワークで用いられることはありません。

ステップ関数の実装

ではステップ関数を実装してみます。下記の実装では、「入力値が1を超えたら場合には1を出力し、それ以外の場合には0を出力する」ということを実現しています。

実装をグラフ化したものが上記図です。x軸が入力ですが、入力1を境に出力が0と1に分化していることがわかります。

シグモイド関数

シグモイド関数とは

シグモイド関数は、ニューラルネットワークで最もよく使用される関数です。シグモイド関数は、「入力値の範囲内で、出力値が0−1間で緩やかなカーブに従って割り当てる」という性質を持っています。

なぜこのように形状になるかは数学的な話になるので、各人で調べてみてください。

シグモイド関数の実装

以下に、シグモイド関数の実装とイメージを示します。

ここでは入力を -5 から 5 の範囲で与えていますが、その範囲内で出力が緩やかに割り当てられていることがわかります。

ニューラルネットワークでは入力を判定する層(隠れ層)を多数設けることから、0か1にきっぱりと判定してしまうステップ関数より、出力を分散させて次の層へと伝播させられるシグモイド関数の方がよく用いられるのです。

ReLU関数

ReLU関数とは

ニューラルネットワークと並んでよく使用されるのが、ReLU関数です。ReLU関数は、「入力が0を超えていれば入力をそのまま出力値とし、そうでなければ0を出力する」という関数です。

使い所などは今後の記事で紹介していこうと思いますので、ここではイメージだけをとらえてください。

ReLU関数の実装

以下はReLU関数の実装とイメージです。

ここでは -5 から 5 の範囲で入力を与えています。0までの入力は全て出力0に収束しているのに対して、0以上の入力があった場合には、入力と同値の出力が行われていることがわかりますね。

ソフトマックス関数

ソフトマックス関数とは

最後にソフトマックス関数の説明をして本記事を終わりたいと思います。ソフトマックス関数は、機械学習の中でも特に「分類問題」を解くためのアルゴリズムとして使用されます。

ソフトマックス関数では、各入力値の大きさに応じた 0-1 までの実数となります。また、出力値の総和が常に 1 となります。これはどういうことかというと、ソフトマックス関数の出力は「確率」として扱うことができる、ということを意味しています。

他の関数ほど直感的にはイメージ化できないのですが、何はともあれ実装を行ってみます。

ソフトマックス関数の実装

以下がソフトマックス関数の実装と出力イメージになります。

この実装では、「1、2、3」の入力があった時に、それぞれの大きさに応じた値(総和1) を出力しています。出力はそれぞれ( 0.09, 0.2, 0.6 )となっており、その総和が1になることが確認できますね。

先ほども述べたように、総和が1であるということはこの出力を確率として読み替えることができるということです。すなわち、「入力1」に割り当てられる確率は「9%」であり、「入力3」に割り当てられる確率は「66%」と行った具合です。(計算の過程で二乗処理が入っていますので、見かけの差よりも乖離が顕著になります)

MachineLearningカテゴリの最新記事