动手学深度学习——序列模型

张开发
2026/4/14 1:07:07 15 分钟阅读

分享文章

动手学深度学习——序列模型
1. 前言前面我们一直在学习计算机视觉相关内容例如图像分类目标检测语义分割样式迁移这些任务有一个共同点输入通常可以看成“整体同时给出”的数据。但从这一节开始李沐课程进入了一个新的大模块序列模型Sequence Model这一部分和前面的图像任务很不一样。因为它处理的数据不再是“静态整体”而是按时间展开的数据按顺序排列的数据前后位置存在依赖关系的数据例如一句话里的词一段时间内的气温股票价格序列音频信号用户行为日志这类数据都具有明显的顺序性因此就需要新的建模方法。2. 什么是序列所谓序列最直观地说就是一组按照顺序排列的数据例如x1, x2, x3, x4, ..., xt这里每个元素都不是孤立的而是和前后元素有关系。比如2.1 时间序列像每天气温周一 18℃周二 20℃周三 19℃周四 22℃这里后一天的数据往往和前一天有关。2.2 文本序列一句话我很喜欢深度学习这些词的顺序不能乱。“我喜欢很深度学习”显然就不对了。2.3 音频序列语音信号本质上也是随时间变化的序列。所以序列数据的核心特征就是元素之间存在顺序关系和依赖关系3. 为什么普通模型不适合直接处理序列如果把序列简单当成普通向量处理会丢掉一个非常关键的信息顺序比如下面两个句子包含的词几乎一样我喜欢你你喜欢我如果只看词袋不看顺序它们很像但实际含义完全不同。又比如时间序列中今天的温度和昨天有关明天的温度也往往和今天有关如果把每个时间点都当成独立样本那模型就无法利用这种连续性。所以序列建模最关键的一点就是不仅要看数据本身还要看它出现的先后顺序4. 序列模型到底要解决什么问题序列模型最核心的任务就是建模这种关系当前时刻的数据与前面若干时刻的数据之间有什么依赖也就是说序列模型希望学会如何利用过去信息来解释当前或预测未来这就是它和普通静态模型最大的区别。5. 一个最典型的任务根据过去预测未来李沐这里讲序列模型通常会先从一个非常经典的问题出发给定过去的一段序列预测未来的值例如给定前几天的气温预测明天气温给定前几小时的用电量预测下一小时给定前几个词预测下一个词所以你可以把序列模型先简单理解成一种会“看历史再做判断”的模型6. 用数学形式怎么表示序列问题假设我们有一个序列x1, x2, x3, ..., xt那么一个典型的预测问题就是用前面的若干项预测下一项例如xt f(x1, x2, ..., xt-1)或者更常见一点只用最近若干项xt f(xt-τ, ..., xt-2, xt-1)这里的τ表示使用多少个过去时刻作为输入。这其实就是一个“滑动窗口”思路。7. 最简单的序列建模思路自回归模型李沐这里最开始讲序列模型常常会引出一个基础思想自回归Autoregressive所谓自回归就是用序列自己的过去来预测序列自己的未来比如用前 4 天温度预测第 5 天温度用前几个词预测下一个词这类模型不需要额外复杂设定因为它直接利用序列本身历史信息。所以序列模型中最基础的直觉就是未来往往依赖过去8. 为什么说序列建模比普通回归更难普通回归里我们通常默认每个样本是独立的。例如房价预测中每套房是一个样本图像分类中每张图是一个样本但在序列模型里不同时间点的数据往往不是独立的。它们之间有强相关性。这会带来几个困难8.1 样本之间有关联不能简单打乱后当作完全独立样本。8.2 输入长度可能变化一句话可以长可以短时间序列也可能长短不一。8.3 长期依赖问题有时当前结果不只和最近一步有关还和很久之前有关。所以序列建模往往比普通静态建模更复杂。9. 序列模型中的“时间”不一定真的是时间这点很值得强调。虽然很多例子都讲的是时间序列但“序列”不一定真的是按时间展开的。它也可以是文本中的词序列DNA 中的碱基序列用户点击行为顺序音乐中的音符顺序所以“序列模型”更准确地说是在处理有顺序结构的数据不一定非得是时钟意义上的时间。10. 李沐这一节通常先讲什么李沐这里讲“序列模型”重点不是一上来就上 RNN而是先帮你建立几个非常基础的认识第一序列和普通数据不同序列有前后依赖。第二预测未来需要利用过去这就是序列建模的基本动机。第三可以先从简单的滑动窗口建模开始即先用固定长度历史去预测下一步。第四为后面的语言模型和 RNN 铺路这一节更像是整个序列建模模块的“总引子”。11. 一个简单例子用前四项预测第五项假设有这样一个序列x1, x2, x3, x4, x5, x6, ...我们可以构造训练样本输入[x1, x2, x3, x4]输出x5输入[x2, x3, x4, x5]输出x6输入[x3, x4, x5, x6]输出x7这就是典型的滑动窗口训练方式。你会发现序列模型并不是凭空预测未来而是通过不断学习“过去到未来”的映射关系。这其实已经很接近后面语言模型“根据前文预测下一个词”的思想了。12. 序列模型在语言任务中的意义为什么李沐后面会马上接“文本预处理”“语言模型”“RNN”因为语言本质上就是序列。例如一句话我正在学习深度学习如果模型看见前面几个词它就应该能更合理地推测后面的词。这就是典型的序列建模问题。所以序列模型是自然语言处理的基础之一后面的语言模型其实就是序列模型在文本上的具体应用。13. 序列模型在时间序列中的意义除了文本时间序列预测也是最经典的应用场景。例如预测未来销量预测气温变化预测股票走势预测服务器流量这些问题的共同点是当前观测值和历史观测值有关系所以你不能只看某一个时刻的点值而必须把它放在整个变化趋势中理解。这正是序列模型的价值所在。14. 序列模型和马尔可夫假设的直觉关系虽然这一节通常不会一开始讲太深但可以先建立一个很实用的直觉有时候当前状态主要取决于最近的少数几个历史状态这类思想和马尔可夫假设是相关的。也就是说我们常常不需要永远记住全部过去而只关注一个有限窗口的历史。这也是为什么最开始会先用固定窗口建模。当然后面会发现固定窗口有局限长期依赖会很难处理这就自然引出后面的 RNN。15. 这一节和后面 RNN 的关系这一节最大的作用不是讲复杂模型而是先把问题提出清楚序列为什么难为什么要用特殊模型当你意识到数据有顺序当前依赖过去过去长度不一定固定固定窗口方法有局限你就会自然接受后面 RNN 的出现。所以这一节本质上是在铺路先有问题再有方法而不是一上来硬讲网络结构。16. 序列模型和前面视觉模型思维上的区别这里可以顺带帮读者切换思维。前面的图像模型更偏向空间结构建模例如卷积核看局部空间邻域图片二维展开关注位置和纹理而序列模型更偏向时间/顺序依赖建模例如当前和过去有关顺序不能乱输入输出沿序列展开所以从这一节开始思维方式要从“空间”转到“顺序”。17. 一个很重要的概念教师强制的前置直觉虽然这一节还没正式讲训练技巧但可以先给个直觉在序列预测里训练时通常已知真实历史所以模型可以利用真实过去来预测下一步。这和后面语言模型、RNN 训练非常相关。你现在先记住一件事就行序列预测训练时过去信息通常是有监督提供的而真正生成时模型则可能要依赖自己前一步的输出。这是后面会越讲越清楚的。18. 本节总结这一节我们初步认识了序列模型核心内容可以总结为以下几点。18.1 序列数据具有顺序性元素之间不是独立的而是前后相关的。18.2 序列模型的核心是利用过去预测当前或未来这也是时间序列预测和语言模型的基本思想。18.3 最简单的建模方式是滑动窗口用固定长度历史去预测下一步。18.4 序列模型适用于很多任务包括时间序列预测文本建模音频处理用户行为分析18.5 这一节是在为后面的语言模型和 RNN 铺路真正更强的序列建模方法会在后面展开。19. 学习感悟这一节的意义在于它帮我们从“静态数据建模”切换到了“动态顺序建模”。以前我们更习惯于一张图就是一个整体一个样本就是一个点但序列模型提醒我们有些数据最重要的不是它“是什么”而是它“怎么一步步变化到这里”。这是一种完全不同的建模视角。一旦这个视角建立起来后面的语言模型和 RNN 就会顺很多。

更多文章