E資格で混同しやすい用語をペアで整理|練習問題付きで解説

こんにちは。ゆうせいです。

E資格の勉強を進めると、よく似た用語が次々に出てきます。適合率と再現率、L1正則化とL2正則化、Sarsa(サルサ)とQ学習などです。どれも一度は理解したつもりになります。それでも、試験本番で選択肢を見ると迷ってしまいます。

この記事では、E資格の受験者がつまずきやすい論点をテーマに分けて整理します。各テーマの直後に練習問題を置いています。読みながら解いて、理解を確認してください。

対象読者は、次のような方です。

  • E資格の受験を控えている方
  • 認定プログラムを受講中で、知識を整理したい方
  • 機械学習の用語を体系的に覚え直したい新人エンジニアの方
  • 社内でE資格対策の勉強会を運営している研修担当者の方

この記事の結論

E資格の知識は、丸暗記するより「何と何が、どの点で違うのか」という比較の軸で覚えるほうが定着します。

たとえば、Q学習とSarsaは「次の行動をどう選んで更新するか」の一点だけが違います。この違いの軸を押さえると、選択肢の文言が多少変わっても正誤を判断できます。

本記事では、テーマごとに次の順番で整理しています。

  1. 比較の軸を示す
  2. 数式を示し、記号の意味を説明する
  3. 実際の数値で計算する
  4. 練習問題で確認する

E資格の試験概要(2026年9月時点)

最初に、試験の前提を確認します。E資格は、一般社団法人日本ディープラーニング協会(JDLA)が主催するエンジニア向けの資格試験で、ディープラーニングの理論を理解し、適切な手法を選んで実装する力を認定するものです。

受験できるのは、試験日から過去2年以内にJDLA認定プログラムを修了した方です。2026年#2の試験時間は、機密保持契約への同意とアンケートの15分を含めて合計135分で、そのうち試験本体は120分です。

また、E資格の試験範囲は技術の進歩に合わせて頻繁に改訂されるため、受験前には最新のシラバスを確認することが推奨されています。

出典:Pearson VUE「JDLA Deep Learning for ENGINEER 2026 #2(E資格2026 #2)」 https://www.pearsonvue.com/jp/ja/jdla.html

試験制度は変更される可能性があります。受験前には、JDLAの公式サイトとPearson VUEの案内ページで最新情報を確認してください。

1. 分類の評価指標:適合率と再現率の違い

比較の軸

分類の評価指標は、「何を分母にしているか」で区別します。

まず、混同行列(こんどうぎょうれつ)を確認します。混同行列とは、予測結果と正解の組み合わせを4つに分けて数えた表です。

予測:陽性予測:陰性
正解:陽性TP(True Positive:正しく陽性と予測)FN(False Negative:陽性を見逃した)
正解:陰性FP(False Positive:誤って陽性と予測)TN(True Negative:正しく陰性と予測)

主な指標は、次のとおりです。

Accuracy = \frac{TP + TN}{TP + TN + FP + FN}

Precision = \frac{TP}{TP + FP}

Recall = \frac{TP}{TP + FN}

F_1 = \frac{2 \cdot Precision \cdot Recall}{Precision + Recall}

指標分母答える問い
正解率(Accuracy)全データ全体のうち何割当たったか
適合率(Precision)陽性と予測したもの陽性と言ったもののうち、本当に陽性だった割合は
再現率(Recall)本当に陽性のもの本当の陽性のうち、見逃さずに拾えた割合は
F値(F1)適合率と再現率の調和平均両者のバランスは取れているか

数値で確認する

100件のデータで、TP=30、FP=10、FN=20、TN=40だったとします。

  • 正解率:(30 + 40) / 100 = 0.70
  • 適合率:30 / (30 + 10) = 0.75
  • 再現率:30 / (30 + 20) = 0.60
  • F値:2 \times 0.75 \times 0.60 / (0.75 + 0.60) = 0.90 / 1.35 \approx 0.667

ROC曲線とAUC

ROC曲線は、判定のしきい値を少しずつ変えながら、横軸に偽陽性率(FPR)、縦軸に真陽性率(TPR)をとって描いた曲線です。真陽性率は再現率と同じ値です。

FPR = \frac{FP}{FP + TN}

上の例では、FPR = 10 / (10 + 40) = 0.20 です。

AUC(Area Under the Curve)は、ROC曲線の下側の面積です。完全な分類器では1.0、でたらめに当てる分類器では約0.5になります。

初学者がつまずきやすい点

陽性の割合が極端に少ない不均衡データでは、正解率が役に立ちません。たとえば、陽性が1%しかないデータで「すべて陰性」と予測すると、正解率は99%になります。しかし、陽性は1件も見つけられていません。このような場合は、再現率、適合率、F値、AUCを確認します。

コラム:ROCという名前の由来
ROCは Receiver Operating Characteristic の略で、日本語では受信者動作特性と訳されます。もともとは、レーダーの受信信号から敵機と雑音を見分ける性能を評価するために使われた考え方です。「受信者」という言葉が入っているのは、この名残です。

練習問題1

がん検診を支援するAIを開発しています。病気の人を見逃すことを最も避けたい場合、重視すべき指標はどれですか。

A. 正解率(Accuracy)
B. 適合率(Precision)
C. 再現率(Recall)
D. 特異度(Specificity)

解答と解説

正解:C

再現率は、本当に病気の人のうち、AIが陽性と判定できた割合です。見逃し(FN)が増えると分母だけが増えて再現率が下がるため、見逃しの少なさを直接表します。

Aの正解率は、病気の人が少ない場合に高く出やすく、見逃しを隠してしまいます。Bの適合率は「陽性と判定した人のうち本当に病気だった割合」で、誤検出の少なさを表す指標です。Dの特異度は、健康な人を正しく陰性と判定できた割合です。実務では、再現率を優先しつつ、再検査の負担が過大にならないよう適合率も併せて確認します。

2. 回帰の評価指標:RMSEとMAEの違い

比較の軸

回帰の評価指標は、「誤差をどう集計するか」で区別します。誤差を二乗するか、絶対値をとるか、対数をとるかの違いです。

初出の記号を説明します。\sum (シグマ、総和 sum)は、添え字の範囲にある値をすべて足し合わせる記号です。\hat{y} (ワイハット)は予測値、\bar{y} (ワイバー)は実測値の平均を表します。

RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}

MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|

RMSLE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (\log(y_i + 1) - \log(\hat{y}_i + 1))^2}

$latex R^2 = 1 - \frac{\sum_{i} (y_i - \hat{y}i)^2}{\sum{i} (y_i - \bar{y})^2} $

指標正式名称特徴
RMSERoot Mean Squared Error大きな誤差を強く罰する。外れ値に弱い
MAEMean Absolute Errorすべての誤差を同じ重みで扱う。外れ値に強い
RMSLERoot Mean Squared Logarithmic Error誤差の比率を重視する。売上や価格など桁が広い値に向く
決定係数coefficient of determination平均値で予測した場合と比べてどれだけ改善したかを表す

数値で確認する

実測値が10、20、30、予測値が12、18、33だったとします。誤差は2、マイナス2、3です。

  • RMSE:\sqrt{(4 + 4 + 9) / 3} = \sqrt{5.667} \approx 2.380
  • MAE:(2 + 2 + 3) / 3 \approx 2.333
  • 決定係数:平均は20なので、分母は 100 + 0 + 100 = 200 、分子は17です。R^2 = 1 - 17 / 200 = 0.915

ここで、3件目の予測値が60だった(誤差30)とします。

  • RMSE:\sqrt{(4 + 4 + 900) / 3} \approx 17.40
  • MAE:(2 + 2 + 30) / 3 \approx 11.33

外れ値が1件入っただけで、RMSEは約7倍、MAEは約5倍になりました。二乗する分、RMSEのほうが大きな誤差に敏感です。

練習問題2

目的変数に極端な外れ値がいくつか含まれています。外れ値の影響を比較的受けにくい評価指標はどれですか。

A. MAE(平均絶対誤差)
B. RMSE(二乗平均平方根誤差)
C. MSE(平均二乗誤差)
D. R2(決定係数)

解答と解説

正解:A

MAEは誤差の絶対値を平均するため、大きな誤差が二乗で増幅されません。

BのRMSEとCのMSEは誤差を二乗するため、外れ値が1件あるだけで値が大きく変わります。Dの決定係数も分子に二乗誤差を使うため、外れ値の影響を受けます。実務では、外れ値を「重大な失敗」として罰したいならRMSE、「たまに起きる例外」として扱いたいならMAEというように、ビジネス上の意味で選びます。

3. 誤差の分解:バイアスとバリアンスの違い

比較の軸

モデルの予測誤差は、原因によって3つに分けられます。

E[(y(x) - t)^2] = (E[y(x)] - h(x))^2 + E[(y(x) - E[y(x)])^2] + E[(h(x) - t)^2]

記号意味
y(x) 学習したモデルの予測値
E[y(x)] 訓練データを取り替えて何度も学習したときの予測値の期待値(Expectation)
h(x) 理想的なモデルの予測値
t 実際の観測値(target)

右辺の第1項がバイアスの二乗、第2項がバリアンス、第3項がノイズです。

誤差原因典型例対策の方向
バイアスモデルの表現力不足曲線の関係を直線で近似するモデルを複雑にする
バリアンス訓練データの選び方による揺れ深い決定木が訓練データを丸暗記する正則化、データ追加、アンサンブル
ノイズ測定誤差などセンサーの誤差モデルでは減らせない

身近な例え

ダーツで考えると分かりやすくなります。バイアスが大きい状態は、矢がまとまって刺さるのに的の中心から外れている状態です。バリアンスが大きい状態は、中心の周りに刺さってはいるものの、ばらつきが大きい状態です。

練習問題3

線形回帰モデルで、明らかに曲線的な関係を持つデータを学習しました。訓練誤差も検証誤差も大きいままです。主に何が大きい状態と考えられますか。

A. バリアンスが大きい状態
B. ノイズが大きい状態
C. 学習率が大きい状態
D. バイアスが大きい状態

解答と解説

正解:D

直線では曲線を表現できないため、どれだけデータを増やしても予測の期待値が理想から離れたままになります。これはバイアスが大きい状態で、未学習(アンダーフィッティング)とも呼ばれます。

Aのバリアンスが大きい場合は、訓練誤差は小さく、検証誤差だけが大きくなるのが典型です。Bのノイズはデータ自体の問題なので、モデルの形とは関係がありません。Cの学習率はバイアスとバリアンスの分解に含まれる概念ではありません。実務では「訓練誤差と検証誤差の両方が大きいならバイアス、差が大きいならバリアンス」と覚えると、学習曲線から素早く判断できます。

4. 正則化:L1とL2の違い、早期終了のタイミング

比較の軸

正則化は、モデルが訓練データに過剰に適合すること(過学習)を防ぐ仕組みです。L1とL2は、「重みにどのような罰を与えるか」が違います。

初出の記号を説明します。\lambda (ラムダ)は正則化の強さを決める係数です。大きくするほど重みを強く抑えます。

E(w) = L(w) + \lambda \sum_{j} |w_j|

E(w) = L(w) + \lambda \sum_{j} w_j^2

E(w) = L(w) + \lambda_1 \sum_{j} |w_j| + \lambda_2 \sum_{j} w_j^2

1つ目がL1正則化(Lasso回帰)、2つ目がL2正則化(Ridge回帰)、3つ目が両者を組み合わせたElastic Netです。w は重み(weight)、L(w) は元の損失関数です。

なぜL1だけ重みが0になるのか

罰の項を重みで微分すると、違いが見えます。

  • L1の勾配:重みの大きさに関係なく、常に \lambda (符号は重みと同じ)
  • L2の勾配:2 \lambda w で、重みが小さくなるほど弱くなる

\lambda = 0.5 、重みが0.1のとき、L1の罰の勾配は0.5、L2の罰の勾配は 2 \times 0.5 \times 0.1 = 0.1 です。L1は小さな重みにも同じ強さで押し続けるため、重みがちょうど0になりやすくなります。L2は0に近づくほど押す力が弱くなるため、小さくはなっても0にはなりにくくなります。

ニューラルネットワークでL2正則化を使う手法は、重み減衰(weight decay)とも呼ばれます。

その他の正則化手法

手法仕組み
早期終了検証誤差が最小になった時点で学習を止める
ドロップアウト学習中にニューロンの出力の一部をランダムに0にする
ドロップコネクト学習中に重みの一部をランダムに0にする。ドロップアウトの一般化
重み共有複数の場所で同じ重みを使い、自由度を減らす。CNNのフィルタが代表例
バギングデータを復元抽出して複数のモデルを作り、結果を平均や多数決でまとめる。ランダムフォレストが代表例
ブースティング前のモデルが間違えたデータを重視しながら、モデルを順番に追加する

練習問題4

早期終了(early stopping)では、どの時点で学習を止めますか。

A. 訓練誤差が最小になった時点
B. 検証誤差が最小になった時点
C. 訓練誤差が検証誤差を超えた時点
D. 学習率が一定値を下回った時点

