Комментарии 20
Эээм. А что там по обучению этого чуда? "Классические" сетки основаны как раз на аналоговости своих весов. Если это пропадает, то мы не можем шагнуть на маленький шаг.
Далее, для такой же точности, дайте угадаю, понадобится сетка, у которой в 32 раза больше весов, чем у классической?
P.S. Вот у интела написано что только на этапе обучения используются полные веса
software.intel.com/en-us/articles/binary-neural-networks
2) нет, опыты показывают, что float32 хранит в среднем только 5 значащих разрядов. Поэтому примерно ему можно поставить в соответствие 5-10 бинарных нейрончиков (5 при идеальном разбиении, 10 при неидеальном). Итого экономия в 3-6 раз. Но вот прунинг показывает более хорошие результаты — в 10-50 раз…
3) но вообще, нейроны на выходах и так бинарные… но вот что делать со входом? Как нормально заменить в традиционной компьютерной архитектуре аналоговое суммирование с 10-100 входов? тем более, бинаризовав… ну, есть векторные popcnt и and, но это нам чтобы считать каждый нейрон нужно конвертировать результаты в int8/int16, а потом перевести в бинарный вид. вот если железо будет ещё больше заточено на это, то выигрыш может быть ещё в разы или в десятки раз больше, наверное.
но, заметим, что такой же трюк с аккумуляцией и умножением можно применить и для float16 входов… и получаем 100 TFlops на видюшке для подобных же вычислений, и не меньшую эффективность на нейрон, чем с бинарными данными, но без требований стохастической бинаризации, снижающей скорость и качество обучения.
ситуация может в очередной раз поменяться только когда вместо 10-1000 ALU на устройстве мы захотим сделать миллионы ALU с собственной памятью, вот тогда бинаризация существенно упростит конструкцию и расход энергии на один ALU.
Как нормально заменить в традиционной компьютерной архитектуре аналоговое суммирование с 10-100 входов?Да всё также, умножением на матрицу весов, только веса +-1. Вон, NVidia поддержала 4-битные данные, у нас вот в Нейроматриксе есть умножение на упакованный вектор двухбитных чисел.
Конечно есть вопросы к их реализации: как и в ссылке на Nallatech, они тоже кодили с использованием средств высокоуровневого синтеза (HLS), вероятно обычным RTL было бы эффективнее по ресурсам и частоте, кроме того, по идее могли бы попробовать вписаться в меньший и более дешёвый кристалл. У них там дорогой Virtex за 5K$, хотя наверно удалось бы влезть в Kintex за 1.5К$.
За пределами FPGA что-то похожее на описанные вами миллионы АЛУ с собственной памятью делают GSI Technology: вот презентация их APU, здесь простейшие вычислители совмещены с ячейками памяти.
Мои догадки: остаётся критичной узкая шина обращения к памяти, и плохо исследованы эффективные под FPGA модификации алгоритмов обучения и предсказания с бинарными весами: предсказания на сетке с прунингом+int8 сейчас работают лучше (заметим, что всё это обычно и исследуется на картинках, где int8 на входе).
Я надеюсь на то, что допилят мемристоры, энергоэффективность ALU повысится, проблема с памятью рядом с вычислениями решится… в результате, аналоговые/float вычисления станут ещё более конкурентноспособными, можно будет делать быстрое обучение прямо на чипе, и одновременно решится проблема быстрого суммирования при inference — в том числе, бинарного.
И еще одной свойство это отсутствие эффекта переобуения, то, чем страдает большая часть «аналоговых» алгоритмов
А можно пруфы?
Не вижу никаких причин для отсутствия переобучения в таких сетях…
Может он имеет ввиду проблемы со значениями весов (которые, правда, фиксятся L1 и L2)?
Его в ods.ai уже на протяжении 5700 сообщений народ переубедить пытается.
А что если вместо одного бита использовать чуть больше: 2 или 4?
https://arxiv.org/abs/1602.02830
Есть bnn
Возможно речь о них. Вопрос один есть ли готовая библиотека для создания обучения и тестов?
Статья отражает многие современные исследования. На ум приходит компания Numenta, Jeff Howkins with Hierarchical Temporal Memory. У них много есть чего на youtube в том числе очень интересные курсы по HTM. Так вот они тоже все строят на бинарной идее.
Далеко ходить не надо. Наш могз построен на бинарной основе и пока что никакие супер-сложные и быстрые процессоры его не переплюнули. Numenta как раз идет от работы мозга.
Так что, я тоже думаю, что бинарные сети будут рулить.
Похоже, что самая большая проблема на этом пути — в создании "правильного" двоичного железа. Не того, что моделирует плавающую арифметику на двоичной элементной базе, а железа, похожего на HTM.
… и вдогонку. Дискуссии о проблемах имплементирования бинарных сетей на существующих процессорах понятны, но, по большому счету, мало что значат. Как в свое время быстренько выдумали GPU для каких-то там игра, так и сейчас, быстренько сварганят двоичные процессоры для бинарных сетей. С современными компьютерами — это небольшая работа :)
Как работают двоичные нейронные сети, и почему они будут популярными в 2020-м