Один двигатель, разные приборные панели

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

Одну и ту же сеть зовут три заказчика. Агентству недвижимости нужна цена квартиры в евро. Почтовому сервису — ответ «спам или нет». Банку — цифра от 0 до 9, написанная на чеке от руки. Что придётся переделать в сети, переходя от одного заказчика к другому?

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

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

Двигатель общий, панель под задачу

В уроках 9 и 10 сеть собиралась из скрытых слоёв: каждый нейрон считает взвешенную сумму и пропускает её через sigmoid или tanh. Эти слои — двигатель. Они перемалывают вход \(\vb{x}\) в набор чисел \(h_j\): признаки, по которым уже можно отвечать заказчику.

Но двигатель ничего не показывает водителю. Для этого нужна приборная панель — выходной слой (output layer). Он берёт признаки \(h_j\) и переводит их в ответ того вида, который нужен задаче. Видов три, и у каждого свой прибор.

x скрытые слои признаки h двигатель приборные панели linear любое число sigmoid вероятность 0 1 softmax K вероятностей сумма 1
Рис. 1. Скрытые слои устроены одинаково, какой бы ни была задача. Вид ответа задаёт прибор на выходе: стрелка на шкале без концов, лампа с яркостью от 0 до 1 или полоса, разрезанная на доли.

К прибору всегда прилагается второе решение: чем штрафовать за промах. Это функция ошибки — error function \(E(\vb{w})\); в конспекте она же loss function. На слайде 52 лекции 2 (в его углу напечатано 53) профессор говорит это прямо: "Error functions define the task to be solved". А скрытым нейронам слайд 19 оставляет sigmoid или tanh, какой бы ни была задача. Весь урок — про три пары «прибор + штраф» и про то, почему пары нельзя перемешивать.

Как читать слайды и конспект одновременно

Слайды и конспект пишут одно и то же разными буквами. Договоримся один раз.

Обозначения профессора и конспекта. На экзамене пиши как на слайдах.
ЧтоСлайдыКонспект
ответ сети на пример \(n\)\(g(x_n|\vb{w})\), у softmax \(y_k\)\(\hat y_i\) или \(y_i\)
правильный ответ, target\(t_n\)\(t_i\)
сумма на входе выходного нейрона\(a\), у softmax \(z_k\)\(a\) или \(z\); у softmax logit \(a_i\)
ошибкаerror function \(E(\vb{w})\), сумма по примерамloss \(L\), среднее по примерам
логарифм\(\log\)\(\ln\) и \(\log\) вперемешку

Дальше \(y\) — короткая запись для \(g(x_n|\vb{w})\), ответа сети на один пример; \(a\) — сумма на входе выходного нейрона; все логарифмы натуральные.

Regression: стрелка без ограничителей

Агентству нужна цена. Цена — число, которое может оказаться любым: 250 000 евро за квартиру, а в соседней задаче −10 °C за окном. В уроке 10 было видно, что sigmoid сжимает любой вход в интервал \((0, 1)\), а tanh — в \((-1, 1)\). Поставь такую функцию на выход, и сеть не сможет произнести «250 000», какими бы ни были веса.

Поэтому в regression на выходе стоит один нейрон с линейной активацией (linear activation): он отдаёт взвешенную сумму как есть. Один — потому что число нужно одно; если сеть должна предсказать несколько чисел сразу, линейных нейронов ставят по одному на каждое.

\[ g(x_n|\vb{w}) = a = \sum_{j=0}^{J} w_{1j}^{(2)}\, h_j \]
\(h_j\)
выходы последнего скрытого слоя; \(h_0 = 1\) несёт смещение \(w_{10}^{(2)}\)
\(w_{1j}^{(2)}\)
вес от скрытого нейрона \(j\) к выходному нейрону 1
\(a\)
сумма на входе выходного нейрона; при linear activation она же и ответ

«Линейный выход делает всю сеть линейной». Нет. Скрытые слои остаются нелинейными, и ответ по-прежнему нелинейно зависит от входа \(\vb{x}\). Линейно только последнее действие: сложить готовые признаки с весами.

Чем штрафовать: квадрат промаха

На слайдах ошибка для regression — Sum of Squared Errors: промах на каждом примере возводится в квадрат, квадраты складываются.

\[ E(\vb{w}) = \sum_{n=1}^{N} \bigl(t_n - g(x_n|\vb{w})\bigr)^2 \]
\(t_n\)
target: правильный ответ для примера \(n\)
\(g(x_n|\vb{w})\)
ответ сети на этот пример
\(N\)
число примеров

Квадрат делает две вещи. Убирает знак: промахи \(+1\) и \(-1\) не гасят друг друга. И наказывает большие промахи сильнее маленьких: промах 10 стоит в сто раз дороже промаха 1.

Конспект делит ту же сумму на \(N\) и называет результат MSE, а рядом вводит MAE — среднее модулей промахов, которого на слайдах нет.

\[ \text{MSE} = \frac{1}{N} \sum_{n=1}^{N} (y_n - t_n)^2 \] \[ \text{MAE} = \frac{1}{N} \sum_{n=1}^{N} \abs{y_n - t_n} \]

Деление на \(N\) не меняет, при каких весах ошибка минимальна. Оно только уменьшает градиент в \(N\) раз, а это то же самое, что взять другой learning rate \(\eta\).

Example 4 и 5 конспекта (стр. 73–74): четыре примера, три способа сложить промахи.
\(n\)\(t_n\)\(y_n\)\(y_n - t_n\)квадратмодуль
123+111
254−111
368+242
432−111
сумма75

