權重分群法

由 Arm ML Tooling 維護

本文件將概略說明權重分群法,協助您判斷是否適用於您的用途。

總覽

分群法 (或權重共用) 可降低模型中唯一權重值的數量,因此可協助你部署模型。此方法會先將每一層的權重分為 N 個叢集,然後提供叢集的群集中心值給屬於叢集的所有權重。

這項技術透過壓縮模型改善了成效。未來的架構支援可能會降低記憶體使用量,對於在資源受限內嵌系統上的深度學習模型部署作業而言,這項改善將可帶來重大改變。

我們已在各種視覺工作和語音工作中,使用分群法進行實驗。我們發現,在盡量不犧牲準確率的前提下,模型壓縮率最多可提升 5 倍。如下方結果所示。

請注意,分群法可以減少批次正規化層之前的卷積和稠密層分層,也可以搭配以軸為根據的訓練後量化。

API 相容性矩陣

使用者可透過下列 API 套用分群法:

  • 模型建構:tf.keras 僅包含序列模型和函式模型
  • TensorFlow 版本:TF 1.x 適用於 1.14 以上版本和 2.x 版本。
    • 不支援使用 TF 2.X 套件的 tf.compat.v1 和使用 TF 1.X 套件的 tf.compat.v2
  • TensorFlow 執行模式:包括 Graph 和 Eager 模式

結果

圖片分類

模型 原始 已分群
最高準確率 (%) 壓縮的 .tflite 大小 (以 MB 為單位) 設定 叢集編號 最高準確率 (%) 壓縮的 .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 上進行訓練及測試。

關鍵字發掘

模型 原始 已分群
最高準確率 (%) 壓縮的 .tflite 大小 (以 MB 為單位) 設定 叢集編號 最高準確率 (%) 壓縮的 .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」(訓練量化和權重共用)。