用語「ソフトプラス関数」について説明。途中から右肩上がりになる滑らかな曲線で、「0」〜「∞」の間の値(入力値が0以下なら「0」に近い数値、0より上なら「入力値と同じ値」に近い数値)を返す、ニューラルネットワークの活性化関数を指す。
AI/機械学習のニューラルネットワークにおけるソフトプラス関数(Softplus関数)とは、あらゆる入力値を0.0〜∞という正の数値に変換して出力する関数である。
図1を見ると分かるように、ReLUという活性化関数にやや似ており、途中から右肩上がりになる。ただし、関数への入力値が0付近では、出力値が0にはならない点が異なるので注意してほしい。ソフトプラス関数では、入力値が-3.0以下など小さくなればなるほど出力値が0に近づいていき、入力値が3.0以上など大きくなればなるほど出力値が入力値と同じ値に近づいていくのが特徴的だ。
ニューラルネットワークの隠れ層(中間層)の活性化関数としては、「バックプロパゲーション」(後日解説)が登場してからはシグモイド関数やtanh関数が使われ、その後、ReLUが登場する前までは(本稿で解説する)「ソフトプラス関数」が用いられることもあった。現在のディープニューラルネットワークでは、ReLUを使うのが一般的である。
主要ライブラリでは、次の関数/クラスで定義されている。
冒頭では文章により説明したが、厳密に数式で表現しておこう。ソフトプラス関数の数式は以下の通りだ。log(eを底とする自然対数)を使うのが特徴的である。
e(オイラー数=ネイピア数)や、それに対応するnp.exp(x)という後述のコードについては、「シグモイド関数」で説明しているので、詳しくはそちらを参照してほしい。
上記の数式の導関数を求めると、次の式になる。これは標準シグモイド(Sigmoid)関数と同じ式である。
上記のソフトプラス関数の数式をPythonコードの関数にするとリスト1のようになる。なお、log(自然対数)やオイラー数に関して計算するため、ライブラリ「NumPy」をインポートして使った。
import numpy as np
def softplus(x):
return np.log(1.0 + np.exp(x))
ソフトプラス関数の導関数(derivative function)のPythonコードも示しておくと、リスト2のようになる。
import numpy as np
def der_softplus(x):
return 1.0 / (1.0 + np.exp(-x))
Copyright© Digital Advantage Corp. All Rights Reserved.