解答と解説

正解:B

検証誤差は、未知のデータに対する性能の目安です。検証誤差が下がらなくなり、上がり始めた時点が過学習の始まりなので、その直前の最小点のパラメータを採用します。

Aの訓練誤差は学習を続けるほど下がり続けるため、止める基準になりません。Cは、通常の学習では訓練誤差のほうが検証誤差より小さいので、判定基準として意味を持ちません。Dの学習率は、スケジューラで調整する別の話題です。実務では、検証誤差が数エポック改善しなければ止める「patience」という設定値と組み合わせて使います。

5. 正規化層:バッチ正規化とその仲間の違い

比較の軸

正規化層は、層への入力を平均0、分散1付近にそろえて学習を安定させる仕組みです。種類の違いは「どの範囲で平均と分散を計算するか」だけです。

初出の記号を説明します。

  • \mu (ミュー):平均(mean)
  • \sigma (シグマ):標準偏差(standard deviation)。\sigma^2 は分散
  • \epsilon (イプシロン):0で割ることを防ぐための小さな値
  • \gamma (ガンマ):正規化後の値の幅を調整する学習パラメータ(scale)
  • \beta (ベータ):正規化後の値の位置をずらす学習パラメータ(shift)

\hat{h} = \frac{h - \mu}{\sqrt{\sigma^2 + \epsilon}}

h' = \gamma \hat{h} + \beta

2つ目の式で \gamma \beta を掛けたり足したりするのは、正規化によってモデルの表現力が失われないようにするためです。必要なら、学習によって元の分布に戻すこともできます。

記号表(PyTorchのBatchNorm2dの既定値)

記号読み方意味初期値
\gamma ガンマscale(拡大率)1
\beta ベータshift(平行移動量)0
\epsilon イプシロン0除算防止の小さな値0.00001
\mu ミューmean(ミニバッチの平均)データから計算
\sigma^2 シグマ二乗variance(ミニバッチの分散)データから計算

数値で確認する

あるノードへの入力が、ミニバッチ内で2、4、6だったとします。

  • 平均:\mu = (2 + 4 + 6) / 3 = 4
  • 分散:\sigma^2 = ((2 - 4)^2 + 0 + (6 - 4)^2) / 3 = 8 / 3 \approx 2.667
  • 標準偏差:\sqrt{2.667} \approx 1.633
  • 正規化後:約マイナス1.225、0、1.225

初期値では \gamma = 1 \beta = 0 なので、出力は正規化後の値と同じです。

推論時は、ミニバッチの統計量ではなく、学習中に計算しておいた平均と分散の移動平均を使います。推論時は1件ずつ入力されることがあり、その場で平均を計算できないためです。

正規化手法の比較

特徴マップの形を(N:バッチ、C:チャンネル、H:高さ、W:幅)とします。

手法平均と分散を計算する範囲主な用途
バッチ正規化チャンネルごとに、N・H・W方向一般的なCNN
レイヤー正規化データごとに、C・H・W方向RNN、Transformer
インスタンス正規化データごと、チャンネルごとに、H・W方向スタイル変換
グループ正規化データごとに、チャンネルのグループ単位で小さいバッチサイズでの学習

バッチ正規化には、学習率を大きくできる、初期値への依存が小さくなる、過学習を抑える効果がある、という利点があります。一方、ミニバッチが極端に小さい場合は統計量が不安定になり、効果が落ちます。

練習問題5

画像のスタイル変換でよく使われ、データごと・チャンネルごとに平均と分散を計算する正規化手法はどれですか。

A. バッチ正規化
B. レイヤー正規化
C. インスタンス正規化
D. グループ正規化

解答と解説

正解:C

インスタンス正規化は、1枚の画像の1チャンネルごとに正規化します。画像ごとのコントラストの違いを打ち消せるため、元画像の明るさに左右されずに画風を適用できます。

Aのバッチ正規化は、バッチ内の複数画像をまとめて統計量を計算します。Bのレイヤー正規化は、1データの全チャンネルをまとめて計算します。Dのグループ正規化は、チャンネルをいくつかのグループに分けて計算します。グループ数をチャンネル数と同じにするとインスタンス正規化に、グループ数を1にするとレイヤー正規化に一致します。この関係を覚えておくと、4つをまとめて整理できます。

6. 最適化手法:SGDからAdamまでの進化

比較の軸

最適化手法は、「勾配をそのまま使うか」「過去の勾配を覚えておくか」「パラメータごとに歩幅を変えるか」の3点で区別します。

初出の記号を説明します。

  • \theta (シータ):更新するパラメータ(重みやバイアス)
  • \eta (イータ):学習率(learning rate)。1回の更新の歩幅
  • \alpha (アルファ):モメンタムの減衰率。過去の速度をどれだけ残すか
  • \rho (ロー):移動平均の減衰率。過去の勾配の二乗をどれだけ残すか
  • \nabla (ナブラ):勾配を表す記号
  • \odot :要素ごとの積(アダマール積)

g は勾配 \partial L / \partial \theta を表します。

各手法の更新式

SGD(確率的勾配降下法)

\theta \leftarrow \theta - \eta g

Momentum(モメンタム)

v \leftarrow \alpha v - \eta g

\theta \leftarrow \theta + v

Nesterov(ネステロフ):少し先に進んだ位置で勾配を計算します。

v \leftarrow \alpha v - \eta \nabla L(\theta + \alpha v)

\theta \leftarrow \theta + v

AdaGrad(アダグラッド)

h \leftarrow h + g \odot g

\theta \leftarrow \theta - \eta \frac{1}{\sqrt{h} + \epsilon} \odot g

RMSProp

h \leftarrow \rho h + (1 - \rho) g \odot g

\theta \leftarrow \theta - \eta \frac{1}{\sqrt{h} + \epsilon} \odot g

Adam(アダム)

m \leftarrow \rho_1 m + (1 - \rho_1) g

v \leftarrow \rho_2 v + (1 - \rho_2) g \odot g

\hat{m} = \frac{m}{1 - \rho_1^t}

\hat{v} = \frac{v}{1 - \rho_2^t}

\theta \leftarrow \theta - \eta \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon}

MomentumとAdamのどちらにも v が出てきますが、意味が違います。Momentumの v は速度(velocity)、Adamの v は勾配の二乗の移動平均です。

手法過去の勾配を使うかパラメータごとに歩幅を変えるか一言でいうと
SGD使わない変えない基本形
Momentum勾配の移動平均を使う変えない慣性で谷を転がる
AdaGrad勾配の二乗を累積する変えるよく動いた方向は歩幅を小さく
RMSProp勾配の二乗の移動平均を使う変えるAdaGradの失速を解消
Adam両方の移動平均を使う変えるMomentumとRMSPropの組み合わせ

AdaGradは勾配の二乗を足し続けるため、h が単調に増えます。学習が進むほど歩幅が小さくなり、やがてほとんど更新されなくなります。RMSPropは移動平均で古い勾配を忘れるため、この問題を解消できます。

記号表(PyTorchのAdamの既定値)

記号読み方意味初期値
\eta イータlearning rate(学習率)0.001
\rho_1 ロー11次モーメントの減衰率0.9
\rho_2 ロー22次モーメントの減衰率0.999
\epsilon イプシロン0除算防止の小さな値0.00000001
m エムmoment(勾配の移動平均)0
v ブイ勾配の二乗の移動平均0
t ティーtime step(更新回数)1から数える

数値で確認する:Adamの1回目の更新

\theta = 1.0 、勾配 g = 0.5 とします。

  • m = 0.9 \times 0 + 0.1 \times 0.5 = 0.05
  • v = 0.999 \times 0 + 0.001 \times 0.25 = 0.00025
  • \hat{m} = 0.05 / (1 - 0.9) = 0.5
  • \hat{v} = 0.00025 / (1 - 0.999) = 0.25
  • 更新量:0.001 \times 0.5 / (\sqrt{0.25} + 0.00000001) \approx 0.001
  • 更新後:\theta \approx 0.999

バイアス補正をしないと、m v は初期値0に引っ張られて小さすぎる値になります。補正によって、学習初期から適切な大きさで更新できます。

コラム:Adamという名前の由来
Adamは人名ではなく、Adaptive Moment Estimation(適応的モーメント推定)の略です。勾配の1次モーメント(平均)と2次モーメント(二乗の平均)を推定しながら、パラメータごとに歩幅を適応的に変えることから名付けられました。

練習問題6

AdaGradでは、学習が進むと更新幅が小さくなりすぎる問題があります。この問題を、勾配の二乗の指数移動平均を使うことで改善した手法はどれですか。

A. RMSProp
B. Momentum
C. Nesterov
D. SGD

解答と解説

正解:A

RMSPropは、勾配の二乗を単純に累積せず、減衰率 \rho で古い情報を忘れながら平均します。そのため、h が際限なく大きくならず、学習の後半でも更新が続きます。

BのMomentumとCのNesterovは、勾配の移動平均で慣性をつける手法で、パラメータごとの歩幅調整は行いません。DのSGDは過去の勾配を使わない基本形です。実務では、まずAdamを既定値で試し、性能が伸び悩んだらSGDとMomentumの組み合わせを比較する、という進め方がよく使われます。

7. CNNの構造:パラメータ数を数値で比較する

比較の軸

CNNの工夫は、「少ないパラメータで、広い範囲を、効率よく見る」ための工夫です。パラメータ数を実際に計算すると、違いがはっきりします。

通常の畳み込みのパラメータ数(バイアスを除く)は、次の式で求めます。k はフィルタの一辺の大きさ、C_{in} は入力チャンネル数、C_{out} は出力チャンネル数です。

P_{std} = k^2 C_{in} C_{out}

MobileNetで使われる深さ方向分離可能畳み込みは、これを2段階に分けます。

P_{dw} = k^2 C_{in}

P_{pw} = C_{in} C_{out}

depthwise畳み込みは、チャンネルごとに独立して空間方向の畳み込みを行います。pointwise畳み込みは、1×1のフィルタでチャンネル方向の情報を混ぜ合わせます。

数値で確認する

k = 3 C_{in} = 64 C_{out} = 128 の場合です。

方式計算パラメータ数
通常の畳み込み3×3×64×12873,728
depthwise3×3×64576
pointwise64×1288,192
depthwise + pointwise576 + 8,1928,768

約8.4分の1に減っています。

その他の構造上の工夫

手法工夫覚え方
VGG3×3の小さなフィルタを重ねる3×3を2回で5×5と同じ範囲を見る。パラメータは18対25
GoogLeNetInceptionモジュールで複数サイズのフィルタを並列に使う最後はGlobal Average Poolingで全結合層を減らす
ResNetスキップ接続で入力を出力に足す足し算。勾配が流れやすく100層以上でも学習できる
DenseNetそれまでの特徴マップをチャンネル方向に連結する連結。特徴の再利用
ダイレイト畳み込みフィルタの要素の間を空ける少ないパラメータで広い範囲を見る
転置畳み込み入力の間を埋めてから畳み込む画像を拡大する。生成モデルやセグメンテーションで使う

ダイレイト畳み込みで実際に見える範囲は、間隔を d とすると次のとおりです。

k_{eff} = k + (k - 1)(d - 1)

k = 3 d = 2 なら、3 + 2 \times 1 = 5 で、5×5の範囲を9個のパラメータで見られます。

練習問題7

入力64チャンネル、出力128チャンネルのpointwise畳み込みのパラメータ数(バイアスを除く)はいくつですか。

A. 576
B. 73,728
C. 8,768
D. 8,192

解答と解説

正解:D

pointwise畳み込みはフィルタサイズが1×1なので、1 \times 1 \times 64 \times 128 = 8,192 です。

Aの576はdepthwise畳み込み(3×3×64)の値です。Bの73,728は通常の3×3畳み込みの値です。Cの8,768はdepthwiseとpointwiseの合計です。試験では、どの部分のパラメータ数を問われているのかを必ず確認してください。実務でも、スマートフォンなど計算資源が限られた環境では、この削減効果がモデル選定の決め手になります。

8. 物体検出とセグメンテーション:手法の系譜

比較の軸

物体検出の手法は、「候補領域をどう出すか」と「処理を何段階で行うか」で整理できます。

手法候補領域の出し方特徴
R-CNNSelective Search候補ごとにCNNを実行するため遅い
Fast R-CNNSelective Search画像全体のCNNを1回だけ実行する。分類と位置の回帰を同時に学習する
Faster R-CNN領域提案ネットワーク(RPN)候補領域の抽出もCNNで行う
Mask R-CNNRPNFaster R-CNNに画素単位のマスク出力を追加。わずかに遅い
YOLO画像を格子に分割1回の処理で検出する。非常に速い
SSD複数解像度の特徴マップ小さな物体と大きな物体を同時に扱いやすい

Faster R-CNNでは、特徴マップの各位置に、大きさや縦横比の異なる k 個のアンカーボックスを置きます。特徴マップが38×50、k = 9 なら、38 \times 50 \times 9 = 17,100 個です。

