Как стать автором
Поиск
Написать публикацию
Обновить

Реверс-инжиниринг искусного двоичного сложения в нейросети

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров4.4K
Всего голосов 15: ↑11 и ↓4+9
Комментарии11

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

Я правильно понимаю, что сеть сделала два ЦАП на входе, потом аналоговый сумматор, потом АЦП на выходе?

Окей, вопрос снимается. Это перевод. И перевод сделанный человеком, который не понимает что переводит. Вот например:

Оригинал:

The main difference is that the weights are duplicated between each of the two 8-bit inputs.

Перевод:

Основное отличие заключается в том, что там веса удваиваются между двумя 8-битными входами.

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

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

Нет. Дословный перевод тут ни при чем. Нужен кто-то, кто понимает смысл. Переводчик, редактор, корректор... Хоть кто-нибудь.

Тут в соседнем посте уже дословно перевели "pointer aliasing" и получилось у них "сглаживание указателей". Видите в чем тут ошибка?

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

На мой взгляд инженера-электрика всё там было правильно написано. Если вы посмотрите, то на рисунке 8 входов (битов) подключаемых к резисторам, у которых номинал удваивается от "младшего бита" к "старшему". Прочёл "исправленную" версию статьи и сразу глаз резануло. Там же так и написано "between each of the two 8-bit inputs" - между каждыми двумя битами 8-битных входов.
Нейросеть уловила смысл верно.

Кажется, вы неправильно перевели "between each of the two 8-bit inputs". Оно переводится как "между каждым из двух 8-битных входов". То что веса удваиваются на каждый следующий бит - это само собой. Но если мы рассматриваем два восьмибитных входа, то веса у них должны совпадать (для каждого бита отдельно, конечно же). Собственно, веса там получились не одинаковые, но очень близкие. Сравните первых восемь вторых восемь строк.

На всякий случай - у сети есть 16 входов и 8 выходов. Она правильно поняла, что 16 входов - это на самом деле два восьмибитных числа. Т.е. два 8-битных входа. На каждый отдельный 8-битный вход она сгенерировала классический взвешивающий ЦАП, где да, вес каждого следующего бита удваивается.

Реверс-инжиниринг простых нейронок это на самом деле весьма интересно. Но жалко что это приходится делать вручную - как я понимаю, никаких формальных методов и алгоритмов здесь нет.
Мне вот интересно, что бы построила нейронка, если бы ее попросили считать базовые математические функции типа y=sin(x), на 8-битных входах и выходах (с представлением чисел в формате "фиксированная точка").

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

И да и нет. В шедевральном "bugbrain" задания выполняются единицами нейронов, у https://ru.wikipedia.org/wiki/Морские_зайцы_(моллюски) ~20000 нейронов, у https://ru.wikipedia.org/wiki/Caenorhabditis_elegans 302, что не мешает им решать свои задачи, требующие довольно сложного поведения. Но вот с абстракцией, рефлексией, любопытством у них никак. Чтобы стать живым зеркалом Вселенной нужно много знаний, и если мы хотим уметь в аналогию, кусочки этих знаний должны соприкасаться и взаимопроникать. Эволюция очень скупой завхоз, 50 млрд. нейронов так просто не выдаёт.

цитата из The Bitter Lesson :

We want AI agents that can discover like we can, not which contain what we have discovered. Building in our discoveries only makes it harder to see how the discovering process can be done.

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