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

Таблица на семнадцать тысяч строк

Возьмём настоящий набор данных. Система велопроката Вашингтона Capital Bikeshare опубликовала почасовую статистику аренд за 2011–2012 годы; в открытом архиве UCI она лежит под именем Bike Sharing Dataset. Файл hour.csv содержит 17 379 строк: дата, час, погода, температура, влажность, признаки календаря и число аренд cnt за этот час. В среднем 189,5 аренды в час, в пиковый час — 977.

Стоит разглядеть устройство строки, потому что дальше мы будем разбирать её на роли. dteday и hr задают момент; weathersit кодирует погоду четырьмя категориями от ясной до ливня; temp и hum — нормированные температура и влажность; holiday, weekday и workingday описывают календарь; наконец, cnt считает аренды, а два служебных столбца, casual и registered, делят их на поездки случайных и постоянных клиентов. Одна и та же строка сыграет у нас роль объекта с ответом, безымянной точки в пространстве, полуразмеченного примера и состояния среды — не меняясь ни на символ.

Вопросов к этой таблице у оператора проката много. Сколько велосипедов возьмут завтра в восемь утра? Стоит ли предупредить о дефиците на станции? На какие типы делятся дни города? Можно ли обойтись разметкой ста дней вместо семисот? Куда ночью перевезти велосипеды, чтобы утром они оказались нужны? Все пять вопросов обслуживает одна и та же таблица, но учится в каждом случае модель по-разному. Различие не в архитектуре и не в объёме данных. Различие в том, какая информация сообщает алгоритму, что он становится лучше.

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

Учитель с готовым ответом

Начнём с самого щедрого сигнала. В обучении с учителем каждому объекту xix_i приложен правильный ответ yiy_i, и обучение ищет правило с наименьшей средней ценой ошибки:

θ^=argminθ  1ni=1n(fθ(xi),yi).\hat\theta =\arg\min_{\theta}\; \frac{1}{n}\sum_{i=1}^{n} \ell\bigl(f_\theta(x_i),\,y_i\bigr).

Эта запись, эмпирический риск, уже встречалась нам в уроке о статистике и ML и станет главным героем урока об эмпирическом риске. Внутри неё живут два разных режима, различающихся типом ответа yy.

Если yy — число, задача называется регрессией. Прокату нужно число аренд следующего часа: y=cnty=\texttt{cnt}, ошибка y^y|\hat y-y| измеряется в велосипедах, и качество модели читается без словаря. Средний будний день устроен так: в три ночи спрос падает до 5 аренд в час, к восьми утра взлетает до 477, днём держится около 200, в пять вечера достигает 525. Выходной день живёт иначе: один пологий горб с вершиной 373 аренды в час дня. Регрессия обязана выучить оба рельефа, и рис. 6.1 показывает, что именно ей предстоит выучить.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Средний почасовой спрос на велосипеды: двугорбый профиль рабочего дня с пиками в 8 и 17 часов и одногорбый профиль выходного с вершиной в 13 часов
Рис. 6.1. Два ритма одного города: средний будний и средний выходной день

Средние почасовые профили по всем дням 2011–2012 годов. Рабочий день двугорбый: город едет на работу к восьми и с работы в пять. Выходной — один пологий горб прогулочных поездок. Эти два рельефа станут героями всех пяти постановок урока.

Если yy — один из конечного списка классов, задача называется классификацией. Оператору не нужно точное число, ему нужно решение: объявлять ли час «часом высокой нагрузки». Определим y=1y=1 при cnt80\texttt{cnt}\ge 80 и y=0y=0 иначе; в таблице высокой нагрузкой обладают 64,4% часов. Модель возвращает вероятность, а порог превращает её в решение; как выбирать порог из цен ошибок, мы вывели в прошлом уроке и разберём до конца в уроке о классификации.

регрессия: yR,классификация: y{1,,K}.\text{регрессия: } y\in\mathbb R, \qquad \text{классификация: } y\in\{1,\ldots,K\}.

Тип ответа диктует и функцию потерь. Для числа естественна абсолютная или квадратичная ошибка:

abs(y^,y)=y^y,sq(y^,y)=(y^y)2,\ell_{\text{abs}}(\hat y,y)=|\hat y-y|, \qquad \ell_{\text{sq}}(\hat y,y)=(\hat y-y)^{2},

и выбор между ними содержателен: квадрат сильнее наказывает редкие большие промахи, модуль спокойнее к выбросам. Для класса модель выдаёт вероятность p^\hat p, и её штрафуют логарифмической потерей:

log(p^,y)=ylnp^(1y)ln(1p^),\ell_{\log}(\hat p,y) =-\,y\ln\hat p-(1-y)\ln(1-\hat p),

которая безжалостна к уверенной ошибке: за p^=0,99\hat p=0{,}99 при y=0y=0 начисляется ln0,014,6-\ln 0{,}01\approx 4{,}6, в сорок шесть раз больше, чем за осторожное p^=0,55\hat p=0{,}55. Уверенность стоит дорого, и это правильно: диспетчер, которому солгали с уверенностью 99%, принял худшее решение, чем тот, кого предупредили о сомнении.

Граница между режимами тоньше, чем кажется. Из хорошей регрессии классификатор получается одной строкой: y^80\hat y\ge 80. Обратное неверно: классификатор «высокая или низкая нагрузка» не восстановит число аренд. Переходя от числа к классу, мы выбрасываем информацию, и этот выброс необратим. Рисунок 6.2 показывает цену операции: порог сплющивает целое распределение в два столбика.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Гистограмма почасового спроса за два года с отмеченным порогом 80 аренд; справа те же данные после порога: два столбика 35,6 и 64,4 процента
Рис. 6.2. Порог превращает распределение в два столбика

Слева гистограмма всех 17 379 часов: длинный правый хвост доходит до 977 аренд. Вертикальная линия — порог 80. Справа всё, что остаётся после порога: класс «низкая нагрузка» с долей 35,6% и класс «высокая» с долей 64,4%. Часы 90 и 900 аренд стали неразличимы; выбрасывание хвоста — осознанная цена решения, а не побочный эффект.

Один рубль за метку: экономика сигнала

Почему бы не решать всё обучением с учителем? Потому что готовые ответы — самый дорогой ресурс задачи. В таблице проката ответы бесплатны: счётчики станций пишут их сами. Но сместим задачу на один шаг: пусть оператор хочет распознавать по фотографии станции, есть ли на ней свободные места. Фотографий за два года миллионы, а ответы к ним никто не записывал. Разметка одной фотографии стоит пусть 3 рубля и 10 секунд; сто тысяч фотографий — 300 тысяч рублей и месяц работы группы разметчиков. Стоимость сигнала внезапно стала главной статьёй бюджета модели.

бюджет разметки=nметок×(цена+контроль качества),\text{бюджет разметки} =n_{\text{меток}}\times(\text{цена}+\text{контроль качества}),

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

Раз метка стоит рубль, встаёт и встречный вопрос: какие объекты вообще стоит нести разметчику? Тысяча фотографий пустых станций в ясный полдень почти не добавляет знания к первой сотне таких же; одна фотография в сумерках под дождём, на которой модель путается, стоит их всех. Стратегию «размечать то, в чём модель не уверена» называют активным обучением, и она регулярно сокращает бюджет разметки в разы. У неё есть и обратная сторона, знакомая по уроку о данных: выборка размеченного перестаёт быть случайной, и оценивать качество модели по ней уже нельзя. Следующие три раздела показывают три способа добывать сигнал дешевле разметчика, каждый со своей ценой.

Без учителя: геометрия вместо ответов

