构建简单的AI .NET库 - 第5部分 - 人工神经网络





5.00/5 (17投票s)
人工神经网络的类型
系列介绍
以下是本系列先前文章的链接
- 构建简单人工智能 .NET 库 - 第 1 部分 - 基础优先
- 构建简单人工智能 .NET 库 - 第 2 部分 - 机器学习入门
- 构建简单人工智能 .NET 库 - 第 3 部分 - 感知机
- 构建简单的AI .NET库 - 第4部分 - 感知器及更高版本
我的目标是创建一个简单的AI库,涵盖一些高级AI主题,如遗传算法、ANN、模糊逻辑和其他进化算法。完成本系列的唯一挑战是是否有足够的时间来处理代码和文章。
代码本身可能不是主要目标,然而,理解这些算法才是。希望它有一天能对某人有所帮助。
请随时评论并提出任何澄清或希望提出的更好方法。
文章导读 - 第5部分 "ANN"
第一台神经计算机的发明者 Robert Hecht-Nielsen 博士将神经网络定义为
"...一个由许多简单、高度互连的处理单元组成的计算系统,这些处理单元通过其对外部输入的动态状态响应来处理信息。"
ANN的早期研究始于1940年。
在上一篇文章中,我们达到了最常见的ANN布局,包括输入层、隐藏层(s)和输出层。同样,这一切都是为了模仿人类大脑的智能。平均而言,人类大脑拥有约1000亿个神经元(或神经细胞)。
单个人工神经元互连的方式称为拓扑、架构、布局或人工神经网络的图,从这个角度来看,多年来已经开发了许多类型的ANN,但所有类型都具有一个共同点,那就是它们都基于排列在层中并连接在层中的多个感知器或神经元。
让我们来看看几种最常见的ANN类型,这些分类主要基于ANN的架构或布局。
ANN的类型
1-前馈ANN
这是MLP ANN,数据流从输入层流向输出层。
FF ANN可以有多个隐藏层,如果有多层隐藏层,则称为深度神经网络。
每一层通常处理一组特定的特征。整个ANN可以被视为一个优化函数或分类器。其应用是无限的。
对于训练,FF ANN用于监督和无监督学习类型的问题,并且有许多训练算法。然而,最常见的类型是反向传播算法。
我相信下一篇文章将专门介绍FF ANN,所以我们将把更详细的内容留待以后。
1.1 - 自组织映射 (SOM)
SOM是一种前馈ANN,但其神经元的排列和动机从根本上有所不同。
SOM使用无监督学习,特别是竞争性学习,在这种学习中,输出神经元之间相互竞争以被激活,结果是任何时候只有一个神经元被激活。
这个激活的神经元称为获胜神经元。这种竞争可以通过神经元之间的侧向抑制连接(负反馈路径)来实现。其结果是神经元被迫自我组织。因此,这种网络称为自组织映射(SOM)。
SOM用于生成训练样本输入空间的低维(通常是二维)、离散表示的映射,因此可以被视为一种降维方法。
1.2 - 径向基函数网络 (RBF)
径向函数是一类特殊的函数,其基本特征是它们的响应随着与中心点的距离单调地减小或增大(钟形)。径向函数的例子是高斯
函数,如下所示
径向基函数网络(RBF)是一种使用径向基函数作为其激活函数的ANN。
2. 递归ANN (RNN)
到目前为止,在我们讨论FF ANN的过程中,我们假设每个输入集都独立于其他输入,如果它们不是独立的,并且输入集之间存在某种关系呢?
例如,考虑构建一个用于语音转文本应用程序的ANN,通常ANN无法即时逐字翻译语音。相反,它需要等待整个句子,以便提供尽可能准确的翻译。这正是人类翻译家所做的。
因此,ANN应该能够以某种方式跟踪不仅当前输入,还包括过去的输入。换句话说,它应该有内部记忆来处理这种类型的输入。这是一种序列输入。
那么什么是记忆?记忆是记录过去信息并在当前时间处理过程中使用它的能力。实现记忆的一种方法是使用具有特定时间跨度容量的延迟函数。
因此,让我们通过简单地为神经元添加自连接来为单个感知器添加延迟。
不仅每个神经元都有自记忆,而且它可以与其他同一层中的神经元进行互连。
基于上述布局构建的完整网络称为递归神经网络(RNN)。
RNN用于序列输入,因此应用可以是语音转文本、语言建模和文本生成等。
随着时间的推移,人们引入了许多RNN的变体,它们是RNN的特例,以下是几种常见的类型。
2.1 - Hopfield网络
让我们先来考察一下人类的记忆。人类的记忆是以联想或内容寻址的方式工作的,因为大脑中的神经网络中没有特定记忆(比如某个个体)的位置。
相反,对个体的记忆是通过一系列关于该个体身体特征和/或个性特征和社会关系的联想来检索的,这些信息由大脑的不同部分处理。
使用先进的成像技术,观察到各种神经区域的复杂激活模式
在回忆一个人的过程中。
人类也可以通过首先记住某个记忆的特定方面或特征来完全回忆起该记忆。
早在1982年,John Hopfield 就引入了一种RNN的特例,它像人脑一样存储和检索记忆。在这种网络中,神经元要么处于ON(激活)状态,要么处于OFF(未激活)状态。
神经元的状态(开:+1或关:-1)将根据它从其他神经元接收到的输入而更新。
Hopfield网络最初被训练用于存储大量的模式或记忆。然后,它能够通过仅暴露部分甚至某些损坏的信息来识别任何已学的模式,也就是说,它最终会稳定下来并返回最接近的模式或最佳猜测。
Hopfield网络是单层的,神经元是全连接的,也就是说,每个神经元都与其他所有神经元相连接,并且没有自连接。此外,所有的权重都是对称的(给定两个神经元i
和j
,则Wij = Wji
)。
这是一个3个神经元的Hopfield NN (HNN)
Hopfield NN使用的激活函数是符号函数,形式如下
或者从0到1
其中
Sj
是单元j的状态(Theta)i
是单元i的阈值
有两种方法可以更新神经元的权重
- 异步 - 在每个时间点,更新一个随机选择或根据某个规则选择的节点,这在生物学上更真实。
- 同步 - 每次同时更新所有节点。
在训练HNN时,使用能量函数这个术语,你可以将能量函数视为成本函数,但它是网络状态的函数(成本函数是权重的函数)。我相信我将有另一篇文章专门讨论HNN,所以这里先到这里。
2.2 - Elman网络和Jordan网络
Elman网络,又称简单递归网络,是RNN的一种特例。第一个隐藏层具有递归连接。它是一个简单的三层RNN,通过所谓的上下文层或上下文单元,从隐藏层到输入层有反向循环。隐藏层和上下文单元之间的权重为1。这种类型的RNN具有记忆,允许它检测和生成随时间变化的模式。
下面显示了Elman网络的简化图
这是Elman RNN的完整图
Elman人工神经网络的隐藏层通常包含sigmoid人工神经元,输出层包含线性人工神经元。
在每个时间步,输入被前馈,然后应用学习规则。固定的反向连接将隐藏单元的先前值副本保存在上下文单元中(因为它们在学习规则应用之前通过连接传播)。因此,网络可以维持一种状态,使其能够执行标准多层感知器无法完成的任务,如序列预测。
Jordan网络与Elman网络相似。唯一的区别在于上下文单元的输入来自输出层而不是隐藏层。
这是完整的示例网络
2.3 - 长短期记忆 (LSTM)
长短期记忆(LSTM)解决了RNN的一个局限性,那就是它只能保留短期信息。那么长期依赖呢?
LSTM是一种递归ANN拓扑结构。与基本RNN相比,它可以从其经验中学习,以处理、分类和预测具有未知长度的非常长的时间延迟的重要事件之间的时间序列。
LSTM ANN由能够记住任意长度值的长短期记忆块构建而成。这是通过门来实现的,这些门决定何时输入足够重要以记住它,何时继续记住或忘记它,以及何时输出值。
LSTM中的记忆称为单元
,你可以将它们视为接收先前状态h(t-1)和当前输入x1作为输入的块。在内部,这些单元决定保留(以及擦除)什么在记忆中。然后结合先前状态、当前记忆和输入。
LSTM可能看起来很复杂,但它可以实现,并且将来会有专门的讨论。这只是一个介绍。
2.4 - 双向RNN (Bi-ANN)
Bi-ANNs基于这样的想法:时间t的输出不仅取决于序列中的过去元素,还取决于未来的元素。
例如,要预测序列中的缺失单词,你需要同时查看左侧和右侧的上下文。
双向RNN相当简单,旨在预测复杂的时间序列。它们由两个独立的互连ANN子网络组成,它们执行直接和反向(双向)变换。这两个网络堆叠在一起。
人工神经网络子网络之间的互连是通过两个动态人工神经元完成的,这两个神经元能够记住它们的内部状态。这种未来和过去处理信号值之间的互连增强了时间序列预测能力。因此,这些ANN不仅可以预测输入数据的未来值,还可以预测过去值。
这就需要进行两阶段的学习:第一阶段,我们训练一个ANN子网络来预测未来;第二阶段,我们训练第二个ANN子网络来预测过去。
这是一个示例布局
关注点
仍然存在许多类型的ANN,但上述列表是最常见的。希望本文对ANN及其类型提供了一个公平的介绍,这些内容将在未来的文章中引用。
一张精美的图表(来自互联网,但我记不起来源)附在本篇文章中,它以图形方式精美地展示了许多ANN。
接下来,我将开始编写代码来实现一些最常见的ANN。
历史
- 2017年9月18日:初始版本