Grupowanie wag

Utrzymywane przez Arm ML Tooling

Ten dokument zawiera omówienie grupowania wag, aby pomóc Ci określić, jak pasuje do Twojego przypadku użycia.

Przegląd

Klastrowanie lub współdzielenie wag zmniejsza liczbę unikalnych wartości wag w modelu, co prowadzi do korzyści z wdrożenia. Najpierw grupuje wagi każdej warstwy w N klastrów, a następnie udostępnia wartość centroidu klastra dla wszystkich wag należących do klastra.

Ta technika wprowadza ulepszenia poprzez kompresję modelu. Przyszła obsługa platform może odblokować ulepszenia w zakresie wykorzystania pamięci, które mogą mieć decydujące znaczenie przy wdrażaniu modeli uczenia głębokiego w systemach osadzonych o ograniczonych zasobach.

Eksperymentowaliśmy z grupowaniem zadań związanych z widzeniem i mową. Zaobserwowaliśmy do 5x poprawę kompresji modelu przy minimalnej utracie dokładności, co pokazują wyniki przedstawione poniżej.

Należy pamiętać, że klastrowanie zapewnia mniejsze korzyści w przypadku splotów i gęstych warstw, które poprzedzają warstwę normalizacji wsadowej, a także w połączeniu z kwantyzacją po treningu na osi.

Macierz zgodności API

Użytkownicy mogą stosować klastrowanie za pomocą następujących interfejsów API:

  • Budowa modelu: tf.keras tylko z modelami sekwencyjnymi i funkcjonalnymi
  • Wersje TensorFlow: TF 1.x dla wersji 1.14+ i 2.x.
    • tf.compat.v1 z pakietem TF 2.X i tf.compat.v2 z pakietem TF 1.X nie są obsługiwane.
  • Tryb wykonywania TensorFlow: zarówno wykres, jak i zachłanność

Wyniki

Klasyfikacja obrazu

Model Oryginał Zgrupowane
Dokładność Top-1 (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja liczba klastrów Dokładność Top-1 (%) Rozmiar skompresowanego pliku .tflite (MB)
MobileNetV1 70,976 14.97
Selektywna (ostatnie 3 warstwy Conv2D) 16, 16, 16 70,294 7,69
Selektywna (ostatnie 3 warstwy Conv2D) 32, 32, 32 70,69 8.22
Pełna (wszystkie warstwy Conv2D) 32 69,4 4,43
MobileNetV2 71.778 12.38
Selektywna (ostatnie 3 warstwy Conv2D) 16, 16, 16 70,742 6.68
Selektywna (ostatnie 3 warstwy Conv2D) 32, 32, 32 70.926 7.03
Pełna (wszystkie warstwy Conv2D) 32 69,744 4,05

Modele zostały przeszkolone i przetestowane w ImageNet.

Wyszukiwanie słów kluczowych

Model Oryginał Zgrupowane
Dokładność Top-1 (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja liczba klastrów Dokładność Top-1 (%) Rozmiar skompresowanego pliku .tflite (MB)
DS-CNN-L 95,233 1,46
Pełna (wszystkie warstwy Conv2D) 32 95.09 0,39
Pełna (wszystkie warstwy Conv2D) 8 94.272 0,27

Model został przeszkolony i przetestowany na SpeechCommands v0.02.

  1. Serializuj model Keras do pliku .h5
  2. Konwertuj plik .h5 na .tflite za pomocą TFLiteConverter.from_keras_model_file()
  3. Skompresuj plik .tflite w archiwum zip

Przykłady

Oprócz przykładu grupowania wag w Keras zobacz następujące przykłady:

  • Grupuj wagi modelu CNN wytrenowanego na podstawie odręcznego zbioru danych klasyfikacji cyfr MNIST: kod

Implementacja grupowania wag opiera się na artykule Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization i Huffman Coding . Zobacz rozdział 3, zatytułowany Wyszkolona kwantyzacja i współdzielenie wagi .