Почти
год назад наколеночная нейронная сеть научилась играть в шахматы просто имея массив готовых игр. В опубликованной недавно
статье (магистрская работа) описывается шахматная программа, использующая нейронную сеть для оценки позиции и оптимизации перебора. По утверждению авторов программа играет в силу мастера
(
Read more... )
Ну вот данный пример как раз показывает, что можно взять программу на жестких алгоритмах и заменить их или их части на мягкие нейросетевые с положительным эффектом. Модифицированная программа стала "сильнее" исходной на 150-200 пунктов рейтинга Эло.
По правде сказать, я раньше не особо верил в полезность генетических алгоритмов, из-за No Free Lunch. Во всяком случае для задач оптимизиации. Но в рамках Deep Learning они позволяют выявить закономерности, которые обычными методами найти чрезвычайно сложно, особенно в задачах высокой размерности. Эти ребята для оценочной функции закодировали позицию вектором размерности 350 или около того, там не только положения фигур, но и всякие тактические характеристики позиции. Половина успеха именно в способе представления.
Впрочем, тенденция последнего времени выявлять закономерности в данных, не пытаясь понять, как они там возникли. Это, как выразился один мой знакомый, замена науки "медициной", "почему" на "что".
Reply
Идее использования NN в шахматных программах уже десятки лет. Если бы эта идея была продуктивной -- все лучшие программы сейчас использовали бы NN. Ну, если не верить в теории заговора, конечно.
Вообще NN решает задачу подгонки произвольной неизвестной функции другой функцией, которая имеет огромное число параметров. Как говорил когда-то известный физик Ландау -- "дайте мне 5 параметров и я нарисую слона". Я не хочу сказать, что слонов рисовать не нужно. Но этот метод, отнюдь, не панацея. Его главные недостатки в том что "не понятно -- как это работает" и "не очевидно, что описав 1000 примеров с успехом, программа не даст какой-то катастрофический сбой на 1001-м". В каких-то областях, где примеров мало и сбои не так критичны (например OCR) -- это отлично работает.
Кроме того, если понимать задачу, решаемую NN, как задачу подгонки, то сразу отпадает всякая шелуха вроде "мозгоподобности". Просто берём набор данных, параметризованную функцию и "фитуем". Хорошая функция опишет данные хорошо, плохая плохо, функция же с малым количеством параметров поможет заодно и нам что-то о данных понять...
К.Л.М.
Reply
Возможно, что не хватало дешевых вычислительных мощностей и тестовых наборов (позиций, партий), которые в достаточном для обучения количестве стали открыто доступны в последние лет 5-10, не больше.
> Вообще NN решает задачу подгонки произвольной неизвестной функции другой функцией, которая имеет огромное число параметров.
Безусловно. Я как-то даже обсуждал этот вопрос менее абстрактно: http://ushastyi.livejournal.com/248444.html
Reply
О_О спасибо
Вот прям недавно с пытался объяснить плохи переоптимизация и подгонка параметров но похоже так и не донёс (дошёл аж до Колмогоровской сложности).
Reply
К.Л.М.
Reply
А если более развёрнуто, то:
1. Переоптимизация -- плохо всегда (тут по определению просто что для одного проекта (способа задания свободных коннстант) "пере" то для другого вполне себе оптимизация).
2. Подгонка (в этой вселенной) -- плохо почти всегда.
те из 2х случаев (дающих сразу после коммита одинаковый эффект)
if (app_name == "gcc") {
RunSpecialGccOptimization()
}
или
// область определения 1.0 - 1.5
// 1.1 - 1.4 "плато" с примерно одинаковой производительностью
// было 1.25 -- ровно середина мы соптимизировали
#define DEFICITE_KOEF 1.203
Первый случай -- вполне может быть оправданным распространённым юз-кейсом
А второй -- почти наверняка чистая переоптимизация которая даёт эффект "здесь и сейчас" с учётом всех остальных коэффициентов и эвристик. И вопрос лишь в том когда (через неделю или месяц) она перестанет работать.
Reply
Leave a comment