予測枠と正解枠の重なり具合は、IoU(Intersection over Union)で測ります。

IoU = \frac{|A \cap B|}{|A \cup B|}

予測枠の面積が50、正解枠の面積が40、重なりが30なら、和集合は 50 + 40 - 30 = 60 なので、IoU = 30 / 60 = 0.5 です。

同じ物体に複数の枠が重なった場合は、非最大値抑制(NMS)で信頼度が最も高い枠を残し、それと大きく重なる他の枠を削除します。

セグメンテーション手法の比較

手法特徴
FCN全結合層を使わず畳み込み層だけで構成する。入力サイズが変わっても使える
SegNetエンコーダーで最大値プーリングした位置を記憶し、デコーダーで拡大するときに使う
U-Netエンコーダーの特徴マップをデコーダーにチャンネル方向で連結する。医療画像で広く使われる
条件付き確率場(CRF)画素同士の関係をグラフで表し、孤立した誤分類を修正する後処理

練習問題8

SegNetの特徴として正しいものはどれですか。

A. 全結合層で画素ごとの確率を出す
B. プーリング位置を記憶して拡大に使う
C. 候補領域をSelective Searchで出す
D. 3種類の格子サイズで同時に検出する

解答と解説

正解:B

SegNetは、縮小時に最大値をとった位置(プーリングインデックス)を保存し、拡大時にその位置へ値を戻します。特徴マップそのものを保存しないため、メモリ効率が良いのが特徴です。

Aは誤りで、セグメンテーション手法は一般に全結合層を使わず、畳み込み層で画素ごとの出力を作ります。CはR-CNNとFast R-CNNの特徴です。DはYOLO v3の特徴で、3種類の大きさの格子で出力します。U-Netとの違いは「位置情報だけを渡すか(SegNet)、特徴マップを丸ごと連結するか(U-Net)」と覚えると整理しやすくなります。

9. 系列モデル:LSTMとGRUの違い

比較の軸

LSTMとGRUは、どちらも通常のRNNで起きる勾配消失を防ぐための仕組みです。違いは「状態をいくつ持つか」と「ゲートをいくつ持つか」です。

この節の \sigma は、標準偏差ではなくシグモイド関数を表します。記号が同じなので注意してください。

\sigma(z) = \frac{1}{1 + e^{-z}}

シグモイド関数は出力が0から1の間になるため、「情報を何割通すか」を決めるゲートに使います。一方、\tanh は出力がマイナス1から1の間になるため、記憶する内容そのものの計算に使います。

LSTMの式

f_t = \sigma(W_f x_t + U_f h_{t-1} + b_f)

i_t = \sigma(W_i x_t + U_i h_{t-1} + b_i)

o_t = \sigma(W_o x_t + U_o h_{t-1} + b_o)

$latex \tilde{c}t = \tanh(W_c x_t + U_c h{t-1} + b_c) $

c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t

h_t = o_t \odot \tanh(c_t)

記号意味
f_t 忘却ゲート(forget)。過去の記憶を何割残すか
i_t 入力ゲート(input)。新しい情報を何割加えるか
o_t 出力ゲート(output)。記憶のうち何割を外に出すか
c_t 記憶セル(cell)
h_t 隠れ状態(hidden state)
W U b 入力用の重み、隠れ状態用の重み、バイアス

GRUの式

z_t = \sigma(W_z x_t + U_z h_{t-1} + b_z)

r_t = \sigma(W_r x_t + U_r h_{t-1} + b_r)

$latex \tilde{h}t = \tanh(W_h x_t + U_h (r_t \odot h{t-1}) + b_h) $

h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t

z_t は更新ゲート(update)で、LSTMの忘却ゲートと入力ゲートを1つにまとめた役割を持ちます。r_t はリセットゲート(reset)で、過去の隠れ状態をどれだけ無視するかを決めます。

項目LSTMGRU
状態記憶セルと隠れ状態の2つ隠れ状態の1つ
ゲート忘却・入力・出力の3つ更新・リセットの2つ
パラメータ数多い少ない
計算速度遅め速め

数値で確認する

前の記憶セルが5.0、忘却ゲートが0.2、入力ゲートが0.5、新しい記憶の候補が0.8だったとします。

c_t = 0.2 \times 5.0 + 0.5 \times 0.8 = 1.0 + 0.4 = 1.4

忘却ゲートが0.2なので、過去の記憶は2割だけ残り、8割は忘れられます。

記憶セルの更新は、足し算と要素ごとの掛け算だけでできています。勾配が行列の掛け算や活性化関数を何度も通らないため、時間をさかのぼっても勾配が消えにくくなります。

コラム:Long Short-Term Memoryという名前
LSTMは「長い短期記憶」と直訳できます。矛盾した名前に見えますが、RNNが持つ短期記憶(直前の状態)を、長い時間にわたって保てるようにした仕組み、という意味です。

練習問題9

GRUの説明として正しいものはどれですか。

A. 記憶セルと隠れ状態の2つを持つ
B. 忘却・入力・出力の3ゲートを持つ
C. 隠れ状態のみでゲートは2つである
D. ゲートの活性化にtanhのみを使う

解答と解説

正解:C

GRUは記憶セルを持たず、隠れ状態だけで情報を保持します。ゲートは更新ゲートとリセットゲートの2つです。

AとBはLSTMの説明です。Dは誤りで、ゲートには0から1の値を出すシグモイド関数を使います。tanhは新しい隠れ状態の候補の計算に使います。実務では、データ量が少ない場合や計算資源が限られる場合はGRU、長い依存関係を細かく扱いたい場合はLSTMを試す、という選び方が一般的です。ただし、どちらが良いかはタスクによって変わるため、実際に比較して決めます。

10. 強化学習:SarsaとQ学習の違い

比較の軸

SarsaとQ学習の違いは、「更新の目標に、次に実際に選ぶ行動を使うか、最も価値の高い行動を使うか」の一点です。

この節の記号を説明します。ここでの \alpha は学習率、\gamma は割引率で、前の節とは意味が違います。

  • \alpha (アルファ):学習率。目標にどれだけ近づけるか
  • \gamma (ガンマ):割引率。将来の報酬をどれだけ重視するか
  • Q(s, a) :状態 s (state)で行動 a (action)をとったときの価値
  • r :報酬(reward)

Sarsaの更新式

Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)]

Q学習の更新式

Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_{t+1} + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t)]

角かっこの中はTD誤差と呼ばれ、目標値と現在の予測値のずれを表します。

項目SarsaQ学習
目標値次に実際に選んだ行動の価値次の状態で最大の価値
方策の種類方策オン型(On-Policy)方策オフ型(Off-Policy)
性格探索中の失敗も反映するため慎重最善の行動を前提とするため楽観的

数値で確認する

現在の Q(s_t, a_t) = 2.0 、報酬 r = 1 \gamma = 0.9 \alpha = 0.1 とします。次の状態で実際に選んだ行動の価値は3.0、次の状態で最大の価値は5.0です。

  • Sarsaの目標値:1 + 0.9 \times 3.0 = 3.7 。更新後は 2.0 + 0.1 \times (3.7 - 2.0) = 2.17
  • Q学習の目標値:1 + 0.9 \times 5.0 = 5.5 。更新後は 2.0 + 0.1 \times (5.5 - 2.0) = 2.35

価値を推定する3つのアプローチ

手法特徴
動的計画法環境の完全なモデル(遷移確率と報酬)が必要。方策反復法、価値反復法
モンテカルロ法エピソードの終了まで待ち、実際に得た収益の平均で価値を推定する
TD学習1ステップごとに、目標値とのずれで価値を更新する。SarsaとQ学習

DQNの工夫

Q学習の価値関数をニューラルネットワークで近似したものがDQN(Deep Q-Network)です。学習を安定させるために、次の工夫をします。

工夫内容効果
体験再生経験をメモリに保存し、ランダムに取り出して学習する連続したデータの相関を弱め、経験を再利用できる
目標ネットワーク目標値の計算用に、一定期間固定したネットワークを使う目標値が揺れ動かなくなり、学習が安定する
報酬クリッピング報酬をプラス1、0、マイナス1に制限するゲームごとの報酬の大きさの違いを吸収する
Huber損失誤差が小さいときは二乗誤差、大きいときは絶対誤差に近い形を使う大きな誤差で勾配が暴れるのを防ぐ

Huber損失は、誤差を e 、境界を \delta (デルタ)とすると、|e| \leq \delta のとき \frac{1}{2} e^2 、それ以外のとき \delta (|e| - \frac{1}{2} \delta) です。DQNでは \delta = 1 がよく使われます。

練習問題10

Q学習についての説明として正しいものはどれですか。

A. 次状態で最大のQ値を目標に使う
B. 実際に選んだ次の行動で更新する
C. 環境の完全なモデルを必要とする
D. エピソード終了後にのみ更新する

解答と解説

正解:A

Q学習は、次の状態で実際にどの行動を選ぶかに関係なく、最大のQ値を使って目標値を作ります。行動を選ぶ方策と、更新に使う方策が異なるため、方策オフ型と呼ばれます。

BはSarsaの説明です。Cは動的計画法の説明で、Q学習は環境のモデルを必要としません。Dはモンテカルロ法の説明で、Q学習は1ステップごとに更新します。崖の近くを歩くロボットのように、探索中の失敗が大きな損害につながる場面では、慎重な経路を学びやすいSarsaが選ばれることがあります。

11. 情報理論:交差エントロピーとKLダイバージェンスの関係

比較の軸

情報理論の指標は、次の1つの式で関係をまとめて覚えます。

H(P, Q) = H(P) + D_{KL}(P | Q)

交差エントロピー = エントロピー + KLダイバージェンス、という関係です。

各指標の定義は、次のとおりです。P は真の分布、Q はモデルが予測した分布です。

H(P) = -\sum_{i} P(x_i) \log_2 P(x_i)

H(P, Q) = -\sum_{i} P(x_i) \log_2 Q(x_i)

D_{KL}(P | Q) = \sum_{i} P(x_i) \log_2 \frac{P(x_i)}{Q(x_i)}

指標意味
エントロピー真の分布そのものが持つ不確かさ
交差エントロピー真の分布のデータを、予測分布で説明しようとしたときの不確かさ
KLダイバージェンス2つの分布のずれ。常に0以上で、分布が一致するときだけ0

対数の底を2にすると単位はビット、自然対数(底が e )にすると単位はナットになります。

数値で確認する

コインの裏表の真の分布を P = (0.5, 0.5) 、モデルの予測を Q = (0.8, 0.2) とします。

  • エントロピー:H(P) = -0.5 \log_2 0.5 - 0.5 \log_2 0.5 = 1.0
  • 交差エントロピー:H(P, Q) = -0.5 \log_2 0.8 - 0.5 \log_2 0.2 \approx 0.5 \times 0.322 + 0.5 \times 2.322 = 1.322
  • KLダイバージェンス:1.322 - 1.0 = 0.322

機械学習で交差エントロピーを損失関数に使うのは、真の分布のエントロピー H(P) がモデルに依存しない定数だからです。交差エントロピーを最小化することは、KLダイバージェンスを最小化すること、つまり予測分布を真の分布に近づけることと同じ意味になります。

KLとJSの違い

KLダイバージェンスは、P Q を入れ替えると値が変わります。そのため、厳密な意味での距離ではありません。これを対称にしたものが、JSダイバージェンス(ジェンセン・シャノン・ダイバージェンス)です。

D_{JS}(P | Q) = \frac{1}{2} D_{KL}(P | M) + \frac{1}{2} D_{KL}(Q | M)

M = \frac{P + Q}{2}

JSダイバージェンスは、GANの理論的な解析で登場します。

練習問題11

KLダイバージェンスについて正しいものはどれですか。

A. PとQを入れ替えても値は同じ
B. 負の値をとることがある
C. 交差エントロピーより常に大きい
D. 0になるのはPとQが一致するとき

解答と解説

正解:D

KLダイバージェンスは常に0以上で、2つの分布が完全に一致するときだけ0になります。

Aは誤りで、入れ替えると一般に値が変わります。対称なのはJSダイバージェンスです。Bは誤りで、負の値にはなりません。Cは誤りで、交差エントロピーはKLダイバージェンスにエントロピー(0以上)を足したものなので、KLダイバージェンスが交差エントロピーを超えることはありません。関係式を1つ覚えておけば、この種の問題はすべて式から判断できます。

12. ソフトマックスと交差エントロピーの逆伝播

比較の軸

分類問題の出力層では、ソフトマックス関数と交差エントロピー損失を組み合わせて使います。この組み合わせの逆伝播は、非常に単純な形になります。

y_k = \frac{e^{x_k}}{\sum_{j} e^{x_j}}

L = -\sum_{k} t_k \log y_k

\frac{\partial L}{\partial x_k} = y_k - t_k

x_k はソフトマックスへの入力(ロジット)、y_k は予測確率、t_k は正解ラベル(target)で、正解クラスだけ1、他は0です。

勾配は「予測 − 正解」です。予測が正解に近いほど勾配が小さくなり、更新も小さくなります。

