ebook

第 5 章

ディープラーニング モデルのテストと展開


データを分類できるモデルを用意しても、ディープラーニングのワークフローが完了したわけでありません。未知のデータでもモデルが動作すること、他のシステムコンポーネントと期待通りに相互作用することも確認する必要があります。この章では、特定の性能特性を必要とするターゲットデバイスにモデルを展開する方法について説明します。

セクション

ネットワークと他のシステムロジックとの統合とテスト

前章では、ネットワークに 3 軸加速度データからハイタッチを認識するように学習させました。しかし、このネットワークは、ハイタッチカウンターを実行させるうえで必要な全体的ロジックの一部に過ぎません。システムには最低限、次のようなロジックも必要です。

  • センサーから加速度を読み取る
  • センサーのデータを前処理してスカログラムにする
  • スカログラムをネットワークに渡す
  • ラベルの付いたハイタッチをカウントする (パターンがスカログラムに連続して表示される際に 1 回のハイタッチの動きが 2 回にカウントされないようにするロジックを含む)
dl-engineers-ebook-ch5-high-five-counter-logic-simulink

上: Simulink におけるハイタッチ カウンター ロジックの表現。下: 加速度センサーから読み込まれたデータ (上のプロット)、ハイタッチとラベル付けされたスカログラム (中央の緑線)、カウントされたハイタッチの数 (下のプロット)。

ネットワークやその他のシステムロジックが機能するかどうかを確認したいというのは当然の要求です。そこで重要になるのがテストです。ハイタッチカウンターについては、ネットワークの学習中に 40 枚の検証画像を使ってモデルの精度を評価させたところ、40 枚のうち 1 枚しかラベル付けに誤りがなかったことから、ネットワークだけでも何らかの形で機能していることがわかります。

dl-engineers-ebook-ch5-validation-accuracy

幸先の良い結果ですが、40 枚の検証画像に対してこのモデルが機能することはある程度確認できても、未知の画像に対してもこのモデルが確実に機能するとは言い切れません。このため、多くの場合は、学習時に使用する検証データセットに加えて、解空間全体でネットワークの精度が許容範囲内であることを確認するために使用するテストデータセットも用意します。

ハイタッチカウンターの場合、学習中にネットワークが収束していることを検証するには 40 枚の画像で十分でしたが、ネットワークが実際に扱う可能性のある腕の動作をすべて網羅するには不十分でした。このネットワークを現場に展開するには、さらにテストする必要があります。次に、システムをテストして実装に確信が持てたら、Simulink Coder™ を使用して組み込み C コードを構築し、ディープ ニューラル ネットワークを含むこのロジックをすべて腕自体に展開できます。

テストの一環として、刻々と変化するさまざまな腕の動作を、ハイタッチとハイタッチ以外の動作の両方を含めて体系的に試すことができます。そのためにはできるだけ多くの人に参加してもらい、代表的な学習セットを構築し、解空間全体を把握する必要があります。ユーザーの動作をシステムが誤って分類した場合は、そのデータをすべて保存して学習データセットに追加し、ネットワークの再学習と改良を行います。

解空間全体のサブセットをサンプリングしても、ネットワークが完全に機能するようになるとは限らないことに注意が必要ですが、ネットワークが機能すると確信できる範囲を広げることはできます。これは、ディープ ニューラル ネットワークの標準的な手法です。現時点では、ディープ ニューラル ネットワークに適した体系的な検証法は存在しません。そのため、通常はモンテカルロ法などのサンプリング手法に依存して、解空間全体でネットワークの信頼性を高めることになります。

モンテカルロ法によるテストは、物質の欠陥を検出したり、音声中の指示を抽出したり、RF 変調方式を分類したりするプロジェクトにも利用できる可能性があります。このため、学習済みのニューラル ネットワークを完全なシステムに統合し、さまざまな状況でテストすることになります。

重要な点は、テストを何度行っても、解空間にはテストされていない部分が必ず存在するということです。

dl-engineers-ebook-ch5-monte-carlo

