Как мне улучшить мою нейронную сеть при прогнозировании синусоидальных волн?

21

Вот, посмотрите: Сгенерированная синусоида вы можете точно увидеть, где заканчиваются тренировочные данные. Тренировочные данные идут от до 1 .-11

Я использовал Keras и плотную сеть 1-100-100-2 с активацией tanh. Я вычисляю результат по двум значениям, p и q как p / q. Таким образом, я могу получить любой размер числа, используя только значения меньше 1.

Пожалуйста, обратите внимание, что я все еще новичок в этой области, так что будьте спокойны со мной.

Маркус Аппель
источник
1
Чтобы уточнить, ваши тренировочные данные находятся в диапазоне от -1,5 до +1,5, так что сеть узнала это точно? Итак, ваш вопрос касается экстраполяции результата на невидимые числа вне диапазона данных обучения?
Нил Слэйтер
11
Вы можете попробовать преобразовать Фурье все и работать в частотной области.
Ник Алджер
4
Для будущих рецензентов: я не знаю, почему это помечено для закрытия. Мне кажется совершенно ясным: речь идет о стратегиях моделирования периодических данных с помощью нейронных сетей.
Sycorax сообщает восстановить Monica
1
Я думаю, что это разумный вопрос для новичка в области машинного обучения, который мы должны здесь учесть. Я бы не закрыл это
Аксакал
1
Я не знаю, поможет ли это, но из коробки ванильный NN сможет только выучить полиномиальные функции. На практике это нормально, так как вы можете сделать многочлен произвольно близким на фиксированном интервале. Но это означает, что вы никогда не сможете изучить синусоидальную волну, которая простирается за пределы конца интервала. Хитрость, на которую указывали другие ответы ниже, состоит в том, чтобы превратить проблему в проблему, которая может быть решена таким образом. Это то, что предлагает предложенное преобразование Фурье, и в этом случае изучение синусоидальной волны - это просто изучение постоянной.
Укко

Ответы:

19

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

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

(Икся,грех(Икся))Икся+1...Икся+NNя

(Хименес-Гуарнерос, Магдиэль и Гомес-Гил, Пилар и Фонсека-Дельгадо, Ригоберто и Рамирес-Кортес, Мануэль и Аларкон-Акино, Висенте, «Долгосрочное прогнозирование функции синуса с использованием нейронной сети LSTM», в Nature- Вдохновленный дизайн гибридных интеллектуальных систем )

Sycorax говорит восстановить Монику
источник
2
Какая последовательность моделируется здесь? Какие временные шаги? Это выглядит как простое приложение для подгонки кривой.
Дэвид Дж. Харрис
@ DavidJ. Харрис Я обновил свой ответ.
Sycorax говорит восстановить Monica
1/(2π)
Например, как они делают рыночные прогнозы?
Маркус Аппель
3
Нет, это не то, как вы делаете рыночные прогнозы. По крайней мере, не так, как вы делаете это, чтобы заработать деньги.
Аксакал
13

Если вы хотите изучать простые периодические функции, подобные этой, то вы можете изучить использование процессов Гаусса. Врачи общей практики позволяют вам в определенной степени усилить знание предметной области, указав соответствующую ковариационную функцию; в этом примере, поскольку вы знаете, что данные являются периодическими, вы можете выбрать периодическое ядро, тогда модель будет экстраполировать эту структуру. Вы можете увидеть пример на рисунке; здесь я пытаюсь уместить данные о высоте прилива, поэтому я знаю, что они имеют периодическую структуру. Поскольку я использую периодическую структуру, модель экстраполирует эту периодичность (более или менее) правильно. OFC, если вы пытаетесь узнать о нейронных сетях, это не очень актуально, но это может быть немного более приятный подход, чем функции ручной инженерии. Кстати, нейронные сети и GP тесно связаны в теории,введите описание изображения здесь

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

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

Органы местного самоуправления
источник
2
Этот сюжет прекрасен.
Sycorax говорит восстановить Monica
11

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

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

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

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

грехгрех(Икс),грех(2Икс+π/4)грех

Нил Слэйтер
источник
«Нейронная сеть никогда не изучает функцию аналитически, только приблизительно через статистику». - то же самое можно сказать почти обо всем, что используется на практике, например, БПФ также не обучается аналитически. Вы можете увеличить частоту дискретизации и период до бесконечности и бесконечно приблизиться к истинной функции, но то же самое верно и для NN.
Аксакал
@ Аксакал: Да, это правда. Однако я не хотел утверждать, что «все алгоритмы ML никогда не изучают функции аналитически ...» потому что кто-то, без сомнения, придумает контр-пример какого-нибудь байесовского ученика-аналитика или генетического программиста и т. д. и т. д. Я постараюсь отредактировать его, чтобы сделать его более общим
Нил Слэйтер
9

В некоторых случаях предложенный @Neil Slater подход к преобразованию ваших функций с помощью периодической функции будет работать очень хорошо и может быть лучшим решением. Сложность в том, что вам может понадобиться выбрать период / длину волны вручную (см. Этот вопрос ).

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

В качестве альтернативы, этот документ использует другой подход, где вес сети зависит от периодической функции. В документе также предлагается использовать сплайны вместо sin / cos, поскольку они более гибкие. Это была одна из моих любимых статей в прошлом году, так что стоит прочитать (или хотя бы посмотреть видео), даже если вы не используете его подход.

Дэвид Дж. Харрис
источник
9

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

Есть несколько разных способов решения проблемы. Я предложу наиболее очевидный из них через проектирование функций. Вместо того чтобы указывать время как линейный элемент, укажите его как остаток от модуля T = 1. Например, t = 0,2, 1,2 и 2,2 все станут признаком t1 = 0,1 и т. Д. До тех пор, пока T больше периода волны, это сработает. Подключите эту вещь в свою сеть и посмотрите, как она работает.

Характеристика техники недооценена. В AI / ML есть такая тенденция, когда продавцы утверждают, что вы сбрасываете все свои входные данные в сеть, и каким-то образом он выяснит, что с ними делать. Конечно, так и есть, как вы видели в своем примере, но затем он ломается так же легко. Это отличный пример, который показывает, насколько важно создавать хорошие функции даже в самых простых случаях.

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

Аксакал
источник