0%

面试准备

一些内容

线性代数

零空间,列空间

列空间:有解时,所在的空间

零空间:所在的空间

矩阵正定、半正定

正定:恒成立,对应特征值严格大于0

半正定:恒成立,对应特征值大于等于0

在SLAM中,优化时正定保证了有唯一解;半正定时对应的特征值为0的部分组成了系统的不可观的变量。而的特征值大小对应了该变量对于误差的贡献程度(越大说明约束越强,信息丰富)

奇异值分解

,由于都是特殊正交群,因此SVD实际上就是旋转+拉伸+旋转。

奇异值为0的的右奇异向量构成了零空间;奇异值非0的左奇异向量构成了列空间。因此在SLAM中DLT法求最小二乘问题时,只需要选取最小奇异值对应的右奇异向量即可构成解空间。


Robotics

DH法

  • a: z轴-z轴,沿x轴方向
  • α:z轴-z轴的角度,z轴为旋转轴
  • d:x轴-x轴,沿z轴方向
  • θ:x轴-x轴的角度,z轴为旋转轴

homotopy continuation

  • predict step+correction step
  • bertini、julia homotopy、GPU-HC

同伦延续有贝祖定律和完备性保证,能保证从G(x)出发的所有解能够收敛到F(x)的所有解(如果有的话)。一般,其中d是F(x)的最高阶。如果方程组F(x)有所有解,那么就一定能求解出来,此为total degree hc;如果F(x)有一部分解不存在,那么可能会收敛到同一个解或者发散。

pnp问题系数空间恒定,所以可以用网络估计方程的根,然后构建即可求解。

在迭代时需要解一个jacobian方程来获取delta x,一般是qr分解或者lu分解来求解。

GPU-HC

使用magma来分配GPU内存,column-major,对于P3P问题而言,每个block只有3个thread即3个更新参数,一个问题对应8个block即8个方程(贝祖定律)。

通过两步先预测再校正

由于每个thread对应一个变量,因此在求解时,需要协作求解更新,求解程序使用高斯消元变成三角矩阵后逐个求解。

Lie Group

  • 扰动/导数用于优化,扰动模型导数更加简单
  • 导数模型:
  • 扰动模型:

Kinematics in Lie Group

  • 即角速度与李群导数之间的关系
  • 最简单的就可以直接从数学上推导出来,但应该一种对应spatial velocity,另一种对应body velocity,物理意义是不同的
  • , ,

小波变换与傅里叶变换

  • 傅里叶变换只能获取到频谱,但无法知道一开始是什么频率,后来是什么频率
  • 傅里叶在突变点出会产生充斥整个时域的信号,小波只有在小波基对应的突变位置信号不为0,不会填充整个时域
  • 小波变换存在尺度与平移量,用于控制小波基的深度与平移

优化与边缘化

牛顿法

对于优化问题 ,其中 是最优解的必要条件是 。牛顿法的核心思想是将近似为一个二次函数。我们在处对进行二阶泰勒展开:

其中 的梯度(), 的二阶导数(海森矩阵 Hessian)。对 求导并令其为 0:

于是得到了牛顿法的更新方程:

需要解这个线性方程来完成参数的更新。

求方程的根和最优化用到的牛顿迭代形式不太一样,因为优化的目的是让梯度=0(为梯度,需要对梯度再求导);而求根的目的是让泰勒展开为0(为jacobian);

高斯牛顿法

如果不对展开,而是对误差函数进行一阶泰勒展开:

将此式代入目标函数 并关于 求导并令其为 0,得到:

整理后得到高斯-牛顿方程:

近似了海森矩阵,省去了计算二阶导数的麻烦,且保证了近似矩阵是半正定的。但它要求是可逆的(正定)。如果在计算过程中, 出现奇异(例如在平坦区域或参数冗余时),或者近似不够好导致步长太大,算法就会极其不稳定甚至发散。

LM

