Skip to content

人工神经网络

人工神经网络(Artificial Neural Networks,ANNs),通常简称神经网络,是受构成动物大脑的生物神经网络启发的计算系统。虽然这个概念并非新事物,可追溯到几十年前,但由于算法的进步、大型数据集的可用性以及计算能力(尤其是 GPU)的显著提升,它们的实际应用在 2010 年左右呈爆发式增长。

人工神经网络的基本组成单元是人工神经元(artificial neuron),也称为节点(node)或单元(unit)。它模仿生物神经元的工作方式,即通过树突(dendrites)接收信号,在细胞核(nucleus)中处理,并通过轴突(axon)发送输出信号。

一个简单的人工神经元模型接收一个或多个输入(代表来自其他神经元或外部数据的信号)。每个输入连接都有一个相关的权重(weight),表示其重要性。神经元计算其输入的加权和(weighted sum),并加上一个偏置项(bias term)。这个总和随后通过一个激活函数(activation function)或阈值函数(threshold function),由它决定神经元的输出信号。

想象一个简单的神经元决定是否“发放”(输出 1)或不发放(输出 0)。它可能会对其加权输入求和。如果总和超过某个阈值,它就发放;否则就不发放。这是一个基本的阶跃激活函数(step activation function)。更常用的激活函数包括:

  • Sigmoid: 产生一个 S 形曲线,输出值在 0 到 1 之间。适用于二分类的输出层。
  • Tanh(双曲正切): 类似于 Sigmoid,但输出值在 -1 到 1 之间。
  • ReLU(Rectified Linear Unit,修正线性单元): 如果输入为正,则直接输出输入;否则输出 0。由于计算效率高且能缓解梯度消失问题(vanishing gradient problem),在隐藏层中非常常见。
  • Leaky ReLU: ReLU 的一种变体,允许输入为负时有一个小的、非零的梯度。
  • Softmax: 常用于多分类的输出层,将得分转换为总和为 1 的概率。

一个神经网络由多层神经元组成:

  • 输入层(Input Layer): 接收网络的原始数据(特征)。
  • 隐藏层(Hidden Layers): 位于输入层和输出层之间的一层或多层。这些层执行中间计算,并学习数据的分层表示。一层中的神经元通常连接到下一层中的神经元。
  • 输出层(Output Layer): 产生网络的最终结果(例如,分类结果、回归值)。

神经元之间的连接由边(edges)表示,每条边都有一个相关的权重。这些权重是网络在训练期间学习的参数(parameters)。最初,权重通常被设置为小的随机值。

如果一个网络只有一个隐藏层(或者有时非常少),它通常被称为浅层神经网络(shallow neural network)。具有许多隐藏层的网络被称为深度神经网络(Deep Neural Networks,DNNs),它们构成了深度学习的基础。

在最常见的 ANN 类型——前馈神经网络(feedforward neural network)中,信息沿一个方向流动:从输入层,通过隐藏层,到达输出层,没有循环。将输入数据通过网络生成输出的过程称为前向传播(forward propagation)或前向计算(forward pass)。

在训练过程中,网络的输出与训练数据中的期望输出(ground truth,真实值)使用**损失函数(loss function)**或成本函数(cost function)进行比较。这个函数量化了预测与目标之间的误差或差异。

为了最小化这个误差,网络需要调整其权重和偏置。这通过一个优化过程实现,最常见的是涉及反向传播(backpropagation)和梯度下降(gradient descent)。

**反向传播(Backpropagation)**是一种算法,用于计算损失函数相对于网络中每个权重和偏置的梯度(gradient)。它通过使用微积分的链式法则(chain rule of calculus),将误差信号从输出层向输入层向后传播,从而实现。

**梯度下降(Gradient descent)**是一种优化算法,它使用这些计算出的梯度来更新权重和偏置。它迭代地沿着最有效降低损失函数的方向调整参数。可以想象成下山,总是沿着最陡峭的向下方向迈步,直到到达底部(最小损失)。

梯度下降有几种变体:

  • 批量梯度下降(Batch Gradient Descent): 在每一步中使用整个训练数据集计算梯度。
  • 随机梯度下降(Stochastic Gradient Descent,SGD): 使用单个训练样本计算出的梯度来更新参数。
  • 小批量梯度下降(Mini-Batch Gradient Descent): 一种折衷方法,使用一小批量训练样本来更新参数。这是最常用的方法。
  • 带有动量/自适应学习率的优化器(Optimizers with Momentum/Adaptive Learning Rates): 诸如 Adam、RMSprop 和 AdaGrad 等算法可以调整学习过程,使其比基本 SGD 收敛更快、更可靠。

训练神经网络,特别是深度神经网络,由于大量的参数以及在大数据集上进行前向和反向计算所需的计算量,计算密集度很高。正是这种计算挑战是神经网络直到强大 GPU 和优化库出现之前一直相对小众的主要原因。

虽然简单的 ANNs 在基础任务上的表现与 K-Nearest Neighbors 或 Support Vector Machines 等其他算法相当,但它们真正的强大之处在处理大型、复杂数据集时才显现出来,在这种情况下,它们可以学习其他模型难以捕捉的复杂模式和分层特征。