2025-人工智能 AI 大模型面试题总结

一、大模型(LLMs)基础面

1、目前 主流的开源模型体系有哪些?

语言模型

  • GPT系列:由OpenAI开发,包括GPT-3等,基于Transformer架构,具有强大的自然语言生成和理解能力。
  • BERT系列:由Google开发,包括BERT、RoBERTa等,擅长处理文本分类、命名实体识别等自然语言处理任务。
  • T5:由Google开发,将多种NLP任务统一为文本到文本的格式。
  • LLaMA:由Meta开发,性能卓越,70B版本接近GPT-4 Turbo。
  • Qwen系列:由阿里巴巴云开发,覆盖从7B到110B的全尺寸范围,支持多模态应用。
  • glm系列:由清华大学智谱清言团队开发,具有强大的语言理解和生成能力。

多模态模型

  • 腾讯混元大模型:包括文生图、文生3D、文生视频等多个模态模型,开源后在社区中得到了广泛应用。
  • BriVL:首个中文通用图文多模态大规模预训练模型,在图文检索任务上表现优异。

其他领域

  • ELECTRA:由Google提出,通过替换样本生成任务进行训练,效率高。
  • ProtTrans:国内最大的蛋白质预训练模型。

这些模型在自然语言处理、多模态理解等领域有着广泛的应用和研究价值,推动了人工智能技术的发展.

2、prefix Decoder和causal Decoder和Encoder-Decoder区别是什么

prefix Decoder(前缀解码器)

  • 定义与特点:Prefix Decoder,也称为非因果解码器,是Encoder-Decoder架构的一种变体.它在处理输入序列时采用双向注意力机制,以充分理解全局上下文;而在生成输出序列时,则采用单向注意力机制,保证生成的连贯性 .其结构介于Causal Decoder和Encoder-Decoder之间,输入部分的token互相能看到 .
  • 代表模型:包括GLM-130B、ChatGLM-6B等 .
  • 应用场景:适用于复杂的文本生成场景,如机器翻译、文本摘要等需要同时理解全文上下文并生成相关文本的任务 .
  • 优点:能够利用完整的上下文信息来生成文本,有助于生成更加准确和连贯的内容 .
  • 缺点:训练效率相对较低 .

causal Decoder(因果解码器)

  • 定义与特点:Causal Decoder,即因果解码器,属于Decoder only结构.输入和输出均为单向注意力,在生成新的输出时,只会考虑到之前的输出,而不会考虑到未来的输出 .其核心特点在于生成文本时,每个token的生成仅依赖于它之前的token,而无法利用未来的token信息 .
  • 代表模型:GPT系列模型是Causal Decoder的典型代表,如GPT-3、GPT-4等 .
  • 应用场景:广泛应用于文本生成任务中,如对话生成、文本续写、文章创作等 .
  • 优点:训练效率高,zero-shot能力更强,具有涌现能力 .
  • 缺点:无法访问未来的信息,可能生成不一致或有误的内容 .

Encoder-Decoder(编码器-解码器)

  • 定义与特点:Encoder-Decoder是一个模型构架,编码器使用双向注意力,将输入序列转化成一个固定维度的稠密向量;解码器使用单向注意力,将这个向量解码成目标输出 .它能够将输入数据编码成一个固定维度的向量,然后通过解码器将这个向量解码成目标输出 .
  • 代表模型:Transformer、Flan-T5、BART等 .
  • 应用场景:适合那些需要理解完整输入序列并生成一个结构化输出的任务,如机器翻译 .
  • 优点:可以处理输入和输出序列不同长度的任务,具有较强的通用性和灵活性 .
  • 缺点:模型结构较为复杂,训练和推理计算量较大 .

3、大模型LLM的 训练目标是什么?

大模型(LLM)的训练目标主要包括以下几个方面:

预训练阶段

  • 学习语言的通用表示:通过大规模的未标注数据进行自监督学习,模型可以学习到语言的统计规律、语义信息和上下文关系等。例如,GPT系列模型在预训练阶段的目标是在给定前面所有文本token的情况下,预测下一个token的分布。
  • 掌握语言模式和语义信息:使模型具备强大的语言理解和生成能力,能够对长文本进行建模。通过预训练,模型能够生成自然流畅的文本。

微调阶段

  • 适应特定任务:在预训练模型的基础上,通过在特定任务的数据集上进行有监督训练,使模型能够学习到与目标任务相关的特定特征和规律。例如,在问答系统中,模型需要学会如何根据问题生成准确的答案。
  • 提高任务性能:通过微调,模型可以在特定任务上获得更好的性能和适应性。微调阶段的目标是使模型在特定的自然语言处理任务中表现出色,如文本分类、机器翻译、情感分析等。

总体目标

  • 理解和生成自然语言文本:通过训练,LLM能够理解和生成具有语义和语法正确性的文本。这使得模型能够在各种自然语言处理任务中应用,如对话系统、内容生成、问答系统等。
  • 提供高质量的语言服务:在实际应用中,LLM的目标是提供高质量的语言服务,帮助人们更高效地处理和理解大量的自然语言数据。

4、涌现能力是啥原因?

涌现能力是指在大规模语言模型(LLM)中,随着模型规模的增加,模型突然展现出一些之前小规模模型中不存在的能力。其形成原因主要包括以下几个方面:

模型复杂度

  • 表征能力增强:模型规模增加后,隐藏层的表征能力显著提升,能够捕获数据中更复杂的模式和特征,从而赋予模型解决复杂问题的能力。
  • 知识获取:大规模模型在学习过程中能够学到大量的知识,涵盖语言、科学、历史、艺术等多个领域,这使得它们能够在多种任务中表现出色。

数据量

  • 长尾效应:大规模数据训练使模型接触到更多低频或稀有模式,这些信息的积累可能触发涌现能力。充足的数据支持使得模型能够捕捉到更多的规律和模式,从而展现出更高级的智能行为。

