Документация на русскомDouZero — это фреймворк обучения с подкреплением для игры DouDizhu (斗地主), самой популярной карточной игры в Китае. Цель этой игры типа "слив" — как можно скорее избавиться от всех карт в руках, передав их другим игрокам. DouDizhu представляет собой очень сложное поле соперничества, сотрудничества, неполной информации, большого пространства состояний и особенно огромного множества возможных действий, где легальные действия значительно различаются от хода к ходу. DouZero был создан командой AI Platform компании Kwai Inc. (快手).
*知乎:https://zhuanlan.zhihu.com/p/526723604
Разные ресурсы: Вы слышали о данных-центричной искусственной интеллект? Пожалуйста, проверьте нашу опрос по данным-центричному ИИorg/abs/2303.10158) и awesome данные-центричные ИИ ресурсы! Комьюнити:
Slack: Обсуждение в канале DouZero.
Группа QQ: Присоединяйтесь к нашей группе QQ для обсуждения. Пароль: douzeroqqgroup * Группа 1: 819204202
Новости:
Если вы считаете этот проект полезным для ваших исследований, пожалуйста, цитируйте нашу статью:Zha, Daochen et al. "DouZero: Овладение игрой DouDizhu с помощью самообучения глубинного обучения с подкреплением." ICML (2021).
@InProceedings{pmlr-v139-zha21a,
title = {DouZero: Овладение игрой DouDizhu с помощью самообучения глубинного обучения с подкреплением},
author = {Zha, Daochen and Xie, Jingru and Ma, Wenye and Zhang, Sheng and Lian, Xiangru and Hu, Xia and Liu, Ji},
booktitle = {Программы Международной конференции по машинному обучению},
pages = {12333--12344},
year = {2021},
editor = {Meila, Marina and Zhang, Tong},
volume = {139},
series = {Программы исследования машинного обучения},
month = {18--24 июля},
publisher = {PMLR},
pdf = {http://proceedings.mlr.press/v139/zha21a/zha21a.pdf},
url = {http://proceedings.mlr.press/v139/zha21a.html},
abstract = {Игры являются абстракциями реального мира, где искусственные агенты учатся соперничать и сотрудничать с другими агентами. Хотя значительные достижения были сделаны в различных играх с полной и неполной информацией, DouDizhu (также известная как "Борьба с землевладельцем"), трехкарточная игра для трёх игроков, остаётся нерешённой. DouDizhu представляет собой очень сложную область с соперничеством, сотрудничеством, неполной информацией, большим пространством состояний и особенно огромным множеством возможных действий, где легальные действия значительно различаются от хода к ходу. К сожалению, современные алгоритмы обучения с подкреплением в основном сосредоточены на простых и маленьких пространствах действий, и неудивительно, что они показывают недостаточный прогресс в DouDizhu.}
}
```В этой работе мы предлагаем концептуально простую, но эффективную систему искусственного интеллекта для игры DouDizhu, называемую DouZero, которая усиливает традиционные методы Монте-Карло с использованием глубоких нейронных сетей, кодирования действий и параллельных акторов. Начиная с чистого поля на одном сервере с четырьмя GPU, DouZero превзошла все существующие программы искусственного интеллекта для игры DouDizhu за несколько дней обучения и заняла первое место среди 344 программ искусственного интеллекта на лидерборде Botzone. Создание DouZero демонстрирует, что классические методы Монте-Карло могут быть адаптированы для получения сильных результатов в сложной области с большим пространством действий. Исходный код и онлайн-демо доступны по адресу https://github.com/kwai/DouZero с надеждой, что этот подход может мотивировать будущие работы.
### ## Что делает DouDizhu сложной?Кроме вызова неполной информации, DouDizhu имеет огромное пространство состояний и действий. В частности, пространство действий в DouDizhu составляет \(10^4\) (см. [этот таблицу](https://github.com/datamllab/rlcard#available-environments)). К сожалению, большинство алгоритмов обучения с подкреплением могут обрабатывать только очень маленькие пространства действий. Кроме того, игроки в DouDizhu должны как конкурировать, так и сотрудничать с другими в частично-наблюдаемой среде с ограниченной коммуникацией, то есть два игрока "крестьян" будут играть за одну команду против игрока "землевладелец". Моделирование как конкуренции, так и сотрудничества является открытой исследовательской задачей.
В этой работе мы предлагаем алгоритм Глубокого Монте-Карло (Deep Monte Carlo, DMC) с кодированием действий и параллельными актёрами. Это приводит к очень простому, но удивительно эффективному решению для DouDizhu. Подробнее читайте в [нашей статье](https://arxiv.org/abs/2106.06135).
## Установка
Код тренировки предназначен для GPU. Поэтому вам нужно установить CUDA, если вы хотите обучать модели. Вы можете обратиться к [этому руководству](https://docs.nvidia.com/cuda/index.html#installation-guides). Для оценки CUDA необязательна, и вы можете использовать CPU для оценки.
Сначала клонируйте репозиторий с помощью (если вы в Китае и GitHub медленный, вы можете использовать зеркало на [Gitee](https://gitee.com/daochenzha/DouZero)):```bash
git clone https://github.com/kwai/DouZero.git
Убедитесь, что установлен Python версии 3.6+. Установите зависимости:
cd douzero
pip3 install -r requirements.txt
Мы рекомендуем установить стабильную версию DouZero с помощью
pip3 install douzero
Если вы в Китае и вышеупомянутая команда слишком медленная, вы можете использовать зеркало, предоставленное университетом Циньхуа:
pip3 install douzero -i https://pypi.tuna.tsinghua.edu.cn/simple
или установите последнюю версию (она может быть нестабильной):
pip3 install -e .
```Обратите внимание, что пользователи Windows могут использовать только CPU в качестве акторов. Смотрите [Проблемы в Windows](README.md#issues-in-windows) о том, почему не поддерживаются GPU. Тем не менее, пользователи Windows всё ещё могут [локально запустить демо](https://github.com/datamllab/rlcard-showdown).
## Обучение
Чтобы использовать GPU для обучения, выполните
```bash
python3 train.py
Это обучит DouZero на одном GPU. Чтобы обучить DouZero на нескольких GPU, используйте следующие аргументы.
--gpu_devices
: какие GPU устройства видимы--num_actor_devices
: сколько из GPU устройств будет использоваться для симуляции, то есть самопроигрывания--num_actors
: сколько процессов акторов будет использоваться для каждого устройства--training_device
: какое устройство будет использоваться для обучения DouZeroНапример, если у вас есть 4 видеокарты, где вы хотите использовать первые три видеокарты для симуляции с 15 актёрами каждая и четвёртую видеокарту для обучения, можно запустить следующую команду:
python3 train.py --gpu_devices 0,1,2,3 --num_actor_devices 3 --num_actors 15 --training_device 3
Для использования обучения на CPU или симуляции (Windows может использовать только CPU для акторов), используйте следующие аргументы:
--training_device cpu
: Использует CPU для обучения модели--actor_device_cpu
: Использует CPU как акторовНапример, используйте следующую команду для выполнения всего на ЦПУ:python3 train.py --actor_device_cpu --training_device cpu
Следующая команда выполняет актёров только на ЦПУ:
python3 train.py --actor_device_cpu
Для более специфической конфигурации обучения, воспользуйтесь следующими необязательными аргументами:
--xpid XPID Experiment ID (default: douzero)
--save_interval SAVE_INTERVAL
Интервал времени (в минутах), через который модель будет сохраняться
--objective {adp, wp} Использует ADP или WP в качестве цели (по умолчанию: ADP)
--actor_device_cpu Использует ЦПУ как устройство актёров
--gpu_devices GPU_DEVICES
Какие видеокарты будут использоваться для обучения
--num_actor_devices NUM_ACTOR_DEVICES
Количество устройств, используемых для симуляции
--num_actors NUM_ACTORS
Количество актёров для каждого устройства симуляции
--training_device TRAINING_DEVICE
Индекс видеокарты, используемой для обучения моделей. `cpu` означает использование ЦПУ
--load_model Загружает существующую модель
--disable_checkpoint Отключает сохранение контрольной точки
--savedir SAVEDIR Корневая директория, куда будут сохранены данные эксперимента
--total_frames TOTAL_FRAMES
Общее количество окружений для обучения
--exp_epsilon EXP_EPSILON
Вероятность для исследования
--batch_size BATCH_SIZE
Размер пакета обучения
--unroll_length UNROLL_LENGTH
Длина развертки (временная размерность)
--num_buffers NUM_BUFFERS
``` Количество буферов общего доступа
--num_threads NUM_THREADS
Количество потоков обучения
--max_grad_norm MAX_GRAD_NORM
Максимальная норма градиентов
--learning_rate LEARNING_RATE
Скорость обучения
--alpha ALPHA Константа сглаживания RMSProp
--momentum MOMENTUM Импульс RMSProp
--epsilon EPSILON Эпсилон RMSProp
```## Оценка
Оценка может быть выполнена с использованием GPU или CPU (GPU будет намного быстрее). Предобученная модель доступна по ссылкам [Google Drive](https://drive.google.com/drive/folders/1NmM2cXnI5CIWHaLJeoDZMiwt6lOTV_UB?usp=sharing) или [百度网盘](https://pan.baidu.com/s/18g-JUKad6D8rmBONXUDuOQ),提取码: 4624. Установите предобученные веса в папку `baselines/`. Оценка производится через самопрокладывание. Мы предоставили предобученные модели и некоторые эвристики как базовые линии:
* [случайный](douzero/evaluation/random_agent.py): агенты, играющие случайно (равномерно)
* [rlcard](douzero/evaluation/rlcard_agent.py): правило-основной агент в [RLCard](https://github.com/datamllab/rlcard)
* SL (`baselines/sl/`): предобученные глубокие агенты на данных людей
* DouZero-ADP (`baselines/douzero_ADP/`): предобученные агенты DouZero с целью среднего значения очков (Average Difference Points, ADP)
* DouZero-WP (`baselines/douzero_WP/`): предобученные агенты DouZero с целью процента побед (Winning Percentage, WP)### Шаг 1: Генерация данных для оценки
```bash
python3 generate_eval_data.py
Некоторые важные гиперпараметры указаны ниже.
--output
: куда будут сохранены сериализованные данные--num_games
: количество случайных игр, которое будет сгенерировано, значение по умолчанию — 10000### Шаг 2: Самопрокладываниеpython3 evaluate.py
Некоторые важные гиперпараметры указаны ниже.
--landlord
: какой агент будет играть за землевладельца, что может быть случайным, rlcard или путь предобученной модели--landlord_up
: какой агент будет играть за землевладельца верхней части (тот, кто играет перед землевладельцем), что может быть случайным, rlcard или путь предобученной модели--landlord_down
: какой агент будет играть за землевладельца нижней части (тот, кто играет после землевладельца), что может быть случайным, rlcard или путь предобученной модели--eval_data
: пикл-файл, содержащий данные для оценки--num_workers
: количество подпроцессов, которое будет использоваться--gpu_device
: какой GPU использовать. По умолчанию используется CPU. Например, следующая команда оценивает DouZero-ADP в позиции землевладельца против случайных агентовpython3 evaluate.py --landlord baselines/douzero_ADP/landlord.ckpt --landlord_up random --landlord_down random
Следующая команда оценивает DouZero-ADP в позиции крестьян против агентов RLCard
python3 evaluate.py --landlord rlcard --landlord_up baselines/douzero_ADP/landlord_up.ckpt --landlord_down baselines/douzero_ADP/landlord_down.ckpt
По умолчанию наша модель будет сохраняться в douzero_checkpoints/douzero
каждые полчаса. Мы предоставляем скрипт, чтобы помочь вам определить самый свежий чекпоинт. Выполните
sh get_most_recent.sh douzero_checkpoints/douzero/
Самая свежая модель будет находиться в most_recent_model
.
операция не поддерживается
, если используете систему Windows для обучения с использованием GPU как акторов. Это связано с тем, что многопоточность на CUDA-тензорах не поддерживается в Windows. Однако наш код широко использует CUDA-тензоры, так как он оптимизирован для работы с GPU. Обратитесь к нам, если вы найдете какие-либо решения!## Основная командаВы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )