如何简单形象又有趣地弄懂神经网络是什么?

2,165 阅读12分钟

电脑和人脑,你觉得哪一个更强大?

在生活中你会经常发现许多人希望自己的大脑能像电脑一样,比如要是真有这机会能把自己改造成钢铁侠,他们会迫不及待地想抓住。

可是回过头看看过去几十年科学家们的研究,你会惊讶地发现,他们在一直努力让电脑更像人脑!怎么做到呢?借助神经网络——它是由几百个、几千个甚至几百万个人工脑细胞组成的计算机程序,能以与人脑极其相似的方式学习和运转。那么到底什么是神经网络?它们又是怎么工作的?我们更仔细的瞧一瞧!

电脑和人脑的区别在哪?

你会经常听到很多人拿人脑和电脑比来比去,乍一看,这俩确实也有些共同之处。一个正常的人类大脑中约有 1千亿个微小的细胞,称为神经元(没有人确切地知道人脑到底有多少个神经元,只是估计数量范围在 500 亿至 5 千亿之间),它是人脑基本的信号处理单元。

每个神经元都由一个细胞体(它是细胞的核心部分)、一些神经树突(脑细胞的输入部分,携带传往细胞体的信息)和轴突(脑细胞的输出部分,携带输出的信息)等三部分组成。神经元非常非常小,100个细胞体排列起来才1毫米长。

在计算机中,和脑细胞有个相同作用的纳米级的开关装置,叫做晶体管。最新式最先进的处理器中大约有 20 亿个晶体管,即时是一个很简单的处理器中也有大约 5 千万个晶体管,全都集成到一个仅 2.5 厘米大小的方形集成电路上,比邮票还小!

这就是为何不能将人脑和电脑直接详细比较,因为这二者完全不是同一种东西。不仅仅是因为电脑是个冷冰冰的装满二进制数值的金属盒子,而人脑却是鲜活的热乎乎的,充满了思维、感觉和回忆。真正的不同之处在于电脑和人脑的“思考”方式完全不同。电脑中的晶体管只是以一定的顺序相对简单地串联起来(每个晶体管都以基本的逻辑门电路和其它几个晶体管连接),而人脑中的神经元却是以无比复杂的方式并行相连(每一个神经元都可能与其上万个邻近神经元连接)。

电脑(几百万个晶体管以较简单的方式相连)和人脑(几百到几千亿个脑细胞以更复发的方式相连)这种本质结构的不同,使得它们以非常不同的方式“思考”。电脑能够很完美地存储大量无意义的信息(对于电脑本身来说),根据人们预先输入的精确指令(程序)以多种不同的方式重新整理这些信息。而人的大脑却是以更加迂回间接的方式缓慢学习,常常要花几个月甚至几年完全掌握一些复杂的东西。

但是,不像电脑,人脑能以惊人的全新方式自然而然地将信息融合在一起,识别原始模式,建立信息联系,以完全不同的视角看待事物,这就是贝多芬、莎士比亚等人类创造性的来源。

如果电脑也能像人脑这样,岂不是很好?有人说,「要有神经网络」。于是就有了神经网络。

什么是神经网络?

神经网络背后的基本理念就是在电脑内模拟(以一种简化但较为可信的方式复制人脑机制)密集相连的脑细胞,从而人们可以让电脑学习东西、识别模式、做出决定,就像人类一样。神经网络一个魅力之处就是,你不必为它编写程序去学习人类的指令:它能完全自主学习,就像人脑一样。

但是,它不是人脑。需要着重说明一点,神经网络(总体上)是一种软件模拟:它们由非常普通的电脑编写而成,以普通的晶体管及串联逻辑门在非常传统的方式下运行,但是却能够像几十亿个并行连接的脑细胞那样工作。还没人试过造一台电脑,把晶体管按照人脑那种复杂程度一样相互连接。换句话说,神经网络和人脑的不同就好比电脑天气模型和实际的云彩、雪花、阳光之间的不同。软件模拟只不过是一系列的代数变量,由数学方程将它们连接在一起(简单来说,就是一堆数字存放在了一个盒子里,数字的数值是不断变化的),它对于运行它的载体电脑本身来说,没有什么意义,只对编写它的人类而言才有意义。

真正的人工神经网络

在我们进一步谈谈神经网络之前,先了解一些术语。严格来讲,人们创造的神经网络叫做人工神经网络(即ANN),以和人脑中真正的神经网络相区分(由脑细胞连接成的网络)。你可能也会见过神经网络还以一些名字出现,比如联结式机器(该领域也叫联结主义),平行分散处理器(PDP),思考机器等,但本文我们会使用“神经网络”一词,用它指代“人工神经网络”。

神经网络由什么组成的?

一个典型的神经网络,由几个、上百个、上千个甚至几百万个称为“单元”的人工神经元构成,它们排列在一系列的层中,每个层之间彼此相连。其中一些神经元叫做“输入单元”,用来从外界接收各种各样的信息,神经网络会用这些信息进行学习、识别模式或进行其它的处理。还有些神经元位于神经网络的另一边,与“输入单元”方向相反,它们显示神经网络对信息的学习状况,那么这些神经元就叫做“输出单元”。在“输入单元”和“输出”单元之间还有一个或者很多个由“隐藏单元”构成的层,和“输入层”及“输出层”层一起形成神经网络。

