演習3体験記

演習3という名物授業(?)を受けたので、備忘録もかねて、行ったことについて書きたいと思います。

この授業は、3ヶ月間、1ヶ月ずつ三つの異なる研究室に配属され、そこで研究や演習を行います。研究・演習のテーマには割と自由度があって(研究室によりますが)、大体自分の好きなテーマで好きなことができます。調べて発表するのもいいですし、何かの論文の実装をするのもいいですし、新規性のあるアイデアを出すのでもいいという感じです。

研究室ごとにどのような演習形式かは異なっており、毎週30分の発表があるところや、毎週簡単な進捗報告があり、最後に大きな発表が一回あるところなど、形態は様々です。演習できる期間は約三週間で、短いということもあり、どれほどの成果を出すかは個人の裁量に委ねられているところはある気がします。(コロナ期間もあって他の人がどんなテーマでどんなことをやっていたのかうまく把握できていないのは残念です。)

テーマだけでまとめると

Transformer Modelの解析 → 深層学習コンパイラ・多面体モデル → 深層学習フレームワークの実装と量子化ニューラルネットの実験

という三つのテーマで演習を行いました。

第一期

第一期目は、テーマ決めに苦労しました。

機械学習・深層学習に興味があるなぁという段階以降、全く興味が定まっておらず、テーマが決まらなかったので、最初は広範囲な論文を読みました。(そのせいで1回目の論文発表が疎かになってしまい、悲しい気持ちになったのですが。)AutoML-Zeroという論文が一番キャッチーで面白かったです。

論文や記事を読む中で、深層学習モデルの実行速度(学習も推論も)を速くするために、様々な人が尽力していらっしゃるという世間の潮流も感じました。そこで、かなり抽象的な方向性ですが、何かの深層学習モデルを速くしてみようという方向性が決まりました。そのあとは、ソフトウェア的最適化の可能性がありそうだがあまり使われていないモデルを選ぶなど、目先の形だけの新規性ばかりに囚われたテーマを考えたりして道に迷いかけていたのですが、先生の力で軌道修正することができました。本当に良かったと思います。

最終的に、自然言語処理などにも興味があったのもあって、そこでよく使われるTransformerというmodelの性能解析を行ってみて改善案を考えることにしました。せっかくなのでGPUの解析をnvprofではなく、TensorBoardでしようと思ったのですが、tf-nightlyにしか実装されていない新しい機能を使うなどして、書かれているコード例などはないし、かなり手間取りました。実力不足なのは確かなんですが、本来の目的と違う場所で手間取ってしまうのは辛かったです。

最終的に、「Transformerを実装して、tensorboardで解析すること」、「自前のCUDAの実装で、深層学習フレームワークと勝負すること」、などをしました。

第一期は、テーマ決めに時間をかけてしまったり、テーマを決めてからもうまくリサーチできなかったりと大変でした。目先の実装の進捗に拘らず、もっと文献を漁るべきだったと思っています。丁寧なリサーチなしで思いつくような新規性は、既にやられているか、なんらかの理由で(有用性がないなど)やられていないかのどちらかだと思います。第一期はあまりこれと言った成果や結果を残せなかったのですが、研究のスタンスを理解したという点や、深層学習フレームワークのパフォーマンスに問題意識を感じられたという点ではとても良かったと思っています。

第二期

第二期目は、第一期で深層学習のコンパイラやフレームワークに問題意識を感じたので、深層学習コンパイラについて調べることに決めました。深層学習コンパイラ事情について包括的に記述された論文(とても理解しやすくまとめられています)を読んで発表し、その後二週間は、その中で紹介されていた技術の一つである多面体モデルについて調べて発表しました。多面体モデルとは、コンパイラの解析のためのモデルの一つで、強力な解析手法となっています。しかし、強力ゆえ、言語クラスの制限があり、実用上での応用は厳しそうだなと感じました。

そもそも、多面体についての知識を持ち合わせていなかったので、多面体についての入門書(Lectures on Polytopes)を漁り漁り読みながら、コロラド州立大学の教科書いくつかの論文をベースに発表するということをしていました。毎週30分の発表だったのですが、多面体の基礎知識からの説明を30分×2回で終わらすということは少し無理があり、どの部分を発表するかの忖度に苦しみました。最終的には、教科書を全部読んで、重要なところの流れを発表しました。やることが明確だったため、気持ち的には楽でした。

第二期の最後には、他の研究室の最終発表にお邪魔させてもらい、深層学習コンパイラについての演習を行っている友人の発表を聞いたりして、楽しかったです。

第三期

第三期目は、深層学習フレームワークを実装しました。今回は新規性を探しにいくことを最終目標にしたわけではなく、自分の中の問題意識として、ニューラルネットワークの理解不足、自動微分・フレームワークの中身の理解不足があったので、それを解決するためにこのテーマにしました。友人にその話をするとオライリーからよく似たテーマの本が出ていると教えてくれたので、その本をベースに演習を行うことにしました。自分でも驚きですが、550pくらいのオライリーの本を一週間少しで終わらせることができました。電子書籍で買うと本の分厚さに気づかないものです。

オライリーの本が優秀だったのもあり、簡単にできたしまったので、その後、そのフレームワーク上でQuantized Neural Network(QNN)を実装してみることにしました。QNNは中間層を少ないbit数で推論することで、推論時の速度や推論時のエネルギー効率を上げる技術です。そのためには、そのbit数で学習しなければならず、学習アルゴリズムを書く必要があります。なぜQNNにしたのかというと、第一期で一緒の研究室で演習を行っていた友人がQNNの実装をしていたのですが、まだまだわからないところや疑問点が最終発表の段階であったので、自分でもやってみようと思ったからです。

実装し、論文通りの結果が出ました。良かったです。同時に論文の手法に疑問をもつなど、次のステップのようなものを感じれました。(時間がなかったので実装できませんでしたが)

まとめ

このような演習3生活を過ごしていました。研究として何か新しいものを発見するために時間を費やしたというよりかは、inputをしていた時間の方が長かった気がします。しかし、inputを通して、自分の興味分野の方向性がある程度固まり、実装や発表をする中で不思議なところや改善できるようなところを感じ、これからの研究の可能性も少し感じることができました。卒論のための下準備という点では、かなりためになる3ヶ月だったと思います。来学期は4ヶ月ほどで卒業論文を書かなければならないので、処理能力をさらに上げていかなければならないなぁと思っています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする