다음과 같은 함수를 softplus라고 하며, ANN에서 activation function으로 사용됨.
$$\begin{aligned}\zeta(x)&=\log(1+e^x)\\&=\log(1+e^{-|x|})+\max(0,x)\end{aligned}$$
- exponential function과 Logarithmic function을 더한 함수
(즉, Transcendental function의 하나임). y=max(x,0)
(ReLU)와 매우 비슷하나 $x=0$ 근처에서 값이 보다 부드럽게 변함 (미분 가능)- 위 식에서 $\log(1+e^x)$는 정의이고,
실제 ML등에서 사용되는 건 $\log(1+e^{-|x|})+\max(0,x)$ 임.- $x$가 100정도만 되어도 정의식의 경우 numerical issue로 인해
infinity
가 됨. - 아래의 equivalent expression은 이런 문제가 없음.
- 아래 증명 확인.
- $x$가 100정도만 되어도 정의식의 경우 numerical issue로 인해
- $z\ge0$인 경우, $\text{softplus}(-|z|)=\text{softplus}(-z)$가 성립함. (5) rightside에 따라 $z$를 더해주어야 함.
- $z<0$인 경우, $\text{softplus}(-|z|)=\text{softplus}(z)$가 성립함. 이 경우엔 0을 더해준다.
Numpy (그래프)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
x = np.linspace(-10,10,100)
y = np.log1p(np.exp(x))
plt.plot(x,y)
plt.title('softplus function')
plt.xlabel(r'$x$')
plt.ylabel(r'$\log(1+e^x)$')
plt.show()
TensorFlow
tf.keras.activations.softplus()
, tf.nn.softplus()
로 제공됨.
다음과 같이 직접 custom activation function으로 구현할 수도 있음.
def my_softplus_us(z):
return tf.math.log(1.0 + tf.exp(z))
def my_softplus_stable(z):
return tf.math.log(1 + tf.exp(-tf.abs(z))) + tf.maximum(0., z)
Reference
https://learning.oreilly.com/library/view/hands-on-machine-learning/9781098125967/
12장에서 custom activation 의 예로 softplus 소개.
'... > Math' 카테고리의 다른 글
[Statistics] Central Limit Theorem (0) | 2022.03.31 |
---|---|
[Statistics] Moment (Probability Moment) (0) | 2022.03.31 |
[Math] Vector (2) : Vector Function (0) | 2022.03.28 |
[Math] Vector (1) (0) | 2022.03.28 |
Function (함수) : 간략 정의 (0) | 2021.09.14 |