【问题标题】:How to model system over time in Haskell如何在 Haskell 中随时间建模系统
【发布时间】:2017-04-25 23:34:34
【问题描述】:

我正在尝试在 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为三层。

由于它对时间敏感,因此 FRP 似乎是模拟这种关系的好方法,但我只是不确定如何在 FRP 范式中对此进行建模。有什么建议吗?

【问题讨论】:

  • 我不明白你为什么写newY = stepLayer y (currentResponse newX) (currentReponse newZ),但你的图表上写的是newY = stepLayer y (hOldResponse x) (hOldResponse z)

标签: haskell functional-programming neural-network frp


【解决方案1】:

循环神经网络f 的架构观察输入向量x 并具有状态h

f :: h -> x -> h

正如您已经观察到的,如果它有一些副作用或输出,您可以将其建模为

f :: h -> x -> m h

并使用foldM f 运行它。另一个典型的做法是训练一个输出层,该层从h 产生输出o,或者是一个单独的网络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,那么您不需要对从一系列经验中学习进行建模。

如果您想对从一系列经验中学习进行建模,您将拥有机器训练 f 的状态 t 和函数 t -> typeOf(f)。机器训练的类型f 将取决于机器与现实世界的连接方式。如果现实世界不能可靠地重复体验,机器会想要记住以前的体验(尤其是 f 表现不佳的体验),以便将这些体验呈现给 f 以进行额外培训。围绕学习的机器f 应该会给f 带来噩梦。它可能想记住f 的一些经验,以确保它不会失去现有性能,在这种情况下f 可以享受一些美梦。

在任何情况下,f 的工作都不是记住以前的经历。


你想更深入吗?如果训练机器需要学习如何训练f 之类的东西,它将针对诸如问题f 正在学习的一系列问题进行训练。训练机器的参数将在问题之间共享,机器将学习要记住哪些内容。在某种程度上,机器可能会自我监督,而这种学习不良参数并陷入困境的机器将被一些更大的选择系统淘汰,该系统会摧毁不称职的机器。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2019-11-17
    • 2019-09-21
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多