数値で確認する

ロジットが(2.0、1.0、0.0)、正解がクラス1の場合です。

  • 指数:e^{2} \approx 7.389 e^{1} \approx 2.718 e^{0} = 1 。合計は約11.107
  • 予測確率:約(0.665、0.245、0.090)
  • 損失:-\log 0.665 \approx 0.408 (自然対数)
  • 勾配:約(マイナス0.335、0.245、0.090)

正解クラスの勾配はマイナスなので、そのロジットは大きくなる方向に更新されます。他のクラスは小さくなる方向に更新されます。

実装上の注意

ロジットが大きいと、指数関数の計算であふれ(オーバーフロー)が起きます。ソフトマックスは入力全体から同じ値を引いても結果が変わらないため、最大値を引いてから計算します。

import numpy as np

def softmax(x):
    # 行ごとの最大値を引いてオーバーフローを防ぐ
    x = x - np.max(x, axis=-1, keepdims=True)
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x, axis=-1, keepdims=True)

def cross_entropy(y, t):
    # log(0) を防ぐために小さな値を足す
    delta = 1e-7
    return -np.sum(t * np.log(y + delta), axis=-1)

x = np.array([[2.0, 1.0, 0.0]])
t = np.array([[1.0, 0.0, 0.0]])

y = softmax(x)
print(y)                    # 約 [[0.665 0.245 0.090]]
print(cross_entropy(y, t))  # 約 [0.408]
print(y - t)                # 勾配 約 [[-0.335 0.245 0.090]]

全結合層(Affine変換)の逆伝播

出力層の前にある全結合層の逆伝播も、形状で確認すると覚えやすくなります。

H = XW + B

\frac{\partial L}{\partial W} = X^{T} \frac{\partial L}{\partial H}

\frac{\partial L}{\partial X} = \frac{\partial L}{\partial H} W^{T}

X の形状が(N、D)、W が(D、M)なら、H は(N、M)です。X^{T} (D、N)と \partial L / \partial H (N、M)の積は(D、M)となり、W と同じ形状になります。バイアス B の勾配は、\partial L / \partial H をバッチ方向に合計したものです。転置をどちらに付けるか迷ったら、形状が合う組み合わせを選べば正解にたどり着けます。

練習問題12

ソフトマックス関数と交差エントロピー損失を組み合わせた出力層で、予測が(0.7、0.2、0.1)、正解がクラス2(t = (0, 1, 0))でした。2番目の入力に関する損失の勾配はいくつですか。

A. 0.2
B. -0.8
C. 0.8
D. -0.2

解答と解説

正解:B

勾配は予測から正解を引いた値なので、0.2 - 1 = -0.8 です。

Aは予測値をそのまま答えたもので、正解ラベルを引き忘れています。Cは符号が逆で、「正解 − 予測」と覚え違えた場合の答えです。Dは予測値に正解ラベル以外の値を使った誤りです。符号がマイナスということは、2番目のロジットを大きくする方向に更新されることを意味します。この向きまで説明できると、勾配降下法の理解が確かなものになります。

13. 特徴選択:フィルタ法・ラッパー法・埋め込み法の違い

比較の軸

特徴選択は、予測に役立つ特徴量だけを選び出す作業です。3つの方法は「モデルの学習と特徴量の選択を、どのような関係で行うか」で区別します。

手法選び方計算コスト代表例
フィルタ法モデルを使わず、相関係数などの統計量で選ぶ小さい相関係数、カイ二乗検定
ラッパー法特徴量の組み合わせを変えながら、学習と評価を繰り返す大きいステップワイズ法
埋め込み法モデルの学習と同時に選ぶ中程度L1正則化(Lasso)

数値で確認する

特徴量が20個あるとします。すべての組み合わせを試すと、空の組み合わせを除いて 2^{20} - 1 = 1,048,575 通りです。ラッパー法を総当たりで行うと、これだけの回数の学習が必要になります。そのため、特徴量を1つずつ追加または削除するステップワイズ法などで、試す組み合わせを減らします。

初学者がつまずきやすい点

ラッパー法は、検証データでの性能を直接見て選ぶため、良い組み合わせを見つけやすい方法です。その反面、何度も検証データで評価するため、検証データに過剰に適合する危険があります。最終的な性能は、選択に使っていないテストデータで確認します。

練習問題13

特徴量の組み合わせを変えながらモデルの学習と評価を何度も繰り返すため、計算コストが高くなる特徴選択の方法はどれですか。

A. フィルタ法
B. ラッパー法
C. 埋め込み法
D. 主成分分析

解答と解説

正解:B

ラッパー法は、モデルを「包み込む(wrap)」ように外側から特徴量の組み合わせを変え、そのたびに学習と評価を行います。

Aのフィルタ法はモデルを使わないため、計算は軽くなります。Cの埋め込み法は、1回の学習の中で重みが0になった特徴量を除くため、ラッパー法ほど重くありません。Dの主成分分析は、元の特徴量を選ぶのではなく、新しい軸を作って次元を減らす手法なので、特徴選択ではなく特徴抽出に分類されます。実務では、まずフィルタ法で大まかに絞り込み、残った特徴量にラッパー法や埋め込み法を使う、という組み合わせがよく使われます。

14. ハイパーパラメータ探索:グリッドサーチ・ランダムサーチ・ベイズ最適化

比較の軸

ハイパーパラメータは、学習率や正則化の強さなど、人が事前に決める設定値です。探索手法は「次に試す点をどう決めるか」で区別します。

手法次に試す点の決め方特徴
グリッドサーチあらかじめ決めた格子点をすべて試す確実だが、組み合わせが増えると時間がかかる
ランダムサーチランダムに選ぶ速いが、最適な点を逃す可能性がある
ベイズ最適化これまでの結果から、有望な点を予測して選ぶ少ない試行回数で良い点に近づきやすい

数値で確認する:グリッドサーチの試行回数

ハイパーパラメータが3種類あり、それぞれ5通りの値を試すとします。試行回数は 5^3 = 125 回です。1回の学習に10分かかるなら、約21時間です。

ランダムサーチでは、同じ125回でも各ハイパーパラメータについて最大125通りの異なる値を試せます。性能に強く影響するハイパーパラメータが少数しかない場合、ランダムサーチのほうが効率よく良い値にたどり着けることが知られています。

ベイズ最適化の仕組み

ベイズ最適化では、ガウス過程回帰などで「この点を試したら性能はどのくらいか」を予測します。予測には、平均値と不確かさ(標準偏差)の両方が含まれます。そのうえで、獲得関数(acquisition function)を使って次に試す点を決めます。

獲得関数選び方
PI(Probability of Improvement)現在の最良値を上回る確率が最も高い点を選ぶ
EI(Expected Improvement)改善量の期待値が最も大きい点を選ぶ
UCB(Upper Confidence Bound)予測の上限が最も高い点を選ぶ。最大化の問題で使う
LCB(Lower Confidence Bound)予測の下限が最も低い点を選ぶ。最小化の問題で使う

UCBの式は次のとおりです。ここでの \mu(x) \sigma(x) は、ガウス過程が予測した平均と標準偏差です。新しく出てくる \kappa (カッパ)は、不確かさをどれだけ重視するかを決める係数です。

UCB(x) = \mu(x) + \kappa \sigma(x)

記号読み方意味値の例
\mu(x) ミュー予測性能の平均(mean)0.80
\sigma(x) シグマ予測の不確かさ(standard deviation)0.05
\kappa カッパ探索の重視度2.0

候補点Aは \mu = 0.80 \sigma = 0.05 、候補点Bは \mu = 0.75 \sigma = 0.10 とします。\kappa = 2 のとき、次のようになります。

  • 点A:0.80 + 2 \times 0.05 = 0.90
  • 点B:0.75 + 2 \times 0.10 = 0.95

予測平均は点Aのほうが高いのに、UCBでは点Bが選ばれます。まだよく分かっていない領域にも「掘り出し物があるかもしれない」と考えて探索するためです。有望な場所を深掘りすることを活用、未知の場所を調べることを探索と呼び、獲得関数はこの両者のバランスをとる役割を持ちます。

練習問題14

ベイズ最適化の獲得関数のうち、改善量の期待値が最も大きい点を次の探索点として選ぶものはどれですか。

A. PI
B. UCB
C. LCB
D. EI

解答と解説

正解:D

EI(Expected Improvement)は、名前のとおり改善量(Improvement)の期待値(Expected)が最大になる点を選びます。

AのPIは、改善する確率だけを見るため、わずかな改善しか見込めない点でも選ばれることがあります。BのUCBは予測の上限、CのLCBは予測の下限を基準にします。PIとEIの違いは、「改善するかどうか」だけを見るか、「どれだけ改善するか」まで見るか、と覚えると区別できます。

15. モデルの検証方法:ホールドアウト法と交差検証の違い

比較の軸

検証方法は、「データを何回、どのように分けて評価するか」で区別します。

手法分け方学習回数
ホールドアウト法訓練用と検証用に1回だけ分ける1回
k分割交差検証データをk個に分け、1つずつ検証用にするk回
1つ抜き法(Leave-One-Out)1件だけを検証用にすることを全件で繰り返すデータ数と同じ回数
層化k分割交差検証各分割でクラスの比率が同じになるように分けるk回
時系列分割過去のデータで学習し、未来のデータで検証する分割数と同じ回数

数値で確認する

データが1,000件あるとします。

  • ホールドアウト法(訓練7割):訓練700件、検証300件で1回学習
  • 5分割交差検証:訓練800件、検証200件で5回学習
  • 1つ抜き法:訓練999件、検証1件で1,000回学習

1つ抜き法は、ジャックナイフ法とも呼ばれます。データを最大限に学習へ使えるため、データが少ない場合に向いています。ただし、学習回数がデータ数と同じになるため、大規模なデータでは現実的ではありません。

初学者がつまずきやすい点

時系列データで通常の交差検証を使うと、未来のデータで学習して過去を予測することになります。実際の運用では起こりえない状況なので、性能を過大評価してしまいます。時系列データでは、必ず時間の順序を守って分割します。

練習問題15

1つ抜き法(Leave-One-Out)の説明として正しいものはどれですか。

A. データ数と同じ回数だけ学習を行う
B. データを1回だけ訓練と検証に分ける
C. 時系列の順序を守って分割を行う
D. クラスの比率を保って分割を行う

解答と解説

正解:A

1つ抜き法は、1件を検証用、残りを訓練用にする操作を全データについて行います。そのため、学習回数はデータ数と同じになります。k分割交差検証で、kをデータ数と同じにした特別な場合と考えることもできます。

Bはホールドアウト法、Cは時系列分割、Dは層化k分割交差検証の説明です。研修や実務でデータ数が数十件しかない場合は、1つ抜き法を使うと評価結果が安定しやすくなります。

16. SVM:ハードマージンとソフトマージン、カーネルトリック

比較の軸

SVM(Support Vector Machine:サポートベクターマシン)は、2つのクラスを分ける境界線を、両クラスから最も離れた位置に引く手法です。境界線と、境界線に最も近いデータとの距離をマージンと呼びます。境界線に最も近いデータを、サポートベクトルと呼びます。

ハードマージンSVMとソフトマージンSVMは、「誤分類を許すかどうか」で区別します。

ソフトマージンSVMは、次の式を最小化します。初出の記号 \xi (グザイ)はスラック変数で、各データがマージンの内側にどれだけはみ出したかを表します。

\min_{w, b, \xi} \frac{1}{2} |w|^2 + C \sum_{i} \xi_i

第1項を小さくすることはマージンを大きくすることに対応し、第2項ははみ出しへの罰を表します。

記号読み方意味値の例
w ダブリュー境界線の向きを決める重み(weight)学習で決まる
b ビー境界線の位置を決めるバイアス(bias)学習で決まる
\xi_i グザイi番目のデータのはみ出し量(slack)0以上
C シーはみ出しへの罰の強さ(cost)1.0(scikit-learnのSVCの既定値)

C を大きくすると誤分類を強く罰するため、ハードマージンに近づきます。小さくすると誤分類をある程度許し、マージンを広くとります。

カーネルトリック

直線で分けられないデータも、高次元の空間に写すと分けられることがあります。しかし、実際に高次元へ変換してから内積を計算すると、計算量が膨大になります。

カーネルトリックは、高次元での内積の結果を、元の空間で計算できる関数(カーネル関数)で直接求める工夫です。よく使われるのがRBFカーネル(動径基底関数カーネル)です。ここでの \gamma は、正規化層のガンマとは意味が異なり、影響範囲の広さを決める係数です。

k(x, x') = \exp(-\gamma |x - x'|^2)

x = (1, 2) x' = (2, 4) \gamma = 0.1 のとき、距離の二乗は 1^2 + 2^2 = 5 なので、k = \exp(-0.5) \approx 0.607 です。2点が近いほど1に近く、遠いほど0に近くなります。

その他の関連用語

