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

Слева — пороговая ступенька: нелинейна, но её наклон нулевой по бокам и не определён в скачке, спуску не за что зацепиться. Справа — сигмоида, плавная S-образная наследница ступеньки: та же форма «переключателя», но всюду с ненулевым наклоном. Сглаживание превращает негладкий переключатель в обучаемую функцию.
Сигмоида: гладкий переключатель и вероятность
Самая известная гладкая замена ступеньки — сигмоида, или логистическая функция:
Она плавно поднимается от (при больших отрицательных ) к (при больших положительных), проходя через в нуле, — та же S-форма переключателя, но без разрыва. Два её свойства драгоценны. Во-первых, выход лежит строго между и , и его можно читать как вероятность: сигмоида превращает произвольный «счёт уверенности» в число «насколько модель уверена, что это класс ». Ровно так работал логистический классификатор спама из урока о классификации: его сырые счёта проходили через сигмоиду и становились вероятностями «это спам».
Во-вторых, у сигмоиды на редкость удобная производная:
Наклон выражается через саму функцию — не надо ничего пересчитывать. В нуле, где сигмоида круче всего, наклон равен . Это её максимальный наклон, и вот это число ещё выйдет нам боком.

Сигмоида отображает счёт (сколь уверенно сработали признаки) в вероятность от до . Точки внизу — реальные счёта спам-классификатора из урока 07: отрицательные счёта сигмоида уводит к «не спам», положительные — к «спам», а околонулевые попадают в зону сомнения вокруг . Одна кривая связывает линейный счёт и вероятностный ответ.
tanh: та же кривая, но по центру
У сигмоиды есть неудобство: её выход всегда положителен, среднее не в нуле, и это чуть замедляет обучение следующего слоя. Лечит это близкая родственница — гиперболический тангенс:
Это та же S-кривая, растянутая на диапазон от до и симметричная относительно нуля. Её наклон в нуле равен — вчетверо круче сигмоиды, и градиент сквозь неё проходит легче. Долгое время был активацией по умолчанию в скрытых слоях, а сигмоиду оставляли для выхода, где нужна именно вероятность. Но у обеих S-кривых остаётся общая болезнь, и ради неё стоит присмотреться к наклонам внимательнее.
Затухающий градиент: почему глубокие сигмоиды не учились
Вот главный сюжет урока. Обучая многослойную сеть, ошибку проводят с выхода назад к ранним слоям, перемножая по дороге наклоны активаций — подробно этот механизм разберёт урок о backprop. Пока достаточно знать: чтобы поправить вес в слое, отстоящем от выхода на активаций, ошибку домножают на произведение их наклонов.
У сигмоиды наклон нигде не превышает . Значит, проходя через сигмоидных слоёв, сигнал ошибки умножается на число не большее
Через десяток слоёв поправка сжимается в миллион раз: ранние слои глубокой сигмоидной сети получают исчезающе слабый сигнал и почти не учатся. Это и есть проблема затухающего градиента — она годами держала нейросети мелкими. Чем глубже сеть, тем сильнее душит её собственная активация; сигмоида, спасшая нас от негладкой ступеньки, сама оказалась удавкой для глубины.

Во сколько раз усыхает сигнал ошибки, пройдя слоёв. У сигмоиды множитель падает как — к десятому слою около миллионной доли, ранние слои не учатся. У ReLU наклон на активной стороне равен , произведение остаётся порядка единицы, и градиент доходит до первых слоёв живым. Один график объясняет, почему глубокое обучение взлетело только со сменой активации.
:::
ReLU: почти линейная, но всё меняет
Спасение оказалось обезоруживающе простым. Взять функцию
отрицательные значения обнулить, положительные пропустить как есть. Никакой экспоненты, никакой S-кривой — просто сломанная в нуле прямая. Её наклон тоже элементарен: для отрицательных и ровно для положительных. И именно эта единица всё решает: проходя через слой активных () ReLU-нейронов, градиент домножается на — не гаснет. Стек ReLU-слоёв проводит сигнал ошибки к первым слоям без затухания, и глубокие сети наконец стали обучаемыми.
ReLU нелинейна (излом в нуле не даёт слоям схлопнуться), почти гладка (наклон постоянен на каждой половине), считается за одно сравнение и не душит градиент. Когда в 2012 году глубокая сеть с ReLU выиграла соревнование по распознаванию изображений с большим отрывом, активация по умолчанию сменилась почти повсеместно: сигмоиду и оставили там, где нужен именно их диапазон, а скрытые слои перешли на ReLU.
Глубокие свёрточные сети с нейронами ReLU обучаются в несколько раз быстрее, чем их аналоги с насыщающимися нейронами .

Четыре активации (верхний ряд) и их наклоны (нижний). Ступенька: наклон всюду ноль — необучаема. Сигмоида и : наклон-колокол, максимум и , по краям гаснет — насыщение и затухание. ReLU: наклон или , на активной стороне градиент проходит без потерь. Эволюция активаций — это история борьбы за то, чтобы наклон не обнулялся.
Сравните, во сколько раз усохнет градиент, пройдя слоёв, для сигмоиды (наклон ) и для ReLU (наклон на активной стороне). Если у ReLU в каждом слое активна лишь половина нейронов, как это скажется на сигнале?
Сверить оценку
Сигмоида: не больше — сигнал уничтожен полностью. ReLU при всех активных: , градиент доходит невредимым. Если активна половина — половина путей обнулится, но по выжившим путям множитель по-прежнему : сигнал слабеет линейно от доли активных, а не экспоненциально от глубины. Разница между «в раз» и «вдвое» и есть причина, по которой глубина стала работать.
Тень ReLU: мёртвые нейроны
Совершенных активаций не бывает, и у ReLU своя болезнь. Если веса нейрона сложились так, что на всех примерах его вход отрицателен, то выход всегда , а наклон всегда — градиент до него не доходит никогда, и вес больше не меняется. Нейрон «умер»: он навсегда выключен и не участвует в обучении. При неудачной инициализации или слишком большом шаге так может отмереть заметная доля сети.
Лечат это лёгким наклоном на отрицательной стороне — «дырявой» ReLU:
у которой наклон слева не ноль, а маленькая положительная величина. Тогда даже «отрицательный» нейрон получает тонкий ручеёк градиента и может ожить. Мёртвые ReLU и дырявые заплатки — типичная для инженерии история: простое решение работает почти всегда, а на оставшиеся редкие случаи ставят маленькую починку.

