Note by Yoshikawa

Love Technology and Art

ニューラルネットの活性化関数

STEP


f(x) = \begin{cases}
    1~~~~  (x > α) \newline
    0~~~~  (x \leq α )
\end{cases}

特徴

コード

def step(x):
  if x > 0:
    return 1
  else:
    return 0

プロット

f:id:yoshikawat64m:20190114202352p:plain

relu

{
f(x) =
 \begin{cases}
x~~~~  (x > 0) \newline
0~~~~  (x \leq 0 )
\end{cases}
}

特徴

  • よく使われる
  • シンプル
  • 勾配消失が防げる
  • 計算コストが低い
  • 性能がいい

 コード

def relu(x):
  return max(0,x)

プロット

f:id:yoshikawat64m:20190114202414p:plain

Leaky Relu

{
f(x) =
 \begin{cases}
x~~~~  (x > 0) \newline
αx~~~~  (x \leq 0 )
\end{cases}
}

特徴

  • Reluの0以下の場合に0にせず、傾斜をつけて出力

コード

def leaky_relu(x, α):
  if x>0:
    return x
  else:
    return α*x

プロット

f:id:yoshikawat64m:20190114202434p:plain

Sigmoid

 {
f(x) = \cfrac{1}{1+e^{-x}}
}

特徴

  • 0から1に正規化する

コード

def sigmoid(x):
  return 1/(1 + e(-x))

プロット

f:id:yoshikawat64m:20190114202447p:plain

Tahn

 {
f(x) = \cfrac{1- e^{-2x}}{1+ e^{-2x}}
}

特徴

  • -1から1で正規化

コード

def tanh(x):
  return (1-exp(-2*x))/(1+exp(-2*x))

プロット

f:id:yoshikawat64m:20190114202500p:plain

Hard Tahn

{
f(x) =
 \begin{cases}
1~~~~  (x > 1) \\
x~~~~  (-1 \leq x  \leq 1) \\
-1~~~~ (x \leq -1)
\end{cases}
}

 f(x) = max(-1, min(1,x))

特徴

  • 0から1の範囲はそのまま
  • 1以上は1,0以下は0、

コード

def hard_tanh(x):
  if x > 1:
    return 1
  elif x < -1: 
    return -1
  else:
    return x

プロット

f:id:yoshikawat64m:20190114202620p:plain

Softplus

{
f(x) = log(1+e^{-x})
}

特徴

  • あまり使われない

コード

def softplus(x):
  return log(1+exp(x))

プロット

f:id:yoshikawat64m:20190114202648p:plain

Softplus

式(例:ガウス関数)

{
f(x) = e^{-α(β-x)^2}
}

特徴

  • あまり使われない
  • ある値を中心に左右対称
  • 放射基底関数ともいう
  • ガウス関数が代表的

コード

def rbf_gaussian(x, α, β):
  return exp(-α*(β - x)**2)

プロット

f:id:yoshikawat64m:20190114202715p:plain

プロッまとめ

f:id:yoshikawat64m:20190115211931p:plain