秋招八股总结

transformer

损失函数

交叉熵的原理

公式

xi是true_label,yi是神经网络预测为正确的概率
在这里插入图片描述

对比学习loss

对比学习损失函数

InfoNEC Loss(bge中也用的这个)

在这里插入图片描述

SimCSE的主要思想:同一句话通过不同的drop out作为正例,其余的作为负例(损失函数还是用的InfoNEC Loss);数据增强用的2次dropout

【【一起读论文】SimCSE: Simple Contrastive Learning of Sentence Embeddings】https://www.bilibili.com/video/BV12g411M7AB?vd_source=22a0d494d7d586e6e37e23570688a816
在这里插入图片描述

为什么除以根号dk

  1. 防止梯度消失
    随着dk维度的值变大,点积的大小会增大,如果没有及时对点积的大小进行缩放,那么万一点积的数量级很大,softmax的梯度就会趋向于0,也就会出现梯度消失问题。
  2. 进行归一化
    为什么选择 ,时因为可以使得 Q 和 K 点积 趋向于 期望为0,方差为1的标准正态分布,说白了就是归一化。

标准化

标准化作用

缓解梯度消失 / BN缓解内部协变量偏移 / 有一定正则化作用

内部协变量偏移

在训练深层神经网络时,各层的输入分布会随着参数更新而变化,这种现象被称为内部协变量偏移(Internal Covariate Shift)。具体来说,随着训练的进行,每层的激活值(即层的输出)的均值和方差可能会发生变化。由于每层的输入分布在训练过程中不断变化,优化过程中的梯度更新也会受到影响,这会导致训练过程变得不稳定。批归一化的目标是缓解这一问题,使得网络的每一层的输入分布更加稳定,从而加快训练速度。

为什么用 LayerNorm 不使用 BatchNorm?

  1. 数据的角度
    CV 通常用 BatchNorm,NLP 通常用 LayerNorm。图像数据一个 Channel 内的关联性比较大,不同 Channel 的信息需要保持差异性。文本数据一个 Batch 内的不同样本关联性不大。
  2. Pad的角度解释
    不同句子的长度不同,在句子的末尾归一化会受到 pad 的影响,使得统计量不置信。
  3. 模型角度解释
    Self Attention 中,内积的大小的上界和 q,k 的 L2Norm 有关。LayerNorm 对 L2Norm 限制更加直接。

(3) BN 在训练和推理时的差别

BN 在训练和推理时的差别
训练阶段:在训练过程中,BN 使用当前小批量的数据计算均值和方差。
推理阶段:在推理阶段,BN 使用在训练过程中累积的全局均值和方差进行标准化,以确保模型的稳定性。

BN 与dropout 能否一起用?为什么?

添加链接描述
本论文作者发现理解 Dropout 与 BN 之间冲突的关键是网络状态切换过程中存在神经方差的(neural variance)不一致行为。试想若有图一中的神经响应 X,当网络从训练转为测试时,Dropout 可以通过其随机失活保留率(即 p)来缩放响应,并在学习中改变神经元的方差,而 BN 仍然维持 X 的统计滑动方差。这种方差不匹配可能导致数值不稳定(见下图中的红色曲线)。而随着网络越来越深,最终预测的数值偏差可能会累计,从而降低系统的性能。简单起见,作者们将这一现象命名为「方差偏移」。事实上,如果没有 Dropout,那么实际前馈中的神经元方差将与 BN 所累计的滑动方差非常接近(见下图中的蓝色曲线),这也保证了其较高的测试准确率。
在这里插入图片描述

attention的时间复杂度

n2d : n为序列长度,d为隐层维度

如何减少时间复杂度:Sparse Self Attention

在这里插入图片描述

instruct_gpt

在这里插入图片描述

RM损失函数

在这里插入图片描述

RL目标函数

在这里插入图片描述

什么阶段达到了所谓 in-context learning(gpt-3)

GPT与transformer decoder的区别

少一层无mask自注意力层(交叉自注意力) / LN层前置 / 模型的输出部分添加一个LN层 / 采用可训练的 postion embedding

分词算法

WordPiece

WordPiece核心思想是将单词拆分成多个前缀符号(比如BERT中的##)最小单元,再通过子词合并规则将最小单元进行合并为子词级别。例如对于单词"word",拆分如下:
w ##o ##r ##d
然后通过合并规则进行合并,从而循环迭代构建出一个词表,以下是核心步骤:

  1. 计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。
  2. 计算合并分数:对训练语料拆分的多个子词单元通过合拼规则计算合并分数。
  3. 合并分数最高的子词对:选择分数最高的子词对,将它们合并成一个新的子词单元,并更新词表。
  4. 重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词表的效益)。
  5. 分词:使用最终得到的词汇表对文本进行分词。

