Можно ли использовать нейронную сеть для нахождения минимума функций (a)?

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

Тогда я понял, что даже не знаю, подходит ли NN для минимизации. Как вы думаете?

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

  • Получить приблизительный результат из генетических алгоритмов
  • Используйте этот результат, чтобы найти более точный ответ, используя NN

Ответ 7

Вы можете научить 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

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

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

Ответ 8

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

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

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

SVR.fit(Sm_Data_X,Sm_Data_y)

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

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

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