Как на самом деле работает аппроксимация функции (скажем, синуса) в нейронной сети?

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

Предположим, я хочу аппроксимировать синусоидальную функцию от 0 до 3,14 радиан. Так будет ли у меня 1 входной нейрон? Если так, то затем, если я предполагаю, что K нейронов в скрытом слое, каждый из которых использует сигмовидную передаточную функцию. Тогда в выходном нейроне (если, скажем, он просто использует линейную сумму результатов из скрытого слоя), как на выходе может быть что-то другое, кроме сигмовидной формы? Разве линейная сумма тоже не должна быть сигмовидной? Или, вкратце, как можно аппроксимировать синусоидальную функцию, используя эту архитектуру в нейронной сети.


person Durin    schedule 16.12.2015    source источник


Ответы (1)


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

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

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

person Robin Spiess    schedule 17.12.2015
comment
Спасибо. Вторая ссылка очень помогла. Я понял, что не думал о том, что мне нужно добавлять смещение отдельно внутри каждого нейрона скрытого слоя. - person Durin; 17.12.2015
comment
Пожалуйста. :) Другой способ реализовать смещение - создать фиктивный входной нейрон, который всегда выводит 1, и вес, который нейрон скрытого слоя имеет для этого фиктивного нейрона, является смещением для этого нейрона. - person Robin Spiess; 17.12.2015