【神经网络】 之 神经网络基础(二)

【接上篇:https://blog.csdn.net/Aibiabcheng/article/details/106911064

5.有时候一个分类器不足以求解问题

前面的例子都是通过一个线性分类器成功分类的。此处,我们将使用一个简单而鲜明的实例,来说明线性分类器的局限性。

【逻辑运算:异或XOR

布尔逻辑函数通常需要两个输入,并输出一个答案。

计算机通常使用数字1表示真,使用数字0表示假。

输入A 输入B XOR
0 0 0
0 1 1
1 0 1
1 1 0

现在,观察这个函数的图,其中网格节点上的输出已经画上颜色了。

我们似乎不能只用一条单一的直线将红色区域和蓝色区域划分开来

事实上,对于布尔XOR函数而言,不可能使用一条单一的直线成功地将红色区域和蓝色区域划分开来。也就是说,如果出现的是由XOR函数支配的训练数据,那么一个简单的线性分类器无法学习到布尔XOR函数。

我们已经说明了简单的线性分类器的一个主要限制。因此,我们需要一种解决的办法。好在解决的办法很容易,下图使用两条直线对不同的区域进行划分。这暗示了一种解决的办法,也就是说,

我们可以使用多个分类器一起工作。这是神经网络的核心思想。

你可以想象,多条直线可以分离出异常形状的区域,对各个区域进行分类。

我们最后再简单总结一下。

  • 如果数据本身不是由单一线性过程支配,那么一个简单的线性分类器不能对数据进行划分。例如,由逻辑XOR运算符支配的数据说明了这一点。
  • 但是解决方案很容易,你只需要使用多个线性分类器来划分由单一直线无法分离的数据。

 

6.神经元——大自然的计算机器

虽然一些计算机拥有大量的电子计算元件、巨大的存储空间,并且这些计算机的运行频率比肉蓬蓬、软绵绵的生物大脑要
快得多,但是即使是像鸽子一样小的大脑,其能力也远远大于这些电子计算机,这使得科学家们对动物的大脑迷惑不解。

传统的计算机按照严格的串行顺序,相当准确具体地处理数据。对于这些冰冷坚硬的计算机而言,不存在模糊性或不确定性。而另一方面,动物的大脑表面上看起来以慢得多的节奏运行,却似乎以并行方式处理信号,模糊性是其计算的一种特征。

让我们来观察生物大脑中的基本单元——神经元

虽然神经元有各种形式,但是所有的神经元都是将电信号从一端传输到另一端,沿着轴突,将电信号从树突传到树突。然后,这些信号从一个神经元传递到另一个神经元。

生物的大脑要慢得多,并且比起现代计算机,其计算元件相对较少,但是为什么生物的大脑却有如此能力呢?大脑的全部功能(例如意识)仍是一个谜,但是关于神经元能够使用不同方式进行计算,也就是不同的求解问题的方式,人类掌握的知识已经足够我们使用了。

因此,我们来看看一个神经元是如何工作的。它接受了一个电输入,输出另一个电信号。这看起来,与我们先前所观察的分类或预测的机器一模一样,这些机器也是接受了一个输入,进行一些处理,然后弹出一个输出。

因此,我们可以与以前一样,将神经元表示为线性函数吗?虽然这是个好主意,但是不可以这样做。生物神经元与简单的线性函数不一样,不能简单地对输入做出的响应,生成输出。也就是说,它的输出不能采用这种形式:输出=(常数*输入)+(也许另一常数)。

观察表明,神经元不会立即反应,而是会抑制输入,直到输入增强,强大到可以触发输出。你可以这样认为,在产生输出之前,输入必须到达一个阈值。就像水在杯中——直到水装满了杯子,才可能溢出。

                

虽然这个函数接受了输入信号,产生了输出信号,但是我们要将某种称为激活函数的阈值考虑在内。在数学上,有许多激活函数可以达到这样的效果。一个简单的阶跃函数可以实现这种效果。