Отсюда Sum of Squared Errors равна 7, MSE = 7 / 4 = 1.75, MAE = 5 / 4 = 1.25. Обрати внимание на единицы: если цены в евро, то MAE тоже в евро, а MSE — в евро в квадрате. Чтобы вернуться к евро, из MSE берут корень: \(\sqrt{1.75} \approx 1.32\).

Для обучения важнее другое: с какой силой каждый пример тянет ответ к своей цели. Силу задаёт производная ошибки по ответу \(y_n\).

\[ \pd{\,\text{MSE}}{y_n} = \frac{2}{N}\,(y_n - t_n) \] \[ \pd{\,\text{MAE}}{y_n} = \frac{1}{N}\,\sign(y_n - t_n) \]

Знак плюс значит «ответ завышен»: обучение идёт против производной и тянет такой ответ вниз, к цели. В примере у MSE производные равны \((0.5,\ {-}0.5,\ 1.0,\ {-}0.5)\): третий пример ошибся вдвое сильнее и тянет вдвое сильнее. У MAE они равны \((0.25,\ {-}0.25,\ 0.25,\ {-}0.25)\): все тянут одинаково, размер промаха не важен.

У модуля есть две неприятности, и обе названы в конспекте. В точке \(y_n = t_n\) у него нет производной; на практике берут subgradient — любое число от −1 до 1, обычно 0. И его тяга не слабеет рядом с целью: шаги остаются одного размера, поэтому с MAE обучение сходится медленнее. Зато оно устойчивее к выбросам (outliers).

Что это значит, лучше увидеть на данных, в которые закралась ошибка.

Loss playground, часть 1: выброс против MSE и MAE

Пять похожих квартир и их цены в сотнях тысяч евро: 2, 3, 4, 5 и \(t_5\). Модель самая простая: она отвечает одним и тем же числом \(y\) на все пять примеров (фиолетовая линия). Бирюзовые отрезки — промахи. Пунктиры показывают среднее и медиану цен.

  1. Выброса пока нет: \(t_5 = 6\), \(y = 4\). Прежде чем трогать кнопки, реши: какой ответ \(y\) даёт наименьший MSE, а какой — наименьший MAE?
    Что должно получиться

    Обе кнопки ставят \(y = 4\): у цен 2, 3, 4, 5, 6 среднее и медиана совпадают. Оба наклона равны нулю, MSE = 2.00, MAE = 1.20.

  2. В пятой цене кто-то дописал лишнюю цифру: веди \(t_5\) к 26. Сначала угадай, какая из двух пунктирных линий поедет вверх. Это и есть главное в виджете.
    Что должно получиться

    Среднее уезжает с 4 до 8, медиана стоит на 4. Один выброс утаскивает за собой минимум MSE, а минимум MAE не сдвигается вообще: ему важно только, что эта цена больше остальных, а насколько — нет.

  3. Оставь \(t_5 = 26\) и нажми «y в минимум MSE». Сколько точек оказалось под линией ответа? Почему MSE считает такое положение лучшим, а MAE — нет?
    Что должно получиться

    Четыре из пяти: модель завышает цену почти всем. MSE уравновешивает расстояния: один промах на 18 вверху против \(6 + 5 + 4 + 3 = 18\) внизу. MAE уравновешивает число точек: четыре против одной, поэтому его наклон \(+0.60\) требует опустить ответ.

Модель в виджете отвечает одним числом, и для неё всё видно сразу: минимум MSE — это среднее цен, минимум MAE — их медиана. Из Applied Statistics ты знаешь, что среднее чувствительно к выбросам, а медиана нет. Здесь то же свойство, только под другим именем. У настоящей сети ответ зависит от входа, и «среднее» с «медианой» становятся условными: при данном \(\vb{x}\).

«MSE минимизирует дисперсию, MAE — среднюю ошибку». Так подытожено в конспекте на стр. 75, и на экзамене такая фраза ничего не объясняет. Точная формулировка: лучший ответ по squared error — среднее значение target при данном входе, лучший по absolute error — медиана. Отсюда и устойчивость MAE к выбросам.

Почему на слайдах всё-таки квадрат, а не модуль? Потому что Sum of Squared Errors получается сама, если считать target ответом сети плюс гауссов шум и искать веса, при которых наблюдённые данные самые вероятные. Вывод — в уроке 15. Здесь достаточно запомнить связку «гауссов шум — квадрат промаха».

Два класса: одна лампа с яркостью

Почтовому сервису нужен ответ «спам или нет». Классов два, но нейрон на выходе нужен один: он показывает, насколько сеть уверена в классе 1, а классу 0 достаётся остаток.

Какую активацию ему дать, на слайде 19 лекции 2 решает кодировка ответов — то, какими числами классы записаны в данных.

На выходе sigmoid: ответ лежит в \((0, 1)\). Его читают как вероятность класса 1.

На выходе tanh: ответ лежит в \((-1, 1)\). Знак показывает класс, модуль — уверенность.

Апостериорная вероятность класса (class posterior probability) — вероятность того, что пример принадлежит классу 1, после того как сеть увидела его вход: \(g(x_n|\vb{w}) = p(t_n = 1 \mid x_n)\). Классу 0 остаётся \(1 - g(x_n|\vb{w})\).

Оговорка: число из \((0, 1)\) само по себе ещё не вероятность. Оценкой вероятности оно становится, когда сеть обучена на ответах 0 и 1 с подходящей функцией ошибки. К ней и переходим, но сначала — место в конспекте, где кодировки перепутаны.