算法设计

  • 非线性特性:深度神经网络具有内在的非线性性质,随着模型规模的增加,其表达空间和信息整合能力显著提升,从而催生涌现现象。
  • 优化算法改进:大模型训练过程中采用了更加复杂的优化算法(如AdamW、梯度裁剪等),使得模型更容易收敛到能够捕获这些能力的参数空间。

评价指标的不连续性

  • 评价指标的影响:一些任务的评价指标不够平滑,导致模型性能在达到一定程度后出现“大幅提升”,从而表现出涌现能力。例如,在某些任务中,只有完全正确才算成功,这种严格的评价标准可能会使模型在规模达到某个临界点时突然表现出色。

这些因素共同作用,使得大规模语言模型在未直接训练过的任务上展现出惊人的性能,即涌现能力。

5、为何现在的大模型大部分是Decoderonly结构?

现在的大模型大部分采用Decoder-only结构,主要有以下几个原因:

模型复杂度与训练效率

  • 简化模型结构:Decoder-only架构省略了编码器部分,使得模型结构更加简单,减少了模型参数的数量和计算复杂性。这种简化有助于更容易地训练和优化大型模型。
  • 提高训练效率:由于模型复杂度降低,Decoder-only架构在训练过程中能够更快地收敛,并且在推理阶段也表现出更高的效率。

生成任务的适应性

  • 强大的生成能力:Decoder-only模型擅长生成连贯、有创造性的文本,适合处理开放式的、生成性的任务,如对话生成、文本续写等。
  • 自回归特性:这种架构通过预测下一个token来训练,与大规模预训练任务的核心目标直接对齐,能够高效利用海量的非结构化文本数据。

泛化能力与灵活性

  • zero-shot和few-shot性能:Decoder-only模型在zero-shot和few-shot任务中表现出色,具有很强的泛化能力,能够适应各种不同的任务而无需针对每一种任务进行专门的训练或调整。
  • 灵活性和通用性:这种架构在处理各种不同类型的任务时显示出极高的灵活性,可以很好地应对从文本生成到问答、摘要等各种不同的任务,使其更具有通用性。

理论优势

  • 避免低秩问题:Encoder的双向注意力在处理生成任务时可能会引入低秩问题,导致模型表达能力受限,而Decoder-only架构避免了这一问题。
  • 更适合生成任务:生成任务主要依赖于前向预测,双向注意力并不能提供额外的帮助,Decoder-only架构通过单向注意力机制能够更好地保持生成序列的连贯性。

6、简单介绍一下 大模型【LLMs】?

大模型(Large Language Models,简称LLMs)是一类基于深度学习技术开发的自然语言处理模型,具有以下特点和应用:

特点

  • 规模巨大:拥有数十亿甚至数千亿个参数,能够存储和处理大量的语言信息和知识.
  • 基于Transformer架构:通常采用Transformer架构,利用自注意力机制来捕捉文本中的长距离依赖关系,从而实现对语言的高效建模.
  • 自监督学习:在预训练阶段,通过自监督学习任务(如掩码语言模型、预测下一个词等)来学习语言的统计规律和语义信息,无需人工标注数据.
  • 多模态能力:部分大模型还具备多模态处理能力,能够理解和生成文本、图像、音频等多种类型的数据.

应用

  • 文本生成:能够生成连贯、有创造性的文本,如文章创作、对话生成、代码生成等.
  • 问答系统:通过理解问题和检索相关信息,提供准确的答案,广泛应用于智能客服、知识问答等领域.
  • 文本分类:对文本进行分类和标签化,如情感分析、主题分类等.
  • 文本翻译:将一种语言的文本翻译成另一种语言,支持跨语言的交流和信息传播.
  • 内容审核:识别和过滤不当内容,如垃圾邮件检测、有害信息过滤等.
  • 知识问答:结合大量的知识储备,回答用户提出的各种问题,提供信息查询服务.

影响

  • 推动技术发展:促进了自然语言处理技术的快速发展,提升了机器理解和生成语言的能力.
  • 改变人机交互方式:使得人机交互更加自然和高效,人们可以通过自然语言与机器进行交流和互动.
  • 促进信息整合与传播:能够整合和分析大量的文本数据,为信息的传播和获取提供了新的途径.

大模型在各个领域展现出强大的能力,但也面临着一些挑战,如数据偏见、隐私保护、模型可解释性等问题,需要在实际应用中不断优化和完善.

7、大模型【LLMs】后面跟的 175B、60B、540B等指什么?

大模型(LLMs)后面跟随的数字如175B、60B、540B等,表示该模型的参数数量,其中“B”代表“十亿”(Billion)。这些数字直接反映了模型的规模和复杂度:

  • 175B:表示模型有1750亿个参数,例如OpenAI的GPT-3模型。
  • 60B:表示模型有600亿个参数。
  • 540B:表示模型有5400亿个参数,例如谷歌的PaLM模型。

参数数量的增加通常意味着模型的表达能力更强,能够学习和捕捉到更复杂的语言模式和知识。然而,更大的模型也意味着更高的计算资源需求和更长的训练时间。

8、大模型【LLMS】具有什么优点?

大模型(LLMs)具有以下优点:

强大的语言理解和生成能力

  • 理解复杂语境:能够理解复杂的语言表达、隐含意义和上下文关系,准确把握文本的语义.
  • 生成高质量文本:生成的文本连贯、流畅、自然,具有较高的可读性和表达能力,能够应对各种文本生成任务,如文章创作、对话生成等.

广泛的知识储备

  • 涵盖丰富领域:通过大规模数据预训练,积累了丰富的知识,涵盖语言、科学、历史、文化等多个领域,能够回答各种问题.
  • 持续学习能力:在不断获取新数据和信息的过程中,能够更新和扩充知识储备,保持知识的时效性和准确性.

高效的任务适应性

  • zero-shot和few-shot学习:在未经过特定任务训练的情况下,能够通过少量示例或提示快速适应和完成任务,展现出强大的泛化能力.
  • 多任务处理能力:能够同时处理多种不同的任务,如文本分类、问答、翻译等,无需针对每个任务进行单独的模型训练.

