Spark + AI Summit Europe 2018 に参加してきました

2018年10月2日〜4日にエクセル展覧会センター(ExCeL London) という場所で開催されたSpark + AI Summit Europe に参加してきました。 3日間とは言っても、初日はトレーニングワークショップで、2日目、3日目は様々なキーノートとセッションという感じでした。 割と広くておしゃれな会場で、近代的な気がしました。

トレーニング(初日)

初日のトレーニングワークショップの前に、コーヒー、紅茶、そして朝食も用意されていました。ワークショップは、Spark Certification のコースを含めて 8種類ほどあり、私の参加した「Hands on Deep Learning with Keras, TensorFlow, and Apache Spark」というワークショップは、参加人数が100名ほどで、 資料は HTML プレゼンでした。利用したツールは Microsoft Azure上で動作している Databricks のノートブックで何もインストールする必要がありませんでした。 Microsoft Azure 上と言ったが、Azure については何も知らずともトレーニングを受けられる感じでした。質問の受付けや資料の共有などは Slack でしました。

1部はニューラルネットワーク・ディープラーニングの基礎と Keras の紹介でした。Learning to Rank for Apache Lucene (LTR4L)でスクラッチ からニューラルネットワークを実装したおかげで、ニューラルネットワーク基礎(活性化関数・バックプロパゲーション・最適化など)のところは主に復習でしたが、 かなり良いペースできちんとやった感じがしました。Keras の方は、コードを書くのは初めてでしたが、ノートブックにおいてのコード実行、また Keras のラボで割と 学びやすい気がしました。

1部が終わったら全トレーニングワークショップの受講者で昼食をしました。トレーニング用の部屋の出口は左右にあり、どちらを出ても食事が用意されていました。 セルフサーブのビュフェで、デザート、ビーフシチュー、そしてベジタリアンオプションも用意されていました。テーブルは自由席でした。テーブルに座ると自己紹介をし、 会話が自然に続く感じでした。

2部の方は、convolutional neural network (CNN)、転移学習、レコメンデーションエンジンとALSなどありましたが、特に面白いと思ったのは「Horovod」という ディープラーニングのモデル分散学習手法です。Uber が開発しオープンソースにしたフレームワークで実際に使用しているらしいです。Spark上で Horovod の学習を行う例があり、全ノードが円形になっているイメージです。簡単に説明しますと、各ノードに訓練データの異なる一部を用意してバッチで独立した学習を行いますが、 重み更新前に隣のノードに勾配アップデート情報を伝えます。勾配アップデート情報をもらったノードは、自ら勾配アップデート情報に加えて次のノードに情報を伝えます。 これを全ノードが全勾配アップデート情報をもらうまで繰り返し重み更新を行います。そうすれば全ノードが同じモデルを常に持っているはずです。

トレーニングワークショップが終われば、Apache Spark Meetup がありました。食事とワインやビールなど用意されていて、プレゼンが二つありました。 一つ目は、ツイッターのツイートデータを用いて自然言語処理を行なったら起きた不思議なことという話で、二つ目は天文学の大量のデータ処理の高速化のために 少しずつ Spark が作用されているという話でした。Meetup が終わると初日終了でした。

セッション(2日目・最終日)

全体的な印象としては、様々なキーノート・セッション発表を聞くと、ビッグデータや人工知能においてよく抱えられている課題は以下の4つのように思えました。

  1. データの前処理、モデル学習、そしてそのモデルのデプロイという流れ・過程にある非効率性(全体的にモデルのデプロイまではるか必要以上に時間がかかること)。 Spark + AI Summit では特に Model-to-Production フェーズでデータサイエンティストが探ったモデルをデータエンジニアがデプロイしようとするときに たくさん無駄があることに重点を置かれていました。
  2. 過去の学習したモデルとその時に使ったデータ、パラメータなどの履歴がない、あるいはメモを取らなくてはならない
  3. 機械学習・ディープラーニングフレームワーク・ライブラリ・ツールが多すぎてかつプロダクションまで複数の異なるツールが使用されること(これは1の一因でもある)。
  4. プロダクションまでの各プロセスにかかる時間(例えばデータの前処理やモデル学習自体時間がかかること)。

