トレンドトピック
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
あなたはテスラの機械学習エンジニアの面接を受けています。
インタビュアー:車両のエッジハードウェアにニューラルネットを展開する必要がありますが、メモリに収まりません。あなたならどう対処しますか?
あなた:知識蒸留を使って、より小さなモデルを訓練します。
面接終了。
見落とした内容は以下の通りです:
知識の抽出には数週間の計算が必要です。なぜなら本質的に新しいモデルを訓練しているからです。
しかし、解決策はすでにあなたの訓練されたネットワークの中にあります。
ほとんどのニューロンは無駄な存在で、記憶を消費するものの予測にはほとんど貢献しません。
見分け方を見てみましょう!
手順は次のとおりです。
ステップ1) 通常どおりニューラルネットワークをトレーニングします。
ステップ2) 検証セットをトレーニングされたネットワークに渡し、隠れ層のすべてのニューロンについて、以下を計算します。
- 平均活性化
- 活動化の分散 (活動化が -ve である場合)
これを👇チェックしてください

ステップ3) モデルの出力にほとんど影響を与えないため、活性化平均と分散がほぼゼロのニューロンをプルーニングします。
理想的には、複数の剪定しきい値にわたってパフォーマンスをプロットして、サイズと精度のトレードオフに適合するモデルを選択します。
これを👇チェックしてください

コードを見てみましょう。
まず、単純なニューラルネットワークを定義し、それをトレーニングします。
後でプルーニングのためにニューロンレベルの活性化を計算するため、フォワードパスですべての中間活性化を返します。
これを👇チェックしてください

次に、次の 3 つの要素を含む 2 つのリストを定義します。
- 1つはアクティベーションの平均を格納します
- 別の std dev はアクティベーションを保存します
検証セットをモデルに渡して、隠れ層ごとにこれらの統計を計算します。
これを👇チェックしてください

この時点で、上記で生成したニューロンレベルの統計量の分布プロットを作成しましょう。
以下に示すように、ほとんどのニューロンの平均活性化とその標準発達は、ほぼゼロの値付近に大きく分布しています。
次にそれらを剪定してみましょう。

プルーニングでは、しきい値のリストを反復処理し、次の操作を行います。
- 新しいネットワークを作成し、しきい値を超えた重みを転送します。
- 新しいネットワークを評価し、合計パラメータを計算します。
- 結果をリストに追加します。
これを👇チェックしてください

この表は、プルーニングされたモデルの精度とサイズの縮小を、元のモデルと比較して、いくつかのしきい値にわたって比較したものです。
mean=0.1 および std-dev=0.4 の場合:
- モデルの精度が 0.08% 低下します。
- モデルのサイズが62%縮小されました。
これは大幅な削減です。
これを👇チェックしてください

ここに別の興味深い結果があります。
mean=0.5 および std-dev=1 の場合:
- モデルの精度が 0.5% 低下します。
- モデルのサイズが74%縮小されました。
したがって、基本的に、パラメータの1/4でほぼ同様のパフォーマンスが得られます。
これを👇チェックしてください

もちろん、精度とサイズの間にはトレードオフがあります。サイズを小さくすると、精度が低下します(ビデオを確認してください)。
しかし、ほとんどの場合、最適化する指標は精度だけではありません。
代わりに、効率やメモリなどのいくつかの運用指標が重要な要素です。
344
トップ
ランキング
お気に入り
