Начальные веса (Initial Weights)

Что такое Начальные веса (Initial Weights)?

Начальные веса — это значения параметров (весов) нейронов в искусственной нейронной сети, заданные до начала процесса обучения.

Представьте, что вы собираете сложный конструктор, но у вас нет инструкции. Первые несколько шагов вы делаете «на глаз» — располагаете базовые детали в предположительно верных позициях. Эти исходные позиции — аналог начальных весов в нейросети. Они не идеальны, но дают отправную точку для дальнейшей сборки (обучения).

История и проблемы инициализации весов

Исторически вопрос инициализации весов стал актуален с развитием многослойных сетей в 1980–1990‑х годах. Ранние подходы часто использовали полностью случайные значения, что нередко приводило к проблемам:

  • взрывающемуся или затухающему градиенту (gradient explosion/vanishing);
  • медленной сходимости;
  • застреванию в локальных минимумах.

В 1991 году Йошуа Бенжио и другие исследователи начали активно изучать, как инициализация влияет на обучение. Позже появились более продуманные методы, например:

  • инициализация Ксавье (Xavier/Glorot initialization, 2010) — учитывает размер входного и выходного слоёв, чтобы стабилизировать дисперсию сигналов;
  • инициализация Хе (He initialization, 2015) — оптимизирована для сетей с ReLU‑активациями.

Чем отличается от смежных понятий

  • веса после обучения — это уже оптимизированные значения, полученные в результате обратного распространения ошибки;
  • гиперпараметры — задают условия обучения (скорость обучения, регуляризация), а не начальные значения весов.

Примеры использования

  • в свёрточных сетях (CNN) для классификации изображений начальные веса свёточных фильтров задаются по методу Хе;
  • в рекуррентных сетях (RNN) часто применяют ортогональную инициализацию, чтобы стабилизировать обучение во времени;
  • в трансформерах (Transformer) начальные веса линейных слоёв обычно инициализируются по методу Ксавье или его вариациям.

Популярные реализации

  • в TensorFlow и Keras: tf.keras.initializers.GlorotUniform(), tf.keras.initializers.HeNormal();
  • в PyTorch: torch.nn.init.xavier_uniform_(), torch.nn.init.kaiming_normal_().

Авторизация