AlphaGo来了!(三)_互动科普

使用社交账号登录

购买价格:
付款方式:

互动科普

主页 > 科普纵览 > 工程 • 技术

AlphaGo来了!(三)

黄铂钧  发表于 2018年05月21日

人工神经网络与深度学习

人工神经网络的历史其实比围棋软件还长,至少要追溯到50年前。当时学术界已经知道大脑是一个由大约1000亿个神经元细胞交织而成的神经网络,也已经有人提出单神经元的计算模型。这样,任何由这样的神经元组成的网状结构(我们的大脑)就可以看作是一个计算机。人工神经网络技术就是试图通过模拟这样一台“神经计算机”来完成指定计算任务。

神经计算机中,神经元的具体数学形式以及神经元之间的连接方式就是这台计算机的“程序”。当有数据输入到神经网络的输入节点时,既定的网络结构就会像“程序”一样推动信息在神经元之间以固定的方式流动,这样被处理后的数据从神经网络的输出节点输出,完成一次计算。这样,通过指定不同的网络结构和参数就能对神经网络进行“编程”,以完成不同的计算任务。不仅如此,数学上可以证明,任何一个普通软件程序能完成的计算任务,都有某个神经网络可以完成。也就是说,通过编写“神经网络程序”(也就是指定所需的神经网络的结构和参数)就可以实现通用计算。

不过人们很快发现,这样的“神经网络程序”虽然计算能力潜力巨大,在实用中却难以直接编程。这是因为,通过“指定一个网络结构”来编程的方式和我们人类“过程式”的思维大相径庭,绝大多数情况下我们根本想象不出那个所需要的“神经网络程序”到底长什么样。比如上面介绍的计算机下棋的基本算法框架,用“过程式”语言很容易描述和编程,然而虽然我们知道一定存在某个神经网络可以实现这个算法框架,但却很难精确描述应该用“哪一个”神经网络实现。

不过,上帝为你关上一扇门的同时也会为你打开一扇窗。相比传统软件,“神经网络程序”虽然难以直接编写,但却容易根据数据反馈进行“训练”和自我改进。由一条条指令组成的“过程式”程序固然对我们人类而言直观明了,但当程序输出有偏差时通常不能自我修正,而是需要人对程序进行分析之后才能找到应该改动哪里,如何改动。但“神经网络程序”在面对输出误差时却有一套既简单又通用的自动修正方法。在很大程度上这是因为神经网络模型具有更“连续光滑”的解析数学形式,因此可以直接通过基于导数的数值方法来增量优化。每完成一次计算,神经网络程序就可以通过比对输出误差来对自己进行一次微调,当观察了大量误差数据之后,这些微调累加起来,就有可能趋近一个误差很小的神经网络程序!

上面这些人工神经网络的特性大概在20世纪七八十年代的时候就已经很清楚了。当时人们甚至开始为这种既通用又兼具仿生和自适应优势的神经计算机开发专用硬件,称为“第六代计算机”。然而在随后的20年时间里,人工神经网络不但没有能取代传统“过程式”软件,连在“机器学习”程序(泛指像神经网络一样有根据数据反馈自调整能力的程序)这个子领域中都一度被边缘化。现在一般认为,上一波人工神经网络技术热潮的失败主要源于其自身训练方式的三个限制:1)网络模板限制。神经网络的适应能力并不保证它一定能“变成”我们想要的模样。比如一个有3个神经元的人工神经网络,无论怎么调整也不能变成4个神经元。实用中人工神经网络都是从一个初始“模板网络”开始训练的,这个初始模板的好坏直接关系到从理论上有没有可能得到所要的神经网络程序。2)训练算法限制。即使模板选好了,神经网络的训练算法也不保证会收敛到目标状态。神经网络中大量存在的非线性成分随时有可能使训练过程落入“局部最优陷阱”。3)数据/计算量限制。人工神经网络每得到一次数据反馈后,只沿“导数”方向微调一点点,因此复杂的大型神经网络往往需要极其大量的数据和计算资源才能逐步调整到理想状态。

大约从2010年前后开始,新一代神经网络兴起,掀起了一场轰轰烈烈的“深度学习运动”。这一次,人们找到一批新的神经网络模板,它们的共同特点是输入节点到输出节点之间的神经元层数更深,通常达到10层以上(之前一般只有3层),因此也叫“深度神经网络”。这些“更深”的网络模板允许表达语义更丰富的神经网络程序,同时,基于导数的简单训练方法仍然有效。同样关键的是,“大数据”和“云计算”,恰好把神经网络训练的数据量问题也解决了。

有意思的是,目前没有理论能解释为什么深度神经网络可以通过简单的训练技巧达到如此广泛的成就,可以说这个领域完全是试验导向的。但也正因此,这个技术的每一次成功都给我们带来惊喜。AlphaGo也是其中的一个。


(本文发表于《科学世界》2016年第4期)



全部评论

你的评论