神经网络 入门_神经网络动手入门

神经网络 入门

从头开始用Python实现单个神经元

在过去的十年中,人工智能(AI)已牢固地成为公众关注的焦点,这在很大程度上归功于机器学习 (ML)和人工神经网络(ANN)的进步。

但是,随着有前途的新技术的到来,嗡嗡作响的声音越来越多,而现在在该领域却出现了压倒性的噪音。 这就是为什么我认为回到基础知识并实际上使用Python 从头实现单个神经元会很有用的原因。

人工神经元

在我们深入之前,我只是想快速谈论一下神经元什么。 人工智能的早期拥护者注意到,生物神经元能够对大量数据进行概念化和学习,并假定在机器中对该神经元进行建模可能具有类似的功能。为此,神经元被抽象为一个模型。输入,输出和权重。

图1:简单的神经元模型。

在机器学习术语中,神经元的每个输入(x1,x2,…xn)被称为一个特征 ,每个特征都用一个数字加权以表示该输入的强度(w1j,w2j,…wnj)。 输入的加权总和(netj)然后通过激活函数 其通用目的是通过根据公式将加权总和转换为新的数字来模拟生物神经元的“发射率”。 虽然我们现在还不需要研究激活功能的原理,但是这里有一些Avinash Sharma V为有好奇心的人准备的阅读材料

因此,如果这就是神经元的工作方式 ,那么让我们看看它是如何学习的 。 简而言之, 训练神经元是指迭代更新与每个输入相关的权重,以便它可以逐步近似给出的数据集中的基础关系。 一旦经过适当的训练,神经元就可以用来像人类一样将全新的样本(例如猫和狗的图像)正确地分类到不同的桶中。 在机器学习术语中,这称为分类

训练

为了训练一个简单的分类器,我们使用具有以下属性的公开可用的sklearn乳腺癌数据集

+---------------+-----+
| Classes | 2 |
+---------------+-----+
| Num Samples | 569 |
+---------------+-----+
| Num Benign | 357 |
+---------------+-----+
| Num Malignant | 212 |
+---------------+-----+

数据集中的每个样本都是乳房质量的图像,该图像已被转换为一组30个数字(特征)。 使用一部分样本训练我们的神经元,我们将看到它是否能够将乳腺肿块中看不见的部分归类为恶性或良性。 换句话说,我们需要进行监督学习 任务,使用显式标记的数据点作为神经元的老师,以学习相关模式。

要运行和修改以下代码,请在此处签出脚本: single-layer-perceptron.py

首先,我们加载数据集并随机将恶性和良性样本随机混合在一起,同时保持每个样本的标记。 这是因为我们不希望我们的神经元根据看到的样本的顺序得出结论,而只是根据每个样本的特征得出结论。

要训​​练我们的神经元,我们基本上需要做三件事:

1.要求神经元对样本进行分类。
2.根据预测的错误程度更新神经元的权重。
3.重复。

由于神经元实质上只是权重的集合,因此我们可以使用Python的矩阵操作包numpy来随机初始化权重向量。²初始化的权重数与神经元的特征(输入)数相对应,因为每个特征都是加权后再求和。 激活是静态功能,因此不需要软件中的特定表示。

前进通行证

在训练的第一步中,我们要求神经元对训练样本进行预测。 这称为前向传递 ,它涉及对输入要素的加权求和并将该和传递给激活函数。

上面的代码片段中的l0是具有形状(n_samples * n_features)的要素矩阵。 代表我们单个神经元的权重是形状(n_features * 1)。 因此,这两个矩阵之间的矩阵相乘将为每个样本提供所有特征的加权和。 (如果您手动尝试,您会发现它并不像听起来那样复杂。)

当通过激活函数传递时,这些加权和将有效地成为每个训练样本的类别预测。

乙状结肠功能

乙形函数是逻辑函数的一种特例,由于以下几个原因而在这里被选为我们的激活函数:它易于区分非线性有界 ,具有以下形状和定义:

图2:S形函数形状。
图3:S形函数定义。

该函数用单行实现,如下所示:

方便地,标准逻辑函数具有以下形式的易于计算的导数

图4:S形函数的导数

其中f(x)表示逻辑函数。 正如我们将很快看到的那样,当试图最小化神经元预测中的错误时,此属性非常有用。

S型函数的导数实现如下:

梯度下降

现在来了有趣(棘手)的部分-实际上是让我们的神经元学习数据集中的潜在关系。 现在我们已经对每个训练样本进行了有限的预测,我们可以计算这些预测中的误差 / 损失 ,并与该误差成比例地更新神经元权重。

我们将使用梯度下降优化算法进行此权重更新。 为了使用此算法,我们需要一个误差函数来表示神经元的预测与地面真实之间的差距。 将该误差函数定义为均方误差的缩放版本(缩放使区分变得容易)。

