- Регистрация
- 23.09.18
- Сообщения
- 12.347
- Реакции
- 176
- Репутация
- 0

Пока другие компании обсуждают управление коллективом на удаленке, мы в Smart Engines продолжаем делиться с вами своим стеком технологий. Сегодня про оптимизацию нейронных сетей. Сделать систему распознавания на основе нейронных сетей, которая могла бы быстро работать на смартфонах и прочих мобильных устройствах – крайне непросто. А сделать так, чтобы при этом качество было высоким – еще сложнее. В этой статье мы расскажем о простом методе регуляризации нейронных сетей, используемом нами в Smart Engines для улучшения качества «мобильных» сетей с малым числом параметров. Идея метода основана на постепенном уменьшении линейной зависимости фильтров в сверточных слоях во время обучения, благодаря чему каждый нейрон работает более эффективно, и следовательно, улучшается обобщающая способность модели. Для этого мы в представляем фильтры в виде одномерных векторов и ортогонализируем пару с наибольшей длиной проекции друг на друга.
При проектировании большинства современных нейронных сетей подразумевается, что они будут выполняться где-нибудь удаленно на сервере, а данные для обработки будут поступать через клиент на ПК или мобильном устройстве. Однако такой подход недопустим, когда речь заходит о безопасности личных данных, передавать которые куда-либо не хочется (например, фото паспорта или банковской карты для распознавания). К счастью для нас, мобильные устройства сегодня обладают достаточными мощностями для запуска нейронных сетей, благодаря чему можно избежать пересылки данных третьим лицам. Другое дело, что эти сети должны быть небольшими и содержать малое количество операций, чтобы не испытывать терпение пользователя. Такие условия ограничивают максимально достижимое качество их работы, и какими способами можно улучшать “легкие” сети без ущерба для времени выполнения – открытый вопрос. Размышляя над этим, нами был придуман новый метод регуляризации в нейронных сетях, ориентированный на компактные сети и заключающийся в ортогонализации сверточных фильтров.
Пост является краткой версией доклада «Convolutional neural network weights regularization via orthogonalization», представленного в ноябре 2019 года на международной конференции ICMV 2019, г. Амстердам, Нидерланды.
Идея регуляризации с помощью ортогонализации
Так как предлагаемый метод относится к регуляризации, сначала напомним вкратце что это такое. Регуляризация заключается в накладывании на модель некоторых ограничений на основе наших представлений о том, как должна решаться поставленная задача. Как результат – повышается обобщающая способность сети. Например, L1 регуляризация способствует занулению части весов делая сеть разряженной, L2 – сдерживает значения коэффициентов в пределах малых чисел, Dropout устраняет зависимости отдельных нейронов, и т.д. Эти методы являются неотъемлемой частью процесса обучения многих современных сетей, особенно если они содержат большое число параметров – регуляризация позволяет достаточно неплохо бороться с переобучением.
Теперь вернемся к нашему методу. Оговоримся сразу, что прежде всего мы рассматриваем задачу классификации изображений сверточной нейронной сетью. Предположение, на основе которого мы пришли к использованию ортогонализации, следующее: если сеть крайне ограничена в своих ресурсах для понятия закономерностей в данных, то нужно заставить каждый нейрон в ней работать максимально эффективно, и чтобы он выполнял строго отведенную ему функцию. Иначе говоря, чтобы он “выцеплял” такие особенности, которые любой другой нейрон обнаружить неспособен. Решаем мы эту задачу за счет постепенного уменьшения линейной зависимости между векторами весов нейронов во время обучения. Для этого мы модифицировали классический алгоритм ортогонализации, адаптировав его под реалии процесса обучения.
Ортогонализация сверточных фильтров
Определим фильтры сверточного слоя как множество векторов


Проекция вектора f[SUB]g[/SUB] на f[SUB]k[/SUB] может быть вычислена как


следующей формулой:

где η это скорость обучения и wort коэффициент ортогонализации, значения которого лежат на отрезке [0.0, 1.0]. Введение коэффициента ортогонализации обусловлено тем, что “мгновенная” ортогонализация фильтров сильно ломает процесс обучения, сводя на нет планомерные изменения весов за прошлые итерации. Малые значения wort сохраняют динамику обучения и способствуют плавному уменьшению линейной зависимости между фильтрами в каждом слое по отдельности. Отметим еще раз важный момент в методе: за одну итерацию мы модифицируем только один вектор, чтобы не навредить алгоритму оптимизации.

Рис. Визуализация одной итерации.
Мы рассматриваем ортогонализацию только сверточных фильтров, так как в современных нейронных сетях сверточные слои составляют большую часть архитектуры. Однако, алгоритм легко обобщается и на веса нейронов в полносвязных слоях.
Эксперименты
Перейдем от теории к практике. Для экспериментов мы решили использовать 2 самых популярных датасета для оценки нейросетей в области компьютерного зрения – MNIST (классификация изображений рукописных цифр) и CIFAR10 (фотографии 10 классов – лодки, грузовики, лошади, и т.д.).
Так как мы предполагаем, что ортогонализация будет полезна в первую очередь для компактных сетей, мы взяли LeNet подобную архитектуру в 3 модификациях, отличающихся друг от друга количеством фильтром в сверточных слоях. Архитектура нашей сети, которую для удобства назовем LeNet 1.0, приведена в таблице 1. Производные от нее архитектуры LeNet 2.0 и LeNet 3.5 отличаются большим числом фильтров в сверточных слоях, в 2 и в 3.5 раза соответственно.
Выбирая функцию активации, мы остановились на ReLU не только по причине того, что это самая популярная и вычислительно эффективная функция (напоминаем, что мы все еще говорим про быстрые сети). Дело в том, что применение не кусочно-линейных функций сводит на нет эффект ортогонализации: например, гиперболический тангенс сильно искажает входные вектора так как имеет ярко выраженную нелинейность в областях, близких к насыщению.
Таблица 1. Архитектура сети LeNet 1.0, используемая в экспериментах.
Слои |