大部分神经网络是完全连接的,意思就是,每个隐藏单元及输出单元都和另一边的层中的每个单元连接。一个单元和另一个单元之间的连接都以一个叫做“权重”的数字表示,它可以是正值(当一个单元激发另一个单元时),也可以是负值(当一个单元抑制或阻止另一个单元时)。权重值越高,意味着一个单元对另一个单元的影响越大(这和人脑细胞通过突触相互激发的原理一样)。

所以,一个神经网络由输入单元(下图红色),隐藏单元(下图蓝色)和输出单元(下图黄色)组成。输入单元所在的层为输入层,隐藏单元所在的层为隐藏层,输出单元所在的层为输出层。所有单元都和两边层里的单元连接。输入信息会首先进入左侧的输入层,然后激发中间的隐藏层,最后从右侧输出层输出结果。神经网络会通过学习渐渐调整每两个单元(神经元)连接的力度(权重)

神经网络是怎么学东西的?

信息通过两种方式穿过神经网络。当神经网络学习时(被训练时)或者正常运行(被训练后),信息模式会通过输入单元输入神经网络中,其中输入单元会激发隐藏单元,最后到达输出单元。这种设计的神经网络被称为“前馈网络”。并非所有的单元会一直“激活”。每个单元从其左侧的单元中接收输入信息,而输入信息会由单元之间连接的权重进行相乘。每个单元通过这种方式将它接收的所有输入信息进行加算,如果结果大于一个特定的阙值,那么单元就会“激活”,并激发和它连接的单元(在其右侧)。

谈到神经网络的学习,就要涉及到一个叫做“反馈”的东西。就像小孩子通过大人告诉他们做的是对还是错学习一样。实际上,我们会一直用到反馈。这里举个简单的例子,想想你头一回学踢足球的情形,你把球踢向球门,你的大脑会紧盯着球的走向和轨迹,注意球还差多少就能进球门了。下一次再踢的时候,你会记得之前犯过哪些错,相应地调整动作,希望这次能 make youself great again.

这里你就是用了反馈机制,即将实际结果和预期结果相比较,找出两者的不同之处,并借此改善下一次的行为(比如“我应该再踢的用力一点”“我应该再往左踢一点”等等)。预期结果和实际结果之间的差距越小,你下一次需要调整的幅度就越小。

神经网络正是通过这种方式学习,利用一种叫做“反向传播”的反馈机制,它由正向传播过程和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,神经网络的学习在权重值修改过程中完成。误差达到所期望值时,神经网络学习结束。

当然你也可以来这里体验一番。

就像上述举的你学踢球的例子一样,“反向传播”会让神经网络进行学习,不断缩小实际结果和预期结果之间的差别,这样神经网络会慢慢发现它应该怎么做才能达到预期效果。

神经网络在实际中怎么运作?

等用足够的学习样本训练完神经网络后,我们就可以给它一组它从未见过的新的输入信息,看它如何回应。例如,比方说你之前一直在教一个神经网络,以它能理解的方式给它看了很多桌子椅子的照片,告诉它哪个是椅子哪个是桌子。给它看完照片后(我们比方说有25个不同的椅子和25个不同的桌子的照片),给它输入一组它从未见过的新的照片,看看会发生什么。神经网络学习的情况不同,它对新样本分类的结果也会相同,就像人类一样。等这个神经网络的性能符合要求后,你就教会了一台电脑怎样识别家具!

这也并不是说神经网络只是“看看”一组家具照片,然后就做出有意义的反应,它的行事方式和人类还不一样。细想我们刚才举的例子:神经网络实际上看到的并不是家具照片。输入神经网络的信息本质上是二进制数字:它们会开启或关闭神经网络中的单元(神经元)。

所以如果你有 5 个输入单元,你可以用二进制答案(是/否)输入不同椅子的 5 个不同特征。比如问题是:

1. 它有椅背吗?

2. 它有桌面吗?

3. 它有软的坐垫吗?

4. 你能长时间舒服地坐在上面吗?

5. 你能在它上面放很多东西吗?

在这里,一个椅子就会表示为是、否、是、是、否,用二进制表示为 10110,那么一个桌子就可以表示为否、是、否、否、是,用二进制表示为 01001。所以,在学习过程中,神经网络就是查看很多像 10110 和 01001 这样的二进制数字,学习哪些表示是个椅子(可能输出结果为1),哪些表示是个桌子(可能输出结果为0)。

创造神经网络用来干嘛?

通过上面所讲的内容和所举例子,你或许会猜到神经网络可以应用在很多方面,从识别模式到做出决策。在航空领域,我们可以将神经网络用作自动驾驶仪,其输入单元从座舱仪表中读取信号和数据,输出单元会相应调整飞机,保证飞机在正确的航线飞行。在工厂中,我们可以将神经网络用于质量控制。比如,有家工厂通过大规模的复杂的化学处理过程生产洗衣液,我们可以测量出最终的洗衣液成分比例,将测量结果作为输入数据输入到神经网络中,然后神经网络就会决定是否进行化学处理。

此外还有很多应用例子,这里不再一一举例。总之,神经网络可以在很多方面帮助我们。它们可以帮我们预测天气、运转雷达探测系统自动识别敌方飞机或船只、甚至帮助医生发现复杂的疾病。我们现在使用的很多手机应用、语音助手、翻译软件都用到了神经网络。

一句话,神经网络让电脑越来越像人类,让电脑系统对人类的用处越来越大。

看到这里,相信应该能明白神经网络是怎么一回事了吧?我们将来还会分享 8 种常见的神经网络架构,敬请期待!