刷完AoC 2019, 我发现了ChatGPT的死穴
目录
- 《用ChatGPT辅助刷了把AoC》
- 《刷完AoC 2019, 我发现了ChatGPT的死穴》 <– 你在这里
上次提到, 我在ChatGPT的辅助下开始补卡AoC. 或许是因为早年的题目简单, 抑或是训练数据泄漏的原因, 我认为ChatGPT的表现还不错.
然而刷得越多越觉得ChatGPT有些力不从心. 就拿上次觉得ChatGPT表现得很好的AoC 2015 Day 23[1]来说. 虽然按照题目描述实现一个VM就能解题, 但如果对VM指令逆向,就会发现这其实是考拉兹猜想(3n+1猜想)[2]的实现。所以用native语言来直接实现, 绕过对VM的模拟的话, 运行效率会有数量级上的提升. 但几次让ChatGPT逆向VM代码的尝试都以失败告终. 可能有人又会说, 错的不是大模型, 而是提示词不够好. 但我个人觉得如果就这么一道简单的题目, 没必要把提示词搞得比直接写代码还复杂吧?
而到了Aoc 2016, 就开始出现直接实现VM也无法解题, 必须逆向才行的题目. 比如2016 Day 23[3]的Part 2, 实际是在求阶乘. 但由于VM中没有乘法指令, 都是用加法实现的, 直接模拟VM的时间复杂度可想而知. 而如果ChatGPT无法对VM指令逆向的话, 就无法(在有限的时间内)解出这题.
这就让我想到之前看到的一个人们在对生成式AI的理解上的误区。自从Alpha Go引爆了本轮AI热潮以来,似乎人们觉得AI全面超越人类指日可待。但其和后面的AlphaProof/AlphaGeometry[4]一样,都只是一种在明确的规则下利用高算力的启发式搜索而已。而生成式AI则通常不会进行搜索,直接根据训练数据的统计就给出答案。
拿这次逆向工程的例子来说,因为是自定义的VM,所以在题目发布之前就没有什么训练数据能让生成式AI来参考。所谓的“提示词不够好”,也就是需要在提示词里提供训练数据而已,最后非常有可能搞得比直接逆向后写代码实现来得复杂得多。
逆向工程需要的是推理能力,这是生成式AI的弱项(甚至有人认为生成式AI根本就没有推理能力)。那么像AlphaProof那样能进行数学证明的AI总可以推理了吧,能否实现代码的逆向工程呢?我觉得也够呛。因为AlphaProof需要将数学问题形式化,转换成Lean语言[5]的描述,才能验证结果是正确的。而对计算机程序的形式化验证也是一个历史悠久的问题,不是所有的代码都是可以被验证的,而且通常会因为算力限制了能验证的代码的规模。
就好比有人会想,现在的生成式AI都是大力出奇迹,有没有可能通过自动在沙盒里运行程序来验证和分析代码呢?就像前一阵的AI码农Devin[6]一样。恭喜你,在计算机被发明出来之前人们就研究过这个问题了[7][8][9][10]。而且就算算力能够指数级地提升,在不可计算的问题面前也是微不足道的[11]。
那么逆向工程会是IT领域中人类智慧的最后高地吗?毕竟防逆向的主流手段就是加壳,VMP壳更是大厂的标配[12]。个人猜测AI应该能像在其他领域中一样,在一定程度上辅助人类进行分析。但由于牵涉到信息安全,可能不大会看到这方面的研究进展被大量公开。觉得自己会被AI淘汰的挨踢人,可以试试往信息安全/逆向工程方面发展看看,门槛低上限高🐶
回到AoC。2019年的题几乎每隔一天就会用到一个自定义的VM,并且VM的数据即代码,不调试的话很难逆向。更进一步,VM之间可以通过输入输出管道连接,形成正向反馈(Day 7)[13],甚至是网络(Day 23)[14]。再连接上外部输入的话,就成了交互式游戏(Day 17[15], Day 21[16], Day 25[17])。放弃逆向让AI通过LangChain等尝试破解这样的谜题应该会是很有意思的挑战🐶
最后,AoC中还有一类题也是ChatGPT的死穴,那就是对ASCII Art的OCR识别,比如Day 8[18]和Day 11[19]:
### ## # # # ##
# # # # # # # # #
# # # # # # # #
### # # # # ####
# # # # # # # #
# ## ## #### # #
人可以一眼看出来的字母,输入到ChatGPT中就只会胡言乱语。这应该是由处理token的机制决定的,跟不会在提示词里数数一样,属于不改架构就无解的问题。
p.s. 说这些并不是想说当前的AI研究是无意义的。就好比我们搞代码形式化验证的导师觉得只有理论上证明没有bug的代码才是最好的,但现实情况却是世界上绝大多数的代码都是没有经过形式化验证的,做些测试大差不差地就发布了(众所周知,测试只能发现bug的存在,不能说明bug不存在),依旧不影响软件行业几十年的蓬勃发展。AI虽然没法解决所有问题,但至少能在某些问题上推进一下SOTA,这就已经很有意义了。过于悲观与过于乐观一样不可取。
参考
- [1] Day 23 - Advent of Code 2015
- [2] Collatz conjecture
- [3] Day 23 - Advent of Code 2016
- [4] AI achieves silver-medal standard solving International Mathematical Olympiad problems
- [5] Programming Lanugage and Theorem Prover - Lean
- [6] Devin
- [7] Halting problem
- [8] Decision problem
- [9] Gödel numbering
- [10] Gödel’s incompleteness theorems
- [11] Busy beaver
- [12] pinduoduo_backdoor
- [13] Day 7 - Advent of Code 2019
- [14] Day 23 - Advent of Code 2019
- [15] Day 17 - Advent of Code 2019
- [16] Day 21 - Advent of Code 2019
- [17] Day 25 - Advent of Code 2019
- [18] Day 8 - Advent of Code 2019
- [19] Day 11 - Advent of Code 2019