教師あり学習(Supervised Learning)

1. Supervised Learning の概要

教師あり学習( Supervised Learning )は機械学習の1つの学習方法カテゴリーを指す.入力データから出力データを推定する関数を, [入力データ – 出力ラベル] のN個のペアを用いて,モデルのパラメータを推定する学習方法である.

この記事では,古典的な教師あり学習での一般化を行ったのち,CNNなどのEnd-to-Endなネットワークでの教師あり学習との違いについても述べる.

1.1 Supervised Learning の例:動物画像の分類モデルを学習したい場合

教師あり学習の概要をつかんでもらうために,教師あり学習モデルの学習手順と,データセットの概要を「動物画像の3クラス分類」というタスクを例に,説明していきたい.

事前準備:データセットの構築

教師あり学習を行う前に,まず入力ベクトルに対する出力ラベルの対応具合を予測モデルに教え込ませたい学習用データセット (Training Dataset)を用意する.学習を行う前に,まず作業者の手作業により,各入力データに対応する正解をあらかじめ用意しておく.例えば,3種類の動物「猫(クラス1)」「犬(クラス2)」「パンダ(クラス3)」のうちいずれかの動物が一匹のみ写っている画像を入力として,入力画像が何の動物に相当するかのクラスを識別するシステムを考える.この時,正解データの各画像には,手作業で人間がクラス番号の1,2,3のいずれかに予め割り当てる(もしくは,「その他,3つの動物が映っていない画像 (クラス4)」もクラス番号として追加しても良い).

学習とテスト

教師あり学習は,機械学習の1種なので,「学習フェーズ」と「テストフェーズ」の2つから構成される.

[学習] :予め準備しておいたN個の正解ペアから構成される学習データセットを用いて学習を行う.その際に,データセットの「データ(入力) -> ラベル(出力)」の挙動をなるべく再現でき,なおかつデータセットに存在しない入力データに対しても,そのデータを観測した時に与える正解ラベルに近い機械学習モデル(予測関数)を,モデルごとに異なる学習アルゴリズムを用いて自動的に学習する

例えば,モデルがSupport Vector Machinesの場合と,モデルがクラス識別CNNの場合とでは,学習に用いるロス関数も最適化方法も異なる.

[テスト]:学習が済んでパラメータの最適化が完了した予測モデルを用いる.未知の入力画像がモデルに入力されてきた時にモデルに沿ってラベルを予測することで,予測ラベルを出力(推定)することができる.

2. Supervised Learning における,予測モデルの入出力

概要の具体例で,まずは数式無しで,大まかに教師あり学習の手続きをつかめたと思うので,今度は使用するデータを一般化して,数式的に述べて具体度を上げて,その際に用いられる用語も整理したい.

2.1 予測モデルの入力:特徴ベクトルと次元削減

教師あり学習や教師無し学習などの「機械学習の入力」は,通常ベクトル値$\bm{x}$であり,これを特徴ベクトル(Feature Vector)と呼ぶ.特徴ベクトルを構成する各次元のスカラ値$lx_i$を特徴(Feature)と呼び.それら特徴量のスカラ値を$N$個集めて構成した$N$次元のベクトル $\bm{x} = [x_1,x_2,\ldots,x_N]$ として特徴ベクトルが構成される.英語では,特徴が複数次元分固まった集合をベクトルとしてみなしたものなので,学術論文等では特徴ベクトルとは呼ばずにFeaturesと複数形で呼ぶことが標準的である.ちなみに,深層学習ではFeatureの代わりに,表現(Representation)と呼ぶことが多い.

教師あり学習では,画像や音や言葉の生データをそのまま特徴ベクトルとして推定器に入力することは少なく,通常は生データを特徴ベクトルに変換する特徴抽出を行い,識別性の高い(discriminative)特徴ベクトルに変換し,その変換/抽出された特徴ベクトルとラベルを用いて,関数(=予測モデル)の学習を行う.特徴ベクトルが高次元ベクトルの場合は次元の呪いの影響も受けやすい.そこで,PCA (Principal Component Analysis )や線形スパースモデルなどの次元削減手法を用いて低次元ベクトルに変換したのち,その次元削減済み特徴ベクトルを入力として,予測モデルを学習することも多い.

2.2 予測モデルの出力:ラベル / ターゲット

