据央视新闻客户端消息,瑞典皇家科学院当地时间10月8日宣布,将2024年诺贝尔物理学奖授予约翰·J·霍普菲尔德(John J. Hopfield)和杰弗里·E·辛顿(Geoffrey E. Hinton),表彰他们在使用人工神经网络进行机器学习的基础性发现和发明。两位获奖者从20世纪80年代起就开展了与物理学相关的人工神经网络的重要工作。他们将平分1100万瑞典克朗(约合745万元人民币)奖金。
从人工神经网络到深度学习
伴随数字化时代的到来,众多科学家和工程师从人脑中汲取了灵感,并想象由简单的神经元处理器所组成的大规模并行网络是如何从经验中学习和适应的。随着新的数学方法的发展,类似话题激起了人们的兴趣。1958年,弗兰克·罗森布拉特(Frank Rosenblatt)提出了一种名为感知器(Perceptron)的学习设备,该设备具有惊人的特性,可以经过手动编程来执行任何学习任务。当马文·明斯基(Marvin Minsky)和西蒙·派珀特(SeymourPapert)对上述设备进行仔细地分析后,发现该设备无论在理论上还是在实践中都存在编程局限性,人们便对该设备的研究失去了兴趣。
直到20世纪80年代后期,认知科学家大卫·鲁梅尔哈特(David Rumelhart)、杰弗里·辛顿( Geoffrey Hinton)和罗纳德·威廉斯(Ronald Williams)一起提出了一种称为反向传播的学习算法,该算法一度被认为可以克服明斯基和派珀特所确定的局限性。基于该算法的应用实例令人印象深刻,例如被称为NetTalk的文本语音转换系统,引起了业界对神经网络研究的另一次浪潮。然而,当该算法无法扩大规模以处理更复杂的问题时,人们又一次对该领域的研究感到沮丧。
在接下来的20年中,计算机的运算速度变得越来越快,数据集也越来越大,新的软件工具使得构建神经网络变得更加容易。伴随这些发展,建立更大规模的模型也变得可行。该研究领域被重新命名为深度学习,并且给新一代研究人员解决前所未有规模的建模问题带来曙光。尽管历史经验告诉我们深度学习的研究可能再次碰壁,但该领域的研究成果已证明它可以解决很多复杂、实用,具有深远影响力的问题。从语音控制助手到医学图像的人类专家级诊断,再到无人驾驶汽车,以及其他无数的后台应用程序,无不使我们的生活发生了深刻的改变。深度学习革命正在朝我们走来,有深度学习参与的未来也必将无与伦比。
什么是人工神经网络?
一个神经网络是一幅图。在计算机科学中,图是一系列的节点,普遍被画成圆形,由边(短线段)连接。这一抽象概念对于代表许多不同类型的关系很有用:城市之间的道路,社交媒体上谁认识谁,互联网的结构,或一系列基本的计算单元,可用于任何近似数学函数。
当然,最后一个例子是故意的。神经网络是通用的函数近似器。它们使用图形结构来表示一系列计算步骤,将输入特征向量映射到输出值。
从概念上讲,它们从左到右行动,沿边缘向节点传递数值,将输入特征向量映射到输出。注意,神经网络的节点通常被称为神经元。节点根据它们的输入计算出新的值。然后,新值被传递给下一层的节点,以此类推,直到到达输出节点。
就我个人而言,我对神经网络这个短语有种爱恨交加的感觉。这个短语本身来自一个事实,即在一个非常粗略的近似中,网络的基本单位类似于大脑中的神经元。
回顾我们对网络的可视化过程总是从左到右进行,我们看到节点(圆圈)接受来自左边的输入,并在右边有一个单一的输出。这里有两个输入,但也可能是数百个。
许多输入映射到一个单一的输出,呼应了大脑中神经元的工作方式:称为树突的结构接受来自许多其他神经元的输入,而单一轴突是输出。我喜欢这个比喻,因为它带来了一种谈论和思考网络很酷的方式。但我也讨厌这个比喻,因为这些人工神经元在操作上与真实的神经元有很大的不同,这个比喻很快就会失效。与实际的神经元在解剖学上有相似之处,但它们并不一样,这导致那些不熟悉机器学习的人感到困惑,使一些人认为计算机科学家真的在建造人工大脑或网络在思考。
现在回到图2,我们看到左边有两个方块、一堆线条、一个圆圈,右边有一条线,还有一堆带下标的标签。让我们把这个问题理清楚。如果我们理解了图2,就能很好地理解神经网络了。图2中的一切都集中在圆圈上。这就是实际的节点。实际上,它实现了一个叫作激活函数的数学函数,它计算了节点的输出,一个单一的数字。两个正方形是该节点的输入。这个节点接受来自输入特征向量的特征,我们用正方形来区别于圆形,但输入也可能来自前一个网络层中的另一组圆形节点。
每个输入是一个数字,一个单一的标量值,我们称之为x0和x1。这些输入沿着标有w0和w1的两条线段移动到节点。这些线段代表权重,即连接的强度。在计算上,输入(x0,x1)与权重(w0,w1)相乘,相加,然后交给节点的激活函数。这里我们称激活函数为h,这是一个相当常见的称呼。
激活函数的值是节点的输出。这里我们称这个输出为a。输入乘以权重,相加后交给激活函数,产生一个输出值。我们还没有提到b0值,它也被加入并传递给激活函数。这就是偏置项,用于调整输入范围,使其适合激活函数。在图2中,我们添加了一个零下标。每层的每个节点都有一个偏置值,所以这里的下标意味着这个节点是该层的第一个节点。
(记住,计算机人员总是从0开始计算,而不是从1开始。)
这就是神经网络节点所做的一切:一个神经网络节点接受多个输入x0,x1······将每个输入乘以一个权重值w0,w1······将这些乘积与偏置项b相加,并将这个和传递给激活函数h,以产生一个单一的标量输出值a。
就是这样。把一堆节点放在一起,适当地连接它们,想出如何训练它们来设置权重和偏差,你就有了一个有用的神经网络。
如何训练神经网络?
① 选择模型的结构。这意味着层的数量、它们的大小以及激活函数的类型。
② 使用智能选择的初始值初始化网络的权重和偏置。
③ 通过网络运行一小批次训练样本,并计算一小批次样本的平均损失。
④ 使用反向传播法,计算每个权重和偏置对小批次的总体损失的贡献。
⑤ 使用梯度下降法,根据通过反向传播发现的贡献,更新模型的权重和偏置值。
⑥ 从第3步开始重复,直到处理了所需数量的历时或小批次,或损失下降到某个阈值以下,或不再有太大变化,或验证样本集的得分达到最低值。
⑦ 如果网络学习效果不好,就应用正则化并再次训练。数据增强或增加训练集的大小或代表性,也可以被认为是正则化。
梯度下降、反向传播、损失函数、权重初始化,以及正则化,这些是成功的神经网络训练的主要组成部分。我们不需要理解复杂纷繁的数学细节,只需要从概念上理解它们,这样就可以建立一个直观的方法来了解训练神经网络的意义。有了这种直觉,我们就能有目的地利用sklearn和Keras提供的训练参数。
训练一个神经网络不是一件容易的事。但是一旦训练好了,它们的使用就很简单了:给它输入一个特征向量,就可以得到一个分类结果。
书名:Python深度学习实战
作者:(美)罗恩·克努斯
(Ronald T. Kneusel) 著
书号:9787122449603
出版时间:2024.08
定价:129.00
文章转自化学工业出版社