深度学习查漏补缺:2. 三个指标和注意力机制
一、bachsize, num_epochs, dataset
在训练卷积神经网络(CNN)或任何其他深度学习模型时,有几个关键参数和概念需要了解:batch size、num epochs 和 dataset。下面是对它们的详细解释:
-
Batch Size(批量大小):
- 定义:批量大小是指在一次迭代中通过网络传播的训练样本的数量。
- 作用:它决定了模型在每次梯度更新时使用的数据量。小的批量可能会导致模型更新更加频繁,但每次更新的方向可能会杂乱无章;而大的批量则使更新方向更加稳定,但更新次数减少。
- 影响:
- 计算效率:较大的批量可以更好地利用GPU加速,但需要更多的内存。
- 模型收敛:较小的批量通常可以带来更好的泛化能力,但训练时间可能更长。
- 稳定性:非常小的批量可能导致训练过程不稳定。
-
Num Epochs(训练轮数):
- 定义:epoch指的是整个数据集通过神经网络一次的完整过程。num_epochs则是指这个过程重复的次数。
- 作用:控制了模型的训练时间。更多的epoch意味着模型会在数据上进行更多次的学习。
- 影响:
- 过拟合风险:过多的epoch可能会导致模型在训练数据上表现很好,但在测试数据上表现较差,即过拟合。
- 不足训练:太少的epoch可能导致模型未充分学习数据中的模式,表现不佳。
-
Dataset(数据集):
- 定义:数据集是指用来训练和测试模型的所有数据的集合。通常被分为训练集、验证集和测试集。
- 组成:
- 训练集:用于训练模型的数据。
- 验证集:用于调整模型超参数和防止过拟合的数据。
- 测试集:用于评估模型在未见数据上的性能。
- 影响:
- 数据质量和数量:高质量和多样化的数据能够帮助模型更好地学习并泛化。
- 数据平衡:数据集中不同类别的样本数量平衡影响模型的公正性和准确性。
二、注意力机制原理
假设我们有一个输入序列 X ,由 n 个元素组成,每个元素的维度为 d 。即有一组学生(输入序列 X),每个学生都有一组特定的特征(维度为 d)。我们想知道每个学生在不同场景下的表现如何(注意力机制)。
1. 计算 Query, Key, Value 矩阵:
- Query 矩阵 Q: 通过一个线性变换从输入 X 生成,通常是通过一个线性层(全连接层)实现。
- 就像给每个学生分配一副眼镜,通过这些眼镜,他们可以看到和理解周围的信息。这个眼镜是通过数学变换(线性变换)从学生的特征生成的。
- Key 矩阵 K: 同样通过线性变换(全连接层)从输入 X 生成。
- 类似于每个学生携带的信息卡,用于识别自身特征。这些信息卡也是通过数学变换从学生特征生成的。
- Value 矩阵 V: 还是通过线性变换(全连接层)从输入 X 生成。
- 像是学生携带的背包,里面装着有用的信息。背包的内容同样通过数学变换生成。
这些线性变换可以表示为:
Q=XWQ,K=XWK,V=XWV
其中 WQ,WK,WV 是可学习的权重矩阵。
2. 计算注意力得分:
注意力得分通过 Query 和 Key 之间的点积来计算:
Attention(Q,K,V)=softmax(dkQKT)V
- 点积 QK^T: 计算 Query 和 Key 之间的相似度。每个元素在 Query 中与所有元素在 Key 中计算相似度。想象每个学生用他们的眼镜(Query)来观察其他学生的信息卡(Key),点积就是在评估两个学生之间的匹配程度。这样可以得到每个学生关注其他学生的程度。
- 缩放因子 根号下dk: 由于点积会随着维度增大而变得很大,所以引入了一个缩放因子,通常是 Key 的维度的平方根。为了避免在高维度下计算出的匹配分数过大,我们用一个缩放因子来调整这些分数,使它们更稳定。
- Softmax 归一化: 将相似度转化为概率分布,确保所有注意力得分的总和为 1。将这些分数转换成概率,类似于给学生分配一个关注度范围,确保总关注度是 1。
3. 输出计算:
- 加权求和: 使用计算得到的注意力得分对 Value 矩阵进行加权求和。这个步骤会聚合输入元素间的信息。通过这些概率(注意力得分),每个学生决定从其他学生的背包(Value)中取多少信息。这是一个汇总信息的过程,让每个学生可以结合他人信息得到新的视角或结论。
Output=Attention×V
自注意力输出
自注意力机制的输出是每个输入元素的一个新表示,结合了该元素与所有其他元素的关系。这个新的表示捕捉了输入序列中各元素之间的重要依赖关系。
三、注意力机制分类
单头注意力和多头注意力的主要区别如下:
-
注意力头的数量:
- 单头注意力:只有一个注意力头,即只计算一次查询(Query)、键(Key)和值(Value)之间的相似度。
- 多头注意力:拥有多个独立的注意力头,每个头都会独立地计算查询、键和值之间的相似度。这允许模型同时关注输入序列的不同部分。
-
信息捕捉与表达能力:
- 单头注意力:只能关注一个方面,信息捕捉能力有限。
- 多头注意力:通过多个头的并行处理,能够捕捉到更多样化的特征,提高了模型的表达能力和泛化性能。这种机制使得多头注意力能够关注到句子更多层面的信息,例如罕见词、多义词、反义词等。
-
计算复杂度与训练难度:
- 单头注意力:计算复杂度相对较低,训练也较为简单。
- 多头注意力:虽然增加了计算复杂度,但通常可以通过并行计算来优化。同时,它也需要更多的训练数据和计算资源来优化模型。然而,这些额外的投入通常能够带来模型性能的显著提升。
-
输出结果:
- 单头注意力:直接输出一个加权表示。
- 多头注意力:每个头都会输出一个加权表示,然后将这些表示拼接在一起,并经过一个额外的线性变换,得到最终的输出。