機械学習とAmazon SageMakerの使い方について
はじめに
本記事では、まずAmazon SageMakerの概要について紹介し、その次に、Amazon SageMakerの使い方を紹介します。その後、Amazon SageMakerがトレーニングアルゴリズムとして提供しているAmazon SageMaker組み込みアルゴリズムを紹介します。
Amazon SageMakerとは
Amazon SageMakerは、機械学習モデルを迅速に構築、トレーニング、デプロイできるようにするフルマネージド型サービスです。Amazon SageMakerでは、従来の機械学習ワークフロー全体の総合ツールが存在しないという問題解決のために、1つのツールセットで機械学習用に使用できる全コンポーネントを提供しています。これにより、機械学習モデルを本番環境へ送り出すまでの時間を短縮して、手間と費用の大幅な削減を可能にしました。
Amazon SageMakerの使い方
ここでは、Amazon SageMakerの使い方や仕組みを紹介します。
通常の機械学習のワークフローを大きく分けると次の3つになります。
- サンプルデータの生成
- モデルのトレーニング
- モデルのデプロイ
以下では、上記3つのアクティビティを達成するためのAmazon SageMakerの使い方を示します。
1. サンプルデータの生成
サンプルデータは、モデルをトレーニングするために必要です。つまり、手書き文字を予測するモデルを作成する場合、モデルをトレーニングするための手書き文字のイメージ例が必要です。
サンプルデータをモデルのトレーニングに使用するためには、以下の3つの事前処理をサンプルデータに行います。
- データの取得ー 一般的にはデータセットは1つのリポジトリにプルしておきます。
- データのクリーンアップ ー 粗悪なデータからは粗悪な推論が生じます。モデルトレーニングの質を向上するためには、データの検査、必要に応じたデータのクリーンアップが必要です。
- データの準備 / 変換ー 属性の結合といった、追加のデータ変換を実行してパフォーマンスを向上させることができます。例えば、温度や湿度の異なる2つのパラメータを、それぞれ別々の属性として使用するのではなく、これらを一つの属性として結合し、より良いモデルを得られるように図るといったことが可能です。
Amazon SageMakerでは、ノートブックインスタンス上のJupyterノートブックでサンプルデータの事前処理を行います。ノートブックを使用してデータセットを取得し、それを確認してモデルのトレーニングのために準備することができます。ノートブックインスタンスの使い方は他にもあります。
- モデルのトレーニングジョブを作成するためのコードを記述する
- Amazon SageMakerホスティングにモデルをデプロイする
- モデルのテスト / 検証を行う
モデルを使用してデータを変換するには、Amazon SageMakerバッチ変換を使用します。また、Amazon SageMaker Processingを利用すると、Amazon SageMakerでのデータの事前処理や事後処理の実行、フィーチャーエンジニアリング、モデルの評価を簡単かつ大規模に行うことができます。Amazon SageMaker Processingを使用することで、次のようなフレキシビリティが得られます。
- 組み込みのデータ処理コンテナを使用する
- 独自のコンテナを持ち込み、管理インフラストラクチャで実行するカスタムジョブを送信する
上記の2つ目にあるジョブの送信によって、Amazon SageMakerはコンピューティングインスタンスを起動し、入力データの処理と分析を行い、完了後にリソースを解放します。
2. モデルのトレーニング
モデルのトレーニングでは、トレーニングだけでなくモデルの評価も行います。まずモデルのトレーニングについて紹介します。
モデルのトレーニング
Amazon SageMakerでモデルをトレーニングするためには、Amazon SageMakerコンソールまたはAPIを使用してトレーニングジョブを作成します。トレーニングジョブに含まれる情報を以下に示します。
- トレーニングを保存しているAmazon S3バケットのURL
- Amazon SageMakerがモデルのトレーニングに使用するコンピューティングリソース
- ジョブの出力を保存するAmazon S3バケットのURL
- トレーニングコードが保存されるAmazon ECRパス
Amazon SageMakerでは、コンピューティングリソースは、単一の汎用インスタンスからGPUインスタンスの分散クラスターまでのリソースを使用できます。
次にモデルをトレーニングするアルゴリズムについて、アルゴリズムの選択には、さまざまなことを考慮する必要があります。トレーニングアルゴリズムのオプションとして、Amazon SageMakerは以下のものを提供しています。
- トレーニングアルゴリズム - Amazon SageMakerでは、素早く、そのまま使えるソリューションとして複数のアルゴリズムが提供されています。ユーザーは、その中から1つを選択して使用することができます。※提供されているアルゴリズムは、この記事の終盤で紹介しています。
- Amazon SageMaker Debugger ー TensorFlow、PyTorch および Apache MXNet 学習フレームワーク、 XGBoost アルゴリズムで作業する際に、トレーニングプロセス全体を通してトレーニングパラメータとデータを検査します。パラメータの過大や過小といった、一般的なエラーを自動的に検知します。
- Apache Spark ー Amazon SageMakerでは、Amazon SageMakerでモデルをトレーニングするために、Apache Sparkで使用できるライブラリが提供されています。
- 深層学習フレームワークでトレーニングするためのカスタムコードの送信 ー モデルのトレーニングにTensorFlow、PyTouch、またはApacheMxNetを使用するカスタムPythonコードを送信することができます。
- 独自のカスタムアルゴリズムの使用 ー Amazon SageMakerでは、独自のカスタムアルゴリズムやモデルを実行して管理するために、「組み込みアルゴリズムように構築済みのDockerイメージ」と「トレーニングと推論に使用されるサポート対象の深層学習フレームワーク」を提供しています。そこで、独自のカスタムアルゴリズムを使用するために、Dockerイメージとしてコードをまとめ、Amazon SageMaker CreateTrainingJob APIコールでDockerイメージのレジストリパスを指定します。
- AWS Marketplaceからサブスクライブしているアルゴリズムを使用
トレーニングジョブを作成すると、Amazon SageMakerはコンピューティングインスタンスを起動し、トレーニングコードとトレーニングデータセットを使用してモデルをトレーニングします。結果として得られたモデルアーティファクトおよびその他の出力は、Amazon S3バケットに保存されます。
(APIを使用してトレーニングジョブを作成した場合)
Amazon SageMakerがデフォルトでデータセット全体をMLコンピューティングインスタンスにレプリケートします。S3DataDistributionTypeフィールドをShardedByS3Keyに設定することで、各MLコンピューティングインスタンスのデータのサブセットをレプリケートするようにAmazon SageMakerに指示することができます。
※ここでの注意点として、アルゴリズムコンテナのメモリとの競合に伴うシステム障害を発生させないために、「MLコンピューティングインスタンス上のAmazon SageMakerの重要なシステムプロセス用に、ある程度のメモリを予約しておく」必要があります。
モデルの評価
モデルの評価とは、モデルをトレーニングした後の推論の正確性について、許容範囲かどうかの評価です。Amazon SageMakerでは、次のいずれかを使用して、推論のためにモデルへリクエストを送信します。
- AWS SDK for Python(Boto)
- Amazon SageMakerが提供するPythonライブラリ
Amazon SageMakerノートブックインスタンスのJupyterノートブックを使用して、モデルのトレーニングと評価を行います。
3. モデルのデプロイ
モデルをアプリケーションと統合してデプロイする前に、モデルを従来の方法で設計し直す必要があります。Amazon SageMakerのホスティングサービスでは、モデルを独立してデプロイし、アプリケーションコードから分離することができます。
また、トレーニングしたモデルを次の方法でデプロイして、予測を取得することができます。
- 前述のAmazon SageMakerのホスティングサービスを使用して、一度に1つの予測を取得できるように、永続エンドポイントを設定する
- Amazon SageMakerのバッチ変換を使用して、データセット全体の予測を取得する
モデルのモニタリング
これまで紹介したワークフローを進め、モデルを本番環境にデプロイした後、Amazon SageMakerモデルモニターを使用して、機械学習モデルの品質をリアルタイムで継続的に監視することができます。以下のAWSモデルモニター製品を通じてモデル偏差を素早くプロアクティブに検出することができます。
- Amazon CloudWatchモデルモニター ー データのドリフトや異常など、モデルの品質に偏差がある場合に、アラートを発する自動アラートトリガーシステムを設定できます。
- Amazon CloudWatch Logs ー モデルのステータスを監視するログファイルを収集し、モデルの品質が事前に設定した特定の境界値に達すると通知します。
- AWS CloudTrail ー 指定したAmazon S3バケットにログファイルを保存します。
以上がAmazon SageMakerにおけるサンプルデータの生成、モデルのトレーニング、モデルのデプロイ、モデルのモニタリングの使い方です。
Amazon SageMaker組み込みアルゴリズム
- Blazing Textアルゴリズム ー Word2vecとテキスト分類アルゴリズムの高度に最適化された実装を提供します。Word2vecアルゴリズムは、感情分析をはじめとする、多くの下流の自然減処理タスクに役立ちます。テキスト分類アルゴリズムは、ウェブ検索や情報検索ランク付け、ドキュメント分類を実行するアプリケーションで役立ちます。
- DeepAR 予測アルゴリズム ー 再帰型ニューラルネットワークを使用して、スカラー(1次元)時系列を予測するための教師あり学習アルゴリズムです。
- 因数分解機アルゴリズム ー 分類タスクと回帰タスクの両方に使用できる汎用的な教師有額数アルゴリズムです。
- イメージ分類アルゴリズム ー マルチラベル分類をサポートする教師あり学習アルゴリズムで、入力として画像を取得し、その画像に割り当てられた1つ以上のラベルを出力します。
- IP Insightsアルゴリズム ー IPv4アドレスの使用パターンを学習する教師なし学習アルゴリズムです。IPv4アドレスと、ユーザーIDなどの各種エンティティとの間の関連付けをするように設計されています。
- K-Meansアルゴリズム ー グループ内のメンバーとは類似し、他グループのメンバとは異なる離散グループをデータ内で見つけようとする、教師なし学習アルゴリズムです。
- K 最近傍(K-NN)アルゴリズム ー 分類または回帰にノンパラメトリック手法を使用したインデックスベースのアルゴリズムです。アルゴリズムは、サンプルポイントに最も近いKポイントに対してクエリを実行し、分類問題ではそのクラスで頻用されるラベルを予測ラベルとして返します。一方、回帰問題では、それらの特徴値の平均を予測値として返します。
- 潜在的ディリクレ配分(LDA)アルゴリズム ー 一連の観測値を異なるカテゴリの混合として記述しようとする教師なし学習アルゴリズムです。テキストコーパス内のドキュメントによって共有されるトピックのユーザー指定数を検出するために頻用されます。
- 線形学習アルゴリズム ー 分類や回帰の問題を解決するために使用される教師あり学習アルゴリズムです。高次元ベクトル x 、数値ラベル y を含むexamples(x , y)というラベルのモデルが入力として提供されます。アルゴリズムは、線形関数、分類問題の場合は線形しきい値関数を学習し、xとyの近似値にマッピングします。
- ニューラルトピックモデル(NTM)アルゴリズム ー ドキュメントのコーパスを、それらの統計的分布に基づいた単語のグループ化を含むトピックに編成するために使用される教師なし学習です。
- Object2Verアルゴリズム ー 高度にカスタマイズ可能な汎用のニューラル埋め込みアルゴリズムです。
- オブジェクト検出アルゴリズム ー 単一の深層ニューラルネットワークを使用して、イメージ内のオブジェクトを検出および分類する教師あり学習アルゴリズムです。
- 主成分分析(PCA)アルゴリズム ー 可能な限り情報を保持しながら、データセット内の次元(特徴数)の縮退を思考する、教師なし学習アルゴリズムです。
- ランダムカットフォレスト(RCF)アルゴリズム ー データセット内の異常なデータポイントを検出する、教師なし学習アルゴリズムです。
- セマンティックセグメンテーションアルゴリズム ー コンピュータビジョン アプリケーション開発のためのピクセルレベルのアプローチを提供します。
- Sequence to Sequenceアルゴリズム ー 入力が一連のトークン(テキスト、オーディオなど)であり、生成される出力が別の一連のトークンである、教師あり学習アルゴリズムです。テキスト要約や音声認識のアプリケーション開発に役立ちます。
- XGBoostアルゴリズム ー 勾配ブーストツリーアルゴリズムの効率的なオープンソースの実装です。単純で弱いモデルのセットから推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試行する、教師あり学習アルゴリズムです。
まとめ
本記事では、Amazon SageMakerの概要について紹介した後、機械学習ワークフローの各ステップにおけるAmazon SageMakerの使い方について紹介しました。実際に試しながらAmazon SageMakerの使い方を学習したい方には、Amazon SageMakerで提供されている演習がおすすめです。こちらは、シンプルな機械学習モデルの作成からトレーニング、デプロイまで行うことができます。それぞれの過程で必要な作業がステップごとに紹介されているので、Amazon SageMakerの使い方を手順に沿って理解することができます。