你可以看到,在输入值较小的情况下,输出为零。然而,一旦输入达到阈值,输出就一跃而起。

我们可以改进阶跃函数。下图所示的S形函数称为S函数(sigmoidfunction)。这个函数,比起冷冰冰、硬邦邦的阶跃函数要相对平滑,这使得这个函数更自然、更接近现实。

S函数,有时也称为逻辑函数:  y=\frac{1}{1+e^{-x}}

让我们回到神经元,并思考我们如何建模人工神经。

树突收集了电信号,将其组合形成更强的电信号。如果信号足够强,超过阈值,神经元就会发射信号,沿着轴突,到达终端,将信号传递给下一个神经元的树突。下图显示了使用这种方式连接的若干神经元。

需要注意的一点是,每个神经元接受来自其之前多个神经元的输入,并且如果神经元被激发了,它也同时提供信号给更多的神经元。将这种自然形式复制到人造模型的一种方法是,构建多层神经元,每一层中的神经元都与在其前后层的神经元互相连接。下图详细描述了这种思想。

你可以看到三层神经元,每一层有三个人工神经元或节点。你还可以看到每个节点都与前一层或后续层的其他每一个节点互相连接。

但是,这看起来很酷的体系架构,哪一部分能够执行学习功能呢?针对训练样本,我们应该如何调整做出反应呢?有没有和先前线性分类器中的斜率类似的参数供我们调整呢?

最明显的一点就是调整节点之间的连接强度。在一个节点内,我们可以调整输入的总和 或 S阈值函数的形状

但是比起简单地调整节点之间的连接强度,调整S阀值函数的形状要相对复杂

如果相对简单的方法可以工作,那么请坚持这种方法!下图再一次显示了连接的节点,但是这次在每个连接上显示了相关的权重。较小的权重将弱化信号,而较大的权重将放大信号。

此处,我需要解释一下权重符号旁边的有趣小数字(即下标)。简单说来,权重w_{2,3}与前一层节点2传递给下一层的节点3的信号相关联。因此,权重w_{1,2} 减小或放大节点1传递给下一层节点2的信号。为了详细说明这种思路,下图突出显示了第一层和第二层之间的两条连接。

你可能有充分的理由来挑战这种设计,质问为什么必须把前后层的每一个神经元与所有其他层的神经元互相连接,并且你甚至可以提出各种创造性的方式将这些神经元连接起来。我们不采用创造性的方式将神经元连接起来,原因有两点,

  • 第一是这种一致的完全连接形式事实上可以相对容易地编码成计算机指令,
  • 第二是神经网络的学习过程将会弱化这些实际上不需要的连接(也就是这些连接的权重将趋近于0),因此对于解决特定任务所需最小数量的连接冗余几个连接,也无伤大雅。

说起这个,我们的意思是什么呢?

这意味着,随着神经网络学习过程的进行,神经网络通过调整优化网络内部的链接权重改进输出,一些权重可能会变为零或接近于零。零或几乎为零的权重意味着这些链接对网络的贡献为零,因为没有传递信号。零权重意味着信号乘以零,结果得到零,因此这个链接实际上是被断开了.

最后我们还需要总结回顾一下。

  • 虽然比起现代计算机,生物大脑看起来存储空间少得多,运行速度比较慢,但是生物大脑却可以执行复杂的任务,如飞行、寻找食物、学习语言和逃避天敌。
  • 相比于传统的计算机系统,生物大脑对损坏和不完善信号具有难以置信的弹性。
  • 由互相连接的神经元组成的生物大脑是人工神经网络的灵感来源。我们由此建立起了简单的神经网络结构。

【参考资料】:Python神经网络编程~[英]塔里克·拉希德(Tariq Rashid)著,林赐 译.

猜你喜欢

转载自blog.csdn.net/Aibiabcheng/article/details/106990274
今日推荐