20

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

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

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

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


编辑: - 跟进以下答案

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

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

4

5 回答 5

10

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

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

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

于 2013-04-03T13:41:17.840 回答
5

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

于 2013-04-02T18:00:25.350 回答
3

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

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

例如,为什么不把训练好的权重和拓扑写在一个文件中呢?YAML 或 XML 之类的东西可以作为一种格式。

此外,当我们谈论状态/存储和神经网络时,您可能对研究联想记忆感兴趣。

于 2013-04-02T17:57:20.310 回答
3

这可以分两步回答:

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

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

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

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

于 2015-09-12T07:24:33.347 回答
0

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

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

没有查找表。没有初级和次级记忆,只有短期和长期记忆。

于 2015-06-23T16:42:35.373 回答