kaipa: (Default)
[personal profile] kaipa
Почти год назад наколеночная нейронная сеть научилась играть в шахматы просто имея массив готовых игр. В опубликованной недавно статье (магистрская работа) описывается шахматная программа, использующая  нейронную сеть для оценки позиции и оптимизации перебора. По утверждению авторов программа играет в силу мастера.

Хотя это звучит круто-круто, на самом деле это круто, но не настолько :) Так как начальной точкой оптимизации была программа, основанная на традиционных алгоритмах, которая уже играла чуть хуже кандидата в мастера. Нейронные сети использовались для ее улучшения и замены некоторых алгоритмических частей на обучаемые.

Статья интересная, и ее стоит прочитать всем, кто интересуется этой темой. Нейронная сеть была использована для двух разных целей.

Для начала, авторы поставили задачу оценки позиции при помощи нейронный сети. Они построили и натренировали сеть так, чтобы получить функцию оценки максимально близкую к известной функции оценки Stockfish (есть массив позиций оцененных Stockfish). А потом проверили на позициях из Strategic Test Suite. Натренированная нейронная сеть смогла оценивать позиции на уровне лучших шахматных программ, не имея практически никаких априорных знаний -- только опыт обучения!

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

В обоих случаях существующий жесткий алгоритм был заменен гибкой и обучаемой нейронной сетью, то есть при дальнейшем обучении (на лучших данных или в режиме self-play) можно ожидать еще большего роста качества игры.

Это, конечно, не так круто, как "научиться играть" по партиям, но все равно впечатляет.

Date: 2015-09-18 12:52 pm (UTC)
From: [identity profile] dr-klm.livejournal.com
Ну, для стандартного минимакса есть альфа-бета отсечение, которое для того и придумано, чтобы не рассматривать заведомо плохие ветви. При его прикручивании к обычному минимаксу глубина перебора повышается и такая программа будет переигрывать исходную.

К.Л.М.

Date: 2015-09-18 01:13 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
Это немного разные вещи. Альфа-бета отсечение не рассматривает заведомо плохие ветви, а ограничение по глубине или вероятностям определяет насколько глубоко надо рассматривать потенциально хорошие ветви. Кроме того, альфа-бета отсечение чувствительно к порядку обхода ветвей.
Edited Date: 2015-09-18 01:14 pm (UTC)

Date: 2015-09-18 07:49 pm (UTC)
From: [identity profile] dr-klm.livejournal.com
Ну "насколько глубоко" -- это и есть отсечение (альфа-бета или ещё какое).

Кроме того, зависимость результата (окончательных оценок позиций) от порядка обхода ветвей -- лишь следствие того, что граф обходится не полностью. А разве эта зависимость как-то мешает ?

К.Л.М.

p.s. Альфа-бета отсечение я когда-то ещё в школе делал для игры в шашки. Давно это было, мог позабыть чего...

Date: 2015-09-18 10:15 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
Насколько я понимаю, при неограниченном времени разница невелика. При ограниченном -- и порядок обхода имеет значение, и глубина анализа "перспективных" ходов еще большее.

Кстати, одно из следующих направлений исследований, которое предлагают авторы в статье, это использование сети для распределения времени на анализ тех или иных ветвей.

Date: 2015-09-19 04:05 pm (UTC)
From: [identity profile] dr-klm.livejournal.com
Эвристики (а применение нейросетей для оценки позиций я тоже отношу к эвристикам) в шахматных программах используются широко. Да и конкретно нейросети используются для этого с середины-конца прошлого века. Сегодняшняя программа-чемпион Jonny не использует нейросетей (но использует альфа-бета отсечение).

Если программы на нейросетях будут стабильно переигрывать другие программы на том же железе -- это будет для меня новостью, конечно.

К.Л.М.

Date: 2015-09-19 05:41 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
> Если программы на нейросетях будут стабильно переигрывать другие программы на том же железе -- это будет для меня новостью, конечно.

Ну вот данный пример как раз показывает, что можно взять программу на жестких алгоритмах и заменить их или их части на мягкие нейросетевые с положительным эффектом. Модифицированная программа стала "сильнее" исходной на 150-200 пунктов рейтинга Эло.

