人工神经网络:原理与应用的简明指南
导言
人工智能的核心构成之一是人工神经网络,它把简单的算子组合起来,模拟人类认知过程以处理输入到输出的映射。本文以直观、可落地的方式,介绍最基础的神经网络原理、常用的优化思路,以及如何把理论落地为简单的实现。整篇仍以可理解的示例为主,帮助读者快速理解模型如何从输入得到期望输出,以及为何要使用梯度下降等优化技巧来提升性能。

为了让更多对 AI 感兴趣的读者受益,我们将内容分为两大部分:第一部分聚焦最简单的人工神经网络及其训练思路;第二部分讲解最基础的反向传播算法及其在多层网络中的实现要点。本文强调的是原理、过程和思路,避免陷入冗长的数据和商业承诺的描述。
人工神经网络是现代深度学习的基础之一。只有掌握扎实的基础,才能更好地理解和使用各类模型、工具与自动化工作流。
温馨提示:尽管文中会出现若干公式和步骤讲解,但核心思想清晰,耐心阅读即可理解。下面正式开始正文!
一、最简单的人工神经网络
通过理论和代码演示的简化神经网络,帮助读者直观理解输入、权重、输出之间的关系。

简单地说,输出值可以看作输入与权重的加权求和。网络的作用在于通过多个参数来模拟一个复杂的函数关系,从而在给定一组输入时得到预期的输出,而这些参数往往需要通过学习来确定。
设定一个包含两个输入值的网络,它们对应两个权重值。目标是调整权重,使网络输出接近预期值。初始权重常常设为简单的起点,这里为了演示将它们初始化为 1。

在这个初始化下,我们得到的误差值来自输出值与目标值之间的差距。通常我们会用一个损失函数来衡量整体误差,常见做法是对误差进行平方处理,以突出较大偏差并确保优化方向的稳定性。
若目标输出是某个具体值,我们通过误差来引导权重的调整,使网络逐步逼近目标。面对更复杂的输入输出组合,往往需要一个系统的学习算法来自动完成权重更新。
梯度下降
利用误差来引导权重更新,以达到误差最小化。首先需要理解梯度的含义:梯度是指向函数最大上升方向的向量,通常通过偏导数组成的向量来表示。
对一个简单的双变量函数,梯度指向输出值上升最快的方向。为了减小损失,我们沿梯度的反方向微小步长地更新权重,这个步长被称为学习率。
若学习率过大,可能错过最优解;若过小,学习过程会变得缓慢且易陷入局部最优。合理选择学习率是训练稳定性的关键之一。

在本示例中,我们需要计算两个权重相对于误差函数的梯度。通过对相关公式进行链式求导,我们可以得到更新的梯度表达式。得到梯度后,结合学习率即可更新权重值,如下所示:
后续重复该过程,直到误差收敛为止。
代码示例
附带的示例使用梯度下降法,将一个简单数据集训练成包含两个输入值和一个输出值的小型网络。训练成功后,网络在输入 [1, 1] 时应输出接近 0,在输入 [1, 0] 时输出接近 1。
如何运行?
Go 语言实现示例将数据集训练成期望输出的过程,读者可以将思路迁移到其他语言或框架中,直观看到权重在训练过程中的变化。请读者自行在本地环境按需执行。
二、最基础的反向传播算法
反向传播(Backpropagation,简称 BP)是把误差向网络中各层的权重进行逐层传递并更新的一种常用训练方法。它与优化算法(如梯度下降)结合,成为训练神经网络的基石。反向传播至少适用于具有隐藏层的网络结构。下面从理论出发,结合要点逐步讲解实现思路。
感知机概念
感知机是处理输入、应用激活函数并输出结果的基础处理单元。在一个神经网络中,某一层的输出来自前一层节点输出的加权和,再加上偏置项或其他常量项的组合。
激活函数的作用
若没有激活函数,网络中的每一层都会成为线性变换的堆叠,最终整个网络还是线性模型。为了让网络具备非线性拟合能力,必须引入非线性激活函数。
常见激活函数包括:Sigmoid、ReLU(线性整流)、tanh 等,各有不同的导数和数值特性,适用于不同场景。
前向传播概览
前向传播用于计算网络输出:输入层到输出层逐层进行加权求和并通过激活函数得到输出。
在隐藏层的节点输入通常来自前一层输出的加权和,并经过隐藏层的激活函数得到输出。输出层的激活函数则根据任务需求设定(例如回归常用恒等、分类常用 softmax 等)。
损失与反向传播
得到网络输出后,计算误差(如均方误差)。然后通过链式法则将误差反向传递,逐层计算梯度,更新权重以减小损失。对于不同层之间的权重,更新公式会涉及误差对权重的偏导数及相应的激活函数导数。
术语要点
本示例中,输入、隐藏和输出层分别交替使用恒等、Sigmoid、恒等等激活函数。为了避免过度复杂,示例中对某些层采用简化假设以便理解。
The forward pass
在前向传播阶段,我们对输入进行处理,逐层得到输出。在隐藏层的每个节点,输入等于前一层输出的加权总和,输出则由相关激活函数给出。
同样,输出层的输入值经过相应的激活函数后得到最终输出。若存在多组数据,损失通常以均方误差等方式聚合计算。
The backward pass
现在已经得到输出误差,可以通过反向传输来修正网络权重。权重的更新通常遵循梯度下降的思路,即权重更新量等于误差梯度乘以学习率,梯度通过对误差对权重的偏导数求得。
链式法则应用
通过链式求导,我们依次得到从输出层到隐藏层再到输入层的梯度表达式。对每一对连接,计算相应的梯度并累加,最后统一更新所有权重值。
计算要点
在本文示例中,对前向传播、反向传播以及权重更新的关键公式进行了简化处理,以帮助读者理解核心流程。具体的导数表达和更新公式可以在更完整的教学材料中逐步展开。
算法总结
1) 给权重一个初始的小随机值。2) 重复以下步骤,直到误差接近零:3) 进行前向传播,得到网络输出;4) 计算输出误差;5) 叠加计算输出层权重的梯度;6) 计算并叠加隐藏层权重的梯度;7) 更新所有权重并清空梯度累积,继续下一轮迭代。需要注意的是,具体实现中往往会结合批量梯度、正则化等技巧以提高稳定性和泛化能力。
图解反向传播
在示例中,我们通过对真实数据的模拟,展示输入、隐藏层和输出层在训练中的逐步变化。输入值为 [1.0, 1.0],期望输出为 [0.5]。为简化演示,初始权重设为 0.5,激活函数分别采用恒等、Sigmoid 和恒等,学习率设为 0.01。全过程的前向与反向传播过程如下所示:
FoRwaRd paSS
运算一开始,我们将输入层的节点输入设定为初始值。由于输入层采用恒等函数,输出即为输入本身。

随后,我们通过前一层的加权总和将网络向前传递到隐藏层,如下所示: