0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

深層学習を学ぶ - 活性化関数編

Posted at

1.この記事で分かる事

  • 活性化関数とは
  • よく出てくる活性化関数の数式及びその特徴や使用目的と、Pythonによるスクラッチ実装
    • ステップ関数
    • シグモイド関数
    • ソフトマックス関数
    • tanh関数
    • ReLU関数

2.活性化関数とは

活性化関数の特徴は、①非線形な関数で、②微分可能な関数という事が特徴。
①については、NN内において非線形な変換を行うため。
②については、勾配計算の際に微分可能である必要がある。

3.よく出てくる活性化関数

ステップ関数(階段回数)

特徴

  • 標準形
step(x)=\left\{\begin{array}{l1}
1&(a \geq 0)\\
0&(a \lt 0)
\end{array}\right.\\
  • 閾値(上記のコードではa)以上なら1
  • 閾値未満なら0という非常にシンプルな関数
  • 閾値 aはハイパーパラメータ

深層学習における問題点

  • 微分できない
  • 閾値を超えないと常に0なので、勾配消失が起こりがち
step 関数
def step(a,x):
   if x >= a: #閾値a以上なら、1を返す
      return 1
   else:      #他は全て0
      return 0

step関数の図
image.png

シグモイド関数

特徴

  • 標準形
sigmoid(x)=\frac{1}{1 + e^{-ax}}
  • 微分形
sigmoid(x)をf(x)としたとき、f'(x)= (1-f(x))f(x)となる
  • 値域が0~1の範囲で、確率の出力に類似している
  • a は基本的に1のハイパーパラメータ

深層学習における問題点

  • 勾配消失が起こりやすい事
sigmoid 関数
import numpy as np

def sigmoid(a,x):#以下のグラフではa=1としている
    return 1 / (1 + np.exe(-a*x))

image.png

補足

tanh関数

特徴

  • 標準形
tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
  • 微分形
tanh(x)をf(x)としたとき、f(x)'= (1-f(x))^2となる
  • 値域が-1~1の範囲。
  • a は基本的に1のハイパーパラメータ

深層学習における問題点

  • 勾配消失が起こりやすい事
tanh 関数
import numpy as np

def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

image.png

softmax関数

特徴

  • 標準形
y_i=\frac{e^{x_i}}{\sum_{k=1}^{n}e^{x_k}}
  • 微分形
\frac{∂y_i }{∂x_j }=\left\{\begin{array}{l1}
y_i(1-y_j)&(i=j)\\
-y_jy_i&(i\neq j)
\end{array}\right.\\
  • 値域が0~1の範囲

深層学習における問題点

  • 勾配消失が起こりやすい事
  • オーバーフロー対策が必要になる場合がある
softmax 関数
import numpy as np

def softmax(x):
    x = x.T
    x = x - np.max(x, axis=0) #オーバーフロー対策で最大値を引いている。
    x = np.exp(x) / np.sum(np.exp(x), axis=0)
    return x.T

x = np.array([1, 2, 3, 4, 5, 6]) として、上記の関数を適用すると以下の図のようになる。
image.png

補足

モデルの蒸留に使われる温度付きソフトマックス関数(元の式のexpの乗数の分母に、温度パラメータTを付けたソフトマックス関数のこと)→詳しくはこちらのページ

ReLU関数

特徴

  • 0より上の入力をそのまま扱うことで、上記の関数の勾配消失問題を解決したこと

深層学習における問題点

  • 0以下の部分において、勾配消失が起こりやすい事
ReLU(x) = max(0,x)
ReLU
import numpy as np

def ReLU(x):
  return np.maximum(0,x)

image.png

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?