Как сократить размер BERT без значительной потери в точности

bert

BERT — это одна из state-of-the-art моделей в обработке естественного языка. Несмотря на качество модели, обучение BERT является ресурсоемким как по памяти, так и по скорости обучения. Исследователи из RASA протестировали техники масштабирования нейросетей на BERT. С помощью квантизации и TFLite размер BERT сократился в 4 раза.

Техники масштабирования нейросетей

Квантизация

Квантизация означает уменьшение численной точности весов модели. Один из популярных методов — k-means квантизация. Имея веса модели в матрице W с десятичными числами, веса кластеризуются с помощью k-means в N кластеров. Затем матрица W трансформируется в матрицу целых чисел от 1 до N, каждое из которых является указателем к центру кластера. Так можно сжать каждый элемент изначальной матрицы из 32-битного десятичного числа в log(N)-битные целые числа.

Квантизацию делают не только на готовой матрице весов после обучения, но и во время. Эта опция доступна в TensorFlow Lite. Модифицированный процесс обучения выглядит следующим образом:

  1. Квантовать веса;
  2. Посчитать функцию потерь в квантованной нейросети;
  3. Рассчитать градиенты по функции потерь с учетом не квантованных весов;
  4. Обновить не квантованные веса

После обучения квантовать итоговую матрицу весов и использовать ее для предсказания. Сеть учится оптимизировать работу своих квантованных версий.

Прунинг

Прунинг предполагает фильтрацию частей модели, чтобы сделать ее меньше и быстрее. Популярным методом является прунинг весов модели. Прунинг весов удаляет веса в матрице модели по одному. Эта техника сравнивается с ранним развитием человеческого мозга, когда какие-то связи уплотняются, в то время как остальные умирают. Стандартный прунинг весов удаляет веса, значение которых близки к 0. Это позволяет удалять веса, значимость которых для предсказывания невелика. Чтобы сократить объем памяти, которую занимает нейросеть, при прунинге весов необходимо использовать матрицы в сжатом формате.

Дистилляция знаний

Дистилляция знаний — это не техника сжатия нейросети, но она имеет схожие цели и последствия. Цель дистилляции знаний в том, чтобы после обучения большой и медленной модели (учитель) обучить маленькую нейросеть (ученик) мимикрировать работу нейросети-учителя.

Ускорение BERT

Цель исследования была в том, чтобы ускорить предсказание BERT, чтобы использовать нейросеть для классификации именованных сущностей. На момент экспериментов классификатор с BERT требовал ~120ms на CPU, чтобы обработать одно сообщение. Другие классификаторы по скорости были на ~100x быстрее.

Квантизация с TFLite

В качестве первого эксперимента исследователи протестировали 8-битную квантизацию с TensorFlow Lite. Результаты были следующими:

  • Квантизация не повлияла на точность модели: F1 метрика BERT модели сократилась на 0.3%;
  • Размер BERT сократился в 4 раза: веса конвертировались из 32-битных чисел в 8-битные;
  • Скорость работы BERT на TensorFlow Lite увеличилась в 5 раз на CPU

Будущие направления исследований

Исследователи планируют протестировать прунинг весов и нейронов на BERT.

Подписаться
Уведомить о
guest

0 Comments
Межтекстовые Отзывы
Посмотреть все комментарии

gogpt