Штраф синоптика

Как штрафовать сеть, которая выдаёт вероятность? Представь синоптика. Вечером он объявляет вероятность дождя, утром идёт дождь. Насколько он неправ? Удобная мера — «удивление»: минус логарифм вероятности, которую он дал тому, что случилось на самом деле.

Дождь пошёл. Штраф синоптика равен \(-\ln p\), где \(p\) — объявленная вероятность дождя.
Прогноз: дождь\(p\)Штраф \(-\ln p\)
90 %0.90.105
40 %0.40.916
10 %0.12.303
0.1 %0.0016.908

Уверенный и правый почти ничего не платит. Уверенный и неправый платит много, и чем увереннее, тем больше: потолка у штрафа нет. Сумма таких штрафов по всем примерам — binary cross-entropy.

\[ \begin{aligned} & E(\vb{w}) = -\sum_{n=1}^{N} \bigl[\, t_n \ln y_n \\ & \qquad {} + (1 - t_n) \ln (1 - y_n) \,\bigr] \end{aligned} \]
\(y_n\)
ответ сети \(g(x_n|\vb{w})\): вероятность класса 1
\(t_n = 1\)
от скобки остаётся первое слагаемое, штраф \(-\ln y_n\)
\(t_n = 0\)
остаётся второе, штраф \(-\ln(1 - y_n)\)

В обоих случаях под логарифмом стоит вероятность, которую сеть дала правильному классу. Посчитаем на примере из конспекта.

Example 6 конспекта (стр. 78): четыре письма, ответы сети и штрафы.
\(n\)\(t_n\)\(y_n\)дано верному классуштраф
110.90.90.105
200.20.80.223
310.40.40.916
400.60.40.916
сумма (как на слайдах)2.161
среднее (как в конспекте)0.540

Много это или мало? Сравни с моделью, которая ничего не знает и на всё отвечает 0.5: её штраф на каждом письме равен \(\ln 2 = 0.693\). Наши 0.540 лишь немного лучше. Простой подсчёт говорит то же: по порогу 0.5 сеть угадала два письма из четырёх.

«Cross-entropy 0.54 — значит, 54 % ошибок». Нет: это средний штраф, а не доля ошибок. Верхней границы у него нет. Осмысленная точка отсчёта — \(\ln 2 \approx 0.693\), штраф модели «всегда 0.5».

Почему этот штраф называется cross-entropy?

Название пришло из теории информации. Там «удивление» от события с вероятностью \(q\) равно \(-\ln q\), а cross-entropy двух распределений — среднее удивление наблюдателя, который верит в распределение \(q\), когда на самом деле события идут по распределению \(p\):

\[ H(p, q) = -\sum_{k} p_k \ln q_k \]

У нас \(p\) — правильный ответ: вся вероятность на одном классе. \(q\) — ответ сети. В сумме выживает одно слагаемое: минус логарифм вероятности, которую сеть дала правильному классу. Чем лучше \(q\) совпадает с \(p\), тем меньше \(H\); для ответов 0 и 1 минимум равен нулю.

А что будет, если штрафовать лампу по-старому, квадратом промаха \((t - y)^2\)? Сравним два штрафа на одном примере.

Loss playground, часть 2: уверенная ошибка

Один пример и один выходной нейрон с sigmoid: ползунок задаёт сумму \(a\) на его входе, ответ сети \(y = \sigma(a)\). Две кривые — два штрафа за один и тот же ответ: cross-entropy уходит вверх без предела, бирюзовая squared error не поднимается выше 1. Фиолетовые точки — где сеть сейчас. Под графиком — сигнал к исправлению \(\partial E / \partial a\) для каждого штрафа.

  1. Сейчас \(a = 2\), \(t = 1\): сеть права, \(y = 0.88\). Веди \(a\) влево до −8 — сеть всё увереннее говорит «не спам» про спам. Сначала предскажи: до какого значения дорастёт каждый штраф?
    Что должно получиться

    Squared error упирается в потолок 1 (в виджете 0.999). Cross-entropy доходит до 8.000 и росла бы дальше. Это главное: у cross-entropy нет потолка для уверенной ошибки, у squared error он равен 1.

  2. Не трогая \(a = -8\), сравни две строки \(\partial E / \partial a\). Какой сигнал сильнее и во сколько раз?
    Что должно получиться

    \(-0.9997\) против \(-0.0007\): отношение 1491 к 1. Это и есть «в 1500 раз слабее» из начала урока. Оба числа отрицательные: чтобы ошибка уменьшилась, \(a\) надо увеличивать.

  3. Переключи горизонтальную ось на «сумму a». Теперь наклон кривой в точке — это и есть \(\partial E / \partial a\). Что происходит слева с кривой squared error и что с кривой cross-entropy?
    Что должно получиться

    Squared error легла на плато высотой 1: касательная горизонтальна, спуску не за что зацепиться. Cross-entropy слева идёт прямой с наклоном −1: как бы грубо сеть ни ошиблась, сигнал не пропадает.

  4. Верни ось «выход y» и поменяй правильный ответ на \(t = 0\). Что станет с картинкой?
    Что должно получиться

    Она отразится зеркально: теперь дорого стоят ответы около 1. Оба штрафа относятся к двум классам одинаково.

В координатах \(y\) кривая cross-entropy — та самая, что нарисована в конспекте на стр. 79. Подпись под тем рисунком стоит поправить.

