みなさんこんにちは。技術開発室の岡田です。
現在ラスベガスで絶賛開催中のAWS re:invent2019に参加しています。 昨日のキーノートでは怒涛の新サービス発表がありましたね。 特に私の担当している機械学習関連では、SageMakerの新サービスが多く発表され、スーパーエキサイティングな1日になりました。 興奮醒めやらぬ状況ではありますが、この発表をうけて新たに追加されたセッションも含め、本日までに参加できた機械学習関連のセッションについて、ご報告したいと思います。 (ちょっと専門用語が多めになります。)
ちなみに、今日も朝ごはんと昼ご飯は提供されました。😊
キーノート振り返り
昨日のキーノートでは、レイヤごとに次の新サービス・機能が発表されました。
Framework
- TensorFlow: 20%高速化(MASK R-CNN)
- PyTorch: 22%高速化(同上)
- mxnet: 22%高速化(同上)
SageMaker
Service
これらに関連して追加されたセッションのうち、本日までに次のものに参加することができました。
- Optimizing Your Machine Learning Models on Amazon SageMaker
- The new Amazon SageMaker Model Monitor: Address concept drift & model quality
- Intro to Amazon SageMaker Debugger: Get insights into ML model training
- Introducing Amazon SageMaker Studio, the first full IDE for ML
また、関連して次のものもセッションに参加しました。
- Leadership session: Machine learning
Optimizing Your Machine Learning Models on Amazon SageMaker
機械学習モデルをトレーニングするときのパラメータをSageMaker Autopilotを用いて自動でチューニングして、よりよいモデルを作成するワークショップです。
パラメータチューニングの方法にはグリッドサーチやランダムサーチを使うことが多いですが、SageMaker Autopilotはガウス過程回帰とベイズ最適化を用いてパラメータを探索します。また、ここでチューニングできるパラメータは一般的なハイパーパラメータに加え、機械学習アルゴリズム自体も自動で選択してくれます。さらに、Feature Engineeringも実施してくれるようです(!?)。探索の結果いくつかの候補を出してくれるので、(一般的には)もっともよいメトリックのモデルを選択する、ということになります。
ただ、やはり会場ではパラメータチューニングに伴って発生する料金についての質問が出ていました。パラメータチューニングするためには何度もトレーニングを実施する必要があり、大量の計算リソースを必要としますので、当然の懸念だと思います。そして回答も至極当然の回答で、探索(トレーニング)にかかった時間だけそのインスタンスの料金を払うことになるよ、とのことでした。大きなモデルに使うと結構な料金がかかってしまうのではないかという不安はありますね。ただ、グリッドサーチよりも少ないイテレーションでより良いパラメータを見つけてくれる期待はあるので、グリッドサーチをやる前提であるのであれば、代わりにこちらを使った方が安上がりになる可能性もあります。また、あまり機械学習に詳しくない人にとっては、ほぼ全自動でモデルの性能を向上させることができるという点は見逃せません。このため結構使われるのではないかと思います。とても期待のできる機能だと思いました。
このワークショップで用いたノートブックは下記のgithub上にあります。 実行する際には使用したリソースの料金が発生しますのでご留意ください。
なお、このノートブックのLab2を実行すると、Autopilotで作成したパラメータの候補の一覧を中間生成物のノートブックで見ることができます。残念ながらワークショップで利用した環境のものはすでに消されてしまったようで詳細確認できなくなってしまいましたが、記憶だとFeature Importanceなど使ってしっかりFEしてたような気がします。いや、すごい。
The new Amazon SageMaker Model Monitor: Address concept drift & model quality
SageMaker Model Monitorのセッションです。
concept driftは、ざっくり説明すると、モデル作成中に想定した世界が時間の流れとともに変化し、モデルが現実世界に対応できなくなることです。一般的には、上記のAutopilotのようなことを行い、モデル作成の際に与えられたデータを用いて、そこで(汎化性能も含た)最高の性能を出せるようにチューニングします。しかし、時間とともに取得できるデータのばらつきが変わるため、徐々に性能が劣化していきます。例えば、温暖化の影響を受けて天候が変わるとか。最近の日本の気候もだいぶ変わったように思いますよね。このため、モデルは作成時点が最も精度が高く、徐々に劣化していくといわれたりします。
Model Monitorはこの劣化度合いをモニタリングして、一定の条件に至るとアラートを上げる機能とのことです。ただ、今回の説明を聞く限り、この劣化を検知するための条件は、(Model Monitorがリコメンドしてくれるようですが、最終的には)モデル開発者が決める必要があるようです。下図のBaseline statistics and constraintsのところですね。このため、ちょっと機械学習の知識がないと敷居が高いのではないかという印象でした。Autopilotで自動でモデルチューニングした後にこの条件を作成し、その良しあしを判断ができるのかが気になるところです。
とはいえ、concept driftの話はFLECTが扱っている案件でも話題になりますので期待したい機能です。
Intro to Amazon SageMaker Debugger: Get insights into ML model training
SageMaker Debuggerのセッションです。
大規模なモデルを作成した経験をお持ちの方であればお分かりになると思いますが、モデルのトレーニングにはかなりの時間がかかります。なので、トレーニングを開始したら数日放置しておくということもあると思います。そして数日後にトレーニングが完了したモデルを確認すると期待したほどの精度向上がなく落ち込むと。このような悲劇を回避するためにTensorflowであれば、TensorBoardを用いたりCallbackをうまく使って通知を上げたりするのが一般的かと思います。ただ、これを行うためにはモデル開発のコードを修正する必要があり、かなり神経を使います。Sage Maker Debuggerはコード変更することなくトレーニング時の異常をリアルタイムに検知、報告してくれる機能とのことです。
トレーニング中に作成されるデータ(おそらくチェックポイント)をS3に保管しし、逐一それを解析する処理を起動するという感じでしょうか。 確かに、デバッグコードをモデル開発のコードに直接書くと見通しが悪くなったりしがちなので、そういう意味で地味にありがたい機能だと思います。
Introducing Amazon SageMaker Studio, the first full IDE for ML
SageMaker Studioのセッションです。
SageMaker Studioは、今回発表のあった各種機能を取り込んだ機械学習モデルの統合開発環境となります。
図のような繰り返し開発を行うときに活躍します。 左の箱のBuildフェーズはNoteBooksを使ってAutopilotでチューニング、Debuggerでデバッグしながら中央の箱と行ったり来たりのイテレーションを行う。このイテレーションはExperimentsで管理され、最終的にはソリューションとして最適なモデルをデプロイできる。デプロイした後はMonitorでコンセプトドリフトを監視して問題があれば再度モデルを作り直す。という流れになるかと思います。
こう考えると、さすが機械学習の開発プロセスを熟知しているAWSの統合環境だなと思いました。 おそらくここまで機械学習のモデル開発の流れに合わせて機能を組み込んだ開発環境は見たことがないので、今回のSageMaker Studioの発表で開発プロセスが一段レベルアップした感じです。 今後、Google, MSといった他社の出方が気になります。
Leadership session: Machine learning
本セッションはキーノートの直後に実施されたものです。基本はキーノートの発表に沿ったものが説明されましたが、キーノートでは語られなかっ た情報もありました。
一つ目がDeep Java Library(DJL)です。
Java開発者にend-endの機械学習開発APIを提供するようです。 従来AWSのForecasting teamでは、データサイエンティストチームがPythonを用いて作成したモデルを、Javaで開発しているML Infraチームが数週間かけてリファクタリングして使っていたのだそうです。多くのエンタプライズサービスはJavaで書かれているのだから、このコストはいろんな開発現場で発生しているはず。そこでDJLを使って初めからJavaで作成しておくことで、このコストを削減するということのようだ。 実際に、AWSのForecasting TeamはDJLを使うことで開発期間を30%削減できるようになったそうです。
確かにPython,特にJupyterNotebookで作成するコードはそのまま使えないことは、私もよく経験することなので、なるほどなとは思いました。
二つ目はSQL for MLです。 下図の例では、Amazon Aurora Amazon SageMaker, Amazon Comprehendと連携して、リアルタイムで推論結果を返します。 まぁ、そういう流れになるだろうなという範疇ではあります。個人的にはSQLがあまり得意ではないので、DBという形すら取らずに、すべて自然言語でDBからAIからすべてのデータソースをクエリできるようにしてほしい。
さいごに
以上が私が参加した機械学習のセッションのご報告となります。 FLECTは明日が最後の参加日となります。そして、明日はキーノートがあります。また何か大きな発表があったら、さすがに体力が持たないかも。 どこかの会社様は数十人体制で来てるとのこと。大当たりでしたねー。今回のような大幅アップデートを4人で捌くのは正直きつい。 来年は偉い人にお願いして増員してもらうかな。そして私は来年も来たいなー。 ということで最終日。頑張って楽しんできます!では、おやすみなさい。(こちらは午前3時。)