强大的推理和逻辑能力

  • 复杂推理能力:能够进行复杂的逻辑推理和分析,解决一些需要多步推理的问题,如数学问题求解、逻辑谜题等.
  • 关联信息整合:能够整合和关联不同来源的信息,形成完整的知识结构,为推理和决策提供支持.

多模态处理能力

  • 跨模态理解:部分大模型具备多模态处理能力,能够理解和生成多种类型的数据,如文本、图像、音频等,实现跨模态的信息融合和交互.
  • 丰富的内容创作:能够创作出包含多种模态元素的内容,如图文并茂的文章、视频字幕生成等,提升内容的表现力和吸引力.

提高开发效率

  • 减少开发时间:开发者可以利用预训练的大模型作为基础,通过微调或应用层开发,快速实现特定应用场景的需求,缩短开发周期.
  • 降低开发成本:相比于从零开始训练模型,使用预训练的大模型可以节省大量的计算资源和数据标注成本.

9、大模型【LLMs】具有什么缺点?

大模型(LLMs)虽然具有强大的能力,但也存在一些缺点和局限性:

计算资源消耗大

  • 高算力需求:训练和推理大模型需要大量的计算资源,包括高性能的GPU和大规模的分布式计算系统。
  • 高能耗:大规模的计算需求导致能源消耗巨大,这不仅增加了成本,还可能对环境造成不利影响。

数据依赖性强

  • 数据量大:需要大量的高质量数据进行训练,数据的获取和处理成本较高。
  • 数据偏差:模型的性能依赖于训练数据的质量和代表性,如果数据存在偏差,模型可能会继承这些偏差,导致生成有偏见的结果。

可解释性差

  • 黑盒模型:由于模型结构复杂,其决策过程难以理解和解释,这限制了模型在需要高透明度和可解释性领域的应用。

社会影响和偏见

  • 生成偏见内容:可能会生成包含偏见或歧视性内容的文本。
  • 虚假信息:存在被滥用生成虚假信息的风险。

理解能力有限

  • 对复杂问题的理解不足:在处理需要深入理解上下文或复杂概念的问题时,可能会遇到困难。
  • 知识更新滞后:训练数据的时效性限制了模型对新知识的及时更新。

其他问题

  • 灾难性遗忘:在新任务上训练可能会损害之前任务的性能。
  • 幻觉问题:生成的文本虽然流畅,但可能不忠实于内容来源。

这些缺点需要在模型设计、训练和应用过程中得到充分考虑和解决,以提高大模型的性能和可靠性.

二、大模型(LLMs)进阶面

1、大模型多模态能力是什么?

大模型多模态能力指的是人工智能模型能够处理和理解多种类型的数据输入,这些数据类型包括但不限于文本、图像、音频、视频等。具体来说,具备多模态能力的大模型可以同时分析和解释来自不同信息渠道的数据,并将它们融合起来以提供更加准确和丰富的输出结果。

例如,当涉及到视觉与语言的结合时,这样的模型可以生成对一张图片的文字描述;在语音和文本方面,它能实现语音到文字的转换或反之亦然。此外,对于更复杂的场景,比如视频内容的理解,它可以通过分析视频中的视觉元素和音频(对话、背景音乐等)来提取关键信息或者产生摘要。

这种能力使得AI不仅限于单一领域内的应用,而是能够在跨领域的任务中发挥作用,如智能客服、教育、娱乐、医疗等多个行业,从而极大地拓宽了AI技术的应用范围和潜力。通过整合不同类型的数据,多模态大模型为用户提供了更加自然和直观的交互方式。

2、大模型是怎么让生成的文本丰富而不单调的呢?

大模型生成丰富而不单调的文本主要依赖于其庞大的参数量、复杂的架构设计以及大规模的数据训练。以下是几个关键因素:

  1. 大量数据学习:通过在海量且多样化的文本数据集上进行训练,大模型能够学习到广泛的语言表达方式和风格。这使得它们可以模仿不同的写作风格,从正式的技术文档到非正式的日常对话,从而生成更加多样化的内容。

  2. 深层次的理解能力:现代的大模型采用了深层神经网络结构(如Transformer架构),这使它们能够捕捉到文本中的复杂模式和细微差别。例如,理解上下文的关系、识别情感色彩、甚至是隐喻和双关语等语言现象,这让生成的文本更加自然流畅,贴近人类的表达习惯。

  3. 注意力机制:特别是基于Transformer架构的大模型,利用了自注意力机制来动态地强调输入序列中的不同部分。这意味着模型可以根据需要调整关注点,确保生成的每个词都考虑到整个句子乃至段落的全局信息,而不是仅仅基于前几个词做出反应。这样有助于保持内容的一致性和连贯性,同时也增加了多样性。

  4. 条件生成技术:通过给定特定的条件或提示(比如指定的主题、风格、语气等),大模型可以根据这些指导方针生成相应风格的文本。这种灵活性不仅让输出更加丰富多彩,而且可以根据用户需求定制化生成内容。

  5. 持续学习与优化:随着技术的进步和更多数据的加入,大模型不断得到改进和优化,使其能够更好地理解和生产高质量的文本。开发者们还会根据实际应用中的反馈对模型进行微调,以进一步提高其性能和适应性。

综上所述,正是由于这些先进的技术和方法,大模型才能够生成既丰富又不单调的文本,满足各种应用场景的需求。

3、LLMs 复读机问题

3.1什么是 LLMs 复读机问题?

LLMs(Large Language Models)复读机问题指的是大型语言模型在处理输入时,有时会几乎原封不动地重复用户提供的信息,而不是基于理解进行有意义的扩展或回答。这种现象通常发生在模型被要求解释或重述已经非常明确和具体的陈述时。

例如,如果用户输入:“苹果是一种水果”,而模型的回答是:“是的,苹果是一种水果。” 这种回答方式就显得多余且缺乏深度,因为它没有为用户提供额外的价值或信息。