图5:均方误差函数。

在代码中,此均方误差函数实现如下:

在数学中,梯度是函数的导数向量 ,该函数依赖于多个变量。 回想一下向量既有大小又有方向。 我们神经元的误差取决于馈入其中的所有权重。 因此,梯度是相对于每个权重的误差的偏导数的集合。

作为矢量,梯度指向函数最大增加率的方向。 因此,在与梯度相反的方向上移动会使功能最小化。 如果我们能够计算神经元的误差函数相对于其每个权重的梯度,则可以按比例更新权重以使误差最小。 可以将误差函数视为具有脊和谷的表面。 通过与梯度相反的方向下降,我们进入误差较低的山谷。

下面是使用链法则对误差函数的梯度的简单推导。 在这里可以找到更严格的推导。

图6:关于每个神经元重量的偏导数。

在这里, E是误差函数, wij是一个特定的权重, oj是神经元的输出, netj是神经元输入的加权和。 标记ij分别对应于权重和神经元。 我们将分别计算偏导数的每个因子。

第一个因素很简单,它是相对于神经元输出的误差的导数:

图7:关于神经元输出的输出误差的导数。

第二个因素也很简单,它是我们在图4中上面描述的S型函数的导数。

图8:神经元输出相对于加权总和的导数。

第三和最后一个因子简化为等于特定神经元的输入。

图9:相对于每个权重的输入加权总和的偏导数。

在图9中, oi是该神经元输入的向量,在我们的情况下,这是我们训练集中的特征。

体重更新规则

将我们刚刚看到的偏导数与下降联系起来,可以给我们一个更新代表神经元权重的规则:

图10:权重更新规则。

图10显示,每个权重将在梯度的负方向上更新,与附加项n成正比。 比例因子n决定我们在更新神经元权重时采取的步幅,以有效控制神经元学习的速度。 我们称其为学习率

实施体重更新

以下是我们单个神经元的梯度计算和权重更新的实现。 您可以按照注释查找权重更新规则所需的每个导数步骤。

在训练神经网络时,相同的训练数据会在网络中运行多次,每次完整通过都称为一个时期 。 (在这篇文章中, SAGAR SHARMA很好地解释了为什么我们在神经网络中多次使用相同的数据。)在每个时期,权重都会进一步更新以尝试降低误差。 对于我们的简单示例,通过反复试验来选择时期数和学习率,从而观察到mse损失的减少和收敛。

结果
图11:培训结果。

图11显示了在数百个纪元中,训练和测试数据集的损失减少了,准确性提高了。 接下来,我们通过在同一数据集中训练10个不同的随机初始化的神经元来检查此训练过程是否可重复。 在10次训练结束时,平均测试准确度为90.49%(s = 2.40%),平均总准确度为90.33%(s = 0.304%)。

如果我们发现训练和测试准确性存在很大差异,或者如果训练损失减少而测试损失却增加了,我们将有理由相信神经元没有学习隐藏在数据集中的模式。 尽管此验证级别不足以将该神经元放入生产环境中,但迹象表明该神经元已了解数据集中的模式。

结论

我们在这里查看了人工神经网络的最简单形式,即具有由梯度下降驱动的单个神经元的一种形式。 网络可以由许多神经元或其他可训练的过滤器/单元组成,并根据其用途使用各种丢失和激活功能。 所有这些扩展使ANN可以执行各种任务,例如对象检测,语言翻译,时间序列预测等。

在我们的下一篇文章中,我们将探索单个神经元的局限性,并通过一系列神经元或向后挖掘错误流。 错误通过神经网络的反向流动使得神经元集合可以收敛在一个解上。 因此,我们将能够通过神经网络传递更大,更复杂的数据集。

作者的话

我想大声疾呼 Eli BurnsteinWilliam WenGuy TonyeThomas Aston,以帮助他们通过多次修订来校对和编辑本文。

与往常一样,留下评论并指出您在这里发现的任何错误。 我将努力尽快修复它们!

脚注
  1. 感知器,感知和识别自动机 ,作者:弗兰克·罗森布拉特(Frank Rosenblatt)。
  2. 在我们非常简单的示例中,我们将权重集中在平均值为零附近。 但是,有更好的方法来初始化较大模型的权重。 Neerja Doshi进行权重初始化的最佳实践的精彩介绍。

Dhruv是 Connected Lab (一家产品开发公司 )的AI软件工程师 ,该公司与客户合作,通过软件驱动的产品来推动影响力。 www.connectedlab.com

翻译自: https://hackernoon.com/a-hands-on-introduction-to-neural-networks-6a03afb468b1

神经网络 入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值