AlphaZero. Нейронная сеть играет в шахматы

Тема в разделе "Машинное отделение", создана пользователем grizly, 6 дек 2017.

  1. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    По моему он натурально глючит, вчера работал более менее (но не без проблем!) - сегодня тратит на ход ~10 секунд а реально на обдумывание меньше секунды.

    Кажется я понял это изза того что я прописал ему рейтинг(ChessMaster).
  2. Kesandr Учаcтник

    • Участник
    Рег.:
    02.09.2008
    Сообщения:
    464
    Симпатии:
    35
    Репутация:
    11
    Оффлайн
    А что откривать и где указать имя нейронки и какое оно должно бить? Бо я просто нейронку закинул у папку там где все файли. Имя нейронки после распаковки много безсмисленних литер.
  3. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Как подключить файл нейронки я писал выше:



    Поповоду имени,файл нейронки можно переименовать и после ключа -w указать естественно новое имя.
    —- добавлено: 4 апр 2018 —-
    Посмотрел сейчас Arenu: Engines->Manage->Details->General->Command Line Parametrs
  4. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Сделал турнир LcZero(Нейросеть 83) в ChessMaster, cоперниками были персонажи с рейтингами от 1600 до 2200, играла на 8-ядрах(i7 Skylake), набрала 4 из 5-ти очков, 1-е место(делит с двумя другими), по рейтингу третья 1804(Первое место 1847).
  5. roman57 Учаcтник

    • Участник
    Рег.:
    23.09.2017
    Сообщения:
    116
    Симпатии:
    16
    Репутация:
    1
    Оффлайн
    А если её запустить а Аквариум к стокфишу
  6. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Стокфиш должен всухую обыгрывать Магнуса у которого рейтинг >2800, делал в своё время подсчёт.
  7. roman57 Учаcтник

    • Участник
    Рег.:
    23.09.2017
    Сообщения:
    116
    Симпатии:
    16
    Репутация:
    1
    Оффлайн
    Ну одну то партию у стокфиша должен каждый выиграть , хотя бы в блиц , иначе все мои труды напрасны ^_^
  8. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Какие труды?
  9. roman57 Учаcтник

    • Участник
    Рег.:
    23.09.2017
    Сообщения:
    116
    Симпатии:
    16
    Репутация:
    1
    Оффлайн
    Есть система с помощью которой можно переиграть любой движок , на "Chess Book" во вконтакте показаны видео примеры , конечно для повторения нужно понять систему или запомнить нужный вариант для определённой версии , например stockfish в последнее время часто обновляется и варианты использования системы получаются разные , но в каждом видео обязательно написана версия движка , пробуйте - у многих уже получилось , а если будет желание понять систему глубже - я обязательно отвечу и расскажу все тонкости
  10. admd Заблокирован

    • Новичок
    • Заблокирован
    Рег.:
    14.06.2017
    Сообщения:
    71
    Симпатии:
    30
    Репутация:
    5
    Нарушения:
    30
    Оффлайн
  11. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Рано или поздно возможности данной нейросети будут исчерпаны и нужно будет увеличивать её размерность, чтобы добиться дальнейшего прогресса. Хочу только заметить, что поскольку при обучении Лила как бы изыскивает слабости у самой себя, то небольшой регресс совсем не означает, что нейросеть становится слабее.
  12. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    По сравнению со многими другими движками Лила играет довольно слабо, так что скорее дело в насыщении или другой проблеме с сетью.
  13. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Текущая нейросеть очень небольшая. Можно сказать крошечная. Размерность у неё всего 6х64. У Гугла, для сравнения, нейросеть была 20х256. То есть в 50 раз больше, если не учитывать полносвязный выходной слой. Когда дорастём до такой величины, размер файла нейросети в распакованном виде превысит 300 Мб. Но, возможно, придётся увеличивать нейросеть ещё больше.

    P.S. Не уверен, что текущая нейросеть уже достигла своего предела.
  14. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    А не знаете когда они планируют увеличить размер сети и вообще нет ли какого планового графика развития движка?
  15. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Планового графика нет. В игре Го, например, увеличивают по факту стагнации (в ближайшие дни ожидается увеличение размерности до 15х192 или 20х256, в зависимости от результата тестов):
    http://zero.sjeng.org/
  16. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    140
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Увеличивать планировали скоро, но нашли серьёзный баг, который скорее всего съел существенную часть ёмкости сети. После его исправления сеть будет опять обучаться быстро. Будут ли одновременно с исправлением ошибки увеличивать сеть, ещё не решили, но пока большинство за то, чтобы так сделать.

    Баг заключается в том, что по задумке ходы для чёрных и для белых должны были выглядеть одинаково. То есть и чёрные и белые например видят свои пешки на втором ряду, и ходят e2e4 (но для чёрных это на самом деле обозначает e7e5).
    Так вот, доску для чёрных отображали как надо (свои пешки внизу), но ход от неё всё равно ждали не перевёрнутый, e7e5 вместо e2e4.

    Получается, что сеть должна была отдельно учиться играть за белых и за чёрных, и на это тратилась ёмкость сети.

    Есть ещё другой баг (ходы соперника при передаче истории кодируются неправильно перевёрнутыми), и он тоже ещё не исправлен, но он не настолько серьёзный. Но его исправят одновременно с этим.
    Rom, sovaz1997 и Undying нравится это.
  17. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Crem, Rom, откуда вы берёте информацию, если не секрет?
  18. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    140
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
  19. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Спасибо.
  20. svoitsl Учаcтник

    • Участник
    Рег.:
    06.01.2018
    Сообщения:
    374
    Симпатии:
    91
    Репутация:
    7
    Оффлайн
    Пожалуй с этим лучше не спешить, даже такая небольшая сеть требует громадных ресурсов, лучше на существующей все хорошо отработать (разумеется не только код), а тут ещё не початый край.
  21. nn Старожил

    • Участник
    • Старожил
    Рег.:
    25.03.2007
    Сообщения:
    1.456
    Симпатии:
    3.108
    Репутация:
    124
    Оффлайн
    Сыграл с новой версией на хард. Кажется связки и вскрытые шахи она еще не понимает.

  22. svoitsl Учаcтник

    • Участник
    Рег.:
    06.01.2018
    Сообщения:
    374
    Симпатии:
    91
    Репутация:
    7
    Оффлайн
    А между тем LCZERO уже наиграла 100 сетей!!!
    И пора бы уже допилить код,но он пока v. 0.4
  23. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    Скоро должна выйти 0.5.
  24. svoitsl Учаcтник

    • Участник
    Рег.:
    06.01.2018
    Сообщения:
    374
    Симпатии:
    91
    Репутация:
    7
    Оффлайн
    [​IMG]
    Считается, что хотя в фиктивных ЭЛО роста и нет, но миллион игр не куда не делись и в настоящих ЭЛО все же рост есть!
    (хоть какой то )
    Худо ли, бедно и но сеть до 1-го разряда дошла все же
    (в отличии от меня например)
  25. Yury_Solomatin Учаcтник

    • Участник
    Рег.:
    25.01.2017
    Сообщения:
    865
    Симпатии:
    503
    Репутация:
    24
    Оффлайн
    А люди могут играть с Лилой, чтобы ее обучать?
    —- добавлено: 8 апр 2018 —-
    Мне кажется, такой находящийся в пеленках искусственный интеллект, с которым можно бороться любителям, привлек бы внимание шахматного сообщества и пофандрайзить тоже помог бы.
    Только вам нужна еще модель, которая была бы лицом Лилы и чтобы она приятным голосом разговаривала.

    Успехов.
  26. svoitsl Учаcтник

    • Участник
    Рег.:
    06.01.2018
    Сообщения:
    374
    Симпатии:
    91
    Репутация:
    7
    Оффлайн
    Вообще кажется, что авторы этого движка наотрез отказываются от какого либо иного обучения, кроме самообучения.
    Даже двух ходовый вариант (например научиться у Стокфиша играть уверенно ничью, а уж потом заняться самообучением) и то не устраивает.
    Основная причина - отсутствие красоты теории, раньше считалось, что чтобы сделать неплохой шахматный движок надо бы и самому не дурно играть, но сейчас такая надобность вроде бы отпала.
  27. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Играть можно хоть сейчас, а вот нормально обучать не получится, поскольку нужны миллионы партий высокого качества. А где их взять?

    Тренировочный пример (позиция с общей оценкой и оценкой каждого возможного хода), должен предоставлять сведения качественней, чем выдаёт сама нейросеть. Только в этом случае мы можем её обучать. В процессе обучения тренировочный пример как бы "прогоняется" через всю нейросеть в обратном направлении, от выхода ко входу. При этом коэффициенты нейросети немножко изменяются, как бы "подтягиваясь" к рекомендациям примера, чтобы в следующий раз, уже при игре, вывод нейросети стал чуть-чуть лучше.

    Человеческие партии используются только для проверки, что система работает. Средний уровень базы из миллионов человеческих партий крайне невысок. Обычно нейросеть и на своих партиях достигает такого уровня очень быстро. Так что смысла особого нет. В начале тренировки самое главное оптимизировать код и отловить баги.

    Как же получить тренировочные примеры уровнем выше чем выдаёт сама нейросеть? Очень просто. Поскольку нейросеть+перебор оценивает заведомо лучше чем чистая нейросеть, то нужно только позволить ей играть с самой собой с неглубоким, но достаточным, перебором вариантов. Перебор вскроет ошибки и таким образом даст лучшие оценки. Все партии самоигры, вместе с оценками позиций, сохраняются в общей базе.

    Когда накопится достаточно партий для начала тренировочного цикла, они нарезаются на позиции с оценками, добавляются к предыдущим тренировочным примерам лучшего качества и хорошенько перетасовываются. После чего начинается описанный выше цикл обучения. После обучения измененная нейросеть снова начинает играть. Но обычно уже лучше. Далее всё повторяется, и таким образом нейросеть постепенно, шаг за шагом, подтягивает сама себя к вершинам мастерства, прямо как альпинист.
    Alhimik88, Sergey1983 и svoitsl нравится это.
  28. Mustitz Заслуженный

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.544
    Симпатии:
    1.265
    Репутация:
    36
    Адрес:
    Киев
    Оффлайн
    Есть партии движков. Есть переписочные.

    Партии человека слабы стратегически или тактически? В целом прогнать автокодировщиком базу человеческих партий не самая плохая идея...
  29. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Пробовали. И движковые и человеческие. Уровень тех сетей давно уже пройден нынешней Лилой, всего за пару недель. Конечно, сыграло свою роль то, что те сетки были небольшими - 6х64. Но если бы наигрывали сразу большие, то получили бы минус к скорости сейчас.
  30. Sergey1983 Учаcтник

    • Участник
    Рег.:
    03.04.2018
    Сообщения:
    126
    Симпатии:
    14
    Репутация:
    1
    Оффлайн
    А вот по этим https://docs.google.com/spreadsheets/d/18UWR4FVhPi0vNwwPreu_avd9ycujGQ5ayR2LzJOWP4s/edit#gid=0 данным роста не было (он появился лишь за последние 1-2 дня(если появился))
  31. Mustitz Заслуженный

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.544
    Симпатии:
    1.265
    Репутация:
    36
    Адрес:
    Киев
    Оффлайн
    Rom, причина может быть не в том, что уровень партий слабый. Причина может быть в том, что они не подходят по стилю. У людей и движков популярна сицилианка, в результате которой получаются достаточно насыщенные тактикой позиции, где недостаточно ни глубины нейросети, ни количества партий в узле. Поэтому сила игры стакается, потому что результат партии представляет собой рулетку.
  32. Пломбир Новичок

    • Новичок
    Рег.:
    09.04.2018
    Сообщения:
    35
    Симпатии:
    25
    Репутация:
    0
    Оффлайн
    Интересно, а каким образом будет происходить переход от маленькой сети 6х64 к большой? Как перенести накопленную информацию? Пытаюсь разобраться в вопросе, но мой английский никакой.
    Кстати, никак не получается LCZero запустить на GPU. На трех машинах одно и тоже - вылетает. Все делал по инструкции. Тест какой-то в начале проходит, но работать не хочет. А при работе на CPU не могу никак заставить дольше считать. За это отвечает, команда "-p" как я понял.. она не распознается у меня почему-то.
  33. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    140
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Переход от маленькой сети к большой осуществляется при помощи методов net2net ( https://arxiv.org/pdf/1511.05641.pdf ).

    Вкратце: в ширину сеть увеличивается засчёт "расщипления" существующих узлов на несколько таким образом, чтобы они давали тот же результат что и до расщипления. Грубо говоря, если раньше было a = 5*b, то расщипляют b на c и d, и делают a = 2*c + 3*d.

    В высоту сеть увеличивают засчёт добавления слоёв, которые с начальными коэффициентами ничего не делают, то есть выдают на выходе то, что пришло на вход. Если при этом добавить чуть-чуть шума, в дальнейшем сеть будет учиться быстрее.

    По поводу GPU: попробуйте указать параметр -gpu 1 (или другой номер), чтобы явно указать, какой gpu используется.

    Параметры -p и -v используются только когда внешняя программа GUI не сообщает сколько времени осталось. Если есть контроль времени, lczero.exe пытается сама решить сколько думать исходя из этого.
    Alhimik88 и Rom нравится это.
  34. Rom Старожил

    • Участник
    • Старожил
    Рег.:
    12.02.2012
    Сообщения:
    644
    Симпатии:
    275
    Репутация:
    27
    Оффлайн
    Добавлю только, что существует ещё один способ перехода на сеть большей размерности. Можно просто создать "пустую" нейросеть большей размерности, и натренировать её с нуля на партиях предыдущей сети. Поскольку тренировка сети выполняется примерно в 1000 раз быстрее, чем наигрывание партий при самоигре, то процесс протекает относительно быстро, даже на одном компьютере.

    Хочу ещё отметить, что в Го использование net2net натолкнулось на некоторые затруднения, которые (кажется) только что успешно преодолены. При тренировке Лила Го Зеро переход с помощью net2net на 10х128 не вызвал проблем и сразу дал большую прибавку, а вот при переходе на 15х192 пришлось вернуться достаточно далеко "в прошлое", выполнить net2net на старой сети и последние 1,5 миллиона партий дотренировывать увеличенную сеть указанным выше способом.
  35. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    140
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Да, сейчас тренируют сеть 6x64, и одновременно сеть 10x128 (для сравнения скорости игры и тренировки), именно таким образом заново с нуля, с исправленными багами. Планируется, что это займёт около суток. Но чтоб пользоваться этой сетью, нужна будет новая версия lczero.exe, v0.5, с исправленными этими же багами.

    На больших сетях это будет не так быстро, и там уже будет net2net.

Поделиться этой страницей