这个问题的存在有几个原因:

  1. 训练数据的影响:模型可能在训练过程中学习到了这种“安全”的回应模式,即当面对明确的信息时,选择简单重复而非尝试提供新见解。
  2. 生成策略的选择:有时候,为了避免产生错误信息,模型可能会倾向于给出保守的回答,这包括直接重复用户的话语。
  3. 理解和推理限制:尽管LLMs能够表现出惊人的语言理解和生成能力,但在某些情况下,它们可能无法完全理解文本背后的深层含义或上下文,导致回复不够深入或相关。

为了改善这种情况,研究者们正在探索更先进的模型训练方法和技术,旨在提高模型的理解力和创造力,以便它们能提供更加丰富、有价值的响应。

3.2 为什么会出现 LLMs 复读机问题?

LLMs(Large Language Models)出现复读机问题的原因可以从多个角度进行分析,主要包括以下几个方面:

  1. 训练数据的局限性:LLMs通过学习大量的文本数据来理解和生成语言。如果在训练数据中存在大量简单的重复或确认性的回答模式,模型可能会学到这种回应方式。例如,当用户提问时,很多回答可能只是简单地重复或确认用户的陈述。

  2. 生成策略与安全措施:为了避免产生不准确或者误导性的信息,模型设计者可能会设置一些规则或偏好,使得模型倾向于给出保守的回答。在这种情况下,直接重复用户提供的信息被视为一种“安全”的回应,因为它减少了输出错误信息的风险。

  3. 上下文理解不足:尽管大型语言模型具有处理复杂句子结构和广泛主题的能力,但在某些情况下,它们可能无法完全捕捉到输入文本的所有细微差别和深层含义。这可能导致模型对特定问题的理解不够深入,从而只能提供表面层次的回应,比如简单的重复。

  4. 缺乏真正的推理能力:虽然LLMs能够根据接收到的信息生成看似合理的文本,但它们并不具备真正意义上的人类推理能力。这意味着,在面对需要深层次逻辑推理的问题时,模型可能无法提供满意的答案,而是选择重复已知的信息作为替代方案。

为了缓解这些问题,研究人员正在探索改进模型的方法,包括但不限于优化训练过程、增强模型对上下文的理解能力、以及引入更加精细的控制机制以引导模型生成更具价值的回答。通过这些努力,目标是让LLMs不仅能更准确地理解用户意图,还能提供更为丰富、相关且富有洞见的回答。

3.3 如何缓解 LLMs 复读机问题?

缓解LLMs(Large Language Models)复读机问题可以从多个角度入手,包括改进模型设计、优化训练过程和增强使用策略等。以下是一些有效的缓解措施:

  1. 多样化与高质量的训练数据:确保训练数据包含丰富多样的对话场景和回答方式,可以减少模型倾向于简单重复用户输入的可能性。增加那些需要模型进行深入分析和创造性回应的例子,有助于训练出更加灵活的模型。

  2. 改进损失函数与奖励机制:在模型训练过程中,可以通过调整损失函数或引入奖励机制来鼓励模型产生更多样化和有价值的回应。例如,使用基于多样性的奖励来惩罚那些过于相似或重复的回答,从而激励模型探索不同的表达方式。

  3. 上下文感知能力的提升:通过改进模型架构或训练方法来提高模型对对话上下文的理解能力,使其能够更好地捕捉到对话中的细微差别和深层含义。这可以帮助模型提供更加贴切和深入的回答,而不是简单的重复。

  4. 引入外部知识源:结合外部知识库或其他信息资源,可以让模型访问更广泛的信息,从而生成更有价值的回答。例如,在面对特定主题的问题时,模型可以查询相关数据库或知识图谱,以提供更准确和详细的解释。

  5. 用户反馈循环:建立有效的用户反馈机制,允许用户对模型的回答质量进行评价,并将这些反馈用于持续改进模型。这种方式不仅可以直接帮助识别和修正复读机问题,还能促进模型整体性能的提升。

  6. 针对性的微调:针对特定应用场景或领域对模型进行微调,可以使模型在这个领域的表现更加出色。通过集中训练材料和案例,可以有效减少复读现象,同时提高回答的相关性和实用性。

通过上述措施,可以有效地减轻LLMs的复读机问题,使得模型不仅能理解用户的意图,还能提供更为丰富、深入且富有洞见的回答。这样,用户可以获得更高的满意度,并能更充分地利用模型的能力。

3.3.1 Unlikelihood Training

Unlikelihood Training 是一种用于训练语言模型的技术,旨在减少生成文本中出现不希望的或低质量输出(如重复、无意义或不合逻辑的内容)的概率。这种方法通过在训练过程中引入负面样本或目标来指导模型学习避免产生某些类型的输出,从而提高生成文本的质量和多样性。

核心概念

  • 正面样本 vs 负面样本:传统的训练方法主要依赖于正面样本(即高质量的目标输出),而Unlikelihood Training则同时利用了负面样本,这些是模型应尽量避免产生的输出示例。

  • 损失函数调整:在Unlikelihood Training中,除了标准的最大似然估计(MLE)损失外,还会增加一个惩罚项,该惩罚项针对那些被认为不理想或低质量的输出。这有助于引导模型向更优质的回答方向优化。

应用场景

  1. 减少重复性输出:如你之前提到的复读机问题,通过提供重复或过于相似的回答作为负面样本,可以帮助模型学会如何避免这种行为,从而提高对话的新颖性和相关性。

  2. 增强连贯性和逻辑性:通过使用不合逻辑或语义混乱的句子作为负面样本,可以促使模型学习生成更加连贯和逻辑清晰的文本。

  3. 改进多样性和创造性:鼓励模型探索不同的表达方式而非总是选择最常见的短语或结构,这样可以增加生成内容的丰富性和新颖性。

实施步骤

  1. 准备数据集:除了常规的训练数据集之外,还需要创建一个包含负面样本的数据集。这些负面样本可以根据特定的应用需求定制,例如,对于减少重复性输出的情况,可以从现有模型生成的输出中筛选出典型的重复案例。

  2. 定义损失函数:设计一个新的损失函数,在原有的最大似然估计基础上加入对负面样本的惩罚项。这个惩罚项的具体形式可以根据实际应用场景灵活调整。

  3. 训练模型:使用修改后的损失函数重新训练模型。在此过程中,模型不仅会尝试最大化正面样本的概率,还会努力最小化负面样本的可能性。

  4. 评估与迭代:定期评估模型性能,并根据需要调整负面样本的选择和损失函数的设计,以持续改进模型的表现。

