AWS re:Invent2019参加レポート

 AI.RL.LYsのcursheyです。
今回はAWS re:Invent2019に参加してきましたので、そのレポートを記事にしました。ここではAI・機械学習の新サービスや新機能について私が特に興味を持ったものについて書いていきたいと思います。

# re:Inventって何？ 

　Amazon Web Serviceがラスベガスで開催する学び放題、遊び放題のお祭りです。新サービスの発表が最も大きなイベントなのですが、それ以外にもセッションやワークショップなどによる学びや、音楽ライブ、Tatonkaというチキン大食い競争やスポーツなどの遊び場が提供されます。　

- http://reinvent.awseventsjapan.com/

# AWS Inferentia

　低コスト高パフォーマンスを実現する機械学習推論チップで、TensorFlow、Apache MXNet、PyTorchのような深層学習フレームに対応した基盤です。この基盤に新しくinf1インスタンスが使えるようになりました。このインスタンスは、G4インスタンスと比べて40%近くのコストダウンができ、また、低レイテンシー、３倍のスループットを実現しています。これにより、深層学習にかかる時間を大きく削減できそうです。また、ECS、EKSにも使うことができます。

# データレイク

　ビッグデータがより大きくなっていくにつれて、ストージコスト増加、セキュリティの懸念、社内データ探索の負荷がどんどん大きくなっていきます。それに対応する手段として、データレイクという基盤構築が考えられました。AWSのサービスでデータレイクを構築するにはS3が利用されますが、そのS3に新機能が追加されました。S3の１つのバケットに数百のアクセスポイントが作られるようになりました。これにより、複数のアプリケーションで、それぞれに対応したアクセス権限のルールをカスタマイズができるようになりました。この機能はVPCの制限もできます。これによりデータ分析基盤の構築が簡単になりそうです。

# Amazon Fraud Detector

　Personalize、Forecastに続く新しいAIサービスとして、Amazon Fraud Detector が発表されました。これは不正なアクセスや支払いを検知することができる不正検知で、Amazonが20年以上に渡る不正検知のノウハウを駆使して作られたサービスです。コンソール画面で数回のクリックだけで不正検出モデルを作ることができます。機械学習やAIの経験がなくてもできてしまうので、多くの人に使われるサービスになるのではないかと思います。
　他にもコードレビューを機械学習が行ってくれるAmazon CodeGuru や、AWSサービス上のデータやdropboxのドキュメントをAIを用いた検索エンジンで探すことができるAmazon Kendraが発表されました。

# DeepComposer

![dims.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287466/006fbe7b-4d16-7fc6-5d45-d86b5070b773.jpeg)

　DeepLens、DeepRacerに続く機械学習の教育用デバイスとして、新しくDeepComposerが発表されました。これは機械学習を使って新しい音楽を作り出すことができるサービスです。元の曲にDeepComposerのキーボードから打ち込んだ音を混ぜ合わせた新しい曲を作ることができます。なお、他の　MIDIキーボードでも作曲することはできます。また、出来上がる曲のジャンルも指定することもでき、新しいジャンルも後から追加することも可能です。作った曲はSoundCloudにアップロードすることもできます。
　DeepComposerのように、創造的な作品を作り出すことのできるAIをGenerative AIと呼ばれています。DeepComposerの裏側は敵対的生成ネットワーク（Generative Adversarial Networks）モデルが使われています。これはAlphaGoでも使われており、教育者はDeepComposerを通してこのモデルの教育をすることができます。

# Amazon SageMaker With RL and Bandit 

