權重分群

由 Arm ML Tooling 維護

本文概述權重分群,協助您判斷這項技術是否適合您的用途。

總覽

分群 (或權重共用) 可減少模型中獨特權重值的數量,進而為部署帶來好處。此技術會先將每一層的權重分組為 N 個叢集,然後針對屬於該叢集的所有權重共用叢集的中心值。

這項技術透過模型壓縮帶來效能提升。日後架構支援可望帶來記憶體用量方面的改善,這對於在資源有限的嵌入式系統上部署深度學習模型至關重要。

我們已針對視覺和語音工作試驗過分群技術。結果如下方結果所示,我們發現模型壓縮最多可提升 5 倍,且精確度僅略微降低。

請注意,分群技術對於卷積層和批次正規化層之前的密集層,以及搭配逐軸訓練後量化使用時,效益會降低。

API 相容性矩陣

使用者可以使用下列 API 套用分群技術

  • 模型建構:僅限 Sequential 和 Functional 模型的 keras
  • TensorFlow 版本:適用於 1.14 以上版本和 2.x 的 TF 1.x。
    • 不支援搭配 TF 2.X 套件的 tf.compat.v1 和搭配 TF 1.X 套件的 tf.compat.v2
  • TensorFlow 執行模式:圖表和 Eager 模式皆可

結果

圖片分類

模型 原始 已分群
Top-1 精確度 (%) 壓縮後的 .tflite 檔案大小 (MB) 設定 叢集數量 Top-1 精確度 (%) 壓縮後的 .tflite 檔案大小 (MB)
MobileNetV1 70.976 14.97
選擇性 (最後 3 個 Conv2D 層) 16, 16, 16 70.294 7.69
選擇性 (最後 3 個 Conv2D 層) 32, 32, 32 70.69 8.22
完整 (所有 Conv2D 層) 32 69.4 4.43
MobileNetV2 71.778 12.38
選擇性 (最後 3 個 Conv2D 層) 16, 16, 16 70.742 6.68
選擇性 (最後 3 個 Conv2D 層) 32, 32, 32 70.926 7.03
完整 (所有 Conv2D 層) 32 69.744 4.05

這些模型已在 ImageNet 上完成訓練和測試。

關鍵字辨識

模型 原始 已分群
Top-1 精確度 (%) 壓縮後的 .tflite 檔案大小 (MB) 設定 叢集數量 Top-1 精確度 (%) 壓縮後的 .tflite 檔案大小 (MB)
DS-CNN-L 95.233 1.46
完整 (所有 Conv2D 層) 32 95.09 0.39
完整 (所有 Conv2D 層) 8 94.272 0.27

這個模型已在 SpeechCommands v0.02 上完成訓練和測試。

  1. 將 Keras 模型序列化為 .h5 檔案
  2. 使用 TFLiteConverter.from_keras_model_file() 將 .h5 檔案轉換為 .tflite
  3. 將 .tflite 檔案壓縮為 zip

範例

除了Keras 中的權重分群範例之外,另請參閱下列範例

  • 將在 MNIST 手寫數字分類資料集上訓練的 CNN 模型的權重分群:程式碼

權重分群實作是以 Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding 論文為基礎。請參閱第 3 章,標題為「Trained Quantization and Weight Sharing」。