Перейти к содержанию

Как обучается нейросеть: градиентный спуск и обратное распространение

Коротко

Нейросеть учится не по инструкции, а на собственных ошибках: она много раз пытается угадать ответ, измеряет, насколько промахнулась, и чуть-чуть подкручивает свои внутренние настройки. Размер ошибки считает функция потерь. Куда и насколько двигать настройки, подсказывает градиентный спуск — как осторожный шаг вниз по склону в тумане. А обратное распространение быстро вычисляет, какой именно «винтик» сети сильнее всего повлиял на промах. Повторите это миллионы раз на большом массиве данных — и сеть начинает выдавать осмысленные ответы.

В прошлом уроке — Как устроена нейросеть: нейрон, веса, активация — мы разобрали, из чего собрана сеть. Там было много весов — чисел, которые определяют, как сигнал проходит сквозь сеть. Но откуда берутся правильные значения этих весов? Их никто не задаёт вручную. Сеть подбирает их сама в процессе обучения. Как именно — об этом сегодняшний урок.

Что значит «ошибка модели»

Представьте, что нейросеть только что создали. Все её веса заполнены случайными числами. Если показать ей фотографию кота и спросить «кто это?», она ответит наугад — с тем же успехом могла бы назвать собаку, чайник или цифру 7.

Чтобы сеть стала полезной, нам нужен способ сказать ей: «вот сейчас ты ответила хорошо» или «а вот тут сильно мимо». Для этого используют обучающие данные — заранее размеченные примеры, где для каждого входа известен правильный ответ. Например, тысячи фотографий с подписями «кот» и «не кот».

Сеть берёт пример, выдаёт свой прогноз, и мы сравниваем прогноз с правильным ответом. Разница между ними и есть ошибка. Чем больше разница, тем хуже сеть справилась именно на этом примере.

Важно

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

Функция потерь: единый счётчик промахов

Одной фотографии мало — сеть должна хорошо отвечать на всех примерах сразу. Поэтому ошибки по всем примерам сводят в одно число.

Функция потерь — это формула, которая измеряет, насколько сильно прогнозы сети отличаются от правильных ответов на наборе данных. Чем число больше, тем сеть ошибается чаще и грубее. Чем меньше — тем лучше она угадывает.

Удобная аналогия — оценка за контрольную. Учитель не смотрит на одну задачу: он суммирует все недочёты и выставляет общий балл. Функция потерь делает то же самое, только автоматически и в виде числа, которое нужно уменьшать.

Важная деталь: обычно мелкие промахи штрафуются слабо, а грубые — гораздо сильнее. Если сеть была уверена в неверном ответе, штраф будет ощутимым. Это подталкивает её исправлять в первую очередь самые серьёзные ошибки.

Тогда вся задача обучения формулируется одной фразой: подобрать такие веса, при которых функция потерь будет минимальной. Осталось понять, как их искать.

Градиентный спуск: шаг с горы в тумане

Вообразите холмистую местность. По горизонтали — всевозможные комбинации весов сети. По вертикали — значение функции потерь для каждой комбинации. Высокие места — это плохие настройки с большой ошибкой. Низины — хорошие, где сеть ошибается мало. Наша цель — спуститься как можно ниже.

Сложность в том, что всю карту целиком мы не видим — она слишком огромная. Мы как путник в густом тумане: видим только землю прямо под ногами и чувствуем, в какую сторону склон идёт вниз.

Градиентный спуск — это способ обучения, при котором сеть делает много маленьких шагов в сторону снижения ошибки. На каждом шаге она смотрит, в каком направлении функция потерь убывает быстрее всего, и чуть-чуть сдвигает веса туда. Потом снова осматривается и снова делает шаг. И так — пока спускаться дальше почти некуда.

Слово «градиент» здесь означает направление самого крутого спуска. Не пугайтесь термина: по сути это стрелка-подсказка «вниз — туда».

Размер шага называют скоростью обучения. Тут нужен баланс:

  • Слишком большие шаги — можно перепрыгнуть низину и заскакать туда-сюда, так и не успокоившись.
  • Слишком маленькие шаги — спуск будет честным, но мучительно долгим.
Упражнение: в какую сторону шагнуть?

Представьте простую «долину»: ошибка зависит от одного-единственного веса. Вы стоите на склоне. Вы сделали два пробных микродвижения:

  • чуть увеличили вес → ошибка выросла;
  • чуть уменьшили вес → ошибка упала.

Вопрос: в какую сторону менять вес, чтобы приблизиться к минимуму?

Разбор. Двигаться нужно туда, где ошибка снижается, то есть в сторону уменьшения веса. Именно так и работает градиентный спуск: он определяет, в какую сторону «склон» идёт вниз, и делает шаг туда. Заметьте: мы не вычисляли никакую формулу заранее — просто проверили, куда катится мяч, и пошли следом. Сеть делает то же самое, только сразу для всех весов и с помощью математики, а не пробных тычков.

Обратное распространение: кто виноват в ошибке

Градиентный спуск говорит «двигайся вниз». Но в реальной сети не один вес, а тысячи или миллионы. Как понять, какой из них и насколько подкрутить? Если проверять каждый по очереди пробными движениями, обучение растянулось бы на годы.

Здесь помогает обратное распространение (по-английски backpropagation) — метод, который позволяет за один проход вычислить, какой вес и насколько повлиял на итоговую ошибку. Сеть делает прогноз, считает общий промах, а затем как бы «разматывает» этот промах назад — от выхода к входу, слой за слоем, распределяя долю ответственности между всеми весами.

