大模型LLMs组件系列:全连接网络FCN与典型代表MLP
💡 大模型组件系列中的Tokenization、Embedding以及Attention模块已经完成编写工作。后续的部分相对来说较为容易撰写,并且篇幅较短。本文将重点介绍大模型Transformer架构中Attention机制之后的全连接层(Fully Connected Network, FCN),并从其两种核心形式——Perception(感知)与MLP(多层感知机)入手探讨基础神经网络原理。具体包括线性结构的局限性分析、BP算法的工作原理以及深度网络中的BP问题等基本概念。此外还会提及大模型中全连接层的一些变体形式(毕竟Attention机制本身已经衍生出多种不同的变体)。写作过程中始终坚持循序渐进的技术发展史视角,在阐述每项技术时都会强调其发展背景与内在逻辑关系。
0 前言
如果你也疑惑:大模型中Attention模块后的模块到底叫全连接网络FCN,多层感知机MLP,还是前馈网络FNN,怎么不同大模型工程文件里对这层的命名都不统一?这个层和线性层有什么区别?这个模块有什么作用?激活函数又出现在大模型中哪里呢?混合专家MoE是怎么实现的?那么这篇文章就是为你而写的。在开始前,先声明,本文的主角是全连接神经网络,在此罗列一下全连接神经网络相关的历史事件:
- 1958年, 人类首个具备学习能力的人工神经网络Perception感知机在...领域中首次推出。
- 1960年, 维德罗Widrow首次提出Delta学习规则(最小均方误差LMS, 同时也称为最小二乘法), 并将其用于训练感知机。
- 1969年之后, 在解决非线性问题方面遇到瓶颈。
- 1974年, 伟博斯Werbos正式地提出多层感知机模型MLP (Multi-Layer Perceptron), 这一理论突破了解决非线性问题的技术限制。
- 1981年, 多层感知机模型MLP被正式提出, 并逐渐成为神经网络研究的核心方向之一。
- 1986年, Rumelhart,Hinton以及Williams等人在《Nature》杂志上重新提出了Backpropagation算法理论框架, 并将其应用于多参数优化问题的研究中。
本文将采用以下结构进行阐述:首先对全连接网络FCN的概念进行阐述,并深入探讨其理论基础;接着围绕FCN的早期形态——Perception模块展开讨论,并分析其局限性;随后重点阐述多层感知机(MLP)的工作原理及其在训练过程中遇到的问题;最后探讨大模型框架中MLP的作用及其主要变体类型(包括混合注意力机制MoE的核心技术)。
1 全连接网络FCN:神经网络的元老与基础设施
1.1 概念厘清:Transformer Blocks中的全连接模块
在《AI简史:深度学习时代》这篇文章的开篇部分中提到了一个神经网络分类结构,在这一设计中不仅能够解答第一组相关问题,并且能够解答几乎涵盖了所有关于网络结构定位的问题。为了保持行文的连贯性和逻辑性,在介绍这一核心概念时需要重点阐述其理论基础。基于数据流是否存在循环路径进行分类,在所有非复合型神经网络模型中可以将其划分为两大类:一类是具有循环数据流特征的模型架构类型
- 前馈型人工神经网络 (Feedforward Artificial Neural Network, FFAN)
- 深度全连接人工神经网络 (Fully Connected Artificial Neural Network, FCANN)
-
单隐含层数人工神经网络 (Single-Layer Perceptron, SLPP):仅包含输入与输出两层层(共计两层数)、每层层均只有一个神经元节点;该模型未引入任何非线性转换器
-
感知机模型 (Perception Model):仅包含输入与输出两层层(共计两层数)、每层层均只有一个神经元节点;该模型引入了非线性转换器
-
多隐含层数人工 neural 网络 (Multi-Layer Perceptron, MLP):由输入、中间以及输出三层构成(至少三层以上);其中每一层次均含有多个节点;在这一模型架构中,默认情况下各层次间的转换关系均为非线性转换器作用;但最后一隐含层数对应的输出层面是否应用非线性转换器,则取决于具体问题设定
- 卷积神经网络 (Convolutional Neural Network, CNN)
-
反馈网络 (Feedback Neural Network):如RNN等
-
为了强调非复合 结构的重要性,在排除基于Transformer的整体架构的迭代情况的前提下(因为该架构本质上还是前馈的),即在每个token生成过程中数据流动是单向的,并没有反馈机制参与;而复合架构层面的控制逻辑则决定了需要生成多少个token。在大模型Transformer Block中选择命名时,默认三个层次概念都适用:上层关注点、中间概念以及下层关注点;但若追求精确性,则建议采用"多层感知机MLP"这一名称更为贴切(因为其包含了输入层、隐藏层与输出层三个层级结构)。就目前主流模型而言:每个大模型都会包含一个单隐层MLP模块(具体结构为输入-隐藏-输出三层神经元组+激活函数处理),而随着技术的发展也出现了多种变体形式;这些变体设计均与一种独特的机制紧密相关——即所谓的**Gated Linear Units (GLU)**门控线性单元结构(具体内容将在后续章节详细阐述)。

