2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Обучение нейросети игре в шахматы
Сообщение04.10.2020, 21:41 


19/01/13
23
Здравствуйте!

Попытка обучить нейросеть играть в шахматы.
пытаться чтобы нейросеть которая получает на входе позицию с доски выдавала числовую оценку (как программы типа Стокфиш и др)

64 входа, несколько флагов (ход белых/черных, рокировки, взятия на проходе и тп).
На выходе - оценка позиции (например - +0,35 - у белых перевес 0,35). Отрицательные значения на выходе будут означать перевес черных.
Составить тренировочную базу позиций с помощью например уже имеющихся программ-как Стокфиш. Т.е. иметь к примеру 10 млн позиций с их оценками стокфиша.
И тренировать.

Использование
1)
Такая нейросеть если натренируется то сама играть не будет - тк будет выдавать только оценку позиции. Но если ее запустить на все ходы в позиции - максимальную оценку она выдаст, и по максимальной оценке можно будет выбрать лучший ход.

2)Можно использовать как оценочную функцию для минимакс алгоритма - или для какого-нибудь алгоритма монте-карло? Это должно создать намного более сильную программу.

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение04.10.2020, 22:18 
Заслуженный участник


27/04/09
28128
Ну да, такой подход используется. А в чём вопрос? :-)

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение04.10.2020, 22:40 


19/01/13
23
arseniiv в сообщении #1485764 писал(а):
Ну да, такой подход используется. А в чём вопрос? :-)


используется подход 1 или 2 чтобы нейросеть играла в шахматы? Насколько реалистично получить неплохую программу используя подход 1?

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение04.10.2020, 23:05 
Заслуженный участник


27/04/09
28128
А, я как-то плохо вчитался, думал, это всё к одному. Ну первый точно пробовали, я думаю много вариаций уже пробовали.

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение09.10.2020, 10:05 
Аватара пользователя


30/06/12
37
Valen007 в сообщении #1485762 писал(а):
2)Можно использовать как оценочную функцию для минимакс алгоритма - или для какого-нибудь алгоритма монте-карло? Это должно создать намного более сильную программу.


Про метод Монте-Карло - это что-то интересное)

Valen007, думаю, сложность даже не в выборе ходов по имеющимся оценкам позиций, к которым они ведут, а в том, каким образом система будет оценивать позиции при условии, что это будет делаться через обучение и какой-либо опыт будет отсутствовать - нет никакого внешнего учителя. Мне кажется, что имеет смысл рассматривать какие-либо комбинации фигур на доске, которые либо ведут к победе, либо ведут к поражению с той или иной вероятностью. С большооооой поправкой, но все же это более менее очевидно для тех комбинаций, которые могут "разрешиться" путем взаимных взятий тем или иным способом. Думаю, что каждый исход разумно рассматривать отдельно в плане вероятности победы/поражения. В случае же статичных связок (две группы взаимно-упершихся друг в друга пешек) это сложно сказать. Поэтому предлагаю в ходе обучения ориентироваться именно по динамичным связкам (в которых фигуры могут ходить), а лучше - по связкам-развязкам (которые могут быть "разрешены" путем взаимного взятия). При этом на некотором этапе обучения могут быть проанализированы и статические связки, и обычные динамические связки (фигуры в которых могут вовсе никак не быть агрессивно связанными друг с другом). Предлагаю рассматривать последние 2 вида связок уже после того, как в течение многих игр собрана информация о связках-развязках. Так будет легче. Итак, мы начинаем со связок-развязок и процентов выигрышей/проигрышей. Изначально очень сложно сказать, какие связки-развязки действительно сильны и ведут к победе (поражению), а какие - нет. И это не только в связи с отсутствием опыта, но также и в связи с тем, что могут быть ходы, которые кардинально меняют ситуацию игры, которые ни разу не были сделаны системой и о которых она не знает. Этакие слепые зоны. Таким образом, думаю, в ходе обучения изначально можно сделать широкий выбор ходов, но со временем сужать его (ε-жадный алгоритм, в котором ε изначально = 1, а с течением времени падает). Думаю, ε даже можно менять периодически. В моменты пика ε на систему как бы будет снисходить вдохновение и, как следствие, нередко - озарение.

Так мы получим наше шахматное зрение: "Ох, какой острый момент! Игрок А угрожает игроку B немедленной расправой <<одна комбинация, которая ведет к молниеносной победе в мат в 1 ход, при чем остальные ходы могут быть вообще бесполезными>>, но у игрока B есть 3 варианта шаха, в прочем, неочевидно, к чему каждый из них приведет! <<вторая комбинация на выигрыш>> К чему же это все приведет?!".

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение09.10.2020, 12:08 
Аватара пользователя


30/06/12
37
Интересным здесь является то, что выбранные бездоказательно, на основе опыта выигрышные/проигрышные комбинации могут и не оказаться таковыми в нужный момент времени. Потому что либо в итоге все зависит от контекста, в котором игрок оказывается после "реализации" данной комбинации (как мы помним, комбинация в нашем понимании - это не просто набор фигур, а еще и конкретный результат их "применения"). Т. е. если для данной комбинации были сделаны только определенные N ходов и не было сделано остальных M ходов, то оставшиеся M ходов могут стать решающими и нивелировать все преимущество/disпреимущество, которое было достигнуто за счет первых N ходов.

-- 09.10.2020, 13:38 --

Многое определяется тем, какой $ε$ (процент попыток новых ходов, которые приводят к неизвестности или же к негативному результату с точки зрения нынешней стадии сознания системы) мы будем использовать: большой или маленький. При малом мы будем учиться ориентироваться лучше в переходе между теми ключевыми точках (плавать от маяка к маяку), которые мы уже наметили. Так, мы можем просто стараться идти все время к максимуму с целью в итоге узнать, а максимум это вообще или нет. И подкорректировать соответствующий маяк, если нужно. А можем даже не ждать результата, а сказать: от этого маяка мы можем перейти к 3-м маякам: 1 - лучший, 2 - средний, 3 - худший. Мы пойдем в сторону лучшего. И именно к его состоянию мы можем приравнять состояние у исходного маяка. Это пик доверия собственному опыту с 1-ым маяком и пик доверия опыту с точки зрения имеющихся маяков (других маяков для нас в этот момент просто не бывает или же они все будут хуже, чем то, что есть! Эта иллюзия, на мой взгляд, делает наше сознание более надежным, но менее креативным). В случае же большого $ε$ мы будем строить сами маяки, но неизвестно, что мы в итоге построим.

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение09.10.2020, 19:50 


10/04/12
705
Прежде всего, шахматы игра конкретная, и без счёта вариантов никуда. Поэтому вариант, когда нейросеть выдаёт ход, его и делаем, не рассматривается вообще. Надо считать. На сегодня есть два варианта использования нейросетей в шахматах.

