🎄

数式なしでメタ学習を説明したい

4 min read

本記事はQiitaの記事を一部改変して公開しています.

https://qiita.com/citrus1998/items/bf37c8ce5f128897e9e7

はじめに

ここではメタ学習について分かりやすくまとめることに注力します.

私自身メタ学習の概念を理解するのに半年以上かかりましたので,この記事で初心者でも一発で分かるように心掛けます.

なおいろいろと忙しく序盤の方しかまとめられませんでしたが,ご了承ください.

間違いや疑問につきましてはご指摘頂けましたら幸いです.

メタ学習とは何か

image.png

「メタ学習」と検索すると,必ず 「学習の学習」「learning-to-learn」 と出てきます.

「学習を学習する」 とはどういうことでしょうか.

ここで日本人が外国語を習得するときのことを例として説明します.

ある日本人が最初に英語を取得するとします.
英語は日本語と構造が全く違うので,彼は大変苦戦します.
基本的な単語や文法の他に,発音の仕方やSVOC,現在完了形,省略形など様々な知識を徹底的に叩き込まれます.
その後彼は莫大な時間と手間をかけましたが,何とか英語を完璧にマスターしました.

続いて中国語を学習します.
中国語もピンインなど新たに学ぶことがたくさん存在します.
紆余曲折を得て,彼は中国語も完璧にマスターしました.

この調子で彼は色々な言語を勉強し,マスターしていきます.

そしてついにフランス語をマスターしますが,なんと最初に必死で学習した英語と比べて,習得スピードが速くなっていることが分かりました.

しかも,フランス語の単語や文法に関する知識は少ししかないのに,です.

彼曰く,「以前マスターした英語や中国語などの言語で培ったノウハウをフランス語に当てはめていた」とのことです.

確かに英語とフランス語は単語や文法,人称と動詞の関係やSVOC,省略形を使える条件など似ている箇所が多々あります.

彼は 「英語を学んだ時のようにフランス語を学べばよい」 ということに気づき,単語や文法を英語のルールと結び付けて学習したのです.

その結果として,少ない知識で効率よくマスターすることが出来たと考えられます.

以上ある日本人の例でした.

つまり何が言いたかったのかと言いますと,「学習を学習する」 とは,「複数のタスクをこなすことで学習の仕方を理解し,他のタスクに応用できるようにする」 ことを指します.

ここでタスクとは,「一つの作業」 といった感じです.

ある日本人の例では,「語学を学習すること」を指します.

彼は複数の作業を行う中で,語学学習の際のテクニックを学習したということになります.

そしてそのテクニックを別の作業に応用して,最終的にフランス語をマスターした,ということです.

これらの例を機械学習で表現してみます.

機械学習では基本的に,「データを機械学習モデルに入力して,ある値を出力する」ことを行います(以下の図のようなイメージです).

create_figure.png

回帰問題では観測データを入力として予測結果を出力し,分類問題では観測データを入力として分類先のラベルを出力します.

一方メタ学習では,以上の機械学習を「データ」として入力 します.

イメージとしては以下の図のようになります.

create_figure_meta.png

メタ学習のコンセプトは「複数の作業(タスク)を通じて学習のテクニックやコツを理解し,未知の作業に応用すること」です,

まず各入力データ内で機械学習のモデル(Model)を学習し,その後入力データのモデルをメタ学習のモデル(Meta-Model)で学習する,といったように二段階で学習を行っています.

モデルの学習をメタ学習することで,分類問題ならば「二つのものを分類するのにまずどういったポイントに着目するか」や「色の境目に注意を向けよう」などといったテクニックまでも学習でき,別の機械学習にこれらのテクニックを応用することができます.

メタ学習の利点

おさらいですが,メタ学習の特徴は 「複数の作業(タスク)を通じて学習のテクニックやコツを理解し,未知の作業に応用すること」 でした.

さて,わざわざ学習の仕方を学習することでどのようなメリットがあるのかについてここに記していきます(実は先程の日本人の例にも出ています).

結論から申し上げますと,「少ないデータでも学習できる」 ということです.

その理由として,複数のタスクの学習過程で取得したテクニックを補助的に活用できることが挙げられます.

先程の例において,ある日本人はフランス語の知識が少ししかありませんでしたが,英語と単語や文法が似ていることに着目し,単語の複数形や文法の構成などといった既に学習したルールを活用しました.

この例のように,メタ学習でも複数のタスクから得たテクニックを活用すれば,少ないデータセットで精度向上が目指せます.

以上よりメタ学習は,数個のデータで学習を行う Few-Shot Learning という手法に精通しており,複数のタスク間で取得したテクニックで多岐にわたる未知のタスクの学習をサポートできる,といった器用な一面を持ち合わせています.

事例紹介

ここでは,メタ学習に関する事例を紹介していきます.

MAML (Model-Agnostic Meta-learning for Fast Adaptation of Deep Networks)

https://qiita.com/ku2482/items/ee2fd87bbb5353664f59

https://arxiv.org/abs/1703.03400

https://github.com/cbfinn/maml

このMAMLはメタ学習でかなり有名です.

数式やアルゴリズムは出てきますが,複雑でなく至ってシンプルで初心者でも分かりやすい構成になっています.

MAMLではFine-tune(事前に別のデータで学習してパラメータを微調整する手法)を用いて,各タスクを学習したのち,二段階でパラメータを更新していきます.

image.png

MAMLは回帰問題や分類問題だけでなく,強化学習においても少ないデータで成果を出しています.

Meta-World: A Benchmark and Evaluation for Multi-Task and Meta Reinforcement Learning

https://meta-world.github.io/

https://github.com/rlworkgroup/metaworld

ここではメタ学習を用いた強化学習により,様々なタスクをこなせるようにしています.

image.png

Neural Processes

https://arxiv.org/abs/1807.01622

https://github.com/deepmind/neural-processes

Neural Processは,MAMLで課題となっていた計算量の問題を解決したモデルとなっています.

image.png

DeepMind社がコードを公開しています.

おわりに

メタ学習について個人的に分かりやすくまとめたつもりですが,もし腑に落ちない部分があればご指摘いただけると嬉しいです.

いろいろ忙しい中で書いた短い記事で申し訳ないですが,これからどんどん更新する予定です.

ここまで見て下さり,ありがとうございました.

Discussion

ログインするとコメントできます