通过采用Unlikelihood Training,可以有效地提升语言模型的质量,使其更好地满足实际应用的需求,无论是提高对话系统的互动体验还是增强文本生成任务的创造力和准确性。

3.3.2 引入噪声

在训练语言模型时,引入噪声(Noise Injection)是一种常见的技术,用于增强模型的鲁棒性和泛化能力。通过向输入数据或模型内部添加适当的噪声,可以帮助模型学习到更加稳健的特征表示,减少对特定模式的过拟合,并提高其处理未见过的数据的能力。以下是关于如何在语言模型中引入噪声的一些方法及其应用场景:

引入噪声的方法

  1. 输入噪声

    • 单词替换:随机选择一些词并用同义词或其他相关词汇替换它们。这可以促使模型学会理解不同的表达方式。
    • 单词删除:随机删除句子中的某些词,强制模型在不完整信息的情况下进行预测和生成。
    • 单词交换:随机交换句子中两个词的位置,增加模型对句子结构变化的容忍度。
  2. 隐藏层噪声

    • Dropout:在神经网络的隐藏层中随机丢弃一些神经元,以防止模型过度依赖于某些特定的神经元组合。这种方法广泛应用于深度学习中,有助于提高模型的泛化能力。
    • 高斯噪声:向隐藏层的激活值添加少量的高斯噪声(即正态分布的随机值),这可以模拟现实世界中的数据变异,帮助模型更好地适应实际应用环境。
  3. 输出噪声

    • 标签平滑:将硬标签(如0或1)转换为软标签(接近但不完全等于0或1的概率分布)。这样做的目的是让模型不过度自信于自己的预测结果,从而提升其泛化能力。

应用场景

  • 提高鲁棒性:在实际应用中,输入数据可能会包含各种形式的错误或偏差。通过在训练过程中引入噪声,可以使模型更加稳健地应对这些情况,例如拼写错误、语法错误等。

  • 减少过拟合:当模型在训练集上表现良好但在测试集上表现不佳时,可能是因为过拟合。引入噪声可以通过增加训练数据的多样性来缓解这一问题,使模型能够在新的数据上表现得更好。

  • 增强创造力与多样性:对于生成任务,如文本生成或对话系统,适当地引入噪声可以帮助模型探索更多的可能性,避免总是产生相似或重复的内容,从而提高生成内容的多样性和创造性。

实施步骤

  1. 选择合适的噪声类型:根据具体的应用需求和模型特点选择合适的噪声类型。例如,在需要提高模型对不同表达方式的理解能力时,可以选择单词替换;若目标是增强模型的泛化能力,则可以考虑使用Dropout。

  2. 调整噪声强度:确定合适的噪声强度非常重要。如果噪声太强,可能会导致模型难以学习有效的特征;如果太弱,则可能达不到预期的效果。通常需要通过实验来找到最佳的平衡点。

  3. 结合其他技术:噪声注入通常与其他技术和策略结合使用,如数据增强、正则化等,以进一步提高模型性能。

  4. 评估与迭代:定期评估模型在验证集上的表现,并根据结果调整噪声的类型和强度。持续优化直至达到满意的性能水平。

通过合理地引入噪声,不仅可以提高语言模型的性能,还能增强其在面对复杂多变的实际应用场景时的适应能力。

3.3.3 Repetition Penalty

Repetition Penalty(重复惩罚) 是一种在生成文本时用于减少重复单词或短语出现的技术,特别适用于大型语言模型(LLMs)。通过应用重复惩罚,可以鼓励模型生成更多样化和连贯的文本,避免不必要的重复,从而提升生成内容的质量。

核心概念

  • 重复惩罚机制:当模型在生成下一个词时,如果某个词已经被频繁使用,重复惩罚机制会降低该词被再次选中的概率。这有助于防止模型陷入循环中,不断重复相同的词语或短语。

  • 参数调节:重复惩罚通常由一个超参数控制,称为“重复惩罚系数”(repetition penalty coefficient)。这个系数决定了对已经出现过的词施加惩罚的程度。较高的系数意味着更强的惩罚力度,而较低的系数则允许更多的重复。

工作原理

  1. 词汇频率追踪:在生成过程中,模型会记录每个词的出现次数。对于那些已经多次出现的词,它们的选择概率会被相应地调整。

  2. 调整概率分布:具体来说,重复惩罚机制会对生成概率进行修正。例如,假设某个词的概率原本是 ( p ),并且它已经在当前上下文中出现了 ( n ) 次,那么它的新概率 ( p’ ) 可以根据公式 ( p’ = p / (n^{\text{repetition_penalty}}) ) 进行调整。这里的 repetition_penalty 是用户设定的一个大于1的值,用来放大重复词的概率惩罚。

  3. 选择下一个词:基于调整后的概率分布,模型会选择下一个要生成的词。由于重复词的概率被降低了,因此模型更有可能选择其他不同的词,从而增加输出的多样性。

实际应用

  • 对话系统:在聊天机器人或对话系统中,重复惩罚可以帮助减少模型重复相同的话语,使对话更加自然流畅。

  • 文本生成:无论是故事创作、新闻写作还是技术文档生成,重复惩罚都能确保生成的内容丰富多样,而不是单调重复。

  • 摘要生成:在自动摘要任务中,重复惩罚可以避免生成冗余信息,使得摘要更加简洁明了。

参数设置与调优

  • 选择合适的重复惩罚系数:不同的应用场景可能需要不同的重复惩罚强度。一般来说,开始时可以选择一个小于2的值(如1.2),然后根据实际效果进行微调。过高的惩罚可能导致模型过于分散注意力,忽略了重要的关键词汇;而过低的惩罚则无法有效减少重复现象。

  • 结合其他策略:为了进一步提高生成质量,重复惩罚通常与其他技术结合使用,如温度采样(temperature sampling)、top-k采样等。这些方法共同作用,可以在保持文本连贯性的同时,最大化其多样性和新颖性。

