Hello there, ('ω')ノ
🎯 はじめに:ディープラーニングとは?
ディープラーニング(Deep Learning) とは、ニューラルネットワーク(NN) を用いて、画像認識・自然言語処理・音声認識などの複雑なタスクを自動的に学習するAI技術です。
✅ ポイント:
- 階層的な学習構造: 入力層 → 隠れ層 → 出力層の多層構造
- 自己学習能力: 大量のデータから特徴量を自動的に抽出
- 幅広い応用分野: 自動運転、顔認識、音声アシスタント、医療診断など
🔥 1. ニューラルネットワーク(NN)の基本構造
🕸️ ニューラルネットワークの3つの層
ニューラルネットワークは、以下の 3つの層 から構成されています。
| 層の種類 | 説明 | 役割 |
|---|---|---|
| 入力層 | データ(特徴量)を入力する | 画像、文章、数値データなど |
| 隠れ層(中間層) | 重み付きの計算を行い、非線形変換 | 特徴量を抽出して学習 |
| 出力層 | 最終的な結果を出力 | クラス分類や回帰予測 |
📚 【具体例】画像分類のケース
- 入力層: 28×28ピクセルの白黒画像(MNIST)
- 隠れ層: 2層の中間層で特徴量を学習
- 出力層: 0〜9の数字に分類
🎨 ニューラルネットワークのアーキテクチャ図
[入力層] → [隠れ層] → [隠れ層] → [出力層]
- 入力層:28×28ピクセルの画像データ
- 隠れ層:2層の非線形変換(ReLU)
- 出力層:10クラスの確率分布(Softmax)
🧩 2. ニューラルネットワークの基本単位:パーセプトロン
🔢 パーセプトロンの仕組み
パーセプトロンは、1つのニューロン(ノード) で構成された最もシンプルなモデルです。
✅ 仕組み:
- 入力値(x): 特徴量データ
- 重み(w): 各入力に対する重み
- バイアス(b): 出力の調整用
- 活性化関数(f): 出力の非線形変換
数式:
[ y = f\left(\sum_{i=1}^{n} w_i x_i + b \right) ]
- (x_i):入力特徴量
- (w_i):重みパラメータ
- (b):バイアス
- (f):活性化関数(例:シグモイド、ReLU)
🎯 例:単純パーセプトロン
import numpy as np # 入力データと重み x = np.array([0.5, 1.5]) w = np.array([0.8, -0.6]) b = 0.1 # 線形変換 z = np.dot(x, w) + b # シグモイド関数で非線形変換 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 出力 y = sigmoid(z) print(f'出力: {y:.4f}')
⚡️ 3. 活性化関数(Activation Functions)
活性化関数は、ニューロンの出力を非線形に変換 して、複雑なパターンの学習を可能にします。
✅ 主な活性化関数
| 関数 | 数式 | 特徴 | 代表的な用途 |
|---|---|---|---|
| シグモイド | (f(x) = \frac{1}{1 + e^{-x}}) | 0〜1の範囲、勾配消失あり | 出力層 |
| ReLU | (f(x) = \max(0, x)) | 勾配消失なし、高速 | 隠れ層 |
| ターニャ(Tanh) | (f(x) = \frac{ex - e^{-x}}{ex + e^{-x}}) | -1〜1の範囲、学習速度中 | 隠れ層 |
| ソフトマックス | (f(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}) | 出力層で確率分布を生成 | 多クラス分類 |
🎯 活性化関数のコード例
import torch # ReLU関数 relu = torch.relu(torch.tensor([-1.0, 2.0, -0.5, 3.0])) print('ReLU:', relu) # シグモイド関数 sigmoid = torch.sigmoid(torch.tensor([1.0, 2.0, -1.0])) print('Sigmoid:', sigmoid) # ソフトマックス関数 softmax = torch.softmax(torch.tensor([2.0, 1.0, 0.1]), dim=0) print('Softmax:', softmax)
🎯 4. ニューラルネットワークの学習の流れ
🧠 学習のステップ
順伝播(Forward Propagation)
- 入力データをネットワークに通して、予測結果を出力
損失関数の計算
- 予測と正解の誤差(損失)を求める
- 例)MSE(平均二乗誤差)、交差エントロピー
誤差逆伝播(Backpropagation)
- 誤差をネットワークに逆伝播して、各重みの勾配を計算
重みの更新
- 最適化手法(例:SGD、Adam)で重みを更新
⚡️ 5. 誤差逆伝播法(Backpropagation)の仕組み
🔄 1. 誤差の計算
- 損失関数(Loss Function) を用いて予測誤差を測定
- 例:交差エントロピー、MSE(平均二乗誤差)
🔄 2. 誤差の逆伝播
- チェーンルール を使用して、損失関数の勾配を各重みに伝播
- 勾配が大きい箇所ほど、重みを大きく修正
🔄 3. 重みの更新
- 勾配降下法(Gradient Descent) によって重みを更新
- 最適化アルゴリズム(SGD、Adam など)が使用される
📚 6. 最適化手法:重みの更新方法
✅ 主な最適化手法
| 手法 | 特徴 | 収束速度 |
|---|---|---|
| SGD(確率的勾配降下法) | シンプルな手法、更新が早い | 遅い |
| Adam(適応的モーメント推定) | 勾配と過去の変化量を考慮 | 速い |
| RMSprop | 学習率を動的に調整し、収束が早い | 中〜速い |
| Adagrad | 自動的に学習率を変動させる | 中〜速い |
🎯 最適化手法の実装例
import torch import torch.nn as nn import torch.optim as optim # モデル定義 model = nn.Linear(2, 1) # 損失関数 criterion = nn.MSELoss() # 最適化手法(Adam使用) optimizer = optim.Adam(model.parameters(), lr=0.01) # ダミーデータ x = torch.tensor([[0.5, 1.0], [1.5, 2.0]]) y = torch.tensor([[1.0], [0.0]]) # 学習ループ for epoch in range(100): y_pred = model(x) loss = criterion(y_pred, y) # 勾配の初期化 → 誤差逆伝播 → 重み更新 optimizer.zero_grad() loss.backward() optimizer.step() if epoch % 10 == 0: print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
🎨 7. CNN・RNN・Transformerの違い
📸 1. CNN(畳み込みニューラルネットワーク)
- 主な用途: 画像認識・物体検出
- 特徴: フィルターを使った畳み込み演算
🕰️ 2. RNN(リカレントニューラルネットワーク)
- 主な用途: 時系列データ、音声・文章の解析
- 特徴: シーケンスデータを順次処理
⚡️ 3. Transformer(トランスフォーマー)
- 主な用途: 自然言語処理(NLP)、GPT、BERTなど
- 特徴: Attention機構で長距離依存関係をキャッチ
🎁 まとめ:ニューラルネットワークの基本理解
✅ ディープラーニングは、入力層・隠れ層・出力層の階層構造を持つニューラルネットワークを活用
✅ 誤差逆伝播法(Backpropagation)と最適化手法でモデルを効率的に学習
✅ 活性化関数、損失関数、最適化手法の選択がモデル性能に影響
✅ CNN・RNN・Transformerなどの特殊モデルで高度なタスクも実現可能
Best regards, (^^ゞ