在某个 24 小时无人超市的监控室里,一位实习保安面对着堆积如山的监控录像。没有师父给他逐帧标注“这是盗窃”“这是打架”,也没有现成的教材告诉他动作该怎么分类。他唯一能做的,就是反复观看这些无标注视频,自己给自己出题:蒙住画面一部分猜后面的剧情,在不同镜头下辨认同一个人,理解一个动作的“起承转合”。日复一日,他竟练就了一双火眼金睛。这个“自学成才”的过程,正是自监督视频表示学习的真实写照——让模型从海量无标注视频中自己学会“看”与“懂”。 传统监督学习像老师带徒弟,每道题都要标准答案;自监督学习则像这位实习保安,从数据自身构造“伪标签”,在自我问答中沉淀通用的时空表示。本文将从视频理解的基本概念出发,带你依次走进自监督范式、掩码重建、对比学习、时序建模、工程调优与评估部署,解开“没有标签的视频为什么也能教会 AI”的秘密。
掌握自监督视频表示学习,是视频 AI 工程师从“会调模型”走向“能造模型”的分水岭——它让你具备从海量无标注视频中提炼通用时空特征的能力,这是动作识别、视频检索等落地应用的核心基础。
可视化演示
展示自监督视频学习的前置任务(帧序预测、VideoMAE掩码)和对比学习正负对构建过程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
自监督视频前置任务 帧序预测:打乱帧序后预测正确顺序 VideoMAE:随机掩码时空patch后重建 下游迁移:预训练表示用于分类检测 L_pretext = L_order + L_recon 自监督学习无需标注从视频本身学习
视频理解概述
那位实习保安盯着监控屏幕,第一课不是“抓小偷”,而是先弄明白什么是“一段视频”。单张照片能告诉他画面里有人,但只有连续的帧序列才能告诉他这个人是“跑过来”还是“走过去”。视频理解的首要任务,就是让模型像保安一样,不仅“看见”,还能“看懂动作”。
技术上的“视频”是一个四维张量——多帧图像加上时间轴。相比单张图像只有空间信息(高、宽、颜色通道),视频还多出时间维度。动作识别是视频理解中最基础的任务,给定一段视频,输出“谁在做什么”的动作类别。要完成这个任务,模型必须同时捕捉空间特征(画面里有什么物体、什么颜色)和时间特征(物体怎么移动、动作怎么演变),这两者合称“时空特征”。
现实中,视频 AI 的应用已经从安防拓展到体育分析、自动驾驶、医疗影像等场景,成为多模态 AI 工程师的核心技术栈之一。从监控录像里识别可疑行为,到比赛录像中统计球员的每一条跑动路线,背后都依赖对视频时空特征的精准建模。
对实习保安来说,“时空特征”就像他下意识留意到的两样东西:画面里有什么(空间),以及几秒内发生了什么变化(时间)。正是这种“既看画面、又看演变”的本领,才让他后来能识别出各种可疑动作。
- 视频张量 V把一段视频看作一个多维数组,V 代表整段视频的数据容器。
- 时间维度 T视频包含的帧数,代表动作的“快慢”信息。
- 空间尺寸 H 和 W每帧画面的高和宽,决定画面细节。
- 通道数 C每个像素点携带的信息维度,RGB 视频通常 C=3。
自监督范式
问题来了:保安没有师父。监控录像堆满硬盘,却没有任何一条标注说“这个人在偷东西”。他该怎么办?答案是:自己给自己出题,自己找答案——这就是“自监督”。
自监督学习的核心思想,是从未标注的数据本身构造“伪装监督信号”,这类任务被称为“借口任务”。视频自带天然的“题目”:遮住某几帧,让模型根据剩余部分预测遮住的内容;或者打乱帧顺序,让模型判断顺序是否正确。模型每做对一题,对视频内在规律的理解就加深一层。
常用的借口任务包括掩码重建、未来帧预测、对比学习等。完整训练范式分为两步:先在无标注的大规模视频上做自监督预训练,学习到通用的时空表征;再在下游任务上用少量标注数据微调。对比监督学习依赖人工标注,自监督既降低了标注成本,又能学到更通用的表示——这就像保安先通过大量“自习”打好基础,上岗后只需店长几句点拨就能胜任工作。
实习保安的自学手册上写着:每天给自己出“遮挡默写”和“顺序调换”两道题。没有标准答案,但真实世界的规律本身就是答案——他想得越准,说明观察力越强。
- 变换视频对原始视频做遮挡、增广等变换后得到的任务输入。
- 特征提取器参数为 θ 的神经网络,把输入映射到特征空间。
- 自监督损失衡量模型输出与“伪标签”V 的差异,驱动参数更新。
掩码重建法
保安最常做的自测是“遮挡默写”:把监控画面中段盖住,根据前后的剧情,在心里默写出中段发生了什么。这在自监督视频学习中最经典的实现就是掩码重建。
掩码重建指随机遮挡输入视频中的一部分“块”,让模型依据可见部分重建被遮挡的内容。以 VideoMAE 为代表的掩码自编码器在这条路上成绩斐然——它不仅省去标签,还能学到很强的时空表示。具体流程是:将视频切分成不重叠的小块,按较高比例随机掩码后送入编码器,再用轻量解码器在像素级重建被遮块。
掩码比例并非越高越好——过高会让重建任务过于困难,过低又让任务失去挑战,通常在 75% 到 95% 之间调度。模型通过“猜遮罩”被迫理解视频中物体运动规律与上下文语义。VideoMAE 的一大设计巧思是让解码器保持轻量:编码器已从可见块中提炼出高层语义,解码器只需把语义“翻译”回像素即可,因此参数量和计算量都控制得很低。
“遮挡默写”做得多了,保安对“前后剧情应该怎么衔接”的直觉越来越准——这正是掩码重建的精髓:通过“补全”来逼迫模型理解视频内在规律。
- 掩码集合被遮挡位置的索引集合。
- 编码器只接受可见块,提取紧凑特征。
- 解码器从特征重建出被遮块的空间内容。
- 像素级损失对比重建块与原始块逐像素的差异平方。
对比学习
保安的第二项自测是“认人”:同一个顾客从正面、侧面、背面走来,画面差异巨大,但保安必须认出这是同一个人。反过来,不同顾客即便都穿着黑色外套,他也不能混淆。这背后就是“对比学习”的核心思路。
对比学习通过构造“正样本对”和“负样本对”来训练模型:正样本对是同一视频的不同增强视图(如不同裁剪、不同帧率、不同色彩抖动),负样本对则是不同视频的片段。模型被训练成“拉近正样本对的特征,推远负样本对的特征”。经过这样的训练,模型学会抓住视频中不变的辨识性特征,抛开光照、角度、着装等干扰因素。
InfoNCE 是其中最常用的损失函数。设 z₁ 和 z₂ 是正样本对的特征,z⁻ 是负样本特征,τ 是温度系数。InfoNCE 本质上是一个 (K+1) 分类问题——在包含一个正样本和 K 个负样本的集合中选出正确的正样本。温度系数 τ 越大,分布越平滑;τ 越小,对难负样本的惩罚越强,但训练越不稳定。
经过“认人”训练,保安不会因为着装变化而认错人,也不会因为场景拥挤而跟丢目标——对比学习让模型练就了一双“火眼金睛”,抓住视频中真正重要的辨识性特征。
- 特征相似度以点积衡量两个特征向量的接近程度。
- 温度缩放除以温度系数 τ,控制相似度分布的尖锐程度。
- 负样本对比项正样本相似度与所有负样本相似度之和构成分母。
- 对数损失最大化正样本被选中的概率。
时序建模
看懂了“人”,保安还要看懂“事”。他从不会把视频拆成孤零零的一帧帧去判断,而是像看连续剧一样,结合事件的起因、经过、结果。这就是“时序建模”要解决的核心问题。
时序建模是视频理解区别于图像理解的关键。动作不是静态姿态,而是一连串有先后逻辑的状态变化。例如“偷窃”这个动作,必然包含伸手、拿取、藏匿、离开等子事件,若只看中间一帧,很可能误判为“整理货架”。要建模这种时序依赖,经典方案有双流网络和 3D 卷积,当前更流行的是 Video Transformer 加时序注意力。
双流网络将输入分为“空间流”(原始 RGB 帧)和“时间流”(光流图,即像素在帧间的运动矢量),再融合两者判断动作。3D 卷积比 2D 卷积多了时间维卷积核,能同时捕获空间与时间模式。而 Transformer 通过自注意力直接建模任意两帧间的长距离依赖,其中的时序注意力公式与经典注意力一致:
保安看监控时的“上帝视角”正是时序注意力的写照——他能同时关注画面里的关键人物、关键物品和关键动作,把零散的信息编织成完整的事件脉络。
- 查询矩阵当前 token 向其他 token 发起相关性查询。
- 键值对被查询的键矩阵与取回的值矩阵。
- 缩放对齐除以 d_k 的平方根,防止点积过大导致梯度消失。
- 加权求和对 V 按注意力权重加权求和得到输出。
工程调优
保安的“自学方案”制定好了,但真正执行时需要讲究科学:训练量太大身体吃不消,练习内容太单一容易“偏科”,加班太久效率反而下降。训练视频模型同样需要工程调优。
自监督视频预训练的工作量远大于普通图像任务,需要从数据增强、混合精度、并行策略和超参数等多维度入手。数据增强策略上,常用随机裁剪、时间随机采样、色彩抖动、时间翻转等,让模型看到更丰富的“训练场景”。这相当于让保安在白天、夜晚、雨天、不同货架区域反复巡逻,提升适应能力。
训练效率方面,多卡分布式训练配合梯度累积可突破单卡显存上限;混合精度(BF16/FP16)能显著降低显存占用并加速计算。超参数调节中,学习率会随 batch size 变化而需要同步调整——通常遵循线性缩放的近似规则,放大 batch 时按比例调大学习率,缩小 batch 时保守降低学习率。
调优工作就像给保安科学排班:数据增强是“多场景轮岗”,混合精度是“高效工作法”,学习率调整则是“根据训练强度调整考核难度”。唯有合理调度,模型才能在有限算力下快速成长。
- 基准学习率原配置下验证有效的基础学习率值。
- 批大小比例新 batch 与原 batch 的比值,反映训练规模变化。
- 平方根缩放用平方根曲线平滑调整学习率,避免变化过猛。
评估与部署
自学成才的保安终于迎来了“上岗考核”。考核会用统一的评分标准(基准数据集),检验他能不能准确识别各种动作;通过考核后,他还要在真实岗位上持续工作并接受监督。这正对应自监督视频模型的评估与部署。
视频自监督预训练模型性能的评估,通常先冻结或微调后在基准数据集上评测。常用基准包括 Kinetics-400(涵盖 400 类日常动作)、UCF101(101 类 YouTube 视频动作)、Something-Something v2(强调手与物体的时序交互)等。下游任务有动作识别、时序动作定位、视频检索等,需要根据业务场景选择合适的评测协议。
部署环节需要考虑实际约束:模型要在边缘设备(如摄像头端)实时推理,需要做轻量化处理,如知识蒸馏、通道剪枝、TensorRT 量化加速等。上线后的运行监控同样重要——持续跟踪模型推理时延、吞吐量以及在新增样本上的漂移情况,及时触发再训练。最常用的评估指标是 Top-1 准确率:
考核达标只是起点。真正能干的保安懂得在实践中持续积累经验,一旦发现“可疑动作”判断失准,就及时复盘再训练——部署和评估同样是一个持续迭代的闭环。
- 命中样本数预测概率最大的类别与真实标签一致的样本数量。
- 样本总数评测集中全部视频样本数量。
- 百分比转换乘以 100% 得到百分制指标。
AI 应用场景
短视频内容安全审核
阶段:自监督预训练 + 下游动作识别微调
解决的问题:短视频平台每天新增数千万条视频,人工审核无法逐条看完。传统监督方案需要大量人工标注动作类别,成本高且跟不上新风险形态;自监督预训练模型从海量无标注视频中先学到通用时空表示,再配合少量标注做微调,能快速识别危险动作、暴力行为、违规搬运等风险。
具体案例:某直播平台收集了百万小时无标注的直播录像,用掩码重建 + 对比学习混合策略完成预训练,随后仅用数千条标注样本微调,便上线了“危险动作实时识别”系统,将违规行为发现时效从小时级缩短到秒级。
体育赛事智能分析
阶段:对比学习 + 时序建模
解决的问题:传统体育视频分析依赖逐帧关键点标注,一场比赛的成本高达数万元,且难以覆盖所有运动员。自监督对比学习让模型先学会“辨认同一个动作在不同视角下的共性”,再结合时序建模理解动作的起承转合,大幅降低对标注的依赖。
具体案例:某篮球赛事分析系统使用自监督预训练的视频表示模型,自动识别球员的投篮、传球、突破、犯规等动作事件,并统计跑动距离与战术配合;在只标注了 10% 比赛视频的情况下,事件识别准确率仍超过 90%。
工业产线异常检测
阶段:掩码重建 + 重建误差异常判定
解决的问题:工厂车间的异常事件(如设备故障、工人危险动作)极其罕见,难以收集足够多的正样本做监督训练。掩码重建模型先学习“正常运转的视频规律”——如果一段新视频的重建误差明显偏大,说明它偏离了正常模式,很可能发生了异常。
具体案例:某制造企业将自监督掩码重建模型部署在产线监控端,用正常生产视频完成预训练,上线后成功在 0.5 秒内检测出传送带卡料、机械臂越界等异常事件,误报率控制在 3% 以内。
Python 演示
import numpy as np def make_clip(seed, length=8, size=16): """Generate a synthetic video clip: a block moves diagonally.""" rng = np.random.RandomState(seed) clip = np.zeros((length, size, size), dtype=np.float32) for t in range(length): y = int(2 + (size - 4) * t / (length - 1)) x = int(2 + (size - 4) * (1 - t / (length - 1))) clip[t, y:y + 2, x:x + 2] = 1.0 return clip def augment(clip, rng): """Video augmentation: add noise + random time shift.""" out = clip.copy() out += rng.normal(0, 0.05, clip.shape).astype(np.float32) return np.roll(out, rng.randint(-1, 2), axis=0) class Projector: """Linear projector: flatten video -> low-dim feature.""" def __init__(self, in_dim, out_dim, seed=0): rng = np.random.RandomState(seed) self.W = rng.normal(0, 0.02, (out_dim, in_dim)).astype(np.float32) self.b = np.zeros(out_dim, dtype=np.float32) def forward(self, x): return self.W @ x + self.b def update(self, grad_w, grad_b, lr=0.1): self.W -= lr * grad_w self.b -= lr * grad_b def infonce_loss(z1, z2, temp=0.3): """ InfoNCE loss: z1 and z2 with same index form positive pairs. All other samples in the batch are treated as negatives. Return loss and gradient w.r.t. z1. """ batch = z1.shape[0] s = z1 @ z2.T / temp p = np.exp(s - s.max(axis=1, keepdims=True)) p = p / p.sum(axis=1, keepdims=True) loss = -np.log(p[np.arange(batch), np.arange(batch)]).mean() neg = p @ z2 grad_z1 = -(z2 - neg) / (temp * batch) return loss, grad_z1 def main(): # 构造 8 段合成视频, 每段是小方块的简单运动 clips = [make_clip(i) for i in range(8)] flat = np.stack([c.reshape(-1) for c in clips]) model = Projector(flat.shape[1], 32) rng = np.random.RandomState(42) for step in range(150): # 对同一批视频做两次随机增强, 构成正样本对 x1 = np.stack([augment(c, rng).reshape(-1) for c in clips]) x2 = np.stack([augment(c, rng).reshape(-1) for c in clips]) z1 = model.forward(x1) z2 = model.forward(x2) loss, grad_z1 = infonce_loss(z1, z2) # 把对 z1 的梯度传到线性层参数 grad_w = grad_z1.T @ x1 / x1.shape[0] grad_b = grad_z1.mean(axis=0) model.update(grad_w, grad_b) if step % 20 == 0: print("step %3d loss=%.4f" % (step, loss)) if __name__ == "__main__": # 脚本入口: 直接运行时执行训练 main()
clip = np.zeros((length, size, size), dtype=np.float32)先分配视频张量空间:8 帧 × 16 × 16。clip[t, y:y + 2, x:x + 2] = 1.0在每帧的小方块位置填入 1,形成运动轨迹。out += rng.normal(0, 0.05, clip.shape).astype(np.float32)添加高斯噪声,模拟拍摄干扰。return np.roll(out, rng.randint(-1, 2), axis=0)沿时间轴随机平移,模拟帧率抖动。self.W = rng.normal(0, 0.02, (out_dim, in_dim)).astype(np.float32)初始化投影矩阵,把视频特征压到 32 维。s = z1 @ z2.T / temp计算批次内所有样本对的相似度矩阵。p = np.exp(s - s.max(axis=1, keepdims=True))减去行最大值,防止指数溢出。loss = -np.log(p[np.arange(batch), np.arange(batch)]).mean()取对角线正样本对的交叉熵作为 InfoNCE 损失。grad_z1 = -(z2 - neg) / (temp * batch)梯度中正样本被拉近、负样本被推远。model.update(grad_w, grad_b)用梯度更新投影矩阵,完成一步学习。
常见误区
误区自监督学习就是“丢进去不用管”——没有人工标注,也没有人工设计,模型自己就能学会一切。
正解自监督确实不需要人工标注,但仍需要工程师精心设计“借口任务”、数据增强策略、网络结构和超参数。实习保安虽然自学成才,但“给自己出什么题、怎么检验答案”这套学习大纲是店长(工程师)设计的。模型学到什么程度,很大程度上取决于这些设计选择。
为何常见:“自监督”这个名字容易让人误以为“全自动”,忽略了背后的任务设计和工程调优。
误区VideoMAE 这类模型就好比视频修复工具,目标是学会补全画面的像素,提升画质。
正解掩码重建的“重建”只是手段,不是目的。模型的真正目标是通过补全任务被迫理解视频的高层语义与时空上下文——保安通过“遮挡默写”练的是观察力和推理力,而不是练字。实践中,重建损失常在特征空间或简单的像素空间计算,解码器设计得很轻量,就是为了防止模型把精力浪费在“画质”上。
为何常见:从“重建”的字面意思出发,容易把它与图像修复、超分辨率等生成任务混淆。
误区处理视频就必须用 3D 卷积,3D 卷积在基准上分数更高,所以一定比 2D 方案更好。
正解3D 卷积参数量和计算量显著更大,在小数据集上容易过拟合。实际工程中,双流 2D 网络、2D 卷积加时序模块(如 TSM)在效果和效率的平衡上往往更优。选型要看数据规模、算力约束和延迟要求,不能只看基准分数。
为何常见:初学者看论文时注意到 3D 模型霸榜,容易得出“维度越高越强”的简单结论,忽视了数据与资源的现实约束。
误区既然自监督预训练模型已经很“通用”了,拿到下游任务直接输入视频就能输出动作标签。
正解预训练模型学到的是通用时空特征,但下游任务的类别体系、数据分布与预训练任务不同,必须用少量标注数据做微调,或至少训练一个分类头。就像实习保安看懂了“人在做什么”,但要准确回答“这是盗窃还是打架”,还需要店长带他熟悉具体的判断标准。
为何常见:预训练模型“零样本也能用”的宣传让很多人忽略了适配层和微调的必要性。
误区InfoNCE 公式里分母是负样本集合的求和,那负样本越多,模型区分能力越强,所以无脑堆负样本就行。
正解负样本需要“足够且有区分度”,但并非越多越好。负样本过多会带来显存压力和训练不稳定问题,而且简单负样本数量增加对提升作用有限;更重要的是负样本的构造质量——好的负样本应能让模型学到“细粒度”的区分能力。
为何常见:InfoNCE 分母随负样本数增加,直观上让人以为“数量=质量”,忽略了难负样本挖掘和计算成本的权衡。
面试题
Q1. 自监督视频表示学习最核心的目标是什么?
- A.让模型学会标注视频动作
- B.从无标签视频中学习通用表示← 正确答案
- C.替代所有传统监督学习方法
- D.压缩视频文件降低存储体积
答案:B。自监督视频表示学习的核心目标是从大规模未标注视频中学习通用的时空特征表示,之后再通过微调迁移到下游任务。A 是下游任务目标,C 过于绝对,D 与表示学习无直接关系。
Q2. 视频掩码重建中的“掩码”指的是什么?
- A.对视频画面执行模糊处理
- B.随机遮挡输入视频的部分内容← 正确答案
- C.对视频帧执行裁剪与缩放
- D.把彩色视频转换成灰度图
答案:B。掩码重建中,“掩码”意为按策略盖住视频的部分小块,让模型基于可见内容预测被遮挡部分。A 的模糊处理没有“盖住”,C 的裁剪缩放丢弃了内容,D 的灰度化只是颜色变换,都不是掩码操作的核心。
Q3. 视频动作识别评测中 Top-1 准确率的含义是?
- A.预测第一名类别的正确率← 正确答案
- B.预测前五名含正确类别的比例
- C.模型输出各类别概率之和
- D.视频帧被正确分类的比例
答案:A。Top-1 准确率指模型预测概率最大的类别与真实标签一致的样本占比。B 是 Top-5 指标,C 本身恒为 1 没有意义,D 描述的是帧级指标而非视频级评测。
Q4. 对比学习中“正样本对”通常指的是?
- A.两段标签完全相同的视频片段
- B.同一视频的不同增强视图← 正确答案
- C.两段内容完全一致的视频
- D.不同时间拍摄的无关片段
答案:B。正样本对是同一视频经过不同数据增强(裁剪、颜色抖动、帧采样等)后得到的两个视图,模型学习让它们的特征靠近。A 标签相同未必内容相同,C 没有增强变化,D 是负样本。
Q5. InfoNCE 损失的主要作用是什么?
- A.让所有样本特征趋于一致
- B.拉近正样本对并推远负样本对← 正确答案
- C.防止模型在训练中过拟合
- D.降低计算的复杂度与内存
答案:B。InfoNCE 在“1 个正样本 + K 个负样本”中选出正样本,等价于最大化正样本相似度、最小化负样本相似度。A 会让特征失去区分度,C 与正则化无关,D 也与计算开销无关。
Q6. 单 GPU 显存不足时最直接有效的做法是?
- A.增大训练批次大小
- B.混合精度与梯度累积← 正确答案
- C.增加采样视频帧数
- D.调高学习率加速收敛
答案:B。混合精度将部分计算降到 FP16/BF16,显存占用几乎减半;梯度累积在不增大 batch 的前提下等效扩大优化步。A 和 C 都会加剧显存压力,D 不影响显存占用。
Q7. 预训练模型用于下游动作识别时,正确做法是?
- A.冻结所有层直接当特征提取器
- B.用少量标注数据微调模型← 正确答案
- C.完全重新从零开始训练模型
- D.丢弃预训练权重只保留结构
答案:B。预训练模型学到的是通用表示,下游任务通常用少量标注数据微调,让模型适配目标类别体系。A 可以作为一种基线但效果通常弱于微调,C 浪费了预训练成果,D 相当于放弃预训练。
Q8. 以下哪些是视频自监督学习的常见借口任务?
- A.掩码重建任务← 正确答案
- B.未来帧预测任务← 正确答案
- C.对比学习任务← 正确答案
- D.人工标注动作类别
答案:ABC。常见的视频自监督借口任务包括掩码重建(遮住内容让模型预测)、未来帧预测(根据过去推未来)和对比学习(区分正负样本),三者都不依赖人工标注。D 是监督学习的做法。
Q9. 双流网络中“时间流”通常输入什么?
- A.原始 RGB 视频帧序列
- B.光流特征图序列← 正确答案
- C.音频频谱图特征
- D.深度估计特征图
答案:B。双流网络的空间流输入单帧 RGB 图像,负责外观与物体识别;时间流输入多帧光流图,负责捕获像素运动模式。光流是时间流的标准输入,因此选 B。
Q10. 关于 VideoMAE 掩码自编码器,下列说法正确的是?
- A.采用极高掩码比例← 正确答案
- B.解码器设计轻量← 正确答案
- C.在像素空间完成重建← 正确答案
- D.由编码器直接重建掩码块
答案:ABC。VideoMAE 将视频切块后以极高比例(如 90%)随机掩码,只将可见块送入编码器,再让轻量解码器在像素空间重建被遮块。D 错误——重建由解码器完成,编码器只负责提取可见块特征。
Q11. 自监督视频预训练中,哪些措施能有效提升下游动作识别性能?
- A.丰富时间维度的数据增强← 正确答案
- B.使用掩码重建预训练模型← 正确答案
- C.仅增加特征维度而不增加数据
- D.在下游任务上轻量微调← 正确答案
答案:ABD。丰富时间维度的数据增强(如帧采样抖动、时序翻转)让模型对时间变化更鲁棒;掩码重建预训练能学到较强的时空先验;下游微调将通用表示适配到具体动作类别。C 只增加模型容量而不增加数据,容易过拟合,不能有效提升性能。