1.2 全连接神经网络的地位:百搭元老
全连接神经网络的构造与全组合架构是人类对人工神经网络(ANN)最初的设想,并且这一构想与线性方程组、线性代数以及矩阵论等相关联。Perception感知机作为人类历史上首个可学习的人工神经网络模型,则是由一个线性神经网络层与一个阶跃激活函数构成;而受Perception单层局限的影响,在首次寒冬期间以及随后发展的深度神经网络体系中均提出了新的研究方向;BP反向传播算法最初则是在多层感知机MLP模型中被实现应用的一种算法。全连接神经网络以其简洁实用且富有创意美感的特点,在连接主义领域中被视为至高无上的光辉象征。
在前馈网络与全连接神经网络这一层级中,在其基础架构则由大模型等众多神经网络组成。值得注意的是,在这一层级中还存在一种特定的组织形式即线性结构与卷积结构并列为人工神经网络的两大核心功能模块。其中构成深度学习模型基础的核心组件为权重矩阵而在线性层中这一概念则得到了更为直接的体现
- Transformer :
- 头部词嵌入Embedding层:一个词表维度*嵌入维度的线性神经网络层
- Transformer Blocks堆叠:
- Attention中:QKV(O)投影矩阵
- MLP中:核心就是两三个线性层加激活函数
末层分类器:lm_head(一种逆向设计的线性神经网络层,其嵌入维度与词表维度呈乘积关系)
-
RNN :
- 如LSTM本质就是对多个权重矩阵(线性层)和激活层的巧妙组合
-
CNN :
-
然而,在CNN中使用的卷积和池化操作虽然不是线性层本身,在许多场景中仍然广泛应用于使用线性层作为尾部分类器的基础结构。
2 线性网络结构与局限:M-P模型到Perception感知机
之前的相关报道中提到,在人工智能发展史的相关报道中
2.1 单层感知机Perception与理想阶跃函数

如图所示为感知机Perception架构的核心组成部分,在其设计中基于阈值的逻辑单元M-P实现了对生物神经元行为模式的抽象处理过程(其中涉及连接权重[weights]、阈值[bias]以及激活函数[activate]等关键参数)。值得注意的是尽管该系统被称为神经网络系统但由于可学习的部分并非生物神经元本身而是其连接(正负及大小)两大部分从整体结构上可以将其划分为以下几大组成部分:
-
输入层神经元由n个前层神经元的输出x_1, ..., x_n或初始信号组成。
-
神经元之间的连接通过一组可学习权重(w_1, ..., w_n)进行调节。
-
其数值大小直接反映连接强度。
-
正负号则分别对应兴奋性与抑制性。
-
输出层 * 累积:膜电位的变化累积主要由各权重之和决定
-
偏移量:累积门槛值决定了神经元是否达到兴奋阈限以产生电信号
-
激发性通路建立:每次兴奋性通路建立时都会释放固定强度的信号,并且其释放强度仅与当前膜电位的变化幅度相关联。为了将各权重之和归一化处理并限制在合理范围内, 我们采用了数学函数 f(·)来进行归一化处理。
总体来说,最初的Perception感知机设计了一个单一的学习层架构,在输入与输出端采用了布尔值形式(通过累积操作转换为0至1范围)。该模型主要用于解决二分类问题;值得注意的是,在这一设计中所采用的阶跃激活函数具有独特性:
- 在神经生物学领域中广泛认可的一种符合神经元特性的激活方式是阶跃函数,在这种机制下会呈现一个恒定值(即常数值),但在神经网络计算系统特别是反向传播算法中并不被视为最佳选择
- 该方法通过将输入信号映射至0或1两个离散值来实现信息传递的过程是一种典型的非线性运算过程,在此过程中当输入达到特定阈值时会引发突变式的状态转换
- 然而,在Perception模型的整体架构中仍呈现出完全的线性特征
- 换句话说,在这样的情况下要想使人工神经网络能够实现对复杂模式的学习就必须依赖于具备连续可微性质的激活函数
- 而由于感知机模型本身不具备任何隐含层结构因此无法通过多层叠加的方式来实现对复杂模式的学习任务