用語内容
1クラスSVM正常データだけで学習し、境界の外側を異常とみなす。異常検知に使う
LIBSVMSVMの代表的なライブラリ。scikit-learnのSVCの内部でも使われている

コラム:サポートベクトルという名前
サポート(support)には「支える」という意味があります。境界線の位置は、境界に最も近い少数のデータだけで決まり、それ以外のデータを動かしても境界は変わりません。境界線を支えているベクトル、という意味でこの名前が付けられました。

練習問題16

スラック変数を導入し、ある程度の誤分類を許しながらマージンを最大化するSVMはどれですか。

A. ハードマージンSVM
B. 1クラスSVM
C. ソフトマージンSVM
D. 線形判別分析

解答と解説

正解:C

ソフトマージンSVMは、スラック変数 \xi ではみ出しを表し、その合計に罰を与えることで、マージンの大きさと誤分類の少なさのバランスをとります。

Aのハードマージンは誤分類を一切許さないため、データが直線で完全に分けられない場合は解が存在しません。Bの1クラスSVMは異常検知のための手法です。Dの線形判別分析は、クラス間の分散とクラス内の分散の比を使う別の分類手法です。実務のデータには必ず雑音が含まれるため、SVMといえば通常はソフトマージンを指します。

17. k近傍法とk-means:名前は似ているが目的が違う

比較の軸

どちらも名前に「k」が付き、距離を使う手法ですが、目的がまったく違います。

項目k近傍法(k-NN)k-means
学習の種類教師あり学習教師なし学習
目的分類(または回帰)クラスタリング
kの意味参照する近傍データの数作るクラスタの数
必要なデータラベル付きのデータラベルなしのデータ
判定方法近いk件のラベルの多数決最も近いクラスタ中心に割り当てる

k-means++の工夫

通常のk-meansは、最初のクラスタ中心をランダムに選びます。中心が近くに固まって選ばれると、収束が遅くなったり、偏った結果になったりします。

k-means++は、2つ目以降の中心を「既に選んだ中心から遠い点ほど選ばれやすい」確率で選びます。点 x から最も近い既存の中心までの距離を D(x) とすると、選ばれる確率は次のとおりです。

p(x) = \frac{D(x)^2}{\sum_{x'} D(x')^2}

数値で確認する

最初の中心を選んだ後、残りの3点の距離が1、2、3だったとします。

  • 距離の二乗:1、4、9(合計14)
  • 選ばれる確率:約0.071、約0.286、約0.643

最も遠い点が約64%の確率で選ばれます。ただし、確率的に選ぶため、外れ値ばかりが中心に選ばれることも避けられます。この選び方は、確率に比例して選ぶことからルーレット選択とも呼ばれます。

練習問題17

k-means++の工夫として正しいものはどれですか。

A. 近傍 k 点の多数決でラベルを決める
B. クラスタ数 k を自動で決定する
C. 距離の代わりに内積で類似度を測る
D. 初期中心を距離の二乗に比例して選ぶ

解答と解説

正解:D

k-means++は、初期中心を互いに離れた位置に配置しやすくすることで、収束を速め、結果を安定させます。

Aはk近傍法の説明です。Bは誤りで、k-means++でもクラスタ数は人が指定します。クラスタ数の決定には、エルボー法やシルエット分析などを別に使います。Cは誤りで、k-means++も距離を使います。試験では「k-meansのkとk近傍法のkは意味が違う」という引っかけがよく出るため、目的と学習の種類をセットで覚えてください。

18. 主成分分析:固有値と寄与率

比較の軸

主成分分析(PCA)は、データのばらつきが大きい方向に新しい軸を取り直し、少ない次元で情報を表す手法です。次の関係を押さえます。

用語意味
固有ベクトル新しい軸(主成分)の向き
固有値その軸方向のデータの分散の大きさ
第1主成分固有値が最大の固有ベクトル
寄与率その主成分の固有値が、固有値の合計に占める割合
累積寄与率上位の主成分の寄与率を足し合わせたもの

主成分は、データの分散共分散行列を固有値分解して求めます。この節の \lambda は、正則化の係数ではなく固有値(eigenvalue)を表します。

r_j = \frac{\lambda_j}{\sum_{i} \lambda_i}

数値で確認する

3次元のデータで、固有値が3.0、1.5、0.5だったとします。合計は5.0です。

主成分固有値寄与率累積寄与率
第1主成分3.060%60%
第2主成分1.530%90%
第3主成分0.510%100%

第2主成分までで90%の情報を保てるため、3次元を2次元に減らしても、情報の損失は10%にとどまります。

NumPyでは、次のように計算できます。

import numpy as np

# 5件、2次元のデータ
X = np.array([[2.0, 1.9], [1.0, 1.1], [3.0, 3.2], [4.0, 3.8], [5.0, 5.1]])

# 分散共分散行列(列を変数として扱う)
cov = np.cov(X, rowvar=False)

# 対称行列なので eigh を使う(固有値は小さい順に返る)
eigenvalues, eigenvectors = np.linalg.eigh(cov)

# 大きい順に並べ替える
order = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[order]
eigenvectors = eigenvectors[:, order]

print(eigenvalues / eigenvalues.sum())  # 寄与率
# 固有ベクトルは列ごとに1本ずつ格納されている
X_centered = X - X.mean(axis=0)
X_pca = X_centered @ eigenvectors       # 主成分得点

固有ベクトルが行ではなく列ごとに格納されている点は、実装で間違えやすいポイントです。

次元の呪い

次元が増えると、データ同士の距離がどれも似たような値になり、距離に基づく手法がうまく働かなくなります。また、空間を埋めるのに必要なデータ量が指数関数的に増えます。この現象を次元の呪いと呼びます。主成分分析は、この問題を和らげる手段の1つです。

練習問題18

主成分分析における第1主成分の説明として正しいものはどれですか。

A. 固有値が最小の固有ベクトルの方向
B. 固有値が最大の固有ベクトルの方向
C. 平均値が最大となる特徴量の方向
D. 相関が最大となる2変数の方向

解答と解説

正解:B

固有値はその方向の分散の大きさを表すため、固有値が最大の方向が、データのばらつきを最もよく表す第1主成分になります。

Aは最もばらつきが小さい方向で、次元削減では最初に捨てられる軸です。Cの平均値は、主成分分析では事前に引いて0にそろえるため、軸の決定には使いません。Dは誤りで、主成分は元の2変数の組ではなく、すべての変数を組み合わせた新しい軸です。

19. 固有値分解と特異値分解の違い

比較の軸

どちらも行列を扱いやすい形に分解する手法です。違いは「どのような行列に使えるか」です。

項目固有値分解特異値分解
対象正方行列(対角化できるもの)任意の形の行列
分解の形A = V \Lambda V^{-1} A = U D V^{T}
中央の行列固有値を対角に並べた行列特異値を対角に並べた行列
主な用途主成分分析次元削減、推薦システム、画像圧縮

初出の記号 \Lambda (ラムダの大文字)は、固有値を対角に並べた行列(diagonal matrix of eigenvalues)です。固有値分解の V は、固有ベクトルを列として並べた行列です。

特異値分解の各行列の意味は、次のとおりです。

記号意味
U A A^{T} の固有ベクトルを列に並べた直交行列
D 特異値を大きい順に対角に並べた行列
V A^{T} A の固有ベクトルを列に並べた直交行列

特異値は、A^{T} A の固有値の正の平方根です。

数値で確認する

次の行列の固有値を求めます。

A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix}

ベクトル (1, 1) を掛けると (3, 3) になり、3倍されています。ベクトル (1, -1) を掛けると (1, -1) になり、1倍です。したがって、固有値は3と1です。

この行列は対称行列なので、固有ベクトルを長さ1にそろえると、V は直交行列になり、V^{-1} = V^{T} が成り立ちます。

A = V \Lambda V^{T}

\Lambda = \begin{pmatrix} 3 & 0 \\ 0 & 1 \end{pmatrix}

また、A^{T} A = A^2 の固有値は9と1なので、特異値は3と1です。この行列のように対称で固有値がすべて正の場合は、特異値と固有値が一致します。

初学者がつまずきやすい点

固有値分解の式を A = V^{-1} \Lambda V と逆に書いてしまう誤りがよくあります。V の列が固有ベクトルの場合は、A V = V \Lambda が成り立つので、右から V^{-1} を掛けて A = V \Lambda V^{-1} となります。式を暗記するより、A v = \lambda v という定義から導けるようにしておくと安全です。

練習問題19

一般の行列 A の特異値の説明として正しいものはどれですか。

A. A の転置と A の積の固有値の平方根
B. A の固有値そのものの絶対値
C. A の各列ベクトルのノルム
D. A の対角成分を大きい順に並べた値

解答と解説

正解:A

特異値は、A^{T} A の固有値(0以上になる)の正の平方根です。

Bは、対称行列の場合には成り立ちますが、一般の行列では成り立ちません。そもそも固有値は正方行列にしか定義されないため、長方形の行列には使えません。Cの列ベクトルのノルムや、Dの対角成分は、特異値とは別の量です。特異値分解は、推薦システムで「ユーザー×商品」の評価行列を分解する場面など、実務でも広く使われています。

20. 自己符号化器:通常型・雑音除去型・縮小型の違い

比較の軸

自己符号化器(オートエンコーダー)は、入力を小さな中間表現に圧縮し、そこから元の入力を復元するように学習するネットワークです。種類の違いは「学習時に何を工夫するか」です。

初出の記号 \phi (ファイ)は活性化関数(activation function)を表します。

h = \phi_1(W_1 x + b_1)

\hat{x} = \phi_2(W_2 h + b_2)

1つ目の式が符号化器(エンコーダー)、2つ目の式が復号化器(デコーダー)です。中間表現 h の次元を入力 x より小さくしたものを、不完備(undercomplete)な自己符号化器と呼びます。

種類学習時の工夫損失関数
通常の自己符号化器入力をそのまま復元するL(x, g(f(x)))
雑音除去自己符号化器(DAE)雑音を加えた入力から、元の入力を復元するL(x, g(f(\tilde{x})))
縮小自己符号化器(CAE)中間表現の入力に対する変化の大きさに罰を与える損失に \lambda \sum_{i} |\nabla_{x} h_i|^2 を加える

f は符号化器、g は復号化器、\tilde{x} は雑音を加えた入力です。

数値で確認する:再構成誤差

入力が (1, 0, 1) 、復元結果が (0.9, 0.2, 0.8) だったとします。二乗誤差の合計は次のとおりです。

(1 - 0.9)^2 + (0 - 0.2)^2 + (1 - 0.8)^2 = 0.01 + 0.04 + 0.04 = 0.09

異常検知への応用

正常データだけで自己符号化器を学習すると、正常データはうまく復元できますが、見たことのない異常データは復元がうまくいきません。そのため、再構成誤差が大きいデータを異常とみなせます。工場の製品検査などで使われる考え方です。

練習問題20

雑音除去自己符号化器(Denoising Autoencoder)の説明として正しいものはどれですか。

A. 中間層を入力より大きくして学習する
B. 符号化器の重みだけを学習する
C. ノイズを加えた入力から元を復元する
D. 入力の勾配に罰則を加えて学習する

解答と解説

正解:C

雑音除去自己符号化器は、雑音で汚した入力を受け取り、雑音のない元の入力を出力するように学習します。これにより、入力の細かな揺れに左右されない特徴を学べます。

Aは誤りで、中間層を大きくすると入力をそのまま写すだけの恒等写像を学んでしまう危険があり、雑音除去自己符号化器の定義でもありません。Bは誤りで、符号化器と復号化器の両方を学習します。Dは縮小自己符号化器の説明です。DAEは入力側に、CAEは損失関数側に工夫がある、と区別してください。

21. GAN:生成器と識別器、条件付きGAN

比較の軸

GAN(敵対的生成ネットワーク)は、偽物を作る生成器(Generator)と、本物か偽物かを見分ける識別器(Discriminator)を競わせて学習します。

\min_{G} \max_{D} V(D, G) = E_{x \sim p_{data}}[\log D(x)] + E_{z \sim p_{z}}[\log(1 - D(G(z)))]

記号意味
D(x) 識別器が、入力 x を本物と判定する確率
G(z) 生成器が、乱数 z から作った偽物のデータ
p_{data} 本物のデータの分布
p_{z} 乱数の分布(正規分布など)

識別器は V を大きくしようとし、生成器は V を小さくしようとします。識別器が最適な状態では、この目的関数の最小化は、本物の分布と生成分布のJSダイバージェンスの最小化に対応します。

数値で確認する

本物のデータに対して D(x) = 0.9 、偽物に対して D(G(z)) = 0.2 だったとします(自然対数)。

\log 0.9 + \log(1 - 0.2) \approx -0.105 - 0.223 = -0.328

識別器が完璧に見分けられる(D(x) = 1 D(G(z)) = 0 )と、値は最大の0になります。

関連する用語

用語内容
条件付きGAN(cGAN)生成器と識別器の両方に、クラスラベルなどの条件を与える。「数字の7を生成して」のように指定できる
TTUR生成器と識別器で異なる学習率を使う学習ルール。一般に識別器の学習率を大きくする
モード崩壊生成器が、識別器をだませる少数の種類のデータばかり生成してしまう現象

