EzzeldinSalah/Guerrilla
GitHub: EzzeldinSalah/Guerrilla
用纯 C 语言从零实现的 Transformer 模型,目标是基于主机进程行为(syscall 序列)进行无特征码的恶意软件异常检测。
Stars: 0 | Forks: 0
# Guerrilla
一个用纯粹的底层 C 语言从零开始构建的 transformer。包含训练过程。不依赖 PyTorch。不依赖 NumPy。零依赖。只有 C 语言、数学,以及大量危险的个人空闲时间。
目标:一个基于主机的恶意软件检测器,它能在你的机器上学习正常的 syscall 序列,并标记出任何偏离该序列的行为。没有特征码匹配。不需要云端。一个小型 transformer,完全在 C 语言中训练和运行,理解进程行为,并在出现异常时发出警告。
## 目前的进展
一个完整的 tensor 库以及 transformer encoder 的前向传播。
**Tensor 库:**
- 采用扁平连续内存布局的矩阵创建
- 加法、乘法、转置、缩放
- 带 log-sum-exp 数值稳定性修正的 Softmax
- Leaky ReLU 和标准 ReLU
- 带 epsilon 的逐行 Layer normalization
**Transformer 组件:**
- 缩放点积注意力(Scaled dot-product attention) = Q x Kt / sqrt(dk),Softmax,以及基于 V 的加权和
- 多头注意力(Multi-head attention) = 将 Q、K、V 切分为多个头,并在每个头上独立运行注意力机制
- 通过 ModelConfig struct 驱动所有维度,没有任何硬编码
## 正在开发中
```
Guerrilla/
├── include/
│ ├── tensor.h <- tensor library interface
│ ├── attention.h <- transformer components + ModelConfig
│ └── mainTest.h
├── src/
│ ├── tensor.c <- all math primitives
│ ├── attention.c <- attention, multi-head attention, slicing
│ └── main.c
├── tests/
│ └── mainTest.c
├── weights/ <- trained weights live here
├── data/ <- syscall sequence datasets live here
└── Makefile
```
## 路线图
**前向传播:**
- [x] Tensor 库
- [x] 单头注意力
- [x] 多头注意力
- [ ] tensorConcat = 将各头的输出重新拼接
- [ ] 前馈网络块 = 两个带 leaky ReLU 的线性层
- [ ] 完整的 encoder 块 = layernorm + attention + residual + layernorm + feedforward + residual
- [ ] 堆叠 N 个 encoder 块
- [ ] 分类头 = 线性层 + softmax
**反向传播与训练(全部在 C 语言中实现):**
- [ ] 在每一个 tensor 上进行梯度存储
- [ ] 乘法反向传播 = dA = dC x Bt, dB = At x dC
- [ ] softmax 反向传播
- [ ] layernorm 反向传播
- [ ] attention 反向传播 = 通过链式法则贯穿所有四个步骤
- [ ] 交叉熵损失(Cross-entropy loss)
- [ ] SGD 优化器
- [ ] Adam 优化器
- [ ] 训练循环 = 前向传播、计算损失、反向传播、参数更新
**数据流水线(Data pipeline):**
- [ ] 在 macOS 上通过 dtrace 收集 syscall
- [ ] Tokenizer = 将 syscall 名称映射为整数 ID
- [ ] 在 C 语言中构建序列数据集
**验证:**
- [ ] 在 PyTorch 中训练相同的架构
- [ ] 比较 C 模型与 PyTorch 模型之间的准确率
- [ ] C 模型的表现应该很接近。如果不接近,说明数学层面的实现出了问题。
**实时推理:**
- [ ] 从二进制文件中加载训练好的权重
- [ ] 接入实时的 syscall 数据流
- [ ] 实时对每个进程进行评分
- [ ] 标记超过阈值的异常
**优化:**
- [ ] 通过循环重排序实现缓存友好的矩阵乘法(matmul)
- [ ] 使用 ARM NEON intrinsic 的 SIMD
- [ ] 与 PyTorch CPU 推理进行基准对比
## 构建
```
make
./guerrilla
```
```
make clean
```
没有任何依赖。这正是它的核心意义所在。
### 关于 AI 和 LLM 的规则
对于使用 AI(如 ChatGPT、Claude 或 Copilot),我们有着严格的规定。
- **禁止:** 不得使用 AI(特别是自主型 AI 或凭感觉的“氛围编程”)来编写 C 代码。本项目的核心目标是让你亲自去学习数学原理和内存布局。一旦我们发现 AI 生成的代码,我们将立即关闭你的 Pull Request。
- **允许:** 你可以使用 AI 来研究数学公式、修复拼写错误、编写文本文档,或者寻求更好的代码实践建议(但必须经过深入的人工审查)。
你还必须释放所有你创建的内存。查看上方的路线图并提交一个 PR 吧!
## 为什么?
因为敲下 `import torch` 感觉就像是在作弊。
并且,因为那些构建了我们其他人都在使用的工具的开发者,他们必须真正理解当两个矩阵相乘时究竟发生了什么,内存是如何布局的,为什么循环顺序很重要,以及当数值变得很大时 softmax 在数值计算上到底在做些什么。这种理解是无法通过调用库函数得来的。
*"没有安全网。没有依赖项。Guerrilla 将内存视为一片平坦的执行空间网格,而效率则由手工雕琢而成。"*
标签:Apex, Transformer, 客户端加密, 机器学习