權重叢集

由 Arm ML Tooling 維護

本文件概述權重叢集,協助您判斷其是否符合您的使用情境。

總覽

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

這項技術透過模型壓縮帶來改進。未來的架構支援可以釋放記憶體用量方面的改進,這對於在資源有限的嵌入式系統上部署深度學習模型至關重要。

我們已針對視覺和語音任務進行叢集化實驗。我們已觀察到模型壓縮最多提升 5 倍,且準確度損失極小,如下方呈現的結果所示。

請注意,叢集化對於卷積層和位於批次正規化層之前的密集層,以及與逐軸訓練後量化結合使用時,效益會降低。

API 相容性矩陣

使用者可以使用下列 API 套用叢集化

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

結果

圖片分類

模型 原始 叢集化
前 1 準確度 (%) 壓縮後的 .tflite 檔案大小 (MB) 設定 叢集數量 前 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 上訓練及測試。

關鍵字辨識

模型 原始 叢集化
前 1 準確度 (%) 壓縮後的 .tflite 檔案大小 (MB) 設定 叢集數量 前 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》論文為基礎。請參閱標題為「Trained Quantization and Weight Sharing」的第 3 章。