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, 客户端加密, 机器学习