8 Универсальная аппроксимация
Контекст
Backprop (#7) научил обучать сети — но что они в принципе способны выразить? Есть ли функции, им недоступные? Цыбенко (1989) и Хорник (1991) дают строгий ответ.
Идея и механизм
Сеть с одним скрытым слоем вычисляет взвешенную сумму нелинейных «горбов»:
Теорема: для любой непрерывной f на компакте и любого ε > 0 найдутся N и параметры, такие что sup|f − g| < ε. Такими горбами можно выложить любую гладкую форму. Хорник усилил: универсальность даёт сама архитектура, а не сигмоида — годится любая неполиномиальная активация, поэтому и ReLU универсален.
функциональный анализ Что теорема даёт — и чего НЕ даёт
Доказательство Цыбенко — неконструктивное: оно показывает, что множество сумм σ(w·x+b) плотно в пространстве непрерывных функций (через теорему Хана–Банаха и свойства меры). Отсюда два важных «нет»:
- Нет числа нейронов. Теорема гарантирует существование N, но не ограничивает его — для нужной точности может потребоваться экспоненциально много нейронов.
- Нет гарантии обучения. Сеть существует, но найдёт ли её градиентный спуск из случайной инициализации — отдельный вопрос, на который теорема молчит.
Почему глубина. Есть функции (например, с многими «складками»), которые сеть глубины L представляет числом нейронов полиномиальным по L, а одним скрытым слоем — экспоненциальным. Ширины формально достаточно, но глубина радикально дешевле. Поэтому deep learning «deep», а не «wide».
NumPy Приближаем функцию суммой ReLU-горбов
import numpy as np
# один скрытый слой: g(x) = Σ αᵢ · ReLU(wᵢ·x + bᵢ)
def g(x, W1, b1, W2):
h = np.maximum(0, np.outer(x, W1) + b1) # N скрытых ReLU-нейронов
return h @ W2 # взвешенная сумма горбов
# при достаточном N и подобранных параметрах g(x) ≈ любая непрерывная f
Почему это важно
Это теоретическая лицензия вообще использовать нейросети: непреодолимого класса функций для них нет. Но именно её ограничения (неконструктивность, преимущество глубины) объясняют, почему на практике важны не общие теоремы существования, а конкретные архитектуры, инициализация и оптимизаторы.
Связи
Backprop даёт как обучать; теорема говорит что в принципе достижимо. Вместе они закрывают вопрос «а стоит ли вообще»: да — сети и выразительны, и обучаемы.
Там — универсальность для булевых функций (сеть пороговых нейронов вычислит любую). Здесь — для непрерывных. Две грани одного факта о выразительной мощи нейросетей.
«Глубина дешевле ширины» — теоретический аргумент; ResNet — инженерный ответ: как сделать очень глубокие сети реально обучаемыми, чтобы это преимущество получить на практике.
Вопросы пытливого ума
Если одного слоя «достаточно», зачем вообще глубина?
«Достаточно» — про существование, не про эффективность. Для некоторых функций неглубокой сети нужно экспоненциально больше нейронов, чем глубокой. Плюс глубина даёт иерархию переиспользуемых признаков (грани → части → объекты), которую широкий слой не строит. Теорема о существовании и практичность — разные вещи.
Раз сеть может приблизить что угодно — не значит ли это, что она всегда переобучится?
Выразительная мощь и переобучение — разные оси. Да, сеть способна запомнить шум, но на практике SGD + регуляризация + архитектурные смещения тянут её к простым решениям (implicit bias). Загадка глубокого обучения как раз в том, что переопределённые сети обобщают, хотя «могли бы» переобучиться.
Теорема про непрерывные функции — а если целевая функция разрывна?
Строго — теорема о ней молчит, но на практике это редко мешает: разрыв приближается крутым (но непрерывным) переходом сколь угодно близко в смысле, например, L²-нормы. Проблемы создают не разрывы как таковые, а высокая частота/негладкость, требующая очень много нейронов.
Что читать в оригинале
Оригиналы — измеримая математика. Для канона достаточно понять формулировку и два нюанса: неконструктивность и преимущество глубины над шириной.