【Python】ディープラーニングの活性化関数とは?代表的な種類と使い分けを解説!

  • URLをコピーしました!

今回は、ニューラルネットワークの基本である「活性化関数」を紹介します。

代表的な活性化関数について、概要と、Pythonで実装する方法を説明していきます。

また、紹介した活性化関数はどういった用途で使い分けるか、整理していきます。

動画で詳しく学習したい方はこちらもおすすめ

目次

活性化関数とは

活性化関数(activation function)は、ニューラルネットワークの各層の入力の総和を出力に変換する関数のことです。

入力の総和がどのように「活性化」するかを意味しています。

ニューラルネットワークは基本的に「入力 → 重み付き和 → 活性化関数 → 出力」という流れで計算されます。

そのため、この活性化関数がニューラルネットワークでは重要な役割をしているのです。

代表的な活性化関数

活性化関数には、いくつか種類があります。

代表的な活性化関数は以下の通りです。

  • シグモイド関数
  • ReLU
  • ソフトマックス関数

以降でそれぞれの活性化関数について詳しく紹介していきます。

シグモイド関数

シグモイド関数は、ニューラルネットワークでよく使用される活性化関数のひとつです。

以下の式で表されます。

$$ h(x) = \frac{1}{1 + e^{-x}} $$

シグモイド関数の特徴は以下です。

  • 出力範囲:0〜1
  • 特徴:勾配消失問題が起きやすい

Python実践 シグモイド関数

シグモイド関数をPythonで実装する方法を紹介します。

サンプルコードは以下の通りです。

関数の戻り値に先ほどのシグモイド関数の計算式を実装しています。

import numpy as np
import matplotlib.pylab as plt

# シグモイド関数の定義
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# シグモイド関数の演算
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

# シグモイド関数をプロット
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

実行結果

図から出力(縦軸)が0〜1の範囲であることがわかります

ReLU

ReLUは、最もよく使用される活性化関数です。

入力が0を超えていればそのまま出力し、0以下であれば0を出力します。

以下計算式で表されます。

$$ h(x) = \begin{cases}x & x > 0 \\0 & x \leq 0\end{cases} $$

ReLUの特徴は以下の通りです。

  • 出力範囲:0〜∞
  • 特徴:勾配消失問題が起きにくい

Python実践 ReLU

ReLUをPythonで実装する方法を紹介します。

サンプルコードは以下の通りです。

np.maximum()を使用し、ReLUを実現しています。

import numpy as np
import matplotlib.pylab as plt

# ReLUの定義
def relu(x):
    return np.maximum(0, x)

# ReLUの演算
x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)

# ReLUをプロット
plt.plot(x, y)
plt.ylim(-1, 5)
plt.show()

実行結果

図から出力(縦軸)が0から∞であることがわかります。

ソフトマックス関数

ソフトマックス関数は、出力層で使用される活性化関数です。

以下の式で表されます。

$$ y_i(x) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} $$

ソフトマックス関数の特徴は以下の通りです。

  • 出力範囲:出力の総和が1
  • 特徴:出力層で使用される

Python実践 ソフトマックス関数

ソフトマックス関数をPythonで実装する方法を紹介します。

サンプルコードは以下の通りです。

import numpy as np

# ソフトマックス関数の定義
def softmax(x):
    return np.exp(x) / np.sum(np.exp(x))

# ソフトマックス関数の演算
x = np.array([1.0, 2.0, 3.0])
y = softmax(x)

# 出力値の表示
print(y)

実行結果

[0.09003057 0.24472847 0.66524096]

活性化関数の使い分け

活性化関数は、ニューラルネットワークの隠れ層や出力層で使用されます。

また、出力層でも対応する問題の種類(分類 or 回帰)によっても使い分けが必要です。

これまで紹介した活性化関数の使い分けを整理した表です。

用途使用される関数
隠れ層シグモイド関数、ReLU
出力(分類)ソフトマックス関数
出力(回帰)恒等関数

恒等関数は、今回特に解説していませんが、入力をそのまま出力する関数のことです。

まとめ

ニューラルネットワークの基本である「活性化関数」について紹介しました。

以下の代表的な活性化関数の概要とPythonで実装する方法を解説しました。

numpy を使用して、簡単に実装できたと思います。

  • シグモイド関数
  • ReLU
  • ソフトマックス関数

ここまで読んでくださりありがとうございます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次