人工神经网络(ANN)简介
深度学习的第一步

深度学习是机器学习中最令人兴奋和最强大的分支。这是一种教会计算机做人类自然会做的事情的技术:通过例子学习。深度学习是无人驾驶汽车背后的一项关键技术,使它们能够识别停车标志或区分行人和灯柱。它是手机、平板电脑、电视和免提扬声器等消费设备语音控制的关键。深度学习最近受到了广泛的关注,这是有充分理由的。它正在取得以前不可能实现的成果。
在深度学习中,计算机模型学习直接从图像、文本或声音执行分类任务。深度学习模型可以实现最先进的准确性,有时甚至超过人类水平。通过使用大量标记数据和包含许多层的神经网络架构来训练模型。

学分: https: //must.co.in/members
深度学习模型可用于各种复杂的任务:
用于回归和分类的人工神经网络 (ANN)
用于计算机视觉的卷积神经网络 (CNN)
用于时间序列分析的循环神经网络 (RNN)
用于特征提取的自组织映射
用于推荐系统的深度玻尔兹曼机
推荐系统的自动编码器
在本文中,我们将尝试涵盖与人工神经网络或 ANN 相关的所有内容。
“人工神经网络或 ANN 是一种信息处理范例,其灵感来自于大脑等生物神经系统处理信息的方式。它由大量高度互连的处理元件(神经元)组成,它们协同工作来解决特定问题。”
涵盖的主题:
神经元
激活函数
激活函数的类型
神经网络如何工作
神经网络如何学习(反向传播)
梯度下降
随机梯度下降
使用随机梯度下降训练 ANN
神经元
生物神经元(也称为神经细胞)或简称神经元是大脑和神经系统的基本单位,这些细胞负责通过树突接收来自外部世界的感觉输入,对其进行处理并通过轴突给出输出。

生物神经元
细胞体(Soma): 神经元细胞的主体包含细胞核,进行神经元生命所必需的生化转化。
树突: 每个神经元周围都有细小的毛发状管状结构(延伸)。它们在细胞体周围分支成一棵树。他们接受传入的信号。
轴突: 它是一种长而薄的管状结构,其工作原理类似于传输线。
突触: 神经元以复杂的空间排列相互连接。当轴突到达最终目的地时,它再次分支,称为末端树枝化。轴突末端有高度复杂且专门的结构,称为突触。两个神经元之间的连接发生在这些突触处。
树突通过其他神经元的突触接收输入。体细胞随着时间的推移处理这些输入信号,并将处理后的值转换为输出,该输出通过轴突和突触发送到其他神经元。

电信号通过神经元的流动。
下图展示了受生物神经元启发的 ANN 的一般模型。它也被称为感知器。
单层神经网络称为感知器。它提供单个输出。

感知器
在上图中,对于单个观测值,x0、x1、x2、x3...x(n) 表示网络的各种输入(自变量)。这些输入中的每一个都乘以连接权重或突触。权重表示为 w0、w1、w2、w3….w(n) 。权重显示了特定节点的强度。
b 是偏置值。偏置值允许您向上或向下移动激活函数。
在最简单的情况下,将这些乘积相加,馈送到传递函数(激活函数)以生成结果,并将该结果作为输出发送。
数学上,x1.w1 + x2.w2 + x3.w3 ...... xn.wn = Σ xi.wi
现在应用激活函数𝜙(Σ xi.wi)
激活函数
激活函数对于人工神经网络学习和理解非常复杂的事物非常重要。它们的主要目的是将 ANN 中节点的输入信号转换为输出信号。该输出信号用作堆栈中下一层的输入。
激活函数通过计算加权和并进一步添加偏差来决定神经元是否应该被激活。动机是将非线性引入神经元的输出。
如果我们不应用激活函数,那么输出信号将只是线性函数(一次多项式)。现在,线性函数很容易求解,但其复杂性有限,功效较小。如果没有激活函数,我们的模型就无法学习和建模复杂的数据,例如图像、视频、音频、语音等。
现在问题来了,为什么我们需要非线性?
非线性函数是次数多于一且具有曲率的函数。现在我们需要一个神经网络来学习和表示几乎任何东西以及将输入映射到输出的任意复杂函数。
神经网络被认为是**“通用函数逼近器”。** 这意味着他们可以学习和计算任何函数。
激活函数的类型:
1.Sigmoid激活函数——(Logistic函数)
Sigmoid函数是一种数学函数,具有特征“S”形曲线或范围在0和1之间的S形曲线,因此它用于需要预测输出概率的模型。

