Пошук без повного дерева
Шахи мають приблизно 10^120 можливих ігор, а го – більше позицій, ніж атомів у спостережуваному всесвіті, тому жоден комп’ютер не може повністю розширити дерево гри для будь-якої з них. Monte Carlo Tree Search (MCTS) обходить цю проблему: замість того, щоб вичерпно розширювати кожен гілку, він будує невелике, хибне дерево, яке росте найшвидше там, де гра дійсно має значення, кероване випадковими розіграшами замість відкаліброваної функцією оцінки.
Алгоритм повторює чотири фази, знову ж таки, поки ви можете собі це дозволити: вибір, розширення, симуляція (також відома як розгортання) та зворотне поширення. Кожна повторення є одним візитом; після тисяч візитів форма дерева сама по собі є відповіддю — дитина кореня з найбільшою кількістю відвідувань є рекомендованим ходом, оскільки кількість відвідувань корелює з тим, що хід витримав перевірку, а не з одним випадковим розгортанням.
Вибір: формула UCB1
Починаючи з кореня, алгоритм спускається по існуючому дереву, завжди вибираючи дитисну вузол, який максимізує бал UCB1 (Верхню Границю Довіри), доки не досягне вузла, що ще не повністю розширений:
UCB1(вузол) = winRate(вузол) + C * sqrt( ln(parentVisits) / nodeVisits ) \_____ експлуатація ____/ \______ дослідження ______/\nПерший член винагороджує рухи, які часто вигравали раніше – експлуатацію. Другий член зростає для будь-якого дитини, яку рідко відвідувалося порівняно з її батьківським вузлом – дослідження – і він росте без обмежень, коли вузол ігнорується, гарантуючи, що кожна дитина врешті-решт буде переглянута, навіть після серії невдалих розгортань. Константа C (два роду в оригінальній формулювання) встановлює баланс; більша C шукає ширше, менша C глибше за перспективними лініями швидше.
UCB1(node) = winRate(node) + C * sqrt( ln(parentVisits) / nodeVisits )
\_____ exploitation ____/ \______ exploration ______/
Расширение, моделирование, обратное распространение
Когда выбор достигает узла с непроверенными ходами, один из них добавляется в дерево как новый узел — расширение. От этого нового узла алгоритм начинает играть развертку: выбираются ходы случайным образом (или по дешевой эвристической политике) до терминального состояния, победа, поражение или ничья. Результат этой одной случайной игры является единственным новым источником информации в этом итерации.
Этот результат затем распространяется обратно вверх по всем узлам, посещенным при спуске — обратное распространение — увеличивая счетчик посещений и общую сумму побед каждого узла. Один развертывание почти бессмысленный шум, но цель UCB1 в том, чтобы тысячи шумных разверток, взвешенные по тому, сколько внимания получило каждое движение, сходились к распределению посещений, которое отслеживает истинную ценность каждого движения лучше, чем любой индивидуальный воспроизвод.
Расширение (Expansion) - добавление новых узлов в дерево поиска. Моделирование (Simulation) - выполнение разверток для оценки значений ходов. Обратное распространение (Backpropagation) - обновление статистики посещений и побед в узлах на основе результатов разверток.
function mctsIteration(root):
node = root
while node.fullyExpanded and node.children.length > 0:
node = argmax(node.children, ucb1) // selection
if not node.isTerminal:
node = expand(node) // expansion: add one child
result = randomRollout(node.state) // simulation
while node !== null:
node.visits += 1
node.wins += result belongs to node's player ? 1 : 0
node = node.parent // backpropagation
Чому випадкові розігрування працюють
Здається, це безвідповідально судити про позицію, граючи її з випадковими ходами, але випадкові розігрування є упередженим, хоч і шумним, оцінкою значення позиції, і MCTS потребує лише відносного порядку між братні ходи, а не точної абсолютної оцінки. Достатньо середню достатню кількість незалежних шумів, і закон великих чисел зробить свою справу. Саме тому MCTS зробив комп’ютерну го змагатися з класичними алгоритмами alpha-beta пошуку, які використовували побудовані вручну функції оцінки, але дерево, яке адаптивно витрачає свої розігрування там, де це важливо, не потребувало такої функції.
Сучасні двигуни покращують розіграш за допомогою навченої політики та мережі оцінювачів значень замість рівномірного випадкового розподілу – це ключова ідея, що стоїть в основі AlphaGo та AlphaZero: нейронна мережа пропонує, які ходи варто розширювати, та оцінює значення позиції безпосередньо, таким чином значно менше випадкових розігрувань потрібно, і MCTS стає каркасом пошуку навколо навченого інтуїтивного розуміння, а не заміною йому.
Де саме блискуча робота MCTS та де він не досягає успіху
MCTS потребує майже нічого з області застосування, крім законних ходів та сигналу перемоги/поразки – не потрібна розроблена вручну функція оцінювання, не потрібно специфічних для домену евристик, щоб отримати розумного гравця. Саме ця загальність пояснює, чому він поширився з Go в загальну гру стратегію в реальному часі, розв’язувачі головоломок та навіть проблеми планування, що не стосуються гри. Він має труднощі в іграх із дуже довгими, дуже глибокими тактичними послідовностями, де випадковий промах у одному з кроків роулінгу неправильно оцінює всю лінію, і йому потрібен спосіб запобігти неконтрольованому зростанню дерева в пам’яті, зазвичай шляхом обмеження загальної кількості вузлів або вичерпання найменш відвідуваних гілок.
Frequently asked questions
Чи потрібна MCTS функція оцінки?
Ні, і це одна з її основних переваг. Класичний пошук мінімакс-максимізації потребує ручної евристики, яка оцінює будь-яку позицію; MCTS потрібно лише законні ходи та сигнал про термінальну перемогу, програш або нічию, оцінюючи значення виключно шляхом гри в ігри.
Що контролює константа дослідження C у UCB1?
Вона балансує між експлуатацією ходів, які часто перемагали, та дослідженням ходів, які рідко відвідувалися. Більша константа C розподіляє відвідування серед більшої кількості кандидатів перед тим, як прийняти рішення; менша константа C зосереджує пошук на поточній найкращій лінії швидше, але з ризиком пропустити кращий хід, який здавався слабким на початку.
Чому рекомендований хід виходить від кількості відвідувань, а не від коефіцієнта перемоги?
Коефіцієнт перемоги на слабо відвіданому вузлі є шумною оцінкою, яку UCB1 ще не встиг виправити. Кількість відвідувань вузла відображає, скільки кумулятивного уваги він витримав, що в практиці є більш стабільним сигналом справної сили, ніж свіжий середній показник на кількох розгортаннях.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Monte Carlo Tree Search і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Monte Carlo Tree Search