Алгоритмы в основе традиционных сетей настраиваются во время обучения, когда подается огромное количество данных для калибровки наилучших значений их весов, ликвидные («текучие») нейронные сети лучше адаптируются.  Один из первых тестов для демонстрации этой способности — попытка управлять автономным автомобилем. Ведь обычная нейронная сеть анализирует визуальные данные с камеры автомобиля только через постоянные промежутки времени, а ликвидная сеть из 19 нейронов и 253 синапсов (крошечная по стандартам машинного обучения) может оказаться намного отзывчивее.  «Наша модель может делать выборки чаще, например, когда дорога извилиста», — рассказывает соавтор этой и других статей о ликвидных сетях. Модель успешно удерживала машину на ходу, но, по словам Лехнера, у неё был один недостаток: «Она была очень медленной» из-за нелинейных уравнений, представляющих синапсы и нейроны, которые обычно невозможно решить без повторных вычислений на компьютере, который выполняет несколько итераций, прежде чем сойдется к решению. Эта работа обычно делегируется специальным программным пакетам — решателям, применять которые нужно к каждому синапсу и нейрону отдельно. В статье 2022 года учёные показали ликвидную нейронную сеть, которая обошла это узкое место. Эта сеть основывалась на уравнениях того же типа, но ключевым достижением стало открытие Хасани, что такие уравнения не нужно решать с помощью трудоемких компьютерных вычислений. Вместо этого сеть могла бы функционировать, используя почти точное или «замкнутое» решение, которое, в принципе, можно было бы разработать на бумаге с карандашом в руках. Как правило, эти нелинейные уравнения не имеют решений в замкнутой форме, но Хасани наткнулся на достаточно хорошее приближенное решение. Это ускоряет вычисления и сокращает затраты энергии. Ликвидные нейронные сети предлагают «элегантную и компактную альтернативу», — считает Кен Голдберг, робототехник из Калифорнийского университета в Беркли. По его словам, эксперименты уже показывают, что эти сети могут работать быстрее и точнее, чем другие так называемые нейронные сети с непрерывным временем, которые моделируют системы, меняющиеся во времени. Рамин Хасани и Матиас Лехнер, инициаторы новой архитектуры, много лет назад поняли, что C. elegans может стать идеальным организмом, который можно использовать, чтобы выяснить, как создавать устойчивые нейронные сети, способные приспосабливаться к неожиданностям. Этот червь — одно из немногих существ с полностью структурированной нервной системой, и она способна к целому ряду действий: двигаться, находить пищу, спать, спариваться и даже учиться на собственном опыте. «Он живет в реальном мире, где постоянно происходят изменения, и может хорошо работать практически в любых условиях», — сказал Лехнер. Уважение к непритязательному червю привело Лехнера и Хасани к их новым сетям, где каждый нейрон управляется уравнением, которое предсказывает его поведение во времени. И так же, как нейроны связаны друг с другом, эти уравнения зависят друг от друга. Сеть, по сути, решает ансамбль связанных уравнений, позволяя характеризовать состояние системы в любой момент — в отличие от традиционных нейронных сетей, которые выдают результаты только в определенные моменты времени. Ликвидные сети также различаются тем, как они обрабатывают синапсы, связи между искусственными нейронами. Сила этих связей в стандартной нейронной сети может быть выражена одним числом — ее весом. В ликвидных сетях обмен сигналами между нейронами — вероятностный процесс, управляемый «нелинейной» функцией: ответы на входы не всегда пропорциональны. Удвоение входных данных, например, может привести к гораздо большему или меньшему сдвигу вывода. Именно из-за этой естественной изменчивости сети называют ликвидными, «жидкими». Реакция нейрона может варьироваться в зависимости от того, какие входные данные он получает. По словам Хасани, их новейшие сети не только быстрее, но и необычно стабильнее, а это означает, что система, не выходя из строя, способна обрабатывать огромные входные данные. «Основной вклад здесь заключается в том, что стабильность и другие приятные свойства заложены в этих системах благодаря их чистой структуре», — рассказывает Шрирам Санкаранараянан, ученый-компьютерщик из Университет Колорадо, Боулдер. Ликвидные сети, кажется, работают внутри «золотого пятна: они достаточно сложны, чтобы в них происходило нечто интересное, но сложны не настолько, чтобы привести к хаотичному поведению». Сейчас учёные из MIT тестирует свою последнюю сеть на автономном БПЛА. Хотя дрона учили ориентироваться в лесу, его переместили в городскую среду Кембриджа, чтобы посмотреть, как он справляется с новыми условиями. Предварительные результаты эксперимента Лехнер считает обнадеживающими. Команда работает над улучшением архитектуры своей сети. Следующий шаг, по словам Лехнера, «выяснить, сколько или насколько мало нейронов нужно, чтобы решить задачу».  Учёные хотят разработать оптимальный способ соединения нейронов. Сейчас каждый нейрон связан с каждым другим нейроном, но синаптические связи C. elegans работают иначе: они более избирательны. Благодаря исследованиям нервной системы круглых червей учёные надеются определить, какие нейроны в их системе должны быть соединены. Кроме автономного вождения и полётов, ликвидные сети хорошо подходят для анализа электрических сетей, финансовых транзакций, погоды и других явлений, которые меняются со временем. По словам Хасани, последнюю версию ликвидных сетей можно использовать «для моделирования активности мозга в масштабах, ранее невозможных». Особенно этим заинтригован Митра. «В каком-то смысле это поэтично, показать, что это исследование может пройти полный цикл [полный, замкнутый круг], — считает он [отсылка на замкнутую форму уравнений]. — Нейронные сети развиваются до такой степени, что те самые идеи, которые мы почерпнули из природы, вскоре смогут помочь нам лучше понять природу».  Перейдём к практике. Покажем пример прямо из документации к пакету c реализацией ликвидных нейросетей. И, конечно, его работу. Политика нейронных цепей (NCP) — это повторяющиеся модели нейросетей, вдохновленные нервной системой нематоды C. elegans. По сравнению со стандартными моделями ML, NCP имеют: Сегодня пакет предоставляет две модели нейронов: LTC и CfC на нейронах в виде дифференциальных уравнений, связанных между собой сигмоидальными синапсами. Термин «текучая [ликвидная] постоянная времени» происходит от свойства LTC: поведение этих нейронов во времени подстраивается к входным данным (скорость реакции на некоторые стимулы может зависеть от конкретного входного сигнала). LTC — это обыкновенные дифференциальные уравнения, поэтому их поведение можно описать только во времени.  LTC являются универсальными аппроксиматорами и реализуют причинно-следственные динамические модели. У модели LTC есть один существенный недостаток: для вычисления выходных данных нужен численный решатель дифференциальных уравнений, который серьезно замедляет обучение и время вывода. Модели уравнения [замкнутой формы] с непрерывным временем (CfC) устраняют это узкое место, они содержат приближённое решение дифференциального уравнения в замкнутой форме. Использовать можно обе вышеописанные модели, причём с полносвязной схемой соединений. Для этого просто передадим количество нейронов, как это делается в стандартных моделях, таких как LSTM, GRU, MLP или трансформеры. В форме объекта ncps.wirings.Wiring можно указать разреженные структурированные соединения. Политика нейронных цепей (NCP) — самая интересная парадигма нейронных связей в этом пакете, она включает в себя 4-уровневый принцип рекуррентного соединения сенсорных, промежуточных, командных и моторных нейронов.  Самый простой способ создать нейронные связи NCP — использовать класс AutoNCP, требующий указать общее количество нейронов и количество двигательных нейронов, то есть размер вывода.  Ниже научим NCP играть в игру Atari с помощью обучения с подкреплением. Код написан на TensorFlow, а для обучения применяется ray[rllib]. Мы воспользуемся алгоритмом proximal policy optimization (PPO) — ближайшая оптимизация политики. Это хороший базовый алгоритм, который работает и в дискретном, и в непрерывном пространстве действий.  Для начала нужно установить кое-какие пакеты: Модель состоит из блока свертки, за которым следует рекуррентная нейронная сеть типа CfC. Для совместимости модели с rllib создадим подкласс класса ray.rllib.models.tf.recurrent_net.RecurrentNetwork. Наша сеть Conv-CfC обладает двумя выходными тензорами. Это тензоры: Второй тензор необходим для наших алгоритмов PPO RL. Изучение как политики, так и функции ожидаемого возврата в одной сети часто имеет некоторые преимущества обучения за счёт общих признаков. После определения модели её можно зарегистрировать в rllib: Каждый алгоритм RL опирается на дюжину гиперпараметров, которые способны оказать огромное влияние на эффективность обучения, и PPO здесь не исключение. К счастью, авторы rllib предоставили конфигурацию, которая прилично работает с PPO и средами Atari. Этой конфигурацией мы и воспользуемся: При запуске алгоритма создаются контрольные точки, которые мы сможем восстановить позже. Эти точки сохраним в папке rl_ckpt и добавим восстановление по идентификатору контрольной точки, переданному с аргументом --cont: Чтобы показать, как именно обученная политика играет в игру Atari, нужно написать функцию, которая включает режим среды render_mode и выполняет политику в замкнутом цикле. Для вычисления действий воспользуемся функцией в объекте алгоритма — это compute_single_action, но об инициализации скрытого состояния RNN нужно позаботиться самостоятельно: А теперь запускаем алгоритм обучения с подкреплением. Игру сети программа показывает, если прописан аргумент --render: Весь исходный код вы найдёте здесь. Вывод скрипта выглядит примерно так: А полезная теория и ещё больше практики с погружением в среду IT ждут вас на наших курсах:  Data Science и Machine Learning Python, веб-разработка Мобильная разработка Java и C# От основ — в глубину А также Школа Computer Science