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

AI・機械学習の用語辞典:[活性化関数]ELU(Exponential Linear Unit)とは?

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

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

連載目次

用語解説

 AI/機械学習のニューラルネットワークにおけるELUExponential Linear Unit)とは、関数への入力値が0以下の場合には出力値が「0.0」〜「」(αの値は基本的に1.0、つまり「-1.0」)の間の値になり、入力値が0より上の場合には出力値が入力値と同じ値となる関数である。

 名前から推測できると思うが、ReLUの拡張版である。「Exponential(指数関数的)」という言葉の通り、ReLUでは入力値が0以下の場合は出力値が常に0だが、ELUでは入力値が0以下の場合、(オイラー数を底とする指数関数exを内部で活用することで)0以下の値を返す。これにより、ReLUと同様に勾配消失問題を回避しつつ、Leaky ReLUと同様にdying ReLU問題も解消している。

 図1は、ReLUとELUの違いを示している。オレンジ色の線の左側が0.0から-1.0に向けて下がっている点が異なる。

図1 「ELU」のグラフ 図1 「ELU」のグラフ

 現在のディープニューラルネットワークでは、隠れ層(中間層)の活性化関数としては、ReLUを使うのが一般的である。しかし、より良い結果を求めて、ReLU以外にもさまざまな代替の活性化関数が考案されてきている。ReLUそのものを拡張したLeaky ReLUや、その拡張版であるParametric ReLUPReLUなどがある。「さらにそれらを改善したもの」として出てきたのが、(本稿で解説する)ELUである。ちなみに、このELUをスケールさせたSELUScaled Exponential Linear Unit)という活性化関数も考案されている(後日解説)。

 まずは、ReLUを試した後、より良い精度を求めてELUに置き換えて検証してみる、といった使い方が考えられる。2016年(初出:2015年)の論文「arXiv:1511.07289v5 [cs.LG]」や「arXiv:1511.07289 [cs.LG]」によると、画像認識タスクにおいてReLU/Leaky ReLU/PReLUよりも良い精度になったことが示されている。

 主要ライブラリでは、次の関数/クラスで定義されている(いずれにも引数alphaα値を指定できる。指定しない場合のデフォルト値は1.0となっている)。

定義と数式

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

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

 x ≦ 0の場合は、f(x)=α × (ex−1)となり(αは基本的に1.0)、
 x > 0の場合は、f(x)=xとなる。

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

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

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

Pythonコード

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

import numpy as np

def elu(x, alpha=1.0):
  return np.where(x > 0.0, x, alpha * (np.exp(x) - 1))

リスト1 ELUのPythonコード例

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

 x > 0.0は「入力値が0より上か、そうではないか(=0以下か)」という条件を意味する。
 その条件がTrueのときは、戻り値としてxを返す。
 また、その条件がFalseのときは、戻り値としてα倍の(オイラー数を底とする指数関数−1)(=alpha * (np.exp(x) - 1))を返す。np.exp(x)というコードが、e(オイラー数)を底とする指数関数exponential function)であるexを表現している。

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

# リスト1のコードを先に記述する必要がある

def der_elu(x, alpha=1.0):
  return np.where(x > 0.0, 1.0, elu(x, alpha) + alpha)

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

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

AI・機械学習の用語辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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