Comments 11
Титаническая работа! Отдельно и специально отмечу честность. Хотелось бы такое в академических журналах видеть (по итогам одной все еще продолжающейся возни).
Вопрос: а нельзя ли через "канал обратной связи" от камеры на экран получить что-нибудь дополнительно любопытное? Например, показано, что однослойная система XOR не воспроизводит, а нельзя ли посредством такой обратной связи проэмулировать двухслойную систему?
Вы бы не взялись написать подбробную заметку про какой-то конкретный эксперимент, тот же XOR, так, чтобы и для тех, кто на задней парте? Например, непонятно, камера по всему кадру интегрирует (и тогда, конечно, от обратной связи толку немного), или же есть варианты?
Спасибо! Было очень интересно проводить исследования, пришли новые идеи и был реализован архиватор https://github.com/infosave2007/bounce и думаю до реализации полностью оптической LLM не далеко! В том виде, как XOR показан в заметке, камера снимает один скаляр: усреднение по центральной области кадра, а оба входа закодированы суммарной яркостью. Поэтому (0,1) и (1,0) физически неразличимы — отсюда и провал, ровно по Минскому–Пейперту. Это не ограничение железа, а самая простая схема считывания, выбранная специально, чтобы провал был честным и наглядным.
Но считывание не обязано быть «по всему кадру». В системе уже используется поблочное считывание (сетка регионов): разные участки экрана и сенсора параллельно вычисляют разные скалярные произведения — так сделаны MatVec и слой трансформера. Это и есть пространственный параллелизм оптики.
Про обратную связь , XOR через неё эмулируется как настоящая двухслойная сеть, двумя способами:
Пространственно. В одном регионе считаем OR, в другом — NAND (оба линейно разделимы, оба проходят). Считываем их по-регионно, и вторым оптическим проходом подаём обратно на экран, где они складываются в AND. Получается XOR = AND(OR, NAND) — два слоя. Нелинейность между слоями даёт сам сенсор (сигмоидоподобный отклик + порог), её не нужно добавлять отдельно.
Во времени. Послесвечение 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д принтере из прозрачной смолы массив линзочек с разным фокусом - это и будет матрица умножения.
Оптический компьютер из телефона и зеркала: считаем нейросеть светом