Эффективные методы сжатия данных при тренировке нейронных сетей

Современные глубокие нейронные сети (DNNS) в большинстве случаев используют графические процессоры для своей тренировки. Одна из проблем, с которыми сталкиваются все, кто тренирует все более глубокие нейросети, — это ограничения, которые объем памяти графических процессоров, накладывает на размеры сетей и количество данных, которые эти сети могут обрабатывать параллельно.

В наших исследованиях мы проанализировали популярные нейросети и обнаружили, что ключевые структуры данных, ответственные за увеличение потребления памяти, — это выходные результаты промежуточных слоев нейросетей (feature maps). Мы предложили несколько решений для оптимизации потребления памяти. Они основаны на том, что конкретные типы слоев (например, convolution, ReLU, pool) не нуждаются в хранении всех битов информации, которые используются в feature maps. Например, при тренировке с использованием алгоритма backpropagation от pool- к ReLU-слою нам достаточно хранить всего лишь 1 бит информации вместо текущих 32 битов.

Используя различные алгоритмы кодирования (как без потери, так и с потерей качества), нам удалось уменьшить потребление памяти более чем в два раза для пяти популярных развертывающих нейросетей (DNN) — при потере производительности около 6% и без потери качества тренируемых моделей.