Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4 5 6 7 8

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, только позиции будут всё более разбалансированы.


Страницы: 1 2 3 4 5 6 7 8 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо