PythonでのReLu関数(活性化関数)の理論や実装、自作について解説する

スポンサーリンク

今回は、PythonのReLu関数について、詳しく解説していきます。

こちらもご覧ください。


スポンサーリンク

ReLu関数とは?- Crispの概要

Pythonは畳み込み画像や機械学習モデルで構築された学習モデルを改良する上で重要な役割を担っている。

Pythonが提供する組み込みモジュールや関数により、ディープラーニングモデルの構築は容易になり、多くの恩恵を受けています。

Pythonは、深層学習モデルの計算効率を向上させるために、ReLu関数(Rectified Linear Activation Functionとしても知られています)を導入しました。

ReLu関数は、モデル結果の状態を検出して提示することができ、モデルの計算効率も向上させることができます。

ReLu活性化関数は、入力が負の場合、0を返す。

そうでない場合は1を返す。

def ReLu(val):
    return max(0.0,val)
val = 1.0
print(ReLu(val))
val1 = -1.0
print(ReLu(val1))

ReLu関数を理解した上で、Pythonで実装してみましょう。


PythonによるReLu関数の基本的な実装

まず、以下のようにカスタマイズしたReLu関数を作成します。

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

ここでは、max()関数を利用し、渡された要素を0.0と比較して正か負かを結論づける、カスタマイズされたユーザー定義関数を作成しました。

valは正の数であるため、1.0を返します。

変数val1は負の数なので、0.0が返されます。

1.0
0.0

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

f(num)= 0.001num, num<0
    = num,   num>=0

ReLu関数の勾配値

マイニングやプロセッシングのためのデータを扱う際、ReLu関数の微分を計算しようとすると、0より小さい値、つまり負の値では勾配が0となり、学習関数の重みとバイアスが適宜更新されないことになる。

このことは、モデルの学習において問題を引き起こす可能性がある。

このようなReLu関数の制限を克服するために、Leaky ReLu関数について説明します。


Leaky ReLu機能

前述したように、ReLu関数を通過する負の値に対する勾配の問題を解決するために、Leaky ReLu関数は基本的に負の入力スコアに定数の小さな線形成分を追加するものです。

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

上記のように、この例では負の値に定数(0.001)を掛けている。

さて、上記のLeaky ReLu関数の勾配を見ると、負の数の勾配スコアが0でないように見えるが、これは学習関数の重みが適切に更新されたことを示している。

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

-0.001

結果は以下の通りです。

ReLu function
ReLu function

まとめ

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

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

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

では、また。

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