大模型面试基础问题

1.1.1 最主流的开源模型?

ChatGLM-6B[1] prefix LM

LLaMA-7B[2] causal LM

1.1.2 prefix LM和causal LM的区别?

1.1.2.1 Prefix LM

Prefix LM,即前缀语言模型,该结构是Google的T5模型论文起的名字,望文知义来说,这个模型的”前缀”有些内容,但继续向前追溯的话,微软的UniLM已经提及到了。前缀指的是输入序列中的一部分已知内容,通常用来为模型提供上下文信息,以便生成后续内容。具体来说,前缀就是模型在生成过程中已经处理的那一部分序列为后续生成提供条件和指导

Prefix LM其实是Encoder-Decoder模型的变体,为什么这样说?解释如下:

(1) 在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用一个独立的Transformer

( 2) 而在Prefix LM,Encoder和Decoder则共享了同一个Transformer结构,在Transformer内部通过Attention Mask机制来实现。

与标准Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding (AE-自编码)模式,即前缀序列中任意两个token都相互可见。在自编码过程中,模型学习到的隐藏表示保留了输入数据中的主要特征。在这个过程中,模型需要访问所有输入数据,以便找到数据中的整体结构和相关性。因此,AE模式下的模型可以看到输入数据中的所有内容

在自然语言处理中,假设有一个前缀序列 X = [x1, x2, x3, ..., xn]。在AE模式下,序列中的每个token(如x2)可以访问整个前缀 X,即可以看到其他token的信息。这不同于自回归模式中的单向性约束(只能看到前面的token),AE模式是双向的。

而Decoder部分采用Auto Regressive (AR-自回归)模式,即待生成的token可以看到Encoder侧所有token(包括上下文)和Decoder侧已经生成的token,但不能看未来尚未产生的token。

Prefix LM的AttentionMask机制(左)及流转过程(右)

Prefix LM的代表模型有UniLM、T5、GLM(清华滴~)

1.1.2.1.1 Auto Enconding(AE-自编码)

自编码器(AutoEncoder)是一种无监督的模型结构,其用途广泛,可用于特征提取,异常检测,降噪等。

自编码器的基本结构是编码器encoder解码器decoder,其中编码器对输入的原始数据进行压缩(降维),解码器对压缩后的数据进行重构,将压缩数据还原为原始数据。整体其类似沙漏形状。

自编码器的编码器encoder解码器decoder多用串联的全连接层构成,如下图:

  • 其中黑色箭头为构成编码器encoder的全连接层,多个全连接层逐步将数据维度降低 到指定维度;红色箭头为构成解码器decoder的全连接层,多个全连接层逐步将压缩数据维度增加到 原始维度。一般来说编码器与解码器的结构是对称的。

    • 特别的,编码器,解码器内部的层不必为全连接层,卷积层或循环层也可以。

  • 训练中,该模型的输入为原始数据。因为模型的功能是对输入的数据进行压缩与重构,所以期望的输出应该和原始的输入数据越接近越好。我们以两者的差异为衡量的损失函数(差异可以使用binary交叉熵或者均方误差等),进行模型内部参数的优化。

    • 输出是原始数据,模型的输出结果也是与原始数据对比差异,全程只用到了原始数据本身,不需要额外的信息。

https://zhuanlan.zhihu.com/p/625085766 代码实例链接

1.1.2.1.2 Auto Regressive(AR-自回归)

1.1.2.2 Causal LM

Causal LM是因果语言模型,目前流行的大多数模型都是这种结构,别无他因,因为GPT系列模型内部结构就是它,还有开源界的LLaMa也是。

Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚。

CausalLM的Attention Mask机制(左)及流转过程(右)

1.1.2.3 结论

attention mask不同,前者的prefix部分的token互相能看到,后者严格遵守只有后面的token才能看到前面的token的规则。

1.1.3 哪种架构是主流?

GPT系列就是Causal LM,目前除了T5和GLM,其他大模型基本上都是Causal LM。

1.1.4 说一下LLM常见的问题?

出现复读机问题。比如:ABCABCABC不断循环输出到max length。

对于这种现象我有一个直观的解释(猜想):prompt部分通常很长,在生成文本时可以近似看作不变,那么条件概率 P(B|A)也不变,一直是最大的。

固定的 Prompt 和最大条件概率:生成内容的过程中,大语言模型通常会保持给定的 prompt 和上下文不变。这意味着在生成每个新 token 时,模型会基于一个不变的历史内容进行预测。这时候,条件概率 P(B∣A)就倾向于稳定在某种模式下。例如,模型生成了一个短句 ABC,而模型预测下一部分最有可能是同样的 ABC 时,它就可能陷入这种循环,生成 ABCABCABC。

