Как стать автором
Обновить

Комментарии 20

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


Далее, для такой же точности, дайте угадаю, понадобится сетка, у которой в 32 раза больше весов, чем у классической?

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

P.S. Вот у интела написано что только на этапе обучения используются полные веса
software.intel.com/en-us/articles/binary-neural-networks
1) с обучением как раз всё как-то работает: как один из вариантов решения, в бинарных сетях используется стохастическое обучение. Если backprop даёт 0.65, то это значит, то с вероятностью 0.65 текущий вес поменяется. Плохонько, но работает. Кроме того, пока что не придумали, как к такому прикрутить тот же BatchNorm (хотя Dropout — запросто).
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.
1)… Вроде бы стохастическое это скорее так: у нас есть бинаризованный вес, и есть непрерывный, в расчетах прямого и обратного прохода используем бинаризованный, но вычисленный градиент прибавляем к непрерывному, а его используем как вероятность выбора нового веса для следующего прохода.
Как нормально заменить в традиционной компьютерной архитектуре аналоговое суммирование с 10-100 входов?
Да всё также, умножением на матрицу весов, только веса +-1. Вон, NVidia поддержала 4-битные данные, у нас вот в Нейроматриксе есть умножение на упакованный вектор двухбитных чисел.
ситуация может в очередной раз поменяться только когда вместо 10-1000 ALU на устройстве мы захотим сделать миллионы ALU с собственной памятью, вот тогда бинаризация существенно упростит конструкцию и расход энергии на один ALU.

Вроде как такие вещи хорошо делаются на FPGA, например.
Ага, в теории. А на практике, по ссылке лишь 200к ALUs на 35 вт, и никакой бинаризации. А без бинаризации получилось решение в 5 раз слабее видеокарты, жрущее в 5 раз меньше энергии, и не дешевле.
Вот ещё ссылка, правда здесь уже не коробочный акселератор, а университетское исследование на стартките. В таблице в конце 7.6 TOPs на 8 Вт. В статье они также грубо оценивают вычислительный параллелизм GPU и FPGA, при этом на 1 LUT в среднем по их прикидке выходит 2.5 операции XNOR. Не знаю, корректно ли это считать за АЛУ, но если да, то вот вам порядка миллиона АЛУ на кристалле.
Конечно есть вопросы к их реализации: как и в ссылке на Nallatech, они тоже кодили с использованием средств высокоуровневого синтеза (HLS), вероятно обычным RTL было бы эффективнее по ресурсам и частоте, кроме того, по идее могли бы попробовать вписаться в меньший и более дешёвый кристалл. У них там дорогой Virtex за 5K$, хотя наверно удалось бы влезть в Kintex за 1.5К$.
За пределами FPGA что-то похожее на описанные вами миллионы АЛУ с собственной памятью делают GSI Technology: вот презентация их APU, здесь простейшие вычислители совмещены с ячейками памяти.
Спасибо. Да, многие пытаются, но пока вычислительная эффективность на традиционных дизайнах FPGA не очень высока почему-то… Но энергоэффективность при предсказании при этом раз в 3-10 выше по сравнению с максимальным TDP неспециализированной видюшки, поэтому крупные компании их всё же используют.
Мои догадки: остаётся критичной узкая шина обращения к памяти, и плохо исследованы эффективные под FPGA модификации алгоритмов обучения и предсказания с бинарными весами: предсказания на сетке с прунингом+int8 сейчас работают лучше (заметим, что всё это обычно и исследуется на картинках, где int8 на входе).
Я надеюсь на то, что допилят мемристоры, энергоэффективность ALU повысится, проблема с памятью рядом с вычислениями решится… в результате, аналоговые/float вычисления станут ещё более конкурентноспособными, можно будет делать быстрое обучение прямо на чипе, и одновременно решится проблема быстрого суммирования при inference — в том числе, бинарного.
НЛО прилетело и опубликовало эту надпись здесь
У таких сетей есть еще масса приемуществ. Не обязательно считать всю сеть а можно лишь ее часть. Я считал как то сколько это может быть и уменя вышли такие цифры Для расчета достаточно 3.2% (32 нейрона) при сети в тысячу нейронов, 0.1% (1 тыс) при миллионе «нейронов» в сети и 0.003% (32 тыс) при сети размером в миллиард «нейронов». Цифры могут немного разница от результата расчета, но порядки будут оставаться в близких пределах. Это даст просто огромное приемущество на действительно больших массивах данных. И еще одной свойство это отсутствие эффекта переобуения, то, чем страдает большая часть «аналоговых» алгоритмов.
И еще одной свойство это отсутствие эффекта переобуения, то, чем страдает большая часть «аналоговых» алгоритмов

А можно пруфы?
Не вижу никаких причин для отсутствия переобучения в таких сетях…
Предупреждаю, у этого товарища своё определение «Переобучения», никак не связанное с настоящим переобучением. А ещё свой чудесный алгоритм без «переобучения» (в его формулировке).

Может он имеет ввиду проблемы со значениями весов (которые, правда, фиксятся L1 и L2)?

Нет, у него переобучение — это не когда «на трейне — отлично, на тесте — хреново», а когда с увеличением количества эпох на тренировочной (и единственной, ибо весь тест слит туда) выборке данных не растёт точность.
Его в ods.ai уже на протяжении 5700 сообщений народ переубедить пытается.

Ясно). Давно в этот слек не заходил

А что если вместо одного бита использовать чуть больше: 2 или 4?

Немного иронии, а все потому, что в России нет 5G )

https://arxiv.org/abs/1602.02830
Есть bnn
Возможно речь о них. Вопрос один есть ли готовая библиотека для создания обучения и тестов?

Статья отражает многие современные исследования. На ум приходит компания Numenta, Jeff Howkins with Hierarchical Temporal Memory. У них много есть чего на youtube в том числе очень интересные курсы по HTM. Так вот они тоже все строят на бинарной идее.
Далеко ходить не надо. Наш могз построен на бинарной основе и пока что никакие супер-сложные и быстрые процессоры его не переплюнули. Numenta как раз идет от работы мозга.
Так что, я тоже думаю, что бинарные сети будут рулить.
Похоже, что самая большая проблема на этом пути — в создании "правильного" двоичного железа. Не того, что моделирует плавающую арифметику на двоичной элементной базе, а железа, похожего на HTM.
… и вдогонку. Дискуссии о проблемах имплементирования бинарных сетей на существующих процессорах понятны, но, по большому счету, мало что значат. Как в свое время быстренько выдумали GPU для каких-то там игра, так и сейчас, быстренько сварганят двоичные процессоры для бинарных сетей. С современными компьютерами — это небольшая работа :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации