↓ Skip to main content

Posts

2026

从马尔可夫性质出发:DP 无后效性、HMM 与 VAE 的知识联想

·4970 words·10 mins
起因 # 继续跟着 MIT 6.S191 Lecture 5 学强化学习。上一篇理解了 Return、State Value Function \(V^\pi(s)\) 和 Action Value Function \(Q^\pi(s,a)\)。 接下来要学的是 Bellman Equation。 我之前隐约知道它能把 \(V^\pi(s)\) 写成递归形式——当前状态的长期价值,等于下一步的期望 Reward 加上折扣后下一状态的期望长期价值。但刚准备细看推导时,发现它有一个前提条件:

从 Return 到 Q-Function:强化学习如何评价一个尚未发生的决策

·10320 words·21 mins
上一篇结尾留了一个问题: 如果一个动作的长期回报要等到几十步甚至更多步之后才能知道,那 Agent 在当前状态下,如何判断不同动作的长期价值? Return 可以衡量一条轨迹的累计收益。但做决策的时候,未来还没有发生——不存在一条可以直接计算的轨迹。那在当前时刻,怎么评价一个 State 甚至一个具体 Action 的长期价值?

从监督学习到强化学习:没有 Label,模型如何学会决策?

·7538 words·16 mins
起因 # 最近开始看 MIT 6.S191 的 Lecture 5——Deep Reinforcement Learning。 过去几个月写了不少笔记,从 RNN 到 Transformer,从 VAE 到 GAN,基本都属于 supervised 或 self-supervised 的范畴。之前梳理训练信号来源的那篇,整理了四种学习范式——supervised、unsupervised、semi-supervised、self-supervised——的核心区别在于训练信号是谁提供的。

GAN 的对抗到底发生在哪里:从 D(G(z)) 到 Distribution Matching

·7620 words·16 mins
上一篇讲完 VAE,走到一条因果链:VAE 通过把 Encoder 的输出从确定点变成概率分布,让 latent space 服从已知 prior,于是可以从 prior 采样、交给 Decoder 生成新样本。 整个过程很精巧,但回头看,它对概率计算的依赖很重:Encoder 参数化 \(q(z|x)\),训练目标里有 KL divergence、有 reconstruction likelihood,每一步都在和 density 打交道。

从伯努利分布推到二元交叉熵:二分类损失为什么长这样

·6016 words·13 mins
起因 # 最近在看 GAN 的时候,判别器的训练目标里反复出现两项: \(\log D(x)\) 和 \(\log(1 - D(G(z)))\) 我能看出 \(\log D(x)\) 越大越好——\(D(x)\) 越接近 1,判别器越确信这是真实样本。也能看出 \(\log(1-D(G(z)))\) 在 \(D(G(z))\) 接近 0 的时候最大——判别器越确信生成的是假样本。

训练信号从哪里来:重新理解有监督、无监督、半监督与自监督学习

起因 # 我过去一直把机器学习里的学习范式简单理解成两类: Supervised Learning(有监督学习):每个样本有 label,训练时知道正确答案。 Unsupervised Learning(无监督学习):只有样本,没有 label。 这个分法一直挺好用。分类、回归是 supervised,聚类是 unsupervised,清清楚楚。

从 Faster R-CNN 到 Anchor-Free:经典目标检测架构到底在解决什么问题

以前在商汤做 CV 的时候,Faster R-CNN、SSD、FPN、RetinaNet 这些名字是天天打交道的。模型训练、转换、部署,各种坑也踩了不少——TensorRT 版本间 softmax axis 默认值不一致、RoI Align 的 num_roi_per_image 默认 300 导致多 batch 结果错乱,这类问题当年 debug 到怀疑人生。

视频不等于视频模型:从抽帧 2D CNN 到 Conv3D 的选择逻辑

以前做 CV 内容审核的时候,训练数据里有大量视频。色情视频审核是一个很典型的场景——输入是一段几十秒甚至几分钟的视频,输出是一个二分类:这段视频是否包含色情内容。 但最近回忆起那段经历,我发现一件当时觉得理所当然、现在重新想却很有意思的事:虽然输入是视频,当时实际的做法却是先抽帧,把视频拆成若干张图片,然后按照普通的图片分类问题来做。

9 年后重温 CNN:剥掉算子细节后,真正留下了什么

最近在重新过 MIT 6.S191 Lecture 3(卷积神经网络)。2017 年刚接触 CV 那会儿,CNN 算是吃饭的家伙,每天都在调。后来精力逐渐转到 ML Infra,成天跟 GPU 显存、通信拓扑和算子优化打交道,卷积网络的很多具体细节就慢慢生疏了——写个 nn.Conv2d 时 weight 的四维形状到底怎么排、Kaiming 初始化的方差怎么推、感受野怎么算,冷不丁被问到,还得在脑子里卡壳一下。

一组 QKV 就够了吗:Multi-Head Attention 到底在拆什么

上一篇结尾我留了一个问题:一组 \(W_Q, W_K, W_V\) 只定义了一个 matching / routing space,如果不同类型的信息需求需要不同的 routing 策略,一个 space 够吗? 这个问题让我停了下来。因为到 single-head self-attention 为止,每个 token 已经可以访问整个 sequence 了——任意两个位置之间的通路都是通的。如果表达能力不够,加大 \(d_k\) 不就行了?为什么还要搞出 Multi-Head?

从动态读取到 QKV:Self-Attention 的公式是怎么长出来的

上一篇结尾留了三个问题:谁和我相关?相关程度是多少?我该从对方那里读什么? Self-attention 允许 sequence 内的位置之间直接建立通路,不再需要沿着 recurrent state 一步步搬运。但"允许直接交互"和"知道怎么交互"是两件事——architecture 把路打通了,到底是谁在决定走哪条路、读多少、读什么?

从倒排索引到 BPE:高性能系统为什么总在避免扫描全集

·2540 words·6 mins
最近在系统学习 Search 和 Information Retrieval 的知识。在看倒排索引(Inverted Index)的时候,我越看越觉得这个结构非常眼熟。直到我想起前段时间写 CS336 作业里 BPE(Byte-Pair Encoding)分词算法的优化逻辑,我才突然意识到:原来这些看似完全不同领域的系统,底层其实都在共享同一种 pattern。