一切玩意都是纸老虎,看起来很多高大上的东西,其实返璞归真都是一些细节上处理的精妙之处。
读研之后比较喜欢生物,本质上,生物就是一台分子级别运行精妙的机器;DNA用化学键的方式记录了类似电脑逻辑电路0101的二进制信息,然后一个个氨基酸蛋白质组成的小机器能够读取dna中的信息自产自销,自己组装生产自己的零部件。有时候我也在想,这个社会也像是一个生物体,工厂中的机器能够自己生产自己,所以社会本质上就是生物体上的一个宏观的智能体,粒度不一样而已。资源是有限的,所以就有一些坏蛋(在生物里面就是癌细胞)在社会上捣乱。
这个宏观的社会目标和每个细胞体,每个氨基酸一样,以一种动态的方式维护着自己能够在宇宙中有一席之地。但是又让人不禁想问,这一切的一切最终是在保护谁,生物的最终意义是什么?多么令人好奇的问题。还有就是什么样的分子可以做“积木”,只有氨基酸分子可以么?
毕业之后从事大数据相关的计算机行业,有时候就会把上面这些概念类比起来。大数据本质上也是处理数据,和之前的数据库系统其实大同小异,只是处理数据的方式更多样了,处理数据的吞吐量更大了,其实也没什么说很屌的地方。
回归到数据本身,也是围绕了一堆细节性的东西。比如说处理,处理的算法可以多种多样,你可以用机器学习,可以是普通的统计方法,可以是关联,可以是一套逻辑链路。不管怎样其实就是在做挖掘信息这个最底层的事情。然后上层围绕的工具和辅助和方法论可以是java、C++、python、脚本、excel、参数、网络、Linux、业务理解等等。所以想玩好这玩意其实也很简单,掌握好外围的工具就行,最起码一个数据+指令的生命周期是怎么样的要知道哈!
如果把工具(生物里面就是那些工作蛋白)和信息(计算机里面是最底层磁盘阵列,生物里面是AGCT的DNA单元)联系起来其实都是类似的东西;
计算机里面工具最小单元其实就是cpu和程序(处理逻辑),但是怎么样把信息给到工具去加工,然后形成决策呢?生物里面也一样,我们全身上下都是传感器,然后通过生物电信号给到大脑去分析处理【只不过这里的逻辑很复杂,随随便便发现一个就是诺奖级别,目前人工智能里面的深度学习其实最开始就是受到生物神经学的启发】,所以人脑其实是不是也就是个图灵机。
计算机里面是怎么做的呢?处理逻辑本身也是数据,要被处理的数据本身也是数据,所有的数据加载到cpu里面,cpu里面最底层的工具其实就是一个个系统函数对应的数字逻辑电路【这个才是最底层的工具】,然后数据就是通过控制这个逻辑电路的输入,在最底层完成计算的。当然这里还只是数据已经在cpu里面了,但是我们知道原始数据是在磁盘阵列里面的,又是怎么样通过IO、网络之类的东西发给cpu做计算的呢?
人体传输信号是用生物电,相同的道理,计算机传输信号也是使用的生物电,磁盘驱动从阵列里面读到的数据先给到cpu放到内存里面,然后再从内存给到网卡里面,费事的一比,还不如直接磁盘给网卡呢;我现在有点怀疑,人体的传感器信号是不是已经在iot边缘端计算好了然后再给大脑的?
然后谈谈性能,无非就是算得够不够快(延迟),一次算的数据够不够多(吞吐)。生物上其实就是这个人反应够不够灵敏,记忆力好不好,其实基本就能衡量这个人聪不聪明了。
cpu里面有个晶体振荡器,是最小的时间单元,差不多就决定了内核一个指令执行需要多少时间周期?其实就是让底层的门电路二极管三极管打开关闭得更快一点;而且最底层的指令其实没多少个,intel的指令集也就两千多个。所以精华之处在于这两千多个基本单元能组成你想得到和想不到的世界。其实就类似人类的文字最常用的也就那几千个,组合起来就是一个很复杂的东西了,能表达宇宙。
DNA中本质上也是一个二进制序列,AGCT的组合就是二进制,为什么要4个字母也是因为核苷酸这个积木最小组成单元,在RNA拿到copy的另一段序列之后,就等于获取了整段信息。这里神奇的点在于,计算机是读取0101这种二进制指令信息,然后处理并呈现给我们结果。但是RNA内部是怎么解析这些dna序列的指令的呢?难道和计算机一样也是有“指令集”的么?这玩意其实也是挺神奇的!!!
有时候很难不去幻想,生物和人类世界可能就是高等文明写出来的一个玩具。
计算机里面数据本质是0101的二进制,然后再根据编码表字符集展现给我们的就是“文字”或者图像信息了。硅基与碳基生物的联系就是在这里了,当然学术界甚至像马斯克这种也在尝试让硅基传感器直接读取发送生物电信号,来完成两者之间的交流,我是觉得在没有完全探秘碳基生物的组成原理之前,也只是基于经验肤浅地给一些信号吧。
说到生物为什么很难,人类至科学革命发展以来到现在也是一知半解。说到底应该就是最底层的组成单元吧,也就是最小的“积木”。假如我们自己缩小到和氨基酸一样大,应该能发现那是个很神奇的世界,其实也解释了为什么有“高分辨率电子显微镜”的高校和实验室那么容易能在“生物分子结构学”取得很多成果的原因了。
然后再说说计算机的通路,计算机往往是集中式做计算的,生物体很可能边缘端预计算好了。当然这也是因为生物体的数据更偏向于传感器数据,而非记忆数据的处理。计算机处理的数据一般都是在磁盘中的,整体的带宽更大,或者也有那种高并发低延迟的需求。简单点说就是我们要注意应用是计算密集型还是IO密集型。
关于CPU密集型,在最底层是有些加速方法的,比如超线程技术、SIMD向量化计算(引入了16个字节的寄存器,支持一次四个整数同时计算)等,比如GPU就是计算密集型,一次可以算若干个向量,应该也是底层重计算还是重逻辑导致的;比较好奇是RNA在转录翻译生成蛋白质的时候也不知道是怎么拿到组装信息的,怎么保证那个长链的DNA序列能很快处理完毕的?很神奇;
其实往往我们忽略了最底层的东西;
然后是IO密集型,生物体中信息传递的方式是通过血液或者其他游离的介质,比如病毒的信息传输方式,然后在内部疯狂复制,本质上蛋白质能够携带的信息量密度应该是远远大于半导体的。所以半导体我们往往要关注吞吐,而生物就是道家的1生2,2生4了,信息传输的通道和密度都很大。
计算机中的IO主要就是磁盘、网卡、内存、CPU的多级缓存了,io慢cpu就没有被充分利用,产生浪费,而且吧随机读写和顺序读写的速度肯定差别特别大。这种时候我们一般都要用工具测试一下差异,并且在做数据存储的时候底层数据结构和索引就显得特别重要了,常见的算法比如B+树其实就是基于这个考虑的,折中了磁盘数据读和写。
然后就是网卡了,linux系统中很多其实就是文件句柄,网络编程本身是在内核态里面的,所以这里一般可以多路复用,类似accept和recv都注册到一个epoll里面去。然后就是数据只要在网络上传输肯定都是一堆屁事,什么路由啦、tcp/ip协议啦,一层层往下跳转,甚至说数据的加密等等。
再回归到“指令信息”本身,一般情况下,我们写的代码计算机是不认识的,需要翻译官翻译的。就和医学上有一些中风的患者,脑部语言翻译区域出了问题,然后就不能听懂别人说话了,但是能正常识字断句,也是很神奇。计算里面称为“编译原理”,sql语句可以翻译、java代码可以翻译、C++可以翻译,到最底层还是回归到cpu那两千多个指令集,这里的指令集应该和数据电路绑定在一起了。翻译的方法也大同小异,无非是语法树、优化、执行计划、机器码等等。
翻译也是门技术活,翻译得好,底层往往就会执行得更快,比如现在流行的codegen里面不要带虚函数,让cpu能够预测执行一样。生物底层就是dna的“三个密码子”决定要合成哪一个氨基酸,然后氨基酸再往上合成蛋白质,感觉里面也是存在很多优化的空间的,因为444可决定64种不同的排列,但是常用的氨基酸有重复的,感觉要么是有冗余,要么是有其他附带信息到现在还没有被发现。
写到这里,感觉自己很多细节上的东西还不是很清楚,难点还是在于最下面的一个个数据结构细节和处理方法!!!
网友评论