Ускорение Нейронных Сетей С Помощью Хеширования



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



Ускорение нейронных сетей с помощью хеширования

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

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

Google разработал Тензорный процессор , или ТПУ, впервые представлен публике в 2016 году.

Позже Nvidia представила В100 Графический процессор, описывая его как чип, специально разработанный для обучения и использования искусственного интеллекта, а также для других высокопроизводительных вычислений.

Есть множество других стартапов, которые фокусируются на других типах аппаратные ускорители .

Возможно, они все совершают огромную ошибку.

Эта идея была высказана в работа , который появился в середине марта на сайте arXiv. В нем есть ее авторы, Бэйди Чен , Тарун Медини И Аншумали Шривастава из Университета Райса, утверждают, что, возможно, специальное оборудование, разработанное для работы нейронных сетей, оптимизировано для неправильного алгоритма.

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

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

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

Поэтому, если вы знаете, что это за нейроны, вы можете их просто игнорировать.

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

Но исследователи поняли, что на самом деле они могут сделать это более эффективным способом, взглянув на проблему под другим углом.

«Мы подходим к этому вопросу как к решению проблемы поиска», — говорит Шривастава.

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

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

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

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

Затем вы можете проверить только это одно место, чтобы узнать, хранится ли там это значение.

Исследователи сделали нечто подобное для вычислений с использованием нейронных сетей.

Следующий пример поможет проиллюстрировать их подход: Допустим, мы создали нейронную сеть, распознающую рукописные цифры.

Допустим, входные данные — это серые пиксели в массиве 16х16, то есть всего 256 чисел.

Подадим эти данные в один скрытый слой из 512 нейронов, результаты активации которого подаются в выходной слой из 10 нейронов, по одному на каждую из возможных цифр.



Ускорение нейронных сетей с помощью хеширования

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

Здесь хеш H1 входных значений используется для поиска соответствующих нейронов в первом скрытом слое — в данном случае нейронов 2 и 4. Второй хеш H2 показывает, какие нейроны из второго скрытого слоя будут вносить свой вклад. Эта стратегия уменьшает количество активаций, которые необходимо рассчитать.

Такую сеть довольно сложно обучить, но давайте пока проигнорируем этот момент и представим, что мы уже настроили все веса каждого из нейронов так, чтобы нейросеть прекрасно распознавала рукописные числа.

Когда он получит на вход разборчиво написанное число, активация одного из выходных нейронов (соответствующего этому числу) будет близка к 1. Активации остальных девяти будут близки к 0. Классически работа такого не -сеть требует одного умножения матрицы для каждого из 512 скрытых нейронов и еще одного для каждых выходных, что дает нам много умножений.

Исследователи придерживаются другого подхода.

Первым шагом является хеширование весов каждого из 512 нейронов скрытого слоя с использованием «локально-зависимого хэширования», одним из свойств которого является то, что аналогичные входные данные дают одинаковые хеш-значения.

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

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

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

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

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

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

Вы получаете ответ быстро, потому что для поиска используете хеши.

И тогда вы сможете просто посчитать активацию небольшого количества нейронов, которые действительно имеют значение.

Исследователи использовали эту технику, которую они называют SLIDE (Sub-LInear Deep Learning Engine), для обучения нейронной сети — процесса, вычислительные требования которого превышают предполагаемое использование нейронной сети.

Затем они сравнили производительность алгоритма обучения с более традиционным подходом, использующим мощный графический процессор, в частности, графический процессор Nvidia V100. В конце концов они придумали нечто потрясающее: «Наши результаты показывают, что на среднем процессоре технология SLIDE может работать на порядки быстрее, чем лучшая возможная альтернатива, реализованная на лучшем оборудовании и с любой точностью».

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

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

Теги: #Машинное обучение #искусственный интеллект #нейронные сети #хэши
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.