↓ Skip to main content
  1. Categories/

Deep-Learning

2026

视频不等于视频模型:从抽帧 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 把路打通了,到底是谁在决定走哪条路、读多少、读什么?

从 RNN 到 Self-Attention:信息为什么一定要沿着 State 一步步传递?

上一篇《从 RNN / LSTM / GRU 到早期 Attention》结尾我留了一句话:早期的 attention 并不是为了取代 RNN 而出现的,它只是夹在 encoder–decoder 中间解决 fixed-context bottleneck;但“根据当前需求去读取一组 representation”这种机制,并不一定要依附在 RNN 上。这篇接着讲那个“另一个故事”。

把 RNN 沿时间展开之后:理解 BPTT 与梯度传播

复习 RNN 的 backward 时,我关注的是参数共享:同一份 weight 在多个 timestep 被使用,各处产生的梯度最后怎么汇到它上面?把时间展开成计算图之后,这件事就可以用普通的 chain rule 来算。 training loop 那篇重新理过 forward / backward / optimizer 的职责划分,RNN state transition 那篇理过 hidden state、output、prediction 的区别和 weight sharing,next-token prediction 那篇解释了为什么每个 timestep 都能产生一个 loss。这篇把这几块拼起来,回答一个问题:

重新理解 RNN:Hidden State、Output 和 Prediction 的区别

·3174 words·7 mins
起因 # 最近在复习 MIT 6.S191 的 RNN 部分,看到下面这张 slide 时停了一下。 左边代码里这一行: 1prediction, hidden_state = my_rnn(word, hidden_state) 右边图里同时画了 \(h_t\) 的回环和 \(\hat{y}_t\) 的向上输出。但 PyTorch API 里的 output 又指每一步的 hidden state,并不直接等于任务的 prediction。