Аналогия — разбор ошибки в командной работе. Проект сдан с браком. Чтобы не наказывать всех подряд, руководитель проходит цепочку обязанностей в обратном порядке и выясняет, чьё решение и насколько сказалось на результате. Тот, кто повлиял сильнее, и правок требует больше.

Связка работает так: обратное распространение считает «вклад каждого винтика в промах», а градиентный спуск на основе этих данных подкручивает все веса разом в нужную сторону. Один такой цикл — взять примеры, посчитать ошибку, распределить вину, поправить веса — повторяется снова и снова. Каждый полный проход по обучающим данным называют эпохой, и таких эпох обычно много.

Почему нужны горы данных и вычислений

Теперь понятно, почему обучение серьёзных моделей — это дорого и долго.

Во-первых, нужно много данных. По нескольким примерам сеть не уловит общую закономерность, а просто заучит их наизусть — и спасует на всём новом. Чтобы научиться отличать кота от собаки «вообще», ей нужны тысячи и тысячи разных изображений.

Во-вторых, нужно много повторений. За один проход веса сдвигаются лишь чуть-чуть. Чтобы из случайного набора чисел получилась осмысленная модель, цикл «прогноз — ошибка — поправка» прокручивают огромное число раз.

В-третьих, всё это — колоссальный объём вычислений. Внутри сети — миллионы и миллиарды умножений и сложений, и их нужно повторять на каждом примере и на каждом шаге. Поэтому крупные модели учат не на обычном процессоре, а на GPU — графических ускорителях, которые изначально создавались для игр и графики, но идеально подходят для массовых однотипных вычислений. Часто их объединяют в большие кластеры, и обучение может занимать недели.

Пример: почему GigaChat и YandexGPT обходятся так дорого

Большие языковые модели вроде GigaChat от Сбера или YandexGPT от Яндекса учат на гигантских объёмах текста. Внутри — очень много весов, а данные исчисляются терабайтами. Чтобы такая модель связно отвечала на русском, цикл обучения нужно прогнать колоссальное число раз — а это требует мощных GPU-кластеров, много электроэнергии и команды инженеров. Именно поэтому обучить большую модель с нуля под силу немногим компаниям, тогда как пользоваться уже обученной можно через приложение или сайт — например, через Алису, которая опирается на технологии Яндекса.

Хорошая новость для практики: пользователю не нужно повторять весь этот путь. Тяжёлое обучение проходит один раз на стороне разработчика. Дальше готовую сеть лишь применяют — это уже быстро и недорого.

Соберём всё вместе

Коротко весь процесс обучения нейросети укладывается в один повторяющийся цикл:

Шаг Что происходит
1. Прогноз Сеть берёт пример и выдаёт ответ исходя из текущих весов
2. Оценка Функция потерь измеряет, насколько ответ далёк от правильного
3. Разбор вины Обратное распространение считает вклад каждого веса в ошибку
4. Поправка Градиентный спуск делает маленький шаг — подкручивает веса вниз по «склону» ошибки
5. Повтор Цикл запускается снова на новых примерах — много-много раз

Из этого и складывается «обучение»: не загрузка готовых знаний, а долгая, терпеливая настройка чисел через ошибки. В следующем уроке — Глубокое обучение и большие языковые модели (LLM) — мы увидим, что происходит, когда таких слоёв становится очень много, и как из этого вырастают модели, понимающие человеческий язык.

Проверьте себя

Короткий тест по уроку: выберите ответ и нажмите «Проверить» — увидите счёт и разбор.

Частые вопросы

Чем функция потерь отличается от градиентного спуска?

Это две разные роли в одном процессе. Функция потерь измеряет, насколько сильно сеть ошибается, и выдаёт одно число. Градиентный спуск использует это число, чтобы решить, в какую сторону и насколько подвинуть веса, и уменьшить ошибку на следующем шаге. Первое — «термометр», второе — «руль».

Что такое обратное распространение простыми словами?

Это способ за один проход выяснить, какой именно вес в сети и насколько виноват в итоговой ошибке. Сеть «разматывает» промах от выхода к входу и распределяет долю ответственности между всеми весами. Без этого приёма обучать большие сети было бы практически невозможно из-за объёма расчётов.

Почему обучение больших моделей такое дорогое?

Из-за сочетания трёх факторов: огромные объёмы данных, миллионы или миллиарды настраиваемых весов и необходимость прокрутить цикл обучения очень много раз. Всё это требует мощных GPU-ускорителей, времени и электроэнергии. Поэтому крупные модели вроде GigaChat или YandexGPT обучают на дорогих вычислительных кластерах.

Может ли нейросеть переучиться и стать хуже?

Да, такое бывает и называется переобучением: сеть слишком сильно «заучивает» обучающие примеры вместе со случайными мелочами и хуже работает на новых данных. Чтобы этого избежать, качество модели проверяют на отдельных примерах, которые она не видела при обучении, и при необходимости останавливают процесс вовремя.


В курсе: ← Назад: Как устроена нейросеть: нейрон, веса, активация · Дальше: Глубокое обучение и большие языковые модели (LLM) →

Авторы курса: Герман Коваленко (основатель ENGRAM) и Сергей Добров.

Попробуйте ENGRAM на своих данных

Нейросеть на ваших встречах, документах и переписке: отвечает со ссылкой на источник. Это ваша вторая память на базе ИИ. Данные хранятся в России, старт бесплатный.

Зарегистрироваться бесплатно
Обучаем команды работе с нейросетями под ваши процессы. Узнать о корпоративном обучении