Grupowanie wag

Utrzymywany przez Arm ML Tooling

Ten dokument zawiera przegląd klastrów wag, który pomoże Ci określić, jak pasuje to do Twojego przypadku użycia.

Przegląd

Klastrowanie, czyli dzielenie wag, zmniejsza liczbę unikalnych wartości wag w modelu, co prowadzi do korzyści w zakresie wdrażania. Najpierw grupuje wagi każdej warstwy w N klastrów, a następnie dzieli wartość centroidy klastra dla wszystkich wag należących do klastra.

Technika ta zapewnia ulepszenia poprzez kompresję modelu. Przyszła obsługa frameworków może odblokować ulepszenia wykorzystania pamięci, które mogą mieć decydujące znaczenie we wdrażaniu modeli głębokiego uczenia się w systemach wbudowanych z ograniczonymi zasobami.

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

Należy pamiętać, że grupowanie zapewni zmniejszone korzyści w przypadku splotów i gęstych warstw poprzedzających warstwę normalizacji wsadowej, a także w połączeniu z kwantyzacją na oś po treningu.

Macierz kompatybilności API

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

  • Budowanie modelu: 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 wykonania TensorFlow: zarówno wykres, jak i chętny

Wyniki

Klasyfikacja obrazu

Model Oryginalny Zgrupowane
Dokładność na najwyższym poziomie (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja # klastrów Dokładność na najwyższym poziomie (%) Rozmiar skompresowanego pliku .tflite (MB)
MobileNetV1 70,976 14,97
Selektywne (ostatnie 3 warstwy Conv2D) 16, 16, 16 70.294 7,69
Selektywne (ostatnie 3 warstwy Conv2D) 32, 32, 32 70,69 8.22
Pełny (wszystkie warstwy Conv2D) 32 69,4 4,43
MobileNetV2 71.778 12.38
Selektywne (ostatnie 3 warstwy Conv2D) 16, 16, 16 70.742 6,68
Selektywne (ostatnie 3 warstwy Conv2D) 32, 32, 32 70,926 7.03
Pełny (wszystkie warstwy Conv2D) 32 69.744 4.05

Modele zostały przeszkolone i przetestowane w ImageNet.

Wykrywanie słów kluczowych

Model Oryginalny Zgrupowane
Dokładność na najwyższym poziomie (%) Rozmiar skompresowanego pliku .tflite (MB) Konfiguracja # klastrów Dokładność na najwyższym poziomie (%) Rozmiar skompresowanego pliku .tflite (MB)
DS-CNN-L 95.233 1,46
Pełny (wszystkie warstwy Conv2D) 32 95.09 0,39
Pełny (wszystkie warstwy Conv2D) 8 94.272 0,27

Model został przeszkolony i przetestowany w programie 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 do formatu ZIP

Przykłady

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

  • Pogrupuj wagi modelu CNN wyszkolonego na zestawie danych klasyfikacji cyfr pisanych odręcznie MNIST: code

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