做 AI 落地项目的一些经验,以及编程和编程语言的一些漫谈

283 阅读4分钟
原文链接: zhuanlan.zhihu.com

关于 AI 落地:

  • 模型的性能够用就行。
  • 在数据集训练到天上,也不代表在实际中够用。因此我不大关心模型在训练时的性能。看真实测试的结果才有用。
  • 了解实际客户需求,例如某些角度是客户接受度最高的。单纯的"高性能算法"不一定有用,需要有好的展现方式和场景。我们都知道现在的 AI 常常是"先有算法后找需求",这个"找需求"很有趣,有时需要"好点子"。
  • 很多客户的需求很简单。最容易落地的,是最简单的。人脸相关的内容,仍然是目前最容易落地的。物体识别也不错。
  • 客户的需求也很复杂。不一定是算法的复杂,也包括工程的复杂。
  • 各类需求其实很多,预计在未来几年内我们将看到 AI 的大规模普及。

关于编程语言:

类型系统等等,做学术合适,不过在大多数工程实践中用不到。毕竟如果做太复杂就在现有硬件架构下没有高效的实现。做软件,得以硬件作为基础。

个人认为,一个编程语言,首要的问题,是两个偏工程的问题:

  • 依赖管理系统。现在大家都是调包侠。这决定语言的生态。
  • 异步/并发机制。这个非常常用,而且很多程序员在此容易出错。相关的是异常/错误处理的语法机制。

其中的第二点,实际等于做一个操作系统(上下文切换,调度系统等等),或者再做一个虚拟机。一个实用的高效编程语言,做到后面,都应该变成做一个操作系统。操作系统核心的也就是上下文切换,中断,MMU,各种设备的驱动,资源管理,等等。

最近火的华为鸿蒙就是 RTOS,做一个简单的 RTOS 是比较简单的。【如果您是嵌入式工程师,在深圳,对下列方面有经验或感兴趣,欢迎私信简历:(1) 适配驱动 & 协议 (2) 做 UI & UI 库 (3) 做 RTOS。如果您对做编译器感兴趣,也欢迎私信。】

再往后有三个方面:

  • 往大看:有并行化,分布化,同步,容错等等。
  • 往小看:少不了内存管理,cache友好,对分支预测,流水线等等的友好。
  • 往侧看:还有 SIMD,异构计算。除了 GPU NPU,还有模拟计算,量子计算,光计算,生物计算等等。

从前 C++ 还开创了一种道路,就是把编译做复杂,模板和宏的技巧。这方面有更多值得探索的地方,例如加入一些 AI 减少程序员的重复劳动,及早发现 bug,自动优化代码。现在的语言(和 IDE)在这方面仍然很原始。这方面 TabNine 是一种尝试。

关于编程:

以上的“编程”,仍然停留在“如何在某个硬件上做最好的软件”。

实际的“大编程”,还应该想“如何做最好的硬件+软件整体方案”。至少到门的级别,跳出冯诺依曼架构和哈佛架构。PiM,异步电路等等是好的开始。

我个人想知道几个问题,欢迎专家补充。这里暂不谈量子计算机等等。

  • 很多人在试图走回模拟计算机的路线。这个知道的人都知道有一些问题,即使是用来算神经网络都有一些问题,这是很奇怪的,我想似乎是有可能解决。
  • 数字计算机必须用门吗?元件有没有新的思路?例如忆阻器。
  • 工艺上的进步。例如立体芯片的可行性,目前有一些初步探索。

在理论方面,从前的人认为编程=数学,或,数学=编程。这没有错,但是,现在的绝大多数编程任务完全不像数学,现在的绝大多数数学任务也完全不像编程。

与数学相比,编程至少有两个特殊的地方:(1) 资源有限。(2) 存在“时间”(or 运行速度有限)。关于数学的编程化,未来再谈。