小米AIGC大模型实习面试题4道|含解析
共 3007字,需浏览 7分钟
·
2024-04-11 07:37
12本七月在线内部电子书在文末,自取~
公众号福利
👉回复【100题】领取《名企AI面试100题》PDF
👉回复【干货资料】领取NLP、CV、ML等AI方向干货资料
![f0a87c7ad21b76af66ecbcd1c12629b3.webp](https://filescdn.proginn.com/42588f82129fd1101a1327fc2efac030/f0a87c7ad21b76af66ecbcd1c12629b3.webp)
![327fc484a8ace7921e6bf245e6bdaeb3.webp](https://filescdn.proginn.com/b103bd3a96738b319a0359bde1a8e337/327fc484a8ace7921e6bf245e6bdaeb3.webp)
![f0a87c7ad21b76af66ecbcd1c12629b3.webp](https://filescdn.proginn.com/42588f82129fd1101a1327fc2efac030/f0a87c7ad21b76af66ecbcd1c12629b3.webp)
问题1、讲一下transformer的原理
transformer的主要组成部分包括自注意力机制和位置编码。
-
自注意力机制(Self-Attention):它允许模型在输入序列中的不同位置之间建立关联。通过计算每个位置与其他所有位置的相关性得分,模型可以学习到输入序列中各个部分之间的依赖关系。
-
位置编码(Positional Encoding):Transformer通过将位置信息编码到输入向量中,使得模型能够区分不同位置的词语或标记。这样,模型能够利用位置信息更好地理解输入序列。
-
多头注意力机制(Multi-Head Attention):为了增强模型对不同表示空间的关注,Transformer引入了多个注意力头,允许模型并行地关注不同的表示子空间,从而提高了模型的表征能力。
-
前馈神经网络(Feed-Forward Neural Network):每个注意力模块之后都连接着一个前馈神经网络,它通过应用全连接层和激活函数来对特征进行变换和组合。
通过这些组件的组合和堆叠,Transformer模型能够捕捉长距离依赖关系,同时避免了传统循环神经网络中的序列依赖问题,使其在处理长序列时表现更好。
问题2、讲一下微调方法p-tuning v2的原理
P-Tuning V2在P-Tuning V1的基础上进行了下述改进:
-
在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层,这与Prefix Tuning的做法相同。这样得到了更多可学习的参数,且更深层结构中的Prompt能给模型预测带来更直接的影响。
-
去掉了重参数化的编码器。在 P-tuning v2 中,作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。
-
针对不同任务采用不同的提示长度。提示长度在提示优化方法的超参数搜索中起着核心作用。在实验中,我们发现不同的理解任务通常用不同的提示长度来实现其最佳性能,这与Prefix-Tuning中的发现一致,不同的文本生成任务可能有不同的最佳提示长度。
-
可选的多任务学习。先在多任务的Prompt上进行预训练,然后再适配下游任务。一方面,连续提示的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解;另一方面,连续提示是跨任务和数据集的特定任务知识的完美载体。
问题3、什么是bilstm-crf
BiLSTM-CRF是一种用于序列标注任务的神经网络模型,结合了双向长短期记忆网络(BiLSTM)和条件随机场(CRF)。
-
双向长短期记忆网络(BiLSTM):BiLSTM是一种循环神经网络变种,能够有效地捕捉输入序列中的长期依赖关系。通过同时考虑输入序列的正向和反向信息,BiLSTM可以更好地理解整个序列的语境。
-
条件随机场(CRF):CRF是一种概率图模型,常用于序列标注任务。它能够对序列中的标记进行全局建模,利用标记之间的依赖关系来提高标注的一致性和准确性。
BiLSTM-CRF模型首先利用BiLSTM对输入序列进行特征提取,然后将提取的特征作为CRF模型的输入,利用CRF模型对序列进行标注。通过结合BiLSTM和CRF,BiLSTM-CRF模型能够更好地处理序列标注任务,同时充分利用上下文信息和标记之间的依赖关系。
问题4、代码题:给整数数组和target,找数组当中和为目标值的两个整数返回下标。
使用一个字典来存储遍历过的数字及其下标,通过查找字典来判断是否存在与当前数字配对的数字,从而实现寻找和为目标值的两个数的功能。
def two_sum(nums, target):
num_dict = {} # 用字典存储数字和对应的下标
for i, num in enumerate(nums):
complement = target - num # 计算目标值与当前值的差值
if complement in num_dict: # 如果差值在字典中,则找到了符合条件的两个数
return [num_dict[complement], i]
num_dict[num] = i # 否则将当前数字及其下标存入字典
return None # 如果未找到符合条件的两个数,则返回None
# 示例
nums = [2, 7, 11, 15]
target = 9
print(two_sum(nums, target)) # 输出 [0, 1],因为 nums[0] + nums[1] = 2 + 7 = 9
免费送
↓以下12本书电子版免费领,直接送↓
![71397082e89e318731581d78b3878ca0.webp](https://filescdn.proginn.com/0b150b5de808bcb0e377d3101e8410a9/71397082e89e318731581d78b3878ca0.webp)
扫码回复【999】免费领12本电子书
(或 找七月在线其他老师领取 )
点击“ 阅读原文 ”抢新人 福利 ~