最近和女儿一起读一本关于设计的英文书 Universal Principles of Design,颇有收获。书中有两节讲偏见,我把学到的知识分享一下。
偏见无所不在。不管一个人自诩多理性,在他/她没有意识到的地方依然会存在对人和事物的偏见。这与道德、智力或知识无关,很多时候是一种生理或文化现象。
一个常见的偏见是以貌取人。人们通常会觉得外貌吸引人的人更聪明、能干、有道德,适合交往。这种偏见既有生理学基础,也有环境因素。
从生理学角度说,身体健康、生育能力健全的人通常看上去会更有吸引力。研究表明,给 2 到 6 个月的婴儿看人类照片时,他们看俊男美女的时间要比看相貌平平的人的时间更长。这与照片中人物的性别、年龄或种族均无关。
在另一个实验里,研究者给受试对象看一组人物照片,每张照片都配有人物职业介绍。研究发现:女性受试者对长相普通但从事高薪行业的男性和长相英俊但收入中等的男性具有相似的喜好程度(钱能补矬是良训),而男性受试者永远也不会偏好那些长相普通的女性,无论她们的经济状况如何(自古英雄爱美女,不是英雄也爱美女)。这说明相貌偏见中包含环境因素。
讲一个小故事:1960 年,尼克松和肯尼迪进行了一场总统选举辩论。当时尼克松发着烧,穿着浅色西装且没有化妆,这让他原本苍白的面孔显得更加惨白。而肯尼迪穿着深色西装并化了妆,还在辩论前做了演习,颜值、台风胜出。结果显示:从收音机收听这次辩论的人,多数认为尼克松赢得了辩论;而在电视机前观看辩论的人,多数则认为胜者是肯尼迪。
这个现象由一些科学家写成论文《颜值即正义》(What Is Beautiful Is Good),发表在 1972 年的一期《个性和社会心理学研究》杂志上。
另一个常见偏见是人们通常会觉得娃娃脸更头脑简单、无助、诚实。这种偏见跨越了文化、年龄,甚至不同的哺乳动物种类。
举个例子:早产儿通常缺乏那些娃娃脸的特征。比如,他们的眼睛常常是闭着的,而不是睁得大大的;他们的头也不像足月的婴儿那么饱满圆润。所以,他们往往得不到成年人的喜爱,以至于早产儿比足月婴儿被虐待的可能性要足足高三倍。
长着一张娃娃脸在社会中是一把双刃剑:一方面他们更容易得到别人帮助;另一方面,在需要专业知识和解决冲突的场合,他们更难获得信任(娃娃脸难升职)。
当娃娃脸被控犯罪时,如果他们被指控的是故意犯罪,他们将更容易被免罪。但如果他们被指控的是疏忽导致的犯罪,他们就会更容易被定罪。如果一个长着娃娃脸的被告认罪,量刑会比长着成熟面孔的被告要重。法官潜意识里觉得:“想不到看上去人畜无害的你居然犯罪,岂有此理哇呀呀呀呀,严惩不贷。”
总之,偏见是人类在进化过程中的产物,在基因里就已经写好了。如果没有有意识的努力,偏见难以破除。
~~~~
看到这里,你可能怀疑自己点错了文章。不是说 AI 的用法吗?怎么扯了半天偏见?
别急,很快你就会发现这一切都是有联系的。
偏见的本质是以偏概全。在面对一个复杂的判断任务时,我们会根据部分信息抄捷径,快速做出结论。因为少了对全部信息的通盘考虑,这种做法自然可能出错,但好处是节省了计算资源。这是一种为了生存而不得不做的妥协。
有一种偏见叫“文如其人”:文字写得好的人,我们会觉得他们的头脑更清醒,意见也更经得住考验。这种观点自然经不起推敲。不少头脑空空的人说起话来像模像样,颇能唬人,等你细品,才发现他们说了半天都是废话。但在大多数情况下,文如其人是成立的,所以我们会不自觉地应用它。
具体到工作中,我们在审查同事的设计和代码时,如果感觉对方表达清楚、看上去煞有其事,潜意识里就会认为这件事靠谱。在时间紧、任务重的情况下,我们不可能把每个细节都一一核对,很可能就放行了。
经过反复训练,一个有经验的工程师已经调整好了他的大脑阈值,知道什么写作水平的设计和代码大致是靠谱的。这也算是贝叶斯定理(Bayes' Theorem)的一个经典应用吧。
什么是贝叶斯定理?它是一种计算在某些已知条件下某件事发生概率的方法。写成公式是这样的:
P(A|B) = P(A) * P(B|A) / P(B)其中:
P(A|B) - 已知事件 B 发生的情况下事件 A 发生的概率
P(A) - 事件 A 发生的概率(假定我们不知道 B 是否发生)
P(B|A) - 已知事件 A 发生的情况下事件 B 发生的概率
P(B) - 事件 B 发生的概率(假定我们不知道 A 是否发生)
贝叶斯定理有什么用?在分析概率时,人的直觉往往和真相背道而驰。贝叶斯定理可以帮助我们避免踩坑,得到更可靠的结论。
一个经典例子是疾病诊断:假设有一种检查新冠的手段(捅鼻大法)准确率高达 99%(要是某人得了新冠,这项测试阳性的概率是 99%;反之阳性概率只有 1%)。小明去商场打酱油时被现场检查,结果呈阳性。坏了,他是不是有 99% 的可能得了新冠呢?
未必。为分析方便我们用 A 代表得了新冠,B 代表检查阳性。假定我们知道 P(A) = 0.1%(有千分之一的人得了新冠)。根据上面说的情况,我们还知道:
P(B) = 99.9%*1% + 0.1%*99% ≈1%(随便找一个人检查,有 1% 的概率阳性)
P(B|A) = 99%(新冠病人中有 99% 会检查出阳性)
现在我们来算一算:已知小明测出了阳性,那么他得新冠的概率实际是 P(A|B) = P(A) * P(B|A) / P(B) ≈ 0.1% * 99% / 1% ≈ 10%。
也就是说小明十有八九不是新冠。所以,我们在对小明强制鼻饲双黄连之前,最好还是多做一些其它检查。
为什么这个结论会跟直觉相反?贝叶斯真的没有算错吗?
没错。虽然得新冠跟阳性这两个事件强相关,我们还得考虑新冠在总人群中发病率很低这个事实:健康人群查出阳性的概率是很低,可架不住他们总数高啊。假设某市有一百万人,按千分之一的发病率估算,有 1000 个新冠病人和 999,000 个健康人。要是逐个普查,前者中会查出 990 个阳性,而后者中阳性人数会高达 9,990 个,远超前者。所以,仅凭这一项检查是不足以得出肯定结论的。
因为贝叶斯定理对诊断疾病如此重要,无论在中国还是美国,它都是医学院的必考科目。不懂贝叶斯的医生是好的刽子手。下次你看家庭医生,不妨拿这道题考考他。要是答错了,建议你拔腿就跑。
和大部分数学定理不一样,这个公式的推导出奇的简单。要是你考试的时候忘了,分分钟可以现推:
A 和 B 同时发生的概率 P(AB) 怎么算?有两种办法:
P(AB) = P(A) * P(B|A) (A 发生的概率乘以在 A 发生的情况下 B 发生的概率)。
因为 A 和 B 的地位是对等的,我们也可以得出结论 P(AB) = P(B) * P(A|B) (B 发生的概率乘以在 B 发生的情况下 A 发生的概率)。
所以,P(B) * P(A|B) = P(A) * P(B|A)。两边同时除以 P(B),就得到了贝叶斯公式 P(A|B) = P(A) * P(B|A) / P(B)。
现在我们用贝叶斯定理分析一下 AI 对设计审查的影响:
我们用 A 代表设计靠谱,B 代表设计表述清晰。一个人类审查者看到一个表述清楚的设计,很容易就会想:按我的经验这东西有 90% 的概率靠谱。也就是说 P(A|B) = 90%。
然而,这个估计是基于旧的先验概率。我们看看公式 P(A|B) = P(A) * P(B|A) / P(B) 右边的几个因子在 AI 的介入下会如何变化:
P(A) 没有多少变化(假定 AI 的设计水平跟人类差不多)。
P(B|A) 也不会有大的变化(靠谱的设计通常表示也表述清楚 - 因为作者真正把问题想通了)。
因为 AI 擅长把不正确的东西也写得冠冕堂皇、振振有辞,P(B) 大幅度上升了。
分子没怎么变,分母变大了,学过小学数学的朋友都知道结果变小了。如果人类写的表述清晰的设计有 90% 的概率靠谱,那么 AI 写的表述清晰的设计可能只有 70% 的概率靠谱。
所以,有了 AI,我们需要重新调整自己的审查阈值,免受长期形成的偏见影响,对 AI 写出来的东西要格外警惕。如果不意识到这一点,就会开发出无法维护的代码。AI 写码一时爽,维护时节想骂娘。
~~~~
提高警惕又带来了一个新问题:人类的劳动强度不但没有降低,反而提高了。
以前审查一段代码,你可能只需要使出六成功力;现在看同样体量的代码,因为担心作者用了 AI 会一本正经地胡说八道,你必须使出八成甚至九成的功力。这样自然会耗费更多精力。这就是为什么很多人用了 AI 之后,不但没有感到轻松,反而觉得更累了。
不仅于此,大量用 AI 的另一个结果是代码量上升了。以前一个人一天可能只写两个 CL(Change List),现在有了 AI,他一天能写 20 个。比如你们组有一个猪队友,以前他的破坏力有限,充其量消耗掉你 20% 的精力。现在有了 AI 分身,一个变十个,你是不是就招架不住了?人类审查员需要审查的 CL 数量变多了,单个 CL 需要付出的精力也更多了,人就成了瓶颈。

这可如何是好?答案当然不是限制大家对 AI 的使用量,而是用魔法打败魔法。
既然 AI 会写代码,那么它也可以学会审查代码。虽然我们不能完全相信 AI 审查的结果,但至少可以让它当第一道防线,帮我们先把一些初级的错误过滤掉。让两个 agents 互掐,可以大大减少人类审查员写反馈的工作量。
这样,当一个 CL 到达人类审查员那里时,已经经过了 AI 的审查打磨,质量已经有一定保证,能挑出的刺不多了,审查的工作量也就随之减少。人类审查员就可以把精力放在真正高端的、AI 看不见的那些问题上面。
仅仅如此还是不够的。如果你是一个项目的技术带头人,现在的工作重点应该转变了:从贡献设计和贡献代码,逐渐转向贡献 Agent Harness 和防御机制。你的工作重点应该是防猪人类和猪 AI 联手作乱。
具体来说,你要花更多时间改进项目的 agent skills 和内部 API,让后者变得更容易用对、更难用错。如果用错了,最好是连编译都不能通过,或者在运行时能够自动发现。此外,还要保证系统有足够的测试覆盖。
这两样东西加持,相当于系统有自动把关,可以大大提高提交进代码库的代码质量。
那么多 CL 你是看不过来的。必须做到大部分 CL 不用亲自看你也能睡得香,项目才算是走上正轨了。有了这样的神功附体,我们在审查代码的时候就可以放轻松一些。
凡是靠人做的事情都会成为瓶颈。要消除这种瓶颈,只要是可以描述成算法,有一定操作流程的任务,都要实现自动化。人应该把更多的时间花在思考更高阶的问题上。
比如:如何 PUA AI 效果更好?
0
推荐


京公网安备 11010502034662号 