3人寄れば文殊の知恵

機械学習やWebエンジニアの技術的なこととか色々

【クックパッド】Cookpad summer internship 2018 R&D(研究開発)コースに参加してきました。

概要

5日間の研究開発インターンシップに参加してきました。

本記事では以下の5点を中心に話します。

  • 5日間のざっくりとした内容

  • 参加してよかったこと

  • 自分の反省及び感想

  • 業務時間外のあれこれ
  • 参加を検討している方々へ 

internship.cookpad.com

 

5日間のスケジュールと内容

1日目:機械学習理論

2日目:NLP、画像分析

3日目:MLOps、画像分析

4日目:個人ワーク

5日目:成果発表会、懇親会

 

業務時間 10:00 - 19:00

 ・個人的には、5日間でサービスに導入できるプロトタイプモデルの設計・実装なんかをやるのかなあと思っていましたが、蓋を開けてみると圧倒的にinputの方が多いインターンシップでした。

・内容に関しては、一つ一つ詳細に説明せず概要だけ話します。詳細については、クックパッドから資料が開示されたらリンク貼ります。

1日目:機械学習理論

普段使っている機械学習技術に関する理論的な講義。具体的には、計算グラフと自動微分、及びDeep Learningの汎化性能に関する内容でした。PCほとんど使わずにホワイトボードでがっつり理論、めっちゃ紙とペン使いました(笑)。

機械学習使ってるけど、実際に内部的にはどのように計算が行われているのか明確に説明できる人って少ないんじゃないでしょうか。自分もざっくりとわかってるからいいやといった感じでした。しかし、理論的な話をプロフェッショナルの方から学ぶことができ、内部的な根幹の計算を完璧に説明することができるようになりました。 

2日目:NLP、画像分析

自然言語処理のタームでは、自然言語処理の概論とクックパッドでの実用例の説明です。自然言語処理が専門ではない自分にとっては、基礎からの説明だったのでわかりやすかったです。そのあたりを学んだ後に、実際にクックパッドのレシピデータ100万件を用いていろんな課題に取り組みました。例えば、レシピデータから麺類・非麺類の分類をするモデルを作ったりしました。 

画像分析のタームでは、同様にクックパッドでの実用例を聞き、その後は画像分析の基礎の説明。今回は画像が専門でない人向けに、CNNを基軸にConvolution, Pooling, Activation function, regularizationあたりを述べられました。また、Jupyter notebookでPythonを用いて簡単な画像処理の実装もしました。

3日目:MLOps、画像分析 

画像分析では、近年トピックとして挙げられるいくつかのモデルについて論文ベースで紹介、そしてその中でも軽量モデルについて詳しく学びました。一例を挙げると、CNNにおいて、kernel sizeを小さくするのには限界があり、計算時間削減のために重要となるパラメータは、channel数であるといった話でした。そのための手法として、1*1 convolutionなんかがあるよということで、それについて詳しく聞くことができました。あとは、具体的な軽量モデルの例としてMovileNetやNINなどが挙げられました。

MLOpsのタームでは、そもそもMLOpsって何?というところから話していただけました。自分も何それという感じだったので、少し安心しながら聞くことができました。MLOpsはMachine Learning Operationsの略で、要はMLエンジニアとしてモデルを設計・実装するだけでなく、サービスへの導入だったり運用までしていこうねという話です。具体的には、主にDockerの使い方や、Flaskを使ってモデルをWebアプリケーションで使えるようにしたりしました。Dockerは知ってたけど使う機会がなく知識がなかったので、個人的には非常にいい機会でした。ある程度はDocker使えます!って言えるようになれると思います。

 

 

ちなみに恵比寿ガーデンプレイスタワーなので、こんなインスタ映えな写真も撮れました(笑)。

f:id:jin_t:20180827135703j:plain

4日目:個人ワーク

3日間で、すごい勢いでInputしてきた内容を使って自由にやりたいことやって!という感じ。普段は絶対触れることのできないクックパッドの大量のレシピデータや画像データを扱うことができるのでめっちゃ貴重な機会でした。が自分はもったいないことにそれ一切使いませんでした(笑)。自動微分についてこれ以上はないと言えるほど詳しく学ぶことができたので、実際に実装を行いたかったので、テーマは「自動微分の実装」にしました。関連のライブラリは一切使わず、学んだ知識のみを使って一から実装することで、無意識的に頭で計算してきた内容を定式化することで完璧に理解することができました。今後自信を持って完璧に理解していると言えるようになったことは自分にとって大きな財産です。