Byte-Pair Encoding (BPE)

核心思想是逐步合并出现频率最高的子词对而不是像Wordpiece计算合并分数,从而构建出一个词汇表。
11. 计算初始词表:通过训练语料获得或者最初的英文中26个字母加上各种符号以及常见中文字符,这些作为初始词表。
12. 构建频率统计:统计所有子词单元对(两个连续的子词)在文本中的出现频率。
合并频率最高的子词对:选择出现频率最高的子词对,将它们合并成一个新的子词单元,并更新词汇表。
13. 重复合并步骤:不断重复步骤 2 和步骤 3,直到达到预定的词汇表大小、合并次数,或者直到不再有有意义的合并(即,进一步合并不会显著提高词汇表的效益)。
14. 分词:使用最终得到的词汇表对文本进行分词。

Byte-level BPE(BBPE)

Transformers / LLM 的词表应该选多大?

https://mp.weixin.qq.com/s/onPJPeZTqMuhmqfk3u_HmQ

  1. 数据量够大的情况下,vocabulary 越大(计算效率的提升、有助于理解文本、更长的上下文),压缩率越高,模型效果越好。
  2. 太大的 vocabulary 需要做一些训练和推理的优化,所以要平衡计算和效果。(业界普遍设置在 10万 到 20万左右。比如 Qwen 的 词表大小为 152064,baichuan2为125696,llama3 为128256,deepseek 为 102400。)
  3. 要考虑内存对齐。vocabulary 的大小设置要是 8 的倍数,在 A100 上则是 64 的倍数。(不同的GPU可能不一样)

手撕代码

多头自注意力代码

在这里插入图片描述

from math import sqrt
import torch
import torch.nn as nn
 
class MultiHeadSelfAttention(nn.Module):
    def __init__(self, dim_in, dim_k, dim_v, num_heads=8):
        super(MultiHeadSelfAttention, self).__init__()
        assert dim_k % num_heads == 0 and dim_v % num_heads == 0, "dim_k and dim_v must be multiple of num_heads"
        self.dim_in = dim_in
        self.dim_k = dim_k
        self.dim_v = dim_v
        self.num_heads = num_heads
        
        # 定义线性变换矩阵
        self.linear_q = nn.Linear(dim_in, dim_k, bias=False)
        self.linear_k = nn.Linear(dim_in, dim_k, bias=False)
        self.linear_v = nn.Linear(dim_in, dim_v, bias=False)
        
        # 最后通过线性层将输出映射回原来的维度
        self.fc_out = nn.Linear(dim_v, dim_in)
        
        self._norm_fact = 1 / sqrt(dim_k // num_heads)

    def forward(self, x):
        batch, n, dim_in = x.shape
        assert dim_in == self.dim_in
 
        nh = self.num_heads
        dk = self.dim_k // nh  # dim_k of each head
        dv = self.dim_v // nh  # dim_v of each head
 
        # 线性变换并切分头
        q = self.linear_q(x).reshape(batch, n, nh, dk).transpose(1, 2)  # (batch, nh, n, dk)
        k = self.linear_k(x).reshape(batch, n, nh, dk).transpose(1, 2)  # (batch, nh, n, dk)
        v = self.linear_v(x).reshape(batch, n, nh, dv).transpose(1, 2)  # (batch, nh, n, dv)
 
        # 计算注意力
        dist = torch.matmul(q, k.transpose(2, 3)) * self._norm_fact  # batch, nh, n, n
        dist = torch.softmax(dist, dim=-1)  # batch, nh, n, n
 
        # 根据注意力分数加权值矩阵
        att = torch.matmul(dist, v)  # batch, nh, n, dv
        att = att.transpose(1, 2).reshape(batch, n, self.dim_v)  # batch, n, dim_v
        
        # 最后通过线性层融合不同头的输出,并映射回原始维度
        out = self.fc_out(att)  # (batch, n, dim_in)
        
        return out

# test
x = torch.randn(2, 10, 128)
attn = MultiHeadSelfAttention(128, 64, 64, 8)
y = attn(x)
print(y.shape)  # torch.Size([2, 10, 64])

反向传播代码

激活函数

激活函数
激活函数
在这里插入图片描述
在这里插入图片描述

deepspeed(数据并行:zero、模型并行、张量并行(magnetron))

Deepspeed加速/优化方式

单byte-Adam / 稀疏注意力计算内核 / 3D并行

三种并行方式

Data Parallelism、Pipeline Parallelism、Tensor Parallelism

数据并行的5个步骤

在这里插入图片描述

通信的术语

all_reduce

在这里插入图片描述

不同分布式聚集的时间和带宽复杂度

在这里插入图片描述

递归的进行all_reduce

在这里插入图片描述

zero1,2,3

在这里插入图片描述

magatron

【Megatron LM 论文精读【论文精读】】https://www.bilibili.com/video/BV1nB4y1R7Yz?vd_source=22a0d494d7d586e6e37e23570688a816
在这里插入图片描述

petf

常用的轻量级微调方法有什么,异同点,与传统的fine-tuning的区别?
部分参数微调策略仅选择性地更新模型中的某些权重,尤其是在需要保留大部分预训练知识的情况下。

BitFit:Fine-tune only the bias terms

在这里插入图片描述

adapter

在这里插入图片描述
将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为 adapter(适配器),下游任务微调时也只训练这些适配器参数;

prompt tuning

在这里插入图片描述

Prefix-Tuning

在这里插入图片描述

prompt tuning和Prefix-Tuning的缺点

在这里插入图片描述
在模型的输入或隐层添加个额外可训练的前缀 tokens(这些前缀是连续的伪 tokens,不对应真实的 tokens),只训练这些前缀参数;

lora

在这里插入图片描述
通过向模型权重矩阵添加低秩矩阵来进行微调,既允许模型学习新的任务特定模式,又能够保留大部分预训练知识,从而降低过拟合风险并提高训练效率。

lora参数量变化: 原矩阵 dd,lora秩为r (一般很小如4、8、16),则新参数量为 2d*r

qlora

在这里插入图片描述
使用一种新颖的高精度技术将预训练模型量化为 4 bit,然后添加一小组可学习的低秩适配器权重,这些权重通过量化权重的反向传播梯度进行微调。

排序算法

插入、交换、选择、归并、基数
稳定性:插入、冒泡、归并、基数

过拟合问题以及如何解决

a) 正则化
b) dropout 在训练和推理阶段分别怎样做
(训练只保留p的神经元激活值,推理激活值除以p恢复数据原始分布)
c) 增大数据规模 / 降低模型复杂度
d) Early-stop策略

