博客文章
这里收录浩天博客的主要技术文章,重点是机器学习、算法实现、深度学习数学、网络协议、AI 安全和电池建模。文章会尽量提供问题背景、实现解释、代码或实验输出,而不是只发布短摘要。
如果你是第一次访问,建议先按专题阅读:机器学习路线从数据和评估开始,算法路线从 8 皇后和 K-means 开始,网络路线从 DNS/TCP/TLS 到代理与缓存,AI 安全路线从威胁建模和 toy lab 开始。
当前重点路线
如何判断一篇文章是否值得读
本站会尽量避免只写“概念简介”或“工具清单”。一篇有价值的技术文章至少应该说明问题是什么、输入是什么、输出如何验证、关键代码在哪里,以及结论的适用边界。对于算法和机器学习内容,文章会优先保留中间状态、评估指标、错误样本或可下载材料;对于网络协议内容,文章会优先保留请求头、状态码、缓存状态、时间线和实验命令。
如果某篇文章只是入口、索引或工具说明,它应该明确指向更完整的主题页或正文文章,而不是假装自己已经解决了技术问题。这样的组织方式可以让首次访问者快速判断:这里是阅读路线、实验入口、下载资源,还是一篇完整教程。
内容类型与证据要求
| 内容类型 | 应该回答的问题 | 页面中应该保留的证据 |
|---|---|---|
| 机器学习实现 | 数据如何进入模型,指标为什么可信? | 数据切分、基线、训练命令、错误样本、指标定义。 |
| 算法与 C/Python 代码 | 核心状态如何更新,边界条件在哪里? | 输入格式、循环不变量、复杂度、输出示例和失败输入。 |
| 网络协议排查 | 问题发生在 DNS、TLS、代理、缓存还是应用层? | 请求头、响应头、状态码、时间线、缓存命中和复现命令。 |
| AI 安全实验 | 实验证明了什么,又没有证明什么? | 授权边界、toy lab 条件、指标、缓解措施和误用限制。 |
近期维护方向
后续内容会继续围绕“可复现”和“可解释”补强。机器学习文章会增加数据切分、基线模型、错误分析和复现实验记录;网络文章会增加从浏览器、Cloudflare、Nginx 到应用层的分层排查案例;AI 安全文章会继续强调授权边界、toy lab 限制和防御性评审流程。
旧文章会根据实际复现结果继续修订:失效命令需要替换,依赖变化需要标明版本,只有结论的段落需要补上推导或运行证据。读者应该能够从正文判断一个结论来自公式、代码输出、协议响应还是受控实验。
全部文章索引
下面的索引按站点当前分类自动生成。工具页和问卷页不会作为核心文章显示,读者可以优先选择有完整正文、代码和实验说明的文章阅读。
分类博客
按项目阅读文章
文章按网络基础、电池建模、人工智能、2D 动画、算法实现和站点建设组织,每组都保留难度、阅读时间和技术栈。
专题系列
深度学习数学可视化系列
五篇文章从矩阵微积分、反向传播、优化器、卷积到 Attention,每篇都有手算、代码、图和动画。
5 篇文章神经网络矩阵微积分:从 y = Wx + b 推导 MSE 梯度
用手算、矩阵形状图、NumPy 代码和梯度检查解释 y = Wx + b 下 dL/dW = (ŷ - y)x^T 的来源。
反向传播计算图:两层 MLP 的前向、局部梯度和反向传播
把两层 MLP 拆成计算图,手算 ReLU、softmax cross-entropy、dW2、dW1,并用 NumPy 复现实验结果。
梯度下降与优化器几何:Momentum、Adam 和 loss surface 轨迹
在二维二次函数上手算梯度下降前几步,比较 Momentum 和 Adam 的轨迹,并用代码生成 loss contour。
卷积与感受野数学:5×5 输入、3×3 kernel、padding 和 im2col
手算一次 5x5 输入与 3x3 kernel 的离散卷积,解释输出尺寸、padding、stride、感受野和 im2col。
Transformer Attention 数学:Q/K/V、Softmax 权重、Mask 与 KV Cache
用 3 个 token 手算 scaled dot-product attention,解释 Q/K/V、softmax、mask、多头注意力和 KV cache。
项目分类
网络基础原理
从 DNS、TCP、TLS 与 HTTP/3 到代理隧道、负载均衡和共享缓存,以可重现的代码和图分析网页请求路径。
14 篇文章共享密钥容易,共享状态难:一套跨机单点登录的六个坑
把单机登录网关扩成覆盖多子域的 SSO,密钥同步很简单,难的是状态。这篇记录三台机器共用一套网关时踩到的问题:防重放为何变成站内有效跨站无效、密钥的第二份副本如何让 nginx 放行而应用回 401、部署脚本的白名单保留规则怎样静默关掉登录,以及为什么比对凭证不能比生成的口令。
「加了鉴权」不等于「受保护」:一次授权边界的自我审计
给自建文件管理器加上双因子网关之后,我问了自己一个问题:这个网关到底挡住了什么。答案是挡住了界面、没挡住文件——同一份字节有两条 URL 可达,而且验证时才发现网关根本不在请求路径上。这篇记录整个自查过程、补洞时踩的两个 nginx 坑,以及源站封掉之后边缘缓存仍然发了近一年。
家宽入站到底通不通:一次从公网打回来的实测
本机扫端口全是开的,从外面根本连不上——这篇讲为什么本机探测必然错、对照端口为什么不可省,以及一次完整实测:公网 IPv4 不是 CGNAT、80 和 443 被运营商过滤而非未开、IPv6 有真实地址却入站全丢、AAAA 记录为什么不能用回显服务的结果。
有证书不等于走 HTTPS:一次被误报为”缺证书”的排查
有人说某个子域名没有 SSL 证书。查下来证书好好的——一张通配符证书覆盖着它。但排查确实查出了问题,而且更严重:那个子域名的邮箱登录页可以通过明文 HTTP 访问,页面里有密码输入框,没有任何跳转。附两个把我带偏的坑:openssl 对所有目标同时失败时该怀疑工具,以及透明代理下 DNS 枚举完全失效。
DNS 解析过程详解:从域名查询到 TTL 缓存的 Python 实验
从 RFC DNS 报文与递归查询出发,用 Python 和 C 实验计算 TTL 缓存命中对解析延迟的影响。
CIDR、子网掩码与最长前缀匹配:用代码算清 IP 路由和 MTU
手算 CIDR 网段、最长前缀匹配与 MTU/MSS 分段,并用 Python/C 输出固定路由结果。
TCP 三次握手、重传与拥塞窗口:可运行的序列号实验
从 TCP sequence/ACK 和慢启动出发,用确定性丢包曲线与 localhost C socket 实验理解可靠传输。
HTTPS 与 TLS 1.3 握手原理:密钥交换、证书和 RTT 实验
解释 TLS 1.3 消息 flight、证书与临时密钥交换,用安全的教学模型计算一次 RTT 握手。
HTTP/2、HTTP/3 与 CDN 缓存:从网络瀑布图理解网页加载速度
用确定性 waterfall 模型拆解 HTTP/2、HTTP/3、QUIC stream 和 CDN HIT/MISS 对网页等待时间的影响。
正向代理与反向代理原理:连接路径、信任边界和时延计算
从连接方向和 TLS 终止点解释正向代理、反向代理与隧道代理,并用 Python 模型分段计算代理 hop 与缓存收益。
HTTP CONNECT 与 HTTPS 代理隧道:TLS 边界和握手时延
以 RFC CONNECT 状态机解释 HTTPS 代理隧道、TLS 可见性和首次加密请求时延。
SOCKS5 代理原理:协议字节、DNS 解析边界与泄漏风险
按 RFC 1928 拆解 SOCKS5 CONNECT 字节,通过安全编码实验比较本地 DNS 与代理侧域名解析。
反向代理负载均衡原理:队列、健康检查和可复现调度实验
用固定请求队列比较 round robin 与负载感知调度,并解释反向代理健康检查和重试边界。
代理缓存与重新验证:Cache-Control、ETag 和可观测性实验
依据 RFC 9111 计算共享缓存 MISS、HIT 与 304 revalidation 的时延,并解释缓存 key 和隐私边界。
项目分类
电池建模与 AI
围绕 PyBaMM、EIS、老化仿真、AI 标签数据与风险受控参数辨识,建立可复查的物理建模研究路线。
6 篇文章PyBaMM 快速解读:从 Oxford 电池模型架构到 AI 数据管线
面向博士生拆解 PyBaMM expression tree、Simulation 管线、模型选项和 AI 数据 schema。
PyBaMM 阻抗谱数据生成:EISSimulation、SOC sweep 与 AI 标签
用 PyBaMM core 的 EISSimulation 生成阻抗谱,提取 Nyquist/Bode 特征并对齐老化标签。
用 PyBaMM 生成电池老化与阻抗 AI 数据集:标签、切分和质量控制
构建可复现 PyBaMM 数据工厂,生成 SOH、RUL、LLI、LAM、plating 和 EIS 特征标签。
训练电池 AI 实例:用 PyBaMM 仿真数据预测 SOH 与 RUL
用 PyBaMM 或 surrogate 生成的 EIS 特征和工况数据训练 scikit-learn 模型,预测电池 SOH 与 RUL。
PyBaMM 参数拟合:为什么优化器给你的数字可能毫无意义
搜索排第一的 pybamm-param 已废弃、PyBOP 的 API 刚大改,而真正要命的是可辨识性:参数在方程里以组合出现,一条曲线分不开它们。附一套区分"拟合出来"与"编出来"的验证流程。
PyBaMM 求解器收敛失败:先分清数值问题还是物理问题
长时间退化模拟在第 300 圈崩掉时,调容差通常是错的方向。用 SPMe 对照判定是数值还是物理问题,附 IDAKLU 全部选项默认值与一个静默失效的陷阱。
项目分类
人工智能项目
从 AI、机器学习、训练评估、神经网络到 Python 小实战、手写数字识别、CIFAR-10 CNN、对抗性流量防御和 AI 安全攻防,按顺序建立基础。
28 篇文章人工智能基础学习路线:先理解什么是 AI、机器学习和深度学习
面向有编程基础的读者,梳理 AI、机器学习、深度学习的关系,并给出可执行的人工智能基础学习路线。
机器学习完整流程:从数据、特征到模型预测
从工程视角拆解机器学习完整流程:定义问题、理解数据、处理特征、训练模型、预测和评估。
机器学习算法怎么选:分类、回归、聚类和推荐场景对照表
用任务类型、数据规模、解释性和部署成本选择机器学习算法,覆盖逻辑回归、决策树、随机森林、K-means 和表格数据基线模型。
特征工程入门实战:用 scikit-learn 处理缺失值、类别变量和数值标准化
用 scikit-learn Pipeline 和 ColumnTransformer 完成特征工程,处理缺失值、类别变量、数值标准化,并避免数据泄漏。
模型训练与评估入门:损失函数、过拟合和准确率怎么理解
讲清楚模型训练中的参数、损失函数、梯度下降、过拟合,以及准确率、召回率、F1 等分类评估指标。
过拟合和欠拟合怎么解决:机器学习模型调优实战指南
用训练分数和验证分数判断过拟合与欠拟合,并通过模型复杂度、正则化、交叉验证和特征工程调整机器学习模型。
神经网络基础:从感知机到多层网络
从一个神经元讲起,解释权重、偏置、激活函数、前向传播、反向传播和典型神经网络训练循环。
神经网络矩阵微积分:从 y = Wx + b 推导 MSE 梯度
用手算、矩阵形状图、NumPy 代码和梯度检查解释 y = Wx + b 下 dL/dW = (ŷ - y)x^T 的来源。
反向传播计算图:两层 MLP 的前向、局部梯度和反向传播
把两层 MLP 拆成计算图,手算 ReLU、softmax cross-entropy、dW2、dW1,并用 NumPy 复现实验结果。
梯度下降与优化器几何:Momentum、Adam 和 loss surface 轨迹
在二维二次函数上手算梯度下降前几步,比较 Momentum 和 Adam 的轨迹,并用代码生成 loss contour。
卷积与感受野数学:5×5 输入、3×3 kernel、padding 和 im2col
手算一次 5x5 输入与 3x3 kernel 的离散卷积,解释输出尺寸、padding、stride、感受野和 im2col。
Transformer Attention 数学:Q/K/V、Softmax 权重、Mask 与 KV Cache
用 3 个 token 手算 scaled dot-product attention,解释 Q/K/V、softmax、mask、多头注意力和 KV cache。
Python 人工智能小实战:用 scikit-learn 完成一个分类任务
使用 scikit-learn 内置教学数据集跑通一个分类任务,覆盖数据加载、拆分、标准化、训练、预测、评估和实验记录。
手写数字识别项目入门:先读懂 train.csv、test.csv 和标签结构
从项目文件结构入手,读懂手写数字训练集、测试集、标签列和 784 维像素输入,为后续 C 分类器和实验台打基础。
用 C 实现手写数字 Softmax 分类器:从 784 维像素到 submission.csv
结合当前项目源码,讲清楚 softmax 多分类、损失函数、梯度更新、混淆矩阵输出,以及 submission.csv 的生成过程。
手写数字实验记录:怎么把离线分类项目接进浏览器实验台
解释浏览器实验台为什么采用轻量预训练模型、它和离线 C 项目的关系,以及如何用样本浏览和手绘输入理解预测结果。
CIFAR-10 Tiny CNN 教程:用 C 语言实现小型卷积神经网络图像分类
用单文件 C 程序完成 CIFAR-10 小型 CNN 图像分类,讲解数据格式、网络结构、训练命令、loss、accuracy、常见错误和改进方向。
构建高熵流量防御:基于 Python 的连接层白噪声混淆与对抗性机器学习实践
以 mld_chaffing_v2.py 虚幻镜项目为例,讲解加密元数据泄漏、信息熵、分布距离、混淆矩阵、空闲窗口微脉冲和性能测试取舍。
AI 安全威胁建模:用 NIST AML、MITRE ATLAS 和 OWASP 建立攻防地图
用 NIST Adversarial ML、MITRE ATLAS 和 OWASP LLM Top 10 建立 AI 安全威胁模型,覆盖资产、攻击面、证据和剩余风险。
对抗样本与鲁棒评估:从 FGSM 公式到 scikit-learn 数字分类实验
从 FGSM 公式解释对抗样本,用 scikit-learn digits toy 实验评估 clean accuracy、perturbed accuracy 和扰动预算。
数据投毒与后门攻击防御:污染率、触发器和训练管线隔离
用 toy digits 实验解释数据投毒、后门触发器、attack success rate、数据来源审计和训练管线隔离。
模型隐私与模型窃取风险:成员推断、模型抽取和输出接口防护
用本地 toy 实验解释成员推断、模型抽取、membership AUC、surrogate fidelity、输出最小化和查询治理。
LLM/RAG/Agent 安全:Prompt Injection、工具权限和边界感知防护
从 RAG 和 Agent 架构解释 prompt injection、外部数据降权、工具 allowlist、人工审批和边界感知防护。
部署多模态大模型时的 KV Cache:先算对,再优化
KV Cache 显存随序列长度是线性增长,不是二次方;公式里要用的是 KV 头数而不是注意力头数,用错在 Llama-3-8B 上会高估 4 倍。算对之后会发现真正的瓶颈在预填充而不是解码——这直接决定了减少 token、量化缓存、分页管理这三件事的优先级顺序。
视觉指令微调的损失函数:掩码算错时,loss 曲线看起来是正常的
混合图文 token 时,损失只应该作用在助手回答的位置上。这篇讲掩码怎么构造,以及两种最常见的错法各自的特征:漏掉视觉 token 会让 loss 起点异常高并卡在一个平台;漏掉指令部分则 loss 曲线完全正常,但模型推理时会自问自答。
从开发者角度理解大语言模型:文字接龙、token 与采样参数
LLM 的本质是在预测下一个 token,但「token」这个单位本身就是初学者误解最多的地方——它既不是字也不是词。这篇讲模型实际看到的输入是什么、为什么它数不清单词里有几个字母、上下文 8K 到底能装多少中文,以及温度和 top_p 各自在调整概率分布的哪一维。
多模态大模型架构:视觉特征如何对齐到语言空间
典型 MLLM 由视觉编码器、投影层和语言模型三部分构成。但选 MLP 还是 Q-Former,真正决定的不是表达能力而是 token 数量——576 与 32 的差距在预填充阶段会被平方放大 324 倍。这篇还讲了换高分辨率编码器时必须做的位置编码插值,以及视觉 token 借用一维位置编码带来的固有限制。
深度学习框架入门:PyTorch 与 TensorFlow 怎么选,以及训练之后的那段路
框架帮你解决自动求导、GPU 加速和现成的层。但教程很少说清楚的是:训练用的框架不是部署用的格式,.pt 文件不含网络结构、无法独立分发。这篇讲两大框架的取舍、动态图与静态图的差别在何处真正显现、怎么识别过时教程,以及为什么装不上 GPU 是最消耗新手信心的那一关。
项目分类
2D 动画原理
从人物图片分层和 SVG 资产开始,继续学习骨骼矩阵、双骨骼 IK、蒙皮权重、接缝修复和关键帧插值。
11 篇文章Animate 时间轴与符号模型:Graphic 与 Movie Clip 的取帧规则
推导 Graphic 元件按父帧取帧的三种循环模式公式,解释 Movie Clip 为什么在编辑态只显示第一帧、在逐帧导出中不展开,以及口型动画为什么必须用 Graphic。
形状补间与矢量形变:顶点对应、形状提示与 SVG 路径插值
形状补间“爆炸”的根源是闭合轮廓的起点偏移歧义。推导对应代价函数,说明形状提示如何作为约束,并对照现代 SVG 路径形变库的同一套算法。
现代 2D 骨骼运行时:网格形变、绘制顺序与约束系统
线性混合蒙皮表达不了褶皱、绘制顺序和跟随延迟。说明网格形变为什么必须加在绑定空间、绘制顺序为什么是离散轨道,以及 Live2D 参数驱动形变的伪 3D 原理。
Animate 导出 HTML5 Canvas 的运行时:显示列表、重绘与缓存
导出后时间轴被编译成 CreateJS 显示对象树,canvas 每帧重画整张画面。解释矢量为何每帧付一次光栅化代价、cache 的三个参数陷阱,以及滤镜为什么必须配合缓存。
人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer
2D 动画原理专栏第一篇:用 ComfyUI IP-Adapter、OpenPose 拆件、Grounded-SAM 抠图和 vtracer 生成 SVG 骨骼资产库。
2D 骨骼动画数学:局部坐标、锚点矩阵与正向运动学
从齐次矩阵、锚点旋转和父子变换推导 2D 骨骼正向运动学,并用浏览器演示验证末端坐标。
2D 双骨骼反向运动学:余弦定理、可达性与肘部翻转
用余弦定理解析求解二维肩肘角度,处理不可达目标、浮点边界、关节限制和肘部方向连续性。
次级运动:用阻尼弹簧让头发和尾巴跟上来
关键帧调好了动作还是显得硬,缺的是被主体带动、慢半拍跟上来的次级运动。这篇讲阻尼弹簧怎么用频率与阻尼比两个正交参数暴露给动画师,以及接进 2D 骨骼系统时的五个坑:显式欧拉为何无条件不稳定、帧率不同结果不同、骨骼链必须同帧从根到梢更新、该弹角度而不是位置、以及瞬移为什么会让弹簧爆炸。
挤压与拉伸:非均匀缩放为什么不能穿过旋转传下去
挤压拉伸接进骨骼系统之后,麻烦几乎全部来自一件事——非均匀缩放不能像旋转平移那样安全地沿层级传递。这篇讲二维的面积守恒与它不守恒的两样东西、缩放中心选错为什么让球陷进地板,以及核心的层级陷阱:父节点非均匀缩放乘以子节点旋转会产生切变,症状是只有转了角度的部件变成平行四边形。
2D 线性混合蒙皮:权重数学、关节变形与接缝白点修复
推导线性混合蒙皮公式,解释权重归一化、逆绑定矩阵、关节塌陷、透明边缘污染和 SVG 接缝白点。
2D 动画关键帧插值:线性、Smoothstep、贝塞尔与帧率无关播放
从导数解释线性运动和缓入缓出的速度差异,推导 Smoothstep、三次贝塞尔和帧率无关时间采样。
项目分类
算法实现项目
围绕回溯、位运算和聚类实现,保留可以复查的代码、流程图和下载资料。
5 篇文章轮廓追踪的终止条件:三行代码顺序错了,面积大二十倍
Moore 邻域追踪的 Jacob 终止准则要求位置和方向同时匹配。我把检查写在了方向更新之前,用的是上一轮遗留的方向,于是条件几乎永不成立,追踪器绕圈直到被点数上限强行截断——鞋带公式再把不闭合的首尾直接连起来,横穿整个区域。
图片转 Unicode 四象限 ANSI:原理、实现与浏览器工具
解释如何把任意图片压缩成 truecolor Unicode 四象限 ANSI:2 x 2 像素、两色最小误差、.ans 文件和浏览器端隐私边界。
回溯算法入门:用 C 和 Python 解决 8 皇后问题
用 C 和 Python 讲清楚 8 皇后回溯搜索的状态表示、冲突判断、递归过程与完整求解思路。
回溯算法进阶:用位运算优化 8 皇后(C / Python)
介绍如何用位运算优化 8 皇后搜索,降低状态判断成本,并给出 C / Python 对照实现。
K-means 聚类算法入门:基于 Iris 数据集的 C 语言实现
结合 Iris.csv、C 语言源码、流程图和可视化,完整讲解 K-means++ 初始化、迭代收敛与结果分析。
项目分类
站点建设项目
记录这个双语技术站的结构、内容同步、分类、评论和部署方式。
6 篇文章给自己的站点量结构:一个错了八倍的指标
想量化"这些文章是不是长得太像了",第一次算出 92%,写进了结论;后来发现那个数字把主题模板算成了文章结构,修正后是 12%。这篇讲测量本身:怎么定义"形状"、边界画错在哪、为什么单一指标会掩盖真正的问题,以及推翻它的其实是一次意外的对照。
把整条图像处理链路放进浏览器:省下的不只是 CPU
一个上传角色图片、自动抠图分层、转成 SVG 资产库的工具,约束是不上传服务器。最初动机是单核源站扛不住服务端图像处理,做完发现真正省下的是存储、审核、隐私责任和并发这四样。含解码到矢量化的五步实现、IndexedDB 的代价、用 ZIP 存储模式替代压缩库,以及模型下载这唯一无法回避的成本。
特色图片设好了,og:image 却是空的:Yoast 索引表的陈旧缓存
给 19 篇文章补上特色图片,后台显示正常,页面源码里却没有 og:image——而同一页的 JSON-LD 里 thumbnailUrl 已经指向新封面。这个"schema 有、og 没有"的组合就是诊断关键:两者走的是不同数据通路,一条实时算,一条读预计算的索引表。
8.3 GB 备份里只有 276 MB 是独有的:一次删除前的取证
服务器磁盘报到 86%,部署备份占 8280 MB。删除前先算清楚有多少是独有内容——答案是 276 MB,其余是同一批文件被复制了 228 遍。以及删除前那一步集合差集运算,救回了 7 个只存在于历史快照里的文件。
欢迎来到浩天博客:这个双语技术站会发布什么
介绍浩天博客的定位、双语结构,以及后续会持续发布的算法、编程与项目内容。
「只读」是结构问题,不是纪律问题:自建邮箱接 AI 的十个坑
把自建邮箱接给 AI 助手,协议部分不难,难的是让「只读」成为结构而不是承诺。这篇记录接入过程中踩到的问题:拒稿信里的 has been accepted 如何让分类器判反、语法检查通过而鉴权整个失效、单用户改多用户时共享闩锁怎样连坐所有人,以及为什么合成点击测不出一个死按钮。
