可后台滴滴小英熊学长欧~
目录:
一. 生成式大模型简介
二. 大模型内在作用
三. LLMs复读机问题
四. llama系列
五. 如何选择大模型
六. 大模型在各领域的作用
七. 大模型处理更长的文本
1.什么是生成式大模型
模型参数量更大,参数量都在 Billion 级别;可通过条件或上下文引导,产生生成式的内容(所谓的 prompt2engineer 就是由此而来)。
1.训练角度
2.推理角度
1.什么是LLMs复读机
2.为什么会出现LLMs复读机
2.如何缓解LLMs复读机
token级非似然训练
sentence级非似然训练
上图为论文中的结果,其中seq-rep-4 代表 4-gram重复率;uniq-seq 代表总共出现的不同词的个数;pp1代表句子困惑度;acc 代表句子准确性;rep 代表前词重复率wrep 代表加权前词重复率。从这些指标中可以明显观察到,unlikelihood training 能降低整体生成句子的重复度。
unlikelihood training方法是一种表现不错的抑制重复方式,但其中集合C的设计比较困难。针对不同的任务,集合C都需要进行精心的设计,才能保证在生成精度基本不降的情况下抑制模型生成重复与单调的结果。(该方法仅能解决 1.1节中阐述的前两种重复问题,无法解决输入多次相同 prompt输出单调性的问题)
(2)引入噪声
在生成文本时,引入一些随机性或噪声,例如通过采样不同的词或短语,或者引入随机的变换操作,以增加生成文本的多样性。这可以通过在生成过程中对模型的输出进行采样或添加随机性来实现。
(3)Repetition Penalty重复惩罚
重复性惩罚方法通过在模型推理过程中加入重复惩罚因子,对原有 softmax 结果进行修正,降低重复生成的 token 被选中的概率
从图上可以明显看出标记间相似度降低了,标记间相似度降低即不同标记在高维空间表征分离能有效降低模型仅生成个别重复词或字的概率。而对比搜索方法就是在解码阶段限制相似令牌生成的概率,大大降低生成内容重复率和单调性。
其中第一项就是原模型的概率,后面一项可以理解成一种惩罚,当前 token 与历史 token 相似度较高时,就降低当前 token 的概率对比 loss 和对比 search 在训练和推理两个阶段限制生成 token 间的相似度,有效降低了模型对一些特别常见表达的依赖,让模型尝试生成不一样的表达,整体上提升模型的创造性。(该方法仅能解决字、词两种重复问题,无法解决输入多次相同 prompt 输出单调性的问题)
(5)Beam Search定向搜索
Beam Search 是对贪心策略一种改进。思路简单,就是稍微放宽考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保密 num beams个。当 num beams=1 时集束搜索(Beam Search)就退化成了贪心搜索。Beam Search虽然本质上并没有降低重复率的操作,但是该策略确实在结果上优化了部分生成结果,降低了一定的重复率。
下图是一个实际的例子,每个时间步有ABCDE共5种可能的输出,图中的 num beams=2,也就是说每个时间步都会保留到当前步为止条件概率最优的2个序列。
Beam search 理论上仅是为了解决贪婪搜索给到的案仅局部最优而全局搜索又在时间复杂度上不可行而提出的折中算法,并不能对大模型中的任何重复问题进行修正,甚至有可能增大重复概率。但从翻译的测试实验结果来看,它确实在一定程度上改变了模型Softmax后的分布情况,优化了输出的结果,所以在部分大模型任务上能抑制重复生成问题。Huggingface 中,model.generate 中已经包含此参数仅需设置 num beams=2 即可开启集束搜索。
(6)Top-K Sampling采样
TopK 通过对 Softmax 的输出结果 logit 中最大的K个 token 采样来选择输出的 token,该方法存在的问题是当概率分布很极端时,即模型很确定下一个 token 时,容易造成生成错误。以下图为例,TopK采样会选择最大的K个 token,并通过logit 值对K个 token 进行采样,相比于贪心搜索增添了随机性,相当于同样的输入,多次经过TopK 采样生成的结果大概率不会一样。
TopK 采样是一种行之有效,能简单暴力的解决 1.1 节中提出所有重复单调问题的方案之一,当然它存在的最大问题是最后生成的句子存在不通现象,并不能保证句子的通顺度以及对prompt 的忠诚度。Huggingface 中,mode1.generate中已经包含此参数,需设置 do sample=True,开启采样模式,同时设置 top k 值topk 值默认为 50。
(7)Nucleus sampler 核取样器
Nucleus sampler 俗称 TopP 采样,一种用于解决TopK 采样问题的新方法,该采样方式不限制K的数目,而是通Softmax后排序token的概率,当概率大于P时停止,相当于当模型很确定下一个 token时,可采样的K也会很少,减少异常错误发生的概率。以下图为例TopP 采样会不断选择 logit 中最大概率的 token,放入一个 list 中,直到 list 中计算的总概率大于设置的 TopP 值,后对 list 中的 token概率进行重新计算,最终根据计算出来的概率值对list 中的 token进行采样。
Nucleus sampler 是对简单暴力的 TopK 采样修改后的方法,也能解决上面提出所有重复单调问题,相比 TopK,该方法生成的句子通顺度以及对 prompt 的忠诚度更佳,一般选择它,而不选择TopK。Huggingface 中,model.generate 中已经包含此参数需设置 do sample=True,开启采样模式,同时设置 top p值,top_p值默认为 1.0。
(8)Temperature温度
生成模型中抽样包含随机性,因此每次生成时,相同的prompt 可能会产生不同的输出。温度是用于调整随机程度的数字。
较低的温度意味着较少的随机性;温度为0将始终产生相同的输出。执行具有“正确"答案的任务,对于总结类,翻译类等具有明确答案的任务,较低的温度(小于1)更合适。如果模型开始自我重复,则表明温度设置过低。高温意味着更多的随机性,这可以帮助模型给出更有创意的输出。如果模型开始偏离主题或给出无意义的输出,则表明温度过高。温度调整公式如下:
Temperature 参数就是前面介绍 repetition penalty 中的T参数,提高 Temperature 配合上文两种采样算法,可以达到生成更激进创新性回答的需求,但生成句子的稳定性不可控。Huggingface中,model.generate中已经包含此参数,仅默认为 1.0需设置 temperature。
(9)No repeat ngram size
该方法是一种最暴力抑制重复的方法,通过限制设置的ngram 不能出现重复,如果重复,就选概率次大的一个,来强制模型不生成重复的 token。该功能一般都会开启,来保证生成的句子不犯很离谱的连续重复问题。(该方法仅能解决 1.1 节中阐述的前两种重复问题,无法解决输入多次相同 prompt输出单调性的问题)Huggingface 中,model.generate中已经包含此参数,仅需设置 no repeat ngram size=N 即可。
(10)重复率指标检测
常见重复率监测指标:seq-rep-N,uniq-seq,rep,wrep。通过这些指标的融合,可以对重复生成的结果进行一定程度的监测,并在监测到异常生成结果时,通过加入特殊字符,修改 prompt 表达等形式来重新生成结果。通过我们的测试,通过切分或加入特殊字符的方式确实能让本身异常的翻译结果恢复正常,但潜在风险是翻译的语序可能会出现一定的问题。(对其他领域生成结果的影响有待进一步探索)
(11)后处理和过滤
对生成的文本进行后处理和过滤,去除重复的句子或短语,以提高生成文本的质量和多样性。可以使用文本相似度计算方法或规则来检测和去除重复的文本。
(12)人工干预和控制
对于关键任务或敏感场景,可以引入人工干预和控制机制,对生成的文本进行审查和筛选,确保生成结果的准确性和多样性。
1.llama输入句子可以无限长吗
限制在训练数据。理论上 rope 的 lama 可以处理无限长度,但实际上存在一些限制和挑战。下面是一些相关的考虑因素:
(1)计算资源
生成长句子需要更多的计算资源,包括内存和计算时间。由于 LLMs 通常是基于神经网络的模型,计算长句子可能会导致内存不足或计算时间过长的问题。
(2)模型训练和推理
训练和推理长句子可能会面临一些挑战。在训练阶段,处理长句子可能会导致梯度消失或梯度爆炸的问题,影响模型的收敛性和训练效果。在推理阶段,生成长句子可能会增加模型的错误率和生成时间。
(3)上下文建模:LLMs 是基于上下文建模的模型,长句子的上下文可能会更加复杂和深层。模型需要能够捕捉长句子中的语义和语法结构,以生成准确和连贯的文本。
尽管存在这些挑战,研究人员和工程师们已经在不断努力改进和优化 LLMS,以处理更长的句子。例如,可以采用分块的方式处理长句子,将其分成多个较短的片段进行处理。此外,还可以通过增加计算资源、优化模型结构和参数设置,以及使用更高效的推理算法来提高 LLMs 处理长句子的能力。
Bert 的模型由多层双向的 Transformer 编码器组成,由 12 层组成,768 隐藏单元,12 个 head,总参数量 110M,约 1.15 亿参数量。NLU(自然语言理解)任务效果很好,单卡GPU可以部署,速度快V100GPU 下1秒能处理2千条以上。
ChatGLM-6B,LLaMA-7B 模型分别是 60 亿参数量和 70 亿参数量的大模型,基本可以处理所有 NLP任务,效果好,但大模型部署成本高需要大显存的 GPU,并且预测速度慢,V100 都需要1秒一条。
1)NLU 相关的任务,用 BERT 模型能处理的很好,如实体识别、信息抽取、文本分类,没必要上大模型;
2)NLG 任务,纯中文任务,用chatGLM-6B,需要处理中英文任务,用chinese-alpaca-plus-7b-hf
1.领域特定知识不同领域拥有各自特定的知识和术语,需要针1.对该领域进行训练的大模型才能更好地理解和处理相关文本。例如,在医学领域,需要训练具有医学知识的大模型,以更准确地理解和生成医学文本。
2.语言风格和惯用语:各个领域通常有自己独特的语言风格和惯用语,这些特点对于模型的训练和生成都很重要。专门针对某个领域进行训练的大模型可以更好地掌握该领域的语言特点,生成更符合该领域要求的文本。
3.领域需求的差异:不同领域对于文本处理的需求也有所差异,例如,金融领域可能更关注数字和统计数据的处理,而法律领域可能更关注法律条款和案例的解析。因此,为了更好地满足不同领域的需求,需要专门针对各个领域进行训练的大模型。
4.数据稀缺性:某些领域的数据可能相对较少,无法充分训练通用的大模型。针对特定领域进行训练的大模型可以更好地利用该领域的数据,提高模型的性能和效果
1.什么是生成式大模型
step1:将新的长度压缩到原来 2048 长度上,这样的好处是能复用原来的位置信息,增加长度并没有破坏 position 的权重。比如从 2048 扩展到 16384,长度变为原来的8倍,那么值为 10000的 position id,被压缩成 10000/8=1250。
# 将 position ids 按比例缩一下。
# https://kaiokendev.github.io/context
query_states, key states =
apply_rotary_pos_emb(query_states, key_states, cos,sin, position ids / ratio)
step2:用训练 Vicuna 的对话语料做微调,超过 16k 的文本被截断。
position等比例缩放既然有用,那后续会不会有一种新的position 构造的方式,无论多长都可以归一到同样的尺度下,只要 position 的相对位置保持不变就可以?其实 ALiBi的方法就是一个比较简单优雅的方式,可以部分解决扩展长度的问题。
商业模型比如 ChatGPT 和 Claude 到底是怎么做的?这个目前都没有公开。首先语料是不缺的,所以只能是结构上的变化。但是这两个商业模型规模都是 100B 这个量级的,这么大的参数,如果只增加序列长度而不做其他优化的话,很难训练起来。目前有证据的方法如下: 稀疏化,GPT3 的论文中曾提到有这方面的尝试:Google 的周彦祺在一次分享中透露 GPT-4用了 MoE 的技术(猜测是 100B16E),所以应该有类似的方法来保证在序列变长的情况下,仍然能高效的训练模型;Multi-Query Attention。Google 的 PaLM, Falcon 等模型都用到过,通过权重共享来提升性能。
真正的出路可能还是 Linear Attention,将 Attention 的复杂度从O(N2)降低为 O(N).比如 Linear Transformer 和 RWKV。其实关于变长序列的问题,历史上现成的解决方案就是 RNN,通过信息传递来解决。Transformer 的卖点就是 Attention is All your Need丢弃了 RNN,RWKV敢于把 RNN拿回来,还是很有勇气,非常好的一个工作。现在的 Attention 就有点像历史上的 MLP,每个节点之间都要建立关联,而 MLP 之后涌现了大量新的结构,所以 Transformer 是起点,后续肯定会有更合理的结构来取代它