教師なし学習の基本
教師なし学習の概要
教師なし学習(Unsupervised Learning)は「人がアノテーションを用意しないで行う学習」を表す用語です。入門書などではk-means法のようなクラスタリング(clustering)のようなアルゴリズムを例に教師なし学習について解説されることが多い一方で、「教師あり学習と教師なし学習のアルゴリズムがある」というよりは「アノテーションを用意して行う学習を教師あり学習、アノテーションを用意しないで行う学習を教師なし学習という」のが本来的には正しいです。
上記はDeepLearningにおける「教師あり学習」と「教師なし学習」を理解する上で特に重要です。DeepLearning(大規模なニューラルネットワークの学習)は大量のパラメータを持つ巨大な関数の学習であり、学習にあたっては必ず「入力」と「入力に対応する出力」を用意する必要があります。必ず「出力」を用意する必要があることから「教師あり学習」であるとつい見えがちですが、「アノテーションを行わずに出力を用意すること」もできるので、必ずしも「教師あり学習」にはならないことに注意が必要です。
教師なし学習の例
「教師なし学習」の例で良く挙げられるのがクラスタリングです。たとえばk-means法や階層型クラスタリングなどが入門書でよく取り扱われます。
一方で、近年多くの分野で応用されているDeepLearningでも「アノテーションを行わずに出力を用意すること」が可能であることから「教師なし学習」に対応するアルゴリズムが存在します。たとえばオートエンコーダ(AutoEncoder)やGAN(Generative Adversarial Network)、拡散モデル(Diffusion Model)のような生成モデル(Generative Model)の学習にあたっては、単に画像だけ用意すれば良いのでこれらは基本的に「教師なし学習」です。他にも近年話題のLLM(Large Language Model)の事前学習(pretraining)は、「文脈から単語を予測するタスク」は文章を与えれば済むことからこれも「教師なし学習」に該当します。
「教師なし学習」は「アノテーションを行わずに行う学習である」と理解しておけば上記の例が「教師なし学習」であることが理解できると思います。
DeepLearningにおける教師なし学習の活用
特徴量抽出器
教師なし学習の活用にあたって、よく用いられるのが特徴量抽出(Feature Extraction)です。画像の場合、ImageNetなどを用いて学習させたVGGNetやResNetを用いて特徴量抽出やfinetuningを行うことが多い一方で、オートエンコーダを用いて学習させたものを元に特徴量の抽出を行うことも可能です。
上記の使い分けにあたっては、「CIFARやImageNetのような例で学習させたものをそのまま活用できる場合やfinetuningを行える場合はResNetなどを用いる」、「そのまま活用できないかつアノテーションを用意できない場合はオートエンコーダなどを用いる」というのが一つの指針になると思います。
オートエンコーダを用いて特徴量抽出を行う場合は、エンコーダの出力が特徴量(潜在ベクトル)に対応するのでエンコーダの出力を用いるというのがシンプルで良いと思います。
事前学習(pretraining)
Transformer(Attention is All You Need)が発表されて以降、NLP(Naural Language Processing)の分野は大きな変革が起きました。直近ではChatGPTに代表されるLLM(Large Language Model)が大きく注目を集めています。
このLLMの学習にあたってはWikipediaなどの大量の文章を用いた事前学習(pretraining)が行われており、この事前学習はアノテーションを用意しないことから教師なし学習です。
NLPに限らず画像の学習にあたってもオートエンコーダなどで教師なし学習を行った結果を元にfinetuningすることで事前学習を行うことが可能です。画像処理ではCIFARやImageNet、COCOのように汎用的なアノテーションの付与されたデータセットが多い一方で、ImageNetなどの画像と類似しない画像の推論を行う場合などは教師なし学習を行うのも検討すると良いと思います。
生成モデル
GAN(Generative Adversarial Network)や拡散モデル(Diffusion Model)などの生成モデルは基本的に教師なし学習をベースとします。「Discriminatorの入力がGeneratorの出力か実際のデータかをあてる」というタスクを元に学習させることで、単に画像を用意させるだけでGANの学習が可能です。
実際に画像の生成を行うにあたっては訓練させたGeneratorに学習の時と同様に潜在ベクトル($\mathbf{z}$)を入力に与えれば良いです。