人工智能算法(卷3):深度学习和神经网络
上QQ阅读APP看书,第一时间看更新

1.1 神经元和层

大多数神经网络结构使用某种类型的神经元。存在许多结构不同的神经网络,程序员一直在引入实验性的神经网络结构。即便如此,也不可能涵盖所有的神经网络结构。但是,神经网络实现之间存在一些共性。如果一个算法被称为神经网络,那么它通常将由单独的、相互连接的单元组成,尽管这些单元可能被称为神经元,也可能未被称为神经元。实际上,神经网络处理单元的名称在不同的文献中有所不同,它可以被称为节点、神经元或单元。

图1-1展示了单个人工神经元的抽象结构。

图1-1 单个人工神经元的抽象结构

人工神经元从一个或多个来源接收输入,该来源可以是其他神经元,也可以是计算机程序提供给该网络的数据。输入通常是浮点数或二元值。通常将真(true)和假(false)表示为1和0,从而将二元值输入编码为浮点数。有时,程序还将二元值输入编码体现为双极性系统,即将真表示为1,假表示为−1。

人工神经元将每个输入乘以权重。然后,将这些乘积相加,并将和传递给激活函数。有些神经网络不使用激活函数。公式1-1总结了神经元的计算输出:

(1-1)

在公式1-1中,变量代表神经元的输入和权重。变量代表权重和输入的数量。输入的数量和权重的数量必须总是相同的。每个权重乘以其各自的输入,然后将这些乘积乘以一个激活函数,该函数由希腊字母φ(phi)表示。这个过程使神经元只有单个输出。

图1-1展示了只有一个构建块的结构。你可以将许多人工神经元链接在一起,构建人工神经网络。也可以将人工神经元视为构建块,将输入和输出圆圈视为连接块。图1-2展示了由3个神经元组成的简单人工神经网络。

图1-2 简单人工神经网络

图1-2展示了3个相互连接的神经元。这个图的本质是,图1-1减去一些输入,重复3次然后连接。它总共有4个输入和1个输出。神经元N1和N2的输出提供给N3,以产生输出O。为计算图1-2的输出,我们执行3次公式1-1。前两次计算N1和N2,第三次使用N1和N2的输出来计算N3。

神经网络通常不会显示到如图1-2那样的详细程度。为了简化该图,我们可以省略激活函数和中间输出。简化的人工神经网络如图1-3所示。

图1-3 简化的人工神经网络

在图1-3中,你会看到神经网络的两个附加组件。首先,考虑输入和输出,它们显示为抽象的虚线圆。输入和输出可以是更大的神经网络的一部分。但是,输入和输出通常是特殊类型的神经元,输入神经元从使用该神经网络的计算机程序接收数据,而输出神经元会将结果返回给程序。这种类型的神经元称为输入神经元和输出神经元。我们将在1.2.1小节中讨论这些神经元。

图1-3还展示了神经元的分层排列。输入神经元是第一层,N1和N2神经元创建了第二层,第三层包含N3,第四层包含O。尽管大多数神经网络将神经元排列成层,但并非总是如此。Stanley(2002)引入了一种神经网络架构,称为“增强拓扑神经进化”(NeuroEvolution of Augmenting Topologies,NEAT)。NEAT神经网络可以具有非常杂乱的非分层架构。

形成一层的神经元具有几个特征。首先,层中的每个神经元具有相同的激活函数。但是,不同的层可能具有不同的激活函数。其次,各层完全连接到下一层。换言之,一层中的每个神经元都与上一层中的每个神经元有连接。图1-3所示网络不是完全连接的,有几层缺少连接,如I1和N2不连接。图1-4所示神经网络是图1-3的新版本,它已完全连接,并多了一个神经元N4。

图1-4 完全连接的神经网络

在图1-4中,你可以看到一个完全连接的多层神经网络。神经网络总是有输入层和输出层。隐藏层的数量决定了神经网络结构的名称。图1-4中所示的神经网络是一个两层神经网络。大多数神经网络有0~2个隐藏层。除非你实现了深度学习策略,否则很少有具有两个以上隐藏层的神经网络。

你可能还会注意到,箭头始终从输入指向输出,向下或向前。这种类型的神经网络通常称为“前馈神经网络”。在本书的后面,我们将看到在神经元之间形成反向循环的循环神经网络。