2.2 学习原理:感知机学习规则
1960年时开发出一种用于训练Perception自动学习的算法;其核心在于损失(误差)delta及其权重更新规则的设计。即其工作原理如下:学习信号(表示需要调整的程度及其方向)等于期望输出(教师信号或标签)与实际输出之间的差异程度;代码实现见下文:
def _update_weights(self, input_vec, output, label, rate):
'''
参数:
输入数据input_vec,前向传播结果output,应得的正确结果label,学习率rate
流程:
(1)根据output和label求差值,
(2)若为正则说明当前结果过大,要减小权重w和偏置。
'''
delta = output - label
self.weights = map(
lambda (x, w): w - rate * delta * x,
input_vec, self.weights)
self.bias -= rate * delta
从上述分析可以看出,Perceptron algorithm 和 delta rules 的核心思路相同,并且它们都采用计算误差值,并利用该误差值来更新权重参数。
2.3 局限所在
在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在之前的内容中提到,在前面的部分已经详细讨论过

为了解决这一问题, 神经网络必须能够呈现非线性特征, 这实际上意味着我们在隐藏层中必须引入非线性激活函数. 因此, 这就迫使我们的神经网络架构至少包含两层: 输入层、隐藏层和输出层.
3 反向传播算法原理与梯度问题:MLP
BP算法全称为Error term Backward propagation(误差项反向传播),其正式用于神经网络实践是在1986年由Hinton等人首次提出的,并被用于自动求解MLP网络的最佳参数配置问题上。然而其核心理念早在1974年的自动微分技术中的逆模式就已经被人认识到。因此1986年的研究工作只是将这一方法应用于实际问题的研究中,并未深入揭示其实质性内涵。
2.1 BP算法原理
我们选择一个神经网络模型来进行BP算法原理的阐述,并以此为例来阐述BP的工作原理。在该模型中我们考虑一个二分类任务(采用二元交叉熵损失函数)其中中间层使用Sigmoid函数作为激活函数而输出层则采用Softmax函数既作为激活函数又承担分类任务的角色。对于回归问题(均方误差损失函数)则无需使用Softmax这一机制。如图所示输入空间维度为4隐藏层的维度设定为9而输出空间的维度为2。通过中间层的扩张作用将低维输入映射至高维空间以增强模型的表现力

