机器学习(ML)(四) — 探析
介绍
几十年前,神经网络刚被发明时,最初的动机是编写能够模仿人类大脑或生物大脑学习和思考方式的软件。尽管如今,神经网络(有时也称为人工神经网络)已经变得与我们对大脑实际看法大不相同。一些生物学动机仍然保留在我们今天对人工神经网络或计算机神经网络的看法中。让我们先来看看大脑是如何工作的,以及它与神经网络的关系。人类大脑,或者更广泛地说,生物大脑表现出更高水平或更强大的智能,神经网络的初衷是试图构建软件来模仿大脑。
神经网络的研究始于20
世纪50
年代,后来一度失宠。然后在20
世纪80
年代和90
年代初期,它们再次受到欢迎,并在一些应用领域表现出巨大的吸引力,例如手写数字识别,当时甚至用于读取写邮件的邮政编码和手写支票上的美元数字。但随后在20
世纪90
年代末,它再次失宠。大约从2005
年开始,它再次复苏,并随着深度学习而重新焕发活力。当时惊讶的一件事是深度学习和神经网络的含义非常相似。但当时可能没有得到充分重视,深度学习这个术语听起来好多了,因为它是深度的学习。所以,在过去的十年或十五年里,深度学习成为了一个迅速发展的品牌。从那时起,神经网络就彻底改变了一个又一个应用领域。现代神经网络或深度学习产生巨大影响的第一个应用领域可能是语音识别,我们开始看到现代深度学习带来的更好的语音识别系统,[inaudible]
和Geoff Hinton
等人对此起到了重要作用,然后它开始进入计算机视觉领域。人们仍然会谈论2012
年的ImageNet
时刻,那也许是一个更大的轰动,当时[inaudible]
发挥了他们的想象力,对计算机视觉产生了巨大的影响。然后在接下来的几年里,它让我们进入了文本或自然语言处理领域等等。现在,神经网络被应用于从气候变化到医学成像到在线广告到产品推荐等各个领域,现在机器学习的许多应用领域都使用神经网络。尽管今天的神经网络与大脑的学习方式几乎没有任何关系,但早期的动机是尝试构建软件来模仿大脑。那么大脑是如何工作的呢?这是一张说明大脑中神经元的图表。
人类的所有思维都来自大脑中的神经元,它们发出电脉冲,有时还会与其他神经元形成新的连接。给定一个像这样的神经元,它有许多输入,从其他神经元接收电脉冲,然后圈出的这个神经元进行一些计算,然后通过电脉冲将这些输出发送给其他神经元,这个上层神经元的输出反过来又成为下层神经元的输入,这个神经元再次聚合来自多个其他神经元的输入,然后可能将其自己的输出发送给其他神经元,这就是人类思维的组成部分。这是生物神经元的简化图。神经元由左侧显示的细胞体组成,如果你上过生物学课,你可能会认出这是神经元的核心。神经元有不同的输入。在生物神经元中,输入线称为树突,然后它偶尔会通过输出线(称为轴突)向其他神经元发送电脉冲。这些电脉冲会成为另一个神经元的输入。因此,人工神经网络使用一个非常简化的数学模型来描述生物神经元的功能。神经元的作用是接受一些输入,一个或多个输入,这些输入只是数字。它进行一些计算并输出其他数字,然后这些数字可以作为第二个神经元的输入,如右图所示。当你构建人工神经网络或深度学习算法时,你通常希望同时模拟许多这样的神经元,而不是一次构建一个神经元。在这个图中,画了三个神经元。这些神经元共同的作用是输入一些数字,进行一些计算,然后输出一些其他数字。尽管对生物神经元和人工神经元进行了松散的类比,但我今天几乎不知道人类大脑是如何工作的。事实上,每隔几年,神经科学家就会在大脑的工作原理上取得一些根本性的突破。大脑的实际工作原理还有许多突破尚未发现,因此,试图盲目模仿今天对人类大脑的了解(坦率地说,了解的很少),可能不会让我们在构建原始智能方面走得那么远。以目前在神经科学方面的知识水平,肯定不行。话虽如此,即使有了这些极其简化的神经元模型,也能够构建真正强大的深度学习算法。因此,当你深入研究神经网络和深度学习时,即使其起源是受生物驱动的,也不要太在意生物驱动。事实上,这些从事深度学习研究的人已经不再过多地关注生物驱动。相反,他们只是使用工程原理来弄清楚如何构建更有效的算法。但我认为,不时推测和思考生物神经元的工作原理仍然很有趣。神经网络的概念已经存在了几十年。为什么神经网络直到最近几年才真正流行起来?在横轴上画出你拥有的用于问题的数据量,在纵轴上画出应用于该问题的学习算法的性能或准确性。
在过去的几十年里,随着互联网的兴起、手机的兴起、社会的数字化,我们为许多应用所拥有的数据量稳步向右发展。许多使用电子替代了纸质记录,例如,如果您订购了某样东西,而不是写在纸上,那么更有可能是数字记录。如果您去看医生,您的健康记录现在更有可能是数字的,而不是纸质的。因此,在许多应用领域,数据量呈爆炸式增长。我们看到,使用传统的机器学习算法,例如逻辑回归和线性回归,即使您为这些算法输入更多数据,也很难使其性能持续提高。因此,就像线性回归和逻辑回归等传统学习算法一样,它们无法随着我们现在可以输入的数据量而扩展,也无法有效地利用不同应用所拥有的这些数据。如果你在这个数据集上训练一个小型神经网络,那么它的性能可能看起来是这样的。如果你训练一个中型神经网络,也就是一个包含更多神经元的网络,它的性能可能看起来是那样的。如果你训练一个大型神经网络,也就是一个包含大量人工神经元的网络,那么对于某些应用来说,性能会不断提高。这意味着两件事,对于某些拥有大量数据的应用,有时你会听到大数据这个词,如果你能够训练一个非常大的神经网络来利用你拥有的大量数据,那么你就可以在语音识别、图像识别、自然语言处理应用等许多领域获得更好的性能,而这些是早期学习算法无法实现的。这导致深度学习算法的腾飞,这也是更快的计算机处理器(包括GPU
)兴起的原因。这种硬件最初设计用于生成美观的计算机图形,但后来发现它对深度学习也非常有用。这也是深度学习算法成为今天的样子的主要力量。这就是神经网络的起源,也是它们在过去几年中如此迅速发展的原因。
为了说明神经网络的工作原理,让我们从一个例子开始。使用一个需求预测的例子,在这个例子中,查看产品并尝试预测该产品是否会成为畅销产品?你正在销售T
恤,你想知道某件T
恤是否会成为畅销产品,并且收集了以不同价格出售的不同T
恤的数据,以及哪些T
恤成为畅销产品。如今,零售商使用这种类型的应用程序来规划更好的库存水平以及营销活动。如果你知道什么可能成为畅销产品,你会计划提前购买更多库存。在这个例子中,输入特征T
恤的价格,这是学习算法的输入。如果使用逻辑回归来将S
型函数拟合到这样的数据,那么预测输出看起来像这样T
恤成为畅销品的概率。
另一种理解神经元的方式是将其视为一台小型计算机,其唯一工作是输入一个或几个数字,例如价格,然后输出一个或几个其他数字,在本例中是T
恤成为畅销品的概率。逻辑回归算法比大脑中的任何生物神经元都简单得多。这就是为什么人工神经网络是人类大脑的一个极其简化的模型。尽管在实践中,深度学习算法确实非常有效。鉴于对单个神经元的这种描述,现在构建神经网络只需要取出一堆这些神经元并将它们连接在一起或将它们放在一起。举一个例子,我们将使用四个特征来预测T
恤是否是畅销品。这些特征包括T
恤的价格、运费、特定T
恤的营销量以及材料质量,这是高品质的厚棉布还是低质量的材料?现在,可能会怀疑T
恤是否成为畅销品实际上取决于几个因素。首先,这件T
恤的价格是否合理。其次,潜在买家对这件T
恤的认知程度如何?第三是感知质量偏见或潜在偏见,认为这是一件高品质的T
恤。创建一个人工神经元,估计这件T
恤被认为非常实惠的概率。价格实惠主要取决于价格和运费,因为总付款金额是价格加上运费的一部分。在这里使用一个小神经元,一个逻辑回归单元来输入价格和运费,并预测人们是否认为这是实惠的?其次,我将在这里创建另一个人工神经元来估计,人们对这件 T 恤的认知程度是否很高?在这种情况下,认知度主要取决于 T 恤的营销。最后,我们将创建另一个神经元来估计人们是否认为这是高质量的,这可能主要取决于T
恤的价格和材料质量。价格是一个因素,如果有一件价格非常高的T
恤,人们会认为它是高质量的,因为它非常昂贵,也许人们认为它会是高质量的。根据这些对可负担性、认知度和感知质量的估计,将这三个神经元的输出连接到右边的另一个神经元,然后是另一个逻辑回归单元。它最终输入这三个数字并输出这件T
恤成为畅销品的概率。在神经网络的术语中,把这三个神经元组合成一个层。层是一组神经元,它将相同或相似的特征作为输入,然后输出几个数字。左侧的三个神经元形成一层,这就是我将它们画在彼此之上的原因,而右侧的单个神经元也是一个层。左侧的层有三个神经元,因此一个层可以有多个神经元,也可以只有一个神经元,就像右侧这一层的情况一样。右侧这一层也称为输出层,因为这个最终神经元的输出是神经网络预测的输出概率。在神经网络术语中,把可负担性意识和感知质量称为激活。激活这个术语来自生物神经元,它指的是生物神经元向下游的其他神经元发送的输出值或电脉冲的程度。这些关于可负担性、意识和感知质量的数字是这一层中这三个神经元的激活,而且这个输出概率是右侧显示的这个神经元的激活。这个神经网络执行以下计算。它输入四个数字,然后神经网络的这一层使用这四个数字来计算新的数字,也称为激活值。然后最后一层,即神经网络的输出层使用这三个数字来计算一个数字。在神经网络中,这四个数字的列表也称为输入层,它只是一个四个数字的列表。现在,对这个神经网络做一个简化。按照目前为止必须一次检查一个神经元,并决定它要从前一层获取什么输入。例如,我们说可负担性只是价格和运费的函数,而知名度只是营销的函数,等等,但是如果你正在构建一个大型神经网络,那么手动决定哪些神经元应该将哪些特征作为输入将是一项艰巨的工作。神经网络在实践中的实现方式是某一层中的每个神经元;假设中间这一层可以访问前一层的每个特征和每个值,也就是输入层,如果试图预测可负担性,并且它知道价格、运费、营销和材料成本是多少,那么你可能会学会忽略营销和材料,只需通过适当设置参数来找出答案,只关注与可负担性最相关的特征子集。为了进一步简化这个神经网络的符号和描述,把这四个输入特征写成一个向量T
恤成为畅销品的概率。这就是神经网络的全部。
它有几个层,每个层输入一个向量并输出另一个向量。例如,中间的这个层输入四个数字2
个层称为输出层,输入层。为了给中间的层起个名字,中间的这个层称为隐藏层。在训练集中,可以观察T
恤的可负担性、知名度和感知质量作为输入,并使用这三个特征来估计T
恤成为畅销品的概率。这只是逻辑回归。但很酷的是,它不是使用原始特征,如价格、运费、营销等,而是使用可能更好的特征集,即可负担性、知名度和感知质量质量,希望这些特征能够更好地预测这件T
恤是否会成为畅销品。理解这种神经网络的一种方式就是逻辑回归。但作为逻辑回归的一个版本,它们可以学习自己的特征,从而更容易做出准确的预测。如果你想预测房子的价格,你可以取地块的正面或宽度,然后将其乘以地块的深度,以构建一个更复杂的特征,
请注意,尽管之前将这个神经网络描述为计算可负担性、意识和感知质量,但神经网络的一个非常好的特性是,当你从数据中训练它时,你不需要明确地决定神经网络应该计算哪些特征,比如可负担性等等,或者自己弄清楚它想要在这个隐藏层中使用哪些特征。这就是它如此强大的原因。这个神经网络有一个单层,即隐藏层。让我们看一些其他神经网络的例子。这个神经网络有一个输入特征向量x
,它被馈送到一个隐藏层。将其称为第一个隐藏层。如果这个隐藏层有三个神经元,它将输出一个包含三个激活值的向量。这三个数字可以输入到第二个隐藏层。如果第二个隐藏层有两个神经元到逻辑单元,那么第二个隐藏层将输出另一个包含两个激活值的向量,向量接着进入输出层,然后输出神经网络的最终预测。在一些文献中,您会看到这种具有多个层的神经网络,称为多层感知器。
如果您正在构建人脸识别应用程序,则可能需要训练一个神经网络,该神经网络将这样的图片作为输入,并输出图片中人物的身份。此图像为197
是图像最左上角像素的亮度,185
是像素的亮度,依此类推,直到214
是该图像的右下角。如果要把这些像素强度值展开成一个向量,你最终会得到一个包含一百万个像素强度值的列表或向量。一百万是因为
请注意,在此可视化中,第一个隐藏层的神经元显示为查看相对较小的窗口以寻找这些边缘。第二个隐藏层查看更大的窗口,第三个隐藏层查看更大的窗口。这些小神经元可视化实际上对应于图像中不同大小的区域。只是为了好玩,让我们看看如果你在不同的数据集上训练这个神经网络会发生什么,比如在很多汽车图片上,侧面的图片。同样的学习算法被要求检测汽车,然后会在第一层学习边缘。非常相似,但它们将学习在第二隐藏层检测汽车的部分,第三隐藏层学习更完整的汽车形状。只需输入不同的数据,神经网络就会自动学习检测完全不同的特征,从而尝试做出汽车检测或人脸识别的预测,或者是否有特定的给定任务需要训练。这就是神经网络在计算机视觉应用的工作原理。
神经网络模型
大多数神经网络的基本构建块是神经元层。让我们来看看神经元层是如何工作的。其中有四个输入特征,它们被设置为隐藏层中的三个神经元,然后将其输出发送到仅带有一个神经元的输出层。放大隐藏层以查看其计算。这个隐藏层输入四个数字,这四个数字是三个神经元中的的输入。这三个神经元中的每一个都只是实现一个小的逻辑回归单元。以第一个神经元为例。它有两个参数,T
恤的概率为0.7
。第三个神经元有第三组参数0.3、0.7
和0.2
,这三个数字的向量变成激活值向量1
来索引不同的层。具体来说,我将使用方括号 1
中的上标,这是表示该神经网络隐藏层第1
层的输出的符号,同样,这里的1
层第一个单元的参数而 1
层的第二个隐藏单元或第二个隐藏神经元的参数。同样,1
层隐藏单元的激活值。如果你看到上标方括号2
,它指的是与神经网络第2
层相关的量,其他层也是如此。神经网络第1
层的输出是这个激活向量2
层的输入。这个神经网络第2
层的计算是输出层。第2
层的输入是第1
层的输出,所以
因为输出层只有一个神经元,所以它的工作就是计算sigmoid
函数应用于2
中的上标来表示与该神经网络第2
层相关的数量,2
层相关的参数和激活值也可以定义为
接下来是最后一个步骤,可以选择执行或不执行,即二进制预测,1
或0
,这是畅销书吗?是或否?激活值0.5
。如果
每一层都输入一个数字向量,并对其应用一堆逻辑回归单元,然后计算另一个数字向量,然后将其从一层传递到另一层,直到您获得最终输出层的计算,即神经网络的预测。然后,可以将阈值设为0.5
,也可以不设为0.5
,以得出最终预测。
在复杂的神经网络示例中。该网络有四层,不包括输入层(也称为第0
层),其中第1、2
和3
层是隐藏层,第4
层是输出层,第0
层通常为输入层。按照惯例,当神经网络有四层时,包括输出层中的所有隐藏层,但不计算输入层。第三层也是最后一层隐藏层,接下来看看该层的计算。第3
层输入一个向量3
层从3
层相关的参数。第3
层第二个神经元的激活用
推理(前向传播)
使用手写数字识别作为一个激励示例。只区分手写数字0
和1
。所以这只是一个二元分类问题,我们将输入一个图像并进行分类,使用一个255
表示亮白色像素,0
表示黑色像素。不同的数字是黑色和白色之间的不同灰度。给定64
个输入特征,使用具有两个隐藏层的神经网络。第一层隐藏层有25
个神经元。第二层隐藏层有15
个神经元。最后是输出层,1
或0
的概率是多少?神经网络需要进行的一系列计算,从输入25
个单元。这就是为什么参数从0
层的激活,即15
个神经元,这就是为什么这里的参数从0.5
以得出二进制分类标签
TensorFlow实现
代码推理
TensorFlow
是实现深度学习算法的领先框架之一。当构建项目时,TensorFlow
实际上是我最常用的工具。另一个流行的工具是PyTorch
。让我们看看如何使用TensorFlow
实现推理代码。学习算法能否帮助优化烘焙过程中获得的咖啡豆的质量?烘焙咖啡时,您需要控制两个参数:加热生咖啡豆的温度和时间。我们创建了不同温度和不同持续时间的数据集,以及咖啡是否味道好的标签。这里200
摄氏度,持续17
分钟,如何在神经网络中进行推理,这种温度和持续时间设置是否会制作出好咖啡?我们将200
摄氏度和17
分钟。然后,将第1
层创建为第一个隐藏层,神经网络在该层中有3
个隐藏单元,使用激活函数,即S
型函数。密集是神经网络层的另一个名称。这里称为密集层,接下来,通过取第1
层(实际上是一个函数)并将此函数第1
层应用于1
层有三个单元。因此,为了便于说明,这里的2
层将是密集层
。现在它有一个单元,再次使用S
型激活函数,然后您可以通过将第2
层函数应用于从第1
层到0.8
。最后,如果您希望将其阈值设为0.5
,那么只需测试是否1
或0
(正或负交叉)。这就是使用TensorFlow
在神经网络中进行推理的方式。
1 | x = np.array([[200.0,17.0]]) |
TensorFlow中的数据
让我们先看看TensorFlow
如何表示数据。让我们从矩阵的示例开始。这是一个有x = np.array
,如下图所示。您会注意到[1、2、3]
是这个矩阵的第一行,[4、5、6]
是这个矩阵的第二行。然后这个左方括号将第一行和第二行组合在一起。这将x = np.array
,然后使用此处的语法将矩阵的这四行存储在变量x = np.array()
,即[[200, 17]]
。这样做会创建一个x = np.array()
,创建一个1
。此示例生成一个一维向量。因此,这只是一个没有行或列的一维数组。从技术上讲,这不是TensorFlow
,使用矩阵来表示数据。TensorFlow
的设计初衷是处理非常大的数据集,通过用矩阵而不是一维数组来表示数据,TensorFlow
的内部计算效率会更高一些。在这个数据集中,特征是17
分钟内温度达到200°C
。实际上是一个TensorFlow
表示这是一个浮点数的方式,意味着它是一个可以使用计算机中32
位内存表示的小数点的数字。
那么什么是张量呢?这里的张量是TensorFlow
团队创建的一种数据类型,用于高效地存储和执行矩阵计算。从技术上讲,张量比矩阵更通用一些。NumPy
和TensorFlow
表示矩阵的方式已经融入这些系统中。如果您想将NumPy
数组,您可以使用此函数a1.numpy
来实现。它将获取相同的数据并以NumPy
数组的形式返回,而不是TensorFlow
数组或TensorFlow
矩阵的形式。现在让我们看看第二层的激活输出是什么样子的。这是之前的代码,第2
层是一个密集层,有一个单元和S
形激活函数,a2
是通过将第2
层应用到0.8
。如果打印出TensorFlow
张量,只有一个元素0.8
。它是一个float32
小数点数字,占用计算机内存中的32
位。你可以使用a2.numpy()
将TensorFlow
张量转换为NumPy
矩阵。
构建神经网络
如果要进行前向传播,需要初始化数据TensorFlow
中构建神经网络的另一种方法,这与之前创建第一层和创建第二层的方法相同。但是不用手动获取数据并将其传递到第一层,然后从第一层获取激活并将其传递到第二层。我们可以告诉张量流,我们希望它获取第一层和第二层并将它们串联在一起以形成一个神经网络。这就是TensorFlow
中的顺序函数所做的。使用顺序框架,张量流可以做很多工作。假设有一个像左边这样的训练集。这是咖啡示例。然后,可以将训练数据作为输入numpy
数组中。这是一个[1,0,0,1]
,对应于四个训练示例。给定存储在矩阵model.compile()
。然后调用model.fit(x,y)
,告诉TensorFlow
使用由第一层和第二层顺序串联在一起创建的神经网络,并在数据NumPy
数组,那么如何进行前向传播呢?不必一层一层地进行前向传播,只需在model.predict()
。模型预测使用顺序函数编译的神经网络进行前向传播并进行推理。现在将这三行代码放在上面,进一步简化一下,也就是在TensorFlow
中编码时。不会明确将两层分配给两个变量,第一层和第二层如下。模型是串联在一起的几个层的顺序模型时,通常会编写这样的代码。顺序地,第一层是具有三个单元和S
型激活函数的密集层,第二层是具有一个单元的密集层,同样是一个S
型激活函数。而不是对这些第一层和第二层变量进行显式分配。这几乎是在TensorFlow
中训练和推理神经网络所需的代码。这就是在TensorFlow
中构建神经网络的方式。
1 | layer_1 = Dense(units = 3, activation = 'sigmoid') |
如果必须用Python
从头开始实现前向传播,你会怎么做,除了直观地了解TensorFlow
和PyTorch
等库之外。如果有一天你决定要构建比TensorFlow
和PyTorch
更好的神经网络。让我们看看如何在单层中实现前向传播,继续使用此处的咖啡烘焙模型。看看如何获取输入特征向量Python
实现中,使用一维 数组来表示所有这些向量和参数,这就是为什么这里只有一个方括号。这是Python
中的一维数组,而不是二维矩阵。需要计算x = np.array([200,17])
也是此处表达式w1_1 = np.array([1,2]),b1_1 = np.array([-1]),z1_1 = np.dot(w1_1,x) + b1_1,a1_1 = sigmoid(z1_1)
;w1_2 = np.array([-3,4]),b1_2 = np.array([1]),z1_2 = np.dot(w1_2,x) + b1_2,a1_2 = sigmoid(z1_2)
;同理w1_3 = np.array([5,-6]),b1_3 = np.array([2]),z1_3 = np.dot(w1_3,x) + b1_3,a1_3 = sigmoid(z1_3)
,你已经计算了这三个值,a1 = np.array([a1_1,a1_2,a1_3])
,这是第一层的输出。你可以使用 np
数组将它们组合在一起,接下来实现第二层。所以计算输出w2_1 = np.array([-7,8,9]),b2_1 = np.array([3]),z2_1 = np.dot(w2_1,x) + b2_1,a2_1 = sigmoid(z2_1)
,最后得出a2 = a2_1
,这就是仅使用Python
和NumPy
实现前向传播的方法。
如何在Python
中实现前向传播,但需要为每个神经元硬编码。可以编写一个函数来实现一个密集层,即神经网络的单层。将前一层的激活以及给定层中神经元的参数1
层有三个神经元,并且有参数W = np.array([[1,-3,5],[2,4,-6]])
,然后以类似的方式,参数b = np.array([-1,1,2])
。密集函数执行的操作将来自前一层的激活作为输入,这里的a_in = np.array([-2,4])
,如下所示。此函数执行的操作是将
1 | def dense(a_in,W,b): |
首先,units = W.shape[1]
。这里的3
。等于这一层中的单元数。查看a_out
初始化为一个零数组,元素数与单元数相同。在这个例子中,我们需要输出三个激活值,所以这只是将a_out
初始化为[0,0,0]。接下来,通过for
循环来计算a_out
的第一、第二和第三个元素。j
从零到单位数减一。。此命令w = W[:,j]
在Python
中提取矩阵第j
列的方法。第一次执行此循环时,这将提取w
的第一列,因此将提取z = np.dot(w,a_in) + b[j]
。然后计算激活a_out[j] = g(z)
将S
型函数应用于z
。最后返回a_out
。密集函数的作用是输入来自上一层的激活,并给定当前层的参数,返回下一层的激活。给定密集函数,可以按顺序将几个密集层串联在一起,以便在神经网络中实现前向传播。给定输入特征
1 | def sequential(x): |
AI感想
通用人工智能(AGI
)的梦想是什么样的?人们对通用人工智能(AGI
)有很多不必要的炒作。也许其中一个原因是人工智能实际上包括两个非常不同的东西。一个是ANI
,代表人工智能。这是一个只做一件事的人工智能系统,有时做得非常好,而且非常有价值,比如智能音箱、自动驾驶汽车或网络搜索,或者应用于农业或工厂等特定应用的人工智能。在过去几年里,ANI
取得了巨大的进步,它正在为当今世界创造巨大的价值。由于ANI
是人工智能的一个子集,ANI
的快速发展使得人工智能在过去十年中也取得了巨大的进步,这在逻辑上是真的。人工智能中有一个不同的想法,即通用人工智能(AGI
)。人们希望建立能够做任何人类能做的事情的人工智能系统。尽管ANI
取得了进展,ANI
的所有进展都让人们得出结论,人工智能取得了巨大的进步。但这也导致一些人得出结论:”人工智能取得了很大的进步,必然意味着AGI
也取得了很大的进步“。随着现代深度学习的兴起,我们开始模拟神经元,并且借助越来越快的计算机甚至GPU
模拟更多的神经元。事情并没有那么简单。这有两个原因:首先,我们正在构建的人工神经网络,它们非常简单,以至于逻辑回归单元与任何生物神经元所做的完全不同,它比大脑中的任何神经元所做的要简单得多。其次,即使到今天,几乎不知道大脑是如何工作的。关于神经元如何从输入映射到输出,今天仍然不知道一些基本问题。尝试在计算机中模拟这一点,更不用说单个逻辑函数,与人类大脑实际运作的精确模型相去甚远。鉴于现在以及可能在不久的将来对人类大脑运作方式的了解非常有限,我认为仅仅试图模拟人类大脑作为AGI
的途径将是一条极其困难的道路。
一些有趣的动物实验强烈表明,同一块生物脑组织可以完成令人惊讶的广泛任务。这导致了一个学习算法假设,即许多智能可能归因于一个或少数几个学习算法。如果我们能弄清楚那一个或少数几个算法是什么,我们也许有一天能够在计算机中实现它。这里显示的大脑部分是听觉皮层,大脑会根据耳朵检测到的声音,将耳朵发出的信号以电脉冲的形式传递给听觉皮层。事实证明,如果你重新连接动物的大脑,切断耳朵和听觉皮层之间的连接,转而将图像输入听觉皮层,那么听觉皮层就会学会看。所以大多数人学习看的大脑部分,当输入不同的数据时,它会学会看。另一个例子。大脑的这一部分是体感皮层,体感指的是触觉处理。如果重新连接大脑,切断触觉传感器与大脑该部分的连接,而是重新连接大脑以输入图像,然后体感皮层就会学会看。已经有一系列这样的实验表明,大脑的许多不同部分,仅仅取决于给定的数据,就可以学会看、学会感觉或学会听,就好像可能有一种算法,它仅仅取决于给定的数据,就可以学会相应地处理输入。有些系统可以将摄像头安装在某人的前额上,并将其映射到某人舌头上的网格电压模式上。通过将灰度图像映射到舌头上的电压模式,这可以帮助那些没有被引用的人学会用舌头看东西,或者他们一直在进行有趣的人类回声定位或人类声纳实验,海豚和蝙蝠等动物使用声纳来观察,研究人员发现,如果你训练人类发出咔哒声,并聆听这些声音在周围环境中反射的声音,人类有时可以学习一定程度的人类回声定位。有很多这样的实验表明,人类大脑具有惊人的适应能力,神经科学家说它具有惊人的可塑性,他们只是说它能够适应令人眼花缭乱的传感器输入范围,所以问题是,如果同一块大脑组织可以学会看、触摸、感觉甚至其他东西,那么用户的平均水平是多少?我们能否复制这种算法并在计算机中实现?即使到了今天,我仍然认为研究AGI
是有史以来最迷人的科学和工程问题之一。但是,我认为避免过度炒作很重要,不知道大脑是否真的由一种或少数几种算法组成?