После ReLU придумали десятки её вариантов — leaky, параметрическую, ELU, GELU, Swish, — каждая чуть глаже или чуть удачнее ведёт себя на отрицательной стороне. В современных больших моделях чаще всего стоит GELU — гладкая родня ReLU. Но идея у всех одна: не дать наклону обнулиться там, где он нужен для обучения. Выбор активации почти всегда сводится к этому единственному требованию.
Лаборатория: активация и её наклон
Порядок опытов. Переключайте активацию — ступенька, сигмоида, tanh, ReLU, дырявая ReLU — и смотрите на пару графиков: саму функцию и её наклон. У ступеньки наклон всюду ноль; у сигмоиды колокол с вершиной ; у ReLU наклон-ступенька из и . Затем крутите число слоёв и следите за табло множителя градиента: сигмоида уводит его к исчезающим долям за десяток слоёв, ReLU держит на месте. Вы своими глазами увидите, почему смена активации открыла эпоху глубоких сетей.
Сборка: одна кривая решает судьбу глубины
Активация — крошечная деталь нейрона, от которой зависит всё. Без нелинейности глубина схлопывается в один линейный слой, поэтому гнуть прямую обязательно. Но негладкая ступенька, идеальная как переключатель, не даёт обучать сеть градиентом, потому что её наклон всюду ноль. Гладкая сигмоида чинит это и вдобавок читается как вероятность, но её наклон не больше , и через десяток слоёв градиент гаснет в миллион раз — глубокие сигмоидные сети не учились. ReLU, почти линейная и оттого дешёвая, держит наклон на активной стороне, проводит градиент сквозь глубину без потерь и ценой мелкой болезни мёртвых нейронов открыла эпоху по-настоящему глубоких сетей. Теперь у нас есть всё для обучения: многослойная сеть, гнущая пространство, и гладкая активация, сквозь которую пройдёт градиент. Осталось понять, что именно этот градиент уменьшает, — то есть как измерить ошибку сети одним числом. С этой функции потерь начинается разговор об оптимизации.
Задачи
Покажите, что три линейных слоя без активаций эквивалентны одному линейному слою, и выпишите его матрицу. Затем добавьте между слоями ReLU и объясните одним предложением, почему теперь схлопывания не происходит.
Постройте сигмоиду по точкам и её производную в тех же точках. Проверьте, что производная максимальна в нуле и симметрична, и объясните, что физически значит малый наклон на краях.
Затухание руками: для сети из сигмоидных слоёв оцените верхнюю границу множителя градиента для и постройте её в логарифмических осях. На каком числе слоёв множитель падает ниже ? Сравните с ReLU (множитель ) и сформулируйте вывод. Рубрика: 2 балла за график, 1 за порог , 1 за вывод.
Сигмоида как вероятность: возьмите линейный счёт спам- классификатора (можно из урока 07) и постройте, как сигмоида отображает счёта в вероятности. Выберите порог вероятности и покажите, что он соответствует порогу счёта . Что изменится в разметке, если сдвинуть порог вероятности на ? Рубрика: 2 балла за отображение, 2 за анализ сдвига порога.
Мёртвый ReLU численно: смоделируйте один ReLU-нейрон с входами из нормального распределения и подберите смещение так, чтобы на всех примерах вход был отрицателен. Покажите, что градиент по его весам равен нулю на всех примерах, то есть нейрон не обучается. Затем замените ReLU на leaky (наклон ) и покажите, что градиент стал ненулевым. Рубрика: 2 балла за мёртвый нейрон, 2 за оживление leaky, 1 за объяснение механизма.
Приближение ступеньки: покажите, что при стремится к пороговой ступеньке, и постройте семейство кривых для . Как ведёт себя максимальный наклон с ростом и почему это ставит обучение перед выбором «гладко, но вяло» против «резко, но негладко»? Свяжите с ролью температуры в softmax, которую встретите позже. Рубрика: 3 балла за семейство и предел, 2 за анализ наклона и связь.
Активации и глубина эксперимент: обучите (любым доступным способом или готовой библиотекой) две сети одинаковой глубины слоёв — одну с сигмоидами, другую с ReLU — на «двух лунах» из урока 16 и сравните, как быстро падает ошибка. Извлеките и постройте среднюю величину градиента в первом и последнем слоях по ходу обучения. Покажите, что у сигмоидной сети градиент первого слоя на порядки меньше, и свяжите это с . Рубрика: 3 балла за обе сети и кривые ошибки, 3 за сравнение градиентов по слоям.
Своя активация: придумайте функцию активации, нелинейную и гладкую, с наклоном, не гаснущим ни на одной из сторон (например, , известную как Swish). Посчитайте её производную, постройте функцию и наклон, найдите, где наклон максимален, и обсудите, есть ли у неё мёртвые зоны, как у ReLU. Сравните с ReLU по трём свойствам: нелинейность, гладкость, поведение градиента вдали от нуля. Рубрика: 3 балла за производную и графики, 3 за содержательное сравнение с ReLU.