4 月热播的韩剧《王国》,不知道大家有没有看?我一集不落地看完了。王子元子出生时,正逢宫内僵尸作乱,元子也被咬了一口,但是由于大脑神经元尚未形成,寄生虫无法控制神经元,所以医女在做了简单处理后,判断不会影响大脑。这里提到了人脑神经元,它也是 AI 神经网络的研究起源,具体展开讲讲。
人脑中总共有 860 亿个神经元,其中大脑皮层有 160 亿个神经元。大脑皮层的神经元数量决定了动物的智力水平,人的大脑皮层中神经元数量远高于其他物种,所以人类比其他物种更聪明。大象的脑子总共有 2570 亿个神经元,但是其中 98% 的神经元都存在于大象的小脑中,而大象的大脑皮层只有 56 亿个神经元,无法与人类相比。大脑皮层中的神经元数量越大,能耗也越大。人脑每天消耗的能量占人体全部耗能的 25%,这也就是为什么我们每天都要吃多餐,很容易饿的原因。人之所以能够很快超越其他物种,主要是因为人类掌握了烹饪技术,能够在短时间内摄入大量卡路里以支持大脑运转,其他物种则将摄入的卡路里用于维护身体运转,不得不牺牲大脑皮层的神经元数量。
之所以先谈大脑神经元原理,也是为了引出本文的重点–现代 AI 技术。在正式进入 AI 技术前,我先讲讲软件工程师这份工作,因为现在有很多软件工程师准备转入 AI 行业。
软件工程师我是软件工程师出身,2004 年刚毕业时我写的是 JSP 代码(一种将 Java 语言嵌入在 HTML 代码中的编写方式),工作几年后转入分布式软件技术,再后来进入大数据技术领域,最近的 4 年时间我一直在从事 AI 平台研发工作。
软件工程师的要求,我总体分为基础编码和系统架构两方面,因此我对于软件工程师的考察,特别是校招学生时,为了进一步考察他们的综合能力,我每次都会自己准备面试题,这些题目包括了编程基本概念、算法编程题、操作系统、数据库编程、开源代码阅读、垃圾回收机制、系统架构描述等。
编码的话题展开来可以讲很久,发展历史很悠久,我 15 岁学编程时用的是 Basic 语言,读大学时学的是 C 语言,大学毕业参加工作后第一门用的语言是 Java,其中的各种故事和理解可以写几篇文章,这里不展开谈。
我觉得谈到软件工程师工作,避不开软件架构设计。大众谈软件架构,很多人会认为软件架构就是一堆框架的组合,其实不对,软件架构本身是对于软件实体的组织形式的阐述,使用框架的意义是快速完成软件架构设计,而不是取代软件架构设计,两者本质上不是一类事物,更像是设计图纸和所使用的原材料。软件架构就是通过对软件生命周期的拆分,在符合业务架构的前提下,以达到软件本身访问增长目的的方式。这个增长需要软件开发的增长,也需要软件运行的增长,由此达到所支撑业务的增长。
市面上也确实有很多例如“分布式系统架构”、“微服务架构”等等跟随着潮流的书籍,但是看完后只停留在会采用一些开源框架进行整体框架搭建,我说的是搭建,而不是设计。确实是搭建,你所拥有的能力就好像小孩子搭积木,只会采用固定讨论,或者学得差点,连固定套路都没学会,这样对你的个人能力发展其实没有多大好处,这也是为什么很多程序员在完成了程序员 - 架构师的转型后,没过多久就转为纯管理,或者彻底离开了技术界,因为从来没有大彻大悟理解系统架构。
之所以谈了这么多系统架构相关的工作理解,是因为我认为系统架构师系统化的思维,我们搞 AI 系统也是系统化的思维,从有较强编程能力的系统架构师转 AI 技术,相对容易一些。
AI 工程师为什么要从软件工程师转行到 AI 产品研发?因为 AI 产品研发有更大的吸引力,因为它更难,难到我们并不确定什么时候才能真正做出来,做出来真正能够可复制的 AI 产品。表面上看它也是一个门槛—一个“可用”且“可复制”的 AI 技术,但因为难度足够大,所以有挑战性,必须不断地改善技术,做全球范围内还没有做出来的技术。搞软件开发时处理的一些问题可能是其他公司已经解决的,并非“人类”都还没有解决的问题。
AI 的研究最早可以被追溯到亚里士多德的三段论,然后莱布尼茨创立了处理逻辑,布尔在布尔代数上的贡献,弗雷德在近代逻辑上的贡献,罗素在逻辑主义方面的贡献,这些工作都是在数据逻辑上的。一般认为,现代 AI 技术讨论,起源于 1956 年在达特茅斯学院召开的夏季研讨会,而这门学科的源头可能是 Alan Turing(阿兰. 图灵) 1948 年在英国国家物理实验室(NPL)写过的一份内部报告,这份报告中提到了肉体智能和无肉体智能,从某种意义上预示了后来符号派和统计派之争,或是 Turing 在 1950 年在哲学杂志《心》(Mind)上发表的文章“计算机与智能”,反正都是 Turing。