備忘録_活性化関数

備忘録_活性化関数

ステップ関数(階段関数)

入力が0をこえたら1を出力し、それ以外は0を出力する関数である。

     \[ h(x) = \begin{cases} 0 & (x \leqq 0) \\ 1 & (x > 0) \end{cases} \]

ステップ関数をグラフで表すと。。。

ステップ関数をグラフで表すプログラム

import numpy as np
import matplotlib.pylab as plt


def step_function(x):
    y = x > 0
    return y.astype(np.int)


x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)  # y軸の範囲を指定

np.arange(-5.0,5.0,0.1)は-5.0から5.0までの範囲を0.1刻みでNumPy配列の生成をする。

シグモイド関数

     \[ h(x) = \frac{1}{1+exp(-x)} \]

exp(-x)は\(e^{-2}\)を意味する。eはネイピア数と呼ばれるもので2.7182の実数を表す。ネイピア数についてはここがわかりやすく書いてある。

シグモイド関数をグラフで表すと。。。

シグモイド関数をグラフで表すプログラム

import numpy as np
import matplotlib.pylab as plt


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)  # y軸の範囲を指定
plt.show()

ステップ関数とシグモイド関数の比較

  • 「滑らかさ」
    シグモイド関数は滑らかな曲線であり、入力に対して連続的に出力が変化する。一方、ステップ関数は0を境に急に出力を変える。このシグモイド関数の滑らかさが、ニューラルネットワークの学習において重要な意味を持つ。
  • 「返す値」
    ステップ関数が0か1のどちらかの値しか返さないのに対して、シグモイド関数は実数を返すという点も返すという点が異なる。つまり、パーセプトロンではニューロン間を0か1の二値の信号が流れていたのに対して、ニューラルネットワークでは連続的な実数値の信号が流れる。
  • 「形」
    ステップ関数とシグモイド関数では、「滑らかさ」という点では異なるが、大きな視点で見ると同じような形をしていることがわかる。実際、両者とも入力が小さいときに出力は0に近く、入力が大きくになるに従い出力が1に近づくという構造をしている。つまり、ステップ関数とシグモイド関数は入力信号が重要な情報であれば大きな値を出力し、入力信号が重要でなければ小さな値を出力するのです。また、どんなに入力信号の値が小さくても、またどんなに入力信号の値が大きくても、出力信号の値を0から1の間に押し込めることも共通してる。
  • 「非線形関数」
    両者ともに非線形関数である。シグモイド関数は曲線、ステップ関数は階段のような折れ曲がった直線で表され、ともに非線形な関数に分類される。

ニューラルネットワークでは活性化関数に非線形関数を用いる必要がある。線形関数を用いると、ニューラルネットワークで層を深くすることの意味が無くなってしまうからである。

ReLu関数

シグモイド関数はニューラルネットワークの歴史において古くから利用されてきたが、最近ではReLUという関数が主に用いられる。ReLUは、入力が0を超えていれば、その入力をそのまま出力し、0以下ならば0を出力する関数である。

     \[ h(x) = \begin{cases} x & (x > 0) \\ 0 & (x \leqq 0) \end{cases} \]

ReLu関数をグラフで表すと。。。

ReLu関数をグラフで表すプログラム

import numpy as np
import matplotlib.pylab as plt


def relu(x):
    return np.maximum(0, x)


x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-1, 5)  # y軸の範囲を指定
plt.show()

メモ

PyCharmからプログラムを実行した際、下記メッセージが出力されグラフが表示されないという症状に出会いました。ネットに下記のような情報がありましたが、本当の原因はわかりませんでした。(あまり、追ってません。)今回はプロジェクト作成の際、Interpreter設定をExisting interpreterから「C:\ProgramData\Anaconda3\python.exe」で設定したところグラフの表示が出来ました。

ネットにあった考えられる原因

1) OSのバージョン等がインストールされているQTに対応していない
2) 何らかの原因でQTだけインストール時のパス等の自動設定がされていない

出力メッセージ
This application failed to start because it could not find or load the Qt platform plugin “windows”in “”.
Reinstalling the application may fix this problem.