　Amazon SageMakerは機械学習向けのjupyter環境で、様々なアルゴリズムの開発をすることができますが、強化学習という一大分野の開発もすることができます。その強化学習で、コンテンツ配信で実際に応用されている多腕バンディット問題をSageMakerで開発をするというワークショップに参加しました。多腕バンディット問題は強化学習で最もシンプルな問題設定で、よくABテストと比較されます。
　ABテストのデメリットとして、人力で配信比率の調整と選定が必要になるため、運用負荷が大きく、効果を確認できるまで時間がかかってしまいます。一方で、多腕バンディット問題は探索と活用のバランスを取ることができるので、運用負荷が小さく、また自動的に最適なコンテンツ配信をすることができます。
　SageMakerでの多腕バンディット問題はバッチ学習ではなく、オンライン学習を対象にしています。また、オフライン評価としてDR(Doubly Robust)、IPS(Inverse Propensity Score)が使えます。
　多腕バンディット問題を動かすコンテナは[Vowpal Wabbit](https://github.com/VowpalWabbit/vowpal_wabbit/wiki)というオンライン学習を対象とした機械学習ライブラリで構築されています。このライブラリでは様々なアルゴリズムが用意されていますが、SageMakerではepsilon-greedy、bagging、coverの３種類が選択できます。詳細は[こちら](https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Contextual-Bandit-algorithms)です。
　上で紹介したAIサービスやDeepComposerなどとは違い、SageMakerは全くの初心者が動かすことは難しいです。特にバンディット問題は数学的知識が必要になるため、このコンテナを扱いこなすのは容易ではないと思います。しかし、自分でコードを組むよりは簡単で、オフライン評価による性能評価もサポートされていますので、開発が大きく簡単になっていると思います。
　また、今回のワークショップほどの内容はではありませんが、[チュートリアル](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning/bandits_statlog_vw_customEnv)がありますので、そちらを試してみるといいと思います。

### オフライン評価(補足)
　強化学習において行動はポリシーによって決定されます。例えば開発者がすでに実施している既存のポリシーAから、新しく考えたポリシーBに切り替えたい場合、既存のポリシーAより良い性能を出せないと意味がありません。
　新しいポリシーBの性能を現実に近い形で評価するには、既存のポリシーAで生成された行動履歴でシミュレートを行うことが考えられます。しかし、ある状態で新しいポリシーBが既存のポリシーAと違う行動を取ることがあります。同じ行動であれば観測された行動履歴から性能評価はできますが、違う場合、性能評価を行動履歴から評価することはできません。この問題設定をオフライン評価と呼び、DR、IPSはオフライン評価に対する評価手法になります。

# Amazon SageMakerバージョンアップ

　re:Invent2019では多くの機械学習関連のサービス、バージョンアップが発表されましたが、特に多かったのがAmazon SageMakerのバージョンアップです。ここからそのバージョンアップについて紹介したいと思います。一覧にすると、以下のようになります。

- Amazon SageMaker Studio
- Amazon SageMaker Notebooks
- Amazon SageMaker Experiments
- Amazon SageMaker Debugger
- Amazon SageMaker Model Monitor
- Amazon SageMaker Autopilot
- Amazon SageMaker Processing
- Amazon SageMaker Deep Graph Library

## Amazon SageMaker Studio

　機械学習初のIDEです。多機能で情報の多いSageMakerを、このIDEで完結させることができます。これにより、性能の比較やデバッグ情報などを簡単に確認することができます。

- https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-studio-the-first-fully-integrated-development-environment-for-machine-learning/

## Amazon SageMaker Notebooks

　実際にSageMakerを動かしますと、jupyter notebookを起動するには数分かかっていました。今回のバージョンアップでマネージドとなり、数秒で立ち上がり、インスタンスのプロビジョニングも不要となりました。また、jupyter notebookは一人で使うことが想定されており、共有するのに工夫が入りましたが、このバージョンアップでワンクリックで共有できるようになりました。

- https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-the-new-amazon-sagemaker-notebook-experience-now-in-preview/

## Amazon SageMaker Experiments

　機械学習には多くの回数の実験が必要になりますが、その実験サイクルを簡単に回せるようになりました。実験に使ったデータセットやアルゴリズム、ハイパーパラメーターなどの入力/出力をキャプチャして管理できるようになり、多くのジョブを効率的に比較検証できるようになりました。

- https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-experiments-organize-track-and-compare-your-machine-learning-trainings/

## Amazon SageMaker Autopilot

　Auto MLを実現させるための新機能で、前処理、アルゴリズム選択、チューニングなどの機械学習の処理を自動化できるようになりました。

- https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-autopilot-fully-managed-automatic-machine-learning/

## Amazon SageMaker Processing

　泥臭いデータ処理や性能評価を簡単にできるようになりました。Python SDKにより、ジョブを実行でき、また独自コンテナを作ることも可能で、特殊な処理もできるようになりました。

- https://aws.amazon.com/jp/blogs/aws/amazon-sagemaker-processing-fully-managed-data-processing-and-model-evaluation/

## Amazon SageMaker Deep Graph Library

　グラフニューラルネットワーク（GNN）のためのオープンソースライブラリDeep Graph Library(DGL)がSageMakerで利用可能になりました。これにより、SageMakerでもグラフ構造を取り扱うことができるようになりました。

- https://aws.amazon.com/blogs/aws/now-available-on-amazon-sagemaker-the-deep-graph-library/

## Amazon SageMaker Debugger 

　この機能についてワークショップを受けることができましたので、そこで学んだことも含めて説明します。この機能ではTensorFlow、Keras、Apache MXNetなどを使った学習のデバッグをすることができます。このデバッグ機能では勾配の減少や、混同行列の遷移など学習に対するものになっています。学習に失敗した場合、今までは開発者は勘とトライアンドエラーで解決していました。このデバッグで、深層学習でブラックボックスになっていたのを可視化することができ、なぜ学習しなかったを解決する手がかりを掴めるようになりました。

<img width="1279" alt="debugg_loss_decreasing.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287466/7e1fecc0-33c3-8bf9-019e-f2b0855cafe5.png">

　上記の画像はワークショップで実際にデバッグをした時のメッセージです。Amazon SageMaker Debuggerは学習に失敗した場合、その時点でストップされます。必要な場合はそのまま継続させることもできます。今回は赤枠部分で**RuleEvaluationStatus**で**IssuesFound**と表示され、**RuleEvaluationConditionMet**を確認しますと、7ステップ目で勾配が減少しなくなったことが確認できます。開発者はこのステップで何が起こったかを推論することができるようになります。
　以下のURLにデバッグ例がありますので、参考になると思います。また、ルール一覧も公開されています。

- デバッグ例: https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-debugger-debug-your-machine-learning-models/
- ルール一覧: https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html

## Amazon SageMaker Model Monitor 

　この機能についてもワークショップを受けることができましたので、それも含めて説明します。この機能はDeploy後の推論モデルの監視ができるようになります。これにより、環境の変化によるモデルの性能変化を監視できるようになりました。環境の変化とはサイトのリニューアル、流行の変化、DDoSなどの攻撃などを指します。この変化により、推論モデルの性能が設定したベースラインを下回ればアラートを出すことができ、開発者はその変化を知ることができます。

![model_monitor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287466/539fafba-783e-bc34-0115-231170cdcfe9.png)

　上記の画像はワークショップでモデル監視をした時のログで、アラートがあったものに絞り込んで表示をしています。これは違反しているデータタイプの監視をしています。**constraint_check_type**はどのような違反があり、**feature_name**はどの特徴量で違反が起こったかを確認することができます。**description**は違反の詳細です。事前にベースラインを設定すれば、性能監視やより高度な違反監視もすることができます。

- https://aws.amazon.com/blogs/aws/amazon-sagemaker-model-monitor-fully-managed-automatic-monitoring-for-your-machine-learning-models/

# 所感

　AWSは今後もAIの民主化を継続する意思を感じました。簡単で使いやすいAIサービスをどんどん作っていて、今後もリリースする意欲を感じました
　機械学習の開発者のサポートも強化していました。SageMakerの大幅なバージョンアップは開発者の負担を大きく軽減でき、深層学習にかかる時間を大幅に短縮できたのは、実験サイクルもより早く回せるようになりました。また、Auto MLへの意欲も強く感じました。
　また、機械学習系の発表は最多の20個で、AWSの機械学習へ力の入れようが感じられると思います。