С помощью глубокого обучения с подкреплением обнаружены более быстрые алгоритмы сортировки
Nature, том 618, страницы 257–263 (2023 г.) Процитировать эту статью
355 тысяч доступов
1 Цитаты
1148 Альтметрика
Подробности о метриках
Фундаментальные алгоритмы, такие как сортировка или хеширование, используются триллионы раз в день1. Поскольку спрос на вычисления растет, становится критически важным, чтобы эти алгоритмы были максимально производительными. Несмотря на то, что в прошлом был достигнут значительный прогресс2, дальнейшее повышение эффективности этих процедур оказалось сложной задачей как для ученых-людей, так и для вычислительных подходов. Здесь мы покажем, как искусственный интеллект может выйти за рамки нынешнего состояния техники, открыв до сих пор неизвестные процедуры. Чтобы реализовать это, мы сформулировали задачу найти лучшую процедуру сортировки в виде однопользовательской игры. Затем мы обучили новому агенту глубокого обучения AlphaDev играть в эту игру. AlphaDev с нуля разработала небольшие алгоритмы сортировки, которые превзошли ранее известные человеческие тесты. Эти алгоритмы были интегрированы в стандартную библиотеку сортировки C++ LLVM3. Это изменение в этой части библиотеки сортировки представляет собой замену компонента алгоритмом, который был автоматически обнаружен с помощью обучения с подкреплением. Мы также представляем результаты в дополнительных областях, демонстрируя общность подхода.
Человеческая интуиция и ноу-хау сыграли решающую роль в совершенствовании алгоритмов. Однако многие алгоритмы достигли стадии, когда люди-эксперты не могут их оптимизировать дальше, что приводит к постоянно растущим вычислительным узким местам. Работы в классической литературе по синтезу программ, охватывающие многие десятилетия, направлены на создание правильных программ и/или оптимизацию программ с использованием прокси-серверов для уменьшения задержки. К ним относятся методы перечислительного поиска4,5,6,7 и стохастический поиск5,6,8,9,10, а также более поздняя тенденция использования глубокого обучения в синтезе программ для создания правильных программ11,12,13,14,15,16 . Используя глубокое обучение с подкреплением (DRL), мы можем сделать еще один шаг вперед, генерируя правильные и производительные алгоритмы, оптимизируя фактическую измеренную задержку на уровне инструкций ЦП, более эффективно находя и рассматривая пространство правильных и быстрых программ по сравнению с предыдущей работой. .
Один из фундаментальных вопросов информатики — как отсортировать последовательность17,18,19,20. Этому преподают на уроках начальной информатики по всему миру21,22 и повсеместно используют в широком спектре приложений23,24,25. Десятилетия исследований в области информатики были сосредоточены на открытии и оптимизации алгоритмов сортировки26,27,28. Ключевым компонентом практических решений является небольшая сортировка по короткой последовательности элементов; этот алгоритм вызывается повторно при сортировке больших массивов, использующих подход «разделяй и властвуй»29. В этой работе мы фокусируемся на двух типах алгоритмов мелкой сортировки: (1) фиксированная сортировка и (2) сортировка переменной. Алгоритмы фиксированной сортировки сортируют последовательности фиксированной длины (например, сортировка 3 может сортировать только последовательности длины 3), тогда как алгоритмы сортировки переменной могут сортировать последовательности переменного размера (например, сортировка переменной 5 может сортировать последовательности от одной до пяти). элементы).
Задачу открытия новых эффективных алгоритмов сортировки мы сформулируем как однопользовательскую игру, которую назовем AssemblyGame. В этой игре игрок выбирает серию инструкций ЦП низкого уровня, которые мы называем ассемблерными инструкциями30, чтобы объединить их в новый и эффективный алгоритм сортировки. Это сложная задача, поскольку игроку необходимо учитывать комбинаторное пространство инструкций ассемблера, чтобы создать алгоритм, который был бы доказуемо правильным и быстрым. Сложность игры-сборки обусловлена не только размером пространства поиска, который аналогичен чрезвычайно сложным играм, таким как шахматы (10120 игр)31 и Го (10700 игр)32, но и характером функции вознаграждения. Одна неверная инструкция в AssemblyGame потенциально может сделать недействительным весь алгоритм, что сделает исследование этого игрового пространства невероятно сложным.