Как аппроксимировать любую функцию с помощью PyTorch |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-04-19 15:38 При анализе данных и построении моделей машинного обучения часто возникает необходимость аппроксимировать сложные функции. PyTorch предоставляет удобные инструменты для создания и обучения нейронных сетей, которые могут быть эффективно использованы для этой цели. В этом посте мы рассмотрим простой пример аппроксимации функции с использованием PyTorch. Шаг 1: Подготовка данных Давайте начнем с простого примера из теории управления и решим его сначала аналитически, а затем с использованием PyTorch. Рассмотрим функцию
Это линейное неоднородное дифференциальное уравнение, гдепредставляет собой выход системы, - входной сигнал, а ? и ? обозначают, соответственно, первую и вторую производные по времени . Тогда характеристический полином будет выглядеть После нахождения корней характеристического уравнения мы можем записать общее решение дифференциального уравнения в виде комбинации экспоненциальных функций. Поскольку корни комплексные, мы можем использовать формулу Эйлера, чтобы выразить решение в терминах косинусов и синусов где ? и ? - произвольные постоянные, которые определяются начальными условиями задачи. Давайте в нашей задаче и . Тогда можно полностью определить решение нашей задачи Давайте промоделируем отклик системы для начальных условий помощью библиотеки Именно Шаг 2: Определение модели Теперь надо определиться с архитектурой модели. Для нас это будет обычной функцией вида где
Теперь давайте напишем нашу модель с использованием PyTorch. Ниже приведен пример кода для создания модели: Этот код определяет класс Для обучения модели нам нужно написать класс датасет, наследник класса Он нам нужен, чтобы позже закинуть его в Шаг 3: Обучение Давайте посмотрим количество обучаемых параметров в модели. Результат, как мы и задумывали, равен 3. Проинициализируем лосс функцию и оптимизатор. Лосс функция будет говорить нам как далеко нам до оптимума, а оптимизатор будет определять как быстро и в каком направлении менять веса, чтобы добраться до него. Теперь обучим модель на 150 эпохах, сохраняя при этом историю лосс функции. Приведен график лосс функции от количества батчей обучения. Как видно из графика модель сошлась еще на 500 шаге. Давайте посмотрим на обученные параметры и на аналитическое решение. Шаг 4: Сравнение
Ошибка меньше . Давайте посмотрим на то, как хорошо легла наша модель под реальные данные. Чтобы осознать как быстро сходится модель на этой задаче, можно посмотреть на графики ниже. Это сравнение аналитического решения и нашей модели на эпохах Дополнительно Как вы могли заметить у нас не все параметры в модели были обучаемыми. Коэффициент что должен был стоять в периодических функциях был сразу же зафиксирован. Зачем это было сделано? Показываю. Объясняю. Косинус и синус, которые стоят в нашей аппроксимирующей модели очень сильно изменяют форму лосс функции над пространством параметров, делая ее более неприятной для методов градиентного спуска (практически всех оптимизаторов). Это связано с их периодическим характером и быстрыми изменениями, которые могут приводить к локальным минимумам и плохой сходимости алгоритмов оптимизации. Наша модель сошлась к таким значениям То есть буквально модель приняла вид , что далека от нами задуманной. Послесловие Надеюсь вам было легко читать этот материал. Полный код вы можете найти на кагле, а меня в телеграме. Буду рад поправкам и комментариям. Источник: habr.com Комментарии: |
|