Одна сеть: JAX и виртуальные глаза
Loading...
The app: one network in Python and JAX

Одна сеть

Одна сеть для картины и всей переписки

Реальная сеть, созданная и обученная здесь: фрагменты картины, глубина, которую предполагает краска, и каждая буква этого разговора — в одном общем пространстве. Никакого предварительного обучения.

Картина, фрагмент за фрагментом

Сеть изучает картину маленькими фрагментами, каждый из которых имеет свой свет, цвет и положение, и запоминает эти слова. Те же веса считывают буквы нити.

Все приложение на Python и JAX

Эта страница и программа ниже — одна сеть. Программа представляет собой полноценное приложение: окно GTK4, градиенты JAX, картина, поток, предсказываемая глубина и общее пространство. Скопируйте или сохраните её, а затем запустите на своем компьютере.

Пятна краски
—
Слова, которые она изучает
—
Буквы, которые она считывает
—
Файлы, которые должны быть вместе
net_gtk.py
net_gtk.py

Что делает это окно

  • Обучайте 300 или 2 000 шагов или остановитесь на полпути; обучение идет в отдельном потоке, поэтому окно остается активным.
  • Нажмите на любой фрагмент картины, и программа сообщит вам слова, которые она сопоставляет с этим фрагментом.
  • Спросите словами — «теплое золото», «темно-синий» — и она подсветит фрагменты, на которые попал запрос.
  • Введите несколько букв, и она выведет список букв, которые ожидает увидеть следующими, с указанием процентов.
  • Вставьте свой текст и нажмите «Learn this instead»: новые буквы получат новые строки в той же таблице, ничего из ранее изученного не будет удалено.
  • Два рисунка под картиной: предсказанная глубина и пространство, где точки — это краска, а квадраты — слова.
  • Сохраните веса в net_weights.json и загрузите их снова в следующий раз.

Как запустить

Одна папка, один файл и картина под названием painting.jpg, если она у вас есть. В Linux в этой папке:

  1. Установите пакеты Python python3 -m pip install jax numpy pillow
  2. Установите GTK4 и привязки для Python sudo apt install python3-gi gir1.2-gtk-4.0
  3. Откройте окно python3 net_gtk.py

В Windows кратчайший путь — MSYS2: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, затем python -m pip install jax numpy pillow, затем python net_gtk.py в том же терминале MSYS2.

На macOS: brew install pygobject3 gtk4, затем python3 -m pip install jax numpy pillow, затем python3 net_gtk.py.

Нет дисплея? python3 net_gtk.py --selftest запустит обучение в терминале и выведет те же числа.

Проверено путем запуска этого файла в терминале с JAX для этой картины и этого потока: 400 шагов → 67% патчей находят свои слова (ошибка изображения 0,68), 2 000 шагов → 95% (0,53), 5 000 шагов → 97% (0,45). Ошибка глубины заканчивается на 0,0003, а ошибка букв падает с 3,05 до 2,90.

Браузер не может запускать Python, поэтому во вкладке отображается файл, а не окно — та же сеть работает в реальном времени выше. Слова, которые она изучает, — это те, которым может научить картина: в этой картине нет синего, поэтому вопрос о синем попадает на золотистые участки. Заголовок буквы знает порядок букв, а не смысл.

Компилятор для Python и JAX выше

В поле содержится прямой проход одной сети. Компилятор читает его, проверяет и записывает дважды: Python для JAX и JavaScript, который выполняется в этой вкладке. Одно дерево, два бэкенда.

Токены
—
Узлы в дереве
—
Функции
—
Python для JAX
JavaScript, запуск здесь

Что вычисляется

    Проверка сравнивает эти числа с результатами той же программы, запущенной в numpy и JAX с теми же начальными весами — значения измерены до создания этой карточки, а не угаданы.

    Что разрешено в языке

    • def name(a, b): с отступом в теле, name = ..., и return ...
    • Числа, имена, скобки, унарный минус, а также + - * / @ для матричного произведения.
    • .T для транспонирования, а также вызовы tanh, sqrt, exp, log, sum, mean, maximum.
    • Любой другой символ останавливает компилятор с указанием строки и колонки вместо того, чтобы гадать.

    Это настоящий компилятор для небольшого языка, а не среда выполнения Python: никаких циклов, классов или импортов. Прямой проход одной сети умещается в него, поэтому один и тот же текст может стать JAX на вашем компьютере и JavaScript в этой вкладке.

    Виртуальные глаза: они видят только пиксели

    Глаз, направленный на монитор: он получает изображение и ничего больше — ни страницы, ни данных, ни сети. Только по этим пикселям он находит края, углы и то, как каждая точка смещается при движении глаза в сторону, и на основе этого восстанавливает положение объектов в пространстве.

    Что видит глаз углы — синим, движение — оранжевым
    Границы Градиенты Собеля
    Движение Поток Лукаса — Канаде
    Воссозданная комната перетащите, чтобы повернуть
    Просмотрено кадров
    0
    Углы
    0
    Отслеживается
    0
    Медианное движение
    —
    Глубина найдена
    —
    Точки в пространстве
    0
    Один кадр
    —

    Глубина — это реальная геометрия, но только в пределах шага глаза и только там, где у изображения есть текстура — однотонная заливка не дает зацепок. Видеть, где стоит стена, не значит знать, что это стена, и ничто здесь не создает мир: комната выше — это измеренные пиксели.

    Ваша идея и то, что всё ещё потребуется

    • Глаза, смотрящие на монитор, — это настоящий интерфейс: модели, которая считывает экран так же, как человек, не нужен плагин для каждой программы — всё видимое уже является входными данными.
    • Из двух кадров движущегося глаза вы получаете геометрию, с которой должна согласовываться модель мира; эту часть данная карточка реализует по-настоящему.
    • Для генерации мира в реальном времени также нужна модель, которая придумывает то, чего никто не видел, сохраняет согласованность при повороте и работает за миллисекунды — этого нет во вкладке, и страница не может её обучить.
    • Честный предел: этот глаз восстанавливает положение вещей, а не их смысл. Скорость видения — это не понимание, и одно гораздо проще другого.

    Изображение: общественное достояние, скан «Тайной вечери» Леонардо да Винчи, Wikimedia Commons.