モデルの軽量化

に公開

はじめに

概要

  • シラバス:E資格2024#2
  • モデルを軽量化する手法を勉強する

キーワード

プルーニング, 量子化, 蒸留, ソフトラベル, スパース化,
エッジコンピューティング, IoTデバイス

学習内容

軽量化技術

  • 計算量が莫大になりがちなディープラーニングのモデルを、本番環境やモバイル環境でも使用できるように、モデル圧縮(Model Compression)を行い、ダウンサイズを行うための技術

プルーニング(Pruning, 剪定, 枝刈り)

  • ニューラルネットワークの不要なパラメータ(重みやノード)を削除して軽量化する手法
  • 深層学習モデルは学習後、多くの重みがほぼゼロに近いか重要度が低い場合があって、これらを残すとメモリや計算資源を無駄に消費するため、不要部分を切り落とす
  • 目的
    • モデルサイズの削減
    • 推論速度の向上
    • 消費メモリ・消費電力の削減
    • 過学習の抑制(場合による)

非構造的プルーニング(Unstructured Pruning)

  • 重み単位で重要度を評価し、しきい値以下の重みをゼロにする
  • 柔軟だが、疎行列になり、ハードウェアによっては速度向上が限定的
  • 例:L1ノルムが小さい重みを削除

構造的プルーニング(Structured Pruning)

  • ニューロン、フィルタ、チャネルなどまとまり単位で削除
  • モデルの構造自体が小さくなるため、実行速度の向上が大きい
  • CNNでは不要なフィルタごと削除するケースが多い

流れ

  1. 学習済みモデルを用意
  2. 重要度評価(例:重みの絶対値、勾配の大きさ)
  3. 低重要度の重みやノードを削除
  4. 再学習(ファインチューニング)で精度回復
  5. 必要なら複数回繰り返す

重要度の評価指標

  • 重みの絶対値(|w| が小さいものを削除)
  • 勾配情報(Saliency)
  • BNスケールパラメータ(BatchNormのγ値が小さいチャネルを削除)

量子化(Quantization)

  • ニューラルネットワークの重みやアクティベーションの数値表現を低精度(低ビット幅)に変換して軽量化する手法
  • 通常の学習ではFP32(32ビット浮動小数点)で重みやアクティベーションを保存するが、多くの場合、高い精度は不要であり、FP16(16ビット半精度)やINT8(8ビット整数)でも十分な精度を保てること
  • 目的
    • モデルサイズの削減(メモリ使用量を減らす)
    • 推論速度の向上(特に低精度演算が高速なハードウェアで)
    • 消費電力の削減(モバイルや組み込み向け)

Post-Training Quantization(PTQ)

-学習後のモデルを直接量子化

  • 実装が簡単で追加学習不要
  • 例:FP32 → INT8
  • 欠点:精度低下が大きい場合がある

Quantization-Aware Training(QAT)

  • 学習中から量子化の影響をシミュレーション
  • 精度低下が小さい
  • 欠点:再学習が必要で計算コストが高い

量子化の粒度

粒度 説明
重みの量子化 モデルパラメータのみ低ビット化 INT8重み
アクティベーションの量子化 推論時の中間出力も低ビット化 INT8出力
両方 重み+アクティベーションを量子化 INT8推論

蒸留(Knowledge Distillation)

  • 一度訓練したモデルが学習した知識を、別の軽量なモデルに継承させる手法
  • 小さいモデルでも高い精度を維持できるようにする手法
  • 通常の学習は正解ラベル(ハードラベル)を使うが、蒸留では教師モデルの出力確率(ソフトラベル)も利用する

ソフトラベル

教師モデルの出力は、正解クラス以外にも近いクラスに高めの確率を割り当てることがある。
この「確率の分布」にはクラス間の関係性や類似性が含まれている
例(猫画像の分類出力):

  • ハードラベル:[Cat: 1.0, Dog: 0.0, Rabbit: 0.0]
  • ソフトラベル:[Cat: 0.85, Dog: 0.10, Rabbit: 0.05] ← 「犬にも少し似てる」という情報を含む

損失関数

  • 通常のクロスエントロピー損失に加えて、教師モデルとの出力分布の差を小さくする損失を使う