コラム:敵対的(Adversarial)という名前
GANは Generative Adversarial Networks の略です。Adversarialは「敵対する」という意味で、偽札を作る人と、それを見破る警察の関係によく例えられます。互いに相手を上回ろうとすることで、両者の能力が高まっていきます。

練習問題21

条件付きGAN(Conditional GAN)の説明として正しいものはどれですか。

A. 識別器だけに条件ラベルを与える
B. 生成器と識別器の両方にラベルを与える
C. 生成器だけに正解ラベルを与える
D. ラベルの代わりにノイズを2つ与える

解答と解説

正解:B

条件付きGANでは、生成器は「乱数+条件」から、その条件に合うデータを作ります。識別器は「データ+条件」を受け取り、条件に合った本物かどうかを判定します。両方に同じ条件を与えることで、条件に沿った生成を学習できます。

AとCのように片方だけに条件を与えると、生成器が条件を無視しても識別器に見破られなくなる、あるいは識別器が条件との整合性を判定できなくなるため、条件付き生成が成り立ちません。Dは条件付きGANの仕組みとは関係がありません。

22. 方策勾配法:価値ではなく方策を直接学ぶ

比較の軸

Q学習やSarsaは、行動の価値を学習し、価値の高い行動を選びます。方策勾配法は、行動を選ぶ確率(方策)そのものを、パラメータ \theta で表して直接学習します。

初出の記号 \pi (パイ)は方策(policy)を表します。\pi_{\theta}(a \mid s) は、状態 s で行動 a を選ぶ確率です。

目的は期待収益 J(\theta) を最大化することなので、勾配上昇法で更新します。

\theta \leftarrow \theta + \eta \nabla_{\theta} J(\theta)

勾配は、方策勾配定理により次のように表せます。

\nabla_{\theta} J(\theta) = E_{\pi_{\theta}}[\nabla_{\theta} \log \pi_{\theta}(a \mid s) Q^{\pi_{\theta}}(s, a)]

対数をとる変形は、次の関係を利用しています。

\nabla_{\theta} \log \pi_{\theta}(a \mid s) = \frac{\nabla_{\theta} \pi_{\theta}(a \mid s)}{\pi_{\theta}(a \mid s)}

期待値の形にできるため、実際に行動して得たサンプルの平均で勾配を近似できます。

数値で確認する

ある状態で行動を選ぶ確率が0.4、その確率のパラメータに関する勾配が0.2、行動価値が10、学習率が0.01だったとします。

  • \nabla_{\theta} \log \pi = 0.2 / 0.4 = 0.5
  • 勾配への寄与:0.5 \times 10 = 5
  • パラメータの更新量:0.01 \times 5 = 0.05

行動価値が大きい行動ほど、選ばれる確率を高める方向に大きく更新されます。

REINFORCEとベースライン

REINFORCEは、行動価値 Q の代わりに、エピソードで実際に得た収益を使う方策勾配法です。モンテカルロ法で推定するため、推定値のばらつき(分散)が大きくなりがちです。そこで、収益から基準値(ベースライン)を引いて分散を小さくする工夫がよく使われます。

コラム:REINFORCEという名前
REINFORCEは、提案した論文で示された更新式の各要素の頭文字を並べた名前です。報酬の増分(REward Increment)が、非負の係数(Nonnegative Factor)、基準値からのずれ(Offset Reinforcement)、特性の適格度(Characteristic Eligibility)の積で表されることに由来します。「強化する」という英単語と重なるように作られた名前です。

練習問題22

方策勾配法におけるパラメータの更新の説明として正しいものはどれですか。

A. 行動価値の最大値を目標に更新する
B. 環境の遷移確率を推定してから更新する
C. 勾配降下法で期待収益を最小化する
D. 勾配上昇法で期待収益を最大化する

解答と解説

正解:D

方策勾配法の目的は、得られる収益を大きくすることです。そのため、勾配の方向にパラメータを動かす勾配上昇法を使います。

AはQ学習の考え方です。Bはモデルベースの手法の考え方で、方策勾配法は遷移確率を知らなくても使えます。Cは符号が逆です。損失関数を最小化する通常の深層学習と混同しやすいため、「収益は大きいほど良いので上昇」と覚えてください。実装では、期待収益にマイナスを付けて損失とみなし、通常のoptimizerで最小化する形がよく使われます。

23. AlphaGoとAlphaGo Zeroの違い

比較の軸

AlphaGoは、囲碁でトップ棋士に勝利したシステムです。後継のAlphaGo Zeroとの違いは、「人間の棋譜を使うか」「ネットワークをいくつ使うか」「ロールアウトを使うか」の3点です。

項目AlphaGoAlphaGo Zero
学習データ人間の棋譜で事前学習し、その後自己対戦自己対戦のみ
ネットワークロールアウト方策、SL方策、RL方策、価値の4つ方策と価値を同時に出力する1つのデュアルネットワーク
局面の評価価値ネットワークとロールアウトの両方価値ネットワークのみ
探索モンテカルロ木探索モンテカルロ木探索

AlphaGoの学習は、次の段階で進みます。

  1. SL方策ネットワーク:人間の棋譜から、次の一手を予測する(教師あり学習)
  2. RL方策ネットワーク:SL方策を初期値に、自己対戦と方策勾配法で強化する
  3. 価値ネットワーク:自己対戦の結果から、局面の勝率を予測する(回帰)
  4. ロールアウト方策:終局まで高速に打ち進めるための軽量なモデル

モンテカルロ木探索の4ステップ

ステップ内容
選択行動価値と、未探索の手を優先するボーナスの和が最大の手を選んで木をたどる
展開訪問回数が一定以上になった節点の子を木に追加する
評価末端の局面の価値を推定する
記録評価結果を、たどってきた経路の統計量に反映する

探索が終わったら、最も訪問回数が多い手を実際に打ちます。価値の平均が最も高い手ではなく訪問回数で決めるのは、少ない試行でたまたま高い値が出た手を選ばないようにするためです。

練習問題23

AlphaGo Zeroで、AlphaGoから変更された点として正しいものはどれですか。

A. 人間の棋譜で方策を事前学習する
B. ロールアウトで葉ノードを評価する
C. 方策と価値を1つのネットで出力する
D. 方策と価値に別々のネットを使う

解答と解説

正解:C

AlphaGo Zeroは、方策と価値を1つのネットワークから同時に出力するデュアルネットワークを採用しました。

AとBは、AlphaGo Zeroで廃止された、AlphaGoの特徴です。Dは、AlphaGoの構成です。人間の知識を使わずに、それまでのAlphaGoを上回る強さに到達した点が、AlphaGo Zeroの大きな意義とされています。

24. NumPyの乱数関数:似た関数の使い分け

比較の軸

NumPyには、似た名前の乱数関数が複数あります。「重複を許すか」「元の配列を変更するか」で区別します。

関数動作重複元の配列
np.random.permutation(5)0から4を並べ替えた新しい配列を返すなし変更しない
np.random.shuffle(arr)配列そのものを並べ替える。戻り値はNoneなし変更する
np.random.choice(5, 3)0から4の中から3個を選ぶあり(既定)変更しない
np.random.choice(5, 3, replace=False)0から4の中から3個を選ぶなし変更しない
np.random.random_sample(3)0.0以上1.0未満の一様乱数を3個返す該当なし該当なし

重複を許して取り出すことを復元抽出、許さないことを非復元抽出と呼びます。バギングで使うブートストラップサンプルは、復元抽出で作ります。

import numpy as np

np.random.seed(0)  # 結果を再現するために乱数の種を固定する

print(np.random.permutation(5))                # 例:[2 0 1 3 4]
print(np.random.choice(5, 3))                  # 重複あり。例:[3 3 1]
print(np.random.choice(5, 3, replace=False))   # 重複なし

arr = np.arange(5)
result = np.random.shuffle(arr)
print(result)  # None(戻り値はない)
print(arr)     # 並べ替えられた配列

# 新しいコードで推奨される書き方
rng = np.random.default_rng(seed=0)
print(rng.choice(5, 3))   # 重複あり(既定)
print(rng.random(3))      # 0.0以上1.0未満の一様乱数

出力される具体的な値は、NumPyのバージョンや乱数生成器によって変わることがあります。

NumPyの公式ドキュメントでは、新しいコードにはnp.random.default_rngで作る乱数生成器を使うことが推奨されています。試験では従来の関数名で出題されることもあるため、両方の書き方を読めるようにしておくと安心です。

練習問題24

0から4までの整数の中から、重複を許して3個をランダムに取り出すコードはどれですか。

A. np.random.choice(5, 3)
B. np.random.permutation(5)
C. np.random.shuffle(5)
D. np.random.random_sample(3)

解答と解説

正解:A

np.random.choiceは、既定では重複を許して(replace=True)取り出します。第1引数に整数5を渡すと、0から4の範囲から選びます。

Bは0から4を1回ずつ並べ替えるため、5個すべてが重複なしで返ります。Cは配列を渡す必要があり、整数を渡すとエラーになります。また、戻り値はNoneです。Dは0.0以上1.0未満の小数を返すため、整数にはなりません。データを訓練用と検証用に分ける前にシャッフルする場面では、元のデータを残したいならpermutation、そのまま並べ替えてよいならshuffleと使い分けます。

25. ロジスティック回帰:確率とオッズの関係

比較の軸

ロジスティック回帰は、名前に「回帰」と付いていますが、2クラス分類に使う手法です。線形回帰と同じように特徴量の重み付き和を計算し、それをシグモイド関数で0から1の確率に変換します。

z = w^{T} x + b

\hat{y} = \sigma(z) = \frac{1}{1 + e^{-z}}

線形回帰との違いは、「出力をそのまま使うか、確率に変換するか」です。

オッズとの関係

オッズは、ある事象が起きる確率と起きない確率の比です。ロジスティック回帰では、オッズの対数(対数オッズ、ロジット)が特徴量の線形式になります。

\frac{\hat{y}}{1 - \hat{y}} = e^{z}

\log \frac{\hat{y}}{1 - \hat{y}} = w^{T} x + b

この関係から、重み w_j の意味を次のように解釈できます。特徴量 x_j が1増えると、オッズが e^{w_j} 倍になります。

損失関数と勾配

損失関数には、負の対数尤度(2値の交差エントロピー)を使います。

L = -\sum_{n} (y_n \log \hat{y}_n + (1 - y_n) \log(1 - \hat{y}_n))

この損失を z で微分すると、ソフトマックスの場合と同じく「予測 − 正解」の形になります。

\frac{\partial L}{\partial z_n} = \hat{y}_n - y_n

数値で確認する

