Подтвердить что ты не робот

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

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

f(x) = x^2

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

Говоря о скользящей средней, могут ли текущие нейронные сети правильно аппроксимировать это? Я понимаю, как прямая нейронная сеть или даже один линейный нейрон могут выводить скользящее среднее с использованием метода скользящего окна, но как бы рекуррентные нейронные сети делают это без X количества скрытых слоев (X - средний скользящий размер)?

Также предположим, что мы не знаем исходную функцию f, которая, как оказалось, получает среднее значение из последних 500 входов, а затем выводит 1, если оно выше 3, и 0 если нет. Но на секунду притворимся, что мы этого не знаем, это черный ящик.

Как бы повторяющаяся нейронная сеть приблизилась к этому? Сначала нам нужно знать, сколько временных меток оно должно иметь, чего у нас нет. Возможно, сеть LSTM могла, но даже тогда, что, если это не простая скользящая средняя, ​​это экспоненциальная скользящая средняя? Я не думаю, что даже LSTM может это сделать.

Еще хуже, что если f (x, x1), который мы пытаемся изучить, просто

f(x,x1) = x * x1

Это кажется очень простым и понятным. Может ли нейронная сеть научиться этому? Я не вижу, как.

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

4b9b3361

Ответ 1

Ключевым моментом для понимания является компактный:

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

Иными словами, теория утверждает, что, учитывая:

  • Непрерывная функция f (x),
  • Конечный диапазон для ввода x, [a, b] и
  • Требуемая точность приближения & epsilon; > 0,

то существует нейронная сеть, которая аппроксимирует f (x) с погрешностью приближения меньше & epsilon;, всюду внутри [a, b].

Что касается вашего примера f (x) = x 2, да, вы можете аппроксимировать его нейронной сетью в любом конечном диапазоне: [- 1, 1], [0, 1000] и т.д. Чтобы представить это, представьте, что вы приближаетесь к f (x) внутри [- 1,1 ] с помощью Step Function. Можете ли вы сделать это на бумаге? Обратите внимание: если вы сделаете шаги достаточно узкими, вы можете достичь любой желаемой точности. То, как нейронные сети приближаются к f (x), не сильно отличается от этого.

Но опять же, нет нейронной сети (или любой другой структуры аппроксимации) с конечным числом параметров, которые могут аппроксимировать f (x) = x 2 для всех x в [- ∞, + ∞].

Ответ 2

Я не уверен, почему существует такая висцеральная реакция, я думаю, что это законный вопрос, который трудно найти, перейдя по ссылке, хотя я думаю, что он широко оценен и повторен вслух. Я думаю, что в этом случае вы ищете фактические цитаты, показывающие, что нейронная сеть может аппроксимировать любую функцию. Этот недавний документ объясняет это, на мой взгляд, красиво. Они также ссылаются на оригинальную работу Баррона с 1993 года, которая оказалась менее общим результатом. Вывод: двухслойная нейронная сеть может представлять любой ограниченный степенной полином при определенных (казалось бы, не ограничивающих) условиях.

На всякий случай ссылка не работает, она называется "Изучение полиномов с нейронными сетями" Андони и др., 2014.

Ответ 3

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

UAT утверждает, что любая непрерывная функция в компактной области может быть аппроксимирована нейронной сетью только с одним скрытым слоем при условии, что используемые функции активации ОБНАРУЖЕНЫ, непрерывны и монотонно возрастают. Теперь конечная сумма ограниченных функций ограничена по определению.

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

Вопрос не является нелогичным и не отражает мнение OP.

Ответ 4

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

f(x) = x^2

Единственный способ понять этот вопрос - это говорить о экстраполяции. Так, например, данные учебных образцов в диапазоне -1 < x < +1 может ли нейронная сеть узнать правильные значения для x > 100? Это то, что вы имели ввиду?

Если у вас были предварительные знания, что функции, которые вы пытаетесь аппроксимировать, скорее всего, являются многочленами низкого порядка (или любым другим набором функций), то вы, несомненно, можете построить нейронную сеть, которая может представлять эти функции, и экстраполировать x^2 всюду.

Если у вас нет предварительного знания, все немного сложнее: существует бесконечно много гладких функций, которые идеально подходят x^2 в диапазоне -1..+1, и нет веской причины, по которой мы ожидали бы x^2 чтобы дать лучшие прогнозы, чем любая другая функция. Другими словами: если бы у нас не было предварительного знания о функции, которую мы пытаемся узнать, зачем нам учиться x -> x^2? В области искусственных наборов обучения x^2 может быть вероятной функцией, но в реальном мире это, вероятно, не так.

Приведем пример: пусть говорят, что температура в понедельник (t = 0) равна 0 °, во вторник она 1 °, в среду - 4 °. У нас нет оснований полагать, что температуры ведут себя как полиномы низкого порядка, поэтому мы не хотим делать вывод из этих данных о том, что температура в следующий понедельник, вероятно, составит около 49 °.

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

Как бы повторяющаяся нейронная сеть приблизилась к этому?

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

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

Ответ 5

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

1- бесконечное количество примеров обучения 2- бесконечное количество единиц 3 - бесконечное количество времени для сходимости

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

Вот подсказка:
Попробуйте построить NN, который принимает n + 1 входов данных (x0, x1, x2,... xn), и он вернет true (или 1), если (2 * x0) находится в остальной части последовательности. И удачи. Бесконечные функции, особенно рекурсивные, не могут быть изучены. Они просто!