Как в общих чертах устроено обучение нейросети?
Нейросеть обучается методом проб и постепенной коррекции: сначала все её веса — числа, определяющие силу связи между нейронами — устанавливают случайно, поэтому первые предсказания практически бессмысленны. Дальше сеть многократно повторяет цикл «предсказание → сравнение с правильным ответом → небольшая коррекция весов», пока ошибка на обучающих примерах не станет достаточно маленькой.
Этот цикл раскладывается на четыре ключевых элемента: прямой проход, где сеть считает предсказание; функция ошибки, которая численно оценивает, насколько предсказание неверно; обратное распространение, которое определяет вклад каждого веса в эту ошибку; и обновление весов, которое чуть сдвигает их в сторону уменьшения ошибки. Дальше разберём каждый элемент по отдельности.
Что происходит на прямом проходе (forward pass)?
Прямой проход — это движение данных через сеть от входного слоя к выходному: каждый нейрон получает числа от предыдущего слоя, умножает их на свои веса, складывает и пропускает через функцию активации, которая добавляет нелинейность. Результат на выходном слое и есть предсказание сети — класс, число или вероятность, в зависимости от задачи.
Без функции активации сеть из множества слоёв математически сводилась бы к одному линейному преобразованию и не могла бы находить сложные, нелинейные закономерности в данных. Именно чередование линейных операций (умножение на веса) и нелинейных (функция активации) даёт нейросети возможность приближать почти любую зависимость между входом и ответом при достаточном числе слоёв и данных.
Каждый следующий слой строит более абстрактные признаки поверх предыдущего: в модели компьютерного зрения первые слои обычно реагируют на простые границы и цвета, а более глубокие — уже на целые объекты и их части.
Какие есть популярные функции активации и оптимизаторы?
Для скрытых слоёв чаще всего используют ReLU — она быстро считается и не «затухает» на глубоких сетях; для выходного слоя — sigmoid в задачах бинарной классификации или softmax в многоклассовой. Веса обновляет отдельный алгоритм — оптимизатор, который использует градиент ошибки; самый распространённый сегодня — Adam, сочетающий адаптивную скорость обучения с инерцией предыдущих шагов.
Выбор функции активации и оптимизатора редко радикально меняет итоговое качество модели, но заметно влияет на скорость и стабильность обучения: неудачная комбинация может привести к тому, что ошибка вообще не снижается или снижается крайне медленно. Большинство современных фреймворков глубокого обучения предлагают Adam и ReLU как разумные значения по умолчанию, а более тонкую настройку оставляют на случай, когда обучение уже идёт, но недостаточно быстро или стабильно.
Как нейросеть исправляет ошибки через обратное распространение?
После прямого прохода сеть сравнивает предсказание с правильным ответом и получает числовое значение ошибки. Обратное распространение (backpropagation) вычисляет, насколько каждый вес сети виноват в этой ошибке, двигаясь от выходного слоя обратно к входному, а затем алгоритм оптимизации немного сдвигает каждый вес в направлении, которое уменьшает ошибку на следующем шаге.
Шаг, на который сдвигают веса, задаёт параметр скорости обучения (learning rate): слишком большой шаг заставляет обучение «скакать» мимо хорошего решения, а слишком маленький делает процесс крайне медленным. Подбор этого параметра — одна из первых практических задач при настройке обучения любой нейросети, и от него сильно зависит, насколько стабильно снижается ошибка от итерации к итерации.
Что такое эпохи и батчи в обучении нейросети?
Батч — это часть обучающих примеров, после обработки которой сеть один раз обновляет веса, а не ждёт полного прохода по всем данным. Эпоха — это один полный проход по всему обучающему датасету, состоящий из множества батчей подряд. Обучение обычно занимает десятки или сотни эпох, пока ошибка не перестанет заметно снижаться.
Разбиение на батчи существует по практической причине: обновлять веса после каждого отдельного примера слишком шумно и медленно, а рассчитывать ошибку сразу по всему датасету перед первым же обновлением весов часто физически не помещается в память видеокарты. Батч из нескольких десятков или сотен примеров — практичный компромисс между стабильностью обновления весов и скоростью самого обучения.
Размер батча заодно влияет на то, сколько обновлений весов приходится на одну эпоху: при небольшом батче обновлений много и обучение идёт «шумнее», но иногда быстрее находит удачное решение, а при крупном батче обновления реже и стабильнее, зато для того же прогресса может потребоваться больше эпох подряд.
Как качество данных влияет на обучение нейросети?
Нейросеть учится ровно на том сигнале, который есть в обучающих данных, — включая ошибки разметки. Если часть меток неточна или противоречива, сеть распределяет часть своей «ёмкости» на подстройку под эти ошибки вместо поиска настоящей закономерности, и итоговая точность на новых данных оказывается ниже, чем позволяет архитектура сети.
Особенно чувствительны к качеству данных глубокие сети с большим числом слоёв: чем больше у сети настраиваемых весов, тем легче ей подстроиться под случайный шум в разметке при недостаточном объёме данных относительно сложности архитектуры. Именно поэтому рост качества и объёма размеченных данных нередко даёт больший прирост точности, чем усложнение самой архитектуры сети.
Например, если часть фотографий в обучающей выборке помечена неверным классом, сеть тратит часть ресурсов на попытку «объяснить» эти противоречивые примеры — итоговая точность на новых данных оказывается ниже, чем при полностью корректной разметке того же объёма.
Как понять, что обучение нейросети пошло не так?
Главный индикатор — график ошибки (loss) на обучающей и проверочной выборках по ходу эпох. Если ошибка не снижается вовсе — проблема в данных, скорости обучения или архитектуре. Если ошибка на обучении падает, а на проверочной выборке растёт или застревает — это переобучение: сеть заучивает конкретные примеры вместо общей закономерности.
Обе ситуации требуют разного лечения: при «незапустившемся» обучении обычно проверяют скорость обучения, инициализацию весов и корректность самих данных — иногда причина в неправильно подготовленной разметке. Переобучение лечат другими методами — регуляризацией, увеличением объёма данных или упрощением архитектуры, — подробно об этом рассказано в отдельном материале про переобучение и способы борьбы с ним.
На практике полезно смотреть на график ошибки регулярно, а не только по завершении обучения: чем раньше замечен расходящийся тренд между обучающей и проверочной кривой, тем дешевле его исправить — остановить обучение раньше, изменить скорость обучения или пересмотреть объём и качество данных, не дожидаясь, пока модель уже уйдёт в промышленную эксплуатацию с неверными весами.