大模型算法八股
一、深度学习与Pytorch一神经网络与训练过程输出线性组合-加入偏置-激活函数对于第一次正向传播权重的值将随机初始化。sigmoid输出0,1之间输入值过大或过小梯度消失输出总是正值可以用作输出层计算exp比较耗时。tanh-1,1以0为中心比sigmoid更快梯度消失relu收敛速度更快计算量小缓解梯度消失稀疏激活性输入为负时输出为0隐藏层首选的激活函数缓解过拟合问题输入总为负不可用没有完全解决梯度消失。相比于sigmoid有助于随机梯度下降方法收敛。leakly relu解决了神经元死亡问题。selu防止了梯度消失离散分类计算损失分类交叉熵前向传播输入-线性组合添加偏置项-激活函数-重复前两步-与真实值比较计算损失值反向传播weight新weight旧-lr*损失对权重的偏导梯度下降更新权重减少误差值。随机梯度下降SGD每次更新参数时不计算全部数据的梯度而是随机用一个样本或一小批样本的梯度来近似更新。训练模型时一次使用一批数据点应用梯度下降更新参数32到1024更新完所有数据点后即为一个epoch。使用链式法则来计算损失值对于某个权重的梯度。梯度消失与梯度爆炸梯度消失靠近输出层的hidden layer梯度变化大所以很快会收敛靠近输入层的梯度变化慢接近于随机初始化。梯度爆炸前面layer的梯度训练后变大后面layer梯度指数级增大。会导致无法从训练数据中学习甚至出现无法训练的nan产生原因梯度消失为激活函数不合适梯度爆炸为权重初始化过大。解决方法欢迎relueleakly reluselu等激活函数标注化残差连接lstm用于改善由于latm中复杂的门梯度爆炸还有梯度正则化梯度剪切。如何确定出现梯度爆炸模型更新中的损失快速变化梯度值快速变化权重变为NAN每一层梯度值都大于1批量归一化BA在激活函数前对每一个mini-epoch计算其方差和期望进行缩放和平移。作用可以提高学习率降低dropout将每层输出变为0,1分布解决了梯度问题。权值共享对一张图进行卷积的过程中使用的是同一个卷积核的参数就是一个卷积核不改变核内系数的情况下处理图片。微调模型fine-tunning使用训练好的sota模型去做特征提取。为什么只训练后面几层越往前的层越记录通用知识如果全部训练由于数据集不足容易过拟合。dropout背景数据集太少参数太多容易过拟合于是删除一些参数方法前向传播过程中某个神经元p的概率失活使得模型泛化性更强。*模型预测时不需要dropout流程临时随机删除一些神经元——前向传播反向时在未失活的神经元进行更新——重复恢复再随机删除如何选择随机失活的概率input默认0.8hiiden_layer默认0.5为什么可以解决过拟合每次随机失活都可以视为一个新的模型减少神经元之间复杂的共生关系。Adam即参数更新方法SGD随机梯度下降只看当前位置坡度SGD动量改进相当于坡度加惯性可以加速训练由于如果判断本次梯度与历史梯度相同就加速训练。Adam如果梯度变化很统一就会加大步伐如果变化忽左忽右就会减小步伐组合策略先用Adam快速下降再用SGD微调。模型设计实验过程中可以使用Adam进行快速实验优化上线或发布前用SGD进行极致调优。核心原理维护梯度的一阶矩平均值与二阶矩方差/平方值的平均值vt代表参数的波动幅度步长与这个有关场景适合大模型大参数以及稀疏数据但泛化能力不如SGD。一阶优化与二阶优化牛顿法BFGS法取一阶泰勒展开与二阶泰勒展开为什么用一阶二阶计算复杂。batch_size与epoch的平衡batch_size大收敛速度比较慢参数更新所需样本量比较大但沿着更准确的方向进行所需内存变大。batch_size小容易欠拟合。一个iteration是一个batch_size训练一次。一个epoch是样本集中所有样本训练一次。SGD每来一个新样本就训练一次而不是全部样本训练所以是online training学习率太大太小如何选择太小收敛过程非常缓慢。太大反复震荡loss爆炸甚至无法收敛。基于策略的调整固定指数衰减多项式衰减神经网络为什么不使用拟牛顿法计算量太大计算瓶颈神经网络参数动辄上千万甚至上亿。拟牛顿法需要构建一个 N×NN×N 的近似海森矩阵时间复杂度 O(N2)O(N2) 在如此高维的参数空间下计算和存储这个矩阵的成本高到无法承受。非凸问题容易失效神经网络的损失函数是极其复杂的“非凸”地形充满鞍点和局部极小值。拟牛顿法更适合解决平滑的凸问题在复杂的非凸地形中容易陷入鞍点或因局部近似不准而失效。BN和dropout训练和测试的差别BN训练时对每个batch进行初始化利用每个batch的均值和方差测试时利用移动平均法求得总体均值和方差。dropout只有训练的时候采用。sigmoid和softmax联系与区别联系两者都是交叉熵损失。区别sigmoid将一个realvalue映射到0,1的值用于二分类。softmax将维向量映射到和为1的向量用于结合topk进行多分类。改进的softmaxlarge——softmax加一个margin保证大于某一个阈值使得类间距更大类内间距更小。center-loss让类内每一个值都向中心点靠近。深度学习调参技巧准备数据大量高质量干净的带标签的数据随机初始化归一化。预处理0均值与1方差化minibatch128过大容易过拟合梯度归一化梯度算出来后要除以minibatch数量学习率从一般lr开始逐渐减小0.01使用验证集可以知道什么时候开始降低学习率验证集开始震荡什么时候停止训练训练集损失下降验证集损失上升权重初始化高斯分布乘以很小的数。深度网络中如果随机初始化加SGD一般不好由于初始化权重太小类似于梯度消失RNN和LSTM中梯度范数必须位于约束在15或者5模型波动非常剧烈的任务Adam收敛更快但没有向量化SGD好除非模型非常复杂。如果使用图像训练集可以把图像扭转一点来实现扩充训练集。使用dropoutearly_stop参数长时间未更新训练停止评价最终结果时可以多做几次平均他们的结果。神经网络调参损失函数学习率batch_size是否归一化激活函数优化算法是否过拟合。初始化神经网络权重全0初始化随机初始化Xavier初始化尽可能让输入和输出符合相同的分布何氏初始化针对relu的通过放大权重方差来补偿 ReLU 把负值置零造成的信号衰减从而让深层网络的激活值和梯度更稳定。FNN,RNN与CNN的区别FNN信息单向流动无记忆无空间局部性。RNN在隐藏状态上增加循环有时间记忆序列数据处理。CNN卷积核在局部区域滑动扫描有空间局部性。用于图像计算机视觉。GAN用于生成式对抗网络。其他若w初始化为全0可能直接导致模型失效无法收敛。神经网络数据预处理方法归一化中心化零均值由于神经网络训练一般为矩阵相乘得到所以一般用图形处理单元GPU实现简单地同时执行所有操作而非一个一个执行。提高小型网络的精度模型蒸馏利用AutoML进行网络结构的优化。神经网络中使用的损失函数交叉熵欧氏距离对比损失合页损失鞍点问题梯度为0但不是极值点。为什么卷积核设计尺寸都是奇数保证中心点位置填充边缘时保证两边都能填充。(二CNN卷积神经网络拿着探照灯卷积核3*3在整个画面上移动用探照灯上的数据与照到的部分进行内积接下来进行移动就能得到一个比较小的矩阵这就是卷积。卷积神经网络组成输入层数据预处理归一化去均值卷积层线性相加激励层激活函数池化层探照到的部分取平均或最大全连接层。池化层减少数据维度缓解过拟合保持一定程度的旋转和平移不变性。RNN在处理非常长序列时效果很差一维CNN代价很小。所以RNN之前可以用一维CNN来预处理也就是卷积一次。经典网络LeNet用于数字识别卷积-池化-卷积-池化-全连接softmaxAlexNet用多层小卷积来替代大卷积。出色原因使用了relu激活函数层数更多用dropout大数据训练GPU实现LRU层归一化。VGG全部使用3*3小卷积核2*2最大池化层通过加深网络结构来提升性能。优化了卷积神经网络的结构训练的特征数量非常大。更多的非线性变换学习能力更强。GoogleNet增加卷积核个数从而增加神经网络宽度使用1*1卷积降维减少参数量。ResNet残差网络解决了网络退化层数增加准确度下降的问题。为什么不用dropout训练过程中对单个样本学习会引入多个样本的信息相当于加入噪声了。随着网络层数升高反向传播过程中梯度逐渐消失从而无法进行参数更新于是训练精度和测试精度迅速下降。DenseNet前面所有层与后面层密切连接前面所有层的特征图用拼接方式而不是相加方式传给后面的图。缓解梯度消失每一层直接连接loss和input参数量少每一层包含所有层的输出只需要很少的特征图即可加强特征传播但内存占用高。有正则化的作用减少过拟合。卷积层基本参数卷积核大小卷积层的感受视野卷积核步长一般为1不是意味着降采样填充方式输入输出通道数感受野输出的一个像素点代表原始图像多大计算卷积层输出大小卷积层参数大小卷积核长度*卷积核宽度*通道数1*卷积核个数卷积在图像中的作用浅层卷积边缘特征中层卷积局部特征深层卷积全局特征如何减少卷积层参数数量堆叠小卷积核替代大卷积核VGG3*33*3替代5*5分离卷积使用1*1卷积在卷积前使用池化操作。进行卷积操作时必须同时考虑通道和区域吗标准卷积是的通道分离先对每个通道进行单独卷积在对卷积后的结果顺着通道维度进行卷积。宽卷积窄卷积的好处是什么对不够卷积的地方进行填充就是宽卷积对不够的直接舍弃就是窄卷积。反卷积转置卷积正向传播时乘以卷积核的转置矩阵反向传播时乘以卷积核的矩阵由卷积结果近似重构输入数据。本质是双向训练。提高卷积神经网络的泛化能力增加数据采用更大的批次每批次采用更大数据有利于模型学习到正确的模式调整数据分布更多学习某类型数据导致其更偏向于输出这类数据调整网络结构浅层网络容易使模型泛化能力不足欠拟合叠加卷积层深层网络容易没有充足训练数据导致过拟合减少卷积层数提高泛化能力。数据增强平移旋转等变相增加训练数据权值正则化权重函数中增加一项权重正则项作为处罚处罚损失较小时网络权重过大的问题dropout网络结构的正则化全连接局部连接全卷积局部卷积全连接每个输出神经元获得所有输入神经元的信息用于末尾。局部连接层间神经元只有局部连接减少参数规模。全卷积层间神经元只有局部范围的连接这个范围内采用全连接连接采用的参数在不同感受域共享。局部卷积感受域内采用全连接感受域之间采用局部连接。卷积神经网络的优点为什么用小卷积核多个小卷积核堆叠比大卷积核好得多局部连接权值共享一组连接共享同一个权重下采样使用图像局部性原理抽样图像只保留关键信息去掉特征图中不重要的样本降低参数量BN,LN,IN,GN,SN区别本质是在不同维度上进行归一化特征图为[N,C,H,W]batchsize通道数特征图的高度和宽度其他池化方法最大池化与平均池化1*1卷积的作用加入非线性函数对卷积核通道进行升维和降维减少参数数量。卷积核是否一定越大越好会导致计算量大幅度增加但可以提升感受域从而找到文本等相关特征如果卷积核太小不能对输入特征进行有效组合。空洞卷积在完全不增加参数计算成本的情况下让卷积核的视野感受野变得非常大。实际上是探照灯扎了几个孔扩张率来决定然后移动从而扫描出来参数比较少的很大的矩阵。卷积神经网络在cv和NLP区别cv是连续数据如灰度等NLP为离散取值如独热编码。卷积层与全连接层卷积层是局部连接局部信息全连接层是全局信息卷积层的局部连接是全连接时全连接层是卷积层的特例。max pooling最大池化选取滑动窗口最大值。全局平均池化平均每页特征图所有值。三RNNRNN特点RNN与传统神经网络区别会把前一次输出结果带到下一次隐藏层中。缺点短期记忆问题无法处理很长的序列训练需要投入极大的成本。与传统ANN异同点都属于BP误差反向算法但RNN网络参数输入-隐藏-隐藏-输出是共享的使用梯度下降算法时每一步输入不止取决于当前状态还取决于之前若干步的状态。为什么RNN训练时loss波动很大memory使得梯度时大时小无法个性化lr。可以设置临界值当梯度大于某个临界值时直接截断。RNN为什么梯度消失tanh或sigmoid是一堆小数在做累乘自然会变小随着序列越来越长后面的梯度会趋于0这就是梯度消失。选择时优先选择tanh由于tanh相对而言梯度较大。如何缓解梯度消失问题选用合适的激活函数加入BA层加速收敛控制过拟合改变传播结构LSTM。四LSTM核心遗忘门输入门输出门。二、TransformerTransformer能够背后的数学假设什么数学模型1.自注意力机制自注意力机制允许模型在处理序列数据时能同时考虑序列中不同位置的关系更好捕捉上下文信息。2.举个例子在模型计算下一个词是正确的概率时会用来计算即该词的评分除以所有词评分和评分函数则用到了自注意力机制。3.自注意力机制ai为注意力权重即这个词对前面词的关注度gxxi是 x与前文第i个词的关联性得分。4为了计算注意力权重也就是ai使用了缩放点积自注意力算出原始相似度q*k进行缩放除以维度归一化为权重softmax。Transformer中可训练的qkv矩阵从何而来为什么要使用qkv。1、 通过线性变换从输入的词嵌入向量变换而来的张量内容则是通过训练得到的他们的作用是将输入的词嵌入向量映射到更高的空间在训练过程中调整参数从而使得模型可以理解序列中的语义。2、由于在注意力机制中模型通过q和k的相互关联度来计算注意力权重根据这些权重来对value求和。使得模型能够在理解语义的同时关注不同位置的依赖关系更好捕捉序列上下文信息。3为什么不是只设置value是因为q和k可以提供更丰富的信息使得模型能够更精确地利用注意力权重只用value可能会限制模型的表达能力。Transformer的feed forward层FFN在训练时在训练什么在训练过程中FFN层通过线性提取和非线性映射来学习输入序列的表示从而为模型下游任务提供更好的输入特征。1、用于每个词的特征深度提取与融合Attention层负责词之间互通有无FFN则负责对单个词内部特征进行深度加工。如国王与王后。2用于从连续词汇空间到离散词汇映射。3.训练按独立位置处理的能力。也就是这个向量不论处于哪个位置只要特征向量不变就这样处理。具体分析Transformer的embedding层Attention层与FFN层的复杂度Transformer的位置编码如何表达对应关系位置信息在不同的encoder之间传递会丢失吗position encoding是用于向输入的词中嵌入添加位置信息来让模型理解输入序列词中的位置顺序。常用的方式是正弦余弦位置编码不使用训练而是用固定的公式把每个位置映射成固定的向量再加到词嵌入上。巧妙的地方在于对于固定偏移ksincos相当于把向量旋转了一个角度角度只取决于相对距离k。位置信息不回再encoder传递中丢失因为位置编码会在每个encoder和decoder中加入的因此位置信息随着词嵌入流经整个模型。Transformer中的层归一化蕴含的神经网络假设是什么为什么使用layer Norm而不是Batch Norm有没有其他更好的normalization实现。假设在每层输入过程中所有神经元的输入都是独立同分布的也就是分布应该相似且稳定。原因Transformer中每个位置的输入都是独立处理的同时由于设计不同位置注意力的计算所以没有btach norm的概念。还有一些例如instancegrop normalization。Transformer神经网络为什么能很好的表示信息1self-attention机制。能够同时考虑不同位置的依赖关系同时根据输入位置的重要性来动态调整注意力更好地捕捉长距离序列中的语义和依赖关系。2、多头注意力机制。扩展为多头注意力机制使得模型在不同注意力头学到不同的信息提高多样建模能力更好理解不同层次的语义信息。3、位置编码。使得模型能够理解输入词的位置信息允许模型在使用时区分词的不同位置。4、残差连接和归一化。缓解梯度消失和梯度爆炸问题。使模型更好训练和利用深层网络。5、由多个encoder和decoder层组成。分析encoder和decoder的依存关系描述Transformer中tokenizer的数学原理运行流程问题与改进方法数学原理核心是把文本序列转化成离散的标记或词语然后转化为对应向量。涉及词汇表的构建可以用基于频率或基于子词的方法来实现切词与标记算法按照文本特定规格来实现。运行流程构建词汇表根据训练数据构建词汇表表中包含了所有模型需要处理的字符。分词将原始文本分割成多个不同的词可以采用例如根据空间词频字符等不同算法。映射将分词映射成词汇表中对应的向量。可能会有例如OOV这样的问题。词汇表大小词汇表过大会导致模型推理开销很大由于向量大小增加动态词汇表根据如词频阈值等构建动态词汇表。拆分子词将词汇拆分成子词。预训练词语将预训练的词汇嵌入分词模型初始化词汇表。把自注意力机制复杂度从n^{2}变为n的方法局部注意力让模型只关注该词周围一部分词语之间的注意力。窗口注意力设置一个窗口只关注窗口内的词语之间的注意力。可学习的位置偏移训练模型来指导窗口多大。多尺度注意力同时计算不同大小窗口的注意力权重加权平均。Bert的CLS能够有效表达Sentence Embedding吗取决于序列长度与复杂性。在序列长度和复杂度比较低时由于cls能够汇总这句话的语义内容因此可以在比较简单的语义比较中通过比较cls来取得不错的效果。但如果长度和复杂度很高标记不足以提供足够的信息这时候就要使用更上层或结合多个位置表示获得全面的词嵌入。使用字节对BPE算法来分词对于跨语言cross-lingual模型有什么意义是否有问题以及改进优点跨语言通用性BPE是基于统计的分词算法可以自学习来构建词汇表并生成通用的标记化方式。语言无关使用不同语言单词或子词分解成相同的字符使得语言模型处理不同语言文本时有一定通用性。处理稀缺语言问题处理稀缺语言可以减小词汇表大小缓解模型训练和推理压力。问题词汇表不一致不同语言上的词汇表有差异子词过于细粒度。处理方法共享子词单位在不同语言的语料库中共享子词单位。后处理对子词单位进行合并。多尺度表示同时使用多个不同粒度的子词单位苹果和苹同时出现。如果在对Transformer进行训练时有些训练集很大有些很小如何训练可以使得Transformer可以比较好的处理不同类型的任务类别加权损失函数训练集较少的权重较大较多的权重较小。数据增强平移旋转等。迁移学习先在数据集较多的进行预训练然后再较少的上面进行微调。数据重采样对样本较多采用数据重采样来减少样本量。类别分层采样采样类别分层采样确保每个批次有各个类别的样本。如何使用多种类小样本对Transformer训练取得很好的分类效果解释架构设计与数学原理类别加权损失函数通过设计不同权重的函数使得模型对于样本量较小的类别更重视常见的例如加权交叉熵损失每个类别的权重与样本数量成反比。过采样与欠采样过采样来增加小样本欠采样减少大样本可以帮助模型更好的学习类别之间的特征和区分性信息。类别嵌入引入类别嵌入向量作为模型的输入使得模型在预训练后提前了解类别之间的特征和区分性信息。类别自适应注意力模型可以自主动态调整注意力权重。模型迁移同上一个问题。在给Transformer输入embedding的时候是否可以用多方来源的词嵌入训练模型阐述数学原理以及工程上的具体实现限制。是的这种方法称为多嵌入策略可以使用不同数据集不同来源的数据来进行训练提高模型在不同领域的能力。数学原理是在Transformer模型中embedding本质是将不同的词映射到词汇表中的不同向量中通过使用多方来源的词嵌入来训练实际上是为模型提供了更丰富的语义信息提高模型的泛化能力可以充分利用模型在不同领域的知识。嵌入方式简单平均加权融合权重可以设定或者训练门控机制动态调整不同词嵌入的贡献领域特定嵌入类似于预训练和后训练更深更宽的神经网络是不是意味着更强的模型架构的工程化落地更深更宽的神经网络通常意味着更多的注意力头与更多的层意味着模型可以更完整和详细地理解语义信息。工程化落地时更大的神经网络可以适应不同的任务和数据因为他们有更强大的表示能力能更好的理解和处理复杂的情况。参数的信息表达能力更多的参数意味着更强大的信息表达能力使得模型可以学习到语义中更细与更复杂的信息提高神经网络对语义的建模能力。从而产生更具有泛化能力的预训练模型。训练任务更大规模数据集训练——学习到语言的统计规律——提高新任务的适应能力更长时间训练——更好地利用数据集的信息。如何大规模降低Transformer中embedding中的参数数量方法使用低纬度嵌入矩阵和共享参数。一种方法是使用词嵌入的哈希技巧来减小词嵌入的维度和参数数量。基本原理利用哈希函数把每个词语映射到不同数量的桶中每个桶挑选一个代表向量从而降低了词嵌入的维度减少词的参数数量。工程实践选择哈希函数使用简单取模或者复杂的一致性哈希确定桶数量根据期望的参数以及词嵌入维度构建哈希表模型训练对于每个词先读取对应的桶再取出桶中的共享词嵌入向量描述Transformer中不同layer的FFN直接的关系例如在bert不同层的cls有什么关系对角阵随着layer加深有何变化。不同层的FFN之间存在一定的关系虽然他们在每一层的位置之间有相似性但是他们在模型整体之间有一定差别。cls在不同层的cls标记输出被用作整个句子的表示他们都是整个句子的含义但不同层之间有一些微小差别可能因为他们学到了不同的语义信息。对角阵的变化在自注意力机制中q与v相乘得到注意力矩阵而对角阵则意味着每个位置对自己的关注度不同层之间大致相同层数加深可能对角阵内容有些变化因为可能学习到不同的语义。通常情况下应该保持稳定。如何降低Transformer层的FFN层参数数量可以使用减少隐藏层维度以及减少隐藏层参数数量实现可以用来防止过拟合。利用卷积代替全连接由于卷积有局部连接和参数共享的特征矩阵分解技术将权重矩阵分解为两个或多个小矩阵的乘积。Transformer层的layer过多导致的后果梯度消失和梯度爆炸过拟合由于参数过多如果训练数据集不足计算资源消耗训练时间增加。Bert中的NSP可能存在的问题这些问题背后的数学原理是什么该如何解决可以去掉训练任务吗问题缺乏泛化性预测两个句子是否相邻的方法不具有泛用性提高训练开销不平衡的训练样本负样本数量远超正样本数学原理本质是一个二分类问题输入两个句子通过线性变化和softmax来给出这两个句子是否相邻。解决方法多任务学习不止训练是不是相邻句子平衡训练样本简化模型结构删去NSP在某些情况下可以去掉NSP训练。分析Transformer的Batch大小与信息困惑度ppl之间的关系以及数学原理。Batch对梯度计算的影响较大的梯度使得梯度更新更稳定由于使用均值降低噪声的影响对参数更新的影响较大的梯度使得参数更新方向更准确对ppl的影响利用对梯度和参数更新的影响来降低困惑度。从数据的角度分析为什么Transformer在对参数的quantization时使用INT8。包括压缩具体过程KL散度长尾分布等如何处理量化后模型质量降低的情况。微调模型量化后对量化后的模型进行微调使用原始数据集重新训练模型降低量化对模型性能的影响提高模型稳定性。使用复杂的量化方案如混合精度量化。动态量化通过输入数据分布动态调整量化参数从而保持模型精度。从数学角度阐述为什么Neuron Network能够代表任意人复杂度的信息使用神经网络具体表达有什么优势非线性映射关系通用逼近定理即足够多神经元的但隐藏前馈神经网络理论上可以逼近任意函数并行计算。神经网络具体优势灵活性自动特征学习神经网络可以自动识别语义信息等特征无需手动输入特征端到端学习直接从原始输入到最终输出结果的端到端无需手动处理描述三种判断Transformer中神经元相对重要程度的具体方法以及背后的数学原理梯度重要性分析神经元对损失函数梯度相对重要程度激活值重要性分析激活值分布信息熵重要性输出信息熵