Pythonでの活性化関数の実装・自作方法4つ

スポンサーリンク

今回は、Pythonのアクティベーション関数について、詳しく解説します。

では、さっそく始めましょう!

スポンサーリンク

アクティベーション関数とは?

ニューラルネットワークや畳み込みモデルによる深層学習の世界では、データのモデリングや分析においてPythonが重要な役割を担っています。

アクティベーション関数とは、ニューラルネットワークモデルの出力を制御することができる数学的なベースモデルです。

つまり、モデルの有効化に貢献しているニューロンを、内部にとどめておくか、それとも除去(発射)するか、分析・推定するのに役立ちます。

主な活性化関数

  1. ReLu関数
  2. リークReLu関数
  3. シグモイド機能
  4. ソフトマックス関数
  5. 一次関数 など

活性化関数について理解したところで、次に上記の活性化関数について見ていきましょう。

1. ReLu関数

ReLu関数はActivation関数の一種で、ニューラルネットワークの畳み込み画像を即興で作成することが可能です。

モデルの結果からニューラルネットワークの状態を検出します。

ReLu関数は、入力が負の場合、0を返すとします。

そうでなければ、非負の入力に対して、1を返す。

例えば、以下の様になります。

ここでは、Pythonのmax()関数を用いて、ReLu条件を植え付けるためのユーザ定義関数を実装しています。

def ReLu(ar):
    return max(0.0,ar)
ar = 1.0
print(ReLu(ar))
ar1= -1.0
print(ReLu(ar1))

結果は以下の通りです。

1.0
0.0

2. ReLu関数のリーク

ReLu関数に渡された非ゼロ入力の勾配スコア、すなわち微分値がゼロであることが判明した。

これは基本的に、学習関数によって重みが適切に更新されていないことを表しています。

このReLu関数の勾配問題を克服するために、Leaky ReLu関数を紹介します。

Leaky ReLu関数は、関数に渡される負の(0でない)入力重みに小さな線形成分(定数値)を付加するものです。

これにより、非ゼロの入力重みに対する勾配スコアは非ゼロとなる。

例えば、以下の様になります。

def ReLu(x):
  if x>0 :
    return x
  else :
    return 0.001*x
 
x = -1.0
print(ReLu(x))

結果は、以下の通りになります。

-0.001

3. シグモイド関数

シグモイド活性化関数は、次のシグモイドの数式に基づくものです。

import numpy as np
def sigmoid(num):
 return 1/(1 + np.exp(-num))
num = -1.0
print(sigmoid(num))

分母は常に1より大きいので、この活性化関数の出力は常に0と1の間になります。

例えば、以下の様になります。

0.2689414213699951

結果は以下の通りです。

Sigmoid formula
Sigmoid formula

4. ソフトマックス関数

ソフトマックス活性化関数は、数値データ変数のベクトルを入力とし、そのデータを正規化する数学的モデルと呼ぶことができる。

つまり、各データ値の確率がベクトル内の各値のスケールに比例する確率分布に正規化(データ値のスケーリング)するのです。

その結果、すべてのデータ値は0〜1の範囲になります。

また、データ値が確率として解釈されるため、すべてのデータ値の合計は1になります。

まとめ

ここまでで、このトピックは終了です。

何か疑問があれば、お気軽にコメントください。

Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。

タイトルとURLをコピーしました