S形曲线
Sigmoid 函数是可微的,这意味着我们可以找到曲线在任意 2 点处的斜率。
Sigmoid 激活函数的缺点是,如果提供强负输入,它会导致神经网络在训练时陷入困境。
2.双曲正切函数——(tanh)
它与 Sigmoid 类似,但性能更好。它本质上是非线性的,所以我们可以堆叠层。该函数的范围在 (-1,1) 之间。

双曲正切函数
该函数的主要优点是强负输入将映射到负输出,并且只有零值输入映射到接近零的输出。,因此在训练期间不太可能陷入困境。
3. 修正线性单元 - (ReLu)
ReLu 是 CNN 和 ANN 中最常用的激活函数,范围从零到无穷大。[0,∞)

热卢
如果 x 为正,则输出“x”,否则输出 0。看起来与线性函数有相同的问题,因为它在正轴上是线性的。ReLU本质上是非线性的,ReLu的组合也是非线性的。事实上,它是一个很好的逼近器,任何函数都可以通过 Relu 的组合来逼近。
ReLu 比双曲正切函数改进了 6 倍。
它应该只应用于神经网络的隐藏层。因此,对于输出层,使用 softmax 函数来处理分类问题,对于回归问题,使用线性函数。
这里的一个问题是一些梯度在训练过程中很脆弱并且可能会消失。它会导致权重更新,这将使其永远不会再次在任何数据点上激活。基本上 ReLu 可能会导致神经元死亡。
为了解决神经元死亡的问题,引入了Leaky ReLu 。 因此,Leaky ReLu 引入了一个小斜率来保持更新的活力。Leaky ReLu 的范围从 -∞ 到 +∞。

ReLu 与 Leaky ReLu
Leak有助于增加ReLu函数的范围。通常a的值=0.01左右。
当a不为0.01时,称为Randomized ReLu。
神经网络如何工作?
让我们以房产价格为例,首先我们将不同的因素汇总在一行数据中:面积、卧室、到城市的距离和年龄。

输入值通过加权突触直接到达输出层。将分析所有四个,应用激活函数,并生成结果。
这很简单,但有一种方法可以通过添加位于输入层和输出层之间的隐藏层来放大神经网络的能力并提高其准确性。

具有隐藏层的神经网络(仅显示非0值)
在上图中,所有 4 个变量都通过突触连接到神经元。然而,并非所有突触都被加权。它们要么具有 0 值,要么具有非 0 值。
这里,非0值→表示重要性
0值→它们将被丢弃。
让我们以第一个神经元的面积和到城市的距离为非零为例,这意味着它们是加权的并且对第一个神经元很重要。另外两个变量“卧室”和“年龄”没有加权,因此第一个神经元不考虑这些变量。
您可能想知道为什么第一个神经元只考虑四个变量中的两个。在这种情况下,房地产市场上的普遍现象是,距离城市越远,越大的房子就越便宜。这是一个基本事实。因此,这个神经元可能正在做的是专门寻找大型但距离城市不太远的房产。
现在,这就是神经网络力量的来源。这些神经元有很多,每个神经元都使用这些变量的不同组合进行类似的计算。
一旦满足这个标准,神经元就会应用激活函数并进行计算。下一个神经元可能具有到城市的距离和卧室的加权突触。
这样,神经元以非常灵活的方式工作和交互,使其能够寻找特定的事物,从而对它所训练的任何内容进行全面的搜索。
神经网络如何学习?
查看类比可能有助于理解神经网络的机制。神经网络中的学习与我们在日常生活和活动中的学习方式密切相关——我们执行一个动作,并被培训师或教练接受或纠正,以了解如何更好地完成某项任务。同样,神经网络需要训练器来描述应该生成什么作为对输入的响应。基于实际值和预测值之间的差异,误差值也称为成本
函数 被计算并通过系统发送回。
成本函数:实际值与产出值平方差的二分之一。
对于网络的每一层,都会分析成本函数并用于调整下一个输入的阈值和权重。我们的目标是最小化成本函数。成本函数越低,实际值越接近预测值。通过这种方式,随着网络学习如何分析值,每次运行中的错误都会逐渐减少。
我们通过整个神经网络反馈结果数据。将输入变量连接到神经元的加权突触是我们唯一可以控制的东西。
只要实际值和预测值之间存在差异,我们就需要调整这些权重。一旦我们稍微调整它们并再次运行神经网络,就会产生一个新的成本函数,希望比上一个更小。
我们需要重复这个过程,直到我们将成本函数降到尽可能小。

