Всем привет! Меня зовут Радмир, я — начинающий исследователь в области NLP. В этой статье я расскажу о своей идее — LTanh: функция активации, стабилизирующая градиент Tanh.
Итак, наш план:
-
Разберем основную идею LTanh.
-
Разберем производную Tanh.
-
Разберем производную LTanh.
-
Посмотрим на отличия LTanh от Tanh.
-
Сравним лоб в лоб две производные.
Что ж, приступим.
Идея LTanh — зачем он нужен
Недавно я разбирал производные функций, в том числе и функции Tanh. Я заметил, что производная Tanh падает довольно быстро — уже примерно в точке x = ±2 градиент Tanh довольно мелкий, а точка x = ±2 является частой в нейросетях. И тогда я задумался — как же можно исправить это, повысив градиент, при этом сильно не увеличивая диапазон выходов функции?
Сначала мне в голову пришла формула:
Но, взяв производную по ней, я увидел, что она неопределенна в нуле. Тогда я решил добавить Sigmoid в формулу. Теперь формула стала такая:
Теперь производная определена в нуле и равна 0,25. Но теперь функция сильно отличается от обычного Tanh. Для исправления я добавил умножение на Tanh(x), и формула стала такая:
Теперь функция ещё больше похожа на Tanh — на графике S‑образная (видно на фото выше). Но у нас немного несимметрично на графике: при больших положительных значениях x функция насыщается и выдаёт число, близкое к 2, а при больших отрицательных — близкое к -1. Так как производная по константе равна 0 и не помешает градиенту — мы добавим вычитание из результата функции 0,5 и получим симметричный интервал выходов — (−1,5; 1,5). Итак, формула:
Функция стала больше похожа на Tanh: S‑образна, интервал выходных значений LTanh не сильно отличается от Tanh — разница всего в (−0,5; 0,5).
Формула готова. Давайте теперь пойдём далее — сравним её производную с производной Tanh. Для этого разберём две производные двух функций: Tanh и LTanh.
Производная Tanh
Давайте вспомним формулу производной Tanh:
Будем находить производную по этой формуле. Сначала вычислим производную в точках 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:
Будем находить производную по этой формуле. Сначала вычислим производную в точках 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. Это связано с тем, что в производной есть множитель, который вносит стабильность градиенту:
Как итог
Сегодня мы разобрали функцию LTanh и посмотрели на её производные. Сразу видно, что для глубоких сетей LTanh подходит больше, чем Tanh, за счёт стабильности градиентов и меньшего затухания.
Также я построил для вас график производных для наглядности — тут. Примечание:
|
Буква |
Цвет |
Функция |
|
T |
Красный |
Tanh(x)’ |
|
L |
Синий |
LTanh(x)’ |
|
S |
Зеленый |
Softsign(x)’ |
|
D |
Черный |
Sigmoid(x)’ |
ссылка на оригинал статьи https://habr.com/ru/articles/1085894/