大模型面试常考知识点1

文章目录

1. 写出Multi-Head Attention

import torch
import torch.nn as nn
import torch.nn.functional as F
import math


class MHA(nn.Module):
    def __init__(self, d_model, nums_head):
        super(MHA, self).__init__()     # !!

        self.d_model = d_model
        self.nums_head = nums_head

        self.wq = nn.Linear(d_model, d_model)
        self.wk = nn.Linear(d_model, d_model)
        self.wv = nn.Linear(d_model, d_model)
        self.dk = d_model/nums_head

        self.wo = nn.Linear(d_model,d_model)

    def split_head(self, x, batch_size):  # x(batch_size, seq_len, d_model) -> x(batch_size, seq_len, nums_head, d_k) -> x(batch_size, nums_head, seq_len, dk)
        return x.view(batch_size, self.nums_head, -1, self.dk).transpose(1,2)

    def forward(self, q, k, v, mask=None):

        batch_size = q.size(0)

        q = self.wq(q)
        k = self.wk(k)
        v = self.wv(v)

        q = self.split_head(q, batch_size)
        k = self.split_head(k, batch_size)
        v = self.split_head(v, batch_size)

        scores = torch.matmul(q, k.transpose(-2,-1))/math.sqrt(self.dk)
        if mask is not None:
            scores = scores.mask_fill(mask, float('-inf'))    # mask_fill
        weights = F.softmax(scores, dim=-1)
        attention = torch.matmul(weights, v)

        concat = attention.transpose(1,2).contiguous().view(batch_size, -1, self.d_model)     # contiguous

        output = self.wo(concat)

        return output

2. Pre-Norm vs Post-Norm

在这里插入图片描述

  • Pre-Norm优势:
    在这里插入图片描述

  • 为什么层数较深时,Pre-Norm不如Post-Norm:
    在这里插入图片描述

3. Layer Norm

任何norm的意义都是为了让使用norm的网络的输入的数据分布变得更好,也就是转换为标准正态分布,数值进入敏感度区间,以减缓梯度消失,从而更容易训练。
在这里插入图片描述
这里结合PyTorch的nn.LayerNorm算子来看比较明白:

nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, device=None, dtype=None)
  • normalized_shape:归一化的维度,int(最后一维)list(list里面的维度),还是以(2,2,4)为例,如果输入是int,则必须是4,如果是list,则可以是[4], [2,4], [2,2,4],即最后一维,倒数两维,和所有维度
  • eps:加在分母方差上的偏置项,防止分母为0
  • elementwise_affine:是否使用可学习的参数 γ \gamma γ β \beta β ,前者开始为1,后者为0,设置该变量为True,则二者均可学习随着训练过程而变化

RMS Norm

与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分
在RMS Norm的论文中指出:RMS Norm 比Layer Norm更快(可以在各个模型上减少约 7%∼ 64% 的计算时间),效果也基本一致。

Batch Norm

在这里插入图片描述

  • Batch Norm:把每个Batch中,每句话的相同位置的字向量看成一组做归一化。
  • Layer Norm:在每一个句子中进行归一化。
  • Instance Norm:每一个字的字向量的看成一组做归一化。
  • Group Norm:把每句话的每几个字的字向量看成一组做归一化。计算成本较高

4. SwiGLU

  • Sigmoid

在这里插入图片描述

从ReLU到Swish

  • ReLU
    在这里插入图片描述

  • Leaky ReLU,ELU
    在这里插入图片描述

  • Swish
    在这里插入图片描述

  • GELU vs Swish
    在这里插入图片描述

GELU (高斯误差线性单元)与 Swish 激活函数(x · σ(βx))的函数形式和性质非常相像,一个是固定系数 1.702,另一个是可变系数 β(可以是可训练的参数,也可以是通过搜索来确定的常数),两者的实际应用表现也相差不大。
【GPT2, BERT, ALBERT, RoBERTA常用GELU】