生成内容的高概率反馈循环:由于模型的目标是最大化生成内容的概率,它自然会倾向于在「看起来高概率的句子模式」中停留,尤其是在 prompt 固定且上下文信息较少的情况下。简单来说,重复的句子和结构成为了“高概率”选择,使得模型不断选择生成同样的内容。这可以类比为「陷入一个局部最优解」——模型在 ABCABC 的重复中找到了最高的概率分布,便难以跳脱出来。

生成重复内容,是语言模型本身的一个弱点,无论是否微调,都有可能出现。并且,理论上良好的指令微调能够缓解大语言模型生成重复内容的问题。但是因为指令微调策略的问题,在实践中经常出现指令微调后复读机问题加重的情况。

另外,可能出现重复用户问题的情况,原因未知。

1.1.5 如何缓解复读机问题

1.1.5.1 do_sample:启用随机采样
  • 作用:在常规解码中,模型通常会选择概率最高的下一个 token(greedy search),这可能导致高频短语的重复。do_sample=True 则允许模型随机从多个可能的 token 中选择,使生成更具多样性。

  • 影响:在启用 do_sample 后,模型不再只选取最高概率的 token,而是通过引入随机性选择下一个 token,这可以打破不断循环的高概率模式。这样,生成的内容不再严格依赖于每一步的最高概率,使得模型可以探索更广泛的输出空间。

  • 潜在问题:采样过度可能会导致内容的连贯性下降,生成的文本变得不相关。因此,do_sample 通常需要配合其他参数(例如 temperaturetop-k)进行细致的调节,以保证内容的质量。

1.1.5.2. temperature:温度系数
  • 作用temperature 控制采样的「随机性」。当 temperature=1.0 时,模型按照默认概率分布进行采样;temperature<1.0 时,概率分布变得更尖锐,模型更倾向于选取高概率的 token;而 temperature>1.0 会使分布变得更平缓,使得低概率的 token 也有较高的可能被选中。

  • 实践应用

    • 当复读问题严重时,可以适当提高 temperature,例如调至 1.2 或 1.5,使模型不再过于“保守”地生成高概率短语。

    • 如果 temperature 设得太高(如 >2),会引入极端随机性,使文本变得混乱,生成的内容缺乏连贯性和逻辑。

    • 推荐的设置范围:在 1.0 至 1.5 之间微调,既可以提升生成的多样性,又保持一定的逻辑。

1.1.5.3. repetition_penalty:重复惩罚
  • 作用repetition_penalty 用来在解码过程中对已经生成的词或短语施加惩罚,以降低重复生成的概率。例如,repetition_penalty=1.2 时,模型会对每个重复出现的词或短语施加 1.2 倍的惩罚,减少它们再次被选中的可能性。

  • 设置过大时的副作用:如果惩罚设置过大(例如 >2),模型会过度避免任何形式的重复,包括词语的自然重复和标点符号的使用,导致生成的内容缺乏基本的语言结构。例如,“.” 和 “,” 等标点符号可能无法正常出现,使句子结构混乱。

  • 合理设置:通常建议在 1.1 到 1.5 之间设定 repetition_penalty,在保持一定惩罚的同时不影响自然语言的流畅度。

1.1.5.4. 组合使用 do_sampletemperaturerepetition_penalty

在实际应用中,这些参数往往要结合使用,以达到较好的效果。以下是一些常用的组合技巧:

  • 解决复读问题的常用组合

    • 启用 do_sample,将 temperature 设置为 1.2 左右,增加随机性,同时将 repetition_penalty 设置在 1.1-1.3 范围内,适度惩罚重复短语。

  • 过度随机性问题的解决:如果发现 do_sample 使生成内容变得过于随机,降低 temperature 到 1.0 左右,或者将 repetition_penalty 调低,减少对低概率词的过度采样。

这种组合方法通常会在减少复读现象的同时,维持生成内容的连贯性和自然性。

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

以 LLaMA 为代表的许多现代大语言模型,采用了 相对位置编码(ROPE)理论上可以处理无限长度的序列。这种编码方式不固定于某一个具体位置,而是根据每个 token 相对于其他 token 的距离来计算,这使得模型在结构上没有长度限制。因此,模型确实在构架上可以生成极长的文本。

但问题在于:大多数模型的训练数据通常包含长度不超过一定范围(比如 2K 或 4K tokens)的序列。如果训练过程中很少看到长于这个范围的文本,模型在推理时生成超过训练长度的文本效果就会明显下降。这种情况类似于模型在“没有见过的情境”下工作,即 缺乏“长度外推性”