Уберём столбец ответов совсем. Осталась только форма данных, и вопрос звучит иначе: какая структура есть в самих входах? Сожмём каждый день проката в 24-мерный вектор: доля суточных аренд, пришедшаяся на каждый час. Два года дают 730 точек в 24-мерном пространстве. Чтобы говорить о «сгустках», нужно сначала договориться, что значит «близко»; возьмём обычное евклидово расстояние между профилями:

ρ(u,v)=uv=h=023(uhvh)2,\rho(u,v) =\lVert u-v\rVert =\sqrt{\sum_{h=0}^{23}\bigl(u_h-v_h\bigr)^{2}},

где uhu_h и vhv_h — доли часа hh в двух сравниваемых днях. Два дня близки, если их суточные ритмы повторяют друг друга час за часом, независимо от того, сколько всего поездок в них уместилось: нормировка на доли уже вычла из задачи объём. Попросим алгоритм разбить их на три компактные группы, минимизируя расстояние до центров групп:

minμ1,,μK  i=1n  min1kK  xiμk2,K=3.\min_{\mu_1,\ldots,\mu_K}\; \sum_{i=1}^{n}\; \min_{1\le k\le K}\; \bigl\lVert x_i-\mu_k\bigr\rVert^{2}, \qquad K=3 .

Никаких меток алгоритм не видел. Вот что он нашёл на настоящих данных. Группа первая: 159 дней с пиком в восемь утра, на 99% рабочие. Группа вторая: 335 дней с пиком в пять вечера, рабочие все до одного. Группа третья: 236 дней с одним пологим горбом в час дня, и рабочих дней среди них — три процента. Алгоритм, не зная календаря, восстановил различие будней и выходных из одной только формы суточного ритма.

Самое интересное — восемь «ошибок»: рабочие дни, попавшие в выходной кластер. Читаем их даты: 25 ноября 2011-го и 23 ноября 2012-го — пятницы после Дня благодарения; 24, 28 и 31 декабря — предновогодние дни; и 30 октября 2012 года. В этот день на Вашингтон обрушился ураган Сэнди, город закрылся, и будний вторник прожил день по ритму воскресенья. Кластеризация без единой метки нашла в таблице ураган. Это не чудо, а свойство сигнала: форма дня хранит информацию о жизни города, и геометрия умеет её достать.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три средних суточных профиля: утренний пик рабочих дней, вечерний пик рабочих дней и пологий дневной горб выходных; отмечены рабочие дни, попавшие в выходной кластер, включая день урагана Сэнди
Рис. 6.3. Три кластера дней, найденные без меток

Средние профили трёх кластеров по 730 дням 2011–2012 годов. Доли рабочих дней в кластерах: 99%, 100% и 3%. Правая панель показывает «нарушителей»: восемь рабочих дней с выходным ритмом — пятницы после Дня благодарения, предновогодние дни и 30 октября 2012 года, день урагана Сэнди.

Сколько групп просить у алгоритма

Число K=3K=3 в опыте выше выбрали мы, и это второй по важности выбор после расстояния. Формального ответа «правильного KK» у задачи без учителя нет, но есть полезная диагностика. Обозначим через J(K)J(K) достигнутый минимум суммы квадратов расстояний до центров при KK группах:

J(K)=minμ1,,μKi=1nminkxiμk2.J(K) =\min_{\mu_1,\ldots,\mu_K} \sum_{i=1}^{n}\min_{k}\lVert x_i-\mu_k\rVert^{2}.

С ростом KK величина J(K)J(K) только убывает: новых центров становится больше, и каждой точке ближе до какого-нибудь. Убывает, однако, неравномерно. Пока KK меньше числа настоящих сгустков, каждый новый центр забирает себе целый сгусток и роняет JJ сильно; когда сгустки кончились, новые центры лишь дробят существующие, и JJ снижается лениво. На графике J(K)J(K) виден излом, «локоть», и его положение — разумный кандидат на число групп. На профилях дней локоть стоит около K=23K=2{-}3: будни и выходные, с необязательным разделением будней на утренний и вечерний типы.

