tgoop.com/toshoseti/596
Last Update:
Итак, про LNN, часть первая. Будет много букв и немножко матана.
Существует несколько разновидностей LNN, в частности: Liquid Time Constant Network (LTC), Closed form Continuous-Time Liquid Network (CfCT).
В этой части про LTC. Статья.
Все LNN по сути рекуррентные сети, но с отличиями. В частности, вместо традиционных GRU/LSTM элементов, наша сеть состоит из набора ODE (Ordinary Differential Equations) первого порядка, к выходам которых так же применяются функции активации. Идея не новая, до этого были Neural ODE, CT-RNN (Continuous Time RNN) и прочие. Так вот, считаются элементы с помощью ODE Solverов. Можно взять метод Эйлера, можно Рунге Кутты, но авторы не зассав запилили свой fused solver (Euler implicit + Euler explicit). На нем останавливаться не буду, так как подойдет любой словер, да и не понял я пока нихера как они к нему пришли (в статье, как обычно, "несложно увидеть"). Решаем мы ODE для получения следующего значения hidden state на каждом шагу. В ванильном Neural ODE мы считаем
(1) dx\dt = f(x(t), I(t), t, theta) ,
где f(.) - нейросеть, x(t) - hidden state, I(t) - входные данные, t - время, theta - параметры сети.
В Continuous time вариациях выглядит так:
(2) dx\dt = (-1/tau)*x(t) + f(x(t), I(t), t, theta),
т.е. добавляется член -x(t)/tau чтобы помочь системе прийти в равновесие при помощи константы времени tau.
Авторы LTC предлагают альтернативную формулировку:
Пусть у нас переходные процессы hidden state в сети определены как
(3) dx/dt = (-1/tau)*x(t) + S(t),
(4) S(t) = f(x(t), I(t), t, theta) * (A-x(t)), где все обозначения как прежде плюс некоторый параметр A.
Тогда подставляя уравнение 3 в 2 получаем:
(5) dx/dt = -(1/tau + f(x(t), I(t), t, theta) * x(t) + f(x(t), I(t), t, theta) * A
Теперь ВНИМАТЕЛЬНО:
Если рассмотреть уравнение 4 и сравнить с 2, то получается что жирным выделенная часть - это как коэфициент -(1/tau) в уравнении 2, а то что я подчеркнул - это по сути правая часть уравнения 2.
Таким образом, это все еще CT-RNN, но с наворотами. Авторы вводят понятие Liquid time-constant коэфициента, выделенного жирным (внимание, переворачиваем дробь, т.к. 1/tau):
tau_sys = tau / (1 + tau * f(x(t), I(t), t, theta))
То есть у нас выходит, что сама сеть, зависящая от входных данных и hidden state, меняет так же tau с течением времени, в отличии от CT-RNN, где tau - const. В этом самая мякотка и нововведение этой работы, поэтому они и обозвали Liquid time-constant.
Возникает закономерный вопрос, а как пришли к такой формулировке?
Потому что пацаны вдохновлялись нейродинамикой неспайковых нейронов (как у C. Elegans червя, как я понял). Подробнее они описывают это сравнение в предыдущей своей работе
Ну окей, сформулировали LTC Cell.
Помимо прочего, у нас есть еще три матрицы: проектор входов в hidden state, линейный слой для маски при переходе от одной LTC Cell к другой, проектор hidden state -> outputs.
Дальше мы на каждом шаге обработке последовательности интегрируем с помощью ODE Solver'a и делаем backprop. Это в наивной имплементации. В авторской - мы используем именно модель нейронов как описано тут.
Сразу вылазят традиционные недостатки:
1) Vanishing\exploding gradients
2) ODE Solver считать дорого
3) Количество шагов солвера и tau - еще одна боль в жопе гиперпараметры, которые придется подбирать.
4) Сам алгоритм солвера - тоже гиперпараметр.
FAQ:
Зачем это все?
1. Авторы утверждают, что LTC обладает большей выразительностью и компактностью. По моим экспериментам это действительно так, но из за этого страдает время вычисления и время сходимости.
2. Такие сети, в отличии от остальных аналогов, способны адаптироваться к шумному сигналу, domain shift, итп. А так же они лучше приспособлены к active learning.
А зачем ты это рассказываешь?
Потому что информации по этим сетям, как и годных имплементаций, почти нет. Любознательным надо быть, и вообще у меня саббатикал.
А референсная имплементация где?
Тут
И тут
А тетрадка где?
Скоро будет, почти доделал.
BY То шо нейросети
Share with your friend now:
tgoop.com/toshoseti/596