L1/L2正则化

为什么加入正则化项只限制参数w,而不限制b

在这里插入图片描述

数据类别不均衡问题以及如何解决

  1. 不均衡时如何评估(类别不均衡时, 准确率意义不大) -> ROC曲线
    在这里插入图片描述
  2. 欠采样 (欠采样+集成学习) / 过采样
  3. 集成学习 + 阈值调整 (如随机森林)
  4. 一些特殊策略 如:focal loss (对难分类样本附加高权重)

举例三个线性的机器学习方法和三个非线性的机器学习方法

区分线性非线性:决策边界是否线性
线性:线性回归分类器,贝叶斯分类,单层感知机,SVM(线性核)等
非线性:决策树、随机森林、GBDT、SVM(非线性核)、多层感知机、神经网络

交叉熵 / 互信息 / 信息熵 公式

在这里插入图片描述

MOE机制原理

在这里插入图片描述

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

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

相关文章

【计网】数据链路层:概述之位置|地位|链路|数据链路|帧

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山岗! 💫 欢迎来到我的学习笔记! ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 1. 在OSI体系结构中的位置 1. 位置:数…

Parallels Desktop 20(Mac虚拟机) v20.0.0 for Mac 最新破解版(支持M系列)

Parallels Desktop 20 for Mac 正式发布,完全支持 macOS Sequoia 和 Windows 11 24H2,并且在企业版中引入了全新的管理门户。 据介绍,新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新,最大的亮点是全新推出的 Parallels…

稳联Profinet转Canopen网关携手伺服,高效提升生产效率

在当今的工业生产领域,追求高效、精准和可靠的生产方式是企业不断努力的方向。稳联技术Profinet转Canopen(WL-ABC3033)网关与伺服系统的携手合作,为提高生产效率带来了新的机遇和突破。 实现无缝通信,优化生产流程稳联…

B站前端错误监控实践

前言 从23年开始,我们团队开始前端错误监控方向的开发。经历了一些列的迭代和发展,从监控SDK、上报、数据治理、看板集成、APM自研可视化初步完成了一条完整且适合B站前端监控。 截止目前(2024.08.01),前端监控在B站85%以上的业务线&#xf…

在基准测试和规划测试中选Flat还是Ramp-up?

Flat测试和Ramp-up测试是各有优势的,下面我们就通过介绍几种实用的性能测试策略来分析这两种加压策略的着重方向。 基准测试 基准测试是一种测量和评估软件性能指标的活动,通过基准测试建立一个已知的性能水平(称为基准线)&…

