您当前的位置:首页 > 电脑百科 > 人工智能

用Python实现多层感知器神经网络

时间:2020-09-08 09:48:20  来源:  作者:
用Python实现多层感知器神经网络

 

除非你能学习到一些东西,否则不要重复造轮子。

强大的库已经存在了,如:TensorFlow,PyTorch,Keras等等。我将介绍在Python/ target=_blank class=infotextkey>Python中创建多层感知器(MLP)神经网络的基本知识。

感知器是神经网络的基本组成部分。感知器的输入函数是权重,偏差和输入数据的线性组合。具体来说:in_j = weight input + bias.(in_j =权重输入+偏差)。在每个感知器上,我们都可以指定一个激活函数g。

激活函数是一种确保感知器“发射”或仅在达到一定输入水平后才激活的数学方法。常见的非线性激活函数为S型,softmax,整流线性单位(ReLU)或简单的tanH。

激活函数有很多选项,但是在本文中我们仅涉及Sigmoid和softmax。

图1:感知器

用Python实现多层感知器神经网络

 

对于有监督的学习,我们稍后将输入的数据通过一系列隐藏层转发到输出层。这称为前向传播。在输出层,我们能够输出预测y。通过我们的预测y,我们可以计算误差| y*-y | 并使误差通过神经网络向后传播。这称为反向传播。通过随机梯度下降(SGD)过程,将更新隐藏层中每个感知器的权重和偏差。

图2:神经网络的基本结构

用Python实现多层感知器神经网络

 

现在我们已经介绍了基础知识,让我们实现一个神经网络。我们的神经网络的目标是对MNIST数据库中的手写数字进行分类。我将使用NumPy库进行基本矩阵计算。

在我们的问题中,MNIST数据由 [748,1] 矩阵中的8位颜色通道表示。从本质上讲,我们有一个 [748,1] 的数字矩阵,其始于[0,1,.... 255],其中0表示白色,255表示黑色。

结果

MNIST手写数字数据库包含60,000个用于训练目的的手写示例和10,000个用于测试目的的示例。在对60,000个示例进行了30个epoch的训练之后,我在测试数据集上运行了经过训练的神经网络,并达到了93.2%的准确性。甚至可以通过调整超参数来进一步优化。

用Python实现多层感知器神经网络

 

它是如何工作的?

本文分为5个部分。这些部分是:

(1)激活函数 (2)权重初始化 (3)偏差初始化 (4)训练算法 (5)进行预测

1. 激活函数

Sigmoid是由等式1 /(1+ exp(-x))定义的激活函数,将在隐藏层感知器中使用。

Softmax是一个激活函数,当我们要将输入分为几类时,它通常在输出层中使用。在我们的例子中,我们希望将一个数字分成10个bucket[0,1,2,…,9]中的一个。它计算矩阵中每个条目的概率;概率将总计为1。具有最大概率的条目将对应于其预测,即0,1,…,9。Softmax定义为exp(x)/ sum(exp(x))。

图3:激活函数的实现

用Python实现多层感知器神经网络

 

2. 权重初始化

对于我们的每个隐藏层,我们将需要初始化权重矩阵。有几种不同的方法可以做到这一点,这里是4。

  1. 零初始化-初始化所有权重= 0。
  2. 随机初始化-使用随机数初始化权重,而不是完全随机。我们通常使用标准正态分布(均值0和方差1)中的随机数。
  3. Xavier初始化-使用具有设定方差的正态分布中的随机数初始化权重。我们将基于上一层的大小设置方差。

如上所述,进入感知器的边缘乘以权重矩阵。关键的一点是,矩阵的大小取决于当前图层的大小以及它之前的图层。明确地,权重矩阵的大小为[currentLayerSize,previousLayerSize]。

如上所述,进入感知器的边缘乘以权重矩阵。关键的一点是,矩阵的大小取决于当前图层的大小以及它之前的图层。明确地,权重矩阵的大小为[currentLayerSize,previousLayerSize]。