Локоть — эвристика, а не теорема. Он размывается, когда сгустки перекрываются, и молчит о том, содержательны ли найденные группы. Финальную проверку выполняет не кривая, а перенос: если типы дней, найденные на 2011 годе, осмысленно размечают 2012-й, структура настоящая. Устойчивость кластеров как критерий их реальности подробно разобрана в уроке о кластеризации.

Теперь честная цена этого фокуса. Слово «компактный» в формуле выбрали мы: евклидово расстояние между долями часов. Возьми мы расстояние между абсолютными числами аренд, кластеры разделили бы лето и зиму, а не будни и выходные: полный день лета в четыре раза больше полного дня зимы. Алгоритм без учителя не свободен от предположений; он свободен только от ответов. Число групп KK тоже выбрали мы, и при K=4K=4 или K=7K=7 таблица рассказала бы другие истории. Наконец, имена кластерам дал человек, посмотрев на их состав: в момент оптимизации группы были безымянны.

Редкие метки и толпа неразмеченных

Между двумя крайностями лежит самый частый практический случай: меток мало, неразмеченных объектов много. Пусть из 730 дней размечены типом («будний ритм», «выходной ритм») только 20, выбранных случайно, а остальные 710 профилей доступны без меток. Полуобучение использует обе части: неразмеченные точки показывают, где данные плотные, а редкие метки дают плотным областям имена.

Главное предположение полуобучения называется гладкостью: близкие объекты имеют одинаковые метки. Тогда метку можно распространять: найти неразмеченную точку рядом с уверенно размеченной, присвоить ей псевдометку, включить в обучение и повторить. На профилях дней это работает превосходно, потому что будни и выходные образуют два далёких плотных облака, и 20 меток хватает, чтобы правильно подписать почти все 730 дней.

Та же процедура умеет тихо ломаться. Ошибка в псевдометке — это ошибка, надетая на маску учителя: следующая итерация учится у неё с полным доверием, присваивает по ней новые псевдометки, и одна ранняя ошибка расползается по всей плотной области. Посчитаем масштаб на числах из практики. Модель уверенно присвоила псевдометки 900 объектам; выборочная проверка 100 псевдометок нашла 12 ошибок. Оценка доли ошибок p^=0,12\hat p=0{,}12 со стандартной ошибкой

se(p^)=0,120,881000,0325\operatorname{se}(\hat p) =\sqrt{\frac{0{,}12\cdot 0{,}88}{100}} \approx 0{,}0325

даёт интервал от 5,5% до 18,5% и ожидаемо от 50 до 167 ошибочных псевдометок среди 900. Аппарат прошлого урока пригодился через страницу: проверка качества псевдометок — обычный выборочный контроль.

В функции потерь два сорта меток честно разделяют:

L(θ)=iразм(fθ(xi),yi)+λjпсевдо(fθ(xj),y~j),λ<1,L(\theta) =\sum_{i\in\text{разм}} \ell\bigl(f_\theta(x_i),y_i\bigr) +\lambda \sum_{j\in\text{псевдо}} \ell\bigl(f_\theta(x_j),\tilde y_j\bigr), \qquad \lambda<1,

где y~j\tilde y_j — псевдометки, а вес λ\lambda признаёт их второсортность. При λ1\lambda\to 1 модель верит своим догадкам как учителю; при λ=0\lambda=0 полуобучение выключено. Настраивать λ\lambda нужно по отложенным настоящим меткам, никогда — по псевдометкам: экзаменатор не может быть автором шпаргалки. Прочие защиты стандартны: распространять только при высокой уверенности, чередовать распространение с проверкой случайной подвыборки человеком, останавливаться, когда проверка находит больше ошибок, чем договорились терпеть.

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