Откуда в штрафе именно логарифм, покажет урок 15: binary cross-entropy получается из того же принципа «самые вероятные данные», если считать каждый ответ \(t_n\) броском монеты, у которой орёл выпадает с вероятностью \(g(x_n|\vb{w})\).

Много классов: полоса, разрезанная на доли

Банку нужна цифра на чеке: десять классов. Правило слайда 19 лекции 2 короткое: нейронов на выходе столько же, сколько классов, то есть \(K\). Остаётся решить две вещи: как записать правильный ответ и как превратить \(K\) сумм в \(K\) вероятностей.

One-hot: как записать ответ

Первое, что приходит в голову, — пронумеровать классы: кот — 0, пёс — 1, птица — 2, и учить один нейрон выдавать номер. Но числа приносят с собой порядок и расстояния, которых у классов нет. Выходит, что птица вдвое дальше от кота, чем пёс, а пёс — нечто среднее между котом и птицей.

кот пёс птица 0 1 2 расстояние 1 расстояние 2 вдвое дальше?

До: классы как числа 0, 1, 2

кот [1 0 0] пёс [0 1 0] птица [0 0 1] √2 √2 √2 поровну

После: one-hot encoding

Рис. 2. Номера классов навязывают им порядок и разные расстояния. В кодировке one-hot каждый класс получает свою ось, и все классы оказываются на одном расстоянии \(\sqrt 2\) друг от друга.

One-hot encoding убирает лишнее: ответ — вектор из \(K\) чисел, единица на месте своего класса, нули на остальных. Какое место «горячее» у какого класса — вопрос договорённости: в конспекте кот получает \([1, 0, 0]\), а на слайде 19 первый класс \(\Omega_0\) записан как \([0\ 0\ 1]\).

Softmax: как получить доли

Каждый из \(K\) выходных нейронов считает свою сумму \(a_k\). Конспект называет эти суммы logits, на слайде 19 они обозначены \(z_k\). Logit может быть любым числом, в том числе отрицательным. Softmax делает из них доли в два шага: экспонента превращает любое число в положительное, деление на общую сумму заставляет доли складываться в 1. Заодно экспонента растягивает различия: отрыв на 1 по logit — это доля в \(e \approx 2.72\) раза больше, отрыв на 3 — уже в 20 раз. Но ни одна доля не становится нулём.

\[ y_k = \frac{\exp(a_k)}{\sum_{j=1}^{K} \exp(a_j)} \]
\(a_k\)
logit класса \(k\): сумма \(\sum_j w_{kj} h_j\) на входе выходного нейрона \(k\) (на слайде \(z_k\))
\(y_k\)
ответ выходного нейрона \(k\): вероятность класса \(k\)
\(K\)
число классов и число выходных нейронов
logits a exp(a) y = exp(a) / S класс 1 класс 2 класс 3 2.0 1.0 0.1 7.389 2.718 1.105 S = 11.212 0.659 0.242 0.099 в сумме 1
Рис. 3. Example 7 конспекта (стр. 81–82) по шагам: экспонента, сумма, деление. Первый класс набрал на 1 больше второго и получил долю в \(e \approx 2.72\) раза больше.

Из формулы сразу следуют два свойства, каждое доказывается в одну строку.

Важны только разности. Прибавь ко всем \(a_k\) одно и то же число \(c\): числитель и знаменатель умножатся на \(e^{c}\), и оно сократится.

\[ \frac{e^{a_k + c}}{\sum_j e^{a_j + c}} = \frac{e^{c}\, e^{a_k}}{e^{c} \sum_j e^{a_j}} = y_k \]

Поэтому отношение долей двух классов зависит только от разности их logits: \(y_1 / y_2 = e^{a_1 - a_2}\).

При \(K = 2\) это sigmoid. Раздели числитель и знаменатель на \(e^{a_1}\):

\[ y_1 = \frac{e^{a_1}}{e^{a_1} + e^{a_2}} = \frac{1}{1 + e^{-(a_1 - a_2)}} \]

Справа стоит \(\sigma(a_1 - a_2)\). Вот почему для двух классов хватает одного нейрона с sigmoid: второй logit можно считать нулём.

Первое свойство экономит время на калькуляторе: вычти из всех logits наибольший. Вместо \((2.0,\ 1.0,\ 0.1)\) получится \((0,\ {-}1,\ {-}1.9)\), экспоненты \((1,\ 0.368,\ 0.150)\), сумма 1.518 — и первая доля сразу \(1 / 1.518 = 0.659\). Числа меньше, ответ тот же.

Softmax-микшер

Три ползунка — logits трёх классов, четвёртый прибавляет одно и то же \(c\) ко всем сразу. Вверху столбики logits, внизу вероятности после softmax. Ромб — цель \(t_k\) из вектора one-hot, стрелка под столбиком идёт от ответа к цели.

  1. На старте logits равны \((2.0,\ 1.0,\ 0.1)\), как в Example 7. Не глядя на числа: во сколько раз \(y_1\) больше \(y_2\)?
    Что должно получиться

    В \(e^{2.0 - 1.0} = e \approx 2.72\) раза: 0.659 против 0.242. Отношение долей задаёт разность logits, а не сами числа.

  2. Проведи ползунок \(c\) из конца в конец. Что будет с нижними столбиками? Ради этого опыта виджет и сделан.
    Что должно получиться

    Ничего. Верхние столбики едут все вместе, экспоненты под графиком меняются в тысячи раз, а вероятности стоят: \(e^{c}\) сокращается. Softmax видит только разности logits.

  3. Верни Example 7 и выбери правильным класс 2. Запомни cross-entropy. Теперь подними \(a_3\) до 3, не трогая \(a_2\). Ошибка изменится?
    Что должно получиться

    Вырастет с 1.417 до 2.408, хотя logit правильного класса никто не трогал. Чужой класс забрал себе долю, и \(y_2\) упал с 0.242 до 0.090: выходы связаны общей суммой.

  4. Убери третий класс из игры: \(a_3 = -5\), а \(a_1 = 2\), \(a_2 = 1\). Чему теперь равен \(y_1\)?
    Что должно получиться

    Примерно 0.73 — это \(\sigma(1) = 0.731\). На двух классах softmax превращается в sigmoid от разности logits.

