この問題のテーマ・前提知識
- テーマ: 主成分分析(PCA)・自己符号化器(オートエンコーダ)・確率的勾配降下法(SGD)
- 前提知識: 主成分分析の基礎(主成分得点・固有値) / ニューラルネットワークの構造(符号化器・復号化器) / 勾配降下法の更新則
問題の概要
主成分分析と自己符号化器に関する3小問。[1] 表の主成分得点(PC1, PC2)から数字クラス「1」「2」「7」が散布図のどの領域に位置するかを判断する。[2] 自己符号化器の各要素(符号化器・復号化器・ニューラルネットワーク・活性化関数)の名称を選ぶ。[3] SGDによるパラメータ更新規則の正しい表現を選ぶ。
解説
解法の方針:[1] 各クラスの PC1・PC2 の値の符号と大きさから散布図上の位置(「1」は左中央・「2」は右上・「7」は右下)を特定する。[2] 定義から各用語(符号化器=低次元への変換、復号化器=復元)を対応させる。[3] 標準的なSGDでは現在の時点 \(t\) のパラメータのみを使って偏微分を計算する。
[1]
表に示された「1」「2」「7」の主成分得点(PC1, PC2)を座標として、散布図上の位置を確認する。
- 「1」のデータ\[(PC1, PC2) = (-6.57, 0.12), (-7.86, 1.03), (-7.41, 0.48)\]これらは PC1が約 -7 前後、PC2が 0 付近に集中している。散布図の左端(中央付近)に位置するはずである。
- 「2」のデータ\[(PC1, PC2) = (6.31, 9.84), (6.72, 1.22), (-0.24, 6.28)\]PC1・PC2ともに正の値をとることが多く、右上の領域に分布する傾向がある。
- 「7」のデータ\[(PC1, PC2) = (2.94, -8.52), (1.24, -7.54), (8.04, -9.53)\]PC1は正(右側)、PC2は大きな負の値(下側)をとっている。つまり、右下の領域に分布する。
これらの条件(「1」は左、「2」は右上、「7」は右下)をすべて満たしている散布図は ③ である。
[2]
自己符号化器の基本的な用語に関する問題である。
- ア:符号化器(エンコーダ)入力 \(x\) を低次元の潜在変数 \(z\) に変換する関数 \(f_\theta\) のこと。
- イ:復号化器(デコーダ)潜在変数 \(z\) から元の入力に近い \(x’\) を復元する関数 \(g_\phi\) のこと。
- ウ:ニューラルネットワーク自己符号化器は、符号化器と復号化器を組み合わせたニューラルネットワークの一種である。
- エ:活性化関数\(f_\theta\) や \(g_\phi\) において、非線形な表現を可能にするために用いられる関数。
従って、正しい組み合わせは ① である。
[3]
目的関数 \(L(\theta, \phi; x_t)\) を最小化するための、パラメータ \(\theta\)(符号化器)と \(\phi\)(復号化器)の更新規則を考える。
確率的勾配降下法(SGD)では、現在のステップ \(t\) におけるパラメータの値を用いて勾配(偏微分)を計算し、その負の方向にパラメータを更新する。
- \(\phi\) の更新:現在のパラメータ \((\theta_t, \phi_t)\) における \(\phi\) に関する勾配を計算する。\[F(x_t) = \left. \frac{\partial L(\theta_t, \phi; x_t)}{\partial \phi} \right|_{\phi = \phi_t}\]
- \(\theta\) の更新:現在のパラメータ \((\theta_t, \phi_t)\) における \(\theta\) に関する勾配を計算する。\[G(x_t) = \left. \frac{\partial L(\theta, \phi_t; x_t)}{\partial \theta} \right|_{\theta = \theta_t}\]
通常、標準的なSGDでは両方のパラメータを同時に(同じ時点 \(t\) の値を使って)更新する。選択肢の中で、現在のステップ \(t\) の値のみを用いて偏微分を評価している組み合わせは ① である。
よくある質問
Q. 第1主成分が捉えるものは何ですか?
データの分散を最大にする方向(線形結合)。固有値が最大の固有ベクトルが第1主成分方向で、全変動のうちその成分で説明できる割合が「寄与率」。
Q. 自己符号化器と主成分分析はどう違いますか?
PCAは線形な次元圧縮。自己符号化器は非線形な活性化関数を含むため非線形なパターンも捉えられる。線形活性化関数の自己符号化器はPCAと等価になる。
Q. SGDとバッチ勾配降下法はどう使い分けますか?
バッチGDは全データで勾配を計算するため安定だが計算コストが高い。SGDは1サンプルずつ更新するため高速で大規模データに向くが収束が不安定。実務ではミニバッチSGDが一般的。



コメント