<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chattyfish的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/chattyfish</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; chattyfish]]></copyright><item><title><![CDATA[The Advisors Alliance Network of Mixture of Experts]]></title><link>https://blog.csdn.net/chattyfish/article/details/131975740</link><guid>https://blog.csdn.net/chattyfish/article/details/131975740</guid><author>chattyfish</author><pubDate>Tue, 10 Oct 2023 00:35:04 +0800</pubDate><description><![CDATA[专家混合模型（MoE）[1]是一种知名的方法，它结合了多个“专家”模型，每个模型专门处理输入空间的不同部分。除了专家混合（MoE）方法，还有一些其他的AI模型组合策略，如bagging和boosting，这些方法涉及训练多个模型并组合他们的预测以减少过拟合和提高鲁棒性。这个Transformer模型，被称为Transformer As Gate（TAG），源自与其他专家模型相同的基础模型，但是专门微调并优化其识别但不回答各种专业知识的能力。与MoE不同，任务处理后，结果直接返回，不进行选举或汇总。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型调优之P-Tuning]]></title><link>https://blog.csdn.net/chattyfish/article/details/132051461</link><guid>https://blog.csdn.net/chattyfish/article/details/132051461</guid><author>chattyfish</author><pubDate>Mon, 09 Oct 2023 23:00:09 +0800</pubDate><description><![CDATA[P-Tuning就是提示调优（Prompt Tuning），主要思想是固定预训练模型的参数，然后在模型的输入端添加可学习的"prompt"（提示）进行调整。这种方法的优点是计算成本低，因为只需要更新少量的参数。它不改变模型，而是通过对提示的优化，让模型输出最佳的结果，相关论文可参考【1】。从原理上讲，是在已训练的模型L的外面再套上一个可训练的模型P，在不改变L的情况下通过优化P，让P(L)最优。因为L的输入实际上就是提示，所以叫提示调优。提示调优可以通过手动实现（不推荐）也可以通过自动训练实现。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型组合简介]]></title><link>https://blog.csdn.net/chattyfish/article/details/132014282</link><guid>https://blog.csdn.net/chattyfish/article/details/132014282</guid><author>chattyfish</author><pubDate>Mon, 31 Jul 2023 02:56:48 +0800</pubDate><description><![CDATA[常见的算法有AdaBoosting和Gradient Boosting等，AdaBoost侧重于在每一轮迭代中增加那些被前一轮弱学习器错误分类的样本的权重，而Gradient Boosting则是通过拟合前一轮的残差来生成新的弱学习器。因为模型的总类不一样，它们的差别是比较大的，所以在输出的时候，会先将各个子模型的输出连接起来做一个线性组合得到最终输出。模型组合比如Boosting，Bagging和stacking等等的基本思想是将多个较弱的模型合成比较强的一个模型，但它们采用的方法不同。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：混合专家模型（MoE）简介]]></title><link>https://blog.csdn.net/chattyfish/article/details/131908504</link><guid>https://blog.csdn.net/chattyfish/article/details/131908504</guid><author>chattyfish</author><pubDate>Tue, 25 Jul 2023 04:57:13 +0800</pubDate><description><![CDATA[混合专家模型，英文叫Mixture of Experts (MoE) 是一种模型设计策略，它通过将多个模型（称为"专家"）的预测结果结合在一起，以获得更好的预测性能。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型量化技术3 - GPTQ]]></title><link>https://blog.csdn.net/chattyfish/article/details/131874310</link><guid>https://blog.csdn.net/chattyfish/article/details/131874310</guid><author>chattyfish</author><pubDate>Sun, 23 Jul 2023 06:55:03 +0800</pubDate><description><![CDATA[之前的后训练方法只能在8位时保持准确，而之前的基于训练的技术只处理了比这小一个到两个数量级的模型。GPTQ可以在大约四个GPU小时内量化具有1750亿参数的GPT模型，将位宽减少到每个权重的3或4位，与未压缩的基线相比，准确性降低可以忽略不计。该方法的压缩增益是以前提出的一次性量化方法的两倍多，保持了准确性，使我们首次能够在单个GPU内执行1750亿参数的模型进行生成推断。GPTQ遵循最先进的后训练量化方法的结构，通过逐层进行量化，为每一层解决相应的重建问题。这一步是为了将量化后的值恢复到原始的值范围。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型量化技术2-源代码]]></title><link>https://blog.csdn.net/chattyfish/article/details/131863190</link><guid>https://blog.csdn.net/chattyfish/article/details/131863190</guid><author>chattyfish</author><pubDate>Sat, 22 Jul 2023 06:54:39 +0800</pubDate><description><![CDATA[在模型的训练阶段，我们通常会寻求优质的硬件条件和更高的计算精度，以便训练出性能更优秀的模型，从而获得更高的评估分数。在这个函数中，通过加上一个特定的浮点数（12582912.f，这是2的23次方），可以将浮点数的小数部分移到尾数的位置。在模型量化技术（1）中，我们提到一个重要的步骤是找到权重附近的“落脚点”，在实际运算过程中，我们是找到浮点数附近的整数，就是做四舍五入运算来间接处理。这段代码实现了一个产品化的，高性能的，精准的将浮点数四舍五入到最接近的整数的函数。的值会增加1，实现了四舍五入的效果。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型量化技术1-简介]]></title><link>https://blog.csdn.net/chattyfish/article/details/131846541</link><guid>https://blog.csdn.net/chattyfish/article/details/131846541</guid><author>chattyfish</author><pubDate>Fri, 21 Jul 2023 21:07:41 +0800</pubDate><description><![CDATA[简单的说，激活的意思就是如果这个靠近的某个落脚点，就把它算成某个落脚点的值. 在训练模型的时候，机器会调整这些权重，这些权重会用某个落脚点的值来表示。总的来看，模型量化的精度损失取决于多种因素，包括所使用的量化策略、模型的特性，以及实际应用中的需求等。现在，我们把这个0到1之间的范围称为一个权重，看成一片连续的水面，上面表中的值看成一个一个的“落脚点”。依此类推，你有2的n次方种方法来表示这个范围，这里的n就是比特的位数。就是说，你仅用少量的精度损失的代价节省了大量的存储空间，是非常划算的。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：管道并行优化技术]]></title><link>https://blog.csdn.net/chattyfish/article/details/131840449</link><guid>https://blog.csdn.net/chattyfish/article/details/131840449</guid><author>chattyfish</author><pubDate>Fri, 21 Jul 2023 10:02:36 +0800</pubDate><description><![CDATA[这就需要一个同步点，也就是"栅栏"，在此点上，所有线程都会等待，直到所有线程都到达这个点，然后再一起继续执行。由于数据需要在设备之间复制，因此代码应用了一种名为"栅栏同步"的技术，用来确保数据在被复制到下一个设备之前已经被计算出来。另外批量的训练数据也划分成更小的批量，称为微批次（micro-batches），在当前设备处理完毕微批次后，把输出传送到下一个设备，同时自身接受下一个微批次，从而实现并行处理。这是为了将一个大模型分割成小的部分，然后每一部分放在不同的设备（如GPU）上进行并行计算。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：零冗余优化器技术]]></title><link>https://blog.csdn.net/chattyfish/article/details/131826380</link><guid>https://blog.csdn.net/chattyfish/article/details/131826380</guid><author>chattyfish</author><pubDate>Thu, 20 Jul 2023 20:58:11 +0800</pubDate><description><![CDATA[这使得我们可以在相同的硬件上训练更大的模型，或者在更小的硬件上训练相同的模型。ZeRO-1：优化器状态分区（Optimizer State Partitioning） 在传统的数据并行训练中，每个设备都会保存一份完整的模型参数和优化器状态，这会导致内存的大量浪费。ZeRO的目标是通过减少冗余，提高模型训练的内存效率，从而使得更大的模型可以在有限的硬件资源上进行训练。ZeRO主要包括三个级别的优化：ZeRO-1，ZeRO-2和ZeRO-3，每个级别都在前一个级别的基础上进行了进一步的优化。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：激活检查点技术]]></title><link>https://blog.csdn.net/chattyfish/article/details/131824740</link><guid>https://blog.csdn.net/chattyfish/article/details/131824740</guid><author>chattyfish</author><pubDate>Thu, 20 Jul 2023 10:51:19 +0800</pubDate><description><![CDATA[方法中，它首先恢复在前向传播过程中保存的RNG状态，然后运行前向传播函数以重新计算激活状态，并使用保存的梯度进行反向传播。在深度学习模型的训练过程中，前向传播会计算并存储每一层的激活值，这些激活值在后向传播时被用来计算梯度。然而，对于深度很大的模型，这种方式可能会导致内存溢出，因为需要存储大量的激活值。激活检查点（Activation Checkpointing）是一种用于优化深度学习模型训练的技术，它可以在内存使用和计算效率之间进行权衡，以在有限的硬件资源下训练更大的模型。具体实现的关键是一个名为。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：模型卸载（Offload Model）技术]]></title><link>https://blog.csdn.net/chattyfish/article/details/131822469</link><guid>https://blog.csdn.net/chattyfish/article/details/131822469</guid><author>chattyfish</author><pubDate>Thu, 20 Jul 2023 10:22:15 +0800</pubDate><description><![CDATA[此时，我们可以利用模型卸载技术，将最多6GB的参数加载到8GB的显存上，然后将剩余的参数保存在32GB的RAM中，使模型能够正常运行。最后，新计算的激活保留在 GPU 上，准备进行下一个分片的计算。总的来说，OffloadFunction 类提供了一种机制，使得模型的一个分片可以在 CPU 和 GPU 之间进行动态的加载和卸载，从而支持大模型的训练。模型卸载的步骤通常包括将模型分割成多个部分，每个部分可以单独加载到GPU的显存中进行计算，而其他部分则保留在其他设备上，需要时再从其他存储设备上加载。]]></description><category></category></item><item><title><![CDATA[逐行对比LLaMA2和LLaMA模型源代码]]></title><link>https://blog.csdn.net/chattyfish/article/details/131799826</link><guid>https://blog.csdn.net/chattyfish/article/details/131799826</guid><author>chattyfish</author><pubDate>Wed, 19 Jul 2023 05:43:28 +0800</pubDate><description><![CDATA[这是因为键和值的数量直接影响了注意力矩阵和值矩阵的大小，如果序列长度非常大，这些矩阵的存储和计算可能会变得非常昂贵。在这种情况下，需要在计算注意力权重前，将键和值的头数通过复制的方式扩展到与查询头数一样多，才能进行查询和键的点积操作。这个函数主要作用是当键（key）和值（value）的头数小于查询（query）的头数时，将键和值的头数复制至与查询头数相同。1. 可能模型在并行训练的时候，遇到硬件问题，比如在多板卡之间比如NVLink之间做矩阵变换的时候出错，临时做的修改。]]></description><category></category></item><item><title><![CDATA[开源大模型成功的背后离不开中国研究人员的贡献]]></title><link>https://blog.csdn.net/chattyfish/article/details/130944330</link><guid>https://blog.csdn.net/chattyfish/article/details/130944330</guid><author>chattyfish</author><pubDate>Tue, 30 May 2023 11:49:53 +0800</pubDate><description><![CDATA[2023年3月30日，LLaMA的微调版本Vicuna已经达到ChatGPT 90%的质量（1）. 由于LLaMA和GPT2都是开源模型，而GPT3，ChatGPT3.5和ChatGPT4都是闭源模型，笔者详细对比了LLaMA和GPT2的在模型层面的区别，以便从模型本身发现GPT的进步要素。由于GPT3以后OpenAI选择了闭源，隐藏了模型关键细节。1. 在OpenAI的ChatGPT3.5发表前，中国籍的研究人员，特别是苏剑林，已经发表了不逊于ChatGPT的关键研究成果，且在两年后得到了验证。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：复数形式的旋转位置编码]]></title><link>https://blog.csdn.net/chattyfish/article/details/130936027</link><guid>https://blog.csdn.net/chattyfish/article/details/130936027</guid><author>chattyfish</author><pubDate>Mon, 29 May 2023 20:57:54 +0800</pubDate><description><![CDATA[在传统的 Transformer 模型中，位置信息是通过加入到词向量中的固定位置编码来提供的。这种方法在处理较短的序列时工作得相当好，但在处理长序列时，位置编码可能会被淹没在词向量中，导致位置信息的丢失。在传统的 Transformer 模型中，位置信息是通过加入到词向量中的固定位置编码来提供的。这种方法在处理较短的序列时工作得相当好，但在处理长序列时，位置编码可能会被淹没在词向量中，导致位置信息的丢失。这样，位置信息就被直接编码到了词向量的方向上，而不仅仅是它的大小。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：位置编码]]></title><link>https://blog.csdn.net/chattyfish/article/details/130259951</link><guid>https://blog.csdn.net/chattyfish/article/details/130259951</guid><author>chattyfish</author><pubDate>Thu, 20 Apr 2023 10:17:45 +0800</pubDate><description><![CDATA[位置编码的目的是向模型提供每个词在句子中的相对位置信息，因为Transformer的自注意力机制（Self-Attention Mechanism）并不关心词的顺序。这些正弦和余弦函数具有不同的频率，从而产生一个独特的编码向量，用于捕捉序列中每个位置的信息。在将输入序列嵌入到模型中时，对应的位置编码向量与输入词嵌入向量相加，以便模型能够同时学习词的语义信息和在序列中的位置信息。使用正弦和余弦函数的位置编码方法使得模型能够更好地学习和利用序列中的位置信息，从而提高整体性能。这有助于区分序列中的不同位置。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：位置逐元素前馈]]></title><link>https://blog.csdn.net/chattyfish/article/details/130234908</link><guid>https://blog.csdn.net/chattyfish/article/details/130234908</guid><author>chattyfish</author><pubDate>Thu, 20 Apr 2023 03:30:30 +0800</pubDate><description><![CDATA[位置逐元素前馈（position-wise feed-forward）在Transformer架构中被广泛使用，可以放在自注意力（self-attention）层之后，它的主要目的是在每个序列的位置单独应用一个全连接前馈网络。例如，在GPT（基于Transformer的解码器）中，每个解码器层都包含一个因果自注意力子层和一个位置逐元素前馈子层。第一个线性层扩展每个位置的表示，为学习更复杂的特征提供可能性，激活函数帮助模型学习更复杂的非线性特征，然后用第二线性层将每个位置的表示压缩回原始维度。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：缩放点积注意力机制]]></title><link>https://blog.csdn.net/chattyfish/article/details/130234804</link><guid>https://blog.csdn.net/chattyfish/article/details/130234804</guid><author>chattyfish</author><pubDate>Wed, 19 Apr 2023 01:35:24 +0800</pubDate><description><![CDATA[具体来说，Multi-Head Attention将输入矩阵分别进行多个头的线性变换，然后对每个头的变换结果分别计算Scaled Dot-Product Attention，最后将每个头的Attention结果拼接在一起并通过一个线性变换输出。通过这种方式，Scaled Dot-Product Attention可以计算出Query和Key之间的相似度，同时考虑了Value矩阵对最终结果的影响，进而实现了注意力机制的作用。将scores除以d_k的平方根（np.sqrt(d_k)），这就是所谓的缩放，]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：多头注意力机制的作用]]></title><link>https://blog.csdn.net/chattyfish/article/details/130234363</link><guid>https://blog.csdn.net/chattyfish/article/details/130234363</guid><author>chattyfish</author><pubDate>Wed, 19 Apr 2023 01:20:43 +0800</pubDate><description><![CDATA[初始权重随机分布，梯度下降优化过程推动每个头去适应其权重，以学习不同的特征，因为这有助于减少总体损失，训练数据本身是可解耦的，那么多头机制就可能碰上，Dropout，超参数，特殊设计。如果所有头都学习了相同的特征，则会冗余且效率低下，模型在其受训任务上的表现会不佳，那么这些训练结果会被放弃，留下的大概率就是学习到了更多特征的模型。：在工业化实用的模型上，对一些已知的、直觉体会到的、猜想到的特征，工程师会设计特殊的网络结构去捕捉，而这些经验性的网络结构有可能各种原因没有发表。所以，调参是非常重要的。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：因果掩码]]></title><link>https://blog.csdn.net/chattyfish/article/details/130233221</link><guid>https://blog.csdn.net/chattyfish/article/details/130233221</guid><author>chattyfish</author><pubDate>Tue, 18 Apr 2023 23:21:17 +0800</pubDate><description><![CDATA[为了防止这种情况，我们使用了一个注意力子序列屏蔽（attention subsequence mask），将所有未来的令牌设置为零，有效地从注意力机制中屏蔽了它们。具体实现中，这种输入不是串行输入的，而且提前准备的，蒙住从第二个到结尾的所有词，蒙住从第三个到结尾的所有词。在Transformer模型中，自注意力（self-attention）是在整个令牌（token）序列上计算的，包括当前令牌之后的令牌。这使得模型在进行预测时只能关注过去和当前的令牌，并确保它仅基于每个时间步骤可用的信息进行预测。]]></description><category></category></item><item><title><![CDATA[一步一步理解大模型：查询序列和键序列]]></title><link>https://blog.csdn.net/chattyfish/article/details/130231970</link><guid>https://blog.csdn.net/chattyfish/article/details/130231970</guid><author>chattyfish</author><pubDate>Tue, 18 Apr 2023 22:24:38 +0800</pubDate><description><![CDATA[因此，点积操作可以用于衡量两个序列之间的相似度，而在self-attention计算中，它被用于计算每个查询序列与每个键序列的相似度，以便根据这些相似度权重对值序列进行加权平均。总的来说，在self-attention计算中，通过计算查询序列与键序列的相似度，可以在保留序列之间交互信息的前提下，对序列中的每个元素进行加权处理，进而获取更准确的特征表示。方法中，我们首先将输入进行查询、键和值的线性变换，然后将每个头对应的矩阵进行转置，接着计算相似度，并对相似度进行归一化，最后将值进行加权求和，得到最终输出。]]></description><category></category></item></channel></rss>