https://www.gravatar.com/avatar/3c36d6726b341ff003490168e1897f84?s=240&d=mp

编译问题

V=Sc 输出编译问题,很多时候是因为下载慢或失败,代理要设置好

很多时候在不同平台下编译有各种各样的问题,所以要视情况而定,根据编译日志适当修改对应模块的 MakeFile 甚至是源码。(多利用单模块编译)

深度学习概念笔记

GELU

$$ GELU(x) = x \times P(X <= x) = x \times \phi(x),x \sim N(0,1) $$

  • 在 0 附近光滑,不会像 ReLU 直接裁剪

KL 散度

  • $D_{\mathrm{KL}}(P|Q)$
    • $\displaystyle{=\sum P(i)ln(\frac{P(i)}{Q(i)})}$
    • $\displaystyle{=\int P(x)ln(\frac{P(x)}{Q(x)})dx}$
    • 非负,不可交换,线性
  • 用于描述某个分布估计另一个分布的编码损失
  • 当为 0 时,两个概率分布比值为 1

交叉熵

信息熵

  • 信息熵本质是最小化的平均编码长度
  • 从等可能的字符编码出发
    • 有 N 个等可能事件
    • 那么使用二进制编码有最小编码长度:$log_2,N$
    • 转换成概率形式:$-log_2,\frac{1}{N}=-log_2,P$
    • 那么有期望:
      • $H(P)=Entropy=\mathbb{E}_{x \sim P}[-log,P(x)]$
        • $Entropy=-\sum\limits_i P(i),log_2,P(i)$
        • $Entropy=-\int P(x),log_2,P(x)dx$
      • 此形式适用于非等概率情况
  • 既然是最小平均长度,那么如果大的信息熵,说明编码复杂,有更大的信息量,如果信息熵为 0,说明不需要编码,即没有有用信息。
    • 从概率来看,编码是因为信息的内容不是必然事件,如果一件事必然了,那么就不需要传送信息。
      • 所以越不确定,许要越长的编码进行描述,也就是越大的信息熵

交叉熵

  • 当不知道真实概率分布时,可以使用一个假设概率分布 $Q(x)$ 进行估计
  • $H(P,Q)=CrossEntropy=\mathbb{E}_{x \sim P}[-log,Q(x)]$
    • 期望使用真实分布,信息量用估计分布计算
      • 所以计算期望的 x 则是实际值,计算熵的是估计值
      • 机器学习中就是通过这个去拟合网络参数 $Q(x)$
    • 因为熵本身就是平均最小编码长度,那么估计的交叉熵不可能大于它,那么就能通过最小化交叉熵来让 $Q(x)$ 接近 $P(x)$
  • 实践中进行损失计算时,则是通过具体的预测和实际值来做计算,也就是说只要这两个的形状是匹配的就能计算,不管设计成什么结构

Softmax

把分类输出的分数转化为一个概率分布,即每个分类的 softmax 输出值和为 1。

brew 服务安装 Aria2

通过 brew 和 brew services 安装管理 aria2

通过 brew 安装 aria2 并且使用 brew services 对其进行管理

一些说明

  • 目前并不能直接将 aria2 安装成 brew services 可以直接使用的样子。不过我们可以手动修改添加一些配置文件,使其支持

安装 aria2

1 brew install aria2

创建一些必须文件

1 2 mkdir ~/.aria2 touch ~/.aria2/aria2.conf ~/.aria2/aria2.session /usr/local/opt/aria2/homebrew.mxcl.aria2.plist

修改配置文件

  1. vim /usr/local/opt/aria2/homebrew.mxcl.aria2.plist
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>homebrew.mxcl.aria2</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/opt/aria2/bin/aria2c</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>
  • 新版 M1 aria2 的目录变成了 /opt/homebrew/opt/aria2, 新版配置文件修改为以下内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>homebrew.mxcl.aria2</string>
        <key>ProgramArguments</key>
        <array>
            <string>/opt/homebrew/opt/aria2/bin/aria2c</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
    </dict>
</plist>
  1. vim ~/.aria2/aria2.conf

一个 aria2 配置模版,可以参考参考

NLP笔记

@@@@@@@@@ 序列 (自回归)

定义公式:$x_t \sim P(x_t|x_{t-1},…,x_1)$ 或 $x_t \sim P(x_t|x_{t-1},…,x_{\tau})$

  • $\hat x_t \sim P(x_t|h_t)$ : $h_t = g(h_{t-1},x_{t-1})$

如果 $\tau=1$ 就得到一个一阶的马尔可夫模型,也就是上一个状态影响下一个状态

原理:和马尔可夫模型有关系

代码辅助记录

注意:

  • 每个步骤,最好是 AI 能理解的程度,这样成功率会高一些
  • 使用合适的 prompt
    • 准确理解
    • 专业知识
  • 如何快速地想到 prompt 方式是非常重要的
    • 能快速解决问题
  • 迭代进化 Prompt 也是十分重要的,能不断完善
  • 后期一些 Prompt 甚至可以让 AI 写出生成代码

代码编写辅助:

Game101

  • [ ] 基础知识
    • [ ] 数学
      • [ ] 叉乘能计算向量左右方向(右手定则)
        • [ ] 有矩阵形式 $A^*b$
    • [ ] 物理
    • [ ] 信号处理(采样)
    • [ ] 数值计算
  • [ ] 光栅化
  • [ ] 渲染、网格
  • [ ] 光线追踪
  • [ ] 模拟仿真

个人积累

  • 硬件中的缓冲,就当成数据传输,因为是使用缓冲区传输
    • 在硬件下一帧绘制之前,把顶点缓冲区准备好,然后进行绘制
  • 因为矩阵计算的可结合性,所以计算矩阵一般是先进行矩阵(变换)计算
  • 顶点:对于渲染管线,图元是有顶点构成的(所以要根据顶点定义图元),各种复杂图形是由基础图元构成的。
    • 对于缓冲区本身是无意义的,关键看图形接口 API 怎么去解释这段缓冲区数据

基础知识

变换

(线性组合为新的坐标,这个线性组合的矩阵值是新向量空间的基)