z 確率 \hat{y} オッズ
00.51
約1.099(\log 3 0.753
約2.197(\log 9 0.99

重み w_j = 0.7 なら、x_j が1増えるとオッズは e^{0.7} \approx 2.01 倍になります。オッズが3の人なら、約6.04になります。確率に直すと、0.75から約0.858への上昇です。

初学者がつまずきやすい点

重みは「確率の増加量」ではなく「オッズの倍率の対数」です。確率の変化量は、元の確率がどこにあるかによって変わります。確率が0.5付近では大きく動き、0や1に近いところではほとんど動きません。

コラム:ロジスティックという名前の由来
ロジスティック関数は、19世紀に人口の増加を表すモデルとして考案されました。最初は急速に増え、やがて上限に近づいて頭打ちになるS字型の曲線です。この曲線の形がシグモイド関数と同じであることから、分類手法にもこの名前が使われるようになりました。

練習問題25

ロジスティック回帰で、ある特徴量の重みが0.7でした。他の特徴量を固定してこの特徴量を1増やすと、どうなりますか。

A. オッズが0.7だけ増える
B. オッズが0.7倍になる
C. オッズが約2.0倍になる
D. 確率が0.7だけ増える

解答と解説

正解:C

対数オッズが0.7増えるので、オッズは e^{0.7} \approx 2.01 倍になります。

Aは対数オッズの変化と取り違えています。Bは倍率を e^{w} ではなく w そのものと誤解しています。Dは、確率が0から1の範囲に収まらなくなる可能性があるため、明らかに誤りです。医療や金融の分野では「この要因があるとリスクが約2倍」という説明がよく使われます。その背景には、この重みとオッズ比の関係があります。

26. ナイーブベイズ:「ナイーブ」とは何を仮定しているのか

比較の軸

ナイーブベイズは、ベイズの定理を使って、データがどのクラスに属する確率が高いかを計算する分類手法です。

P(C \mid x) = \frac{P(x \mid C) P(C)}{P(x)}

記号意味
P(C) 事前確率。データを見る前のクラスの割合
P(x \mid C) 尤度。そのクラスでデータ x が出てくる確率
P(C \mid x) 事後確率。データを見た後のクラスの確率

特徴量が多いと、P(x \mid C) をそのまま推定するのは困難です。そこで、クラスが決まれば各特徴量は互いに独立である(条件付き独立)と仮定します。この単純化した仮定が「ナイーブ(素朴な)」の意味です。

P(x \mid C) = \prod_{j} P(x_j \mid C)

初出の記号 \prod (パイの大文字、総乗 product)は、すべての値を掛け合わせる記号です。

数値で確認する:迷惑メールの判定

「無料」と「会議」の両方を含むメールを判定します。

項目迷惑メール通常メール
事前確率0.40.6
「無料」が含まれる確率0.50.05
「会議」が含まれる確率0.10.4
  • 迷惑メールのスコア:0.4 \times 0.5 \times 0.1 = 0.020
  • 通常メールのスコア:0.6 \times 0.05 \times 0.4 = 0.012
  • 迷惑メールである確率:0.020 / (0.020 + 0.012) = 0.625

分母の P(x) はどちらのクラスでも共通なので、スコアを比較するだけで判定できます。

初学者がつまずきやすい点

訓練データに一度も出てこなかった単語があると、その確率が0になり、掛け算の結果全体が0になってしまいます。これを防ぐため、すべての出現回数に1を足すなどの補正(ラプラススムージング)を行います。

また、確率を何十個も掛け合わせると値が極端に小さくなり、コンピュータで表現できなくなります。実装では対数をとって、掛け算を足し算に変えて計算します。

練習問題26

ナイーブベイズの「ナイーブ」が表している仮定はどれですか。

A. 特徴量が条件付き独立と仮定する
B. 事前確率をすべて等しいと仮定する
C. 特徴量が正規分布に従うと仮定する
D. クラスが2つしかないと仮定する

解答と解説

正解:A

クラスが決まったもとで、各特徴量が互いに影響し合わないと仮定することが「ナイーブ」の意味です。

Bは誤りで、事前確率は訓練データのクラスの割合から推定するのが一般的です。Cは、ナイーブベイズの一種であるガウシアンナイーブベイズの追加の仮定で、ナイーブの意味そのものではありません。Dは誤りで、ナイーブベイズは多クラス分類にも使えます。現実の文章では「無料」と「今すぐ」のように単語同士に関係があるため、仮定は厳密には成り立ちません。それでも、迷惑メール判定などでは実用的な精度が得られることが知られています。

27. 機械学習のタスクの種類と計画行列

比較の軸

機械学習のタスクは、「入力と出力がどのような形をしているか」で分類できます。E資格では、代表的な教科書で使われる分類名がそのまま問われることがあります。

タスク入力出力
分類データカテゴリ画像に写った動物の判定
回帰データ数値住宅価格の予測
転写構造化されていないデータ離散的なテキスト文字認識(OCR)、音声認識
機械翻訳ある言語の記号列別の言語の記号列日本語から英語への翻訳
構造出力データ要素同士に関係がある出力構文解析、画像の説明文生成
異常検知データ正常か異常かクレジットカードの不正利用検知
合成とサンプリング条件や乱数訓練データに似た新しいデータ音声合成、画像生成
欠損値補完一部が欠けたデータ欠けた値アンケートの未回答の推定
ノイズ除去汚れたデータきれいなデータ画像の雑音除去
密度推定データその値が出現する確率の大きさデータ分布そのもののモデル化

転写(transcription)は、画像や音声のように人間には意味が分かるが構造化されていないデータを、文字などの離散的な記号列に書き起こすタスクです。

計画行列

機械学習で扱う表形式のデータは、行にデータ(事例)、列に特徴量を並べた行列で表します。これを計画行列(design matrix)と呼びます。

X \in \mathbb{R}^{n \times d}

n はデータ数、d は特徴量の数です。たとえば、100人分の身長・体重・年齢のデータなら、形状は(100、3)です。PyTorchやscikit-learnでも、最初の次元をデータ数とするこの並べ方が標準です。

バプニックの原理

SVMの考案者として知られるバプニック(Vapnik)は、「ある問題を解くときに、途中段階でそれより一般的で難しい問題を解こうとしてはいけない」という原則を示しました。

たとえば、分類だけが目的なら、各クラスのデータ分布を完全に推定する(密度推定)必要はありません。境界線だけを直接求めればよい、という考え方です。SVMはこの考え方を体現した手法です。

練習問題27

画像に写った手書きの文字を読み取り、テキストデータに変換するタスクは、次のどれに分類されますか。

A. 構造出力
B. 密度推定
C. 異常検知
D. 転写

解答と解説

正解:D

構造化されていない画像データを、文字という離散的な記号列に書き起こすため、転写に分類されます。音声認識も同じ分類です。

Aの構造出力は、構文解析のように、出力の要素同士に関係があるタスクです。Bの密度推定は、データの出現確率を推定するタスクです。Cの異常検知は、正常と異なるデータを見つけるタスクです。分類名を暗記するより、「入力は何で、出力は何か」を自分で書き出してから当てはめると、迷わずに判断できます。

28. 万能近似定理:何を保証し、何を保証しないか

比較の軸

万能近似定理は、ニューラルネットワークの表現力についての定理です。試験では「保証していること」と「保証していないこと」の区別が問われます。

保証していること保証していないこと
隠れ層が1層以上あり、非線形の活性化関数を使えば、有界な範囲の連続関数を任意の精度で近似できる学習によって、その近似を実際に見つけられること
十分な数のユニットがあれば近似できる何個のユニットが必要か(非常に多くなる場合もある)
表現できる関数の範囲未知のデータへの汎化性能

なぜ非線形の活性化関数が必要なのか

活性化関数が線形の場合、層を何層重ねても、全体は1つの線形変換にまとまってしまいます。

W_2 (W_1 x) = (W_2 W_1) x

W_2 W_1 は1つの行列なので、2層のネットワークは1層の線形モデルと同じ表現力しか持ちません。

数値で確認する:ReLUで折れ線を作る

ReLU関数は、正の値はそのまま、負の値は0にする関数です。

ReLU(x) = \max(0, x)

2つのReLUを組み合わせると、絶対値関数を正確に表せます。

|x| = ReLU(x) + ReLU(-x)

x = -3 のとき、0 + 3 = 3 です。x = 2 のとき、2 + 0 = 2 です。ReLUを1つ加えるごとに折れ曲がる点が1つ増えるため、ユニットを増やすほど複雑な曲線に近づけられます。これが万能近似定理の直感的なイメージです。

練習問題28

万能近似定理についての説明として正しいものはどれですか。

A. 隠れ層なしでも任意の関数を表せる
B. 非線形の活性化関数が必要である
C. 学習で必ずその関数に到達できる
D. 必要なユニット数の上限を与える

解答と解説

正解:B

活性化関数が線形だと、ネットワーク全体が線形モデルと同じになってしまうため、非線形関数を近似できません。

Aは誤りで、少なくとも1つの隠れ層が必要です。Cは誤りで、定理は「近似できるパラメータが存在する」ことを示しているだけで、勾配降下法でそのパラメータにたどり着けるとは言っていません。Dは誤りで、必要なユニット数については述べていません。実務で層を深くするのは、同じ関数を浅いネットワークより少ないユニット数で表せる場合が多いためです。

29. バッチ学習とミニバッチ学習の違い

比較の軸

学習方法は、「1回のパラメータ更新に何件のデータを使うか」で区別します。

方法1回の更新に使うデータ特徴
バッチ学習全データ勾配が安定する。初期値を決めた後は確率的な要素がない
ミニバッチ学習一部のデータ(例:32件、128件)更新ごとに使うデータが変わり、勾配に揺らぎが生じる
オンライン学習1件更新回数が多いが、勾配の揺らぎが大きい

ミニバッチ学習では、反復ごとに異なるデータで損失を計算します。つまり、反復ごとに最小化している目的関数そのものが少しずつ変わります。この揺らぎのおかげで、局所的な最小値や鞍点(あんてん)から抜け出せる可能性があります。

数値で確認する

データが10,000件、バッチサイズが100の場合を考えます。

  • 1エポック(全データを1周)あたりの更新回数:10,000 / 100 = 100
  • 10エポックでの更新回数:100 \times 10 = 1,000
  • バッチ学習の場合、10エポックでの更新回数は10回

勾配の揺らぎの大きさ(標準誤差)は、バッチサイズの平方根に反比例します。バッチサイズを25から100に4倍にすると、揺らぎは 1 / \sqrt{4} = 1/2 になります。

初学者がつまずきやすい点

エポック、イテレーション、バッチサイズの関係を混同しやすいので、次の式で整理してください。

iterations_per_epoch = \frac{n}{batch_size}

バッチサイズを大きくすると、1回の更新は正確になりますが、1エポックあたりの更新回数が減ります。バッチサイズを変えたときは、学習率も合わせて調整するのが一般的です。

練習問題29

ミニバッチ学習についての説明として正しいものはどれですか。

A. 反復ごとに使う目的関数が変わる
B. 初期値以外に確率的要素がない
C. 1回の更新で全データを使う
D. 局所解から抜け出すことはない

解答と解説

正解:A

ミニバッチは反復ごとに異なるデータの組で構成されるため、損失関数の形も反復ごとに少しずつ変わります。

BとCはバッチ学習の説明です。Dは誤りで、勾配の揺らぎによって局所解から抜け出せる可能性があることが、ミニバッチ学習の利点の1つです。実務では、GPUのメモリに収まる範囲でバッチサイズを決め、学習率とセットで調整します。

30. 活性化関数の微分:シグモイドとtanhで勾配消失が起きる理由

比較の軸

シグモイド関数とtanh関数は、どちらもS字型の曲線です。違いは「出力の範囲」と「微分の最大値」です。

\sigma'(z) = \sigma(z)(1 - \sigma(z))

\tanh'(z) = 1 - \tanh^2(z)

関数出力の範囲微分の最大値最大になる位置
シグモイド0から10.25z = 0
tanhマイナス1から11.0z = 0
ReLU0以上1.0(正の範囲で常に1)z > 0

シグモイドの微分は、\sigma(z) = 0.5 のとき 0.5 \times 0.5 = 0.25 で最大です。2つの関数には、\tanh(z) = 2 \sigma(2z) - 1 という関係があります。

数値で確認する

z = 2 のとき、次のようになります。

  • \sigma(2) \approx 0.881 \sigma'(2) \approx 0.881 \times 0.119 \approx 0.105
  • \tanh(2) \approx 0.964 \tanh'(2) \approx 1 - 0.929 = 0.071

入力の絶対値が大きくなると、どちらの微分も0に近づきます。

勾配消失の仕組み

誤差逆伝播では、各層の活性化関数の微分が掛け算で積み重なります。シグモイドを10層重ねると、最も条件が良い場合でも次のとおりです。

0.25^{10} \approx 0.00000095

入力側の層にはほとんど勾配が届かず、学習が進まなくなります。これが勾配消失です。ReLUは正の範囲で微分が常に1なので、層を重ねても勾配が小さくなりにくく、深いネットワークで広く使われるようになりました。

練習問題30

シグモイド関数の微分の最大値はいくつですか。

A. 1.0
B. 0.5
C. 0.25
D. 0.1

解答と解説

正解:C

微分は \sigma(z)(1 - \sigma(z)) で、\sigma(z) = 0.5 のとき最大値 0.25 をとります。

Aはtanhの微分の最大値です。Bは z = 0 でのシグモイド関数そのものの値で、微分と取り違えています。Dは z = 2 付近での微分の値に近く、最大値ではありません。LSTMのゲートでシグモイドを使っても問題が起きにくいのは、記憶セルの更新経路にシグモイドの微分が何度も掛け合わされない構造になっているためです。

31. ノルム:L1・L2・L∞の違い

比較の軸

ノルムは、ベクトルの「大きさ」を測る方法です。種類の違いは「各成分をどのように集計するか」です。

$latex |x|1 = \sum{i} |x_i| $

$latex |x|2 = \sqrt{\sum{i} x_i^2} $

$latex |x|\infty = \max{i} |x_i| $

ノルム集計方法別名主な用途
L1絶対値の合計マンハッタン距離L1正則化(Lasso)
L2二乗和の平方根ユークリッド距離L2正則化、勾配クリッピング
L∞絶対値の最大値最大値ノルム、チェビシェフ距離敵対的サンプルの摂動の大きさの制限

数値で確認する

x = (3, -4, 1) のとき、次のようになります。

  • L1ノルム:3 + 4 + 1 = 8
  • L2ノルム:\sqrt{9 + 16 + 1} = \sqrt{26} \approx 5.10
  • L∞ノルム:\max(3, 4, 1) = 4

一般に |x|_\infty \leq |x|_2 \leq |x|_1 の関係が成り立ちます。この例でも 4 \leq 5.10 \leq 8 です。

図解のイメージ

2次元で、ノルムが1になる点を集めると、形が次のように違います。

ノルム
L1軸の上に頂点がある、ひし形
L2
L∞正方形

L1正則化で重みが0になりやすいのは、ひし形の頂点が軸の上(どちらかの成分が0の点)にあり、損失関数の等高線がその頂点で接しやすいためです。第4節で説明した「勾配の大きさ」による説明と合わせて理解すると、納得しやすくなります。

練習問題31

ベクトル x = (3, -4, 1) のL∞ノルムはいくつですか。

A. 8
B. 約5.10
C. 3
D. 4

解答と解説

正解:D

L∞ノルムは成分の絶対値の最大値なので、|-4| = 4 です。

AはL1ノルム、BはL2ノルムの値です。Cは絶対値をとらずに最大値を選んだ場合の誤りです。符号を無視しないように注意してください。画像認識の安全性評価では、「各画素の変化をL∞ノルムで一定値以下に抑えた、人の目には分からないノイズ」で誤認識させる攻撃がよく使われ、ここでL∞ノルムが登場します。

32. 分散・共分散・相関係数の違い

比較の軸

3つの指標は、「何のばらつきを測るか」と「単位に依存するか」で区別します。

s_x^2 = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2

s_{xy} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})