假设我们有一个包含100个节点的隐藏层。我们的输入层的大小为[748,1],而我们所需的输出层的大小为[10,1]。输入层和第一个隐藏层之间的权重矩阵的大小为[100,748]。隐藏层之间的每个权重矩阵的大小为[100,100]。最后,最终隐藏层和输出层之间的权重矩阵的大小为[10,100]。

出于教育目的,我们将坚持使用单个隐藏层;在最终模型中,我们将使用多层。

图4:权重初始化实现

用Python实现多层感知器神经网络

 

3. 偏差初始化

像权重初始化一样,偏置矩阵的大小取决于图层大小,尤其是当前图层大小。偏置初始化的一种方法是将偏置设置为零。

对于我们的实现,我们将需要为每个隐藏层和输出层提供一个偏差。偏置矩阵的大小为[100,1],基于每个隐藏层100个节点,而输出层的大小为[10,1]。

图5:偏置初始化实现

用Python实现多层感知器神经网络

 

4. 训练算法

前面已经说过,训练是基于随机梯度下降(SGD)的概念。在SGD中,我们一次只考虑一个训练点。

在我们的示例中,我们将在输出层使用softmax激活。将使用“交叉熵损失”公式来计算损失。对于SGD,我们将需要使用softmax来计算交叉熵损失的导数。也就是说,此导数减少为y -y,即预测y减去期望值y。

图6:关于softmax激活的交叉熵损失及其导数

用Python实现多层感知器神经网络

 

我们还需要编写S型激活函数的导数。在图7中,我定义了S型函数及其衍生函数

图7:Sigmoid函数(上)及其导数(下)

用Python实现多层感知器神经网络

 

通常,神经网络将允许用户指定几个“超参数”。在我们的实施中,我们将着重于允许用户指定epoch,批处理大小,学习率和动量。还有其他优化技术!

  1. 学习率(LR):学习率是一个参数,用户可以通过它指定网络允许我们学习和更新其参数的速度。选择一个好的学习率是一门艺术。如果LR太高,我们可能永远不会收敛于良好的可接受的训练错误。如果LR太低,我们可能会浪费大量的计算时间。
  2. epoch:epoch是整个训练集中的一个迭代。为了确保我们不会过度拟合早期样本中的数据,我们会在每个时期之后对数据进行随机排序。
  3. 批次大小:通过Epoc2h的每次迭代,我们将分批训练数据。对于批次中的每个训练点,我们将收集梯度,并在批次完成后更新权重/偏差。
  4. 动量:这是一个参数,我们将通过收集过去的梯度的移动平均值并允许在该方向上的运动来加速学习。在大多数情况下,这将导致更快的收敛。典型值范围从0.5到0.9。

下面,我编写了一些通用的伪代码来模拟反向传播学习算法的概况。为了便于阅读,已将诸如计算输出和将训练数据分成批次之类的任务作为注释编写。

用Python实现多层感知器神经网络

 

现在,我们将展示伪代码的实现.

用Python实现多层感知器神经网络

 

5. 做出预测

现在,我们仅缺少此实现的一个关键方面。预测算法。在编写反向传播算法的过程中,我们已经完成了大部分工作。我们只需要使用相同的前向传播代码即可进行预测。输出层的softmax激活函数将计算大小为[10,1]的矩阵中每个条目的概率。

我们的目标是将数字分类为0到9。因此,aj2矩阵的索引将与预测相对应。概率最大的索引将由np.argmax()选择,并将作为我们的预测。

用Python实现多层感知器神经网络

 

结论

这就对了!我们结束了。我们已经用Python编写了神经网络的实现。

