接着上一篇的问题 # 上一篇搞清楚了一件事:DDPM 的前向扩散虽然定义成一步一步加噪的马尔可夫链,但因为高斯分布在线性组合下的封闭性,任意时刻的 \(x_t\) 都可以一步算出来:
起因 # 最近在看 DDPM(Denoising Diffusion Probabilistic Models)。前向扩散的定义写得很清楚:从原始图片出发,每一步往上面加一点噪声,一步一步把图片变成纯噪声。
上一篇走完了从 Q-Learning 到 DQN 的过程。用神经网络近似 Q-Function,输出各动作的 Q 值,取 argmax 选动作。加上 Experience Replay 和 Target Network,DQN 在 Atari 游戏上工作得很好。
继续跟 MIT 6.S191 Lecture 5 往下走,课程在讲完 DQN 之后,介绍了一种完全不同的思路——不学 Q-Function,直接学 Policy。
上一篇结尾留了一个问题:如果不知道环境的转移概率和 Reward 函数,应该怎么利用 Bellman Equation 学习策略?
那篇从 Policy Iteration 走到 Value Iteration,用 A/B 两状态的例子跑完了整个过程。最后得到了最优策略,A 选择前往 B,B 选择 \(b_1\),\(V^*(A) = 2.7\)。
上一篇推完了 Bellman Equation。那篇最后写了一句:Bellman Equation 是一个递归关系,不是一种算法——Value Iteration 和 Policy Iteration 才是利用它求解的具体方法。
当时没有展开。这一篇接着走。
上一篇结尾用全期望公式把 \(V^\pi(s)\) 按"下一个 State"分组展开了。Markov Property 那篇讨论了为什么 Bellman Equation 需要 Markov Property 作为前提。
数学工具准备齐了,我打算正式跟一遍 Bellman Equation 的推导。
起因 # 上一篇讨论了 Markov Property,提到 Bellman Equation 需要它作为前提。
准备看 Bellman Equation 的推导时,我卡在了一个叫 Law of Total Expectation(全期望公式)的地方。它的核心思想是:计算整体期望时,可以先按某个变量的不同取值分组,分别算各组的条件期望,再按组别的概率加权平均。之前那篇定义的 State Value \(V^\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s]\),在 Bellman Equation 里正是用这个思路按"下一个 State"分组来展开。
起因 # 继续跟着 MIT 6.S191 Lecture 5 学强化学习。上一篇理解了 Return、State Value Function \(V^\pi(s)\) 和 Action Value Function \(Q^\pi(s,a)\)。
上一篇结尾留了一个问题:
如果一个动作的长期回报要等到几十步甚至更多步之后才能知道,那 Agent 在当前状态下,如何判断不同动作的长期价值?
Return 可以衡量一条轨迹的累计收益。但做决策的时候,未来还没有发生——不存在一条可以直接计算的轨迹。那在当前时刻,怎么评价一个 State 甚至一个具体 Action 的长期价值?
起因 # 最近开始看 MIT 6.S191 的 Lecture 5——Deep Reinforcement Learning。
过去几个月写了不少笔记,从 RNN 到 Transformer,从 VAE 到 GAN,基本都属于 supervised 或 self-supervised 的范畴。之前梳理训练信号来源的那篇,整理了四种学习范式——supervised、unsupervised、semi-supervised、self-supervised——的核心区别在于训练信号是谁提供的。
上一篇讲完 VAE,走到一条因果链:VAE 通过把 Encoder 的输出从确定点变成概率分布,让 latent space 服从已知 prior,于是可以从 prior 采样、交给 Decoder 生成新样本。
整个过程很精巧,但回头看,它对概率计算的依赖很重:Encoder 参数化 \(q(z|x)\),训练目标里有 KL divergence、有 reconstruction likelihood,每一步都在和 density 打交道。
起因 # 最近在看 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,清清楚楚。
一个部署工程师的困惑 # 几年前我在做计算机视觉模型的部署,用的是 TensorRT 4 和 5。每次把训练好的模型转成 TensorRT engine,都绕不开一个参数:maxBatchSize。
起因 # 上一篇文章理清了 latent variable 和 latent space 的概念,最后停在一个地方:
不要直接在复杂的数据空间中生成数据。先在简单的 latent space 中采样一个 \(z\),再通过学到的映射把 \(z\) 变成 \(x\)。
起因 # 最近在看 MIT 6.S191 Lecture 4——Generative Modeling。在这之前我对生成模型基本没什么了解,刚建立了一个很粗的认知:
上一篇只回答了"为什么不矛盾" # 上一篇文章里,我沿着一个概率问题一路追到了集合论。
起因 # 最近在补概率基础的时候,碰到一个解释:连续分布中,每一个单点的概率都是 0,但整个区间的概率可以是 1。
以前做 CV 内容审核的时候,训练数据里有大量视频。色情视频审核是一个很典型的场景——输入是一段几十秒甚至几分钟的视频,输出是一个二分类:这段视频是否包含色情内容。
但最近回忆起那段经历,我发现一件当时觉得理所当然、现在重新想却很有意思的事:虽然输入是视频,当时实际的做法却是先抽帧,把视频拆成若干张图片,然后按照普通的图片分类问题来做。
最近在重新过 MIT 6.S191 Lecture 3(卷积神经网络)。2017 年刚接触 CV 那会儿,CNN 算是吃饭的家伙,每天都在调。后来精力逐渐转到 ML Infra,成天跟 GPU 显存、通信拓扑和算子优化打交道,卷积网络的很多具体细节就慢慢生疏了——写个 nn.Conv2d 时 weight 的四维形状到底怎么排、Kaiming 初始化的方差怎么推、感受野怎么算,冷不丁被问到,还得在脑子里卡壳一下。