Можно ли использовать нейронную сеть для поиска минимума функций (а)? - PullRequest
10 голосов
/ 17 марта 2009

Я немного интересовался нейронными сетями и думал об использовании такой в ​​python для легкого проекта, который сравнивает различные методы минимизации во временной области (которая является самой быстрой).

Тогда я понял, что даже не знаю, хорош ли NN для минимизации. Что ты думаешь?

Ответы [ 8 ]

5 голосов
/ 17 марта 2009

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

3 голосов
/ 28 ноября 2012

Обратное распространение работает путем минимизации ошибки. Тем не менее, вы можете действительно минимизировать все, что вы хотите. Таким образом, вы можете использовать правила обновления в стиле back-prop, чтобы найти входы искусственной нейронной сети, которые минимизируют выход.

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

1 голос
/ 17 марта 2009

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

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

0 голосов
/ 06 июня 2014

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

Если вы работаете с регрессиями в машинном обучении (NN, SVM, множественная линейная регрессия, K ближайший сосед) и хотите минимизировать (максимизировать) свою регрессионную функцию, на самом деле это возможно, но эффективность таких алгоритмов зависит от сглаженность, (размер шага ... и т. д.) региона, в котором вы ищете.

Чтобы построить такие «регрессии машинного обучения», вы можете использовать scikit- learn . Вы должны обучить и подтвердить свой MLR регрессионный вектор поддержки . (метод «подгонки»)

SVR.fit(Sm_Data_X,Sm_Data_y)

Затем вы должны определить функцию, которая возвращает прогноз вашей регрессии для массива "x".

def fun(x):
    return SVR.predict(x)

Вы можете использовать scipiy.optimize.minimize для оптимизации. Смотрите примеры, следующие за документами.

0 голосов
/ 13 сентября 2013

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

Пример:

You can train  a 1 input 1 output NN to give output=sin(input)

You can train it also give output=cos(input) which is derivative of sin()

You get a minima/maxima of sin when you equate cos to zero.

Scan for zero output while giving many values from input. 0=cos() -> minima of sin

Когда вы достигаете нулевого выхода, вы знаете, что входное значение является минимумом функции.

Обучение занимает меньше времени, а ноль занимает много времени.

0 голосов
/ 02 апреля 2009

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

В основном NN имеет тенденцию находить решения, которые соответствуют локальному минимуму или максимуму функции, но при этом довольно точны (комментировать Tetha ответ о том, что NN являются классификаторами, которые можно использовать, если сказать, что ввод данных минимален или нет)

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

Решение состоит в том, чтобы объединить 2 мира

  1. Получить приблизительный результат из генетических алгоритмов
  2. Используйте этот результат, чтобы найти более точный ответ, используя NN
0 голосов
/ 17 марта 2009

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

0 голосов
/ 17 марта 2009

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

...