🤔 Какие способы регурялизации сеточек знаешь?Регуляризация нейросетей помогает избежать переобучения, улучшая их способность к обобщению. Рассмотрим основные методы:
🟠
L1 и L2-регуляризация (Weight Decay) Добавляют штраф за большие веса в функцию ошибки, предотвращая слишком сложные модели.
L1-регуляризация (Lasso, L1-norm)
Добавляет к функции ошибки сумму абсолютных значений весов:
Loss = Loss_{original} + \lambda \sum |w|
Заставляет веса стремиться к нулю, создавая разреженные модели (некоторые веса становятся 0).
L2-регуляризация (Ridge, L2-norm)
Добавляет сумму квадратов весов:
Loss = Loss_{original} + \lambda \sum w^2
Уменьшает значения весов, но не зануляет их полностью.
import torch.nn as nn
import torch.optim as optim
model = nn.Linear(10, 1)
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001) # L2-регуляризация
🟠
Dropout Отключает случайные нейроны в процессе обучения, предотвращая их зависимость друг от друга. В каждом шаге обучения случайные нейроны "выключаются" с вероятностью
p. В тестовом режиме нейроны работают в полную силу, но с весами, скорректированными на
p.
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 50)
self.dropout = nn.Dropout(p=0.5) # Выключаем 50% нейронов
self.fc2 = nn.Linear(50, 1)
def forward(self, x):
x = self.fc1(x)
x = self.dropout(x)
x = self.fc2(x)
return x
🟠
Batch Normalization Нормализует входные данные каждого слоя, уменьшая зависимость от масштаба входных данных.
Ускоряет обучение
Снижает зависимость от начальных весов
Обладает небольшим регуляризационным эффектом
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 50)
self.bn1 = nn.BatchNorm1d(50) # Нормализация
self.fc2 = nn.Linear(50, 1)
def forward(self, x):
x = self.fc1(x)
x = self.bn1(x)
x = self.fc2(x)
return x
🟠
Data Augmentation (для CV-задач) Искусственное увеличение данных путём аугментаций (повороты, отражения, изменения яркости).
import torchvision.transforms as transforms
transform = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomRotation(10),
transforms.ColorJitter(brightness=0.2, contrast=0.2),
transforms.ToTensor()
])
🟠
Early Stopping Останавливает обучение, если валидационная ошибка перестаёт уменьшаться.
from torch.optim.lr_scheduler import ReduceLROnPlateau
scheduler = ReduceLROnPlateau(optimizer, mode='min', patience=5)
Ставь 👍 и забирай 📚 Базу знаний