作者:Parul Pandey
在直接进入神经网络之前,我们需要看一下它的基本原理。我们将从一个简单的预测器和一个构成神经网络基础的分类器开始介绍,然后再到神经网络本身。
目录
- 简化预测器
- 简化分类器
- 训练分类器
- 简化多分类器
- 神经网络体系结构简介
简化预测器
人类和机器所采用的解决问题的过程:
左边:人类是如何解决问题的
右边:计算机是如何解决问题的
让我们用例子来说明机器如何解决问题。
问题陈述:
考虑一台可以将kilometers转化为miles的机器。它可以是计算器,也可以是任何简单的设备:
从我们的常识来看,我们知道增加一倍的距离(以miles为单位),也是增加以公里为单位的距离的一倍。因此,如果我们要拟合一个英里和公里之间的数学方程式,它会是这样的:
miles = kilometres x c , c是一个未知的常数。
根据观察,我们可以创建一个truth table,详情如下:
目标:
我们的主要目的是计算constant ‘c’。这是因为一旦我们知道了c的值,我们就可以在方程中插入这个值:miles = kilometres x c,并将任何英里的价值转换为公里,反之亦然。
步骤
我们将从一些随机值开始测试并计算第二个真理示例的错误值。让我们分别考虑这三个常数的情况:0.5, 0.6 and 0.7。为了更好地理解,已将计算结果列于下表。
案例1
选择“c”=0.5,给出的误差值约为12个单位,与实际值相比,计算值要小得多。为减少误差,计算项应具有较高的值。我们也知道英里和公里线性相关的,所以增加‘c’将增加输出。
案例2
令“c”=0.6,将使误差降低。这促使我们增加“c” =0.7。
案例3
关于进一步增加“c”的值,将会超调正确的答案。因此,0.6是一个比0.7更好的选择。在第二种情况下增加‘c’,只增加一个很小的数值,比如0.1。让我们看看结果:
我们的输出值为61,仅与正确的62.137相差1.137。
学习
这就是用于给定的真值表的简单预测算法。真值表通常称为训练数据。算法通过调整参数,根据模型的错误程度,将模型与已知的例子进行比较。我们在这里简化了一个预测器。
简化分类器
现在让我们尝试简化一个分类器。
问题:
下面的图表,显示了被测到的花园虫子的宽度和长度。
我们观察到两类bug。幼虫又长又瘦,瓢虫又宽又短。如果一个新的bug进入了这个场景,我们如何才能将它归类为毛毛虫或瓢虫(考虑到这是仅有的两类)?
我们知道,当线性函数的输出与它们的输入相对应时,它们就会产生直线。在前面的示例中讨论的预测器的情况下,“c”表示可调整参数,该参数定义了该直线的斜率。
目标:
我们想找到一条线,可以正确地分类任何未知的虫子进入花园的毛虫或瓢虫。
步骤:
如果我们在给定的图形上随机放置一条线,可能有三种情况。
1和2都没有给出好的结果,而3成功地分离了这两类bug。现在,如果一个新的虫子被放置在花园,它可以很容易地被归类为两个已知的类别之一,这取决于它在线上或线下的位置。
我们看到线性函数是如何用于对以前未见的数据进行分类。但是,我们如何决定将直线放置在哪里,即如何确定直线的斜率呢?这一问题的答案同样是神经网络学习的核心,接下来我们将讨论这个问题。
简单分类器的训练
为什么我们要训练我们的分类器?这是因为我们希望分类器能够学会正确地将虫子识别为毛虫或瓢虫。我们在预测器的例子中看到,模型是根据真实世界实例/真值表对比训练数据得到的误差提供反馈。对于分类器,我们也会遵循同样的原则。
训练数据
所有这三种场景中的分界线都可以通过以下方式获得:调整梯度。为了训练数据,我们需要如下的表格和可视化数据:
加工过程
我们的目标是找到一条线,可以正确地将任何未知的昆虫分类为毛毛虫或瓢虫;我们可以从绘制一条随机线开始。这条线可以用方程式表示:
一条穿过原点的直线方程,
y和x分别表示bug的长度和宽度,而A表示直线的斜率。
让我们假设A成为 0.25(随机猜测),所以这条线的方程变成y=0.25x。画线:
plot for y= 0.25x
这不是一个好的分类器,因为它不能分类错误。对我们来说下一个明显的步骤是增加梯度,而不是随机选择梯度。设计一种更新斜率/参数A的方法这样我们的模型就可以从错误中训练数据。
用第一个例子学习
如果我们测试了Y=Ax函数,在这个例子中,x是3.0,我们将得到:
1)这里y对应于bug的长度,而x是宽度。
2)这里A被设置为如上所述的0.25的随机值
3)x = 3.0,来自第一个例子的训练数据
y的计算值远小于实际值1,即如果不是0.75,我们应该考虑y的值。
如果y等于1,这意味着分类器线将通过瓢虫坐在(x,y)=(3.0,1.0)处的点。我们不想那样。我们希望这条线超过那一点。为什么?因为我们希望所有的瓢虫点都在线下,而不是在线上,因为这条线需要是一条分隔线。
因此,让其略高于1,选择y=1.1,x=3.0。
error =(所需目标 - 实际输出)
E = 1.1-0.75 = 0.35
视觉表现有助于我们更好地理解这些事实:
误差
这里的一个重要而明显的问题是误差值,帮助我们细化行/参数A的斜率。
我们知道,分类器的线性函数是由方程给出的:
让我们调用正确的输出值为‘t’(t代表目标值)。要得到那个值t,我们需要对A进行少量的调整。
新的斜率:
请记住,误差E是计算值与正确值之间的差值,是根据我们目前对A的猜测计算出来的,即:
结合所有方程并求解参数A:
就这样。我们发现了误差项和参数A。我们可以用误差E对分类线的斜率A进行δA的细化,这正是我们想要知道的,也就是通过调整A来提高直线的斜率,因此它是一个较好的分类器。
回到示例,插入公式中的值,我们得到:
这意味着我们需要将A=0.25改为0.1167,而A的新的改进值是(A+δA),为0.25+0.1167=0.3667。碰巧,这个新的A的计算值为1.1,它是期望的目标值。
最后,通过所有这些计算,我们有了一种方法,可以根据当前的误差来改进参数A,从而帮助我们确定直线的斜率。
简化多分类器
神经网络是由多个分类器共同组成的。尽管简单的分类器非常有用,但它并不能在所有情况下提供解决方案。
简单分类器的极限
我们将借助以下方法来研究简单分类器的局限性:布尔函数。布尔逻辑函数通常接受两个输入并产生一个输出。典型的布尔逻辑函数可以表示为:
逻辑与或
我们可以代表逻辑与和或函数具有输入A和B的真值表形式。
AND函数仅在A和B都为真时才为真
只要输入A或B中的任何一个为真,OR就为真
逻辑函数也可以以图形的形式表示,其中两个输入A和B作为图形上的坐标。 True输出显示为绿色,而False显示为红色。
我们甚至可以画出一条直线,作为一个线性分类器,将红色区域和绿色区域无缝地划分开来。这条分界线有许多不同的形式,但最主要的一点是,这种形式的简单线性分类器确实是可能的。Y=AX+b学习布尔值和/或功能。
异或门
XOR代表异或逻辑,只有当输入A或B中的任一输入为真时才有真正的输出。
在输入为坐标的情况下,绘制与上面相同的图,得到如下所示的图:
这似乎有一个问题,因为我们无法将绿色区域与红色区域分开,只有一条直线。事实上,似乎没有一条直线可以完成这项任务。因此,如果向一个简单的线性分类器提供由XOR函数控制的训练数据,则无法学习布尔XOR。这似乎是线性分类器的一个重大缺点,如果根本的问题不能用直线分离,它们就会变得多余。
什么是修正?
并不是所有的问题都是线性的。我们如何解决这些问题呢?如果在上面的例子中,我们用的不是一条直线,而是两条直线。这就像多个分类器一起工作一样,这也构成了神经网络的基本原理。
简化神经网络
神经网络只不过是许多分类器一起工作。但是,在讨论这个问题之前,让我们先了解一下动物大脑,它启发了神经网络方法。
神经元——神经网络的构造块
已经发现神经元通过沿轴突的树突将电信号从一端传递到另一端。信号穿过不同的神经元,这就是我们身体感知光、声音、疼痛等的方式。信号从神经系统的感觉神经元传递到我们的大脑,以引起所需的反应。
神经元的工作
神经元接收电输入并传输另一个电输入,准确地模拟分类器/预测器的工作方式。然而,神经元不能表示为线性函数。这仅仅是因为神经元不产生输入的线性函数的输出,而不像遵循方程的简单分类器或预测器:输出=(常量*输入)+(另一个常数)。
激活函数
人们已经发现,神经元不会立即行动,而只是在它们到达某一特定点时才会起作用。这主要是因为神经元不想让噪音和微小的信号通过。接收输入信号并产生输出信号但考虑某种阈值的函数称为激活函数。激活函数有很多种,但我们只讨论少数几种重要的激活函数。
阶跃函数
在阶跃函数中,对于低输入值,输出为零,一旦达到阈值输入,输出就会跳转。
STEP函数在创建二进制分类器时运行良好,我们需要对单个类说“是”或“否”。然而,在多分类器问题的情况下,它失败了。
Sigmoid函数
Sigmoid函数比阶跃函数平滑。它也被称为逻辑函数,它的公式为:
y = 1/(1+e^-x)
Sigmoid函数是非线性的,与阶跃函数不同,激活函数的输出始终在(0,1)范围内。Sigmoid函数是广泛应用,但他们处于不利地位。如果我们看一下Sigmoid图,我们会注意到,在函数的两端,Y值在变化X时变化不大。这意味着这些区域的斜率/坡度很小,这就导致了。“消失梯度”问题。这意味着由于梯度的最小值,网络学习得非常慢。尽管如此,Sigmoid仍然主要用于分类问题。
Tanh函数
Tanh函数只是Sigmoid函数的一个缩放版本,他们在原点上是对称的。Tanh函数范围从-1到1。它们的公式如下:
tanh(x)=2sigmoid(2x)-1
tanh(x)=2/(1+e^(-2x)) -1
Tanh函数的梯度比Sigmoid函数的梯度更陡,但也存在消失梯度问题。那么,我们如何在Sigmoid和Tanh之间做出选择呢?这取决于对梯度的要求。它也是一个非常流行和广泛使用的激活函数。
ReLU
ReLU或校正线性单元是最广泛使用的激活函数。它也是一个非线性函数,可以表示为:
f(x)=max(0,x)
与其他激活函数相比,使用relu函数的主要优点是它不同时激发所有神经元。这意味着一次只有少数神经元被激活,从而使网络变得易于管理。与Tanh和Sigmoid相比,relu的计算成本更低,因为它涉及到简单的数学运算,在设计深度神经网络时非常方便。
但是,渐变梯度问题也会影响RELU函数。
在概述了重要的激活函数之后,我们可以选择最适合当前问题的激活函数。然而,在本文中,为了简单起见,我将继续使用Sigmoid激活函数。
人工神经元的建模
在复习了基本知识之后,是时候从头开始模拟一个人工神经元了。通过本节,你不仅可以更好地理解神经网络,而且还将更好地了解它的复杂性和结构。
生物神经需要多个输入,而不仅仅是一个输入。由于我们有多个输入,一种逻辑方法是将它们加起来,并通过一个激活函数(例如Sigmoid函数),再反过来控制输出。
只有当输入的总和超过阈值时,神经元才会触发。
让我们来看一个典型的脑电信号传导的场景:
上图显示了几个相互关联的神经元。每个神经元一次接受来自多个神经元的输入并将信号输出到多个神经元。要将这一特征映射到人工模型中,需要绘制多层神经元,每一层都连接到前一层和下一层。
- 一种三层人工神经元模型
- 每一层依次有三个分别标记为1、2和3的节点。
- 每个节点都连接到上一层和下一层的节点。
我们可以通过调整节点间连接的强度来进行神经网络。节点可以表示如下:
我们可以通过以下方法来调整连接的强度:
- 改变输入之和的强度
- 通过调整激活函数的形状。
现在,让我们用与每个连接相关的权重表示相同的人工神经网络体系结构。权重是重要的参数,因为低权重抑制信号,而高权重则放大信号。
权重由W符号表示,表示法如下:
我们已经证明了每个节点连接到上一层和下一层的每一个其他节点。在学习阶段,如果不需要额外的连接,那么额外的连接就会被取消。
这意味着在训练阶段,当网络学习通过细化网络内部的链路权重来提高其输出时,一些权重变为零或接近于零。这意味着这些链路不会对网络做出贡献,因为信号不会通过。
结语
在本文中,我们学习了神经网络的构建块。我们从零开始创建了一个简单的预测器和分类器,并了解了它们是如何构成理解神经网络的基础的。我们还了解了神经网络在某种程度上是人脑的一种表现形式,并以同样的方式将其可视化。
原文标题《Demystifying Neural Networks: A Mathematical Approach (Part 1)》
作者:Parul Pandey
译者:lemon
本文转自: 云加社区,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。