Дифференциальное и матричное исчисление

Производные функций активации

exp, log, sigmoid, tanh, ReLU — и почему у ReLU в нуле производной нет

Шаг 24 из 117 · ~26 мин

Экспонента и логарифм

ddxex=ex,ddxlnx=1x\frac{d}{dx}e^x = e^x, \qquad \frac{d}{dx}\ln x = \frac{1}{x}

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

Для машинного обучения важнее производная логарифма, потому что в лоссах почти всегда стоит log\log. Обратите внимание на 1/x1/x: при малом xx производная огромна. Именно поэтому logp\log p при p0p \to 0 ведёт себя численно плохо, и существует log_softmax вместо log(softmax(x)).

Сигмоида

σ(x)=11+ex,σ(x)=σ(x)(1σ(x))\htmlData{k=s}{\sigma(x) = \frac{1}{1 + e^{-x}}}, \qquad \htmlData{k=d}{\sigma'(x) = \sigma(x)\bigl(1 - \sigma(x)\bigr)}

Формула производной через саму функцию — не красивое совпадение, а причина, по которой сигмоида пережила десятилетия: при обратном проходе значение σ(x)\sigma(x) уже посчитано на прямом, и производная берётся бесплатно.

Вывести стоит один раз самому: σ=(1+ex)1\sigma = (1 + e^{-x})^{-1}, по правилу цепочки σ=(1+ex)2(ex)=ex(1+ex)2\sigma' = -(1+e^{-x})^{-2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1+e^{-x})^2}, а дальше заметить, что это и есть σ(1σ)\sigma(1-\sigma).

Максимум производной — в нуле, и он равен 1/41/4. Это уже сигнал проблемы: множитель 0.25\le 0.25 на каждом слое означает, что через десять слоёв градиент ослабнет как минимум в 4101064^{10} \approx 10^6 раз. Так выглядит затухание градиента, и это арифметика, а не мистика.

Гиперболический тангенс

tanh(x)=exexex+ex,tanh(x)=1tanh2(x)\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}, \qquad \tanh'(x) = 1 - \tanh^2(x)

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

Сравните графики и их производные — переключатель графика производной для этого и нужен:

x
0.6
f(x)
0.65
f'(x)
0.23
Производная нигде не превышает 0.25, а на краях практически ноль. Насыщение — это и есть плоские хвосты: градиент через них не проходит.

ReLU и её точка излома

ReLU(x)=max(0,x)\mathrm{ReLU}(x) = \max(0, x)

Производная равна 00 при x<0x < 0 и 11 при x>0x > 0. В нуле производной не существует — ровно как у x|x| из прошлого урока: слева наклон 00, справа 11.

Что делают библиотеки: возвращают 00. Это соглашение, а не вычисление, и знать об этом стоит по двум причинам.

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

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

Таблица, которую стоит держать в голове

ffff'что помнить
exe^xexe^xравна своей производной
lnx\ln x1/x1/xвзрывается при x0x \to 0
xnx^nnxn1nx^{n-1}степень падает на единицу
σ(x)\sigma(x)σ(1σ)\sigma(1-\sigma)максимум 1/41/4
tanhx\tanh x1tanh21 - \tanh^2максимум 11
ReLU\mathrm{ReLU}00 или 11в нуле не определена

Через все производные активаций проходит одна мысль: множитель, который слой вносит в градиент, определяет, выживет ли сигнал после десятка слоёв. Здесь мы смотрим на неё одномерно; в блоке 6 то же самое станет разговором про инициализацию и остаточные связи.

Источники

Проверки

0 из 2
  1. Максимум производной сигмоиды

    Чему равно максимальное значение σ(x)\sigma'(x)?

    Подсказка: σ=σ(1σ)\sigma' = \sigma(1-\sigma), а σ\sigma пробегает интервал (0,1)(0, 1). Значит нужно найти максимум t(1t)t(1-t) по t(0,1)t \in (0,1).

    Ответ — десятичная дробь.

  2. Активации и их производные

    Реализуйте activation(name, x) — верните список [f(x), f'(x)] для указанной активации.

    Поддержать нужно четыре имени:

    • "sigmoid"σ(x)=1/(1+ex)\sigma(x) = 1/(1+e^{-x}), производная σ(1σ)\sigma(1-\sigma);
    • "tanh" — производная 1tanh2x1 - \tanh^2 x;
    • "relu"max(0,x)\max(0, x), производная 00 при x<0x < 0 и 11 при x>0x > 0; в нуле возвращайте 00, как это делают библиотеки;
    • "exp" — производная равна самой функции.

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

    Для незнакомого имени верните null (в Python None).

    функция activation

    Загрузка редактора…

    Ctrl/⌘ + Enter