1.我对AI的偏见
2013年我写了个微信聊天机器人,在新浪微博上小火了一把。我的认知局限性让我没想到若干年后网红如此赚钱,活该我现在还在搬砖送外卖。
那阵子心里美滋滋——这个机器人好像我小孩儿,你教它一点,它就聪明一点。当然我那帮损友最终把它教成了流氓二混子。
即便我很喜欢我的机器人,但还是在一年后亲手关了它的服务器,因为我对2013年的AI理论基础不太看好(这也是我的偏见):
计算机视觉:这个算是2013年左右,AI应用最成熟的领域吧,车牌识别、人脸识别、零件识别等等。但它的理论本质还是那些天才数学家归纳出了N种"人类视觉"的模式。你觉得人类眼睛看到的美仅仅是一堆数学公式吗?我不觉得。
商业BI:这也是2013年那会儿,AI另一个有广泛应用的领域吧。请注意,我说的是广泛应用,而不是成熟应用。说白了,在商业智能中,那些AI理论宣称的是通过"历史数据"就能"预测未来"——咱们不要去辩论"线性回归"、"聚类"的理论合理性,也不要去讨论AI书本上的"波士顿房价预测"的经典案例——百度识图很牛,它能告诉我们这什么花什么草,但有个AI预测出下一把投资个啥华为就能统治全宇宙,你看华为的大佬们敢不敢一把梭哈——人类历史真的能归纳成1个因变量有限的简单数学公式吗?
………——此处的省略号表示在2013年的我有限的认知中,我想不通AI的未来在哪里。
再后来,TensorFolow
火了、菊厂有了自己的菊厂云,我兴奋地把西瓜书翻了又翻,忽然失落了:
这些新的AI资料,似乎和我那些尘封已久的前一代的AI书籍没啥质的飞跃。
我师傅说:"人工智能就是喂狗"——模型是数学家设计好的,我们只是不断地喂数据、确认结果。
我说:"此时此刻的人工智能就是更高效地喂狗"——喂数据的手段更高级了、算力更强了、模型测试更高效了等等。
于是,我得出了个人的判断:可能又是资本割韭菜,我可不能把有限的时间投入到研究这门手艺上。
我怀着对AI深深的偏见,每天研究着我更感兴趣的JVM源码、Spring源码......直到上周六(2023年2月11日)的下午。
2.第1个故事:它不是人工智障
上周六朋友要我帮他写段代码:他想要一个能算个税的Excel,便于他们公司税务筹划。
朋友讲了半天个税咋算,工作18年也没搞懂每个月咋扣税的我依然没听懂。
作为资深码农,最烦客户讲不清楚需求(软件工程中最大的魔咒)!
第1个问题
咋办呢?我问了chatGPT第1个问题,转给朋友看,他确认回答正确:
第2个问题
接着,懒惰的我问它第2个问题:能不能把上述文字转成代码?
代码生成效果咋样?
首先,看完这段代码,我终于明白个税咋算了,感谢chatGPT。。。
然后,朋友说除了"个税起征点"要乘以期数,其它都对。。。
最后,我仔细检视并运行了它的代码:除了代码规范外,它的代码还有个性能小亮点——寻找收入分级的速算系数时用了倒查,我自己还真不会这样写。。。
第3个问题
故事没完,在Excel里写公式有点难写:个税计算要分级,会有很长的IF嵌套。
如果Google查资料+写公式+测试,我估计要1小时吧。
于是,我问了chatGPT第3个问题:
这个公式有多长呢?我把代码贴出来,大家可以评估一下自己需要多久写得出来:
=IF(A1-B1-5000<=0, 0, IF(A1-B1-5000<=36000, (A1-B1-5000)*0.03, IF(A1-B1-5000<=144000, (A1-B1-5000)*0.1-2520, IF(A1-B1-5000<=300000, (A1-B1-5000)*0.2-16920, IF(A1-B1-5000<=420000, (A1-B1-5000)*0.25-31920, IF(A1-B1-5000<=660000, (A1-B1-5000)*0.3-52920, IF(A1-B1-5000<=960000, (A1-B1-5000)*0.35-85920, (A1-B1-5000)*0.45-181920)))))))
第4个问题
这个公式只是算了一个月的个税,朋友最终想要的是1月、2月....12月的个税应缴税额。
这样就涉及你的第2行要取第1行的单元格、第3行取第2行,依此类推。
这样的公式咋写呢?
我和朋友Google了半天也没知道答案,因为我想要公式的功能要用人类的一段话表达,而搜索引擎只能输入关键字。
于是,我问chatGPT的第4个问题是人类能理解的一整段话:
通过chatGPT的回答,我知道了INDIRECT函数
。
显然,通过搜索引擎最终也能找到INDIRECT函数
,但没chatGPT这么快。
因为:
搜索引擎的底层逻辑:人类告诉它关键字,它给人类有关联的结果,人类自行分析,人类得出结论。
chatGPT的底层逻辑:人类告诉它人类语言,它自己找到有关联的结果并自行分析得出结论,人类获得结论。
这就有点意思了,难怪微软赶紧让Bing接入chatGPT,谷歌瑟瑟发抖。
至此,朋友要的Excel做完了,耗时半小时。
观点
chatGPT真不是人工智障,而是真的人工智能。对于第1个故事,我有几个观点:
(1)任务难度:简单
Excel写公式是日常、简单工作,作为人类的我们,花点时间肯定能完成。
(2)值得关注的突破点:有可能改变软件开发模式。
过去,需求传递是软件研发最大的工程成本。客户是业务专家,程序员软件专家。如果表达能力弱的客户遇上不懂业务的程序员,那么这个项目铁定黄。菊花厂各种工程方法和质量流程本质上还是对人与人的沟通成本的妥协。
未来,chatGPT可能成为客户与程序员的沟通桥梁。chatGPT与任何一个人类相比,可以认为是通才——不会开船的公交车司机不是个好程序员——chatGPT大致是这么个意思吧。
在亲身体验chatGPT之前,身边同事不屑地说:"我就不信有描述清楚需求的客户,需求描述不清chatGPT再牛逼也写不出来",逻辑如下:
在亲身体验chatGPT之后,不得不说这或许就是人类的局限性,难道人类不能变通一下吗:
(3)值得关注的突破点:一般的CRUD代码,它写的不比人类差。
比如这个故事中的Java代码,不知道菊厂工作级的程序员能否在20分钟内,理解需求+编码+一次性测过。
3.第2个故事:你值得收下我的膝盖
完成朋友的Excel,我开始写自己的技术专栏。
那天写的是Java线程和操作系统的对应关系。
这个技术问题有多深呢?
除了毕昇JDK团队的专家和我这种好奇宝宝,我猜菊厂大部分Java程序猿不会意识到这个问题,更不用说阅读对应的JVM源码。
我花了4天跟踪了JVM的相关代码,写了这篇文章《【运行时数据区】-并发编程-前置知识(4.并发编程基础)-3》。
各位读者有兴趣可以看看,应该有点复杂,于是,我开始好奇在我的专业领域,chatGPT表现如何?
第1个问题
第1个问题我问的比较笼统,chatGPT回答的也比较含糊。
看起来答案没啥问题,但是语言的二义性,我不确定chatGPT是不是瞎蒙的,于是我问了第2个问题。
第2个问题
第2个问题的回答有点惊艳:
首先,它知道不同厂家实现的JVM可能不同,所以答案最后它在强调HotSpot是这么实现的。
其次,它能精确理解
scr/share/vm/runtime/thread.cpp
这段代码的业务含义(即,这段代码在做什么事情)。
AI能理解"代码的业务含义"有多牛逼呢?
回看一下业界历史上那么多代码质量检查工具,它们可以做到静态检查、内存检查、安全检查等,能理解这段代码在干啥吗?
回到"Java线程和JVM线程的关系"这个技术问题上,JVM的启动流程有多少关键步骤呢?34步。
我花了4天时间,一边Debug、一边修正这张流程图、一边理解这段代码的业务含义,关键这还是我的专业领域:
第3个问题
我问了chatGPT很具体的问题,如果没看过JVM源码的人类,应该无法回答。
再看看chatGPT的答案:
观点
大约和chatGPT玩了1小时,这就是第2个故事。对这个故事,我的观点如下:
(1)任务难度:困难
作为人类的我,在18年每天都在敲代码积累软件知识的前提下,需要花了4天时间去分析的源代码,应该不是个简单任务。
(2)值得关注的突破点:学习速度惊人,某些领域知识达到专业级。
记得有阵子一群人吐槽菊厂考试有JVM相关的题目,属于偏题怪题。
暂不论这个人观点正确与否,至少证明这些吐槽的人类,对于JVM等编译器底层技术没有掌握和不愿了解的。
为什么呢?因为人是趋利避害和功利性的。
虽然理解编译器底层技术有助于写更好的代码,但这个知识难学且不影响每天搬砖,当然不会主动去学。
然而,chatGPT毫不费劲地做到了。
虽然,它做到的方式目前可能是机械式地"搜索它的记忆"。
虽然,它也可能在用某种AI技巧,在答案中对我进行心理暗示、情感诱导。
但,如果把chatGPT当做一种新的物种,从结果看:
它的学习速度远超人类
我擅长的领域,它的未来却不可预期:某个领域的人类专家才能做到的高级任务,它至少能装作也能完成。
4.第3个故事:我有点笑不出来
周六夜11点,忽然想到机器人学中有个算法问题,可以抽象如下:
已知机器人要走的轨迹、初始速度、最大速度、最大加速度、最大减速度。
希望算法进行路径规划和速度规划:汽车每时每刻的路径、速度and加速度。
算法的规划结果要保证汽车最快到达终点、动作丝滑。
这个算法是机器人领域的关键算法,比如波士顿机器人:
之前我对这个算法很感兴趣,断断续续也Google和图书馆查过一些论文,但仅获得了些许只言片语的信息——NURBS曲线、速度规划、路径规划。
说白了,这是个业务领域算法——这就意味着,你不是业内人士又没有明白人指路,学习效率就不会太高。
我抱着试试看的心情问了chatGPT。。。然后。。。我就一发不可收拾地和它结对编程到了凌晨4点。
第1组问题
根据我之前的线索,我问了一下chatGPT,通过它的回答,我知道了更多知识线索,我感觉我遇到了1个不错的老师:
NURBS算法:非均匀有理B样条。
算法能力:生成平滑轨迹、合理的加减速。
相关算法:S曲线速度规划
学习的方向:在计算机图形学、数值分析、数字信号处理等学科中,都可以获取到这个算法的更深入的知识。
第2组问题
我的第2组问题就是深入到算法的原理、依赖的数学理论,
在接下来的2小时,chatGPT把线性插值法到B样条插值法都给我撸了一遍:
插值的数学含义:已知有限的坐标点,自动生成N个坐标点,保证曲线是平滑的。
插值的实际用途:
它的回答有点像插值:
来吧,把各种插值法的数学公式都讲一遍:
第3组问题
Show me the code!
我只列举几个代码片段供大家感受:
代码片段1:代码轮廓
通过这段代码,我看到了样条插值法的代码轮廓。
代码片段2:我不知道的三方件
代码片段2和代码片段1差不多,只不过是Java语言实现。
但,这段代码用到了一个我没用过的三方件org.apache.common.math3
。
这是一个亮点——原来有这么1个Java库,已经提供了很多基础的数学模型和算法。
代码片段3:增加速度规划
我让chatGPT针对同一个问题,做了3次回答,每次回答不同。
综合3次回答,可以得到我比较满意的答案:
第一次回答:业务流程说的很清楚,但是代码不太完整。
第二次回答:我知道了Apache的那个三方件中的
SplineInterpolator
可以生成B样条曲线。
第三个回答:业务流程和代码都相对完整。
代码片段N:我和chatGPT的N次小迭代
得到了这个我未知知识领域的业务算法的代码框架后,我试着在IDEA里运行,无法成功。
有的函数有数组越界,有的函数参数个数不对。
迭代1:对于明显的编译错误,作为人类的我可以快速帮它修复。
迭代1主要是我在工作,修复后,剩下的代码问题只剩下我不太理解的算法逻辑了。
迭代2:漏写了一个算法相关的函数,它补充了。
迭代3:请注意我的问题并没有指出具体是什么错误,它自己分析出来代码错在哪里了。
迭代4:由于chatGPT网站限制(无法返回超长代码片段),导致看不到完整代码,于是我要求它想办法精简代码。
迭代N:经过4个小时不断的交互,1个基础的机器人运动规划算法代码跑通了
观点
第3个故事结束的时候,是周六的凌晨4点,我对这个故事的观点:
(1)工作难度:超难。
这个任务我不会,甚至我都查不到资料找不到头绪。
(2)值得关注的突破点:chatGPT可能变成人类的师傅,此时人类仅仅是个学徒、小工、辅助。
人类在某个领域是专家,在大部分领域是不擅长的。
而chatGPT可能变成人类的师傅,此时人类仅仅是个学徒、小工、辅助。
5.看到未来
三个故事经历完,已经是周日的凌晨4点,我从窗口已经能看到东湖的星星点点。
国内对于chatGPT,已经热闹了一两个月。
有的人通过卖账号已经赚了一波,有的人做套壳儿GPT也骗走了不少流量。
师傅说:我们的孩子还在学怎么用这些底层技术,别人的孩子已经在发明这些底层技术了。
当喧嚣散尽时,我们还会留下什么?
自媒体上对chatGPT有无数的测评,无论从商业前景、应用场景、技术原理等哪种角度,都是那两派:"吹捧派"和"唱衰派"。
我不想夸大chatGPT,也不想盲目自大地轻视它,这6个小时,我仅仅是一个观察者。
通过这6个小时的结对编程和观察,我有点震撼,这也可能是心理学问题:
第1个故事,那不过是个简单的工作,花点时间我必定能完成——AI能完成,行吧,你还不错。
第2个故事,那是我的专业领域,其他人类未必能比我完成的好——AI竟然能完成,我感受到被冒犯、我有了危机感。
第3个故事,那是我的盲区,我努力过但没成功——AI指导我完成了,此刻好像我知道了三体文明的存在,我没有啥反抗的机会。
我也不知道chatGPT到底会怎样,但我感觉它和过往的AI技术不一样。
它应该不是AI历史中的一点涟漪,而是人类历史的某个里程碑。
2019年12月6日,老爸脑梗进了ICU,守在ICU门口的那段时光,我很想做一个数字老爸:
把亲人的文字、资料、语音、照片录入到云端。
通过某种AI技术训练出能复现亲人的模型——chatGPT看起来似乎可以做到。
集成一些相对成熟的工程技术(如:文字转语音、VR、AR)
……
经历过ICU门口的人应该能感同身受,只不过我这个工科脑袋有点跳脱,但或许这就是未来。