Дни проката на плоскости «доля утреннего часа — доля дневного часа». Слева: метки двадцати дней растекаются по своим плотным облакам, ошибок почти нет. Справа: одна ранняя ошибка на границе облаков (жёлтая точка) становится источником псевдометок и подписывает чужую область. Уверенность модели растёт с каждой итерацией; правота — нет.

Лаборатория распространения меток

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

Псевдометки: распространение, порог уверенности и ползучая ошибка

Загружается живая иллюстрация…

Три опыта. Первый: при пороге 0,9 увеличивайте число итераций. Распространение заполняет оба облака и останавливается перед мостом пограничных дней: там единогласия соседей не бывает, и осторожный алгоритм честно оставляет серые точки серыми. Второй: опустите порог до 0,6. Покрытие становится полным, а число ошибок удваивается — все новые псевдометки легли на мост, где похожесть соседей перестала означать одинаковость. Третий: оставьте всего 4 настоящие метки; при неудачном раскладе точность падает к 60–70%, потому что целые области достались не тому классу: маленькая случайность в выборе первых меток решила судьбу трёх сотен псевдо-ответов.

Задача из самого объекта

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

x    (mask(x),  hidden(x)),x\;\longmapsto\; \bigl(\operatorname{mask}(x),\;\operatorname{hidden}(x)\bigr),

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

minθ  E(fθ(mask(x)),  hidden(x)),\min_{\theta}\; \mathbb E\, \ell\Bigl( f_\theta\bigl(\operatorname{mask}(x)\bigr),\; \operatorname{hidden}(x) \Bigr),

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

У самообучения есть и второй режим работы: оно готовит представления для чужих задач. Модель, наученная восстанавливать скрытые часы вашингтонского проката, поневоле сжала в своих промежуточных величинах знание о ритмах городов вообще: будни, выходные, погода, сезон. Открывая прокат в другом городе, оператору не нужно два года копить данные: он берёт предобученную модель и дообучает её сотней местных дней. Разметка, которой хватило бы на жалкий классификатор с нуля, поверх готовых представлений даёт рабочую систему. Этот приём, предобучение с дообучением, стал главным способом экономить сигнал в индустрии, и мы встретим его в уроке о переносе представлений.

Бесплатность сигнала не означает его нейтральность. Что именно скрывать, выбирает человек, и выбор определяет, какие закономерности усвоит модель. Предсказание следующего слова заставляет выучить грамматику и типичные продолжения; частые обороты корпуса получают больший вес, чем редкие факты, и правдоподобное продолжение не обязано быть верным. Этот режим породил большие языковые модели, и мы разберём его подробно в уроке о последовательностях.

Награда приходит после цепочки

Последний режим меняет саму геометрию задачи. До сих пор модель отвечала на изолированные вопросы: каждая строка таблицы, каждая фотография — сам по себе пример с немедленной проверкой. Ночному диспетчеру проката так не живётся: он решает, сколько велосипедов увезти со станции A на станцию B, утром выясняется спрос, к вечеру — последствия утреннего дефицита, и единственная сводка «удовлетворено 94% поездок» приходит за всю смену целиком. Сигнал стал редким, запаздывающим и общим для всей последовательности решений.

Обучение с подкреплением формализует эту ситуацию. Агент в состоянии sts_t выбирает действие ata_t, среда отвечает новым состоянием st+1s_{t+1} и наградой rtr_t, а цель агента — не ближайшая награда, а возврат, сумма будущих наград с затуханием:

Gt=rt+γrt+1+γ2rt+2+,0<γ1.G_t =r_t+\gamma\,r_{t+1}+\gamma^{2}r_{t+2}+\cdots, \qquad 0<\gamma\le 1 .

Коэффициент γ\gamma задаёт длину горизонта. Посчитаем на конкретной цепочке. Агент получил награды [0,0,1,0,0,5][0,\,0,\,-1,\,0,\,0,\,5]: штраф на третьем шаге, большая награда на шестом. При γ=1\gamma=1 возврат G1=1+5=4G_1=-1+5=4: далёкая награда полностью перевешивает штраф. При γ=0,5\gamma=0{,}5

