今回は、Pythonで活性化関数REFUの実装について詳しく説明します。
活性化関数 ReLuとは何か?
活性化関数ReLuは、入力が負の場合、0を返し、そうでなければ、1を返す関数です。
Pythonには、深層学習モデルを簡単にする組み込みモジュールや関数が多くありますが、ReLu関数(Rectified Linear Activation Function)は、その中でも特に重要な関数です。
ReLu関数は、モデル結果の状態を検出して提示することができ、モデルの計算効率も向上させます。
PythonによるReLu関数の基本的な実装方法
まず、以下のようにReLu関数を作成します。
ここでは、max()関数を利用し、渡された要素を 0.0 と比較して正か負かを決定する、カスタマイズされたユーザー定義関数を作ります。
以下の例では、valは正の数なので、1.0を返します。
逆に、変数val1は負の数なので、0.0が返されます。
def ReLu(val):
return max(0.0,val)
val = 1.0
print(ReLu(val))
val1 =- 1.0
print(ReLu(val1))
結果は、以下の通りになります。
1.0
0.0
ReLu関数の勾配値
マイニングやプロセッシングのためのデータを扱う場合、ReLu関数の微分を計算しようとすると、0より小さい値、つまり負の値では勾配が0になります。
これは、学習関数の重みとバイアスが適宜に更新されないことを意味します。
このため、モデルの学習に問題が生じる可能性があります。
このようなReLu関数の制限を克服するために、Leaky ReLu関数について説明します。
リークReLu機能
前述のように、ReLu関数を通過する負の値に対する勾配の問題を克服するために、Leaky ReLu関数は、基本的に負の入力スコアに定数の小さな線形成分を追加していきます。
f(num)= 0.001num , num = 0
以上の例のように、この例では負の数に定数(0.001)を掛けています。
さて、上記のLeaky ReLu関数の勾配を見ると、負の数の勾配の値が0でないように見えますが、これは学習関数の重みが適切に更新された事を示しています。
def ReLu(a):
if a > 0:
return a
else:
return 0.001 * a
a = -1.0
print(ReLu(a))
結果は、以下の通りになります。
-0.001