全连接层(fully connected layers,FC)在整个卷积神经网络中起到分类器模块的作用。在深度学习中,卷积层、池化层和激活函数层等操作将原始数据映射到隐层高维特征空间,全连接层则将这些学到的隐层高维特征映射到样本标签(label)空间中。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为 $1\times1$ 的卷积;而前层是卷积层的全连接层可以转化为卷积核为 $h\times w$ 的全局卷积, $h$ 和 $w$ 分别为前层卷积结果的高和宽。
以VGG-16为例,对于224x224x3的输入,经过最后一层卷积的输出为7x7x512,如果后层是一个含4096个神经元的FC层,那么可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程,其中该卷积核参数如下:
“filter size = 7, padding = 0, stride = 1, D_in = 512, D_out = 4096”
经过此卷积操作后可得输出为1x1x4096的特征矩阵。如需再次叠加一个2048的FC层,则可设定参数如下的卷积层操作:
“filter size = 1, padding = 0, stride = 1, D_in = 4096, D_out = 2048”
由于全连接层参数存在冗余(仅全连接层参数就可占整个传统深度学习网络参数的80%左右)的情况,一些经典的传统深度学习模型(ResNet和GoogLeNet等)均用全局平均池化(global average pooling,GAP)层来取代FC层去融合模型学到的深度特征,后续再接softmax等损失函数作为传统深度学习模型的目标函数来指导训练过程。同时研究发现,用GAP层替代FC层的模型通常有较好的预测性能。
学术界研究发现FC层可在模型表示能力的迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为 $\mathcal{M}$ ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对模型的微调过程,如果目标域(target domain)中的图像与源域中图像差异巨大(假设相比ImageNet,目标域图像不是物体为中心的图像,而是智慧城市场景数据),不含FC层的网络微调后的结果要差于含FC层的网络。因此FC层可视作模型表达能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC层可保持较大的模型capacity从而保证模型表达能力的迁移,这是FC层冗余参数带来的优势。
在Transformers中,FC层重新繁荣,成为了Transformers架构模型的标配,成为AI领域中不可获取的关键部分。正是因为FC层能够保持大模型的capacity能力,如果没有全连接层,Self-Attention层输出的只有一些线性表达特征,表达能力有限,而全连接层可以自己学习复杂的特征表达。
多层感知器(Multilayer Perceptron, MLP)可以说是最基本的神经网络,由Frank Rosenblatt于1957提出,一直广泛应用于各种机器学习和深度学习任务中。
在传统深度学习时代,由于卷积神经网络的出现,一定程度上MLP网络的使用频率有所减少,但是在Transformer发布后,MLP结构重新站上AI行业的舞台。在现在的AIGC时代中,MLP结构已经成为AIGC模型的重要组成部分 。
下面是Rocky对MLP网络的详细讲解:
MLP由一个输入层、一个或多个隐藏层和一个输出层组成。每一层都包含多个神经元(或节点),这些神经元之间是全连接的,即每个神经元的输出连接到下一层的每个神经元。
输入层的神经元数等于输入数据的特征数。如果输入是一个包含28x28像素的图像,则输入层的神经元数为784。
隐藏层由一个或多个层组成,每层包含若干个神经元。隐藏层的数量和每层的神经元数是超参数,我们可以根据不同的场景进行对应的设置。隐藏层通过激活函数(如ReLU、Sigmoid、Tanh等)引入非线性,使得MLP能够学习复杂的分布和特征。
输出层的神经元数取决于具体的AI任务。例如,对于二分类任务,输出层通常包含一个神经元;对于多分类任务,输出层的神经元数等于类别数。
MLP的工作原理基于前向传播和反向传播两个过程。
在前向传播过程中,输入数据通过网络层层传递,经过每一层的加权和激活函数计算,最终得到输出结果。具体步骤如下:
加权求和 :每个神经元接收前一层的输出,通过权重进行加权求和,并加上一个偏置项。
$$z_j = \sum_i w_{ij} \cdot x_i + b_j$$
其中, $w_{ij}$ 是权重, $x_i$ 是输入, $b_j$ 是偏置项。
激活函数 :对加权求和的结果应用激活函数,引入非线性。
$$a_j = \sigma(z_j)$$
其中, $\sigma$ 是激活函数,常见的激活函数包括ReLU、Sigmoid和Tanh等。
输出 :将激活函数的输出传递给下一层,直到最后一层得到最终输出。
在反向传播过程中,网络通过计算损失函数的梯度来更新权重和偏置项,以最小化预测误差。具体步骤如下:
损失函数 :计算网络的输出与实际标签之间的损失。常见的损失函数包括均方误差(MSE)和交叉熵损失。
$$L = \frac{1}{2} \sum_i (y_i - \hat{y}_i)^2$$
其中, $y_i$ 是实际标签, $\hat{y}_i$ 是网络输出。
梯度计算 :通过链式法则计算每个权重和偏置项的梯度。
$$\frac{\partial L}{\partial w_{ij}} = \frac{\partial L}{\partial a_j} \cdot \frac{\partial a_j}{\partial z_j} \cdot \frac{\partial z_j}{\partial w_{ij}}$$
权重更新 :使用梯度下降算法更新权重和偏置项。
$$w_{ij} = w_{ij} - \eta \cdot \frac{\partial L}{\partial w_{ij}}$$
其中, $\eta$ 是学习率。
全连接层是神经网络中一种常见的层结构。在结构上,它的每一个神经元都与上一层的所有神经元相连。假设前一层有\(n\)个神经元,当前全连接层有\(m\)个神经元,那么就存在\(m×n\)个连接权重。例如在一个简单的三层神经网络中,输入层有 4 个神经元,隐藏层(全连接层)有 3 个神经元,那么从输入层到隐藏层就会有3×4 = 12个连接权重。这种全连接的结构使得信息能够在层与层之间充分传递,每个神经元都能获取到上一层所有神经元的信息,进而对输入数据进行全面的特征组合与处理 。
全连接层的工作原理基于线性变换与非线性激活。数学运算主要包括矩阵乘法和偏置加法,之后会接入一个非线性激活函数。通过这样的线性变换加上非线性激活,全连接层能够学习到数据中复杂的非线性关系。
5.在图像识别任务中,全连接层通常在卷积神经网络(CNN)的什么位置,起到什么作用?
在图像识别任务的 CNN 架构中,全连接层通常位于卷积层和池化层之后。卷积层和池化层主要负责提取图像的局部特征和对特征进行降维。全连接层在此基础上,将前面层提取到的局部特征进行整合与进一步抽象。例如,经过多个卷积层和池化层后,得到了图像的边缘、纹理等局部特征的特征图,全连接层将这些特征图中的所有特征信息进行综合,通过权重矩阵的学习,把这些局部特征组合成更高级的、能够代表整个图像类别的特征表示。最终全连接层的输出会作为分类器的输入,如在常见的图像分类任务中,最后一个全连接层的输出节点数量等于类别数,通过 Softmax 激活函数将输出转化为各类别的概率分布,从而实现对输入图像的分类 。
6.全连接层的参数数量如何计算?以输入层有 512 个神经元,隐藏层(全连接层)有 256 个神经元为例说明。
全连接层的参数包括权重参数和偏置参数。对于从输入层到全连接层的连接,权重参数数量为输入层神经元数量乘以全连接层神经元数量。偏置参数数量等于全连接层神经元数量。在输入层有 512 个神经元,隐藏层(全连接层)有 256 个神经元的例子中,权重参数数量为512×256 = 131072个。偏置参数数量为 256 个。那么该全连接层总的参数数量为131072 + 256 = 131328个。参数数量众多是全连接层的一个特点,这也意味着它具有很强的拟合能力,但同时在训练时容易出现过拟合问题,尤其是在数据量不足的情况下 。
可以通过以下几种方法缓解全连接层的过拟合问题:
数据增强:对训练数据进行变换,如在图像数据中进行旋转、翻转、裁剪、缩放等操作。这样可以增加数据的多样性,让模型学习到更具泛化性的特征。例如将一张猫的图片进行水平翻转后作为新的训练样本,模型就不会过度依赖于图片中猫的左右朝向等特定特征。
正则化:
L1 和 L2 正则化:在损失函数中加入 L1 或 L2 正则化项。L1 正则化会使部分权重变为 0,起到特征选择的作用;L2 正则化会使权重趋于更小的值,防止权重过大导致过拟合。
Dropout:在训练过程中随机将部分神经元的输出设置为 0,这样每次训练时网络结构都是不同的,避免神经元之间的复杂协同适应,从而减少过拟合。比如设置 Dropout 率为 0.5,意味着每次训练时大约有一半的神经元会被随机失活。
早停法:在训练过程中监控验证集上的性能指标,如准确率或损失值。当验证集性能不再提升甚至开始下降时,停止训练,避免模型在训练集上过拟合。例如每训练一个 epoch,计算一次验证集上的损失,若连续 5 个 epoch 验证集损失都没有下降,则停止训练 。
8.全连接层与卷积层在连接方式上有何区别?这种区别对它们的功能和应用场景有什么影响?
全连接层中每个神经元与上一层所有神经元都相连,而卷积层通过卷积核在输入特征图上滑动进行局部连接。在功能上,全连接层擅长综合全局信息,对特征进行高度抽象和组合,适合对已提取特征进行最终分类或回归。卷积层则专注于提取局部特征,能捕捉图像等数据中的空间结构信息,对平移等变换具有不变性,适用于图像识别、目标检测等任务中对图像特征的初步提取和特征图生成。例如在图像分类中,卷积层先提取图像的边缘、纹理等局部特征,全连接层再将这些局部特征整合用于分类。这种连接方式的差异决定了卷积层更适合处理具有空间结构的数据,全连接层在需要综合全局信息的任务中发挥关键作用。
9.在一个多层全连接神经网络中,随着层数增加,会出现哪些问题?如何解决这些问题?
随着多层全连接神经网络层数增加,可能出现梯度消失或梯度爆炸问题。梯度消失是因为反向传播时梯度在各层不断相乘,若权重初始化值较小,经过多层传递后梯度会趋近于 0,导致参数无法有效更新。梯度爆炸则相反,若权重初始化值过大,梯度会在多层传递中不断增大,使参数更新不稳定。解决方法包括:采用合适的权重初始化方法,如 Xavier 初始化或 Kaiming 初始化,根据激活函数特性设置合理的权重初始值范围;使用 Batch Normalization,在每一层输入前对数据进行归一化处理,加速收敛,减少梯度问题影响;选择合适的激活函数,如 ReLU 函数在一定程度上可缓解梯度消失问题,因为其在正数部分梯度为 1。
10.全连接层的输出维度是由什么决定的?若要将全连接层的输出维度从100调整为50,需要改变哪些参数?
全连接层的输出维度由该层神经元数量决定。若要将输出维度从 100 调整为 50,需要改变权重矩阵的维度,使其行数从 100 变为 50,同时偏置向量的维度也应从 100 变为 50。在代码实现中,若使用框架如 PyTorch,重新定义全连接层时需将输出维度参数设置为 50,框架会自动调整权重和偏置的维度。
11.在训练全连接层时,如何选择合适的学习率?过大或过小的学习率会有什么影响?.如何缓解全连接层带来的过拟合问题?
答案:选择合适学习率可通过尝试不同值,观察训练过程中损失函数和模型性能变化。如从较大值开始(如 0.1)逐渐减小,或使用学习率调度策略(如指数衰减、余弦退火等)动态调整。过大学习率会使模型训练过程不稳定,损失值可能剧烈波动甚至不收敛,参数更新时可能跳过最优解,导致模型性能差。例如在梯度下降时,步长过大,参数在最优解附近反复振荡无法收敛。过小学习率则会使训练速度极慢,模型需要更多训练时间和迭代次数才能收敛,可能陷入局部最优解而无法找到全局最优,因为参数更新步伐过小,难以探索到更优解区域。
12.全连接层在自然语言处理任务(如文本分类)中是如何应用的?与在图像识别任务中的应用有何不同?
在文本分类任务中,首先需将文本数据通过词嵌入等方式转化为向量表示,如使用 Word2Vec 或 GloVe 获取词向量,再通过平均池化、最大池化等操作将多个词向量合并为文本向量。全连接层接收该文本向量,对其进行特征组合与分类,如最后一层全连接层输出节点数为类别数,经 Softmax 函数得到各类别概率。与图像识别不同,图像识别中全连接层接收的是卷积层和池化层提取的图像特征图经展平后的向量,处理的是图像的空间结构特征;而文本分类中全连接层处理的是文本的语义特征向量,且文本数据的预处理和特征提取方式与图像有很大差异,图像基于像素信息,文本基于词汇和语法语义。
13.请解释全连接层中的偏置(bias)的作用是什么?去掉偏置会对模型产生什么影响?
偏置(bias)的作用是为神经元的输出引入一个可学习的常数项。在全连接层中,输出计算为y=W*x+b,其中b就是偏置向量。偏置增加了模型的灵活性,使模型能够学习到更复杂的函数关系。例如,即使输入x为零向量,偏置也能使神经元有非零输出,这在一些情况下是必要的,比如在二分类问题中,偏置可以帮助模型更好地调整分类边界。去掉偏置后,模型的拟合能力会下降,因为它失去了一个可以独立调整神经元输出基准的参数。在复杂任务中,可能导致模型无法准确学习到数据中的规律,尤其当数据存在某种整体偏移或趋势时,去掉偏置会使模型难以捕捉到这种信息,从而降低模型的性能。
14.全连接层在生成对抗网络(GAN)中扮演什么角色?在生成器和判别器中,全连接层的设计有何不同?
在生成对抗网络(GAN)中,全连接层在生成器和判别器中都起到重要作用。生成器中的全连接层用于将随机噪声向量逐渐变换为具有特定结构的数据(如生成图像时变换为图像像素值向量)。它从低维噪声空间逐步生成高维数据,通过一系列全连接层和激活函数,学习到从噪声到数据分布的映射。判别器中的全连接层则用于对输入数据(真实数据或生成器生成的数据)进行特征提取和分类,判断数据是真实的还是生成的。在设计上,生成器的全连接层通常是从低维到高维,逐渐扩展数据维度以生成复杂数据;而判别器的全连接层一般是从高维到低维,对输入数据进行降维抽象,提取关键特征用于分类,最终输出一个标量表示数据为真实的概率。例如生成器可能从 100 维噪声向量开始,经多个全连接层变为 784 维图像向量(对于 MNIST 图像);判别器则将 784 维图像向量经全连接层逐步降维到 1 维输出。
15.如何评估全连接层在一个深度学习模型中的重要性?有没有一些指标或方法可以用来量化这种重要性?
模型性能变化:移除全连接层或改变其结构(如减少神经元数量),观察模型在训练集和验证集上的性能指标(如准确率、损失值)变化。若性能显著下降,说明全连接层对模型很重要。例如在图像分类模型中,移除全连接层后准确率大幅降低,表明全连接层在整合特征用于分类中起到关键作用。
参数敏感度分析:对全连接层的权重进行微小扰动,观察模型输出的变化。使用梯度信息,计算输出对全连接层权重的梯度大小,梯度越大说明该权重对模型输出影响越大,也就意味着全连接层越重要。例如通过计算相对于全连接层权重的梯度范数,范数越大表示该层权重对模型性能影响越显著。
特征重要性分析:利用一些特征重要性评估方法,如基于 Shapley 值的方法,分析全连接层输入特征(前一层输出特征)对最终输出的贡献。若某些特征在全连接层处理后对输出影响较大,说明全连接层在处理这些关键特征中具有重要作用。例如在一个预测任务中,通过 Shapley 值分析发现经全连接层后某些特征对预测结果贡献度高,体现了全连接层对这些特征的有效利用 。
全连接层(Fully Connected Layer,FC)是神经网络的核心组件之一,其每个输入节点与输出节点均相连,擅长捕捉全局特征。然而,传统全连接层存在参数过多、计算量大、易过拟合等问题,因此衍生出多种变体以适配不同任务需求。以下是主要变体及其应用场景:
原理 :通过剪枝或稀疏约束(如L1正则化)减少有效连接数,仅保留关键权重。
案例 :
图像分类 :在ResNet中,对最后一层全连接进行剪枝,参数减少30%,精度损失<1%。
应用领域 :
传统深度学习 :压缩模型大小,提升部署效率(如移动端图像分类)。
自动驾驶 :轻量化多任务感知模型(如车道线检测+目标检测)。
原理 :根据输入动态调整权重,例如通过门控机制或条件计算。
案例 :
多语言翻译 :动态调整不同语言对的翻译权重,提升小语种性能(如Meta的M2M-100模型)。
应用领域 :
AIGC :生成多样化风格内容(如根据文本提示动态调整生成网络参数)。
自动驾驶 :动态融合多传感器数据(如雨天增强激光雷达权重)。
原理 :将输入/输出节点分组,组内全连接,组间隔离,减少参数量(类似分组卷积)。
案例 :
推荐系统 :用户兴趣分组(如性别、年龄),每组独立建模(如阿里的Deep Interest Network)。
应用领域 :
传统深度学习 :处理高维稀疏数据(如广告点击率预测)。
AIGC :多模态生成(如文本、图像分组处理后再融合)。
原理 :将权重矩阵分解为两个低秩矩阵(如 $W=U \cdot V$ ),减少参数量。
案例 :
语音识别 :在RNN-T模型中,低秩分解全连接层参数减少50%,推理速度提升20%。
应用领域 :
AIGC :轻量化生成模型(如手机端Stable Diffusion)。
自动驾驶 :实时语义分割模型压缩。
5. 注意力增强全连接层(Attention-Augmented FC)
原理 :引入注意力机制,动态加权输入特征。
案例 :
机器翻译 :在Transformer解码器中,全连接层结合自注意力,提升长距离依赖建模(如Google的T5模型)。
应用领域 :
AIGC :生成连贯长文本(如小说续写)。
自动驾驶 :时序行为预测(如行人轨迹预测)。
原理 :权重或激活值二值化(+1/-1),减少计算资源。
案例 :
边缘设备图像分类 :二值化ResNet-18在CIFAR-10上精度保持85%,功耗降低70%。
应用领域 :
自动驾驶 :低功耗车载芯片实时推理。
传统深度学习 :物联网设备端模型部署。
原理 :引入残差连接( $y = F(x) + x$ ),缓解梯度消失。
案例 :
图像超分辨率 :残差全连接层堆叠,提升高频细节恢复能力(如ESRGAN)。
应用领域 :
AIGC :高分辨率图像生成(如4K人脸合成)。
自动驾驶 :高精度地图重建。
原理 :通过门控机制(如Sigmoid)控制信息流动。
案例 :
语音合成 :门控全连接层调节音素与韵律特征(如WaveNet)。
应用领域 :
AIGC :多风格语音生成(如情感化TTS)。
自动驾驶 :多模态信号融合(如语音指令+视觉导航)。
全连接层的变体通过参数优化、动态计算、结构创新 等方式,解决了传统FC层的局限性,广泛应用于以下场景:
AIGC :动态生成、轻量化部署;
传统深度学习 :模型压缩、多任务学习;
自动驾驶 :实时推理、多模态融合。