Cross-entropy для \(K\) классов

Штраф тот же, что у синоптика: минус логарифм вероятности, данной правильному классу. С ответом one-hot это записывается суммой, в которой выживает одно слагаемое.

\[ E = -\sum_{k=1}^{K} t_k \ln y_k = -\ln y_c \]
\(t_k\)
компоненты вектора one-hot: единица у правильного класса, остальные нули
\(c\)
номер правильного класса

На слайде 51 та же ошибка для всех примеров сразу названа Crossentropy и записана через скалярное произведение векторов длины \(K\); конспект называет её CCE.

\[ E(\vb{w}) = -\sum_{n=1}^{N} \vb{t}_n\T \ln g(x_n|\vb{w}) \]

В Example 7: если правильный класс первый, штраф равен \(-\ln 0.659 = 0.417\); если второй — \(-\ln 0.2424 = 1.417\). Во втором случае доля взята с четырьмя знаками: с округлённой 0.242 вышло бы 1.419. Точка отсчёта — модель, которая делит поровну: её штраф \(\ln K\), для трёх классов \(\ln 3 = 1.099\).

«Выходы softmax — это \(K\) независимых вероятностей». Нет: они связаны общей суммой. Подними один logit, и все остальные доли уменьшатся, хотя их logits никто не трогал. Поэтому ошибка, в которую входит только \(y_c\), всё равно зависит от всех \(K\) сумм. Независимые вероятности дали бы \(K\) отдельных sigmoid, но это уже другая задача: в ней у примера может быть несколько классов сразу.

Одна строка на все три панели

Вернёмся к письму из начала урока. Сеть сказала «спам с вероятностью 0.0003», письмо — спам. Чтобы исправиться, сети нужен сигнал: в какую сторону и насколько сильно менять сумму \(a\) на входе выходного нейрона. Этот сигнал — производная \(\partial E / \partial a\); в уроке 14 именно она отправится назад по сети. Посчитаем её для пары «sigmoid + cross-entropy».

  1. Один пример. Ошибка и выход нейрона:

    \[ E = -\bigl[\, t \ln y + (1 - t) \ln (1 - y) \,\bigr] \] \[ y = \sigma(a) \]
  2. \(E\) зависит от \(a\) только через \(y\). По правилу цепочки (chain rule) производная распадается на два множителя:

    \[ \pd{E}{a} = \pd{E}{y} \cdot \pd{y}{a} \]
  3. Первый множитель — производные двух логарифмов, приведённые к общему знаменателю:

    \[ \pd{E}{y} = -\frac{t}{y} + \frac{1 - t}{1 - y} = \frac{y - t}{y\,(1 - y)} \]

    В числителе \(-t(1 - y) + (1 - t)\,y = y - t\).

  4. Второй множитель — производная sigmoid из урока 10, выраженная через её собственный выход:

    \[ \pd{y}{a} = y\,(1 - y) \]
  5. Перемножим. Выражение \(y(1 - y)\) стоит в знаменателе первого множителя и в числителе второго — оно сокращается целиком:

    \[ \pd{E}{a} = y - t \]

    Это формула (22) конспекта: ответ минус цель.

На четырёх письмах Example 6 это даёт сигналы \(({-}0.1,\ {+}0.2,\ {-}0.6,\ {+}0.6)\). Знак говорит, куда двигать \(a\): минус — увеличивать, плюс — уменьшать. Два письма, на которых сеть ошиблась, тянут в 3–6 раз сильнее двух остальных.

В уроке 10 множитель \(y(1 - y)\) был причиной насыщения: у уверенного нейрона он почти ноль. Здесь он исчез. Теперь тот же расчёт для квадрата промаха \(E = (t - y)^2\). Первый множитель другой, \(2(y - t)\), второй тот же, и сократить его нечем:

\[ \pd{E}{a} = 2\,(y - t)\; y\,(1 - y) \]

Подставим письмо: \(a = -8\), значит \(y = \sigma(-8) \approx 0.0003\), а \(t = 1\).

Сигнал к исправлению для письма из начала урока.
Пара\(\partial E / \partial a\)Значение
sigmoid + cross-entropy\(y - t\)−0.9997
sigmoid + squared error\(2(y - t)\,y(1 - y)\)−0.0007

Отношение — около 1500: вот откуда число в начале урока. Множитель \(y(1 - y)\) почти равен нулю ровно там, где сеть уверена, и ему всё равно, права она или нет. С cross-entropy его нет: чем грубее промах, тем сильнее сигнал.

−8 0 8 a 1 |∂E/∂a| сеть неправа сеть права 0.0007 сигнала нет

До: sigmoid + squared error

−8 0 8 a 1 |∂E/∂a| сеть неправа сеть права 0.9997 сигнал есть

