転移学習

転移学習とは、あるタスク向けに学習したモデルを、類似したタスクを実行するモデルの開始点として使用するディープラーニングの手法です。転移学習によるネットワークの更新と再学習は、ゼロからネットワークを学習させるよりも高速で簡単です。転移学習は画像分類、オブジェクト検出、音声認識などのアプリケーションに使用されます。

転移学習が重要である理由

転移学習を使用すると、ディープラーニング コミュニティの専門知識を活用できます。広く使用されている事前学習済みのモデルには、堅牢性の高いアーキテクチャが備わっており、ゼロから始める必要がありません。転移学習は教師あり学習向けの一般的な手法となっています。その理由は次のとおりです。

  • 大規模なデータセットで既に学習済みの一般的なモデルを再利用することで、ラベル付けされたデータが少なくてもモデルの学習を行うことができる。
  • 学習時間を短縮し、コンピューティング リソースを削減できる。事前学習済みのモデルは、以前の学習に基づき既に重みの学習を行っているため、転移学習では、ニューラル ネットワークの重みをゼロから学習させる必要がない。
  • ディープラーニングの研究コミュニティによって開発されたモデルアーキテクチャを使用できる (GoogLeNetYOLO などの広く利用されているアーキテクチャを含む)。
知識がモデル 1 (データセット 1 で学習済み) からモデル 2 (データセット 2 で学習済み) にどのように転移されるかを示す転移学習の図。データセット 1 はデータセット 2 より大規模です。

事前学習済みのモデルから別のモデルに知識を転移することで、ラベル付けされたデータが少なくても学習を行うことができます。

ゼロから学習するか、転移学習を使用するか?

ディープラーニング モデルを作成するには、ゼロからモデルを学習させる方法と、事前学習済みのモデルを使用して転移学習を実行する方法があります。

既存のモデルを使用できない特殊なタスクには、ゼロからモデルを開発し学習を行う方法が適しています。この手法のデメリットは、正確な結果を得るために通常、膨大なデータが必要になるということです。小規模なネットワークで望ましい精度を達成できる場合も、モデルをゼロから作成する方法が利用できます。たとえば、リカレント ニューラル ネットワーク (RNN) や長・短期記憶 (LSTM) ネットワークは、長さが異なるシーケンシャルデータにおいて特に有効であり、信号分類時系列予測などの問題を解決できます。

転移学習は、既存のさまざまな事前学習済みモデルを使用できるタスクに有用です。たとえば、多くの一般的な畳み込みニューラル ネットワーク (CNN) は、ImageNet データセットで事前学習されますが、これには 1,400 万枚を超え、1,000 クラスに分類された画像が含まれています。庭内の花の画像 (または ImageNet データセットに含まれていない任意の画像) を分類する必要があり、手元に限られた数の花の画像しかない場合、SqueezeNet ネットワークから層とその重みを転移させて、最終層を置き換え、手持ちの画像でモデルを再学習させることができます。

この手法では、転移学習を使用して短時間でモデルの精度を高めることができます。

ネットワークに転移学習を使用した場合と使用していない場合の学習に対するネットワーク性能の比較。より高い開始点、勾配、漸近線を示す転移学習の性能曲線。

ゼロからの学習と転移学習のネットワーク性能 (精度) の比較。

転移学習の用途

転移学習は、次のような多くのディープラーニン グ アプリケーションで広く利用されています。

コンピューター ビジョン

コンピューター ビジョン アプリケーションには、画像認識オブジェクト検出画像セグメンテーション、LiDAR 点群処理が含まれます。MATLAB の例、転移学習を使用し、ブロック化された多重解像度画像内の腫瘍の分類をご覧ください。

テキスト解析

MATLAB GitHub の例、日本語テキストに対応した微調整 BERT モデルをご覧ください。

転移学習向け事前学習済みモデル

転移学習の中心となるのは、事前学習済みのディープラーニング モデルです。このモデルは、ディープラーニングの研究者によって構築されており、学習には、数千または数百万のサンプルデータ点が使用されています。

利用可能な事前学習済みモデルは多数ありますが、各モデルに次の考慮すべきメリットとデメリットがあります。

  1. 予測速度: 新しい入力に対するモデルの予測速度はどのくらいか?予測速度はハードウェアやバッチサイズなど他の要因によって異なる場合がありますが、速度はモデルのアーキテクチャやサイズによっても異なります。
  2. サイズ: そのモデルにメモリフットプリントはどのくらい必要か?モデルのサイズの重要性は、展開先や用途によって異なります。組み込みハードウェアとデスクトップのどちらで実行するのでしょうか? リソースに制約のあるターゲットに展開する場合、ネットワークのサイズは重要です。
  3. 精度: 再学習前のモデル性能はどの程度か?ImageNet データセットで良好に機能するモデルは、同じような新しいタスクでも良好に機能する可能性が高くなります。ただし、ImageNet の精度スコアが低くても、必ずしもすべてのタスクでモデルの性能が低いとは限りません。
転移学習に使用される、事前学習済み CNN モデルのモデルサイズ、予測速度、および精度の比較。

よく利用される CNN 事前学習済みモデルのサイズや速度、精度の比較。

転移学習ワークフローに最適なモデルを見つけるには?

多くの転移学習モデルの中から選択する際は、関連するトレードオフと特定のプロジェクトの全体的な目的に留意することが重要です。さまざまなモデルを試して、お使いのアプリケーションに最適なモデルを見つけることをお勧めします。

