メルカリのAI Engineeringでエンジニアリング・マネージャを務めている澁井です。
米国カリフォルニアのGoogleキャンパスで開催されたTensorFlow Dev Summit 2019に参加してきました。
TensorFlow Dev SummitはTensorFlow(以下TF)の開発者向けにGoogleが主催しているカンファレンスで、今年は03/06(水)-03/07(木)に開催されました。
特に面白かったセッションをピックアップして紹介します。
TensorFlow 2.0
当日03/06にTF 2.0 alphaがリリースされました。TF 2.0はTFのメジャーアップデートで、昨年くらいから少しずつ情報提供されていました。nightly-releaseで使うこともできましたが、ようやくalphaバージョンが出ました。
2019年3月7日時点では pip install -U --pre tensorflow
でインストールして使うことができます。
TensorFlow 1.xとの大きな違いは以下です。
- ユーザビリティ改善
- 標準的な機械学習モデルの定義、学習の記述方法は
tf.keras
ベースになります。 eager execution
をデフォルトで有効化します。session
を使わなくても良くなります。
- 標準的な機械学習モデルの定義、学習の記述方法は
tf.function()
とautographでPythonコードをコンピュテーション・グラフに変換可能(TensorFlowで実行可能)になります。- デバッグ改善
- エラー時にエラー箇所(コードの行番号)が表示されます(地味に凄い嬉しい)。
モデル開発が tf.keras
ベース(High level)になるため、一般的に開発効率は向上すると思います。一方でカスタムレイヤーやLow levelな計算を定義するには、これまでの tf.Variable
等々を使うことができます。独自に計算グラフを定義するには tf.function()
を使う方針になると思います。
既存のtf1.xからtf2.0への移行にはアップグレード・ツールが提供されます。このツールを使えば、.pyファイルや.ipynbファイルのtfコードをtf2.0に置き換えることができるそうです。
あとTF2.0ではユニコード型の文字列をサポートするようです。日本語の自然言語処理には大きなメリットになります。
TF2.0のリリーススケジュールですが、Alphaリリース(3/6)後、春のうちにRCになり(春っていつまでだ?)、GAは今年中予定、だそうです。
TensorFlow Extend(TFX)
TFXは機械学習のワークフローをEnd to EndでカバーするためのTensorFlowの実装です。
機械学習のモデルは開発からリリースするまでに、以下画像のようなフローが必要になります。機械学習というと学習と評価ばかりがフォーカスされがちですが、実際には更に多くのタスクが必要になります。モデルを開発するにはデータを取得し前処理する必要がありますし、リリースして推論できるようにするにはサーバやデプロイメントが必要になります。TensorFlowも従来はデータの簡単な前処理からモデル定義、学習、評価、推論(TF serving)しか用意されていませんでしたが、より広いフローをカバーするため、TFXが提供開始されています。
TFXでは各タスクをコンポーネント化してパイプラインにして連携させます。永続化するデータはmetadataストアに格納し、再利用や管理可能になるようです。パイプラインの途中でエラーになった場合、以前の処理データを再利用できる、というメリットがあります。
metadataストアのメリットは前処理や学習の履歴を保存しておけることで、小さい変更であれば履歴を使って時間短縮できること、らしいです。TensorFlowに依存する(Schikit-learnやPytorchで使えるのか不明)のが難点かもしれませんが、他のライブラリと共存できればすごい便利なツールになりそうです。
TFXはワークショップも催されていました。1時間程度で、AirflowでTFXライブラリを使ってみる、というものでした。GUIでTFXのフローを進捗確認できて、とても便利そうでした。
メルカリでは機械学習のワークフローを実行する基盤を独自開発していますが、TFXはとても参考になりました。
TensorFlow.js
TensorFlowのJavaScript版です。version1.0がリリースされ、今回のデブサミでもユーザ層の厚さや熱心さが伝わってきました。
モデルの書き方はKerasベースです。React Nativeのようにコンポーネントを組み込めるような書き方になるのでしょうかね?
TensorFlow.jsはブラウザ(従来のjs)、サーバ(Node.js)、デスクトップ(Electron)をカバーしており、マルチプラットフォームで実行できることが最大の強みだと思います。エッジ推論もそうですが、ブラウザやデスクトップで学習、推論できるなら、データをサーバに送るコストやセキュリティを気にする必要がなくなりますし、今後は機械学習をjsで開発する時代がくるのでは!?という熱量も感じられました。
Magenta StudioやExperiments with Googleのようにtf.jsを用いてウェブ経由で多様なAIサービスを提供できていますし、今後さらに盛り上がっていくと思います。
くわえて、PythonのTensorFlowで開発したモデルをsaved_modelを使ってtf.jsで扱うことができるらしいです。モデル開発はPythonエンジニア(MLエンジニア)が担当し、推論やウェブサービス開発をJSエンジニアが担う、という役割分担も可能になると思います。
what-if-tool
セッションはなかったですが、ブース展示していたwhat-if-toolは便利そうでした。what-if-toolはTensorboardの追加機能で、学習済みモデルを評価するツールです。
以下画像のように、2値分類で推論結果の位置づけを可視化したり、特定のパラメータを調整して推論したりすることができます。
検証データやテストデータから漏れてしまっているパラメータを設定して推論することができるので、機械学習の境界値分析が可能になると期待しています。
機械学習のモデルをテストデータで評価することが多いですが、what-if-tool
では値を適宜変更して推論結果を試してみることができます。推論時にテストデータに存在しない値が入力されることは頻繁に発生することなので、what-if-tool
でモデルの品質を向上できる可能性があると思いました。
使い方はこちらでブラウザから試すことができます。
まとめ
とても楽しい2日間でした。
TensorFlowで機械学習を実用化するためのワークフローをエンドツーエンドでカバーしようという戦略が伺えました。実務ですぐ使えそうなツールでは what-if-tool
が便利そうでした。TensorFlow.jsも機械学習を実行するプラットフォームをウェブ世界に広げる橋頭堡になると思います。
私は3年前にKerasでディープラーニングを学び始めたのですが、TensorFlowの本流がKerasになるのは嬉しい限りです。そして会場ではKeras作者のFrancois Cholletさんと一緒に写真撮影することができました。
あと秘密ですが、Apache Beamがさり気なくPython3.5以上をサポート開始していまして、これを教えてもらえたことも大きな収穫でした。