SwiGLU

  • GLU
    在这里插入图片描述理解GLU激活函数的关键在于它的门控机制。门控机制使得GLU能够选择性地过滤输入向量的某些部分,并根据输入的上下文来调整输出。门控部分的作用是将输入进行二分类,决定哪些部分应该被保留,哪些部分应该被抑制。

  • SwiGLU
    在这里插入图片描述

5. AdamW

  • Adam

优点:惯性保持 + 自适应
在这里插入图片描述

  g t \ g_t  gt为梯度
在这里插入图片描述自适应:经常被更新的权重,更新的幅度小一些;不经常被更新的权重,更新的幅度大一些

  • AdamW
    Adam的基础上,权重更新时,加入L2正则化项。
    之前各类框架对 Adam 的实现中,在损失函数中加入了 L2 正则化项,也就是把权重衰减放到了梯度里,由梯度间接缩小θ。但是这种方法并没有起到有效的正则化作用。AdamW 直接将权重衰减项放到权重计算中,可以对大的权重进行惩罚,起到了有效的正则化作用。
    (下图中x表示权重)
    在这里插入图片描述

6. 位置编码

原因:为 Attention 添加位置信息
没有位置编码的Attention并不能捕捉序列的顺序。(交换单词位置后 Attention map 的对应位置数值也会进行交换,然而并不会产生数值变化)

Transformer位置编码

用sin和cos交替来表示位置,并把位置编码加在embeding上。

RoPE

参考文献
Transformer中sinusoidal位置编码对相对位置关系的表示还是比较间接的,那有没有办法更直接的表示相对位置关系呢?旋转位置编码(Rotary Position Embedding,RoPE)是一种用绝对位置编码来表征相对位置编码的方法,并被用在了很多大语言模型的设计中。

假设通过下述运算来给 q, k 添加绝对位置信息:
  f ( q , m ) \ f(q,m)  f(q,m) 表示给向量 q q q在位置 m m m添加位置信息,   f ( k , n ) \ f(k,n)  f(k,n) 表示给向量 k k k在位置 n n n添加位置信息。
同时,我们希望经过 Attention 的内积运算后,内积结果带有相对位置信息:
在这里插入图片描述RoPE这一研究就是为上面这个等式找到了一组解答,也就是:

  f ( q , m ) = q e i m θ \ f(q,m) = qe^{imθ}  f(q,m)=qeimθ

根据复数乘法的⼏何意义,该变换实际上对应着向量的旋转,所以我们称之为“旋转式位置编码”,
它还可以写成矩阵形式(二维):
在这里插入图片描述根据刚才的结论,结合内积的线性叠加性,可以将结论推广到高维的情形。可以理解为,每两个维度一组,进行了上述的“旋转”操作,然后再拼接在一起:
在这里插入图片描述由于矩阵的稀疏性,会造成计算上的浪费,所以在计算时采用逐位相乘再相加的方式进行:
在这里插入图片描述

ALibi

在这里插入图片描述注意看上表的位置编码那一列,baichuan 7B无论第一代还是第二代,位置编码均用的RoPE,而baichuan 13B则无论是第一代还是第二代,均用的ALiBi

在这里插入图片描述

在这里插入图片描述
怎么理解呢,就是在query和key做矩阵点乘的基础上,加上一个常数负值,比如距离当前位置前1位为-1, 前两位为-2,这些常数要乘上 权重 m

在这里插入图片描述

7. LoRA

lora之前的PEFT方法是adapter/prefix/promp/P-tuning,但是Adapter会引入很强的推理延迟(只能串行),prefix/prompt/P-tuning很难练,而且要占用context length,变相的降低模型能力——所以,根本不改原来的model,这就引出了lora:Low-Rank Adaptation

在这里插入图片描述
在这里插入图片描述

初始化

