はじめに
前回の記事では、機械学習に必要な指数関数と対数関数の基本について勉強した事を書きました。
その応用として、今回の記事では、シグモイド関数・ソフトマックス関数について勉強した事のメモを書こうと思います。参考書籍は、例によって下記を参考にしています。
- 作者: 伊藤真
- 出版社/メーカー: 翔泳社
- 発売日: 2018/02/15
- メディア: Kindle版
- この商品を含むブログを見る
シグモイド関数とは
シグモイド関数は、下記のグラフのような、滑らかな階段のような関数である。
また、数式では下記のように定義される。
シグモイド関数は、負から正の実数を0から1までの間に変換するものなので、確率を表す時によく使われる。
シグモイド関数の微分
シグモイド関数は、機械学習における分類問題や、ニューラルネットワークにおけるニューロンの特性を表す重要な関数として使われる。また、これらの分野ではシグモイド関数の微分が使われ、それは下記のように導出される。
まず、として下記の微分を考える。
この式でのの微分はとなるので、
となる。ここで、この式を下記のように変形する。
すると、はyそのものなので、最終的には下記のような形にすることができる。
ソフトマックス関数とは
複数の値、があるとき、それらの大小関係を保ちながら、確率としての値(各値は0~1で、和が1)に変換する関数である。変数の数がだとすると、ソフトマックス関数は下記のように表すことができる。
例えばK=3として、3つの数、があるとする。まずは、各のexpの和をとして、下記の式で求めておく。
そして、このを利用して計算できる確率としての値、は、下記のようになる。
この時、の値を1で固定して、とをそれぞれ-4から4の範囲で変化させたとすると、それによるとの値の変化は、下記のグラフのようになる。
ソフトマックス関数の微分
まず下記のように、をで偏微分する場合を考えてみる。
ここで、はの関数であることを考慮して、、とすると、偏微分は下記のように導出できる。
この形を見ると、これはシグモイド関数の微分と同じ形であることが分かる。
次に、をで偏微分する場合を考えてみる。での偏微分と同様に考えると、下記のように導出できる。
最後にこれらをまとめると、
とも表す事ができる。ここで、は、の時に1、の時に0となる関数である事を意味する。
ソフトマックス関数とシグモイド関数の関係
2変数の場合のソフトマックス関数は下記のようになる。
この式の分母分子にを掛けて整理すると、下記のように変形できる。
ここで、とおけば、下記のようなシグモイド関数になる。
以上の計算から、2変数のソフトマックス関数の入力である、を、その差分で表したものがシグモイド関数であり、シグモイド関数を多変数に拡張したものがソフトマックス関数である、ということが言える。
サンプルコード
ここまで記載した各グラフを作成するPythonのサンプルコードは下記のGitHubリポジトリで公開しています。