但是,我们如何选择最佳参数?我们可以使用算法的一般知识来选择有意义的超参数。我们需要选择能概括但不能过度拟合数据的超参数。我们可以调整动量,学习率,时期数,批处理大小和隐藏节点的数量,以实现我们的目标。向前迈出一步,我们可以编写更多算法来为我们做这件事!

遗传算法是一种AI算法,可用于选择最佳参数。遗传算法的思想是创建一组具有不同参数的子代,并让他们产生与参数相关的测试错误。我们可以对具有最佳超参数的神经网络进行繁殖和变异,以找到性能更好的参数。花费大量时间后,我们将能够学习有关超参数情况的大量知识,并找到新的最佳超参数值。

我们还可以采取其他措施来减少测试错误吗?是的,我们可以缩放输入数据。像许多算法一样,数量更多会对算法的结果产生重大影响。在我们的示例中,数字范围为[0到255]。如果我们按比例缩放数字,使它们的范围从[0到1],则可以减少该偏差。



Tags:神经网络   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Transformer 是 2017 年出现的一种深度神经网络架构。它与更熟悉的 RNN 网络(用于对序列数据建模)的不同之处在于,它们可以将一个对象——文本、视频、图像—&m...【详细内容】
2022-04-01  Tags: 神经网络  点击:(77)  评论:(0)  加入收藏
编辑:LRS【新智元导读】神经网络越大越好几乎已成了共识,但这种想法和传统的函数拟合理论却相悖。最近微软的研究人员在NeurIPS上发表了一篇论文,用数学证明了大规模神经网络的...【详细内容】
2022-02-24  Tags: 神经网络  点击:(85)  评论:(0)  加入收藏
SimpleAI.人工智能、机器学习、深度学习还是遥不可及?来这里看看吧~ 从基本的概念、原理、公式,到用生动形象的例子去理解,到动手做实验去感知,到著名案例的学习,到用所学来实现...【详细内容】
2021-10-19  Tags: 神经网络  点击:(130)  评论:(0)  加入收藏
MNIST 这里就不多展开了,我们上几期的文章都是使用此数据集进行的分享。手写字母识别EMNIST数据集Extended MNIST (EMNIST), 因为 MNIST 被大家熟知,所以这里就推出了 EMNIST...【详细内容】
2021-09-08  Tags: 神经网络  点击:(847)  评论:(0)  加入收藏
理解什么是人工智能,以及机器学习和深度学习如何影响它,是一种不同凡响的体验。在 Mate Labs 我们有一群自学有成的工程师,希望本文能够分享一些学习的经验和捷径,帮助机器学习...【详细内容】
2021-06-09  Tags: 神经网络  点击:(184)  评论:(0)  加入收藏
资料来源:getwallpapers.com 深度学习是机器学习中重要分支之一。它的目的是教会计算机做那些对于人类来说相当自然的事情。深度学习也是无人驾驶汽车背后的一项关键性技术,...【详细内容】
2021-04-13  Tags: 神经网络  点击:(226)  评论:(0)  加入收藏
私有虚拟网络(VPN)是在公用网络基础之上建立的私有加密通信隧道网络,企业对于自管辖网络中个人使用VPN软件行为具有监管责任,但技术上却很难识别VPN的加密与通信方式,因此利用人工智能(AI)领域的神经网络技术从网络流量中识...【详细内容】
2021-01-07  Tags: 神经网络  点击:(310)  评论:(0)  加入收藏
深层神经网络的模型概括,过度拟合和正则化方法的挑战> Source 在完成了与神经网络有关的多个AI项目之后,我意识到模型的概括能力对于AI项目的成功至关重要。 我想写这篇文章来...【详细内容】
2020-10-30  Tags: 神经网络  点击:(165)  评论:(0)  加入收藏
本文最初发表于 Towards Data Science 博客,经原作者 Andre Ye 授权,InfoQ 中文站翻译并分享。卷积神经网络(Convolutional Nerual Network,CNN)构成了图像识别的基础,这无疑是深...【详细内容】
2020-10-16  Tags: 神经网络  点击:(155)  评论:(0)  加入收藏
本报告讨论了非常厉害模型优化技术 —— 知识蒸馏,并给大家过了一遍相关的TensorFlow的代码。...【详细内容】
2020-09-25  Tags: 神经网络  点击:(129)  评论:(0)  加入收藏
▌简易百科推荐
你有没有想过这样一个问题?未来五年,我们的生活会发生什么样的变化? 一、虚拟技术的改变随着AR和VR技术的发展,虚拟现实技术的越开越成熟。让计算机除了拥有视觉感知外。还有听...【详细内容】
2022-07-13  蓝星研究所    Tags:人工智能   点击:(0)  评论:(0)  加入收藏
上个月安利了一波:机器学习自动补全代(hán)码(shù)神器,然后就被打脸了,Github 宣布 copilot 要开始收费了。 Github 和 OpenAI 一样,遇到微软之后就慢慢丧失灵魂...【详细内容】
2022-07-12  机器学习与Python社区    Tags:OpenAI   点击:(6)  评论:(0)  加入收藏
训练深度神经网络是一项具有挑战性的任务。 多年来,研究人员提出了不同的方法来加速和稳定学习过程。 归一化是一种被证明在这方面非常有效的技术。 在这篇文章中,我将使用类...【详细内容】
2022-07-08  deephub    Tags:深度学习   点击:(11)  评论:(0)  加入收藏
与人类不同,人工神经网络在学习新事物时会迅速遗忘先前学到的信息,必须通过新旧信息的交错来重新训练;但是,交错全部旧信息非常耗时,并且可能没有必要。只交错与新信息有实质相似...【详细内容】
2022-07-06    雷峰网  Tags:深度学习   点击:(20)  评论:(0)  加入收藏
近年来,机器人和人工智能(AI),一直是许多人关注的重点议题,人工智能能不能取代人类的工作,也常被人拿来讨论。国际会计事务所“普华永道(PwC)”发布的分析称,在未来20年内,人工智能和...【详细内容】
2022-06-20  话匣子聊天    Tags:人工智能   点击:(32)  评论:(0)  加入收藏
face_recognition是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,特别是兼容树莓派系统。非常最简洁的人脸识别库,使用和安装都非常简单,可以...【详细内容】
2022-06-11  AI工具箱    Tags:face_recognition   点击:(18)  评论:(0)  加入收藏
AIoT是大势所趋;“算法定义硬件”是核心理念;开放生态是必由之路当前,我们正在大踏步地迈入物联网时代,AIoT将是互联网发展的下一次浪潮。物联网一定是高度智能化的网络,“智能”...【详细内容】
2022-06-08    金融界  Tags:AIoT   点击:(35)  评论:(0)  加入收藏
人工智能作为第四次工业革命的重要抓手之一,已经成为各国科技领域争夺的焦点。中美两国在该领域各有千秋,竞争日趋激烈。国内人工智能政策环境较好,产业基础初步具备,市场需求十...【详细内容】
2022-05-26  JIEWEIGZ    Tags:AI   点击:(35)  评论:(0)  加入收藏
微克软件机器人通过模拟人工操作进行业务流程自动化处理,提高办公效率和优化办公品质,拥有鼠标键盘操作、融合OCR文字识别、目标检测等AI人工智能技术,能够轻松将日常办公中的...【详细内容】
2022-04-30  微克软件机器人    Tags:AI   点击:(152)  评论:(0)  加入收藏
人工智能是一个广义术语,包括通用人工智能、机器学习、数据挖掘等多个方面,目前我们在游戏、机器人、人脸识别、语音识别、视觉识别、搜索引擎、智能推荐上都能看到AI的身影。...【详细内容】
2022-04-29  圣普伦数字技术培训    Tags:人工智能   点击:(59)  评论:(0)  加入收藏
站内最新
站内热门
站内头条