使用这些基本 REST API 最佳实践构建出色的 API
一文彻底搞懂深度学习(1)
归一化(Normalization)
在深度学习中,归一化是数据预处理中一个至关重要的步骤。归一化技术通过调整输入数据的尺度,使得数据具有相似的分布范围,提高模型的求解速度和泛化能力。
常用的归一化方法,包括批量归一化(Batch Normalization)、层归一化(Layer Normalization)、组归一化(Group Normalization)和实例归一化(Instance Normalization)等。
Normalization
归一化
归一化(Normalization)是什么?归一化是一种数据预处理技术,旨在将数据的数值范围缩放到一个特定的尺度,通常是为了消除不同特征之间的量纲差异,使得数据更加适合进行后续的分析和处理。
归一化是深度学习中不可或缺的数据预处理步骤。通过合理的归一化处理,可以显著提高模型的训练效率和性能,为深度学习模型的优化和泛化能力的提升提供有力支持。
为什么需要归一化?由于目标函数拥有众多参数且结构复杂,直接寻找最优参数变得十分困难。因此,我们需要借助优化器,它能够逐步调整参数,确保每次优化都朝着最快降低损失的方向前进。
归一化的过程是什么?归一化是通过确定数据的取值范围,应用相应的归一化公式将数据转换到新的稳定尺度,从而得到更加适合后续分析和处理的数据集的过程。
- 确定归一化的范围:确定数据的取值范围,即数据的最大值和最小值。在某些情况下,也可以根据需要选择其他统计量(如均值和标准差)来确定归一化的范围。
- 应用归一化公式:根据选定的归一化范围,应用相应的归一化公式将数据转换到新的尺度。常见的归一化公式包括线性函数归一化(将数据映射到[0,1]或[-1,1]的范围)和Z-score标准化(将数据转换为标准正态分布)。
- 得到归一化后的数据:应用归一化公式后,即可得到新的、经过归一化处理的数据集。这些数据集在数值上更加稳定,有利于后续的分析和处理。
常用的归一化
常用的归一化有哪些?常用的归一化主要包括批量归一化(BN)、层归一化(LN)、组归一化(GN)和实例归一化(IN)等,它们各有其独特的应用场景和优势,选择哪种归一化方法通常取决于具体任务和数据的特点。
1. 批量归一化(Batch Normalization, BN)
- 方法:在神经网络的每一层中,对每个mini-batch的输入进行归一化处理。通过减去均值,再除以标准差,将输入数据转化为均值为0,标准差为1的分布。
- 优点:加速网络训练、防止梯度问题、优化正则化效果、降低学习率要求,并有助于缓解过拟合,从而显著提升神经网络的性能和稳定性。
- 应用场景:适用于大多数神经网络场景,特别是在训练深层网络时。
2. 层归一化(Layer Normalization, LN)
- 方法:在神经网络的每一层中,对每个样本的所有特征维度进行归一化处理。通过减去均值,再除以标准差,将每个样本的特征维度转化为均值为0,标准差为1的分布。
- 优点:在训练样本较小、样本间相互影响较大的情况下更稳定。
- 应用场景:如循环神经网络(RNN)等场景。
3. 实例归一化(Instance Normalization, IN)
- 方法:对每个样本的特征维度进行归一化。通过减去均值,再除以标准差,将每个样本的特征维度转化为均值为0,标准差为1的分布。
- 优点:更适用于图像生成等任务中,每个样本的特征维度独立于其他样本的情况。
- 应用场景:图像生成任务等。
4. 组归一化(Group Normalization, GN)
- 方法:在神经网络的每一层中,将特征分成若干组,对每个组的特征进行归一化处理。通过减去均值,再除以标准差,将每个组的特征维度转化为均值为0,标准差为1的分布。
- 优点:适用于样本较小、样本间相互影响较大,但又不需要对整个mini-batch进行归一化的情况。
- 应用场景:图像分割任务等。
正则化(Regularization)
在深度学习中,正则化通过约束模型的复杂度来防止过拟合,提高模型的泛化能力、鲁棒性和解释性。在深度学习的实践中,可以根据具体问题和数据集的特点选择合适的正则化技术和参数设置。
常用的正则化方法,包括L1正则化(Lasso Regularization)、L2正则化(Ridge Regularization)和Dropout等。其中,L1正则化实现特征选择和模型稀疏化,L2正则化使权重值尽可能小,而Dropout则通过随机丢弃神经元来减少神经元之间的共适应性。
Regularization
正则化
正则化(Regularization)是什么?正则化是一种减少模型过拟合风险的技术。
当模型在训练数据上表现得太好时,它可能会学习到训练数据中的噪声或随机波动,而不是数据中的基本模式。这会导致模型在未见过的数据上表现不佳,即过拟合。
正则化的目的是通过引入额外的约束或惩罚项来限制模型的复杂度,从而提高模型在未知数据上的泛化能力。
如何实现正则化?正则化是通过在损失函数中添加一个正则项来实现的,这个正则项是基于模型参数而构建的。
L1正则化在损失函数L中添加L1正则项,得到新的损失函数L_new = L + λ∑|w_i|,其中λ是正则化系数,w_i是模型参数。
L2正则化则在损失函数L中添加L2正则项,得到新的损失函数L_new = L + λ∑w_i^2,其中λ是正则化系数,w_i是模型参数。
在训练过程中,L1正则化、L2正则化都是通过优化算法最小化损失函数L_new,从而实现对模型参数的约束。
常用的正则化
常用的正则化有哪些?常用的正则化方法主要包括L1正则化(产生稀疏权重)、L2正则化(减少权重大小)、Dropout(随机丢弃神经元)、数据增强(扩充数据集)以及提前停止(监控验证误差)等,它们各自通过不同机制减少模型过拟合风险。
1. L1正则化(Lasso):
- 方法:在损失函数中添加模型参数绝对值之和作为惩罚项。
- 特点:倾向于产生稀疏权重矩阵,即部分特征权重为零,有助于特征选择。
2. L2正则化(Ridge):
- 方法:在损失函数中添加模型参数平方和作为惩罚项。
- 特点:倾向于使权重值均匀分布且较小,有助于防止模型过于复杂,减少过拟合。
3. Dropout:
- 方法:在神经网络训练过程中随机丢弃一部分神经元。
- 特点:减少了神经元之间的复杂共适应性,提高了模型的泛化能力。
4. 数据增强(Data Augmentation):
- 方法:虽然不是直接对模型进行正则化,但通过对输入数据进行变换(如旋转、缩放、平移等)来扩充数据集。
- 特点:提高了模型的泛化能力,减少了过拟合的风险。
5. 提前停止(Early Stopping):
- 方法:在训练过程中监测验证集上的误差变化。
- 特点:当验证集误差在一段时间内没有进一步改善时,停止训练并返回使验证集误差最低的模型。
自注意力(Self- Attention)
在深度学习中,自注意力机制允许模型在处理序列数据时,通过计算序列中不同位置元素之间的相关性得分,动态地调整对每个元素的关注程度,从而捕捉序列内部的复杂依赖关系。
自注意力机制与注意力机制在处理对象和应用场景上存在差异,自注意力机制更侧重于处理序列内部元素之间的相互作用。
Self- Attention
自注意力机制
自注意力机制(Self- Attention)是什么?自注意力机制能够动态地捕捉序列中不同位置元素之间的依赖关系,并根据这些依赖关系生成新的序列表示。
它之所以被称为“自注意力”,是因为它在单一序列中通过计算序列元素之间的相互依赖关系来生成新的特征表示。这与传统的注意力机制有所不同,后者通常涉及两个序列之间的交互。
自注意力机制和传统注意力机制区别是什么?传统注意力机制通常涉及目标元素(输出)与源元素(输入)之间的交互,而自注意力机制则专注于输入序列或输出序列内部元素之间的相互作用,其查询和键均来自同一组元素。
- 传统注意力机制:通常发生在目标元素(输出)与源元素(输入)之间。在机器翻译等任务中,注意力机制的查询和键往往来自不同的来源,例如在中译英模型中,查询是中文单词的特征,而键是英文单词的特征。
- 自注意力机制:是在输入序列内部元素之间或者输出序列内部元素之间的相互作用。自注意力机制的查询和键来自同一组元素,即查询和键都是同一序列(如一句话中的词元或同一张图像中的不同patch)的特征,彼此之间进行注意力计算。
注意力分数
如何实现注意力机制?在自注意力机制中,通过缩放点积计算注意力得分,并利用这些得分对值向量进行加权求和,从而实现了自注意力机制,它能够捕捉序列内部元素之间的依赖关系。
注意力分数是什么?注意力分数用来量化注意力机制中某一部分信息被关注的程度,反映了信息在注意力机制中的重要性。在注意力机制中,模型会根据注意力分数来决定对不同输入信息的关注程度。
Q(Query)、K(Key)、V(Value)通过映射矩阵得到相应的向量,通过计算Q与K的点积相似度并经过softmax归一化得到权重,最后使用这些权重对V进行加权求和得到输出。
Q、K、V计算过程是什么?对于输入序列的每个单词,通过计算其Query与所有单词Key的点积得到注意力分数,经Softmax归一化后得到注意力权重,再用这些权重对Value向量进行加权求和,以得到包含丰富上下文信息的新单词表示。
- 生成Q、K、V向量:对于输入序列中的每个单词,都会生成对应的Query(查询)、Key(键)和Value(值)向量。这些向量通常是通过将单词的嵌入向量(Embedding Vector)输入到一个线性变换层得到的。
- 计算Q、K的点积(注意力分数):计算Query向量与序列中所有单词的Key向量之间的点积,得到一个分数。这个分数反映了Query向量与每个Key向量之间的相似度,即每个单词与当前位置单词的关联程度。
- Softmax函数归一化(注意力权重):这些分数会经过一个Softmax函数进行归一化,得到每个单词的注意力权重。这些权重表示了在理解当前单词时,应该给予序列中其他单词多大的关注。
- 注意力权重加权求和(加权和向量):这些注意力权重与对应的Value向量进行加权求和,得到一个加权和向量。这个加权和向量会被用作当前单词的新表示,包含了更丰富的上下文信息。
文章转自微信公众号@架构师带你玩转AI