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

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

  1. Sergey1983
    Оффлайн

    Sergey1983 Учаcтник

    Репутация:
    1
    По моему он натурально глючит, вчера работал более менее (но не без проблем!) - сегодня тратит на ход ~10 секунд а реально на обдумывание меньше секунды.

    Кажется я понял это изза того что я прописал ему рейтинг(ChessMaster).
     
    Последнее редактирование: 4 апр 2018
  2. Kesandr
    Оффлайн

    Kesandr Учаcтник

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

    Sergey1983 Учаcтник

    Репутация:
    1
    Как подключить файл нейронки я писал выше:



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

    Sergey1983 Учаcтник

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

    roman57 Учаcтник

    Репутация:
    1
    А если её запустить а Аквариум к стокфишу
     
  6. Sergey1983
    Оффлайн

    Sergey1983 Учаcтник

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

    roman57 Учаcтник

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

    Sergey1983 Учаcтник

    Репутация:
    1
    Какие труды?
     
  9. roman57
    Оффлайн

    roman57 Учаcтник

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

    admd Заблокирован

    Репутация:
    5
  11. Rom
    Оффлайн

    Rom Старожил

    Репутация:
    28
    Рано или поздно возможности данной нейросети будут исчерпаны и нужно будет увеличивать её размерность, чтобы добиться дальнейшего прогресса. Хочу только заметить, что поскольку при обучении Лила как бы изыскивает слабости у самой себя, то небольшой регресс совсем не означает, что нейросеть становится слабее.
     
  12. Sergey1983
    Оффлайн

    Sergey1983 Учаcтник

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

    Rom Старожил

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

    P.S. Не уверен, что текущая нейросеть уже достигла своего предела.
     
    Последнее редактирование: 5 апр 2018
  14. Sergey1983
    Оффлайн

    Sergey1983 Учаcтник

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

    Rom Старожил

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

    crem Учаcтник

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

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

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

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

    Sergey1983 Учаcтник

    Репутация:
    1
    Crem, Rom, откуда вы берёте информацию, если не секрет?
     
  18. crem
    Оффлайн

    crem Учаcтник

    Репутация:
    14
  19. Sergey1983
    Оффлайн

    Sergey1983 Учаcтник

    Репутация:
    1
    Спасибо.
     
  20. svoitsl
    Оффлайн

    svoitsl Учаcтник

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

    nn Заблокирован

    Репутация:
    124
    Сыграл с новой версией на хард. Кажется связки и вскрытые шахи она еще не понимает.

     
  22. svoitsl
    Оффлайн

    svoitsl Учаcтник

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

    Sergey1983 Учаcтник

    Репутация:
    1
    Скоро должна выйти 0.5.
     
  24. svoitsl
    Оффлайн

    svoitsl Учаcтник

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

    Yury_Solomatin Учаcтник

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

    Успехов.
     
  26. svoitsl
    Оффлайн

    svoitsl Учаcтник

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

    Rom Старожил

    Репутация:
    28
    Играть можно хоть сейчас, а вот нормально обучать не получится, поскольку нужны миллионы партий высокого качества. А где их взять?

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

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

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

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

    Mustitz баннер

    Репутация:
    37
    Есть партии движков. Есть переписочные.

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

    Rom Старожил

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

    Sergey1983 Учаcтник

    Репутация:
    1
    А вот по этим https://docs.google.com/spreadsheets/d/18UWR4FVhPi0vNwwPreu_avd9ycujGQ5ayR2LzJOWP4s/edit#gid=0 данным роста не было (он появился лишь за последние 1-2 дня(если появился))
     
    Последнее редактирование: 9 апр 2018
  31. Mustitz
    Оффлайн

    Mustitz баннер

    Репутация:
    37
    Rom, причина может быть не в том, что уровень партий слабый. Причина может быть в том, что они не подходят по стилю. У людей и движков популярна сицилианка, в результате которой получаются достаточно насыщенные тактикой позиции, где недостаточно ни глубины нейросети, ни количества партий в узле. Поэтому сила игры стакается, потому что результат партии представляет собой рулетку.
     
  32. Пломбир
    Оффлайн

    Пломбир Новичок

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

    crem Учаcтник

    Репутация:
    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
    Оффлайн

    Rom Старожил

    Репутация:
    28
    Добавлю только, что существует ещё один способ перехода на сеть большей размерности. Можно просто создать "пустую" нейросеть большей размерности, и натренировать её с нуля на партиях предыдущей сети. Поскольку тренировка сети выполняется примерно в 1000 раз быстрее, чем наигрывание партий при самоигре, то процесс протекает относительно быстро, даже на одном компьютере.

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

    crem Учаcтник

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

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