はじめに
この資料は、PyTorchの基本的な使い方や機能、深層学習の基礎的な概念について学べる教材です。PyTorchを使った機械学習の実装や最適化アルゴリズムの理解を深めることを目的としています。
1. PyTorchの基本
PyTorchの初歩
以下はPyTorchを用いた簡単な計算例です。
import torch
a = torch.tensor(1)
b = torch.tensor(2)
x = a + b
print(x) # tensor(3)
PyTorch Tensor
PyTorchのTensorはNumPyのndarray
と似た配列形式であり、以下の方法で作成できます。
import numpy as np
import torch
# 同じTensorを生成する複数の方法
w1 = torch.tensor(np.zeros([2, 1]))
w2 = torch.zeros([2, 1])
w3 = torch.from_numpy(np.zeros([2, 1]))
NumPy関数と同名の関数やメソッドが多数用意されています。
2. 計算グラフと勾配計算
計算グラフの構築
以下は、計算グラフを用いて勾配を計算する例です。
w = torch.rand([5, 1], requires_grad=True)
x = torch.rand([1, 5], requires_grad=True)
b = torch.rand(1, requires_grad=True)
y = (w.mm(x) + b).sum()
y.backward() # 勾配の逆伝播
print(x.grad) # 勾配の出力
3. GPUを利用した計算の高速化
PyTorchはGPUを容易に利用できます。
x = torch.rand([2, 5])
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
x = x.to(device)
print(x) # GPU上のTensor
4. 深層学習の基本
層の構造
深層学習は「関数の合成」によって構成され、層を重ねるごとに表現力が高まります。以下のような活性化関数が一般的です。
- シグモイド関数
- ハイパボリックタンジェント
- ReLU (Rectified Linear Unit)
- Leaky ReLU
5. 勾配消失問題と対策
勾配消失問題
層が深くなることで誤差逆伝播がうまくいかなくなる現象です。
解決方法
- 勾配消失しにくい活性化関数(例:ReLU、Leaky ReLU)を使用
- 学習率や重みの初期化の工夫
6. オーバーフィッティング問題と対策
問題点
モデルが訓練データに適合しすぎることで、汎化性能が低下します。
主な対策
- 正則化 (Regularization): L1ノルムやL2ノルムを使用
- ドロップアウト (Dropout): ランダムにニューロンを無効化
- 早期終了 (Early Stopping): 検証誤差が上昇し始めた時点で学習を停止
- ラベル平滑化 (Label Smoothing): 出力値にノイズを加える
7. 最適化アルゴリズム
代表的なアルゴリズム
- Adagrad: 勾配の履歴を利用して学習率を調整
- Adadelta: 学習率を設定不要にし、履歴を移動平均化
- RMSProp: Adadeltaの簡易版
- Adam: AdagradとRMSPropを組み合わせた最適化手法
Adamの疑似コード
# 初期化
m = 0
v = 0
# 更新
m = beta1 * m + (1 - beta1) * g
v = beta2 * v + (1 - beta2) * g * g
m_hat = m / (1 - beta1 ** t)
v_hat = v / (1 - beta2 ** t)
theta -= learning_rate * m_hat / (sqrt(v_hat) + epsilon)
8. まとめ
- PyTorchは柔軟かつ強力な深層学習フレームワークです。
- 勾配計算やGPU利用、各種最適化手法が簡単に実装できます。
- 勾配消失問題やオーバーフィッティング問題を克服するための技術も重要です。
ご要望に応じてさらに詳細な解説を追加できますので、ぜひお知らせください!
コメント