示例代码片段

以下是一个简单的伪代码示例,展示了如何在文本生成过程中应用重复惩罚:

def generate_text_with_repetition_penalty(model, context, repetition_penalty=1.2):
    generated_tokens = []
    for _ in range(max_length):
        outputs = model(context)
        next_token_logits = outputs.logits[0, -1, :]
        
        # Apply repetition penalty
        for token_id in set(generated_tokens):
            if next_token_logits[token_id] < 0:
                next_token_logits[token_id] *= repetition_penalty
            else:
                next_token_logits[token_id] /= repetition_penalty
        
        # Sample the next token based on adjusted logits
        next_token = sample_from_logits(next_token_logits)
        generated_tokens.append(next_token)
        context = torch.cat([context, torch.tensor([[next_token]])], dim=-1)
    
    return decode(generated_tokens)

# 假设sample_from_logits和decode函数已经定义好

通过合理运用重复惩罚机制,可以显著改善生成文本的质量,使其更加多样化和富有表现力。这对于提高各类自然语言处理任务的效果具有重要意义。

3.3.4 Contrastive Search

Contrastive Search(对比搜索) 是一种用于生成文本的解码策略,旨在解决传统贪婪搜索或采样方法中存在的问题,如重复生成、缺乏多样性以及生成质量不稳定等。对比搜索通过引入一种对比机制来选择下一个词,从而提高生成文本的质量和连贯性。

核心思想

对比搜索的核心在于它不仅仅依赖于当前上下文下的概率分布来选择下一个词,而是同时考虑了候选词与已经生成序列之间的“相似度”。这种方法试图找到既符合上下文又不与已有内容过于相似的新词,从而促进多样性和避免重复。

工作原理

  1. 候选词选择:在每一步生成过程中,模型首先根据当前上下文计算出所有可能的下一个词的概率分布,并从中选出前 ( k ) 个最有可能的词作为候选集(类似于Top-K采样)。

  2. 相似度计算:对于每个候选词,计算其与已生成序列中所有词的相似度。通常使用余弦相似度或其他相似度度量方法来进行计算。这个步骤帮助评估候选词与已有内容的差异程度。

  3. 得分调整:基于相似度计算结果,对每个候选词的原始概率进行调整。具体来说,如果一个候选词与已有内容非常相似,则降低它的得分;反之,如果候选词提供了新的信息或视角,则增加其得分。

  4. 最终选择:在得分调整后,从候选集中选择得分最高的词作为下一步生成的内容。这样做的目的是确保新生成的词既能保持与上下文的一致性,又能提供足够的新颖性以避免重复。

对比搜索的优势

  • 减少重复:通过惩罚与已有内容过于相似的候选词,对比搜索有效地减少了重复现象,特别是在长文本生成任务中表现尤为明显。

  • 增强多样性:由于鼓励选择那些能够带来新信息的词,对比搜索有助于生成更加多样化的内容,使输出更具创造力和丰富性。

  • 提升连贯性:虽然强调新颖性,但对比搜索仍然注重上下文一致性,因此生成的文本不仅多样化而且逻辑连贯。

参数设置

对比搜索涉及几个关键参数,需要根据具体应用场景进行调优:

  • ( k ) 值(Top-K):决定了每次从多少个最有可能的候选词中进行比较。较大的 ( k ) 可能会带来更多样的结果,但也可能导致计算开销增加。

  • 相似度阈值:控制着如何衡量候选词与已有内容之间的相似度。较高的阈值意味着更严格的相似性惩罚,可能会导致更多的新颖词被选中。

  • 得分调整因子:用来平衡原始概率与相似度调整后的得分。合理的调整因子可以帮助在保持一致性和促进多样性之间找到最佳平衡点。

示例代码片段

以下是一个简化的伪代码示例,展示了如何在文本生成过程中应用对比搜索:

def contrastive_search(model, context, k=5, alpha=0.5):
    generated_tokens = []
    for _ in range(max_length):
        outputs = model(context)
        next_token_logits = outputs.logits[0, -1, :]
        
        # Get top-k candidates based on logits
        top_k_candidates = torch.topk(next_token_logits, k).indices
        
        # Calculate similarity scores between candidates and generated tokens
        similarities = [calculate_similarity(candidate, generated_tokens) for candidate in top_k_candidates]
        
        # Adjust logits based on similarity scores
        adjusted_logits = [logit - alpha * sim for logit, sim in zip(next_token_logits[top_k_candidates], similarities)]
        
        # Select the best candidate after adjustment
        next_token = top_k_candidates[torch.argmax(torch.tensor(adjusted_logits))]
        generated_tokens.append(next_token.item())
        context = torch.cat([context, torch.tensor([[next_token]])], dim=-1)
    
    return decode(generated_tokens)

# 假设calculate_similarity和decode函数已经定义好

在这个例子中,calculate_similarity 函数用于计算候选词与已生成序列之间的相似度,而 alpha 参数则用于控制相似度对最终得分的影响程度。

通过采用对比搜索策略,可以显著改善生成文本的质量,使其更加多样化、连贯且富有表现力,这对于提高各类自然语言处理任务的效果具有重要意义。

3.3.5 Beam Search

Beam Search(束搜索) 是一种用于序列生成任务的解码算法,广泛应用于机器翻译、文本摘要、对话系统等自然语言处理领域。与贪婪搜索(Greedy Search)不同,束搜索通过维护多个候选路径来探索更广泛的可能输出,从而提高生成结果的质量。

核心思想

在每个时间步骤中,束搜索不是只选择概率最高的一个词作为下一个输出,而是保持前 ( k ) 个最有可能的序列(称为“束宽度”或“beam width”),并继续扩展这些序列。最终,从所有生成的序列中选择得分最高的一个作为最终输出。

