Feb. 17th, 2017

kaipa: (Default)
Несколько лет назад я задавался вопросом, что может аппроксимировать нейронная сеть. Ответ -- "все" -- не был удивительным, но тогда мне было неочевидно, как это сделать практически.

А вот оказывается, существует тип нейронных сетей, объединяемых под общим названием резервуарные вычисления (Reservoir Computing), которые неплохо справляются с этой задачей. Идея простая, и не удивительно, что почти одновременно в конце 90х к ней пришли разные группы исследователей, предложившие модели Echo State Networks, Liquid State Machines и некоторые другие.

Напомню, что классические нейронные сети, прямые и рекуррентные, состоят из входного вектора, нескольких слоев нейронов, соединенных между собой определенным образом, и выходного вектора. Каждый нейрон -- это некоторая функция от линейной комбинации входов (наиболее распространены -- логистическая и линейная, хотя есть и более экзотические варианты). Процесс обучения сети -- это уменьшение ошибки выхода сети по отношению к ожидаемому выхода обучающей выборки. Задача уменьшения или оптимизации решается путем подгонки коэффициентов линейной комбинации на каждом их нейронов при помощи хитрых модификаций градиентного спуска. Когда слоев много (а для сложных нелинейных функций и сетей с памятью их получается немало), то тренировка сети представляет собой сложную задачу.

Резервуарные вычисления предлагают несколько другой способ. Исследователи заметили, что в процессе оптимизации многослойных сетей основная "настройка" идет на конечных слоях. Этому есть математическое обоснование, которого я сейчас касаться не буду. А раз так, то можно попробовать вообще не тренировать внутренние слои, если они имеют достаточно богатый "внутренний мир". Так появился "динамический резервуар" нелинейных нейронов, соединенных между собой случайным разряженным образом. В резервуар есть вход и выход. На выходе простой слой линейных нейронов. То есть резервуар представляет собой большой набор разных нелинейных функций, из которого можно "собрать" (через тренировку выходных нейронов) любую функцию. Если опустить вопрос, чем и как "наполнять" резервуар, то тренировка сети получается очень простая и быстрая. Что также позволяет экспериментировать с объемом, connectivity и прочими параметрами резервуара.

Этот подход имеет много интересных свойств. Например, можно к одному и тому же резервуару присоединять разные выходные слои и таким образом решать разные задачи. То есть сам резервуар гомогенен, не настроен под конкретную задачу, и может быть использован для чего угодно. Исследователи предполагают, что человеческий мозг функционирует похожим образом. Известная пластичность мозга хорошо вписывается в это предположение. Более того, Liquid State Machines и еще одна резервуарная технология Temporal Recurrent Networks были разработаны группами, исследовавшими взаимодействие нейронов в мозгу человека.

В последние годы исследователи научились при помощи различных хитрых трюков и возросших вычислительных мощностей получать на обычных рекуррентных сетях впечатляющие результаты. Но все эти сети узко как правило узко специализированны под конкретную задачу или класс задач и требуют долгой и кропотливой настройки и обучения. Резервуарные вычисления выгодно отличаются своей неспециализированностью и скоростью обучения.

Кстати, хочу отметить, что я поменял свое мнение, что в нейросетях нет математики, никто не понимает, как они работают, и все решается экспериментально. Это впечатление возникает только на популярном уровне. Углубившись в тему, я понял, что с математикой там все хорошо, как и почему работают алгоритмы обучения, какие там есть проблемы, и как их решать исследуется достаточно подробно. Эксперимент, безусловно, остается, но теоретические основы есть и развиваются.

Profile

kaipa: (Default)
kaipa

April 2017

S M T W T F S
       1
2345678
9101112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 26th, 2017 06:20 pm
Powered by Dreamwidth Studios