tariel.ge › Полезное: бесплатные книги › ИИ изнутри: от нейрона до своей моделиБесплатно · автор Тариел Бежанидзе
← ИИ изнутри ЛИСТ 04ФундаментРЕВ. 1
Глава 04 · Фундамент

Как сеть находит веса: ошибка, градиент, шаг

Никакого волшебства: измерить ошибку, понять, в какую сторону её уменьшить, сделать маленький шаг. Повторить миллион раз. Это весь алгоритм.

Три шага, которые повторяются

  1. Прогон вперёд. Подать пример на вход, получить ответ сети.
  2. Ошибка. Сравнить с правильным ответом, получить число — насколько промахнулись.
  3. Шаг назад. Понять, как надо изменить каждый вес, чтобы ошибка стала чуть меньше. Изменить. Чуть-чуть.

Всё. Дальше — следующий пример, и так миллионы раз.

Аналогия, которая объясняет градиент

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

Что такое градиент

Градиент — это и есть ответ на вопрос «в какую сторону крутить каждую ручку, чтобы стало лучше». Только ручек не одна, а семь миллиардов, и для каждой вычисляется своё направление. Одновременно.

Ошибка — это число

Чтобы улучшать, надо мерить. Функция потерь превращает «сеть ошиблась» в конкретное число, которое можно уменьшать.

ЗадачаКак меряютСмысл
Предсказать числоКвадрат разностиЧем дальше промах, тем непропорционально хуже
Выбрать из вариантовПерекрёстная энтропияНасколько мала была вероятность, назначенная правильному ответу
Сгенерировать текстТо же самое, на каждом словеНасколько модель «удивилась» настоящему следующему слову
Полезная интуиция

Для языковой модели ошибка — это мера удивления. Текст «паяльник надо держать за...» — если модель назначила слову «ручку» вероятность 0,9, удивление мало, ошибка мала. Назначила 0,01 — удивление огромно, ошибка большая, веса поедут сильно. Обучение языковой модели буквально сводится к «перестань удивляться настоящему тексту».

Обратное распространение

Главная техническая идея всего глубокого обучения, и по сути — школьное правило производной сложной функции.

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

направление вычислений
вперёд:   вход → слой1 → слой2 → слой3 → ответ → ошибка

назад:    ошибка → вклад слоя3 → вклад слоя2 → вклад слоя1
          и для каждого веса: «подвинуть сюда, на столько»
Почему это было прорывом

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

Скорость обучения — самый важный параметр

Насколько большой шаг делать в найденном направлении.

ШагЧто происходитАналогия
Слишком маленькийУчится, но бесконечно долгоПодкручиваете ручку на микрон за раз
В самый разОшибка плавно падаетУверенные движения, точная настройка в конце
Слишком большойПерескакивает минимум, ошибка скачетДёргаете ручку туда-сюда, проскакивая станцию
Катастрофически большойЧисла уходят в бесконечность, обучение умираетСорвали ручку

На практике шаг делают переменным: сначала побольше, чтобы быстро прийти в нужную область, потом всё меньше, для тонкой настройки. Это расписание скорости обучения, и оно вам встретится в главе 13, когда будете обучать LoRA.

Почему по одному примеру не учат

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

ТерминЧто значит
БатчПачка примеров, обрабатываемая за один шаг
ШагОдин батч: прогон вперёд, назад, обновление весов
ЭпохаВсе обучающие данные прошли по одному разу
ОптимизаторПравило обновления весов. Adam — самый ходовой
Размер батча упирается в видеопамять

Чем больше батч, тем стабильнее градиент и тем больше нужно памяти. На 16 ГБ батчи будут маленькими. Обходной приём — накопление градиента: обработать четыре маленьких батча, усреднить и только потом обновить веса. Эффект как от большого батча, памяти — как от маленького. Вам это пригодится в главах 13 и 17.

Почему обучение получается вообще

Это до сих пор не до конца объяснено теоретически, и честно это сказать стоит. Поверхность ошибки в пространстве миллиардов параметров чудовищно сложна, и нет гарантии, что простой спуск придёт куда-то хорошее.

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

Сколько это стоит

Что обучаемПорядок затратРеально ли у вас
Модель 7B с нуляТысячи видеокарт, недели, миллионы долларовНет
Дообучение 7B целикомНесколько мощных карт, дниНет
LoRA к 7BОдна карта, часыДа — глава 13
LoRA для изображенийОдна карта, десятки минутДа — глава 17
Маленькая своя сетьМинутыДа, и это полезно для понимания

Проверьте, что поняли

Что дальше

Сеть научилась давать правильные ответы на обучающих примерах. Это ещё ничего не значит — и следующая глава объясняет почему.

Глава04 — Как сеть находит веса: ошибка, градиент, шаг
БлокФундамент
Далее05 — Переобучение: выучить, ничего не поняв
Ревизия1
↑ Оглавление Предыдущая глава← 03 · Сеть: слои, веса и откуда берутся миллиарды Следующая глава05 · Переобучение: выучить, ничего не поняв →

Бесплатная книга · tariel.ge · версии инструментов и команды проверяйте в документации проектов

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.