После: sigmoid + cross-entropy

Рис. 4. Сила сигнала \(\abs{\partial E / \partial a}\) при \(t = 1\) в зависимости от суммы \(a\). Точка — письмо из начала урока, \(a = -8\). Слева квадрат промаха молчит именно там, где сеть ошибается сильнее всего; справа сигнал тем больше, чем грубее промах.

Правильно подобранная пара «выход + функция ошибки» даёт на выходном нейроне сигнал \(y - t\): ответ минус цель.

Это верно для всех трёх панелей. У linear-выхода с квадратом промаха \(y = a\), поэтому \(\partial E / \partial a = 2(y - t)\) — тот же промах с постоянным множителем. У softmax с cross-entropy то же получается для каждого выходного нейрона.

  1. Один пример, \(K\) выходов. Ошибка и softmax, где \(S\) — сумма всех экспонент:

    \[ E = -\sum_{k} t_k \ln y_k, \qquad y_k = \frac{e^{a_k}}{S} \]
  2. Логарифм доли раскладывается: \(\ln y_k = a_k - \ln S\). Подставим и вспомним, что у вектора one-hot сумма \(t_k\) равна 1:

    \[ E = -\sum_{k} t_k\, a_k + \ln S \]
  3. Берём производную по одному logit \(a_i\). От первой суммы остаётся \(-t_i\). В \(S\) от \(a_i\) зависит одно слагаемое:

    \[ \pd{\ln S}{a_i} = \frac{e^{a_i}}{S} = y_i \]
  4. Складываем обе части — формула (26) конспекта:

    \[ \pd{E}{a_i} = y_i - t_i \]

В Example 7 с правильным вторым классом сигнал равен \((0.659,\ {-}0.758,\ 0.099)\). Сумма компонент — ноль: вероятность не создаётся и не исчезает, она перетекает к правильному классу. Те же три числа в виджете выше — длины стрелок под столбиками.

Вся приборная панель в одной таблице. Её стоит уметь написать по памяти.
ЗадачаВыходовАктивацияTargetError function\(\partial E / \partial a\)
regression1linear\(t \in \R\)Sum of Squared Errors\(2(y - t)\)
2 класса, 0 / 11sigmoid\(t \in \{0, 1\}\)binary cross-entropy\(y - t\)
2 класса, −1 / +11tanh\(t \in \{-1, +1\}\)на слайдах не названа—
\(K\) классов\(K\)softmaxone-hotcross-entropy\(y_k - t_k\)

Вопрос «какой выход и какая ошибка для этой задачи» на экзамене закрывается этой таблицей. Легче всего забыть третью строку: при кодировке −1 / +1 слайд 19 лекции 2 ставит на выход tanh, а не sigmoid. Какую error function к нему брать, слайды не говорят. Годится Sum of Squared Errors, но пара выйдет несогласованной: в сигнале \(2(y - t)(1 - y^2)\) останется производная tanh.

Откуда берутся сами пары? Не подбором. Каждая — ответ на один вопрос: какой случайной величиной мы считаем правильные ответы \(t_n\). Дальше работает один и тот же рецепт, maximum likelihood: выбрать веса, при которых наблюдённые ответы самые вероятные. Минус логарифм этой вероятности, из которого выброшено всё, что не зависит от весов, и есть error function.

Что предполагаем об ответах — такую ошибку и получаем (слайды 42–51 лекции 2; выводы в уроке 15).
Чем считаем ответ \(t_n\)Получается
ответ сети плюс гауссов шум:
\(t_n = g(x_n|\vb{w}) + \epsilon_n\),
\(\epsilon_n \sim N(0, \sigma^2)\)
Sum of Squared Errors
бросок монеты, орёл с вероятностью \(g\):
\(t_n \sim Be\bigl(g(x_n|\vb{w})\bigr)\)
binary cross-entropy
бросок кубика с \(K\) гранями
(на слайде 51 только результат)
cross-entropy

Урок 15 проходит этот рецепт шаг за шагом. Отсюда и совет на слайде 52 лекции 2: error function строят из того, что известно о данных, а не берут готовой.

В формате экзамена

A feed-forward neural network has to solve (a) a regression task, (b) a two-class classification task, (c) a classification task with \(K\) classes. For each case give the number of output neurons, the output activation function, the coding of the targets and the error function. Justify the choice of the output activation.

Show model answer

(a) Regression. One output neuron with a linear activation, \(g(a) = a\): the output has to span the whole real axis, so it must not be squashed. Targets \(t_n \in \R\). Error function: Sum of Squared Errors,

\[ E(\vb{w}) = \sum_{n=1}^{N} \bigl(t_n - g(x_n|\vb{w})\bigr)^2 . \]

(b) Two classes. One output neuron. If the classes are coded \(\{0, 1\}\), use a sigmoid: its output lies in \((0, 1)\) and can be interpreted as the class posterior probability \(p(t_n = 1 \mid x_n)\). The error function is the binary cross-entropy,

\[ \begin{aligned} & E(\vb{w}) = -\sum_{n=1}^{N} \bigl[\, t_n \log y_n \\ & \qquad {} + (1 - t_n) \log (1 - y_n) \,\bigr], \end{aligned} \]

with \(y_n = g(x_n|\vb{w})\). If the classes are coded \(\{-1, +1\}\), use a tanh output, whose range \((-1, 1)\) matches the coding.

