いま話題のディープラーニング。ブラウン大学の「深層学習」の課題を紹介します!

みなさん元気にしていますでしょうか? アメリカのブラウン大学に留学中のKentaです。

ブログ記事を書くのが久しぶりになってしまいましたが、人生で一番努力し、苦しんだであろう2年生の秋学期を無事に終えました。

記事を書くのが久しぶりになってしまったのは、毎日が忙しすぎて、まとまってブログを書く時間がとれなかったからです、すみません。

これから数記事にわたって僕の2年生の秋学期を振り返っていきましょう。この記事と次の記事では、僕が履修した科目とその内容を紹介したと思います。

ブラウン大学での授業がこんな感じなのか、というのを察していただければ幸いです。

RNNで生成した文章
RNNを使って生成した文章

コンピュータのクラスを3つも!

僕が今学期に履修した科目は

  • Intermediate Chinese (CHIN 0300)
  • Introduction to Software Engineering (CSCI 0320)
  • Introduction to Computer Systems (CSCI 0330)
  • Deep Learning (CSCI 2470)

です(カッコ内は科目番号)。

というわけで、今学期にはコンピュータサイエンスの科目を3つもとってしまったのです。

とくにCSCI 0330とCSCI 0320を同時にとるのは狂気の沙汰だといわれるのに、僕はそれらに加え、深層学習(Deep Learning)も履修してしまったのです。これで少し、記事執筆が空白になった4か月の説明がついたと思います(笑)。

今回の記事では、中国語のクラスと深層学習のクラスについて話したいと思います。

中級中国語 Intermediate Chinese 300

この科目は中級中国語で、1年生のときにとった中国語の科目の延長となっています。

まず去年と違ったのは、授業が完全対面になったことです。

教授3人に対して学生が30人弱という構成になっていて、1日3セクションに分割されて、好きなセクションに行ってもいいよというスタイルで行われました。

やはり対面授業になると、オンラインと違って、クラスメイトとのペア・アクティビティや教授とのやりとりが増え、授業がとてもダイナミックでおもしろかったです。

文法・単語の質・量ともに増え、ほぼ毎日課題もあったため少し大変でした。最終課題は10分のスキットを作成しました(スキットについてはこの記事を参照してください)。

深層学習 Deep Learning

この科目は、日本語でいう「深層学習」の分野をカバーする科目です。

今学期とった科目の中で、「楽しさ・新しさ」でいったら一番に君臨するくらいおもしろい科目でした。

すべての課題は、神経ネットワークを使って行われました。神経ネットワークとは簡単にいえば、複雑なインプットとアウトプットをつなげる関数のようなもので、何千何万にもわたる引数で成り立っています。

それを踏まえ、以下がコードを書く宿題で僕が実装したものです。

1. MNIST Digit Classification

この課題は一番単純なもので、簡易的な神経ネットワークを使って、モデルに1万枚の手書きの数字の画像と、それに対応する答えをインプットして訓練します(モデルは私たちと違い、どの画像がどの数字にあたいするか訓練するときに知る必要があるため)。

その後に、訓練データとは別の手書きの写真をモデルにインプットして、モデルがその数字をあてることができる確率を高めるといったものです。

2. Convolutional Neural Network

この課題は、簡単にいえば画像認識モデルの実装です。ことを簡単にするため、今回は犬と猫の写真の区別でした。

神経ネットワークを使うのは同じなのですが、少し違ったのは神経ネットワークに代入する前に、Convolutional Layerという畳み込みネットワークを使うことです。これによって画像の重要なピクセルを抽出して僕のモデルがそれをもとに、区別をつけることが可能になります。結果的に80パーセントの確率で区別をすることができました。

3. Trigram & Recurrent Neural Network

みなさんはMicrosoft WORDなどを使ったときに、自動的に単語が予測される機能を目にしたことがありますか? この課題はまさにそれをカバーした感じです。

インプットして50万行の文章をモデルに入れ、それで訓練します。訓練後には何でも好きな単語を1語入れるだけで、モデルが文章をアウトプットしてくれます。冒頭の写真がその様子です。

