【白话AI】机器是如何模仿大脑学习的?(三)
神经网络
先回顾一下人工神经网络:
我们可以把这个神经网络看成一个分工明确的流水线,每个神经元代表这个工作组里的一个员工。每个员工负责从上一个员工手里获得半成品,再加工成下一个员工需要的半成品。
例如,一个生产一次性筷子的流水线可以被描述成:
树 => 采集木材 => 加工成筷子 => 清洁消毒 => 包装 => 一次性筷子
这里我们可以看到开始的树原材料被多次处理后,最终被加工成我们用的一次性筷子。负责每一个步骤的员工都不需要了解整个过程,他们只需要知道如何把给他们的东西转换成下一步需要的材料。神经网络的组织结构也是如此,只不过被加工的不是木材,而是数字信息。数字信息被输入到神经网络中,通过一层一层的转换,最终变成我们想要的信息。
上图是一个用于图像识别的深度神经网络。这些负责不同任务的神经元逐步从原始图片信息里面抽取出不同复杂程度的图形。每一个神经元都从上一层相对简单的图形里抽取出更复杂的图形。这个图像识别神经网络就这样从图片的基本像素中抽取出类似于对角线的基本图形,再由这些基本图形抽取出类似于脸的组成部分,然后由这些组成部分识别出如类似于猫的物体,最后完成图片识别。
训练神经元
可以解决问题的组织结构有了,接下来我们的问题是如何找到会干活的神经元。
在回答这个问题之前我们先来看看在现实生活中我们如何解决这个问题。当我们需要建立一个生产一次性筷子的流水线时,我们面临同样的问题,即招工的问题。通常情况下我们有两个选择:(1)招聘有经验的熟练工;(2)招聘新手+培训。同样的解决方案也适用于建立神经网络。我们可以选择别人训练好的神经元或者选择自己训练一些“没有经验”的神经元。(这里没有经验指的是神经元里的权重是随机设定的,没有任何意义)。
在现实生活中我们训练员工常用的办法就是入门培训+绩效考核。入门培训通常是教给工人基本的工作步骤,例如如何操作机器或者使用软件等。绩效考核则通常是先制定一个标准,然后再每隔一段时间再根据这个标准衡量员工的工作好坏,最后再根据这个考核结果给每个员工制定改进提高方案。
同样的办法也适用于训练神经网络。我们先给每个神经元进行“入门培训”,也就是制订神经元之间合作的方式。在前馈神经网络里,我们规定每个神经元把他们上一层的神经元输出的信息加上权重并汇总,然后再把这个汇总的信息加工以后输出给下一层(细节请参考上一篇《进击的神经元》)。有了这些“入门培训”以后,理论上我们的神经网络就可以开始工作了。通过这个步骤我们实际上是定义这个神经网络的基本数学公式,也就是定义了整个神经网络所能达到的最大潜力。当然,要想达到这个最大潜力,我们需要先训练这个神经网络里的神经元来提高它们的效率。
在训练前,我们需要给神经网络制定一个训练目标或者说一个考核标准。这个考核标准需要完成两个任务:
(1)定义神经网络的工作目标
(2)给每个神经元提供反馈,使其提高工作效率
最常见的训练神经网络的训练标准就是平均误差。假如我们的神经网络是用来估算未来股票价格的,这个神经网络的平均误差就是我们的神经网络预测的股价和实际股价之间的差值的平均数。为了计算简单,在实际训练中我们通常采用平均误差的变种:均方误差。
在这个公式中,下面的部分就代表神经网络输出结果的误差。
我们通常称这个训练标准为损失公式或者成本公式。这个公式输出的结果越低,也就代表着我们的神经网络计算的结果越准确,所以我们训练神经网络的最终目的就是尽可能的让这个损失公式输出更小的值。
下面我们一起看看机器学习是如何根据这个损失公式来给每个神经元提供反馈并提高他们的工作效率的。
梯度下降
相信大家高中的时候都做过求最优解的数学题,例如,给定一个数学公式然后寻找一个 x 使这个公式输出最小值。同样的,训练神经元其实就是给神经元的权重找最优解的过程。假如我们的损失公式是下图中的二次方程,并且一开始神经元的权重 x 是0.1的话,训练这个神经元的过程就是使x的值逐渐逼近2的过程。当 x 等于2的时候,我们的损失公式就达到了它的最小值3.2,也就意味着这个神经网络在这个训练中达到了最佳性能。
我们再来看一个复杂一点的例子:
假设这里J(w0, w1)代表神经网络的损失函数(图中的彩色部分),并且w0和w1分别代表我们神经网络里面的两个神经元的权重,那么训练的目标是要让这个损失函数输出尽可能小的数,也就是更接近图上的蓝色区域。在训练开始的时候,我们可能处于任何一个点上。假设我们从图上的 + 点开始,通过计算损失函数的导数可以知道向哪个方向走可以更接近蓝色区域,这个“方向”就是给w0和w1和的反馈。把w0和w1向这个方向移动,损失公式的输出值就越低,这也同时意味着提高了w0和w1的神经元的工作效率。通过重复“计算损失=>寻找方向=>反馈给神经元”的这个过程,我们可以一点一店的向图上的蓝色点移动,这个逐步向低点移动的过程也就可以看作是训练神经网络的过程。
如果我们把这个图上下颠倒过来看,整个训练的过程非常像蒙着眼睛登山的过程。山的地貌可以看作成神经网络的损失函数,寻找山的最高点的过程就是训练提高神经网络性能的过程。一开始我们处于山的某个角落,蒙着眼睛,只知道登上山的顶峰才是逃出这里的办法。由于看不到,我们只能靠试探周围来判断哪边是朝山上走,然后朝这个方向迈出一小步,一点一点向山顶前进。这个试探的过程就相当于寻找更优解的过程,而朝着山顶迈步的过程就可以被理解为训练神经元的过程。
在机器学习的术语中, 这个一点一点根据损失函数训练神经网络的方式就叫做梯度下降。
尽管这个后面的数学公式和专业名词很复杂,但是我们可以看出整个神经网络训练背后的思想和我们训练流水线上的工人的方式并没有本质上的不同。无非就是制定训练目标,然后重复“训练,反馈,改进”的过程。也正是因为这个过程的普适性,这个训练神经网络的技术才被广泛的采用于各种机器学习当中,从根本上推进了深度学习的发展和广泛普及。
“机器是如何模仿大脑学习的”——系列:终
© 版权声明:本文首发自本人微信公共帐号:思故是(sikaoguwozai);无需授权即可转载,但转载时请务必注明作者 。