スパース化(Sparsification)

  • ニューラルネットワークのパラメータや特徴マップの中で不要な要素をゼロにして、計算量やメモリ使用量を減らす手法
  • 通常のディープラーニングモデルはほとんどの重みが非ゼロで「密(Dense)」な状態。しかし、重要でない重みは多く、ゼロにしても精度への影響が小さい→ゼロの割合が多ければ多いほど演算削減・メモリ削減が可能
  • 目的
    • メモリ削減:ゼロを圧縮表現で保存
    • 計算高速化:ゼロ項の演算スキップ(専用ライブラリやハードウェアで)
    • 省電力化:演算削減による

重みスパース化

  • 小さい絶対値の重みをゼロにする
  • 多くはプルーニングとして実装

アクティベーションスパース化

  • ReLUなどで自然に多くの出力がゼロになる現象を利用
  • 推論時にゼロの部分の計算をスキップ可能(ハードウェア依存)

構造的スパース化

  • 個別の重みではなく、フィルタ単位・チャネル単位・ブロック単位でまとめてゼロ化
  • ハードウェア実装しやすく高速化に向く

非構造的スパース化

  • ランダムにゼロ化(重要でない個別の重みを除去)
  • 理論的にはスパース率を高めやすいが、ハードウェアでの効率化が難しい

比較

手法 主目的 アプローチ
スパース化 ゼロ化で軽量化 計算不要部分を作る
プルーニング 不要パラメータ削除 モデル構造自体を削る
量子化 ビット幅削減 精度を落として表現縮小
蒸留 知識を小モデルに移す 別モデルに転移

エッジコンピューティング(Edge Computing)

  • データの処理をクラウドやデータセンターではなく、データが生成される場所(エッジデバイスやその近くのサーバ)で行うコンピューティング方式

背景

  • 従来のクラウド中心型では、すべてのデータをクラウドに送信 → 処理 → 結果を返す

    • 遅延が大きい
    • 通信コスト・帯域が大きい
    • プライバシーセキュリティの懸念
  • データ生成元の近くで処理を実行(例:IoTデバイス、スマホ、基地局)すると、必要なデータだけクラウドに送る。リアルタイム性や帯域効率を改善

メリット

  • 低遅延:物理的に近い場所で処理するため応答が速い
  • 帯域節約:不要なデータを送らず、必要な情報だけ送信
  • プライバシー強化:個人情報をローカルで処理し、外部送信を減らせる
  • 信頼性向上:ネットワークが切れてもローカル処理は継続可能

課題

  • エッジ側の計算資源制限(CPU/GPU、メモリ、電力)
  • セキュリティ対策の難しさ(物理的に攻撃されやすい)
  • 分散システム管理の複雑化

活用例

分野 具体例
スマートシティ 交通監視カメラがリアルタイムで違反検出
製造業 工場内センサーで故障兆候を即時検知
ヘルスケア ウェアラブルで心拍異常を即通知
自動運転 車載コンピュータでセンサー情報を即時解析

IoTデバイス(Internet of Things デバイス)

  • インターネットに接続でき、データを収集・送信・受信し、場合によっては自律的に動作する物理的な機器のこと

IoTデバイスの基本要素

  • センサー:温度、湿度、光、位置、加速度などを計測
  • 通信モジュール:Wi-Fi、Bluetooth、LTE/5G、LoRaなどでネット接続
  • マイクロコントローラ/プロセッサ:データ処理や制御を行う
  • アクチュエータ(必要に応じて):モーターやスピーカーなど、物理的な動作を行う部品
  • 電源:バッテリーや外部電源

特徴

  • 自動でデータ収集(人の操作なしでも動く)
  • クラウドやエッジに接続してデータ送信
  • 双方向通信(データ送信だけでなく制御命令も受信可能)
  • 小型・省電力化が進んでいる

AIとの関係

  • 単純なIoTデバイスはデータ収集が主目的
  • 最近はエッジAIを搭載し、デバイス自身でデータ解析や判断が可能(例:監視カメラがその場で不審者検知)

課題

  • セキュリティリスク(攻撃されるとネット経由で制御される可能性)
  • 電池寿命(特に遠隔設置の場合)
  • 通信インフラ依存(ネットが不安定だと機能低下)
GitHubで編集を提案

Discussion