- PVSM.RU - https://www.pvsm.ru -
В процессе прохождения курса от MIT про нейросети наткнулась на интересную тему, представленную одним из лекторов. Он задался вопросом: «А может ли нейросеть выучить функцию Вейерштрасса (непрерывная функция на вещественной прямой, не имеющая производной ни в одной точке)?». Я решила проверить это на практике. Мною было принято решение не останавливаться на фракталах, а поискать другие функции, обладающие интересными для математика свойствами: лестница Кантора, функция Римана (Томаэ) и др. В данной статье представлена только функция Вейерштрасса.
Большинство тех, кто работал с нейросетями знает об их возможности аппроксимировать функции. Например, очевидно, что такую простую зависимость как .
Может легко выучить нейросеть с архитектурой (здесь и ниже для эксперимента использовалась библиотека PyTorch):
super(SimpleNet, self).__init__()
self.fc1 = nn.Linear(1,64)
self.relu1 = nn.ReLU()
self.fc2 = nn.Linear(64, 64)
self.relu2 = nn.GELU()
self.fc3 = nn.Linear(64,1)
С учетом параметров ниже, получилось (см. рис. ниже):
1 000 точек
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr = 0.1)
1 000 эпох
Но что насчет зависимостей посложнее? Для следующего анализа были взяты функции (результаты 1 представлены в этой статье, результаты 2 и 3 — нет):
Функция Вейерштрасса с параметрами
Лестница Кантора с глубиной 7:
Функция Римана (Томаэ):
Для начала нейросеть вида:
self.layers = nn.Sequential(
nn.Linear(1, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 1)
)
была обучена на «левой половине» графика, то есть на для точек с абсциссой из отрезка (см. рис. ниже).
При следующих параметрах обучения
1 000 точек
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr = 0.001)
scheduler = lr_scheduler.ReduceLROnPlateau( optimizer, mode = “min”, factor = 0.5, patience = 200, ) — планировщик был добавлен для улучшения качества обучения
15 000 эпох
ошибка 0.0020 была достигнута на примерно 7 000-й эпохе и не менялась вплоть до 15 000. Предположительно, сеть переобучилась под конкретный участок.
Однако, как известно, если нейросеть выучила одну часть графика это еще не значит, что она «уловила» всю зависимость, что и случилось в нашем случае. Если построить график на и взять точки с уже обученной нейросети выше, то получаем катастрофическую разницу на промежутке
:

Для честности эксперимента, мы дадим шанс предыдущей нейросети и обучим ее на выборке точек из полного отрезка (2 000 точек) при полном копировании остальных параметров. Результат на рисунке ниже:
Как видно из рисунка, нейросети удалось поймать симметрию. С математической точки зрения ошибка обучения составила 0.0012. Также ниже приведен график только предсказания нейросети, по которому опытный математик уже может угадать знаменитую функцию:
Таким образом, мы видим, что ключевым фактором является репрезентативность обучающей выборки: нейросеть не смогла симметрично продолжить график вторую половину области определения. При этом на данном примере мы получили положительный ответ на вопрос о возможности нейросети воспроизведения сложной структуры математической зависимости при условии репрезентативности выборки. Далее планируется проверить упомянутые выше лестницу Кантора, функцию Римана и некоторые другие.
Автор: Ir1na
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/matematika/456889
Ссылки в тексте:
[1] Источник: https://habr.com/ru/articles/1072024/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1072024
Нажмите здесь для печати.