r_{xy} = \frac{s_{xy}}{s_x s_y}

指標意味範囲単位への依存
分散 s_x^2 1つの変数のばらつき0以上依存する(元の単位の二乗)
共分散 s_{xy} 2つの変数が一緒に動く傾向制限なし依存する
相関係数 r_{xy} 2つの変数の直線的な関係の強さマイナス1から1依存しない

相関係数の分母にあるのは、分散ではなく標準偏差 s_x s_y です。分散と取り違えないように注意してください。

数値で確認する

x = (1, 2, 3) y = (2, 4, 7) とします。

  • 平均:\bar{x} = 2 \bar{y} \approx 4.333
  • 偏差:x はマイナス1、0、1。y は約マイナス2.333、マイナス0.333、2.667
  • 共分散:(2.333 + 0 + 2.667) / 3 \approx 1.667
  • x の分散:2 / 3 \approx 0.667 、標準偏差 約0.816
  • y の分散:12.667 / 3 \approx 4.222 、標準偏差 約2.055
  • 相関係数:1.667 / (0.816 \times 2.055) \approx 0.993

x をメートルからセンチメートルに変えると、共分散は100倍になりますが、相関係数は0.993のまま変わりません。

初学者がつまずきやすい点

相関係数が0であることは、「直線的な関係がない」ことを意味するだけです。y = x^2 のような曲線の関係があっても、相関係数が0になる場合があります。相関係数0は独立を意味しません。

また、分散の分母を n にするか n - 1 (不偏分散)にするかは、ライブラリによって既定値が異なります。NumPyのvarは n 、pandasのvarは n - 1 が既定です。相関係数は、分子と分母で同じ補正が打ち消し合うため、どちらを使っても同じ値になります。

練習問題32

相関係数についての説明として正しいものはどれですか。

A. 共分散と常に同じ値になる
B. 単位を変えても値は変わらない
C. 0なら2変数は独立である
D. 値は0から1の範囲をとる

解答と解説

正解:B

相関係数は、共分散を両変数の標準偏差で割って単位を打ち消しているため、単位を変えても値は変わりません。

Aは誤りで、両変数の標準偏差がともに1のときだけ一致します。Cは誤りで、相関係数0は直線的な関係がないことを示すだけで、曲線的な関係があるかもしれません。Dは誤りで、負の相関を表すためにマイナス1から1の範囲をとります。データ分析の研修では、散布図を描いてから相関係数を確認する習慣をつけると、この種の誤解を防げます。

33. 自己情報量とエントロピー:ビットとナットの違い

比較の軸

自己情報量は、ある事象が起きたと知ったときの「驚きの大きさ」を数値にしたものです。めったに起きない事象ほど、情報量が大きくなります。

I(x) = -\log P(x)

単位は、対数の底によって変わります。

対数の底単位使われる場面
2ビット(bit)情報理論、通信
e (自然対数)ナット(nat)機械学習の損失関数
10ハートレー(hartley)使用頻度は低い

エントロピーは、自己情報量の期待値(平均)です。

H(X) = -\sum_{i} P(x_i) \log P(x_i)

数値で確認する

確率 1/8 の事象の自己情報量を求めます。

  • ビット:-\log_2 (1/8) = 3
  • ナット:-\ln (1/8) = 3 \ln 2 \approx 2.079

1ナットは約1.443ビットです。

公平なコインのエントロピーは \log_2 2 = 1 ビット、公平なサイコロのエントロピーは \log_2 6 \approx 2.585 ビットです。結果の候補が多く、どれも同じくらい起こりやすいほど、エントロピーは大きくなります。

コラム:ビットという名前の由来
ビットは binary digit(2進数の桁)を縮めた言葉です。確率1/2の事象の情報量は、ちょうど2進数1桁分、つまり「はい」か「いいえ」の1回の答えに相当します。確率1/8の事象が3ビットになるのは、8通りの候補から1つを特定するのに、はい・いいえの質問が3回必要だからです。

練習問題33

確率 1/4 で起きる事象の自己情報量は、ビット単位でいくつですか。

A. 2ビット
B. 0.25ビット
C. 4ビット
D. 0.5ビット

解答と解説

正解:A

-\log_2 (1/4) = \log_2 4 = 2 ビットです。

Bは確率そのもので、情報量と取り違えています。Cは確率の逆数(4通り)をそのまま答えており、対数をとり忘れています。Dは確率の2倍を計算した誤りです。4通りの候補から1つを当てるには、「前半か後半か」「その中の前か後か」の2回の質問で足りる、と考えると直感的に確認できます。

34. グラム・シュミットの直交化法

比較の軸

グラム・シュミットの直交化法は、互いに独立なベクトルの組から、互いに直交し長さが1のベクトルの組(正規直交基底)を作る手順です。考え方は「他のベクトルと重なっている成分を引き算して取り除く」の一言にまとまります。

内積を \langle a, b \rangle と書きます。

1本目:長さを1にするだけです。

e_1 = \frac{a_1}{|a_1|}

2本目:e_1 方向の成分を取り除いてから、長さを1にします。

f_2 = a_2 - \langle a_2, e_1 \rangle e_1

e_2 = \frac{f_2}{|f_2|}

n本目:それまでに作ったすべての方向の成分を取り除きます。

f_n = a_n - \sum_{i=1}^{n-1} \langle a_n, e_i \rangle e_i

e_n = \frac{f_n}{|f_n|}

数値で確認する

a_1 = (3, 4) a_2 = (1, 0) とします。

  • |a_1| = 5 なので、e_1 = (0.6, 0.8)
  • \langle a_2, e_1 \rangle = 1 \times 0.6 + 0 \times 0.8 = 0.6
  • f_2 = (1, 0) - 0.6 \times (0.6, 0.8) = (0.64, -0.48)
  • |f_2| = \sqrt{0.4096 + 0.2304} = \sqrt{0.64} = 0.8
  • e_2 = (0.8, -0.6)

確認のために内積を計算すると、0.6 \times 0.8 + 0.8 \times (-0.6) = 0 となり、直交しています。

図解のイメージ

a_2 e_1 の方向に投影した影の部分が \langle a_2, e_1 \rangle e_1 です。a_2 からこの影を引くと、e_1 に垂直な成分だけが残ります。

この手順を行列の形でまとめたものがQR分解で、連立方程式や最小二乗法の数値計算に使われます。

練習問題34

グラム・シュミットの直交化法の目的として正しいものはどれですか。

A. 行列の固有値を求める
B. ベクトルの長さをそろえるだけ
C. 行列の逆行列を求める
D. 互いに直交する単位ベクトルを作る

解答と解説

正解:D

グラム・シュミットの直交化法は、独立なベクトルの組から、互いに直交し長さが1のベクトルの組(正規直交基底)を作ります。

Aの固有値は、固有方程式や反復法で求めます。Bは手順の一部(正規化)だけを述べたもので、直交させる操作が抜けています。Cの逆行列は、掃き出し法などで求めます。ただし、QR分解の結果は固有値の計算や逆行列を使わない連立方程式の解法に応用されるため、間接的には関係があります。

35. Echo State NetworkとLeaky Unit

比較の軸

どちらも、RNNで長期の依存関係を扱うための工夫です。Echo State Networkは「どの重みを学習するか」、Leaky Unitは「過去の値をどう残すか」に工夫があります。

Echo State Network

Echo State Network(ESN)は、入力層から隠れ層への重みと、隠れ層同士の重みをランダムに決めて固定し、隠れ層から出力層への重みだけを学習します。固定された隠れ層は、リザバー(貯水池)と呼ばれます。

項目通常のRNNEcho State Network
入力層から隠れ層の重み学習するランダムに固定
隠れ層同士の重み学習するランダムに固定
隠れ層から出力層の重み学習する学習する
学習方法時間をさかのぼる誤差逆伝播線形回帰

学習するのが出力層の重みだけなので、学習は線形回帰の問題になります。時間をさかのぼる誤差逆伝播を使わないため、勾配消失や勾配爆発が起きず、学習も高速です。リザバーの重み行列は、過去の入力の影響が徐々に薄れるように、固有値の絶対値の最大値(スペクトル半径)を1未満に調整するのが一般的です。

Leaky Unit

Leaky Unitは、ユニットの値を更新するときに、自分の過去の値を一定の割合で残す仕組みです。この節の \alpha は、過去の値を残す割合を表します。

u_t = \alpha u_{t-1} + (1 - \alpha) v_t

v_t は新しく計算された値です。この式は、指数移動平均と同じ形をしています。

数値で確認する

\alpha = 0.9 、初期値 u_0 = 0 、新しい値が常に v_t = 1 の場合です。

時刻計算u_t
10.9 \times 0 + 0.1 \times 1 0.1
20.9 \times 0.1 + 0.1 \times 1 0.19
30.9 \times 0.19 + 0.1 \times 1 0.271

一般に u_t = 1 - 0.9^t となり、ゆっくりと1に近づきます。\alpha を1に近づけるほど過去の値が長く残り、長期の依存関係を捉えやすくなります。

練習問題35

Echo State Networkで学習の対象となる重みはどれですか。

A. 入力層の重みのみを学習する
B. 隠れ層間の重みのみを学習する
C. 出力層の重みのみを学習する
D. すべての重みを誤差逆伝播で学習する

解答と解説

正解:C

ESNでは、隠れ層(リザバー)から出力層への重みだけを学習し、それ以外はランダムに固定します。

AとBの重みは、ESNでは固定されます。Dは通常のRNNの学習方法です。ESNは、リザバーで入力を豊かな特徴に変換し、その特徴を線形回帰で読み出す、という二段構えの考え方です。学習が軽いため、計算資源の限られた環境での時系列予測に使われることがあります。

36. WaveNet:Dilated Causal Convolutionの仕組み

比較の軸

WaveNetは、音声の波形を1サンプルずつ直接生成するモデルです。従来の統計的パラメトリック音声合成は、音響特徴量を予測してから波形に変換していました。WaveNetは、この中間段階を経ずに波形そのものを生成する点が大きく異なります。

中核となるのが、Dilated Causal Convolution(拡張因果畳み込み)です。2つの工夫を組み合わせています。

工夫意味
Causal(因果的)時刻 t の出力は、時刻 t 以前の入力だけから計算する。未来の値を参照しない
Dilated(拡張)フィルタの要素の間を空け、層ごとに間隔を1、2、4、8と倍にしていく

音声は1秒間に16,000サンプルなど、非常に細かい間隔で記録されます。通常の畳み込みで長い過去を参照するには大量の層が必要ですが、間隔を倍々にすることで、少ない層数で受容野を指数的に広げられます。

数値で確認する:受容野の広さ

フィルタサイズを k 、各層の間隔を d_l とすると、受容野の広さは次のとおりです。

RF = 1 + (k - 1) \sum_{l} d_l

  • k = 2 、間隔1、2、4、8の4層:1 + 1 \times 15 = 16
  • k = 2 、間隔1から512までの10層:1 + 1 \times 1023 = 1024

間隔を空けない通常の畳み込みで受容野を1024にするには、1023層が必要です。

出力の形式

WaveNetは、各時刻の波形の値を256段階に量子化し、ソフトマックスで分類問題として予測します。量子化には μ-law(ミュー・ロー)という非線形の圧縮を使います。ここでの \mu は平均ではなく、圧縮の強さを決める定数で、255が使われます。

練習問題36

WaveNetで使われるDilated Causal Convolutionの特徴として正しいものはどれですか。

A. 未来の値も使って受容野を広げる
B. 過去の値だけで受容野を指数的に広げる
C. 入力を拡大するため間に0を補う
D. チャンネルごとに独立して畳み込む

解答と解説

正解:B

因果的なので未来の値を参照せず、間隔を層ごとに倍にすることで、受容野を指数的に広げます。

Aは因果的(Causal)という条件に反します。未来の値を使うと、1サンプルずつ順に生成する音声合成が成り立ちません。Cは転置畳み込みの説明で、Dilatedの「間を空ける」はフィルタ側の話であり、入力を拡大するわけではありません。Dはdepthwise畳み込みの説明です。第7節で扱ったダイレイト畳み込みの受容野の式と比べると、1次元の時系列に応用したものだと分かります。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。