В видеообзоре известного исследователя искусственного интеллекта Янника Кильхера рассматривается революционная научная работа, посвященная системе DreamCoder. Эта нейросимволическая платформа способна решать сложные концептуальные задачи путем автоматического написания программ на собственном синтезируемом языке программирования. Главная идея исследования заключается в синергии байесовского подхода и глубоких нейросетей для имитации человеческой способности к обобщению на основе единичных примеров с помощью трехфазного алгоритма «бодрствование-сон» (wake-sleep).
🧩 Проблема обобщения и ограничения классического машинного обучения 0:00
В начале материала ведущий предлагает зрителям простую ментальную задачу: взглянуть на короткий неупорядоченный ряд чисел и определить, какой массив должен находиться на месте знака вопроса. Человеческий разум мгновенно распознает паттерн и понимает, что перед ним алгоритм сортировки, требующий расставить числа по возрастанию. Янник Кильхер подчеркивает, что эта тривиальная для человека операция обнажает фундаментальное ограничение современного машинного обучения, которое исследователи долгое время не могли преодолеть. Человек способен обучаться на базе крайне малого количества примеров и мгновенно переносить этот опыт на новые ситуации, формируя абстрактные правила.
Классические нейросети функционируют принципиально иначе. Вместо вывода логических правил они полагаются на brute force (грубую силу) — оптимизацию параметров через градиентный спуск по огромным массивам размеченных данных. Даже если человек изначально не знает, что такое «сортировка», он самостоятельно формулирует алгоритм: сравнивает числа, выбирает наименьшее, затем ищет следующее по величине и так далее. Суть представленной научной работы сводится к тому, чтобы заставить искусственный интеллект решать проблемы человеческим способом — не подгонкой весов в непрерывном пространстве, а генерацией дискретных правил и программ. Подобный подход к программному синтезу существовал и раньше, однако авторам DreamCoder впервые удалось сделать его по-настоящему масштабируемым.
⚙️ Архитектура DreamCoder и концепция Wake-Sleep 1:46
Рассматриваемая Янником статья называется «DreamCoder: Growing generalizable, interpretable knowledge with wake-sleep bayesian program learning». Ее авторами является большая группа исследователей, среди которых Кевин Эллис (Kevin Ellis), Кэтрин Вонг (Catherine Wong), Максвелл Най (Maxwell Nye), Маттиас Абель (Mathias Sable-Meyer), Люк Хьюитт (Luke Hewitt), Армандо Солар-Лесама (Armando Solar-Lezama) и Джошуа Тененбаум (Joshua B. Tenenbaum). Как декларируют сами разработчики, DreamCoder представляет собой систему, которая учится решать задачи, самостоятельно создавая код. Интеллектуальный базис накапливается за счет формирования специализированных языков программирования (DSL — Domain Specific Languages) для выражения концепций конкретной предметной области, в то время как глубокая нейросеть направляет поиск оптимальных программ внутри этих языков.
В отличие от предшествующих попыток программного синтеза, которые упирались в проблему масштабирования из-за ручного проектирования языков или жестко заданных правил перебора, DreamCoder обучается автономно. В основе системы лежит модифицированный алгоритм «бодрствование-сон» (wake-sleep), который поочередно расширяет библиотеку символьных абстракций и тренирует нейросеть на воображаемых или повторно воспроизводимых задачах. Ведущий отмечает чрезвычайно широкий спектр областей, в которых данная архитектура показала свою эффективность:
- Обработка списков (суммирование элементов, удвоение значений, поиск четных чисел).
- Текстовое редактирование и автоматическая генерация регулярных выражений (regex).
- Творческие задачи (создание векторной графики, проектирование устойчивых башен из блоков).
- Символическая регрессия, рекурсивное программирование и автоматическое вычисление физических законов.
👁️ Фаза бодрствования (Wake Phase): нейросимволический поиск 5:08
В фазе бодрствования системе предъявляется конкретная задача в виде нескольких примеров «вход-выход», например, демонстрация трех вариантов сортировки массивов чисел. На выходе DreamCoder должен сгенерировать компактную программу на своем внутреннем языке, которая идеально преобразует левую часть примеров в правую. Поиск ведется на основе двух ключевых принципов: программа обязана безошибочно объяснять все имеющиеся примеры, и она должна быть максимально простой и лаконичной, следуя правилу бритвы Оккама. Вместо громоздких и избыточных решений вроде жестко прописанной хэш-таблицы для конкретных чисел, алгоритм стремится найти фундаментальное, компактное правило.
Главная сложность заключается в колоссальном размере дерева дискретного поиска. Начиная с пустой строки, система может применить любое базовое правило или примитив из своей библиотеки (например, математические операции, функции map или reverse), порождая экспоненциальный взрыв комбинаций. Перебрать такое дерево вслепую вычислительно невозможно. В этот момент подключается единственный глубокообученный компонент системы — нейросеть, выполняющая роль «интуиции». Янник Кильхер сравнивает этот механизм с принципами работы алгоритмов AlphaGo и AlphaZero в шахматах и го: нейросеть оценивает текущее состояние и мгновенно отсекает миллионы бесперспективных ветвей, указывая поисковому алгоритму лишь несколько наиболее вероятных и многообещающих шагов.
Математически в фазе бодрствования максимизируется апостериорная вероятность программы при заданных условиях задачи и текущем состоянии библиотеки примитивов. Согласно формуле Байеса, эта величина пропорциональна вероятности того, что программа генерирует правильный ответ (что для детерминированного кода равно 1 или 0), умноженной на априорную вероятность самой программы, которая напрямую зависит от ее длины и количества шагов поиска. По завершении фазы бодрствования формируется датасет из успешно решенных задач и соответствующих им программ, который затем передается в фазы сна.
🗜️ Фаза сна 1: абстракция и компрессия библиотеки 18:17
Янник Кильхер подчеркивает, что одного лишь управляемого нейросетью поиска недостаточно для синтеза сложных алгоритмов. Исходный код классической сортировки слишком масштабен, и найти его прямой комбинацией базовых низкоуровневых примитивов за разумное время нереально. Единственный путь — постепенное выстраивание иерархии абстрактных концепций, которые делают итоговую программу короткой. Для этого в первой фазе сна DreamCoder берет датасет успешных решений и запускает процесс компрессии (сжатия) накопленной программной библиотеки.
Алгоритм тщательно анализирует структуру найденного кода и выявляет подпрограммы, которые часто используются совместно в различных задачах. Если система замечает, что для достижения цели она регулярно комбинирует одни и те же низкоуровневые правила, она автоматически извлекает эту связку, оформляет ее в виде новой макрофункции и добавляет в свою библиотеку под уникальным идентификатором (например, Concept 4 или Concept 13). В терминах обучения с подкреплением это напоминает концепцию «опций» (options) — высокоуровневых макродействий.
Благодаря этому механизму DreamCoder шаг за шагом переоткрывает базовые инструменты программирования. Не имея изначально встроенных понятий, система может скомпилировать из примитивов функцию фильтрации списка (filter), затем на ее основе построить функцию поиска максимального элемента, далее — функцию нахождения $n$-го по величине элемента, и в конечном итоге процедура сортировки превращается в лаконичный итерационный цикл по длине массива. Процесс оптимизации библиотеки строго формализован: система ищет баланс между усложнением самой библиотеки (она должна оставаться компактной, чтобы не раздувать пространство поиска) и минимизацией длины прикладных программ, переписанных с использованием новых абстракций. Компрессия представляет собой нетривиальную алгоритмическую задачу, поскольку одну и ту же программу можно отрефакторить множеством разных способов.
💤 Фаза сна 2: «Грезы» (Dreaming) и генерация синтетических данных 24:06
Вторая часть фазы сна посвящена обучению нейросети (так называемой модели распознавания), которая направляет поиск во время бодрствования. Имея в распоряжении формальную грамматику текущей библиотеки, DreamCoder способен генерировать новые программы абсолютно случайно, просто комбинируя случайные функции и примитивы. Этот процесс авторы называют «фантазиями» (fantasies). Сгенерированная случайным образом программа запускается на произвольных входных данных из обучающей выборки, и система фиксирует полученный результат на выходе. Таким образом, искусственный интеллект самостоятельно создает для себя новые синтетические задачи, где ему заранее и со стопроцентной точностью известен правильный ответ (исходный программный код). На этих «грёзах» нейросеть обучается в режиме supervised learning (обучения с учителем), оттачивая точность предсказания шагов поиска.
Помимо «фантазий», для тренировки нейросети используются «повторы» (replays) — успешные решения реальных задач, найденные в фазе бодрствования. В ходе экспериментов исследователи установили оптимальный баланс: обучающая выборка во второй фазе сна формируется в пропорции 50/50 из полностью вымышленных программ и повторов реального опыта. Янник Кильхер обращает внимание на критическую важность такого заземления.
По мнению ведущего, если тренировать нейросеть исключительно на случайных фантазиях, система быстро оторвется от реальности, уйдет в деструктивный цикл самообмана и перестанет справляться с настоящими практическими проблемами. Применение фантазий обусловлено соображениями эффективности данных (data efficiency), поскольку генерация собственных «грез» позволяет кардинально ускорить обучение по сравнению с использованием только лишь скудных реальных примеров.
По мнению Янника Кильхера, весь этот процесс напоминает хрупкий карточный домик, стабильность которого критически зависит от грамотно подобранного набора стартовых примитивов и характера задач. Способность генерировать полезные абстракции во сне напрямую связана с тем, насколько гармонично структура создаваемой библиотеки соответствует исследуемой среде.
🧪 Практические эксперименты и повторное открытие законов физики 32:42
В блоке практических испытаний авторы протестировали DreamCoder на задачах генерации векторной графики. Системе давали базовые команды управления виртуальным пером (перемещение, изменение цвета от синего к розовому) и ставили цель — нарисовать сложные геометрические фигуры. По итогам фаз сна DreamCoder самостоятельно выделил из хаотичных движений такие фундаментальные графические примитивы, как функция отрисовки полукруга с настраиваемым радиусом, греческая спираль и S-образная кривая. Более того, алгоритм смог самостоятельно дойти до концепции функций высшего порядка: он создал абстракцию радиальной симметрии, которая принимает на вход другую произвольную подпрограмму и дублирует ее по кругу заданное число раз, формируя сложные фрактальные узоры. При этом сложность «грез» системы росла естественным образом по мере эволюции ее библиотеки, создавая своеобразную внутреннюю учебную программу (curriculum).
В рамках другого эксперимента DreamCoder проверяли на рекурсивном программировании. Снабдив систему абсолютным теоретическим минимумом примитивов, исследователи обнаружили, что ИИ первым делом самостоятельно изобрел классические функции высшего порядка функционального программирования — fold (сжатие/reduce) и unfold (развертывание). Опираясь на них, DreamCoder легко синтезировал сложные рекурсивные алгоритмы обработки списков, которые без построения такой библиотеки имели бы слишком длинный и недостижимый для нейросетевого поиска код.
Особый интерес Янника Кильхера вызвал эксперимент по извлечению законов физики из численных данных наблюдений. Стартуя с простейших математических операций, DreamCoder в процессе абстракции прошел следующий путь:
- Определил операции сложения и вычитания векторов.
- Создал функцию деления на два.
- Самостоятельно синтезировал функцию извлечения квадратного корня.
На базе этих надстроек система в конечном итоге сформулировала закон обратных квадратов, закон всемирного тяготения Ньютона и закон Кулона. При наличии развитой библиотеки итоговый физический закон записывается в виде сверхкороткой программы, состоящей всего из нескольких высокоуровневых правил. Ведущий размышляет над тем, что успех DreamCoder в этой области подсвечивает глубокую загадку нашей Вселенной: почему фундаментальные законы природы так просты, лаконичны и математически изящны, что их можно выразить компактным кодом?
🔮 Ограничения DreamCoder и синергия с ARC-челленджем Франсуа Шолле 44:35
Несмотря на впечатляющие результаты, авторы исследования открыто признают ключевые ограничения текущей версии DreamCoder. Главное из них — неспособность работать в условиях сильного шума и неопределенности, поскольку алгоритм заточен под жесткую дискретную логику и чистые данные. По мнению Янника Кильхера, в текущем виде система не способна «из коробки» решить, например, задачу компьютерного зрения. В реальном мире данные редко бывают идеально структурированными, поэтому дальнейшее развитие программной индукции неизбежно потребует интеграции байесовского поиска с более гибкими вероятностными и глубокими нейросетевыми подходами.
В финальной части обзора ведущий проводит параллель между DreamCoder и знаменитым тестом ARC (Abstraction and Reasoning Corpus), созданным инженером Франсуа Шолле (François Chollet). Суть ARC во многом идентична: человеку или алгоритму дается несколько картинок-примеров с геометрическими трансформациями, и нужно понять логику правила, чтобы применить его к новому объекту. Янник напоминает, что Шолле в своих работах и подкастах часто апеллирует к понятию «базовых знаний» (core knowledge) человека. Сюда входит врожденное интуитивное понимание физики, концепции «объектности» сред, траекторий и границ — например, того, как мяч отскакивает от препятствия.
По мнению Янника Кильхера, для создания полноценного общего искусственного интеллекта (AGI) научному сообществу необходимо найти способ бесшовного соединения двух разных технологических пластов. С одной стороны, это классическое глубокое обучение, которое превосходно справляется с перцепцией — восприятием, распознаванием образов и сглаживанием шумов. С другой стороны — символьные системы типа DreamCoder, реализующие механизмы логики, абстрактного мышления и строгого рассуждения. На текущий момент эффективного способа их одновременного и совместного обучения не найдено, однако ведущий соглашается с авторами статьи, что движение в сторону таких гибридных нейросимволических архитектур является наиболее перспективным вектором развития индустрии ИИ.