Инициализация весов нейронной сети нулями приводит к проблеме симметрии: все нейроны в слое начинают обучаться одинаково, получают одинаковые градиенты и обновляются одинаково. В итоге сеть не может эффективно обучаться, так как не развивается разнообразие признаков.
Какие проблемы возникают при инициализации весов нулями? Какие методы инициализации (Xavier, He) решают эти проблемы?
Инициализация весов нейронной сети нулями приводит к проблеме симметрии: все нейроны в слое начинают обучаться одинаково, получают одинаковые градиенты и обновляются одинаково.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Инициализация весов нейронной сети нулями приводит к проблеме симметрии: все нейроны в слое начинают обучаться одинаково, получают одинаковые градиенты и обновляются одинаково. В итоге сеть не может эффективно обучаться, так как не развивается разнообразие признаков.
Методы инициализации, такие как Xavier (Glorot) и He, решают эту проблему, задавая веса случайными значениями с определённым распределением и масштабом, зависящим от числа входов и выходов нейрона. Это помогает сохранить дисперсию сигналов и градиентов на каждом слое, предотвращая затухание или взрыв градиентов.
- Инициализация Xavier подходит для активаций tanh и sigmoid. Весы выбираются из распределения с дисперсией, обратной сумме входящих и исходящих связей.
- Инициализация He оптимизирована для ReLU-активаций, где веса масштабируются с учётом только входящих связей, что помогает лучше сохранять градиенты.
Пример инициализации весов в PyTorch с He:
import torch
import torch.nn as nn
layer = nn.Linear(in_features=256, out_features=128)
nn.init.kaiming_normal_(layer.weight, nonlinearity='relu')