算法这个词,被你想复杂了
你大概听过太多次「算法」这个词,配着一堆吓人的符号、希腊字母、还有「深度」「神经」这类唬人的形容词。于是你默认:这是数学家的地盘,跟一个不懂代码的人没关系。
这一章我要拆掉这个误会。我不会推一个公式,但我保证:读完之后,你能拿常识判断别人给你的模型「靠不靠谱」。这比会推公式有用得多——公司里会推公式的人不缺,缺的是能一眼看出「这轮子不圆」的人。
先给你一个贯穿全章的类比,记住它,后面所有概念都挂在这上面:
我在纸上点了一堆点,不告诉你它们背后的规律。你的任务是描一条线,尽量穿过这些点。以后我随便说一个横坐标,你看着你描的线,就能报出纵坐标。
整个机器学习,本质上就是这件事。剩下的全是细节。
所谓模型,就是从数据里找一个函数
算法 / 模型:说白了,就是一个从「输入」到「输出」的转换规则。你给它一个输入,它吐给你一个输出。判断螺丝松没松:输入是这颗螺丝的拧紧扭矩,输出是「松」或「紧」。这个「扭矩 → 松/紧」的规则,就是模型。
关键在于:这个规则不是人写死的,是机器从例子里自己找出来的。
传统写代码,是你把规则想清楚,一条条 if 敲进去:扭矩小于 8 就是松。可现实里规律没这么干脆——同一颗螺丝,材质、温度、垫片厚度都会让那个界限飘。你要写的 if 越来越多,最后自己都绕晕。
机器学习换了个思路:你别去想规则了,你只管把大量「输入配上正确答案」的例子喂给它,让它自己去凑那条规律。这就是开头那个描线的游戏——你不告诉它函数,你只给它一堆点。
你在中学学过函数:y = 2x + 1,给个 x 算个 y。机器学习就是反过来——不给你公式,只给你一堆 (x, y) 的对子,让机器把那个公式猜出来。所以你以后听到「模型」,脑子里就换成「一个被猜出来的函数」,八九不离十。
训练:反复拧旋钮,直到对准
训练:就是机器「凑那条线」的过程。它先瞎画一条,看看离你给的点差多远,然后往差得少的方向挪一点,再看,再挪……如此反复成千上万次,直到那条线尽量贴合所有点。
想象你在拧老式收音机的旋钮找电台:一开始全是沙沙的杂音,你慢慢拧,声音越来越清楚,直到最清楚那一刻你停手。训练就是这样,只不过要拧的旋钮成千上万个,机器自己拧,你不用管。
你作为 PM 要知道的只有一件事:训练需要「带正确答案」的例子。想让模型认得出缺陷,你得先有一堆图片,每张都标好「这是好的」「这是坏的」。这些标注从哪来、准不准、够不够——这才是你该操心的,不是旋钮怎么拧。第 9、10 章会反复回到这件事上。
特征:你喂给它的是不是「有用的线索」
特征:你拿来判断的那些线索。判断螺丝松没松,你可以看它的图像像素,也可以看拧紧时的扭矩曲线,还可以听拧的时候有没有异响。每一样都是一个特征。
这里有个反直觉、但极其重要的结论:
选对线索,比换一个更高级的模型有用得多。
打个比方。你想判断西瓜甜不甜。如果给你的线索是「西瓜的重量」,那你再聪明也判断不准——重量跟甜度关系不大。可如果给你的线索是「敲一下的声音」和「藤蔓的干枯程度」,一个普通人都能判断个八九不离十。线索本身没带信息,再牛的模型也变不出信息来。
所以当有人跟你说「模型效果不好,我们换个更深的网络试试」,你要会追问一句:我们喂给它的线索,本身够不够判断这件事? 很多时候,答案是不够——螺丝松紧的关键信息在扭矩里,你却只喂了张模糊的照片。换十个模型也没用。这是第 9、10 章里最常见的坑,先在这里给你打个预防针。
过拟合:只会做原题的学生
现在讲全章最重要的一个词,也是你未来听汇报时最该警惕的一个词。
过拟合:模型把训练用的那批例子背得太死,连里面的噪声、巧合都当成规律背了下来。结果它在见过的题上满分,一换新题就傻眼。
回到描线的游戏。我给你 20 个点,其中有几个因为我手抖,点歪了。一个「刚好」的做法是描一条平滑的线,大方向对,个别歪点就让它歪着。可你要是较真,非要让线穿过每一个点,就得画出一条扭来扭去、上蹿下跳的鬼画符。这条鬼画符在这 20 个点上「一分不差」,可我再给你第 21 个点,它离谱得没边。
那条扭曲的线,就是过拟合。它不是在学规律,是在死记硬背。
换个人话:过拟合就是「只会做原题、不会变通的学生」。平时刷过的题门门满分,一到考场遇上新题型就抓瞎。你身边一定有这种同学。模型也会这样,而且比人更容易这样。
为什么说它是头号敌人?因为它会伪装成成功。团队拿训练数据一测,指标漂亮得不得了,皆大欢喜。可这漂亮全是背出来的,一上真实产线就崩。等你发现,钱和时间都花出去了。第 14 章「AI 骗你时你怎么知道」,源头就在这里。
怎么防?把考卷藏起来一部分
办法朴素得让你意外:把你的例子分成两堆。一堆给机器训练(平时做的练习册),另一堆藏起来,训练时绝对不给它看(期末考卷)。训练完,再拿这堆没见过的去考它。
在练习册上得高分不算数——那可能是背的。只有在藏起来的考卷上也得高分,才说明它是真学会了。你作为 PM,验收时一定要问一句:这个成绩,是在模型见过的数据上测的,还是没见过的? 这一句话,能戳穿一大半虚假的漂亮。
泛化:能在没见过的数据上管用,才是目的
泛化:模型在从没见过的新数据上,也一样管用的能力。这才是我们做模型的真正目的——你要它上产线判断的,永远是它没见过的、下一颗螺丝、下一块工件。
过拟合和泛化是一对冤家:背得越死(过拟合越重),换到新数据上越废(泛化越差)。你追求的从来不是「在旧数据上多完美」,而是「在新数据上多可靠」。记住这句,你就抓住了机器学习的牛鼻子。
「准确率 99%」可能是在骗你
最后这一节,为整个工业场景埋一根最粗的线。请务必读进去。
假设产线上 1000 个零件,只有 10 个是坏的。现在有个模型,号称准确率 99%。听起来棒极了对吧?
我告诉你一个作弊的模型,它也能拿到 99%:不管来什么,一律说「好」。 1000 个里 990 个真的好,它全说对了,990÷1000 = 99%。可它一个坏的都没抓到——而抓坏的,恰恰是你装这套设备的唯一理由。
当好坏比例悬殊时,「准确率」这个词几乎没有意义。它会把一个彻底没用的模型,包装成一个优等生。
所以工业上真正要看的是另外两个数,它们盯着「坏的那 10 个」:
- 查全率(召回,英文 recall):真正坏的那 10 个里,模型抓出来几个?抓出 8 个,查全率就是 80%。漏网了几个坏的,看这个。(你去查资料时它常被写成「召回率」或 recall,是同一个东西。)
- 查准率(英文 precision):模型报警说「坏」的那些里,有几个是真坏?报警 20 次、真坏只有 8 个,查准率就是 40%。误伤了几个好的,看这个。
这俩通常是跷跷板,按下一头翘起另一头。你把模型调得草木皆兵、一点风吹草动就报警,坏的基本都能抓住(查全率高),但会冤枉一堆好件(查准率低)。反过来,你让它谨慎点、只在铁证如山时才报警,冤枉的少了(查准率高),可也会放跑一些坏的(查全率低)。
没有哪个更好,只有哪个更适合你的场景。这正是你 PM 该拍板、也只有你能拍板的地方:
- 做刹车片、心脏支架:一个坏的流到客户手里就是人命。宁可错杀一千,不可放过一个——查全率优先,误检多几个、多几双人工复检的手,认了。
- 做包装外观筛选:漏掉一两个瑕疵品无非退货,可你要是天天误报、让工人满车间捡「假坏件」,产线直接瘫。这时查准率更金贵。
看出来了吗?漏检和误检哪个更要命,是个业务问题,不是技术问题。 算法工程师答不了,只有懂业务的你能答。这就是你在算法这张牌桌上,最硬的那张牌。
这一章,你只要带走一句话
你不需要会造轮子。但你得会判断一个轮子圆不圆——而判断靠的是常识和对数据、对业务的理解,不是数学。
具体到能马上用的,就三个问句,未来每次听模型汇报你都掏出来:
- 喂给它的线索,本身够判断这件事吗?(特征对不对)
- 这个成绩,是在它没见过的数据上测的吗?(有没有过拟合、能不能泛化)
- 在我这个场景里,漏检和误检哪个更要命,指标是照这个来的吗?(查全还是查准)
把这三问揣兜里,第 9 章的视觉缺陷检测、第 10 章的时序异常,你就不是被工程师牵着走,而是能站着跟他们对话了。地基打好了,我们下章上手真东西。