工作流程

  1. 初始化:从初始输入开始,计算第一个词的概率分布,并选择前 ( k ) 个最有可能的词作为初始候选序列。

  2. 扩展候选序列:对于每一个候选序列,在每个时间步骤中根据当前上下文预测下一个词的概率分布,并选择前 ( k ) 个最有可能的词来扩展该序列。这样每一步都会生成 ( k \times k ) 个新的候选序列。

  3. 修剪:保留得分最高的 ( k ) 个序列,丢弃其余的序列。得分通常由负对数似然(negative log-likelihood, NLL)计算得出,即越高的概率对应越低的NLL值。

  4. 终止条件:当达到预定的最大长度或某个序列生成了结束标记(如 <EOS>)时,停止搜索。最终输出得分最高的完整序列。

示例

假设我们有一个简单的语言模型和束宽度 ( k = 2 ),以下是束搜索的一个示例:

  1. 第一步

    • 输入:[START]
    • 计算第一个词的概率分布:{ "I": 0.6, "You": 0.4 }
    • 选择前两个最有可能的词:["I", "You"]
  2. 第二步

    • 对于 "I"
      • 计算第二个词的概率分布:{ "am": 0.5, "have": 0.3, "like": 0.2 }
      • 选择前两个最有可能的词:["I am", "I have"]
    • 对于 "You"
      • 计算第二个词的概率分布:{ "are": 0.7, "have": 0.2, "like": 0.1 }
      • 选择前两个最有可能的词:["You are", "You have"]
  3. 第三步

    • 对于 "I am"
      • 计算第三个词的概率分布:{ "a": 0.6, "the": 0.3, "student": 0.1 }
      • 选择前两个最有可能的词:["I am a", "I am the"]
    • 对于 "I have"
      • 计算第三个词的概率分布:{ "a": 0.5, "the": 0.3, "dog": 0.2 }
      • 选择前两个最有可能的词:["I have a", "I have the"]
    • 对于 "You are"
      • 计算第三个词的概率分布:{ "a": 0.8, "the": 0.1, "student": 0.1 }
      • 选择前两个最有可能的词:["You are a", "You are the"]
    • 对于 "You have"
      • 计算第三个词的概率分布:{ "a": 0.6, "the": 0.3, "dog": 0.1 }
      • 选择前两个最有可能的词:["You have a", "You have the"]
  4. 修剪

    • 保留得分最高的两个序列:假设得分分别为 ["You are a", "I am a"]
  5. 终止条件

    • 当生成到句子末尾或达到最大长度时,选择得分最高的序列作为最终输出。

参数设置

  • 束宽度(Beam Width, ( k )):决定了在每一步中要保留多少个候选序列。较大的 ( k ) 值会增加搜索空间,可能导致更好的结果但也会增加计算成本;较小的 ( k ) 值则更快但可能会错过高质量的序列。

  • 长度归一化(Length Normalization):为了防止较短序列因为其总分较低而被不公正地淘汰,可以对序列得分进行长度归一化处理。常见的做法是将总得分除以序列长度的平方根或其他函数。

示例代码片段

以下是一个简化的伪代码示例,展示了如何实现束搜索:

import heapq

def beam_search(model, input_sequence, beam_width=5, max_length=50):
    # 初始化候选序列及其得分
    candidates = [(0, input_sequence)]  # (score, sequence)
    
    for step in range(max_length):
        new_candidates = []
        
        for score, seq in candidates:
            if seq[-1] == '<EOS>':  # 如果序列已经结束,则直接添加到新候选列表
                new_candidates.append((score, seq))
                continue
            
            # 获取当前序列的最后一个词作为上下文
            context = torch.tensor([seq])
            outputs = model(context)
            next_token_logits = outputs.logits[0, -1, :]
            
            # 获取top-k个最有可能的词
            top_k_tokens = torch.topk(next_token_logits, beam_width).indices.tolist()
            top_k_scores = torch.softmax(next_token_logits, dim=-1).topk(beam_width).values.tolist()
            
            # 扩展当前序列
            for token, token_score in zip(top_k_tokens, top_k_scores):
                new_seq = seq + [token]
                new_score = score - math.log(token_score)  # 使用负对数似然作为得分
                new_candidates.append((new_score, new_seq))
        
        # 按得分排序并选择前k个候选序列
        candidates = heapq.nsmallest(beam_width, new_candidates, key=lambda x: x[0])
    
    # 返回得分最高的序列
    best_sequence = min(candidates, key=lambda x: x[0])[1]
    return decode(best_sequence)

# 假设decode函数已经定义好

通过使用束搜索,可以在保证生成质量的同时有效地探索多种可能性,避免了贪婪搜索容易陷入局部最优的问题。这种方法特别适用于那些需要高精度和连贯性的序列生成任务。

3.3.6 TopK sampling

Top-K Sampling(Top-K采样) 是一种用于生成文本的解码策略,旨在增加输出的多样性和创造性,同时仍然保持一定的质量控制。与贪婪搜索(Greedy Search)不同,Top-K采样不是每次都选择概率最高的词作为下一个输出,而是从最有可能的前 ( K ) 个词中随机选择一个词。

核心思想

在每个时间步骤中,Top-K采样首先确定当前上下文下的词概率分布,并从中选出前 ( K ) 个最有可能的词。然后,根据这些词的概率分布进行重新归一化,并从中随机选择一个词作为下一步的输出。这种方法允许模型探索更多的可能性,从而避免了贪婪搜索可能导致的单调和重复问题。

工作流程

  1. 计算概率分布:给定当前上下文,使用语言模型预测下一个词的概率分布。

  2. 选择Top-K:从所有可能的词中选出前 ( K ) 个最有可能的词及其对应的概率。

  3. 重新归一化:对这 ( K ) 个词的概率进行重新归一化,使得它们的总和为1。

  4. 随机采样:基于重新归一化的概率分布,随机选择一个词作为下一个输出。

  5. 更新上下文:将选中的词添加到当前序列中,并继续下一个时间步骤,直到达到预定的最大长度或生成结束标记(如 <EOS>)。