入門向けのシンプルなモデル (例: GoogLeNet、VGG-16、VGG-19) は、迅速に反復処理を行い、さまざまなデータ前処理のステップや学習オプションを使用して試すことができます。適切に機能する設定が分かったら、さらに精度が高いネットワークで試し、結果が改善されるかどうかを確認します。

軽量で計算効率に優れたモデル (例: SqueezeNet、MobileNet-v2、ShuffleNet) は、展開環境でモデルサイズに制限がある場合にお勧めです。

MATLAB で事前学習済みモデルを入手する方法は?

MATLAB Deep Learning Model Hub から、カテゴリごとの最新モデルにアクセスし、モデル選択時のヒントを確認することができます。ほとんどのモデルは、関数 darknet19 など、単一の MATLAB 関数を使用して読み込むことができます。

事前学習済みのネットワークは、外部のプラットフォームから入手することもできます。関数 importNetworkFromTensorFlow などのインポート関数を使用して、TensorFlow™、PyTorch®、または ONNX™ のモデルを MATLAB モデルに変換できます。

MATLAB から直接、または外部のディープラーニング プラットフォーム (PyTorch、TensorFlow、ONNX) から事前学習済みのディープラーニング モデルを入手します。

ソフトセンサー設計に適用された転移学習

Poclain Hydraulics が、MATLAB の事前学習済みのネットワークを活用して、ソフトセンサーの設計をスピードアップした方法についてご覧ください。

「私たちは MATLAB に既に実装されていた 2 つのニューラル ネットワークを活用しました。これらのニューラル ネットワークは、コードをハードウェアに組み込み、温度をリアルタイムで予測する際に役立ちました。」

MATLAB による転移学習

MATLABDeep Learning Toolbox™ を使用することにより、多くの事前学習済みのモデルを利用して、組み込み関数や対話型のアプリで転移学習を実行することができます。転移学習の用途は多岐にわたるため、Computer Vision Toolbox™Audio Toolbox™Lidar Toolbox™Text Analytics Toolbox™ など他のツールボックスの使用も必要になる場合があります。

転移学習ワークフロー

転移学習ワークフローには、事前学習済みのネットワークの入手、修正、再学習、およびそれを使用した新しいデータでの予測が含まれます。

転移学習ワークフローでの手順を示した図。

転移学習のアーキテクチャやアプリケーションにはさまざまな種類がありますが、ほとんどの転移学習ワークフローは共通の手順に沿って行われています。以下の図は、画像分類のための転移学習ワークフローを示しています。転移学習は、事前学習済みの GoogLeNet モデルで実行されます。GoogLeNet は、画像を 1,000 個のオブジェクトカテゴリに分類するよう学習した深さ 22 層の一般的なネットワークです。

  1. 事前学習済みモデルを選択する。初めは、シンプルなモデルを選ぶことをお勧めします。
画像分類タスクの転移学習用に変更できる事前学習済み CNN モデル。

画像を 1,000 個のオブジェクトカテゴリに分類するよう学習した深さ 22 層のネットワークである、GoogLeNet モデルのアーキテクチャ。

  1. 最終層を置き換える。画像とクラスの新しいセットを分類するようネットワークの再学習を行うには、GoogLeNet モデルの最後の学習可能な層と最終分類層を置き換えます。最終的な全結合層 (最後の学習可能な層) は、新しいクラスの数と同じ数のノードを含むように修正されます。新しい分類層は、ソフトマックス層によって計算された確率 (尤度) に基づき、出力を生成します。
転移学習では、モデルの再学習を行う前に事前学習済み CNN モデルの最終層を必ず置き換えます。

モデルの再学習を行う前に CNN モデルの最後の学習可能な層と最終分類層を置き換えます。

層を修正すると、最終的な全結合層でネットワークが学習するクラスの新しい数が指定され、分類層で利用可能な新しい出力カテゴリの出力が決まります。たとえば、GoogLeNet は元々 1,000 個のカテゴリで学習されていましたが、最終層を置き換えることで、関心のあるオブジェクトの 5 つ (または他の任意の数) のカテゴリのみを分類するように再学習させることができます。

  1. 重みを凍結する (任意)。ネットワークの初期の層の重みを凍結するには、その層の学習率をゼロに設定します。学習中は、凍結された層のパラメーターは更新されないため、ネットワークの学習を大幅に高速化できます。新しいデータセットが小さい場合は、重みを凍結することで、新しいデータセットに対するネットワークの過適合を防ぐこともできます。
  2. モデルの再学習を行う。再学習では、新しい画像やカテゴリに関連する特徴を学習して識別するようにネットワークを更新します。通常、再学習で必要なデータは、ゼロからモデルを学習させる場合よりも少なくて済みます。
  3. ネットワーク精度を予測および評価する。モデルの再学習が完了したら、新しい画像を分類し、ネットワークの性能を評価できるようになります。

転移学習への対話型アプローチ

ディープ ネットワーク デザイナー アプリを使用すると、転移学習ワークフロー全体 (MATLAB、TensorFlow、または PyTorch からの事前学習済みモデルの選択またはインポート、最終層の変更、新しいデータを使用したネットワークの再学習など) を対話的に完了できます。コードの記述はほとんど、または一切必要ありません。

転移学習に関する詳細を見る

次のビデオを参考に、コマンドラインまたはディープ ネットワーク デザイナーを使用した転移学習を始めてみましょう。

関連するトピック