- はじめに
- アクセス制御と管理
- ソースとデータセットを管理する
- モデルのトレーニングと保守
- 生成 AI による抽出
- 分析と監視を使用する
- オートメーションと Communications Mining™
- 開発者
- データをアップロードする
- データのダウンロード
- Exchange と Azure サービス ユーザーとの連携
- Exchange と Azure アプリケーション認証の統合
- Exchange と Azure Application Authentication and Graph の統合
- Migration Guide: Exchange Web Services (EWS) to Microsoft Graph API
- Python を使用した Tableau のデータのフェッチ
- Elasticsearch との連携
- 一般的なフィールド抽出
- セルフホストの Exchange 統合
- UiPath® Automation Framework
- UiPath® 公式アクティビティ
- 機械が単語を理解する方法:NLPに埋め込むためのガイド
- トランスフォーマーによるプロンプトベースの学習
- 効率的な変圧器II:知識蒸留と微調整
- 効率的な変圧器I:注意メカニズム
- 階層的な教師なしインテントモデリング:トレーニングデータなしで価値を得る
- Communications Mining™ でアノテーションの偏りを修正する
- アクティブ ラーニング: より優れた ML モデルを短時間で実現
- それはすべて数字にあります-メトリックを使用してモデルのパフォーマンスを評価します
- モデルの検証が重要な理由
- 対話データ分析 AI としての Communications Mining™ と Google AutoML を比較する
- ライセンス
- よくある質問など

Communications Mining ガイド
効率的な変圧器II:知識蒸留と微調整
この 2 部構成の記事では、一般的ではあるが計算負荷の高い Transformer ベースの言語モデリング手法の変更を検討することで、最先端の NLP をより効率的にする方法を見ていきます。
- Transformerの自己注意メカニズムの計算ワークロードが高い理由を説明しました。
- パフォーマンスを大幅に損なうことなく実行するのにより効率的な代替アテンションメカニズムを提示しました。
この投稿では、次のことを行います。
- 小さなモデルをトレーニングして大きなモデルの出力を再現する方法を探ります。
- 言語モデルを効率的に微調整する方法を説明する。
- さまざまな効率的な Transformer アプローチを使用するシナリオに関する推奨事項を提供します。
前回の記事では、 NLPにおける意味表現学習の簡単な歴史と、 Transformerのセルフアテンションメカニズムの仕組みの概要を紹介しました。馴染みのない読者のために、まずこれらのセクションを読むことをお勧めします。この投稿では、以前の投稿で紹介した表記法の一部も共有しています。
知識蒸留
知識蒸留 は、より効率的なトランスフォーマーの研究分野であり、大きなモデル(教師)の出力を再現することを奨励することにより、小さなモデル(学生)をトレーニングします。この手法は、当初はコンピュータビジョンの分類タスクで人気を博しましたが、NLPを含むいくつかのドメインで成功裏に適用されています。一般的なワークフローは次のとおりです。
- 一般的な注釈付きデータを使用して大規模なモデルをトレーニングします。
- タスク固有の注釈なしデータ (および使用可能な場合はタスク固有の注釈付きデータ) を使用して、小さなモデルをトレーニングして大きなモデルを模倣します。
このプロセスには依然として大規模なモデルのトレーニングが含まれますが、これは 1 回限りのコストです。 予測を行うより頻繁なタスクは、実行効率が大幅に向上した小さなモデルによって実行されます。 その結果、知識蒸留は、モバイルデバイスなど、ハードウェアに制約のある環境で機械学習を実行するための特に一般的な手法です。
大規模なモデルのトレーニングに使用したのと同じデータで、小規模なモデルを簡単に (ゼロから) トレーニングできることを検討する価値があります。ただし、小さいモデルには、大きなモデルと同じ品質の表現を学習する能力がない可能性があります。小規模モデルは、大規模モデルの予測確率から学習し、通常、クラス ラベルのみよりも多くの情報をエンコードします。これにより、小さなモデルはより豊富な表現を学習でき、多くのシナリオにおいて、小さなモデルはゼロからトレーニングした場合よりも優れた予測力を持ちます。
ドキュメント x とクラス ラベル y があり、クラス ラベルが C カテゴリの 1 つ (つまり、y∈{1,2,...,C})。大規模なモデル f が、ドキュメント x にクラス ラベル y=c があると予測する確率を p(c;f(x))。この確率は通常、次の形式の関数を使用して計算されます。

ここで、 f(x) は、 x を入力として受け取るニューラル ネットワーク (Transformer など) の出力です。大規模なモデルは、次の最尤目標を使用してトレーニングされます。

ここで、I(c;y)=1 y=c else 0 の場合。
小さなモデル g は、次の形式の目的を使用して、大きなモデル f によって予測された確率を再現するようにトレーニングできます。