(c) \(K\) classes. \(K\) output neurons, one per class, with a softmax unit \(y_k = \exp(z_k) / \sum_j \exp(z_j)\): the outputs are positive and sum to one. Targets are one-hot vectors. Error function: cross-entropy, \(E(\vb{w}) = -\sum_n \vb{t}_n\T \log g(x_n|\vb{w})\).

Полный ответ — четыре столбца таблицы и одно «почему» на строку. Две вещи легко упустить: случай −1 / +1 с tanh и объяснение, почему на выходе regression не может стоять sigmoid. Термины бери со слайдов: Sum of Squared Errors, class posterior probability, one-hot.

Four samples have targets \(t = (1,\ 0,\ 1,\ 0)\). A network with a sigmoid output returns \((0.9,\ 0.2,\ 0.4,\ 0.6)\). Compute the binary cross-entropy averaged over the four samples (natural logarithm, three decimals).

Show model answer

For each sample the error is minus the logarithm of the probability assigned to the true class:

\[ -\ln 0.9 = 0.105, \qquad -\ln 0.8 = 0.223 \] \[ -\ln 0.4 = 0.916, \qquad -\ln 0.4 = 0.916 \] \[ 0.105 + 0.223 + 0.916 + 0.916 = 2.161 \] \[ E = \frac{2.161}{4} = 0.540 \]

A constant predictor \(y = 0.5\) scores \(\ln 2 = 0.693\), so this model is only slightly better than chance.

Ловушка — второй и четвёртый примеры: при \(t = 0\) под логарифмом стоит \(1 - y\), а не \(y\). Если в условии не сказано «averaged», на слайдах ошибка — сумма: 2.161.

The three output neurons of a classifier receive the pre-activations \(z = (2.0,\ 1.0,\ 0.1)\) and use a softmax unit. The target is \(\vb{t} = (0,\ 1,\ 0)\). Compute the cross-entropy error for this sample.

Show model answer
\[ e^{2.0} = 7.389, \quad e^{1.0} = 2.718, \quad e^{0.1} = 1.105 \] \[ S = 7.389 + 2.718 + 1.105 = 11.212 \] \[ \vb{y} = (0.6590,\ 0.2424,\ 0.0986) \] \[ E = -\ln y_2 = -\ln 0.2424 = 1.417 \]

Check without rounding \(y_2\): \(E = \ln S - z_2 = 2.417 - 1.0\). The gradient with respect to the pre-activations is \(\vb{y} - \vb{t} = (0.659,\ {-}0.758,\ 0.099)\); its components sum to zero.

Экспоненты считаются на обычном калькуляторе. Ошибка зависит только от доли правильного класса, но чтобы её получить, нужна сумма всех трёх экспонент. С округлённым 0.242 выходит 1.419 — поле ответа примет и это, но надёжнее держать в промежуточных числах четыре знака.

A network for two-class classification has a sigmoid output \(y = \sigma(a)\) and targets \(t \in \{0, 1\}\). Derive \(\partial E / \partial a\) for the binary cross-entropy of one sample and explain why this error function is preferred to the squared error.

Show model answer

With \(E = -[\, t \ln y + (1 - t) \ln(1 - y) \,]\) the chain rule gives

\[ \pd{E}{y} = \frac{y - t}{y\,(1 - y)}, \qquad \pd{y}{a} = y\,(1 - y) \] \[ \pd{E}{a} = \pd{E}{y} \cdot \pd{y}{a} = y - t . \]

The derivative of the sigmoid cancels, so the gradient is proportional to the error even when the output is saturated: a confidently wrong output still receives a large correction. With the squared error \(E = (t - y)^2\) the gradient is \(2(y - t)\,y(1 - y)\); the factor \(y(1 - y)\) goes to zero when the output saturates, so a confidently wrong network learns very slowly. Moreover, the cross-entropy is the maximum-likelihood error function for Bernoulli-distributed targets, \(t_n \sim Be(g(x_n|\vb{w}))\).

Нужны три вещи: вывод в две строки, слово «cancels» про производную sigmoid и сравнение с квадратом промаха через множитель \(y(1 - y)\). Фраза про maximum likelihood — связка с уроком 15, она показывает, что пара выбрана не случайно.

Which of the following statements are correct? Select all that apply.

  • Adding the same constant to all the pre-activations of a softmax layer leaves its outputs unchanged. Множитель \(e^{c}\) появляется в числителе и в знаменателе и сокращается.
  • With two classes coded as −1 and +1, a tanh output unit is the appropriate choice. Так на слайде 19 лекции 2: диапазон \((-1, 1)\) совпадает с кодировкой.
  • A linear output neuron turns the whole network into a linear model. Скрытые слои остаются нелинейными; линейно только последнее преобразование.
  • For \(K = 2\) the softmax output equals a sigmoid of the difference of the two pre-activations. \(e^{a_1} / (e^{a_1} + e^{a_2}) = \sigma(a_1 - a_2)\).
  • With one-hot targets the cross-entropy does not depend on the pre-activations of the wrong classes. Зависит: они входят в знаменатель \(y_c\). Подними чужой logit — ошибка вырастет.
Show model answer

Correct: the first, the second and the fourth statement. The third is false because the hidden units are still non-linear. The fifth is false because every pre-activation enters the softmax denominator, so \(y_c\) and hence \(-\ln y_c\) depend on all of them.

В вопросах «select all» отмечай только то, что можешь обосновать. Здесь на каждое утверждение хватает одной строки: первое и четвёртое — алгебра softmax, второе — слайд 19 лекции 2, третье и пятое опровергаются одной фразой.