参数设置

  • ( K ) 值:决定了每次从中选择的候选词的数量。较大的 ( K ) 值会带来更多的多样性,但同时也增加了生成低质量或无意义内容的风险;较小的 ( K ) 值则更倾向于高质量的内容,但可能会导致重复性增加。

  • 温度参数(Temperature):用于调整概率分布的平滑度。较高的温度值会使概率分布更加均匀,增加多样性;较低的温度值则会使分布更加尖锐,偏向于选择高概率词,减少多样性。

示例代码片段

以下是一个简化的伪代码示例,展示了如何实现Top-K采样:

import torch
import numpy as np

def top_k_sampling(model, input_sequence, k=10, temperature=1.0, max_length=50):
    generated_tokens = input_sequence.copy()
    
    for _ in range(max_length):
        # 获取当前上下文
        context = torch.tensor([generated_tokens])
        outputs = model(context)
        next_token_logits = outputs.logits[0, -1, :]
        
        # 应用温度参数
        next_token_logits /= temperature
        
        # 获取top-k个最有可能的词
        top_k_tokens = torch.topk(next_token_logits, k).indices.tolist()
        top_k_probs = torch.softmax(next_token_logits, dim=-1).topk(k).values.tolist()
        
        # 重新归一化概率
        top_k_probs_normalized = [p / sum(top_k_probs) for p in top_k_probs]
        
        # 随机采样
        next_token = np.random.choice(top_k_tokens, p=top_k_probs_normalized)
        
        # 更新生成序列
        generated_tokens.append(next_token)
        
        # 如果生成了结束标记,则停止
        if next_token == tokenizer.eos_token_id:
            break
    
    return decode(generated_tokens)

# 假设decode函数已经定义好

实际应用

提高多样性

Top-K采样特别适用于需要多样化输出的任务,如创意写作、故事生成等。通过适当选择 ( K ) 和温度参数,可以平衡生成内容的质量和多样性。

控制生成质量

虽然Top-K采样增加了多样性,但它也可能引入一些低质量的内容。为了进一步控制生成质量,可以结合其他技术,如:

  • 重复惩罚(Repetition Penalty):降低已经频繁出现的词的概率,防止重复。
  • 长度归一化(Length Normalization):确保较长的序列不会因为总得分较高而被优先选择。
  • 核采样(Nucleus Sampling):只考虑累积概率达到某个阈值的最小词集,而不是固定数量的词。

对比其他采样方法

  • 贪婪搜索(Greedy Search):总是选择概率最高的词,容易导致单调和重复。
  • 随机采样(Random Sampling):直接从整个词汇表中随机选择词,可能导致大量无意义的内容。
  • 核采样(Nucleus Sampling):类似于Top-K采样,但选择的是累积概率达到某个阈值的最小词集,而不是固定数量的词。这种方法可以根据具体情况动态调整候选词集的大小。

通过合理地使用Top-K采样,可以在保持一定质量的同时显著提高生成内容的多样性和创造性,使其更适合各种自然语言处理任务。

3.3.7 Nucleus sampler
3.3.8 Temperature
3.3.9 No repeat ngram size
3.3.10 重复率指标检测
3.3.11后处理和过滤
3.3.12 人工干预和控制

4、llama 系列问题

4.1llama输入句子长度理论上可以无限长吗?

5、什么情况用Bert模型,什么情况用LLaMA、ChatGLM类大模型,

咋选?

6、各个专业领域是否需要各自的大模型来服务?

7、如何让大模型处理更长的文本?

三、大模型(LLMS)微调面

1、什么是大模型(LLMs)agent?

2、大模型(LLMs)agent有哪些部分组成?

2.1介绍-下规划(planning)?
2.1.1拆解子目标和任务分解
2.1.1.1 如何进行 拆解子目标和任务分解?
2.1.1.2 拆解子目标和任务分解 有哪些方法?
2.1.2 模型自我反省
2.1.2.1 如何进行 模型自我反省?
2.1.2.2 模型自我反省 有哪些方法?
2.2介绍一下记忆(Memory)?
2.3介绍一下 工具使用(tooluse)?

3、、大模型(LLMs) agent 主要 利用了大型 哪些能力?

4、结合 代码 讲解 大模型(LLMs) agent 思路?

4.1 思路介绍
4.2 实例一:利用大模型判断做选择
4.3 实例二:让大模型通过判断正确选择函数工具并输出

agent模板和解析·

4.4 实例三:
4.5 实例四:将 skylark接入langchain 中测试 agent

5、如何给LLM注入领域知识?

6、常见LLM Agent框架或者应用 有哪些?

7、如果想要在某个模型基础上做全参数微调,究竟需要多少显存?

8、为什么SFT之后感觉LLM傻了?

9、SFT指令微调数据 如何构建?

10、领域模型Continue PreTrain 数据选取?

11、领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力?

12、领域模型Continue PreTrain,如何让模型在预训练过程中就学习到更多的知识?

13、进行SFT操作的时候,基座模型选用Chat还是Base?

14、领域模型微调 指令&数据输入格式 要求?

15、领域模型微调 领域评测集 构建?

16、领域模型词表扩增是不是有必要的?

17、如何训练自己的大模型?

18、训练中文大模型有啥经验?

19、指令微调的好处?

20、预训练和微调哪个阶段注入知识的?

21、想让模型学习某个领域或行业的知识,是应该预训练还是应该微调?

22、多轮对话任务如何微调模型?

23、微调后的模型出现能力劣化,灾难性遗忘是怎么回事?

24、微调模型需要多大显存?

25、大模型LLM进行SFT操作的时候在学习什么?

26、预训练和SFT操作有什么不同

27、样本量规模增大,训练出现OOM错

28、大模型LLM进行SFT如何对样本进行优化?

29、模型参数迭代实验

四、什么是 大模型幻觉问题?

1、大模型幻觉问题定义

2、何为 Faithfulness and Factualness?

3、针对不同任务,幻觉的定义有何差异?

四、为什么 会 出现 大模型幻觉问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值