x被定义为输入数据,z代表隐层状态数值,对应的激活后状态向量h,b被设定为偏置参数,均为常数项1。对于一个批量大小为p的数据批次而言,满足以下条件:
x.shape = (p, m)
W^{(1)}.shape = (m, h), b^{(1)}.shape = (h,)
W^{(2)}.shape = (h, n), b^{(2)}.shape = (n,)
(1)forward前向计算流程 :
h^{(2)} = softmax(W^{(2)}·sigmoid(W^{(1)}·x+b^{(1)})+b^{(2)})
按照从输入层到输出层的顺序依次求取并保存神经网络中各层的激活值,并对上述公式进行分解处理如下:
- 状态量:通过矩阵乘法和偏置计算得到当前层数的状态变量。
- 公式表示为: z^{\left(l\right)}=W^{\left(l\right)}a^{\left(l-1\right)}+b^{\left(l\right)}}
- 激活量:对上一层的状态变量进行非线性变换以获得当前层数的特征表示。
- 表达式为: a^{\left(l\right)}}=\sigma\left(z^{\left(l\right)}}\right)
- 状态量:将上一层的激活量传递给当前层进行计算。
- 计算公式为: z^{\left(m\right)}}=W^{\left(m\right)}}a^{\left(m-1\right)}}+b^{\left(m\right)}}
- 激活量:对当前层数的状态变量再次进行非线性变换以获得最终的特征向量。
- 表达式为: a^{\left(m\right)}}=\sigma\left(z^{\left(m\right)}}}
- 代价函数(Cost Function)用于衡量模型预测结果与真实标签之间的差异程度。
- 计算公式为: \mathcal{L}=loss(a^{\left(m}\right)}, y)
第(2)部分反向传播流程其核心在于计算每个权重参数对损失函数的偏导数值根据前述内容可知涉及两个权重参数W和四个偏置参数b因此我们需要做的就是确定这些参数分别应承担多少损失值进而得出各参数对应的梯度变化量
- 按照逐层反向传播的方式进行操作,在反向传播过程中应当从后往前依次计算各个层级上的导数。
- 因为最终只知道最终损失函数对输出层误差项敏感的程度,在这种情况下我们需要分阶段地完成导数运算。
- 从大类上讲,在具体实施过程中存在两种不同的导数运算形式:一种是用于计算激活值关于损失函数的变化率(即\frac{\partial l}{\partial h^{(1)}}),另一种则是用于描述当前层神经元之间的关系(即\frac{\partial h^{(2)}}{\partial h^{(1)}})。对于给定的一个损失函数l而言,在其整个运算流程中需要依次完成以下四个步骤的操作:
- 首先计算出当前激活值关于上一层输出结果的变化率;
- 然后根据上述结果来推导出当前状态下的神经元间关系;
- 接着在此基础上进一步推导出下一层激活值关于当前层输出结果的变化率;
- 最终完成全部状态间的相互关联关系推导工作。
2.2 多层网络的梯度问题
一九九一年,在Sepp Hochreiter发表的重要论文中揭示了一个关键的技术瓶颈:在神经元饱和状态下会出现两种极端的问题——对于循环神经网络(RNN),这是梯度爆炸现象;而对于多层感知机(MLP),则是梯度消失现象。(Both phenomena are collectively referred to as the exploding and vanishing gradient problem, EVGP.) 直到2006年前,在这一技术瓶颈困扰下,神经网络的深度发展始终无法突破瓶颈而受限难以扩展. 本质上而言, 梯度消失与梯度爆炸实际上是同一个根源性原因造成的两种表现形式: 即链式法则导致的参数更新过程中乘积效应积累的结果.
- 深度过深 :深层网络的不同层具有不同的收敛速度(单次更新幅度)。具体而言,在输出层的学习效率显著高于其他层;而输入层的学习效率则相对较低。
- 反向传播特性:深层积累效应 :基于梯度下降算法对各层误差进行反向传播计算时会遇到以下两种情况:当导数值超过1时(即激活函数的导数值大于1),随着网络深度增加梯度值呈指数级放大;而当导数值低于1时(即激活函数的导数值小于1),会导致梯度信息迅速衰减。
- 激活函数 :Sigmoid函数及其双曲正切变体在两端呈现平缓特性,在中间区域表现出较强的陡峭性。这种特性容易导致深层积累效应中的梯度放大问题。
- 初始化权重值的大小 :若初始化权重过大可能导致模型损失急剧上升同时导数值也可能出现异常。解决方案是采用Batch归一化技术和合理的权重初始化策略如Xavier初始化与He初始化等方法。
就梯度问题而言,一直以来都存在许多有效的解决办法。然而,在当前阶段中采用预训练与微调相结合的方法,在深度学习模型优化方面展现出了显著的优势。值得注意的是,在经典的深度学习框架中(如ResNet残差网络等),这种技术已经被证明是一种关键组件,并且后续计划在深入探讨该技术后撰写相关技术解析文章
4 大模型中MLP的作用与变体
MLP展现出强大的函数逼近能力,在单层感知机仅能处理非线性问题的前提下,二层及以上的MLP则理论上可逼近任意非线性函数;而多层神经网络(如三层及以上)则理论上可逼近任意复杂函数。在功能架构上,一个Transformer Block整合了注意力机制模块与MLP模块两大核心组件:前者负责输入数据间的注意力捕获;后者则主要负责特征提取与记忆存储,并采用激活函数来促进信息处理。值得注意的是,在现有大型模型中,默认情况下MLP模块通常会采用将嵌入空间维度先投影至更高维再还原的方式进行特征处理;其中维度扩张运算本质上是进行表示学习的过程。
此外,在MLP结构中也存在一些变体形式值得注意的是本文将重点阐述混合专家架构在Transformer模型中的具体应用为此我们首先需要明确混合专家这一概念其核心理念是赋予各个模块专门的学习领域和处理任务类型以实现多样化的能力框架在这种通用求解器中混合专家通过门控机制将输入状态映射到各专家的选择权重上从而实现对不同任务的高效分配具体而言这种架构的设计思路体现在模型的具体实现环节当中我们将原来的两层全连接结构替换为GLU单元与多个 expert 全连接层的组合形式通过这种方式系统能够更加灵活地分配注意力资源并提升整体性能水平

