トレンドトピック
#
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.
ニューラルネットワークからニューロンの74%を削除しました。
精度はわずか0.50%低下しました。
内訳は次のとおりです(コード付き)。
トレーニングされたニューラルネットワークには、パフォーマンスに実質的に寄与しないニューロンが常にあります。
しかし、それでもメモリを消費します。
これらは、精度を大幅に損なうことなく取り除くことができます。
それらを識別する方法を見てみましょう!
手順は次のとおりです。
ステップ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でほぼ同様のパフォーマンスが得られます。
これを👇チェックしてください

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