Amazon SageMakerの画像系アルゴリズムで増分学習がサポートされました!

Amazon SageMakerはJupyterノートブックを使ったデータ探索から機械学習モデルの作成、エンドポイントの展開等が行える機械学習のフルマネージドサービスです。また、Amazon SageMakerには手軽に機械学習を行える組み込みアルゴリズムがあります。
その組み込みアルゴリズムである画像系アルゴリズム(画像分類と物体検出)で増分学習(Incremental Learning)をサポートしたという発表がありました。

画像系アルゴリズムの増分学習を早速試してみたので、その内容を紹介します!

増分学習

増分学習(Incremental learning)は学習済みのモデルを追加で学習させることをいいます。
通常、モデルの学習時には最初にモデルの各重み付けがランダムに初期化されます。増分学習では、学習済みのモデルの重み付けで初期化した上で新たに学習をはじめます。

増分学習が出来ることでなにが嬉しいのか

  • 学習が収束しなかったモデルを追加で学習させることができる。
  • 分類や検出対象のクラスは同じままで、学習済みのモデルに異なるデータを学習させることで認識性能を向上させることができる。
  • 学習済みのモデルに分類や検出対象のクラスを増やすために、追加で学習させることができる。
  • 学習済みモデルを異なる領域のデータで学習(転移学習)させることができる *1。(画像分類のみ)

といったことなどが出来るようになると考えられます。非常に便利そうです!
とはいえ、全てのケースによってモデルの再学習が有用なわけではなく、データによってはモデルを一から学習させた方が有用な場合もあるので、注意が必要です。

マネジメントコンソールから試してみる

マネジメントコンソールから増分学習のジョブを作ってみます。

※今回は関連するところ以外は雑に飛ばすため、物体検出も画像分類も基本的に差異はありませんが、一部アルゴリズムの違いによる注意点があります。
※増分学習を行うジョブと通常の学習ジョブとで違う箇所は、入力データ設定のところでmodelというデータチャネルを登録するだけです。どう記述すべきかだけ読みたい方は該当箇所まで読み飛ばして頂ければと思います。

S3モデルアーティファクトURLの確認

まずは、増分学習の基となるモデルの学習ジョブの詳細ページを開きます。

出力の項にあるS3モデルアーティファクトのURLをコピーしておきます。

増分学習用ジョブの作成

次に、増分学習を行うジョブを作成します。
一から入力すると手間なので、増分学習の基となるモデルの学習ジョブをクローンして作成することにします。

パラメータ設定

ジョブ名やインスタンスタイプ、ハイパーパラメータといった各種パラメータを必要に応じて書き換えます。 注意: 物体検出の場合はnetwork(resnet-50かvgg-16)とnum_classを増分学習の基となるモデルの学習ジョブと同じものにする必要があります。 画像分類の場合は試した限りだと特にそういった制約はなかったです。

入力データ設定

次に入力データ設定を行います。これまでのtrainvalidationというデータチャネルに加えて、modelというデータチャネルを設定することで増分学習を行うことができます。 チャネル名がmodel、コンテンツタイプをapplication/x-sagemaker-modelとします。 圧縮タイプとレコードラッパーはNoneにし、S3データタイプにはS3Prefix、S3データディストリビューションタイプにはFullyReplicatedを選択します。 S3の場所という設定項目には、増分学習の基となるモデルのS3のURLを入力します。先ほどS3モデルアーティファクトのURLをコピーしていた場合にはそれを貼り付けます。

それ以外の設定項目も入力し終えて漏れが無いか確認出来たら、トレーニングジョブの作成を押してジョブを開始します。

ログでモデルを読み込んでいることの確認

学習ジョブを開始してしばらくすると、ジョブのログが見れるようになります。ログへは対象ジョブの詳細ページ下部にリンクがあります。

どうやら指定したモデルを読み込んでくれていそうです。

さいごに

当エントリでは、Amazon SageMakerの組み込みアルゴリズムである画像分類と物体検出で増分学習がサポートされたことについて紹介しました。
今回のアップデートによって、自らで学習させたモデルを追加で学習させることや転移学習の基となるモデルを変えることが可能となり、より効率的な学習が出来るようになったのではないでしょうか。

最後までお読みくださりありがとうございましたー!

脚注

  1. これまでも`use_pretrained_model`を設定することによって、既定の学習済みモデルを基にした転移学習は可能でした。今回のアップデートによって転移元のモデル(学習済みのモデル)を自由に変更することができるようになりました。