一方,特徴ベクトルから推定したいスカラー値$y$もしくはベクトル値$bf{y}$のGround Truthのことを,機械学習ではラベル (Label)もしくはターゲット(target)と呼ぶ .入力に意味づけ(例えば冒頭の1.1節での動物クラス分類など)を行うような問題では$y$のことを「ラベル」と呼び,入力に対する意味づけは行わず別の値を予測して関係性をモデルに予測させる場合は,$y$のことを「ターゲット」とそれぞれ呼び分ける(ことが多いが,双方ともラベルと呼ぶ人も居るし完全に浸透している呼び分けではない).

識別問題の(クラス)ラベルは正(Positive)/負(Negative)の2値ラベルであったり,$N$個のクラスを識別する場合は$N$値化された離散値をラベルに用いる (1.1節の動物画像3クラス識別の例など).

回帰問題では,連続値のスカラやベクトルを,正解のターゲットに用いる.(例:OpenPoseなどの人物姿勢推定モデルで回帰された各関節の2次元座標値ベクトルや,カメラ姿勢の推定でのカメラの6DoF (Degree of Freedom),あるいは視線推定で眼画像から回帰されたスクリーン上の2次元座標など).

2.3 特徴ベクトルとモデルの境界が無くなった,End-to-End 学習のDeep Neural Network

それが,画像認識CNNが登場して以降の画像認識系の教師あり学習においては,CNN自体が特徴抽出の役割も予測モデルの役割も両方兼ねてend-to-end学習 (端対端学習)を行うことが標準的になり状況が変わったといえる.DNNの内部において,どこからどこまでが古典的な「特徴抽出」に相当するかを擬似的に考えることで,古典的な機械学習モデル同様の解釈を行うことは多い.ただ,深層学習ブーム以降は,特徴抽出モデルや次元削減モデルを,別途分離して学習することが少なくなった.

もちろんEnd-to-Endで学習して精度が出しづらい問題設定や,データセットの性質がある場合は,複数のネットワークを分割して学習し,テスト時にそれらの予測スコアをヒューリスティックに決めた重みで足し合わせたものを,最終スコアとする場合も多い.

2.4 ImageNet事前学習からの転移学習の

ところが,ImageNetでのCNNの事前学習のあとに,転移学習を別の目標タスク(物体検出意味的分割など)向けに行うことが多くなり結局以前の「特徴抽出器 + 予測器」の合体と見なすことが多くなっている.ファインチューニングでは,end-to-end学習するものの,予測器部分をあらたにヘッド層として付け足すので,やはり2モデルの合成で捉える概念に戻っている.

また,自己教師あり学習の技術が発展し,Transformer構造と超大規模データセットを用いた大規模言語モデル(BERTやGPT-3など)の発展もあって,NLPなどの「CV以外の類似ドメイン分野」でも,「自己教師あり事前学習」→目的タスクでファイン・チューニング(やアダプター)という方向性での深層学習が多くなってきた.これまた、2.3の時代とは違い、「特徴抽出器 + 予測器」2モデルの合成として応用する,昔の方向性へと戻っていると見ることもできる.

3. 汎化誤差と過学習

学習データセットの入力サンプル(の分布)に対してのみ予測が正確でも,未知サンプルへの予測精度が悪いと学習データセットに近いサンプルにしか通用せず意味がない.したがって,教師あり学習では『汎化誤差(generalization error) が最も小さいモデルを,最適な予測モデルとして(可能な限り自動で)選択する』ことが第一目標となる.

もし学習データにあまりにも強く関数を適合させてしまうと,過学習(over-fitting)された予測モデルが学習されてしまう.そうすると,データセットの分布に存在しないサンプル (out-of-sample) が入力されるとうまく予測ができないような「汎化性能の良くないモデル」が学習されてしまう.そこで,教師あり学習では,たとえば交差検定 (cross-validation)などの対策を行い,モデルの過学習具合を学習後に確認するなど,データセットに存在しないサンプルも用いて学習済みモデルの性能を検査することで,モデルの汎化性能を計測し,汎化性能の高いパラメータを探索できるようにする.

汎化性能が性能の良い予測モデルを学習するには,学習データセットとして

  1. モデルのパラメータ数に対する十分な量がある
  2. データとラベルの関係性の十分な多様性のある

という2つの条件を満たすものを用意することが肝心である.経験的リスク最小化の場合だと,正則化(regularization)構造化学習 (Structured Learning) などを採用して,過学習による悪影響を軽減しようとすることが多い.

またDeep Learningの代理ロス最小化では,学習の早めの停止 (early-stopping) や学習中のドロップアウト(Dropout) ,ならびにバッチ正規化(Batch Normalization)層の導入などの,Deep Learning特有の過学習対策により,汎化性能を上げる努力を行うことが多い.

References