A regression network with a linear output returns \((3,\ 4,\ 8,\ 2)\) for four samples whose targets are \((2,\ 5,\ 6,\ 3)\). Compute the Sum of Squared Errors.

Show model answer
\[ \begin{aligned} E &= (2 - 3)^2 + (5 - 4)^2 \\ &\quad + (6 - 8)^2 + (3 - 2)^2 \\ &= 1 + 1 + 4 + 1 = 7 \end{aligned} \]

Dividing by \(N = 4\) gives the Mean Squared Error, 1.75; the Mean Absolute Error is \((1 + 1 + 2 + 1)/4 = 1.25\).

Проверяют, читаешь ли ты название: Sum — это 7, Mean — 1.75. Третий пример даёт больше половины суммы: большие промахи квадрат наказывает сильнее.

Проверь себя

Сеть должна предсказывать температуру воздуха в градусах Цельсия. Что поставить на выход?

  • Один нейрон с linear activation Ответ может быть любым числом, в том числе −10. Линейный выход ничего не обрезает.
  • Один нейрон с sigmoid Его выход заперт в \((0, 1)\): ни −10, ни 25 он не выдаст.
  • Один нейрон с tanh Диапазон \((-1, 1)\) шире, чем у sigmoid, но для градусов всё равно мал.
  • Softmax по всем возможным значениям температуры Так regression превратится в classification, где 20° и 21° — просто два разных класса, не ближе друг к другу, чем 20° и −5°.

В обучающих данных два класса записаны как −1 и +1. Какой выход ставит для этого случая слайд 19 лекции 2?

  • sigmoid Его выход лежит в \((0, 1)\) и до −1 не дотянется. Sigmoid — для кодировки 0 / 1.
  • tanh Диапазон \((-1, 1)\) совпадает с кодировкой: знак ответа — класс.
  • softmax с двумя нейронами Softmax выдаёт доли от 0 до 1 и ждёт ответы one-hot, а не −1 / +1.
  • linear Линейный выход ничем не ограничен, а ответы должны оставаться между −1 и +1.

Две сети выдали logits для трёх классов: первая \((5,\ 3,\ 3)\), вторая \((2,\ 0,\ 0)\). У какой после softmax вероятность первого класса больше?

  • У первой: её числа больше Сами числа ничего не значат. Проверь в микшере ползунком \(c\).
  • У второй: у неё соперники на нуле Ноль — не «нет шансов»: \(e^{0} = 1\). Важно, насколько соперники отстают, а отстают они одинаково.
  • Одинаковая Второй набор — это первый минус 3, а softmax видит только разности. В обоих случаях \(y_1 = e^{2} / (e^{2} + 2) = 0.787\).

Выход softmax, ошибка cross-entropy, правильный класс \(c\). Что верно?

  • Величину ошибки на примере задаёт одно число — \(y_c\) \(E = -\ln y_c\): остальные слагаемые умножены на нули вектора one-hot.
  • Если поднять logit чужого класса, ошибка вырастет Знаменатель у \(y_c\) общий: чужая экспонента растёт, доля правильного класса падает.
  • Компоненты градиента \(y_k - t_k\) в сумме дают ноль И \(y_k\), и \(t_k\) в сумме дают 1. Вероятность перетекает между классами, а не создаётся.
  • Чтобы ошибка была маленькой, logit правильного класса должен быть положительным Важны разности. Logits \(({-}3,\ {-}9,\ {-}9)\) дают \(y_1 = 0.995\).
  • Каждый выход можно менять, не затрагивая остальные Выходы связаны условием «в сумме 1»: изменился один — изменились все.

Картинка для памяти: полоса длиной 1, разрезанная на \(K\) кусков. Нельзя удлинить один кусок, не укоротив другие.

На четырёх письмах средняя binary cross-entropy равна 0.54. Как это понимать?

  • Сеть ошибается в 54 % случаев Это средний штраф, а не доля ошибок. Он может быть и больше 1.
  • Сеть немного лучше модели, которая всегда отвечает 0.5 У модели «всегда 0.5» штраф \(\ln 2 = 0.693\) на каждом примере. 0.54 — чуть меньше.
  • Сеть почти идеальна: ошибка меньше 1 Идеал — 0. Единица здесь ничего не значит: это не потолок.

Выход sigmoid, правильный ответ \(t = 1\), сеть выдала \(y = 0.0003\). Какая функция ошибки даст больший по модулю сигнал \(\partial E / \partial a\)?

  • Cross-entropy Её сигнал равен \(y - t \approx -1\): производная sigmoid сократилась.
  • Squared error Её сигнал \(2(y - t)\,y(1 - y) \approx -0.0007\): множитель \(y(1 - y)\) почти обнулил его.
  • Сигналы одинаковые Их отношение равно \(1 / (2y(1 - y))\) и никогда не меньше 2, а здесь оно около 1500.

В данных о ценах квартир одна запись с опечаткой — лишний ноль в цене. Одну и ту же сеть учат дважды: с squared error и с absolute error. Чем будут отличаться результаты?

  • С squared error ответы сильнее сместятся к выбросу Тяга примера пропорциональна его промаху, и далёкая точка перетягивает остальные — как среднее в первом виджете.
  • С absolute error ответы сильнее сместятся к выбросу У модуля тяга каждого примера одна и та же, \(\pm 1/N\), как бы далеко он ни был.
  • Ничем: обе функции меряют промах Минимумы у них разные: среднее и медиана. На данных без выбросов они близки, с выбросом расходятся.

Унести с собой

Что посмотреть и почитать