1.1.6.1 RoPE
1.1.6.1.1. 关于RoPE

RoPE(Rotary Position Embedding),是苏剑林大神在2021年就提出的一种Transformer模型的位置编码。RoPE是一种可以以绝对位置编码形式实现的相对位置编码,兼顾了模型性能和效率。

2023年上半年的时候,大模型位置编码尚有Alibi和RoPE在相互比拼,而到了2023年下半年,及今2024年,新开源出来的模型,大部分都是使用RoPE了。当然Alibi也有其优势,这个在讲Alibi的时候来说。

苏神在他的个人网站科学空间中对RoPE有相关文章进行了介绍,本篇是在这个基础上,对RoPE进行理解(公式和符号上也会沿用苏神的写法)。

1.1.6.1.2. 以绝对位置编码的方式实现相对位置编码

前面提到,RoPE是一种一绝对位置编码的方式实现的相对位置编码,那么这么做能带来什么收益?

先说原因:

在文本长度不长的情况下(比如Bert时代基本都是256/512token的长度),相对位置编码和绝对位置编码在使用效果上可以说没有显著差别。 如果要处理更大长度的输入输出,使用绝对位置编码就需要把训练数据也加长到推理所需长度,否则对于没训练过的长度(训练时没见过的位置编码),效果多少会打些折扣。 而使用相对位置编码则更容易外推,毕竟token-2和token-1的距离,与token-10002和token-10001的距离是一样的,也因此可以缓解对巨量长文本数据的需求。 但是传统相对位置编码的实现相对复杂,有些也会有计算效率低的问题。由于修改了self-attention的计算方式,也比较难推广到线性注意力计算法模型中。 总结来说,就是绝对位置编码好实现效率高适用线性注意力,而相对位置编码易外推,因此就有了对“绝对位置编码的方式实现相对位置编码”的追求,去把二者的优点结合起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

your HTTP request connection start duration too long

If your HTTP request connection start duration is taking more than 7 seconds, here are some possible causes and troubleshooting steps: Possible Causes: Network Latency – Slow internet or network congestion.DNS Resolution Delay – Slow DNS lookup affecti…

Python天梯赛系统备考-字符串篇

知识点拆解 1. 切片技巧 定义 通过 [start:end:step] 语法截取字符串的子序列 start&#xff1a;起始索引&#xff08;包含&#xff0c;默认0&#xff09; end&#xff1a;结束索引&#xff08;不包含&#xff0c;默认末尾&#xff09; step&#xff1a;步长&#xff0…

国标28181协议在智联视频超融合平台中的接入方法

一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff0c;是国内视频行业最重要的国家标准&#xff0c;目前有三个版本&#xff1a; 2011 年&#xff1a;推出 GB/T 28181-2011 版本&#xff0c;为安防行业的前端设备、平…

深入探究 C 语言内存函数:memcpy、memmove、memset 和 memcmp

一&#xff0c;常见的内存函数 在 C 语言的编程世界里&#xff0c;对内存的高效操作至关重要。C 标准库为我们提供了一系列强大的内存操作函数&#xff0c;其中 memcpy、memmove、memset 和 memcmp 这四个函数是处理内存数据的得力助手。接下来&#xff0c;让我们深入了解它们…

Java 集合

Java 集合 在 Java 编程中&#xff0c;集合框架&#xff08;java.util 包&#xff09;是处理一组对象的强大工具。与数组不同&#xff0c;集合提供了更灵活的数据存储和操作方式。本文将详细介绍 Java 集合框架的核心接口、常用实现类及其应用场景&#xff0c;帮助你更好地理解…

go基本语法

跟Java比较学习。 hello word 示例代码 test1.go文件&#xff1a; // 包路径 package main// 导入模块&#xff0c;下面两种都行 import ("fmt" ) import "log"// main方法 func main() {log.Print("hello word !!!")fmt.Print("hello …

【Docker】如何在Linux、Windows、MacOS中安装Docker

Linux安装Docker 在终端中执行一键安装脚本命令安装docker sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun1.1 配置docker镜像源 在终端执行 一行命令&#xff0c;编辑配置文件 sudo …

