模型真正学习的对象
到现在你已经知道,模型是一个带有可调参数的函数,而监督学习通过观察样本来调整这些参数。但样本从哪来、又由什么构成?这正是本阶梯要讲的内容。[[dataset|数据集]]说白了就是一堆样本的集合——电子表格里的一行行记录、文件夹里的一张张照片、数据库里的一条条客户资料。模型永远看不到真实世界,它看到的只有数据集。所以对模型来说,数据集就等于整个世界。
每一条单独的记录叫做一个样本(也叫示例、实例或一行)。一个样本可能是一封邮件、一套房源信息,或一张猫的照片。数据集不过是把许许多多这样的样本堆在一起。而真正有意思的问题永远是同一个:每个样本说了些什么,我们又想从中预测出什么?
特征与标签:输入和答案
在每个样本内部,我们把信息分成两种角色。[[feature|特征]]是输入——也就是模型被允许查看的、可测量、可描述的事实。对一套房子来说,特征可能是面积、卧室数量和所在小区。[[label|标签]]则是我们希望模型给出的答案——对这套房子而言,也许就是它的成交价。特征送进去,预测则试图去匹配应当输出的标签。
# One labeled example: features -> label
features = {
"sqft": 1200,
"bedrooms": 2,
"neighborhood": "riverside"
}
label = 450000 # the sale price we want to predict
# A dataset is just many rows like this
dataset = [(features_1, label_1), (features_2, label_2), ...]并不是每个数据集都带标签。在监督学习中,每个样本都附有标签,而获得这些标签往往意味着花钱雇人做[[data-annotation|标注]]——一张张点过几千张图、标出哪些含有肿瘤,或把评论一条条评为正面或负面。这种标注既慢又贵,这也正是无标签数据为何要丰富得多的原因。相比之下,挑选好的特征则是特征工程的手艺,本阶梯后面的指南会专门讲。
结构化数据与非结构化数据
数据大体上有两种形态。结构化数据本就住在整齐的表格里:每一列含义清晰,比如年龄、价格或国家。银行的交易流水、医院的病历就是结构化的——每一列都是现成的特征。非结构化数据则是除此之外的一切:纯文本、图像、音频、视频。一张照片不过是一格格像素,一条推文不过是一串字符。没有任何带标签的列来告诉模型「这块是天空」或「这个词是动词」。
这一区分解释了很多 AI 历史。决策树这类经典方法在整洁的结构化表格上如鱼得水。而深度学习之所以引起轰动,正是因为它学会了直接从非结构化的像素和文本中提取有用特征——这本是过去要靠人手工去做的活。但「非结构化」从不意味着「不用费功夫」,它只是意味着结构被藏了起来,总得有人把它哄出来。
垃圾进,垃圾出
这就是这个领域里最诚实的一条定律:模型的好坏上限,由它学习的数据决定。如果你有一半的房价输错了,或者你的猫照片其实全来自同一个品种,那再聪明的架构也救不了你。模型会忠实地学到数据中的一切规律——包括其中的错误。这就是垃圾进、垃圾出,它不是一句套话,而是真实 AI 工作里每天都在上演的现实。
这正是为什么现实中大量精力都花在数据清洗上:修正错别字、去掉重复项、决定缺失值怎么处理、抓出那条把年龄写成 999 的记录。这活儿不起眼,几乎从不会出现在演示视频里,却往往占了整个工作量的八成。本阶梯后面的指南会深入那些更隐蔽的陷阱——数据泄漏、类别失衡、偏见——它们能在数据「看起来」很干净时照样毁掉一个模型。
以数据为中心的 AI:别再调模型了
多年来,一旦模型表现不佳,人们的本能反应就是去换一个更花哨的架构。[[data-centric-ai|以数据为中心的 AI]]则是如今已成主流的反向思路:把模型固定住,转而去改进数据。在许多真实项目里,重新标注那 200 个让模型犯迷糊的样本,或者修正前后不一致的标注规范,带来的提升远超过换一个更大的网络。撬动效果的杠杆,往往藏在数据里,而不在模型里。
- 亲手看你的数据。真的去读样本、去看图片——大多数问题在训练之前,肉眼就能发现。
- 找出模型出错的地方,再去逐一检查那些样本——是标签错了,还是它本身就模棱两可?
- 去修正标签和标注规范,而不只是改那几行问题数据;标签一致比标签完美更重要。
- 用改进后的数据重新训练再比较——让数据的变化(而非直觉)来判断你是否真的有帮助。
所以当你继续往上爬完这一阶梯时,记住一个画面:模型是人人称羡的引擎,但数据才是燃料。再了不起的引擎,烧着脏燃料也会咳喘、熄火——宣传册上写多大马力都没用。接下来的指南会一步步教你,如何把这份燃料提炼干净。