[Перевод] Как работают двоичные нейронные сети, и почему они будут популярными в 2020-м

Нейросети — штука классная, однако их потенциал до сих пор ограничивают стоимость и энергия; с этим, возможно, помогут справиться двоичные нейросети


19c0aa548bda936bff50c7d1bc286d3e.png

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

За последнее десятилетие сложность и способности нейросетей значительно выросли. Совместно с беспрецедентным ростом мощностей недорогих и доступных суперкомпьютеров и графических процессоров (GPU) они вышли на передний план в качестве метода по умолчанию для решения задач, распознавания закономерностей и обнаружения аномалий. Сегодня организации используют их для составления прогнозов, исследования предпочтений пользователей, подтверждения данных и управления риском.
Но, несмотря на такое их активное использование, у них есть свои недостатки, ограничивающие их потенциал. Святой Грааль — это нейросеть, способная быстро анализировать информацию, будучи недорогой и не жадной до энергии. Создать удовлетворяющую этим критериям сеть — сложная задача, но её нужно решить, чтобы мы смогли воспользоваться преимуществами нейросетей ближе к краю IT и сетей связи, а также на оконечных устройствах.

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

Как работают нейросети


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

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

Второй слой может искать глаза (чёрный круг внутри белого), рты (набор белых прямоугольников, расположенных рядом, и окружённых кожей), следующей слой может искать два глаза надо ртом и с кожей вокруг. Каждый признак даёт каждому сегменту изображения оценку вероятности присутствия нужного признака в этой части фотографии. Затем эти вероятности комбинируются, и если достаточное количество слоёв считает, что разыскиваемый признак имеется на фото, то сеть делает заключение, что лицо там есть.

f7e6ad372af0402c237c7e613c5b6462.png
Рис. 1

На рис. 1 (а это фото Барака Обамы) видно, как эти слои анализа и вероятностей суммируются, позволяя сети, работающей с приближёнными значениями, выдавать относительно точный ответ.

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

Недостатки традиционных нейросетей


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

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

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

Как работают двоичные сети


Если обычная нейросеть — это картина Пикассо, то двоичная нейросеть — это грубый карандашный набросок.

Если нейросети присваивают каждому сегменту точно подсчитанную вероятность, то двоичные нейросети, как следует из их имени, сводят вероятные значения к чёрно-белому варианту, то есть, либо к -1 (если сеть считает, что признака в этом фрагменте нет), либо +1 (если он есть).

Теперь взвешенная сумма оценивает каждый признак либо положительно (умножая на +1), либо отрицательно (умножая на -1), и вместо полных перемножений нам нужно рассматривать лишь умножения на +1 и -1.

78b8bd62f28b6d6e53626999cf9890c2.png
Рис. 2

Такой подход жертвует определённой долей точности, но мы можем возместить потери, немного увеличив сеть. Двоичные сети по своей сути гораздо проще.

По сравнению со своими двойниками с плавающей запятой, им требуется в 32 раза меньше места для хранения числа (1 бит вместо 32), и в сотни раз меньше энергии, из-за чего они куда как более применимы для «краевых приложений» типа робомобилей, когда сами устройства могут обработать информацию, не привлекая облачные вычисления.

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

Будущее двоичных сетей


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

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

Таким образом, следующее поколение технологий будет основано на простоте.

© Habrahabr.ru