Первый шаг к добавлению знаний предметной области в модели нейронных сетей

Основная идея искусственных нейронных сетей (ИНС) заключается в построении представлений для сложных функций с использованием композиций относительно простых функций, называемых слоями.

Глубокая нейронная сеть - это сеть, состоящая из множества слоев или множества функций, объединенных вместе.

Хотя слои обычно являются простыми функциями (например, relu (Wx + b)), в целом они могут быть любыми дифференцируемыми функциями.

Слой задается некоторым конечным вектором параметров θ ∈ ℝᵖ. Чтобы быть практически полезным, нам нужно уметь подогнать этот слой (или слои) к данным. Это включает определение функции затрат или потерь, которая измеряет близость прогноза модели к данным.

Если наши слои дифференцируемы, мы можем найти градиент этой функции стоимости ∇ C (θ) и использовать его, чтобы найти локальный минимум стоимости эффективным способом.

Здесь я рассматриваю модели дифференциальных уравнений. Эти системы описывают временную эволюцию состояния системы (x) во времени, используя выражение, которое включает производную текущего состояния. В общем, они имеют вид:

Дифференциальное уравнение вписывается в структуру нашей нейронной сети, поскольку оно принимает некоторые параметры и дает решение на выходе, и оно является дифференцируемым.

Таким образом, мы можем использовать дифференциальное уравнение как слой в нейронной сети. Это действительно удобно по нескольким причинам:

  • Дифференциальные уравнения - это фундаментальный язык всех физических законов.
  • Помимо физики и химии дифференциальные уравнения являются важным инструментом для описания поведения сложных систем. Использование моделей дифференциальных уравнений в наших нейронных сетях позволяет комбинировать эти модели с подходами нейронных сетей.
  • Построение эффективных нейронных сетей включает выбор хорошей базовой структуры для сети. Часто проще думать об описании того, как функция изменяется во времени, чем о том, чтобы написать функцию для явлений. Относительно простые законы скорости могут превратиться в очень сложное поведение (см. Систему Лоренца ниже!).

Для простоты в этой статье я собираюсь сосредоточиться на нейронных сетях с одним слоем, основанным на дифференциальных уравнениях. Однако эти слои можно легко встроить как один слой в проект глубокого обучения. Сочетание глубокого обучения со знаниями предметной области в форме дифференциального уравнения меняет правила игры во многих областях.

Лотка-Вольтерра Хищник Добыча

Чтобы продемонстрировать, как вы можете создавать собственные слои дифференциальных уравнений в нейронных сетях, я собираюсь использовать библиотеки Julia Flux, DiffEqFlux и DifferentialEquations. В статье я сохраню код в виде небольших фрагментов, чтобы можно было развивать интуицию, но полный код для этих примеров был размещен в этом репозитории Github.

Для начала мы рассмотрим подгонку параметров классической модели математической биологии. Модель жертвы хищника Лотки-Вольтерры описывает колебания в популяции, которые можно наблюдать в простых экологических сообществах.

Знаменитый пример этого можно наблюдать в данных о торговле мехом торговой компании Гудзонова залива с 1800-х годов.

Уравнения для модели даются как

Колебания видов хищников будут иметь тенденцию отставать от пика популяции видов-жертв.

Теперь давайте используем эту модель в качестве слоя в нейронной сети с набором из шести параметров. Два для исходных популяций жертвы x₀ и хищников y₀ и четыре параметра скорости α, β, δ, γ.

В Julia мы можем определить эту систему и набор параметров по умолчанию.

Теперь мы определяем слой дифференциального уравнения как функцию входных параметров. Массив параметров имеет первые две записи в качестве начальных условий.

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

Наконец, мы определяем функцию для фактического подбора модели. Вот где действительно окупается экосистема Julia, поскольку эта система может легко использовать методы градиента для подбора параметров.

Как видите, я использую 3000 итераций Адамса, за которыми следует вызов BFGS, чтобы минимизировать затраты. Это хорошая комбинация, вы можете сразу перейти к BFGS, но конвергенция займет гораздо больше времени. Лучше позволить итерациям Адамса приблизиться к вам, а затем закончить с BFGS.

Восстановленные параметры представлены в виде:

The parameters are [0.9987532818277052, 0.9809616721237869, 1.5075095360807464, 1.009470157647888, 2.974936372236448, 0.993477599859459] with final loss value 2.1229151208653736
The actual parameters should be: [1,1,1.5,1,3,1]