5日目:成果発表会、懇親会

午前中にプレゼン資料を作って、午後に発表という形式。限られた時間の中でめっちゃ頑張って資料作りました。クックパッドから許可をいただき次第公開したいと思います。周りのインターン生の発表はNLP使って検索クエリから何かしら予測とか、レシピのタイトルの翻訳とか、それらをDockerで使える形にしたりFlaskでアプリケーション化したりとか色々ありました。たった1日だったのでみんなの集中力が伺えました。

懇親会では、R&Dチームのみなさんとクックパッドのキッチンで美味しいご飯とお酒を楽しみました。

参加してよかったこと

自分にとって参加して1番よかったことは、研究・開発に対するモチベーションが爆上がりしたことです。やはり自分の専攻している内容が実フィールドで実際に使われている様子を目の当たりにしたりとか、周りの優秀なインターン生を見て勝手に負けず嫌いが発動してたからだと思います。自分の置かれている環境というのは大事なもので、 それを再認識できました。

また、単純に機械学習の理論から応用、さらにはその周りの実装や運用について、幅広くも濃密な内容を学ぶことができたので、よかったです。講師の方々の熱意がダイレクトに伝わっていたために、内容をスポンジのように吸収することができました。

あとは、自分が学んできた知識や技術が社会で使われているものとどの程度フィットしているのかを知るいい機会になりました。

そして、自分以外の優秀な16人のインターン生と出会うことができたことは大きな繋がりだと思います。今後もどこかで関わっていくことがあるかもしれないし、切磋琢磨できる人たちだと思っているので、そういった関係が続けていけたらいいなと思います。

自分の反省及び感想

反省点は、せっかくプロフェッショナルな講師の方々が揃いに揃っているのに疑問に思ったことを逐一聞くことができなかったことです。聞くは一時の恥、聞かぬは一生の恥ではないですが、そんな素晴らしい環境にいたのだからもっと惜しげも無く色々聞けばよかったなあと反省です。

というわけで5日間濃密すぎる日々を送っていたわけですが、総じて最高でした。毎朝、ご飯は広いキッチンスペースで自由に取って食べれるわ夜ご飯はみんなでキッチン使って料理できるわイベントある時はシェフの豪勢な料理食べれるわで食が本当に充実!そして、会社の雰囲気もいい意味で自由な雰囲気だなあと短期間滞在なりに思いました。やるときはやる、やらないときはとことんやらないの感じがなんとなくあって、個人的にはめっちゃ好きな環境です。自分は機械学習を使った研究開発もできるしWeb系のエンジニアリングもできるポジションが理想だったので、クックパッドのR&Dはまさにそれで自分に合ったインターンでした。今回学んだことを今後に活かしていきたいと思います。関係者のみなさんにはほんとに感謝です。

業務時間外のあれこれ

実は自分の場合、5日間の中で19時に業務を終えたあと、直帰したのは1日だけでした(笑)。というのも、週2回はめっちゃ広いキッチンが夜自由に使えて、インターン生とR&Dの方々と料理して夜ご飯食べてたり、イベントに参加させてもらったり、懇親会があったりしたからです。イベントはこれに参加しました。

cookpad.connpass.com

機械学習に関することではないですが、内容が面白かったです。

北欧の話だったので、シェフの作る料理はそれ系で、デンマーク国旗のご飯物が特にインパクトありました。

f:id:jin_t:20180827134257j:plain

参加を検討している方々へ

クックパッドR&Dのインターンほんとにおすすめです。最初は正直給与でないのかー、とか思ってましたけどなんか次元が違いました(笑)。給与なんかよりも大きな財産をたくさん得られたからです。講師の方々はめちゃくちゃ優秀な人たちばかりな上に、伝えるのが上手な方々なので想像以上に得られるものが大きいです。これだけ機械学習技術をサービスに適用している会社は珍しく、日本では先端を走っている企業の一つだと思うので、機械学習やってる人は考えてみるといいと思います。