G1=0,25(1)+0,031255=0,25+0,15625=0,09375,G_1 =0{,}25\cdot(-1)+0{,}03125\cdot 5 =-0{,}25+0{,}15625 =-0{,}09375,

и та же цепочка стала убыточной: затухание съело далёкую награду быстрее, чем близкий штраф. Выбор γ\gamma — это выбор характера: близорукий агент не жертвует ничем ради будущего, дальнозоркий приписывает успех слишком многим давним шагам сразу.

У возврата есть свойство, на котором держится половина теории подкрепления. Вынесем γ\gamma за скобку начиная со второго слагаемого:

Gt=rt+γ(rt+1+γrt+2+)=rt+γGt+1.G_t =r_t+\gamma\bigl(r_{t+1}+\gamma r_{t+2}+\cdots\bigr) =r_t+\gamma\,G_{t+1}.

Возврат сегодняшнего шага равен сегодняшней награде плюс затухший возврат завтрашнего. Длинная цепочка сворачивается в рекурсию из двух слагаемых, и агенту не нужно помнить всё будущее: достаточно уметь оценивать Gt+1G_{t+1}. Из этой одной строки вырастут уравнения Беллмана и все алгоритмы уроков об обучении с подкреплением. Вторая половина трудности — назначение заслуги: даже зная, что смена удалась, нужно решить, какое из тридцати ночных решений было причиной.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Разложение возврата по шагам при трёх значениях гаммы: вклад штрафа на третьем шаге и награды на шестом шаге меняются местами
Рис. 6.5. Затухание решает спор близкого штрафа и далёкой награды

Одна и та же цепочка наград [0,0,1,0,0,5][0,0,-1,0,0,5] при трёх значениях γ\gamma. Столбики — вклады шагов в возврат G1G_1. При γ=1\gamma=1 правит далёкая пятёрка, при γ=0,5\gamma=0{,}5 побеждает близкий штраф, у γ0,72\gamma\approx 0{,}72 они уравновешены. Горизонт агента — настраиваемый параметр, а не свойство мира.

Награда — это спецификация, и она мстит за небрежность

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

Классический документированный случай: в 2016 году агент, обучавшийся гонке на катерах CoastRunners, обнаружил, что очки дают мишени на трассе, а не финиш. Оптимальной стратегией оказалось кружить в лагуне, собирая возрождающиеся мишени, врезаясь в стены и поджигая катер; счёт при этом на 20% превышал результат честной гонки. Формула вознаграждения исполнена безупречно; замысел разрушен полностью.

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

r=αпоездкиβкм перевозкиδчасы пустых станций,r=\alpha\cdot\text{поездки} -\beta\cdot\text{км перевозки} -\delta\cdot\text{часы пустых станций},

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

Исследовать или использовать

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

Простейший компромисс называется ε\varepsilon-жадностью:

at={лучшее известное действие,с вероятностью 1ε,случайное действие,с вероятностью ε,a_t= \begin{cases} \text{лучшее известное действие}, & \text{с вероятностью } 1-\varepsilon,\\[2pt] \text{случайное действие}, & \text{с вероятностью } \varepsilon, \end{cases}

и даже такое грубое правило решает главное: у каждого действия остаётся ненулевой шанс быть попробованным, поэтому хорошая стратегия не может спрятаться навсегда. Платится за это регулярной ценой: доля ε\varepsilon ночей заведомо потрачена не лучшим известным образом. За месяц при ε=0,1\varepsilon=0{,}1 разведке достанутся примерно три ночи; выгодно ли это, зависит от того, сколько месяцев система собирается жить: долгая жизнь оправдывает дорогую разведку, у короткой кампании времени окупить знание нет. Точный расчёт этого компромисса — задача о многоруком бандите, с которой начнётся весь блок подкрепления.

Лаборатория диспетчера ночной смены

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

Загружается живая иллюстрация…

Протокол опытов. Начните с награды только за поездки (β=δ=0\beta=\delta=0): велосипедов на всех не хватает, и агент отдаёт их станциям с самым богатым спросом; у кого спрос беднее, тот стоит с красными столбиками, и счёт агента от этого не страдает. Включите штраф за километры и увеличивайте β\beta: найдите значение, при котором агенту выгоднее почти не возить, и посмотрите, что стало с часами пустых станций. Затем добавьте штраф δ\delta и подберите тройку коэффициентов с лучшим балансом покрытия и пробега. Число «без развозок было бы» в сводке — базовая линия бездействия: выигрыш агента над ней и есть то, за что оператор платит обучению с подкреплением.

Пять режимов на одной карте

Соберём урок в одну таблицу и посмотрим на неё глазами инженера, которому принесли новую задачу.

РежимСигналЦена сигналаХарактерный провал
Классификацияготовый классразметка каждого объектасмысл классов задан людьми и устаревает
Регрессияготовое числочасто пишется приборамиучит среднее, молчит о хвостах
Без учителягеометрия входовбесплатноструктура зависит от выбранного расстояния
Полуобучениередкие метки + плотностьдесятки метокошибка псевдометки самоусиливается
Подкреплениенаграда за цепочкуопыт взаимодействиялазейки в функции награды

Самообучение в таблице прячется в первой строке: это классификация, чьи метки изготовлены из самих объектов. Пять режимов не соперничают, а комбинируются, и самые заметные системы последних лет — именно многоступенчатые гибриды. Большая языковая модель сначала месяцами предобучается самообучением на триллионах токенов: сигнал бесплатный, и его берут столько, сколько есть. Затем её дообучают с учителем на десятках тысяч дорогих образцовых диалогов, написанных людьми. В конце подключается подкрепление: модель-судья, обученная на человеческих сравнениях ответов, выдаёт награду, и основная модель настраивается по ней — со всеми рисками закона Гудхарта, включая выученную угодливость вместо точности. Каждая ступень покупает то, чего не может дать предыдущая, и платит своей характерной уязвимостью; конвейер целиком мы разберём в уроке о больших языковых моделях.

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

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

Как услышать сигнал в живой задаче

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

Карточка дисциплинирует сильнее, чем кажется. Если команда не может договориться о форме одного ответа и о том, как проверит его через неделю, у задачи пока нет постановки, и обучать нечего. Если форма ответа есть, режим почти всегда определяется по двум вопросам из этого урока: где возьмём сигнал и сколько он стоит.

Пять сигналов, один выбор

Режим обучения определяется видом обратной связи. С учителем сигнал — готовый ответ, и главный вопрос — кто и почём его изготовил. Классификация и регрессия различаются типом ответа, и переход от числа к классу выбрасывает информацию безвозвратно. Без учителя сигналом служит геометрия самих входов; она бесплатна, но выбор расстояния, нормировки и числа групп — содержательные решения, которые никуда не исчезли, а переехали из столбца ответов в постановку. Полуобучение покупает охват за доверие к собственным догадкам и требует выборочного контроля псевдометок; самообучение изготавливает учителя из объекта и наследует перекосы корпуса. Подкрепление получает редкий сигнал за целую цепочку решений, платит за это задачей назначения заслуги и исполняет функцию награды буквально — со всеми её лазейками, а его рекурсия Gt=rt+γGt+1G_t=r_t+\gamma G_{t+1} сворачивает бесконечное будущее в одно обучаемое число. Один и тот же файл hour.csv прожил в этом уроке пять жизней: по нему предсказывали число и класс, в нём нашли ураган без единой метки, его подписали двадцатью метками из семисот и по его ритму развозили велосипеды. Выбор между этими жизнями всякий раз делали не данные и не алгоритм, а вопрос, заданный таблице.

Задачи