钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

传送门

arxiv

github

模型解读

Huggingface rwkv代码解读

RWKV 模型解析

连连看

先用v4版本做连连看, v5和v6对应arxiv:2404.05892, 有时间再做连连看

老规矩, 找入口(RWKV-v4/run.py):

1
2
3
4
print(f'Loading {MODEL_NAME}...')
from src.model_run import RWKV_RNN
model = RWKV_RNN(MODEL_NAME, os.environ['RWKV_RUN_DEVICE'], model_type, n_layer, n_embd, ctx_len)
tokenizer = TOKENIZER(WORD_NAME, UNKNOWN_CHAR=UNKNOWN_CHAR)

后面调用的是 model.run(x), 很明显, 我们要进到 RWKV-v4/src/model_run.py 里面去

阅读全文 »

第二讲

  1. 基于逻辑思维的符号AI系统面临的问题是经验事实的不足, 逻辑推理固然合理, 但是逻辑推理本身不能保证输入的一定是 "事实", 我们对理性的追求是对逻辑推理的追求还是对 "事实" 的追求呢?

  2. 形式逻辑一宗罪是 "极化思维", 即现代逻辑侧重于刻画边界分明的边界情况而不太考虑语义模糊的灰色地带, 我们在借助现代逻辑追求理性的道路上也有避免落入极化思维中

  3. 形式逻辑的经济性不高, 但从OpenAI的例子来看, 大力出奇迹也不是没有可能, 着眼于解决前四宗罪可能更有意义

  4. 亚里士多德式逻辑相较于现代命题逻辑显得古朴粗糙, 但正是因为它的古朴粗糙, 它对心理直觉的背离更少, 更容易与心理学对接.

阅读全文 »

传送门

arxiv

github

模型解读

【汇报】 Mamba模型及其公式推导

Mamba系列日积月累(一):状态空间模型SSM的离散化过程推导

连连看

首先从用法开始入手:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
from mamba_ssm import Mamba

batch, length, dim = 2, 64, 16
x = torch.randn(batch, length, dim).to("cuda")
model = Mamba(
# This module uses roughly 3 * expand * d_model^2 parameters
d_model=dim, # Model dimension d_model
d_state=16, # SSM state expansion factor
d_conv=4, # Local convolution width
expand=2, # Block expansion factor
).to("cuda")
y = model(x)
assert y.shape == x.shape

IDE会告诉我们: 入口在mamba_ssm/modules/mamba_simple.py中. 接下来就来会会它

阅读全文 »

符号表

  • \(\mathbb{A}\) 多项式, 最高次数为 \(n-1(n=2^{k})\), 系数表示为 \(a_{i}x^{i}\)
  • \(\mathbb{A}(x)\) 多项式 \(\mathbb{A}\)\(x\) 处的点值
  • \({_{0}\mathbb{A}}, {_{1}\mathbb{A}}\) 多项式 \(\mathbb{A}\) 的偶数次项和奇数次项
  • \(\mathbb{A} \circ \mathbb{B}\) 将两个多项式对应位进行 \(\circ\) (加 \(+\), 减 \(-\), 乘 \(*\)) 操作 (系数表示为 \(a_{i}\circ b_{i}\))
  • \(\mathbb{A} \circ \mathbb{B}\) 将两个多项式进行 \(\circ\) (乘 \(\times\), 异或 \(\oplus\), 或 \(\&\), 与 \(|\)) 卷积
  • \((\mathbb{A}, \mathbb{B})\) 将两个多项式进行拼接操作
  • \(\mathcal{F}, \mathcal{F}^{-1}\) 快速傅里叶变换及其逆变换
  • \(\mathcal{N}, \mathcal{N}^{-1}\) 快速数论变换及其逆变换
  • \(\mathcal{W}, \mathcal{W}^{-1}\) 快速沃尔什变换及其逆变换
  • \(\mathcal{M}, \mathcal{M}^{-1}\) 快速莫比乌斯变换及其逆变换
阅读全文 »

本系列参考自 Quaternions for Computer Graphics, 四元数与三维旋转视觉SLAM十四讲(第二版)

四元数到旋转矩阵的转换

\[ \begin{align*} \boldsymbol{q_{a}}\boldsymbol{q_{b}} = L(q_{a})q_{b} &=\begin{bmatrix} s_{a} &-x_{a} &-y_{a} &-z_{a} \\ x_{a} &s_{a} &-z_{a} &y_{a} \\ y_{a} &z_{a} &s_{a} &-x_{a} \\ z_{a} &-y_{a} &x_{a} &s_{a} \end{bmatrix} \begin{bmatrix}s_{b}\\ x_{b}\\ y_{b}\\ z_{b}\end{bmatrix} \\ \boldsymbol{q_{a}}\boldsymbol{q_{b}} = R(q_{b})q_{a} &=\begin{bmatrix} s_{b} &-x_{b} &-y_{b} &-z_{b} \\ x_{b} &s_{b} &z_{b} &-y_{b} \\ y_{b} &-z_{b} &s_{b} &x_{b} \\ z_{b} &y_{b} &-x_{b} &s_{b} \end{bmatrix} \begin{bmatrix}s_{a}\\ x_{a}\\ y_{a}\\ z_{a}\end{bmatrix} \end{align*} \]

由此可得:

