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

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

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

    • Новичок
    Рег.:
    09.04.2018
    Сообщения:
    35
    Симпатии:
    25
    Репутация:
    0
    Оффлайн
    Возник вопрос: сколько может занимать в памяти нейросеть AlphaZero? Насколько сильно без потери качества ее можно ужать (теоретически). Вопрос возник из предположения, что правильней было бы делать матч с AsmFish 123 кб + самозачитанная дебютная книга на объем равный сети AlphaZero. Я смотрю, что нейросеть 6х64 у LCZero весит 52 мегабайта O_o Не до хрена ли? Что там за структура такая?
  2. svoitsl Учаcтник

    • Участник
    Рег.:
    05.01.2018
    Сообщения:
    187
    Симпатии:
    32
    Репутация:
    1
    Оффлайн
    Сейчас она занимает все порядка 60 Мб (размера 6х64), но скоро будет занимать 200 Мб (размера 10х128). Сжимать её не надо вообще,она и так не важно работает, однако вы всегда можете воспользоваться средством Windows "Сжимать диск для экономии места".
    Играть с asmfish совершенно бесперспективно, пока уровень сети едва достигает 2000 ЭЛО (но скорее всего не достигает). Более того, уровень топовых движков вряд ли будет достигнут в этом году. Однако уровня в 3000 ЭЛО к Новому Году ожидать я думаю можно
    Нет, это не до хрена, особенно если сравнить с тем размером что будет в ближайшие дни и тем что будет к концу года.
  3. Benas Учаcтник

    • Участник
    Рег.:
    09.05.2017
    Сообщения:
    106
    Симпатии:
    15
    Репутация:
    1
    Оффлайн
    Так настолько большая разница с Альфой, там они то говорили что за несколько часов все было достигнуто... ?
  4. Пломбир Новичок

    • Новичок
    Рег.:
    09.04.2018
    Сообщения:
    35
    Симпатии:
    25
    Репутация:
    0
    Оффлайн
    Я имею ввиду не в абсолютных цифрах, а в количестве информации на предлагаемую структуру. Грубо говоря, 64 нейрона в слое связаны каждый с каждым через весовые коэффициенты. Допустим, что каждый вес - это 8-байт (ну больше же не может быть). И что? Да тут как не крути, но не получить 60 мегабайт на такую сеть! КАК?
    Нейросеть фактически начитывает книгу себе, а раз так, то стокфишу даем полиглотовскую книжку на такой же объем. Даже если взять 60 мегов - это как минимум 3,5 миллиона позиций - можно позатыкать все дыр в стокфише легко.
  5. svoitsl Учаcтник

    • Участник
    Рег.:
    05.01.2018
    Сообщения:
    187
    Симпатии:
    32
    Репутация:
    1
    Оффлайн
    Ну так пока нет таких вычислительных мощностей, что есть у Гугла, народ самое большое на что может рассчитывать, так это на видеоплаты, при этом за месяц смогли довести до 2000 ЭЛО, но чем больше сеть, тем больше нужно ресурсов, вот если б майнеров привлечь... то дело бы пошло быстрее. :)
    Сейчас на маленькой сети наигрывается порядка 9000 партий в час, это число скорее всего будет снижаться при росте сети (хорошо,если линейно).
  6. svoitsl Учаcтник

    • Участник
    Рег.:
    05.01.2018
    Сообщения:
    187
    Симпатии:
    32
    Репутация:
    1
    Оффлайн
    У них на форуме есть занятный пост, я по-пробовал его немного вольно перевести (оригинал под спойлером)

    Я знаю правила и умею двигать фигуры, но мой рейтинг пока не высокий, целых 1450 ЭЛО, и я плохо шарю в компах и тем более в математике. Но я очень при очень заинтересован в конечном результате этого проекта. Не могли бы вы для нас «аутсайдеров» дать ответы на некоторые вопросы и соответственно сделать некоторые выводы относительно следующих вопросов?

    (1) Какие ожидания реализовались на данный момент? Каким образом и в чем?
    (2) Будет ли это полезно для проекта, если Google будет предоставлять больше информации о A0? И в каких областях в этом необходимость?
    (3) Каковы ваши ожидания на ближайшую пару недель или месяцев?
    (4) Какая дополнительная поддержка вам потребуется от внешнего мира?

    Каким образом сообщество оценивает прогресс?

    As a low rated chess player (Swiss ELO 1450) with unsufficient knowledge regarding IT & Mathematics I am still very much interested in the final outcome of this project. Could you for us 'outsiders' give some answers resp. draw some conclusions regarding the following questions?

    (1) Have the expectations been met so far? Why and where and why and where not?
    (2) Would it be beneficial for the project if Google would release more information about Alpha Zero? And in what areas?
    (3) What are your expectations for the next couple of weeks or months?
    (4) What kind of additional support would you need from the outside world?

    How does the community evaluate the progress so far?

    (1) Определенно да. Распределенная часть проекта уже работает менее чем два месяца, и у нас есть движок с силой 2000+ ЭЛО с уникальным, человеко - подобным стилем игры. Число участвующих разработчиков и участников просто взлетело, и проект теперь получает много внимания от всего компьютерного шахматного сообщества, а также значительной части всего шахматного сообщества.

    (2) В какой-то степени да, но, вероятно, не уже не так много. Наиболее значительные препятствия на пути получения сильного шахматного движка методом обучения с подкреплением уже решены либо L0 (ещё движком Go, на которым основан на LC) или уже совсем недавно самой Leela. Было бы, конечно, неплохо иметь подтверждение того, какую архитектура нейронной сети необходимо иметь, чтобы конкурировать с Stockfish, но даже без этого подтверждения, проект дойдет до этого сам в какой-то момент.

    (3) В следующие пару недель увидим целый ряд улучшений кода, который должен сделать двигатель мощнее и проще в использовании для всех нас. Обновление до нового размера нейронной сети будет происходить в течение нескольких будущих дней, что будет тормозить развитие движка, но и сделать его в перспективе гораздо сильнее. В течении следующих нескольких месяцев, я ожидаю увидеть силу игры LC0 равный верхнему уровню гроссмейстера (то есть примерно 2800 ЭЛО), и он будет медленно приближаться к тройке лидеров (Stockfish, Гудини, Комодо), но еще не сможет победить их при равном контроле времени.

    (4) Чем будет больше людей, которые запускают клиента LC0, тем быстрее мы получим обучающие данные для улучшения нейронной сети. Популяризация LC0 в шахматном сообществе, несомненно, увеличит число участников в дальнейшем, что будет полезно, так как скорость обучения будет сильно снижаться с ростом размера нейронный сети.


    (1) Definitely yes. The distributed part of the project has been running for less than two months now, and we have an engine with a strength of 2000+ with a unique, human-like playing style. The number of participating developers and contributors has skyrocketed, and the project is now getting a lot of attention from the whole computer chess community, and a significant part of the whole chess community.

    (2) To some extent yes, but likely not all that much anymore. Most significant roadblocks to getting a strong chess engine by reinforcement learning have already been solved either by Leela Zero (the Go engine Lc0 is based on) or recently by Leela Chess itself. It would of course be nice to have confirmation of what neural net architecture was necessary to compete with Stockfish, but even without this confirmation, the project will get there at some point.

    (3) Next couple of weeks will see quite a number of code improvements that should make the engine stronger and easier to use all by themselves. An upgrade to the neural net size will happen within days now, which will slow down the engine but also make it a lot stronger. Within the next few months, I expect to see top grandmaster level play from Leela Chess, and it slowly gaining ground on the top three (Stockfish, Houdini, Komodo), but not yet able to beat them at equal time controls.

    (4) The more people who run the client, the faster we get training data to improve the neural network. Popularising Leela Chess within the chess community will certainly increase the number of contributors further, which will be valuable since the speed of games is going to decrease sharply once larger neural nets are used.
  7. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    А вы откройте файл в текстовом редакторе и посмотрите. :)
    Там 4.5 миллиона чисел через пробел, написанные текстом.
  8. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    Странно, почему они не хранят числа в бинарном виде. Да и скорость должна тогда увеличиться, по идее, и меньше памяти будут занимать коэффициенты.
  9. svoitsl Учаcтник

    • Участник
    Рег.:
    05.01.2018
    Сообщения:
    187
    Симпатии:
    32
    Репутация:
    1
    Оффлайн
    остается только надеяться, что в версии 0.5 они все же оптимизируют формат, и файл будет составлять не более 15 Мб (при увеличении сети в 3 раза).
  10. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    А какой у них диапазон чисел? Надо хотя бы 4-8 байт на число, а лучше - ещё меньше. Сейчас у них в среднем получается 11 байт + декодирование текста (на это тратится время).

    В общем, я предложил им оптимизацию: https://github.com/glinscott/leela-chess/issues/277
  11. Mustitz Заслуженный

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

    Зато бинарный формат даёт проблему портируемости, на каком-нить ARM уже не прочитаешь. Ну и просмотреть файл сложнее.

    Плюс текстовый формат можно просто загрузить в другие программы для анализа.
  12. Пломбир Новичок

    • Новичок
    Рег.:
    09.04.2018
    Сообщения:
    35
    Симпатии:
    25
    Репутация:
    0
    Оффлайн
    У меня в голове не укладывается, откуда 4,5 миллиона коэффициентов в сети 6х64... В исходниках не копался еще, - это надо С++ изучать на выходных )))

    Поковырялся в файле коэффициентов, он состоит из 67 блоков (у всех сетей одинаково):

    1. Просто число 1 (всегда);
    2..69120 числа
    3. 64 нуля (всегда)
    4. 64 числа
    5. 64 числа

    6. 36864 числа
    7. 64 нуля (всегда)
    8. 64 числа
    9. 64 числа

    Блоки с 6 по 9 повторяются 12 раз.

    54. 2048 чисел
    55. 32 нуля (всегда)
    56. 32 числа
    57. 32 числа

    58. 3940352 числа (хм...)
    59. 1924 числа

    60. 2048 чисел
    61. 32 нуля (всегда)
    62. 32 числа
    63. 32 числа

    64. 262144 числа
    65. 128 чисел
    66. 128 чисел
    67. 1 число

    В общем (я конечно могу ошибаться), но мне кажется, что структура файла с коэффициентами не похоже, что кодирует простую сеть 6х64. Тут явно что-то по сложнее.
    —- добавлено: 10 апр 2018, опубликовано: 10 апр 2018 —-
    Я тут вспомнил, а на вход LCZero идет одна позиция или целая история? Тогда это может объяснить большой размер сети
  13. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    3940352 коэффициента — это fully connected слой policy head'а, который конвертирует выход из residual tower (32 значения на каждую из 64 клеток доски) в 1924 возможный ход. Получается 32*64*1924 = 3940352.

    На вход идёт последних 8 позиций доски, но на размер этого большого слоя это не влияет (слой на выходе, а не на входе).
  14. vasyannyasha Начинающий

    • Начинающий
    Рег.:
    16.03.2018
    Сообщения:
    6
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    Тут всплывал вопрос почему сеть не учат на чужих партиях.
    В названии написнано LeelaChess Zero. Это слово означает нулевую информацию. Все мы видим как стокфиш не может решить некоторые задачки, которые влёгкую поддаются людям и наоборот. Создатели проекта предполагают, что никто не умеет идеально играть в шахматы. Ошибается и стокфиш, и Карлсен. Лила переживает историю шахмат заново. Сперва ей нравились открытые начала. Сейчас она играет сицилианку(больше всего разменный вариант и вариант Крамника).
  15. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    555
    Симпатии:
    209
    Репутация:
    21
    Оффлайн
    Если возникают вопросы по структуре нейросети, то можно посмотреть инфографику по Альфа Го Зеро. Ранее уже указывал ссылку, но не грех и повторить. Го не шахматы конечно, и Лила не Альфа, но общая структура программы и сети примерно та же. Отличается только выходная часть нейросети - в отличие от Го, в шахматной Лиле она заметно крупнее. По ссылке картинка размером 6 Мб:
    https://applied-data.science/static/main/res/alpha_go_zero_cheat_sheet.png

    Я тоже в свое время делал некоторые наброски, пытаясь понять структуру нейросети Альфа Го Зеро. Если кому интересно, рисунок прилагаю. Схема показывает начало прохода позиции через фильтры коэффициентов нейросети. Всё упрощено. Только первые слои, никаких остаточных связей, нормализации, функции активации итп.

    Вложения:

    • 000005.jpg
      000005.jpg
      Размер файла:
      102,6 КБ
      Просмотров:
      817
  16. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    Mustitz, Mustitz, 1) Скорость. Согласен, что считываем 1 раз. 2) почему на ARM нельзя портировать? Вы имеете ввиду порядок считывания байт процессором? 3) Другие программы анализа: какие и зачем?
  17. Sergey1983 Учаcтник

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

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    Текстовый формат просто потому, что время было занято более важными делами, а нужен формат который можно открыть и в python и в go и в C++. Формат тренировочных партий (то, что клиент шлёт на сервер) тоже вначале был текстовым, а потом поменяли на бинарный.

    Скорее всего формат сети поменяют на protobuf, иначе можно быстро запутаться в обилии версий.
  19. Mustitz Заслуженный

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.060
    Симпатии:
    472
    Репутация:
    25
    Адрес:
    Киев
    Оффлайн
    2) Да, BigEndian, Little Endian.
    3) R Studio, MATLAB. Просто проанализировать матрицу. Посмотреть, что используется, что не используется. Может где наклепать генератор и посмотреть, что он выдаёт. Посмотреть вывод отдельного слоя, визуализировать, ...
    sovaz1997 нравится это.
  20. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    Думаю, они улучшат формат, когда появится необходимость (сильно увеличится размер сети, например). А пока, возможно, это было бы преждевременной оптимизацией.
  21. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    Сейчас тренируют сеть с исправленными багами, и одновременно сеть бОльшего размера, чтобы потом решить, какую оставить.
    Снэпшоты большой сети в процессе тренировки выкладывают сюда:
    https://drive.google.com/drive/folders/1slxprGVyDrid64I3UK0FMOeuNg43npln

    Чтобы открыть новую сеть (любую, не только большую), нужна версия lczero v0.5, которая вышел сегодня.


    Пока новая сеть играет хуже, чем ожидалось (планировалось, что она быстро обойдёт существующую). Для тренировки сети не использовали ~300000 самых ранних игр (они хранятся в другом формате, и решили, что без них всё равно получится), возможно в этом причина.
    Rom нравится это.
  22. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    555
    Симпатии:
    209
    Репутация:
    21
    Оффлайн
    В го недавно тоже пришлось решать проблемы дополнительно расширяя тренировочный набор с 500 тысяч до 1,5 миллиона последних партий. Иначе сеть не давала прибавки при переходе на 15х195. А с перетренировкой она сразу резко взлетела, на 300 пунктов выше внутреннего рейтинга. Причём, что любопытно, и перетренированная сеть net2net и вторая сеть, тренированная с нуля на том же наборе, показали примерно одинаковый результат.
    Ссылки раз, два.
  23. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    Zevra - LCZero и LCZero - Zevra. минута/ход, но LCZero часто тратила меньше времени. У Zevra рейтинг около 2300 (по CCRL).
    В 1-й партии у LCZero тактический просчет (причем тактика очень короткая). Зато во 2-й быстро отыгралась)



  24. Kesandr Учаcтник

    • Участник
    Рег.:
    02.09.2008
    Сообщения:
    455
    Симпатии:
    30
    Репутация:
    11
    Оффлайн
    А где вы взяли данний график? Можна ссылку?
    —- добавлено: 12 апр 2018 —-
    А где вы взяли данний график? Можна ссылку?
  25. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    Графики постят в этой теме: http://www.talkchess.com/forum/viewtopic.php?p=757290#757290


    PS. На chesstalk чтоб переключиться с древовидного отображения форума на нормальный, надо справа над сообщением нажать кнопку flatview.
    Kesandr нравится это.
  26. nn Заблокирован

    • Участник
    • Заблокирован
    Рег.:
    25.03.2007
    Сообщения:
    895
    Симпатии:
    2.386
    Репутация:
    95
    Нарушения:
    30
    Оффлайн
    @crem А ваша c++ версия быстрее только на GPU только или на CPU тоже? Ее не собираются основной сделать?
  27. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    Пока она работает только на GPU и только на Nvidia. Но другие варианты тоже планируются, просто времени не хватает.
    Ну и хотя оно и быстрее, играет эта версия не намного лучше. Наверное, где-то баг, ищу.
    И ещё открыт вопрос с лицензией, потому что эта версия использует CUDA и cuDNN, и неизвестно, как именно программу можно распространять. Можно ли туда положить cuda'овские .dll? Можно ли распространять без .dll, но говорить пользователю, где их взять?
    nn нравится это.
  28. nn Заблокирован

    • Участник
    • Заблокирован
    Рег.:
    25.03.2007
    Сообщения:
    895
    Симпатии:
    2.386
    Репутация:
    95
    Нарушения:
    30
    Оффлайн
    Т.е скорость достигается за счет того, что библиотеки Nvidia для GPU значительно быстрее гугловских?

    И еще вопрос, DeepMind вообще делает все независимо от Google и не делится программами которые они написали, и в Google люди не могут их получить? А то, я смотрю, и вы и Gary вообщем повторяете все что в принципе уже сделано.
    И нет возможности внутри компании получить длительный бесплатный доступ к TPU?
  29. Mustitz Заслуженный

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.060
    Симпатии:
    472
    Репутация:
    25
    Адрес:
    Киев
    Оффлайн
    Я что-то пропустил... Судя по исходникам, там есть AMD через OpenCL...
  30. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    555
    Симпатии:
    209
    Репутация:
    21
    Оффлайн
    Случаем, не про это ускорение идёт речь? :
    https://github.com/glinscott/leela-chess/pull/262

    Как я понимаю, программа ждёт пока не накопится достаточный пакет позиций (батч) и только потом их оценивает. Все разом. Скорость на GPU растёт в три раза, но за счёт откладывания качество оценки немного падает.
  31. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    Гугловский tensorflow использует CUDA в качестве одного из своих бэкендов (основного, я бы сказал, остальные либо медленее, либо ещё не работают). Я на tensorflow и написал, но куду надо тоже класть рядом.

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

    Для персональных проектов TPU не получить.
    —- добавлено: 13 апр 2018, опубликовано: 13 апр 2018 —-
    Да, это оно. Оно набирает следующий элемент батча, предполагая, что предыдущий элемент в батче вернёт точно такую же оценку как и его родитель, то есть оценку не изменит. (если учитывая это следующий элемент оказывается внутри ещё не вычисленного, то набор батча останавливается и батч вычисляется, полностью не набравшись).

    Я сейчас это меняю на то, чтобы использовать только первый элемент батча (как и раньше), а остальные просто класть в кэш. Если позже они действительно окажутся полезными, заново вычислять их не надо будет, а просто взять из кэша.
    nn и Rom нравится это.
  32. sovaz1997 Учаcтник

    • Участник
    Рег.:
    30.08.2016
    Сообщения:
    647
    Симпатии:
    117
    Репутация:
    3
    Оффлайн
    Мне не понятно: почему lczero выдает winrate чуть ли не 98 процентов и оценку позиции +3.89, когда позиция абсолютно ничейная? Или это нейросеть так влияет (а не поиск Монте-Карло)?

  33. Mustitz Заслуженный

    • Заслуженный
    • Участник
    • Старожил
    Рег.:
    30.09.2006
    Сообщения:
    3.060
    Симпатии:
    472
    Репутация:
    25
    Адрес:
    Киев
    Оффлайн
    Потому что нейросеть говорит брать подставленную ладью. Что происходит в 96% всех случаев.
  34. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    555
    Симпатии:
    209
    Репутация:
    21
    Оффлайн
    Я полагаю происходит то же что и у обычных движков - поиск зашивается, получая на всех глубинах одинаковые оценки из оценочной функции. А варианты с жертвой отсекаются. Поэтому перебор как бы отключается и мы видим чистый вывод из оценочной функции. Поскольку у обычных движков оценочная функция простая и во многом упор делается на поиск (который по сути отключился), то и оценка получается незамысловатая.
  35. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    129
    Симпатии:
    178
    Репутация:
    13
    Оффлайн
    В тренировочных партиях подобные позиции встречались слишком редко (а учитывая, что это вообще невозможная позиция — никогда), поэтому lczero о ней и не может ничего сказать.

    Более реалистичную крепость он должен суметь распознать.
    sovaz1997 нравится это.

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