关于大模型原理与部署的学习笔记,有中英两种语言。内容由三种文件组成:词条,一词一段解释;问题,以回答把若干词条串成一条路线;专题,写某个框架或模型的实现。
网页:https://lilin-1.github.io/learning-notes/
- 勘误:网页每页末尾的「勘误」链接到这一页的源文件,在 GitHub 上修改即可提交 PR。在本地修改时,先运行
node build.js,确认没有拒收与提示。 - 提问:在网页上选中一段文字,点「记下疑问」;再在「疑问」中点「提交」,它就作为 issue 发到这里。也可以直接新建 issue。
- 新增词条、问题或专题:按下文的语法与准入规则写,并同时写英文稿。
words/自注意力.md 一个文件是一个词条:文件名是词,内容是解释
questions/某个问题?.md 一个文件是一个问题:文件名是问题,内容是回答
topics/vLLM 详解.md 一个文件是一篇专题:写某个框架或系统的实现
目录.md 分章,并给出每章、每条的英文名
en/words/自注意力.md 英文稿:与中文稿同名,放在 en/ 下
node build.js 审核中英文稿,生成 data.js
index.html 网页;界面文字在脚本开头的 UI 对象中,中英文各一份
写作时运行 node build.js -w,保存后刷新页面即可。文件名以 _ 开头的是草稿,不会收录。
页面上,/ 聚焦检索框,← → 在词条或问题之间翻页,Esc 收起页边注。
目录.md 以 # 起头的行是章名,其下每行一个词条;章与词条的英文名都写在全角括号中:
# 注意力(Attention)
注意力机制(attention mechanism)
缩放点积注意力(scaled dot-product attention)
词条按「章.节」编号。章内保持目录中的次序;若某条链接到同章中排在后面的词条,后者会提前到它之前。跨章的链接若指向后文,构建时给出提示。未列入目录的词条归入末尾的「未分章」。
每条的页脚列出预备:读懂这一条所需的全部词条,即它直接或间接链接到的词条,按编号排列。直接链接的印成墨色,间接的印成灰色。
问题把词条串成一条路线。回答只由词条组成,另有四条要求:
- 标题是问句,以「?」结尾。
- 首句直接给出结论。
- 不引入新术语:用到的术语都链接到词条,缺哪条就先写哪条;不用黑体。
- 不超过 500 字、4 段。
回答中链接到的词条,按出现先后构成路线;页脚另列路线之外的预备词条,以及与本题共用词条最多的几个问题,即「接着问」。问题按它所需的最后一条词条的编号排列,由浅入深,首页按这一条所在的章分组。词条页的页脚列出引用了它的问题。
每条词条都应至少被一个问题引用,否则构建时给出提示。
专题写框架与系统特有的实现,篇幅较长,并随版本变化。通用的概念仍写成词条,专题只写框架特有的部分,并链接到词条。
- 以「版本:」一行开头,注明依据的版本;可再加一行「源码:」,给出本机的源码目录。
- 以
##分节,每节不超过 1200 字(不计公式与代码)。另可用1.起头的有序列表。 - 另可使用
-列表、表格与代码块;表格排成三线表。 - 反引号中带
/的源码路径,构建时核对是否存在;写成路径:符号时,另核对该符号出现在文件中。
英文稿放在 en/words、en/questions、en/topics 中,文件名与中文稿相同。
- 词条的英文标题取自
目录.md中的英文名,稿中只写解释;问题与专题以#一行给出英文标题。 - 「注」「例」「论文」写作
Note:、Example:与Paper:。 - 链接可写英文名,也可写中文词条名:
[[self-attention]]与[[自注意力]]都指向「自注意力」。写中文名而未写显示文字时,显示英文名。 - 英文稿应与中文稿引用同一组词条,两种语言下的路线与预备才一致;列出的论文也应相同。不一致时构建给出提示。
准入规则与中文稿相同,只是按词计数:词条不超过 175 词,「注」不超过 140 词,问题的回答不超过 350 词,专题每节不超过 840 词;句子超过 40 词时给出提示。英文稿中夹有汉字或全角标点,也给出提示。缺少英文稿或英文稿被拒收时,网页上显示中文稿。
| 写法 | 效果 |
|---|---|
[[自注意力]] |
链接到词条「自注意力」 |
[[词元|token]] |
链接到「词元」,显示为「token」 |
$QK^{\top}$ |
行内公式 |
$$ … $$ |
独立成行的公式 |
**查询** |
黑体,用于首次引入的术语 |
*强调* |
着重号 |
`代码` |
代码 |
| 空行 | 分段 |
注:…… |
注,分析作用与代价;须另起一段,放在例之前 |
例:…… |
例题,以楷体排出;须另起一段,其后各段同属此例 |
论文:[标题](网址)(作者,年份) |
词条所依据的经典论文,列在末尾,一行一篇;标题链接到原文 |
语法仅此而已。公式由 KaTeX 排版,\$ 表示美元符号本身。
一条解释须简洁、严谨、优雅。
- 只解释这一个词,不写历史、轶事和评价。
- 别的词条已经说明的,链接过去,不再复述。
- 删去每一个可删的字。
- 首句即定义:先指出它属于哪一类,再说明它与同类的区别。
- 每句话都是定义、定理或可以验证的事实。
- 量词写明:「任意」「存在」「唯一」。
- 用到的术语,要么是常识,要么链接到它的词条。
- 一句话给出定义,其余句子只作补充。
- 定义只说它是什么;为什么有效、代价是什么,写进「注」。
- 并列的条件用并列的句式。
- 用无人称的陈述句,不用比喻、反问和感叹。
- 符号在首次出现时引入;同一概念,全站只用一个记号。
- 例子至多一个,且是最典型的那个。
- 遵守中文排版:用全角标点;汉字与西文、数字、公式之间空一格;全角标点两侧不空格。
build.js 检查其中能由机器判断的部分:能确定的违规,拒收;只能估计的,提示,由作者裁决。
| 拒收 | 提示 | |
|---|---|---|
| 简洁 | 内容为空;使用标题;插入图片;超过 250 字;超过 3 段;「注」超过 200 字或多于一段 | 口语冗词 |
| 严谨 | 链接到自身;公式无法解析;论文的写法不符 | 链接的词条不存在;模糊用语;词条互相引用;链接指向后文 |
| 优雅 | 句子超过 60 字;问号与感叹号;人称;排版;例子多于一个或未另起一段 |
问题另有四项拒收:标题不以「?」结尾;没有引用任何词条;使用黑体;超过 500 字或 4 段。词条与问题中不能使用代码块。
专题另有四项拒收:未注明版本;没有小节;某节超过 1200 字;源码路径或符号核对不符。
字数与句长均不计公式;独立成行的公式不算一段。250 字与 3 段的上限不计「注」。阈值与词表在 build.js 开头。
排版问题可用 node build.js --fix 修正。它只改没有歧义之处,不动链接的目标。
被拒收的词条不出现在网站上,指向它的链接显示为朱色。目录.md 中列出了不存在的词条、同一词条列了两次,或有词条未列入目录时,也会给出提示。
推送到 GitHub 的 main 分支后,.github/workflows/pages.yml 会运行 node build.js,再把 index.html、data.js 与 vendor/ 发布到 GitHub Pages。有词条被拒收时构建失败,网站不会更新。拉取请求由 .github/workflows/check.yml 运行同样的审核。data.js 不进仓库,永远由源文件生成。
首次部署前,须在仓库的 Settings → Pages 中把 Source 设为 GitHub Actions。
只依赖 KaTeX,存放在 vendor/katex,离线可用。重新下载:
mkdir -p vendor/katex && curl -sL "$(npm view katex dist.tarball)" | tar -xz -C vendor/katex --strip-components=2 package/dist/katex.min.js package/dist/katex.min.css 'package/dist/fonts/*.woff2'