\[ \begin{align*} pvp^{-1} &=R(p^{-1})L(p)v \\ &=\begin{bmatrix} s &x &y &z \\ -x &s &-z &y \\ -y &z &s &-x \\ -z &-y &x &s \end{bmatrix} \begin{bmatrix} s &-x &-y &-z \\ x &s &-z &y \\ y &z &s &-x \\ z &-y &x &s \end{bmatrix} \begin{bmatrix}0\\ x_{v}\\ y_{v}\\ z_{v}\end{bmatrix}\\ &= \begin{bmatrix} 1 &0 &0 &0 \\ 0 &1-2(y^{2}+z^{2}) &2(xy-sz) &2(xz+sy) \\ 0 &2(xy+sz) &1-2(x^{2}+z^{2}) &2(yz-sx) \\ 0 &2(xz-sy) &2(yz+sx) &1-2(x^{2}+y^{2}) \end{bmatrix} \begin{bmatrix}0\\ x_{v}\\ y_{v}\\ z_{v}\end{bmatrix} \end{align*} \]

忽略第一行和第一列就得到了旋转矩阵:

\[ R=\begin{bmatrix} 1-2(y^{2}+z^{2}) &2(xy-sz) &2(xz+sy) \\ 2(xy+sz) &1-2(x^{2}+z^{2}) &2(yz-sx) \\ 2(xz-sy) &2(yz+sx) &1-2(x^{2}+y^{2}) \end{bmatrix} \]

阅读全文 »

本系列参考自 Quaternions for Computer Graphics, 四元数与三维旋转视觉SLAM十四讲(第二版)

复数的旋转

首先来研究一下复数是怎么旋转的.

首先把复数乘法写成矩阵形式:

\[ z_{1}z_{2}=\begin{bmatrix} a &-b\\ b & a \end{bmatrix}\begin{bmatrix} c\\ d \end{bmatrix} \]

如果 \(z_{1}\) 的模长为 \(k\), 我们可以把上式改写:

\[ z_{1}z_{2}=k\begin{bmatrix} \cos{\theta} &-\sin{\theta}\\ \sin{\theta} & \cos{\theta} \end{bmatrix}\begin{bmatrix} c\\ d \end{bmatrix} \]

熟悉的东西是不是出现了! 没错, 旋转矩阵! 实际上, 复数乘法不但实现了旋转操作(逆时针旋转 \(\arctan{\frac{a}{b}}\)), 还实现了缩放操作(即前面的系数 \(k\)).

阅读全文 »

本系列参考自 Quaternions for Computer Graphics视觉SLAM十四讲(第二版)

小历史

复数是否存在三维等价物? 这个问题吸引力很多数学家来研究.

我们知道, 二维复数可以用 \(a+bi\) 表示, 于是 Hamilton 猜想三维复数可以用 \(a+bi+cj\) 的形式表示, 但无法解决三维复数乘法的封闭性. 十多年后, 他在散步时找到了解决方案: 三维不行就用四维.

四元数的定义

四元数相当于加强版的复数, 它有一个 实部 和三个 虚部. 下式中的 \(\mathrm{i,j,k}\) 是四元数 \(\boldsymbol{q}\) 的三个虚部.

\[ \boldsymbol{q}=q_{0}+q_{1}\mathrm{i}+q_{2}\mathrm{j}+q_{3}\mathrm{k} \]

四元数的三个虚部满足如下关系:

\[ \begin{cases} \mathrm{i}^{2}=\mathrm{j}^{2}=\mathrm{k}^{2}=-1 \\ \mathrm{ij}=\mathrm{k}, \quad \mathrm{ji}=-\mathrm{k} \\ \mathrm{jk}=\mathrm{i}, \quad \mathrm{kj}=-\mathrm{i} \\ \mathrm{ki}=\mathrm{j}, \quad \mathrm{ik}=-\mathrm{j} \end{cases} \]

参考复平面, 把 \(\mathrm{i,j,k}\) 看作坐标轴, 可以用标量和向量表示四元数:

\[ \boldsymbol{q}=\begin{bmatrix}s, \boldsymbol{v}\end{bmatrix}^{T}, \qquad s=q_{0}\in\mathbb{R}, \qquad \boldsymbol{v}=\begin{bmatrix}q_{1}, q_{2}, q_{3}\end{bmatrix}^{T}\in\mathbb{R}^{3} \]

阅读全文 »

旋转矩阵

这部分内容在图形学和线性代数中已经接触过了, 这里就不赘述了.

欧氏变换

这里关注一个小的思考题: 欧氏变换中两个平移向量为什么坐标上不是相反数?

简而言之就是因为旋转操作的影响, 两个方向相反的向量体现在坐标上并不是相反数关系, 简单推导如下:

首先很容易得到一对坐标变换公式(符号定义与书中一致): \[ \begin{cases} \boldsymbol{a_{1}} = \boldsymbol{R_{12}}\boldsymbol{a_{2}} + \boldsymbol{t_{12}} \\ \boldsymbol{a_{2}} = \boldsymbol{R_{21}}\boldsymbol{a_{1}} + \boldsymbol{t_{21}} \end{cases} \]

于是就有:

\[ \begin{gather*} \boldsymbol{a_{1}} = \boldsymbol{R_{12}}\boldsymbol{a_{2}} + \boldsymbol{t_{12}} \\ \Downarrow\\ \boldsymbol{R_{21}}\boldsymbol{a_{1}} = \boldsymbol{R_{21}}\boldsymbol{R_{12}}\boldsymbol{a_{2}} + \boldsymbol{R_{21}}\boldsymbol{t_{12}} \\ = \boldsymbol{I}\boldsymbol{a_{2}} + \boldsymbol{R_{21}}\boldsymbol{t_{12}} \\ \Downarrow\\ \boldsymbol{a_{2}} = \boldsymbol{R_{21}}\boldsymbol{a_{1}} - \boldsymbol{R_{21}}\boldsymbol{t_{12}} \end{gather*} \]

从而: \(\boldsymbol{t_{21}} = -\boldsymbol{R_{21}}\boldsymbol{t_{12}}\), 这个结论在公式 (3.14) 中也有体现

阅读全文 »