以下の内容はhttps://cysec148.hatenablog.com/entry/2025/04/01/153956より取得しました。


第4回:ディープラーニングの基本

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. ニューラルネットワークの学習の流れ

🧠 学習のステップ

  1. 順伝播(Forward Propagation)

    • 入力データをネットワークに通して、予測結果を出力
  2. 損失関数の計算

    • 予測と正解の誤差(損失)を求める
    • 例)MSE(平均二乗誤差)、交差エントロピー
  3. 誤差逆伝播(Backpropagation)

    • 誤差をネットワークに逆伝播して、各重みの勾配を計算
  4. 重みの更新

    • 最適化手法(例: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, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/04/01/153956より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14