上述过程称为反向传播 ,并通过网络连续应用,直到误差值保持在最小值。

调整权重的方法基本上有两种: — 1. 蛮力法 2. 批量梯度下降
暴力法
最适合单层前馈网络。在这里,您可以取一些可能的权重。在这种方法中,我们要消除除了 U 形曲线底部的权重之外的所有其他权重。
可以使用简单的消除技术找到最佳体重。如果您有一个权重需要优化,那么这一消除过程就有效。如果您有具有大量权重的复杂神经网络,那么此方法会因维数诅咒而失败。
我们的替代方法称为批量梯度下降。
批量梯度下降
它是一种一阶迭代优化算法,其职责是在训练不同权重的模型或更新权重的过程中找到最小成本值(损失)。

梯度下降
在梯度下降中,我们不是每次检查每个权重,并在执行过程中勾选每个错误的权重,而是查看函数线的角度。
如果斜率 → 负值,则意味着您沿着曲线向下走。 如果斜率 → 正,则不执行任何操作
这样就消除了大量不正确的权重。例如,如果我们有 300 万个样本,则必须循环 300 万次。所以基本上你需要计算每个成本300万次。
随机梯度下降(SGD)
当我们有一条凸曲线时,梯度下降效果很好,如上图所示。但如果我们没有凸曲线,梯度下降就会失败。
“随机 ”一词是指与随机概率相关的系统或过程。因此,在随机梯度下降中,每次迭代都会随机选择一些样本,而不是整个数据集。

在 SGD 中,我们一次获取一行数据,通过神经网络运行它,然后调整权重。对于第二行,我们运行它,然后比较成本函数,然后再次调整权重。等等…
SGD 帮助我们避免局部极小值问题。它比梯度下降快得多,因为它一次运行每一行,并且不需要将整个数据加载到内存中进行计算。
需要注意的一件事是,由于 SGD 通常比典型的梯度下降噪声更大,因此由于其下降的随机性,通常需要更多的迭代次数才能达到最小值。尽管它比典型的梯度下降需要更多的迭代次数才能达到最小值,但它在计算上仍然比典型的梯度下降便宜得多。
因此,在大多数情况下,SGD 优于批量梯度下降来优化学习算法。
使用随机梯度下降训练 ANN
Step-1 → 将权重随机初始化为接近 0 但不为 0 的小数。
步骤 2 → 在输入层中输入数据集的第一个观测值,每个特征在一个节点中。
步骤 3 →前向传播 :从左到右,神经元被激活,每个神经元激活的影响受到权重的限制。传播激活直到获得预测值。
Step-4 → 将预测结果与实际结果进行比较并测量产生的误差(成本函数)。
Step-5 →反向传播 :从右到左,误差反向传播。根据它们对错误的责任程度来更新权重。学习率决定了我们更新权重的程度。
步骤 6 → 重复步骤 1 到 5,并在每次观察后更新权重(强化学习)
Step-7 → 当整个训练集通过人工神经网络时,就形成了 epoch。重做更多纪元。
结论

神经网络是一个新概念,我们刚刚触及其潜力的表面。它们可用于各种不同的概念和想法,并在测试阶段通过特定的反向传播和纠错机制进行学习。通过适当地最小化错误,这些多层系统有一天可能能够单独学习和概念化想法,而无需人工纠正。
这就是本文的全部内容,在下一篇文章中,我们将使用 NumPy python 库从头开始创建一个人工神经网络。
谢谢阅读!!!