По правде сказать, я раньше не особо верил в полезность генетических алгоритмов, из-за No Free Lunch. Во всяком случае для задач оптимизиации. Но в рамках Deep Learning они позволяют выявить закономерности, которые обычными методами найти чрезвычайно сложно, особенно в задачах высокой размерности. Эти ребята для оценочной функции закодировали позицию вектором размерности 350 или около того, там не только положения фигур, но и всякие тактические характеристики позиции. Половина успеха именно в способе представления.

Впрочем, тенденция последнего времени выявлять закономерности в данных, не пытаясь понять, как они там возникли. Это, как выразился один мой знакомый, замена науки "медициной", "почему" на "что".

Date: 2015-09-19 06:01 pm (UTC)
From: [identity profile] dr-klm.livejournal.com
Пример показывает, что если взять программу и доработать её, то она станет лучше. Так, в принципе, должно быть всегда. Ну, если дорабатывать с умом, конечно. И особенно если исходная программа была "не очень".

Идее использования NN в шахматных программах уже десятки лет. Если бы эта идея была продуктивной -- все лучшие программы сейчас использовали бы NN. Ну, если не верить в теории заговора, конечно.

Вообще NN решает задачу подгонки произвольной неизвестной функции другой функцией, которая имеет огромное число параметров. Как говорил когда-то известный физик Ландау -- "дайте мне 5 параметров и я нарисую слона". Я не хочу сказать, что слонов рисовать не нужно. Но этот метод, отнюдь, не панацея. Его главные недостатки в том что "не понятно -- как это работает" и "не очевидно, что описав 1000 примеров с успехом, программа не даст какой-то катастрофический сбой на 1001-м". В каких-то областях, где примеров мало и сбои не так критичны (например OCR) -- это отлично работает.

Кроме того, если понимать задачу, решаемую NN, как задачу подгонки, то сразу отпадает всякая шелуха вроде "мозгоподобности". Просто берём набор данных, параметризованную функцию и "фитуем". Хорошая функция опишет данные хорошо, плохая плохо, функция же с малым количеством параметров поможет заодно и нам что-то о данных понять...

К.Л.М.

Date: 2015-09-19 09:08 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
> Идее использования NN в шахматных программах уже десятки лет. Если бы эта идея была продуктивной -- все лучшие программы сейчас использовали бы NN.

Возможно, что не хватало дешевых вычислительных мощностей и тестовых наборов (позиций, партий), которые в достаточном для обучения количестве стали открыто доступны в последние лет 5-10, не больше.

> Вообще NN решает задачу подгонки произвольной неизвестной функции другой функцией, которая имеет огромное число параметров.

Безусловно. Я как-то даже обсуждал этот вопрос менее абстрактно: http://ushastyi.livejournal.com/248444.html

Как говорил Ландау

Date: 2015-10-21 03:10 pm (UTC)
From: [identity profile] son-0f-morning.livejournal.com
Как говорил когда-то известный физик Ландау -- "дайте мне 5 параметров и я нарисую слона".

О_О спасибо
Вот прям недавно с пытался объяснить плохи переоптимизация и подгонка параметров но похоже так и не донёс (дошёл аж до Колмогоровской сложности).

Re: Как говорил Ландау

Date: 2015-10-21 03:54 pm (UTC)
From: [identity profile] dr-klm.livejournal.com
Ну, не так уж они совсем и "плохи". Просто когда параметров много, успешная подгонка может не означать ровным счётом ничего (в смысле невозможности извлечь из этих параметров полезную информацию) и не давать никакой разумной экстраполяции.

К.Л.М.

Re: Как говорил Ландау

Date: 2015-10-22 09:38 am (UTC)
From: [identity profile] son-0f-morning.livejournal.com
"чем плохи". "чем" в процессе редактирования стёрлось ;)

А если более развёрнуто, то:
1. Переоптимизация -- плохо всегда (тут по определению просто что для одного проекта (способа задания свободных коннстант) "пере" то для другого вполне себе оптимизация).

2. Подгонка (в этой вселенной) -- плохо почти всегда.
те из 2х случаев (дающих сразу после коммита одинаковый эффект)

if (app_name == "gcc") {
RunSpecialGccOptimization()
}

или

// область определения 1.0 - 1.5
// 1.1 - 1.4 "плато" с примерно одинаковой производительностью
// было 1.25 -- ровно середина мы соптимизировали
#define DEFICITE_KOEF 1.203

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

Profile

kaipa: (Default)
kaipa

April 2017

S M T W T F S
       1
2345678
9101112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 24th, 2026 07:41 am
Powered by Dreamwidth Studios