Вариант 1, начал свою историю в программе Giraffe, потом её автор Matthew Lai перешел в DeepMind, где продолжил заниматься этой проблемой. При этом решении используется глубокая конволюционная сетка, которая на входе принимает $64 \cdot (6 \cdot* 2 + 1)$ входов, которые принимают значения 0 или 1. 64 клетки, 6 типов фигур (король, ферзь, тура, слон, конь, пешка), 2 цвета и одно взятие на проходе. На выходе нейросеть выдаёт два параметра для каждого возможного хода $(Q+U)$ и $V$. Сколько ходов считать мне тяжело, их точно меньше чем $6 \cdot {64 \choose 2}$ (скажем ни одна фигура не може пойти с a1 на b4. И для хода a1-b2 будут отдельные выходы для короля, слона и ферзя. Плюс отдельно рокировки.

Что такое $(Q+U)$ и $V$? В принципе по ним можно найти $Q$ — аналог оценки позиции, вероятность победы стороны, которой сейчас ход от -1 (100% проигрыш) до +1 (100% выигрыш). И параметр $U$, который определяет вероятность того, что данных ход лучший. Параметр $U$ используется потом в алгоритме MCTS, а оценка используется в доигрывании (roollout) которое в общем-то обычно останавливается на каком-то шаге (точно не уточнял).

Вариант 2, NNUE сеть для переборного движка Stockish. Изначально идея была в том, чтобы использовать alpha-beta движок Stockfish, содержащий много полезных переборных эвристик, таких как ходы-киллеры, нулевой ход, продления случайные и т. п. для игры в сёги (японский шахматы). Собственно говоря, переборный движок есть, единственная проблема это оценка позиции. Hisayori Noda решил использовать для оценки позиции нейронную сеть, при этом нашёл интересный вариант, когда в процессе операции «сделать ход» некоторыё веса нейронной сети пересчитываются. Получился сильный движок. Более того, идея вернулась в шахматы и появился Stockfish 12, который использует NNUE и играет примерно на 100 пунктов сильнее прошлой версии.

NNUE принимает позицию в достаточно забавном формате. В сёги очень важна позиция короля, на которого часто идут матовые атаки. Поэтому на вход шахматной NNUE приходит $ 41\;024 = 64 \cdot (64 \cdot 5 \cdot 2 + 1)$. Первая 64 это число клеток, на которых может располагаться король. А дальше 64 клетки, пять фигур, два цвета + взятие на проходе. На выходу оценка позиции, которая затем используется в Stockfish діижке.

Изображение
У тут увеличенная схема NNUE (шире чем 800 пикселей)

На чём обучать? С появлением LeelaZero обучали на всём что только можно, результат оказывался ± одинаковым, но всё же немного сильнее была программа, которая с нуля играла сама с собой. Были варианты обучать на партиях людей, на партиях Stockfish и на партиях против Stockfish. На чём обучается NNUE я не в курсе, но сейчас это очень активно развиваемое направление, и там всё шу́стро меняется.

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение10.10.2020, 05:59 


19/01/13
23
mustitz в сообщении #1486476 писал(а):
Прежде всего, шахматы игра конкретная, и без счёта вариантов никуда. Поэтому вариант, когда нейросеть выдаёт ход, его и делаем, не рассматривается вообще. Надо считать. На сегодня есть два варианта использования нейросетей в шахматах.

Вариант 1, начал свою историю в программе Giraffe, потом её автор Matthew Lai перешел в DeepMind, где продолжил заниматься этой проблемой. При этом решении используется глубокая конволюционная сетка, которая на входе принимает $64 \cdot (6 \cdot* 2 + 1)$ входов, которые принимают значения 0 или 1. 64 клетки, 6 типов фигур (король, ферзь, тура, слон, конь, пешка), 2 цвета и одно взятие на проходе. На выходе нейросеть выдаёт два параметра для каждого возможного хода $(Q+U)$ и $V$. Сколько ходов считать мне тяжело, их точно меньше чем $6 \cdot {64 \choose 2}$ (скажем ни одна фигура не може пойти с a1 на b4. И для хода a1-b2 будут отдельные выходы для короля, слона и ферзя. Плюс отдельно рокировки.

Что такое $(Q+U)$ и $V$? В принципе по ним можно найти $Q$ — аналог оценки позиции, вероятность победы стороны, которой сейчас ход от -1 (100% проигрыш) до +1 (100% выигрыш). И параметр $U$, который определяет вероятность того, что данных ход лучший. Параметр $U$ используется потом в алгоритме MCTS, а оценка используется в доигрывании (roollout) которое в общем-то обычно останавливается на каком-то шаге (точно не уточнял).


mustitz, спасибо за информативный ответ!

т.е. если я правильно понял:
1) жираф использует нейросеть и МонтеКарло Три Сеарч
2) нейросеть жирафа получает на входе закодированную информацию о позиции.
Каждое поле закодировано 0 или 1 если там ферзь, ладья, слон, конь, пешка обоих цветов или взятие на проходе. На выходе для всех возможных ходов в позиции (примерно,грубо говоря, 1000 возможных ходов в шахматах всего) - оценка позиции после этого хода и вероятность того что именно этот ход лучший (это кажется можно посчитать взяв максимум из выданных оценок).
3) У жирафа информация на выходе нейросети используется в МонтеКало Три Сеарч для получения "лучшего" хода.

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение11.10.2020, 10:05 


