GMOインターネットTopへTOP研究開発トピックスブログ成長とキャリアプラン参加プロジェクト採用情報2018.10.01メタ学習(meta-learning)の紹介:Regression版で今年の東京の気温を当ててみました~TweetPocketこんにちは。次世代システム研究室のK.S.(女性、外国人)です。暑い日々がそろそろ終わり、これからは涼しくなって行くでしょう。紅葉を楽しみにしているので、機械学習の関連技術を利用し、東京の気温を予測してみたいなあと思いました。(ICLR)といった有名な機械学習の学会が去年の3つの最優秀論文を発表しました。私は少し気になってきて、この技術を深く勉強したいなあと思いました。いうことで、今回のブログでは、上記の二つ気になったことを合わせて、メタ学習(meta-learning)についての情報を共有し、この技術を使って東京の気温を予測してみたいと思います。このブログの構成は、以下のとおりです。まとめと考察まず、メタ学習を簡単に紹介します。(MAML)というメタ学習でよく使われている有名なアルゴリズムを説明させて頂きます。それから、MAMLの実装例として、今年の東京の気温を予測します。最後、まとめと考察になります。わかりやすくするため、人が学習することを例にします。読み方、暗記方法、など)を学んで適応するような感じになります。同じ教科書を繰り返して読むより、よりよい読み方がわかれば、最も効率的に教科書内容を吸収できると考えられるのです。機械学習は、コンピューターがデータから反復的に学習し、人が気づいていなかったデータの中に隠れた情報やパターンを見つけ出します。そこで、メタ学習は機械の学習能力を高めるのを目的として、学習プロセスを学んでいくということです。具体的に、メタ学習はどういう感じに行うのかをお話させて頂きます。説明がわかりやすかったので、参考にさせて頂きます。学習プロセスこのセクションでは従来の機械学習の一つであるディープラーニング(深層学習)の学習プロセスのおさらいです。機械学習はコンピューターにデータを学習させ、答えを導き出します。データがあるときに、データの中に人間が気づかない隠れた情報やパターンがあります。そのときに、ディープラーニングといった機械学習を発展させたテクノロジーが役に立ちます。ディープラーニングは人間の神経(ニューロン)を真似て、学習プロセス(ニューラルネットワーク)を作ります。人間の場合、神経細胞(ニューロン)は情報処理と情報伝達に特化します。ニューロンは他のニューロンを繋いで、情報などを通信しながら、情報を理解していきます。ディープラーニングの場合、コンピューターがニューラルネットワークにデータを入力し、そのニューラルネットワーク内で情報を伝達し、学習しながら、隠れた情報を見つけ出します。このディープラーニングの学習プロセスは具体的にどう行われるかについて、下記に説明します。Wolfさんのブログの図を借りて、犬と猫の分別ケースを例として説明しようと思います。図1は学習プロセスを表します。犬と猫の写真を数字でラベルし、ニューラルネットワーク(大きい△)に入力します。ニューラルネットワークの中に、犬と猫を判別するためのパラメータ(□)が入っています。最初のパラメータ値は初期値として設定されます。パラメータに基づいたニューラルネットワークが犬と猫を予測します。予測したものが正しいかどうかloss関数(L箱)で評価します。Loss関数はパラメータを使って予測したものとラベルされたものを比較します。パラメータ最適化(optimizer、O箱)で、パラメータを調整し、loss値が小さくなるように計算を繰り返していきます。loss値が小さいほど、予測したものがラベルされたものに似ているようになります。loss値が小さくなるかどうか、loss値の勾配(gradient)を計算しながら、パラメータをチューニングするための一般的な手法はbackpropagationです。最後に、backpropagationを使ってパラメータをアップデートしていきます。そこで、最もよい答えを出すため、最適化で繰り返して学習を行っていきます。よい学習を得るため、ニューラルネットワークのbackpropagationが主なステップになります。前のセクションでは一般的な学習プロセスをおさらいしましたが、ここではメタ学習を説明します。メタ学習は全ての学習プロセスまるごとを学習します(図2)。図2:メタ学習の学習プロセスこのサイトより転載まず、学習プロセス(図1のまるごと)を学習します。ここで全てのプロセスのloss関数(Meta-Loss)を計算します。それから、Meta-loss値から、各meta-parameterのgradientを計算します。最後、meta-optimizerでgradientを利用し、meta-parameterをアップデートします。ディープラーニングならparameter、loss、optimiserだけで十分ですが、メタ学習はさらにmeta-parameter、meta-loss、meta-optimizerが必要となります。ここで、学習アルゴリズムがより複雑になります。ディープラーニングで学習するためにはたくさんのデータを使うので、コストの高い計算が必要となります。すると、メタ学習はディープラーニングよりもっと多くのデータを利用し、よりコストの高い計算が要求されます。これは現実に適応するのに、厳しいです。learningというコンセプトを利用しています。learningは少ない学習データから正答できることを目的としています。いう有名なアルゴリズムが開発されたようです。MAMLアルゴリズムをベースにして開発したものが多いです。learningなどにも使われています。そこで、今回はMAMLを読んだり、遊んだりしてみました。(MAML)の紹介」、実装例は「3東京の気温の予測」を参考にしてください。(MAML)を開発しました。MAMLは大きくメタ学習を変えたものと言われています。はじめに話した去年のICLRベスト論文もMAMLに基づいて開発されたものです。learningコンセプトが利用されています。learningをおさらいしたいと思います。learningはいくつかの情報(アウトプット)を見つけ出すため、一つだけや少ないデータセット(インプット)で学習します。MAMLはメタ学習の高コストの計算を減らすため、モデルパラメータの初期値を最適化します。上記に説明したように、学習するときに、loss関数を小さくするためのパラメータ調整はloss値の勾配(gradient)が使われています。descent計算が大変になります。descentを行うアルゴリズムです(図3)。基本的によりよいモデルパラメータの初期値を設定することでGradientステップを減らし、学習時間が早くなり、少ないデータセットを使ってもoverfitting問題を緩和することも可能です。図3で、黒線はメタ学習段階(フェーズ)、θはモデルパラメータ、Lはlossです。ここで一つのlossの最小化を一つのタスクとします。3つのタスクがあります。全てのタスクは共通のモデル初期値θがあります。∇L3への線)はそれぞれのタスクのgradientステップです。パラメータθは3つのタスクの最適なパラメータ値に近くなるように、∇Lを使って評価します。θはそれぞれのタスクに適用可能ですので、ベストパラメータ初期値だと考えられます。結果、パラメータθをそのように設定したら、多くのタスクのloss関数を減らすことできます。アルゴリズムの詳細は以下の論文を参考にして頂ければと思います。Learning3つの手法に適応した結果がありました。今回の初勉強として、一番簡単でわかりやすいもので、Regression版をやってみたいと思います。東京の気温の予測ここでは、MAMLを使ったメタ学習で東京の気温を予測してみたいと思います。論文の発表者が公開したコードを勉強し、今回の実装のベースに使わせて頂きました。(20200205追加:修正したコードはここから、ダウンロードできます。)具体的にやりたいことはメタ学習のRegressionを使って、東京の気温のデータを学習します。それから、学習したモデルを使って最新の東京の気温を予測します。これだけだとちょっとつまらないので、ついでに最近話題になっている気候変動も少し検討してみたいです。2.2.2)データ準備まず、データ取得です。日本の気象庁ホームページからCSVファイルで、東京の気温データをダウンロードしました。ダウンロード条件は下記になります。期間:1918年1月~2018年9月22日(101年分)ダウンロード日:2018年9月16日(最後の2018年9月データは半月の平均になります)次に、データの前処理です。data)は二つに分けます。一つ目は1918-1967年(100-50年前)、二つ目は1968-2017(去年までの直近50年)。data)のために使います。dataは少ないかもしれませんが、一応お試しでこのままにしたいと思います。入力データの形式に関しては年の情報を無視し、月(ラベル)と気温だけを使います。すると、ラベルは1から12までになります。イメージは下記のように、左は月ラベル、右は月の平均気温になります。実装データ入力まず、CSVファイルから、東京の気温データを読み込みます。noiseを付けます。データ処理はdata_generator.pyに下記のfunctionsを追加しました。regressionの学習条件を当てはめてみました。東京の気温の予測結果は二つに分かれています。一つは1918-1967年(100-50年前)、もう一つは1968-2017(最近の50年)です。学習はそれぞれのデータを使い、学習モデルも二つのモデルになります。予測(テスト)はそれぞれのモデルを使って、今年の東京の気温と比較しました。左は100-50年前のデータ、右は最近の50年のデータ、を使って学習したLoss結果です。Lossの変化を見やすくするため、log軸でプロットしました。この結果をみると、どちらのデータからでも簡単に学習できたことが見られました。具体的に、モデルがどう学習したかイメージするため、学習が行われているときのビデオを作成しました。0から15,000回までで、図のアップデータ間隔は500iterationごとです。ビデオを見てみると、最初にモデルが線形のようなデータを作成し、少しずつsinカーブに変わっていくことが見られました。図6は今年の東京の気温予測結果です。左は100-50年前のデータで作成したモデル、右は最近の50年のデータで作成したモデルになります。黒点は実際の気温、赤点はモデルで予測した気温です。今年の10,11,12月の実際の気温はまだわからないので、仮に0度にしておきました。図6:予測結果また、予測結果の詳細を見てみると、100-50年前のデータで作成したモデルの予測の方が、最近の50年のものより、予測気温は低いことが見られます。これで、明らかに気象が変動してきたことがわかりました。100-50年前のデータで作成したモデルによる、来月の予測気温は16.66度でしたが、最近の50年のデータで作成したモデルによる、来月の予測気温は18.32度くらいでした。モデルによる、昔に比較すると、最近の10月平均温度は2度弱上がってきたことがわかりました。昔の方が早く気温が下がり、綺麗な紅葉が早い段階で見られたのでしょう。いずれにしても、今年(1-9月)の予測結果による、最近のデータで作成したモデルの予測結果は昔のモデルより、今年の気温に近いことがわかりました。当たり前ですが、最近のデータで作成したモデルのほうが、予測精度が高かったということになります。今回はメタ学習のコンセプトを紹介し、MAMLといったメタ学習の有名なアルゴリズムに触れてみました。regression問題の実装例として、今年の東京の気温を予測してみました。メタ学習の理論通り、普通の学習より計算は少し速いと感じました。精度はきっちりと比較していませんが、論文のように、悪くない結果だと思います。個人的には、メタ学習の可能性を感じ、この分野の発展を期待しながら、また様々なメタ学習を試してみたいと思います。最後に次世代システム研究室では、ビッグデータ解析プラットホームの設計・開発を行うアーキテクトとデータサイエンティストを募集しています。募集職種一覧からご応募をお願いします。一緒に勉強しながら楽しく働きたい方のご応募をお待ちしております。