Как лучше всего подойти к проблеме определения формы неизвестной функции - PullRequest
2 голосов
/ 15 октября 2010

У меня есть набор переменных X, Y, ..., Z.Моя работа заключается в разработке функции, которая принимает этот набор переменных и выдает целое число.У меня есть функция пригодности, чтобы проверить это.

Моя первая попытка решить проблему - предположить, что я могу смоделировать f как линейную функцию:

f(X, Y, ..., Z) -> aX + bY ... cZ

Моя первая идеябыло использовать либо PSO (Particle Swarm Optimization), либо генетические алгоритмы для решения f для a, b, .., c, и я уверен, что они обязательно дадут хорошие результаты.

С другой стороны, я чувствую, что, может быть, такэволюционные алгоритмы на самом деле не нужны.Прежде всего, я могу вспомнить пару хороших «отправных точек» для a,b, .., c.Будучи f линейной функцией, не должно ли быть проще просто опробовать пару точек и затем сделать что-то вроде линейной регрессии с ними?И после линейной регрессии, пробуя еще пару точек, на этот раз ближе к тому, что выглядит как хорошее «пятно», снова делая для них линейную регрессию?

Каковы ее недостатки?Кто-нибудь с опытом в подобных проблемах?Самое большое, о чем я могу подумать, это то, что, возможно, то, что я считаю хорошими начальными значениями для a,b, .., c, может быть «локальной оптимой», а наличие какого-то эволюционного алгоритма дало бы мне глобальный.

f Предполагается, что это функция приближения для алгоритма Minimax в шахматоподобной игре, если это имеет значение.

Спасибо

Ответы [ 3 ]

3 голосов
/ 16 октября 2010

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

Общий подход аналогичен тому, что вы упомянули, решая линейные коэффициенты для переменных, чтобы минимизировать некоторые потери, как правило, сумму квадратов ошибок (L2 Loss).Это желательно, потому что это выпуклая функция и, следовательно, содержит один минимум, и веса могут быть решены за полиномиальное время.Однако, как вы упомянули, истинная функция может не лежать в этом классе функций, и у вас будет плохая оценка.Подход в этом случае - , а не , чтобы попробовать какую-то невыпуклую оптимизацию с некоторыми неясными методами роя частиц или генетическими алгоритмами или любым другим методом глобальной оптимизации.Ваше утверждение «... может быть« локальным оптимумом », а наличие какого-то эволюционного алгоритма даст мне глобальный».наивныйГлобальная оптимизация - это NP-Hard, эти методы являются лишь приблизительными и не несут абсолютно никаких гарантий относительно времени выполнения или оптимальности, и они почти никогда не работают.

Гораздо более приемлемый подход - использовать «расширение возможностей», которое требуетпеременные X, Y, ..., Z и применяет нелинейное преобразование к некоторому новому набору phi(X), phi(Y), ..., phi(Z).На этом этапе вы можете найти оптимальное линейное взвешивание для каждого объекта с наименьшими квадратами (если вы используете L2) или что-то еще.Как найти хорошие функции - это открытая проблема в машинном обучении, но для этого есть множество идей и свободно доступных алгоритмов.

1 голос
/ 16 октября 2010

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

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

1 голос
/ 15 октября 2010

Учитывая, что вы работаете над игрой, первое, что приходит на ум, - это древняя программа для игры в шашки, разработанная Артуром Самуэлем в 1950-х годах и упомянутая Расселом и Норвигом в их главе об игре (среди прочего, это все еще классика в машинном обучении без присмотра / под наблюдением).

В этой программе предполагалось, что значение доски шашек является линейной функцией доскипозиция.Я не знаю деталей, но я предполагаю, что каждая из фигур игрока стоила +1, фигуры противника -1 и пустые поля 0. Каждый квадрат имел вес, связанный с ним, который был изучен, когда программа играла противСамо по себе (большое) число раз, оценивая игру после каждого матча.

Эта стратегия называется самообучением и также применялась в классическом программном обеспечении для игры в нарды TD-Gammon , которое основано нав нейронных сетях (многослойных / нелинейных).На странице Википедии об этой программе есть некоторые потенциально интересные ссылки.

Этот ответ превращается в эссе о чем-то, в чем я не эксперт.Пожалуйста, смотрите соответствующую литературу.

...