AlphaCode: как ИИ решает задачи уровня олимпиад

Yannic Kilcher 11,8 тыс. 45 мин 2 мин 01.03.2022
Главное

🧠 Будущее программирования: Как DeepMind создали AlphaCode 2:13

Автоматизация написания кода — одна из самых амбициозных задач в области искусственного интеллекта. Исследователи из DeepMind представили AlphaCode, систему, способную участвовать в реальных соревнованиях по спортивному программированию на уровне среднего человека-участника. В отличие от привычных инструментов автодополнения кода, AlphaCode решает сложные алгоритмические задачи, которые требуют нестандартного мышления, а не просто написания SQL-запросов.

🧩 Что такое задача для AlphaCode? 3:30

Проблема, с которой сталкивается алгоритм, представлена на естественном языке, что делает её схожей с заданиями для человека. Типичная задача включает:

По словам Янника Кильхера, самой сложной частью является то, что алгоритм должен учитывать все возможные «краевые случаи» (edge cases), такие как пустые входные данные или специфические ограничения. Даже для программиста-человека задача такого уровня — это серьёзное испытание, требующее построения полноценного алгоритма.

⚙️ Архитектура и методы обучения 8:07

AlphaCode базируется на архитектуре трансформеров, но имеет ряд инженерных особенностей, направленных на повышение эффективности и скорости генерации.

  1. Encoder-Decoder модель: Янник Кильхер отмечает, что выбор такой архитектуры вместо стандартного декодера (как в GPT) позволяет сделать кодировщик более «мелким» (shallow), а декодер — глубоким. Это решение помогает ускорить процесс обучения и генерации, так как кодировщик обрабатывает описание один раз, в то время как декодер работает авторегрессивно.
  2. Масштабируемая выборка: Ключ к успеху — генерация огромного количества вариантов решения (до одного миллиона) для каждой задачи.
  3. Фильтрация и кластеризация:
    • Фильтрация: Программы тестируются на примерах из условий задачи. Более 99% сгенерированных вариантов отсеиваются на этом этапе как нерабочие.
    • Кластеризация: Оставшиеся решения группируются по их поведению на случайных входных данных. Поскольку разные коды могут быть семантически эквивалентны (делать одно и то же), система выбирает по одному представителю из каждого кластера для итоговой отправки на сервер.

📈 Результаты и масштабирование 28:17

Янник Кильхер подчеркивает, что результаты AlphaCode демонстрируют прямую зависимость производительности от вычислительных ресурсов.

🤔 Критические вопросы и выводы 42:15

Одним из интригующих наблюдений является поведение функции потерь (loss) на валидационном наборе данных. Кильхер замечает, что с течением обучения она может расти, что обычно указывает на переобучение, однако «настоящая метрика» — доля решенных задач (solve rate) — продолжает расти.

По мнению Кильхера, это намекает на то, что существующие методы обучения (например, кросс-энтропия) не совсем идеальны для задач, где к одному условию может быть применимо множество правильных, но различных решений. Он задается вопросом: не пора ли нам переосмыслить функцию потерь для моделей генерации кода?

💬 Цитаты

«Это безумие, ведь предыдущие системы даже близко не приближались к человеческому уровню.»

Янник Кильхер 00:41

«Это не просто какой-то фрагмент кода, это полноценный алгоритм.»

Янник Кильхер 06:34

«Есть много способов написать неправильный код.»

Янник Кильхер 20:38
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Encoder-Decoder
Архитектура нейросети, где кодировщик сжимает вход, а декодер генерирует выходную последовательность.
Авторегрессия
Метод генерации, при котором каждый следующий токен предсказывается на основе предыдущих.
Кросс-внимание (Cross-attention)
Механизм, позволяющий декодеру учитывать информацию из кодировщика при генерации.
Фаззинг (Fuzzing)
Метод тестирования, при котором программе подаются случайно сгенерированные входные данные.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект AlphaCode DeepMind Янник Кильхер трансформер автоматическое программирование