Chapter 1.1 神经网络:一个可学习的函数
欢迎来到深度学习领域!在深入各类模型架构之前,不妨先回到原点,思考一个更为基础的问题:神经网络究竟是什么?
许多刚入门的学习者在初次接触深度学习时,往往会被激活函数、反向传播、梯度下降等概念弄得一头雾水,甚至将神经网络视为某种难以窥其全貌的黑箱。然而,如果我们暂时搁置这些具体的技术细节,就会发现神经网络的本质其实非常朴素——它仅仅是一个数学函数。与经典的机器学习模型类似,这个函数具备自适应调整的能力,其映射行为能够依据数据样本进行动态修正。
从宏观层面看,神经网络的运作逻辑无非是:获取输入信息,对其进行加工处理,然后产生输出。而所谓”学习”,便是在数据信号的引导下,让该函数持续地自我修正,直至能够胜任指定的任务。在本节中,我们将完全脱离编程框架和代码实现,仅从抽象概念层面入手,帮助你构建对神经网络的整体认知框架,为后续章节的深入探讨奠定根基。
1.1.1 从输入到输出:机器学习的核心是构造映射关系
要真正理解神经网络,我们需要先跳出”网络”这个具体形态,审视它所要解决的底层问题。事实上,绝大多数机器学习应用场景,本质上都可以归纳为同一个目标:
基于给定的输入,推导出我们期望的输出。
让我们通过几个典型的应用场景,来感性认识这种输入与输出之间的映射:
- 在图像分类中,输入为一张布偶猫的照片,输出为”布偶猫”这一类别标签;
- 在情感分析中,输入为”周末又要加班了”这句话,输出为”消极情感”;
- 在时间序列预测中,输入为过去一周的股票价格,输出为下一交易日的走势;
- 在机器翻译中,输入为法语句子”J’aime l’apprentissage profond”,输出为中文”我喜欢深度学习”。
这些应用表面上千差万别,但其底层逻辑却出奇一致:我们都需要发现一种转换规则,将原始输入数据转化为期望的输出结果。若用数学语言加以形式化,便是我们所熟知的函数:
\[ y = f(x) \]
其中 \(x\) 代表输入变量,\(y\) 代表输出变量,而 \(f\) 则是我们需要构建的映射规则,也就是通常所说的”模型”。
由此可见,机器学习的根本目标,在于寻找一个恰当的函数 \(f\),使其能够精确地完成从输入域到输出域的映射。而神经网络,正是实现这一目标的自动化手段之一。
1.1.2 为何常规函数难以胜任?
读到这里,你可能会产生疑问:既然核心在于寻找函数,那我们直接运用初等数学中的线性函数、多项式函数,或者简单的分段函数,不也能实现映射吗?为何还要大费周章地设计神经网络这样的复杂结构?
答案十分明确:真实世界中的映射关系,其复杂程度远超我们的想象。
对于某些简单场景,例如根据商品的单价和购买数量计算总价,一次线性函数 \(y = kx + b\) 便足以应对。但深度学习所面对的图像识别、语音处理、自然语言理解等任务,其输入与输出之间的关联是高度复杂的。一幅图像的类别判定,并非由单个像素点决定,而是取决于像素之间的空间布局、局部纹理结构、高层语义信息(例如犬类的尾巴形态、鸟类的喙部特征)等多种因素的协同作用;一段文字的情感极性,也不是由孤立词汇决定的,而是深受上下文语境、词语顺序、修辞手法乃至隐含语义的影响。
具体而言,这些复杂任务面临的核心障碍包括:
- 输入空间的维度极其庞大。例如,一张 \(224 \times 224\) 的 RGB 图像,其输入维度高达 \(150,528\);
- 输入与输出之间呈现强烈的非线性关系,难以用简单的线性模型进行刻画;
- 有效的模式具有层次性。以图像为例,底层边缘组合成简单形状,进而构成复杂物体;
- 规律分布高度分散。同一类任务的有效特征往往散布在海量数据之中,无法依赖人工方式进行提取。
在这种情况下,传统的简单函数显得捉襟见肘。它们至多能够拟合粗略的趋势,却无法精确描述这些深层次的模式与关联。因此,我们所需要的并非任意一个函数,而是一个表达能力充沛、结构灵活、能够拟合复杂映射的函数。神经网络,正是为了填补这一空白而被发明的。
1.1.3 神经网络的本质:带可训练参数的函数
让我们再次回到最初的问题:神经网络的精确含义是什么?
站在机器学习的核心视角来看,最为凝练且准确的概括是:
神经网络在本质上属于参数化函数的一类特殊形式。
所谓”参数化函数”,指的是该函数的具体行为(即映射规则)并非预先固化,而是由一组可调节的参数所支配。即便是完全相同的函数结构,只要参数取值不同,其展现的映射特性便会截然不同。
基于这一认识,我们可以将神经网络的函数形式进一步表述为:
\[ y = f(x; \theta) \]
这里的 \(\theta\) 表示神经网络的参数集合,它们共同决定了函数 \(f\) 如何处理输入 \(x\),以及最终生成怎样的输出 \(y\)。我们训练模型的过程,实质上就是不断迭代优化参数 \(\theta\) 的取值,使得函数 \(f\) 的输出逐渐逼近我们的预期目标。
在这个定义中,有三个核心概念需要深刻把握,它们是理解神经网络的关键所在:
- 函数属性:无论神经网络内部结构多么繁复,其本质依然是在执行从输入到输出的映射运算,与我们熟知的普通函数在抽象层面并无二致;
- 参数化特性:神经网络并非一套僵死的规则集合,而是一个内含自由参数的函数。参数的改变,直接导致函数行为的改变;
- 可学习性:这些参数无需人工逐一设定,而是能够借助数据驱动的方式自动调整。这正是神经网络具备学习能力的根本来源。
许多初学者容易陷入一种迷思,将神经网络等同于神经元的简单堆砌。然而,神经元的层级堆叠仅仅是其外在的组织形式,而参数化且可学习的函数才是其内在本质。抓住了这一本质,后续诸如反向传播、梯度下降等概念都将变得顺理成章。
1.1.4 “可学习”的真谛:参数的迭代寻优过程
我们反复提及神经网络是可学习的,但这种”可学习”究竟意味着什么?难道是模型像人类一样能够理解数据的内在含义、记忆抽象规则吗?
事实并非如此。神经网络的学习过程,本质上是一系列参数迭代寻优的数学操作,与人类的认知学习存在根本性的差异。我们可以借助一个生活化的比喻来理解这一机制:
将神经网络想象成一台带有旋钮的收音机,参数便是这些旋钮的刻度。初始状态下,我们随机旋转旋钮(参数随机初始化),此时收到的广播信号可能充满杂音(输出不准确);我们仔细聆听当前的播音内容(观察输出结果),并将其与我们想收听的频道(目标结果)进行对比,评估当前的调谐是否准确(计算误差);随后,依据偏差的大小和方向,小心翼翼地微调旋钮(更新参数);如此反复,直至收音机清晰地播放出目标频道的节目(输出准确)。
具体而言,神经网络的训练过程可以细化为以下五个阶段:
- 参数初始化:在训练启动之前,为参数 \(\theta\) 赋予随机初值。此时模型的输出通常是粗糙甚至毫无意义的;
- 前向推断:将输入样本 \(x\) 送入模型,依据当前参数计算得到预测输出 \(y\);
- 误差度量:将模型的预测输出 \(y\) 与真实的标签值进行比较,量化当前模型的表现优劣(这一步骤会用到后续章节介绍的损失函数);
- 参数更新:根据误差的梯度信息,沿降低误差的方向调整参数 \(\theta\) 的取值,使模型输出更接近期望目标;
- 循环迭代:重复执行步骤 2 至 4,直至模型的输出精度达到可接受的水平,参数的变动趋于稳定。
因此,神经网络的学习既非规则的灌输,也非概念的理解,而是通过参数的反复微调,使函数逐步逼近我们所期望的映射关系。这一视角至关重要。一旦从”函数”和”参数寻优”的角度审视神经网络,我们就能理解后续诸多概念的设计初衷:为何需要损失函数?因为要量化当前函数的优劣;为何需要反向传播?因为要确定参数的更新方向;为何优化是一个困难的问题?因为参数空间的高维特性使得全局最优难以寻觅。当然,如果你目前尚未完全领会这一过程,也无需焦虑,后续章节我们将结合具体实例和代码进行逐步演示。
1.1.5 缘何称为”网络”?从生物启发到人工结构
既然神经网络的本质是函数,那为何要以”网络”命名呢?这便涉及到它的历史渊源:其设计思路受到了生物神经系统的启发。
人类大脑中包含数以百亿计的神经元,每个神经元都会接收来自其他神经元传递的电化学信号,经过胞体内的整合处理后,再将信号传递给下游神经元。单个神经元的计算功能十分有限,但当海量神经元相互联结、构成错综复杂的网络时,便涌现出了感知、推理、记忆等高级认知功能。这便是生物神经网络。
人工神经网络(Artificial Neural Networks, ANNs)正是借鉴了生物神经网络的这种组织方式。它将大量简单的计算单元(类比于生物神经元)按照特定方式组织起来,使前一个单元的计算结果作为后一个单元的输入,从而形成一个相互连接的网络拓扑。
需要特别指出的是,人工神经网络仅仅吸收了生物神经网络的结构性思想,而并未复制其微观的工作机理。现代神经网络与真实大脑之间仍然存在巨大的鸿沟。“神经元”“连接”“激活”等术语,更多是历史传承下来的命名习惯,用于辅助我们直观地理解其结构。
对于初学者而言,与其纠结于人工网络与生物神经的细微差别,不如聚焦于”网络”这一概念的核心内涵:
它并非一个浑然一体的黑箱,而是由大量简单的变换单元通过连接关系组合而成的复合结构。
正因如此,我们习惯使用”层”(Layer)来描述神经网络。这些相互连接的计算单元按照功能阶段被组织成若干层次,输入数据依次流经各层,逐层进行变换,最终由输出层产生结果。这种分层架构,也是神经网络能够处理复杂任务的结构性基础。
1.1.6 深度的价值:信息的层级化处理
讨论完”层”之后,自然要谈一谈”深度”。
不少初学者会简单地认为,深度就是指神经网络的层数很多,但这只是表象。真正的”深度”,指的是神经网络能够通过多级连续的变换,将复杂的整体映射拆解为若干相对简单的子映射,从而实现信息的层级化处理。
简言之,深度的核心价值在于提供了一种层次化的信息组织机制。面对复杂任务时,我们不必要求模型一次性完成从原始输入到最终输出的跨越,而是可以让它分阶段逐步推进:靠前的层次负责提取基础、局部的初级特征,靠后的层次则在前层特征的基础上进行进一步的整合与抽象,形成更高阶的语义表示,最终完成复杂的映射任务。
以图像分类任务为例,一个深度神经网络的信息处理过程大致如下:
- 浅层网络(靠近输入端):主要负责检测图像中的初级视觉元素,如边缘轮廓、纹理图案、色彩分布;
- 中层网络(中间部分):将浅层提取的初级特征进行组合,形成具有语义意义的局部部件,如”猫的胡须”“鸟的翅膀”;
- 深层网络(靠近输出端):将中层形成的部件特征进一步融合,构建出对完整物体的整体认知,如”这是一只橘猫”“这是一只啄木鸟”。
从数学形式上看,一个多层神经网络可以表示为函数的复合:
\[ \hat{y} = f_L(f_{L-1}(\cdots f_2(f_1(x)) \cdots)) \]
其中,\(f_1, f_2, \dots, f_L\) 分别对应每一层的变换函数,\(L\) 代表网络的总层数(即深度)。随着层数的增加,模型能够逐步将原始输入数据转化为对当前任务更加友好的内部表征,从而更有效地完成复杂映射。
1.1.7 神经网络究竟学到了什么?
行文至此,你可能会好奇:当模型训练完成后,它究竟掌握了什么?是一套明确的判定规则,还是某种形式化的知识?
一个普遍的误解是,神经网络学到了类似”如果检测到 A 特征,就输出 B 类别”这样的显式条件规则。但实际上,神经网络最终获得的,并非一份罗列清晰的规则手册,而是:
一组在训练过程中优化得到的参数配置,以及由这组参数所定义的函数行为。
换言之,训练完毕后的模型内部,存储的并不是识别猫狗的人类可读规则,而是一套经过数值优化的参数 \(\theta\)。当新的输入样本(例如一张未曾见过的动物照片)传入模型时,网络会依据这套参数,自动执行输入变换、特征提取等一系列运算,最终输出分类结果。整个过程无需人工介入,模型也无需真正”理解”何为猫何为狗,纯粹是参数驱动下的数学运算与函数映射。
实际上,神经网络是将训练数据中蕴含的统计性规律,以参数数值的形式编码进了函数结构之中。例如,在动物图像的训练集中,“猫通常具有尖耳朵和圆瞳孔”这类统计关联,会被转化为网络中某些连接权重的特定取值。当新的图像中呈现出这些视觉特征时,模型便能够通过参数的作用,将其归类为猫而非狗。这也解释了为何神经网络偶尔会产生误判。比如,当一只兔子的照片在视觉上与猫具有高度相似性(尖耳朵、圆眼睛)时,模型可能会将其错误分类为猫。因为它学习的是基于参数的特征关联映射,而非对猫和兔子生物学本质的深刻理解。
B 站上有一个非常有趣的视频,名为《如何分辨柴犬和面包》,以幽默诙谐的方式展示了神经网络在图像识别中可能犯下的令人啼笑皆非的错误。对于人类而言,区分柴犬和新鲜出炉的面包轻而易举,但对神经网络来说这却可能是一项棘手的任务。感兴趣的读者可以点击下方链接观看。
深刻理解这一点,对于我们后续学习泛化能力、过拟合等核心概念至关重要。我们训练模型的终极目的,是让它掌握数据中蕴含的普适性规律,而非死记硬背训练样本本身。如果模型仅仅记住了训练数据的表面特征,而没有提炼出具有推广价值的通用模式,那么它在面对全新的、未曾见过的数据时将束手无策。这种现象,便是过拟合。
1.1.8 神经网络的通用能力:为何能横跨如此多样的任务?
既然神经网络的本质只是一个参数化函数,为何它能够在计算机视觉、语音识别、自然语言处理、推荐系统等领域遍地开花?
其根本原因可以用一句话概括:这些看似迥异的任务,都可以被抽象为从输入空间到输出空间的映射问题。
图像分类是像素矩阵到类别标签的映射,语音识别是声波信号到文字序列的映射,机器翻译是源语言序列到目标语言序列的映射,推荐系统是用户-物品特征到偏好概率的映射,诸如此类。无论任务的外在表现形式如何变化,其底层的数学逻辑始终相通。
神经网络的优势恰恰在于,它提供了一种通用且灵活的函数建模范式:它无需为每一个特定任务从零开始设计专属规则,仅仅通过调整内部参数,便能够适应不同任务的映射需求。更为关键的是,它特别擅长处理高维、非线性、关系错综复杂的映射,而这正是现实世界中绝大多数实际任务的共同特征。
当然,不同任务之间也存在差异性,因此需要不同的网络结构来适配。处理图像数据时,由于需要关注空间局部相关性,通常采用卷积神经网络;处理文本数据时,由于需要建模序列依赖和上下文关联,通常采用循环神经网络或基于注意力机制的架构;处理推荐场景时,由于需要刻画用户与物品之间的交互模式,通常采用因子分解机或深度协同过滤网络。
然而,这些差异仅体现在函数的具体构造形式上,并未改变神经网络作为可学习参数化函数的本质。只要一个任务能够被形式化为数据驱动的映射学习问题,神经网络就有可能成为解决该问题的有力工具。
1.1.9 本章小结
在本节中,我们将神经网络还原到了一个最为朴素的视角:它本质上就是一个数学函数。它接收输入,执行一系列计算,最终产生输出。无论是图像分类、情感分析还是机器翻译,这些应用虽然表面上差异巨大,但都可以被统一理解为从输入到输出的映射问题。
神经网络的独特之处在于,它并非一个固定僵化的函数,而是一个带有可训练参数的函数。参数决定了该函数的具体运作方式,而训练过程,就是依据数据反馈持续调整这些参数的过程。所谓的”深度”,也可以理解为模型通过多层变换,将原始输入逐步加工为对目标任务更加有利的内部表示。
不过,到目前为止,我们只是定性地描述了模型需要输出得更准确,但尚未给出衡量”准确”与否的具体标准。模型当前的输出与期望目标之间究竟存在多大的差距,这需要一个客观、可量化的评估指标。这个指标,便是下一节将要介绍的损失函数(Loss Function)——它用于量化模型预测值与真实值之间的偏差,是指导神经网络训练过程的核心组件。