Вот, посмотрите: вы можете точно увидеть, где заканчиваются тренировочные данные. Тренировочные данные идут от до 1 .
Я использовал Keras и плотную сеть 1-100-100-2 с активацией tanh. Я вычисляю результат по двум значениям, p и q как p / q. Таким образом, я могу получить любой размер числа, используя только значения меньше 1.
Пожалуйста, обратите внимание, что я все еще новичок в этой области, так что будьте спокойны со мной.
regression
neural-networks
python
keras
Маркус Аппель
источник
источник
Ответы:
Вы используете сеть прямой связи; другие ответы верны, что FFNN не очень хороши в экстраполяции за пределы диапазона обучающих данных.
Однако, поскольку данные имеют периодическое качество, проблема может быть поддается моделированию с помощью LSTM. LSTM - это разновидность нейронных ячеек, которые работают с последовательностями и имеют «память» о том, что они «видели» раньше. Конспект этой главы книги предполагает LSTM подход является квалифицированным успех на периодических задачах.
(Хименес-Гуарнерос, Магдиэль и Гомес-Гил, Пилар и Фонсека-Дельгадо, Ригоберто и Рамирес-Кортес, Мануэль и Аларкон-Акино, Висенте, «Долгосрочное прогнозирование функции синуса с использованием нейронной сети LSTM», в Nature- Вдохновленный дизайн гибридных интеллектуальных систем )
источник
Если вы хотите изучать простые периодические функции, подобные этой, то вы можете изучить использование процессов Гаусса. Врачи общей практики позволяют вам в определенной степени усилить знание предметной области, указав соответствующую ковариационную функцию; в этом примере, поскольку вы знаете, что данные являются периодическими, вы можете выбрать периодическое ядро, тогда модель будет экстраполировать эту структуру. Вы можете увидеть пример на рисунке; здесь я пытаюсь уместить данные о высоте прилива, поэтому я знаю, что они имеют периодическую структуру. Поскольку я использую периодическую структуру, модель экстраполирует эту периодичность (более или менее) правильно. OFC, если вы пытаетесь узнать о нейронных сетях, это не очень актуально, но это может быть немного более приятный подход, чем функции ручной инженерии. Кстати, нейронные сети и GP тесно связаны в теории,
GP не всегда полезны, потому что, в отличие от нейронных сетей, их трудно масштабировать до больших наборов данных и глубоких сетей, но если вы заинтересованы в таких задачах с низким размером, они, вероятно, будут быстрее и надежнее.
(на рисунке черные точки представляют собой тренировочные данные, а красные - цели; вы можете видеть, что, хотя она и не понимает ее в точности, модель приблизительно определяет периодичность. Цветные полосы - это доверительные интервалы модели. прогнозирование)
источник
Алгоритмы машинного обучения, в том числе нейронные сети, могут учиться приближать произвольные функции, но только в том интервале, когда имеется достаточная плотность обучающих данных.
Алгоритмы машинного обучения, основанные на статистике, работают лучше всего, когда выполняют интерполяцию - предсказывают значения, которые близки или находятся в промежутках между примерами обучения.
Помимо ваших тренировочных данных, вы надеетесь на экстраполяцию. Но нет простого способа достичь этого. Нейронная сеть никогда не изучает функцию аналитически, только приблизительно через статистику - это верно почти для всех контролируемых методов обучения ML. Более продвинутые алгоритмы могут быть произвольно приближены к выбранной функции с учетом достаточного количества примеров (и свободных параметров в модели), но все же будут делать это только в диапазоне предоставленных обучающих данных.
То, как сеть (или другой ML) ведет себя вне диапазона ваших обучающих данных, будет зависеть от ее архитектуры, включая используемые функции активации.
источник
В некоторых случаях предложенный @Neil Slater подход к преобразованию ваших функций с помощью периодической функции будет работать очень хорошо и может быть лучшим решением. Сложность в том, что вам может понадобиться выбрать период / длину волны вручную (см. Этот вопрос ).
Если вы хотите, чтобы периодичность была более глубоко внедрена в сеть, проще всего было бы использовать sin / cos в качестве функции активации на одном или нескольких уровнях. В этой статье обсуждаются потенциальные трудности и стратегии работы с функциями периодической активации.
В качестве альтернативы, этот документ использует другой подход, где вес сети зависит от периодической функции. В документе также предлагается использовать сплайны вместо sin / cos, поскольку они более гибкие. Это была одна из моих любимых статей в прошлом году, так что стоит прочитать (или хотя бы посмотреть видео), даже если вы не используете его подход.
источник
Вы выбрали неверный подход, с этим подходом ничего не поделаешь, чтобы решить проблему.
Есть несколько разных способов решения проблемы. Я предложу наиболее очевидный из них через проектирование функций. Вместо того чтобы указывать время как линейный элемент, укажите его как остаток от модуля T = 1. Например, t = 0,2, 1,2 и 2,2 все станут признаком t1 = 0,1 и т. Д. До тех пор, пока T больше периода волны, это сработает. Подключите эту вещь в свою сеть и посмотрите, как она работает.
Характеристика техники недооценена. В AI / ML есть такая тенденция, когда продавцы утверждают, что вы сбрасываете все свои входные данные в сеть, и каким-то образом он выяснит, что с ними делать. Конечно, так и есть, как вы видели в своем примере, но затем он ломается так же легко. Это отличный пример, который показывает, насколько важно создавать хорошие функции даже в самых простых случаях.
Кроме того, я надеюсь, вы понимаете, что это самый грубый пример разработки функций. Это просто, чтобы дать вам представление о том, что вы могли бы сделать с этим.
источник