y=ln(1+ex)y = \ln(1+e^x)

ソフトプラス関数 y=ln(1+ex)y = \ln(1 + e^x) のグラフ

y=ln(1+ex)y = \ln(1 + e^x)ソフトプラスと呼ばれる関数です。ex>0e^x > 0 より 1+ex>11 + e^x > 1 なので対数は必ず正になり、定義域はすべての実数、値域は y>0y > 0 です。中身 1+ex1 + e^x が単調に増え、ln\ln も単調増加なので、全体として単調に増加します。

22 本の漸近線

左右で振る舞いがまったく違います。

xx の側近似漸近線
xx \to -\inftyln(1+0)=0\ln(1 + 0) = 0y=0y = 0xx 軸)
x+x \to +\inftyln(ex)=x\ln(e^x) = xy=xy = x

左では平らに 00 へ、右では傾き 11 の直線に漸近する、なめらかに折れ曲がった形です。

導関数はシグモイド

導関数は次のようになり、これはちょうどロジスティック関数(シグモイド関数)です。

y=ex1+ex=11+exy' = \frac{e^x}{1 + e^x} = \frac{1}{1 + e^{-x}}

値は 00 から 11 のあいだをとり、xx \to -\infty00x+x \to +\infty11 に近づきます。二階導関数は正なので、グラフはつねに下に凸です。

具体的な値

xxyyxx との差
1-10.3130.3131.3131.313
000.6930.6930.6930.693
111.3131.3130.3130.313
555.0075.0070.0070.007

大きい xx ではほぼ xx に一致します。差がそのまま ln(1+ex)\ln(1 + e^{-x}) で、左右の値が入れ替わって並ぶのは yxy - xx-x での値に等しいからです。

ReLU との関係

機械学習でよく使う ReLU max(0,x)\max(0, x) は原点で折れ曲がって微分できませんが、ソフトプラスはそれをなめらかにつないだ近似で、原点付近では丸みを帯び、遠方では ReLU とほとんど重なります。ニューラルネットワークの活性化関数として、あるいは分散や個体数など必ず正になる量をパラメータ化する際に使われます。導関数がシグモイドであること、すなわちシグモイドの原始関数がソフトプラスであるという関係も、勾配計算を簡単にしてくれます。

数値計算の工夫

ln(1+ex)\ln(1 + e^x) をそのまま計算すると、xx が大きいときに exe^x があふれてしまいます。実装では次の形に書き換えて数値的に安定させる工夫がよく用いられます。

max(0,x)+ln ⁣(1+ex)\max(0, x) + \ln\!\left( 1 + e^{-|x|} \right)

指数の肩がつねに 00 以下になるので、あふれることがありません。