С тех пор, как мы представили Model Optimization Toolkit - набор методов, которые разработчики, как новички, так и продвинутые, могут использовать для оптимизации моделей машинного обучения, мы были заняты работой над нашей дорожной картой, чтобы добавить несколько новых подходов и инструментов. Сегодня мы рады поделиться новым API для уменьшения веса.

Обрезка веса

Оптимизация программ машинного обучения может принимать самые разные формы. К счастью, нейронные сети оказались устойчивыми к различным преобразованиям, направленным на достижение этой цели.

Одно такое семейство оптимизаций направлено на уменьшение количества параметров и операций, задействованных в вычислениях, путем удаления соединений и, следовательно, параметров между уровнями нейронной сети.

API уменьшения веса построен на основе Keras, поэтому разработчикам будет очень легко применить эту технику к любой существующей программе обучения Keras. Этот API станет частью нового репозитория GitHub для набора инструментов оптимизации модели вместе со многими предстоящими методами оптимизации.

Что такое обрезка веса?

Обрезка веса означает удаление ненужных значений в тензорах веса. Мы практически устанавливаем значения параметров нейронной сети равными нулю, чтобы удалить то, что, по нашему мнению, является ненужными связями между уровнями нейронной сети. Это делается в процессе обучения, чтобы нейронная сеть могла адаптироваться к изменениям.

Чем полезна обрезка веса?

Непосредственным преимуществом этой работы является сжатие диска: разреженные тензоры поддаются сжатию. Таким образом, применяя простое сжатие файла к сокращенной контрольной точке TensorFlow или преобразованной модели TensorFlow Lite, мы можем уменьшить размер модели для ее хранения и / или передачи. Например, в учебнике мы показываем, как разреженная на 90% модель для MNIST может быть сжата с 12 МБ до 2 МБ.

Более того, в ходе нескольких экспериментов мы обнаружили, что обрезка веса совместима с квантованием, что дает комбинированные преимущества. В том же руководстве мы покажем, как можно дополнительно сжать сокращенную модель с 2 МБ до 0,5 МБ, применив посттренировочное квантование.

В будущем TensorFlow Lite добавит первоклассную поддержку разреженного представления и вычислений, тем самым расширив преимущество сжатия до оперативной памяти и разблокируя улучшения производительности, поскольку разреженные тензоры позволяют нам пропускать ненужные вычисления с использованием обнуленных значений. .

Результаты по нескольким моделям

В наших экспериментах мы подтвердили, что этот метод может быть успешно применен к различным типам моделей для различных задач, от сверточных нейронных сетей обработки изображений до речевых нейронных сетей с использованием рекуррентных нейронных сетей. В следующей таблице показаны некоторые из этих экспериментальных результатов.

Как это работает?

Наш API-интерфейс для сокращения веса на основе Keras использует простой, но широко применимый алгоритм, предназначенный для итеративного удаления соединений в зависимости от их величины во время обучения. По сути, указывается конечная целевая разреженность (например, 90%), а также график выполнения обрезки (например, начало обрезки на этапе 2000, остановка на этапе 10000 и выполнение каждые 100 этапов) и дополнительная конфигурация для обрезки. структура (например, применяется к отдельным значениям или блокам значений определенной формы).

По мере продолжения обучения будет запланировано выполнение процедуры обрезки, удаляющей (т. Е. Устанавливая на ноль) веса с наименьшими значениями величины (т. Е. Наиболее близкими к нулю) до тех пор, пока не будет достигнута текущая цель разреженности. Каждый раз, когда планируется выполнение подпрограммы сокращения, текущая цель разреженности пересчитывается, начиная с 0%, пока она не достигнет окончательной целевой разреженности в конце расписания сокращения, постепенно увеличивая ее в соответствии с функцией плавного увеличения.

Так же, как и расписание, функцию наращивания можно настроить по мере необходимости. Например, в некоторых случаях может быть удобно запланировать процедуру обучения так, чтобы она начиналась после определенного шага, когда был достигнут некоторый уровень сходимости, или заканчивала обрезку раньше, чем общее количество тренировочных шагов в вашей тренировочной программе для дальнейшей точной настройки. система на конечном целевом уровне разреженности. Для получения более подробной информации об этих конфигурациях, пожалуйста, обратитесь к нашим учебникам и документации.

В конце процедуры обучения тензоры, соответствующие «обрезанным» слоям Keras, будут содержать нули в соответствии с конечной целью разреженности для слоя.

Новая документация и репозиторий Github

Как упоминалось ранее, API сокращения веса будет частью нового проекта и репозитория GitHub, нацеленного на методы, которые делают модели машинного обучения более эффективными для выполнения и / или представления. Это отличный проект, который стоит начать, если вы интересуетесь этой захватывающей областью машинного обучения или просто хотите иметь ресурсы для оптимизации своих моделей.

Учитывая важность этой области, мы также создаем новый подсайт в разделе tensorflow.org/model_optimization с соответствующей документацией и ресурсами. Мы рекомендуем вам попробовать прямо сейчас и будем рады вашим отзывам. Следите за новостями в этом блоге!

Благодарности: Разиэль Альварес, Пулкит Бхувалка, Лоуренс Чан, Алан Чиао, Тим Дэвис, Суйог Гупта, Цзян Ли, Юнлу Ли, Сара Сираджуддин, Даниэль Ситунаяке, Сухарш Сивакумар.