跳到主要内容

1 篇博文 含有标签「随笔」

查看所有标签

Computer Systems vs AI

· 阅读需 5 分钟

计算机科学,在中国高校的语境下很多时候都包含计算/算法侧的人工智能。也就是说,人工智能似乎是在计算机下的一个子学科。然而,计算机系统方面科研或者大厂程序员码农工作所用的思维,和人工智能科研的思维可以说完全不同。

我算是逻辑思维可能比较强的人。不过逻辑思维似乎没有一个统一的定义。具体来说,我初高中的时候物理学得比较好,而化学学得很差。化学越到后面和物理越远,理论性的东西越来越少,记忆性的东西越来越多,我学得一头雾水。到了大学,离散数学差不多是我大学修过的课里考得最高的一门科目。在学形式逻辑的时候,我会觉得这就是把我脑子里平时思考使用的逻辑用一种数学的方式表达了出来,所以很容易学懂。与这门课强相关的数电自然也学得不差。

这些课都有一个共性,就是他们都有一套简洁的公理,加上合理的逻辑以后可以把整门课的内容推导出来。如果多熟悉这些公理,多推导,很容易就能建立起一套好用的直觉。传统计算机世界,至少在 ISA 和之上的抽象层面,可谓是完美符合这个特性。当你扎实地学了基础的计算机专业课后,只要愿意投入时间,可以说计算机里任何一个过程都可以被理解。或者说任何一个问题都能有一个比较清晰的寻找答案的路线图。注意这只需要 4 年的学习时间,而且是 前 ChatGPT 时代就能做到的事。归根结底,计算机世界是完全人造的,而人脑能设计出来的东西复杂程度有限。软件是物理过程在计算机世界的投影,但也只是投影。从汇编语言到 C 语言到 Python, 从 xv6 到 Linux, 抽象的层数在增加,复杂程度在增加,但是这种复杂程度最终是可控的。

  • 下层的原理简单(逻辑门比 RV32I 指令集在原理上简单,它们也比 C 语言在原理上简单),但是实现同样功能的软件更复杂。
  • 上层的原理复杂(抽象程度高),但是实现同样功能的软件更简单(吗?)。

关键在于,你总是能够很容易很确定地把某个层面的东西翻译到另一个层面,从而增加自己对其的理解和认识。这种学习方法几乎唯一会碰壁的场景是学习不同的计算模型。如果尝试用基于状态转移的图灵机和过程式编程强行理解 lambda 演算和函数式编程,那大概率学不好。因为这两者都属于最基本的不可再刨根问底的原理,强行把一个基于另一个理解就相当于要用经典物理的视角理解量子力学(这个例子好像不是很好)。

在这种环境下,刨根问底会被加以一个很强的奖励信号。我有意识或无意识地让自己经历了各种计算机科学的训练,也养成了刨根问底,先打好基础再学上层知识的习惯。

但是这些习惯带到 AI 的学习和科研上,就很容易碰壁。因为 AI 引入了现实世界,而现实世界是不讲道理的,或者说没有像人造的计算机世界那样讲道理。一张照片的数据是电磁波被 CMOS 传感器接收转换出来的电信号组成的,一段音频记录的实际上是气压的变化,一段文字...文字也是现实世界在人造的语言世界的投影,从这一点看文字可能是最好被计算机分析的模态了,而实际上也确实是这样。总之,这里很难对着一个问题找到确定的刨根问底的路径。

最近研一开学了,我做的是 AIGC 方向。其实我已经接触这个方向将近一年了,但是这种思维方式的转变,以及奖励信号的转变,仍然让我最近感觉很迷茫和焦虑(我在一年前选导师和方向之前不太能预见这些)。也许多尝试和经历一些不同的领域和训练,对我是有帮助的?又或许 AI 兴起,我其实没有别的选择只能接受这些转变?

这周跟导师交流后确定了一个目前的课题。导师给的建议是,既然我们没有时间完全学懂原理(也不可能完全学懂),也没有办法预知要学习哪些原理才能想出一个 idea 解决现在的问题,那么最好的方案可能是找一个课题然后立即去做,碰了壁之后再想怎么解决,能不能解决。如果实在不能解决,就换下一个课题。这样多试几个,试出正确的成功的东西的概率自然越来越高。嗯,挺有道理的。