简单神经网络层是处理和组合来自文本、图像和音频等不同数据类型特征的工具。这些层是多模态AI模型中的主力。它们将提取出的特征作为输入,进行一些计算,并将转换后的信息传递给模型的下一个部分。其主要作用是,神经网络层旨在从数据中学习模式。在多模态系统中,这些层在两个主要方面帮助我们:进一步优化从单一模态提取的特征。结合来自不同模态的特征,以学习它们之间的关联。接下来,我们来看看您将遇到的一些最常见和直接的层。全连接层(Dense Layers)全连接层,也称为密集层,可能是神经网络中最基础的层类型。“全连接”部分意味着该层的每个神经元(或单元)都与前一层中的每个神经元相连。假设你有一组特征,比如来自一张图片的。全连接层接收这些特征并对其进行转换。神经元之间的每个连接都有一个“权重”,这是模型在训练期间学习到的一个数值。该层计算其输入的加权和,然后通常会应用激活函数引入非线性。这种非线性很重要,因为它使网络能够学习比简单线性变换更复杂的模式。它们在多模态系统中的使用方式:处理单模态特征: 提取初始特征(例如,从文本嵌入模型或图像特征提取器中)后,全连接层可以进一步处理这些特征,使其更适合当前任务或与其他模态结合。例如,它可能会降低特征的维度或学习更抽象的表示。整合多模态特征: 一旦来自不同模态的特征被汇集在一起(例如,通过拼接,我们将在接下来讨论),全连接层非常适合学习这些组合特征之间的关联和关系。全连接层主要是学习将其输入特征映射到一组新的输出特征。全连接层中的神经元数量决定了该输出特征集的大小。拼接:一种简单的特征组合方式组合来自不同模态特征的最直观方式之一是拼接。如果你有一个表示图像的特征向量和另一个表示其伴随文本的特征向量,拼接只是简单地将这两个向量端到端地连接起来,创建一个更长的单一向量。图像特征: 假设这些由向量 $v_{img} = [f_{i1}, f_{i2}, f_{i3}]$ 表示。文本特征: 而这些由向量 $v_{text} = [f_{t1}, f_{t2}]$ 表示。拼接后会得到一个组合向量: $$ v_{combined} = [f_{i1}, f_{i2}, f_{i3}, f_{t1}, f_{t2}] $$这个组合向量现在包含了来自两种模态的信息。它随后可以送入后续层,通常是全连接层,以从连接的数据中学习模式。组合特征的其他简单操作虽然拼接后接全连接层非常常见,但有时也会使用更简单的算术操作,特别是当来自不同模态的特征已经具有相同维度或已处理成相同维度时:逐元素相加: 如果图像特征 $v_{img}$ 和文本特征 $v_{text}$ 长度相同,可以创建一个组合向量 $v_{add} = v_{img} + v_{text}$,其中 $v_{add}$ 的每个元素是 $v_{img}$ 和 $v_{text}$ 相应元素的和。逐元素相乘(哈达玛积): 类似地,可以计算 $v_{mult} = v_{img} * v_{text}$,其中每个元素是相应元素的乘积。这些方法常用于更具体的架构设计中,当希望特征集之间有直接的交互或调制时。关于更专业层的说明虽然本节侧重于简单的层,但值得了解的是,存在更专业的层,用于在特征组合之前处理特定数据类型。卷积层(来自CNN): 它们擅长发现图像等数据中的空间模式(例如边缘、纹理)或音频频谱图等序列中的模式。卷积层(特征图)的输出通常会被展平,然后送入全连接层或与其他模态结合。循环层(来自RNN、LSTM、GRU): 它们是为文本或时间序列音频等序列数据设计的。它们一次处理一个输入步骤,保持内部“记忆”或状态。输出(通常是最终隐藏状态或一系列隐藏状态)随后可用作该模态的特征表示。在初级多模态系统中,您可以使用已经包含这些专业层的预训练模型来提取良好的初始特征。然后,您将专注于使用全连接层和拼接来组合和处理这些提取的特征。层如何连接:基本多模态流程让我们来看一下这些简单层在一个基本多模态模型中如何组合。假设我们想分类一张图片和其标题是否相关。digraph G { rankdir=TB; node [shape=box, style="filled,rounded", fontname="sans-serif", fillcolor="#e9ecef"]; edge [fontname="sans-serif"]; subgraph cluster_image { label = "图像模态"; bgcolor="#ffc9c9"; img_input [label="图像数据", fillcolor="#ffe066"]; img_extractor [label="图像特征\n提取器(例如CNN)", fillcolor="#a5d8ff"]; img_dense [label="全连接层\n(图像路径)", fillcolor="#b2f2bb"]; img_repr [label="图像表示", shape=ellipse, fillcolor="#ced4da"]; img_input -> img_extractor; img_extractor -> img_dense; img_dense -> img_repr; } subgraph cluster_text { label = "文本模态"; bgcolor="#fcc2d7"; txt_input [label="文本数据", fillcolor="#ffe066"]; txt_extractor [label="文本特征\n提取器(例如嵌入)", fillcolor="#a5d8ff"]; txt_dense [label="全连接层\n(文本路径)", fillcolor="#b2f2bb"]; txt_repr [label="文本表示", shape=ellipse, fillcolor="#ced4da"]; txt_input -> txt_extractor; txt_extractor -> txt_dense; txt_dense -> txt_repr; } concatenate [label="拼接\n特征", shape=invhouse, fillcolor="#ffd8a8"]; fusion_dense [label="全连接层\n(整合与学习)", fillcolor="#96f2d7"]; output_layer [label="输出层\n(例如用于分类的Sigmoid)", fillcolor="#ffec99"]; prediction [label="预测\n(例如:相关/不相关)", shape=ellipse, fillcolor="#ced4da"]; img_repr -> concatenate [label="图像特征"]; txt_repr -> concatenate [label="文本特征"]; concatenate -> fusion_dense; fusion_dense -> output_layer; output_layer -> prediction; }一张图表,显示了独立的图像和文本数据处理路径,使用特征提取器和全连接层。它们的表示随后被拼接,并送入更多的全连接层以进行最终预测。在此图中:输入数据: 我们从原始图像和文本数据开始。特征提取: 每种模态都由其自身的特征提取器处理。对于图像,这可能是一个预训练的卷积神经网络(CNN)。对于文本,它可能是一个词嵌入模型。单模态处理(可选但常见): 提取的特征可能会通过它们自己的全连接层。这使得模型能够在组合之前独立地学习每种模态的更好表示。例如,全连接层可以调整特征的维度。拼接: 处理后的图像特征和文本特征随后被拼接成一个单一的组合特征向量。整合与进一步处理: 这个组合向量被送入一个或多个全连接层。这些层是模型学习图像和文本特征之间关系的地方。输出层: 最后,输出层产生所需的结果。如果是分类任务(例如,“此标题与图像相关吗?”),这可能是一个带有Sigmoid激活函数(用于二元是/否)或Softmax(用于多类)的全连接层。激活函数:添加非线性我们简要提到了激活函数。它们应用于层中神经元的输出。没有它们,神经网络无论有多少层,都将表现得像一个单一的线性模型。激活函数引入非线性,使得网络能够学习更复杂的模式。常见的激活函数包括:ReLU(修正线性单元): $$f(x) = max(0, x)$$。它简单有效,常用于隐藏层。如果输入为负,则输出0;否则,输出输入本身。Sigmoid: $$f(x) = \frac{1}{1 + e^{-x}}$$。它将任何输入值压缩到0到1的范围。有助于二元分类输出层(例如,预测概率)。Softmax: 用于多类分类输出层。它将一个分数向量转换为概率分布,其中每个值介于0到1之间,并且所有值之和为1。激活函数的选择取决于层在网络中的位置和具体任务。这些简单层,特别是全连接层和拼接操作,是您构建多模态AI模型“大脑”的基本组成部分。它们提供机制以优化来自各个模态的信息,并且重要的是,能够学习不同类型数据之间如何关联以解决给定问题。随着您的学习进展,您将看到这些构建块以各种方式排列,以创建更复杂的架构。