Вот график наших данных против данных смоделированного временного ряда. Как видите, результаты минимизации отлично подходят к данным.

Конечно, настоящий тест для нейронной сети - это то, как она обобщается на данные проверки. В этом случае мы можем легко проверить систему на ненаблюдаемое начальное состояние, чтобы увидеть, уловила ли наша нейронная сеть динамику.

Отлично работает!

Модель осциллятора Стюарта-Ландау

Теперь давайте рассмотрим проблему восстановления параметров динамической системы, которая часто возникает в моей области исследований. Уравнение Стюарта-Ландау описывает динамику нелинейной системы, которая находится вблизи бифуркации Хопфа (в нелинейных системах возникают обычные колебания). Я собираюсь рассмотреть вариант этого, который возникает при изучении синхронности в популяциях связанных осцилляторов.

Отчасти мотивация для использования этой модели связана с тем, что я знаком с этой моделью. Однако у меня есть другая более глубокая мотивация. Модель хищник-жертва Лотки-Вольтерры - отличная модель для начала, но это своего рода странная модель для математической биологии. Это консервативная система, очень похожая на физическую (без трения). Это означает, что вместо изолированного притягивающего колебания (называемого предельным циклом) система Лотки-Вольтерры имеет целый класс концентрических циклов.

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

Уравнения для системы задаются следующим образом:

они записаны в полярных координатах. Таким образом, R описывает амплитуду, а ψ - угол в радианах. Динамика принимает качественную форму

В Джулии очень просто обновить нашу модель хищник-жертва, чтобы учесть этот тип системы.

Теперь мы определяем слой оды, генерируем некоторые данные и создаем функцию потерь.

Наконец, следующая функция создает запуски оптимизации для восстановления параметров.

Восстановленные параметры представлены в виде:

The parameters are [0.02293619193779294, 0.08918144968755219, 0.08304049248335474, 6.275224626122101, 0.11589347566722544, 0.9019465183126854] with final loss value 0.7300967336849258
The actual parameters are:
[0.0,0.08,0.1, 6.28, 0.1, 1.0]

Соответствие обучающим данным показано ниже:

Мы можем протестировать нашу модель дальше, посмотрев, насколько хорошо она обобщается для новых начальных значений.

Уравнения Лоренца и хаос

А теперь время для забавного приложения. Давайте рассмотрим восстановление параметров с использованием данных временных рядов из хаотической системы. Для этого воспользуемся знаменитой системой Лоренца.

Определить эту систему в Юлии достаточно просто:

В качестве демонстрации давайте взглянем на некоторые данные временного ряда для переменной X, сгенерированные из немного разных значений начальных условий.

Этот сюжет демонстрирует чувствительную зависимость от начальных условий, что является признаком хаоса.

Как обычно, мы определяем слой дифференциального уравнения, который зависит от начальных условий и параметров.

Сгенерируйте некоторые данные и добавьте немного шума к временному ряду и определите нашу обычную функцию ошибок.

Теперь определите обучающую функцию с помощью библиотеки DiffEqFlux.

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

Мы также можем посмотреть, как модель обучения соответствует графику временного ряда.

Поскольку модель обучалась только при t ∈ [0,10], мы видим, что модель довольно хорошо обобщается для t ∈ [10,20], но после этого времени быстро отклоняется от истинного значения.

The parameters are [0.9727986684296102, 0.034212291835795355, -0.001627150535904438, 9.99887680497206, 28.00267472723392, 2.666573010932292] with final loss value 1.7015586033442565
The actual parameters are:
[1.0,0.0,0.0,10.0,28.0,2.6666666666666665]

Итак, мы нашли довольно близкое соответствие.

Выводы

Относительно просто включить модели дифференциальных уравнений в нейронные сети с помощью экосистемы Julia (научная схема машинного обучения) ». Это позволяет нам включать целые отрасли знаний через модели классических динамических систем в наши модели нейронных сетей для данных временных рядов. Следующим шагом является объединение этих слоев дифференциальных уравнений в наши модели глубокого обучения.

На тему интерфейса динамических систем и искусственных нейронных сетей. Три возможных обобщения того, что мы здесь начали:

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

Также я должен упомянуть, что все модели, которые мы обсуждали в этой статье, можно легко перенести на графический процессор для обучения. Достаточно просто заявить, что начальные условия должны быть на GPU.

Напомним, что весь код для этой статьи можно найти здесь.

Удачного моделирования!