はじめに
以前、「【データサイエンティスト入門】深層学習(Deep Learning)とは?機械学習との違いを調べてみた」という記事で、深層学習が「人間の脳を真似した仕組みで、大量のデータから複雑なパターンを学習する技術」であること、そして機械学習との違いは「特徴量を人間が考えるか、AIが自動で学習するか」にある、という話をまとめました。
あの記事を書いた時点では、
- ニューラルネットワークが「学習する」って、具体的に中で何が起きているの?
- 「隠れ層が深い」というだけで、なんでそんなに賢くなるの?
- CNNとかRNNとかTransformerとか、いろいろ名前を聞くけど何が違うの?
- 過学習ってよく聞くけど、どうやって防いでいるの?
といった、もう一歩踏み込んだ疑問がいくつも残っていました。今回は、深層学習の「学習の仕組み」そのものと、代表的なネットワークの種類、実務でつまずきやすいポイントについて、もう少し深掘りして調べてみました。
この記事はこんな方におすすめ
- 前回の記事で深層学習の全体イメージ(機械学習との違い、ニューラルネットワークの概要)は掴んだけど、もう少し中身を知りたい方
- 「ニューラルネットワークが学習する」という仕組みを、雰囲気ではなく少し具体的に理解したい方
- CNN・RNN・Transformerの違いがなんとなくしか分かっていない方
- 過学習という言葉は知っているけど、対策までは知らない方
- ChatGPTなど生成AIの裏側の仕組みに興味がある方
まず前回のおさらい
前回の記事のポイントを簡単に振り返ります。
- 深層学習は機械学習の一種で、「AI > 機械学習 > 深層学習」という包含関係
- 機械学習は人間が特徴量を設計することが多いのに対し、深層学習はAIが自動で特徴を学習する
- 「深層(Deep)」とは、ニューラルネットワークの隠れ層がたくさんあることを意味する
- ニューラルネットワークは人間の脳の神経細胞(ニューロン)を真似した仕組み
- ChatGPTも深層学習を使って、大量の文章から次に来る単語を予測している
前回はここまでの「大枠のイメージ」で止まっていたので、今回はここから一歩踏み込んで、実際にネットワークがどうやって「学習」しているのか、という部分を深掘りしていきます。
ニューラルネットワークが「学習する」とはどういうことか
まず調べて分かったのは、ニューラルネットワークの正体は「重み(Weight)」と「バイアス(Bias)」と呼ばれる大量の数値の集まりだということです。
入力データ
│
▼
入力 × 重み + バイアス を各層で計算
│
▼
活性化関数を通す
│
▼
次の層へ … を繰り返す
│
▼
出力(予測結果)
前回「入力層 → 隠れ層 → 出力層」という構造だけを紹介していましたが、それぞれの層のニューロン同士は「重み」でつながっていて、入力にこの重みを掛けてバイアスを足した値を、次に説明する「活性化関数」に通す、という計算を繰り返しているだけ、というのが実態のようです。
「学習する」というのは、この大量の重みとバイアスの値を、予測がより正確になるように少しずつ調整していく作業のことを指しています。つまり深層学習は魔法のような仕組みではなく、「大量の数値をひたすら調整していく計算」というのが実際のところのようです。
活性化関数の役割
調べていて重要だと感じたのが「活性化関数(Activation Function)」の役割です。仮に活性化関数がないと、どれだけ層を重ねても結局は入力の単純な足し算・掛け算(線形変換)にしかならず、複雑なパターンを表現できないそうです。活性化関数を挟むことで、ネットワークに「非線形性」が加わり、複雑な問題を扱えるようになる、というのが基本的な考え方でした。
代表的な活性化関数を比較するとこんな感じです。
| 活性化関数 | 特徴 | 課題 |
|---|---|---|
| シグモイド関数 | 出力を0〜1の範囲に収める。昔からよく使われた | 層が深くなると勾配消失が起きやすい |
| tanh関数 | 出力を-1〜1の範囲に収める | シグモイドと同様に勾配消失が起きやすい |
| ReLU(ランプ関数) | 0以下は0、それ以外はそのまま出力。計算がシンプル | 値が0以下に入り続けると学習が止まる(死んだReLU) |
ここで出てきた「勾配消失問題」という言葉も今回初めて知りました。層が深くなるほど、後述する誤差逆伝播法で伝わる勾配(調整量の手がかり)がどんどん小さくなってしまい、入力に近い層の重みがうまく更新されなくなる、という現象だそうです。ReLU系の活性化関数や、後述する正規化の工夫は、この勾配消失問題を緩和するために使われている、ということが分かりました。
誤差逆伝播法と勾配降下法の仕組み
前回の記事では触れていなかった、深層学習の学習プロセスの核心部分が「誤差逆伝播法(Backpropagation)」と「勾配降下法(Gradient Descent)」という2つの仕組みです。役割を整理すると、次のようになります。
① 順伝播(Forward)
入力 → 各層を通って → 出力(予測値)
② 誤差の計算
予測値と正解のズレ(誤差)を損失関数で数値化する
③ 逆伝播(Backpropagation)
出力側から入力側に向かって、誤差の原因(勾配)を逆向きに計算していく
④ 重みの更新(勾配降下法)
勾配をもとに、誤差が小さくなる方向へ重みを少しずつ調整する
①〜④を、大量のデータに対して何度も繰り返すことで、少しずつ予測精度が上がっていく、というのが学習の全体像でした。誤差逆伝播法は「どのニューロンの重みが、どれくらい誤差の原因になっているか」を効率よく計算するための仕組みで、勾配降下法は「その情報をもとに、実際に重みをどう動かすか」を決める仕組み、という役割分担になっている点が、前回の理解からもう一歩踏み込めた部分でした。
CNN・RNN・Transformer、それぞれ何が得意なのか
前回「画像認識・音声認識・生成AI」といった用途を紹介しましたが、実はそれぞれ得意なネットワークの種類が違う、ということを今回知りました。代表的な3つを比較してみます。
| 種類 | 得意な分野 | 特徴 |
|---|---|---|
| CNN(畳み込みニューラルネットワーク) | 画像認識 | 画像の一部分(近くのピクセル同士の関係)に注目して特徴を抽出する |
| RNN(再帰型ニューラルネットワーク) | 時系列データ・音声 | 過去の情報を記憶しながら、順番に処理していく |
| Transformer | 文章生成・翻訳(ChatGPTなど) | Attention(注意機構)によって、離れた単語同士の関係も一度に捉えられる |
前回「ChatGPTは大量の文章から次の単語を予測している」と紹介しましたが、その中身はTransformerという構造がベースになっているそうです。RNNは文章を最初から順番にしか処理できず、離れた単語同士の関係を捉えるのが苦手だったのに対し、TransformerはAttentionという仕組みによって、文章全体の単語同士の関係を一度に計算できるようになった、というのが大きな進化のポイントだったようです。
過学習とその対策
前回の記事には出てこなかったキーワードとして、深層学習を学ぶ上で必ず出てくるのが「過学習(Overfitting)」です。
訓練データへの当てはまりが良すぎる
│
▼
訓練データの「くせ」まで覚えてしまう
│
▼
新しいデータ(未知のデータ)への予測精度が下がる
これが過学習と呼ばれる現象で、深層学習のようにパラメータ(重み)の数が非常に多いモデルほど起きやすい問題だそうです。調べてみると、対策としていくつかの手法がよく使われていることが分かりました。
- ドロップアウト:学習のたびに一部のニューロンをランダムに無効化し、特定のニューロンに依存しすぎないようにする
- バッチ正規化:層ごとの入力データの分布を整えて、学習を安定させる
- 早期終了(Early Stopping):検証データに対する精度が悪化し始めたタイミングで学習を打ち切る
- データ拡張:画像を回転・反転させるなどして、訓練データの量を疑似的に増やす
前回は「大量のデータが必要」とだけ紹介していましたが、単にデータ量を増やすだけでなく、こうした学習方法の工夫によって過学習を防いでいる、というのは今回新しく知ったポイントでした。
損失関数の役割
もう一つ、前回触れていなかったのが「損失関数(Loss Function)」です。ネットワークの予測値と正解のズレをどう数値化するかを決めるのが損失関数の役割で、この値を小さくすることが学習の目標になります。
代表的なものとして、分類問題では「交差エントロピー(Cross Entropy)」、回帰問題(数値を予測する問題)では「二乗誤差(MSE)」がよく使われるそうです。例えば「猫か犬か」を判定するようなタスクでは交差エントロピーが、株価や気温のような連続値を予測するタスクでは二乗誤差が使われる、というように、タスクの種類によって使い分けられている、ということが分かりました。
深層学習を学ぶ上での実務的な注意点
ここまで理論寄りの話が続いたので、実務で深層学習を扱う際によく言われる注意点も、調べた範囲でまとめておきます。
| 観点 | 内容 |
|---|---|
| 計算資源 | 層が深く、パラメータ数が多いため、GPUなどの計算資源が前提になることが多い |
| データ量・データ品質 | 大量データが必要な一方、質の悪いデータが多いと精度が下がりやすい |
| 学習時間 | モデルやデータ量によっては、学習に数時間〜数日かかることもある |
| 解釈性 | 「なぜその予測になったのか」を人間が説明しにくい(ブラックボックス化しやすい) |
特に「解釈性」の低さは、前回の記事を書いていた時点ではまったく意識していなかった観点でした。機械学習であれば「この特徴量が効いている」と説明しやすい一方、深層学習は内部の重みが膨大にあるため、判断根拠を人間が直感的に理解しづらい、という課題があるようです。医療や金融など、判断根拠の説明が求められる分野では、この解釈性の低さが実務上の壁になることもある、という話は印象に残りました。
フレームワークで見るとイメージしやすかった
理論だけだとイメージが湧きにくかったので、実際によく使われているフレームワークのコードを覗いてみました。PyTorchというライブラリでは、ニューラルネットワークの層を次のように積み重ねて定義するのが基本的な書き方のようです。
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 128) # 入力層 → 隠れ層1
self.relu = nn.ReLU() # 活性化関数
self.fc2 = nn.Linear(128, 10) # 隠れ層1 → 出力層
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
nn.Linear が「重みとバイアスを持つ層」、nn.ReLU() が先ほど紹介した活性化関数にあたる部分です。前回の記事で書いた「入力層 → 隠れ層 → 出力層」という図が、実際のコードでもほぼそのまま fc1 → relu → fc2 という並びに対応している、というのが分かって、理論とコードのイメージがつながった感覚がありました。学習部分(誤差逆伝播法・勾配降下法)は、こうしたフレームワークが loss.backward() や optimizer.step() といった数行の呼び出しで自動的に計算してくれる、というのも今回調べて知ったポイントです。
深層学習と生成AIの関係をもう一段整理する
前回の記事の最後で「統計学 → 相関分析 → 回帰分析 → 機械学習 → 深層学習 → 生成AI → LLM」という学習の流れを紹介していましたが、今回調べた内容を踏まえて、深層学習と生成AIの関係をもう少し具体的に整理してみます。
深層学習(学習の仕組み・ネットワークの種類)
│
├─ CNN → 画像認識・画像生成の土台
├─ RNN → 音声認識・時系列予測の土台
└─ Transformer → 文章生成・翻訳・LLM(ChatGPTなど)の土台
前回は「ChatGPTも深層学習を使っている」というざっくりした理解でしたが、その中身はTransformerというネットワーク構造と、Attentionという仕組み、そして誤差逆伝播法による学習プロセスの組み合わせで成り立っている、ということが今回だいぶ具体的にイメージできるようになりました。次に生成AIやLLMを深掘りする際は、今回整理したCNN・RNN・Transformerの違いを土台にして進められそうです。
個人的に調べてみて思ったこと
前回の記事を書いた時点では、「深層学習=人間の脳を真似して、大量のデータから自動で学習する技術」というレベルの理解で止まっていました。
今回調べてみて、
- 学習の正体は「重みとバイアスをひたすら調整していく計算」であること
- 活性化関数が非線形性を生み出し、複雑なパターンの表現を可能にしていること
- 誤差逆伝播法と勾配降下法が、それぞれ違う役割(勾配の計算/重みの更新)を担っていること
- CNN・RNN・Transformerは、それぞれ得意なデータの種類が違うこと
- 過学習という課題があり、ドロップアウトやバッチ正規化などの工夫で対策していること
あたりは、前回の記事だけでは見えていなかった「深層学習の中身」だったと感じています。特にTransformerがAttentionによって離れた単語同士の関係を捉えられる、という話は、ChatGPTがなぜあれだけ自然な文章を生成できるのかを理解するうえで、今回一番腑に落ちたポイントでした。
まとめ
今回は深層学習について、前回よりもう少し踏み込んで、次の内容を調べてみました。
- ニューラルネットワークが「学習する」とは、重みとバイアスを調整していくことである
- 活性化関数(シグモイド・tanh・ReLU)の役割と、勾配消失問題
- 誤差逆伝播法と勾配降下法による学習プロセスの流れ
- CNN・RNN・Transformerそれぞれの得意分野の違い
- 過学習の仕組みと、ドロップアウト・バッチ正規化などの対策
- 損失関数(交差エントロピー・二乗誤差)の役割
- 計算資源・データ品質・解釈性といった実務上の注意点
「深層学習=人間の脳を真似した仕組み」という前回のイメージを土台にしつつ、実際の学習の仕組みや代表的なネットワークの違いを押さえておくと、この先ChatGPTのような生成AIやAIエージェントの仕組みを理解するうえでも役立ちそうだと感じました。次は生成AIやTransformerの仕組みについて、もう少し具体的に手を動かしながら調べてみたいと思っています。
参考
- ディープラーニング(深層学習)とは?仕組みや機械学習との違い、活用事例をわかりやすく解説
- バックプロパゲーション - Wikipedia
- 【基礎から理解しよう】勾配消失問題と活性化関数を分かりやすく解説
- ドロップアウト:過学習を防ぐ技術
最後まで読んでいただき、ありがとうございました!