服务发现和代理实例的自动更新

☞ 返回总目录 1.服务发现的两种方式 StartFindService 方法 这是一个在后台启动的连续 “FindService” 活动,当服务实例的可用性发生变化时,会通过回调通知调用者。 它返回一个FindServiceHandle,可通过调用StopFindService来停止正在进行…

初学者蒙语学习,使用什么翻译软件学习更快?

为了加快蒙古语的学习,初学者应该从基础语法和词汇入手,利用语言学习应用进行系统学习,并通过音频和视频材料提高听力。语言交换和参加课程可以提供实践机会,而使用闪卡和文化沉浸有助于记忆词汇和理解语言背景。定期复习和设定学…

常用的k8s容器网络模式有哪些?

常用的k8s容器网络模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器网络模式多种多样,每种模式都有其特点和适用场景。Bridge模式适用于简单的容器通信场景;Host模式适用…

微服务保护之熔断降级

在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。为了防止这种情况发生,常用的一些…

Debian项目实战——环境搭建篇

Debian系统安装 准备工作 1、系统镜像:根据自己的需要选择合适的版本格式:x86 / arm 架构 | 最好下载离线安装版本 | 清华镜像源 2、制作工具:balenaEtcher 3、系统媒介:16G以上U盘最佳 烧录镜像 打开balenaEtcher进行烧录&am…

克隆GitHub仓库中的一个文件夹

要只克隆GitHub仓库中的一个文件夹&#xff0c;你可以使用 git sparse-checkout 功能。以下是具体步骤&#xff1a; 克隆仓库&#xff08;使用 --no-checkout 选项&#xff0c;避免下载所有内容&#xff09;&#xff1a; git clone --no-checkout <仓库地址> 进入克隆的…

Active Directory 实验室设置第一部分- AD林安装

在之前的文章中&#xff0c;已经讨论了活动目录的基本知识。在这篇文章中&#xff0c;我们将讨论如何设置和配置环境&#xff0c;以便我们可以使用它来执行各种攻击方案和检测。我们将讨论如何通过GUI和CLI方式完成。 # 1、Active Directory 设置 让我们从活动目录实验室设置…

foc原理odrive驱动板的使用,以及功能介绍

文章目录 驱动板引脚&#xff1a;编码器的安装&#xff1a;电机参数编码器设置 odrive控制控制指令设置模式设置输入模式其他指令 调PID调试准则先调整内环&#xff0c;再调整外环在位置模式下调试结论 使用的灯哥开源的odrive驱动板&#xff0c;外接编码器 驱动板引脚&#xf…

泳池软管检测系统源码分享

泳池软管检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【数学分析笔记】第3章第2节 连续函数(4)

3. 函数极限与连续函数 3.2 连续函数 3.2.9 反函数的连续性定理 【定理3.2.2】【反函数连续性定理】设 y f ( x ) yf(x) yf(x)在闭区间 [ a , b ] [a,b] [a,b]上连续且严格单调增加&#xff0c;设 f ( a ) α , f ( b ) β f(a)\alpha,f(b)\beta f(a)α,f(b)β&#xff0…

web基础之RCE

简介&#xff1a;RCE称为远程代码执行漏洞&#xff1b;是互联网的一种安全漏洞&#xff1b;攻击者可以直接向后台服务器远程注入操作系统命令&#xff1b;从而操控后台系统&#xff1b;也是CTF比较常考的一个方面 1、eval执行 &#xff08;1&#xff09;分析后端代码&#xf…

[数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6986 标注数量(xml文件个数)&#xff1a;6986 标注数量(txt文件个数)&#xff1a;6986 标注…

物流管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;员工管理&#xff0c;部门管理&#xff0c;物品分类管理&#xff0c;物流公司管理&#xff0c;物流信息管理&#xff0c;配送信息管理 微信端账号功能包括&#xff1a;系统首页&a…

Mybatis 快速入门(maven)

文章目录 需求建表新建了数据库但是navicat界面没有显示 新建maven项目 注意导入依赖 总结 黑马学习笔记 需求 建表 注意&#xff1a;设置字符集 减少出错 drop database mybatis; create database mybatis charset utf8; use mybatis;drop table if exists tb_user;create…

如何使用MyJWT测试你的JWT是否存在安全问题

关于MyJWT MyJWT是一款针对JSON Web Token&#xff08;JWT&#xff09;的安全检测工具&#xff0c;该工具适用于渗透测试人员、CTF 玩家或开发人员&#xff0c;可以快速针对JWT执行安全扫描与检测。 功能介绍 1、支持将新的 jwt 复制到剪贴板&#xff1b; 2、用户界面&#xf…