Конференция "Прочее" » AlphaZero - как работает??
 
  • java_guy © (06.02.19 20:39) [100]

    > Mystic ©   (06.02.19 13:32) [95]
    >
    > > Мистик, а как вы собираетесь определять схожесть? Это
    > сложная
    > > математика?
    >
    >
    > Нет, не сложная. В принципе, можно выбрать много метрик
    > оценки позиции (например, наименьшее расстояние до общей
    > позиции в партии). Или разность в количестве шашек, штрафы
    > на общие ходы, ... А дальше кластеризация. Потом можно прикрутить
    > автокодировщик, и смотреть расстояние уже в том векторном
    > пространстве, в котором он работает.


    Я всё равно не представляю, как это может работать. В шахматах сдвинь пешку на одну клетку, и всё может перевернуться, а тут на схожесть какие-то расстояния проверяются)
  • xayam © (07.02.19 02:35) [101]
    она еще выиграла :) счет равный :)
  • java_guy © (07.02.19 10:01) [102]
    Интервью с одним из разработчиков Lc0:
    http://www.chessdom.com/interview-with-alexander-lyashuk-about-the-recent-success-of-lc0/
  • Mystic © (07.02.19 12:49) [103]

    > Я всё равно не представляю, как это может работать. В шахматах
    > сдвинь пешку на одну клетку, и всё может перевернуться,


    Да, может перевернуться, то это тактика. За это отвечает перебор MCTS, а нейросеть отвечает только за выбор ходов-кандидатов. А вот ходы-кандидаты будут отличаться немного.
  • java_guy © (08.02.19 06:13) [104]

    > Mystic ©   (07.02.19 12:49) [103]


    А не подскажете простенький проект на github-е, который показывал как нейросетью (или еще как-нибудь) подогнать веса для оценочной функции?
  • Mystic © (08.02.19 11:19) [105]
    Вообще, по работе с нейросетями (Python + keras) можно почитать Шолле, хорошая книга без большого погрудения в математику.

    Чисто что-то простенькое для шахмат/шашек — не знаю...
  • Mystic © (08.02.19 14:06) [106]
    SF выиграл трикряду, в одной из партий Leela зевнула достаточно простую тактику:
  • java_guy © (08.02.19 14:55) [107]

    > Mystic ©   (08.02.19 11:19) [105]


    кстати, а почему так получилось, что большинство таких проектов пишется на Python?
  • Mystic © (08.02.19 17:26) [108]

    > кстати, а почему так получилось, что большинство таких проектов
    > пишется на Python?


    Ну... Я вижу следующие преимущества.

    (1) У Python есть консоль, где можно вводить команды по одной и видеть результаты. Все компилируемые языки типа Java идут лесом, потому как 90% кода это R&D, который запускается часто один раз в жизни. Например, принесли новый набор данных в CSV-формате. Мы хотим его посмотреть, немного преобразовать. Вот это я могу делать пошагово в консоле. Если где ошибусь, то выполню ещё одну праивльную команду — всё осталось жить в памяти. Никаких тебе циклов компиляция/запуск с перечитыванием всего и вся в память.

    (2) Python исторически оказался инструментом, который понравился сишникам (embedding). Поэтому там хорошая интеграция с C, что позволяет на нем реализовывать участки кода, которые критичны к производительности или которые требуют доступа к двайверам/железу. На Python есть много таких библиотек, посему умножать матрицы на Python жутко тормознуто, то несли это делает numpy, то это делает C-код со сравнимой скоростью. У многих динамических языков программирования (особенно заточенных под web) интеграция с C/C++ несколько нетривиальна. Имхо, Ruby долгое время мешала заточненность под web (львиная доля всех проектов). Javascript имеет тяжёлое наследие. В качестве клея они использовались мало.

    (3) Python это бесплатный язык программирования общего назначения. Который достаточно просто устнановить и настроить в Linux. Если я натренировал нейронную сети, я могу тут же в Python по месту на Amazon-сервере тут же развернуть микросервис с простым JSON-интерфейсом. Если брать тоже популяные в среду машинного обучения языки, такие как R и MATLAB, то MATLAB достаточно монстроуозен,  и поставить его на Amazon под docker как-то вот тяжеловато... Если брать R, то он затачивался больше под R&D и там мало библиотек общего назначения, и они развиваются медленнее.

    Если брать по мелочи, то очень помогли такие две фишки:
    a. индексация слайсов через двоеточие, по аналогии с математическими языками R и MATLAB успрощает реализацию математики
    x = [1, 2, 3, 4, 5, 6] : x[2:3] = [0,0] # x = [1, 2, 0, 0, 4, 5, 6]

    ;
    b. генераторы позволяют писать код так, что со стороны выглядит, что создаётся большое количество временных объектов. Это проще и нагляднее, а привыполнении кода циклы вкладываются и экономится память:
    incremented = map(lambda x: x+1, data)
    [ x for x in incremented if x > 3 ]


    разворачивается в
    result = []
    for x in data:
     x = x + 1
     if x > 3:
       result.append(x)
    result

  • java_guy © (08.02.19 20:58) [109]
    Мистик, а представьте: есть детерминированная игра с полной информацией, но не ясно, как писать оценочную функцию. Сможет ли нейросеть, играя сама с собой, вычленить позиционные признаки и найти веса для них?
  • Mystic © (09.02.19 14:33) [110]
    AlphaZero и LeelaZero так и обучается, в этом их фишка. 10 часов обучения и AlphaZero играет примерно на одном уровне со SF в шахматы и бьёт всех с большим отрывом в го :)

    Оценочная функция это атрибут alpha-beta перебора (вширь). Соответственно, если движок не основан на alpha-beta переборе, то оценочная функция ему вообще ни в красную армию. Например, вот мои шашки на основе MCTS:
    http://mustitz.host.funtoo.org:2201/
    В них нет никакой оценочной функции.

    Вот только вряд ли речь идёт о позиционных признаках. Нейросеть скорее тут выступает как сжатая ассоциативная база.
  • java_guy © (09.02.19 15:34) [111]
    Симпатично сделали. На чем писали?
  • Mystic © (11.02.19 14:03) [112]
    https://gitlab.com/mustitz/rus-checkers
    Или на github
    https://github.com/mustitz/checkers
    но там нет одного подмодуля.
  • java_guy © (11.02.19 19:59) [113]
    И у вас партии разыгрываются случайным образом?
  • Mystic © (11.02.19 21:59) [114]

    > И у вас партии разыгрываются случайным образом?


    Там MCTS с использование формулы UCB1, вот цикл симуляции:
    https://github.com/mustitz/checkers/blob/master/source/ai-mcts.c#L531

    А вот в случае, когда в позиции не все ходы исследованы, то есть два варианта: либо мы ход выбираем случайно (smooth=0), либо мы считаем, что в каждой позиции уже как минимум один раз встречался каждый ход, и в результате получилась рыба (smooth). Параметр smooth можно настроить в консоли.

    Это мердж логики со smooth:
    https://github.com/mustitz/checkers/commit/f384304c5818ff3c6720c813cc66fdb757dc9d99
    там же можно посмотреть на статы (не повлияло на силу, особенно при длинных контролях)
  • xayam © (11.02.19 22:59) [115]
    на удивление счет в суперфинале равный.
    Lc0 была постоянно в роли догоняющего, стокфиш не смог уйти в отрыв.
    Больше трети матча позади, посмотрим что будет интересно же :)
  • Mystic © (14.02.19 12:18) [116]
    Уже Lc0 впереди
  • xayam © (14.02.19 13:42) [117]

    > Mystic ©   (14.02.19 12:18) [116]
    > Уже Lc0 впереди

    ха-ха, а мы говорили невозможно - она видимо еще выиграет одну партию -
    сейчас оценка стокфиша 3.3 в пользу lc0
  • java_guy © (14.02.19 17:07) [118]
    Мистик, а каково по вашему мнению будущее компьютерных шахмат?
  • Mystic © (14.02.19 17:33) [119]

    > Мистик, а каково по вашему мнению будущее компьютерных шахмат?
    >
    >


    100% рыба, а так проги будут играть сильнее, сильнее и сильнее. Со своими нюансами. Т. е. чемпионат между программами можно будет проводить в формате TCEC, только позиции будут всё более разбалансированы.
 
Конференция "Прочее" » AlphaZero - как работает??
Есть новые Нет новых   [118638   +31][b:0.001][p:0.001]