Может ли нейронная сеть использоваться для поиска минимума функций(a)?
Я немного интересовался нейронными сетями и думал об использовании одного в python для легкого проекта, который сравнивает различные методы минимизации во временной области (что является самым быстрым).
затем я понял, что даже не знаю, хорошо ли NN для минимизации. А ты как думаешь?
8 ответов
нейронные сети являются классификаторами. Они разделяют два класса элементов данных. Они узнают это разделение (как правило) по preclassified элементов данных. Таким образом, я говорю: Нет, если вы не сделаете большую растяжку за пределами поломки.
Мне кажется, что это проблема, более подходящая для генетические алгоритмы чем нейронные сети. Нейронные сети, как правило, нуждаются в ограниченной проблеме для решения, требующей обучения известным данным и т. д. - в то время как генетические алгоритмы работают, находя все лучшие и лучшие приближенные решения проблемы без необходимости обучения.
Back-propagation работает путем минимизации ошибки. Тем не менее, вы можете свести к минимуму все, что хотите. Таким образом, вы можете использовать правила обновления типа back-prop для поиска искусственных входов нейронной сети, которые минимизируют выход.
Это большой вопрос, извините за короткий ответ. Я также должен добавить, что мой предлагаемый подход звучит довольно неэффективно по сравнению с более установленными методами и найдет только локальные минимумы.
процесс обучения нейронной сети обратного распространения работает путем минимизации ошибки от оптимального результата. Но с обученной нейронной сетью найти минимум неизвестной функции было бы довольно сложно.
Если вы ограничиваете проблему определенным классом функций,она может работать и быть довольно быстрой. Нейронные сети хороши в поиске паттернов, если таковые имеются.
Они довольно плохи для этой цели; одна из больших проблем нейронных сетей заключается в том, что они застревают в локальных минимумах. Вы можете посмотреть в опорных векторов.
на самом деле вы можете использовать NN для поиска минимума функции, но он будет работать лучше всего в сочетании с генетическими алгоритмами, упомянутыми Ерик.
в основном NN tent, чтобы найти решения, которые соответствуют локальному минимуму или максимуму функции, но при этом довольно точны (прокомментировать Tetha ответ, заявляющий, что NN-классификаторы, которые вы можете использовать, если сказать, что ввод данных минимален или нет)
в отличие от генетических алгоритмов, как правило, находят более универсальное решение из всего диапазона возможных входов, но затем даст вам ближайшие результаты.
решение объединить 2 мира
- получить приблизительный результат от генетических алгоритмов
- используйте этот результат, чтобы найти более точный ответ, используя NN
вы можете научить 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
когда вы достигнете нулевого выхода, вы знаете, что входное значение является минимумом функции.
обучение занимает меньше, сметая на ноль долго.
хотя это немного слишком поздно для автора этого вопроса. Может, кто-то хочет проверить некоторые алгоритмы оптимизации, когда он читает это...
Если вы работаете с регрессиями в машинном обучении (NN, SVM, множественная линейная регрессия, K ближайший сосед), и вы хотите минимизировать (максимизировать) свою регрессионную функцию, на самом деле это возможно, но эффективность таких алгоритмов зависит от гладкости (размер шага... так далее.) региона вы ищете в.
чтобы построить такие "регрессии машинного обучения", вы можете использовать scikit-learn. Вы должны тренироваться и проверять свой MLR Поддержка Векторной Регрессии. ("подходит" метод)
SVR.fit(Sm_Data_X,Sm_Data_y)
затем вы должны определить функцию, которая возвращает прогноз вашей регрессии для массива "x".
def fun(x):
return SVR.predict(x)
можно использовать scipiy.оптимизировать.минимизировать для оптимизации. См. примеры, следующие за doc-ссылками.