|
本帖最后由 winter 于 2020-6-28 11:25 编辑
神经网络和深度学习
- 神经网络:一种可以通过观测数据使计算机学习的仿生语言范例
- 深度学习:一组强大的神经网络学习技术
神经网络和深度学习目前提供了针对图像识别,语音识别和自然语言处理领域诸多问题的最佳解决方案。传统的编程方法中,我们告诉计算机如何去做,将大问题划分为许多小问题,精确地定义了计算机很容易执行的任务。而神经网络不需要我们告诉计算机如何处理问题,而是通过从观测数据中学习,计算出他自己的解决方案。自动地从数据中学习看起来很有前途。然而直到2006年我们都不知道如何训练神经网络使得它比传统的方法更好,除了一些特定问题。直到2006年称为深度神经网络的学习技术被提出,这些技术现在被称为深度学习。它们得到了很好的发展,今天,深度神经网络和深度学习在计算机视觉、语音识别和自然语言处理等许多重要问题上取得了出色的表现。
初识神经网络
人类的视觉系统是世界上最棒的系统之一,比如下列一串手写数字:
大多数人都可以一眼看出它是504192。在我们大脑的每一个半球,都有主要的视觉皮质V1V1,它包含了1.4亿个神经元,在这些神经元之间有数百亿的接触。然而人类的视觉不仅仅包含了V1V1,而是一系列的视觉皮质V1,V2,V3,V4,V5V1,V2,V3,V4,V5,逐步进行更复杂的图像处理。我们大脑里有一台超级计算机,通过数亿年的进化,可以很好的适应这个视觉世界。识别手写数字并不容易,我们人类惊人地可以理解我们眼睛所看到的东西,但这些工作都是在我们不知不觉中就完成了,我们根本不知道我们大脑完成了多么负责的工作。
神经网络解决这类问题通过不一样的方式。思想是把大量的手写数字作为训练样本,然后生成一个可以通过训练样本学习的系统。换句话说,神经网络使用样本自动地推断出识别手写数字的规则。此外,通过增加训练样本的数量,该网络可以学到更多,并且更加准确。因此,当我展示下图100个训练样本时,可能我们可以通过使用成千上万甚至上亿的训练样本来建立一个更好的手写识别系统。
该文我们将写一个程序实现一个神经网络,学习如何识别手写数字。在不使用神经网络代码库的情况下,74行代码就可以完成。但是这短短的代码识别数字的准确率超过96%。此外,后面的文章我们将可以实现准确率高达99%的方法。事实上,最好的商业神经网络现在已经很好了,银行可以用它们来处理支票,并通过邮局来识别地址。
的确,如果这篇文章只是描述如何实现一个手写数字识别的代码,那么很短的篇幅就可以讲完。但是在这个过程中,我们会讲到许多神经网络的核心思想,包括两种重要类型的神经元(感知机和sigmoid神经元),和标准的神经网络的学习算法,被称为随机梯度下降法。整篇文章我致力于解释为什么这样做,并且建立你的神经网络观念。在本文的结尾,我们将了解深度学习是什么,和为什么它很重要。
感知机是一类人造神经元,在许多神经网络中,主要的神经元模型是sigmoid神经元。我们将很快的了解什么是sigmoid神经元,但是想要知道为什么sigmoid要这么定义,就需要我们花点时间去了解感知机。
感知机如何工作?一个感知机通过一些二进制的输入x1,x2,...x1,x2,...,然后产生一个二进制的输出:
在上图中,感知机有三个输入x1,x2,x3,通常它可以有更多或者更少的输入。Rosenblatt提出了一个简单的规则来计算输出,它用权重w1,w2...w1,w2...来表示各个输入对输出的重要性。神经元的输出,要么是0要么是1,由权重和∑jwjxj的值是否小于或者大于某一阈值。
和权重一样,阈值也是一个实数,它是神经元的一个参数。用代数式表达就是:
以上就是感知机的工作原理。
这是基本的数学模型,你可以认为感知机是一种通过权衡各个因素做出决定的设备。举个例子,假设周末就要来了,你们城市有一场奶酪节,你很喜欢奶酪,你正在犹豫要不要去参加,你可能通过权衡下面三个因素来做出你的决定:
1.当天天气怎么样
2.你的男朋友或者女朋友要不要一起去
3.交通是否方便
我们可以通过对应的二进制变量x1,x2,x3来表示这三个因素。比如,x1表示天气很好,x1=0表示天气很差,同样x2=1表示女朋友想去,以此类推。
现在,假设你真的非常喜欢奶酪,以至于你无论你女朋友去不去,或者交通十分不便,你都很想去。但是可能因为你又非常非常讨厌恶劣天气导致你绝对不会参加。这时你可以使用感知机来模拟这种决策。因为天气对你的影响最大,你可以选择w1=6来表示天气的权重,w2=2,w3=2来表示其他的因素,w1的权重最大表示天气因素对你影响最大。最后假设你选择了5作为阈值,这样以来,你的感知机决策模型就建立好了。也就是说这个模型在天气好的时候会输出1,天气不好的时候输出0,其实和其他两个因素没关系。
显然,人类的决策模型不仅仅只有感知机。但是这个例子说明了感知机如何做出决定的。一个复杂的感知机网络可以做出更加精准的决定似乎是合理的:
在这个网络中,第一列感知机——我们称作第一层感知机,通过权衡输入用来做三个很简单的决定。那么第二层的感知机是干什么的呢?这些感知机每一个都通过权衡第一层输出的结果作为输入而做决定。这样以来第二层的感知机可以比第一层做出更加复杂和抽象的决策。更复杂的决策可以在第三层做出。通过这种方式,一个第一层的感知机网络可以进行十分复杂的决策。
顺便说一下,我们定义的一个感知机都只有一个输出,上图的多层感知机看起来一个感知机有很多个输出,其实它只是把同一个输出传递给不同的下一层感知机用来利用,如果不嫌难看,你也可以先画一条输出线,然后再分支。
让我们简化一下感知机的描述方式,首先我们可以使用向量点积的方式代替∑jwjxj,即W⋅X=∑jwjxj,其中W和XW和X分别是权重值和输入值所组成的向量。其次,我们可以把阈值threshold移到不等式的另一边,即b=−threshold,其中b被称为感知机的偏差。通过偏差代替阈值,综上,感知机规则改写为:
你可以把偏差b看作衡量感知机输出1的难易程度。从生物学的角度来讲,偏差衡量一个感知机是否容易激活。如果偏差b是个很大的实数,那么该感知机就很容易输出1。显然,目前引入偏差让我们对感知机的描述只是产生了很小的改变,后面我们将会看到它导致的进一步简化。后文我们将不再使用阈值而是使用偏差。
|
|