为什么用随机高斯分布初始化 A ,用 0 矩阵初始化 B ?
需要深入探讨这两个矩阵在权重更新过程中的角色和相互作用

  • 矩阵𝐴:这个矩阵可以被看作是一个特征提取器,它将输入特征映射到一个低维空间(通过矩阵乘法)。在 LORA 的设置中,𝐴通常被视为首先应用于输入的一种转换,将数据从原始的高维空间压缩到一个低维空间。
  • 矩阵𝐵:这个矩阵作为一个特征转换器,它将𝐴输出的低维表示映射回原始的高维空间。可以看作是从𝐴创建的低维空间中恢复信息到原始空间的过程。

为什么𝐴不能为零而 𝐵采用高斯初始化?
如果𝐴初始化为零,那么无论𝐵初始化为什么值,Δ𝑊始终为零矩阵。这意味着在训练的开始阶段,没有任何更新被应用于原始权重 𝑊,导致模型在这一阶段无法学习或适应任何新的特征或模式。

优点:

  • 在面对不同的下游任务时,仅需训练参数量很少的低秩矩阵,而预训练权重可以在这些任务之间共享;
  • 省去了预训练权重的梯度和相关的 optimizer states,大大增加了训练效率并降低了硬件要求;
  • 训练好的低秩矩阵可以合并(merge)到预训练权重中,多分支结构变为单分支,从而达到没有推理延时的效果;
  • 与之前的一些参数高效的微调方法(如 Adapter, Prefix-Tuning 等)互不影响,并且可以相互结合

局限性:

  • 基于低秩的微调可能并不always work,比如finetune与pretrain的gap过大的时候,比如中英差异。当然,这一点在LLM时代可能并不突出,我们认为LLM在预训练阶段已经get了所有基本的知识,finetune只是格式微调,因此可能不会有上述gap过大的情况。
  • 用lora也需要设置r和target module等,这部分超参的设置需要考虑

参考文献

大模型面试八股

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

按键配合LDO实现开关功能

今天给大家分享一个学到的按键开关电路,适合没有足够空间给自锁开关的场景,既可以用于USB供电控制也可以用于电池供电控制。话不多说上电路图先。 核心任务就是通过按键控制LDO芯片的使能管脚的电平状态,这枚NCP芯片高电平使能,VB…

ETLCloud中如何执行Java Bean脚本

ETLCloud中如何执行Java Bean脚本 在ETLCloud这一强大的数据集成和转换平台中,执行Java Bean脚本的能力为其增添了更多的灵活性和扩展性。Java Bean脚本不仅仅是一段简单的代码,而是一种强大的工具,可以帮助用户定制和优化数据处理的每一个环…

AI 绘画神器 Fooocus 2.3.1 汉化教程(中文界面/汉化包下载/持续更新最新版本...)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ Fooocus 是一款功能强大的 AI 绘画神器,它能够帮助我们以更高效、更创意的方式进行绘画创作。本教程将详细…

C++入门系列-构造函数

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会…

社交媒体数据恢复:飞书

飞书数据恢复过程包括以下几个步骤: 确认数据丢失:首先要确认数据是否真的丢失,有时候可能只是被隐藏或者误操作删除了。 检查回收站:飞书中删除的文件会默认保存在回收站中,用户可以通过进入回收站找到被删除的文件&…

推荐全网最全的AI小白进阶指南

1. 引言 您想学习人工智能?但不知道如何开始,也不知道从哪里开始?互联网上的资源总是丰富多彩,质量参差不齐,往往容易看花眼而无从下手。 鉴于此,本文重点推荐一些个人收集的还不错的一些资源供大家学习参…

ApiHug Official Website

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

DSSAT作物模建模方法

原文链接:DSSAT作物模建模方法https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604079&idx5&sn0151d083d35c9ea259cf155d082b0145&chksmfa821688cdf59f9eddae14a99fce4f56c6ad9d73db38e0b9b165dcb9b315b6ed845d83cd085f&token94156244…

c++多态机制

多态 在 C 中,多态(Polymorphism)是一种面向对象编程的重要概念,它允许不同类的对象对同一消息做出不同的响应。具体来说,多态性允许基类的指针或引用在运行时指向派生类的对象,并且根据对象的实际类型来调…

