Hello there, ('ω')ノ
🎯 はじめに:AIモデルの進化と用途の広がり
深層学習(ディープラーニング)の分野では、CNN・RNN・Transformer という3つの主要なアーキテクチャが活用されています。
これらのモデルは、それぞれ 「画像」「時系列データ」「自然言語」 など、異なるタスクに特化しています。
✅ CNN(畳み込みニューラルネットワーク) → 画像・動画の解析
✅ RNN(リカレントニューラルネットワーク) → 時系列データ・音声・文章の解析
✅ Transformer(トランスフォーマー) → 自然言語処理(NLP)や大規模言語モデル(LLM)
📚 1. CNN(Convolutional Neural Network)とは?
🖼️ CNNの概要
CNN(畳み込みニューラルネットワーク) は、画像や動画などの2次元データ に特化したモデルです。
畳み込みフィルター(カーネル)を使用して、入力画像から局所的な特徴を抽出し、分類や検出に活用します。
🕸️ CNNの基本構造
[入力層] → [畳み込み層] → [プーリング層] → [全結合層] → [出力層]
✅ 1. 畳み込み層(Convolution Layer)
- 画像から特徴量(エッジ、線、色など)を抽出
- カーネル(フィルター)が画像上をスライドし、特徴マップを作成
- 出力は 特徴マップ(Feature Map)
✅ 2. プーリング層(Pooling Layer)
- 畳み込み層で抽出された特徴を縮小・圧縮
- 代表的な手法は Max Pooling(最大値プーリング)
- 計算コスト削減と過学習防止に寄与
✅ 3. 全結合層(Fully Connected Layer)
- 特徴量を最終的なクラス分類に活用
- ニューラルネットワークで標準的な全結合層を使用
🎯 CNNの主な用途
✅ 画像分類(Image Classification)
- MNIST(手書き数字認識)、CIFAR-10(物体分類)
- 例:猫と犬の画像分類
✅ 物体検出(Object Detection)
- YOLO、Faster R-CNN などの検出モデル
- 例:自動運転車の障害物検出
✅ 画像生成・変換(Image Generation)
- StyleGAN、CycleGANなど
- 例:白黒画像のカラー化
📝 CNNのサンプルコード
import torch import torch.nn as nn import torch.optim as optim # CNNモデルの定義 class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1 = nn.Conv2d(3, 16, 3, padding=1) # 畳み込み層 self.pool = nn.MaxPool2d(2, 2) # プーリング層 self.fc1 = nn.Linear(16 * 8 * 8, 10) # 全結合層 def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) x = x.view(-1, 16 * 8 * 8) x = self.fc1(x) return x # モデルのインスタンス化 model = CNN() print(model)
🔁 2. RNN(Recurrent Neural Network)とは?
⏰ RNNの概要
RNN(リカレントニューラルネットワーク) は、時系列データやシーケンスデータ を扱うモデルです。
過去の情報を保持しながら、現在の入力に影響を与える 仕組みで、時間依存性のあるデータ に適しています。
🔄 RNNの基本構造
[入力] → [隠れ層(再帰層)] → [出力] → [次の時刻へ]
✅ 1. 入力層(Input Layer)
- 時系列データやテキストのベクトル化された入力
✅ 2. 隠れ層(Hidden Layer)
- 隠れ状態(Hidden State) を持ち、前の時刻の情報を保持
- 隠れ状態は次の時刻の計算にも影響を与える
✅ 3. 出力層(Output Layer)
- シーケンス全体の結果を出力
🎯 RNNの主な用途
✅ 時系列データの解析
- 株価予測、気象データ、IoTデータ解析
✅ 自然言語処理(NLP)
- 文章生成、機械翻訳、感情分析
✅ 音声認識・翻訳
- 音声データの解析と文章変換
📝 RNNのサンプルコード
import torch import torch.nn as nn # RNNモデルの定義 class RNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RNN, self).__init__() self.hidden_size = hidden_size self.rnn = nn.RNN(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): out, hidden = self.rnn(x) out = self.fc(out[:, -1, :]) # 最終時刻の出力 return out # モデルのインスタンス化 model = RNN(input_size=10, hidden_size=20, output_size=1) print(model)
⚠️ RNNの課題:勾配消失問題
- 長期依存関係(Long-term dependencies) を保持するのが難しい
- 勾配消失(Vanishing Gradient) により学習が進まない場合がある
🧠 3. Transformerとは?
⚡️ Transformerの概要
Transformer(トランスフォーマー) は、自然言語処理(NLP) に革命をもたらしたモデルで、Attention機構 によりシーケンスデータを並列処理します。
従来のRNNの課題(勾配消失・長期依存の学習困難)を克服しました。
🔎 Transformerの基本構造
[エンコーダ] → [マルチヘッドアテンション] → [デコーダ] → [出力]
✅ 1. エンコーダ(Encoder)
- 入力データを処理して内部表現に変換
- 自己注意機構(Self-Attention) で重要な単語に注目
✅ 2. デコーダ(Decoder)
- エンコーダの出力を使って、ターゲットシーケンス を生成
✅ 3. マルチヘッドアテンション(Multi-head Attention)
- 複数の注意機構 で情報の流れを強化
🎯 Transformerの主な用途
✅ 自然言語処理(NLP)
- 機械翻訳(Google翻訳)、文章要約、質問応答
✅ 大規模言語モデル(LLM)
- GPT-3、BERT、Llamaなどのモデルで応用
✅ マルチモーダルモデル
- テキスト・画像・音声を統合して処理
📝 Transformerのサンプルコード(Hugging Face)
from transformers import BertTokenizer, BertModel # BERTトークナイザーとモデルの読み込み tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') # テキストのエンコード text = "Hello, how are you?" inputs = tokenizer(text, return_tensors="pt") # モデルでの推論 outputs = model(**inputs) print(outputs.last_hidden_state.shape)
📊 4. CNN・RNN・Transformerの比較まとめ
| 項目 | CNN | RNN | Transformer |
|---|---|---|---|
| 用途 | 画像、動画、医療画像 | 時系列、音声、文章解析 | 自然言語処理、LLM |
| 計算コスト | 比較的低い | 高い(逐次処理) | 高い(並列計算可能) |
| 長期依存関係 | 不要 | 学習が困難(勾配消失) | 効率的なAttentionで解決 |
| 並列処理 | 不可能 | 不可能 | 可能 |
| 代表モデル | AlexNet、ResNet、YOLO | LSTM、GRU | BERT、GPT-3、T5 |
🎁 まとめ:CNN・RNN・Transformerの違いと用途
✅ CNNは画像・動画処理に特化し、畳み込み層で特徴抽出が可能
✅ RNNは時系列データの解析に強く、過去の情報を保持して学習
✅ TransformerはNLPに革命をもたらし、大規模言語モデル(LLM)の基盤となっている
✅ 最新のAIシステムでは、これらのモデルを組み合わせてハイブリッド化も進行中!
Best regards, (^^ゞ