連載
» 2020年05月15日 05時00分 公開

AI・機械学習の用語辞典:[活性化関数]Leaky ReLU(Leaky Rectified Linear Unit)/LReLUとは?

用語「Leaky ReLU(Leaky Rectified Linear Unit)/LReLU」について説明。「0」を基点として、入力値が0より下なら「入力値とα倍した値」(α倍は基本的に0.01倍)、0以上なら「入力値と同じ値」を返す、ニューラルネットワークの活性化関数を指す。ReLUの拡張版。

[一色政彦,デジタルアドバンテージ]
「AI・機械学習の用語辞典」のインデックス

連載目次

用語解説

 AI/機械学習のニューラルネットワークにおけるLeaky ReLULeaky Rectified Linear UnitLReLU)とは、関数への入力値が0より下の場合には出力値が入力値をα倍した値αの値は基本的に0.01)、入力値が0以上の場合には出力値が入力値と同じ値となる関数である。

 名前の通り、ReLUの拡張版である。「Leaky(漏れている)」という言葉の通り、ReLUでは入力値が0以下の場合は出力値が常に0だが、Leaky ReLUでは入力値が0より下の場合、出力値は下に漏れ出す(leak)ように0より下の値を返す。

 図1は、ReLUとLeaky ReLUの違いを示している。オレンジ色の線の左側がわずかに下がっている点が異なる。これによりLeaky ReLUでは、入力値が0より下でも出力値は0にはならない。つまり、入力値が0より下であっても「勾配が発生する」という特徴があるのだ。一方のReLUの場合、入力値が0以下では勾配がなくなるので、場合によっては学習が進みにくくなることがある。この問題は「dying ReLU」(死にかけているReLU)と呼ばれている。Leaky ReLUはこの問題を解消する。

図1 「Leaky ReLU」のグラフ 図1 「Leaky ReLU」のグラフ

 現在のディープニューラルネットワークでは、隠れ層(中間層)の活性化関数としては、ReLUを使うのが一般的である。しかし、より良い結果を求めて、ReLU以外にもさまざまな代替の活性化関数が考案されてきている。ReLUそのものを拡張したのが、(本稿で解説する)Leaky ReLUである。

 まずは、ReLUを試した後、より良い精度を求めてLeaky ReLUに置き換えて検証してみる、といった使い方が考えられる。2013年の論文「Rectifier Nonlinearities Improve Neural Network Acoustic Models」によると、音声認識タスクにおいてReLUよりも良い精度になったことが示されている。

 ただしLeaky ReLUは、(冒頭でも説明したように)αの値(基本的に0.01)を自分で事前に決めて指定する必要がある。「どのようなα値が最適か」は試行錯誤した方が良い精度につながるだろう。そこでα値をパラメーター化して学習によって決定するParametric ReLUPReLU)という活性化関数も考案されている。

 主要ライブラリでは、次の関数/クラスで定義されている。

定義と数式

 冒頭では文章により説明したが、厳密に数式で表現すると次のようになる。

 xが入力データで、f(x)が出力結果である。

 x < 0の場合は、f(x)=α * xとなり(αは基本的に0.01)、
 x ≧ 0の場合は、f(x)=xとなる。

 上記の数式の導関数Derivative function:微分係数の関数)を求めると、次のようになる。

 Leaky ReLUはReLU関数と同様に、非連続な関数であり、数学的にはx=0の地点では微分ができない

 Leaky ReLUの導関数をニューラルネットワーク内で使うために、便宜的x=0を微分係数1の方に含めることにする。これにより、次のような導関数が求まる。

Pythonコード

 上記のLeaky ReLUの数式をPythonコードの関数にするとリスト1のようになる。

import numpy as np

def lrelu(x, alpha=0.01):
  return np.where(x >= 0.0, x, alpha * x)

リスト1 Leaky ReLUのPythonコード例

 条件分岐(np.where)をコンパクトに記述するために、数値計算ライブラリ「NumPy」を使用した。

 x >= 0.0は「入力値が0以上か、そうではないか(=0より下か)」という条件を意味する。
 その条件がTrueのときは、戻り値としてxを返す。
 また、その条件がFalseのときは、戻り値としてα倍のx(=alpha * x)を返す。

 Leaky ReLUの導関数(derivative function)のPythonコードも示しておくと、リスト2のようになる。

import numpy as np

def der_lrelu(x, alpha=0.01):
  return np.where(x >= 0.0, 1.0, alpha)

リスト2 Leaky ReLUの「導関数」のPythonコード例

「AI・機械学習の用語辞典」のインデックス

AI・機械学習の用語辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。