10/04/12
705
Valen007 в сообщении #1486528 писал(а):
1) жираф использует нейросеть и МонтеКарло Три Сеарч


Жираф вроде нет, это более ранняя разработка, но AlphaZero, LeelaZero — да, метод MCTS со своими модификациями.

Valen007 в сообщении #1486528 писал(а):
2) нейросеть жирафа получает на входе закодированную информацию о позиции.
Каждое поле закодировано 0 или 1 если там ферзь, ладья, слон, конь, пешка обоих цветов или взятие на проходе. На выходе для всех возможных ходов в позиции (примерно,грубо говоря, 1000 возможных ходов в шахматах всего) - оценка позиции после этого хода и вероятность того что именно этот ход лучший (это кажется можно посчитать взяв максимум из выданных оценок).


Да, так, но только в поздних версиях Lc0. В более ранних оценки позиции не было вообще, хотя могу ошибаться. Её ввели для того, чтобы досрочно обрывать доигрывания в MCTS, потому что часто они служили источником смещённое оценки, не говоря о том, что забирали время. Поэтому вероятность ходов первична, она нужна методу MCTS как-то упорядочить дерево ходов. А оценка вторична, не говоря о том, что в ряде позиций она одинакова для всех ходов. Например, король с ферзём матуют одинокого короля. Тут почти любой ход не меняет оценку 100% выиграно, но рандомными ходами поставить мат тяжело.

Valen007 в сообщении #1486528 писал(а):
3) У жирафа информация на выходе нейросети используется в МонтеКало Три Сеарч для получения "лучшего" хода.


Да, только Lc0

 Профиль  
                  
 
 Re: Обучение нейросети игре в шахматы
Сообщение15.10.2020, 01:23 


19/01/13
23
mustitz в сообщении #1486687 писал(а):
Valen007 в сообщении #1486528 писал(а):
1) жираф использует нейросеть и МонтеКарло Три Сеарч


Жираф вроде нет, это более ранняя разработка, но AlphaZero, LeelaZero — да, метод MCTS со своими модификациями.

Valen007 в сообщении #1486528 писал(а):
2) нейросеть жирафа получает на входе закодированную информацию о позиции.
Каждое поле закодировано 0 или 1 если там ферзь, ладья, слон, конь, пешка обоих цветов или взятие на проходе. На выходе для всех возможных ходов в позиции (примерно,грубо говоря, 1000 возможных ходов в шахматах всего) - оценка позиции после этого хода и вероятность того что именно этот ход лучший (это кажется можно посчитать взяв максимум из выданных оценок).


Да, так, но только в поздних версиях Lc0. В более ранних оценки позиции не было вообще, хотя могу ошибаться. Её ввели для того, чтобы досрочно обрывать доигрывания в MCTS, потому что часто они служили источником смещённое оценки, не говоря о том, что забирали время. Поэтому вероятность ходов первична, она нужна методу MCTS как-то упорядочить дерево ходов. А оценка вторична, не говоря о том, что в ряде позиций она одинакова для всех ходов. Например, король с ферзём матуют одинокого короля. Тут почти любой ход не меняет оценку 100% выиграно, но рандомными ходами поставить мат тяжело.

Valen007 в сообщении #1486528 писал(а):
3) У жирафа информация на выходе нейросети используется в МонтеКало Три Сеарч для получения "лучшего" хода.


Да, только Lc0


Стадия игры-не тренировки НН.
Например уже есть натренированная сеть ЛЧ. На входе позиция на выходе оценка позиции и оценка каждого возможного хода (ну или топ-5 ходов, к примеру) в позиции. Что происходит потом с ходами? Просто играется ход с самой высокой оценкой? (Я думаю что если бы это было так, то время размышления над ходом было бы константное, а ЛЧ думает и улучшает свое решение со временем, поэтому это не так).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Mihaylo


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group