В машинном обучении есть негласный договор. Если хочешь чтобы сеть работала - обучи все веса. Итеративно, через обратное распространение ошибки, тысячи шагов градиентного спуска. А вот к резервуарным вычислениям этот договор применяется с обратной логикой. Подавляющее большинство весов генерируются случайно и никогда не меняются. Обучается только один выходной слой.
И это, как ни странно, работает.
Начнем, впрочем, говорить про проблему - иначе непонятно, зачем вообще идти на такой компромисс.
Рекуррентные нейросети придуманы для последовательных данных - временных рядов, речи, текста. В отличие от обычных сетей, у них есть интересное состояние. Выход на шаге t зависит не только от входа на шаге t, но и от всего что было до. Это делает их мощными - и одновременно очень неудобными в обучении.
Обучают РНС через BPTT - метод обратного распространения ошибки по времени. Собственно, алгоритм раскрывает сеть во времени. Берет все T шагов, строит граф вычислений и считает градиент через него. На каждом шаге градиент проходит через матрицу весов W. Если W перемножать саму на себя T раз подряд - при собственных значениях меньше 1 произведение стремится к нулю экспоненциально. При больше 1 - к бесконечности.
Первое называется затуханием градиента, второе - взрывом градиента. И это, кстати, нюанс.
RNN плохо запоминает то, что было давно. Градиент от событий на шаге t=1 до шага t=100 затухает настолько, что сеть его просто не видит. LSTM частично решает это через систему гейтов, которые контролируют поток информации. Но LSTM тяжелее, медленнее, и проблему не убирает - немного смягчает.
И вот резервуарные вычисления обходят ее радикально. Если градиент не пропускать через рекуррентные веса - затухать ему просто негде. Вот так вот просто.
Архитектура и математика
Тут у нас условные три части.
Входной слой - матрица W_in, случайная, фиксированная. Принимает входной сигнал u(t) и подает его в резервуар.
Резервуар - большая разреженная рекуррентная сеть с N нейронами и матрицей весов W. Тоже случайная. Тоже фиксированная. Не обучается никогда.
Считывающий слой - единственная обучаемая часть. Линейный слой с весами W_out.
Состояние резервуара обновляется на каждом шаге:
x(t) = tanh(W · x(t-1) + W_in · u(t))
Выход:
y(t) = W_out · x(t)
Обучение - нахождение W_out через гребневую регрессию:
W_out = Y · X^T · (X · X^T + λI)^-1
И никакого обратного распространения ошибки. Как собрали состояния резервуара за все шаги в матрицу X, как взяли целевые значения Y и, собственно, решили одно уравнение. Все. Там где LSTM требует сотен итераций обучения, ESN (сеть эхо-состояний - одна из реализаций резервуарных вычислений) обучается решением одного уравнения - получается, на порядки быстрее.
Тут, кстати, и скрыт главный смысл. Именно в том, что обучать их вообще не нужно.
Свойство эхо-состояния и спектральный радиус
Чтобы резервуар работал корректно, нужно одно условие - свойство эхо-состояния (ESP). Суть в следующем. Состояние резервуара в момент t должно однозначно определяться историей входного сигнала, а не начальными условиями сети. Любое, скажем так, эхо прошлого должно постепенно гаснуть.
И это обеспечивается через спектральный радиус матрицы W - максимальное собственное значение ρ(W). Если ρ(W) < 1 - собственные векторы W при итеративном применении стягиваются к нулю, начальные условия забываются, свойство эхо-состояния выполняется.
Спектральный радиус - главный гиперпараметр. Чем ближе ρ к 1 - тем длиннее память резервуара, тем сложнее его динамика. Чем меньше - тем быстрее забывает. Обычно ρ подбирается в диапазоне 0.8-0.99 под конкретную задачу.
Есть, кстати, небольшая тонкость. ρ(W) < 1 - достаточное, но не необходимое условие. Существуют резервуары с ρ ≥ 1, которые все равно удовлетворяют свойству эхо-состояния при конкретных входных сигналах. Строгое доказательство требует анализа контрактивности системы. Обычно правило ρ < 1 работает как надежная отправная точка - и большинство так и делают.
А почему случайные веса вообще работают
Ок, зачем нужен случайный резервуар, если можно взять нормально обученную рекуррентную сеть?
Резервуар делает преобразование. Он проецирует входной временной ряд в очень высокоразмерное нелинейное пространство. В этом пространстве паттерны, которые в исходном сигнале перекрывались или были нелинейно перепутаны, становятся линейно разделимыми. Считывающий слой их и читает.
Та же логика стоит, например, за ядровыми методами в классическом машинном обучении. Там вместо обучения нелинейного классификатора - поднимаем данные в пространство, где линейный справляется.
Резервуару и не нужно быть оптимальным. Ему нужно быть достаточно богатым. Случайная рекуррентная сеть с правильным спектральным радиусом создает достаточно разнообразную динамику, чтобы любой входной сигнал отобразился в уникальное состояние. Тут оптимизация нужна только для выхода.
Зона, где динамика резервуара максимально информативна - вблизи ρ ≈ 1. Ее называют границей хаоса. Там между слишком стабильной динамикой (ρ << 1, резервуар засыпает) и хаотической (ρ >> 1, любой вход взрывается в неконтролируемую активность). И вот на этой границе резервуар лучше всего различает входные сигналы.
Да, звучит как случайность. Но работает как очень смелое архитектурное решение.
Два человека, одна идея
В 2001 году Герберт Ягер из German National Research Center for Information Technology опубликовал технический отчет про сети эхо-состояний. Инженерный подход, дискретное время, сигмоидные нейроны.
В 2002-м Вольфганг Маасс с коллегами из Грацского технического университета опубликовали "Real-time computing without stable states" в Neural Computation. Биологический подход, импульсные нейроны, модель кортекса.
И по сути своей, оба описали одно и то же. Разными словами, из разных дисциплин, с разными мотивациями. Термин "резервуарные вычисления", собственно, появился еще позже - Verstraeten и коллеги ввели его в 2005-2007 годах, чтобы объединить оба подхода под одно название.
Да, такое тоже бывает в науке.
Про распознавание паттернов в ведре
В 2003 году Крис Фернандо и Сампса Соякка опубликовали статью с именно таким забавным названием. Взяли ведро воды, создавали рябь на поверхности небольшими моторами - входной сигнал. Измеряли высоту воды в нескольких точках - состояние резервуара. Обучали линейный считывающий слой поверх этих измерений. И.. система распознавала временные паттерны.
Вода. Физический резервуар.
Нелинейная динамика волн на поверхности создает богатое высокоразмерное представление входного сигнала. Считывающий слой читает его. И это работало!
С тех пор физические резервуары - отдельное направление. Оптические системы - свет в оптоволоконных петлях. Спинтронные - динамика намагниченности в магнитных материалах. Механические - упругие колебания. Принцип тут один - любая физическая система с нелинейной динамикой и памятью может работать как резервуар.
Где стоит, где не стоит
Vanilla RNN |
LSTM |
GRU |
ESN |
|
Обучаемые параметры |
Все |
Все + гейты |
Все + гейты |
Только W_out |
Проблема градиентов |
Есть |
Частично |
Частично |
Нет |
Скорость обучения |
Медленно |
Медленно |
Медленно |
Быстро (регрессия) |
Длинные зависимости |
Плохо |
Хорошо |
Средне |
Зависит от ρ |
Масштабируемость |
Средняя |
Высокая |
Высокая |
Ограниченная |
Немного пояснений. Прогноз хаотических систем - уравнение Макки-Гласса, погодные паттерны, турбулентность. ESN справляется хорошо именно потому, что хаотическая динамика резервуара соответствует природе задачи. Распознавание речи и обработка сигналов на встраиваемых устройствах, например, обучение - одноразовая регрессия, инференс - простые матричные умножения. Управление роботами - быстрое обучение моторным паттернам.
Ограничения, естественно, есть. Размер резервуара N подбирается вручную. Если слишком маленький - динамика бедная, слишком большой - матрица состояний X растет как N × T, это уже проблема памяти. Нет универсального рецепта для ρ и разреженности W - всегда эмпирика под задачу. На зависимостях длиннее тысячи шагов трансформеры выигрывают - механизм внимания видит весь контекст явно, резервуар только через затухающее эхо.
Но есть одно “НО”
К моему огромному сожалению, в последние 2-3 года про резервуарные вычисления мы слышим крайне редко. В контексте физического ИИ и нейроморфных систем, скорее как инструмент там, где нужно быстрое обучение, ограниченные данные или нестандартное железо. Образно, если можно так выразиться, проходной быстрый вариант.
Есть относительно хайповый Intel Loihi 2. Он поддерживает импульсные нейросети, на которых исследователи реализуют жидкие машины состояний, но не нативной поддержки резервуарных вычислений. Такая, скажем, совместимая парадигма. Несколько групп работают над спинтронными и фотонными чипами с прицелом на физические резервуары в промышленном применении.
На этом, собственно, пока и все.
Рады, что смогли вас познакомить с этой историей. С одним из самых нестандартных подходов в машинном обучении, который основан на умышленном отказе от обучения большей части сети.
Если после теории захочется перейти к практике, ИИ-модели для работы с текстом, кодом и исследованиями собраны в SYNTX.AI. По промокоду AIHABR скидка 15%. на любой тариф.