目的関数の例は次のとおりです。
-
最尤スタイルの目標:
- これは、 p(c;f) と p(c;g)。
-
ロジット間の負の平均二乗誤差(MSE):

小規模モデルのトレーニング時にタスク固有の注釈付きデータが使用可能な場合は、加重平均を使用して教師あり目標と蒸留目標が組み合わされます。

タスク固有の蒸留
biLSTM-SOFTモデルは、分類タスクですでに微調整されたBERTモデルの予測を再現しようとすることで、タスク固有の蒸留を実行します。学生モデルでは、単層双方向LSTMを使用します。これは繰り返しモデルですが、レイヤーが1つしかないため、実行が高速です。
蒸留の目的は、生徒と教師のロジットの間の負のMSEです。 抽出元のBERTモデルよりも実行速度が400倍以上高速ですが、パフォーマンスは4〜7 精度/ F1ポイント低下します(タスクによって異なります)。
事前トレーニング中の蒸留
これまでのところ、この投稿では、教師あり学習のコンテキストでの知識蒸留を最も一般的に使用する設定として紹介してきました。ただし、 DistilBERT は、言語モデルの事前トレーニングと微調整の両方の段階で知識蒸留を実行します。
前の 投稿の背景セクションで 説明したように、BERTはマスク言語モデリングを使用して事前トレーニングされています。DistilBERT は欠落している単語をクラス ラベルとして扱い、最尤スタイルの蒸留目的関数を使用します。欠損した単語に対するBERTの予測確率分布を、蒸留目標のソフトターゲットとして使用します。著者らはまた、コサイン埋め込み目的を追加し、小さなモデルがその埋め込みの方向をBERTによって生成された方向に合わせるように促します。
DistilBERT は BERT と同じ基本アーキテクチャを採用していますが、レイヤーの数は半分で、実行速度が約 38% 高速です。 事前トレーニング中にのみ蒸留すると、BERTのパフォーマンスの97%が保持されます。 また、その結果、微調整中にタスク固有の蒸留(同じタスクで微調整されたBERTモデルを使用)を実行すると、パフォーマンスがさらに向上することも明らかになった。
Transformer アーキテクチャの活用
TinyBERT は、言語モデルの事前学習と微調整の両方の段階で知識の蒸留を行うという点で、DistilBERTに似たアプローチです。ただし、TinyBERTは、Transformerアーキテクチャの特徴を特に利用することにより、BERTの中間表現(最終出力だけでなく)から直接知識を取得します。
DistilBERT と同様に、TinyBERT は BERT と同じアーキテクチャを採用していますが、レイヤーは少なくなっています。 まず、学生モデルの各層から教師モデルの層へのマッピングが定義され、つまり、各学生層が1つの教師層に関連付けられます。 次に、学生層に応じて、3つの蒸留目的関数のいずれかを使用します。
- 埋め込みレイヤー
- 学生と教師の埋め込み行列の間の MSE を最小化します。
- アテンション レイヤー
- 生徒と教師の注意行列( 前の投稿 の式(4)の A)間のMSEと、セルフアテンション操作に従うフィードフォワード層の生徒と教師の出力の間のMSEを最小化します。
- 最終 (予測) レイヤー
- 最尤スタイルの蒸留目標を使用して、学生と教師の予測確率を一致させようとします。 これは DistilBERT と同じです。
TinyBERTは、蒸留されたBERTモデルと比較して、実行が2倍から9倍高速です(レイヤーの数と非表示状態のサイズによって異なります)。 幅広いタスクでDistilBERTを一貫して上回っており、各層の蒸留目的が最終層のみと比較して有用であることを示しています。
微調整
前回の 記事の背景の セクションで説明したように、大規模言語モデルをトレーニングする最後のステップは、通常、関心のあるタスクでモデルを微調整することです。この段階は比較的迅速に実行できますが、一般的にはモデルのすべてのパラメーターを更新する必要があります。つまり、ハードウェア要件は事前トレーニング段階と同じです。微調整手順は通常、タスクごとに個別に実行されることを考えると、トレーニング プロセスの中でもコストのかかる段階であることに変わりはありません。したがって、別の研究ラインは、微調整中に更新されるパラメータの数を減らすことを検討しています。
重みのサブセットの微調整
モデルのすべてのパラメータを更新する必要がないようにする方法の1つは、単に一部のレイヤーをフリーズすることです。リーら。 このアプローチの有効性について実証的研究を行います。その結果、12層のBERTモデルでは、最初の9層をフリーズし、最後の3層のみを微調整すると、ほとんどのタスクで完全な微調整のパフォーマンスの少なくとも90%に達することがわかりました。ただし、言語モデル全体をフリーズして最終的な予測レイヤーをトレーニングするだけでは、すべてのタスクのパフォーマンスが大幅に向上します。
バイアス項のみの更新
ほとんどのニューラルネットワークアーキテクチャのほとんどの操作では、入力に行列を乗算してからバイアス項を追加します。 これらの操作を構成する方法は、アーキテクチャを定義するものです。
Transformersでは、バイアス項( 例:前回の記事 の式(1)〜(3)の b 項)は、全パラメータの0.1%未満です。したがって、 BitFit は、微調整中にのみこれらを更新し、残りのパラメータをフリーズすることを提案します。アノテーションされたトレーニングデータが限られている場合、BitFitはモデル全体の微調整に対して競合する(場合によってはそれよりも優れている)パフォーマンスを発揮します。トレーニング データ セットが大きい場合は、完全な微調整よりもパフォーマンスがわずかに低下します。
小規模なトレーニング可能なネットワークをトランスフォーマーに挿入する
別の一連のパラメーター効率的な微調整方法では、事前トレーニング済みの言語モデル全体をフリーズしますが、目的のタスク用にトレーニングされた追加のパラメーターの小さなセットが導入されます。アダプター は、各 Transformer レイヤー内に 2 つの 2 層フィードフォワード ネットワークを挿入することでこれを行います。これらは、セルフアテンションメカニズムに従う既存のフィードフォワードネットワークの直前と直後に挿入されます。2 つのレイヤーは、次の操作を実行します。
- 最初のレイヤーは、Transformer の非表示状態を低次元ベクトルにダウンスペクションし、非線形性を適用します。
- 2 番目のレイヤーは、低次元ベクトルを Transformer の非表示状態サイズにアッププロジェクションします。
この背後にある考え方は、(最終的な予測レイヤーをトレーニングするだけでなく)Transformerアーキテクチャ全体に学習可能なパラメーターを挿入することで、モデルは微調整と同じ方法で、しかしはるかに効率的な方法で内部表現を調整できるということです。 アダプタのチューニングは、フルファインチューニングよりもわずか~0.4%悪く、トレーニングされたパラメータの数はわずか3.6%です。
推奨事項
これらの2つの投稿では、いくつかの異なる効率的なTransformerメソッドについて説明しました。 いつそれらを使用するのが適切でしょうか?
- 特に長いドキュメントを扱う場合は、 前の投稿で説明したような効率的なアテンションメカニズムを使用することをお勧めします。これにより、事前トレーニング時間と推論時間の両方が短縮されます。パフォーマンスは、本格的な注意を使用するよりも優れているかもしれません。
- ボトルネックがメモリである場合(つまり、短いドキュメントのバッチでもメモリ不足エラーが発生する場合)、蒸留モデルを使用してみてください(例: TinyBERT)。 レイヤーが少なく、表現の次元が低いため、モデルのメモリ使用量が削減されると同時に、トレーニングも高速になります。
- ただし、蒸留されたモデルは、学習するために事前にトレーニングされたフルサイズモデルが必要であり、通常、事前トレーニングと微調整の両方で蒸留するとより適切に機能することに注意してください。
- 微調整段階で注釈付きデータが限られている場合は、言語モデルパラメータのほとんどまたはすべてをフリーズする微調整方法を使用します(例: アダプター) は、オーバーフィットのリスクを軽減し、通常、モデル全体を微調整するよりも優れたパフォーマンスを発揮します。
- 教師ありの下流タスクが多数ある場合は、効率的な微調整方法を使用することをお勧めします。 これにより、各タスクでトレーニングおよび保存する必要があるパラメーターの数が減ります。
- 効率的な微調整方法は、完全な微調整よりもトレーニングが速い場合がありますが、通常、推論速度は向上しません (つまり、 トレーニング済みのモデルから予測を取得する)。 実際、それらのいくつかは、追加のレイヤーが挿入されるため、推論がわずかに遅くなる可能性があります。
概要
この2部構成のシリーズでは、一般的でありながら計算量の多いTransformerベースの言語モデリング手法の効率的な代替手段を探ることにより、最先端の自然言語処理(NLP)を広く利用できるようにする方法について説明します。
- Transformerの自己注意メカニズムの計算ワークロードが高い理由を説明しました。
- パフォーマンスを大幅に損なうことなく実行するのにより効率的な代替アテンションメカニズムを提示しました。
この投稿:
- より大きなモデルの出力を再現するように促すことによって、小さくて効率的なモデルを訓練する知識蒸留技術について説明しました。
- 更新されるパラメーターの数を減らすことで言語モデルを微調整する効率的な方法を検討しました。
- さまざまな効率的な Transformer アプローチを使用するシナリオに関する推奨事項を提供しました。