Ответ
Строго говоря, ни одного скрытого слоя с чисто линейными активациями не достаточно.
Причина: Композиция линейных преобразований (слоёв) сама является линейным преобразованием. Многослойный перцептрон (MLP) без нелинейных функций активации между слоями математически эквивалентен одной линейной модели, независимо от количества слоёв. Он может аппроксимировать только линейную зависимость y = w*x + b.
Для аппроксимации нелинейной функции, такой как полином третьей степени (y = ax³ + bx² + cx + d), необходимы нелинейные функции активации (ReLU, sigmoid, tanh).
Практический пример с PyTorch:
import torch
import torch.nn as nn
# Модель с одним скрытым слоем и нелинейностью ReLU
class PolyApproximator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(1, 10), # 1 вход (x), 10 нейронов в скрытом слое
nn.ReLU(), # КРИТИЧЕСКИ ВАЖНАЯ нелинейность
nn.Linear(10, 1) # Выход
)
def forward(self, x):
return self.net(x)
# Такая сеть с достаточным количеством нейронов может аппроксимировать полином.
# Без строки `nn.ReLU()` эта возможность теряется.
Вывод: Для моделирования полиномиальных и других сложных зависимостей в нейронных сетях нелинейные активации — обязательный компонент архитектуры.