最近有朋友拿着一个数据集来问我:字段就这些,标签也是现成的,到底该用深度学习里的哪一类模型?这个问题其实很典型——很多人把注意力放在模型结构上,却忽略了最底层的问题:我手上这个任务,本质上属于什么任务类型。深度学习任务分类不是教科书里枯燥的一章理论,它决定了你接下来选什么网络结构、用什么损失函数、看什么评价指标,甚至决定你这个项目从一开始就跑偏还是走对。
这个系列的第一篇,我想把深度学习里最常见的任务类型整体捋一遍,每一类都配实例,讲清背后的建模思路。不管你是刚入门的新手,还是从传统机器学习转过来的开发者,只要能把"任务分类"这张地图刻在脑子里,后面看模型、选方案都会有方向感得多。
1. 深度学习任务分类的两把尺子:监督信号与输出形态
深度学习的任务五花八门,分类、回归、聚类、检测、分割、生成、强化学习,名词一大堆。但剥开外壳看本质,我觉得判断一个任务属于哪一类,只需要拿两把尺子去量。
第一把尺子是我叫作"监督信号"的东西:训练的时候,模型靠什么反馈来调整自己。如果每个训练样本都带一个标签,模型预测结果直接和这个标签比,那就是监督学习;如果数据没有标签,模型要从数据本身的结构里找规律,那就是无监督学习;如果模型靠环境给的奖励信号来试错,那就是强化学习。这个反馈信号的类型,直接决定了训练循环长什么样,这也是所有任务分类里最硬的分界线。
第二把尺子是模型的输出形态:预测出来的是一个数、一个类别、一个向量、一张图,还是一串动作。形态不一样,模型最后一层结构、损失函数、评价指标全部跟着变。比如同样是有标签的训练数据,输出是连续的数值就是回归任务,输出是离散的类别就是分类任务,输出是一个个边界框和类别组合就是目标检测任务。这两把尺子叠在一起,几乎所有深度学习任务都能对号入座。
| 任务大类 | 监督信号 | 典型输出形态 | 代表任务 |
|---|---|---|---|
| 监督学习 | 人工标注的标签 | 标量/类别/边界框/掩码 | 分类、回归、检测、分割 |
| 无监督学习 | 数据本身 | 聚类簇/低维向量/重建结果 | 聚类、降维、自编码、对比学习 |
| 自监督学习 | 从数据中构造的信号 | 变换后的类别/向量 | 旋转预测、遮挡恢复、对比学习 |
| 生成式学习 | 数据分布本身 | 图像/文本/音频等新样本 | GAN、扩散模型、语言模型 |
| 强化学习 | 环境反馈的奖励 | 动作序列/策略分布 | 游戏AI、机器人控制 |
有人会问,自监督学习算无监督吗?严格来说它属于无监督的范畴,但机制不太一样——它是自己给自己造标签,比如把一张图旋转90度,让模型预测旋转角度。现在大模型领域很多工作都靠这个套路,所以单独拎出来,后面会细说。
2. 判别式任务:分类、回归与结构化预测,管住"输出长什么样"
判别式任务是工业界最常用的一类深度学习应用,核心逻辑很简单:给定输入,直接预测它的属性或者结果。这类任务的关键就是"标签是人工定义好的",模型只需学一个从输入到输出的映射。
2.1 分类任务:类别是离散的,输出是一个概率分布
分类任务是最基础、最典型的判别式任务。文本情感判断、图片识别、故障诊断、垃圾邮件过滤,全是分类。它的核心设定是:预先定义好有限个类别,每个样本只属于其中一个(或者多个),模型输出每个类别的概率,最终取概率最大的类别作为预测结果。
以文本情感二分类为例,输入是一句话,标签是0(负面)或1(正面)。实际建模时:
- 输入变成向量:句子先分词,再通过嵌入层映射成一串向量;
- 模型中间层抽特征:可以用双向循环网络,也可以用Transformer结构,把句子压缩成一个语义向量;
- 最后一层重要:接一个输出维度为2的全连接层,再接Softmax,把两个实数变成和为1的概率分布;
- 损失函数用交叉熵,衡量预测分布和真实标签的差异;
- 评价指标常用准确率、F1值,尤其类别不平衡时优先看F1。
这里有个容易被新手忽略的点:分类模型的输出是"概率分布",不是"类别编号"。有些框架里看起来模型直接输出了一个数字,实际上是它对每个类别的概率做了argmax。你如果直接拿一个类别编号的整数作为监督信号,让模型做回归式拟合,虽然也能跑出一个模型,但概率语义就丢了,模型对"边界样本"的置信度也没法体现。
2.2 回归任务:输出连续数值,损失函数逻辑完全不同
回归任务和分类看起来很像,都是"输入到输出"的映射,但输出从离散类别变成了连续数值。房价预测、气温预测、销量估计、年龄估计,都是回归。这类任务的关键是输出的数值有"远近"关系——预测错误3万比错误1万严重得多,所以模型要学习的是数值近似,而不是类别判定。
回归任务建模时:
- 最后一层通常是一个没有激活函数的全连接层,输出维度为1;
- 损失函数用均方误差(MSE)或平均绝对误差(MAE),前者对大误差惩罚更狠,后者对离群值更鲁棒;
- 评价指标用均方根误差(RMSE)、R²等,看预测值和真实值的拟合程度。
实际中我见过不少人把回归问题硬当成分类问题处理,比如预测年龄,有人把它分箱变成"0-10岁、10-20岁……"几个类别去做分类。这种做法在某些特殊场景下偶尔有用,但它有三个代价:一是类别边界处会出现"阶梯误差",明明真实年龄21岁,模型输出区间20-30岁和30-40岁,在分类指标上差异是一样的,非常不合理;二是类别间的排序信息没被利用;三是类别不均衡问题很容易出现。除非有明确业务需求(比如做个年龄段推荐),否则老老实实做回归是更稳的选择。
2.3 结构化预测任务:检测、分割、多标签分类的共性
还有一些判别式任务,输出的不是单个标签,而是"一组有结构的结果",这类我把它们归为结构化预测。它们本质上仍然是监督信号驱动,但复杂在输出的组织形式上。
目标检测就是一个典型:输入一张图,输出是若干个"物体框+类别+置信度"。和普通分类比,它多了两个难题——一张图里可能有多个物体,而且数量不定;物体位置用矩形框坐标表示,需要模型既做定位又做分类。所以检测模型通常有两条分支:一条回归框坐标,一条分类框内物体类别。损失函数也是两部分相加,常见的Smooth L1损失管定位,交叉熵管分类。
语义分割则更精细:输出的不是框,而是每个像素的类别掩码。一个512×512的图,输出就是512×512的类别矩阵。由于输出本身保留了空间结构,所以分割模型常用编码器-解码器结构,解码部分逐渐把下采样后的特征图还原回原分辨率。
多标签分类也是容易被忽视的结构化任务:一篇文档可能同时属于"科技"和"医疗"两个类别,模型要输出多个独立的二分类概率,每个类别算一次Sigmoid,而不是做一个多类Softmax。这两个概念——"多分类"和"多标签分类"——经常被混用。多分类是N选1,多标签是每个类别独立判断0或1,损失函数一个是Softmax+交叉熵,一个是多个Sigmoid+二值交叉熵,千万别用错。
2.4 判别任务建模前,先想清楚这三个问题
判别式任务看似简单,但翻车率一点都不低。我总结了三个高频问题,建任何判别模型前都值得过一遍:
样本是否平衡。正负样本差距太大时,模型容易把所有样本都猜成大类别,准确率还特别高。这时候要先做类别重加权、过采样/欠采样,或者改用Focal Loss这类针对难样本设计的损失函数。但注意:类别不平衡不是"必须做数据增强"的理由,先看评价指标再下结论。
多标签和多分类是否分清了。如果你业务里一个样本本来就归属多个类别,结果你用了Softmax,模型大概率会在两个相关性高的类别之间"摇摆"——因为它们不是互斥关系,Softmax的"总和为1"约束会强行压抑其中一个。这是结构设计错误,不是训练技巧能救回来的。
数据增强要贴合语义。图像分类里做随机裁剪、翻转很合理,但文本分类里做随机词语删除、近义词替换是有风险的,语义可能被破坏。回归任务里做Label Smoothing这类操作也容易把真实分布扰乱。增强策略不是万能药,得先想清楚"这个增强有没有改变样本的真实标签"。
3. 无监督与自监督任务:抽掉人工标签,让模型自己找规律
深度学习的监督能力再强,也绕不开一个现实瓶颈:高质量标注数据太贵了,很多场景根本没有标签,甚至标签本身的定义都说不清。无监督和自监督任务解决的就是这个问题,它们的目标不是"预测某个答案",而是"发现数据内部的结构"。
3.1 聚类任务:数据没有标签,让它自己成堆
聚类是传统机器学习就有的经典任务,深度学习让它有了新玩法。给定一批用户行为数据,没有"用户属于哪类"的标签,我们希望模型自动发现数据中有几个"堆",每个堆里的样本互相像,堆和堆之间差异明显。这个思路常用于用户分群、异常检测、文档主题挖掘。
传统K-Means在低维结构化数据上挺好用,但拿原始图像、原始文本直接算欧氏距离,效果很差,因为高维原始空间里的距离不代表语义距离。所以深度聚类的做法通常是分段走:先用一个无监督预训练过的神经网络把高维数据压成低维向量,再在低维空间里做聚类。换句话说,深度学习在这里扮演的是"特征提取器"的角色,聚类算法本身还在。
聚类问题有个所有人都绕不开的痛点:怎么评价结果。分类有准确率,回归有误差,但聚类没有标准答案。实践中常用轮廓系数、聚类纯度这类内部指标,或者结合业务做人工抽样验证。我的建议是:聚类结果一定要落到业务上检验,比如用户聚类完,看看每个簇的平均消费、活跃度是否有区分度,有区分度才有说服力。
3.2 自编码器与表征学习:学会把数据"压缩再还原"
自编码器是我刚接触深度学习时觉得最奇妙的模型之一。它的想法很简单:把输入压缩成一个很短的向量(编码),再从短向量努力还原出原来的输入(解码)。训练时没有人工标签,监督信号就是输入本身——输入和输出对比,计算重建误差。如果模型能很好地还原输入,说明那个"短向量"已经抓住了数据的核心信息。
打个比方:一篇文章几千字,你让它概括成五句话,然后从这五句话尽量还原原文,这五句话必然要保留最关键的语义信息。自编码器学到的"短向量",就是这类压缩后的表示,可以拿去做可视化、做特征、做异常检测。在异常检测场景里,模型只见过正常样本,想还原异常样本时会很吃力、重建误差大,利用这个误差就能找出异常点。
如今纯粹的经典自编码器在工业落地里越来越少见了,但它作为一种思想被保留在大量新模型里。比如对比学习框架、掩码语言模型,本质上都是"从数据的一部分预测另一部分(或复原被破坏的部分)",只是监督信号的构造复杂得多。
3.3 自监督对比学习:让模型自己造老师
自监督学习的核心思想,是我前面提到的"自己给自己造标签"。最近几年它成了大模型训练的基石,比如把一句话随机遮住几个词,让模型预测被遮住的词是什么;把一张图转成灰度图,让模型预测原图的颜色;把一段视频的关键帧抽掉,让模型预测缺失帧的内容。
这类任务里,最值得一提的套路是对比学习。它构造样本对:同一张图做两次不同增强,比如随机裁剪、旋转、加噪声,得到两个"视角",它们本质上是同一个物体,所以视为正样本对;不同图片视为负样本对。训练目标是让模型把正样本对的特征拉近,把负样本对的特征推开。这样学出来的特征提取器,即使下游没有标签,也能做到"猫的两种增强版本特征很近,猫和桌子特征很远"。
自监督在实际项目里最典型的用法是预训练:先在大量无标注数据上做自监督训练,学一个不错的特征提取器,然后带着这些参数去下游做小样本分类或者目标检测,往往比随机初始化效果好得多。我自己做过一个实验:同一批标注样本只有几千张,直接用随机初始化的模型训练,F1只有0.82左右;换用自监督预训练的特征做初始化,F1能提到0.91。这差距不是调参能补回来的。
3.4 无监督学习的效果怎么量化
无监督的"无标准答案"属性,让很多人觉得无法客观评价。但做工程的人不能这么想。我的经验是分三条路并行:
- 内在指标:聚类轮廓系数、自编码重建误差、对比学习特征空间里的正负样本距离差距;
- 下游任务验证:把学到的表征接到一个简单的下游分类模型上,看F1或者准确率,这是目前最能说明问题的做法;
- 人工抽检:几百个样本,人眼去看聚类的结果是否合理、重建的图是否清晰。
尤其第二条,业界管它叫"评估表征质量的下游迁移"。你装的"特征提取器"好不好,不要只看损失曲线,丢到一个标准测试集上跑一遍才踏实。这也是为什么文章里的预训练模型都提到"效果刷到多少分"——那其实是在下游任务上做的评测。
4. 生成式任务与强化学习:换一个目标函数框架
监督和无监督任务再怎么不同,背后都有一个共同点:模型是在"听指令做输出"。但深度学习里还有另外两类任务,它们的建模目标和前面完全不同,一个是生成新样本,一个是做序列决策。
4.1 生成式任务:学的不是映射,是数据分布本身
分类模型学会的是"这张图里有没有猫",生成模型要学的是"猫长什么样"——它要能凭空画出一张猫的图片,或者写出一段和训练语料风格一致的文本。目标从"判别边界"变成了"概率分布",两者差异巨大。
生成式建模有两条主流路线。一条是自回归路线:一个词一个词地生成,每一步都基于前面已经生成的词来预测下一个词,语言模型就是典型。另一条是扩散路线或叫去噪路线:训练时把真实图片逐步加上噪声,直到变成纯噪声;推理时反过来,从纯噪声一步步去噪还原成图片。这类模型输出是像素矩阵,评价方式很特别,很难说一张图"对"或"错",只能从整体分布上判断它是否和真实图接近,所以常用FID、IS这种统计距离指标,或者靠人眼主观评测。
我最初接触生成模型时,最大的感受是:它的训练要比判别式任务"脆"得多。判别式模型损失下降通常很稳定,而生成对抗网络训练时生成器和判别器像两个在拔河的选手,一不小心就一方碾压另一方。现在的扩散模型稳定性好了很多,但计算开销又上来了。做生成任务前一定要算好算力预算,这是个吃资源的大户。
4.2 强化学习任务:目标是动作序列,不是单一预测结果
强化学习和前面所有任务都不太一样。前面不管是监督还是无监督,模型在单个样本上做一个预测就够了;强化学习里,模型(智能体)要连续地和环境互动,每次根据当前状态选择一个动作,环境返回下一个状态和一个奖励信号,模型的目标是让长期累计奖励最大化。
举几个典型例子:玩棋类游戏、控制机器人手臂抓取物体、推荐系统里的在线决策、甚至对话系统里根据用户反馈调整回复策略。它的训练信号来自环境反馈,而不是数据集的标注。
这个"延迟反馈"问题是强化学习和监督学习的根本差异。游戏里你走错一步,可能要等到几十步之后才输,这时怎么知道是哪一步导致的?强化学习要解决的核心就是"信用分配"问题,所以它常用价值函数或策略梯度这类机制,而不是普通的反向传播。
工程上做强化学习项目,我最大的建议是:先跑通一个极简模拟环境,再考虑上复杂环境。一来复杂环境训练时间长,排错成本高;二来奖励函数设计本身就是容易出错的地方——奖励信号太稀疏,智能体根本学不到东西;奖励信号设计不当,还可能学出钻空子的行为,在模拟器里疯狂刷分但实际毫无用处。
4.3 四类任务放在一起看:决策前先做排除法
深度学习任务分类这个图景,到这里已经有比较完整的样子了。我经常用的一个思考方式是排除法:先看有没有人工标签,有标签走监督判别路线;没有标签但有明确类别结构,走无监督聚类或表征路线;如果目标是要创造新的内容,走生成式路线;如果问题本身是一个环境互动的序列决策问题,就走强化学习路线。
| 任务类别 | 训练信号 | 典型损失/优化目标 | 常用评价方式 | 典型落地场景 |
|---|---|---|---|---|
| 监督判别 | 人工标签 | 交叉熵、MSE | 准确率、F1、RMSE | 风控、推荐、质检 |
| 无监督/自监督 | 数据本身或自造标签 | 重建误差、对比损失 | 聚类纯度、下游任务指标 | 预训练、异常检测、搜广推 |
| 生成式 | 数据分布 | 对抗损失、去噪损失 | FID、人工评测 | 图像生成、文本生成 |
| 强化学习 | 环境奖励 | 策略梯度、时序差分 | 累计奖励、胜率 | 游戏、控制、对话决策 |
这张表我建议打印或者存下来,选型的时候先对着它做排除,通常能砍掉一半错误选项。
5. 从任务类型到工程落地:建模前先回答好三个问题
前面的章节都在讲"任务类型长什么样",最后一个部分我想讲落地的时候怎么用这套分类认知去指导实操。不管是大模型项目还是传统深度学习项目,动手写第一行代码之前,先回答好三个问题,能省下后面几周调参的功夫。
5.1 第一步:定死输出空间和监督信号
拿到需求后,先别急着选网络结构,而是先明确"输入什么形态,输出什么形态,训练时拿什么做反馈"。比如一个智能运维项目,需求是"预测服务器磁盘什么时候会满",你要先判断:输出是一个具体的时间点数还是"未来7天内是否告警"的类别?前者是回归,后者是分类。判断的标准不是哪个模型好用,而是业务真正需要什么——如果做自动扩容预案,回归的时间点数更直接;如果做告警推送,分类更实用。
还要把监督信号写清楚,写成一个可以直接执行的语句:"给定过去7天的监控序列,预测未来24小时磁盘使用率峰值,用MSE作为损失函数,以命中率评估报警准确度。"这句话里面已经有任务类型(回归)、输入规格(7天序列)、输出规格(未来24小时的数值)、损失函数、评价指标。把这个框架写出来,后面所有模型选择都是填空。
5.2 第二步:评价指标必须和业务目标对齐
这个坑我踩得太深了。以前做分类任务,模型准确率跑到97%,业务方却说"没用",后来才发现问题在于正样本只占2%,模型把所有样本全预测成负样本就有98%的准确率。评价指标选错了,模型做出来就是废的。
正确做法是训练前就想好业务里"犯哪种错代价更高":垃圾邮件里,漏掉一封重要邮件比多拦截一封普通邮件严重得多,那就应该看召回率或者用带权重的F值;医疗筛查里,宁可多查也不能漏查,指标就要偏向召回。回归任务同理,预测高估值导致超卖,预测低估值导致库存积压,两种误差的代价完全不一样,此时单纯看MSE是不够的,可以在损失函数里给两种方向的误差设不同的权重。评价指标不是训练完再看的,是在任务定义时就要定好的。
5.3 第三步:判断做端到端还是拆解成多阶段
有时候一个问题看着是A任务,但实际上拆开后才发现是B加C。比如"自动驾驶车辆检测障碍物",表面是目标检测,但工程上往往要先做车道线分割、再做障碍物检测、再做路径规划,每个阶段任务类型不一样。这并不是技术上的倒退,而是工程上的可靠性考虑——每个阶段可以单独验证、单独回退,出问题时更容易定位。
如果业务里有明确的中间产物(比如先抽取关键词,再做情感分析),我建议拆开来做,每个子任务独立建模、独立评估。如果中间产物定义不清,或者信息损失严重,端到端模型就更有优势。判断的核心标准只有一句:中间结果是否可解释、可接口、可单独优化。拆与不拆,不以模型复杂度为理由,而以业务可靠性和可维护性为理由。
以上就是"深度学习任务分类与示例(一)"的完整梳理。我自己带项目时,最喜欢画一张小小的决策卡:输入是什么、输出是什么、监督信号从哪来、用哪个损失、用什么指标、端到端还是多阶段。这张卡一填完,我心里基本就有谱了。下一篇我会挑一个最常见的任务类型,展开一个完整的落地案例,从数据清洗到模型部署,把每一步的思路走一遍。如果你在填决策卡的时候卡在哪一格,欢迎在评论区对照着聊。