Pull to refresh

Comments 11

Титаническая работа! Отдельно и специально отмечу честность. Хотелось бы такое в академических журналах видеть (по итогам одной все еще продолжающейся возни).

Вопрос: а нельзя ли через "канал обратной связи" от камеры на экран получить что-нибудь дополнительно любопытное? Например, показано, что однослойная система XOR не воспроизводит, а нельзя ли посредством такой обратной связи проэмулировать двухслойную систему?

Вы бы не взялись написать подбробную заметку про какой-то конкретный эксперимент, тот же XOR, так, чтобы и для тех, кто на задней парте? Например, непонятно, камера по всему кадру интегрирует (и тогда, конечно, от обратной связи толку немного), или же есть варианты?

Добавил 102 эксперимент 2-х слойный XOR. Если есть желающие можно делать PR со своими интересными экспериментами.

Спасибо! Было очень интересно проводить исследования, пришли новые идеи и был реализован архиватор https://github.com/infosave2007/bounce и думаю до реализации полностью оптической LLM не далеко! В том виде, как XOR показан в заметке, камера снимает один скаляр: усреднение по центральной области кадра, а оба входа закодированы суммарной яркостью. Поэтому (0,1) и (1,0) физически неразличимы — отсюда и провал, ровно по Минскому–Пейперту. Это не ограничение железа, а самая простая схема считывания, выбранная специально, чтобы провал был честным и наглядным.

Но считывание не обязано быть «по всему кадру». В системе уже используется поблочное считывание (сетка регионов): разные участки экрана и сенсора параллельно вычисляют разные скалярные произведения — так сделаны MatVec и слой трансформера. Это и есть пространственный параллелизм оптики.

Про обратную связь , XOR через неё эмулируется как настоящая двухслойная сеть, двумя способами:

  1. Пространственно. В одном регионе считаем OR, в другом — NAND (оба линейно разделимы, оба проходят). Считываем их по-регионно, и вторым оптическим проходом подаём обратно на экран, где они складываются в AND. Получается XOR = AND(OR, NAND) — два слоя. Нелинейность между слоями даёт сам сенсор (сигмоидоподобный отклик + порог), её не нужно добавлять отдельно.

  2. Во времени. Послесвечение OLED удерживает остаточное состояние — это физическая рекуррентная ячейка, на ней построен LSTM-эксперимент. А обучение прямо замыкает петлю экран→камера и подстраивает физический канал.

При считывании одним числом обратная связь почти бесполезна но как только считываем поблочно, петля экран→камера превращается в полноценный второй слой — и XOR появляется. Добавил документ где подробно расписал про XOR https://github.com/infosave2007/svetoch/blob/master/docs/XOR.pdf

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

Интересно. Но давайте считать минусы. Идеальный сенсор может и даёт 10^8 результатов в секунду, но кто ему столько раз на вход свет поменяет? Светодиодные матрицы мониторов дают миллисекунды в лучшем случае. Потом собственно преобразование. Вы даже сами заметили, что там есть нелинейность. Ну и как её моделировать будем? Управляемо, что бы внимание корректно работало. Архитектур нейросеток существует много, как их всех реализовать? Если выберете самую простую, то возникнут сложности с обучением - как в простую впихнуть качественную нейросетку? А в сетках посложнее и нелинейности тоже поинтереснее становятся. Физическая реализация некой линзы между излучателем и приёмником здесь может оказаться очень сложной.

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

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

Тем не менее - желаю удачи на этом непростом пути!

I. Оптическое нейровычисление на смартфоне (базовый метод)

Почитал и как-то не увидел, а вычисления-то хоть какую-то качествуенную оценку проходили? Пока выглядит как garbage in garbage out. Если в качестве фидбэка возвращать рандомные произвольные данные, а не фидбэк от камеры, то результат также схлопывался?

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

По камере. Код захвата — в app/index.html, браузерный getUserMedia({video: {facingMode:'user'}}) прямо на телефоне. Никакого ADB нет — телефон открывает страницу в Chrome, браузер читает фронтальную камеру. Зеркало физическое, не симулируется. Есть отдельные скрипты для симуляции без телефона делал для предварительного прогона.

А как оно до питона из конкретных работ докатывается? через json?

Телефон (JavaScript в браузере) → getUserMedia читает камеру → считает метрики прямо в JS → делает HTTP POST на server.py с результатами в JSON → server.py (Python) сохраняет в logs/nvg_poc_v3_*.json.

То есть Python вообще не трогает камеру. Вся оптика — это JavaScript на телефоне. Python — это просто HTTP-сервер + хранилище состояния + запись логов. Архитектуру я намеренно упростил по максимуму без WebSocket, без фреймворков.

Засекретитить, развить, захватить мир

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

Sign up to leave a comment.

Articles