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
704
Прежде всего, шахматы игра конкретная, и без счёта вариантов никуда. Поэтому вариант, когда нейросеть выдаёт ход, его и делаем, не рассматривается вообще. Надо считать. На сегодня есть два варианта использования нейросетей в шахматах.

Вариант 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
704
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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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