様々なセッションがありましたが、多くのセッション・キーノートは上記課題についてで、課題の様々な解決策、そして一般的に Apache Spark に関する最新情報・現状のことを知ることができました。

上記課題解決策などのセッションも興味深かったですが、それ以外にもセッションがたくさんあり、特に面白いと思ったセッション・キーノートを簡単にまとめます。

The Future of Healthcare with Big Data and AI

これはセッションではなく、キーノートでしたが、特に印象を受けたのは、Genomics の業界の会社で上記課題1、機械学習パイプラインにある無駄をほとんどなくすことで、以前2時間半かかっていた 過程が30秒に縮まったという話でした。現在人工知能において最も取り組んでいる課題はやはりその機械学習のパイプライン・流れの改善だなと思いました。特に既存の無駄の多い過程を改善し、 このキーノートで挙げられた例のようにかかる時間が大幅に減少すれば、世界の生産性が上がるでしょう。

A Tale of Three Deep Learning Frameworks: TensorFlow, Keras, & PyTorch

私が出たセッションの中でこのセッションが一番参加者が多かったです。各ディープラーニングフレームワークがどう関係しているのか、どういう役割を果たしているのかなどは、 まだ完全に頭の中で整理していなかったですが、このセッションに出たら大体分かりました。セッションでは TensorFlow、Keras、そして PyTorch の同じ処理をするコードを見せ、 比較しました(Keras だとバックエンド(TensorFlow, Theano, CNTK)を指定することができますが、バックエンドが TensorFlow としていました)。セッションでは以下のように 各フレームワークの特徴・違いをまとめました。

  • TensorFlow は一番低水準で、ディープラーニングに詳しくてコントロールが欲しい人(あらゆる処理の詳細を調整したい人)向け。
  • Keras は TensorFlow より高水準で、割と描きやすい(人気があるようで、ディープラーニングの初心者の人は TensorFlow ではなく Keras が勧められているらしい)。
  • PyTorch も TensorFlow より高水準で、コード自体は Python のコードを書いている感じ。

Learning to Rank with Apache Spark: A case Study in Production Machine Learning

Learning to Rank for Apache Lucene (LTR4L) のランキング学習のアルゴリズムを実装してきたので、私にとってはランキング学習は非常に興味深いので出てみました。 Elsevier社のエンジニアが ScienceDirect というウェブサイトのレコメンデーションエンジンを作り、ランキング学習で改善したという話でした。レコメンデーションエンジンは Spark AI Summit ではかなり人気のあるトピックで、基本的なやり方としては Collaborative Filtering を使います。Elsevier社のエンジニアたちは Item Based Collaborative Filtering を使用してレコメンデーションエンジンを作りました。ユーザがある論文のページに行くと、おすすめの Top 3 の論文がレコメンドされますが、さらにランキング学習でレコメンドされた全論文をリランクし レコメンデーションエンジンを改善しました。「改善」というのはユーザアクティビティで測定して、10〜12% のユーザアクティビティの増加が見られたらしいです。

Spark + AI Summit は非常に刺激的なイベントで人工知能と Apache Sparkの勉強になりました。特に、Apache Spark を使えば機械学習パイプラインのあらゆる過程の高速化が可能だということと、現在世の中が AI において取り組んでいる課題について知りました。私も Apache Spark のことをより深く知り、Spark を活かして機械学習のあらゆるプロセス・処理の効率の向上についてのエクスパートになることを目指していきたいと思います。

SparkAIReport

Comments

Popular posts from this blog

ランキング学習 〜情報検索への機械学習の応用〜

「機械学習の論文をスクラッチから実装しよう!」LambdaMART の数式をコードに落とす