-
> Mystic © (06.02.19 13:32) [95] > > > Мистик, а как вы собираетесь определять схожесть? Это > сложная > > математика? > > > Нет, не сложная. В принципе, можно выбрать много метрик > оценки позиции (например, наименьшее расстояние до общей > позиции в партии). Или разность в количестве шашек, штрафы > на общие ходы, ... А дальше кластеризация. Потом можно прикрутить > автокодировщик, и смотреть расстояние уже в том векторном > пространстве, в котором он работает.
Я всё равно не представляю, как это может работать. В шахматах сдвинь пешку на одну клетку, и всё может перевернуться, а тут на схожесть какие-то расстояния проверяются)
-
она еще выиграла :) счет равный :)
-
-
> Я всё равно не представляю, как это может работать. В шахматах > сдвинь пешку на одну клетку, и всё может перевернуться,
Да, может перевернуться, то это тактика. За это отвечает перебор MCTS, а нейросеть отвечает только за выбор ходов-кандидатов. А вот ходы-кандидаты будут отличаться немного.
-
> Mystic © (07.02.19 12:49) [103]
А не подскажете простенький проект на github-е, который показывал как нейросетью (или еще как-нибудь) подогнать веса для оценочной функции?
-
Вообще, по работе с нейросетями (Python + keras) можно почитать Шолле, хорошая книга без большого погрудения в математику.
Чисто что-то простенькое для шахмат/шашек — не знаю...
-
SF выиграл трикряду, в одной из партий Leela зевнула достаточно простую тактику:
-
> Mystic © (08.02.19 11:19) [105]
кстати, а почему так получилось, что большинство таких проектов пишется на Python?
-
> кстати, а почему так получилось, что большинство таких проектов > пишется на 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
-
Мистик, а представьте: есть детерминированная игра с полной информацией, но не ясно, как писать оценочную функцию. Сможет ли нейросеть, играя сама с собой, вычленить позиционные признаки и найти веса для них?
-
AlphaZero и LeelaZero так и обучается, в этом их фишка. 10 часов обучения и AlphaZero играет примерно на одном уровне со SF в шахматы и бьёт всех с большим отрывом в го :) Оценочная функция это атрибут alpha-beta перебора (вширь). Соответственно, если движок не основан на alpha-beta переборе, то оценочная функция ему вообще ни в красную армию. Например, вот мои шашки на основе MCTS: http://mustitz.host.funtoo.org:2201/В них нет никакой оценочной функции. Вот только вряд ли речь идёт о позиционных признаках. Нейросеть скорее тут выступает как сжатая ассоциативная база.
-
Симпатично сделали. На чем писали?
-
-
И у вас партии разыгрываются случайным образом?
-
-
на удивление счет в суперфинале равный. Lc0 была постоянно в роли догоняющего, стокфиш не смог уйти в отрыв. Больше трети матча позади, посмотрим что будет интересно же :)
-
Уже Lc0 впереди
-
> Mystic © (14.02.19 12:18) [116] > Уже Lc0 впереди
ха-ха, а мы говорили невозможно - она видимо еще выиграет одну партию - сейчас оценка стокфиша 3.3 в пользу lc0
-
Мистик, а каково по вашему мнению будущее компьютерных шахмат?
-
> Мистик, а каково по вашему мнению будущее компьютерных шахмат? > >
100% рыба, а так проги будут играть сильнее, сильнее и сильнее. Со своими нюансами. Т. е. чемпионат между программами можно будет проводить в формате TCEC, только позиции будут всё более разбалансированы.
|