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 も単調増加なので、全体として単調に増加します。

xx \to -\infty では ex0e^x \to 0 となり ln(1+0)=0\ln(1 + 0) = 0 に近づくので、左側では y=0y = 0xx 軸)が漸近線です。x+x \to +\infty では 1+exex1 + e^x \approx e^x となり yln(ex)=xy \approx \ln(e^x) = x となるため、右側では直線 y=xy = x が漸近線になります。つまり左では平らに 00 へ、右では傾き 11 の直線に漸近する、なめらかに折れ曲がった形です。

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

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

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

具体的な値は次のとおりで、大きい xx ではほぼ xx に一致します。

  • x=0x = 0y=ln20.693y = \ln 2 \approx 0.693
  • x=1x = 1y=ln(1+e)1.313y = \ln(1 + e) \approx 1.313
  • x=1x = -1y=ln(1+e1)0.313y = \ln(1 + e^{-1}) \approx 0.313
  • x=5x = 5y5.007y \approx 5.007

機械学習でよく使う 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) と書き換えて数値的に安定させる工夫がよく用いられます。