2016-12-10 30 views
1

Я пытаюсь внедрить нейронную сеть в Haskell. Эта сеть известна вовремя, поэтому timesteps являются важной частью ее функции. Без необходимости слишком много деталей, мое общее выполнение работы сети в течение долгого времени является:Как смоделировать систему с течением времени в Haskell

foldM stepNetwork initialNetwork (zip images labels)

Идея заключается в том, что каждый из временного шага создает новую сеть, которая узнала еще один образ пары/метки. Однако этот подход приводит к тому, что некоторые валовые структуры данных пытаются запомнить вещи из предыдущих сетей. Вот моя скрытая слоистая структура:

data HiddenLayer = HiddenLayer { hResponse :: Response 
           , hOldResponse :: Response 
           , hNeurons  :: [YNeuron] 
           } deriving Show 

и моя текущая функция stepNetwork сродни:

stepNetwork (Network x y z) = Network newX newY newZ 
    where 
    newX = stepLayer x (hOldResponse y) 
    newZ = stepLayer z (hOldResponse y) 
    newY = stepLayer y (currentResponse newX) (currentReponse newZ) 

Я не хочу, чтобы нести старый ответ вместе в сети. Вот взаимосвязь между слоями в сети, где X, Y и Z являются тремя слоями.

enter image description here

Так как время чувствительное, похоже, FRP будет хорошим способом смоделировать эти отношения, но я просто не знаю, как эта модель в парадигме FRP. Любой совет?

+0

Я не понимаю, почему вы пишете 'newY = stepLayer y (currentResponse newX) (currentReponse newZ)', но ваша диаграмма говорит 'newY = stepLayer y (hOldResponse x) (hOldResponse z)'? – freestyle

ответ

2

Архитектура рекуррентной нейронной сети f что наблюдает входной вектор x и имеет состояние h является

f :: h -> x -> h 

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

f :: h -> x -> m h 

и запустить его с foldM f. Другое типичное, что нужно сделать, это обучить выходной слой, который производит выходной сигнал o из h, либо отдельной сети g :: h -> o или

f :: h -> x -> (h, o) 

, которое эквивалентно f :: x -> State h o; если это имеет побочный эффект, это f :: x -> StateT m h o.

Обучение сети составляет изучение функции f и в некоторых случаях изучение типа h. Рекуррентная сеть использует ту же функцию f на всех временных шагах. Это работа по обучению узнать, которая из прошлого должна помнить в h. Вам не нужны «некоторые валовые структуры данных, пытающиеся запомнить вещи из предыдущих сетей», сеть учится использовать h для запоминания соответствующих вещей с предыдущих шагов времени.

Для осуществления и обучения f может использоваться любой сетевой или контролируемый механизм обучения.

Если вы используете свертку вместо повторяющейся нейронной сети, вам нужно будет запомнить окно времени, в которое действует свертка. Легкий способ сделать это - представить все окно в качестве входного вектора x'. в любом случае вы явно сохраняете историю при реализации сети f. Свернутая сеть не обязательно видит состояние, перенесенное с предыдущих шагов времени, это может быть функция f :: x' -> o.


Я думаю, что вы пытаетесь идти глубже, так как вы представляете как изображения и надписи (которые я предполагаю, являются примерами для подконтрольного обучения). Если вы хотите обучить f из известного набора примеров, вам не нужно моделировать , обучаясь из серии опытов.

Если вы хотите модель обучения из серии опытов вы будете иметь состояние t машинного обучения f и функция t -> typeOf(f). Тип машинного обучения f будет зависеть от того, как машина подключена к реальному миру. Если реальный мир не повторит опыт надежно, машина захочет вспомнить предыдущие события (особенно те, которые f выполняются плохо), чтобы он мог представить эти события до f для дополнительного обучения. Механизм, обернутый вокруг учебного предмета f, должен дать f кошмары. Возможно, он захочет вспомнить несколько опытов f делает все возможное, чтобы не потерять существующую производительность, и в этом случае f получает удовольствие от приятных снов.

Ни в коем случае это не проблема f, чтобы помнить предыдущий опыт.


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

 Смежные вопросы

  • Нет связанных вопросов^_^