Long Tanh: гибридная функция активации для глубоких сетей

в 18:49, , рубрики: DL, ml, Математка

Всем привет! Меня зовут Радмир, я — начинающий исследователь в области NLP. В этой статье я расскажу о своей идее — LTanh: функция активации, стабилизирующая градиент Tanh.

Итак, наш план:

  • Разберем основную идею LTanh.

  • Разберем производную Tanh.

  • Разберем производную LTanh.

  • Посмотрим на отличия LTanh от Tanh.

  • Сравним лоб в лоб две производные.

Что ж, приступим.

Идея LTanh — зачем он нужен

Недавно я разбирал производные функций, в том числе и функции Tanh. Я заметил, что производная Tanh падает довольно быстро — уже примерно в точке x = ±2 градиент Tanh довольно мелкий, а точка x = ±2 является частой в нейросетях. И тогда я задумался — как же можно исправить это, повысив градиент, при этом сильно не увеличивая диапазон выходов функции?

Сначала мне в голову пришла формула:

LTanh(x)=frac{left|xright|+1}{left|xright|+2}

График формулы выше.

График формулы выше.

Но, взяв производную по ней, я увидел, что она неопределенна в нуле. Тогда я решил добавить Sigmoid в формулу. Теперь формула стала такая:

LTanh(x)=frac{left|xright|+1}{left|xright|+2}+left(frac{1}{1+e^{-x}}right)

График формулы выше.
График формулы выше.

Теперь производная определена в нуле и равна 0,25. Но теперь функция сильно отличается от обычного Tanh. Для исправления я добавил умножение на Tanh(x), и формула стала такая:

LTanh(x)=left(frac{left|xright|+1}{left|xright|+2}right)cdottanhleft(xright)+left(frac{1}{1+e^{-x}}right)

График формулы выше.

График формулы выше.

Теперь функция ещё больше похожа на Tanh — на графике S‑образная (видно на фото выше). Но у нас немного несимметрично на графике: при больших положительных значениях x функция насыщается и выдаёт число, близкое к 2, а при больших отрицательных — близкое к -1. Так как производная по константе равна 0 и не помешает градиенту — мы добавим вычитание из результата функции 0,5 и получим симметричный интервал выходов — (−1,5; 1,5). Итак, формула:

LTanh(x)=left(left(frac{left|xright|+1}{left|xright|+2}right)cdottanhleft(xright)+left(frac{1}{1+e^{-x}}right)right)-frac{1}{2}

График формулы выше.

График формулы выше.

Функция стала больше похожа на Tanh: S‑образна, интервал выходных значений LTanh не сильно отличается от Tanh — разница всего в (−0,5; 0,5).

Формула готова. Давайте теперь пойдём далее — сравним её производную с производной Tanh. Для этого разберём две производные двух функций: Tanh и LTanh.

Производная Tanh

Давайте вспомним формулу производной Tanh:

1-tanhleft(xright)^{2}

Будем находить производную по этой формуле. Сначала вычислим производную в точках 0, 1, 2, 3, 4, 5, а потом посмотрим на поведение производной. Давайте начнём:

x

formula

tanh(x)'

0

1-0²

1

1

1–0,761²

0,42

2

1–0,9640²

0,07

3

1–0,995²

0,0099

4

1–0,9993²

0,0013

5

1–0,9999²

0,00019

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

Производная LTanh

Давайте выведем формулу производной LTanh:

left(frac{operatorname{sgn}left(xright)}{left(left|xright|+2right)^{2}}right)cdottanhleft(xright)+left(frac{left(left|xright|+1right)}{left(left|xright|+2right)}right)cdotleft(1-left(tanhleft(xright)^{2}right)right)+left(frac{e^{-x}}{left(1+e^{-x}right)^{2}}right)

Будем находить производную по этой формуле. Сначала вычислим производную в точках 0, 1, 2, 3, 4, 5, а потом посмотрим на поведение производной. Давайте начнём:

x

formula

LTanh(x)'

0

0+0,5+0,25

0,75

1

0,0846+0,279+0,196

0,5596

2

0,0603+0,0530+0,1050

0,2182

3

0,0398+0,0079+0,0452

0,0929

4

0,0278+0,0011+0,0177

0,0466

5

0,0204+0,0002+0,0066

0,0272

Можно сразу заметить, что производная LTanh ползёт вниз не так быстро, как у Tanh. Чем больше |x|, тем градиент становится всё больше и больше по сравнению с Tanh. Можно сказать, что производная более плавная.

Отличия LTanh от Tanh

На самом деле отличий мало. Первое и самое главное — градиенты. Градиенты у LTanh затухают медленнее, чем у Tanh. Это даёт хороший буст в глубоких сетях. Также выходные значения функции находятся в интервале (−1,5; 1,5), в отличие от Tanh (−1; 1).

Сравнение производных

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

left(frac{operatorname{sgn}left(xright)}{left(left|xright|+2right)^{2}}right)cdottanhleft(xright)

Как итог

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

Также я построил для вас график производных для наглядности — тут. Примечание:

Буква

Цвет

Функция

T

Красный

Tanh(x)'

L

Синий

LTanh(x)'

S

Зеленый

Softsign(x)'

D

Черный

Sigmoid(x)'

Автор: radmirryan

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js