2.24力扣-回溯电话号码的字母组合

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<String> ans new LinkedList<>();StringBuilder temp new StringBuilder();public List<String> letterCombinations(String digits) {if(digitsnull || digits.leng…

Cocos Creator Shader入门实战(一):材质和Effect的了解

引擎版本&#xff1a;3.8.5 环境&#xff1a; Windows 简介 在Cocos Creator中&#xff0c;游戏炫彩缤纷的效果是借助着色器(Shader)来实现的。 Cocos主要基于OpenGL ES&#xff0c;而Shader的编写则是在可编程渲染管线中基于修改&#xff1a;顶点着色器(Vertex) 和 片段着色…

akka现有的分布式定时任务框架总结

根据你的需求&#xff0c;以下是一些基于 Akka 实现的分布式定时任务框架&#xff0c;以及相关的 GitHub 项目推荐&#xff1a; 1. Openjob Openjob 是一个基于 Akka 架构的新一代分布式任务调度框架&#xff0c;支持多种定时任务、延时任务、工作流设计&#xff0c;采用无中…

微信小程序地图map全方位解析

微信小程序地图map全方位解析 微信小程序的 <map> 组件是一个功能强大的工具&#xff0c;可以实现地图展示、定位、标注、路径规划等多种功能。以下是全方位解析微信小程序地图组件的知识点&#xff1a; 一、地图组件基础 1. 引入 <map> 组件 在页面的 .wxml 文…

Python的PyTorch+CNN深度学习技术在人脸识别项目中的应用

人脸识别技术是一种基于人脸特征进行身份识别的生物识别技术&#xff0c;其核心原理包括人脸检测、人脸对齐、特征提取、特征匹配、身份识别。 一、应用场景 安防&#xff1a;门禁、监控。 金融&#xff1a;刷脸支付、身份验证。 社交&#xff1a;自动标注、美颜。 医疗&am…

《数据库索引设计与优化》译本错误纠正(1)

今天在学习《数据库索引设计与优化》第十一章第198页的时候遇到一个问题&#xff0c;即参数的文字描述与实际不符。我看的是从网络上找到的译本&#xff0c;许多喜欢白嫖的朋友可能也会像我一样遇到这种问题。 可以看到&#xff0c;上面对参数Z的描述是&#xff1a;Z上一次索引…

API测试工具:Swagger vs Postman 2025最新全面对比

随着微服务架构的普及和云原生应用的激增&#xff0c;高效的 API 开发、测试和文档管理工具变得越来越重要。在众多 API 工具中&#xff0c;Swagger 和 Postman 各自以不同的方式解决着 API 开发生命周期中的关键问题&#xff0c;本文将从多个维度深入对比这两款工具&#xff0…

如何查询SQL Server数据库服务器的IP地址

如何查询SQL Server数据库服务器的IP地址 作为数据库管理员或开发人员&#xff0c;了解如何查询SQL Server数据库服务器的IP地址是一项重要技能。本文将介绍几种简单而有效的方法&#xff0c;帮助你轻松获取这一信息。无论你是新手还是经验丰富的专业人士&#xff0c;这些方法…

centos 7 安装python3 及pycharm远程连接方法

安装openssl 使用pip3安装 virtualenv的时候会提示WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 这是因为缺少openssl 2.0以上版本 解决办法&#xff1a; 一、先确认版本 openssl version 二、安…

AI人工智能之机器学习sklearn-数据预处理和划分数据集

1、概要 本篇学习AI人工智能之机器学习sklearn数据预处理和划分数据集&#xff0c;从代码层面讲述如何进行数据的预处理和数据集划分。 2、简介 本片讲述数据预处理的标准化处理、归一化处理&#xff0c;以常用的两个类为例 标准化处理类 StandardScaler归一化处理类 MinMax…

智能硬件-01智能停车场

行业背景 随着现代人们生活水平的提高&#xff0c;私家车辆在不断增加&#xff0c;小区将面临着临时车用户要多于固定车用户的窘境&#xff0c;尤其是在早晚高峰时段车辆出入拥堵&#xff0c;对小区的车辆管理难度越来越大&#xff0c;对停车场收费员的岗位要求越来越高&#…

定长内存池的实现、测试及错误分析

背景 C/C 申请内存使用的是 malloc &#xff0c;malloc 其实就是一个大众货&#xff0c;什么场景下都可以用&#xff0c;但是什么场景下都可以用就意味着什么场景下都不会有很高的性能。 定长内存池解决固定大小的内存申请释放需求&#xff0c; 性能达到极致&#xff0c;不考…

vue3 下载文件 responseType-blob 或者 a标签

在 Vue 3 中&#xff0c;你可以使用 axios 或 fetch 来下载文件&#xff0c;并将 responseType 设置为 blob 以处理二进制数据。以下是一个使用 axios 的示例&#xff1a; 使用 axios 下载文件 首先&#xff0c;确保你已经安装了 axios&#xff1a; npm install axios然后在你…