モンテカルロ法による解空間全体のテスト。ネットワークは、一部の解についてはテストされるものの、ほとんどの解についてはテストされません。

ここで力を発揮するのが合成データです。第 2 章ではネットワークの学習用に RF データを合成する方法について説明しました。同様に、合成データを使って何百万もの異なるテストケースを生成し、解空間の非常に高密度なサンプリングを行うことができます。これにより、システムに対する信頼性が高まります。

dl-engineers-ebook-ch5-monte-carlo-synth-test-data

モンテカルロ法による解空間全体のテスト。合成したテストデータを使用すれば、より広い解空間をすばやくカバーできます。

ハイタッチのプロジェクトでは、腕の動作で想定されるすべての加速度パターンを正確にモデル化し、その中でどれがハイタッチなのかを理解することは難しく、データの合成は困難です。このため、プロジェクトによっては、テストデータを合成するよりもネットワークを物理的にテストする方が簡単な場合もあります。

テストデータを合成できるかどうかにかかわらず、最終的には実物のハードウェアで実際のシステムをテストする必要があります。

セクション

ネットワークの展開

コードがシミュレーションで動作しても、ターゲット ハードウェアで動作しなければ意味がありません。

コードがターゲット ハードウェアで動作するかどうかを確認する一環として、ネットワークのサイズとその実行速度を評価する必要があります。ネットワークのサイズが大きすぎる場合や、実行に時間がかかりすぎる場合は、事前学習済みの小さなネットワークから始めることができます。GoogLeNet (700 万個のパラメーター) を使用するプロジェクトが、SqueezeNet (100 万個のパラメーター) を使用する転移学習でも同じように動作するでしょうか。

dl-engineers-ebook-ch5-pretrained-size

それでもネットワークが大きすぎる場合は、さらに小さい事前学習済みネットワークを検討するよりも、枝刈りや量子化を行ってネットワークのサイズを縮小してみましょう。

枝刈りとは、ネットワーク内で特定のデータの分類にあまり寄与しないパラメーターを削除することです。

量子化とは、ネットワーク内の単精度または倍精度の重みとバイアスを取得し、8 ビットにスケーリングされた整数データ型に変換することです。つまり、高精度のデータ型を使用しなくても、ネットワークから同等のパフォーマンスを得ることができるということです。詳細については、「int8 量子化の概要と、ディープ ニューラル ネットワークにおけるその人気の理由」を参照してください。

ネットワークの縮小がどのようなものかを理解できるよう、Deep Network Quantizer アプリを使用してハイタッチのネットワークを 8 ビットスケールの整数に量子化した結果をご紹介します。実行には数分かかったものの、その後ネットワークは 75% 圧縮され、精度に測定可能な影響はありませんでした。

dl-engineers-ebook-ch5-deep-network-quantizer

事前学習済みネットワーク、転移学習、枝刈り、量子化を上手に利用すれば、用途に応じた十分なサイズと効率性を持つモデルが得られる可能性があることがわかります。

それでもネットワークが大きすぎる場合、最後の手段は独自のネットワーク アーキテクチャをゼロから構築することです。この場合、必要となる学習データと学習時間は最多となります。最初期のネットワークは何の概念も持たないため、すべてを学習する必要があるからです。

もう 1 つの欠点は、効率的なネットワーク アーキテクチャをゼロから構築するには、各種のネットワーク アーキテクチャを十分に理解している必要があることです。

セクション

まとめ

アプリケーションへのディープラーニングの導入を検討する際には、ネットワークのアーキテクチャ、学習データへのアクセス、シミュレーションの使用、ネットワークやシステム全体に対する信頼性を確保する方法を考慮する必要があります。

どのプロジェクトも答えは 1 つとは限りませんが、ディープラーニングの利点と可能性に対する理解が深まったのではないでしょうか。今、あなたが取り組んでいるエンジニアリングの問題は、データ内の複雑なパターンを検出し、ラベル付けすることで解決できる可能性があります。その場合は、調査の一環として、ディープラーニングを適用するアプローチを検討してみてはいかがでしょうか。導入は意外と簡単かもしれません。