活性化関数、損失関数の使用方法

PyTorchにおける活性化関数および損失関数は、モデルの学習において非常に重要な役割を果たします。それぞれの使用方法と代表的な関数について詳しく説明します。


1. 活性化関数(Activation Functions)

概要

活性化関数は、ニューラルネットワークの各ニューロンの出力に非線形性を導入するために使われます。これにより、ネットワークは複雑な関数を学習可能になります。

PyTorchでの使用方法

PyTorchでは、torch.nn.functional または torch.nn モジュールを通じて活性化関数を利用できます。

よく使われる活性化関数

関数名 概要
ReLU 正の値をそのまま通し、負の値を0にする。高速かつ勾配消失が起こりにくい。
Sigmoid 出力を0〜1に変換する。確率的な出力が必要なときに使用。
Tanh 出力を-1〜1に変換する。
LeakyReLU 負の値も小さく通すことでReLUの欠点(死んだニューロン)を緩和。

使用例(2通りの書き方)

python
import torch import torch.nn as nn import torch.nn.functional as F # 方法1: nn.Moduleの中で関数オブジェクトとして使う class MyModel1(nn.Module): def __init__(self): super(MyModel1, self).__init__() self.fc1 = nn.Linear(784, 128) self.relu = nn.ReLU() # 活性化関数のインスタンス化 def forward(self, x): x = self.fc1(x) x = self.relu(x) return x # 方法2: nn.functionalで直接呼び出す class MyModel2(nn.Module): def __init__(self): super(MyModel2, self).__init__() self.fc1 = nn.Linear(784, 128) def forward(self, x): x = self.fc1(x) x = F.relu(x) # 関数として使用 return x

2. 損失関数(Loss Functions)

概要

損失関数は、モデルの出力と正解ラベルとの誤差を定量化するために使用され、誤差逆伝播の起点となります。目的関数とも呼ばれます。

PyTorchでの使用方法

損失関数もtorch.nnモジュール内に定義されており、nn.Moduleとしてインスタンス化して使用します。

よく使われる損失関数

関数名 使用例 説明
nn.MSELoss() 回帰 平均二乗誤差。連続値の予測に使う。
nn.CrossEntropyLoss() 分類 Softmax + 負の対数尤度。クラス分類に広く用いられる。
nn.BCELoss() 2値分類 シグモイド出力後に使用。
nn.BCEWithLogitsLoss() 2値分類 シグモイドを内部で適用するため、より安定。

使用例

python
# 出力と正解ラベル(例:分類) output = torch.tensor([[2.0, 1.0]], requires_grad=True) # ログits target = torch.tensor([0]) # 正解ラベル(整数) # 損失関数の定義と計算 criterion = nn.CrossEntropyLoss() loss = criterion(output, target) # 損失の逆伝播 loss.backward()

まとめ

種別 使用場所 代表的関数 用途
活性化関数 中間層 ReLU, Sigmoid, Tanh モデルに非線形性を導入
損失関数 出力層 MSELoss, CrossEntropyLoss 誤差の定量化と学習促進

必要に応じて、独自の活性化関数や損失関数を関数定義またはnn.Module継承クラスとして作成することも可能です。

生成日:2025/05/22