【问题标题】:Neural Network / Machine Learning memory storage神经网络/机器学习内存存储
【发布时间】:2013-03-24 03:27:31
【问题描述】:

我目前正在尝试建立一个用于信息提取的神经网络,并且我对神经网络的(基本)概念非常熟悉,除了一个似乎让我感到困惑的概念。这可能很明显,但我似乎无法找到有关它的信息。

神经网络在哪里/如何存储它们的记忆? (/机器学习)

网上有很多关于神经网络和机器学习的信息,但它们似乎都跳过了内存存储。例如重新启动程序后,它在哪里找到它的内存来继续学习/预测?网上的许多示例似乎并没有“保留”内存,但我无法想象这对于实际/大规模部署来说是“安全的”。

我很难说出我的问题,所以如果我需要详细说明,请告诉我。 谢谢,


编辑: - 跟进下面的答案

每个神经网络都有与之关联的边权重。 这些边缘权重在训练期间调整 神经网络。

这正是我苦苦挣扎的地方,我应该/应该如何看待这个二级记忆? 这像RAM吗?这似乎不合逻辑..我问的原因是因为我没有遇到在线定义或指定此辅助内存的示例(例如在更具体的东西中,例如 XML 文件,甚至可能是一个巨大的数组)。

【问题讨论】:

    标签: memory machine-learning neural-network


    【解决方案1】:

    这可以分两步回答:

    1. 什么是神经网络(简称 NN)中的“记忆”?

    在训练神经网络 (NN) 时,它会构建数学模型 它告诉 NN 为特定输入提供什么作为输出。思考 当你训练某人说一门新语言时会发生什么。这 人脑创建了语言模型。同样,NN 创建 你试图教它的数学模型。它将输入到输出的映射表示为一系列函数。这个数学模型 是记忆。这个数学模型是网络中不同边的权重。通常,训练一个 NN,并将这些权重/连接写入硬盘(XML、Yaml、CSV 等)。每当需要使用 NN 时,都会回读这些值并重新创建网络。

    1. 如何让网络忘记它的记忆?

    想想一个学过两种语言的人。让我们假设个人在 15 到 20 年内从未使用这些语言中的一种,而是每天使用另一种语言。每天很可能会学习几个新单词,而忘记许多不常用语言的单词。这里的关键部分是人类每天都在“学习”。在 NN 中,可以通过使用新数据训练网络来观察到类似的现象。如果旧数据不包含在新的训练样本中,那么基础数学模型将发生很大变化,以至于旧的训练数据将不再在模型中表示。可以通过改变训练过程来防止神经网络“忘记”旧模型。然而,这有一个副作用,即这样的 NN 无法学习全新的数据样本。

    【讨论】:

      【解决方案2】:

      我会说你的方法是错误的。神经网络不是我们在计算机上看到的内存转储。没有特定内存块所在的地址。所有神经元一起确保给定的输入导致特定的输出。

      让我们将其与您的大脑进行比较。当你品尝糖时,舌头的味蕾是读取化学信号并将电信号传输到大脑的输入节点。然后大脑使用各种电信号组合来确定味道。

      没有查找表。没有主要和次要记忆,只有短期和长期记忆。

      【讨论】:

        【解决方案3】:

        内存存储是特定于实现的,而不是算法本身的一部分。考虑什么你需要存储而不是如何存储它可能更有用。

        考虑一个 3 层多层感知器(全连接),在输入层、隐藏层和输出层中分别具有 3、8 和 5 个节点(在本次讨论中,我们可以忽略偏差输入)。那么表示所需权重的一种合理(有效)的方法是使用两个矩阵:3x8 矩阵用于输入和隐藏层之间的权重,8x5 矩阵用于隐藏和输出层之间的权重。

        对于此示例,您需要存储权重和网络形状(每层的节点数)。您可以通过多种方式存储此信息。它可以在 XML 文件或用户定义的二进制文件中。如果您使用的是 python,则可以将两个矩阵保存到二进制 .npy 文件中,并在文件名中编码网络形状。如果您实现了该算法,则取决于您如何存储持久数据。另一方面,如果您使用的是现有的机器学习软件包,它可能具有自己的 I/O 功能,用于存储和加载经过训练的网络。

        【讨论】:

          【解决方案4】:

          每个神经网络都有与之关联的边权重。这些边缘权重在神经网络的训练期间进行调整。我想您的疑问是关于存储这些边缘权重。嗯,这些值分别存储在辅助存储器中,以便它们可以保留以供将来在神经网络中使用。

          【讨论】:

          • 是的,正是我要去的地方。但我正在为这种次要记忆而苦苦挣扎;这像RAM,暂时吗?这似乎不合逻辑..我之所以问,是因为我没有遇到在线定义或指定此辅助内存的示例(例如在更具体的东西中,例如 XML 文件,甚至可能是一个巨大的数组)。谢谢!
          • 感谢您的回答。我不知道该接受哪个,因为他们都互相恭维。但一旦达到最低要求,我会给你 +1 票。
          【解决方案5】:

          我希望模型(神经网络)设计的讨论与实现的讨论分开,其中解决了持久性等数据要求。

          一个特定的库或框架可能对持久存储有一个特定的答案,但如果您是从头开始自己开发,那么这取决于您。

          例如,为什么不直接将训练好的权重和拓扑写入文件? YAML 或 XML 之类的东西可以作为一种格式。

          此外,当我们谈论状态/存储和神经网络时,您可能有兴趣调查 associative memory

          【讨论】:

          • 谢谢!实际上,我在考虑存储方面的相同方向。但这是常见的/这是“正式”的方法吗?我之所以问,是因为我还没有遇到在线定义或指定此示例的示例(例如,正如您所提到的,在更具体的东西中,例如 XML 文件,甚至可能是一个巨大的数组)。谢谢!
          • “形式”与数学无关。从软件设计的角度来看,(小规模)神经网络并没有什么特别之处。
          • 感谢您的回答,真的很有帮助。我不知道该接受哪个,因为他们都互相恭维。但我会尽快给你 +1 票。
          猜你喜欢
          • 1970-01-01
          • 2022-07-20
          • 2019-10-17
          • 2014-08-01
          • 2016-07-11
          • 1970-01-01
          • 2016-05-25
          • 2019-03-15
          • 2011-08-17
          相关资源
          最近更新 更多