日报表定时任务优化历程

报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…

BUUCTF[PWN]

BUUCTF[PWN] 题目:warmup_csaw_2016 地址:warmup_csaw_2016ida打开,进main函数:gets函数的栈溢出:给出了sub_40060D函数的地址直接,溢出到sub_40060D的地址即可: from pwn import *p remote…

vue 孙组件调用父组件的方法

通过组件内的 传递方法名称&#xff0c;可以实现孙组件调用父组件。 代码如下&#xff1a; index.html <!DOCTYPE html> <html> <head><meta charset"utf-8"><script src"/framework/vue-2.7.16.min.js"></script>…

数字孪生引擎国产信创环境适配靠谱么?

近期我们组织了一次国产化环境适配以及产品国产化产品替换的交流&#xff0c;虽然从属于不同的业务条线&#xff0c;但是在过去一段时间多多少少都承受不同程度的信创压力&#xff0c;尤其是自然资源业务方面&#xff0c;由于自然资源大多数的业务是属于强GIS的范畴&#xff0c…

基于单片机的直流电机检测与控制系统

摘要&#xff1a; 文章设计一款流电机控制系统&#xff0c;以 STC89C51 作为直流电机控制系统的主控制器&#xff0c;采用 LM293 做为驱动器实现 对直流电机的驱动&#xff0c;采用霍尔实现对直流电机速度的检测&#xff1b;本文对直流电机控制系统功能分析&#xff0c;选择确…

Colab/PyTorch - 003 Transfer Learning For Image Classification

Colab/PyTorch - 003 Transfer Learning For Image Classification 1. 源由2. 迁移学习(ResNet50)2.1 数据集准备2.2 数据增强2.3 数据加载2.4 迁移学习2.5 数据集训练&验证2.6 模型推理 3. 总结4. 参考资料 1. 源由 迁移学习已经彻底改变了 PyTorch 中处理图像分类的方式…

搜歌网搜索各种类型音乐,统统歌曲转换格式mp3,轻松实现音乐自由!

在互联网的广阔天地中&#xff0c;音乐爱好者们总能找到满足自己需求的平台。其中&#xff0c;支持全网搜歌的网站无疑是一个值得推荐的音乐探索乐园。无论是寻找经典老歌&#xff0c;还是发掘新兴音乐&#xff0c;搜他们都能为音乐爱好者提供一站式的服务。 一般支持全网搜索…

微信投票源码系统至尊版 吸粉变现功能二合一

源码简介 微信投票系统在营销和社交互动中发挥着多方面的作用&#xff0c;它能够提升用户的参与度和品牌曝光度&#xff0c;还是一种有效的数据收集、营销推广和民主决策工具。 分享一款微信投票源码系统至尊版&#xff0c;集吸粉变现功能二合一&#xff0c;全网独家支持礼物…

py黑帽子学习笔记_网络编程工具

tcp客户端 socket.AF_INET表示使用标准IPV4地址和主机名 SOCK_STREAM表示这是一个TCP客户端 udp客户端 udp无需连接&#xff0c;因此不需要client.connect这种代码 socket.SOCK_DGRAM是udp的 tcp服务端 server.listen(5)表示设置最大连接数为5 发现kill server后端口仍占用…

【论文阅读笔记】jTrans(ISSTA 22)

个人博客地址 [ISSTA 22] jTrans&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《jTrans: Jump-Aware Transformer for Binary Code Similarity》 仓库&#xff1a;https://github.com/vul337/jTrans 提出的问题 二进制代码相似性检测&#xff08;BCSD&#xff0…

Stable Diffusion的技术原理

一、Stable Diffusion的技术原理 Stable Diffusion是一种基于Latent Diffusion Models&#xff08;LDMs&#xff09;实现的文本到图像&#xff08;text-to-image&#xff09;生成模型。其工作原理主要基于扩散过程&#xff0c;通过模拟数据的随机演化行为&#xff0c;实现数据…