[toc]
《穷查理宝典》是查理·芒格效仿效仿富兰克林的《穷理查年鉴》,汇总自己谈话和演讲资料整理而成。这本书分为两部分,前两章讲查理的生平经历、对生活、学习和决策的见解和思想;后三章是最具有代表性的十几篇演讲稿。
[toc]
《穷查理宝典》是查理·芒格效仿效仿富兰克林的《穷理查年鉴》,汇总自己谈话和演讲资料整理而成。这本书分为两部分,前两章讲查理的生平经历、对生活、学习和决策的见解和思想;后三章是最具有代表性的十几篇演讲稿。
[前方多图预警]
7 月末的早晨,从桂林市到北海市乘坐动车,希望以这种走马观花的方式,更近距离地了解广西省
动车先是飞快地穿行在喀斯特地貌中,村落零散分布在山脉之间,炊烟袅袅。快抵达北海时,景色已经转变为大片的水塘和水田,好似江南水乡风光。
2021 年 7 月 26 日晚,因为四川绵阳有疫情,我们不敢在成都多做逗留,从阿坝回到成都后,直接坐飞机直达桂林,所以在桂林的行程比较随意,缺乏规划。
2021 年 5 月末,我和苗苗一起去山东省青岛市拍摄婚纱照,在青岛市逗留三天,粗略地游览一部分青岛景点,体验了一把啤酒加海鲜的生活。
因为隐私的问题,跳过婚纱照拍摄细节,重点是回顾三天的旅行经历。
青岛,别称胶澳,地处中国华东地区、山东半岛东南、东濒黄海。青岛是一部中国的近现代史,漫步在城市中,可以感受到战争遗留的痕迹,看到德国和日本式的建筑。
1891 年,清政府在胶澳设防,青岛由此建置;
1897 年,德国侵占青岛,青岛沦为殖民地;
1914 年,日本取代德国占领青岛;
1919年,中国以收回青岛主权为导火索,爆发了“五四运动”。
。。。
周五晚上,从北京出发,在动车硬卧上休息,第二天早晨 6 点半到达青岛北站。注意,青岛北站距离青岛市中心和大部分旅游景点比较远,建议后面往返尽量选择青岛站。
坐公交是体验一个城市的好方法。我们到青岛北站后,坐着公交车慢悠悠地在城市的大街小巷穿行。原计划在台东步行街吃早饭,但是早上 8 点多到达台东步行街,才发现店铺基本都还没有开门,早点和小吃的选择很少。和当地人沟通后才知道,一般下午 4 点后,台东步行街才会热闹起来,那时候路边小吃会塞满一条街。
在一家路边小店吃早饭后,我们先去婚纱店确定明天拍摄事宜,然后就开始玩玩玩啦。
我们旅游的第一站 -- 青岛啤酒博物馆,推荐指数五星,是我此行最满意的地方。普通门票是 ¥60 /人,包含两杯青岛啤酒。
博物馆设立在青岛啤酒百年老厂区内,分为 A 馆和 B 馆,浏览顺序是先 A 馆再 B 馆,顺序不能错哦。
刚刚参观完啤酒的生产过程,品着原浆啤酒,仿佛品尝到了麦芽的味道,体验这一杯的来之不易,让你会更加喜欢这一杯啤酒。毕竟,小小一杯啤酒,背后凝聚着一个时代的故事,人类上千年的历史。
你可能还沉醉在老工艺的精细中,一不留神就会走到顶层,现代化的啤酒生产线,从啤酒装瓶、瓶盖拾取、贴标签、消毒、质检,甚至到装箱打包都是全自动的。在这个无人值守的厂房,看着一箱箱啤酒从无到有,再到被传送带运送出去发货,自动化工业的力量和震撼,扑面而来。
除了有趣的体验外,青岛啤酒博物馆服务挺棒的。
此处打个广告,现在大家流行 DIY 可乐,其实青岛啤酒也是支持 DIY 的,类似于下面示意,哈哈哈!
青岛的主要景点都在市南区,靠近海边,彼此距离都不远。
我们从博物馆出来后,打车很快就到了信号山公园,登到高处可以远眺青岛的红屋顶。
信号山是青岛的当地公园,景色一般般,但是很多电视剧和电影会在这里取景,比如《父母爱情》和《送你一朵小红花》。在《父母爱情》中,我特别向往场景切换过渡时的红屋顶剧照,那就是在信号山取的景。自己这次来青岛,特意选择爬信号山,要亲自看一看青岛的红屋顶。
我的照片 vs 父母爱情
信号山门票是 15 元/人。山顶有一个大转台,20min 绕一圈,是观看风景的好去处,站在上面可以看到红屋顶藏在绿树丛中,一直绵延到海边。
从信号山出来后,我们徒步穿行在青岛的小巷里,去圣弥厄尔教堂。沿途街道两边主要是民居,像是石头砌的墙,很有民国时代的居住气息。
我们是下午 4 点半才到达教堂,教堂已经关门,所以只能站在外面看看。教堂属于哥特式建筑风格,尖尖的钟塔高高耸立,庄严美观,附近有新人拍婚纱照。
从教堂出来后,我们徒步去栈桥。没错,青岛的景点靠的就是这么近,走路或打车就是最好的通勤方式。这一路段沿途是热闹的市区,和其他城市相比没区别,所以不太有意思。
栈桥原来是清朝的军用码头,几经易手,成为现在青岛十景之一。
桥身从海岸探入如弯月般的青岛湾深处,最远处的防浪堤上建有回澜阁。走在栈桥上,两边的海面上有懒惰的海鸥飘着,懒得去争夺行人的喂食,只会偶尔飞起来。
栈桥上非常拥挤,很快就能浏览完,体验比较差,不是非常推荐去。
从栈桥离开后,我们打车去奥帆基地 (距离有点远)。
奥帆基地可以体验乘船出海,情人坝也是青岛看日落的好去处,你可以看到夕阳慢慢落入城市高楼中,没有踪迹。
情人坝其实是防波堤,上面有特色风情街,有小哥在酒吧驻唱、有热闹的海鲜餐厅。情人坝尾端建有一座白色灯塔,入夜后站在堤上,临风观海,还可眺望对岸城市中心区,璀璨灯火,处处显现出浪漫氛围。
我们本来计划在奥帆看灯光秀的,但是夜幕降临时,只有附加的建筑物会亮起动态景光墙,多个建筑物串起来联动,还是比较震撼的。但是,这就是灯光秀吗,还是我们没有等到呢?我们蹲着等灯光秀时,吹着冷飕飕的海风,肚子饿的呱呱叫,晚上八点就离开了。
注意:奥帆基地临近大海,在傍晚海风吹起来,还是很冷的,记得晚上带件厚衣服。
从奥帆基地离开后,我们到青岛本地特色菜—前海沿,吃饭。前海沿消费并不贵,我们点了几份海鲜,外加海鲜饺子和啤酒,总共花费是 110 元钱,性价比很高,不怎么宰游客。
我们第一天的旅程到此结束啦。
跳过拍摄婚纱照的细节...
我们拍摄的第一站本来是八大关的花石楼,最后变到胶澳总督府旧址,曾经是德国侵占青岛后的德国总督办公之地,整座大楼主墙体全部用巨大的花岗岩石块徊成,大方得体。
我们拍摄的第二站是广兴里。广兴里是一座典型的里院 建筑,是青岛最近新开发的文创区,主要是一个院子和周边的街道。
青岛里院形成于20世纪二三十年代,是岛城特有的传统民居,是西式洋楼和四合院的巧妙结合,是中西合璧的建筑风格。
小麦岛距离其他景点比较远,但是值得来看看,有盛开的鲜花和硕大的草坪。
小麦岛是环形岛屿,只有一条路与陆地相连,与市区隔海相望。整个小麦岛就像是一个花园,有大片平坦宽广的绿化草地,远处就是湛蓝的海水,更远处是遥远的海岸线。
晚上,我们 6 点多拍完照,天空就下起来小雨。
我们再访台东步行街,那时候已经热闹起来,一天街道上都是小吃,但是种类比较单调,卖家比较雷同。我们最后去当地的一家“强强野馄炖”吃晚饭,配着野混沌吃烧烤。
注意:青岛靠近海,海鲜便宜,但是羊肉串等肉类就比较贵,不建议过来这里吃烧烤。
我们第二天的旅程到此结束啦。
因为昨天拍照早起晚归,两个人都比较累,大概 10 点多出门,先是去百花苑和中山公园闲逛一会。这两个公园紧挨着,但是风景一般,很北京的市区公园区别不大。因为是周一,中山公园被退休老人们占据了,百花园反而显得静谧一点。
漫步在公园里,你偶尔可以听到汽笛声,我猜这是船舶靠岸或者开始远航的号角。
中午时候,我们去无名小吃吃饭,这算是网红打卡地。“无名小吃”是当地一家做青岛菜的小店,店铺不大,我们过去时游客已经塞满了,我们最后是坐在外面,紧挨着马路吃饭的。个人总体感觉一般般,没有传说中的那么好吃。
八大关是几条道路命名的街道,里面的建筑偏西式,有公主楼,花石楼等经典建筑,非常的漂亮。因为这些景点收费并不便宜,所以只能远远望过去,看个轮廓。
八大关景色是不错的,建筑物很有特点,随手一拍就是景。除了建筑物,八大关靠海的地方有一个海滩,沙子特别细腻柔软,但是海水还比较冷。
因为要赶晚上 7 点多的火车,下午的时间并不充裕,我们从八大关出来后,去船歌鱼水饺吃海鲜水饺,这边的收费比较贵,¥ 160 / 2人。可能我吃不惯,我感觉海鲜饺子一般般。
坐上幸福的高铁,我们的青岛之行就结束了!
这应该是青岛特有的叫法。这个“野”源于夜晚的路边摊,那时没有固定摊位,到了晚上才出来摆摊卖馄饨,久而久之,就有了“野馄饨”的说法。
在青岛,大家不再甄别真假,而是开始讲究你是喝一厂还是二厂的啤酒,大概是水质不同。一般而言,青岛一厂的口感更好,价格要贵一点。
这是当地人的推荐,中午过去时特别拥挤。
青岛本地菜,性价比高,在青岛有多个分店,不宰游客,推荐!
特点是海鲜水饺,但是整体消费比较贵。
[toc]
2012 年,全球约有 5600 万人死亡,其中 62 万人死于人类暴力(战争致死 12 万,犯罪致死 50 万)。相较之下,自杀的人数有 80 万,死于糖尿病的更是有 150 万。现在,糖可比火药更致命。
过去主要的财富来源是物质资产,比如金矿、麦田、油井,现在的主要财富来源则是知识。发动战争虽然能抢下油田,却无法霸占知识。因此,随着知识成为最重要的经济资源,战争能带来的获利已经下降;可能发生战争的地方越来越局限在世界的特定区域(比如中东和中非),这些地方仍然维持着旧式的物质经济。
正如最初是核武器促成了新的和平,未来的科技发展也可能掀起新的战争。特别是网络战的出现,让小国或非政府主体也可能有能力痛击超级大国,这就有可能让世界陷入动荡。
“契诃夫法则”(Chekhov Law):契诃夫有一句名言:在第一幕中出现的枪,在第三幕中必然会发射。
认可人类过去的努力,其实传达出了希望和责任,激励我们在未来更加努力。
成功孕育着野心,而我们最新的成就也推动人类设下更大胆的目标。我们已经达到前所未有的繁荣、健康与和谐,而由人类过去的记录与现有价值观来看,接下来的目标很可能是长生不死、幸福快乐,以及化身为神。
联合国在第二次世界大战后通过了《世界人权宣言》(Universal Declaration of Human Rights),这或许是我们最接近全球宪法的一份文件,其中就明确指出“有权享有生命”是人类最基本的价值。
高呼着人类不死的科学家,其实就像高喊“狼来了”的那个男孩:狼要来,只是早晚的事。
就算我们在有生之年还无法达到永生,这场与死亡的战争仍有可能是 21 世纪的旗舰计划。考虑到我们对于“生命神圣”的信念、整个科学界的动向,再加上最重要的资本主义经济的需求,一场对死亡的无情战争似乎已不可避免。我们的意识形态看重人的生命,绝不允许我们轻易接受人的死亡。只要人是出于某种原因而死,我们就会努力战胜这种原因。
1776 年,除了生命权和自由权以外,美国的开国元勋也把“追求幸福”列为人人不可剥夺的权利。
人们到底想要什么?他们不想总是忙着生产,而是想要幸福快乐。生产之所以重要,是因为能够为幸福提供物质基础。但这只是手段,不是目的。
在石器时代,人类平均每天消耗 4000 卡路里的热量,除了用来觅食之外,还要准备工具、衣服、艺术和营火。而今天,美国人平均每天消耗 22.8 万卡路里的热量,除了填饱自己的胃,还要供给自己的汽车、计算机、冰箱、电视所需。
幸福快乐的玻璃天花板有两大支柱,分别属于心理与生理层面。
从生理层面来说,不管是预期还是幸福感,其实都是由我们的生化机制控制的,而不是由经济、社会和政治局势决定的。
历经无数代人之后,我们的生化系统不断适应变化,为的是增加生存和繁衍的机会,而不是幸福快乐的机会。只要是有利于生存和繁衍的行为,生化系统就会用愉悦的感觉来回应。
让我们快乐的不是结果,而是追求目标的过程。
通过生化反应追求快乐,也是这个世界上的头号犯罪原因。
要通过生化操纵方式得到幸福快乐并不容易,因为这其实改变了生命最基本的模式。
几个世纪前,佛教甚至还有一个更激进的主张,认为追求快感正是痛苦的根源。这种感觉只是一种短暂且毫无意义的感受。得到快感时,我们的反应不是满足,而是想得到更多。因此,不论我们得到多少幸福、兴奋的感觉,都永远无法满足。
21 世纪的第二大议题 -- 确保全球的幸福快乐 -- 就是涉及再造智人,让人可以享受永恒的愉悦。
我们能说的只有:像我们这样的人,很有可能会用生物科技来再造人类的心灵,而以我们现在的心灵,并不能预测接下来将会发生什么。
在 21 世纪,人类的第三大议题就是为人类取得神一般的创造力及毁灭力,将“智人”进化为“智神”。
纵观历史,人们通常相信大多数的神并不是无所不能的,而只是拥有特定的超能力,比如能够设计和创造生命,
在古代农业社会,许多宗教对于形而上或来世的问题缺乏兴趣,只着重于一项非常世俗的议题:如何增加农业的产量。
智人将自己一步一步升级进化,在这个过程中持续与机器人和计算机融合,直到某天我们的后代回顾这段历史,才赫然发现自己已经不再是那个曾经写下《圣经》、建起长城或会因为卓别林的滑稽动作而发笑的动物了。
有个朋友就曾告诉我,她对于变老最担心的一点,是怕自己与时代脱节,变成一个总在怀旧的老女人,再也看不懂身边的世界,也做不出什么贡献。
正因为如此,有越来越多的个人、团体、企业和政府都非常认真地追求着长生不死、幸福快乐以及如神一般的能力。预期寿命大幅提升,已经让保险公司、退休基金、卫生系统和财政部门心惊胆战。现代人活得要比预期更久,而我们并没有足够资金应付他们的退休金和医疗开支。由于未来的 70 岁有可能就像现在的 40 岁,已有专家呼吁提高退休年龄,并重新调整就业市场的结构。
经济需要永远持续的增长,也就需要能永远持续的议题 -- 追寻不死、快乐和神性。
治愈与进化并没有明确的界限,医学一开始几乎总是要拯救那些低于正常下限的人,但同样的工具和知识也能用来超越正常的上限。
发生在特定药物上的事,也有可能发生在整个医药领域。
只要等到干细胞研究能让我们廉价取得无限量的人类胚胎,你就能从几百个选项中选出你最理想的宝宝,这些宝宝都带着你的 DNA,保证没有遗传疾病,而且也不需要未来再做基因工程。将这个过程重复几代,最后很容易就会制造出超人类。
有一个突破性案例,与线粒体 DNA(mitochondrial DNA)有关。线粒体是人类细胞内微小的细胞器,产生细胞使用的能量。线粒体有自己的基因组,与细胞核中的 DNA 无关。如果线粒体 DNA 有缺陷,就会导致各种造成人体衰弱甚至致命的疾病。
人类只要一有重大突破,就不可能只用于治疗而不用于进化升级。
未来的经济、社会和政治,将会由“试图战胜死亡”所塑造,但并不代表人类必然能在 2100 年做到不死。
这正是历史知识的悖论。知识如果不能改变行为,就没有用处。但知识一旦改变了行为,本身就立刻失去意义。我们拥有越多数据,对历史了解越深入,历史的轨迹就改变得越快,我们的知识也过时得越快。
我们每个人都出生在某个特定的历史现实中,受特定的规范和价值观制约,也由独特的经济和政治制度来管理。我们都会觉得自己所处的现实是理所当然的,认为这一切纯属自然、不可避免、无法改变。但我们忘了世界是由一连串的意外事件所创造的,历史不仅塑造了我们的科技、政治和社会,也塑造了我们的思想、恐惧和梦想。
研究历史,就是为了挣脱过去的桎梏
那些希望改变世界的举动,常常从改写历史入手,从而使人们能够重新想象未来。
这种在私人住宅和公共建筑前设置一片草坪的想法,诞生于中世纪晚期英法两国贵族的城堡。到了现代早期,这个习惯已经根深蒂固,成了贵族的标志。
除了玉米和小麦之外,草是美国时下最普遍的作物,草坪业(包括植物、肥料、割草机、洒水设备、园丁)每年产值有数十亿美元。
这正是研究历史最好的理由:不是为了预测未来,而是要摆脱过去,想象另一种命运。当然,我们仍不免受到过去的影响,所以永远不可能得到完全的自由;然而,部分自由总比全无自由要好得多。
本章描述的未来,只是“过去的”未来;换句话说,也就是基于过去 300 年的思想和希望而指向的未来。然而,基于 21 世纪将诞生的新想法、新希望而形成的真正的未来,可能与过去的未来完全不同。
想知道超级聪明的半机械人可能怎么对待只是一般血肉身躯的人类吗?先去看看人类如何对待不太聪明的动物表亲吧。当然,这绝不是一个完美的类推,但这是我们唯一能够观察而不只是想象的最佳原型。
人们之所以不愿改变,是因为害怕未知。但历史唯一不变的事实,就是一切都会改变。
人类开始农耕畜牧之后,导致新一波的生物大灭绝,但更重要的是创造出另一种全新的生命形式:家畜。
所有的本能、冲动、情感之所以会进化,都是为了适应生存和繁衍的进化压力。
这是进化心理学基本的一课:几千世代以前形成的需求,就算已经不再是今日生存和繁衍所需,仍然会留存在主观感受中。可悲的是,农业革命让人类有了确保家畜生存和繁衍的能力,却忽视了家畜的主观需求。
全球无数教师传颂着牛顿的神话,鼓励学生要有好奇心,暗示只要我们得到足够的知识,就能在地球上创造出天堂。
农业革命促成了有神论宗教,而科技革命则催生了人文主义宗教:以人取代了神。有神论者崇拜的是神,人文主义者则是崇拜人。人文主义的奠基概念认为智人拥有某些独特而神圣的本质,这些本质是宇宙间所有意义和权力的来源。
意识可能就是在复杂的神经网络信号传送之后造成的心理污染,没有任何功用,
由于计算机是以硅为基础的,而人类的神经网络是以碳为基础的,两者架构大不相同,因此人类意识的特征很可能无法套用。
本质上,我们人类和大鼠、狗、海豚或黑猩猩并没有多大的差异。正如它们,我们也没有灵魂。正如我们,它们也有意识,有着充满感觉和情感的复杂世界。
根据智力的大多数定义,人类在大约1万年前就已经成为地球上最聪明的动物,也是工具制作的冠军,人类却仍然只是一种不重要的生物,对周围的生态系统也没有什么影响力。
如今人类完全主宰地球,并不是因为单个人比单个黑猩猩或狼更聪明,或是手指更灵巧,而是地球上只有智人这个物种能够大规模而灵活地合作。
纵观历史,纪律严明的军队就是能击败散兵游勇,志同道合的精英就是能主导无序大众。
虽然权力已经从掌权者手中滑落,却不是由广场上的群众来承接,虽然他们人数众多、群情激昂,却不知道该怎样组织起来。因此,权力又来到了一小群政治玩家的手中,他们唯一有的就是良好的组织能力。
在社会主义罗马尼亚,几乎一切都归于国有。但到了民主的罗马尼亚,却迅速将一切资产私有化,再以低廉的价格售予前政府高官;只有这些人知道发生了什么事,并且合作互谋其利。控制着国家基础设施和天然资源的国营公司,被以特价出售给前政府高官,同时基层官员也能用极低的价格买到房屋和公寓。
整个蜂巢的能力会远大于单只蝴蝶的能力,然而这并不意味着单只蜜蜂比单只蝴蝶更神圣。
对于黑猩猩、狼和海豚等有社会关系的哺乳动物,社交合作大多以彼此认识为基础。以黑猩猩为例,它们一定要等到互相熟识、建立起社会阶级之后,才有可能一起去猎食。因此,黑猩猩要花很多时间进行社会互动、权力斗争。如果两只不认识的黑猩猩碰到一起,通常不但不能合作,反而会互相咆哮、扭打或是尽快逃离。
研究指出,不论是朋友还是敌人,智人能够真正熟识的对象不超过150人。不管人类靠什么打造出了大规模合作网络,总之绝不是仅靠个人熟识而已。
由于组织和经费因素,绝大多数实验对象都只是个人或小型群体。然而,想用小群体的行为来推断大众社会的动态,风险实在很高。拥有1亿人口的国家,运作方式从根本上就和100人的小部落大不相同。
最后通牒博弈(100美元的自由划分)影响深远,不仅动摇了古典经济学理论,也建立起近几十年最重要的一项经济学发现:智人的行事并不是依照冷冰冰的数学逻辑,而是根据有温度的社交逻辑。
这样的威胁和承诺通常都能成功创造稳定的阶级制度和民众合作网络,但前提是民众相信自己是在顺应不可避免的自然法则,或是神的旨意,而不只是听命于另一个人。所有的大规模人类合作,到头来都是基于我们想象的秩序。
多数人以为,现实只有客观或主观两种,没有第三种可能。
现实还有第三个层次:互为主体(intersubjective)。这种互为主体的现实,并不是因为个人的信念或感受而存在,而是依靠许多人类的沟通互动而存在。
1991年12月8日,在维斯库里(Viskuli)附近的一幢乡间大宅,俄罗斯、乌克兰和白俄罗斯的领导人签署了《别洛韦日协定》其中声明:“吾等白俄罗斯共和国、俄罗斯联邦暨乌克兰,作为1922年苏联成立条约之签署创始国,兹声明终止苏联作为国际法主体及地缘政治现实。”就这样,苏联从此解体。
我们希望相信自己的生命有客观意义,希望自己的种种牺牲不只是为了脑子里的各种空想。但事实上,大多数人生活的意义,都只存在于彼此讲述的故事之中。
不过,经过几十年、几世纪,意义的网也可能忽然解体,而由一张新的网取而代之。读历史就是在看这些网的编织和解体,并让人意识到,对这个世代的人来说最重要的事情,很有可能对他们的后代就变得毫无意义。
这正是历史展开的方式。人类编织出一张意义的网,并全然相信它,但这张网迟早都会拆散,直到我们回头一看,实在无法想象当时怎么可能有人真心相信这样的事。
智人则是活在一种三重现实之中。除了树木、河流、恐惧和欲望,智人的世界还有各种关于金钱、神、国家和公司的虚构故事。历史逐渐展开,神、国家和公司的影响不断增长,而河流、恐惧和欲望则被弱化。
文字与货币让人突破了人类大脑的数据处理限制。文字和货币让人类开始能够向数十万人收税,从而组织起复杂的官僚体系,建造出幅员辽阔的王国。
-现代非洲各国边界所反映的并不是当地民族自己的期许和斗争,而是由从未踏足非洲的欧洲官僚一笔画定。
分数是历史相对晚一些的发明。
就像法老统治下的埃及、欧洲的各个帝国以及现代的学校系统,这些真正有力的人类组织,并不一定都把现实呈现得清清楚楚。这些组织大部分的力量,都在于能够将虚构的信仰建立在一个让人顺从的现实之上。
在包括英美在内的全世界许多国家,证人上法庭做证,也会把手放在《圣经》上,发誓说出事实、完整的事实,也唯有事实。然而,发这个誓的时候,他们所凭依的书里竟充满虚构、神话和错误,岂不讽刺?
虚构故事能让人类更容易合作,但代价在于,这些虚构故事同时也会决定我们合作的目标。因此,我们可能拥有非常复杂的合作制度,却只是为了服务于虚构的目标和利益。这样一来,虽然整个制度看起来运转良好,但出发点可能只是这个制度的标准。
想评估人类合作网络究竟是好是坏,一切都取决于用什么标准和观点。
人类往往为某些虚构实体(例如神和国家)的荣誉而努力,而不是让真正拥有感受的生命过得更好。
现代科学和宗教的关系究竟是什么?
撒旦不知道怎样才能让自己创造的事物永续,因此在物质的世界里,一切终将腐败瓦解。为了将自己创造的瑕疵品赋予生命,撒旦就会诱惑来自纯洁灵性世界的灵魂,再将灵魂关在物质的身体里,这就成了人:一个美好而灵性的灵魂,被困在邪恶而物质的身体里。
只要是在人生旅程中质疑着各种世俗的惯例和契约,并前往未知的目的地,我们都会称之为灵性之旅。
贩卖赎罪券
从历史的观点来看,灵性之旅总是以悲剧收场,因为这是一条孤独的道路,只适合个人,而不适合整个社会。人类要合作,就不能只有问题,而是需要坚定的答案。推倒某些荒谬的宗教制度,往往又促成了新的宗教制度的建立。
《君士坦丁赠礼》是在大约公元 8 世纪的时候,在古罗马教廷伪造而成。虽然瓦拉从未质疑这份古代帝王谕令的道德权威,但他的科学分析确实影响了这份谕令的具体指示,也就是欧洲人应该服从教皇的谕令。
罗马人为了镇压犹太起义(Great Jewish Revolt),于公元70年一把火烧毁了耶路撒冷及圣殿。圣殿成了残垣断壁,祭司家族霎时失去了宗教权威与经济权力基础,甚至失去了存在的理由。以犹太教圣殿、祭司和英勇战士为特点的传统犹太教,从此消失于历史;取而代之的是一个以书籍、拉比和吹毛求疪的学者为特点的新犹太教。
现代政治和经济笃信增长的必要性有三个原因。
至于新加坡这个极其务实的城市国家,更进一步实践了这种思维,让部长的薪资与国家GDP挂钩。
由于经济增长据称是一切美好事物的源头,因此它鼓励大家放下各种道德的偏见,共同采取能够使成功最大化的长期措施。
国际象棋这种源于前现代时期的游戏,假设的就是一个停滞的经济。你在开局的时候有16枚棋子,等到游戏结束,也绝不可能多出任何1枚。虽然极少数情况能让你把兵变成后,但就是不会有多出来的新棋子,也不可能把马升级成坦克。所以,国际象棋玩家永远不用考虑投资这回事。相比之下,许多现代桌游或计算机游戏都把投资增长当作重点。
人类经济之所以能够增长,是因为人类可以找到新的原材料、新的能源。
传统观念把世界看成一块大小固定的饼,隐藏的假设就是世界上只有两种资源:原材料和能源。但事实上,资源有三种:原材料、能源和知识。原材料和能源取之有尽,用得越多,剩下的就越少;但知识是不断增长的,用得越多,反而拥有越多。而且,随着知识的不断增长,还能带来更多原材料和能源。
资源短缺的问题看起来很有可能被克服,但现代经济真正的敌人是生态崩溃。
由于发展的脚步不断加快,犯错的空间也在不断缩小。以前可能只要一个世纪发明出一项神奇的产品便已足够,但现在可能每两年就得设法拿出一项奇迹。
目前的主政者表面上重视环保,收割眼前的政治利益,却把减少排放(也就会减缓增长)要付出的重大政治代价留给了未来的主政者。
穷人怎么了?他们为什么不抗议?如果洪水真的来临,穷人将付出所有代价;如果经济停滞,穷人也首当其冲。在资本主义世界里,穷人的生活唯有在经济增长时才可能改善。因此,如果一定要放慢当下的经济增长速度,以减少未来的生态威胁,并不太可能得到他们的支持。
《共产党宣言》说得精辟,现代世界就是“永远的不安定和变动”,各种固定的关系和古老的偏见都遭到扫除,而新的结构等不到固定便已经陈旧,一切固定的东西都烟消云散。在这样混乱的世界中,生活本已不易,管理则更是难上加难。
从目前的事实看,人类不仅比过去任何时候都更有力量,而且也更为和平,合作也更为愉快。人类是怎么做到的?在一个没有神、没有天堂、没有地狱的世界上,道德、美丽甚至同理心,是如何保存下来并且发展蓬勃的呢?
正是人文主义,让人类摆脱了人生无意义、存在无依据的困境。
人文主义宗教崇拜人性,期望由“人类”来扮演上帝在基督教或真主在伊斯兰教中扮演的角色,或自然法则在佛教和道教中扮演的角色。
我们从小就不断听到各种人文主义的口号:“要聆听自己的声音,对自己真诚,相信自己,追随自己的内心,做让自己快乐的事。”
几个世纪以来,人文主义一直想让我们认为,人类自己就是意义的本源,因此自由意志也是最高的权威。
理论上,现代的心理治疗师与中世纪的神父站在同一个位置,
中世纪将婚姻视为神赐圣事,神同时授权父亲依据自己的愿望和利益,为孩子安排嫁娶。于是,婚外情等于明目张胆地同时挑战了神权和父权。
如果某个行为不会让任何人感觉不好,就等于没错。
在过去 10 年间,以色列的 LGBT 社群每年都会在耶路撒冷的街道举行同性恋游行。在这个充满冲突的城市,这一天难得显得如此和平,因为不管是犹太教徒、穆斯林还是基督徒,都忽然有了共同的敌人:同性恋游行。
个人的自由意志选择正是最终的政治权威。
在伦理上,人文主义的座右铭是“感觉对了,就做吧”。在政治上,人文主义告诉我们“选民能做出最好的选择”。在美学上,人文主义说“看的人觉得美,就是美”。
人文主义思想的兴起也彻底改变了教育制度。在中世纪,所有意义和权威都来自外部,因此教育的重点在于顺从、背诵经文、研读古老传统。
对于天使和魔鬼的概念,已经从漫游在森林和沙漠中的实体,转换为人类内心的力量。天堂和地狱也不再是云层之上和火山之下的实际地点,而是人类内在的精神状态。只要你心中燃起愤怒和仇恨的火焰,就是经历地狱的苦痛;只要你原谅敌人、忏悔错误、与穷人分享财富,就是享有天堂的幸福。
人文主义认为生命就是一种内在的渐进变化过程,靠着体验,让人从无知走向启蒙。人文主义生活的最高目标,就是通过各式智力、情绪及身体体验,充分发展人的知识。
存在的目的就是“在生命最广泛的体验中,提炼出智慧”。他还写道:“生命只有一座要征服的高峰——设法体验一切身为人的感觉。” 这正可作为人文主义者的座右铭。
自由主义政治认为,选民能做出最好的选择。自由主义艺术认为,观看作品的人觉得美,就是美。自由主义经济学认为,顾客永远是对的。自由主义伦理认为,只要感觉对了,就该去做。自由主义教育认为,我们要为自己思考,因为从内心就能找到所有答案。
我当下的政治观点、喜好与厌恶、兴趣和抱负,都没有反映真实的自我,只是反映了我的成长和社会环境,这都是由我的阶级、邻里和受教育水平决定的。
社会主义并不鼓励自我探索,而是主张建立强有力的集体制度(比如社会主义政党和工会),为我们解读这个世界。
进化人文主义源于达尔文的进化论,认为冲突是福不是祸,能够促成自然选择、推动进步。
进化并不是到了智人就停止,后面还有很长的路要走。如果以人权或人类平等之名,去压制人类的最适者,就不可能产生超人类,甚至可能导致智人退化和灭绝。
战争是让自然选择全然脱缰,消灭弱者,奖励残暴及野心。战争揭示出生命的真相,唤醒获得权力、荣耀和征服的意志。尼采的结论是:战争是“生命的学校”,“那些杀不死我的,会使我更强大”。
和平的时候,全世界大概有九成的人,过的大概都是邪恶而商业化的生活,愚蠢、自私、奢侈、执着于鸡毛蒜皮的小事。但到了战时,一切都变得野蛮,但至少更诚实,也更直接。
反清的太平天国运动,时间从 1850 年到 1864 年,是整个 19 世纪最惨烈的一场战争,惨烈程度远超过拿破仑战争或美国内战。
如果你也认为全国的卫生服务、退休基金和义务教育十分重要,应该感谢马克思和列宁(以及俾斯麦),而大概不会感谢洪秀全或马赫迪。
在马克思之前,人们定义和区分彼此的标准是对上帝的看法,而不是生产方式。在马克思之后,比起关于灵魂和来世的辩论,科技与经济结构问题更为重要,造成的分裂也更加严重。
几个世纪以来,修道院和教会学校一直是欧洲最重要的学习中心,协助成立诸多欧洲顶尖大学,例如,博洛尼亚大学、牛津大学,以及萨拉曼卡大学。
《圣经》早已不再真正启发灵感,但仍被尊为权威的来源。
人文主义长期崇拜人类的生命、情感及欲望,于是人文主义文明希望让人有最长的生命、最大的幸福、最强的力量。
就目前最先进的科学来看,人的选择不是生物预设就是随机,
根据进化论,动物做的所有选择(选择栖息地、食物或伴侣)都是基因密码的反映。
因为大脑里某种生化过程创造出的感觉。这些过程可能是生物预设,也可能是随机发生的,但绝不是自由意志。
人的欲望不是一种“选择”,我们只能“感觉”到欲望,再据以行事。
你或许觉得不服气,认为如果能让脑中的声音噤声或是放大,其实是增强而非削弱了自由意志。
自由主义认为每个人都有单一的、不可分割的自我。“individual”(个人)这个英文单词的意思,就是“in-dividual”(不可分割)。
左右脑也有情感和认知方面的分工,只是不够清晰。例如,多数认知活动都会同时用到左右脑,只是程度有大小之别。例如,在大多数情况下,左脑在语言和逻辑推理时扮演着较重要的角色,右脑则在处理空间信息时有较大优势。
关于癫痫患者:在 20 世纪中叶,如果其他疗法都无法奏效,医生的最后一招就是把连接两个半球的神经束切断,让某个脑半球掀起的电子风暴不会影响到另一半球。
人体内至少有两种自我:体验自我(experiencing self)及叙事自我(narrating self)。
许多妇女分娩时都会经历难以忍受的痛苦,这会让人认为,只要生过一次,没有哪个心智正常的女性会愿意再生一次。但在分娩后的几天,内分泌系统会分泌皮质醇和β–内啡肽,舒缓疼痛,让人感到安慰,甚至是欢快,再加上对小婴儿的爱与日俱增,又得到来自亲友、宗教和民族主义宣传的多方赞誉,从而合力把分娩从创伤转为正面记忆。
体验自我和叙事自我并非各自独立,而是紧密交织的。叙事自我也会用到我们的种种体验,作为重要(但非唯一)的故事素材。反过来,这些故事也会塑造体验自我的种种感受。
我们对一个想象故事做出的牺牲越多,就可能越坚持,只为了让我们的一切牺牲和痛苦有意义。
活在幻想里是一个更为轻松的选项,唯有这样,才能让一切痛苦有了意义。
我们的叙事自我宁可在未来继续痛苦,也不想承认过去的痛苦完全没有意义。最后,如果我们想把过去的错误一笔勾销,叙事自我就一定得在情节中安排某个转折,为错误注入意义。
在今天的许多不对称冲突中,大多数公民只能作为各式先进武器的人肉盾牌。
必须是具有意识的个体,才能执行需要高度智能的任务,例如下棋、开车、诊疗,或是辨认出恐怖分子。
军队和企业需要具有智能的代理人才有办法运作,但这样的代理人却不见得需要有意识和主观体验。
我们回想一下,马在工业革命开始后命运如何。任何一匹农场里的马,不论是在嗅觉、爱的能力、认人的能力、跳过栅栏的能力或是其他上千件事情上,绝对都远高于历史上首款平民汽车福特T型车,或是价值百万美元的兰博基尼。
2015 年 8 月,谷歌实验中的无人驾驶汽车发生了车祸。当时这辆车正接近一个十字路口,发现有位行人想过马路,于是刹了车。但接着这辆车就遭到后方车辆追尾,后面那辆车的人类司机心不在焉,可能正思索着宇宙的奥秘,结果就忘了看路。
虽然人类总对自己的情绪智能洋洋得意,却也常常受情绪影响,做出消极反应。
人类有两种基本能力:身体能力和认知能力。在机器与人类的竞争仅限于身体能力时,人类还有数不尽的认知任务可以做得更好。所以,随着机器取代纯体力工作,人类便转向专注于需要至少一些认知技能的工作。然而,一旦算法在记忆、分析和辨识各种模式的能力上超过人类,会发生什么事?
随着时间的推移,不仅是因为算法变得更聪明,也是因为人类逐渐走向专业化,所以用计算机来取代人类越来越容易。
人工智能目前绝无法做到与人类匹敌。但对大多数的现代工作来说,99% 的人类特性及能力都是多余的。人工智能要把人类挤出就业市场,只要在特定行业需要的特定能力上超越人类,就已足够。
随着算法将人类挤出就业市场,财富和权力可能会集中在拥有强大算法的极少数精英手中,造成前所未有的社会及政治不平等。
从生命科学的角度来看,艺术并不是出自什么神灵或超自然灵魂,而是有机算法发现数学模式之后的产物。
2011年,柯普出版了《激情之夜:人和机器所作的俳句两千首》( Comes the Fiery Night: 2000 Haiku by Man and Machine),其中有一部分是安妮写的,其他则来自真正的诗人。但书中并未透露具体篇目的作者是谁。如果你认为自己一定可以看出人类创作与机器作品的差异,欢迎挑战。
到了 2033 年,计算机能够取代考古学家的可能性只有 0.7%,因为这种工作需要极精密的模式识别能力,而且能够产生的利润又颇为微薄,因此很难想象会有企业或政府愿意在接下来20年间投入足够的资本,将考古学推向自动化。
一旦人工智能超越人类智能,可能就会直接消灭人类。人工智能这么做的理由,一是可能担心人类反扑、拔掉它的插头,二是要追求某种我们现在还难以想象的目标。
“量化自我”(Quantified Self)的运动认为,所谓的自我,就是数学模型。但这些模型非常复杂,人类心智无法理解。所以,如果真想遵从德尔菲神殿的神谕“认识你自己”,就别再浪费时间研究哲学、冥想或精神分析,反而该系统性地收集自己的生物计量数据,允许算法为你分析这些数据,告诉你你是谁、该做些什么。这波运动的箴言,就是“通过数据,认识自己。”
算法并不会忽然占领、奴役人类,反而是能够帮上大忙,为我们做出各种明智的抉择。到那时候,不听算法的,才是不明智的决定。
像这种追求健康的愿望,很可能让我们大多数人都愿意突破保护个人隐私的阻碍,允许国家机构或跨国公司进入我们身体的最深处。举例来说,允许谷歌阅读我们的电子邮件、追踪我们的各种活动,就可能让谷歌在流行病暴发而传统卫生机构都还浑然不觉的时候,向我们发出警告。
在2008年,谷歌确实推出了谷歌流感预测(Google Flu Trends)服务,靠着监测谷歌搜索内容,追踪流感暴发的迹象。
从以前到现在,人类都是自主实体,由叙事自我叙写的故事所操纵。但在未来,每个人都将会是整个巨型全球网络的一部分。
正如卡尼曼的冷水实验,叙事自我到了政治领域,一样会遵循“峰终定律”,忘了绝大多数的事情,只记得几件极端的事件,并对最近的事件赋予完全不成比例的高权重。
在欧洲帝国主义的全盛时期,殖民者和商人用彩色的珠子,就从当地人那里换来了整座岛屿、整个国家。而在 21 世纪,个人数据可能是大多数人能够提供的最宝贵资源,但我们正亲手把这些数据交给各大科技企业,好换来免费的电子邮箱或是有趣的小猫视频。
今天在美国,读电子书的人数已超过读纸质书的人数。比如亚马逊的Kindle等电子书,就能在用户阅读时收集数据。举例来说,你的Kindle会知道你在哪些地方读得快、哪里读得慢,在哪一页你休息了一会儿,又是在哪一行你放弃了这本书,再也没读过(最好赶快告诉作者,让他重写那一部分)。
最后可能是我们一分一秒都无法与这个全知的网络断开。断开,就等于死亡。假设医疗理想得以实现,未来的人类将会在体内植入许多生物监测装置、仿生器官和纳米机器人,以监测人体健康状况,并避免感染、疾病和伤害。
21世纪的新科技可能会彻底扭转人文主义革命,让人类交出权威,送到非人类的算法手中。如果你觉得这个方向实在太骇人,该怪的并不是那些计算机怪才,这其实是生物学家的责任。
一旦生物学家判断生物也是算法,就等于拆除了有机和无机之间的那堵墙,让计算机革命从单纯的机械事务转变为生物的灾难,也将权威从个人转移到了算法网络。
确实有些人对这种发展感到恐惧,但事实上,也有数百万人再乐意不过。今天许多人已经放弃了自己的隐私和个性,把许多生命点滴全放到网络上,每个行动都记录下来,与网络的连接一中断,就算只是几分钟,也会让他们歇斯底里。
今天,大多数企业和政府都会尊重每个人的个性,承诺依据每个人的需求和愿望提供医药、教育和娱乐活动。但为了达到这个目的,企业和政府就得将个人解构为许多生化子系统,用无所不在的传感器监测这些子系统,并用强大的算法加以解读。在这个过程中,我们会发现所谓不可分割的个体只是一个宗教幻想。现实中,个人是许多生化和电子算法的混合体,没有清晰的边界,也没有自我中心。
在自由主义面临的三个实际威胁中,我们已经讨论了两个: * 第一,人类将完全不具价值;
人类如果从生物定义上分裂成不同的阶级,就会摧毁自由主义意识形态的根基。有自由主义的地方,仍然可能有各种社会及贫富差距,而且因为自由主义把自由看得比平等更为重要,所以甚至也觉得有差距是理所当然,但自由主义仍然假定所有人都有同样的价值和权威。
自由主义面对社会不平等的解药,不是让每个人都有同样的体验,而是对于不同的人类体验赋予同等的价值。然而,如果贫富差距已经不只体现在财产价值上,而且出现了真正的生物学上的差异,这一套还行得通吗?
到 2016 年年初,全球 62 名最富有的人,拥有的财产总值等于最贫穷的 36 亿人的总和!由于目前全球人口约为 72 亿,也就是说,这 62 名亿万富翁所拥有的财富,大约就是较为贫穷的全球一半人口的财产总和。
20 世纪的医学旨在治愈病人,但 21 世纪的医学则逐渐走向要让健康的人再升级。“治愈病人”代表的是一种平等,因为这假设有个身心健康的规范标准,而人人都应享有这样的健康。
相较之下,要让健康的人再升级,背后则是精英的概念,因为这里并没有所有人通用的标准,而是要让某些人比其他人 做比较的时候,我们找的比较对象通常都是同时代更幸运的人,而不是以前命运不佳的祖先。
人类最大的医疗成就正是为大众提供卫生设施、疫苗接种,消灭流行病。
人类在 20 世纪的伟大成就——克服饥荒、瘟疫和战争——都是为了让所有人享有富足、健康与和平。至于 21 世纪的新议题:获得永生、幸福快乐、化身为神,也同样希望为全人类服务。
就像社会主义承诺以蒸汽和电力为世界提供救赎,在接下来的几十年间,新的科技宗教也可能承诺以算法和基因为世界提供救赎,进而征服世界。
早在一个世纪前,进化人文主义就希望创造出超人类,而现在的科技人文主义则可说是这个梦想的新形态。希特勒等人的想法,是要通过选择性育种和种族清洗来创造超人,但21世纪科技人文主义则希望通过基因工程、纳米技术和脑机界面,以更和平的方式达成这个目标。
萨满、僧侣或修士都很有系统地探索心智这片神秘的土地,并带回种种激动人心的故事,诉说着我们闻所未闻的意识状态,比如无上的宁静、极端的敏锐、无可比拟的感性,讲述着心智如何延展至无边无际、遁入一片虚空。
蝙蝠活在一个回声的世界里。就像人类的世界认为每个物品都有代表性的外形及颜色,蝙蝠的世界则认为每个物品都有专属的回声模式。仅从某只飞蛾纤纤翅膀反射的回声,蝙蝠就能判断这只飞蛾究竟是美食还是毒药。
回声定位世界复杂和激烈的程度,并不亚于我们所熟悉的视觉及听觉世界,但我们就是全然未知。
关于心智的哲学,一篇经典之作就是《当蝙蝠的感觉如何?》(What Is It Like to Be a Bat?)
智人之所以统治世界,并不是因为智人的情感更深刻或音乐体验更复杂。至少在某些体验领域里,智人确实可能不如鲸鱼、蝙蝠、老虎或鹈鹕。
现代人类已经患上“错过恐惧症”(Fear Of Missing Out,FOMO),总在担心自己错过了什么;虽然手中的选择比以往任何时候都多,但选了之后又很难全心全意对待。
抑郁的人常常想要的并不是简单的解决方案,而是希望有人能够聆听他们的想法、同情他们的恐惧和疑虑。
真正感情好的朋友会比较有耐心,不会急着找出解决方案,而是会聆听你的忧虑,给你时间和空间,好让种种矛盾的情绪和折磨人的焦虑一一浮现。
目前最耐人寻味的新兴宗教正是“数据主义”(Dataism),它崇拜的既不是神也不是人,而是数据。
数据主义指出,同样的数学定律同时适用于生化算法及电子算法,于是让两者合而为一,打破了动物和机器之间的隔阂,并期待电子算法终有一天能够解开甚至超越生化算法。
根据这种观点,自由市场资本主义和国家控制共产主义就不是意识形态、伦理教条或政治制度上的竞争,而根本是不同数据处理系统间的竞争。资本主义采用分散式处理,而苏联式共产主义则是集中式处理。资本主义让所有的生产者和消费者直接相连,并允许他们自由交换信息、独立做出决定来处理数据。
正如奥地利经济学家弗里德里希·哈耶克(Friedrich Hayek)所说:“在一个把相关事实的知识分散给许多人的系统中,可以靠价格协调不同人各自的独立行动。”
苏联及东欧可说是尽力逼近。它们放弃了分散式数据处理的原则,转换为集中式数据处理,苏联各地的所有信息都流向莫斯科一处,也是由莫斯科做出所有重大决定。生产者和消费者无法直接沟通,而且必须服从政府的命令。
资本主义能够赢得“冷战”,是因为至少在这个科技加速改变的时期,分散式数据处理的效果就是比集中式数据处理更好。20 世纪末期的世界变化实在太快,苏联共产党中央委员会无法处理。像这样把所有数据都集中起来、所有重大决策都由一群官员决定,虽然能够生产出原子弹,却绝不可能打造出苹果或维基百科。
在未来几十年间,我们很可能还会看到更多类似互联网的革命,而科技会抢走政治的所有风头。人工智能和生物科技可能即将彻底变革人类社会和经济,甚至是人类的身体和心智,但当前的政治对此却几乎毫无警觉。现今民主制度收集和处理相关数据的速度太过缓慢,而且大多数选民对生物学和控制论(cybernetics)的认识也不足,无法形成切中要点的意见。因此,传统民主政治正逐渐失去控制,也提不出有意义的未来愿景。
正因为科技进步如此迅速,不论议会还是独裁者都被来不及处理的数据压得喘不过气,现今政治人物的眼界,要比一个世纪前狭窄太多。于是,到了 21 世纪早期,政治已不再有宏伟愿景,政府就只剩下行政功能,维持着国家现状,却不再能够带领人民向前。
许多新自由主义经济学家和政治学家认为,所有重大决策最好都交给自由市场来决定,结果这就成了政客无为和无知的借口,还认为这种做法是大智慧。对政客来说,反正一切交给市场就好,自己何必要懂这个世界呢?这可真是太方便啦!
之所以不该将未来完全交给市场力量来决定,是因为这些力量造成的结果可能只利于市场,而不见得有利于人类或全世界。市场那只手不仅人类看不见,而且它本身也是盲目的。如果完全不加约束,面对类似全球变暖的威胁或人工智能的潜在危险时,市场就有可能毫无作为。
权力真空的状况并不会持续太久。如果传统政治结构在21世纪无法迅速处理数据,形成有意义的愿景,就会出现更有效率的新结构,取代它们的地位。这些新的结构可能完全不同于任何先前的政治制度,既非民主,也非专制。这里唯一的问题,就是由谁来建立并控制这些结构。
有些人其实很愿意成为数据流的一部分,就算这代表着放弃隐私、自主性和个别性,他们觉得这无伤大雅。
随着全球数据处理系统变得全知全能,“连接到这个系统”也就成了所有意义的来源。人类之所以想要融入这个数据流,正是因为只要成为数据流的一部分,你就会加入一个比自己更伟大的计划。
至于现在的数据宗教则说,你说的每个字、你的每个举动,都是伟大数据流的一部分,算法一直看着你,也在意你的所有想法与感受。
人文主义认为所有的体验发生在我们心中,我们要从自己的心里找出一切事物的意义,进而为宇宙赋予意义。数据主义则认为,体验不分享就没有价值,而且我们并不需要(甚至不可能)从自己心里找到意义。我们该做的,就是要记录自己的体验,再连接到整个大数据流中,接着算法就会找出这些体验的意义,并告诉我们接下来该怎么做。
我们必须向自己和系统证明自己仍然有价值,而且价值不在于单纯拥有体验,而在于能将体验转化为自由流动的数据。
数据主义对人类的体验并没有什么恶意,只是并不认为体验在本质上有何价值。
在《黑客帝国》(Matrix)里,主角原本完全被超级计算机玩弄于掌心,被邪恶的机器人射了满满一轮子弹,但受到爱人的启发,就忽然大显神威,彻底扭转局势。
你的感觉正是几百万祖先的声音,而且他们都撑过了严酷的环境,成功生存和繁衍下来。
随着机器学习和人工神经网络兴起,有越来越多算法会独立进化、自我改进、从自己的错误中学习。这些算法分析的数据量是天文数字,绝非人力可及,而且它们也能找出人类找不出的模式,采用人类想不到的策略。最早的种子算法或许是由人类开发的,但算法逐渐发展,就会走出自己的路,前往人类未曾踏足之地,而且人类也无力追寻。
感谢戴维·米尔纳(David Milner),他绝佳的编辑功力帮助我减少了许多丢脸的错误,并提醒我键盘上最重要的键可能就是“Del“.
[toc]
卡尔曼滤波 (Kalman filter) 是在存在不确定下做信息融合 (combining information) 的通用工具。
It is such a general and powerful tool for combining information in the presence of uncertainty.
You can use a Kalman filter in any place where you have uncertain information about some dynamic system, and you can make an educated guess about what the system is going to do next.
卡尔曼滤波适用于连续变化 (continuously changing) 的系统,具有占用内存空间小(除了前一个状态量外,无需保留其他历史数据),处理速度快的特点,适合应用于实时问题和嵌入式系统。
Kalman filters are ideal for systems which are continuously changing. They have the advantage that they are light on memory (they don’t need to keep any history other than the previous state), and they are very fast, making them well suited for real time problems and embedded systems.
卡尔曼的一个应用举例:测量坦克的油量,汽车引擎的温度,用户在触摸板上的手指位置,甚至所有你可以跟踪 (track) 的物体。概括的讲,只要用“跟踪”这个词来形容的算法,即tracking、Tracker等这种词描述的算法,基本都要用kalman滤波处理下数据。
It could be data about the amount of fluid in a tank, the temperature of a car engine, the position of a user’s finger on a touchpad, or any number of things you need to keep track of.
The Kalman filter assumes that both variables are random and Gaussian distributed. Each variable has a mean value 𝜇, which is the center of the random distribution (and its most likely state), and a variance 𝜎2, which is the uncertainty.
从参数之间的关联发掘更多信息:比如机器人的速度和位置,如果速度快,那么位置可能就比较远。
This kind of relationship is really important to keep track of, because it gives us more information: One measurement tells us something about what the others could be. And that’s the goal of the Kalman filter, we want to squeeze as much information from our uncertain measurements as we possibly can!
参数之间的相关性,可以用协方差矩阵 (covariance matrix) 来表示,即矩阵中的每个元素 ∑ij 表示第 i 个和第 j 个状态变量之间的相关度。注意,协方差矩阵是一个对称矩阵,这意味着可以任意交换 i 和 j。
This correlation is captured by something called a covariance matrix.
We need some way to look at the current state (at time k-1) and predict the next state at time k. We can represent this prediction step with a prediction matrix, Fk.
请注意,预测矩阵要求严格反映运动的特征,要求预测准确,不能模糊。
For prediction matrix, it takes every point in our original estimate and moves it to a new predicted location, which is where the system would move if that original estimate was the right one.
不太理解这个公示是如何推导出来的,数学的理论知识不够踏实。
外部系统的影响
There might be some changes that aren’t related to the state itself — the outside world could be affecting the system.
Everything is fine if the state evolves based on its own properties. Everything is still fine if the state evolves based on external forces, so long as we know what those external forces are.
如何应对外界的不确定性,比如四旋翼控制中的风影响。
We can model the uncertainty associated with the “world” (i.e. things we aren’t keeping track of) by adding some new uncertainty after every prediction step * Every state in our original estimate could have moved to a range of states.
图片讲解
In other words, the new best estimate is a prediction made from previous best estimate, plus a correction for known external influences.
And the new uncertainty is predicted from the old uncertainty, with some additional uncertainty from the environment.
We might have several sensors which give us information about the state of our system.
Each sensor tells us something indirect about the state— in other words, the sensors operate on a state and produce a set of readings.
The units and scale of the reading might not be the same as the units and scale of the state we’re keeping track of. You might be able to guess where this is going: We’ll model the sensors with a matrix.
卡尔曼滤波的精妙处:
One thing that Kalman filters are great for is dealing with sensor noise. In other words, our sensors are at least somewhat unreliable, and every state in our original estimate might result in a range of sensor readings.
From each reading we observe, we might guess that our system was in a particular state. But because there is uncertainty, some states are more likely than others to have have produced the reading we saw.
We have two Gaussian blobs: One surrounding the mean of our transformed prediction, and one surrounding the actual sensor reading we got.
配图
We must try to reconcile our guess about the readings we’d see based on the predicted state (pink) with a different guess based on our sensor readings (green) that we actually observed.
If we have two probabilities and we want to know the chance that both are true, we just multiply them together.
The mean of this distribution is the configuration for which both estimates are most likely, and is therefore the best guess of the true configuration given all the information we have.
卡尔曼滤波用于线性系统,扩展卡尔曼滤波适用于非线性系统。
This will allow you to model any linear system accurately. For nonlinear systems, we use the extended Kalman filter, which works by simply linearizing the predictions and measurements about their mean.
[toc]
作为开发人员,随着业务逻辑和功能需求的不断增加,我们经常需要维护一系列 IF...THEN...ELSE 或者 select-case 的业务逻辑 (business rules)。这部分业务规则的不断扩充,会使得代码越来越凌乱和难以维护,逐渐变成开发人员的噩梦。
举个简单的例子来感受下程序员在面对繁杂规则下的无奈。
小王家的奶牛场新进一批次奶牛,有白奶牛,黑奶牛和斑点奶牛。小王邀请你写一段程序模块,预测下各种品种的奶牛喜欢到哪块地里吃草。我们这里假设奶牛的行为受到阳光,风,草品的影响。
1 | Location moves_to(cow, env) { |
上面是一段示例代码,可以看出来在只有 3 个变量(牛奶品种,阳光,风)的情况下,我们就需要写几十行的代码来实现功能。可以想象一下,在影响变量比较多的时候,业务逻辑和应用程序如果混在一起开发的话,那么开发者需要维护上百条甚至更多的 IF-statements 才可以应付。对开发人员而言,一方面这些代码没有技术含量,开发人员积极性差,另一方面频繁变更的业务需求也会带来维护,调试和测试成本的指数级增加。比如,为了找出一个业务逻辑中的问题,开发人员往往不得不遍历混在代码各处的 IF-statements 语句,效率低下且十分痛苦。
数以千计的业务逻辑在现实中非常常见,从广告推送,跑腿外卖到火箭发射等应用中,都有数不清的业务逻辑代码,我们可以把这部分需求归结为以下几方面。
那么,问题来了,我们如何在大规模软件开发中,很好地维护数以千计的业务逻辑 (IF-statements) 呢?
我们首先把这类 IF-statements 问题进行特征提取和建模,看看这类问题有什么特点呢?
1 | decision = rule(factor1, factor2, …, factorn) |
在调研中,规则引擎 (rule engine) 和 有限状态机 (finite state machine) 很快就能进入你的思路。这两种做法能够很好地解决上述问题,可以从一系列的影响因素或者特征中,经过已有的规则运算,得到最终的决策。同时,这两种做法支持业务决策逻辑从系统逻辑中抽离 (decoupling) 出来,使两种逻辑可以独立于彼此而变化,可以明显降低维护成本,同时支持业务逻辑的快速更新。
规则引擎 和 有限状态机 的详细概念,大家可以点击链接自行阅读和理解。
规则引擎是一种推理引擎,它是根据已有的事实(变量),从规则库中匹配规则,处理存在冲突的规则,执行最后筛选通过的规则。
简而言之,可以理解为是把原本杂乱不堪的 IF-statements 拆成 N 条带优先级的 " if 前提语句 then 实施语句" 的句式。
1 | # 业务逻辑 |
规则引擎通常主要使用 foreward-chaining 的 Rete 引擎,按优先级匹配条件语句,实施规则语句。规则实施后会触发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete 算法从理论上保证了服从的最高。
通常 FSM 包含几个要素:状态管理、状态监控、状态触发、状态触发后引发的动作。这些关系的意思可以这样理解:
1 | State(S) x Event(E) -> Actions (A) -> State(S’) |
如果我们当前处于状态 S,那么发生了 E 事件, 我们应执行操作 A,状态就会转换为 S’。
规则引擎和有限状态机主要在触发条件,控制权,使用约束上不一样。
在规则引擎中,上一个规则完成时会自动转移到下一个规则,而状态机则需要一个外部事件 (external event) 的触发,该事件将导致状态转移到下一个。简而言之,状态机是事件驱动型的,而规则引擎却不是。
In general, the major difference between a workflow engine and a state machine lies in focus. In a workflow engine, transition to the next step occurs when a previous action is completed, whilst a state machine needs an external event that will cause branching to the next activity. In other words, state machine is event driven and workflow engine is not.
规则引擎是可以预测的 (predictable)。系统可以根据我们在初始时提供的状态和规则来驱动流程 (process) 向前,规则控制着这个流程的发展。状态机恰恰相反,它是外部事件驱动着完成。即使我们已经定义好状态 (states) 和状态之间的转移条件 (transitions),决策进展 (decision making process) 也是由外部事件来决定的。虽然状态机遵循的结构仍然像工作流 (sequential workflow),但是控制权传递给了外部环境。
如果系统不是很复杂,那么状态机是一个很好的解决方案。如果能够绘制所有可能的状态以及触发事件,则可以使用状态机。通常,状态机可以很好地用于网络协议或某些嵌入式系统。
State machine is a good solution if your system is not very complex. You may implement it if you are capable of drawing all the possible states as well as the events that will cause transitions to them. In general, state machines work well for network protocols or some of the embedded systems.
规则引擎是管理业务流程的好方法,它是任务分配,CRM和其他复杂系统的正确解决方案。最终目标是改善业务流程和公司效率,这就是为什么它非常适合业务流程自动化的原因。
Workflow engine implementation is a good way of managing business processes. It is the right solution for task allocation, CRM and other complex systems. All in all, its ultimate goal is to improve business processes and company’s efficiency. That is why it perfectly suits for business process automation.
结合上面的分析对比,在影响因素较多,且不需要外界事件触发的情况下,使用规则引擎达到业务规则和应用的低耦合,是目前解决业务规则不断繁重的解决方案,本文后面也主要讨论规则引擎相关的问题。
在解决问题之前,最好先做充分的调研,避免重复造轮子 (Reinventing the wheel)。
规则引擎的概念最早由文章 A C++ Class for Rule-Base Objects 提出,描述了在冬季高速公路养护 (winter highway maintenance) 中的实际应用。现在看起来可能比较简单,但是放到上个世纪 90 年代,还是有新意的做法。
规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来。规则引擎使用特定的语法编写业务规则,规则引擎可以接受数据输入、解释业务规则、并根据业务规则做出相应的决策。
通俗来说,规则引擎就是负责执行系统中规则的插件,亦可以作为一个远程系统供业务系统调用。
引入规则引擎后带来的好处:
规则引擎可以在系统工作时,将外部的业务规则加载到系统中,并使得系统按照该业务规则进行工作。
一个业务规则包含一组条件和满足此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。
业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技术人员使用面向对象的技术语言或脚本来定制。
业务规则的理论基础是: 设置一个或多个条件,当满足这些条件时会触发一个或多个操作。
由于规则引擎是软件组件,所以只有开发人员才能够通过程序接口的方式来使用和控制它。
规则引擎的程序接口至少包含以下几种 API:
开发人员在程序中使用规则引擎基本遵循以下 5 个典型的步骤:
使用了规则引擎之后,许多涉及业务逻辑的程序代码基本被这五个典型步骤所取代。一个开放的业务规则引擎应该可以”嵌入”在应用程序的任何位置,不同位置的规则引擎可以使用不同的规则集,用于处理不同的数据对象。
常见的开源规则引擎 -- The Top 23 Rule Engine Open Source Projects ,如以下所示。
此外,你也找到一些其他开源的规则推导开源软件,比如基于规则表的推理软件1。
本文会挑选几款教程比较多,应用范围广的规则引擎做比较和讲解。
目前,常用的商用规则管理系统(BRMS)是 ILOG JRules,普遍使用的开源规则引擎是 CLIPS 和 Drools。
根据 官方网站 介绍,CLIPS (the C Language Integrated Production System) 于 1984 年由美国航空航天局约翰逊空间中心 (NASA’s Johnson Space Center) 推出,意在克服 LISP 移植性差、开发工具和硬件成本高、嵌入性低的缺点。
Developed at NASA’s Johnson Space Center from 1985 to 1996, the C Language Integrated Production System (CLIPS) is a rule-based programming language useful for creating expert systems and other programs where a heuristic solution is easier to implement and maintain than an algorithmic solution. Written in C for portability, CLIPS can be installed and used on a wide variety of platforms. Since 1996, CLIPS has been available as public domain software.
CLIPS 是一个基于 Rete 算法 的前向推理语言,用标准 C 语言编写。它具有高移植性、高扩展性、强大的知识表达能力和编程方式以及低成本等特点。
基本步骤:
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法 对所编写的规则求值。
Drools 允许使用声明方式表达业务逻辑,可以使用非 XML 的本地语言编写规则,从而便于学习和理解。同时,通过使用其中的DSL(Domain Specific Language),可以实现用自然语言方式来描述业务规则,使得业务分析人员也可以看懂业务规则代码。
Ilog Jrules 是由 IBM 开发的业务规则管理系统 (Business Rules Management System,BRMS),它提供了对整个企业业务规则进行建模、编写、测试、部署和维护所必需的所有工具。
因为 Ilog Jrules 不开源,同时偏向于界面维护,这里不做详细分析和比较。
根据 从0到1:构建强大且易用的规则引擎 的描述,美团点评也经历过开源 Drools 从入门到放弃的故事。
1 | 在实践中,我们发现 Drools 方案有以下几个优缺点: |
由于 Drools 的问题较多,美团点评最后放弃了 Drools,而开始基于需求模型设计一个规则引擎。
评价:在实际应用层面,重复造轮子不完全是一件坏事情,并非全无价值,例如用来回避软件许可问题、第三方模组或零件的技术限制。
重造方的轮子是重新创造一个已有的方法(重造轮子),而且其结果比已有的还差(方的轮子)。重造方的轮子是一种反模式,发生在工程师不知道或轻视标准的作法,或是不了解问题,或是不知道标准作法已可以充分地克服问题。重造方的轮子可能是经验不足的工程师所产生,或是因为第二系统效应造成。
上面的规则引擎可能千般好,但是如果我基于推理效率等考虑,就是喜欢基于业务定制开源引擎,那么应该怎么设计和实现呢?
业务定制规则引擎的优点是视图和引擎内部数据模型完全贴合业务模型,因此内部人员很容易上手;缺点是视图和引擎的设计完全基于业务模型,适用范围有限,很难低成本修改后推广到别的业务线。
标题比较复杂,我们来拆分一些。首先,我们实现的规则引擎只解决满足前向推理 (forward chaining) 的问题;其次,Rete 算法是解决前向推理问题的通用解法,我们使用这个算法是可以得到理论保证的,路子不会走太偏。
前向推理 (又叫正向推理,前向链接) 是使用推理引擎 (inference engine) 的主要方法之一,是在专家系统 (expert systems),业务和生产规则系统 (business and production rule systems) 上广泛应用的策略。
Forward chaining (or forward reasoning) is one of the two main methods of reasoning when using an inference engine and can be described logically as repeated application of modus ponens. Forward chaining is a popular implementation strategy for expert systems, business and production rule systems. The opposite of forward chaining is backward chaining.
前向推理从可用数据开始,使用推理规则来提取更多特征和数据,直到达到目的。推理引擎使用前向链接来搜索推理规则 (inference rules) 直到找到一个前提条件 (If clause) 为真;当找到这样的规则时,引擎可以得出结论或推断出结果 (Then clause),从而将新信息添加到其数据中 (可能是中间的临时特征)。推理引擎将迭代此过程,直到再无可用规则可被选用或者求得了所要求的解为止。
Forward chaining starts with the available data and uses inference rules to extract more data (from an end user, for example) until a goal is reached. An inference engine using forward chaining searches the inference rules until it finds one where the antecedent (If clause) is known to be true. When such a rule is found, the engine can conclude, or infer, the consequent (Then clause), resulting in the addition of new information to its data. Inference engines will iterate through this process until a goal is reached.
和人类的思维相对应,规则引擎中也存在两种推理方式:正向推理 (Forward-Chaining) 和反向推理 (Backward-Chaining)。
正向推理也叫演绎法,由事实驱动,从一个初始的事实出发,不断地应用规则得出结论。首先在候选队列中选择一条规则作为启用规则进行推理,记录其结论作为下一步推理时的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。
反向推理也叫归纳法,由目标驱动,首先提出某个假设,然后寻找支持该假设的证据,若所需的证据都能找到,说明原假设是正确的;若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另做新的假设。
前向推理应用规则从前提 (premises) 应用到结论 (conclusions)。目前,它使用暴力算法 (brute force algorithm),随机选择来源(source)和规则,应用规则以得出结论,重新插入结论作为新的来源 (source),并迭代上述过程直到达到停止标准 2。
The forward chainer applies rules from premises to conclusions. It currently uses a rather brute force algorithms, select sources and rules somewhat randomly, apply these to produce conclusions, re-insert them are new sources and re-iterate till a stop criterion has been met.
开源规则流引擎实践 深入剖析了基于 rete 算法的规则引擎;RETE算法简述 & 实践 以例子来讲述 rete 算法的实践。本节基于上述两篇博客文章,经整理和消化后介绍 Rete 算法3。
Rete 算法最初是由 CMU 的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法,该算法提供了专家系统的一个高效实现。
Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较的高效方法,通过网络筛选的方法找出所有匹配各个模式的对象和规则。核心思想是将分离的匹配项根据内容动态构造匹配树,以达到显著降低计算量的效果。自 Rete 算法提出以后,它就被用到一些大型的规则系统中, 像ILog、Jess、JBoss Rules等都是基于 RETE 算法的规则引擎。
Rete has become the basis for many popular rule engines and expert system shells, including Tibco Business Events, Newgen OmniRules, CLIPS, Jess, Drools, IBM Operational Decision Management, OPSJ, Blaze Advisor, BizTalk Rules Engine, Soar, Clara and Sparkling Logic SMARTS.
Rete 算法可以被分为两个部分:规则编译和规则执行。当 Rete算法进行事实的断言时,包含三个阶段:匹配、选择和执行,称做 match-select-act。
1 | graph LR |
1 | 事实用一个三元组来表示:(标识符 ^ 属性 值) |
1 | (name-of-this-production |
参考 4。
规则主要由三部分构成:
FACT 对象:用户输入的事实对象,作为决策因子使用。
规则:LHS(Left Hand Side)部分即条件分支逻辑。RHS(Right Hand Side)部分即执行逻辑。
系统模型主要由 3 个模块构成。
系统代码调用规则引擎的基本步骤:
[toc]
解读 Baidu Apollo EM Motion Planner
论文由百度 Apollo 的 PNC 工程师撰写,于 2018 年发布在 arxiv 上 文章链接。
现在看来 (2021年),这篇论文属于 Apollo 系统规划与决策模块的白皮书,文章介绍的方法和思想,在现阶段 L4 级别自动驾驶开发中仍然具有广泛的适用性,对自动驾驶技术的普及和应用起到了积极推进作用。
我目前就职于某国内某自动驾驶创业公司,主要研究规划与决策领域的行为决策 (behavior/maneuver decision),以下 ABC 代指目前所在公司的化名。
我在研读论文多次的基础上,基于目前的工作经验和设计实践,对文章的设计做一些个人的粗浅解读和评价,行家轻拍。欢迎大家在文章下留言赐教。
对于新手,建议在读论文前,先阅读 Case Study 这一章,了解文章在解决什么问题,以及大概是如何解决这个问题,这对文章的整体理解有帮助。
Apollo 系统目标:工业级的 L4 自动驾驶系统,注重安全性、舒适度和可扩展性。
The developed system aims to address the industrial level-4 motion planning problem while considering safety, comfort and scalability.
Apollo 开源代码地址:Apollo open source autonomous driving platform。
注意:Apollo 是一个“伪开源”,公布出来的代码逻辑简单,更像是一个自动驾驶系统的空架子,和官方实际路测的代码是不一样的。
The system covers multilane and single-lane autonomous driving in a hierarchical manner: - 第一级:变道选择。The top layer of the system is a multilane strategy that handles lane-change scenarios by comparing lane-level trajectories computed in parallel.
补充知识点:什么是 Frenet frame?
Frenet 坐标系通常使用道路的中心线作为参考线,使用参考线的切线向量和法线向量建立坐标系。
如下图所示,这个 S-D 坐标系即为 Frenet 坐标系,它以车辆自身为原点,坐标轴相互垂直,分为: 纵向 S:沿着参考线的方向; 横向 D:参考线的法向。
相比于笛卡尔坐标系,Frenet 坐标系可明显地简化问题。因为车辆在行驶中,自车基于参考线(道路中心线)的位置,就可以使用纵向距离和横向距离来描述,同时纵向和横向的速度、加速度、加加速度等信息直接和道路相关;在车道保持和换道过程中都具有很强的实用性。
In the figure, the HD map module provides a high-definition map that can be accessed by every on-line module. Perception and localization modules provide the necessary dynamic environment information, which can be further used to predict future environment status in the prediction module. The motion planning module considers all information to generate a safe and smooth trajectory to feed into the vehicle control module.
1 | graph LR |
在运动规划中,最重要的两个指标是安全 (safety) 和乘坐体验 (ride experience)。
关于安全性,主要从交通规则 (traffic regulations),场景覆盖范围 (range coverage),周期规划效率 (cycle time efficiency) 和紧急安全 (emergency safety) 四个方面考虑。
In motion planner, safety is always the top priority. We consider autonomous driving safety in, but not limited to, the following aspects: traffic regulations, range coverage, cycle time efficiency and emergency safety.
关于乘坐体验,主要从场景覆盖 (scenario coverage),交通规则 (traffic regulation) 和舒适度 (comfort,比如自车加速度和Jerk) 三方面着手。
In addition to safety, passengers’ ride experience is also important. The measurement of ride experience includes, but is not limited to, scenario coverage, traffic regulation and comfort.
运动规划的注意点之一:自车的决策应该尽量稳定,以方便其他交通参与者预测自车的意图。如果自车在正常行驶过程中,和其他车辆交互决策不稳定(如障碍物误感)带来的急刹车,容易造成后方车辆制动不及时而发生追尾。
It is important to follow consistent on- road driving behavior to inform other drivers of the intention of the autonomous driving vehicle.
变道策略需要能处理主动变道( routing 规划)和被动变道(道路前方被堵塞)两种情况,通常变道成功率 (success rate) 会作为变道质量的一个重要衡量指标。
Typically, a multilane strategy should cover both nonpassive and passive lane-change scenarios. * In EM planner, a nonpassive lane-change is a request triggered by the routing module for the purpose of reaching the final destination. * A passive lane change is defined as an ego car maneuver when the default lane is blocked by the dynamic environment.
文中提到的做法是对主动变道和被动变道进行并行计算(parallel framework)。 * 对所有的候选车道,以车道级别 (lane-level) 进行交通规则、车道内障碍物的分析,那么每个车道都会生成一个最可行的轨迹 (best-possible trajectory)。最后,一个 cross-lane trajectory decider 会基于安全性和代价函数两方面来选择车道。
We propose a parallel framework to handle both passive and nonpassive lane changes. For candidate lanes, all obstacles and environment information are projected on lane-based Frenet frames. Then, the traffic regulations are bound with the given lane-level strategy. Under this framework, each candidate lane will generate a best-possible trajectory based on the lane-level optimizer. Finally, a cross-lane trajectory decider will determine which lane to choose based on both the cost functional and safety rules.
大多数自动驾驶软件运动规划的做法是,沿着车道参考线 (reference line,通常是从高精度地图中得到车道中心线) 把单车道问题转化为 Frenet frames with time (SLT) 问题。其中,S 指 Frenet 坐标系下的纵向,L 指横向,T 指代时间。
Many autonomous driving motion planning algorithms are developed in Frenet frames with time (SLT) to reduce the planning dimension with the help of a reference line.
如何在 Frenet 中找到最优轨迹是一个 3D (S+L+T) 约束优化问题,文章中提到两种做法的路线之争。在我看来,现在工业界主流前沿的做法是第二种,第一种正在被逐渐淘汰。
Finding the optimal trajectory in a Frenet frame is essentially a 3D constrained optimization problem. There are typically two types of approaches: direct 3D optimization methods and the path-speed decoupled method. * [方法一:无脑优化采样] Direct methods attempt to find the optimal trajectory within SLT using either trajectory sampling or lattice search. + These approaches are limited by their search complexity, which increases as both the spatial and temporal search resolutions increase. To qualify the time consumption requirement, one has to compromise with increasing the search grid size or sampling resolution. Thus, the generated trajectory is suboptimal.
EM planner optimizes path and speed iteratively. The speed profile from the last cycle is used to estimate interactions with oncoming and low-speed dynamic obstacles in the path optimizer. Then, the generated path is sent to the speed optimizer to evaluate an optimal speed profile.
这里补充一下,Path-speed decoupled 的方法对高速物体的 nudge 行为处理不友好;这里通过变道代替 nudge 来灵巧地避开这个缺陷问题,但是会引来频繁变道的风险。比如,一辆快速自行车和自车同行,自行车距离自车比较近,自车难道要变道来超过 (overtake) 这个自行车吗?
For high-speed dynamic dynamic obstacles, EM planner prefers a lane-change maneuver rather than nudging for safety reasons.
EM planner 先做出决策 (make decisions),再规划轨迹。决策可以输出清晰的自车意图,把非凸问题约束为凸问题,不仅减少寻找最优轨迹的搜索空间,而且允许使用凸优化问题的优化方法。
In Apollo EM planner, we make decisions prior to providing a smooth trajectory. The decision process is designed to make on-road intentions clear and reduce the search space for finding the optimal trajectory.
决策的路线之争。
Many decision-included planners attempt to generate vehicle states as the ego car decision. These approaches can be further divided into hand-tuning decisions and model-based decisions. * [方法一:手写规则,扩展性差] The advantage of hand-tuning decision is its tunability. However, scalability is its limitation. In some cases, scenarios can go beyond the hand-tuning decision rule’s description. + When considering dozens of obstacles, the decision behavior is difficult to be accurately described by a finite set of ego car states.
Targeting level-4 autonomous driving, a decision module shall include
both scalability and
feasibility.
* Scalability is the scenario expression ability (i.e., the autonomous
driving cases that can be explained). + 不要过拟合 (over-fit) 一个
issue,适用性差。 * For feasibility, we mean that the generated decision
shall include a feasible region in which the ego car can maneuver
within dynamic limitations. + Both hand-tuning and
model-based decisions do not generate a collision-free trajectory to
verify the feasibility. * 同意,decision
层并不会考虑是否能够生成轨迹,所以有些决策是无效的。
划重点:EM planner 的做法是先生成初略的轨迹来表示交互意图(不受限于障碍物数量);然后,生成一个有约束的凸走廊 (a convex feasible space),用凸优化的方法来求解优化轨迹。 * 目前,ABC 是先生成决策,然后决策作为约束,在 ST planner 中搜索粗略的轨迹,和 EM 的做法不一致。
In EM planner’s decision step, we describe the behavior differently. * First, the ego car moving intention is described by a rough and feasible trajectory. Then, the interactions between obstacles are measured with this trajectory. + This feasible trajectory-based decision is scalable even when scenarios become more complicated. * Second, the planner will also generate a convex feasible space for smoothing spline parameters based on the trajectory. + A quadratic-programming-based smoothing spline solver could be used to generate smoother path and speed profiles that follow the decision. This guarantees a feasible and smooth solution.
除了 lane-level motion planning 的具体实现方法不同,这章节数据流和 ABC 的实现非常类似,设计架构在工业界领先,可以重点参考。
在 Data Center 接受并同步数据。 > all sources of information are collected and synced at the data center module.
基于道路中心线,选择几条可行 lane,然后生成基于其中心线的障碍物投影信息(SL 坐标描述)。
The reference line generator will produce some candidate lane-level reference lines along with information about traffic regulations and obstacles.
The iteration includes two E-steps and two M-steps in one planning cycle. The trajectory information will iterate between planning cycles.
在两个 M-steps 中,通过 DP 和 QP 来生成 path 和 speed profiles。请注意,在一个规划间隔内,planning 规划出一条可行的轨迹,需要迭代多次 EM planner,也就是运行多次 E-steps 和 M-steps.
In two M-steps, path and speed profiles are generated by a combination of dynamic programming and quadratic programming.
在第一步 E-step 中,静态和动态障碍物投影到车道的 Frenet frame,准备进行 SL 的 path 规划。
In the first E-step, obstacles are projected on the lane Frenet frame. This projection includes both static obstacle projection and dynamic obstacle projection. * 静态障碍物的投影:Static obstacles will be projected directly based on a Cartesian-Frenet frame transformation. * 动态障碍物的投影(负责):Considering the previous cycle planning trajectory, we can evaluate the estimated dynamic obstacle and ego car positions at each time point. + The overlap of dynamic obstacles and the ego car at each time point will be mapped in the Frenet frame.
出于安全考虑(目前技术处理这类场景的安全性把握不大),在 SL 投影中,只对低速 (low-speed traffic) 和对向 (oncoming) 动态障碍物使用;高速物体通过变道来解决。
For safety considerations, the SL projection of dynamic obstacles will only consider low-speed traffic and oncoming obstacles. For high-speed traffic, EM planner’s parallel lane-change strategy will cover the scenario.
Although we projected obstacles on SL and ST frames, the optimal path and speed solution still lies in a non-convex space. Thus, we use dynamic programming to first obtain a rough solution; meanwhile, this solution can provide obstacle decisions such as nudge, yield and overtake.
We use the rough decision to determine a convex hull for the quadratic-programming-based spline optimizer.
The optimizer can find solutions within the convex hull.
待补充知识点:什么是非凸优化问题呢?
如何把一个非凸问题转变为可解问题呢?此处引用 Pony 的一篇技术分析文章 -- 应对复杂路况,自动驾驶如何规划它的下一步 。
对于单车道而言,SL 投影是基于车道中心线;对于变道而言,中间涉及到至少两条单车道,两条车道的连接使用的是 G2 算法。
The SL projection is based on a G2 (continuous curvature derivative) smooth reference line.
如何把动态障碍物转化到SL中?
参考上一次的自车规划轨迹 (last cycle trajectory),可以得到自车在指定时间上位于 S 方向上的位置,来预估和障碍物预测轨迹的相交处 (interactions)。 > For dynamic obstacles, we mapped the obstacles with the help of the last cycle trajectory of the ego car. The last cycle’s moving trajectory is projected on the Frenet frame to extract the station direction speed profile. This will provide an estimate of the ego car’s station coordinates given a specific time. The estimated ego car station coordinates will help to evaluate the dynamic obstacle interactions. + Once an ego car’s station coordinates have interacted with an obstacle trajectory point with the same time, a shaded area on the SL map will be marked as the estimated interaction with the dynamic obstacle.
ST 投影帮助我们评估自车的速度轮廓 (speed profile)。因为在 ST 图中抠除障碍物占据的空间 (shaded area),剩余的空间其实是速度可行区间。
ST projection helps us evaluate the ego car’s speed profile. The remaining region is the speed profile feasible region.
M-step path 的目标是找到优化的 path 轮廓,分为基于 DP 的决策和 QP 的路线规划, i.e. DP 得到决策,QP 进行轨迹规划。
The M-step path optimizer optimizes the path profile in the Frenet frame. * This is represented as finding an optimal function of lateral coordinate w.r.t. station coordinate in nonconvex SL space (e.g., nudging from left and right might be two local optima). * The path optimizer includes two steps: dynamic-programming-based path decision and spline-based path planning.
Path 动态规划提供了一个粗糙的 path 轮廓,包括可行的通道和障碍物的 nudge 决策。注意,生成的 path 轮廓是采样点连接起来的,不够精细。
The dynamic programming path step provides a rough path profile with feasible tunnels and obstacle nudge decisions.
The step includes a lattice sampler, cost function and dynamic programming search. + Lattice Sampler: The lattice sampler is based on a Frenet frame. Multiple rows of points are first sampled ahead of the ego vehicle. Points between different rows are smoothly connected by quintic polynomial edges. + 撒点的做法来搜索粗略路线,使用五次多项式来拟合平滑路线。 + Cost Function: Each graph edge is evaluated by the summation of cost functionals. We use information from the SL projection, traffic regulations and vehicle dynamics to construct the functional. + 从障碍物,交通规则和车辆动力学三方面来计算每个连接边(两个 lattice point 的连接线)的代价。此处略过 cost 函数的设计。 + Dynamic Programming Search: Edge costs are used to select a candidate path with the lowest cost through a dynamic programming search. The candidate path will also determine the obstacle decisions.
Spline QP path 是上面 dynamic programming path 的进一步优化 (refinement)。
在 dynamic programming path 中,基于选择路线的可行通道 (feasible tunnel) 被确定下来就是一个凸优化问题,spline QP path 是在可行通道中产生一条平滑的路线。
The spline QP path step is a refinement of the dynamic programming path step. In a dynamic programming path, a feasible tunnel is generated based on the selected path. Then, the spline-based QP step will generate a smooth path within this feasible tunnel.
在线性化的约束 (linearized constraint) 中,利用 QP spline solver 来求解优化目标函数 (objective function),从而生成生成 spline QP path。
The spline QP path is generated by optimizing an objective function with a linearized constraint through the QP spline solver.
目标函数由平滑代价和引导线代价组成,其中引导线是上一步的 DP path。
The objective function of the QP path is a linear combination of smoothness costs and guidance line cost. * The guidance line in this step is the DP path. The guidance line provides an estimate of the obstacle nudging distance.
上述目标函数在 nudge 障碍物的距离和平滑性中做了平衡和取舍。
The objective function describes the balance between nudging obstacles and smoothness.
约束由可行边界约束 (boundary constraints) 和自车动态性能约束 (dynamic feasibility) 组成。
The constraints in the QP path include boundary constraints and dynamic feasibility. These constraints are applied on f(s), f’(s) and f’’(s) at a sequence of station coordinates s0, s1, ..., sn.
在 EM planner 中,使用自行车模型 (bicycle model) 来考虑自车的动力学特性;在规划阶段,把车辆模型简化为自行车模型,是一种比较通用的做法。
In EM planner, the ego vehicle is considered under the bicycle model.
上面的操作和近似转换是做什么呢?在横向 (lateral direction) 约束求解中,l = f(s),因为 sin 不是线性的函数,所以使用 f(s) 的导数来替代 sin 函数。在允许一定误差的情况下,把一个非线性函数,转化为线性约束 (linear constraints) 问题。
To keep the boundary constraint convex and linear, we add two half circles on the front and rear ends of the ego car.
那么,现在已经把所有的约束化简为线性约束,问题就可以使用 quadratic programming solver 来快速求解这个问题,效率更高。这就是数学的魅力啊!
Since all constraints are linear with respect to spline parameters, a quadratic programming solver can be used to solve the problem very fast. * In addition to the boundary constraint, the generated path shall match the ego car’s initial lateral position and derivatives. + 实现细节注意点:考虑车辆的初始状态。
在 ST 图中,使用 DP 算法生成一个速度轮廓 (speed profile),即 v = S(t)。
The speed optimizer generates a speed profile in the ST graph, which is represented as a station function with respect to time S(t).
在 ST graph 中找最优 speed profile 是一个复杂的非凸问题。我们使用 dynamic programming 和 spline quadratic programming 在 ST 图中寻找一个平滑的速度轮廓 (非最优)。
同 Path planner,我们先利用 DP 算法搜索一个粗略的 speed profile,把问题从非凸问题化简为凸问题;然后在有约束的情况下,沿着 speed profile (guidance line),使用 QP 算法来求解最优的速度解。
We use dynamic programming combined with spline quadratic programming to find a smooth speed profile on the ST graph.
The DP speed step includes a cost functional, ST graph grids and dynamic programming search. The generated result includes a piecewise linear speed profile, a feasible tunnel and obstacle speed decisions.
待补充,obstacle speed decisions 是什么形式的决策呢?
首先,对整个 ST 图进行网格化处理,包括对障碍物进行网格化分割。 > obstacle information is first discretized into grids on the ST graph.
类似于从网格中按时间递增顺序,搜索带约束的可行解,速度可以在网格上表示为 (s0, s1, ..., sn),形状是锯齿形的。
A piecewise linear speed profile function is represented as S = (s0, s1, ..., sn) on the grids.
Cost function 由三部分组成: - Velocity keeping cost: * This term indicates that the vehicle shall follow the designated speed when there are no obstacles or traffic light restrictions present. V^ref describes the reference speed, which is determined by the road speed limits, curvature and other traffic regulations. - Smoothness cost: * The acceleration and jerk square integral describes the smoothness of the speed profile. - Total obstacle cost: * The distances of the ego car to all obstacles are evaluated to determine the total obstacle costs.
DP 搜索时要注意车辆动力学限制;同时,可以根据运动学约束做剪枝 (pruning) 操作。
The dynamic constraints include acceleration, jerk limits and a monotonicity constraint since we require that the generated trajectories do not perform backing maneuvers when driving on the road. * Some necessary pruning based on vehicle dynamic constraints is also applied to accelerate the process.
知识点,如何把导数问题简化为有限差分问题。
ai = ((si-si-1)/dt - (si-1 - si-2)/dt)/dt。
因为锯齿形的线性速度轮廓不能满足运动学特性,所以使用 spline QP step 去填补这个空缺 (fill this gap)。
Since the piecewise linear speed profile cannot satisfy dynamic requirements, the spline QP step is needed to fill this gap.
如下图所示,spline QP speed 是在满足路径单调性 (monotonicity evaluated at designated points,不倒车), 交通规则(traffic regulations, 可行通道) 和车辆运动学约束 (vehicle dynamic constraints) 的线性约束情况下,通过 cost 的方式获取最优的速度,同时考虑了速度平滑性和参考速度。
The spline QP speed step includes three parts: cost functional, linearized constraint and spline QP solver.
The objective function is a balance between following the guidance line and smoothness. The spline optimization is within the linearized constraint.
After wrapping up the cost objective and constraints, the spline solver will generate a smooth feasible speed profile.
一次优化过程中大概有一百个采样点,那么约束就多于 600 个。
For safety considerations, we evaluate the path and speed at approximately one-hundred different locations or time points.
path 和 speed 的优化问题,由一个五项式表达出来,但是约束条件有 30 个之多;然后,使用 QP solver 来求解。
For both the path and speed optimizers, we find that piecewise quintic polynomials are good enough. The spline generally contains 3 to 5 polynomials with approximately 30 parameters. Thus, the quadratic programming problem has a relatively small objective function but large number of constraints.
In addition to accelerating the quadratic programming, we use the result calculated in the last cycle as a hot start. * 注意,在 EM 文章中,优先使用上一次的规划轨迹,不仅可以提高求解效率,同时容易和上一次的决策保持一致。
因为使用上一次的规划轨迹来求解,QP 问题可以平均在 3ms 内求解。
The QP problem can be solved within 3 ms on average, which satisfies our time consumption requirement.
此处补充一下,QP 求解是轨迹规划耗时的重点,平均 3ms 不代表求解性能一定好,更需要关注耗时最差的情况,或者中位数的情况。 * 举个例子,假设在 100 次求解中,如果 99 次求解耗时均是 2 ms,只有一次耗时 102 ms,那么最坏的这次求解,会导致自车反应延迟,足以影响自动驾驶安全,但是平均时间是 3ms。这就是统计学描述的精妙。
DP 和 QP 各有局限,结合起来一起解决非凸优化问题。
DP and QP alone both have their limitations in the non-convex domain. A combination of DP and QP will take advantage of the two and reach an ideal solution.
各家公司的做法,千差万别,本质上都是在求解一个优化问题,把非凸的问题转化为凸问题,最后优化求解。
EM planner 是一个轻量级决策 (light-decision) 的规划器。
Although most state-of-the-art planning algorithms are based on heavy decisions, EM planner is a light-decision-based planner. It is true that a heavy-decision-based algorithm, or heavily rule-based algorithm, is easily understood and explained. The disadvantages are also clear: it may be trapped in corner cases (while its frequency is closely related to the complexity and magnitude of the number of rules) and not always be optimal. * 和 EM planner 相比,目前 ABC 做法的缺陷,在行为决策部分 (reasoner),规则的痕迹太重了。那么,能否引入比较智能的算法或者架构,来解决这类约束呢?这也是自己下一步的努力方向。 * 自动驾驶不能通过重规则 (heavy-decision-based algorithm) 来实现,最好的做法还是通过优化来实现。
这个示例中,进行了两次迭代 (两轮 EM 迭代)。通常,环境越复杂,计算迭代时间越复杂,所以优化问题是一个没有时间收敛上限的问题。
In general, the more complicated the environment is, the the more steps that may be required.
建议在读论文前,先阅读 Case Study 这一章,了解文章在解决什么问题,以及如何解决这个问题,对文章的实现有初步了解。
这篇文章把三维 (station-lateral-speed) 的问题,化简为两个二维问题 (station-lateral problem and station-speed problem),那么大大简化了计算复杂度。也就是,问题复杂度降维了。
Because the three-dimensional station-lateral-speed problem has been split into two two-dimensional problems, i.e., station-lateral problem and station-speed problem, the computational complexity of EM planner has been significantly decreased, and thus, this planner is very efficient. It takes less than 100 ms on average.
从问题复杂度 O(n(M+N)) 来分析求解效率,可以应用到论文中,具有学术的感觉。但是,为什么是 M (后续车道) + N (障碍物数量) 呢?
Assuming that we have n obstacles with M candidate path profiles and N candidate speed profiles, the computational complexity of this algorithm is O(n(M+N)).
在自动驾驶中,安全性 (safety) 和通行能力 (passability) 是关键问题 (critical issue)。如果规则太过严格,那么通过率必然会下降。
One critical issue in autonomous driving vehicles is the challenge of safety vs. passability. A strict rule increases the safety of the vehicle but lowers the passability, and vice versa.
EM planner described in this manuscript is also designed to solve the inconsistency of potential decisions and planning, while it also improves the passability of autonomous driving vehicles. * 通过复用上一次的决策 (hot start),如果环境不发生大的变化,决策容易和上一次的决策保持一致。 * 决策不稳定,也是目前 ABC 遇到的常见问题之一。
EM planner 把一个 3D 问题化简为 2 个 2D 问题,化繁为简,降低了问题难度,提高了求解效率。
EM planner significantly reduces computational complexity by transforming a three-dimensional station-lateral-speed problem into two twodimensional station-lateral/station-speed problems. It could significantly reduce the processing time and therefore increase the interaction ability of the whole system.
最后,APPENDIX 2 中的 CONSTRAINED SMOOTHING SPLINE AND QUADRATIC PROGRAMMING 一节,应用到了复杂的再生核希尔伯特空间 ( Reproducing kernel Hilbert space,RKHS),复杂的证明过程已经超出了我的理解范围,等应用时再详细研究下。
The spline QP path and speed optimizer uses the same constrained smoothing spline framework. In this section, we formalize the smoothing spline problem within the quadratic programming framework and linearized constraints. Optimization with a quadratic convex objective and linearized constraints can be rapidly and stably solved.
[toc]
在 2008 年,比特币创始人 中本聪 (Satoshi Nakamoto) 发表了这篇可以载入史册的论文 - 比特币:一种点对点的电子现金系统 (Bitcoin: A Peer-to-Peer Electronic Cash System),讲述了比特币是如何产生和工作的。
官网下载链接是 white paper,其中有多种语言的翻译版。建议有英文阅读能力的同学,优先选择英文原版阅读。
比特币涉及到计算机原理、密码学、概率学等复杂的知识。如果想彻底搞懂比特币原理,光看这一篇论文显然是不够的,还需要大量的衍生阅读。这篇文章的起点门槛比较高,但是这篇文章是学习比特币原理,最权威、第一手的资料,能让你对比特币的设计原理有大体的了解,体会 中本聪 设计比特币的初衷。
如果你想参与比特币等数字货币的交易,那么欢迎移步阅读我的另一篇教程文章 - 购买自己的第一枚数字货币。
中本聪设计比特币的目的:通过构建完全点对点技术,实现一种电子货币,达到无需金融中介,无需双方信任的情况下,实现在线的电子化支付。
A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution.
论文的主要成就:使用点对点的技术,在不依赖第三方交易平台 (financial institution, a trusted third party) 的情况下,利用区块链技术,实现了去中心化的目的,解决了双重支付 (double-spending) 问题。
Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network.
中本聪通过数字签名 (digital signatures),随机散列,哈希算法 (hash),工作量证明 (proof-of-work, POW),动态链式存储 (ongoing chain) 等技术,设计了一系列的机制,使比特币能够解决电子支付中的双花难题 (double-spending),记录篡改等问题,并最终通过严密的数学论证,证明该系统安全有效,稳定可行。
目前互联网贸易越来越依赖金融机构作为可信任的第三方,那么完全的不可撤销交易实际上是不存在的;那么对不可撤销服务进行支付将需要更大的成本,比如索取付款方更多的个人信息,我们迫切需要在不引入一个可信任方而能在通信通道上进行支付的机制。
本文提出一个基于密码学原理,而不是信任的电子支付系统,该系统允许任何有意愿的双方能直接交易而不需要一个可信任第三方。
What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party.
本文提出的比特币系统,具有以下三个优点: - 基于密码学原理,而不是信任来建立支付系统。 * based on cryptogtaphic proof instead of trust - 不需要引入第三方金融机构。 * without third party financial institutions - 交易不可逆。 * no reverse transactions
我们定义一枚电子货币就是一条数字签名链。 > We define an electronic coin as a chain of digital signatures.
每个拥有者都通过将上一次交易和下一个拥有者的公钥的哈希值的数字签名添加到此货币末尾的方式将这枚货币转移给下一个拥有者。收款人可以通过验证数字签名来证实其为该链的所有者。
Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.
知识点:哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。
到目前为止,有一个问题需要解决,那就是"收款人不能证实拥有者之一没有对此货币进行双重支付",也就是一份钱付给了两个人,这也是后面文章中要解决的主要问题。
The problem of course is the payee can't verify that one of the owners did not double-spend the coin.
时间戳服务器计算包含多个需要被打时间戳的数据项的区块的哈希值,并广泛地发布公开这个哈希值。
A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash.
时间服务器,类似于一个交易编年史,把一次次交易按时间顺序记录下来,形成一个个区块链,并为公众所知晓。
工作量证明要解决的问题:采取搜索一个数,使得被哈希时 (如使用 SHA-256),得到的哈希值以数个 0 比特开始。
平均所需工作量将随所需 0 比特呈指数级增长,而验证却只需执行一次哈希。一般情况下,10 min 求解出一次答案,也就是挖矿的过程。
The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash.
POW 约束:当前区块包含了上一区块的 hash 值,从而形成带时间戳、可验证的链式结构;一旦消耗了 CPU 算力使区块满足了工作量证明,那么除非重做这个工作否则就无法更改区块。由于后面的区块是链接在这个区块后面的,改变这个区块将需要重做所有后面的区块。
Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it.
POW 特点:按 CPU 投票,解决了多数决定中的确定方式问题 (the problem of determining representation in majority decision making)。最长的链代表了多数决定,因为有最大的计算工作量证明的精力投入到这条链上。
Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.
POW 算力限制:为了抵消硬件运算速度的增加(摩尔定律)及平衡不同时期运行节点的利益,工作量证明的难度将由移动平均数法来确定每小时生成区块的平均数。如果区块生成得过快,那么生成的难度就会增加。
MC:BTC 是一个复杂系统,在设计之初,就详细考虑了方方面面。
To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases.
根据规定,节点总是认为最长的链为正确的并持续致力于延长它。
Nodes always consider the longest chain to be the correct one and will keep working on extending it.
New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one.
我们约定,区块中的第一笔交易是特殊的交易,奖励区块创建者一枚属于 TA 的新货币 (挖矿收益)。这就增加了对支持网络的节点的激励,并提供了一种分发货币到流通领域的方法。 * BTC 消耗 CPU 计算时间和电力 (CPU time and electricity) 资源来稳定地增加新货币,替代了中心发币机构。
By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them.
激励也可以由交易费充当。如果交易的输出值小于其输入值,差价就作为交易费被加到包含此交易的区块的激励中。一旦预定量的货币进入了流通领域,激励将变为只含有交易费,这样可以完全避免通货膨胀。
所以,区块奖励 = 区块新货币奖励 (若有,奖励逐渐减少) + 区块包含交易中的手续费奖励。
The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction.
激励会有助于鼓励节点保持诚实,遵守规则比破坏系统和他自己财产的有效性更有利。
The incentive may help encourage nodes to stay honest. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth.
一旦某个货币的最新交易已经被足够多的区块覆盖,这之前的支付交易就可以被丢弃以节省磁盘空间。 * 老的交易被哈希进默克尔树 (Merkle Tree) (树枝内部的哈希不需要被保存),只有根节点被纳入到区块的哈希值,那么老的区块可通过剪除树枝的方式被压缩,又不破坏区块的哈希值。
Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space.
分布式存储可行性论证:每个不包含交易信息的区块头大约是 80 bytes。如果每 10 分钟生成一个区块,每年生成 80 bytes * 6 * 24 * 365 = 4.2 MB。
A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year.
不运行一个完整的网络节点也是可以进行支付验证的。用户只需拥有一个最长工作量证明链的区块头副本,他可以通过向其他网络节点查询以确认他拥有了最长的链,并获取链接该交易到给交易打时间戳区块的默克尔分支。
It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in.
虽然收款方自己不能核实这个交易 (零知识证明),但如果交易已经链接到链中的某个位置,就说明一个网络节点已经接受了此交易,而其后迫加的区块进一步确认网络已经接受了它。
He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it.
缺陷:同样地,只要诚实节点控制着网络,这种简化验证就是可靠的;如果网络被攻击者控制,简化验证 (SPV) 会变得比较脆弱。虽然网络节点可以验证他们自己的交易,但只要攻击者持续控制网络那么这种简化的方法就可能被攻击者的伪造交易欺骗。比如,SPV 钱包(轻钱包)存在一定的安全隐患。
As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker.
为了更加独立的安全性以及更快的支付确认,收款频繁的公司可能仍需运行他们自己的节点。
Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification.
为允许交易额被分割和合并,交易将包含多个输入值和输出值。 通常是一个从之前交易而得的较大输入值或多个较小输入值的组合,以及最多两个输出值:一个作为支付,另一个作为找零,如果有的话,退还给支付发送方。
To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender.
如上图,不同于传统的银行模型(通过限制参与方和可信任第三方对信息的访问来达到一定级别的隐私),BTC 交易通过保持公钥匿名 (public keys anonymous) 来保证用户信息的隐私。 * 公众能看到有人正在发送一定量货币给其他人,但是不能将交易关联到某个人,可以类比于证券交易。
The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone.
作为额外的防火墙,对每笔交易使用新密钥 (new key pair) 对可以防止他们被关联到一个共同的拥有者。
As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner.
新秘钥泄露隐私风险:由于多输入值交易存在,有些关联仍不可避免,因为多输入值交易必然暴露其多个输入是属于同一个拥有者的。风险就在于如果一个密钥的拥有者被暴露,关联性将暴露其他属于同一个拥有者的交易。所以,BTC 交易虽然是支持匿名的,但是不能杜绝通过关联性来获知用户交易信息。
Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner.
假设一个攻击者生成一条比诚实链更快的替代链,那么系统也不会变得可以任意修改。这种情况下,攻击者既不能凭空创建货币,也拿不走不属于他的钱,因为网络节点将不会接受无效的交易作为支付,而且诚实节点永远不会接受一个包含无效交易的区块。攻击者只可能改变他自己的某笔交易来拿回他不久前已经支出的钱。
An attacker can only try to change one of his own transactions to take back money he recently spent.
攻击者从某一落后位置赶上诚实链的概率类似于赌徒破产理论 (a Gambler's Ruin problem),本节主要建立概率模型来估算攻击者赶上诚实链的概率。
The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem.
省略数学推导及证明...
概率证明的结论:攻击者的虚假链能赶上 z 个诚实区块的概率,随 z 的增长呈指数下降。
我们已经提出了一种不依赖信任的电子交易系统。我们从通用的数字签名货币体系开始,这体系提供了强有力的所有权控制,但由于缺乏防止双重支付的方法而不完善。
为解决这个问题,我们提出一种使用工作量证明来记录公共交易历史的点对点网络,只要诚实节点控制了多数的 CPU 算力,对于对攻击者,交易历史将很快变得在计算上不可更改。
网络因其结构简洁性而健壮。节点只需很少的协调就能同时工作。它们不需要被认证,因为信息不会被发送到某个特殊的位置,只需被尽力传播。节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。
节点使用 CPU 算力来投票,通过致力于延长有效区块来表达对其接受,通过拒绝在无效区块上工作来表达对其抵制。任何需要的规则和激励都可通过这个共识机制来加强。
We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism.
我的评价:BTC 系统是站在巨人的肩膀上实现,是一种去中心化,分布式的的经济学。首先,数字签名货币体系是已经通用的,但是有明显的双重支付缺陷没有被很好地解决。基于工作量证明的已有研究,作者提出 P2P 交易记账系统,根据 CPU 算力来模拟投票 和 筛选出诚实节点,并且把最长的工作量证明链作为交易账单;各个节点通过致力于延长有效区块来表达对其接受,通过拒绝在无效区块上工作来表达对其抵制;通过挖矿奖励的形式,鼓励了数字货币交易的普及,以及各节点的记账积极性。
论文构建的区块链模型,给科技界带来了一种思想变革,必将颠覆一些行业;BTC 只是区块链的一个应用,而不只是区块链的全部。