LM 算法引入了一个阻尼因子(。它在GN的方程左侧加上了一个对角矩阵:

这里的 是一个可调参数:
很大时,被忽略,方程近似为,即。此时算法退化为梯度下降法,步长很小,但保证下降。当 很小时:方程近似为。此时算法表现为高斯-牛顿法,在极值点附近收敛速度快。

舒尔消元、边缘化

边缘化的数学原理为将BA对应的联合概率分布转为求解边缘概率分布,将后者固定并作为先验。

边缘化原因:在做滑动窗口时,直接丢弃历史观测数据会导致系统出现误差;做边缘化即让“丢弃的信息”变为已有优化变量之间的约束。边缘化在数学上的操作就是舒尔补。

边缘化会压缩更新变量(将系数矩阵分成一个三角阵,这样0对应的那个变量就可以不用求了,但如果想要更新的话还是可以解第二个方程来更新的),但不会损失信息。

但边缘化会导致图优化系数矩阵丧失稀疏性。正常情况下由于路标和位姿相互独立,左上和右下均为块对角矩阵,但一旦将所有路标边缘化,那么左上角立刻变得稠密(降低了求解规模)。如果在边缘化关键帧后,仍然想维持一个稀疏的结构,那么需要同时边缘化该关键帧对应的路标点。

零空间、边缘化与FEJ

零空间与能观性

零空间指的就是那些无法被观测到的维度,在单目 SLAM 中,由于绝对位置(3维)、绝对偏航角(3维)和绝对尺度(1维)不可观,这 7 个维度构成了系统的零空间。其含义为:变量在这些维度的变化不会影响残差值(平底的碗,半正定),即

当进行边缘化时,即相当于将当前帧与未边缘化的变量构建了一个先验项,这部分系数是不会发生改变了;但在优化时,如果有变量同时位于先验方程与其他更新方程中(比如帧1被边缘化,能够构建帧2的联系;而帧2又参与帧3的更新),那么先验项与更新时计算的jacobian的线性点就发生了改变。

强行拼凑不同的线性点会导致零空间被破坏,即虚假的观测到新的信息。比如单目slam的尺度是不定的,零空间没有被破坏时,尺度方向上的改变对于所有变量的jacobian是一致的,不会实质改变误差;一旦零空间被破坏,就相当于先验部分的误差增加速度是 A,而当前部分的误差减少速度是 B,两者不相等就会导致改变尺度会降低误差(但实际上不可能通过一个不能观的变量来降低误差)。

在单目优化时为了消除零空间,会强制把第一帧的位姿设为固定值,或者固定前两帧的距离(固定尺度),方程变得可解且存在唯一解。

(LM算法让H变为正定,客观上是改变了曲面形状,代价是步长变短,退化为梯度下降。)

FEJ

FEJ即当一个变量同时与先验和其他优化变量建立联系的时候,固定住这个变量的jacobian,防止出现线性点不同。


LLM

attention

Q: 为什么要除以

A: 因为点积的数量级增长很大,很容易将softmax的一阶雅可比矩阵压缩到0附近,导致梯度消失。即有部分元素值很大,将softmax的输出压缩成一个由一个非常接近1和其余非常接近0的矩阵。

RoPE

旋转位置编码

对于最原始的正余弦编码而言,其预训练长度是固定的,如果训练了512个token,那么后续就只能处理512个token的输入,缺乏外推性。

因为attention的本质是内积,所以需要引入相对位置编码只需要在内积后保留相对位置即可。RoPE引入了复数作为旋转编码,给位置m的q乘以Rm,位置为n的k乘以Rn,得到的结果是q和k的内积乘以一个旋转矩阵。

infer加速技术

FlashAttention

  • 通过降低存储访问开销来提升效率,虽然FLOPS会上升
  • 通过分块的方式来对大矩阵乘法和softmax进行缓存

PagedAttention

  • VLLM的关键加速组件
  • 将虚拟内存的技术引入到LLM中
  • 主要是对KV-Cache的进行分页优化
  • 具有虚拟内存的优势,比如可以对cache快速进行内存共享

KV-Cache

  • 针对decoder-only的自回归模型
  • 因为causal mask的存在,被mask掉的部分不会参与到attention的计算,所以可以直接将前面的result缓存起来留作后用

推导

GQA MQA MLA

muti-head attention因为KV太多了,性能下降严重,所以产生了GQA MQA。其中MQA即muti query attention,GQA即grouped query attention。MQA中每个head共享K和V矩阵,kv cache直接下降到1/n。但MQA性能折扣严重,所以又产生了GQA,即将Q分成多个组,每个组对应一个K和V矩阵。一般的llm,比如LLAMA都是用的GQA。

而MLA即multi head latent attention,利用LORA的思想,将QKV分解成低秩的向量,然后公用矩阵缓存起来,私有矩阵直接被吸收掉了。另外为了处理RoPE,额外使用一部分维度来单独进行编码。

VLA

openvla

  • dino v2 + siglip来对图像进行编码
  • 图像编码后结果+指令编码后结果输入llama最后decode出action

DINO V2

  • 自监督
  • teacher+student,teacher不直接梯度更新,用指数平均移动从student获取权重
  • 跟bert训练类似(bert预测遮罩词、预测两句连贯性),将部分patch只提供给teacher并让student与teacher输出接近;用student预测几个patch是来自同一图像还是不同图像
  • 训练过程中尽量保持student与teacher的特征表示尽可能接近

SIGLIP与CLIP

  • SIGLIP是CLIP的一个变种,用sigmoid loss取代CLIP中的softmax
  • CLIP用vit来对图像进行编码,分别使用图像对文字的距离和文字对图像的距离来作为loss

Uniact

  • 将原子行为编码为codebook,用token表示,从而实现跨平台

diffusion policy、DP3、iDP3

  • diffusion policy即将DDPM扩展应用到VLA,输出从图像变为了action
  • DP3即将点云作为diffusion policy的输入,能够以概率方式处理等价action,会使用MLP来编码点云
  • iDP3即将DP3的world坐标系变为自身坐标系,同时在真机上应用

相机标定

射影空间

射影空间为齐次表示下引入,不存在平行线,欧式空间平行线相较于无穷远直线/平面,欧式空间中圆全部经过虚圆点/绝对二次曲线。标定相机就是在标定绝对二次曲线(IAC,或者说是“绝对二次曲线”在图像上的像),从而固定射影到欧式空间的度量。

标定相机就是在标定绝对二次曲线的像的推导

首先给出数学上的结论:绝对二次曲线的像(IAC, )满足 (忽略整体尺度)。

  1. 而针孔成像模型:,其中 为内参, 为外参。
  2. 对于空间无穷远点:齐次坐标写作 (方向向量 与最后一维 0)。投影到图像:;平移 被消去,只剩
  3. 绝对二次曲面条件(复数域)给出方向满足 (经过虚圆点)。
  4. 用图像坐标表示:。这样代回得到 (因为 )。
  5. 因此满足 的图像圆锥曲线矩阵为

(向量就是点,对称矩阵就是二次曲线)
(IAC也是纯虚点构成的,图像上不可见)

射影->欧式:把一条无穷远直线挑出来,然后在直线上挑出被称为虚圆点的点。

(2D下)由于射影变换仅比相似变换多四个自由度,仅从失真程度考虑(或者说度量性质),只要确定无穷远直线,就可以消除射影失真;确定两个虚圆点,就可以消除仿射失真。(另外仿射变换维持了无穷远直线不变,因为平行线还是平行线;相似变换没有改变虚圆点,因为圆还是圆)。

(3D下)由于射影变换比相似变换多了八个自由度,因此需要确定一个无穷远平面,才能消除射影失真;确定绝对二次曲线,就可以消除仿射失真。(另外仿射变换维持了无穷远平面不变;相似变换没有改变绝对二次曲线)。最后,3D的平移与旋转可以被螺旋分解成单一轴的进动和旋转。

相机模型

给定相机投影矩阵(包含内参外参),可以按列分块成,拥有一个一维右零空间(col-rank),记为,即,那么实际上是相机中心的齐次表示。

而投影矩阵前三列表示空间坐标系的xyz轴的消影点(乘一下就看出来了)。投影矩阵的行向量组成了轴平面、主平面。

射影重构定理:当相机没有标定时,可以重建出无数个空间点集合,并且他们之间仅仅相差一个射影变换(射影多义性)。这造成了基本矩阵和本质矩阵之间的差异:本质矩阵能分解出唯一的外参,而基本矩阵只能分解出一个射影重构意义下的外参。(另一个表述:标定相机会出来的物体仅差一个相似变换;而未标定相机回复出来的物体相差一个投影变换)。


CUDA(TODO)

bank conflict(TODO)

reduce(TODO)

gemm(TODO)