这是一系列文章的第一篇,这些文章将对神经网络的设计、训练和评估进行长篇介绍。目标是使用Python计算机程序执行复杂的分类,该程序实现了被称为多层感知器的神经网络体系结构。
为了方便,你可以在这里找到感知机系列的其余部分:
- 如何使用神经网络进行分类:什么是感知机?
- 如何用一个简单的感知器神经网络来分类数据
- 如何训练基本感知器神经网络
- 理解简单神经网络训练
- 神经网络训练理论导论
- 理解神经网络中的学习率
- 多层感知器的高级机器学习
- Sigmoid激活函数:多层感知器神经网络中的激活
- 如何训练多层感知器神经网络
- 理解多层感知器的训练公式和反向传播
- Python实现的神经网络架构
- 如何用Python创建多层感知器神经网络
- 利用神经网络进行信号处理:神经网络设计中的验证
- 神经网络训练数据集:如何训练和验证Python神经网络
什么是神经网络?
神经网络是一种信号处理工具,松散地基于人类大脑的结构。它们通常与人工智能(AI)联系在一起。我不喜欢“人工智能”这个词,因为它是不精确和简化的。如果你将“智能”定义为快速执行数值计算的能力,那么神经网络绝对是人工智能。但在我看来,智力远不止于此——它是一种设计一个能快速执行数值计算的系统,然后写一篇关于它的文章,然后思考“智能”这个词的含义,然后思考为什么人类会创建神经网络并写关于它们的文章。
此外,人工智能不是人工的。这是非常真正的智能,因为它是一个数学系统,根据设计它的人类的智能运行。
神经网络是可以从现有数据中“学习”并有效解决复杂信号处理问题的常规软件。研究和实验它们很有趣,在某些情况下,它们远远超过了“正常”算法的能力。然而,他们无法消除世界饥饿,他们写不出好诗,而且我怀疑他们是否能像一个既清醒又不发短信的人那样安全地驾驶汽车。
感知器是什么?
一个基本的感知器神经网络在概念上是简单的。它只能由两个输入节点和一个通过加权连接连接的输出节点组成:
输入数据的维数必须与输入层的维数匹配。“维度”这个词在这里可能会让人有点困惑,因为大多数人无法想象三维以上的东西。所有这些实际上意味着,您的输入数据(例如,您想要分类的模式)是一个具有给定长度的向量,并且您的输入层必须为向量中的每个元素拥有一个节点。因此,如果您试图对一个由20个数据点表示的模式进行分类,那么您有一个20个元素的向量,需要20个输入节点。
输出节点生成设计器感兴趣的数据。输出节点的数量取决于应用程序。如果您想要做出一个是/否的分类决策,那么您只需要一个输出节点,即使有数百个输入节点。另一方面,如果目标是将输入向量放入几个可能的类别之一,那么您将有多个输出节点。
从一个节点移动到另一个节点的数据乘以权重。这些普通的标量值实际上是感知机功能的关键:权值在训练过程中被修改,并根据训练数据中包含的模式自动调整其权值,网络获得产生有用输出的能力。
节点内部发生了什么?(又名:神经网络如何工作?)
输入层中的节点只是连接点;它们不修改输入数据。输出层,以及输入和输出之间的任何附加层,都包含网络的计算节点。当数值数据到达计算节点时,首先对它们进行求和,然后对它们进行一个“激活”函数:
激活的概念可以追溯到(生物)神经元的行为,它们通过活跃或不活跃的动作电位进行交流;它更像是一个开/关的数字系统,而不是模拟系统。在(人工)神经网络的环境中,节点——也称为(人工)神经元——可以通过应用一个阈值函数来模仿神经元的行为,当输入大于阈值时输出1,否则输出0。
下图表达了基本“单位阶跃”激活函数的输入-输出关系。
通过将这种阈值转换插入到数据从节点到节点的传播中,我们将非线性引入系统,而没有这种非线性,神经网络的功能是非常有限的。这里的理论是复杂的,但一般的想法(我认为)是线性变换的组合,即使这些线性变换发生了很多次,也永远不能近似描述复杂的自然现象和复杂的信号处理任务的关系。
尽管事实是真实的神经元按照某种开关模型运行,阈值方法(人工)神经网络的激活不是最佳的。我们将在以后的文章中再次讨论这个主题。
结论
我们已经介绍了感知机的最基本的元素,在下一篇文章中,我们将把这些片段放在一起来看看一个基本的系统是如何工作的.
神经网络是一个广泛的话题,我要给你一个合理的警告,这可能是一个很长的系列。但我认为这将是一个好的。
简洁的文章。我认为你应该澄清这部分:
“所有这些实际上意味着,您的输入数据——例如,您想要分类的模式——是一个给定长度的向量,而您的输入层必须为向量中的每个元素拥有一个节点。所以,如果你试图对一个由20个数据点组成的模式进行分类,你就需要20个元素向量,并需要20个输入节点。”
需要清楚的是,维数是指来自某个特定瞬间或采样间隔的数据。不是收集的全部数据集。实际上,“20个数据点”指的是表中的20行(例如),而不是同一行中的20个列。