4. Transformers

この宿題は一番の僕のお気に入りで、簡潔にいえば翻訳モデルの実装です。

今回翻訳した言語はフランス語から英語でした。文章予測モデルと似て、この課題ではモデルへのインプットとしてフランス語の文とそれに対応する英語の文を入れます(これも70万文くらい)。

複雑になってしまうので簡単に説明しますが、このTransformersというモデルの特徴としてあるのが、このモデルを使うと一単語と他のすべての単語の関係をとらえられるということです。ですので、このモデルが翻訳にもってこいというわけです。

5. Variational Autoencoders

この課題も非常にユニークでした。というのも、いままでの宿題で実装したモデルというのはアウトプットがけっこう小規模なものでした(画像認識の例でいえば犬か猫かの二択)。

この課題でのゴールは、インプットは手書きの数字(1つ目の課題と同じ)なのですが、その数字特有の確率分布を求めるというもの(ガウス分布)。

この確率分布がわかれば、訓練後のモデルに無作為のインプットを入れると、それに対応する確率分布内の数字の画像をアウトプットすることができます。モデルが画像を自分で作成するというわけです。

6. Reinforcement Learning

モデルがゲームをプレイ
作成したモデルがゲームをしている様子

最終課題としてあったのが、最近人気の強化学習でした。

強化学習というのを簡単に説明します。

定義としてはまずモデルであるエージェント(agent)がいて、そしてそのエージェントがいる環境(environment)があり、その環境内でエージェントは複数のアクションを行うことができます(マリオを例にすると、跳ぶ・しゃがむ・前進する、など)。

そしてエージェントがその行為を行った後に、報酬(reward)を与えます。マリオの例を続けると、もしマリオが「跳ぶ」という行為の結果、巨大化キノコを獲得したら、+1の報酬を与えます。

この一連の流れを繰り返して、モデルは報酬を最大化できるような一連のアクションを求めるというのが強化学習です。

今回の課題では、一番スタンダードの実装であるCart-Pole(平行移動可能な台の上に立つ棒が落ちないようにバランスするプログラム)を行いました。

これらの課題を終えた後に残ったのが最終課題です。

僕は院生向けのクラス(深層学習の科目番号には1470と2470があり、後者が院生向け)をとったので、いままで実装されていなかったものに取り組む必要がありました。4人グループで話し合った結果、以下のアイデアに決まりました

強化学習を使って、Atariがリリースしている複数のゲームでいいパフォーマンスを残すことができるモデルを実装する。

チェスにおいて人間を超えるモデルはあるけれど、チェスと囲碁の両方において人間を超えるモデルはまだないんじゃない? ということです。

結果的には50時間くらいこの最終課題にかけましたが、僕たちが満足できるようなモデルには一歩届かずでした。でも、2つのゲームにわたってそこそこの結果を残すモデルの実装には成功しました。

ものすごく余談になりますが、僕たちのグループは最終課題を始めるのを先延ばししすぎて、締め切り2日半前から始める羽目になってしまい、ほぼ睡眠なしでがんばって終えました(笑)。

みなさんも課題は、早め早めから始めましょう。

いままで「これどうやってできるんだろう」と抱いていた疑問が、深層学習のクラスを履修し終えて半分くらい解消された気がします。

Google翻訳(Transformers)、Google Docsの単語予測(RNN/Transformers)、Photoshopの背景変換(Variational Autoencoder)、チェスチャンピオンを破ったAIモデル(Reinforcement Learning)などなど。

小規模ではあるものの、自分の手でこれらの機能をもったモデルを実装できたのは少し誇らしいし、いい経験にはなったのかなと思います。

次回の記事では、Computer Systemsのクラスと Software Engineering のクラス、そして来学期履修予定のクラスを紹介したいと思います。

今回もお読みいただきありがとうございました。

Kentaくんの記事一覧



▼ 読むだけでアメリカ留学に役立つ資料をお送りします。

留学資料を無料でとりよせる

留学相談 留学講演会
留学中の就職支援