逍遥快乐的动物园
2024-02-01T09:59:02+08:00
https://www.piginzoo.com
piginzoo
admin@piginzoo.com
观后
2024-01-30T00:00:00+08:00
https://www.piginzoo.com/life/2024/01/30/feeling-of-video
<p>刚才看了<a href="https://h5.video.weibo.com/show/1034:4995292416901156">iphone的新的广告</a>,明知道是人造的,还是被感动的热泪盈眶。</p>
<p>摸摸自己的内心,很欣慰还有被善良和美好感动的能力。</p>
<p>毕竟,已经经历半生,仿佛自己明白了好多,觉得自己已是人生的技能完备者,但是却总有一种说不出的不安宁。</p>
<p>这些年,我变、世界也变、社会在变、身边的人都在变,不是变得更好、更美好,而是向焦虑、绝望滑落,他们怎么了,世界怎么了,我怎么了….</p>
<p>逝去的时光里总是充满着朦胧、模糊,甚至是臆断的幻想、美好。所以总是梦回十几年前、奥运前后,那时候只有欢乐,只有驾车的郊区,只有清澈的山水,只有孩子们银铃般的笑声、朋友们的欢歌笑语,仿佛还在萦绕,只是渐行渐远了。</p>
<p>我们的衰老,不只是眼角的皱纹和昏花的双眼,是,渐渐枯萎的灵魂,和逐渐熄灭的希望。已经忘记了,站在大山间惆怅的呐喊,对未来自己的喊话。</p>
<p>孩子们也已经长大,曾经的稚嫩,现在莽撞,一如当年的自己,但是,世界对待他们远没有对我们那么温柔,满是毒打,满是荆棘,满是绝望之后的绝望。</p>
<p>这个世界还能美好么?我们在拼什么?它值得我们的拼搏么?它配的上我们的期待么?</p>
<p>我不知道。</p>
<p>风渐渐起来,我听到了远方的呼啸,我掩起双手,盖住这火苗,小心的呵护着它,生怕它熄灭。</p>
<p>我为什么要这么做、这么执着?我不知道,但是,我知道,如果我的火灭了,世界又会多了一片黑暗。</p>
我看巴以的冲突
2023-11-13T00:00:00+08:00
https://www.piginzoo.com/life/2023/11/13/israel-hamas
<p>10月7日,我在推特上看到哈马斯杀害音乐节的年轻人的时候,非常震惊。那个被拖在卡车上死去的裸体女孩,那个被掳走的惊恐的亚裔女孩,让我这种从来没经历过残酷和战争的普通人触目惊心,我内心充满极大的分开,和对哈马斯极度的厌恶。</p>
<p>以色列立刻进行了反击,对哈马斯进行了空袭,以色列的坦克在边界集结,无数的以色列人重返军队,甚至是在海外的年轻人也纷纷返回国家,保家卫国,让人感动。</p>
<p>接下来长达一个月以色列对哈马斯的还击,发动了越来越多的空袭,摧毁了一座座的建筑,坐在屏幕前,我目睹了那座插满天线的大楼在3枚导弹下,逐渐的解体的过程。不久就传来,越来越多的巴勒斯坦人受伤、死亡的消息,甚至包括很多儿童。然后,便是令人震惊的医院遇袭,虽然后来澄清说是哈马斯的误射,但是,一幕幕的死伤惨剧、越来越多的伤亡,都逐渐让我对以色列这种伤及无辜的还击的支持,有了一丝犹豫。</p>
<p>我在互联网上,找来各种巴勒斯坦和以色列的历史信息,进行学习、了解,虽然之前也看过五次中东战争的讲解,但那些都是出于猎奇、被战争的故事性的吸引,而这次却是想更多地了解整个巴勒斯坦和以色列,了解他们之间对立的历史、现实,他们之间到底是怎么一步步的走到现在的,如此的对立和绝望?随着我的了解,逐渐地,我多了更多的视角来看待他们之间绵绵不断地纷争。</p>
<p>随着时间的流逝,我逐渐发现,互联网上对以色列的反对的声音开始越来越多,可以看到很多美国校园内都举行了反战聚会,各西方国家也有越来越多人数众多的反对以色列、反战的大游行。推特上也不断地展示普通加沙人的悲惨:那位因同事牺牲而当场崩溃掉的加沙记者、无数被裹尸袋覆盖的幼小尸体、年轻父亲抱着女儿尸体痛哭的样子,这些都让我痛心不已。</p>
<p>后来听了几期<a href="https://www.youtube.com/watch?v=7N7lRuK2u_w&list=PLyvXVH_86VfZ1Zo_HjKr0wQ2CrKHS8mot&ab_channel=TVBS%E6%96%87%E8%8C%9C%E7%9A%84%E4%B8%96%E7%95%8C%E5%91%A8%E5%A0%B1TVBSSisy%27sWorldNews">陈文茜关于巴以冲突的节目</a>(她是我认为比较客观公正的新闻工作者),她在节目中以专业的态度和精神,展示了很多推特上、国内新闻里看不到的信息和细节。她剖析了这次冲突背后的政治上的原因、拉扯和博弈,以及战争进展过程中各方的角逐。我也逐渐了解到,内塔尼亚胡这个老狐狸,可能是出于自己龌龊的政治目,才作出的高调反击。为了继续盘踞在以色列政坛,他可谓不择手段,甚至一度流露要占领加沙的意图。我渐渐地转变了态度,从支持以色列全面剿灭哈马斯,这个泛泛的目标,变成了不主张全面进攻加沙,而是通过特种兵+情报系统+高科技对哈马斯中高层进行采用定向清除的方法。在我看来,这样的方法,不仅可以减少以色列人的伤亡,更可以避免加沙普通人的伤亡。</p>
<p>但是,接下来几天,我的态度又发生了变化。因为,听到了几段美国亲以色列,主张坚决消灭哈马斯,坚决不停火的演讲,让我觉得都非常的有道理。其中,希拉里的那个演讲,讲地天衣无缝、逻辑清晰,我确实被说服了,她确实是一位非常成熟、逻辑完备的优秀政客。这些主张和观点大多是,曾经有多次和平机会,巴解领导或者巴勒斯坦人都错过了,所以,你不能怪罪别人,是巴勒斯坦人自己错过了建国机会。言外自已,是他们自己选择的结果,甚至是他们自作自受。他们还要把以色列从这片土地上完全抹去,不给以色列人生存的机会。所以,他们目前的惨状虽然值得同情,但是也不是没有原因的,为什么不能接受181号决议的土地,为什么不能接受现在的土地,建立一个属于巴勒斯坦完全自治的国家?!最终,连我甚至觉得,接受现实,接受现在的现状,可能是巴勒斯坦人最好的结局和归宿吧。有时候,你不得不向残酷低头,接受现实。</p>
<p>直到,直到我看了<a href="https://www.bilibili.com/video/BV14N4y1U7tx">小林讲述巴勒斯坦经济的节目</a>,讲到以色列对约旦河西岸巴勒斯坦人长年累月、事无巨细的控制,无数的定居点的侵蚀,无数的飞地的分割,对经济、能源、流动的严苛控制,甚至让我联想到抗日的时候的华北占领区。而再听到后面以色列对加沙地区的几乎疯狂的、变态的压制,对基本的人权、生存权、最基本的尊严、自由无情的侵害的时候,我逐渐理解,为什么哈马斯这样的组织,可以在加沙这片土地上可以畸形的滋生了,巴勒斯坦人是没有办法摆脱这种枷锁的,他们唯有反抗。即使哈马斯这样的组织被清除掉,还会有新的、层出不穷的反以色列的人和组织涌现出来的,节目中孩子们说的“我们没有未来”,没有未来的人们,就只会不断地积累绝望和仇恨。是以色列自己培育了这朵邪恶之花,以色列政府如果想要真正的长久的和平,就应该做出适度的妥协,彻底的放弃对巴勒斯坦人的严苛控制和盘剥,把自由和尊严还给普通的加沙人和西岸普通人。</p>
<p>以色列有人均5万美元的GDP,是巴勒斯坦人的10倍还要多,军事上也是名列世界前茅,他们应该安全有自信、有能力守卫好自己的家园。这种占领和剥削不会给他们带来安全的,只会不断地制造冲突和仇恨,和巴勒斯坦人在这篇土地上和睦相处可能是他们最优的选择。放下仇恨,放下历史的沉重,以色列人和巴勒斯坦人,才能有更美好的未来。</p>
<p>回顾下一个多月来,我自己的立场也几经变化:支持以色列,到同情巴勒斯坦,到重新支持以色列,到最后又演变为反对目前以色列的方式。这一个月来,我不断地了解、学习各种只是和信息,拼拼凑凑,不断地理清很多盲区,逐渐在脑海中还原出相对真实和完整的世界。我不避讳自己态度的兜兜转转,认识事物、认识一件事,就是一个复杂的过程,不是一蹴而就、非黑即白的简单,需要反复拉扯、反复否定、反复怀疑。需要了解历史;需要了解历史中关键决策人,比如阿拉法特,他的背景、成长史、立场、关键决定的原因和动机;了解当今决策者的立场和目的,对比历史的进程和现实的瓜葛;理解周边阿拉伯国家的立场和态度,比如他们前几天开会时候表现的种种不同;了解西方国家不同的反应和态度,比如拜登和马克龙的差异;了解世界各个地方巴勒斯坦人、以色列人、普通人,还有那些意见领导者的看法和见解;最终你还要回到加沙,了解当地真正的情况,那些已经牺牲了7位后,还在加沙报道的勇敢的记者们的真实声音、影像和画面。不由的感叹,真真正正的了解世界,是何其难的一件事!</p>
<p>无论如何,希望这场战争早日结束,消灭哈马斯、达成和平协议、以色列撤出加沙、巴勒斯坦人也可以放下仇恨、双方妥协、真正建立一个独立自主的巴勒斯坦国、让巴勒斯坦人可以真正过上平和幸福的生活。而,对我自己而言,也再次体会到,真真正正的认识这个世界,不是一个简单的事情,要时刻保持谦逊、保持良知、保持警惕、保持同理心、保持对这个世界的爱,好好的活着,努力的擦亮眼睛,守住作为普通人的底线和良知。</p>
<p><strong>参考</strong>:</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV14N4y1U7tx">一口气了解巴勒斯坦经济</a></li>
<li><a href="https://www.youtube.com/watch?v=YY2Q4XDmZDE">一口气了解以色列经济</a></li>
<li><a href="https://www.bilibili.com/read/cv27263117">为什么巴勒斯坦没有建国?原因的始与末</a></li>
<li><a href="https://www.bilibili.com/video/BV1rZ4y1N7vH/">以色列人和阿拉伯人的50年戰爭</a></li>
<li><a href="https://www.youtube.com/watch?v=ncXCHdTFBEs">基督,犹太,伊斯兰教的关系</a></li>
<li><a href="https://www.youtube.com/watch?v=ssssR1hxiTw">一口气了解石油和中东的百年战争</a></li>
<li><a href="https://www.youtube.com/watch?v=jn9l3PodaXY">巴以衝突(上) 從兩個視角 慢講巴勒斯坦、以色列</a></li>
<li><a href="https://www.youtube.com/watch?v=WOYycmsSacY">巴以衝突(下) 近代歷史:以色列、巴勒斯坦、加沙百年恩怨的發展</a></li>
<li><a href="https://www.youtube.com/watch?v=BpahQVEqEYY">以色列,领土面积越来越大!</a></li>
<li><a href="https://www.youtube.com/watch?v=7N7lRuK2u_w&list=PLyvXVH_86VfZ1Zo_HjKr0wQ2CrKHS8mot&ab_channel=TVBS%E6%96%87%E8%8C%9C%E7%9A%84%E4%B8%96%E7%95%8C%E5%91%A8%E5%A0%B1TVBSSisy%27sWorldNews">文茜关于以色列vs哈马斯的系列报道</a></li>
<li><a href="https://gs.ifeng.com/c/8Ua2qRl74WG">“呼吁停火的人根本不懂哈马斯!”希拉里的解释</a></li>
<li><a href="https://twitter.com/chenjunnyc/status/1722103066424451447法国前总理多米尼克-德维尔潘关于加沙问题的一次精彩访谈">法国前总理多米尼克-德维尔潘关于加沙问题的访谈</a></li>
<li><a href="https://www.youtube.com/watch?v=8sATkfiAabk">为什么犹太人被排挤?</a></li>
<li><a href="https://www.youtube.com/watch?v=8HfCt5NLyzg">巴勒斯坦的死敵,揭開猶太人的歷史真相!</a></li>
<li><a href="https://www.dapenti.com/blog/more.asp?name=xilei&id=174462">齐泽克:以色列-巴勒斯坦的真正分界线</a></li>
<li><a href="https://video.h5.weibo.cn/1034:4960407157407833/4960409207703993?display=0&retcode=6102">哈马斯地道和以色列空军</a></li>
</ul>
随笔
2023-07-13T00:00:00+08:00
https://www.piginzoo.com/life/2023/07/13/some-essay
<h1 id="行业金钱和异化">行业金钱和异化</h1>
<p>干事,其实,很多时候,需要看机会。对行业要保持谦逊,尊重专业。其实很多行业的门槛,不是很难,只是你没有机会去体会和学习。</p>
<p>但是,反过来看行业和专业这事,行业的积累,换一个角度,也是一种物化,当你觉得你专业化很强的成就感的时候,其实,你也已经被这个行业所物化,失去了自由的天性,一种探索欲,你已经被它所束缚了。</p>
<p>说到底,都是为了赚钱,钱是这个社会的唯一逻辑,你在行业里也是,只是为了公司、产业链上,贡献更多的价值,从而体现你的价值,或者,让你从心理层面获得你有价值的成就感,但是,这其实已经对你的本性形成了束缚。</p>
<p>反问自己,你忙碌在老板的周边,指挥这下属,过一个个的方案,看着订单和销售额的增加,领到了别人数倍的bonus,很有一种满足感和成就感,那么,然后呢?</p>
<p>你是不是要去新疆自驾一场,去海南晒着太阳,去普吉潜水,去抒发一下你热爱自然的感慨,面对空旷的草原、无垠的大海,怅然若失的放空一把。</p>
<p>又或者,聆听古典音乐的美,去一个人背着写生板,勾勒远处的风景和黄昏,一个人在林中的小屋,静静地读书到深夜,为一个个鲜活的形象泪流不止….</p>
<p>何必呢?</p>
<p>西美尔曾经说“金钱仿佛就是那个时代的上帝,但金钱只是通向价值的最终价值的桥梁,而人是无法栖居在桥上的”,</p>
<p>我们是被这个时代所物化,为何要努力工作,为何要挣钱,是因为商业社会设计了这个极其精巧的结构,让我们深深地陷入其中,无法自拔。</p>
<p>想想中世纪,人们的生活中心,是束缚在封建主的领土上,内心不断祈祷,来生进入天堂。而当下,与金钱为中心的生活感觉,和与上帝为中心的生活感觉已经达到了形式上的高度相似。中世纪的人们,可以通过信仰上帝,去解决现世的种种苦恼、问题和矛盾,上帝是抽象的、万能的,而现在,金钱已经替代了上帝,完全替代了这个功能,它可以调节生活一切矛盾。</p>
<p>把咱们放到历史的长长的维度里,其实,we are nothing,但是,又是我们,我们每一个人的喜怒哀乐才构成了这个世界。</p>
<h1 id="读台北客">读台北客</h1>
<p>我和媳妇这两天在读白先勇的《台北客》,感触颇深</p>
<p>大陆的荣华富贵,20年后,客居台湾后,都变得朦胧、美好和不可求,每个人都是一曲悲歌,怀着美好老去</p>
<p>在一个把人当耗材的国度里,这种故事才更有张力,我们就在书写我们这个时代的xx客</p>
<p>本质上中国这个社会就是集权者的天下,中国很难指望底层民智开启,都是强人自上而下才能变革。所以,认识到这点,还坚持在这个社会活着,秉行自己的底线和原则,都是勇者。</p>
<h1 id="平庸之恶">平庸之恶</h1>
<p>平庸之恶,阿伦特是希望大家反思背后的体制,而不是针对艾希曼这一个个体的,说道裁员,站在老板的角度,确实压力很大,但是,作为一个普通人,底线还是要有的,包括老板娘自己,部门的领导和每个leader,要明白,任何一个人都可能呢成为这个少数受害者,所以,公平的对待每个人是非常重要的。这个就是一个社会的道德体系的完善和建立,以及外部的惩罚机制。现在公司可以用这招,正是说明,这个社会的这种体系已经出了问题。</p>
<p>裁员这种事经历经历不是坏事,可以看到人性的恶、恶可以多无底线,不再对这个世界那么天真的爱。</p>
<p>我现在最喜欢的哲学还是尼采的超人,就是你知道这个世界的龌龊,但是,你还是义无反顾的爱,勇敢的爱,因为生命本身,就是力量,它不会向任何恶低头。</p>
<p>阿伦特在审判的时候,讲出平庸之恶,以色列人觉得是为他在辩护,其实阿伦特不是这个意思,她只是说,这个人只是一个平庸的执行命令的人,他的罪恶当然应该被清算,但更重要的是,这个背后所有人都放弃理性和思考,盲从于体制,才是更可怕的。</p>
<h1 id="孩子">孩子</h1>
<p>他为何愿意和那些老同学在一起,因为跟他们在一起,他才有优越感,他惧怕和更优秀的人在一起,显得自惭形秽,这其实是缺乏勇气的表现,勇气背后,不是自信,是好奇心,越是懦弱,越会惧怕优秀,我小时候是这么经历过来。后来是因为我接触到了真正震撼我心灵的美好,我才明白,真正的美和世界的奇幻,这些对我的吸引,远远可以抵消掉我自惭形秽的自卑。他缺乏对美的追求,他体验不到凌晨读到3点泪流满面的感觉,体会不到一个逻辑自洽带给自己的醍醐灌顶,一个黑暗中光影电影制造的心灵震撼,体会不到大师坎坷一生仍然的赤子之心。。。。世间的美好太多太多,让你无暇去关注丑恶,甚至是欲望和那些快销的垃圾。他都体会不到,反倒是沾染了庸碌的大众的各种陋习。</p>
<p>“那些人,那些不自律、被欲望驱动的人,你们只配被奴役。什么网小说,游戏,短视频,这些都是“聪明人”发明出来,操纵你们的欲望,奴役你们的工具而已。不自律、被欲望操纵,就只能被他们奴役。我骨子里实际上是非常鄙视这种人的,不是因为他们普通,而是因为他们自甘堕落”</p>
<p>其实真正在意的事,他缺乏探索更广阔世界的好奇心,一种渴望了解这个世界,想去体验这个世界的冲动,一种对未知的渴望,即使到了一把年纪,我都不愿意走过去走过的路,开车是,人生之路也是,虽然有时候坎坷,但是收获的是不一样的一生。他缺乏这种慧根,至少目前看是这样的。</p>
<p>有些人可能很早就开启,有些人一辈子也开启不了,需要机缘,更需要慧根。</p>
<p>他的世界需要自己构建,包括独处,我回忆我小时候,独处给我带来很多胡思乱想的机会,这个是陪伴得不到的,我小时候经常在家一个人胡思乱想,我经常是一个人状态,反倒给我自己一定的空间。自我意识的形成,我回想可能从那个时候就有,一个人需要独处和反思。</p>
<p>有时候,爱人在身边,我反倒愿意去打游戏,因为,我实在不愿意在你面前做我独处才会做的事,那需要隐私,是自己的树洞,是没有人的时候才会去想和做的事。和爱人在一起,我反倒愿意是慵懒的用游戏的时间来kill time,来对抗爱人对我的陪伴。</p>
<p>他反倒缺乏这种随机性。有时候,确定性带个人的是束缚和压抑。</p>
<h1 id="年轻人">年轻人</h1>
<p>年轻的人,充满了对宏观叙事的反感,甚至是反抗,这种反抗,已经植入到他们的潜意识当中,以至于,一听到一个对宏大叙事的开头,就天生的产生了生理和心理反应。</p>
<p>这个当然是现在假大空、缺乏基本逻辑和常识的学校正能量教育带来的后果,但是,他们缺因此就变得抗拒一切的宏大叙事,即便有些逻辑上正确、符合常识、对他们成长有益处的、有帮助的建议和信息,他们也第一时间地不假思索地排斥掉,只有在他们极少的情况下,他们虚弱和无助、彷徨之刻,他们才少量的摄入一些,但是,他们往往会错过了那些最好的东西和时光。</p>
<p>这种现象,其实不断地在各代中循环,直到他们幡然悔悟,已经是年长或者中年以后了,只有少数具备慧根的个体,才能安静地听取一切的声音,然后睿智地分辨和过滤掉那些假的、别有用心的,而去倾听那些真正愿意的、真心的布道者,传播真理和善的声音,他们远远获得了比一般的年轻人多得多的智慧。</p>
<p>我特别能理解一般的年轻人,因为我年轻的时候也是这样,但是,我们那个时代是因为你真的听不到太多声音,即便听到的声音,也是充满了控制的欲望,缺乏一种超然的、悲悯的、热切的坦白。即便是有这样的态度的讲述者,也往往是一种价值观下,衍生出来的个体。而现在这个时代,充满了多元化,我不想抱怨这个压制的时代,这个压制的时代下,你其实一样可以获得各种多元思想的热情、没有那么功利的布道者,认真的、用心地倾听他们,你可以分析、对比、反刍出各种各样的思想的火花。</p>
<p>然后,你可能会和我一样,得出一样的结论:我们其实早就活在哲学家的思想通道中了。因为,这些多元化的当代思想者们、身边的超然的布道者们,其实,他们都已经深深地打着先哲们的烙印了,他们诉说的,很多都是那些百年、数百年前那些先哲们冥思苦想的和不断身体力行实践出来的内容,哲学、艺术、科学等等,无不如此。所以,越来越觉得,去学习和思辨他们遗留的这些,付出时间和精力,是必要的。而且,这种付出后,收获的思想上、精神上的愉悦,是远超那些感官、肉体的刺激,是远超豆瓣9+的刷剧、笑到死的综艺和3A大作游戏带来的更持久、更醇厚的快乐的。</p>
<p>只是,当下太多的喧嚣、光怪、欲望操控蒙蔽了这些光辉,只有智慧者,才发出乌烟瘴气中,透出的丝丝光芒,循着追逐而去。去发现和体验我说的那种快乐的。</p>
<h1 id="欲望还是追求">欲望还是追求</h1>
<p>最近读了<a href="https://mp.weixin.qq.com/s/RZAZr4_fMVBhz3zvrseMNQ">这个故事</a>,姑娘将来肯定回不来了,中国的人文环境只会越来越差</p>
<p>艺术就是很自我的事,能全身心的投入和享受,是个人的无限幸福。只是,将来还是要生活在一个世俗的世界,当考虑到金钱的时候,是否还能捍卫自己的价值观,或者能否则找到一个很好的契合点,需要权衡很多,这点可能只有孩子自己将来走向社会,靠她自己去balance了。</p>
<p>当安迪·沃霍尔确实很酷很自由,但是,大部分艺术家物质上不会太富有,除非你完全不在乎外在的这些,全新的追求灵魂的自由。寻求一种平衡,可能是最好的选择。</p>
<p>说到价值观,我现在觉得,如果你不是那种励志改变世界、中国那种使命感的人,价值观是很自我的事情,你自己怀有珍爱就可以了,不用大爱传播,你没有改变别人价值观的义务,你的价值观使你自己内心更安宁和坚定就好。充其量影响一下家人和最亲密的朋友,仅此而已。</p>
<p>我反倒现在对孩子的教育,更偏世俗化,让他理解那些欲望的东西,早点追逐到,享受了,然后感觉到空虚后,寻求更高的自由生活,更健康的精神生活,可能也是条不错的路。拥有财务自由后,才有资格有选择的权利,毕竟这个世界是一个金钱的世界,金钱是这个世界的真正的唯一的上帝。</p>
<p>像小姑娘这样很早就有自己的追求和愿景,挺好的,但是,我和@丸子 确实教育不出来,所以,也就不纠结了。我们也在不断探索如何教育孩子的一条路,没有一个正确和绝对的答案,但是肯定是要不断地学习、反思和摸索的,而且,帮助他成长,是我们在世一直要给与他的东西,不仅仅是求学阶段,同时,教育他的同时,我俩也学习到、收获到很多很多,甚至某种程度上来说,是我们自己的“成长”,成为一个父母,成为一个更健全的人的历程。</p>
<h1 id="最近的感受">最近的感受</h1>
<p>今年读的书少,瞎忙,不过读过的几本,还都印象深刻,《繁花、台北人、长日将尽》,非常痴迷于这类刻画人的命运,又或字里行间大段心理独白的小说,在挑灯夜读的深夜,仿佛一位位安静的朋友,在和你娓娓地诉说,诉说生活、生命,平和,但是又透着坚定。</p>
<p>今年的怪现象太多了,沿袭了去年的怪诞,在推上有直白的暴光,有李老师每日幻灯片似的展示,各种宏大叙事中,遮盖不出普通人的挣扎,不想去批判那些无趣、残暴和荒诞,我其实更愿意,在每件宏大叙事的帖子后面,去看一位位真实的个体的留言,那才是不被物化的真实存在,一行行、几十字,表达出的才是真正的灵魂,闪动着,仿佛空荡荡的、高大宏伟的斯大林主义建筑前面,一团团的鬼火。</p>
<p>这几年来,消逝而去的,是一个个有趣的灵魂,是对周围人的关心,是对这片土地的关注,是对一种优雅、体面生活的追求,是不愿意妥协给龌龊的倔强,……。现实是一把皮鞭,执鞭者是野心家、小丑和贪婪的鬼,他们甩开膀子的抽打,声声抽打到人的心灵皮开肉绽,响脆的声音,带着旋律,是听给方圆几公里的人们的,这样的一天下来,周围变得安静极了,除了敏感的、勇敢的少数逃离的人们,大部分的本地人,都顺从的捂上了耳朵、捂上了眼睛、蒙上了大脑。</p>
碎碎念点经济的事
2023-03-07T00:00:00+08:00
https://www.piginzoo.com/finance/2023/03/07/us-fed
<h1 id="前">前</h1>
<p>人是一种容易遗忘的动物,不信问问自己,是否还记得去年3、4月份被封在家,11月份压抑到极致,12月份在家痛病的过程。
现在,可能现在脑中,大概只剩下一个朦胧的疤痕了吧。</p>
<p>人如此,经济更是被重创,12月初开始万物复苏,经济重新上路,但是,修复不是一朝一夕,要慢慢来。</p>
<p>大洋彼岸的美国,日子也不好过,美联储为了控制通胀,连续的加息,已经加得不像样子,快逼死了英国、瑞银、黑石,可能还会有后来者。
回顾这些一系列过程,总觉得该好好捋一捋,让自己明白,这其中的经济逻辑,让自己获得更明白一些,无论对投资、对人生都是有所帮助的。</p>
<p>这篇博客,不谈中国,主要想聊聊美国、美联储、美国经济、美国股市,到底在经历什么,各种的现象背后究竟在发生什么。</p>
<h1 id="关于通胀">关于通胀</h1>
<p>通胀本质上是对财富的再分配,通过通胀,大家会觉得钱越来越不值钱,就会想着,还是尽量花掉了,这样可以促进社会总需求的上升。
所以温和的通胀,是对经济有好处的,国际上大家都觉得把通胀定在2%-3%,是一个理想的数值。</p>
<p>反过来,如果通缩,大家更倾向于储蓄了,这样总需求就会萎缩,不利于经济发展。</p>
<p>但是,通胀是限度的,一旦进入到恶性通货膨胀,就会对经济造成毁灭性打击,金融系统、信贷系统都会崩溃。</p>
<p>通胀的原因有3种:</p>
<ul>
<li>需求过于旺盛,全社会需求扩张</li>
<li></li>
</ul>
<h1 id="美联储为什么要控制通胀">美联储为什么要控制通胀?</h1>
<p>参:</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=vHUZVwvvP7o">一口气了解通货膨胀</a></li>
</ul>
<h1 id="美国的通胀是怎么来的">美国的通胀是怎么来的?</h1>
<p>一个是美国政府发钱,</p>
<p>一个是供给少饿了,</p>
<p>一个是QE</p>
<h1 id="通胀好控制么">通胀好控制么?</h1>
<h1 id="美联储怎么控制通胀">美联储怎么控制通胀?</h1>
<p><img src="/images/20230307/1678155621592.jpg" alt="" class="myimg100" /></p>
<p>美国已经加息到4.75%了,从2022.6.15,到现在(2023.3.7),9个月,加息了3%了。</p>
<table>
<thead>
<tr>
<th>决议时间</th>
<th>变动基点</th>
<th>变动后利率</th>
</tr>
</thead>
<tbody>
<tr>
<td>2023-02-01</td>
<td>25</td>
<td>4.50%-4.75%</td>
</tr>
<tr>
<td>2022-12-15</td>
<td>50</td>
<td>4.25%-4.50%</td>
</tr>
<tr>
<td>2022-11-03</td>
<td>75</td>
<td>3.75%-4.0%</td>
</tr>
<tr>
<td>2022-09-22</td>
<td>75</td>
<td>3.00%-3.25%</td>
</tr>
<tr>
<td>2022-07-28</td>
<td>75</td>
<td>2.25%-2.50%</td>
</tr>
<tr>
<td>2022-06-15</td>
<td>75</td>
<td>1.50%-1.75%</td>
</tr>
</tbody>
</table>
<p>服务的背后,是人工成本,是工资水平,是失业率。这个逻辑是,如果大家都有工作,工资还持续增长,大家的购买力就不会下来。</p>
<p>失业率目前是3.4%,这个太低了。充分就业是4%,现在比充分就业还充分,那大家咋失业、咋降薪、咋购买力下降、咋减少需求、咋给经济降温、咋降CPI呢?</p>
<p>华尔街(市场)总是和美联储在对赌一样,认为美联储会放缓升息、会停止加息、会逐渐降息,这些都是他们的意淫而已。</p>
<p>美联储其实不care经济的衰退,他们真正care的是金融系统的稳定,比如英国养老金危机、瑞银集团的流动性危机或者最近的黑石公司的流动性危机,这种危机如果发生并引发系统性金融风险,那么美联储一定会降息的。而,对经济衰退,美联储巴不得呢,因为,只有经济衰退了,人们才会节衣缩食,降低消费,通过减少消费端,使得通膨回落。要知道,衰退并不可怕,只要通过适当刺激,经济可以再次增长;而可怕的是通胀,它会有粘性,很难被快速和一次性的打下去,从而长期损害经济。</p>
<p>现在终端利率(termnial rate),也就是大家推测最终加息的尽头、最高点会是多少呢?</p>
<p>美联储调节的方法是,FFR – 美国联邦基金利率(Federal funds rate):</p>
<p>2020年之后,美联储就取消了法定准备金政策了,但是,商业银行还是把钱存在美联储的准备经账户,原因是,商业银行现在就把美联储当个临时提款机,用来满足他们的日常的短期现金要求。FFR是银行间借贷(拆借)的利率,这个利率是由准备金的总额决定的,所以美联储就可以通过,增加或减少准备金的总额,来影响这个FFR,钱少了FFR利率就高了。美联储如何调节准备金总额呢?就是在资产负债表上改个数嘛,就这么简单。</p>
<p>这个就是咱们天天听美联储说的加息、降息动用的手段。</p>
<p>这个是调节利率,不是QE哈,QE是快速向市场投放货币,快速扩充央行的资产负债表。</p>
<p>刺激政策有两种:</p>
<p>1、是央行刺激,就是央妈把钱贷给银行,或者买银行手里的债券,也是变相的给银行钱,给他们流动性。希望他们可以把钱贷给实体经济。可是,如果经济不好,信贷水平收缩,商业银行可能不愿意把钱贷给企业,这就会导致这些钱,在金融系统内部空转,从而推升金融资产价格,比如股票、房地产啥的。</p>
<p>2、是政府刺激,就是财政政策,政府发债券募集到钱以后,投入到基建、民生当中,从而刺激经济。政府咋募集?就是发国债。谁买?各大银行,金融机构买呗,其实,就是相当于把钱从这些金融机构手里弄到了政府手里,政府直接可以贴补给企业、或者投入基建了,防止了上面央行刺激的弊端,但坏处是,因为不是通过市场,资金的利用效率肯定不如央妈的刺激政策管用。</p>
<p>美国cpi都是啥</p>
<p>美元指数和股市是负相关的,这个如何理解呢?</p>
<p>因为资产(股票、大宗商品)不好的时候,大家更愿意持有货币,对货币更有信心,我是这样理解的。
而人民币走势又和美元指数负相关,所以,人民币贬值,股市(中国)就差,升值就好,这种共振关系也会出现。
当然,假设是中国股市是和美国股市共振的。</p>
<p>美元指数,其实更相关的是,和欧洲的利差,这个更决定美元指数的走向:</p>
<p>美元指数的构成:</p>
<table>
<thead>
<tr>
<th>货币</th>
<th>占比</th>
</tr>
</thead>
<tbody>
<tr>
<td>欧元</td>
<td>57.6%</td>
</tr>
<tr>
<td>日元</td>
<td>13.6%</td>
</tr>
<tr>
<td>英镑</td>
<td>11.9%</td>
</tr>
<tr>
<td>加拿大元</td>
<td>9.1%</td>
</tr>
<tr>
<td>瑞典克朗</td>
<td>4.2%</td>
</tr>
<tr>
<td>瑞士法郎</td>
<td>3.6%</td>
</tr>
</tbody>
</table>
<p>美国国债和股市也是负相关的,这个如何理解呢?</p>
<p>国债收益率,可以认为是整个市场的基准(锚),他反映了市场的真实利率,大家会用这个利率作为其他利率的基础。
当这个收益率最高的时候,是市场资金成本最高的时候,资产的价格肯定是最低的时候,大白话就是,利息贵,钱就紧,
就没那么多钱推高资产价格了,所以资产就跌。</p>
<h1 id="美国经济数据">美国经济数据</h1>
<ul>
<li><a href="https://www.bea.gov/data/gdp/gross-domestic-product">GDP</a>,<a href="https://tradingeconomics.com/united-states/gdp-growth">2</a></li>
<li>PMI</li>
<li><a href="https://www.bls.gov/charts/consumer-price-index/consumer-price-index-by-category-line-chart.htm">CPI</a>,<a href="">2</a></li>
<li>PCE,,<a href="">2</a></li>
<li>PPI,<a href="">2</a></li>
<li>非农就业,<a href="">2</a></li>
</ul>
<p>其他:</p>
<ul>
<li><a href="https://fred.stlouisfed.org/series/MICH">密西根大学调查的通胀预期</a>,<a href="https://tradingeconomics.com/united-states/michigan-inflation-expectations">2</a></li>
</ul>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=hjTCE0hqmtQ">付鹏2023长白山高峰论坛演讲</a></li>
<li>
<p><a href="https://www.youtube.com/watch?v=7oITT9lXvI0&t=554s">贝乐斯:No.21 解析美联储资产负债表</a></p>
</li>
<li><a href="https://www.youtube.com/watch?v=HZNYW7WIkp0&list=PLpLEuMcDxfdng1O4b-rkbUu4sxqB41l63">路财主: 金融货币系列 总15集+</a></li>
<li><a href="https://www.youtube.com/watch?v=_eh2O5c8RHI&list=PLR2vWjaKlfQQQnveUi-YGv5BLU_BgEww7">钞钱部署:经济专家吳嘉隆系列 共47集+</a></li>
<li><a href="https://www.youtube.com/watch?v=8beZh8nnyro&list=PLJzhBO--Y0E3-0dNivNghLMHXIGCdzGlx">股乾爹:全球央行会议系列 共11集+</a></li>
<li>
<p><a href="https://www.youtube.com/watch?v=WbfbgBvgHHk&list=PLJzhBO--Y0E1Si5Cp7-sBeF2hvYGJy1Lj">股乾爹:美联储会议系列 共27集+</a></p>
</li>
<li><a href="https://www.youtube.com/watch?v=0U8ZT0nVPEI&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2">moneyxyz: 一个视频彻底看懂美联储是如何加息的?</a></li>
<li><a href="https://www.youtube.com/watch?v=bdp-uagGY5c&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=2">moneyxyz: 美联储如何”缩表”抑制40年最高通胀?什么是”缩表”?</a></li>
<li><a href="https://www.youtube.com/watch?v=kjmyRlPJ89k&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=3">moneyxyz: 你真的理解什么是“量化宽松”QE吗?</a></li>
<li><a href="https://www.youtube.com/watch?v=u_TtGdl2d9A&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=4">moneyxyz: 美联储如何通过国债操控利率?为什么债券价格上涨代表利率下降?</a></li>
<li><a href="https://www.youtube.com/watch?v=epnLZTHQ6Cw&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=5">moneyxyz: 你必须知道的经济衰退信号: 国债收益率倒挂(Inverted Yield Curve)-经济危机马上要来了吗?</a></li>
<li><a href="https://www.youtube.com/watch?v=dKH_GDa0Rac&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=8">moneyxyz: 为什么美联储抛弃了“准备金率”?为啥货币乘数的概念是错的?</a></li>
<li>
<p><a href="https://www.youtube.com/watch?v=KmvO9ObQLOE&list=PL1ta5B0mfuN0Ou77hlpS6YxJKNcH6czU2&index=11">moneyxyz: 2023年股市反弹: ”不要和Fed作对”错了吗?</a></p>
</li>
<li><a href="https://www.youtube.com/watch?v=u3Q9BpZOhP8">小lin说: 关于利率,你需要知道的那些事儿</a></li>
<li><a href="https://www.youtube.com/watch?v=G67sCJKNjy8&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=3">小lin说: 20分钟详解日本经济泡沫</a></li>
<li><a href="https://www.youtube.com/watch?v=Ls9Qlhsu9AA&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=4">小lin说: 日本经济失落的三十年</a></li>
<li><a href="https://www.youtube.com/watch?v=cuUo2lO7ZEk&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=5">小lin说: 日元崩盘,日本国债闪崩的背后</a></li>
<li><a href="https://www.youtube.com/watch?v=h9GZBw4-Ltk&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=10">小lin说: 英国崩盘到底是怎么回事儿?</a></li>
<li><a href="https://www.youtube.com/watch?v=uyAEbrG4vaI&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=11">小lin说: 一口气了解错综复杂的欧债危机</a></li>
<li><a href="https://www.youtube.com/watch?v=vHUZVwvvP7o&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=14">小lin说: 一口气了解通货膨胀</a></li>
<li><a href="https://www.youtube.com/watch?v=kH0n8Yq35ZM&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=8">小lin说: 能源危机,到底是怎么回事儿?</a></li>
<li><a href="https://www.youtube.com/watch?v=SdV-U1ttWYM&list=PL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index=9">小lin说: 英国经济和英国脱欧的那些事儿</a></li>
<li><a href="https://www.youtube.com/watch?v=ssssR1hxiTw">小lin说: 一口气了解石油和中东的百年战争</a></li>
</ul>
我的零刻小主机
2023-02-21T00:00:00+08:00
https://www.piginzoo.com/tech/2023/02/21/mini-pc
<p>最近做了一个<a href="https://github.com/piginzoo/quant_research/tree/main/dingtou/dingtou/iquant">ETF量化交易策略</a>, 需要有一台机器来执行它,需要windows操作系统的,上面需要运行实盘软件QMT和一些监控程序。</p>
<p>我最开始就是想买一台云主机,但是,一看价格,阿里云的2核4G内存的,还是共享型的主机,一年先来要1428,看了其他平台,价格也伯仲之间。于是觉得不值,就想到了能不能买一台mini主机,放到家里。这样还安全。</p>
<p>于是,在京东搜索后,和各种谷歌后,终于找到了一款满意的mini主机,<a href="https://item.jd.com/10063411447702.html">零刻SER5-R5-5600H</a>,16G内存,6核12线程AMD CPU,500G固态盘,2100元。而且,个头非常非常小,大概只有饭盒大小。相当满意,于是果断购买。</p>
<p><img src="/images/20230221/1676990998201.jpg" alt="" class="myimg100" /></p>
<p>待我安装完各种软件后,把策略部署到QMT软件中,终于可以实盘交易了。</p>
<p>然后,我就开始考虑,如何保证这个小机器的维护和可用性。</p>
<p>于是我在bios中,设置了每天9点就自动开机,这样9:30交易的时候,他就ready了。</p>
<p>到了下午15:30,我设置了一个windows自动关机,交易结束后,他会自动关机了。</p>
<p>然后,我写了一个心跳程序,往我的云服务器推送心跳和交易信息,这样,我在我的云服务器上,可以随时了解到这台mini主机在交易期间的情况。</p>
<p>如果出现了交易机会和实盘下单,mini主机上的qmt程序,都会推送信息到我的微信、企业微信和邮件上,方便到第一时间知道。</p>
<p>这样,貌似完美了,但是,我担心万一我出门在外,这台机器出问题了咋办?</p>
<p>于是我想到了使用远程控制的软件,我装了一个向日葵软件,这样,我就可以随时远程回家,查看mini主机的运行情况了。</p>
<p>可是,如果某种原因,他没有在交易时间开机,或者中途死机了,而我又在外面,咋办?</p>
<p>我突然看到了一个向日葵提供的方案,一个<a href="https://store.oray.com/product/330019.html">远程控制的开关C1 pro</a>,是向日葵售卖的一个硬件,你可以通过它,远程对mini主机进行开关了。</p>
<p>这个方案听上去非常棒,于是我下单买了一个,很便宜,39元。</p>
<p>开关到了后,我按照说明书配置,却卡在了路由器配置上,我的路由器是华硕的,它这个智能开关很诡异,必须使用2.4G的wifi网络,我只好关闭了5G wifi,还是不行,我有按照它提供的<a href="https://sunlogin.oray.com/news/17453.html">排查文档</a>逐一修改wifi路由器配置,依然不行。实在是没招了,我联系了客服,客服给我一个配置截图,我对比了下,发现只有一处和他发图的不一样,就是把无线模式改成”Legacy“,修改后,果然就好了。</p>
<p><img src="/images/20230221/1676991317100.jpg" alt="" class="myimg100" /></p>
<p>配置好路由器后,接下来是修改mini主机的bios,开启一个叫AC Power Recovery的特性,这个特性是说,当你电源断掉又重新接通的时候,你可以自动触发开机,<a href="https://service.oray.com/question/6178.html">向日葵也就是用了这个特性</a>,远程打开开关,从而触发开机的。默认主板上这个特性是关闭的。</p>
<p>可是,我翻遍了零刻这台mini主机的bios设置,就是找不到任何AC Recovery的设置。我有些绝望了,到那时仍然不甘心,就挨个逐项地看bios,终于发现,有一个叫AMD CB的配置项里,藏的很深的地方,有一个AC Power的选项:</p>
<p><code>AMD CBS > FCH Common Options > AC Power Loss Options > AC Loss Control</code></p>
<p>把值从Always Off改成Always On后,我试了一下,果然,电源一接通,零刻的主机就立刻启动了。</p>
<p>终于,所有的问题都完美解决了,我终于可以开始地写策略和交易了。</p>
一些感慨
2022-11-15T00:00:00+08:00
https://www.piginzoo.com/life/2022/11/15/recently
<p>这些年,世界在巨变,中国也在巨变,每个人生活,每个人的内心也都在波澜起伏,肯定不是2000-2008的昂扬向上,肯定也不是2008-2012的安逸幸福,这10年,准确的说,是从2012年到2018年,初现波动,而2018年之后,波涛骤起。这一路走来,我们也老了,成熟了,也体会了岁月沧桑和世界的无常。</p>
<p>外部世界的变化,就不想再重复和赘述了,但是谈谈一些内心的变化,无论是我自己,还是朋友们,还是可观察到的身边的人,以及那些视野可见的人们。</p>
<p>总的来说,我个人对未来不是那么乐观,但是也绝不是那么悲观,无论对中国,还是对世界。非黑即白的二元世界观被纠正过来后,我就不再用一种粗暴的眼镜,来评判一切了。不轻易下结论,不轻易评价,不凭感觉下结论,摒弃事事都有正确答案的从小应试教育的思维方法。而,逐渐转变成,尽可能的获得信息,获得高质量信息,判断信息的可信度,判断信息背后的动机和立场,并且做多信息源的交叉验证,并且,不急于得出结论,加上一个时间维度,过一段时间,甚至过相当一段时间,再得出结论来。并且,有一套严谨的判断逻辑,要符合常识,又要符合类似于三段论的逻辑推演方式,把信息纳入到这套逻辑和常识后,得到的结论,自己才肯大概率的相信。即使是自己置信度很高的确认,也保持着一丝的怀疑,再任何人来质疑的时候,自己也会跳出来,审视自己既有的结论的可信性和稳定性,尽量克服自己被别人chanllenge的心里不舒服的障碍,尽可能最大限度的保证结论的相对正确性。</p>
<p>具体的来说,遇到一件事情,或者网上给出的一个结论、观点或事实,如果是自己感兴趣的话,或者利益相关的话。我会第一时间,寻找其他信息源,比如谷歌、推特、微博、微信搜索、百度搜索、朋友圈、群消息等等,多方信息源交叉验证后,你往往就会对事情的全貌有了一个大致的轮廓。然后,我会在B站、知乎、油管、豆瓣等这些我认为相对可信一些的信息渠道,对这个事情进行更深入的了解,往往很多知识大V、常年关注的UP主、深度解读的文章,都会让我对我需要确认的内容,有了更深入的理解,往往就已经超过了大部分道听途说,甚至刻意渲染的虚假信息的困扰了。但是,这些还往往不够。因为这些提供信息深度剖析的人,往往这样那样,带着自己的“私货”,不是说这些私货不好,而是这些私货往往会干扰你对这件事情、事实的理解,失去了事情本身的客观性,所以,这个时候,要通过聆听他们所谓的深度剖析,尝试分析和理解他们背后的分析逻辑、他们的立场、以及他们的结论和导向,然后你会不由的嘟囔“噢!原来你是这么理解这件事情的,这么想的”。长此以往,你就一眼就看出他们剖析过程中的私货多少,且很快可以过滤掉这些私货。更进一步,你会对那些本身就是重视多渠道信源、强调数据、把分析逻辑讲给听的UP主和大V们,更多一份信息,也跟他们身上学到很多很多。</p>
<p>当你对这些大神和UP主祛魅后,你只会感叹,他们怎么可以如此博学和厉害呢。慢慢地,你开始好奇他们之所以成为他们的原因,除了少数人是天生聪明和敏感,大部分还是经过长年累月的思考、学习,才成就了他们。所以,渐渐地,我就明白,广泛的涉猎,同时又深入地在一个感兴趣的领域深入地重要性。</p>
<p>回到对这个时代和世界的看法上来,如同我前面说的,我不觉得未来会那美好,也不会对未来那么悲观的。我并不是西西佛斯那种,在困境中,非要用生命力去对抗的坚持。而是,一种真实地对世界的理解和判断。</p>
<p>从疫情开始,到后面的管控措施、核酸检查,到后面各个行业的团灭,房地产的冬天,再到后来开大会的结果,一点点的把人们的心打入到一个愈发冰凉的井底,以至于润学大发展,以至于留学、移民越来越热。可是,真的国家已经到了这么危险和不堪的一个地步了么?我是一个绝对的自由主义者,信奉消极自由,但是,我同时又是一个理性主义者,我不会让我的价值判断,影响了我对我的生存环境的判断。我的逻辑其实也非常简单和明了,就是十四亿人的集体意志是大于某个人的威权意志的,这是从改开到现在40多年,几代人的积淀,是不可能回到那个混沌的年代的。那个年代的形成,有其特定的历史条件,是经过战争、强烈的意识形态、以及毛超级的个人魅力,即使是那个年代,也是经历从49到58,从58到66年,也是逐渐有一个过程的。你知道建国时候的人口是多少么,5.42亿人,现在是14亿人口,这么巨大的一个人口数量,40年来依然接受了西方各种文化的人们,怎么愿意再集体回到那个年代呢。况且,那个时代,世界各地都在左派风起云涌,意识形态对立严重。与那个风起云涌的大年代比,现在刚是哪到哪呀。</p>
<p>所以,退回文革,在我看来,绝对是一个极小概率的事件,可能未来会有一些上权利的侵害,也许可能更可能的变成大号的坡县吧。而我已经摒弃了道德的洁癖感,倒不是因为我已经向这个世界彻底妥协了,而是我知道自己的底线在哪里。我很清晰地知道自己的底线在哪里,如果触及到它,我会毫不犹豫的离开,但是现在远远没到那种程度,甚至,我乐观的认为,在我有生之年应该都不会到达那种程度。</p>
<p>反过来再谈,你如果看过达里奥的<a href="https://www.bilibili.com/video/BV1c34y187S2">应对世界的变化原则</a>,你应该会认同他的逻辑,也就是中国还是世界上最具发展的土地。可以大范围的看一下,美国两党的分裂,欧洲的不稳定的地缘政治,整个世界科技的发展停滞,哪里还能找到一个如此大的可以启动的市场,以及愿意把科技发展当做国策的国家呢。我虽然千种万种地不愿意被限制和管束,但是,理性告诉我,如果想有发展、经济上有保证、特别是下一代有好的发展机会,可能中国依然是最好的选择。</p>
<p>可是,可是,我同样会警惕所有的问题的。你可能觉得我很自相矛盾和分裂,但是,这恰恰是我前面说的,要摆脱非黑即白思维的约束的结果。也许再过3-5年,我的评估结果和现在截然想法也有可能,但是至少当下这是我大概率的判断。就如同在我的<a href="https://book.piginzoo.com/china/china.html">中国经济</a>总结中,我列出的中国的债务问题,表达了我的种种担心。中国和世界其他国家一样,有着各种各样的问题和风险,比如债务问题,特别是居民端、企业端的债务问题;有台湾这个地缘政治危险,这个火药桶一点燃,就是火山般的爆发;还有某个人的权力过大导致的权利的傲慢,会让他失去聆听的能力,以及所有人都只会谄媚向上的风险;还有当下的清零策略导致的经济凋零,以及未来放开后一轮大疫情爆发的冲击。我其实最担心就是2点,一个是政经政策的全面返左,放弃改开;一个是台湾战争的爆发。</p>
<p>所以,为了防止这两点的发生,或者其他极端的情况的发生,作为普通人的我,肯定是会做出风控措施的。比如,将来让孩子出国读书,有必要的话,拿一个身份再回来;资产配置会考虑一部分美元资产或者国外证券,作出对冲。但是,全家移民暂时不是我的选项,主要是很多细节问题很难解决:资产问题、再就业问题、父母养老问题等等,至少目前这个阶段,理性告诉我,这样的举动对我来讲不合适。
即使是让孩子出去读书和拿到PR,我还是希望孩子将来回到中国发展自己的事业,希望自己的资产配置重点在国内。也希望,我的这些风控措施,永远都不会有起作用的一天。</p>
<p>但是,从短期来看,这些风险发生的概率都很小,耐心,耐心,耐心,我这样告诫自己,多观察、多思考,别让别人的情绪、焦虑蒙蔽了自己的耐心,如果问题会发生,他也是一点点的浮现出来,我们有的是时间来来做出调整,我们不会直面49年的选择题的困境。</p>
<p>最后,我想说的是,对未来,真的不要那么悲观,但是,也时时刻刻保持警惕。最重要的不是你悲观或者乐观的态度,而是一颗时刻保持敏锐、学习和理性的心,遇到任何事情,都有自己的一份观点和判断,基于理性和逻辑,而不是被气氛、舆论所控制。风控当然要做,但是不应该为了极小概率的事件,作出一个“过度防疫”的行为,为未来保留一个价格可以接受的期权就可以了。</p>
<修改这里的标题>
2022-09-05T00:00:00+08:00
https://www.piginzoo.com/%3C%E4%BF%AE%E6%94%B9%E8%BF%99%E9%87%8C%E7%9A%84%E5%88%86%E7%B1%BB%EF%BC%8C%E7%94%A8%E8%8B%B1%E6%96%87%3E/2022/09/05/china
<p>localhost:</p>
<p>#</p>
回望
2022-05-06T00:00:00+08:00
https://www.piginzoo.com/life/2022/05/06/look-at-the-world
<p>姥姥已经90有2了,有时候,听她讲起,小时候,躲日军,到山里,看到日本人的骑着大马和刺刀的事,恍如隔世一般,完全是和平年代的人无法想象的景象。</p>
<p>和父母聊天,则是另外一番感受,他们讲农村合作社的生活,挣工分,在集体食堂里吃饭,18岁报名参军和部队生活;也听岳母讲起,16岁在山西下乡当老师,后来又去市里的兵工厂的生活。</p>
<p>而到了我,仍然记得八十年代,拎着玻璃瓶去合作社打酱油,那个黑色的酱油大桶,花花绿绿的粮票,现在都依稀记得。那家门朝东、空旷旷的合作社,就在我小学同学的家门口,就在我现在的家应该可以眺望到地方。</p>
<p>如同我一样无法理解姥姥80年前,父母50年前生活一样,我的孩子是不可能传承这些记忆了。而,那段时空,虽然朦胧、模糊,却如同烙印般,深刻在我们灵魂最深处。</p>
<p>活着活着,就老了,而记忆却不断地沉淀下来,虽有遗忘,但是层层叠叠的年轮,已经把我、把每个人锁定在年轮的最中心,成为了今天的“我”。</p>
<p>我们这一代是幸运的。虽然80年代依然是一个尘封的世界,但作为小学生的我,去代表学校去参加人民大会堂的演出激动不已,那时候,我们按部就班地生活在热爱党热爱祖国的忠诚幻境里。长大以后,才知道,80年代其实是文革后思想和文学最奔放的年代,世界却已经悄悄改变了。</p>
<p>幸运的我们,并没有停止成长的步伐,还依稀记得93年,老爹举着一期瞭望杂志,上面是小平的南巡画面,虽然不懂这含义,但是,却实实在在改变着我们每个人。</p>
<p>上大学后,我的世界变大了,生活也是,搬上了楼房的新家,认识了北京市各个区县的同学,大学同学带着我听小虫、郑钧的音乐,第一次在同学家触网——用netscape浏览器连接到了美国,一切都是那么新奇。</p>
<p>毕业后,虽然出国两年才回来,但是,icq、QQ、网页聊天室已经开始风行,那时候常常和一群素未谋面的人,畅聊到深夜,袒露自己的热情和真诚,完完全全感觉到野蛮生长的互联网带来的各种各样的冲击。</p>
<p>再后来,结婚生子,去外企混,带着出生的儿子,参加了08年的奥运会,一切,一切,都仿佛充满梦幻,连iphone、gphone也都为这个高潮添砖加瓦。而,一切,又从那时候戛然而止,就如同08年被封掉的谷歌,09年被封掉的饭否,一切在高潮后落幕,一切都在悄悄的改变。</p>
<p>2012年,我出去创业,2012年,那个人开始上台,一切,都在黯淡下去。</p>
<p>后面,每个人也都知道了,虽然偶有精彩,但都已是《昨日的世界》,各种互联网的暴虐、意识形态的对立、各种的封锁删帖、香港的陨落…..,直到2020.2迎面扑来的新冠病毒,将这一切推向高潮!</p>
<p>这世界怎么了?</p>
<p>这世界其实一直都是这样,回去再看看我们的父母、我的姥姥,他们经历过的一切,我们都没有经历,是我们幸运么?也许吧。我们也许一直都活在梦里、梦幻里,而这个梦境,才刚刚醒来,醒来面对这个真实的世界,世界一直没有改变过,一直有野心家、有贪婪和残暴,有野蛮,世界只在乌克兰、阿富汗、也门、伊拉克,让我们窥视过他的真实,也许,不就就会来到我们这里,谁知道呢?when and how?</p>
<p>未来会怎么样?我不知道。我当然希望它一如既往的美好,一如既往地让我、我的孩子,可以在体验这现世的美好,但是,同样,做好面对它真实、狰狞的一面的准备,坚定沉着地活着。</p>
我的人工智能之旅
2022-03-10T00:00:00+08:00
https://www.piginzoo.com/machinelearning/2022/03/10/4years
<p>2016年年底,参加谷歌开发者大会,我站在会场最后一排,站着听完了tensorflow的讲座,觉得这技术很酷,因为2016年alphago战胜了李在石,所以对AI技术充满憧憬,虽然当时还听不懂,还是不明觉厉。</p>
<p>2017年年初,从创业公司退出来,和创业伙伴分道扬镳,站在一个人生的十字路口,就想着还是要过一个技术人生,选择一个最酷的技术学习和从事,想的很单纯,就很单纯地冲进去了。记得是3月份的时候,报了小象学院邹博的机器学习课,跟着啃了下来,大概3个月,虽然学完还是啥都不会,但是至少对机器学习有了概念,也能分清楚机器学习和深度学习的关系了,也努力开始把概率、高数、线代都捡了起来。随后,陪着家人看病,哩哩啦啦,一直到了年底。期间,去买了各类盗版课,疯狂的刷,似懂非懂,但是至少对AI的边边角角都有了概念。下半年,又开始学习深度学习,对CNN、LSTM等概念有了一定理解,也动手写了一些代码,写了一些典型的例子,也能跑通,同时努力理解它的原理。逐渐地,感觉自己已经入门了,但是,还是缺乏一个像样的项目的实践。</p>
<p>2018年,来到了一个互金公司,这里是它的一个子部门,恰好,部门技术老大想组建一个AI方向的团队,经朋友介绍,我获得了这个机会,我是非常珍惜这个机会,推掉了其他的offer。</p>
<p>刚来公司,技术老大就扔过来一个任务,我明白,这个就是一个试用期考察,是一个让我给别的团队提供验证码识别,对我一个从来没做过真实项目的人来说,是个不小的挑战,于是,我开始拼命的查找资料,github上clone,找例子尝试。最终,找到了一个比较简单的例子,很实用,我在此基础上做了改进,然后用我的笔记本,真的训练了出来,正确率还非常高,可以到90%+。其实,就是一个固定长度输出的CNN,现在看来非常简单,但是在当时,对自己来说还是一个不小的挑战,毕竟keras是第一次上手使用(之前主要是看tensorflow)。最终,2周,就把这东西训练出来,并且搞上线了,我自己都惊讶自己的高效,当然,这也是夜以继日不停的学习、思考、实践的结果。期间,还学习了docker,做成了容器发布,还完成了服务器上的部署等诸多细节。</p>
<p>老大对我的进度、能力非常满意,顺利转正。之后,就给我一些空间,让我探索,有什么可以落地的可能性,我也自信满满,自己对NLP、聊天机器学习人,非常感兴趣,于是,就把自己的方向尝试向这个方向努力,也和老大沟通了,他表示也同意。于是,我开始着手研究,经过调研,我找到了RASA,一个开源的chatbot引擎,从这里面,我看到了一个比较大的开源项目,如何使用LSTM、命令实体识别、意图识别等诸多细节,收获颇丰,我花了很长时间,一边补习这些深度的基础知识,一边阅读它的源码,运行它,尝试它的例子;然后,把这套东西,尝试用在公司的一个对外的业务问答上,做的过程中,才发现,把公司的业务知识梳理清楚,形成一个知识库很有必要,这个时候,就接触到了知识图谱,还报名参加了王昊奋老师的课,真心听不懂,不过硬是跟下来了。但是,真的去实践的时候,发现,根本没有一个成熟的知识图谱引擎,商业化的只有不带概念层的neo4j,而带着完备概念层的jena,根本就是个toy,自己也鼓捣了一下jena,根本不适用。而且,自己看到的唯一的可以run的是一个农业百科的问答系统,后来就越来越觉得这事难度太大,是自己一个人无法搞定的大工程。最最核心的是,如何把一个问答语句,转变成一个本体的查询语句sparql,是一个非常难的事,我根本没有思路。老大可没有耐心,在3个多月没有任何进展后,就让我必须把chatbot用起来,我于是,只好到处找场景,最终,和运维监控团队一起,尝试做一个业务监控报警机器人。最终,其实并没有用到rasa,只是很简单的一个固定模板,反倒是精力花在了基于微信的聊天机器人、QQ聊天机器人等诸多跟AI无关的技术细节上,偶尔用了用聚类做做问题的自动分类聚合等。就这样,哩哩啦啦、陆陆续续的忙到了年底。老大对我这块的进展非常不满意,甚至裁掉了我招的一个同事。</p>
<p>转机出现在第二年春节后,其他团队的同事,找我帮着做银行流水的识别,是一个OCR需求,我非常高兴,详细和他沟通了需求,他们需要的是把客户拍摄的银行流水水单,把其中的工资项需要分裂出来,不需要客户再手工输入,或者,让客户输入后做交叉验证。所以,这个时候,就需要一个OCR引擎,可以把文字的位置和内容识别出来。他们也去寻找了其他的技术方案,找到了阿里提供这种通用文字识别方案,识别率还挺不错的,他们决定采用,但是,他们更希望,我这边提供自有的OCR识别方案,毕竟,把客户的银行流水图片,交给基于互联网的API,是有背风控原则的,这可是客户的私人资料,按理说不应该发给任何第三方的。我于是接受了这个挑战,我和他们两边同时进行,他们先用阿里的API开发,等我的OCR识别OK了,他们再切回来。</p>
<p>尽管我之前只有验证码和聊天机器人的实战经验,但是,我对这件事还不是那么有信心,不过后来安慰自己,既然别人能做出来,我也可以。于是,我展开了深入的学习和研究,感谢互联网,我逐渐了解到,OCR分为检测和识别,也逐渐了解到了各类检测核心算法和识别核心算法。最终,我选定了当时最为成熟的CTPN检测算法,和识别的CRNN算法。然后,认真的读了两篇论文,中文的读完了,再读英文的,基本上原理的各个细节都了解了,期间遇到各种自己不懂的问题,都一一研究全都搞清楚。最后,我还找到了github上star最多的两个项目,由于自己一直是在学习tensorflow和keras,所以,就直接过滤掉了pytorch的项目。接下来,就是,对代码一行行的啃,每行都搞清楚,搞不清楚的,就把代码拷贝出来,写个小例子,中间加入了无数的打印,图片输出,debug图像等,每个细节都力图清清楚楚。十分感谢这些开原作者的复现代码,当时的我,甚至现在的我,可能都很难复现每一个细节,而他们当时的每行代码的展示,都给我无穷的帮助。</p>
<p>代码搞清楚了,剩下的,就是要动手训练了,因为我有训练的经验,所以我明白样本的重要性。我先从CTPN入手,样本我不可能从头标注啊,那怎么办?恰好我的合作团队,他们正在调用阿里云的API,已经积累了大量的样本,对我来说,如获至宝,我管他们要来后,清洗,然后按照ctpn要求的样本格式进行训练,期间,修复了ctpn源码中的好几个bugs,最终,大约在一个半月左右,终于训练出来了我的检测模型。正确率和F1都可以到70%+。非常高兴和开心,自信心也大大增强。接下来,就是CRNN,CRNN的算法比CTPN要复杂,一如既往,我套路已熟,读论文、肯细节、推导也不放过,理论撸完撸代码,代码也是逐行读逐行理解,写注释,中间也遇到几个棘手的细节问题,都一一攻克了。样本,我使用了阿里切出来的大量的识别小图,但是,有一个问题,就是阿里的小图有很多错误,并且,覆盖的字符集太小(毕竟就是银行流水,涉及到的字数太少了)。怎么办?我的办法是,自己生成广泛字符集的样本,我使用6880的一级+二级字库,然后用图像生成的办法,均匀的生成所有的汉字小图,长度、大小、纹理、干扰等都完全随机。这样训练出一个60%正确率的模型,但是,仍然无法满足生产需求,我实在没办法了,只好像部门领导请求帮助,发动部门的研发兄弟,集体帮我打标,为此我还开发了一个小型的打标系统,然后使用阿里的真实小图,让同事们帮着校验正确与否,最终给我提供了宝贵的4万张,正确率非常高的样本,我再使用这些样本做增强,然后加入到我自己生成样本,一共大约900万张,终于在3-4天的训练后,正确率达到了85%+,基本上可以满足生产需求了。</p>
<p>这之后,我还遇到一些问题,如用户提交的图像的方向是不定的,歪的图像是无法做检测的,所以,我又自己设计了一个VGG做backbone+4方向判断的方向判断模型,并且,使用投影方差最大化,再做微调的方式,开发了一个正确率非常高的纠正方向的模型。</p>
<p>终于,我自己研发的OCR识别系统完成了,前后大概经历了3-4个月的时间,最终,我们把他部署到新采购的GPU服务器上,使用tensorflow serving的官方容器,来部署这些模型。对外,提供一个flask API容器,调用这个tensorflow serving的容器,完全替换了阿里的OCR服务。</p>
<p>经过2019年的一年,基本上,已经构建出一个新的产品方向,恰好这个时候,公司加盟了一位非常优秀的产品总监Z,Z对AI方向也非常感兴趣,也想通过AI来帮助公司开拓一些新方向,于是一拍即合。期间,我和她的产品团队,一起尝试过内部风控、风控评分卡等多种尝试,不过,在业务上都不太成功,最终,我们在OCR的进一步产品化方向上,达成一致,决心一起把OCR这个方向做突破。</p>
<p>到了2020年,我们开始深入OCR的各个方向,团队也由我一人,变成了4个人,虽然其他3个人也都不是算法工程师出身,但是大家对这个方向都非常感兴趣,也非常努力学习,我们利用平时时间,一起研读各个机器学习算法,深度学习算法,一起读西瓜书、读花书,每周五中午,都要一起做分享,并且还拉了一些其他team对AI感兴趣的同事一起,搞了一个机器学习方向的技术论坛,让大家都对机器学习、深度学习有了更深入的学习和理解。我也利用这个机会,对GAN、DRL、图神经网络,都进行了深入的学习和实践。</p>
<p>2020年赶上非典,在家隔离了一段时间,期间,正好有业务部门找上我们,要我们帮助开发一个车牌识别系统,对我们来说,车牌其实就是文字识别的一种扩展,算法无非也是对车牌的定位,以及识别。我负责识别,另外一个同事负责识别检测,他选型后,选定了psenet,在当时是最好的检测算法之一,当时的 检测技术,已经从基于fast-rcnn的ctpn,发展成为了基于语义分割技术的模型,psenet就是其中优秀的算法之一。而对车牌识别而言,我其实就是使用传统的CNN,因为车牌长度也是固定的,所以相对难度不是那么大,主要难度体现在样本上,我们没有那么多样本,好在是,我找到了CCPD,一个开源的车牌数据集,大概有30万张+,我们使用他train完后,再用业务部门提供的几千张真实场景的图片,做增强训练,最终,使得正确率达到了非常高的97%+,完全可以满足业务的需求了。这里要提一句,我们几千张车牌的打标,使用的完全是免费的百度服务:我们写了一个爬虫,去调用百度的展示网页,完成了打标;我们同时也使用阿里的展示页进行打标,以及旷视的,最终我们再做交叉验证,很高效的得到了正确率非常高的样本。</p>
<p>接下来,我做了更多的尝试,使用Keras2.0复现了当时一篇很有名的识别算法TextScanner,期间,和论文作者取得联系,还从他那里得到了一些非常关键的演示代码,可惜的是,训练总是报显卡OOM,我们12G的显卡根本train不动,我最后也只是把这个模型使用CPU可以跑通,就放在那里了,但是通过这个项目,我对论文复现,对keras2.0都有了非常深刻的理解。然后,我还复现了AttentionOCR,完全自己实现了一个Seq2Seq的实现,这个倒是训练出来了,但是,正确率远远低于CRNN,果然如同OCR圈里大家所说,CRNN是一个很难超越的经典。Attention有注意力偏移(Attention Drift)的问题,为此,我还去读了FocusAttention算法,但是,有个细节一直没搞明白,联系了作者,也没有收到回复,就作罢了。通过大约半年的复现工作,我对tensorflow、keras、深度学习以及论文阅读和理解等,都提升大一截子,自己感觉已经完全是一个合格的算法工程师了,也对带领团队面对未来的挑战充满信心。</p>
<p>2020年下半年,我们就主动出击,在产品总监Z的带领下,去拜访各个业务线负责人,和他们座谈,推销我们的产品,通过我们的努力,果然就获得了一些内部机会:帮着车贷业务线尝试开发绿本(车辆产权证)的识别,帮着保险业务线开发国内各个保险公司保单的关键信息识别;纸质征信报告识别等诸多项目机会,但是,我们都没能把握住机会,原因是我们确实还欠缺很多,具体包括,表格识别能力,前端的布局分析能力,表单间的分割能力等等。痛定思痛,我们于是开始着手一一解决,首先,我们使用网上一个Unet代码样例,再其基础上,开发出一个表格识别,具体的做法是,使用UNet做表格线识别,识别出横线和竖线,然后我们自研了一个算法,去分割出行和列,然后做cell的合并,完成了表格的识别;然后,我们是使用语义分割算法,把典型的证件类,如身份证、行驶证、发票、绿本等,使用语义分割,将其从图片里剥离出来,当然,我们仍然使用阿里、百度、旷视、华为这些公司的demo网页作为我们打标的手段;期间,我们的一个同事,还使用Bert以及笔画库,开发了一个词语纠错和文字笔画纠错的模块,大大增加了我们识别的鲁棒性;我们还改进了CRNN,使用CenterLoss来区分形近字(这个受到阿里的一个分享中提及的方案的启发),并且,通过改进我们的造字程序,加大样本量等手段,是我们的正确率从我之前的85%提升到93%左右;最后,我们使用这些技术的基础和铺垫,研发出一套基于模板的自动对齐算法:我们首先在模板图像上标注关键字(其实是为了标识关键位置),然后,在识别过程中,使用语义分割出对应的证件区域和其类型,然后识别后,再根据关键字在做类型的二次校验,然后,根据之前标注的此类模板的关键位置,进行对齐,通过各种调整、透射、仿射,最终,把图像的关键区域“扣”出来,完成关键字段的识别,取得了非常好的效果;我们还开发了一系列和业务相关的校验器,如身份证、车证编号、地址等,大大提高了识别后的纠错能力。</p>
<p>终于,在2021年,我们迎来了真正的项目机会,我们连续给业务部门提供了多个服务,包括,给车贷线的绿本12页识别,34页识别(12页和34页模式完全不同,需要不同的特殊的处理),我们还定制性的研发了车牌和二维码在一起的混合识别;我们研发的身份证、行驶本、驾照业务识别也同步上线;这些都在真实的业务场景下,每月为业务线提供了数万计的调用,有力的支撑了业务的发展。我们团队的同事,也得到了极大的成就感,成为全公司唯一的一条支撑OCR识别的内部AI团队。</p>
<p>到了下半年,风云突变,公司相关的业务线由于战略调整,逐渐开始裁撤,我们目测的业务量呈直线下降,而和我配合的产品总监Z,也由于个人原因离开团队,团队内部也出现了问题,其中的两位同事,分别在年中和年末离开了团队,加入了更有前途的外企和互联网大厂,虽然深深的祝福她们,但是,也是感觉到团队的没落和危机。</p>
<p>于是,2021年8月份开始,我尝试开发研发人脸识别系统。我首先把焦点聚焦在人脸识别上,通过大量的论文学习和阅读,我逐渐理解了,人脸识别才是人脸系统的核心。而人脸检测其实就是目标检测的一个应用而已。回到识别上,本质上,人脸识别就是人脸的比对,如何判断一张脸和另外一张脸就是同一张脸,而和另外一张脸不是同一张呢?这本质上,就是一个相似性、或者叫两张脸的距离问题,在使用backbone做了人脸的特征抽取后,然后使用各类衡量特征距离的方法,来衡量人脸的距离,最终,梳理了整个人脸比对的算法发展脉络后,我选定了arcface,一个把特征映射到到球面上,计算弧度距离的算法上。这次,我使用的是pytorch,借这个项目,我把pytorch认真学习了一遍,真心感觉keras就是抄的pytorch,pytorch的代码确实简洁很多,也很直白,下次做项目,我可能还会选择pytorch。为了实现arcface,我还开发了基于arcface的MNIST识别,降维到2维,可视化体验了arcface如何分开不同人脸的。最终,我train出了人脸比对,虽然正确率达不到生产要求,但是基本上已经实现了算法的诉求。接下来,我又着手人脸检测,这次要简单的多了,我选择了比较成熟的RetineFace,其实就是一个目标检测,使用FPN做特征抽取后,除了人脸的位置回归,还加入了人脸的关键点lanmark的loss,最终训练来了检测模型。</p>
<p>话说,已经到了11月底,我发现,即使我train出来人脸识别,也无法改变团队的命运了,一方面是缺乏产品端的支持,另一方面公司的人脸识别场景也不是特别明确,看来,我train出来的这个人脸模型,注定无法给业务带来支撑的机会了。于是,我决心,在最后的阶段,全力把经历转变到量化投资上吧,一个为自己的投资积累一些经验,另一个也算是再尝试一个可能跟公司业务相关的一个方向把。</p>
<p>从12月初开始,我开始学习量化投资,我了解到,量化投资适合我们做的,只有CTA和多因子这两个方向,CTA不是很难,而多因子则复杂很多,而且是机构常用的方法。于是,我还是选择了多因子方向。多因子模型是从fama-frech的三因子模型逐渐发展而来,于是,我又去研读了一遍投资学的教材,学习了从CAMP到多因子模型到FF三因子模型,最后找到了石川老师的《多因子实证》的书研读,发现,这个领域其实也是非常深。经过学习和探索,我逐渐形成了一套,基于tushare、alphalens、jads、backtrader的开发脚手架,分别覆盖数据源、单因子分析、多因子合成和回测的所有内容,完成后,我开始着手寻找别人实现的因子,以及准备开始复现各个金工研报的因子和策略,这些都在稳步的进行。我也尝试认识了量化投资圈的很多朋友,包括一些有经验的朋友,跟他们学习和请教,逐渐认识到这个领域的博大精深,以及对市场的敬畏。我还尝试联系了公司内部的量化部门,但是反馈是,确实没有什么机会了,好吧,最终,这个可能成为我将来个人的一个学习和研究方向吧。</p>
<p>目前,即将离开这个公司了,工作已经基本上告一段落了,回想四年的工作,还是收获满满,还是非常感谢当初部门的老大给我这个机会,可以让我在人工智能这个领域可以有四年的学习和实践。也经历了从白纸一张,到学习理解,到最终实践交付的整个过程,期间认识了非常优秀的同事们,带领他们一起为公司的业务发展也贡献了力量,也帮助她们收获了职业的发展,心里还是非常高兴和满足的。</p>
<p>天下没有不散的宴席,我自己也要开启一段新的旅程了,我还是持续关注人工智能发展,关注数学的应用,关注计算机行业的最新发展,关注量化投资、NLP等具体的领域,希望未来有机会再经历这样的有意义的四年。</p>
如何评价分类
2021-10-28T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2021/10/28/class-evaluation
<h1 id="上来先抛出一堆词炸死你">上来先抛出一堆词,炸死你</h1>
<ul>
<li>Recall</li>
<li>Precision</li>
<li>TPR</li>
<li>FPR</li>
<li>准确率 (Accuracy)</li>
<li>混淆矩阵 (Confusion Matrix)</li>
<li>精确率(Precision)</li>
<li>召回率(Recall)</li>
<li>平均正确率(AP)</li>
<li>mAP(mean Average Precision)</li>
<li>ROC</li>
<li>AUC</li>
</ul>
<p>好,都是评价分类效果的词,估计面试的时候,把这些顺序问一遍,就可以干掉90%的面试者。
大部分人估计对这些词都知道,也大概知道啥意思,但是你要是把这些细节都掰吃清楚、清清楚楚,
可不是那么容易。</p>
<p>我倒不是为了面试,主要是实际工作中,不对这些基础、细节概念了如指掌,我没法客观评价我的模型效果啊。
比如人脸识别的时候,为何用AP,而不是用AUC来做为评价标准。所以把这些概念和细节,搞的清清楚楚,就是必须的了。</p>
<p>接下来,我挨个用大白话捋捋这些概念。</p>
<h1 id="一堆概念来袭">一堆概念来袭</h1>
<p>其实,为了把握这一堆词,我们主要把握住几点核心,就可以把握住他们了:</p>
<ul>
<li>你关注负类么?
因为二分类的时候,你可能不是光关注正类,可能也非常关注负类,这样,就要“平等”对待它们。
但是对目标检测的情形,你更关心的正类,你是带着“偏见”的,体现在指标上,也是有区别的。</li>
</ul>
<h2 id="tpfpfntn">TP、FP、FN、TN</h2>
<ul>
<li>TP 你预测的正例里面,那些真的正例</li>
<li>FP 你预测的正例里面,那些假的正例(人家其实是真负例)</li>
<li>FN 你预测的负例里面,那些假的负例(人家其实是真正例)</li>
<li>TN 你预测的负例里面,那些真的负例</li>
</ul>
<h2 id="准确率---accuracy">准确率 - accuracy</h2>
<p>你全面关注“正类”和“负类”的预测“好不好”:</p>
<p>( 你预测对的正例+你预测对的负例 )/ 样本总数</p>
<p>$\begin{equation}\label{equ:accuracy} \mbox{accuracy} = \frac{TP+TN}{TP+TN+FP+FN} = \frac{TP+TN }{\mbox{all data}} \end{equation}$</p>
<h2 id="精确率---precision查准率">精确率 - precision(查准率)</h2>
<p>你重点盯着<strong>“正例”</strong>了,你看<strong>“标签GT”</strong>里的正例里,多少被你正确“发现”出来了:</p>
<p>$\begin{equation}\label{equ:precision} \mbox{precision} = \frac{TP}{TP+FP} = \frac{TP}{\mbox{预测为positive的样本}} \end{equation}$</p>
<h2 id="召回率---recall查全率">召回率 - recall(查全率)</h2>
<p>你还是重点盯着<strong>“正例”</strong>了,你看你自己<strong>“预测”</strong>的正例里,多少是真正正确的:</p>
<p>$\begin{equation}\label{equ:recall} \mbox{recall} = \frac{TP}{TP+FN} = \frac{TP}{\mbox{真实为positive的样本}} \end{equation}$</p>
<h2 id="f1值">F1值</h2>
<p>你还是重点盯着<strong>“正例”</strong>,你想平衡一下precision和recall,看看两人都好,才是真好!</p>
<p>为何?为何要两人真好才是真好?因为,我可以造假啊。</p>
<p>比如我为了把recall高,那我都预测成正例就好,肯定recall=100%了;同理,为了造假precision,我尽量都预测成负例,只有特别确信的才预测成正例,我能把precision做到很高。
所以为了平衡他俩,就调和出F1:
$
\begin{equation}\label{equ:f1} F_1 = \frac{2}{\frac{1}{\mbox{precision}}+\frac{1}{\mbox{recall}}} = \frac{2 \cdot \mbox{precision} \cdot \mbox{recall}}{\mbox{precision}+\mbox{recall}} \end{equation}
$</p>
<h2 id="roc曲线">ROC曲线</h2>
<p>二分类的时候,你是通过一个置信度阈值,来一刀切出正例和负例的,这个置信值选择不好,对最终结果影响还是很大的。
一般大家都选0.5,但是你可能选0.4,正例、负例分的更好,所以,光一刀切成0.5,对评价一个分类器好不好不公平啊,</p>
<p>咋办?用ROC曲线!</p>
<p>既然不能光看0.5,甚至0.4,那我就把0.1,0.2,…,0.9,都看一遍吧,
然后,我还不能光看正例的,我还得看负例的,两边都要平衡着看,
所以横坐标就是负类的召回率(不过用的是1-负类召回率),纵坐标用的是正类的召回率,
这样,每个阈值(0.1,0.2,…,0.9)都会对应出一个正类recall和一个(1-负类recall),形成一个坐标点,
这些点挨个画出来,就形成一个曲线,这个曲线就是ROC。</p>
<p><img src="/images/20211028/1635388674348.jpg" alt="" class="myimg50" /></p>
<ul>
<li><strong>纵坐标True Positive Rate(TPR)</strong>,其实就是正类的召回率:$recall_+$。</li>
</ul>
\[\begin{equation}\label{equ:tpr}
\begin{split}
\mbox{TPR} &= \frac{TP}{TP + FN} \\
&= \mbox{recall$_{positive}$}
\end{split}
\end{equation}\]
<ul>
<li><strong>横坐标False Positive Rate(FPR)</strong>,其实就是1-负类的召回率:1-$recall_{-}$。</li>
</ul>
\[\begin{equation}\label{equ:fpr}
\begin{split}
\mbox{FPR} &= \frac{FP}{FP + TN} = \frac{FP + TN -TN}{FP + TN} \\
&= 1 - \frac{TN}{FP + TN} \\
&= 1 - \mbox{recall$_{negative}$}
\end{split}
\end{equation}\]
<h2 id="auc">AUC</h2>
<p>有了上面的ROC,就很容易理解AUC,AUC就是area under curve,这个curve就是ROC曲线,即ROC曲线下的面积。</p>
<p>这个面积越大,分类效果越好。</p>
<p>至于为什么是面积,其实我也没想清楚,好吧,暂时先放过这个问题,记住结论就好。</p>
<h2 id="混淆矩阵">混淆矩阵</h2>
<p>有时候,需要很直观的看出,正例、负例、真正正例里分成负例的、真正负例里分成正例的,等等,这些细节信息,这个时候,就需要混合矩阵。</p>
<p>二分类的混淆矩阵比较直观:</p>
<p><img src="/images/20211031/1635644755598.jpg" alt="" class="myimg50" /></p>
<p>其中,</p>
<ul>
<li>TP 你预测的正例里面,那些真的正例</li>
<li>FP 你预测的正例里面,那些假的正例(人家其实是真负例)</li>
<li>FN 你预测的负例里面,那些假的负例(人家其实是真正例)</li>
<li>TN 你预测的负例里面,那些真的负例</li>
</ul>
<p>哈,一目了然了,对不?</p>
<p>那,多分类有没有混淆矩阵?如果有的,长什么样?</p>
<p><img src="/images/20211031/1635644904051.jpg" alt="" class="myimg50" /></p>
<p>对比一下二分类的,我们可以看出区别在于,就是在于扩行,扩列了,只有对角线是真正的TP。</p>
<p>TP这里的含义没变,就是“标注为正例实际上也是正例”,这里,只要没分对,就是负例,比如猫那行,10个猫被分对了,1只被错误分成了狗,2只被错误分成了猪)。</p>
<p>所以,多分类的精确率和召回率的计算也稍微变一下,以上图中的猫为例子:</p>
<ul>
<li>精确率precision = 10/(10+1+2)</li>
<li>召回率recall = 10/(10+3+5)</li>
</ul>
<p>F1根据精确率和召回率可以算出,不赘述了。</p>
<h2 id="pr曲线">PR曲线</h2>
<p>PR曲线很容易和ROC曲线,她们长的很像,也有类似的功效,但是他们确实不同的。</p>
<p>PR曲线的坐标不在是TPR和FPR了,而是改成了精确率precision和召回率recall。</p>
<p><img src="/images/20211031/1635646311506.jpg" alt="" class="myimg" /></p>
<p>看到了吧,另外,她们俩的鼓起的方向也不同,PR是朝右上鼓,AUC是朝左上鼓起。</p>
<p>这里说个细节,就是你一般算precsion、recall的时候,不就是算出一个值么?举例,我分出来TP、FP、TN、FN后,算一下,就算出一个precsion、recall了么,这才2个值啊。可是这个PR曲线上一堆的点,也就是一堆的(precsion、recall)对么?那么多点咋来的?</p>
<p>这个就是要说一下背后的阈值了,它藏在后面,上面说你得到TP、FP、TN、FN,你咋得到的,你不就是用0.5的阈值,去卡了一下分类器的结果么?比如预测出来是0.67,你用阈值0.5,所以丫是个正类,但是,你如果用0.7当阈值,丫还变成负例了呢!PR曲线,就是这么变态,丫从0到1,中间间隔的值,都当做阈值去算TP、FP、TN、FN了。当然,中间有无数个点,你肯定得采样,一般用100个,或者变态点的,用1000个。如此这般,就得到了100个或1000个(precsion、recall)值对,恩,就可以画PR曲线了。</p>
<h2 id="ap">AP</h2>
<p>如同AUC和ROC的关系一样,AP就是PR曲线的AUC,PR曲线下的面积,就是AP - Average Precision,同样,为何是面积,这点,还是没理解,恩,先死记硬背吧。</p>
<p>自然,有个问题肯定从跟你脑里冒出,我觉得AUC挺好的,就能区别分类的好坏了,为何要攒一个AP出来干嘛?!</p>
<p>好问题,AP这个指标主要用在目标检测里,目标检测是检测个毛呢?他主要关心的是被检测的目标、是那个前景、是那个正例,他对负例其实不太关心,所以,他更关心是针对正例的指标,对正例的评价里,召回率和精确率(precsion、recall),她们俩的分子,都是TP,都是关心的真正例,所以,召回率和精确率(precsion、recall)成为这个新的坐标,就可以理解了。</p>
<h2 id="m-ap">m-AP</h2>
<p>如果,只有1种正例,比如人脸,用AP也就够了,或者说用一个AP就够了。可是,目标检测里,可能有一堆的目标啊,比如同时让我检出猫、狗、猪,这个时候,我可以算出每个分类的召回率和精确率(precsion、recall),我肯定有多个AP啊,这个时候,你就需要见他们平均一下,也就是mAP。</p>
<p>就是个算数平均,很粗暴,好吧,这样得到mAP,再用它去评价你这个检测器的好坏了。</p>
<h2 id="总结一下">总结一下</h2>
<p>这些概念众多,不过,其实就几个维度,记住了,你就不会晕了:</p>
<ul>
<li>2分类,还是多分类:2分类好理解recall、precision、F1</li>
<li>2分类评价再进一步,高出2分类混淆矩阵、ROC曲线、AUC面积</li>
<li>多分类,那就把这些概念扩展起来,绕个弯,也很容易搞定</li>
<li>只关心正例,那就引出PR曲线和AP面积、多分类mAP了</li>
</ul>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://www.cnblogs.com/wuliytTaotao/p/9285227.html">混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值</a></li>
<li><a href="https://medium.com/nlp-tsupei/roc-pr-%E6%9B%B2%E7%B7%9A-f3faa2231b8c">深入介紹及比較ROC曲線及PR曲線</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/33273532">分类、目标检测中的评价指标</a></li>
</ul>
gitbook折腾记
2021-10-15T00:00:00+08:00
https://www.piginzoo.com/tech/2021/10/15/gitbook
<h1 id="缘起">缘起</h1>
<p>因为要写一个关于量化金融的电子书,考察一番用了gitbook,确实不错,markdown的语法,爽歪歪。</p>
<p>写完了,在本地也可以预览,可是,如何发布到互联网上去呢?</p>
<p>于是,研究一番,发现最简单的方法是利用gitbook.com的host服务,经过一番周折,搞定了,但是,
gitbook的服务,尤其是手机端,三天两头的抽风,极其不稳定,经过一番纠结,果断放弃,因此,
才引出在自己服务器上折腾的过程。</p>
<p>记录下来,防止遗忘。</p>
<h1 id="gitbook宿主机">Gitbook宿主机</h1>
<p>其实,在gitbook上直接把电子书发不出来,还是很方便的,这里不赘述了,可以参考<a href="https://juejin.cn/post/6927532688874143757">GitBook 进阶篇之搭建博客</a>,<a href="https://segmentfault.com/a/1190000017960359">gitbook使用教程</a>,<a href="https://chrisniael.gitbooks.io/gitbook-documentation/content/">GitBook文档中文版</a>等文章,或者搜索“如何使用gitbook服务器搭建”,就可以搜到一堆教程。</p>
<p>这里大概简明扼要的梳理一下流程:</p>
<ul>
<li>在<a href="https://app.gitbook.com/">gitbook.com</a>上申请个账户</li>
<li>在github上创建一个git repo</li>
<li>在gitbook网站上,建立和github的repo的link</li>
<li>申请一个个性化域名,如同我的<a href="http://finbook.piginzoo.com">finbook.piginzoo.com</a></li>
</ul>
<p>其实,挺好的一个事,被gitbooks整的体验很不爽,手机端经常就crash了,十分之不稳定。</p>
<p>怒了,把gitbook迁移到我的服务器上去!</p>
<h1 id="架设我的gitbook">架设我的gitbook</h1>
<p>我大概的思路是:</p>
<ul>
<li>先把github上的gitbook电子书markdown的源码,clone到我的服务器上</li>
<li>安装gitbook服务在我的服务器上,让其产生html</li>
<li>在nginx上增加一个二级域名,指向到这个生成html静态页面上</li>
</ul>
<p>差不多一会儿就应该能搞定吧,我想……,结果告诉我,我低谷了各种坑,是在是坑。</p>
<h2 id="安装环境">安装环境</h2>
<p>来,先在服务器上安装环境吧。</p>
<p>其实,为了在本地书写和预览gitbook,之前在自己笔记本上装过gitbook,折腾过一圈,遇到过各种坑,不过都没记录下来,所以,这次又把所有的坑趟了一遍,唉。
真是应了那句话,好脑筋不如烂笔头啊。</p>
<pre><code># 安装gitbook
npm install gitbook-cli -g
# 装2个插件
npm install -g mathjax@2.7.7
npm install -g intopic-toc
# clone gitbook的文章源码到服务器后,这个必须是在当前源码文件夹下运行,因为有book.json的配置
# 这步最费劲,mathjax-pro插件安装巨慢
gitbook install
</code></pre>
<p>大致步骤就是这些,<strong>如果顺利的话</strong>!,可惜,一路上各种坑,都很无聊的坑。</p>
<p>我先说我遇到的问题把:</p>
<ul>
<li>node的版本过低,我的centos老服务器啊,还是centos7呢</li>
<li>npm当然也老了</li>
<li>mathjax死活装不上</li>
</ul>
<p>我升级node、npm都以失败告终,真TMD烦折腾环境,简直是对自己的耐心地极大考验,我不停的对自己说,忍,忍,忍。</p>
<p><strong>坑1:</strong></p>
<p>一直不想再搞个nvm,类似于rvm、virtualenv之类的给自己添麻烦,但是,事实告诉我,还是真香原理,早装早享受,
在折腾到彻底崩溃后,我还是接受了先装个nvm,来管理多个node了。鉴于我的centos太老,我最终装了10.x。
之后的高版本都报错,我逐一实验到了10.x才ok。</p>
<p><strong>坑2:</strong></p>
<p>必须手工装一个gitbook-plugin-mathjax,你指望用gitbook install直接可以把mathjax插件装好,做梦吧,不停的报一个错:</p>
<pre><code>info: install plugin "mathjax-pro" (*) from NPM with version 0.0.6
fetchMetadata → 304
/root/.gitbook/versions/3.2.3/node_modules/npm/node_modules/aproba/index.js:25
if (args[ii] == null) throw missingRequiredArg(ii)
^
Error: Missing required argument #1
at andLogAndFinish (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:31:3)
at fetchPackageMetadata (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:51:22)
at resolveWithNewModule (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/install/deps.js:490:12)
at /root/.gitbook/versions/3.2.3/node_modules/npm/lib/install/deps.js:491:7
at /root/.gitbook/versions/3.2.3/node_modules/npm/node_modules/iferr/index.js:13:50
at /root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:37:12
at addRequestedAndFinish (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:67:5)
at returnAndAddMetadata (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:121:7)
at pickVersionFromRegistryDocument (/root/.gitbook/versions/3.2.3/node_modules/npm/lib/fetch-package-metadata.js:138:20)
at /root/.gitbook/versions/3.2.3/node_modules/npm/node_modules/iferr/index.js:13:50
</code></pre>
<p>好吧,我把最终的步骤整理出来,以备以后再折腾用:</p>
<pre><code># 先装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
# 切成v10.24.1,必须是10.x,再高报错
nvm install v10.24.1
nvm alias default v10.24.1
# 安装gitbook
npm install gitbook-cli -g
# 安装mathjax
npm install -g mathjax@2.7.6
# 安装mathjax plugin,这步最重要!!!,之前gitbook install一直失败
npm install gitbook-plugin-mathjax
# 最终更新gitbook
gitbook install ./
</code></pre>
<p>至此,终于在服务器上,我终于可以生成我的电子书了,即生成了从markdown到html的转化。</p>
<p>于是,我兴冲冲的搞了一个二级域名,绑定到我的nginx中,指向到gitbook生成的目录作为webroot。</p>
<p>一切貌似完美,直到我用浏览器打开页面,发现,mathjax的公式,全部都不显示。</p>
<h3 id="mathjax坑死我">mathjax坑死我</h3>
<p>打开浏览,发现报错,是在去cloudflash请求mathjax.js的时候,报错:</p>
<pre><code>https://cdnjs.cloudflare.com/ajax/libs/mathjax/ cdnjs.cloudflare CORS policy:
The request client is not a secure context and the resource is in more-private address space `local`.
</code></pre>
<p>跨域问题啊,好把,于是一通谷歌后,一堆的推荐出来,都是让修改nginx,修改header,加入允许跨域调用的http header 支持:</p>
<pre><code>add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With,Origin,Content-Type;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,;
add_header Access-Control-Allow-Credentials true;
</code></pre>
<p>通过加入这一堆的支持,我确实在浏览器返回的请求的header里看到这些对跨域的支持,可是!依然报错,无论我各种微调,都是报错!报错!报错!错误都不变,永远是上面那个问题。
在我彻底绝望了之后,我再去观察错误提示,他提到“cdnjs.cloudflare CORS policy”,“ secure context”,我突然想到,是不是因为我的网站是http的,而不是https的,导致的呢?</p>
<p>好吧,那我去升级我的网站,去给他安装个证书吧,之前因为没有这个需求,我没有干过这事,虽然我也知道用acme服务就可以申请免费的证书,但是那个是翻墙的那个域名才有这个需要,
我的博客站一直没有这个需求,就一直懒得折腾,现在,不得不折腾一下这事了。烦!</p>
<h2 id="域名证书">域名证书</h2>
<p>于是,开始给我的piginzoo.com申请证书了。</p>
<p>尽管我已经忘了如何申请acme的免费证书了,好在网上一堆的教程,类似于<a href="https://wsgzao.github.io/post/acme/">这个</a>,照着弄就好。</p>
<p>细节就不写了,照着这些教程搞就可以,我只说我遇到的一些坑:</p>
<p>1、现在需要注册你的账号了</p>
<p><code>acme.sh --register-account -m xxx@xxx.com</code></p>
<p>为何呢?据说是因为acme现在用的是ZeroSSL的根证书,而不是CA的了,ZeroSSL需要注册机制。
这么注册一下,会生成ID,写在环境变量ACCOUNT_THUMBPRINT中,有了这个,再去acme中申请证书就ok了。</p>
<p>2、使用nginx方式注册,注册多个域名</p>
<pre><code>acme.sh --issue -d piginzoo.com -d book.piginzoo.com -d book.piginzoo.com \
--nginx -k ec-256 --force --debug
</code></pre>
<p>注册时候,可以告诉acme你的nginx的webroot,他会自动放一个验证文件,或者,你直接让他自己检测你的nginx服务(–nginx参数),
我用的是后者,更省事,–force参数是强制再生成一遍,–debug可以看到更多信息,建议使用。</p>
<p>这个命令,一定要求你的nginx是正常工作的,其实,就是让他来你服务器上验证一下你的服务器是活着的,ok的,就是这个目的。</p>
<p>而我这次是要申请多个域名,一个细节就是,–nginx方式,不支持 -d “*.piginzoo.com”,这种写法,只有–dns方式支持,
但是那个方式网上说又不支持自动更新(通过cron自动更新),所以,我只好一个一个域名的敲出来。</p>
<p>而且,第一个域名必须是真正的一级域名,这个细节网上也有人提及。</p>
<p>3、注册后,多域名下,还得注意一下nginx的配置</p>
<p>nginx里面要是有多个ssl服务,大家都共享一个443端口,但是不同的域名设置不同的证书的话,有一个小约定:</p>
<p>只有主域名,也就是最重要那个,可以配置成<strong>default ssl</strong></p>
<pre><code> server_name www.piginzoo.com piginzoo.com;
listen 443 default ssl;
ssl_certificate /...../piginzoo.com.cer;
ssl_certificate_key /....../piginzoo.com.key;
</code></pre>
<p>而其他的二级域名,只需要写一个443即可,否则的话,会报443端口起来两次,导致冲突。</p>
<pre><code> listen 443;
server_name book.piginzoo.com;
</code></pre>
<h2 id="跑起来了">跑起来了</h2>
<p>终于,配置好我的证书后,再去请求cloudflare上的mathjax.js资源,就没有跨域问题了,我之前的猜想得到了验证。
这里顺道吐槽一下cloudflare,你这么严格为了啥?!</p>
<p>当然,还有一些小细节、小工作需要做:</p>
<ul>
<li>gitbook使用的是标准的markdown,不支持个性css的类,所以不支持:{class=’xxx’}的写法,图像image的css无法定制了</li>
<li>
<p>配置好cron,去更新证书,拉代码</p>
<p><strong>crontab:</strong></p>
<pre><code> # 博客更新代码
*/1 * * * * git --git-dir=/home/blog/.git --work-tree=/home/blog pull > /dev/null
*/1 * * * * git --git-dir=/home/finbook/.git --work-tree=/home/finbook pull > /dev/null
# renew证书
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
30 0 * * * /root/.acme.sh/acme.sh --installcert -d www.piginzoo.com -d book.piginzoo.com --fullchainpath /.../piginzoo.com.cer --keypath /.../piginzoo.com.key --reloadCmd '/usr/sbin/nginx -s reload' --ecc > /dev/null
</code></pre>
</li>
</ul>
<p>终于,可以在网上看到我的电子书了:<a href="http://book.piginzoo.com/investment/investment.html">《投资学》</a>,赞~</p>
<h1 id="尾声">尾声</h1>
<p>总结一下,我的体会是:</p>
<ul>
<li>gitbook的服务十分之不靠谱,确实应该舍其而去</li>
<li>nvm真香,以后,不要嫌麻烦,多用多环境管理的软件</li>
<li>mathjax很讨厌,不维护了据说,所以才搞了mathjax-pro,总之,很讨厌</li>
<li>cloudflash很讨厌,为何只接受https的请求</li>
</ul>
人脸识别
2021-09-15T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2021/09/15/face-recognition
<h1 id="概述">概述</h1>
<p>这篇<a href="https://arxiv.org/abs/2009.13290">综述</a>讲的很好,<a href="https://zhuanlan.zhihu.com/p/339594431">知乎</a>上有一个对这个摘要的介绍。里面的几个时间线的图很清晰说明了人脸的重要几方面的演变和进步:</p>
<p>这个是人脸特征抽取的发展历程:</p>
<p><img src="/images/20210916/1631779070313.jpg" alt="" class="myimg100" /></p>
<p>除了特征抽取,人脸还有很多其他方面,比如人脸检测、人脸对齐(人脸预处理)等。</p>
<p>我们在换个角度,我们来理解人脸的业务场景,可能更好理解:</p>
<pre><code>1、人脸比对:我有张人脸,你那拿来一个人脸,问我这俩人脸是不是一个人
2、人脸检索:我拿来一张来,你去人脸库里,去帮我把这个人脸给检索出来
3、人脸关键点检测:把人脸的关键点(眼睛、鼻子、嘴巴等)给我标注出来
</code></pre>
<p>人脸比对,关键点是如何把人脸的特征有效的表达出来,另外用什么距离函数,可以算出两个脸是不是同一个人的脸。</p>
<p>人脸检索,核心点就是建立一个向量库,把人脸特征抽取后的,可能是个128维、也可能是512维的向量,存入到一个数据库中,
然后这个数据库还应该有个高效的索引方法,可以高效地计算出相似度的top10之类的。</p>
<p>人脸关键点检测,更像是一个目标检测,直接找到一个点,来确定这个点就是对应的嘴角啊、眼睛啥的。</p>
<p>我们业务上,最关心的是人脸比对,我们这篇文章也主要关注这点,人脸检索、关键点检测,我们就不深入研究了。</p>
<p>啰嗦几句,</p>
<p>我开始接触人脸识别的时候,脑子里就有一些问题,后来才一一解决:</p>
<p>人脸对比,经过一个神经网络,得到一个向量,然后呢?怎么训练呢?人脸数据的label是啥样?</p>
<p>后来,研究了一圈后,大概就明白了,这里直接讲出来,让跟我有同样困惑的同学快速理解:</p>
<p>人脸识别,本质上是要得到一张人脸的特征,这个特征是通过一个网络train出来,怎么train,
实际上大家都用的是常用的backbone,比如resnet,核心是后面接上一个loss,这个loss很关键。
这个loss是2部分组成:一个就是分类的交叉熵,让每个人的脸都尽量分开;二一个,是一个聚类损失,让每个人的特征尽量分开。</p>
<p>啊,你可能问,人脸怎么分类?每个人一类?对!答对了。就是这么变态。但是世界上有70亿+人呢?怎么办?不可能拿所有人的脸来训练啊?</p>
<p>不不不!</p>
<p>我们目的不是分出世界上每个人,而是要train出一个网络,有效的表达一个人脸的向量表达。
啥意思?就是一个人脸如果被有效表达出来之后,在用这个表达向量去做相似度,按照一个阈值,就可以算出是不是一个人了。
一般的数据集都提供上万个人,用这1万个人,train出这个网络来就达到目的了。
所以,每个数据集不同,网络的分类数也就会不同。</p>
<p>而,让不同人的特征尽量距离分开,类似于聚类分开,这个事这里就详细赘述了,后面会专业讨论。</p>
<p>有了上述的描述,你应该对人脸识别有了快速的理解了,我开始困惑的事儿就这点事,搞清楚,剩下的就是细节了。</p>
<p>这篇文章里,我不太想按照一般的人脸识别文章去写,那些基础知识没必要在赘述,无数文章都说的很清楚了。
我只想把我的困惑和我的理解过程,我的深入思考,写出来。</p>
<h1 id="人脸检测">人脸检测</h1>
<p>人脸检测,其实可以采用任何的目标检测网络,比如mask-rcnn、yolo等,这里,我们把目光投向人脸这个领域,
比较有名的有<a href="https://arxiv.org/abs/1604.02878">MTCNN</a>,<a href="https://arxiv.org/abs/1905.00641">RetinaFace</a>等。</p>
<p>大家公认的不错的是<a href="https://arxiv.org/abs/1905.00641">RetinaFace</a>,它是2019.5时候提出的。
我们其实也没有去考察太多的其他的检测模型,只是深入研究后,使用它作为我们人脸检测的主力模型。</p>
<h2 id="retinaface">RetinaFace</h2>
<p>这几篇参考不错:<a href="https://zhuanlan.zhihu.com/p/379730820">1</a>,<a href="https://www.jianshu.com/p/d4534ac94a65">2</a>,<a href="https://zhuanlan.zhihu.com/p/103005911">论文翻译</a>,<a href="https://www.cxyzjd.com/article/mcyJacky/109012671">代码解析</a></p>
<p>先整体说一下:</p>
<ul>
<li>用了FPN来抽取特征</li>
<li>同时用5点landmark对齐人脸</li>
</ul>
<h3 id="损失函数">损失函数</h3>
<p><img src="/images/20211019/1634624390539.jpg" alt="" class="myimg100" /></p>
\[\begin{aligned}
L &=L_{c l s}\left(p_{i}, p_{i}^{*}\right)+\lambda_{1} p_{i}^{*} L_{b o x}\left(t_{i}, t_{i}^{*}\right) \\
&+\lambda_{2} p_{i}^{*} L_{p t s}\left(l_{i}, l_{i}^{*}\right)+\lambda_{3} p_{i}^{*} L_{p i x e l}
\end{aligned}\]
<p>最后一项是点云的,我们用不到,也没做深入研究,只说说前3项:</p>
<ul>
<li>$L_{cls}$:是否是人脸的分类损失函数,2分类,交叉熵</li>
<li>$L_{box}$:${t_x,t_y,t_w,t_h}人脸框的坐标的均方误差$</li>
<li>$L_{pts}$:5个对齐用的lardmark点的均方误差</li>
</ul>
<p>另外,$\lambda_1,\lambda_2,\lambda_3$的值,论文建议的是0.25,0.1,0.01,因为我们不太关心点云的预测,所以我们把$\lambda_3$设成0。</p>
<h3 id="模型细节">模型细节</h3>
<p><img src="/images/20211019/1634628255277.jpg" alt="" class="myimg100" /></p>
<p>1、实现一个FPN</p>
<p>用backbone抽出5层来,通道channel都是256,但是尺寸不同,分别是:</p>
<p>输入是[640,640],5层分别是:</p>
<ul>
<li>[10,10,256],1/64</li>
<li>[20,20,256],1/32</li>
<li>[40,40,256],1/16</li>
<li>[80,80,256],1/8</li>
<li>[160,160,256],1/4</li>
</ul>
<p>不过,我看到<a href="https://github.com/piginzoo/Pytorch_Retinaface/blob/master/models/retinaface.py">代码</a>中,往往不用那么多层,只用3层就够了,</p>
<ul>
<li>[20,20,256],1/32</li>
<li>[40,40,256],1/16</li>
<li>[80,80,256],1/8</li>
</ul>
<p>代码:</p>
<pre><code> fpn = self.fpn(out)
feature1 = self.ssh1(fpn[0]) # M:[H/8,W/8,64], R[H/8,W/8,256]
feature2 = self.ssh2(fpn[1]) # M:[H/16,W/16,64],R[H/16,W/16,256]
feature3 = self.ssh3(fpn[2]) # M:[H/32,W/32,64],R[H/32,W/32,256]
</code></pre>
<p>2、Context Module</p>
<p><img src="/images/20211019/1634635271612.jpg" alt="" class="myimg100" /></p>
<p>从FPN过来的5个张量(<a href="https://github.com/piginzoo/Pytorch_Retinaface/blob/master/models/retinaface.py">代码</a>中实现的是3个张量),
经过这个</p>
<blockquote>
<p>we also replace all 3 × 3 convolution layers within the lateral connections and context modules by the deformable convolution network (DCN) [9, 74], which fur- ther strengthens the non-rigid context modelling capacity.</p>
</blockquote>
<p>貌似,我fork的代码,也没有是实现<a href="https://zhuanlan.zhihu.com/p/52476083">变形卷积deformable convolution</a>。</p>
<p>这里多说一下变形卷积,其实是学一个2个核,举个例子吧,我有个3x3的卷积核,除了学习这个3x3的卷积核外,还要学习一个3x3x2的偏移量的参数,最后的2含义是学习偏移offset的x和y值。学习出来后,用这个x、y,先算出3x3里每个点应该偏移的位置(如果出现小数,就用双线性差值来算原图上的像素的值),现在你的卷积核(9个)有,变形到原图上的位置的像素值(9个)有(小数位置已经差值了),然后就对应位置做卷积即可。</p>
<h2 id="fddb">FDDB</h2>
<p>FDDB(缩写Face Detection Data Set and Benchmark),是一个比较有名的针对人脸识别算法的评测方法与标准。
一共包含了2845张图片,包含彩色以及灰度图,其中的人脸总数达到5171个。包含遮挡、大角度、低分辨率、模糊,使用<strong>椭圆</strong>标注人脸,灰度和彩色都有。</p>
<p>参考:<a href="https://yinguobing.com/fddb/">1</a>、<a href="https://vic-w.github.io/2018/10/20/FDDB/">2</a>两篇写的很好,可供参考!</p>
<p><strong>椭圆标注:</strong></p>
<p><img src="/images/20211021/1634784205219.jpg" alt="" class="myimg100" /></p>
<p>人脸就可以用5个变量来表征:</p>
<ul>
<li>ra:椭圆长轴半径</li>
<li>rb:椭圆短轴半径</li>
<li>theta:椭圆长轴偏转角度</li>
<li>cx:椭圆圆心x坐标</li>
<li>cy:椭圆圆心y坐标</li>
</ul>
<p><strong>交并比:</strong></p>
<p>FDDB使用<strong>交并比</strong>来表示标注框和检测框的匹配程度:交并比 = 两个框的重叠面积 / 两个框的联合面积</p>
<p>检测框和标注框对应问题,等效于一个二分图(bipartite graph)的最大匹配(maximum matching),使用匈牙利算法(Hungarian algorithm)求解。
就是找到检测框和标注框的最优匹配。</p>
<p><img src="/images/20211021/1634784242673.jpg" alt="" class="myimg" /></p>
<h2 id="常见的人脸检测算法">常见的人脸检测算法</h2>
<ul>
<li>Ultra-Light-Fast-Generic-Face-Detector-1MB,参量数:1.04~1.1MB,<a href="https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB">代码</a></li>
<li>LFFD:A Light and Fast Face Detector for Edge Devices,参数量:6.1 M,一筐款通吃大小目标、支持各种设备的人脸检测器,<a href="https://arxiv.org/abs/1904.10633">论文</a>,<a href="https://github.com/YonghaoHe/A-Light-and-Fast-Face-Detector-for-Edge-Devices">代码</a>。</li>
<li>libfacedetection,参数量:3.34M,一个用于在图像中进行人脸检测的开源库。人脸检测速度可以达到1000FPS。<a href="https://github.com/ShiqiYu/libfacedetection">代码</a></li>
<li>CenterFace,参数量:7.3MB,改进版仅为2.3M,CenterFace是一种用于边缘设备的实用的无锚人脸检测和对齐算法。<a href="https://github.com/Star-Clouds/CenterFace">代码</a></li>
<li>DBFace,参数量:7.03MB,DBFace是一个Anchor Free的网络结构。<a href="https://github.com/dlunion/DBFace">代码</a></li>
<li>BlazeFace,一款专为移动GPU推理量身定制的轻量级且性能卓越的人脸检测器。<a href="https://arxiv.org/pdf/1907.05047v1.pdf">论文</a>,<a href="https://github.com/google/mediapipe">代码</a></li>
<li>RetinaFace,参数量:1.68M,<a href="https://github.com/deepinsight/insightface/">代码</a></li>
<li>MTCNN,<a href="https://arxiv.org/abs/1604.02878">论文</a>,<a href="https://github.com/kpzhang93/MTCNN_face_detection_alignment">代码</a></li>
<li>SSDFace,<a href="https://arxiv.org/abs/1902.04042">论文</a></li>
<li>facebox,<a href="https://arxiv.org/abs/1708.05234">论文</a></li>
<li>yoloface,讲yolo检测应用于人脸,<a href="https://github.com/sthanhng/yoloface">代码</a></li>
</ul>
<h2 id="参考">参考</h2>
<p><a href="http://tljsjyy.xml-journal.net/article/id/643e9195-508b-4ff7-8225-33dd48bbd01f?viewType=HTML">1</a>,
<a href="https://zhuanlan.zhihu.com/p/379730820">2</a>,
<a href="https://www.jianshu.com/p/d4534ac94a65">3</a>,
<a href="https://blog.csdn.net/nihate/article/details/108798831">4</a>,
<a href="https://github.com/hpc203/10kinds-light-face-detector-align-recognition">5</a></p>
<h1 id="人脸特征抽取">人脸特征抽取</h1>
<p>人脸特征抽取非常非常关键,可以说是人脸识别这个大领域里最核心的环节。</p>
<p>前面其实已经提到了,就是用一个经典的backbone(如resnet)来抽取人脸特征,如果直接用交叉熵,
去训练数据集中的1万个人(比如Webface中提供11000个人的照片),从而得到一个网络,用来抽取未来别的人的特征,这个思路没啥问题。</p>
<p>但是,问题是,你能train出来么?</p>
<p>假设你能train出来?</p>
<p>那,我现在拿一个训练集之外的一个人脸,经过这个网络计算后,得到的这个新人的人脸表示向量,可能和1万个人的人脸表示距离很近,
然后我再拿一堆的训练集之外的新人的脸,他们是不是能和训练集中的1万个人分开,他们之间是不是能分开?不一定吧。
如果不能分开,你怎么做后续的人脸比对呢。</p>
<p>所以,这就要求,每个人的人脸表示,都要尽量的分开。在训练集中的1万个人的人脸如果能尽量分开,把这个作为一种损失函数去逼迫
网络尽量分开人脸表示,这个网络学会了,“尽量分开”的能力,那么再来新脸,也会尽量分开了。</p>
<p>这就引出一系列,帮助把一个人的人脸表示和别的人的人脸表示分开的loss函数。</p>
<p>来,再祭出这张图,也就是这些年,前赴后继大神们的为了分开人脸表示做出的努力:</p>
<p><img src="/images/20210916/1631779070313.jpg" alt="" class="myimg100" /></p>
<p>我们说他们发展的这个脉络吧:</p>
<ul>
<li>centerloss</li>
<li>tripleloss</li>
<li>A-softmax(SphereFace)</li>
<li>L-softmax</li>
<li>CosFace</li>
<li>AM-softmax</li>
<li>ArcFace</li>
</ul>
<p>我勒个去,这么多啊,对滴。这里,强力安利一下<a href="https://www.zhihu.com/column/FaceRec">Mengcius的人脸识别合集</a>,
讲的实在是太好了,我就是跟着他的系列文章学习下来的。另外还有,YaqiYU的人脸的loss(<a href="https://zhuanlan.zhihu.com/p/34404607">上</a>,<a href="https://zhuanlan.zhihu.com/p/34436551">下</a>),讲的也很不错。</p>
<p>别急,我们挨个说:</p>
<h2 id="softmax">softmax</h2>
<p>哎~,你怎么把softmax先贴上来了。</p>
<p>对!分开人脸,首先就得用softmax,用交叉熵,可是,光用softmax是分不开那么多人的啊,所以,上来,我们先说说softmax的问题。</p>
<p>下面的这些softmax的不足,都参考自<a href="https://zhuanlan.zhihu.com/p/51324547">人脸识别损失函数综述</a>。</p>
<p>$L=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} x_{i}+b_{j}}}$</p>
<pre><code>softmax训练的时候收敛得很快,但是精确度一般达到0.9左右就不会再上升了
softmax不能像metric learning一样显式的优化类间和类内距离,所以性能不会特别好
Metric Learning的概念,它是根据不同的任务来自主学习出针对某个特定任务的度量距离函数。通过计算两张图片之间的相似度,使得输入图片被归入到相似度大的图片类别中去。通常的目标是使同类样本之间的距离尽可能缩小,不同类样本之间的距离尽可能放大
softmax不具备metric learning的特性,没法压缩同一类别
center loss用于压缩同一类别,为每一个类别提供一个类别中心,最小化每个样本与该中心的距离
</code></pre>
<p>解释一下,就是softmax虽然可以把类别分开,但是,没法衡量不同类别之间距离,这样就会导致再来一个我训练集之外的人脸,
可能会被划到一个我已有的训练集中的人脸类别中,这个是问题所在。</p>
<p>那想办法吧,</p>
<h2 id="centerloss"><a href="https://ydwen.github.io/papers/WenECCV16.pdf">Centerloss</a></h2>
<p>centerloss特朴素,特像聚类。既然你分不开,那,我们就让每个人脸的类别尽量“聚集”,方法就是让每个类别都和它的中心尽量“近”!</p>
<p>这个就避免了softmax的不具备metric learning的特点啦!</p>
<p>新的损失函数:</p>
<p>$L=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} x_{i}+b_{j}}}+\frac{\lambda}{2} \sum_{i=1}^{N}\left|x_{i}-c_{y i}\right|^{2}$</p>
<p>的后半部分,</p>
<p>$\frac{\lambda}{2} \sum_{i=1}^{N}\left|x_{i}-c_{y i}\right|^{2}$</p>
<p>就是这个centerloss的核心!</p>
<p>$c_{yi}$,是要动态算的,你每次train一个新的人脸,就要用它去修正原有的这个类别的$c_{yi}$,这个细节很重要。</p>
<p>不停的训练,让新来的训练样本,尽量靠近这个中心,这个中心也在不断修正(实现时候只能靠移动平均方法更新)。</p>
<h2 id="trippleloss">TrippleLoss</h2>
<p>各个样本都向中心聚了,挺好的,网络计算完的特征,都向这个中心聚了,很好!</p>
<p>可是,这些中心都很近,不就也不好了嘛,对,这就是tripple loss的朴素思想的来源。</p>
<p>$\left|x_{i}^{a}-x_{i}^{p}\right|^{2} + m < \left|x_{i}^{a}-x_{i}^{n}\right|^{2}$</p>
<p>$x_{i}^{a}$是被训练的图片,$x_{i}^{p}$是跟他一样的类别(正类Positive),$x_{i}^{n}$是跟他不一样的类别(负类Negtive)。
他们之间的关系是,和异族的距离,至少要比同族的距离,大<strong>m</strong>。</p>
<p>不过,tripple loss不好训练。</p>
<blockquote>
<p>缺点是过于关注局部,导致难以训练且收敛时间长</p>
</blockquote>
<p>还有人说是因为,正负不均衡,正例太少,负例太多啥的。不过,我也没去实践,就不多言了。</p>
<p>虽然有了,centerloss,trippleloss,但是,还是有大神们继续探索,就有了L-Softmax。</p>
<h2 id="l-softmax">L-Softmax</h2>
<p><a href="https://arxiv.org/abs/1612.02295">L-softmax,2016 ,Weiyang Liu@北大</a></p>
<p>之前的centerloss、tripple loss,都用的是欧氏距离,接下来的大神们,开始尝试余弦距离,这也就是A-softmax的由来。</p>
<p>这个余弦距离怎么来的呢?我来娓娓道来:</p>
<p><img src="/images/20210916/1631787991034.jpg" alt="" class="myimg" /></p>
<p>看这种图,我们的特征抽取后,最后经过这个全连接,权重W是[隐含层 x 人脸类别],
每个人脸类别,就对着一个W向量$\overrightarrow{W}$,比如W的维度是[512,10000],
那么$\overrightarrow{W}$的维度就是512,有10000个这样的$\overrightarrow{W}$:
$\overrightarrow{W_1},\overrightarrow{W_2},\overrightarrow{W_3},…$</p>
<p>为了分类分开,一定是一个$\overrightarrow{W}$,比如$\overrightarrow{W_1}$, $\overrightarrow{W_1} \cdot x$ 比别的$\overrightarrow{W_2},$\overrightarrow{W_3}$,…和x内积值都要大,(softmax只是用指数放大了这个差异而已)。</p>
<p>好,这个$\overrightarrow{W_1} \cdot x$,可以表示成,$|\overrightarrow{W_1}| * |x| * cos(\theta_1)$(嘿嘿,余弦出现了)</p>
<hr />
<p>以下是参考:<a href="https://zhuanlan.zhihu.com/p/51324547">人脸识别损失函数综述</a>中的解释:</p>
<blockquote>
<p>原始的Softmax的目的是使得 $W_1^Tx > W_2^Tx$, 这个意思是softmax公式中,
那个$e^{W^T x_i}$上的指数项目标类别肯定是最大(softmax只是放大了它而已),
所以,做个变形,就成了,$|W_1|\cdot |x|\cdot cos(\theta_1) > |W_2|\cdot |x|\cdot cos(\theta_2)$,
这个是可以理解的,顺理成章的。</p>
<p>然后在这个基础之上,在把$cos(\theta)$做一个变形,</p>
<p>变成了</p>
\[\varphi(\theta)=\begin{cases}
cos(m\theta),0 ≤ \theta≤\frac{\pi}{m} \\
D(\theta), \frac{\pi}{m}≤\theta≤ \pi\\
\end{cases}\]
<p>乘以m(m≥1),实际上是加大了夹角$\theta$,你想啊,本来W和x有个夹角$\theta$,结果你现在乘以一个m,让损失其实是变得更大了,所以对这个$\theta$的要求,得更小才可以。</p>
<p>我觉得,从理解上,算W和x的夹角$\theta$,容易让人迷惑,不是应该只算x们之间的距离啥的么?W是个什么鬼?!我觉得,可以这样理解:你把W当做一个中介,x1和W1算,夹角尽量小,但是x2和其他的跟x1不是一类的向量来说,跟W2算夹角都很大,这样,就相当于变相的把非我族类给推远了,但是,如果某个xi和x1很像,它应该和W1的距离也应该很近才对。你看!这样不就是达到了同类往一起聚,不同类往不同的方向聚么。</p>
</blockquote>
<h2 id="a-softmax">A-Softmax</h2>
<p><a href="https://arxiv.org/pdf/1704.08063.pdf">SphereFace/A-Softmax 2017 Weiyang Liu@佐治亚</a></p>
<hr />
<p><strong>关于SphpereFace,YaqiYU的人脸的loss</strong>(<a href="https://zhuanlan.zhihu.com/p/34404607">人脸的loss</a>)讲的很好,摘抄和注释一下:</p>
<blockquote>
<p>Softmax鼓励不同类别的特征分开,但并不鼓励特征分离很多</p>
<p>Softmax并不要求类内紧凑和类间分离,这一点非常不适合人脸识别任务,因为训练集的1W人数,相对测试集整个世界70亿人类来说,非常微不足道,而我们不可能拿到所有人的训练样本,更过分的是,一般我们还要求训练集和测试集不重叠,需要改造Softmax,除了保证可分性外,还要做到特征向量类内尽可能紧凑,类间尽可能分离。</p>
</blockquote>
<p><strong>Mengcius哥们讲也好</strong>,这里摘抄和注释一下:</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/76539587">人脸识别合集 | 8 SphereFace解析</a>,</li>
<li><a href="https://zhuanlan.zhihu.com/p/76520129">人脸识别合集 | 人脸识别损失函数(下)基于Angular Margin</a></li>
</ul>
<blockquote>
<p>SphereFace(超球面)是佐治亚理工学院Weiyang Liu等在CVPR2017.04发表</p>
<p>SphereFace是在softmax的基础上将权重归一化,即使得 $|W_i|=1, bias=0$,使得预测仅取决于W和x之间的角度。</p>
</blockquote>
<p>我不太理解?$|W_i|=1$,怎么个法?!W不是我要去求的东西么?加了这个约束,我还怎么训练呢?
后来,想明白这事了,它只是个约束,不影响你训练啊。</p>
<blockquote>
<p>为了实现角度决策边界,最终FC层的权重实际上是无用的</p>
</blockquote>
<p><em>靠,这个说法够让我毁三观的</em></p>
<blockquote>
<p>在每次迭代中权重归一化为1</p>
</blockquote>
<p>噢,终于理解怎么实现了!</p>
<p>我理解,$|W_i|=1$,是A-softmax的最大改进,只关注角度了。</p>
<hr />
<p>上面是对Mengcius小哥的理解,下面我说说我的理解:</p>
<h2 id="arcface">arcface</h2>
<p>说说arcface吧,这个是我最主要化精力研究和使用的,arcface应该说是吸收了前面这个几个x-softmax的基础之上,做的最好的一个了。</p>
<p><a href="https://github.com/piginzoo/arcface-pytorch">这个</a>是我实现的一个版本,
是fork自一个<a href="https://github.com/ronghuaiyang/arcface-pytorch">网友的github</a>,在开发过工程中,随着对代码的理解,我对arcface也有了更深入和细致的理解。有必要花最大篇幅来说说它。</p>
<h3 id="再论softmax">再论softmax</h3>
<p>前面已经提到过softmax和其问题了,这里再唠叨几句,为何呢?因为让自己头脑更清晰,更容易一步步的深入arcface的细节:</p>
<p>softmax是什么? <a href="https://blog.csdn.net/bitcarmanlee/article/details/82320853">这篇</a>里,认知更清晰,softmax不涉及到任何参数,它就是个<strong>放大器</strong>。看<a href="https://img-blog.csdn.net/20180902220822202?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JpdGNhcm1hbmxlZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70">这张图</a>,理解更深入。</p>
<p>这个是: $\frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_i}}$,$x_i$是一个维度,如$[x_1,x_2,x_3]$,</p>
<p>比如一个向量,argmax,[3,1,-3],经过softmax,是[0.88,0.12,0],差距被放大了。</p>
<p>但是,往往前面都会再接一个网络:$Y = X*W + b$</p>
<p>比如X维度是128维,W维度是[128,10],现在的$x_i$实际上是$y_i$,然后再softmax,所以softmax只是在最后一个阶段帮着<strong>”放大“</strong>一下而已。</p>
<p>本质上,还是要靠前面的参数W,毕竟我们是为了要train这些Weight的,softmax只是在为了最后推波助澜而已:</p>
<p>$\frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} x_{i}+b_{j}}}$。</p>
<h3 id="arcface-loss">arcface loss</h3>
<p>softmax的虽然可以做分类,但是类别多了,就容易出现在高维空间中的边界区分不开的情况,一片一片的感觉,
我们形象地想,能不能让不同分类的表示向量,都能聚簇到一起,这样彼此间就可以分的很开了。
这个就是前面l-softmax、a-softmax等,包括arcface,通俗易懂的想法。</p>
<p>那问题是,如何才能达到这个目标呢?</p>
<p>在softmax中,我们观察softmax上的<strong>分子</strong>上面的项,$W_{y_{i}} x + b_{y_{i}}$,这里需要详细说一下,$x$是512维(假设的,是从backbone抽取之后的)。
这里的$W_{y_{i}}$是一个512维度的向量(这个是$W$矩阵[512,10000]中的一列)。这俩相乘,得到的是一个数(标量),这个标量,
是在得到的10000分类概率向量中的$y_i$分类上的概率(当然还得除以分母)。
你用$x * W_{y_0}$得到0分类的值,然后用$x * W_{y_1}$得到1分类的值,。。。,一共有10000个$W_{y_i}$,
得到了这个$x$对应的每个分类上的概率值,他们拼起来,是一个<strong>10000维度的概率向量</strong>。</p>
<p>接着说,</p>
<p>现在$W_{y_{i}} x + b_{y_{i}}$,这个你就可以理解成要变成概率的人,我们把这个玩意,做几个变形:</p>
<ul>
<li>先让$b_{y_{i}}=0$,b不要啦</li>
<li>再让$W_{y_{i}} \cdot x$ => $|W_{y_{i}}| * |x| * cos(\theta)$</li>
<li>然后再让$|W_{y_{i}}| = 1, |x|= 1 $</li>
<li>再做个半径缩放,本来半径现在都是1了,是不是感觉太挤?然后给了一个s,变成 $s * cos(\theta)$</li>
<li>最后,再加一个惩罚项$m$,加到$\theta$上,惩罚啥?我理解,就是你想着离$W_{y_i}$更近,但我偏不让你更近,给你加个$m$,逼着你更努力!</li>
</ul>
<p>最后,这个softmax就被改造成了这个样子:</p>
<p>$L_{3}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}}{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}+\sum_{j=1, j \neq y_{i}}^{n} e^{s \cos \theta_{j}}}$</p>
<p>这里,啰嗦几句再:</p>
<p>这还是个softmax,虽然给做了各种的变形、约束和简化,丫还是个softmax,本质上。他还是要让属于$y_i$那类的那个概率值,算出来,是最大的。
这样去逼着$W$们,不断地梯度下降,去达到这个目标。
但是,这个所以为“值”,也就是要被softmax放大的值,也就是要努力做到最大的值,变成了一个<strong>$cos$</strong>值,注意不是$\theta$,它也要最大。
$cos(\theta)$函数是一个递减函数,所以,它最大,就要求$\theta$最小。
$\theta$是啥来着?
$\theta$是$x$(backbone萃取出的feature,512维)和这个类别对应的$W_{y_i}$(W矩阵[512,10000]中的一类,即512维的向量),这两个向量的夹角。
现在,我们就是要我们的同一个人的萃取出来的$x$,都尽量向这个人的对应的$W_{我}$,尽量的靠近、靠近、靠近(也就是夹角$\theta$尽量小)!这就是这个<strong>loss的本质</strong>!</p>
<p><img src="/images/20210923/1632370739200.jpg" alt="" class="myimg100" /></p>
<p>不得不说,这图画的很好,很形象!</p>
<p>再说说代码</p>
<h3 id="实现代码">实现代码</h3>
<p>原理懂了,实现上,相对也比较容易了。但是还是需要一些细节需要解释。</p>
<p>要实现$cos(\theta_{y_i}+m)$,需要把这个式子<strong>“积化和差”</strong>,所以要求出sin啥的,这个细节如果没搞清楚,会晕。
另外,这个所谓的metrics,要计算的不是loss,而是给loss准备的softmax的分子,也就是e的指数的值,也就是$s*cos(\theta_{y_i}+m)$。
这个得到的是一个cos值,但是确切的说不是一个cos值,而是<strong>10000个</strong>,所以有必要认真分析一下它的输入和输出:</p>
<p><strong>输入</strong>:input,是一个512维度的向量;</p>
<p><strong>输出</strong>:是一个s缩放后的$\overrightarrow{cos}$值,是一个10000维度的,也就是有个10000个cos值,为何?</p>
<p>是因为,你这个input,即$x$,经过这个arcface的子网络后,得到一个$\overrightarrow{cos}$向量(10000维),
只有$y_i$那个维度对应的cos值(这个时候是标量),应该最大,而其他的9999个维度上的cos值(标量)应该相对比较小,
这样,经过softmax这个放大器后就更明显了,然后,再交叉熵,刺激损失函数梯度下降去吧。</p>
<p><a href="https://github.com/piginzoo/arcface-pytorch/blob/master/models/metrics.py">代码</a>:</p>
<pre><code>def forward(self, input, label):
"""
@param input: 512维向量
@param label:
其实就是在实现 softmax中的子项 exp( s * cos(θ + m) ),
但是因为cos里面是个和:θ + m
所以要和差化积,就得分解成:
- exp( s * cos(θ + m) )
- cos(θ + m) = cos(θ) * cos(m) - sin(θ) * sin(m) = cos_θ_m(程序中的中间变量) # 和差化积
- sin(θ) = sqrt( 1 - cos(θ)^2 )
- cos(θ) = X*W/|X|*|W|
s和m是超参: s - 分类的半径;m - 惩罚因子
这个module得到了啥?得到了一个可以做softmax的时候,归一化的余弦最大化的向量
"""
logger.debug("[网络输出]arcface的loss的输入x:%r", input.shape)
# --------------------------- cos(θ) & phi(θ) ---------------------------
"""
>>> F.normalize(torch.Tensor([[1,1],
[2,2]]))
tensor([[0.7071, 0.7071],
[0.7071, 0.7071]])
这里有点晕,需要解释一下,cosθ = x.W/|x|*|W|,
注意,x.W表示点乘,而|x|*|W|是一个标量间的相乘,所以cosθ是一个数(标量)
可是,你如果看下面这个式子`cosine = F.linear(F.normalize(input), F.normalize(self.weight))`,
你会发现,其结果是10000(人脸类别数),为何呢?cosθ不应该是个标量?为何现在成了10000的矢量了呢?
思考后,我终于理解了,注意,这里的x是小写,而W是大写的,这个细节很重要,
x是[Batch,512],而W是[512,10000],
而其实,我们真正要算的是一个512维度的x和一个10000维度的W_i,他们cosθ = x.W_i/|x|*|W_i|,这个确实是一个标量。
但是,我们有10000个这样的W_i,所以,我们确实得到了10000个这样的cosθ,明白了把!
所以,这个代码就是实现了这个逻辑。没问题。
再多说一句,arcface,就是要算出10000个θ,这1万个θ,接下来
"""
cosine = F.linear(F.normalize(input), F.normalize(self.weight)) # |x| * |w|
logger.debug("[网络输出]cos:%r", cosine.shape)
# clamp,min~max间,都夹到范围内 : https://blog.csdn.net/weixin_40522801/article/details/107904282
sine = torch.sqrt((1.0 - torch.pow(cosine, 2)).clamp(0,1))
logger.debug("[网络输出]sin:%r", sine.shape)
# 和差化积,cos(θ + m) = cos(θ) * cos(m) - sin(θ) * sin(m)
cos_θ_m = cosine * self.cos_m - sine * self.sin_m
logger.debug("[网络输出]cos_θ_m:%r", cos_θ_m.shape)
if self.easy_margin:
cos_θ_m = torch.where(cosine > 0, cos_θ_m, cosine)
else:
# th = cos(π - m) ,mm = sin(π - m) * m
cos_θ_m = torch.where(cosine > self.th, cos_θ_m, cosine - self.mm)
# --------------------------- convert label to one-hot ---------------------------
one_hot = torch.zeros(cosine.size(), device=self.device)
logger.debug("[网络输出]one_hot:%r", one_hot.shape)
# input.scatter_(dim, index, src):从【src源数据】中获取的数据,按照【dim指定的维度】和【index指定的位置】,替换input中的数据。
one_hot.scatter_(dim=1, index=label.view(-1, 1).long(), src=1)
# -------------torch.where(out_i = {x_i if condition_i else y_i) -------------
# 这步是在干嘛?是在算arcloss损失函数(论文2.1节的L3)的分母,
# 标签对的那个分类y_i项是s*cos(θ_yi + m),而其他分类则为s*cos(θ_yj), 其中j!=i,
# 所以这个'骚操作'是为了干这件事:
output = (one_hot * cos_θ_m) + ((1.0 - one_hot) * cosine)
logger.debug("[网络输出]output:%r", output.shape)
output *= self.s
logger.debug("[网络输出]arcface的loss最终结果:%r", output.shape)
# 输出是啥??? => torch.Size([10, 10178]
# 自问自答:输出是softmax之前的那个向量,注意,softmax只是个放大器,
# 我们就是在准备这个放大器的输入的那个向量,是10178维度的,[cosθ_0,cosθ_1,...,cos(θ_{i-1}),cos(θ_i+m),cos(θ_{i+1}),...]
# 只有这项是特殊的,θ_i多加了m,其他都没有---> ~~~~~~~~~~
# 不是概率,概率是softmax之后才是概率
return output
输出:
DEBUG: [网络输出]arcface的loss的输入x:torch.Size([10, 2])
DEBUG: [网络输出]cos:torch.Size([10, 10178])
DEBUG: [网络输出]sin:torch.Size([10, 10178])
DEBUG: [网络输出]cos_θ_m:torch.Size([10, 10178])
DEBUG: [网络输出]one_hot:torch.Size([10, 10178])
DEBUG: [网络输出]output:torch.Size([10, 10178])
DEBUG: [网络输出]arcface的loss最终结果:torch.Size([10, 10178])
</code></pre>
<p>看到了吧,就是10178个cos值(这里我用的数据集是10178个分类,我文章中简单化为了10000种),前面的是10是batch,可以忽略。</p>
<h1 id="数据集">数据集</h1>
<p>人脸训练用的数据,可以参考<a href="https://gas.graviti.cn/open-datasets?_ga=2.239614922.811074192.1634540597-1821934516.1634540597&usedScene=Face">这个列表</a>,比较全!</p>
<h2 id="人脸识别数据集">人脸识别数据集</h2>
<pre><code> WebFace 10k+人,约500K张图片 非限制场景,图像250x250
FaceScrub 530人,约100k张图片 非限制场景
YouTubeFace 1,595个人 3,425段视频 非限制场景、视频
LFW 5k+人脸,超过10K张图片 标准的人脸识别数据集,图像250x250
MultiPIE 337个人的不同姿态、表情、光照的人脸图像,共750k+人脸图像 限制场景人脸识别
MegaFace 690k不同的人的1000k人脸图像 新的人脸识别评测集合
IJB-A 人脸识别,人脸检测
CAS-PEAL 1040个人的30k+张人脸图像,主要包含姿态、表情、光照变化 限制场景下人脸识别
Pubfig 200个人的58k+人脸图像 非限制场景下的人脸识别
CeleBrayA 200k张人脸图像40多种人脸属性,图像178x218
</code></pre>
<h2 id="人脸检测数据集">人脸检测数据集</h2>
<pre><code> FDDB 2845张图片中的5171张脸 标准人脸检测评测集 链接
IJB-A 人脸识别,人脸检测 链接
Caltech10k WebFaces 10k+人脸,提供双眼和嘴巴的坐标位置 人脸点检测 链接
</code></pre>
<h1 id="参考-1">参考</h1>
<ul>
<li><a href="https://www.jiqizhixin.com/articles/2019-02-10-4">人脸识别技术全面总结:从传统方法到深度学习</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/339594431">2020人脸识别最新进展综述,参考文献近400篇</a></li>
<li><a href="https://cloud.tencent.com/developer/article/1654880">入门经典综述!深度人脸识别算法串讲</a></li>
<li><a href="https://aijishu.com/a/1060000000106193">2020最强六大开源轻量级人脸检测项目分析</a>,</li>
<li><a href="https://mp.weixin.qq.com/s/22U_v6IQ9PBHslI-65v_0Q">AIZOO开源人脸口罩检测数据+模型+代码</a></li>
<li><a href="https://github.com/luoqiuluoqiu/note">北科大研究生的github总结</a>,很不错,很多干活,各方面的</li>
<li><a href="https://www.zhihu.com/column/FaceRec">Mengcius的人脸识别合集</a></li>
<li>人脸的loss(<a href="https://zhuanlan.zhihu.com/p/34404607">上</a>,<a href="https://zhuanlan.zhihu.com/p/34436551">下</a>)</li>
<li>盘点在人脸识别领域现今主流的loss(<a href="https://zhuanlan.zhihu.com/p/64314762">1</a>,<a href="https://zhuanlan.zhihu.com/p/68377746">2</a>)</li>
</ul>
关于留学的思考
2021-07-26T00:00:00+08:00
https://www.piginzoo.com/education/2021/07/26/study-aboard
<h1 id="关于留学的思考">关于留学的思考</h1>
<p>中考结束,恰好,孩子有个机会进入一所还不错的国际高中,这个学校以往的成绩可以申请到全美50,世界100的学校。那么问题来了,究竟是让孩子去国际校,还是让孩子去公立高中呢。先说结论,我们家在反复的纠结中,最终选择了去公立高中。不夸张的讲,我们反复纠结了3、4次,一会儿觉得应该上国际高中,一会儿觉得还是去公立高中更稳妥,那么我们究竟纠结什么呢?</p>
<h2 id="关于钱">关于钱</h2>
<p>最关键的一点,是钱!</p>
<p>虽然有机会去美国top50,世界top100,但是,银子消耗的太厉害了。</p>
<p>如果是去美国读本科,大概需要300万+,去英国没有算,去加拿大读,也得200万+。虽然说,需要7年时间来消化,但是仍然是一大笔钱,基本上就淘空了一个家庭。我想大部分家庭可能都吃力的,网上有一篇帖子说,如果去读国际校,家庭收入要在百万以上,这样对生活影响才不是很大,我自己评估完,觉得挺合理的。</p>
<p>我举个例子,如果是读美本,一般学费都在每年5万~6万美元之间,大概是35~40万人民币,当然也有便宜的,但是大部分我们耳熟能详的学校,基本上都是这个价位,如果算上生活费(住宿、吃饭)差不多也得10~15万人民币,还有书本费(美国的教材狠贵,差不多也得2000美元),还要保险、往返机票,孩子们也需要出去social,也需要费用,都下来,一年60万人民币不是狠夸张。这样,本科阶段就需要250万人民币铺底。</p>
<p>别忘了,出国之前,还得需要一笔国际高中的钱,大概需要60万+。一般公立国际高中学费差不多是30万人民币,一般会有2次夏校(出国去短期学习实践)大概10万,一般为了申请大学,需要拼命刷托福和SAT,不报班是不可能的,这个费用大概下来需要15万。另外,还需要中介帮助你准备各学校的文书,包装孩子的人设,指导孩子做一些符合人设的项目,大概收费在15-20万。所以60万+不是狠夸张。</p>
<p>这样都算下来,确实得需要300万+,如果中间再有一些曲折或者意外 ,多个3、5十万也不用惊奇。</p>
<p>那么,如果不去美国是不是可以便宜一些呢?答案是是的!</p>
<p>比如去加拿大这个费用可以降到200万+,主要是省在了学费、生活费等方面,加拿大的top5里,除了多伦多贵一些,其他的大致都在3~4万美元,这样就相当于每年省了2万美元,这笔钱就可以省下50~60万人民币,另外,加拿大不需要美国那样的包装,主要是看成绩,所以,中介费也可以省下一大笔,另外,再考虑上生活成本也会相应低一些,综合下来,可以节省80~100万。</p>
<p>英国、澳洲,我们没有详细考察,估计也得是200万+。</p>
<p>那么,你可能会说,去欧洲呢,比如法国、德国、北欧,先说结论,我个人觉得,不怎么样。法国公立校、德国大部分学校、北欧的很多学校,都不收学费,对,你没有听错,不收学费!你只要有生活费就可以,大概是每年15~20万人民币,也就说,4年下来大概80~100万,就可以下来了。可是!这些学校,都需要你去学语言,少数是英文教学,大部分都是本国语言学习,所以你不得不提前1年去学习语言。另外,这些学校都是宽进严出,淘汰率很高,想要“安全”毕业,不是那么容易。更重要的是,她们的课程设计相对于英国、美国、加拿大等教育发达国家,有些陈旧。B站上一搜就可以搜出各种各样欧洲大陆国家留学的吐槽视频,感兴趣可以自行搜索。所以,结论就是,如果是为了省钱,真心没必要去欧洲留学,努力考上个211,不更省钱么。</p>
<h2 id="关于教育本身">关于教育本身</h2>
<p>如果不考虑钱的因素,应不应该去留学,我是觉得,应该。</p>
<p>我个人是对西方文化、艺术很感兴趣的一个人,我个人对中国这种应试教育非常厌恶,高中三年让孩子浪费在刷题上,实在是可惜了。现代社会无论是文化、科技,基本上就是西方占主导,所以,特别是大学第一年的通识教育(美学、哲学、文化等)十分必要,而且,去top的这些学校,去西方切身的感受文化冲突,和来自世界各地的优秀的同学一起激荡脑力,对一个人的最旺盛求知欲的时候,是非常深远的影响。</p>
<p>大家都觉得,现在出国性价比太低了,我个人觉得,这种经历是在国内学习,不可替代和复制的,读本科,得到的是在思想、世界观、学术训练等诸多方面,都会获益终身。这样成长起来的孩子们,是一个具备广阔视野,自信开放的一个完整的人。大家觉得性价比低,无非是在未来的收入上衡量,我想,不能仅用收入来衡量留学的得与失,他得到的其他方面的东西,对他这一生的影响都是巨大的。</p>
<p>当然,我说的这些,前提都是要去顶级的头部学校,如果去一所普通美国大学,50开外,甚至100开外的,真心觉得没有必要了,确实去浪费钱去了。</p>
<h2 id="其他方面的权衡">其他方面的权衡</h2>
<p>当然,还有各种因素需要考虑,这些也是我们反复纠结的原因</p>
<ul>
<li>国内大学教育确实性价比高,国内4年都读下来,10万就差不多了,还有大把的交换生、优质的留洋博士、教授,好的大学,不乏和国外教授学术水平相当的教授。985、或者优质211的教学水平一点也不低,不输给国外大学</li>
<li>我们其实还可以通过2+2,比如西交利物浦、宁波诺丁汉、昆山杜克、上海纽大等教育部批转的9所联合办学的方式,2年在国内学习,2年去国外学习的方式,去体验不同的教育,大概费用是80~100万,也不失是一种良好的教育</li>
<li>孩子本科以后再出去,可能更愿意回国发展,我们中国人都希望可以团团圆圆的,万一孩子出国读本科,留在了国外,这对一个家庭来说,是很多父母不愿意看到的结果</li>
<li>还有欧美教育体系下成长的孩子,特别是工作N年后回来,对中国的职场可能会非常不适应,中国的职场各种卷,是中国教育体制下生产出来的人更能适应的职场,虽然这是一种悲哀</li>
<li>省下这200~300万,可能给孩子未来一个“躺下”的自由,去做自己更开心的事,未尝也不是一件好事</li>
<li>可惜了孩子没有机会去经历那种在他世界观、价值观形成之初就可以经历的冲突、多元、独立思考、自我觉醒、好奇心保护等等,可能对他这一生都产生深远影响,无法用钱来衡量的东西</li>
</ul>
<p>我看到了一个关于国内外关于教育的评价的视频:<a href="https://www.youtube.com/watch?v=p291o7r1Qis&ab_channel=%E5%B0%8F%E5%B2%9B%E5%A4%A7%E6%B5%AA%E5%90%B9-%E9%9D%9E%E6%AD%A3%E7%BB%8F%E6%94%BF%E7%BB%8F%E9%A2%91%E9%81%93">两种不同的教育,最有效率的阶级划分</a>,讲的非常中肯,推荐看一下。</p>
<h2 id="反思">反思</h2>
<p>作为一个和千百万个为孩子的成长焦虑的老父母一样,我们也在反思:</p>
<p>我们是不是这样倾自己之力帮助孩子实现一个自由的人生(虽然他自己可能还没能意识到),代价过于大了,我们还要有自己的生活、精神世界、父母赡养,我们过度的给予孩子,是不是会忽略、牺牲或者逃避了其他应尽的责任。</p>
<p>也许是我们低估了孩子的生命力,我们也经过了各种社会给我们的“摧残”、“蹂躏”、“毒打”,不还是可以成为一个完整、独立、善良的人么,去除那些社会地位、收入,我们更希望孩子可以成为这样的品质的人,一个具备有趣、自由灵魂的人。也许,我们不应该低估他们,况且,他们即使不出去读本科,也有比我们过去,多的多的选择的机会。</p>
<p>他未来其实还有各种各样的机会,去接触和体验国外的教育,比如可以通过MOOC学习,可以大一转学到国外,可以通过国内大学的交换生机会出去学习半年到1年,或者通过2+2去国外学习2年,这些都是可以承受范围内的,不一定要抱着早早出去看世界的执念。</p>
<h2 id="结论">结论</h2>
<p>最终,出于经济的考虑,我们决定不考虑出去读本科,下面的options都是我们未来考虑的范围:</p>
<ul>
<li>去读上面提到的2+2学校,分数在211的尾部学校的分数级别,所以也不差,但是分数确实降了10~20分,还是很有吸引力的</li>
<li>努力考入211+的学校,通过交换生方式出去学习,这种机会现在越来越多,中国优质大学越来越开放</li>
<li>读完本科,去读一个优质大学的研究生学位(大概60~80万)</li>
</ul>
<p>退一步,确实轻松了许多,孩子们的精彩才刚刚开始,我们没必要给自己太大的压力,不是么?</p>
教育感受
2021-07-26T00:00:00+08:00
https://www.piginzoo.com/education/2021/07/26/education-feeling
<p>陪我儿子跑到了初三,感觉得到,他越来越承受更大的压力,是他前所未有的,生命中15年中,前所未有的压力,我真的能感受到,但是,我和媳妇都觉得,帮不上。</p>
<p>听了<a href="https://mp.weixin.qq.com/s/jGLRnJP9J8oAkt_IJWkwkA">储殷怼刘瑜</a>,但是也听了<a href="https://mp.weixin.qq.com/s/jR4hNf7GsnLGSR9b1Azq7g">刘瑜很积极的演讲</a>,我内心同意储殷,但是又神往刘瑜,我何尝不想让孩子有一个选择的自由,但是,高考这道关不得不过,即使我们想让他上2+2的学校,那也得在北京市要排名到20%,这也不是一个轻轻松松就能达成的目标啊。</p>
<p>也许,你会觉得,你现在着急了,是因为你没从小给他培养成好的学习习惯,他没有从小养成坚强的意志,做事的决心,是,但是,大部分人,包括我在内,都是第一次做家长,也许,你说的对,我们的孩子,其实就是我们生活、生命的写照,我们自己成年人了也是做不好一些事情,没有养成一些好习惯,好吧,但是,我是主观上想让孩子达成这一切,上一个211甚至985的,我这样想,是出于美好的愿望,是觉得,上了211,他会遇到更有意思的人、更有价值的梦想,至少我们是这样,18岁之前,那个年代和社会,没有给我们制造梦想和理想的机会,只有做科学家、医生、警察之类的人造理想,后来的社会也抽打着教育了我们,上了211和985,确实我薪水上就是要高出很多,机会多出很多,也可以在一定年龄任性地开始追逐一小部分“梦想”,因为,我们有了让自己停住生活的脚步,休息和自己灵魂对话的收入了。</p>
<p>扯远了,所以,我们不得不非常诚实的面对这个世界、这个社会,他是实实在在的,他就是储殷描绘的世界,虽然,他的话充满愤恨,对我们刺激很大,让人听着不舒服,但是,我们不得不吃下那颗红色的药丸,面对这个真实的世界。但是,请明白,那是此刻,是2021年,是焦虑和不安,经济开始下行滞胀、新冠肆虐的2021年,世界充满了着绝望。这既不是我们小时候那个充满希望朝气开始改开放的中国,也不是2035年中国实现GDP世界第一,人均2万美金的未来,当下,我们就必须要面对这些,但是,我们不是只活在当下,特别是对我们的孩子,他们才10来岁,他们有无限的可能,这个世界也有无限的可能,我其实一直在反复的提醒自己,我是为了我的孩子,在30岁的时候,在40岁的时候,幸福安康。那时候可是2040,2050年的时候呢,那时候会怎么样,我不敢想象。</p>
<p>我有时候很好奇,为何大家都有这种教育孩子的焦虑和困惑,却很少交流呢?是面子问题么,是怕讲自己孩子不好会让自己显得无能,或者听到别人的孩子如何如何的好,让自己更加焦虑;为什么不愿意把问题和自己的困惑甚至无助,讲出来,甚至找心理咨询师。最起码,在自己最信任的朋友和家人群里,去相互探讨,如何帮助孩子成长、学习。我是从樊登的20-30本听书里,找到了很多答案,对我帮助非常大,我其实没怎么读过他推荐的书,但是,我反复听过他讲的很多书,给我了很多反思和力量,很多技巧让我应用在孩子的沟通上,很有实效。对孩子教育的反思,让我在观念层面改变了很多。我也在我组建的群里,向我的朋友们,展示我在孩子教育上的困惑、无力和无知,通过讨论,他们给我了很多反馈,甚至是我自己的独白,都让我受益颇多。其实,某种程度上,这个过程,就是我自己的成长,孩子是上天给我的礼物,是他用他的成长,伴随了我心灵的成长。我其实感受比较深的是,更能容忍一些事情了,更有责任感了,而且,更同理心的看待孩子的学习和压力了。</p>
<p>就像储殷说的,我没有答案,我很困惑,但是我觉得,可能每个父母都是我这种感受,教育孩子没有一个现成的答案,我了解了“复杂系统”之后,更深刻的感觉到,人这个复杂体,充满了不确定性,是一个混沌的生命体,他会向何方向发展和演变,不是你可以通过一套教条、刻板的手册、教程就可以完成的,当他这个复杂生命体,又遇到你这个复杂生命体的时候,会产生无数的交融,而你,又是你的父母和社会交融后的复杂体,所以,孩子成长过程,是一个充满了不确定性的,尽管,我们有时候主观上是好的,我们是希望孩子成为什么什么样子,但是,我想,那可能也只能是美好的主观。说的悲观点,我们连自己的命运都无法把控和预知。</p>
<p>我想,能给孩子,就只能是“爱”了吧,作为父母,我们肯定都愿意把爱,给孩子,但是,我们确实应该警惕那些有毒的爱。为了自己臆断的未来,想通过控制孩子达到那个“彼岸”,在我看来就是无妄的爱,是不显示的爱,是心里的魔。不如安住于当下,在孩子有学习困难的时候,帮他想办法,交给他你当年学习的技巧,鼓励孩子去想如何提高效率、如何改进思路,具体的帮助里,充满了陪伴的爱,这个确实需要付出大量的时间和心血,我过去,总是觉得浪费时间,花这么多时间,让自己在这种看着“无聊”的做题技巧上,不如逼着孩子去想多好。但是,当我把这种事情转变成“陪伴”的时候,我突然有了做这件事情的热情和耐心,这里插一句,你看观点对一个人的改变有多大,这句话其实也可以应用到孩子身上。这种时间和耐心的付出,在孩子遇到困难的时候,孩子才真实的感觉到爱。不过,樊登提醒的对,一定是在孩子遇到困难的时候,而不要在他自己没有需要的时候,冲过去,那是控制,是执念,是让孩子失去主动探索和努力的机会,这点确实很难把握,我自己到现在其实也把握不好这个边界。</p>
<p>还有一点,我一直也都很困惑,孩子们痴迷于游戏、抖音,我知道那些痴迷背后,是各种的算计,各种的推荐算法,但是,孩子们确实抵抗不了,这种对人性层面的侵蚀的手段。但是,还是那句话,你很难把握好这件事,因为,那个是他们的世界,他们的朋友都在刷,都在吃鸡,你不让他玩,他失去的是团队的归属感,你让他玩,你又担心他把握不好这个度,而变的沉迷。更甚,你可能更想让孩子把这些时间拿来读书、了解更多在你看来,更有意思的内容,比如哲学、文学、艺术甚至人类学,至少在我的角度,这些内容,如果孩子有机会进入,会大大激发他的好奇心,对这个世界的探索欲望的。可是,孩子却一点都不感兴趣,在夜里10点才写完作业、刷完题后,确实也没啥心情,听你嘚啵这些在你看来“有意思、有意义”的东西,况且,我们也不是教育家、演说家,你谆谆教导的内容,兴高采烈的讲述,在孩子那里掀不起一丝的波澜,特别是到了中考阶段,这种愿望更是妄想。他闲余下来,打打自己的游戏,在我看来,已经是他真心的放松了,你还有什么理由,再给他讲那些东西。至于中考完,暑假里,早就已经计划好,要上各种的课了。</p>
<p>唉,有时候,觉得世界怎么这么残酷,虽然刘瑜、樊登、李小萌,讲的都非常的正确和美好,现实总是让你回到现实,你也暗暗的后悔,应该从小帮孩子养成这些,但是,你不用这样自责,因为你不是刘瑜,不是樊登,不是李小璐,这些人就不是普通人,是极其有天赋、自律、有自驱力的人,他们的教育孩子的经历,肯定也不是普通的。我听樊登说,他在宝宝出生前,就读了无数的育儿的书,而李小璐在孩子10年的生命里,不断地在学习教育心理学,才有了她的那本书。恩,放过自己吧,只是从现在开始,从自己意识到这点就开始,不晚的,至少,我经过一段时间的努力,自己能感觉到还孩子相处的改善。</p>
<p>另外,他们三人,其实都没有诚恳的面对高考,也许他们的孩子离高考太远,或者他们早就准备好要让孩子出国读书,走另外一条路,哪条路,确实应该用他们倡导的方式,才能申请到offer。这不是酸黄瓜的心态,而是很理性的思考。但是,剩下的95%+的孩子,是要过高考这条路的,至少我不太可能送孩子出去读本科,我承担不起200万+的教育投入,所以,我需要孩子参与这场肉搏战。而且,我有一个想法,就是,未来孩子还是要这样一个社会达尔文主义的社会里生存,也许未来社会不会那么内卷吧,谁知道呢?那么,高考是他直面这个现实的第一次社会教育,也许对他未来在这样的一个社会上生存的必修课吧。未来,他出去读个研究生,或者直接选择脚投票移民走,那也是他自己的选择,但是,至少他在这样的一个社会生活,高考应该是所有人都要经历的成人礼吧。</p>
<p>不知道未来会怎么样,我们两口子觉得,高中确实需要帮助孩子,过好高考这一关,和孩子一起,珍惜陪伴他的三年,无论他在什么高中,努力激励他,陪伴他,帮助他,于其让这个我们厌恶的教育体制和社会改造他,不如我们陪伴他,用实际的行动帮助他,影响他。也学会接受各种不确定性,谁知道了,反正他的人生才刚刚开始,还长着呢。</p>
我的学习之路
2021-06-08T00:00:00+08:00
https://www.piginzoo.com/education/2021/06/08/mylearn
<h1 id="前言">前言</h1>
<p>为什么要学习?为什么要读书?</p>
<p>对自己而言,已经超越了生存的需要。学习,是为了给自己构建一个健全的、平和的、内省的、理性的,但是又不要被理性的傲慢吞噬的自我精神世界,这样的一个世界里,永远保持一颗好奇的心,发自内心的想去了解这个世界。</p>
<p>这几年里,在自己在探索学习的过程中,也是不断地跌倒、自我怀疑、纠结、迷茫,所以,很想借这个帖子,把这个路径、内容整理出来,让自己温故知新,也向朋友们分享这些激动人心的内容。</p>
<p>知识是整个人类的积淀,跨越时空的,而“人是悬挂在自我编织的意义之网上的动物,人类文明是铺垫在思想家的思想通道之上的”,了解、掌握和精通,这数千年来,特别是近代人类的整个智慧、理性的结晶,当然这个过程不是那么容易的,但是这场旅程已经足够让人激动人心了。</p>
<p>感谢我学习的赞助商B站和油管,没有你们,我无法获得这些优质的视频教程。我更要感谢那些无私的知识分享者,甚至那些甘愿冒盗版之名的把优质课程上传上来的“盗火者”们,你们让我想起了<a href="http://www.piginzoo.com/life/2019/02/17/aaron">亚伦斯沃茨</a>。是你们,让我可以在知识的海洋里不断狗刨,不断丰富和完善这颗孤单的灵魂。</p>
<p>就像我非常喜欢的一个博主:<a href="https://mp.weixin.qq.com/s?__biz=MzA4NTE1MDk5MA==&mid=208534579&idx=1&sn=3460ead096529016d84a55f652302fb3&chksm=16450052213289447cc6ce8017eb4dc0b5fdd09f226f24087a9ed02c206fa79418127334a768&mpshare=1&scene=1&srcid=06153OTaIRwsuUKUKrNGRnJB&key=4f1f510486614aa42e8a3b017356f7b461dee6dc3bf3aa1805157dc1a4e466816c8e13a8e1a99a0ba7f26e2d759fc1efd07811a3ef8f3fcd8909988d5d9549fb2963baa6d28c49397208a20e3b57904e&ascene=0&uin=NDE5OTY5NDM1&devicetype=iMac+MacBookPro11%2C2+OSX+OSX+10.10.5+build(14F27)&version=12020810&nettype=WIFI&fontScale=100&pass_ticket=z9o2NgWtPmFVPsTSDZWuEE750yGUr854mjZ7aZIBDWcngD5FtlszRtMo6D1q7HVx">安静的书桌</a>,看着他多年来读书的积累,让人羡慕不已,所以,感觉自己有必要也整理出一个列表来,记录自己,顺便分享。另外,这不是一个全的列表,刻意忽略了理科的东西,只包含了自己觉得比较重要的人文内容。</p>
<h1 id="文学历史和音乐">文学、历史和音乐</h1>
<ul>
<li><a href="https://www.bilibili.com/video/BV1ZW411A7t6">许子东文学课 共12节 【香港岭南大学】</a>:许子东老师在香港岭南大学的视频,主要是关于中国现代文学的一个完整的介绍,介绍了民国和解放前这段时间的诸多文学家,非常推荐。</li>
<li><a href="https://www.notion.so/daa05a73bcda402b884856f59937e96c">文化人类学 王梅霞 -台湾大学</a>:人类学的课程本身就很小众,网上的视频也不多,台湾王梅霞老师的这个讲解,可以带领你进入人类学的领域。第一次听说人类学,还是源于项飙老师,他就是人类学专业的,后来听过《<a href="https://book.douban.com/subject/6712255//">天真的人类学家</a>》的音频,一下子啊对这个学科产生了兴趣。</li>
<li><a href="https://www.bilibili.com/video/BV1754y1i715/">西方古代建筑艺术史(全72讲)</a>,陈文捷老师把这门课讲绝了,这哪里是建筑史啊,简直是西方的历史,你不由的感叹,陈文捷老师的历史、建筑、美学的造诣。</li>
<li><a href="https://www.bilibili.com/video/BV1Cp411R7CA">纪录片《先生》</a>,一系列文化大家,走进他们的故事。</li>
<li><a href="https://www.bilibili.com/video/BV1Tx411J7zt">世界历史(100集全)</a></li>
<li><a href="https://www.bilibili.com/video/BV1Cx411j7Nt">中国通史-古代史【全180集】</a></li>
<li><a href="https://www.bilibili.com/video/BV1Nt411J777">海宏老师的古典音乐鉴赏</a>,李海宏老师,中央音乐学院的奇葩老师,充满了理想主义的天真的大孩子,带我们走进音乐的世界,让音乐平易近人,让音乐滋养我们。</li>
</ul>
<h1 id="中读音频和看理想">中读音频和看理想</h1>
<p>感谢刘倩老师整理的<a href="https://www.vistopia.com.cn/index">看理想app</a>中的推荐课程列表,我听过一些,不过看这些名字,这些知识的分享就让人神往,可惜看理想的会员太贵,我只买了几门。</p>
<p>梁文道道长的各种都是免费的,谁让他是创始人呢,听着很过瘾,特别是一千零一夜,几乎把所有的经典文学作品都带你入个门;另外,还听过徐贲老师的课,收获还是很大的;还有刘瑜老师的比较政治学也是我个人比较喜欢的。剩下的,大家自己探索吧…</p>
<p><img src="/images/20210608/1623133206245.jpg" alt="" class="myimg" /></p>
<p>另外一个就是三联做的<a href="http://www.slzhongdu.com/">中读app</a>,里面也有一大堆的人文、电影、历史、哲学的内容,也非常推荐。</p>
<h1 id="十三邀">十三邀</h1>
<p>单独把十三邀拎出来,是因为确实太喜欢这个节目了,很早就知道许知远和他的单向街,很多启蒙的书都是在那里买的,但是这个节目还是让我认识了很多大家,陈嘉映、西川、许倬云……,下面列出来的,都是我觉得听后收获很大的系列。</p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/RJbKkPfEthh2CUBbLMj7vw">陈嘉映:与人生的不确定性安然相处</a></li>
<li><a href="https://mp.weixin.qq.com/s/9aj4dKUViZzZNX0heOhLKQ">唐诺:世界已经长成这样,会不会让你沮丧?</a></li>
<li><a href="https://mp.weixin.qq.com/s/eHaOdy3LLRVn6GTlNKi6kw">西川 : 艺术家像害怕瘟疫一样害怕雷同</a></li>
<li><a href="https://mp.weixin.qq.com/s/lMUp8-uimma7yUMD07ScnQ">白先勇:一个人的文艺复兴</a></li>
<li><a href="https://mp.weixin.qq.com/s/RsHEPnnDscw_Iq1Pn85j_g">项飙:五分钟为什么变得如此之严重?</a></li>
<li><a href="https://mp.weixin.qq.com/s/j7kBwoS4T7yCzh0qu9JkJw">许倬云:你必须尊敬他,才会爱他</a></li>
<li><a href="https://mp.weixin.qq.com/s/06UI071CCqJdWPR2esEIJw">陈传兴:你害怕疯狂,你又很希望自己疯狂</a></li>
<li><a href="https://mp.weixin.qq.com/s/MP4ZjxJuHWA0mVPqo2v7Wg">金宇澄:人这种动物特别奇怪,喜悦只有几秒钟</a></li>
<li><a href="https://mp.weixin.qq.com/s/L14j7CkYylikN7_2ZuE9sQ">吴国盛,重新谈论科学精神</a></li>
<li><a href="https://mp.weixin.qq.com/s/l5j15dhnOdtqoIDxuCewgw">徐皓峰:我们这代人把生活搞坏了,还怪年轻人太着急</a></li>
</ul>
<h1 id="混沌课程">混沌课程</h1>
<p>参考我的博客文章《<a href="http://www.piginzoo.com/education/2019/01/07/hundun">混沌大学课程推荐</a>》,<a href="https://www.hundun.cn/">混沌大学</a>是给我开了另外一扇窗的,早年买过一年会员,后来陆续看看,但是最开始带给我的认知上颠覆感,至今记忆尤深。因为涉及到版权,大家自行百度吧。</p>
<ul>
<li>
<p>寻找跨越经济周期的系统性机会 李丰</p>
<p>这个很不错,讲出了经济规律性的东西,之前都没听说过李丰,他讲的虽然是站在投资的角度,但是对之前几次经济危机的回顾,和中国的应对,以及各种政策在历史上的身影,都有借鉴意义。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>情绪沟通——改变看法与自我认知 黄执中</p>
<p>奇葩大会的选手,虽然看过这节目,但是也印象不深,但是看了这节课,对他印象深刻,如何解读情绪中的奥秘,掌控自我情绪等,讲的很不错,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>创业反思-成为更加优秀的自己 李建</p>
<p>讲的还可以,主要还是探讨第一性原理的,讲的还算通俗,而且结合自身的例子。推荐指数 ☆☆☆</p>
</li>
<li>
<p>创新思维:重塑你的思维,从这里开始 采铜</p>
<p>讲的一般吧,但是我喜欢这种讲思维逻辑的课,所以也推荐给你。推荐指数 ☆☆☆</p>
</li>
<li>
<p>领导力原则 俞敏洪</p>
<p>老俞的课还是讲的很有趣的,可以听出一些采来。推荐指数 ☆☆☆</p>
</li>
<li>
<p>可复制的领导力 樊登</p>
<p>樊登还是挺能讲的,听听无妨。推荐指数 ☆☆☆</p>
</li>
<li>
<p>模式创新:商业的本质的嬗变-从帝国到流沙 王强</p>
<p>王强我很喜欢,文艺创业者,哈哈。其实讲的啥我也记不住了,爱屋及乌,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>产品哲学:用第一性原理思考产品 黄晓杰</p>
<p>我就是听他讲的第一性原理,知道这个词的,讲的很不错,印象深刻,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>认知升级之第一性原理 李善友</p>
<p>善友老师的大课,当然推荐了。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>人生的十字路口,我爱憎分明 张颖</p>
<p>经纬还是很令人尊敬的投资机构,大佬的分享,很真诚,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>创新产品的灵感和方法论 王信文</p>
<p>王信文还是我很喜欢的一个创业者,讲话平和,但是透着理科男的理性和智慧,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>东西方文化溯源与东西方哲学 王东岳</p>
<p>此人算是李善友老师的老师,第一次听确实醍醐灌顶之感,不过还是那句话,领你入门,修行在己,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>做一款好产品的六字法则 周鸿祎</p>
<p>红衣主教的课,还是值得听一下的。推荐指数 ☆☆☆</p>
</li>
<li>
<p>颠覆式创新 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>认知革命 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>批判性思维 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>产品经理的必修课 梁宁</p>
<p>说实话我真的忘了我听过这门课,但是最近听梁宁产品30讲,被征服,所以推荐她。推荐指数 ☆☆☆</p>
</li>
<li>
<p>第一性原理与创业 张首晟</p>
<p>这个真心没听过,但是一个是冲着第一性原理,另外一个是冲着对死去张老师悼念,推荐一下,我也会找时间去听的,推荐指数 ☆☆☆</p>
</li>
<li>
<p>硅谷科技与中国应用结合的积木式创新 王昱全</p>
<p>王昱全老师是我特别喜欢的一个,很符合我这种理科男的口味,人也很赞,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>大数据的道、术、势 王昱全</p>
<p>作为王昱全的死粉,继续无条件推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>搜狗输入法的前世今生 王小川</p>
<p>小川是清华学霸,无论讲啥都值得听一下,他好像在混沌还有一门讲进化、复杂的,找不到了,你们遇到了,也一并听一下。推荐指数 ☆☆☆</p>
</li>
<li>
<p>人机大战 王小川</p>
<p>上面刚说完,就翻腾出来。推荐指数 ☆☆☆</p>
</li>
</ul>
<h1 id="哲学课程">哲学课程</h1>
<p>接下来是哲学,哲学可能是对我影响最大的,从古典哲学,到现代哲学,一个历程下来,对西方、对自己、对世界都有了更深的感悟,最开始对现代哲学兴趣不大,后来是刘擎老师引导下,也产生了浓厚的兴趣,理解了现代人之所以是今天的样子有了更深刻的理解。</p>
<h2 id="书"><strong>书</strong></h2>
<ul>
<li>《<a href="https://book.douban.com/subject/35313227/">西方现代思想讲义</a>》,刘擎老师的讲义编纂而成,非常赞</li>
<li>《<a href="https://book.douban.com/subject/1008189/">西方哲学史</a>》 罗素,其实网上推崇梯利的版本,我不小心买错了,翻了翻,也很棒</li>
<li>《<a href="https://book.douban.com/subject/14439405/">哲学的故事</a>》,无意间淘到的书,主要的思想和哲学家都介绍到了</li>
<li>《<a href="https://book.douban.com/subject/1045201/">哲学的慰藉</a>》,资中筠老太太翻译的英伦鬼才的作品,重点介绍了他喜欢的几位哲学家</li>
<li>《<a href="https://book.douban.com/subject/3658068/">大众哲学</a>》已故的艾思奇老先生的作品,据说毛主席也推荐,马列专修</li>
<li>《<a href="https://book.douban.com/subject/1045818/">苏菲的世界</a>》,别笑,我这种哲学小白,其实特别需要这种通俗读本快速得到全貌</li>
</ul>
<h2 id="视频">视频</h2>
<ul>
<li><a href="https://space.bilibili.com/247822643/video">谌洪果系列分享</a>:很佩服的西北大学的“退学老师”</li>
<li><a href="https://www.bilibili.com/video/BV1h5411H754">刘擎老师的《二十世纪西方思想文化潮流》</a></li>
<li><a href="https://space.bilibili.com/457161443">人文Geek</a>:做的很棒的课件视频,偏后现代</li>
<li><a href="https://www.bilibili.com/video/BV1ft411877F">张志伟/西方哲学智慧大学课程</a> :张老师学院派,讲得很好</li>
<li><a href="https://space.bilibili.com/90070513">钱金铎的分享</a>:年轻但是很学术</li>
<li><a href="https://www.bilibili.com/video/BV11t411E7aS?p=12">维特根斯坦专题</a>:偶像大拼盘</li>
<li><a href="https://www.youtube.com/channel/UCE2tB8fPCGoMGAwwBMc7BuQ">OkButSoWhat</a>:油管上的大爱</li>
<li><a href="https://space.bilibili.com/25221249">野鱼姬小MM</a>:哲学系可爱的小MM</li>
<li><a href="https://space.bilibili.com/376872704">潜在狗子</a></li>
<li><a href="https://space.bilibili.com/52398059">micc麦总说哲学</a>:斯坦福的在读哲学博士</li>
<li><a href="https://space.bilibili.com/362588980">汤质看本质</a>:很牛逼,不过后面开始水</li>
<li><a href="https://space.bilibili.com/58617276">回到2049</a>:神神叨叨的神人</li>
<li><a href="https://space.bilibili.com/142128036">犹格索斯泡泡</a>:台湾的一个给高中生做哲学科普的男神老师,很棒</li>
<li><a href="https://space.bilibili.com/375089647">多萝西123</a>:哲学系美女学霸</li>
<li><a href="https://www.bilibili.com/video/av13373871">耶鲁大学哲学公开课</a>,老爷爷讲的非常有激情</li>
<li>王东岳老师的东西方哲学中的西方哲学部分(混沌大学)</li>
<li><a href="https://www.bilibili.com/video/av16804255">【陈亚军】现代英美哲学</a></li>
<li><a href="https://open.163.com/newview/movie/courseintro?newurl=M6GOB7TT6">桑德尔:公正-该如何做是好?</a></li>
<li><a href="https://www.bilibili.com/video/BV1EW411u7JG?p=2">温铁军:新中国十次危机</a>,虽然很左,但是确实讲的非常好,也让我知道了中共驾驭这么大一个国家的基本逻辑。他的另外一个比较简短的讲<a href="https://video.h5.weibo.cn/1034:4575050624335885/4575051222093136">土地革命和中产阶级</a>的,也值得一听。</li>
</ul>
<h2 id="音频"><strong>音频</strong></h2>
<ul>
<li>徐贲老师的看理想app上的《现代的诞生:启蒙运动经典》和《自由的黎明:文艺复兴经典》,还有未来要推出的第三部,非常赞,必须推荐</li>
<li>傅佩荣的西方哲学:喜马拉雅专栏</li>
<li>郁喆隽的复旦哲学课:喜马拉雅专栏</li>
<li>周濂讲西方哲学智慧:喜马拉雅专栏</li>
<li>雷思温哲学闪耀时:豆瓣音频</li>
</ul>
<h1 id="艺术">艺术</h1>
<p>缘起很朴素,就是听到巴洛克、洛可可这些大词不知道啥意思,进而想去了解这些艺术家们的故事,理解这些作品背后的故事,慢慢的就进入了艺术史这个领域,发现了一个新的宝藏。</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV194411t7kS?t=625">西洋美术史</a>,儿子一听就听出来,是台湾版哆啦A梦的配音解说的,非常赞的一个讲西方美术史的动画片,对!动画片!超有爱。可惜被B站和谐的七零八落,可惜了,不过,我还是没有强迫症的刷完了,超赞。</li>
<li><a href="https://www.bilibili.com/video/BV1aj411f7oF?p=1">油画英雄志</a>,胖阿姨的讲解和蔼可亲,娓娓道来,非常适合我这类小白听故事的愿望,不知不觉就跟着阿姨留恋了几百年,对欧洲的油画艺术多了一份了解。</li>
<li><a href="https://www.bilibili.com/video/BV1n7411C7Q5?p=1">湖北大学-西方美术史十六讲</a>,一个慕课课程,很不错,短小精悍,很适合入门。</li>
<li><a href="https://www.bilibili.com/video/BV1xs411q7jZ?p=1">CCTV世界名画·华丽的大师</a>,CCTV做的一个纪录片,相当不错。</li>
<li><a href="https://www.bilibili.com/video/BV1ps411e7CB?p=1">北京大学的朱青生教授《艺术史》</a>,朱青生老师讲的抽象,像在吟诵一首长诗,但是却不浮华,而是直奔本质。</li>
<li><a href="https://www.bilibili.com/video/BV137411H7Gy">西洋美術史 蔣勳蔣勳 Western Art History</a>,蒋勋讲的几个画家故事。</li>
<li><a href="https://www.bilibili.com/video/BV12x411p7SF">张敢-盛期文艺复兴的艺术</a>,清华张敢老师讲的文艺复兴三杰。</li>
<li><a href="https://www.bilibili.com/video/BV1yx411p7at">张敢-文艺复兴美术史</a></li>
<li><a href="https://www.bilibili.com/video/BV1hW411y7cx">张敢-西方现代艺术史</a></li>
<li><a href="https://www.bilibili.com/video/BV1A4411j7g1">孙乃树-西方美术欣赏</a></li>
<li><a href="https://www.bilibili.com/bangumi/play/ep158118/">知名画作解析</a>,虽然是英文的,但是剖析了很多作品细节。</li>
<li><a href="https://www.bilibili.com/video/BV1z4411w7so?t=278">古希腊神话故事</a>,想理解西方绘画,就得理解古希腊神话,这个系列快速带你过一遍这些繁杂的关系和人物,我听完的感觉就是,“宙斯啊!贵圈真乱!”。不过,想了解艺术中的人物,光有古希腊神话人物还不够,还要了解基督的故事,不过这个我得再找时间刷了。</li>
<li><a href="https://www.bilibili.com/video/BV1pt411K7qo?t=497">一节课梳理2000年西方艺术史</a>,小哥还有<a href="https://www.bilibili.com/video/BV1gt411a7UM">极简西方建筑</a>,快餐类的讲解,很不错,谁说快餐就不好吃,我就爱吃垃圾,入门级别最需要这类垃圾食品。</li>
<li><a href="https://www.bilibili.com/video/BV1qt411B7wD">十二分钟带你看完欧洲艺术史</a>,快速入门艺术史的小视频,适合小白。</li>
<li><a href="https://www.bilibili.com/video/BV1nZ4y1K7KW?t=434">世乔与圣智</a>,超喜欢这两个年轻的艺术家和他们的这个频道<a href="https://space.bilibili.com/9349641">卡在树上的艺术家</a>,他们对经典油画的讲解也非常引人入胜。</li>
<li><a href="https://www.bilibili.com/video/BV1zs411N7Cy?t=787">浮世绘和梵高</a>,啊,日本浮世绘还影响过梵高?是的,梵高对浮世绘和日本艺术很神往,</li>
<li><a href="https://www.bilibili.com/video/BV1gb411J7jj">简略中国美术史</a>,bookmark一下。</li>
<li><a href="https://www.bilibili.com/video/BV1jE411d7XU/">葛饰北斋-为画痴狂</a>,浮世绘的代表人物,葛饰北斋,一个影响深远的日本画家,据说梵高就深受其影响,可是,可是他居然是个色情画师!感兴趣的,还可以去看看描写他的动画片<a href="https://movie.douban.com/subject/25872959/">“百日红 百日紅”</a></li>
<li><a href="https://www.bilibili.com/video/BV1KJ411G7Xq/">莫奈一生画的女人</a>,一个凄美的故事,一个幸福的故事,莫奈的一生挚爱。看完这个,还是默默的被感动了。</li>
<li><a href="https://baike.baidu.com/item/%E9%80%8F%E8%A7%86%E6%B3%95/5082388">透视法</a>和<a href="https://baike.baidu.com/item/%E7%81%AD%E7%82%B9/7454736">灭点</a>,马萨乔和乔托开启的西方绘画的开始。</li>
<li><a href="https://www.zyzw.com/">正一艺术</a>,感谢感谢,画作都来自此网站。</li>
<li><a href="http://www.ashoucang.com/">名画油画网</a>,可以方便检索画家和画作。</li>
</ul>
<h1 id="生物">生物</h1>
<p>新冠被圈在家里,无聊至极的时候,就诞生了我的博客《<a href="http://www.piginzoo.com/education/2020/02/21/biology#%E7%A7%91%E6%99%AE%E8%A7%86%E9%A2%91">生物自习课</a>》,也是那时,对生物产生了浓厚的兴趣。</p>
<h2 id="正经的教材">正经的教材</h2>
<ul>
<li><a href="https://space.bilibili.com/326497292">苏苏老师的生物课</a>:这门课就是一个叫苏苏苏的B站UP主上传的课,看其本人就是一枚在读生物研究僧,这门课是讲高中生物的,非常赞,建议对生物感兴趣的同学们,可以从头到尾听一遍,里面有3门课,分别是细胞、遗传和免疫。介老师讲的特别逗,也特别清晰,非常赞的一门课,还时不时地给孩子们灌点有毒鸡汤,非常接地气,一点不觉枯燥。</li>
<li><a href="https://space.bilibili.com/1810010994/video?tid=36&page=8&keyword=&order=pubdate">基础生物学</a>,台湾台北市北一女中生物教师蔡任圃老师,给我们娓娓讲授高中的生物知识。</li>
</ul>
<h2 id="不正经的各种货">不正经的各种货</h2>
<ul>
<li><a href="https://www.bilibili.com/video/av90424787">新冠病毒的自我修养:如何统治全人类</a></li>
<li><a href="https://www.bilibili.com/video/av90277922/">放弃无趣生殖能力的病毒有多恐怖?屠杀一亿人只是下酒菜</a></li>
<li><a href="https://www.bilibili.com/bangumi/play/ep120947">病毒为何致病</a></li>
<li><a href="https://www.bilibili.com/video/av86485441/">各类病毒的对比</a></li>
<li><a href="https://www.bilibili.com/video/av24441778/">噬菌体</a></li>
<li><a href="https://www.bilibili.com/video/av17238727/">杀死超级耐药细菌的病毒</a></li>
<li><a href="https://www.bilibili.com/video/av85329528/">各类病毒纪录片推荐</a></li>
<li><a href="https://www.bilibili.com/video/av86101609/">当你患上冠状病毒后身体会发生什么?</a></li>
<li><a href="https://www.bilibili.com/video/av86450796/">人类为什么无法抵抗艾滋病病毒?</a></li>
<li><a href="https://www.bilibili.com/video/av84647486/">十分钟了解冠状病毒:从SARS到MERS到新型冠状病毒肺炎</a></li>
<li><a href="https://www.bilibili.com/video/av88402765/">新冠病毒基础知识点2.0</a></li>
<li><a href="https://www.bilibili.com/video/av85751585">【鬼谷闲谈】病毒:生于三界之外 不灭六道之中</a></li>
<li><a href="https://www.bilibili.com/video/av88796064">【混乱博物馆】病毒是如何欺骗你的</a></li>
<li><a href="https://www.bilibili.com/video/av39134855/">【纪录片】疫情大爆发</a></li>
<li><a href="https://www.bilibili.com/video/av86975239/">电子显微镜下的 50 幅人体微观世界(太震撼了)</a></li>
<li>回形针:首推的是回形针的这个<a href="https://www.bilibili.com/video/av86216616">关于新冠的一切</a>,讲的通俗易懂,条例很清晰,一如既往的冷静冷酷,把很多细节交代的很清楚,其中计算致死率的算法也帮我改进了了一下我的计算方法。另外,回形针这类科普节目的流行,极大满足了我这种好奇心比较强的人,必须给他们这个团队点赞。</li>
<li>李永乐老师:都是就着那块熟悉的黑板进行,讲的超级清楚,必须要推荐,三个系列:<a href="https://www.bilibili.com/video/av85278764">细菌</a>,给我们讲了细菌的本质,了解了这个,才可以进一步解锁病毒;然后是<a href="https://www.bilibili.com/video/av85537015/">病毒</a>,让我们了解病毒是如何侵入细胞的;最后是<a href="https://www.bilibili.com/video/av87775412/">埃博拉病毒</a>,让我们了解病毒的可怕和防止。</li>
<li>妈咪说:真的高产,一口气就做了6期,关于微生物、病毒和防止的视频,真的是一网打尽啊,和前2个比,妈咪说的清晰易懂一点不输给他们,那么就来挨个看看<a href="https://www.bilibili.com/video/av85949028">微生物</a>、<a href="https://www.bilibili.com/video/av86145995">冠状病毒</a>、<a href="https://www.bilibili.com/video/av86327531">预防传染病</a>、<a href="https://www.bilibili.com/video/av86690346">治疗冠状病毒</a>、<a href="https://www.bilibili.com/video/av86940099">天花和狂犬</a>、<a href="https://www.bilibili.com/video/av87633356">预测拐点</a>。顺道说一下,妈咪说UP大神,是我非常非常喜欢的科学博主,人家主职是数学和物理,其中的复杂科学系列,最近刚刷完,讲的超级赞。</li>
<li>毕导:超逗比的清华帅宅男,也贡献了2篇:<a href="https://www.bilibili.com/video/av88290870">科学家光写论文不抗疫情?几分钟带你看完新冠病毒的所有论文</a>,和<a href="https://www.bilibili.com/video/av85508117">病毒传播感染模型</a>。</li>
<li>回到2049:人不大,老气横秋的2049,也贡献了几篇:<a href="https://www.bilibili.com/video/av87412001">关于冠状病毒</a>,<a href="https://www.bilibili.com/video/av53405479/">人体卫士:免疫力与免疫系统</a>,<a href="https://www.bilibili.com/video/av87184109">瘟疫公司:传染病的特征、传播与防控</a></li>
<li>张文宏教授:良心教授,专业教授,这次疫情让我们认识了他:<a href="https://www.bilibili.com/video/av85813934/">华山医院张文宏医生科普传染病知识</a>,<a href="https://www.bilibili.com/video/av91240513/">张文宏主任为你讲解新冠肺炎是怎么回事</a> 。</li>
<li>果壳网也贡献了一系列的科普:<a href="https://www.bilibili.com/video/av93911120">一个重症患者从感染新冠病毒到发病的全过程</a> 、<a href="https://www.bilibili.com/video/av88875660">成功治愈一名新冠肺炎患者的ECMO是如何工作的</a>、<a href="https://www.bilibili.com/video/av90998967">100年前伦敦的梦魇-霍乱,教会了人类什么?</a>、<a href="https://www.bilibili.com/video/av87566471">冠状病毒是如何通过粪便传播的</a>、<a href="https://www.bilibili.com/video/av87143201">猫狗是否会传染新型冠状病毒?</a>、<a href="https://www.bilibili.com/video/av91656267">人类很少关心野生动物的命运,直到病毒把我们连在一起</a>。</li>
<li>还有思维实验室,也提供了一系列的内容:<a href="https://www.bilibili.com/video/av93125552">你的免疫系统可能会杀死你!细胞炎症因子风暴!</a>、<a href="https://www.bilibili.com/video/av86052908">新型冠状病毒有多狡猾?</a>、<a href="https://www.bilibili.com/video/av82284089">2000亿细菌在你那里做什么?居然在保护你</a>、<a href="https://www.bilibili.com/video/av79261306">历史上传染病有多可怕?了解下当年的疫情黑死病</a>。</li>
<li>还有一些纪录片,很赞,但是涉及到版权,只贴个名字,大家自行百度吧:</li>
</ul>
<p><img src="/images/20210608/1623135164613.jpg" alt="" class="myimg33" /></p>
<ul>
<li>最值得推荐的是一部BBC的讲细胞和病毒的纪录片《人体的奥秘之细胞的暗战》,大片的既视感,讲的很生动,好在B站上有链接,我贴两个:<a href="https://www.bilibili.com/video/av89127540/">1</a>,<a href="https://www.bilibili.com/video/av35509402/">2</a>,<a href="https://www.bilibili.com/bangumi/play/ep119619">3</a></li>
</ul>
<h2 id="学习本身">学习本身</h2>
<ul>
<li><a href="http://vancexu.github.io/2015/01/08/learning-how-to-learn-part-one.html">Learning How to Learn</a>,著名的的Dr. Barbara Oakley 教授,著有课程同名书籍:《Learning How to Learn ——How to Succeed in School Without Spending All Your Time Studying; A Guide for Kids and Teens》 2018年8月出版,她也是《学习之道》一书的作者。 她小学到高中数理成绩一路垫底,因此热爱文学。职场生活,不得不学习大量新鲜知识,甚至是头疼的数学知识。放下工作,回到学校,竟然学成了工程学博士,后留任教授。在MOOC、Coursera上开创最受欢迎的学习课“learning how to learn”,数十万人报名。<a href="https://www.bilibili.com/video/BV1NW411C7d8?p=1">B站的链接</a>,有中文字幕,不过比较老。<a href="https://study.163.com/course/courseMain.htm?courseId=1005319012">网易公开课上的链接</a>,</li>
<li><a href="https://www.bilibili.com/video/BV1rE411s7Gt">掌握学习本质</a>,核聚的高效学习的训练营。</li>
<li>洪兰教授在混沌大学讲授的<a href="https://www.bilibili.com/video/BV1CK4y1t72p?p=1">认知心理学</a>,洪兰教授是台湾中央大学认知神经科学研究所所长,她讲述了很多关于脑科学和认知的知识,了解这些知识,也有利于我们更好地让我们的学习方法更符合认知规律。</li>
<li><a href="https://www.bilibili.com/video/BV1cA411Y73k">学会如何学习</a>,B站的axtoliu UP主的分享,言简意赅的总结了Barbara Oakley 教授的学习之道内容。</li>
<li><a href="https://www.bilibili.com/video/av37126621">如何提高学习效率?</a></li>
<li><a href="https://www.bilibili.com/video/av88910392">费曼学习法</a>:学完,去讲给别人。</li>
<li><a href="https://www.bilibili.com/video/av77295377">费曼的超级阅读法</a>:从开始读直到能读下去</li>
<li><a href="https://www.bilibili.com/video/av70998909">为什么费曼学习法被称为终极学习法</a>:一个搞神经网络的大神,他的学习观系列超赞</li>
<li><a href="https://www.bilibili.com/video/BV1fC4y1W767">从学渣到博士:一个学习方法改变我的命运,自创2.0版费曼学习法</a>,他除了讲授费曼的要点外,还提到了费曼学习法在英语学习中的要点。</li>
<li><a href="https://space.bilibili.com/434346657/channel/detail?cid=113847">北大学霸讲高效学习</a>,请了18位北京大学的在读学霸们,分享他们的高考和学习经验。</li>
<li><a href="https://www.bilibili.com/video/BV1164y1T7VD/">如何成为一个很厉害的人?</a>,大致和第一性原理的概念差不多,克服惯性思维,转换思维模式。</li>
<li><a href="https://www.bilibili.com/video/BV1CK4y1t72p">认知心理学(全14讲)</a>,台湾的老阿姨在混沌的分享,讲了很多认知方面、心理学层面的知识。</li>
</ul>
中美的经济比较
2021-06-08T00:00:00+08:00
https://www.piginzoo.com/life/2021/06/08/cn-usa-compare
<h1 id="序">序</h1>
<p>这篇博客是自己好奇心驱使下做的一个数字调研,可能条理比较乱,也懒得再优化了,主要那几张表,可以看出很多对比信息。</p>
<p>主要是想了解了解中美在公务员、税收使用情况、国企的情况、财政、融资等方面的对比。</p>
<h1 id="公务员调研">公务员调研</h1>
<p>参考:<a href="http://stock.tianyancha.com/ResearchReport/eastmoney/5df496c6674187967bef538277c66e87.pdf">数据分析:中国可能还需要更多公务员——公务员体系&结构量化分析 </a></p>
<p>①“狭义公务员”口径,即国家公布的在编公务员人数,约 700 多万人(2016 年),</p>
<p>②“广义公务员”口径,可以理解为含在编和非在编的公务员人数,用的是国家统计局的“城镇非私营单位就业人员数:公共管理和社会组织”这一指标,约 1800 多万人(2018 年),</p>
<p>③“广义国家财政供养人员”口径,我们采用的是“广义公务员”加上事业单位在编人员数(测算值),约 5100 多万人(2018 年)。</p>
<h2 id="美国">美国</h2>
<p>美国人口3.2亿</p>
<p>美国2017年统计,2232万公务员,如果刨除医院、教师、交通1296人,狭义的是936万左右。</p>
<p>美国的人数中,单单公立学校的教师,就占了总人数的 61%</p>
<p>中国方面,首先教师肯定是不包括在公务员范围内的吧?</p>
<p>美国老师人数:150万</p>
<blockquote>
<p>美国高等教育(这包括社区学院、学院和大学)的教师共有24万2780人,这些大学教师的中位(mean)年收入为7万1320美元。小学教师共有17万4530人,他们的中位(mean)年收入为4万9770美元。高中教师共有109万490人,他们的中位(mean)年收入为5万4390美元。</p>
</blockquote>
<h2 id="中国">中国</h2>
<p>中国人口14亿</p>
<p>国企员工:国有企业总职工数3698.4万人(包含央企职工人数1240余万人)</p>
<p>公务员:是5000万(包含在编的700万,和事业单位)</p>
<p>医生:1200万(2020年,全国卫生计生人员总量达到1255万人,全科医生达到30万人以上)</p>
<p>老师:1500万(幼儿园258万,小学609万,初中363万,高中181万,高效167万)</p>
<hr />
<p>合计:1.1亿,8%,吃皇粮的</p>
<p>中国就业人口:将近8个亿(中国的就业人数在12-01-2019达774,710,000.000人)</p>
<p>这个和我计算的差不多,14亿人,20岁以下,60岁以上,都无法工作,人平均活到70岁,那么可以就业人口大概是4/7,14亿*4/7 = 8亿。</p>
<p>中国的就业人口(8亿)</p>
<p>国企:4000万</p>
<p>公务员:5000万(4000万事业+700万编制)</p>
<p>小微企业:2.2亿人</p>
<p>大型企业:0.55亿</p>
<p>医生教师:3000万</p>
<p>个体户:8000万</p>
<p>农名工:2.8亿</p>
<hr />
<p>合计:7.55亿</p>
<blockquote>
<p>截止2.26号,根据工信部公布的数据:8000万个体户,2亿就业,开不了张,也就是2亿未复工;1800万中小微企业,99.8%的法人占比,80%的就业人口,2.2亿人,复工率33%,大概有1.5亿人未复工;剩下的就是大型企业了,0.55亿,没有数据,按照40%计算,大概有0.33未复工。</p>
</blockquote>
<blockquote>
<p>所以,未复工人数合计3.5亿左右,复工人数1亿复工,大致这个情况。全部就业人口4.5亿人口。</p>
</blockquote>
<blockquote>
<p>中国在职公务员是700多万,加4000多万的事业单位编制人员,总数接近5000万。(对比美国共有2183万公务员)。</p>
</blockquote>
<blockquote>
<p>国有企业总职工数3698.4万人,其他民营、外企大型企业在2000万人左右。</p>
</blockquote>
<blockquote>
<p>百度查得劳动力人口是9亿。剩下的4亿(除去中小企业,大型企业,机关事业)在哪里?有2.3亿是农名工,剩下的1.7亿应该农村农业劳动力,
2018年我国在城镇就业的农民工总量已经达到2.88亿人</p>
</blockquote>
<h2 id="中美比较">中美比较</h2>
<p><img src="/images/20210608/1623135694525.jpg" alt="" class="myimg100" /></p>
<blockquote>
<p>美国是西方发达国家中存在国有化企业最早的国家之一,但其国有企业在美国经济中是微不足道的,国有企业资产和就业人数仅占全国总人数的1%左右。一些高新技术领域的新兴部门,在私人资本能力不足和政府不愿意承担全部风险的情况下,混合型企业正在成为今后的一种发展形式。 德国国有企业在国民生产总值中的比重为17%,英国国有企业固定资产占全国固定资产的20%多,美国国有企业国民收入仅占整个国民收入的1.2%</p>
</blockquote>
<blockquote>
<p>截至2017年9月底,我国在册私营企业2607.29万户,注册资本165.38万亿元,分别占企业总量的89.7%和60.3%。</p>
</blockquote>
<blockquote>
<p>民企,数量众多,以中小微特企业为代表,占国家经济总规模的一半以上;国企,多是大型、重型、巨型企业,体量庞大,以直属国资委的98家中央企业为代表。</p>
</blockquote>
<blockquote>
<p><strong>看数量和体量</strong>,中小微企业数量庞大,占据全国企业数量的99%,约7000余万户中小微企业对我国的GDP贡献达到60%以上。而98家央企创造的营收对全国GDP的贡献比例达到了32%。截止2017年,中小微企业就业人数已经占中国就业岗位的80%,而央企职工人数1240余万人,约占全国就业岗位的1.6%。</p>
</blockquote>
<h1 id="国企情况">国企情况</h1>
<p>2019 GDP:100万亿</p>
<p>[2019全国税收17万亿]</p>
<p><img src="/images/20210608/1623135732510.jpg" alt="" class="myimg100" /></p>
<p>国企数量:2500万人,15万家(10万地方、5万家中央国企)</p>
<p>央企数量:97家,1200万人,</p>
<p>中小微企业数量庞大,占据全国企业数量的99%,约7000余万户中小微企业对我国的GDP贡献达到60%以上。而98家央企创造的营收对全国GDP的贡献比例达到了32%。截止2017年,中小微企业就业人数已经占中国就业岗位的80%,而央企职工人数1240余万人,约占全国就业岗位的1.6%。</p>
<p>截至2017年9月底,我国在册私营企业2607.29万户,注册资本165.38万亿元,分别占企业总量的89.7%和60.3%。</p>
<p>参考:</p>
<p><a href="https://zhuanlan.zhihu.com/p/138181140">知乎:上市公司国企数量分析</a></p>
<ul>
<li>前两个交易所共有上市公司3833个(包括部分已经暂停交易的公司)</li>
<li>其中国有企业共计1167个,占比30.45%</li>
<li>上交所中国企680个,深交所487个</li>
<li>两市国企中,央企国资控股407家,地方国资控股324家,省属国资控股419家,其他国有17家</li>
</ul>
<p><a href="https://business.sohu.com/s2015/others1195/index.shtml">央企合并潮是历史倒退</a></p>
<p>15万家国有企业,其中10万家地方国企,5万家中央国企</p>
<p>总从业人员近4000万,其中央企占了近2000万,总资产148万亿,产值占GDP的30%。在行业分布上,国有企业几乎涵盖了中国所有行业,2013年中央企业全年总利润约1.3万亿。</p>
<p><a href="http://www.npc.gov.cn/npc/c30834/202010/92861cc1660044d0b4c1511083bab902.shtml">国务院关于2019年度国资系统监管企业国有资产管理情况的专项报告</a></p>
<p>截至2019年底,国资系统企业共1.3万家(包括中央企业97家,省级企业990家,地市及区县级企业12294家),各级子企业16.7万户,资产总额201.3万亿元、所有者权益66.8万亿元、国有资本权益47.9万亿元。其中,国务院国资委监管的中央企业资产总额63.4万亿元、所有者权益22.2万亿元、国有资本权益13万亿元;</p>
<p>2019年,国资系统企业实现营业总收入59.1万亿元、利润总额3.6万亿元,较2012年分别增长55.3%、78.8%,实现增加值12.6万亿元,占当年国内生产总值(GDP)的12.8%。</p>
<p>其中,中央企业实现营业总收入31万亿元、利润总额1.9万亿元,较2012年分别增长38.8%、46.9%。</p>
<p>2019年,国资系统企业营业收入利润率5.9%,较2012年提高1.6个百分点;全员劳动生产率40.3万元/人,较2012年增长45.4%。其中,中央企业营业收入利润率6.1%,较2012年提高1.1个百分点;全员劳动生产率56.3万元/人,较2012年增长47.3%。</p>
<p>2012—2019年,国资系统企业上交税费25.9万亿元,约占同期全国税费收入的1/4。中央企业上交国有资本收益6618亿元,向社保基金划转国有资本1.1万亿元、占中央层面划转总额的80%以上。二是带头降低社会运行成本。落实提速降费、降电价等政策,2019年有关中央企业降费让利超过5000亿元。</p>
<p><a href="http://www.sasac.gov.cn/n16582853/n16582888/c17476557/content.html">2020年1-12月全国国有及国有控股企业经济运行情况</a></p>
<p>1-12月,营业总收入632867.7亿元,同比增长2.1%,较1-11月提高1.3个百分点,其中中央企业353285.6亿元,同比下降1.9%,地方国有企业279582.1亿元,同比增长7.5%。</p>
<p>。1-12月,应交税费46111.3亿元,同比增长0.2%,其中中央企业32088.5亿元,同比下降0.8%,地方国有企业14022.8亿元,同比增长2.4%。</p>
<p>外企情况:<a href="http://images.mofcom.gov.cn/wzs/202008/20200819101923422.pdf">中国外商投资报告2019</a></p>
<h1 id="中美财政收入比较">中美财政收入比较</h1>
<p><img src="/images/20210608/1623135766885.jpg" alt="" class="myimg100" /></p>
<p>2019年中国的财政收入占GDP比例为28.14%,比美国的约32.66低了4.5个百分点。</p>
<p>参考:<a href="https://www.sohu.com/a/375026050_100110525">谁的比例更高?2019年中国、美国的财政总收入、GDP对比</a></p>
<h2 id="中国-1">中国</h2>
<p>19万亿 = 9万亿(中央) + 10万亿(地方)= 16万亿(税收)+ 3万亿(非税收)</p>
<blockquote>
<p>2019年,全国一般公共预算收入190382亿元,同比增长3.8%。其中,中央一般公共预算收入89305亿元,同比增长4.5%;地方一般公共预算本级收入101077亿元,同比增长3.2%。全国税收收入157992亿元,同比增长1%;非税收入32390亿元,同比增长20.2%。</p>
</blockquote>
<blockquote>
<p>2019年<strong>全国政府性基金预算收入为84516亿元</strong>(这里面就包括土地出让金,就是卖地收入),还有<strong>国有资本经营预算收入为3960亿元</strong>(同比增长36.3%,可以简单理解成国企上交的利润)。</p>
</blockquote>
<blockquote>
<p><strong>三者合计达到了278858亿元人民币</strong>,按照上年的平均汇率折算约为4.04万亿美元,约为同期美国财政总收入的57.7%——同期,中国的GDP接近100万亿元人民币,约为14.36万亿美元,是美国GDP总量的67%。</p>
</blockquote>
<p>增值征税 62346 33.1%
消费税 12562 6.7%
企业所得税 37300 19.8%
个人所得税 10388 5.5%
进口税 15812 8.4%
出口税 16503 8.8%
城市维护费 4821 2.6%
车船购置税 3498 1.9%
印花税 2463 1.3%
资源税 1822 1.0%
契税 6213 3.3%
土地增值税 6465 3.4%
房产税 2988 1.6%
耕地占用税 1390 0.7%
城镇土地使用税 2195 1.2%
环境保护税 221 0.1%
其他 1121 0.6%
合计 188108</p>
<h2 id="美国-1">美国</h2>
<p>2020财年为例,美国政府财政总收入(包括联邦,州和地方)预算为7.34万亿美元。</p>
<p>美国联邦政府的财政收入预算为3.71万亿美元,约为美国各级政府总收入的50.5%;各个州政府的财政收入预算为2.1万亿美元,占比约为28.6%;其他各级地方政府的预算为1.54万亿美元,占比21%。</p>
<p>美国财政收入约为其GDP的33%</p>
<p>大约2.6万亿美元来自“Income Taxes(所得税)”,占比35.4%。指的是“按自然人、公司或者法人的收入征税”,比如发工资了,得缴纳个人所得税。</p>
<p>约1.9万亿美元的收入来自“Social Insurance Taxes (社会保险税 )”,占美国总是收入的比例为25.9%。指的是:由雇员和雇主分别缴纳,税款主要用于各种社会福利开支的一种目的税,包括但限于FICA税、失业税、伤残税(disability taxes)等。</p>
<p>第三大来源是“Ad valorem Taxes (从价税)”,预计为1.7万亿美元,占比23.2%。依据商品、劳务的价格为征税依据,比如营业税、房产税、销售税等。其他税种不再一一介绍,总之美国政府的总收入远超其他国家。</p>
<h1 id="中美社会融资情况">中美社会融资情况</h1>
<h2 id="中国-2">中国</h2>
<p>截至2020年9月末,直接融资存量达到79.8万亿元,约占社会融资规模存量的29%</p>
<p>我国融资结构长期以间接融资为主,信贷资产在金融总资产中的比重超过70%</p>
<p>截至今年3月3日,资本市场股权融资规模超过1.9万亿元(包括A股IPO融资5224.56亿元、再融资1.37万亿元和新三板股票融资超398.04亿元),公司债发行规模3.82万亿元,资本市场直接融资规模超5.72万亿元。</p>
<h2 id="美国-2">美国</h2>
<p>美国是典型的直接融资比重为主的国家,金融市场高度发达,资本化率高,直接
融资比重达到了78%。传统意义上的“银行主导型”国家,如日本等直接融资比
重也都超过了40%。中国直接融资比例为31%,在世界范围内处于偏低水平。总
体而言,直接融资比重和经济发展水平高度正相关,随着经济发展水平越来越
高,金融结构的演进会逐步偏向直接融资而降低间接融资的比重,是一个世界性
的结构变迁趋势</p>
<h2 id="融资比例对比">融资比例对比</h2>
<p><img src="/images/20210608/1623135795216.jpg" alt="" class="myimg100" /></p>
<p>参考:<a href="https://pdf.dfcfw.com/pdf/H3_AP202009251417340871_1.pdf?1601061080000.pdf">从扩大直接融资规模看券商发展机遇——兼谈券商行业投资机会</a></p>
<h1 id="养老金调研">养老金调研</h1>
<h2 id="参考">参考</h2>
<p><a href="https://www.dw.com/zh/%E6%8A%A5%E5%91%8A%E4%B8%AD%E5%9B%BD%E5%85%BB%E8%80%81%E9%87%91%E5%9D%90%E5%90%83%E5%B1%B1%E7%A9%BA-2035%E5%B9%B4%E7%BB%93%E4%BD%99%E8%80%97%E5%B0%BD/a-48312855">报告中国养老金坐吃山空-2035年结余耗尽</a></p>
<p><a href="https://finance.sina.cn/2020-01-05/detail-iihnzahk2022355.d.html">中国财政报告2019:谁来给我们养老?</a></p>
<p><a href="https://www.yicai.com/news/100132457.html">四年翻一倍,2019年财政拟补贴社保2万亿,2019年两会</a> 2019年财政拟补贴社保2万亿</p>
<blockquote>
<p>养老保险在社保体系中占比约70%,实际盈余连年为负值。2018年度五项社会保险基金收入合计为79003亿元,基金支出合计为67381亿元,其中,基本养老保险基金收入为54835亿元,基本养老保险基金支出为47187亿元,收支占比均在70%左右;其次基本医疗保险收入和支出分别为21326亿元和17794亿元,收支均占社保比重27%左右。 养老金缺口突出,2018年实际盈余达-4504亿元。据财政部公布的社保决算,2018年企业职工、城乡居民和机关事业单位养老金收入分别为37521、3870和13445亿元,支出分别为31567、2938和12681亿元,剔除财政补贴后的实际盈余分别为598、-1844和-3258亿元。养老保险合计实际盈余从2015年的-1731亿元到2018年的-4504亿元,持续为负值,2018年养老保险金缺口占社保基金缺口的74.7%。</p>
</blockquote>
<p>从2015年的上万亿到2019年的近2万亿,各级财政对全国社会保险基金的补贴仅用四年的时间就翻了一倍。</p>
<p>2019-2050年全国城镇企业职工基本养老保险基金当期结余在勉强维持几年的正数后便开始加速跳水,赤字规模越来越大。具体来看,2019年当期结余总额为1062.9亿元,短暂地增长到2022年,然后从2023年便开始下降,到2028年当期结余首次出现负数-1181.3亿元,最终到2050年当期结余坠落到-11.28万亿元。</p>
<p>2018年全国社会保险基金收支结余11622亿元,剔除财政补贴后的实际盈余为-6033亿元,连续6年为负。养老保险在社保体系中占比70%,实际盈余同样连续6年为负。基本养老保险基金收入和支出占社保基金比重均在70%左右,2018年养老保险基金实际盈余为-4504亿元。</p>
<p>2019年社会保险基金预算收入预计和支出安排,汇总中央和地方预算,全国社会保险基金收入79677.54亿元,增长9.7%,其中,保险费收入56993.73亿元,财政补贴收入19468.96亿元。全国社会保险基金支出74252.29亿元,增长15%。本年收支结余5425.25亿元,年末滚存结余91762.38亿元。</p>
<h2 id="结论">结论</h2>
<p>2019财政收入是19万亿,中央是9万亿,地方是10万亿,其中国税是16万亿,非税收是3万亿,国企收入多少呢?4000亿,其中国有企业1600亿,地方国企2400亿,所以他们根本补不起这个窟窿。</p>
<p>社保支出一年7.4万亿,收入差不多也是这个数,但是收支平衡只能维持到2023年,然后就开始赤字,2050年赤字是-11万亿。2015年开始补贴,1万亿,到2019,已经补贴到2万亿了。</p>
<p>所以就可以理解为何延迟退休,而且也要明白未来不能指望政府养老,除非卖国企,国企的收入也是养活不了我们的,得提早为自己的养老做准备。</p>
西方现代思想笔记
2021-03-14T00:00:00+08:00
https://www.piginzoo.com/education/2021/03/14/west-thought
<h1 id="前言">前言</h1>
<p>终于,刷完了<a href="https://www.bilibili.com/video/BV1h5411H754">刘擎老师的课</a>,不过瘾,又去买了刘老师的<a href="https://book.douban.com/subject/35313227/">西方现代思想讲义</a>,一个周末就读完了,过瘾!但是,要真正的理解和记住这么多思想和思想家,最好的办法还是写一篇博客、做一次讲座,所以,就坐下来,把自己所学所思写下来,留给自己回味。</p>
<p>自从启蒙运动、文艺复兴和工业革命以来,人类发生了翻天覆地的变化,科技的力量改变了整个世界和我们每个人。我曾经一度就是这种科技力量的崇拜者,是一个标准的“理工男”。但是,隐约当中,总是觉得貌似还是很多问题是无法靠科学可以解决的,在我脑海中其实存在很多很多问题:</p>
<ul>
<li>为什么人们观念上差别这么大,为什么谁也无法说服别人?</li>
<li>自由究竟是什么?自由主义是好还是坏?为何我认为自由是人的天性,而有人就是觉得集体、国家的利益是凌驾在自由至上的?</li>
<li>挣钱为何成了每个人的宿命般的命运,仿佛我们活着就是为了挣钱</li>
<li>为何每个人都在疯狂的刷抖音、看综艺,他们难道不觉得无聊么?他们为什么变得如此容易被操控?</li>
<li>西方这套东西究竟是怎么来的?比如宪政、自由民主的观念?
…..</li>
</ul>
<p>这些困惑,恰恰就是现代思想这门课里探讨的东西。</p>
<h1 id="韦伯">韦伯</h1>
<p>韦伯,是第一个全面性反思现代性的学者,过去我们都是推崇理性主义,特别是科学理性主义,在我们眼里,科技的发展就是进步,进步有错么?进步不好么?韦伯恰恰对理性、科学是进步的这个观点提出了质疑。“认为科学是通向幸福之路,是一种天真的乐观主义”。科学无法回答我们,什么是“幸福”。</p>
<p>韦伯有四个观点:<strong>“世界的祛魅”、“诸神之争”、“现代的铁笼”、“工具理性”</strong>。</p>
<p>我挨个说说这几个观点:</p>
<p><strong>祛魅</strong>,就是去除神秘性,世界的神秘性没了,为何?因为科技的发展,过去那些神秘的现象都得到了解释,人们不再相信神话、迷信。然后,接下来,这股理性风,就刮到了宗教,人们开始质疑宗教的合理性,直到尼采喊出“上帝死了”!人们彻底的不再相信什么了。科学,使人们从古代的神秘中清醒,甚至抛弃了宗教,可是,接下来就是,我们还有什么可以信仰的东西么?</p>
<p>好吧,你说,你可以信仰各种价值观。当今这个世界,价值观已经多元化,所以,就引出了韦伯的第二个观点,<strong>“诸神之争”</strong>,“诸神”就是指的各种各样的价值观念,他们之间的冲突,就如同诸神之争一般,喋喋不休、永不停歇。科学,有客观的评价标准,但价值呢?没有标准。所以,这场诸神之争,注定了永无停息之日。</p>
<p>多元化,让我们每个人都倍感困扰,“我喜欢”,这3个字充满了善变,我们每个人在这场选择中,动摇、困惑和焦虑,这正是现代人的精神特质。</p>
<p>而真理也没有越辩越明,而是越来越割裂,世界被价值多元化,割裂成一个个封闭的社群,君不见美国大选中选民的割裂,还是微博知乎上各种口伐笔诛的愤怒,都是多元化带给我们的后果。</p>
<p>韦伯提出了<strong>“工具理性”</strong>的概念,它关注于<strong>手段</strong>,追求最高的效率、最优的方法,关注成本收益,他是确定的,也正因为确定和有标准答案,人们容易在工具理性上达成一致;与之对应的是“价值理性”,他关注<strong>目的</strong>,没有一个标准的答案,很难让人们统一成一种认知。而工具理性,在现代的社会,已经压倒性的打败了价值理性。我们现在社会、各国政府、各类机构、各种公司,都充满了工具理性,追求效率,追求规范。诚然,正是因为有了这个庞大的理性编织的体系,我们的生活才可以物质丰富、极大便利,但是,这个系统的副作用也逐渐显现出来。人在这个系统当中,成为指标、成为资源,成为KPI,我们每个人,都在这个高速运转的系统中,被“异化”,被“非人化”,我们每个人,都在努力成为一个合格的、优质的零件,去迎合这个系统。你肯定能明白我描述的这个充满了996、KPI、“有规定…”的这个世界,没人关心你的心灵、你的苦闷、你的焦虑、你的精神诉求。韦伯说:“专家没有灵魂”!</p>
<h2 id="关于信仰">关于信仰</h2>
<p>我们做事都是要有目的的,而目的背后有更大的目的,这个目的不断地递归下去,便是你的人生信仰或者说是“人活着是为了什么?”。即使你不想这么累的问题,那么“死亡”和“贪欲”还是时时困扰着你,我们总会面对亲人死亡或者自己面临死亡前深刻的悲凉,总会被欲望控制时产生的对自己的失望和羞耻感,都时时让我们感觉到生命的卑微。而信仰,让我们相信可以实现对生命的超越,帮助我们面对死亡的恐惧,为我们提供克服欲望的崇高感。“信仰是心灵的故乡,让生命的意义找到寄托”。</p>
<p>信仰就是韦伯所说的价值理性范畴的东西,你用工具理性、用事实判断标准,去评判信仰根本行不通,“信仰和真理之间存在一个逻辑断裂”,克尔凯郭尔因为理性和推理无法求证信仰困扰一生,最后他的结论是,“你不得不纵身一跃,才可能超越这道鸿沟,这完全是一场冒险,我们不知道这纵身一跃是抵达拯救的彼岸,还是彻底跌入虚空的深渊”。</p>
<p>而作为现代的人的我们,没有信仰,我们是一群心灵无处安放的孤独的灵魂,这种困境,就是“现代人的精神危机”。</p>
<h1 id="尼采">尼采</h1>
<p>前面提到过尼采,尼采说<strong>“上帝死了”</strong>,他不是反基督,他想表达的,逻辑上和韦伯是一致的。也就是,理性主义,让我们质疑了宗教,我们选择了不去做郭尔凯郭尔的“纵身一跃”,是我们自己,用工具理性,杀死了“上帝”。</p>
<p>否定了上帝,信仰的大厦轰然倒塌,生命找不到意义,人们陷入了虚无主义当中。</p>
<p>上帝是宗教的范畴,你以为尼采让我们在信仰上崩塌而已么?他更无情、更彻底地否定了西方哲学的那些根基,也就是<strong>“形而上”</strong>的信念体系,在我看来,这种形而上的观念,正是理性主义的灵魂:表象世界背后有一个本质世界、世界充满了目的性、世界背后具备统一性。</p>
<p>得!尼采连这都给否定了,他说,这个形而上哲学家门的编造,编造这些虚假的思想来安抚人的脆弱的心灵,从而缓解我们遭遇挫败的痛苦、无力和卑微,但是,尼采血淋淋的告诉我们,欲望是真实的,我们的痛苦是无可避免的,我们应该“直面惨淡的人生”,去追寻诚实的英雄主义。</p>
<p>尼采说,人生本来就没有什么客观上的意义,所有的意义都是人为制造和赋予的,形而上学的哲学家们发明出各种概率、真理、信仰,来掩盖“人生本来虚无”的真相,让我们陷入一种确定性的幻觉,在这种确定性幻觉中,得到慰藉。</p>
<p>那你说了,人生如果就是这么虚无,那活着还有什么意义?死了算了!</p>
<p>尼采给出的结论是,这种虚空,反倒给你最广阔的创造自我意义的空间,就像西西佛斯勇敢、无为的推动巨石,用无尽的抗争,去对抗虚无。成为“超人”,成为自己的主人,用自己生命的意志力去创造,去书写,去给虚无的人生,赋予意义。</p>
<p>从虚无,瞬间又变为超人,如同过山车般的刺激,可是,尼采埋下了一个危险的地雷,每个人都是自己创造和赋予意义,那么,我们还有什么共同的视角么?我们不是一个人生活在这个世界上,我们该如何别人相处?</p>
<h2 id="欲望不再羞耻">欲望不再羞耻</h2>
<p>佛洛依德是尼采的fans,他推崇尼采的生命意志,认为潜意识里隐藏着人的欲望本能,这种欲望本能是积极的、是不应该被压抑的、被抹杀的,是应该被解放的。这种释放欲望的人性观念,我们现在已经完全接受了。</p>
<p>我们现在在电影、文学、绘画、音乐诸多艺术领域,可以看到很多表达本能欲望的作品;在社会上,我们也会毫无顾忌的宣称自己是个“吃货”,表现出自己“性感”,公开的谈论欲望、表达欲望,这种观念的变化至今都在塑造我们的精神世界和道德生活。</p>
<h1 id="萨特">萨特</h1>
<p>前面我们说了尼采的<strong>“虚无”</strong>,是世界和意义的虚无;而萨特,是面对个人的虚无,推出了<strong>“自由”</strong>。</p>
<p>他认为,人之所以为人,是因为我们有意识,而意识本身就是一种虚空,所以,反推出,人本身存在本身和意识一样,都是虚空。有点玩概念哈,在我理解,大致就是和笛卡尔的“我思故我在”一样,就是想强调,存在就是意识,意识就是虚无,存在就是虚无。</p>
<p>这个逻辑概念我们不玩了,我更感兴趣的是他的推论,既然人的存在根本上就是虚无,就像一张白纸(是哈,我们生下来就是一张白纸),所以我们是自由的,我们就可以给我们这个虚无不断地赋予意义,萨特把我们的存在,叫做一种“自为”的存在,我们自己可以给自己的存在赋予意义和本质。</p>
<p><strong>人被判定为自由</strong></p>
<p>我们每个人都是自为的存在,我们要去为自己寻找本质,我们有无限的可能性,我们永远不会<strong>“是”</strong>什么,而是永远都在<strong>“成为”</strong>什么。人是被判定为自由,自由是人的命运,人的唯一不自由就是不能摆脱自由,无论是受到多少限制,你是多么渺小,你从根本上都是自由的。</p>
<p>萨特说的自由,不是为所欲为的自由,而是总是可以改变现状的自由,是否定了那种“我天生如此、我别无选择”的自由。</p>
<p>如果说尼采的自由,还有一些悲观色彩,是为了对抗无意义;那么萨特其实是一种积极的自由,是天生就赋予给你的东西,其实,更像我们每个人内心里的感受,至少我是这样,总是觉得自己就是天生自由的,是不受任何人约束和影响的。</p>
<p>但是,你不觉得,这种自由有被滥用的后果么?</p>
<p>我们为自己立法,我们的标准是自己来确定,我们赋予我们自己无限的可能,可是,任何自由的选择背后,都隐藏着责任和后果,这个在我看来,是自由的代价。</p>
<p>你做出了选择,你就要为自己的选择承担后果。我们选择,背后是因为我们自由的选择了某个标准、价值,这个标准、价值观,依据的都是你自己的想法,这个是受尼采的影响,尼采告诉我们“上帝死了”,上帝死了,一切都被允许了,没有客观标准了,没有外在标准了,你的选择,就是你遵循你自己的生命意志。好吧,你就勇敢地面对这份选择的责任吧。</p>
<p>这就是绝对自由背后沉重的<strong>绝对责任</strong>。</p>
<p><strong>他人即地狱</strong></p>
<p>上面说了,你要为你自己的自由选择承担绝对责任,能不独自承担这一切么?萨特的答案是,“不能”!</p>
<p>前面提过,人天生就拥有对自己的自由,所以人需要维持自己的自由和主体性,而把别人当做客体,人与人之间都在为主体性斗争,因为,获得主体性,才可以维护自己的自由,而失去主体性,沦为客体,就失去了这种自由性。所以,认为们注定要斗争、反抗。</p>
<p>在这点上,萨特是一个悲观主义者,他认为,人和人之间只有永恒的斗争,很难做到相互承认、平等尊重。</p>
<p>人注定是孤独的!</p>
<h1 id="阿伦特">阿伦特</h1>
<p>前面几位哲学家,都是在探讨个人和世界的关系,探讨现代人的精神危机,接下里的几位哲学家,是探讨关于现代社会政治方面的话题。</p>
<p>我们为什么需要政治、权威,个体独立、自由不香么?政治学有个两个假设,“资源匮乏”、“人性自利”,这样人们肯定会为了抢夺资源而相互冲突,人们也会满足自己的利益而去践踏别人,这些都需要一个牛逼的权威来制定一套公共规则,来维持公共秩序。那你说,人们凭什么就愿意被他统治,服服帖帖的呢?在古代,答案是靠暴力,也就是军队、警察等暴力机构,他还是唯一合法的暴力。但是到了近现代社会,前面我们说过了,人们经历了祛魅,经历了对自由的反思,人们不是单单就屈服于暴力了,人们还需要一个被统治的理由,我被你统治,一定是我心甘情愿或者我在某种契约下的,这种国家的现代性,就表现为理性主义构建下的人造之物,对于现代性国家的思考,我们第一位要提到的,就是<strong>“汉娜阿伦特”</strong>。</p>
<p>我们前面在探讨理性主义时候,提到过韦伯对理性主义的反思,他形容现代官僚体系就像一部庞大的机器,每个人都是一个零件,高效运转中,可能逐渐丧失对鲜活生命的同情心和道德感,相信大家在生活中多少都会有所体会,当这种高度技术化的官僚化体系发展到极致,可能就是纳粹那样高效的对犹太人的屠杀,所以,现代社会,要坚守一种不可让步、无条件的道德感就显得尤其重要了。</p>
<p>阿伦特在反思纳粹对犹太人屠杀的过程中,她提出<strong>“平庸之恶”</strong>,她指的是艾希曼这种人,有一种“超乎寻常的浅薄”,一种平庸性,他放弃了思考,丧失了思考,甚至没有特别残暴的动机,只有执行。而对纳粹整体而言,他们为什么要这么灭绝人性的屠杀犹太人?他们甚至不是出于复仇、贪婪、取乐,他们也不考虑犹太人可以被利用的工具性,就是为了屠杀而屠杀,这种对待犹太人的极端做法,都不同于古代那种各种目的的屠杀,这点甚至让人困惑。</p>
<p>阿伦特认为,我们每个人都有可能成为艾希曼,都有可能成为恶的体制中,为虎作伥的一员。我们能如何避免成为这样的一员呢?阿伦特给出的答案是,<strong>“独立判断”</strong>。你需要积极地思考,独立地判断,单单是服从主流规则、公共规则,你也可能会作恶,你可以会变得“依法作恶”。就如同在纳粹德国时期,人们面对的是一个困境,如果你遵纪守法,可能你会犯下极其错误的恶。但是,反过来,你独立思考了,你怎么就能保证你思考的就是对的;你反抗了主流规则,你怎么就保证你就不会犯恶的错误呢。这点上,阿伦特并没有给出一个清晰的答案,她仅给出一些建议,如“忠实于自己,始终保持与自己相处,与自己交谈”,也就是始终过一种自我反思的生活,不断地和自己的内心对话,就如同纳粹下的人们,总是有像她提到的“安东-施密特”,那位解救了无数人生命的德国士兵一样,他给妻子的心中写到“请原谅我,我只是作为一个人类来行事,我不想伤害别人”。独立思考,作为个体,就会承担风险,真诚地去做出自己的独立判断,并为此承担责任,这也是现代社会的公民格外艰巨的道德任务,用思考来恢复我们作为人的存在的本质。</p>
<h1 id="波普">波普</h1>
<p>接下来是波普,我们知道波普,都是来自于他的“科学可悲证伪”的科学理论。但是,他基于此,还引申出批判理性主义,即对“问题的求解”,永远没有终点,所以也没有绝对的、一劳永逸的真理。按照这个逻辑,你永远无法根据一个完美的蓝图,去构建一个完美的社会,乌托邦不存在!</p>
<p>波普对那种改造社会的乌托邦充满质疑,他认为,对企图建构完美社会的理念的追求,往往会导致灾难性的后果。<strong>“缔造人间天堂的企图,结果总是造就人间地狱”</strong>。他批判<strong>“历史决定论”</strong>,所谓历史决定论,就是人们相信历史的发展是一定的规律所决定的,一定会向着某个确定的目标发展,最终会实现它。波普认为,首先我们根本无法发现这个终极规律,原因是根本不存在什么绝对真理;其次,我们的知识的增加其实在动态地改变着这个社会发展的进程,我们发现一个新知识,我们的社会就可能被其完全改变。</p>
<p>波普不是否定了理性主义,而是,要批判绝对真理观,明白理性是有局限性的,警惕科学的自负和决定论的危险。</p>
<h1 id="哈耶克">哈耶克</h1>
<p>哈耶克是著名的经济学学家,他和凯恩斯有一场旷日持久的论战,他同时也是政治理论家。</p>
<p>他的核心观点叫做<strong>“自发秩序”</strong>,对于社会制度,除了人为设计之外,还存在大量的自然而然、自发演化出来的秩序,也就是自发秩序。比如很多社会习俗,行业帮规,不是权力和政府强制介入形成,而是人们或者无数个体的选择过程中,逐渐演化形成的结果。</p>
<p>就如同他推崇的“亚当斯密和大卫休谟代表的苏格兰启蒙运动”,倾向于把理性看做一种怀疑、反省和批判的能力,而不是可以掌控一切的能力。用审慎、批判的态度去质疑主流的理性主义,批判理性可以认识一切、规划一切的独断论,批判<strong>“理性的自负”</strong>。</p>
<p>理性的自负,之所以自负,是因为我们往往很难逃脱一种诱惑,一种试图用理性去解决一切、整体设计的诱惑,这样做,可以帮助我们摆脱对现代社会的高度不确定性的焦虑,但是,这其实是一种幻象,虚幻的期望。我们必须承认,人类的必然无知,理性不能穷尽所有的知识,认识到理性本身的局限性,保持对理性万能的审慎和怀疑。</p>
<p>有些极权主义者往往具备悲天悯人的人道主义情怀,也有非常明智敏锐的理论洞察力,但是却常因为陷入一种乌托邦的幻想,而造成了人间灾难。<strong>通往地狱之路,是用善良的愿望铺成的</strong>。</p>
<p>哈耶克往往被误解他是绝对的自由经济和自由社会的绝对支持者,其实,他并不反对一切计划性的政府行为,他真正反对的是“理性的自负”,是那种妄想能彻底扫除无知的、全知全能的计划方案。不是理性不好,而恰恰是因为理性很好用、很强大,所以更要警惕它被滥用和夸大。</p>
<h1 id="以赛伯林">以赛·伯林</h1>
<p>来自英国的以赛·伯林,是一位出生在俄罗斯的犹太人,但是成长与英国,复杂的背景,让他具备一种他者气质,一种对所在世界的“抽离感”,是一位冷静的局外人。</p>
<p>伯林提出了著名的两种自由的概念,一种是<strong>消极自由</strong>,一种是<strong>积极自由</strong>。</p>
<p>所谓消极自由,就是指,我完全拥有对自己的掌控,我不想作什么就可以不做什么。而,积极自由,就是指,我想做什么就可以做什么。听上去,区别也是不是很大嘛。其实,两者还是有很大的区别的。</p>
<p>消极自由,强调的是一种完全不受<strong>干涉</strong>的自由,即使我什么都不做,我仍然拥有这个权利,因为我的权利就是什么都可以不做。</p>
<p>但是积极自由,只有你去做你才可以实现,或者说,才算是达成了积极自由,你说了,那我选择啥都不干,跟积极自由也不冲突啊。但是,在讨论积极自由的时候,人们总是认为,行动的个体是一个理性自我,与之对比,还存在一个懒惰的、非理性的自我,谈论“积极”二字,就是尽量要让理性的自我,去战胜非理性的自我,达成高级的、积极的目标。</p>
<p>太抽象,举个例子,我本来应该写作业,但是我犯懒,我就不想写,我选择拖着,不写,同时,我还拿起手机玩呀玩。这里,我选择不写,实际上是一种消极自由,虽然在一般人眼里,这是一种消极自由的滥用。同时,因为我没有写,所以,我并没有实现积极的自由。看到这一切,你如果是个爸妈,你肯定气死了,你肯定想敲打着孩子的小脑瓜,告诉他“自律给我自由”。</p>
<p>所以,我们回过去,再看两者的定义:消极自由,就是不受外界的干涉、阻碍;而积极自由,就是要用理性来实现自己的目标。注意噢!是用理性,用好的,积极的方法。</p>
<p>到了这里,你是不是隐约感到一丝不舒服,啥叫“理性”,啥叫“积极”,啥叫“好”?我爸妈用这种“好”来要求我,我可能还会听听,我还能碍于亲情的羁绊,做一做“积极”的事;但是,这个爸妈,如果换成了政府,我就要开始警惕了;那要是这个爸妈换成了极权体制、换成了纳粹,我还应该听他们的,按照他们所谓的“理性”来做事情,甚至去屠杀犹太人么?</p>
<p>你可能会说,我作为父母,也不能看着你天天吃垃圾食品、吸毒、滥交、堕落啊。你是有你的消极自由,但是,那确实会毁了你呀!所以,伯林其实,也不是支持完全的的消极自由,但是,他更偏向于消极自由。他认为,在某些情况下,是需要强制的,牺牲掉一些消极自由,但是,这种牺牲,一定换来的是安全、或者必要的秩序,但是,这些牺牲,绝不是换来什么更高级的自由,或者,一些假大空的概念或者价值,是要非常非常谨慎地做出这个牺牲的。积极自由更容易被滥用,因为,他更容易被赋予一些,高高在上的、抽象的、具有煽动性的概念或者价值,从而让它无限扩张,吞噬掉所有的消极自由,什么是活的自由。20世纪人类所经历的犹太人悲剧,苏联的大清洗,我们的文革浩劫,都是值得警惕的一个个鲜活的案例。</p>
<p>伯林另外一个观点,是“<strong>价值多元论</strong>”。他认为,永远不可能实现价值的一元化,那是一种幻想,因为,统一总让人感觉是完美的,是和谐的,所以,对什么是美好的生活、美好的社会,人们也有一种几乎偏执的执念,想使用一个统一的价值尺度,来构建整个社会。但是,伯林认为这完全是一种幻觉,因为,一旦你产生这种对这种你认为唯一的美好价值的追求的时候,就必然会去否定其他的价值体系。而,这世界上的各种价值观,你又无法去度量,它们之间也无法换算,所以,你就评估它的价值,没有一个尺度,就更导致,你无法统一这些价值观。最终的结果,价值冲突在所难免了。不过,伯林不认为价值是完全主观的,一人一个样,而是,还是可以形成很多共识的价值,每一种价值,都是一些共同性的汇集,而不同价值观里,也包含了一些共同性,这也为多元价值之间的沟通提供了可能性。</p>
<h1 id="马尔库塞">马尔库塞</h1>
<p>接下来,左派之父,马尔库塞登场啦。</p>
<p>风起云涌的60年代,从巴黎五月风暴到华盛顿反战大游行,到处是革命的身影。那时候,人们推崇3M,分别是毛泽东、马克思,最后一个M,就是马尔库塞。</p>
<p>前面伯林担心积极的自由会被滥用,被极权体制拿来当做紧固和迫害人们的手段。但是马尔库塞却说,有一种对自由的控制,更可怕,就是让人们心甘情愿的被奴役,一种“<strong>非恐怖的极权主义</strong>”。而美国的资本主义和发达的工业社会,就是这种体现。</p>
<p>在发达的资本主义社会中,人们享受着富裕的生活,但是,人们却已经被悄悄地控制了。这种控制的方法,就是靠“消费主义”,满足你的消费欲望。资本家需要从商品的生产和流通中赚取利润,所以,他们需要不断地刺激你的消费,即使是你不需要的东西,也要想尽一切办法推销给你,用广告去营造种种的所谓的时尚、品味、生活品质的幻象,来不断地制造出“<strong>虚假的需求</strong>”,然后,你会不断的升级你的欲望,这背后就需要更努力的工作赚钱,来持续这个轮回。逐渐的,你就完全地、心甘情愿的被资本家所奴役,成为被异化的劳动者或者叫做劳动工具。</p>
<p>人们永无止境的去追逐“虚假的需求”,最终使得“<strong>商品拜物教</strong>”、金钱,成为我们实质意义上的普遍信仰,这种生活使我们丧失了真正的自由,人们陷入了“舒舒服服的不自由”,难以察觉社会对自己的控制,无从反抗。</p>
<p>不过,你可能会说,这样不是挺好的么,我愿意被这样奴役,我心甘情愿,我爽了就可以。但是,马尔库塞指出,如果这个交易公平的话,倒也罢了。它实在是太不公平了,简直是欺诈!这种富余的生活不是不好,而是我们付出的代价太过昂贵了,这个代价,就是我们丧失了“人”的身份,我们已经被“物化”,被“异化”了,我们不再是完整意义上的人了。马尔库塞借助马克思所说的“人们在为资本家的劳动中,肉体和精神被摧残,导致,人们只有在吃喝拉撒的时候,才觉得自己在自由活动;而在运用人的机能(劳动)的时候,觉得自己不过是动物”。想想当下的996、福报、加班到猝死,不正是这生动的写照么。你会为你的房贷背负20甚至30年的奴役,你哪里还有什么自由,这个代价实在是过于大了,不是么?这就是马尔库塞所说的“<strong>自由的奴役</strong>”!</p>
<p>所以,马尔库塞说,资本主义根本不是一个真正自由开放的社会,而是“单面”的,或者而说“单向度”的社会,人们在这样的一个工作、生产、消费的循环中,陷入这样的一个单一的生活模式中,人们想的就是“如何赚钱,如何消费”,人们在这个无限的循环中打转,成本为被奴役的人,成为单向度的人。</p>
<p>正如马克思对资本主义的矛盾,需要无产阶级进行革命才可以改变一样,马尔库塞也认为,资本主义的这些问题,需要其他阶级对齐进行革命。但是,他认为,工人阶级已经丧失了战斗力,试想一下,你和你的老板,穿同样的品牌,带同样的手表,看同个牌子的电视,旅游同样的圣地,你还会觉得阶级间的巨大差异和被压迫感么?原本激烈的阶级矛盾通过这种方式被巧妙地化解掉了。工人阶级已经被整合到资本主义的体系之内了,成为利益链条的上的相关者,他们变得“投鼠忌器”了,他们被“收编”了。</p>
<p>但是,你可能说,美国不是还有工会、有反叛的人群、有各种反对的声音么?资本主义的体系里,还是有无数的抗争力量的呀。他们难道不是在反抗么?是的,但是他们远未到革命的程度,他们也无法从根本上改变这个单向度的资本主义社会了。举个例子,连当年最具反叛精神的摇滚音乐,也都被音乐工业所收编,那些充满反叛精神的摇滚青年,如今都已腰缠万贯。而那些坚持反叛精神的歌手,早已被音乐工业边缘化,消逝在人们的视野里了。资本主义就是有这种神奇的功能,它可以用这种软性的手段,消灭掉这些“异端”,同化掉她们,使他们失去反抗的力量。</p>
<p>随着60年代的革命激情散去,马尔库塞的影响力也逐渐散去,但是他的影响确实深深的影响了社会的各个方面,诸如种族平等、民权、社会正义、女权运动、同性恋平权等等,都有他思想的影子,他的思想可谓对现代社会影响巨大。当初他思想感召下走上街头,反对越战,反思资本主义,那些“垮掉的一代”,那些“嬉皮士”,也已经认识到这个世界的残酷,虽然他们还是被迫要生活在这样的资本主义时代,但是,他们思想中的烙印,在他们成为社会的中坚后,也深深影响和改变着我们的这个世界。</p>
<h1 id="自由主义">自由主义</h1>
<p>接下来的学者,都是和自由主义和平等这些概念上进行了深入的研究,所以,在继续往下之前,有必要先对自由主义的概念做一些澄清和阐述。</p>
<p>在古代,有国王、贵族、农民,是一个等级森严的等级社会,每个人都有自己的特定的权利,到了法国大革命,这种等级被打破,摧毁了等级制度,人生而平等和自由的观念深入人心。但是,自由和平等是一对矛盾体,它们有时候是对立的。最早的自由主义是<strong>洛克</strong>的<strong>古典自由主义</strong>,强调个人自由和基本权利,限制国家的干预,他推崇的是不受强力压制的消极的自由(消极自由的概念前面伯林解释过),在政治上提倡宪政⾃由。到了19世纪,<strong>密尔</strong>提出了<strong>现代自由主义</strong>,强调坚持自由的同时,要重视平等的价值,注重<strong>社会公正和平等</strong>,比如对少数人的权益的维护。当今社会,除了自由、平等,还要加上一个“多元”,它恰恰是自由的一个衍生物,你可以自由地选择你的价值和生活方式,这三者成为现代社会的不可逆转的基本条件。记下来的哲学家们,也是围绕这些内容进行研究和讨论的。</p>
<h1 id="罗尔斯">罗尔斯</h1>
<p>罗尔斯是代表作是《<strong>正义论</strong>》,他就是在讨论平等这个范畴,也就是探讨,怎样构建一个公平的社会制度。</p>
<p>他提出一个有意思的概念“<strong>无知之幕</strong>”,就是你躲在一个幕布后面,你完全忘记了自己的身份、能力、性别、信仰等等的一切特质,回到一个“原初位置”,成为一个彻底自由、完全自利的理性人,然后,你和别的这样的人一起,一起签订一个“契约”,制定大家一起生活的规范,而且承诺,签约后和自己恢复记忆后,都会严格遵守。这个时候,每个人都会顾忌,自己“恢复记忆”后,可能会是任何身份、能力的人,所以,一定会非常谨慎和审视,这样的一个契约出来,一定是最符合所有的人福祉的契约。</p>
<p>那么问题来了,在大家一起商讨这个契约的时候,应该遵循哪些原则呢?
罗尔斯提出了以下原则:一、平等的自由,这个和洛克的观点差不多,就是拥有那些基本自由,如言论、信仰和拥有财产的自由。二、平等的机会,这个平等的机会,又可以分为“<strong>公平的机会平等</strong>”和“<strong>差异原则</strong>”,也就是说,要考虑到你的禀赋、家庭后,再做到机会平等,你让一个富人家的孩子和一个穷苦家的孩子,一起去竞争一个升学机会,本身就不公平,所以要权衡这个升学设计,力求消除这些先天优势造成的不平等,再让他们在一个“公平的起跑线”上展开机会竞争。而差异原则,是面向那些生活状况最差的人、弱势群体,机会竞争的结果,同时应该让那些最弱势人群得到改善,你竞争你们的,但是你们得到的好处,应该可以分给最差的那些人一些。</p>
<p>罗尔斯的正义论,符合我们的道德直觉,排除掉那些先天的优势、运气的因素,力图做到真正的平等,也兼顾了最弱势人群的照顾。貌似非常的完美了,但是,就是有人还要鸡蛋里挑骨头,哈哈,这个人就是诺奇克。</p>
<h1 id="诺奇克">诺奇克</h1>
<p>就如同,我们警惕积极自由一样,我们对公平的偏好,是不会会侵犯到自由呢?这个就是诺奇克的关注点。</p>
<p>他说,罗尔斯说,在机会平等过程中,会消除掉个人的先天优势,这难道不是对人的自由权利的侵犯么?诺奇克提出了“<strong>自由至上论</strong>”,个体的权益绝对优先,不允许被侵犯,对任何限制,都有给出很强的理由,才能被接受。在政治、经济、社会领域,都加持自由原则,自由市场不受任何干预。</p>
<p>诺奇克强调的不是分配争议,而是<strong>持有正义</strong>。我们最重要和根本的拥有,是我们自己,诺齐克称之为“⾃我所有权”,⾃我所有权的正当性是诺齐克理论的前提,我的事,我说了算。再往下,是财产获得正义,是通过自己的劳动、继承于父母等获得的财产,是正当的,否则就是非法的。然后,是财产的转让正义,只要是自由自愿交换或馈赠,都是正当的。所以,获得正当和转让正当获得财产,是神圣不可侵犯,这样的社会才是真正公正的社会。</p>
<p>所以这样推演下去,诺奇克的正义理论,是具备历史追溯的,你祖上不合理的资产获得就是不正义的,比如要归还印第安人的土地。而对于穷人的救助,也不能靠从富人手上征税转移支付,而只能靠慈善,因为慈善才是符合转移的原则的,是自愿的行为。所以,诺奇克的国家概念,是一个<strong>最小政府</strong>,它只保障公民的基本自由和安全,确保契约的履行,个人间的自由贸易政府也无权干涉。</p>
<p>所以,不觉得,诺奇克和伯林差不多么?都是消极自由的提倡者,都注重个人的权益,反对外界的强制和干涉,即使是一个多么美好的理由。而罗尔斯更偏好积极自由,和卢梭、密尔一样,更看重社会的公平,更站在多数人的福祉的基础上看待世界。</p>
<h1 id="德沃金">德沃金</h1>
<p>德沃金不像诺奇克,他更像罗尔斯,也关注“平等”。</p>
<p>我们前面讨论过,罗尔斯设计了“无知之幕”,让大家享有公平的平等机会,还要照顾那些弱势群体。恰恰是在对待弱势群体这方面,德沃金会追问究竟是什么造成了弱势群体的每个个体的弱势状况,如果是他自己不努力甚至自甘堕落,那这样的人不值得救助。这个便是他的一个观点“<strong>敏于志向,钝于禀赋</strong>”,就是我们在进行社会分配的时候,对人的禀赋导致的不幸应该给予帮助,而要对一个人由于志向选择导致的不幸和弱势,不应该予以太多的帮助。说白了,就是,这个是你自己选的道路,请含着泪自己走下去。我们把钱省下来,去帮助那些真的能力差、身体残疾导致的生活穷苦的人们。</p>
<p>在我看来,德沃金是罗尔斯思想的升级版,更细化了罗尔斯在公平方面的内涵,更深入细致的进行了阐述。</p>
<p>德沃金的平等观里,有两个原则:“<strong>平等的尊重和平等的关怀</strong>”,前者是给定了对和我们能力同等的个体的态度,对别人,我们应该尊重他的生活方式、价值观点,甚至于国家都无权干涉任何人的生活方式,德沃金称之为“<strong>国家中立性原则</strong>”,这点上,倒是和诺奇克的自由至上有些神似。而“平等的关怀”,则是面向比我们弱势的人们的态度,但是,不是一种一刀切的平均主义,不是简单的给予他们“平等的待遇”,甚至不是高高在上的怜悯,而是真正把他们当做平等的人来看来,要针对他们每个人所处的环境,给出不同需求的帮助。这点上,体现了德沃金的人文层面的关怀,把弱势群体也当做平等的完整的人来看待。</p>
<h1 id="桑德尔">桑德尔</h1>
<p>接下来这位,估计很多人都熟悉,他就是哈佛那门经典的公开课“<a href="https://open.163.com/newview/movie/courseintro?newurl=M6GOB7TT6">公正</a>”上风度翩翩的教授:桑德尔。</p>
<p>前面的柏林、诺奇克,是典型的“个人主义”者,而罗尔斯、德沃金虽然关注公正平等,但是仍然对“个人的自由”非常重要,都是放在他们观点的首位的。你发现没有,他们其实忽略了一个很重要的东西,就是一个人所在的微观生活环境,比如你的家庭、你的工作伙伴、你所在社区、你在网上参加的群、论坛等等,在这里,同一个给出一个概念“<strong>社群</strong>”。桑德尔不同于前面的这些自由主义的大家们,他认为,人们不能脱离开和你相关的社群,而独立的大谈个人自由主义,一个人,他的所思所想所作所为,他内心中的各种思想,其实是他在社群中生活的结果。所以,桑德尔关注是另外一个视野的理论“<strong>社群主义</strong>”。</p>
<p>社群主义的观点认为,人不是孤立存在的,人构成了社群,你从小到大,经历各种各样的社群,正是这些形形色色的社群,才造就了今天的你。所以,先有社群,才有你,这无疑是对个人主义特别是个人自由至上的观点的一个很大的冲击。</p>
<p>就如尤瓦尔·赫拉利在人类简史里提到的,人是一种会讲故事的动物。人们只有理解了自己成长的过程,才能明白自己为何成为今天的自己。而人的故事绝不是凭空存在的,一定是你从小经历的这一切,你的故事是你在你的社群关系中不断地形成、展开的,它是连续的、连贯的。也就是在这样一个自我相关的无数交织的社群故事中,你逐渐明确了“你是谁”,你该如何做出任何有意义的选择。所以,人根本是无法离开社群的,罗尔斯的“无知之幕”是不可能成立的假设,它让我们失去了自己的故事,成为毫无个性抽象的人。所以,桑德拉批评自由主义的个人观,把人看做是孤立的原子,成为“无所牵绊的个人”。</p>
<p>诺奇克只是社群当做工具,比如他把国家唯一的功能就是保障个人权利、维护个人福祉;罗尔斯好一点,他把社群称之为“情感性的社群”,他认为社会是一个互惠互利的体系;桑德尔对社群的理解,远重于他们两位,他认为,人和社群是纽带关系,社群从根本上定义了“你是谁”,它塑造了你的身份认同、生活理想、道德感、责任意识。个人的目标是和社群紧密相关的,所以个人作为社群成员,是有义务的,是与生俱来的,你的生活故事,只是更为宏大的社会故事的一部分,是蕴含在无数他人的故事之中的,包括你的家族、你的先辈的故事,延续到了你这里,是无法割裂的。这种责任和义务,是无法摆脱的,是生而带有的,是历史的。这点上,我们作为中国人可能感受更为深切,但是对于西方个人主义、自由主义、契约之外无义务,都是一种比较大的冲击。</p>
<h1 id="沃尔泽">沃尔泽</h1>
<p>我搜了一下,关于沃尔泽的信息比较少,反倒搜到一堆齐泽克的信息,呵呵。不过,刘擎老师介绍沃尔泽给我们,是有他的道理的。沃尔泽解释了个人主义为何会出现。沃尔泽是社群主义学者,但是他很好的解释了为什么会有个人主义。</p>
<p>前面,桑德尔向我们阐述了人是不可能独立于社群存在的,“无所牵绊的个人”是不存在的,但是,为何个人主义还是在这个世界上横行,而且,基于此建构了自由主义。</p>
<p>但是,沃尔泽作为社群主义学者,他批判自由主义在理论层面是不成立的,甚至是有害的,但是,他指出,这个世界确实塑造了一个个“孤立的个体”,这里注意和个人主义的区别,个人主义上来就承认每个人是一个独立的、自由的个体,而沃尔泽则说,孤独的个人,是这个社会造成的,前者是基础,而后者是结果。</p>
<p>他认为,我们每个人,被这个社会逐渐逼迫成了“孤独的个体”。在他看来,当今这个世界、这个社会逐渐变得高度流动:地理上的流动性,让我们离开故乡,对故土的忠诚度逐渐淡化,过去宗族和固定的社群关系被打破;社会身份的流动,让我们和父辈不再是一样的身份、过同样的生活,我们的故事,变得和我们的父辈截然不同;婚姻关系的流动,独身、分居、离婚、再婚,让最亲密的家庭关系也变得不在稳定;政治上的流动,人们针对政治信仰也会变动,随着居住地的变动,对政党的认可和忠诚也随之改变。而,人们在流动的过程中,不断地自愿的结合成新的社群,这种结合是自由的、自愿的,区别于社群主义那种与生俱来的绑定关系,这听上去是不是很好,很不错,是吧?但是,自由总是有代价的,越是容易获得的关系,越不稳定,导致这些社群也不稳定,你可能随时因为搬家、工作等退出一个个社群。我们每个人,都变成孤立的、原子化的自我,这个可不是自由主义最开始假设的那个完全自由的自我,而是一个被流动的社会逼迫成为的自我。</p>
<p>沃尔泽虽然是社群主义者,但是他悲观的说道,“社群主义不可能战胜自由主义”,自由社会造成的忧伤、失落和孤独,以及政治冷漠,都在逐渐成为这个世界最真实的一个个场景。</p>
<p>(未完待续…)</p>
<h1 id="泰勒">泰勒</h1>
<h1 id="哈贝马斯">哈贝马斯</h1>
<h1 id="亨廷顿">亨廷顿</h1>
<h1 id="福山">福山</h1>
<h1 id="附录">附录</h1>
<p>TODO:把常看的一些现代性哲学视频链接贴上来</p>
PICK
2020-12-31T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/12/31/PICK
<h1 id="图模块">图模块</h1>
<p>PICK: Processing Key Information Extraction from Documents using Improved Graph Learning-Convolutional Networks</p>
<p>这里要做的图卷积,</p>
<h1 id="先导知识">先导知识</h1>
<p>这篇论文用的图神经网络,用的是GLCN,所以有必要先学习一下GLCN:</p>
<h2 id="glcn">GLCN</h2>
<p>PICK用的图卷积,参考的是Jiang Bo的《<a href="https://zhuanlan.zhihu.com/p/335754145">GLCN:Semi-supervised learning with graph learning-convolutional networks 2019</a>》,<a href="https://blog.csdn.net/mei1318874404/article/details/105128230">2</a>,这个网络是为了。。。todo</p>
<blockquote>
<p>GLCN的主要优点是能将给定的标签和估计的标签合并在一起,因此可以提供有用的“弱”监督信息来改进(或学习)图的结构,并且便于在未知标签估计中使用图卷积运算。
作者提出的GLCN的一个目的是通过集成图学习和图卷积,希望能通过半监督的方式学习到最优的图结构,以用于后续的相关任务。</p>
</blockquote>
<p><img src="/images/20201231/1609398391076.jpg" alt="" class="myimg" /></p>
<p>我们来简短说明一下GLCN:</p>
<p>GLCN主要是两块:图学习、图卷积。</p>
<p>图学习是为了<strong>学出邻接矩阵</strong>,图卷积是为了<strong>学出节点的向量表达</strong>。</p>
<p><strong>【A、图学习】</strong></p>
<p><img src="/images/20210106/1609919222732.jpg" alt="" class="myimg" /></p>
<p>它定义了一个$S_{ij}$,表示节点$x_i$和$x_j$之间关系的强度,他是靠一个神经网络算出来的,如下:</p>
<p><img src="/images/20201231/1609400052119.jpg" alt="" class="myimg33" /></p>
<ul>
<li>$x_i$维度为$\mathbb R^{n \times p}$</li>
<li>$a^T$维度为$\mathbb R^p$</li>
</ul>
<p>其中$a^T$就是参数,干嘛不写成$W$,好讨厌。你看!其实就是一个很简单的神经网络。这个网络就把每个节点和其他节点的强度就都算了一遍,通过它,就可以得到整张图的关系强弱的邻接矩阵了,对吧?</p>
<p>是神经网络,就得有loss,对吧,来了:</p>
<p><img src="/images/20201231/1609400522099.jpg" alt="" class="myimg20" /></p>
<p>看着挺复杂,别怕,我来说说:$\gamma$是超参不管他;$\Vert S \Vert_F$,S的范数?可为何多了一个F,原来这个叫做<a href="https://www.zhihu.com/question/22475774">Frobenius范数</a>,就是向量的范数差不多一个意思,只不过用来算矩阵的。前面的不用说了把,就是$x1,x2$的欧氏距离。这个损失函数的你应该立刻可以理解了,就是尽量让这个学习出来的网络,具备这样的特性:$x1,x2$远,$S$就大,或者反过来。而后面的F范数,据说是为了让$S$矩阵尽量稀硫,稀硫啥意思?就是为了让大部分都为0,就关系强烈的有值呗。但是为何这样约束,就可以稀硫,真心母鸡。</p>
<p>这里有个细节,一般“损失”函数,得有损失啊,损失是啥?损失就是真实标签和预测结果的差啊。可是,这里,谁是标签?谁是预测结果呢?
标签就是$\Vert x_1 - x_2 \Vert$,对,$x1,x2$是已知的啊,他们的欧氏距离其实就是标签啊。
那预测结果呢?那预测结果就是$S$呀,尽量约束$S$达到最优。</p>
<p>不过,GLCN又进一步考虑了$A_{ij}$,我不知道这个$A_{ij}$哪里来的?是开始有个初始关系么?然后每次带入就不变这个$A_{ij}$么?还是说,这个$A_{ij}$,也是动态变的?每次学习过程中,都会跟着变,也就是这个网络计算后的结果?毕竟这个网络就是为了算这个$A_{ij}$的。我其实更倾向于后者,原因是,你看他引入了$A_{ij}$之后的损失函数里,是包含了这个$A$的,说明这个$A$是动态变的。</p>
<blockquote>
<p>For some problems, when an initial graph A is available, we can incorporate it in our graph learning</p>
</blockquote>
<p><img src="/images/20210106/1609921889424.jpg" alt="" class="myimg33" /></p>
<p>然后,随之损失函数,也要考虑新引入的$A$:</p>
<p><img src="/images/20210106/1609921955821.jpg" alt="" class="myimg33" /></p>
<p>好,到此为止,前面都是在讲啥?讲的是,如何<strong>学一个神经网络</strong>,是一个全连接的神经网络,用它,可以学出一个描述这个图的节点们之间关系的<strong>稀硫关系矩阵</strong>来。</p>
<p>接下来,是论文中所说的,图卷积了</p>
<p><strong>【B、图卷积】</strong></p>
<p>对,接下来做图卷积了,我们都知道<a href="/machine-learning/2020/11/25/gnn#gcn">最最最经典的GCN概念</a>,就是基于邻接矩阵做的经典谱域的卷积的那套思路。</p>
<p>现在我们有邻接矩阵了啊,就是S啊,而且,我们也不用经典GCN中的规范化的动作了,所以我们的图卷积公式就变成了:</p>
<p><img src="/images/20201231/1609401942378.jpg" alt="" class="myimg20" /> + <img src="/images/20201231/1609401981262.jpg" alt="" class="myimg20" /></p>
<p>=> <img src="/images/20201231/1609402013849.jpg" alt="" class="myimg20" /></p>
<p>恩, $X$就是节点的$d$维度的节点表达向量,然后你就可以,迭代$k+1$轮,不断地训练了。</p>
<p>稳定下来,你就学到到了一个整个图中,每个节点的向量表达。</p>
<p>2) 图卷积</p>
<p>图卷积的时候,你总是要用节点信息,或者节点+边信息,但是,这篇论文里用的是,节点+边+节点,3元组的信息。</p>
<p>其中的边,还很特殊,它管他叫$\alpha_{ij}$,这样的3元组就是节点-边-节点:$(vi,\alpha_{ij},v_j)$,</p>
<p>那么这个边到底是怎么定义的呢?是一个6维的向量,然后乘以<strong>参数$W$</strong>,学出来的。那这个6维,可是我们自己规定出来的,是特征工程出来,</p>
\[\alpha_{ij}^0 = W^0_{\alpha} [ x_{ij},y_{ij},\frac{w_i}{h_i},\frac{h_j}{h_i},\frac{w_j}{h_i},\frac{T_j}{T_i} ]\]
<p>这个六维分别是:两框bbox的长度、宽度、高度、以及字符长度,这些特征,都是很好的描述俩框直接的关系的,在我眼里。比如最后一个$\frac{T_j}{T_i}$,
他举了个例子,就是适合比如年龄这种,也就1-2位长度数字的约束。</p>
<h1 id="pick的思路">PICK的思路</h1>
<p>好了,前面前导知识够了,我们可以开始理解PICK了。</p>
<p><img src="/images/20201231/1609408156757.jpg" alt="" class="myimg100" /></p>
<p>PICK网络,整体上来说,就是4步:</p>
<p>1、做Transformer,得到一个框内文字的语义表达</p>
<p>2、做CNN,得到一个框的图像表达</p>
<p>3、合并1、2的表达,然后用它们,组成一个图,通过GLCN来学些节点(框)的关系 => 邻接矩阵</p>
<p>4、通过有边、顶点的原始表达(1、2表达的合并),然后通过考虑其他特性 $\alpha(6维)$,一起进行<strong>图卷积</strong>,学出一个图节点们的隐含表达$h_i$。</p>
<p>5、然后把一个框的表达,也就是上面说的“原始表达”(1、2表达的合并),</p>
<p>李宏毅老师说过,最主要的是搞清楚每个环节入和出的shape,基本上你对网络的细节也就比较了解了。</p>
<p>我们来捋捋这个网络的输入输出走向。</p>
<p>1、Transformer的输入是每个句子,每个字都是一个word2vec(字的vector吗?),所以输入是:$[T,D_1]$;输出是经过transformer学习后的$[T,D_2]$</p>
<p>2、CNN,就每个小bbox的图片$[H,W,3]$,过这个CNN,然后得到一个,$[H’,W’,D_1]$,但是貌似论文做了一个resize成$[H’‘,W’‘,D_1],且, H’’*W’‘=T$,哈,诡异哈?!我理解,就是为了后面和1中的Transformer的结果做element-wise add用。</p>
<p>3、然后你从$1 \odot 2$的bboxes们中,抽样出一个图?为何要抽样?为何不用完全的一张图?!不知,没懂。反正你就理解,丫是一张图。这张图的节点都是光秃秃的,没有边的关系,每个点上,也就是每个bbox,有个$1 \odot 2$合体的embeding表示:$[N’,T,D_1]$,$N’$是抽样出来的数量。</p>
<p>4、然后你要通过GLCN来进行“Graph Learning”,来学习节点间是不是有关系了?怎么学?就是算2个节点之间的距离。2个节点的值是固定的,不变的。是从$1 \odot 2$中得到的那个element-wise add</p>
GNN图神经网络
2020-11-25T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/11/25/gnn
<h1 id="概述">概述</h1>
<p>因为最近需要用到图卷积网络,所以需要对图神经网络做一个了解,之前也老听说GNN,GCN啥的,但是一直没有深入了解,借此机会,深入学习和理解了一下。</p>
<p>图神经网络涉及的内容非常多,我也不可能面面俱到,这篇文章也不打算做全面科普和讲解的目的,而是把自己的一些理解总结出来,至于很多在网上可以查到的资料,我只给出引用即可,不深入讲解,除非觉得有必要。</p>
<p>文章,主要是讲讲一下内容:</p>
<ul>
<li>图、图神经网络的基本概念</li>
<li>图上如何做卷积和池化</li>
<li>卷积的两种:频谱卷积和空间卷积</li>
<li>常见的图卷积网络(注意不是图神经网络,那个范畴更大,我用不到,暂时也不做深入研究)</li>
<li>给出我收集的资料</li>
</ul>
<h2 id="图">图</h2>
<p>先给定一个图的基本概念:</p>
<p>$G=(V,E,W)$</p>
<ul>
<li>V 是节点(vertex)集合,其中节点用一个d维向量表示,$n=|V|$</li>
<li>X 是节点的向量矩阵,就列就是一个节点的表示,$X \in R^{n \times d}$</li>
<li>E 是边(edge)集合</li>
<li>W 是邻接矩阵(方阵),矩阵里的值,就是边的权重,$W \in R^{n \times n}$</li>
</ul>
<p>可以把每个节点当做是一个信号(看,和信号处理勾稽上了)。</p>
<h2 id="图神经网络的用途">图神经网络的用途</h2>
<p>好,有了图的基本概念,我们就会想,能拿拿图干嘛?</p>
<ul>
<li>一个网络,我最终给这个网络一个分类</li>
<li>一个网络,我对网路中的每个节点进行分类(社交网络中的标签分类)</li>
<li>一个网络,我通过局部网络的结构(已知的标注网络)学习出另外部分的网络结构(如预测一个节点和别人的链接情况)(是否用来做OCR布局分析?)</li>
<li>还可以和GAN结合,用于生成一个网络结构(分子制药生成分子式)</li>
</ul>
<p>你可以看出,其实主要焦点是在整体,还是个体上,整体就是整个大网的表示学习,个体就是每个节点的表示学习,我目前关注GNN,就是想把它应用到OCR的布局分析中,比如把bbox(识别的文字框)当做一个个的节点vertex,然后看他们彼此的关系如何?也就是有无链接?他们自己是什么分类?这样,我就能找出哪些bbox是标题,还是值,他们是否在一行,等等,这样的业务含义,从而满足商业需求。</p>
<h1 id="图卷积">图卷积</h1>
<p>一个图,如何做特征抽取,我们自然而然就想象到过去我们最擅长的卷积神经网络(CNN):</p>
<h2 id="类比cnn">类比CNN</h2>
<p>咱们学习CNN,先通过表示学习,学习出图的内在特征,然后用它做分类啥的。是的,没错。你为何会有这么一个思路,因为这个思路就是你过去CNN图像卷积神经网络的思路啊,把图像的特征抽取出来,然后做分类啥的。</p>
<p><img src="/images/20201129/1606617898239.jpg" alt="" class="myimg" /></p>
<p>好,我们看CNN,我们的两大法器就是卷积和池化,当然<strong>核心是卷积</strong>,那么这套思路是不是可以套到图神经网络上呢?</p>
<p>答案是,可以的,如下图,图上也可以做卷积完成特征抽取,然后做池化,缩小网络结构,当然,不是说的那么简单,这个后面我会逐一解释,这里先直观有个印象即可。</p>
<p><img src="/images/20201129/1606620520337.jpg" alt="" class="myimg" /></p>
<blockquote>
<p>这里,我自己有个疑问,也算是给自己挖个坑:在做卷积的时候,网络中变化的是什么?是每个节点上的表示么?表示的维度为变么?网络的结构会在变么?我知道池化肯定会变的,这种先不考虑呢?我说的变是整个结构都发生根本变化。这些问题,我提给自己,未来自己来把坑填上。</p>
</blockquote>
<p>接下来说说卷积,</p>
<p>CNN只适合欧式空间,比如图像。而基于图(Graph)GNN更通用,适合非欧空间(啥叫欧式空间,就是支持<a href="https://baike.baidu.com/item/%E4%B8%A4%E7%82%B9%E9%97%B4%E8%B7%9D%E7%A6%BB%E5%85%AC%E5%BC%8F">距离公式</a>的空间。)
可是,现在,我还是需要做卷积、池化,我改如何做?</p>
<p>现在问题变成了:图神经网络最核心的就是要解决卷积的问题,卷积最核心的就是卷积核如何确定。</p>
<h2 id="先说说卷积">先说说卷积</h2>
<p>在讨论图(Graph)如何做卷积之前,我们有必要讨论一下,究竟什么是卷积?</p>
<p>本质上卷积核,是对在过滤不同频率的信号。<a href="https://zhuanlan.zhihu.com/p/28478034">参考</a>。
你看卷积公式$h(t) = \int_{+\infty}^{-\infty} f(\tau)g(x-\tau) dt$,</p>
<p><img src="/images/20201127/1606448534258.jpg" alt="" /></p>
<p><a href="https://www.bilibili.com/video/BV1Ry4y1r73h?from=search&seid=7657366210802615266">参考</a>:视频22分钟处。</p>
<ul>
<li>对应上图:$f(\tau)$就是右侧那个下降函数,$g(x-\tau)$是方波函数,而卷积结果(是个以时间$\t$为变量的函数)是左侧那个上升函数</li>
<li>$h(t)$是一个以$t$为变量的函数,是的,他是个时间函数</li>
<li>设想某个$t=t_0$,$h(t_0)$就是那上图中黄色面积</li>
<li>这个面积是一个积分,是$\tau$从$-\infty ~ +\infty$的积分,上图上,就是黄色的面积</li>
</ul>
<p>那么问题又来了,卷积有啥用?</p>
<p>其实,卷积本质是为了在频域空间的不同频率信号的过滤,原因是,时域卷积=频域相乘,这个是傅里叶变换的结论,细节我会在傅里叶变换的博文中详解,这里只知道结论就可以。你用一个滤波器函数$g(x)$去和你的目标函数$f(x)$做卷积,就相当于是把他们放到了频率里,进行相乘,相乘的结果,就相当于在频率里把某些频段的值给“乘”掉了(理解这个可以参考下面参考问斩各种的方波滤波器的概念),只剩下了你所需要的频段的信号了。</p>
<blockquote>
<p>时域卷积=频域相乘,卷积核本质上是一个二维函数,有对应的频谱函数,因而可以看成某种『滤波器』</p>
</blockquote>
<p><a href="https://zhuanlan.zhihu.com/p/28478034">参考</a></p>
<p>那么,把这个概念扩展到二维函数上,也就是图像上,图像可以看做是一个二维离散函数。
图像上的分类,其实就是图像上的信号处理。
那么我们来对应一下卷积的概念。
$f(x)和g(x)$的x,对应整个图像的二维位置(x,y),$f(x)$对应图像的值,$g(x)$就是对应的卷积核,时间$t$对应的就是卷积目标feature map上的一个点。你的卷积核,一个一个位置的挪动,就是在计算目标函数$h(t)$。看看,都对应上了吧!</p>
<p>可是,我们又要想,为何要做图像的卷积?</p>
<p>答案是,为了提取图像不同频率的信息。啥?!图像又不是波,怎么会有频率?有的!图像实际上可以看成是一个由不同的点上的值变化,所组成的一个东西。不同的点(二维),对应不同的值,这就是一个函数啊。既然是函数,就可以按照傅里叶变换,变换到频率里。这么说的太数学化,不好懂。你可以换个思路理解,就是像素间变化剧烈,比如从红色突然变成了白色,或者从255的值,突然变成了0,这种变化多剧烈啊!这就是高频啊。反之,就是低频啊。</p>
<h2 id="图上的卷积">图上的卷积</h2>
<p>(<em>注:以下理解均来自这篇很赞的<a href="https://www.zhihu.com/question/54504471/answer/332657604">图卷积的知乎解释贴</a>,感兴趣的可以参照阅读。</em>)</p>
<p>图片上可以做卷积(CNN),我们理解了,那么问题又来了?一个图(Graph)上,如何做卷积?</p>
<p>前面我们说了,卷积,其实就是一种滤波器,就是把图像变换到频域,然后用某个卷积核来过滤出某个频段的特性。那么,我们同样的思路,把图上的信息,变换到频域里面,然后在里面做相乘,从而过滤出某个频段的信息。这种思路就是<strong>频域卷积</strong>,论文里都称作谱域卷积(spectral domain)。</p>
<p>当然,我们还可以沿袭CNN的思路,但是和CNN不同,图上不具备欧式空间的平移不变性,那该如何在空域(或者说时域)上做卷积呢?这个正是空(间)域卷积(spatial domain/vertex domain)研究的内容。</p>
<h1 id="谱域卷积">谱域卷积</h1>
<h2 id="初始概念">初始概念</h2>
<p>最早的图卷积,是杨力昆(Yann LeCun)老师的团队们2014年就琢磨出来的,很诡异的频域卷积:</p>
<p><a href="https://arxiv.org/abs/1312.6203">原始论文: Bruna - Spectral Networks and Locally Connected Networks on Graphs</a></p>
<p><strong>【1、图上的拉普拉斯分解】</strong></p>
<p>图上的拉普拉斯,</p>
<p>$L=D - W$</p>
<ul>
<li>W上面提到了,就是边上的权重,是一个对称方阵,$W \in R^{n \times n}$</li>
<li>D呢?我看很多文章是都说图的节点的度的对角阵,但是实际上D的定义是:$D_{ij}= \sum_j W_{ij}$。</li>
</ul>
<p>这里不得不说一下,网上的狠多文章都是不考虑边权重的图,或者说,权重是1,但是如果是边带不同权重的,就需要用上述公式来确定矩阵D,即一个边出度上的边的权重之合。</p>
<p>拉普拉斯矩阵是对称阵,所以是半正定的,所以特征值都是非负的,所有有n个线性无关的特征向量。拉普拉斯的特征值分解,通过<a href="/2018/12/17/linear-algebra#相似对角化">相似对角化</a>,就可以得到一组基:</p>
<blockquote>
<p>通过相似对角化,得到的一组特征向量彼此都是彼此正交的,你可以认为是一组正交基。用它就可以表达一个新的坐标系出来,</p>
</blockquote>
<p>拉普拉斯矩阵正交分解后:</p>
\[L = U
\begin{pmatrix}
\lambda_1 & & \\
& \ddots & \\
& & \lambda_n
\end{pmatrix}
U^T\]
<p><strong>【2、图上的频域傅里叶变换】</strong></p>
<p>你可以把这组由特征向量构成的正交基,类比成傅里叶变换中的不同频率,也就是不同的基,通过这组基,就可以把时域,(论文里有时候叫vetex domain)转化到频率空间里面去(spectrum domain),然后在频率里做卷积,也就是滤波,滤完后,在变换回时域(vetex domain)。</p>
<p>类比傅里叶变换:</p>
<p><img src="/images/20210104/1609755617857.jpg" alt="" class="myimg33" /></p>
<ul>
<li>$f$是Graph上的N维向量</li>
<li>$f(i)$就是第$i$个节点的向量表达</li>
<li>$u_l(i)$就是第$l$个特征向量的第$i$维度的值</li>
<li>$\hat f(\lambda_l)$,就是到了频域后,这个频率$\lambda_i$对应的值。</li>
</ul>
<p><strong>【3、频域上的卷积】</strong></p>
<p>上面只是说,图上如何做频域(spectrum domain)和时域(vertex domain)的转换,但是,其实对我们更重要的是卷积。</p>
<p>我们现在需要在频域内,设计卷积核通过这个卷积核的学习,可以让你学习出最优的对时域(vertex domain)中每个节点的向量表达,用这些向量表达,就可以完成分类,或者关系预测啥的了。</p>
<p>具体怎么做呢?</p>
<p>我们假设我们的卷函数在时域内叫$h$(卷积核叫啥$h$啊!TMD,论文就这么叫的,我们也叫把,一般h都表示隐层啊),是个n维度向量,和节点的向量表达维数已知。</p>
<p>然后我们也要把这个$h$变换到频域里去,用上面的一样的方法:$\hat h(\lambda_l)=\sum_{i=1}^N h(i)u_l(i)$</p>
<p>这样,我们的原始数据特征变换到频域的$\hat f$,和刚刚变换到频域的卷积核$\hat h$,可以做卷积了。</p>
<p>我们上面<a href="#先说说卷积">先说说卷积</a>已经讨论过了,时域上的卷积,就相当于频域的点积,所以,卷积这个操作就变成了:</p>
<p>$\hat f \odot \hat h = U^T f \odot U^T h $</p>
<p>$\odot$ 是Hamada积,表示逐点相乘</p>
<p>如果再变换回去,就需要再乘以$U$,所以整个卷积过程便是:</p>
<p>$(f*h)_G = U( (U^T f) \odot (U^T h))$</p>
<p><strong>【5、迭代起来】</strong></p>
<p>你用图上的节点们的表示$h_i$,做了一个卷积(是在频域里做的),你考虑了图的结构(就是那个$U$,他是通过邻接矩阵、出入度得到的),可是,这个只是做了一次卷积。</p>
<p>过我们过去要用多个卷积核,卷完一层,再卷一层,变成有给深层网络,对吧?那么这里,图卷积,如何和这个形式对照起来呢?</p>
<ul>
<li>多参数,我觉得好像是没有,这个网络里,就一组参数,就是$g_\theta$</li>
<li>多层网络,这个有,就是学完后,每个节点上的隐含表达更新了,那下一轮再重复这个过程,我理解就算是“下一层”了</li>
<li>如何更新参数?还是梯度下降啊,那也必须得有损失函数loss啊。这个,肯定是要依赖于下游任务了,比如节点分类,节点关系预测啥的。</li>
</ul>
<p>这里有个小地方,必须得说一声,否则后面ChebNet的时候就该搞不清楚了:</p>
<blockquote>
<p><strong>为什么卷积核是一个有N(节点数)个参数的对角阵?</strong></p>
</blockquote>
<p>$h$是卷积核,对吧,长啥样?其实不用关心,因为卷积,不像之前的CNN(是在时域上做的),现在变到了频域上去了,所以你现在应该关心的是,频域上的卷积核长啥样?</p>
<p>它的本来面目,还记得不?是$(U^T h)$,对,就是这个样子,其实,就是一个N维度的向量,对吧?</p>
<p>他然后要和$f$(原始数据)做$\odot$:$U( (U^T f) \odot (U^T h))$,对吧?</p>
<p>好,那我直接把他从一个N维向量,变成一个$N \times N$的矩阵,然后$\odot$操作,就可以写成矩阵乘法啦。</p>
<p>所以,现在卷积核,就变成一个对角阵了。</p>
<p>好!我们终于解释了我们自己提出的问题,“为何是个对角阵?”:是因为,我们把$\odot$操作变成了矩阵乘法。别看这个问题小,愚笨的我还是想了半天才想明白的。</p>
<p>然后,这个$(U^T h)$,实际的长相是:</p>
\[\begin{pmatrix}
\theta_1 & & \\
& \ddots & \\
& & \theta_n
\end{pmatrix}\]
<p>对,就是这个样子,这个就是参数,是神经网络要去学习的东东。</p>
<p><em>这里再絮叨一句,这个卷积核,后来在ChebNet的时候,被诡异、神奇、创新的替换成了特征根$\lambda_i$的切比雪夫多项式了</em></p>
<p><strong>【4、可以深度学习了】</strong></p>
<p>上面的式子里,<strong>$h$是我们的卷积核</strong>,就是我们要学习的参数,终于可以用个深度网络来学习这些参数了。</p>
<p>不过,原始论文里,</p>
<p>他做法更粗暴的,直接把$U^T h$ => $g_\theta$,原有的式子也变成了:</p>
<p>$(f*h)_G = U( g_\theta \odot (U^T h))$</p>
<p>然后,最后再放一个非线性变换,就是最后的神经网络的前项公式了:</p>
<blockquote>
<p>$(f*h)_G = \sigma( U( g_\theta \odot (U^T h)))$</p>
</blockquote>
<p><strong>【它的问题】</strong></p>
<p>这个方法有很多很多问题,比如:</p>
<ul>
<li>他得要求这个Graph节点数不能变,因为上述公式中的$U$是特征向量,你的节点一变,拉普拉斯矩阵就变了,你的$U$就得重新求了</li>
<li>你学的参数$g_\theta$,是个N维度,跟你节点数一样的啊,你节点数一遍,参数个数都得变啊</li>
<li>还有,这个卷积核$g_\theta$是跟整个图相关的,原因是它和整个图的特征分解相关啊,这样,他也不是局部化的,你说非局部化有啥不好?我理解是,你没法像传统CNN那样,通过一个小卷积核,通过局部的卷积操作,可以学出整个图的特征。</li>
</ul>
<p>不好,不好那就改吧,这就引出了ChebNet,切比雪夫图网络:</p>
<h2 id="改进">改进</h2>
<p>还记得上面说过吧,现在参数,是这个样子:</p>
\[g_\theta =
\begin{pmatrix}
\theta_1 & & \\
& \ddots & \\
& & \theta_n
\end{pmatrix}\]
<p>ChebNet,来了个神奇的操作,把$g_\theta$变成了关于特征值n次$\lambda_i$的多项式:$g_\theta(\Lambda)$</p>
\[g_\theta(\Lambda) =
\begin{pmatrix}
\sum_{j=0}^K \theta_j \lambda_1^j & & \\
& \ddots & \\
& & \sum_{j=0}^K \theta_j \lambda_n^j
\end{pmatrix}\]
<p>即:$g_\theta(\Lambda)=\sum_{j=0}^K \theta_j \Lambda^j$,你说这个K是啥?其实就是拍脑袋定的一个超参,他在后面推导出来的结论里有体现,即某个节点的K个hop的邻居的,具体是拉普拉斯矩阵$L^K$体现出来的。</p>
<p>注:利用了对角阵N次方等于对角线元素的N次方的性质。</p>
<p>好,接下来,骚操作来了:</p>
<p>卷积:</p>
\[(g_\theta * x)=> \\
U\sum_{j=0}^K \theta_j \Lambda^j U^T x \\
= \sum_{j=0}^K \theta_j (U \Lambda^j U^T) x \\
= \sum_{j=0}^K \theta_j (U \Lambda U^T)^j x \\
= \sum_{j=0}^K \theta_j L^j x \\\]
<p>这么改进后,不用做特征值分解啦,啦啦啦啦啦啦啦,$L$是拉普拉斯矩阵。</p>
<blockquote>
<p>牢记原始谱方法的两个问题:</p>
<ul>
<li>特征分解、特征向量求取麻烦</li>
<li>卷积核是全局相关的</li>
</ul>
</blockquote>
<h2 id="chebnetnet">ChebnetNet</h2>
<p>【参考】</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/106687580">Chebyshev多项式作为GCN卷积核</a> <– 清博小哥哥superbrother讲的最好!</li>
<li><a href="https://zhuanlan.zhihu.com/p/68813218">回顾频谱图卷积的经典工作:从ChebNet到GCN</a></li>
<li><a href="https://mp.weixin.qq.com/s/NeAieQOl4_jokwSCfCkrIw">切比雪夫显神威—ChebyNet</a></li>
</ul>
<p>先自己给自己提了一个问题,“为什么要用切比雪夫多项式?这个多项式替换了啥?”</p>
<p>我先提纲挈领地自问自答一下:</p>
<ul>
<li>既然上面创新性的用一个特征值n次多项式替换了参数,
<blockquote>
<p>ChebNet,来了个神奇的操作,把$g_\theta$变成了关于特征值n次$\lambda_i$的多项式:$g_\theta(\Lambda)$</p>
</blockquote>
</li>
</ul>
<p>咱先把目标列出来:</p>
<ul>
<li>得降维吧!过去图多大,参数$g_\theta$就多少维度,不好!现在咱们得想办法给他降到一个固定的低维。</li>
<li>别全局相关,最好只考虑局部的特征就能学出全图来,这样,我不用全图信息,也能学出全图,比如通过采样啥的</li>
</ul>
<p>来吧,我们搞搞看:</p>
<h3 id="切比雪夫多项式">切比雪夫多项式</h3>
<p>有必须要先学习一下切比雪夫展开式!参考:<a href="https://www.bilibili.com/video/av710130416/">视频</a>,<a href="https://zhuanlan.zhihu.com/p/141957872">文章</a></p>
<p>我的理解是:他是一个借助$cos,argcos$,得到的一个多项式展开方法,这个多项式有一些神奇的特性,可以被用来解决最值问题啥的。</p>
<p>稍微推导一下切比雪夫多项式的由来:</p>
<p>他尝试展开$cos(\theta),cos(2\theta),cos(3\theta),… $</p>
<p>他观察到,展开式都是:$\sum Acos^n(\theta)$ 的样子,也就是$cos(\theta$的n次方,和前面有个系数$A$:</p>
\[cos(\theta) = cos(\theta) \\
cos(2\theta) = 2cos^2(\theta) -1 \\
cos(3\theta) = 4cos^3(\theta) - 3cos(\theta) \\
cos(4\theta) = 8cos^4(\theta) - 8cos^2(\theta) + 1\]
<p>然后,可以观察猜出(当然人家老人家也证明了):</p>
<p>最高项的系数,也就是$cos(4\theta) = 8cos^4(\theta) …$中的这个$8$,是$2n-1$,这里$n=4$.</p>
<p>接下来,做一个变形,令$x=cos(\theta),x \in [-1,1]$,也就是$\theta=arc cos(x)$,切比雪夫余弦展开,就变成了一个多项式展开了:</p>
\[g(x) = cos(\theta) = cos( arc cos(x)) \\
g(x) = cos(2\theta) = cos( 2arc cos(x)) \\
g(x) = cos(3\theta) = cos( 3arc cos(x)) \\
g(x) = cos(4\theta) = cos( 4arc cos(x))\]
<p>这里$g(x)$就表示,是一个$x,x \in [-1,1]$的多项式,现在x就是$cos(\theta)$啊。</p>
<p>然后,然后我们得到了一个$g(x) = cos(n arc cosx)$,这个$g(x)$形式上就是一个$x$的多项式,这个多项式背后,就是一个$cos(x)$的展开式。</p>
<p>它还有个神奇特性,就是可以高阶多项式,可以通过低阶多项式,递归推出,比如$cos(3\theta)$可以通过$cos(2\theta)$推出,而$cos(2\theta)$又可以由$cos(\theta)$推出,对应到多项式也是一样的,g_n(x),也就是最高项为$x^n$的多项式,可以由$x^{n-1}$的多项式递归推出,具体的公式如下:</p>
<p><strong>Chebyshev多项式的递推公式:</strong> $g_{n+1}(x) = 2xg_n(x) - g_{n-1}(x)$</p>
<p>那么,接下来,我的问题是:为何要用这么一个诡异的多项式,去替换GCN中的$g_\theta$参数?说实话,我真心没懂,是因为一组正交基的组合,可以通过多项式去拟合么?我偶然看到说,切比雪夫多项式是<strong>“以递归方式定义的一系列<a href="https://zh.wikipedia.org/wiki/%E6%AD%A3%E4%BA%A4%E5%A4%9A%E9%A0%85%E5%BC%8F">正交多项式序列</a>”</strong>,难道说,这里的特征向量,就是一组正交基,他们的线性表达,恰好可以被这样的多项式可以逼近?不知道,好希望有人能给我讲讲啊。</p>
<p>后来看到<a href="http://liao.cpython.org/scipy09/">这篇</a>,多少给出了一些答案:</p>
<blockquote>
<p>$p(x) = \sum_{n = 0}^{3} a_nT_n =
a_0 T_0(x)+a_1 T_1(x)+a_2 T_2(x)+a_3 T_3(x)$,</p>
</blockquote>
<blockquote>
<p>$p(x)$是我们造出来的最高项为3次方的多项式,去拟合题目中给的4个点$(1,1),(2,3),(3,5),(4,4)$,把$x$带入进去,就可以递归的推出$T_i(x)$,结果$y$你也知道,剩下的就是解一个线性方程,求出这些待定系数$a_i$了。</p>
</blockquote>
<p>也就是说,你用切比雪夫多项式,去逼近你的那些需要拟合的点。为何要这么样做呢?因为这样的拟合可以防止<a href="https://baike.baidu.com/item/龙格现象">龙格现象</a>,且,这样的逼近是一个“多项式在连续函数的最佳一致逼近”(其实这个我也不太懂?难道是说,这样的逼近方法最优?算了,先不研究了,继续…)</p>
<p>好吧,我假装,我对这里面的关系和原理已经深刻理解了(未来会的,哈哈哈),那么,我接下来看,如何应用切比雪夫多项式展开,到GCN的优化当中去吧!</p>
<p>前戏有点多哈…….</p>
<h3 id="chebnet">ChebNet</h3>
<p>回忆一下,$g_\theta(\Lambda)=\sum_{j=0}^K \theta_j \Lambda^j$,这个是之前,骚操作,生生憋出来的神经网络参数:$g_\theta(\Lambda)$。</p>
<p>现在</p>
<p>$g_\theta(\Lambda)=\sum_{j=0}^K \theta_j \Lambda^j \rightarrow \sum_{j=0}^K \theta_j T_k(\hat \Lambda)$</p>
<p>这样做完,会有啥影响呢?我们来回忆一下,当初这个$g_\theta$怎么创造出来的:</p>
<blockquote>
<p>ChebNet,来了个神奇的操作,把$g_\theta$变成了关于特征值n次$\lambda_i$的多项式:$g_\theta(\Lambda)$</p>
</blockquote>
\[g_\theta(\Lambda) =
\begin{pmatrix}
\sum_{j=0}^K \theta_j \lambda_1^j & & \\
& \ddots & \\
& & \sum_{j=0}^K \theta_j \lambda_n^j
\end{pmatrix}\]
<p>看,每一项,其实都是一个关于$\lambda_i$的K次多项式:$g(\lambda_1) = \theta_1 \lambda_1 + \theta_2 \lambda_1^2 + \theta_3 \lambda_1^3 + … + \theta_K \lambda_1^K$,这个是一个多项式函数,对吧?现在,我再来个骚操作,就是我用一个切比雪夫多项式,去逼近这个多项式函数:</p>
\[g(\lambda_1) = \theta_1 \lambda_1 + \theta_2 \lambda_1^2 + ... + \theta_K \lambda_1^K \rightarrow \\
= \theta_1 T_0(\lambda_1) + \theta_2 T_0(\lambda_1^2) + ... + \theta_K T_0(\lambda_1^K) \\
T_i(\lambda_1) 就是切比雪夫递归式项\]
<p>这个只是$lambda_1$,我们对整个$Lambda$做变换:</p>
\[(g_\theta * x) \\
= U \sum_{j=0}^K \theta_j \Lambda^j U^T x \\
\approx U \sum_{j=0}^K \theta_j T_j(\Lambda^j) U^T x \\
因为Chebyshev多项式作用在对角矩阵上,不会影响矩阵运算\\
那就改变一下运算顺序,先把矩阵运算放进去 \\
= \sum_{j=0}^K \theta_j T_j (U (\Lambda^j) U^T) x \\
= \sum_{j=0}^K \theta_j T_j (L) x \\\]
<p>OK! 现在再观察这个式子:$(g_\theta * x)=\sum_{j=0}^K \theta_j T_j (L) x$,$L$是已知的,而$T_j(L)$,也可以递归推出,那剩下的就是需要梯度下降求解的参数$\theta_j$了,而且,计算复杂度也降下来了,只要递归推一下$T_j$既可以,是$O(n)$复杂度的了。</p>
<p>这里,其实是有纰漏的,你如果看<a href="https://zhuanlan.zhihu.com/p/106687580">superbrother的推导</a>,他的结果是:$(g_\theta * x)=\sum_{j=0}^K \theta_j T_j (\hat L) x$,注意到了么?拉普拉斯矩阵从$L$变成了$\hat L$,这个$\hat L$是什么鬼?</p>
<p>原因是出在,切比雪夫展开,要求$x$的定义域必须是$[-1,1]$,为了满足这一点,要让$\lambda$们的值,都要在这个范围内,要对矩阵$\Lambda$做变形:</p>
\[\hat L = \frac{2}{\lambda_{max}} L - I\]
<p>其中最大特征值$\lambda_{max}$可以利用幂迭代法(power iteration)求出,具体我也没去深究了,感兴趣,可以看看<a href="https://www.cnblogs.com/fahaizhong/p/12240051.html">superbrother给出的链接</a>。</p>
<p>参考切比雪夫递推式:</p>
<blockquote>
<p><strong>Chebyshev多项式的递推公式: $g_{n+1}(x) = 2xg_n(x) - g_{n-1}(x)$</strong></p>
</blockquote>
<p>可以得到:</p>
\[T_0(\hat L) = I \\
T_1(\hat L) = \hat L \\
T_j(\hat L) = 2T_{j-1}(\hat L) - T_{j-2}(\hat L)\]
<p><em>崩溃了么?</em></p>
<p>如果没有,强!我稍微总结一下:</p>
<ul>
<li>我们要模仿CNN的卷积,为何我们要做卷积呢?我们是为了做不同信号的滤波。</li>
<li>可是图网络不具备空间不变形,所以呢,只好把卷积核设计到了频域里。参照傅里叶变换,我们用拉普拉斯矩阵的特征向量,当我们的正交基,来做变换。</li>
<li>这样下来,需要做特征值分解,且,卷积核不具备局部性,只好改进。</li>
<li>改进的方法是先生生憋出一个基于特征值的多项式,来替换频域的参数$\theta$</li>
<li>然后,在进一步,用切比雪夫多项式,来逼近这个特征值的多项式</li>
</ul>
<p>至此,完成了图神经网络最核心的频域的骚操作,终于让基于频(谱)域的图卷积得以实现了。</p>
<h2 id="gcn">GCN</h2>
<p>你以为完了么?骚年,天真的很呐!还要简化,简化到死!这次是对切比雪夫多项式再简化,只取,0阶和1阶的展开。参考:<a href="https://zhuanlan.zhihu.com/p/76296353">Graph Convolutional Networks:从卷积到GCN</a>,<a href="https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1609.02907">论文:《Semi-Supervised Classification with Graph Convolutional Networks》</a>。</p>
<p>这个便是GCN的来历,不够我吐槽一下,这个名字有些无耻,因为所有这些方法其实都是图卷积(Graph Convolutional Network),人家都没好意思占用这个“大名字”,你居然就注册成商标了,呵呵。</p>
<p>正如上面说的,还要简化,我们一起来推导:</p>
\[(g_\theta * x) = \\
\sum_{j=0}^K \theta_j T_j (L) x \\
\approx \theta_0 x + \theta_1(\hat L) \\
= \theta_0 x + \theta_1(\hat L) \\
= \theta_0 x + (\frac{2}{\lambda_{max}} L - I) x \\
\lambda_{max} \leqslant 2(这个我也没深究,是可以证明的) \\
\approx \theta_0 x + \theta_1(L - I) x \\
= \theta_0 x + \theta_1(L - I) x \\
= \theta_0 x + \theta_1( D^{- \frac{1}{2}} W D^{-\frac{1}{2}} ) x \\
这个是拉普拉斯矩阵的对称归一化的拉普拉斯矩阵 \\
然后,再简化一下,令\theta_0 = -\theta_1,上式继续简化,\\
= \theta(I_n + D^{-\frac{1}{2}} W D^{-\frac{1}{2}} ) \\
由于谱半径[0,2]太大,归一化一下(为何做这步?没搞明白)\\
= \hat D^{-\frac{1}{2}} \hat W \hat D^{-\frac{1}{2}}\\
其中,\hat W = W + I_n, \hat D_{ij} = \sum_j \hat W_{ij}\]
<p>最终,</p>
<p>我们得到:\(\underbrace{g_\theta * x}_{\mathbb R^{N \times 1}} = \theta( \underbrace{ \hat D^{-\frac{1}{2}} \hat W \hat D^{-\frac{1}{2}}}_{\mathbb R^{n \times n}} ) \underbrace{x}_{\mathbb R^{n \times 1}}\)</p>
<p>这里有一些需要说明的,$x$居然是$n$维度的,$n$是节点数,出乎意料把,这个原因是,</p>
<p><a href="https://zhuanlan.zhihu.com/p/76296353">参考</a></p>
<blockquote>
<p>$x$就是graph上对应每个节点的feature构成的向量,$x=(x_1,x_2,…,x_n)$ ,这里暂时对每个节点都使用标量,相当于channel为1。</p>
</blockquote>
<p>把$x$扩展到多维$C$去,$x \in \mathbb R^{N \times 1} \rightarrow X \in \mathbb R^{N \times C}$,$N$是节点数,$C$是节点上的维度表示,$X$变成整个图的特征矩阵(包含了所有的nodes)。随之参数也从$\theta \in \mathbb R \rightarrow \Theta \in \mathbb R^{C \times F}$,$F$为卷积核个数。</p>
<p>最终,公式表达为:</p>
\[\underbrace{Z}_{\mathbb R^{N \times F}} = ( \underbrace{ \hat D^{-\frac{1}{2}} \hat W \hat D^{-\frac{1}{2}}}_{\mathbb R^{N \times N}} ) \underbrace{X}_{\mathbb R^{N \times C}} \underbrace{\Theta}_{\mathbb R^{C \times F}}\]
<p>GCN已经把谱域家族荣耀到极致了,但是,他仍然是不完美的:</p>
<blockquote>
<p>GCN的缺点也是很显然易见的:第一,GCN需要将整个图放到内存和显存,这将非常耗内存和显存,处理不了大图;第二,GCN在训练时需要知道整个图的结构信息(包括待预测的节点)</p>
</blockquote>
<p>后面,我们来填这2个坑。</p>
<h1 id="空域卷积">空域卷积</h1>
<p>上面终于谈完了谱域(Spectral)卷积啦,现在我们可以说说空域(Spatial)卷积了。</p>
<p>空域卷积,对我们这些正常人来说,可能更好理解。就是得有个卷积核,过去是和图片卷积,现在是要和图卷积了,过去是在图片上,卷积核形状是固定的,现在是不固定的了,如何解决不固定问题,就是要解决的问题啦。当然还有池化,也是需要解决的问题。还可以引入注意力模型,恩,这些都是可以类比的了。</p>
<h2 id="graphsage">GraphSAGE</h2>
<p>参考:</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/136521625">图神经网络从入门到入门#GraphSAGE</a></li>
<li><a href="https://mp.weixin.qq.com/s/BBZvwzEu2NFOP0WJpaiZtw">Inductive Learning 大神—GraphSAGE</a></li>
</ul>
<p><strong>Inductive(归纳) learning和Transductive(直推) learning</strong>的概念?就讨厌玩概念,Inductive,就是从局部的图推演出整体的图特性,就是用图上某些有限的节点和关系,学习出整个图上泛化特性。而Transductive就得用整个图的信息才可以,前面的那一堆谱方法,都是用所有的节点,即使是最简化的GCN,也需要所有的节点信息($\underbrace{X}_{\mathbb R^{N \times C}}$ 里的N,就表明是所有的节点)。</p>
<p>正如前面谈及GCN的不足的时候提及到的,很多时候,你是不可能用所有的图的节点这么折腾的,比如社交网络中10亿+的节点数,这得多少大显卡才跑的开啊。而且,你是知道邻接矩阵的的,也就是你知道这个图的所有节点间的关系。但是,现实中,很多情况,连关系可能也是要学习和探索的。</p>
<p>GrachSAGE(Graph Sample and Aggregate)就是为了解决GCN的上面说的两个问题:</p>
<p><img src="/images/20210112/1610447058423.jpg" alt="" class="myimg" /></p>
<p>GraphSAGE是这样玩的:对每一个节点,随机采样他的K跳近邻,采样出一颗子图(其实是个树吧?),然后使用一个聚合函数(这个函数得设计),分K层依次聚合,就跟消息传递似的,一直从边缘传播到中心,更新这个节点的embeding表示。</p>
<p>【咋采样?】</p>
<p>采用一个叫“定长抽样”的方法,固定当前节点的邻居数为$S$,然后采用有放回的重采样/负采样方法达到,保证每个节点(采样后的)邻居个数一致,这样做是为了训练时候批次一样。</p>
<p>【这里参数是啥?】</p>
<p>你不是定义了K跳/层邻居(K-hop)了么?所以你就有K个参数,每个参数是应该是$\matbb R^D$,而不是个矩阵,不过应该有K个,每层一个。然后,每一个邻居,都要先和这个$W$相乘,然后聚合(聚合有3种方式,后面提),然后逐层向中心聚拢。每一层(第k层)共享一个相同的$W_k$,大家都用这一个$W$。</p>
<p><img src="/images/20210112/1610448803381.jpg" alt="" class="myimg" /></p>
<p>【咋聚合?参数呢?】</p>
<p>就是如何根据周边的节点,算出当前目标节点的更新后的embeding值。(你看,其实图结构没变),一共有三种方式:Mean、LSTM、Pooling。(这块没细看,需要再看,大致明白就成)。</p>
<p>【损失函数】</p>
<p>如果是有监督的情况下,可以使用每个节点的预测lable和真实lable的交叉熵作为损失函数。如果是在无监督的情况下,可以假设相邻的节点的embedding表示尽可能相近。</p>
<p>【GraphSAGE得到了啥】</p>
<p>它是得到了<strong>每个node的embeding的向量</strong>,然后你可以单个取出一个向量来,去做分类、预测啥的了,每个node有个语义表示啦!</p>
<p>【GraphSAGE的缺点】</p>
<p>GraphSAGE也有一些缺点,每个节点那么多邻居,GraphSAGE的采样没有考虑到不同邻居节点的重要性不同,而且聚合计算的时候邻居节点的重要性和当前节点也是不同的。这个就需要下面介绍的GAT(Graph Attention Networks)来解决喽。</p>
<h2 id="gat">GAT</h2>
<p><img src="/images/20201127/1606460968299.jpg" alt="" class="myimg" /></p>
<h1 id="开源项目">开源项目</h1>
<p>pytorch的那个项目</p>
<p>开源的那个</p>
<h1 id="参考">参考</h1>
<h2 id="文档">文档</h2>
<ul>
<li><a href="https://www.zhihu.com/column/c_1131513793020334080">精通GCN全攻略</a></li>
<li><a href="https://www.zhihu.com/question/54504471/answer/332657604">知乎:如何理解 Graph Convolutional Network(GCN)?</a>,超赞的讨论帖</li>
<li><a href="https://www.cnblogs.com/lart/p/10463706.html">图神经网络小结</a></li>
<li><a href="https://mp.weixin.qq.com/s/MYePL0iNfGymOLcB2KVtug">GNN 入门系列: 直观理解和应用介绍</a>,简单易懂的入门贴。</li>
<li><a href="https://luweikxy.gitbook.io/machine-learning-notes/graph-neural-networks/graph-neural-networks-review">GNN图神经网络综述</a>,我勒个去,这个哥们整理的太全了,基本上可以覆盖所有的网上的资料了。</li>
<li><a href="https://zhuanlan.zhihu.com/p/185773047">知乎上一个很赞的GNN系列七篇</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/85287578">拉普拉斯矩阵与拉普拉斯算子的关系</a></li>
</ul>
<h2 id="视频">视频</h2>
<p>【目前看过的】</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV1ta4y1t7EK/?spm_id_from=333.788.videocard.1">图卷积神经网络-沈华伟</a></li>
<li><a href="https://www.bilibili.com/video/BV1Ry4y1r73h?from=search&seid=6393305346667146785">高级人工智能 第七讲-图神经网络 中国科学院大学 2020秋季 沈华伟</a>,沈老师讲的最最棒。</li>
<li><a href="https://www.bilibili.com/video/BV1G54y1971S/?spm_id_from=333.788.videocard.0">台大李宏毅助教讲解GNN图神经网络</a>,宏毅老师的助教也确实不同凡响,讲的还不错。</li>
<li><a href="https://www.bilibili.com/video/BV1At411N7nh/?spm_id_from=333.788.videocard.12">图神经网络介绍-Introduction to Graph Neural Network(GNN)</a>,不知名的台湾小哥的讲座,基本上也是GNN通识教育。</li>
<li><a href="https://campus.swarma.org/course/243">网络上的CNN-图卷积网络模型</a>,集智的小姐姐的科普讲座,思路很清晰。</li>
<li><a href="https://www.bilibili.com/video/BV164411x7L2?p=1">频域、谱域以及拉普拉斯算子在图上的应用</a>,小姐姐讲的脉络很清晰,可惜没讲完。</li>
<li><a href="https://www.bilibili.com/video/BV1rf4y1v7cU/?spm_id_from=333.788.videocard.4">PGL全球冠军团队带你攻破图神经网络</a></li>
<li><a href="https://www.bilibili.com/video/BV1c4411c7KM/?spm_id_from=333.788.videocard.8">图网络论文读书会 18 期分享:高飞《GNN可以有多强?》 集智学园</a>:这个是一个评价GNN框架的论文的讲解。</li>
</ul>
<p>【待学习的】</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV135411t76X?from=search&seid=6393305346667146785">图神经网络学习班-GCN-图神经网络认知及推理</a></li>
<li><a href="https://www.bilibili.com/video/BV1w7411Q7pQ/?spm_id_from=333.788.videocard.11">图神经网络在线研讨会2020.3.29后半场(转载)</a></li>
<li><a href="https://www.bilibili.com/video/BV1j54y1975p?p=23">P23中科院自动化所常建龙:新生卷积神经网络—从欧几里得空间到非欧几里得空间1</a></li>
<li><a href="https://www.bilibili.com/video/BV1j54y1975p?p=24">P24MIT在读博士生金汶功:图表示学习在化学中的应用1:03:42</a></li>
<li><a href="https://www.bilibili.com/video/BV1Bv411k745/?spm_id_from=333.788.videocard.3">沈华伟:图神经网络的灵魂三问</a></li>
<li><a href="https://www.bilibili.com/video/BV1EV411y7V6?from=search&seid=6393305346667146785">20201021 图神经网络:深图远算,理胜其辞</a></li>
<li><a href="https://www.bilibili.com/video/BV1jE411p7pj/?spm_id_from=333.788.videocard.0">cs224w图神经网络中文简洁版graph model</a></li>
<li><a href="https://www.bilibili.com/video/BV1aJ411J7d5/?spm_id_from=333.788.b_636f6d6d656e74.5">图深度表示(GNN)的基础和前沿进展</a></li>
<li><a href="https://www.bilibili.com/video/BV1Hx411X762/?spm_id_from=333.788.videocard.19">SFFAI分享 常建龙:基于关系的深度学习【附PPT】</a></li>
<li><a href="https://www.bilibili.com/video/BV1G54y1e7yh">从代码的角度深入浅出图神经网络(GNN)第一期</a></li>
<li><a href="https://www.bilibili.com/video/BV1uV411f7Y8/?spm_id_from=333.788.videocard.30">图神经网络在线研讨会</a></li>
<li><a href="https://www.bilibili.com/video/BV1fZ4y1N7yp/?spm_id_from=333.788.videocard.4">深度学习论文复现·NLP·】图神经网络【nodevec】CNN开山之作</a></li>
<li><a href="https://www.bilibili.com/video/BV1Vb411W7t9/?spm_id_from=333.788.videocard.3">中科院自动化所在读博士生高君宇:图神经网络在视频理解中的探索</a></li>
<li><a href="https://www.bilibili.com/video/BV1m441167LX/?spm_id_from=333.788.videocard.16">北京邮电大学-石川教授-《异质信息网络的表示学习与应用》 SMP前沿技术讲习班</a></li>
<li><a href="https://campus.swarma.org/course/598/study">图网络:融合推理与学习的全新深度学习架构——AI&Society 第八期– 图神经网络及其它</a></li>
<li><a href="https://campus.swarma.org/course/1863">基于图注意网络的链路预测</a></li>
<li><a href="https://campus.swarma.org/course/240">非欧氏数据的几何深度学习</a></li>
<li><a href="https://campus.swarma.org/course/1371">利用图神经网络解决玻璃相变问题 DeepMind论文解读</a></li>
</ul>
西方艺术史
2020-10-05T00:00:00+08:00
https://www.piginzoo.com/life/2020/10/05/art-history
<h1 id="序">序</h1>
<p>尼采说,人生是充满悲剧色彩的,但不应沉沦,而应以酒神精神、审美的角度来看待人生的境遇,让人们更有勇气与力量来面对自己的生命。真正的艺术可以使我们感受到艺术家创作时力量充盈的状态,激起创造状态,激发醉境,像酒神一样高歌。</p>
<p>虽然西方艺术包含了绘画、建筑和雕塑,这里主要还是集中在绘画上,这和西方艺术的组成比例也一致,绘画,特别是文艺复兴开启的绘画艺术,才是西方艺术绽放的开始。</p>
<p>艺术史就是艺术家的历史,作为一个艺术小白,对古往今来的无数艺术大师们,充满了无限的崇敬,在学习过程中,整理出自己的学习之路,让自己可以常常温故大师们的杰作。当然,这写都是按照自己的理解来整理出来的线索,难免疏漏,我会不断地更新修正。</p>
<h1 id="古希腊和罗马">古希腊和罗马</h1>
<h1 id="中世纪">中世纪</h1>
<h1 id="文艺复兴">文艺复兴</h1>
<h2 id="乔托-1266">乔托 1266</h2>
<p><a href="https://www.zyzw.com/sjmh081.htm">乔托</a> 1266-1336,是桥梁式画家,承接着中世纪艺术和文艺复兴。被誉为“欧洲绘画之父”,现代绘画天才的奠基者。</p>
<p><img src="https://www.zyzw.com/sjmh/qt003.jpg" alt="" class="myimg100" /></p>
<p>《哀悼基督》是乔托为意大利帕多瓦的阿雷那礼拜堂所作的最负盛名的装饰壁画,有了透视的概念,摆脱了中世纪的平面感。</p>
<h2 id="马萨乔-1401">马萨乔 1401</h2>
<p><a href="https://www.zyzw.com/sjmh082.htm">马萨乔</a>,1401-1428,是第一位使用透视法的画家,在他的画中首次引入了<a href="https://baike.baidu.com/item/%E7%81%AD%E7%82%B9/7454736">灭点</a>。马萨乔的透视法学习是源于佛罗伦萨的伟大建筑家<a href="https://baike.baidu.com/item/%E5%B8%83%E9%B2%81%E5%86%85%E8%8E%B1%E6%96%AF%E5%9F%BA/10693974">布鲁内莱斯基(1377—1446)</a>,他设计建造的圣母百花大教堂,至今仍是佛罗伦萨的地标建筑。</p>
<p><img src="https://www.zyzw.com/sjmh/msq001.jpg" alt="" class="myimg100" /></p>
<p>圣三位一体 马萨乔 意大利 湿壁画 1425~1427年 意大利圣玛利亚·诺维拉教堂,</p>
<p><img src="https://www.zyzw.com/sjmh/msq003.jpg" alt="" class="myimg100" /></p>
<p>逐出伊甸园 马萨乔 意大利 湿壁画 1426~1427年 布兰卡奇礼拜堂藏</p>
<h2 id="佛罗伦萨画派">佛罗伦萨画派</h2>
<h3 id="达芬奇-1452">达芬奇 1452</h3>
<p><a href="https://www.zyzw.com/sjmh001.htm">达芬奇</a>,1452—1519,是与拉斐尔,米开朗基罗齐名的意大利文艺复兴三杰,是一位思想深邃,学识渊博、多才多艺的画家、寓言家、雕塑家、发明家、哲学家、音乐家、医学家、生物学家、地理学家、建筑工程师和军事工程师。</p>
<p><img src="https://www.zyzw.com/sjmh/dfq001.jpg" alt="" class="myimg100" /></p>
<p>《蒙娜丽莎》(约1503-1506),现藏巴黎卢浮宫,是他极为珍爱的作品,始终带在身边,晚年移居法国也不离左右,最后遗存巴黎。</p>
<p><img src="https://www.zyzw.com/sjmh/dfq002.jpg" alt="" class="myimg100" /></p>
<p>《最后的晚餐》(约1498),现藏米兰圣玛丽亚德尔格契修道院餐厅。</p>
<h3 id="米开朗基罗">米开朗基罗</h3>
<p><a href="https://www.zyzw.com/sjmh002.htm">米开朗基罗</a>,1475-1564,文艺复兴巨匠,他和达芬奇一样多才多艺,兼雕刻家、画家、建筑家和诗人于一身,他得天独厚活到89岁。</p>
<p><img src="https://www.zyzw.com/sjmh/mkljl001.jpg" alt="" class="myimg100" /></p>
<p>大卫</p>
<p><img src="https://www.zyzw.com/sjmh/mkljl016.jpg" alt="" class="myimg100" /></p>
<p>哀基督</p>
<p><img src="https://www.zyzw.com/sjmh/mkljl002-2.jpg" alt="" class="myimg100" /></p>
<p>创造亚当 米开郎基罗 壁画 1510年 280×570厘米 藏意大利西斯廷教堂</p>
<p><img src="https://www.zyzw.com/sjmh/mkljl018.jpg" alt="" class="myimg100" /></p>
<p>创世纪 米开郎基罗 壁画 1510年 36.54×13.14米 藏意大利西斯廷教堂</p>
<h3 id="拉斐尔-1483">拉斐尔 1483</h3>
<p><a href="https://www.zyzw.com/sjmh019.htm">拉斐尔</a>,1483—1520,他的一系列圣母画像,和中世纪画家所画的同类题材不同,都以母性的温情和青春健美而体现了人文主义思想, 美术史上尊称他为“画圣”。</p>
<p><img src="https://www.zyzw.com/sjmh/lfe003.jpg" alt="" class="myimg100" /></p>
<p>雅典学院 意大利 拉斐尔 壁画 纵279.4×横617.2厘米 梵蒂冈塞纳图拉大厅</p>
<p><img src="https://www.zyzw.com/sjmh/lfe007.jpg" alt="" class="myimg100" /></p>
<p>草地上的圣母 拉斐尔 意大利 木板油画 1506年 113x88cm 现藏奥地利维也纳美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/lfe017.jpg" alt="" class="myimg100" /></p>
<p>自画像 拉斐尔 1506年 木板油画 47.3x34.8cm 拉斐尔23岁时的作品</p>
<h3 id="波蒂切利-1445">波蒂切利 1445</h3>
<p><a href="https://www.zyzw.com/sjmh027.htm">波提切利</a> ,1445-1510,是欧洲文艺复兴早期佛罗伦萨画派的最后一位画家,</p>
<p><img src="https://www.zyzw.com/sjmh/btql001.jpg" alt="" class="myimg100" /></p>
<p>维纳斯的诞生 波提切利 意大利 1487年 画布蛋彩 175x287.5cm 意大利佛罗伦萨乌菲齐美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/btql002.jpg" alt="" class="myimg100" /></p>
<p>春 波提切利 意大利 1482年 蛋彩木版 203x314cm 意大利佛罗伦萨乌菲齐美术馆</p>
<h2 id="威尼斯画派">威尼斯画派</h2>
<h3 id="贝利尼-1430">贝利尼 1430</h3>
<p><a href="https://www.zyzw.com/sjmh030.htm">贝利尼</a>,1430-1516,威尼斯绘画派的创始人,文艺复兴后期最伟大的画家之一,艺术逐渐表现出明朗和宁静的境界,描绘的人物蕴含深厚的人性,充溢着乐观的精神。</p>
<p><img src="https://www.zyzw.com/sjmh/bnn001.jpg" alt="" class="myimg100" /></p>
<p>众神聚宴 贝利尼 意大利 1514年 布上油画 170x188cm 华盛顿国家美术馆藏</p>
<h3 id="乔尔乔内-1477">乔尔乔内 1477</h3>
<p><a href="http://zyzw.com/sjmh021.htm">乔尔乔内/吉奥乔尼</a>,1477~1510,是第一个真正意义上的意大利威尼斯画派画家,架上画的先行者。1510年,正当他才华横溢,精力充沛,大展宏图之际,威尼斯发生了一次可怕的鼠疫。据说,当时画家正热恋一位漂亮的威尼斯姑娘,那姑娘染上鼠疫,画家不顾一切地去看望她,致使自己染鼠疫去世,只活了33岁。</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201907/13/110154xnzr2nn2z1zrz6pe.jpg" alt="" class="myimg100" /></p>
<p><a href="http://www.ashoucang.com/article-5727-1.html">入睡的维纳斯</a> 约1510-1511年 乔尔乔内和提香 意大利 108.5cm×175cm 布面油彩 德累斯顿国家美术馆藏(乔尔乔内最成功的油画作品,最后由提香完成,维纳斯作为一个女性模特的做法,也影响了后世的许多画家,如提香、普桑、委拉斯贵兹、戈雅、马奈、毕加索等)</p>
<p><img src="http://zyzw.com/sjmh/qeqr003.jpg" alt="" class="myimg100" /></p>
<p>暴风雨 约1505-1507年 乔尔乔内 意大利 82cm×73cm 布 油彩 威尼斯美术院藏</p>
<p><img src="http://zyzw.com/sjmh/qeqr007.jpg" alt="" class="myimg100" /></p>
<p>卡斯泰尔弗兰科 乔尔乔内 意大利 1504年 37x46cm 祭坛油画</p>
<p><img src="http://zyzw.com/sjmh/qeqr009.jpg" alt="" class="myimg100" /></p>
<p>劳拉像 乔尔乔内 意大利 布面油画 1506年 40x60cm</p>
<h3 id="提香-1490">提香 1490</h3>
<p><a href="https://www.zyzw.com/sjmh020.htm">提香</a>,<a href="http://www.ashoucang.com/tixiang/">作品集</a>,1490~1576,意大利文艺复兴后期的伟大画家,威尼斯画派的代表,青年时期一度与乔尔乔涅紧密合作,乔尔乔涅死后即成为威尼斯画派领袖,在文艺复兴画坛活动60余年,作品遍及西欧各国,以绚丽色彩和健美造型树立了新的艺术典型。</p>
<p><img src="https://www.zyzw.com/sjmh/tx019.jpg" alt="" class="myimg100" /></p>
<p>崇拜维纳斯 提香 意大利 1519年 布面油画 175x172cm 西班牙马德里普拉多博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/tx003.jpg" alt="" class="myimg100" /></p>
<p>酒神的狂欢 提香 1518~1520年间 油画 175×193厘米大 藏马德里普拉多美术馆</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201905/22/100957yuy9cigydfyy4ncu.jpg" alt="" class="myimg100" /></p>
<p>达那厄</p>
<p><img src="http://www.woaihuahua.com/uploads/allimg/140702/1-140F222233N32.jpg" alt="" class="myimg100" /></p>
<p>《人间的爱与天上的爱》,约1515年,意大利,提香,画布油画,118cmx279cm,罗马波尔葛塞美术馆藏</p>
<h2 id="丢勒-1471">丢勒 1471</h2>
<p><a href="https://www.zyzw.com/sjmh029.htm">丢勒</a>,1471-1528,德国最伟大的画家,德国文艺复兴的巨匠,是油画家、版画家、水彩画家及艺术理论家。</p>
<p><img src="https://www.zyzw.com/sjmh/dl010.jpg" alt="" class="myimg100" /></p>
<p>自画像 丢勒 1498年 板上油画 52x41cm 马德里普拉多美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/dl015.jpg" alt="" class="myimg100" /></p>
<p>丢勒的母亲肖像 丢勒 德国 1514年 木炭素描 42x30cm 英国伦敦国立美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/dl025.jpg" alt="" class="myimg100" /></p>
<p>野兔 丢勒 德国 1502年 纸上水彩画 25.1x22.6cm 奥地利维也纳阿尔贝蒂娜博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/dl016.jpg" alt="" class="myimg100" /></p>
<p>十三岁时的自画像 丢勒 德国 1484年 素描 40x30cm 奥地利维也纳阿尔贝蒂娜博物馆</p>
<h2 id="勃鲁盖尔-1525">勃鲁盖尔 1525</h2>
<p><a href="https://www.zyzw.com/sjmh084.htm">彼得·勃鲁盖尔</a>(Pieter Bruegel,1525-1569)16世纪尼德兰地区最伟大的画家,也是欧洲美术史上第一位“农民画家”。生于尼德兰北方的荷兰省北部布拉班特州勃鲁盖尔村。他是欧洲第一个在绘画中自觉而大量地描绘农民形象的画家,一生以农村生活作为艺术创作题材,故有“农民的勃鲁盖尔”之称。他的艺术语言朴实亲切,散发着尼德兰的泥土香气。</p>
<p><img src="https://www.zyzw.com/sjmh/blge001.jpg" alt="" class="myimg100" /></p>
<p>雪中猎人 勃鲁盖尔 尼德兰 油画 1565年 117×162厘米 藏维也纳艺术博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/blge003.jpg" alt="" class="myimg100" /></p>
<p>建造巴贝尔塔 勃鲁盖尔 尼德兰 油画 1563年 155x114cm 奥地利维也纳艺术史博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/blge007.jpg" alt="" class="myimg100" /></p>
<p>收割 勃鲁盖尔 尼德兰 木板油画 1565年 160.7x118cm 纽约大都会博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/dszhx025.jpg" alt="" class="myimg100" /></p>
<p>自画像素描</p>
<p><img src="https://www.zyzw.com/sjmh/blge002.jpg" alt="" class="myimg100" /></p>
<p>乡村婚宴 勃鲁盖尔 1568年 木板油画 114×164cm 维也纳艺术史博物馆</p>
<h2 id="巴洛克风格">巴洛克风格</h2>
<h3 id="卡拉瓦乔-1571">卡拉瓦乔 1571</h3>
<p><a href="http://zyzw.com/sjmh039.htm">卡拉瓦乔</a>(Michelangelo Merisi da Caravaggio 1571-1610),意大利杰出的现实主义画家。1593年到1610年间活跃于罗马、那不勒斯、马耳他和西西里。 他从九十年代起创作了一系列表现了叛逆精神的宗教题材作品,他毫无顾忌地把流浪汉、渔夫、吉卜赛人大胆地画进了神圣的祭坛里,“不画不存在的人!”。在这些作品中人物充满了激动不安的热情,他们就象是一群暴动者骚动不安。在这些画幅里画家运用了复杂的光线在画面上形成强烈的明暗对比,那些充满力量的线条,表现出人物的粗犷的性格。他通常被认为属于巴洛克画派,对巴洛克画派的形成有重要影响。</p>
<p>个人超喜欢放荡不羁的卡拉瓦乔!</p>
<p><img src="http://zyzw.com/sjmh/klwq001.jpg" alt="" class="myimg100" /></p>
<p>占卜者 卡拉瓦乔 意大利 布面油画 1596年 99×131厘米 巴黎卢浮宫藏</p>
<p><img src="http://zyzw.com/sjmh/klwq002.jpg" alt="" class="myimg100" /></p>
<p>打牌作弊者 卡拉瓦乔 意大利 1595年 布面油画 107x99cm 私人收藏</p>
<p><img src="http://zyzw.com/sjmh/klwq010.jpg" alt="" class="myimg100" /></p>
<p>圣马太与天使 卡拉瓦桥 意大利 布面油画 1602年 296.5x195cm</p>
<p><img src="http://zyzw.com/sjmh/klwq011.jpg" alt="" class="myimg100" /></p>
<p>圣马太蒙召 卡拉瓦乔 意大利 布面油画 1599年 322x340厘米 罗马路易吉·德佛朗西斯教堂收藏</p>
<p><img src="https://www.kuhw.com/d/file/p/2019/09-12/420eb85c31b9d8dbb2f3465a4f67b3c5.jpg" alt="" class="myimg100" /></p>
<p>被蜥蜴咬伤的男孩 作于1595 - 1600 年;藏于英国伦敦国家画廊</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201905/24/161532i8qf3qfjeqrw6cwa.jpg" alt="" class="myimg100" /></p>
<p>手捧水果篮的男孩</p>
<h3 id="鲁本斯-1577">鲁本斯 1577</h3>
<p><a href="https://www.zyzw.com/sjmh022.htm">鲁本斯</a>,<a href="http://www.ashoucang.com/lubensi/index.php">作品</a>,(Peter Paul Rubens,1577-1640)是佛兰德斯大画家,他是欧洲第一个巴洛克式的画家,他的绘画具有巴洛克艺术的壮丽风格。他在二十年代所画肖像,绝大部分是盛装的、外表上十分华贵的贵族肖像,还有比较朴素的便装肖像的为数甚少。他画的肖像之所以引人入胜,不仅由于绘画技巧的完美,同时还由于他在肖像里表现了脉搏在热烈地跳动、目光中充满了生命力、富有弹性的皮肤的栩栩如生的人物。鲁本斯还是一个出色的政治外交家,曾代表赞助他的意大利小公国出使西班牙,在西班牙还指导过后来赫赫有名的委拉斯凯兹。</p>
<p><img src="https://www.zyzw.com/sjmh/lbs001.jpg" alt="" class="myimg100" /></p>
<p>海伦娜·弗尔曼肖像 鲁本斯 1631年 79×54厘米 现存伦敦国立美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/lbs008.jpg" alt="" class="myimg100" /></p>
<p>三圣贤的朝拜 鲁本斯 油画 1609年 346×488厘米 马德里普拉多博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/lbs009.jpg" alt="" class="myimg100" /></p>
<p>玛丽.美第奇像 鲁本斯 油画 1622年 130×108厘米 马德里普拉多博物馆藏</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201906/06/132943ryapcprp0jccphcg.jpg" alt="" class="myimg100" /></p>
<p>强劫留西帕斯的女儿</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201906/24/105016ddv64md7473v2maj.jpg" alt="" class="myimg100" /></p>
<p>四大陆</p>
<h3 id="委拉斯凯兹-1599">委拉斯凯兹 1599</h3>
<p><a href="https://www.zyzw.com/sjmh050.htm">委拉斯凯兹</a>(diego rodriguez de silva velazquez 1599-1660), 又译委拉斯贵支,是17世纪上半叶西班牙杰出的绘画大师,巴洛克式画家,也是西班牙具有贵族威严的绘画巨匠。他24岁入宫,成了腓力四世的宫廷画家。但是,他的艺术并没有因身在宫内而受到束缚,他不仅画君王、王后、王子、公主,也画乞丐、侏儒、白痴和无权无势的朋友;他不仅画《圣经》主题,也借希腊神话主题画风情画、风俗画和人体画。代表作品有《教皇英诺森十世肖像》》、《宫娥》等。</p>
<p><img src="https://www.zyzw.com/sjmh/wlsgz001.jpg" alt="" class="myimg100" /></p>
<p>教皇英诺森十世像 委拉斯凯兹 西班牙 1650年 油画 140X120厘米 罗马利来-庞斐利画廊</p>
<p><img src="https://www.zyzw.com/sjmh/wlsgz002.jpg" alt="" class="myimg100" /></p>
<p>宫娥 委拉斯凯兹 1656年 318×276厘米 藏马德里普拉多博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/wlsgz003.jpg" alt="" class="myimg100" /></p>
<p>小公主 委拉斯凯兹 西班牙 1659年 布面油画 127x107cm 奥地利维也纳艺术博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/wlsgz007.jpg" alt="" class="myimg100" /></p>
<p>煎鸡蛋的妇人 1618年,101×120厘米 爱丁堡爱尔兰国立美术馆</p>
<h3 id="伦勃朗-1606">伦勃朗 1606</h3>
<p><a href="https://www.zyzw.com/sjmh041.htm">伦勃朗</a>, 1606~1669 ,是世界美术史上一位伟大的荷兰现实主义画家,荷兰最杰出的肖像画大师,也是17世纪整个欧洲文化艺术的杰出代表人物之一。他在油画和铜版画方面,都有很高成就。画风质朴自然,画作体裁广泛,擅长肖像画、风景画、风俗画、宗教画、历史画,善采取强烈的明暗对比画法,用光线塑造形体,画面层次丰富,富有戏剧性。他对光线的把控登峰造极,被誉为“45度光影大师”。</p>
<p><img src="https://www.zyzw.com/sjmh/lbl001.jpg" alt="" class="myimg100" /></p>
<p>杜普教授的解剖课 伦勃郎 荷兰 布面油画 1632年 169.5×216.5cm 海牙莫瑞泰斯皇家美术馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/lbl003.jpg" alt="" class="myimg100" /></p>
<p>夜巡 伦勃郎 油画 1642年 363×437厘米 现藏阿姆斯特丹国立美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/lbl017.jpg" alt="" class="myimg100" /></p>
<p>1660年画架前的自画像 伦勃郎 布面油画 1661年 111x90cm 巴黎卢浮宫藏</p>
<h2 id="维米尔-1632">维米尔 1632</h2>
<p><a href="https://www.zyzw.com/sjmh057.htm">维米尔</a>(Johannes Vermeer,1632—1675)荷兰最伟大的画家之一,但却被人遗忘了长达两个世纪之久。维米尔的作品大多是风俗题材的绘画,基本上取材于市民平常的生活。他的画整个画面温馨、舒适、宁静,给人以庄重的感受,充分表现出了荷兰市民那种对洁净环境和优雅舒适的气氛的喜好。维米尔留传下来的作品只有40幅左右,其中多数都是绘画精品。被称为“荷兰小画派”的代表。</p>
<p><img src="https://www.zyzw.com/sjmh/wme001.jpg" alt="" class="myimg100" /></p>
<p>带珍珠耳环的少女 维米尔 荷兰 1665年 布面油画 44.5x39cm 荷兰海牙莫瑞泰斯皇家美术馆</p>
<p><img src="https://www.zyzw.com/sjmh/wme002.jpg" alt="" class="myimg100" /></p>
<p>倒牛奶的女佣 维米尔 荷兰 布面油画 1658年 45×41厘米 现藏阿姆斯特丹国立美术馆</p>
<h2 id="洛可可风格">洛可可风格</h2>
<h3 id="华托-1684">华托 1684</h3>
<p><a href="https://www.zyzw.com/sjmh085.htm">让·安东阿·华托</a>(Jean Antoine Watteau,1684-1721) 法国杰出的洛可可画家。出身于一个烧瓦工人的家庭,早期曾受威尼斯画派和鲁本斯的艺术影响,作品多描绘富家男女的闲逸生活,画风抒情,画中人物带有忧郁之感,反映了贵族阶级精神上的空虚、无聊和彷徨。来到巴黎后,结交了一些上层社会的人士,逐渐把题材转向了描绘贵族男女寻欢作乐的生活中,这种转变是和当时法国的时代有关。</p>
<p><img src="https://www.zyzw.com/sjmh/ht001.jpg" alt="" class="myimg100" /></p>
<p>舟发西苔岛 华托 法国 布面油画 1717年 129×194厘米 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/ht003.jpg" alt="" class="myimg100" /></p>
<p>西苔岛的巡礼 华托 法国 布面油画 1717年 129x194cm</p>
<p><img src="https://www.zyzw.com/sjmh/ht002.jpg" alt="" class="myimg100" /></p>
<p>小丑 华托 法国 布面油画 1718年 185x150cm 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/ht011.jpg" alt="" class="myimg100" /></p>
<p>意大利喜剧演员 华托 法国 布面油画 1720年 81x67cm</p>
<p><img src="https://www.zyzw.com/sjmh/ht004.jpg" alt="" class="myimg100" /></p>
<p>热尔桑的画店 华托 法国 1720年 帆布油画 182cm×306cm 布 油彩 柏林德国国家美术馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/ht013.jpg" alt="" class="myimg100" /></p>
<p>任性的女人 华托 法国 布面油画 1718年 42x34cm 列宁格勒爱尔米塔日美术馆</p>
<h3 id="布歇-1703">布歇 1703</h3>
<p><a href="https://www.zyzw.com/sjmh024.htm">弗朗索瓦·布歇</a>(Frangois Boucher 1703-1770年),罗可可绘画的代表者,十八世纪法国深得当时统治者赏识的画家,32岁就当选为皇家美术学院院士,以后又荣获法国皇帝路易十五首席画师的称号。晚年升为皇家美术学院院长。布歇的这种社会地位和他所处的上层社会,决定了他的艺术主要是迎合当时上流社会的需要。《浴后的狄安娜》就是这一类作品的代表。它假借罗马神话中狩猎女神狄安娜的名义,描绘了上层社会所喜欢的裸女。</p>
<p><img src="https://www.zyzw.com/sjmh/bx001.jpg" alt="" class="myimg100" /></p>
<p>蓬巴杜夫人 布歇 法国 1756年 布面油画 100x80cm</p>
<p><img src="https://www.zyzw.com/sjmh/bx007.jpg" alt="" class="myimg100" /></p>
<p>蓬巴杜夫人 布歇 法国 布面油画 1756年 201cm×157cm 德国慕尼黑古典美术馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/bx009.jpg" alt="" class="myimg100" /></p>
<p>宫女莫菲 布歇 布面油画 1751年 53×64厘米 巴黎卢浮宫</p>
<p><img src="https://www.zyzw.com/sjmh/bx023.jpg" alt="" class="myimg100" /></p>
<p>日出 布歇 法国 1753年 324cm×264cm 布 油彩 伦敦华莱士收藏馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/bx032.jpg" alt="" class="myimg100" /></p>
<p>中国皇帝上朝 布歇 法国 1742年 布面油画 60x80cm 圣彼得堡艾尔米塔什博物馆</p>
<h3 id="弗拉戈纳尔-1732">弗拉戈纳尔 1732</h3>
<p><a href="https://www.zyzw.com/sjmh087.htm">让·奥诺雷·弗拉戈纳尔</a>(Jean Honore Fragonard,1732-1806),洛可可艺术重要的代表人物。师从布歇,20岁自立门户,是布歇的学生和继承人,他在24岁时获得皇家奖学金赴罗马法兰西学院深造两年,尔后游历考察意大利艺术史迹,仔细地研究过提埃波罗等大师的成就,29岁返回巴黎,不久即被选为皇家美术学院院士。在弗拉戈纳尔的艺术中不仅受到布歇和意大利的艺术影响,还有来自北方的鲁本斯的色彩和伦勃朗的明暗法,这使他能立足于广博的艺术精华基础之上,最后形成自己独特的艺术风格。</p>
<p><img src="https://www.zyzw.com/sjmh/flgne001.jpg" alt="" class="myimg100" /></p>
<p>秋千 弗拉戈纳尔 法国 1766~1768年 油画 83×66厘米 伦敦华莱士陈列馆</p>
<p><img src="https://www.zyzw.com/sjmh/flgne002.jpg" alt="" class="myimg100" /></p>
<p>读书少女 弗拉戈纳尔 法国 1785年 油画 64×51.8厘米 温特图尔奥斯卡·莱因哈特收藏馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/flgne005.jpg" alt="" class="myimg100" /></p>
<p>门闩 弗拉戈纳尔 法国 布面油画 1777年 73x93cm 巴黎卢浮宫藏
</p>
<h2 id="新古典主义">新古典主义</h2>
<h3 id="大卫-1748">大卫 1748</h3>
<p><a href="https://www.zyzw.com/sjmh046.htm">雅克·路易·大卫</a>(Jacques Louis David 1748年8月30日-1825年12月9日),是法国新古典主义美术的领导者,在法国美术史上占有重要地位,其作品严谨质朴,气势宏伟。在资产阶级革命民主派雅各宾专政时期,曾任公共教育委员会和美术委员会的委员。早期作品以历史英雄人物为题材,如《荷拉斯兄弟之誓》、《处决自己的儿子布鲁特斯》等。1793年完成名作《马拉之死》。1794年雅各宾政权被反革命颠覆,经过五年的混乱,拿破仑掌握政权后,大卫做了拿破仑一世的宫廷画家。这时期创作了歌颂拿破仑的《加冕式》、《授旗式》等作品。1816年拿破仑被推翻,波旁王朝复辟,将曾对处死路易十六投赞成票的达维德驱逐,他被迫迁居比利时布鲁塞尔,最终客死异国。</p>
<p><img src="https://www.zyzw.com/sjmh/dwd001.jpg" alt="" class="myimg100" /></p>
<p>苏格拉底之死 大卫 法国 1787年 布面油画 129.5×196.2cm 纽约大都会艺术博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd002.jpg" alt="" class="myimg100" /></p>
<p>马拉之死 大卫 1793年 布油彩 162cm×125cm 布鲁塞尔比利时皇家美术馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd003.jpg" alt="" class="myimg100" /></p>
<p>拿破仑一世及皇后加冕典礼 大卫 法国 1815年 布面油画 610×931cm 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd004.jpg" alt="" class="myimg100" /></p>
<p>萨宾妇女 大卫 法国 1799年 布面油画 385×522cm 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd009.jpg" alt="" class="myimg100" /></p>
<p>荷拉斯兄第的宣誓 大卫 1784年 法国 330cm×425cm 布油彩 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd010.jpg" alt="" class="myimg100" /></p>
<p>拿破仑越过圣贝尔纳山 拿破仑越过圣贝尔纳山 大卫 法国 1801年 油画 260x221cm 马尔曼松皇家博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/dwd014.jpg" alt="" class="myimg100" /></p>
<h3 id="安格尔-1780">安格尔 1780</h3>
<p><a href="https://www.zyzw.com/sjmh023.htm">让·奥古斯特·多米尼克·安格尔</a>(Jean Auguste Dominique Ingres,1780—1867),是继大卫之后法国新古典主义画派的最后代表。安格尔出生于法国西南部,从小就受到良好的艺术熏陶,在美术和音乐方面都颇有天赋。安格尔17岁到大卫画室学习,得到真传。两年后考入美术学院,获罗马大奖。5年后去罗马,把拉斐尔作为毕生崇拜的对象。其作品工整细致,用色鲜明和谐。曾两次去意大利长时间研究古典美术;在本国曾任巴黎艺术学院的教授多年。安格尔的声誉如日中天时,也正是古典主义面临终结,浪漫主义崛起的时代,他和新生的浪漫主义代表人德拉克洛瓦之间发生许多次辩论,浪漫主义强调色彩的运用,古典主义则强调轮廓的完整和构图的严谨,安格尔把持的美术学院对新生的各种画风嗤之以鼻,形成学院派风格。</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201905/15/150558gllgv2ucl6ca2q6a.jpg" alt="" class="myimg100" /></p>
<p>泉 安格尔 法国 布面油画 1856年 163x80cm 巴黎奥赛博物馆藏</p>
<p><img src="http://www.youhuaaa.com/UploadFiles/images/Painting_Pic_Big/76/37963.jpg" alt="" class="myimg100" /></p>
<p>土耳其浴室,于1862年创作,现收藏于法国卢浮宫</p>
<p><img src="https://www.zyzw.com/sjmh/age005.jpg" alt="" class="myimg100" /></p>
<p>布罗格利公主 安格尔 布面油画 1853年 121.3×90.8厘米 纽约大都会博物馆</p>
<p><img src="https://www.zyzw.com/sjmh/age007.jpg" alt="" class="myimg100" /></p>
<p>大宫女 安格尔 油画 1814年 91×162厘米 藏于巴黎卢浮宫</p>
<p><img src="https://www.zyzw.com/sjmh/age015.jpg" alt="" class="myimg100" /></p>
<p>浴女 LA PETITE baigneuse 安格尔 法国 布面油画</p>
<p><img src="https://www.zyzw.com/sjmh/age016.jpg" alt="" class="myimg100" /></p>
<p>贝尔登肖像 安格尔 法国 布面油画 1832年 118x95cm 现藏巴黎卢浮宫</p>
<p><img src="https://www.zyzw.com/sjmh/age017.jpg" alt="" class="myimg100" /></p>
<p>24岁自画像 安格尔 法国 布面油画 1804年 69.9x86.4cm</p>
<h2 id="席里柯-1791">席里柯 1791</h2>
<p><a href="https://www.zyzw.com/sjmh056.htm">泰奥多尔·席里柯</a>(Theodore Gericault,1791-1824),法国著名画家,新浪漫主义画派的先驱者。 生于法国鲁昂,幼年随全家迁往巴黎,1808年从画马名家韦尔内学画。1810年入盖兰画室,与德拉克洛瓦相识,常去卢浮宫临摹古代大师的名作。1816–1817年赴罗马学习。回到巴黎后展出了那幅著名的《梅杜萨之筏》。随后,他去了英国学习画马。在英国, 席里柯由于一次意外坠马而英年早逝。他只活了33岁,短暂的一生给人类留下的艺术遗产有191幅油画、180余幅素描、100余幅石版画和6件雕塑,其中《赛马》、《轻骑兵军官》、《奴隶市场》等都广为人们所称道。</p>
<p><img src="https://www.zyzw.com/sjmh/xlk001.jpg" alt="" class="myimg100" /></p>
<p>梅杜萨之筏 席里柯 1818—1819年 布面油画 491×716cm 巴黎卢浮宫</p>
<h2 id="德拉克罗瓦-1798">德拉克罗瓦 1798</h2>
<p><a href="https://www.zyzw.com/sjmh048.htm">德拉克洛瓦</a>(Eugene Delacroix,1798—1863)法国著名画家,曾师从法国著名的古典主义画派画家大卫学习绘画,但却非常欣赏荷兰画家鲁本斯的强烈色彩的绘画,并受到同时代画家热里科的影响,热心发展色彩的作用,成为浪漫主义画派的典型代表。他的画作对后期崛起的印象派画家和梵高的画风有很大的影响。</p>
<p><img src="https://www.zyzw.com/sjmh/dlklw001.jpg" alt="" class="myimg100" /></p>
<p>自由领导人民 德拉克洛瓦 法国 1830年 布面油画 260×325厘米 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/dlklw008.jpg" alt="" class="myimg100" /></p>
<p>坐在墓园的少女 德拉克洛瓦 法国 1824年 布面油画 66×54厘米 巴黎卢浮宫藏</p>
<p><img src="https://www.zyzw.com/sjmh/dlklw009.jpg" alt="" class="myimg100" /></p>
<p>希阿岛的屠杀 德拉克洛瓦 1824年 布面油画 417×354cm 法国巴黎卢浮宫</p>
<h2 id="库尔贝-1819">库尔贝 1819</h2>
<p><a href="https://www.zyzw.com/osmh/osmh001.htm">库尔贝</a>,(Gustave Courbet 1819-1877)是法国大名鼎鼎的画家,是现实主义大师。他生于奥尔南一个农场主家庭,早年学过法律,以后改学美术,1839年他到巴黎学画,1841年,他的父亲送他到巴黎念大学,要他学习法律,但他却立志做一名画家,创作了许多优秀的现实主义作品。他也是一位革命者,1871年,他参加了著名的巴黎公社起义,被选举为巴黎公社的美术委员会主席,他在巴黎公社失败后被捕入狱,出狱后流亡瑞士,在贫困和疾病中死去。</p>
<p><img src="https://www.zyzw.com/osmh/osmht/osmh001.jpg" alt="" class="myimg100" /></p>
<p>画室 库尔贝 法国 1854-1855年 布面油画 361x598cm 巴黎奥赛博物馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/keb002.jpg" alt="" class="myimg100" /></p>
<p>路遇 库尔贝 布面油画 1854年 129×149厘米 法国朗基多克法伯荷美术馆藏</p>
<p><img src="https://www.zyzw.com/sjmh/keb005.jpg" alt="" class="myimg100" /></p>
<p>石工 库尔贝 1849年 布面油画 450×541.5厘米 私人收藏</p>
<p><img src="https://www.zyzw.com/sjmh/keb006.jpg" alt="" class="myimg100" /></p>
<p>奥尔南的葬礼 库尔贝 布面油画 1849-1850年 314 x 663 cm</p>
<p><img src="http://www.ashoucang.com/data/attachment/portal/201908/29/155257a2okggiosruepzut.jpg" alt="" class="myimg100" /></p>
<h1 id="附录1-西方艺术流派">附录1 西方艺术流派</h1>
<p>以下内容摘录自<a href="https://www.zyzw.com/xfhh/xfyslp001.htm">正一艺术 - 西方艺术流派</a>。</p>
<h2 id="原始古代">原始古代</h2>
<p>时间:(公元前-公元476年)</p>
<p>原始艺术。是指人类最早的造型艺术,产生于旧石器时代晚期,即距今三万到一万多年之间。原始美术包括洞窟壁画、岩画、雕刻、建筑等。大多数现已发现的美术作品集中在欧洲,分别属于旧石器时代,中石器时代和新石器时代。</p>
<p>古埃及艺术。公元前3000年,上埃及国王美尼斯征服下埃及,建立了统一的专制王朝。此后,埃及经历了古王国、中王国和新王国(前1071-前332)三个统一时期。古埃及艺术。一般指公元前332年前的埃及美术。其特点是:建筑体量巨大,宏伟壮观,具有强烈的崇高感;雕刻朴素写实,整体性强,有观念化、概念化和程式化的倾向;绘画线条流畅优美,色彩丰富。现遗存一些金字塔、雕刻和墓室壁画。埃及艺术是人类最早的文化遗产之一,具有重要的历史价值和艺术价值。</p>
<p>美索不达米亚艺术。公元前3000-前331年出现于西亚底格里斯河和幼发拉底河流域一带(即今伊拉克、叙利亚、土耳其、约旦、巴勒斯坦一带和伊朗西部)的美术。美索不达米亚一词,源于希腊文,意为两河之间。其特点是:各种艺术风格互相渗杂,多种渊源汇集,造型艺术绚丽多彩。传世艺术品有圆雕、浮雕、陶器、乐器和贵金属工艺品,以及巨大的神庙和宫殿遗址。</p>
<p>希腊艺术。通常指公元前12-前1世纪希腊及其附近岛屿和小亚细亚西部沿海地区的美术。广义上包括爱琴艺术。公元前5-前4世纪,是希腊艺术的全盛时期,产生了米隆、菲迪亚斯、波利克里托斯、斯科帕斯、普拉克西特列斯等艺术家和帕提侬神庙、宙斯祭坛等建筑艺术。其雕刻具有强健的体魄、昂扬的精神和典雅优美的造型,被尊崇为造型艺术的典范。</p>
<p>罗马艺术。公元前509-公元476年罗马帝国的美术。继承希腊艺术成就,融会欧洲、北非、西亚美术的地方因素,创造了大量的美术作品。其内容多为享乐性的世俗生活,形式上追求宏伟壮丽,刻画人物强调个性。突出成就主要反映在建筑、壁画、肖像雕刻方面。</p>
<h2 id="中世纪-1">中世纪</h2>
<p>时间:(476-15世纪)</p>
<p>中世纪艺术。一般指5-15世纪的西方美术。主要表现在建筑的高度发展,各种形式的大教堂,如拜占庭教堂、罗马式教堂、哥特式教堂在艺术上和工程设计上都取得了很高的成就。雕刻、镶嵌画、壁画、插图画等也获得了繁荣。中世纪艺术属于基督教艺术,它不注重客观世界的真实描写,而往往以夸张、变形等手法表现精神世界。
中世纪:历史学上一般指封建制时代。主要用于欧洲。时限是公元476年西罗马帝国灭亡到1640年英国资产阶级革命。</p>
<p>基督教艺术。早期基督教艺术出现在公元2世纪下半叶或3世纪上半叶,图像偏重于对某事物的象征性或寓意性。由于公元二世纪到四世纪期间的基督教被罗马皇帝视为非法宗教,早期基督教艺术主要出现在地下墓室。[1]壁画沿袭希腊罗马的风格,题材则与基督教相关。直到公元313年,罗马帝国君主君士坦丁大帝颁布的《米兰诏书》,自始对基督教艺术及西方文明有决定性的影响。随着时间推进,早期基督教艺术逐渐脱离古罗马末期的古典风格形成拜占庭艺术。</p>
<p>拜占庭艺术。公元4世纪到15世纪的罗马帝国美术和东罗马帝国(即拜占庭帝国)美术,即宗教美术和封建帝国美术。以罗马晚期的艺术形式和以小亚细亚、叙利亚、埃及为中心的东方艺术形式相结合为风格特点。在教堂建筑、圣像画、镶嵌画、壁画、细密画及工艺美术的风格创造上,都有较大的成果。后期风格因受教会束缚,倾向于公式化、概念化。对中世纪欧洲各国,尤其是东正教国家的艺术有很大影响。</p>
<p>罗马式艺术。欧洲9至12世纪流行的一种以建筑为主体的艺术形式。建筑多为教堂和修道院,以厚重坚实的墙壁、高大雄伟的塔楼和半圆形拱穹结构为主要特征。著名的建筑有意大利的比萨大教堂、法国的普瓦提埃大教堂、德国的沃姆斯大教堂等。出现在教堂外部墙壁上的雕刻多取材于《圣经》故事,并以非写实性和框架法为特点。</p>
<p>哥特式艺术。欧洲12世纪中叶至16世纪初的一种艺术。以大教堂建筑为主,一反罗马式厚重阴暗的半圆形拱门的式样,以广泛运用交叉肋拱、高扶壁、飞扶壁、尖拱结构和新装饰体系为特征。反映了基督教盛行的时代观念和中世纪城市发展的物质文化面貌。代表作品有法国的巴黎圣母院、德国的科隆大教堂、英国的林肯教堂和意大利的米兰大教堂等。</p>
<h2 id="文艺复兴时期">文艺复兴时期</h2>
<p>时间:(14-16世纪)</p>
<p>文艺复兴艺术。欧洲14-16世纪资本主义萌芽和初步发展时期的艺术。开始于意大利,后扩大到尼德兰、法国、德国、英国、西班牙等国,并席卷全欧洲。以贯彻现实主义和体现反封建反宗教的人文主义思想为主要特征。代表人物有画家达·芬奇、拉斐尔,雕塑家米开朗琪罗等。作为西方近代艺术源头的文艺复兴艺术,其基本风格和表现技法构成了西方近代艺术的主要传统,影响极其深远。</p>
<p>佛罗伦萨画派。是意大利文艺复兴时代形成的美术流派,13世纪末已经形成,早期代表画家有:乔托·迪·邦多纳、马萨乔、安杰利科、乌切洛、波提切利等。盛期代表画家有:达·芬奇、米开朗基罗、拉斐尔。15世纪中叶以后佛罗伦萨画派已呈衰退之势,取而代之的是以罗马为中心的罗马画派。16世纪末,由于佛罗伦萨政治上失去独立,经济衰落,以及画家盲目崇拜前辈的结果,逐渐走向风格主义。</p>
<p>威尼斯画派。是16世纪以威尼斯画家乔尔乔内和提香为代表的绘画形式。产生于意大利文艺复兴时期。该画派以人文主义思想为主导,吸收尼德兰美术的油画技法,偏重色彩和感觉效果,画面绚丽,构图新颖。对欧洲绘画有很大影响。代表人物有乔尔乔内、提香、丁托列托等。</p>
<p>尼德兰画派。中世纪的尼德兰包括现在的荷兰、比利时、卢森堡以及法国东北部的一些地区。15世纪尼德兰画派成就非常突出。尼德兰画派的艺术家们创作了大量祭坛画与独幅木板画,因为尼德兰美术脱胎于中世纪的哥特式艺术,使得尼德兰文艺复兴初期的绘画有比较浓郁有宗教气息,总的绘画倾向是:严肃、静穆,人物形象不够生动自然。另一方面,尽管这些作品大多表现了传统的宗教题材,却由于画家对描写世俗生活和周围环境的兴趣大大增长,作品中便不时体现出现实主义倾向。罗伯特·康宾和扬·凡·埃克是尼德兰画派的主要奠基人。</p>
<p>枫丹白露画派。是16世纪活跃在法国宫廷的美术流派。是国际样式主义绘画的重要组成部分,分别以法王两次修建巴黎郊外的枫丹白露宫为契机形成了两代枫丹白露派画家,第一代枫丹白露派画家由来自意大利的画家罗索、普里马蒂乔和雕塑家切利尼等人与法国画家库新、卡龙、雕刻家古戎和庇隆等人合作,在宫廷内外的装饰上形成了一个风格性很强的艺术流派。</p>
<h2 id="十七十八世纪">十七十八世纪</h2>
<p>学院派艺术。始于16世纪末的意大利,十七八世纪在英、法、俄等国流行,其中法国的学院派因官方特别重视,所以势力和影响最大。学院派重视的规范,包括题材的规范、技巧的规范和艺术语言的规范。由于对规范的过分重视,结果导致程式化的产生。学院“ Academy ”一词最初含“正规“、走正路不走邪路的意思。如何才能走正道,在学院派看来就是重视传统,向传统学习,因而学院派反对所有的改革。学院派十分重视基本功训练,强调素描,贬低色彩在造型艺术中的作用,并以此排斥艺术中的感情作用。这些特点给学生带来的影响是正反两方面的。代表人物卡拉契兄弟,大卫,安格尔等。</p>
<p>样式主义。意大利16世纪中后期的美术流派,代表著盛期文艺复兴渐趋衰落后出现的追求形式的保守倾向。样式主义时期的艺术并未形成统一的风格,艺术家们各自表现出自己的特色,如夸张变形的手法,强调细节的修饰,突出个性的表现,反对理性、典雅、优美的原则,强调想像等等。总之,我们把这一时期出现的不同与盛期文艺复兴理性优美原则的艺术,都归为样式主义。代表画家布龙齐诺(1503~1572),瓦萨里。</p>
<p>现实主义艺术。在16世纪末17世纪初,与样式主义艺术和学院派艺术相对立的是现实主义艺术。现实主义艺术家赞美自然,歌颂劳动,深刻而全面地展现了现实生活的广阔画面,尤其描绘了普通劳动者的生活和斗争,此时劳动者真正成为绘画中的主体形象,大自然也作为独立的题材受到现实主义画家青睐。这一时期现实主义最主要的代表人物是卡拉瓦乔。</p>
<p>巴洛克艺术。巴洛克(Baroque)是17世纪广为流传的一种艺术风格。它的名称由来,说法不一,一说来自葡萄牙或西班牙语,意思是不圆的珠子;又一说它来自意大利语,有奇特、古怪或推论上错误的含义。总的来说这个名称在当时含有贬意,是18世纪古典主义艺术理论家对于上一个世纪一种艺术风格的称呼。代表性人物贝尼尼,鲁本斯。</p>
<p>佛兰德斯美术。16-18世纪尼德兰南部(今比利时及法国一小部)美术的通称。原为尼德兰美术的一部分。1579年荷兰独立后,即称佛兰德斯美术。既带有民主性倾向,又保留着明显的贵族性和宗教性,追求富丽堂皇的装饰风格。代表人物有勃鲁盖尔、鲁本斯、凡·戴克等。对欧洲美术的发展有很大影响。</p>
<p>荷兰画派。17世纪兴起于荷兰。摆脱了对宫廷贵族和天主教会的依附,转向为新兴的市民阶级服务。用写实手法描绘人民生活和自然风景。除肖像画和宗教历史画外,还发展了风景画、风俗画、静物画及动物画。代表人物有哈尔斯、伦勃朗、维米尔。1609年的尼德兰革命,建立起荷兰共和国,这是欧洲历史上第一个资产阶级共和国,荷兰绘画得到空前繁荣。</p>
<p>塞维利亚画派。17世纪上半期,西班牙最重要的画派之一是南方的“塞维利亚画派”。“塞维利亚画派” 主要描绘寂静的僧侣世界,平凡中含有诗意。这个画派的宗教题材画:有个显著特点,那就是并不过分渲染宗教气息,反而富于生活的情趣,具有强烈的世俗化倾向。有三个最杰出的代表:穆里罗,苏巴朗,委拉斯贵支。</p>
<p>古典主义。西欧文学艺术上的一个流派,盛行于17世纪,延续到18世纪后期。主要特点是模仿古希腊、罗马的艺术形式,尊重传统,崇尚理性,要求均衡、简洁,表现出反宗教权威的精神。但由于模拟多,创造少,不能反映现实。代表画家普桑,乌埃,勒布伦,拉图尔,勒南兄弟,洛兰等。</p>
<p>洛可可艺术。洛可可(rococo),源于法文rocaille,意为贝壳形。指法国国王路易十五统治时期(1715-1774)所推崇的艺术风格。在工艺美术、绘画、建筑等方面尤为明显。以具有纤细、轻巧、华丽和繁琐的装饰性为其特征。洛可可艺术在形成过程中,曾受到中国明清工艺美术的影响。绘画方面,以法国画家布歇·弗拉戈纳尔等人为代表。建筑方面,以法国巴黎苏比斯府为代表。</p>
<p>新古典主义艺术。18世纪50年代至19世纪初流行于西欧的美术样式。它力求恢复古典美术(主要指古希腊罗马艺术)的传统,追求古典式的宁静,重视素描,强调理性。代表人物有法国画家大卫,热拉尔,安格尔,普吕东等。</p>
<h2 id="十九世纪">十九世纪</h2>
<p>浪漫主义画派。19世纪初至30年代在法国兴起。该派摆脱了当时学院派和新古典主义美术的羁绊,采用现实生活、中世纪传说和文学名著为题材,偏重于发挥艺术家自己的想像和创造。画面色彩热烈,笔触奔放,富有运动感。代表人物有籍里柯,德拉克洛瓦,卡尔波等。</p>
<p>批判现实主义。19世纪30年代首先在法国、英国等地出现的文学思潮,以后波及俄国、北欧和美国等地,成为19世纪欧美文学的主流,也造就了近代欧美文学的高峰。由于现实主义文学具有强烈的社会批判性,高尔基称之为“批判现实主义”。现实主义是国际关系中的主流理论,它也是一个多义且有争议的概念。虽然现实主义的批评者和支持者经常将其视为一个统一的思想整体,但实际上,现实主义并不是一个单一或统一的理论。代表画家有库尔贝(1819-1877年),卢梭,科罗,米勒,杜米埃等。</p>
<p>巴比松画派。19世纪产生于法国。巴比松系巴黎近郊的一个村庄。1848年,以特奥陀·卢梭为首的部分青年画家因不满学院派的艺术和官方沙龙审查制度,先后来此定居作画。他们以农民生活、农村风景为题材,主张走出画室,“回到自然”。作品具有真实、朴素、田园诗般的风格。代表人物还有米勒、杜普雷等。</p>
<p>印象画派。19世纪末期流行于法国。名称源于1874年评论家路易·勒鲁瓦对莫奈所作《日出印象》一画的嘲笑而来。该派把光和色看作画家追求的主要目的,强调画家应该走出画室,面对真实的自然物象进行写生。代表人物有莫奈、毕沙罗、西斯莱、雷诺阿、德加等。</p>
<p>新印象画派。也称“点彩派”。19世纪末从法国印象画派发展而来。该派认为印象画派表现光色效果的方法不够严格,主张用不同的色点排列组合作画,具有镶嵌装饰画的效果,但画法机械。代表人物有修拉、西涅克等。</p>
<p>后印象画派。19世纪末20世纪初流行于法国。他们反对印象画派的客观主义表现和片面追求外光与色彩,强调主观感受的表达,重视形和构成形的线条、色块和体积。代表人物有塞尚、凡·高、高更等。</p>
<p>纳比派。法国的艺术社团,1891年出现于巴黎,其主要成员是巴黎朱利安美术学院的学生。这是一个为期很短的艺术运动,主要参加者是法国的画家和雕塑家。纳比派的主要理论家德尼,将纳比派的特色归纳为两种变形的理论:客观的变形和主观的变形。主要成员有塞律西埃、德尼、波纳尔、鲁塞尔、维亚尔、朗宋和瑞士画家瓦洛东等。</p>
<p>柏林分离派。19世纪末由德国柏林官方艺术组织中分离出来的美术家联盟。1898年柏林美术学院以利贝曼为首的十一人社与其他组织共同组成了柏林分离派。他们极力推崇法国现实主义和印象主义绘画,以新的艺术目标与学院派和官方艺术相抗衡。其创作活动一直延续到1914年。代表画家为利贝曼。</p>
<p>象征主义。十九世纪末叶在法国兴起的颓废主义文艺思潮中的一个主要流派。其理论基础是主观唯心主义,认为现实世界是虚幻的﹑痛苦的,而”另一世界”是真的﹑美的。要求用晦涩难解的语言刺激感官,产生恍惚迷离的神秘联想﹐形成某种”意象”,即所谓”象征”。法国象征派诗人以马拉美﹑魏尔伦等为代表;戏剧方面以梅特林克为代表;美术方面以摩罗 、夏凡纳和雷东为代表。</p>
<p>拉斐尔前派。19世纪中叶出现于英国的画派。认为绘画艺术至拉斐尔时盛极而衰,故企图复兴拉斐尔以前的艺术以振兴英国画坛。其绘画题材多为神话传说、圣经故事及内容严肃的文学作品。画风严谨、细致。代表人物有罗赛蒂、亨特、密莱斯、伯恩·琼司等。</p>
<p>哈得逊河画派。美国风景画派。以纽约为基地,活跃于1820~1880年间。18世纪的美国人大部分时间都忙于在荒野奋斗以求生存。到了19世纪,他们在这种斗争中获得了胜利,于是对大自然的一种怀旧和浪漫的情绪便油然而生,这样,风景画开始在美国流行。一批以哈得逊河沿岸风光为题材的风景画家被称为“哈得逊河画派”,这标志着美国美术开始摆脱欧洲的影响,逐步显露出自己的品格。代表画家科尔,道蒂,杜兰德,布莱克洛克等。</p>
<p>巡回展览画派。19世纪末至20世纪初俄国现实主义画家团体,以在俄国各大城市举行美术展览活动而著名。受别林斯基、车尔尼雪夫斯基等人的美学观点影响,不少作品反映了俄罗斯人民的生活。代表人物有列宾、克拉姆斯柯依、苏里柯夫等。</p>
<h2 id="二十世纪">二十世纪</h2>
<p>立体主义。1908年产生于法国,追求一种几何形体的美,追求形式的排列组合所产生的美感。把三度空间的画面归结成平面的、两度空间的画面,着力表现有直线、曲线所构成的轮廓、块面堆积与交错的趣味和情调。人们以立体主义这一称呼来给毕加索、布拉克、格里斯和莱热在1907年到1914年期间的艺术探索性创作命名。</p>
<p>野兽主义。1905年产生于法国松散的美术社团。野兽主义画派吸收了东方和非洲艺术的表现手法,创造一种有别于西方古典绘画的疏、简的意境,有明显的写意倾向,同时追求更为主观和强烈的艺术表现。马蒂斯是野兽主义的领袖。</p>
<p>表现主义。注重主观情感和内心世界的揭示,不拘泥于视觉特征的真实。它是20世纪初期绘画领域中特别流行于北欧诸国的艺术潮流。代表画家是荷兰人凡·高、法国人劳特累克、奥地利人克里姆特、瑞士人霍德勒和挪威人蒙克。</p>
<p>维也纳分离派。是在奥地利新艺术运动中产生的著名的艺术家组织。1897年,在奥地利首都维也纳的一批艺术家、建筑家和设计师声称要与传统的美学观决裂、与正统的学院派艺术分道扬镳,故自称分离派。其口号是“为时代的艺术–艺术应得的自由”。代表人物有克里姆特、席勒、霍夫曼等。</p>
<p>超现实主义画派。1924年产生于法国。由法国作家布雷东发起。在巴黎先后发表两次《超现实主义宣言》,形成了超现实主义画派。认为“下意识的领域”,如梦境、幻觉、本能等是创作的源泉,主张从潜意识的思想实际中求得“超现实”。作品主要描写潜意识领域的矛盾现象,把生与死、过去与未来、真实与幻觉统一起来,具有恐怖、离奇、怪诞的特点。代表人物有米罗、达利、马格利特、唐吉等。</p>
<p>达达主义。是1916年至1923年间出现于法国、德国和瑞士的一种艺术流派。达达主义是一种无政府主义的艺术运动,它试图通过废除传统的文化和美学形式发现真正的现实。达达主义由一群年轻的艺术家和反战人士领导,他们通过反美学的作品和抗议活动表达了他们对资产阶级价值观和第一次世界大战的绝望。代表人物杜尚、恩斯特等。“达达”一词,意即孩子不明确的呀语,没有什么意义。</p>
<p>抽象主义。20世纪初产生于西方国家的美术流派。他们反对用具体形象反映现实,主张以色彩、线条、形状等抽象形式来表现艺术家的主观心灵。一般分为两大体系:一为几何抽象,即画面运用抽象的几何形体或线条构成。代表人物有俄国的马列维奇、荷兰的蒙德里安。一为抒情抽象,用色彩、线条、各类形体的构成直接抒发感情。代表人物有俄国的康定斯基。</p>
<p>行动画派。20世纪产生于美国。抽象表现主义艺术的重要分支。创作时,以画布铺地,画家在其上滴洒颜料来显示作者感情的自发冲动和强烈的动作效果为特征,亦称“动作画派”。代表画家有波洛克等。</p>
<p>波普艺术。又称“新写实主义”或“新达达主义”。20世纪60年代风行于欧美的艺术流派。多以社会上流行的形象(如各种商业广告、电视、连环漫画中的人和物)或戏剧性的偶然事件作为表现内容。使用材料包括各种塑料、霓虹灯和发光颜料等。代表人物有美国的劳申伯格、 沃霍尔,英国的汉密尔顿等。</p>
<p>照相现实主义。又称“超级现实主义”。20世纪60年代兴起于美国的艺术流派。主张艺术的要素是“逼真”和“酷似”,反对艺术家离开客观对象的任意发挥。画家作画大多利用或者临摹照片,或用幻灯机将底片投射到画布上,然后在投影上着色。作品尺幅巨大,注重表现生理细节。所作雕塑与真人一般大小,涂以肤色,配以衣服道具,极度逼真。代表人物有查克·克洛斯、汉森等。</p>
<p>后现代主义。是一场发生于欧美60年代,并于70与80年代流行于西方的艺术、社会文化与哲学思潮。其要旨在于放弃现代性的基本前提及其规范内容。在后现代主义艺术中,这种放弃表现在拒绝现代主义艺术作为一个分化了文化领域的自主价值,并且拒绝现代主义的形式限定原则与党派原则。其本质是一种知性上的反理性主义、道德上的犬儒主义和感性上的快乐主义。后现代主义的特点可以归纳为五个基本点:矛盾、不连续、随意、无节制、流程短。后现代主义虽然与现代主义有背道而驰的一面,但是本质上是现代主义的继续与发展。 代表索扎斯、芭芭拉•克鲁格。</p>
<h1 id="附录2-艺术课程">附录2 艺术课程</h1>
<ul>
<li><a href="https://www.bilibili.com/video/BV194411t7kS?t=625">西洋美术史</a>,儿子一听就听出来,是台湾版哆啦A梦的配音解说的,非常赞的一个讲西方美术史的动画片,对!动画片!超有爱。可惜被B站和谐的七零八落,可惜了,不过,我还是没有强迫症的刷完了,超赞。</li>
<li><a href="https://www.bilibili.com/video/BV1aj411f7oF?p=1">油画英雄志</a>,胖阿姨的讲解和蔼可亲,娓娓道来,非常适合我这类小白听故事的愿望,不知不觉就跟着阿姨留恋了几百年,对欧洲的油画艺术多了一份了解。</li>
<li><a href="https://www.bilibili.com/video/BV1n7411C7Q5?p=1">湖北大学-西方美术史十六讲</a>,一个慕课课程,很不错,短小精悍,很适合入门。</li>
<li><a href="https://www.bilibili.com/video/BV1xs411q7jZ?p=1">CCTV世界名画·华丽的大师</a>,CCTV做的一个纪录片,相当不错。</li>
<li><a href="https://www.bilibili.com/video/BV1ps411e7CB?p=1">北京大学的朱青生教授《艺术史》</a>,朱青生老师讲的抽象,像在吟诵一首长诗,但是却不浮华,而是直奔本质。</li>
<li><a href="https://www.bilibili.com/video/BV137411H7Gy">西洋美術史 (蔣勳) Western Art History</a>,蒋勋讲的几个画家故事。</li>
<li><a href="https://www.bilibili.com/video/BV12x411p7SF">张敢-盛期文艺复兴的艺术</a>,清华张敢老师讲的文艺复兴三杰。</li>
<li><a href="https://www.bilibili.com/video/BV1yx411p7at">张敢-文艺复兴美术史</a></li>
<li><a href="https://www.bilibili.com/video/BV1hW411y7cx">张敢-西方现代艺术史</a></li>
<li><a href="https://www.bilibili.com/video/BV1A4411j7g1">孙乃树-西方美术欣赏</a></li>
<li>
<p><a href="https://www.bilibili.com/bangumi/play/ep158118/">知名画作解析</a>,虽然是英文的,但是剖析了很多作品细节。</p>
</li>
<li><a href="https://www.bilibili.com/video/BV1z4411w7so?t=278">古希腊神话故事</a>,想理解西方绘画,就得理解古希腊神话,这个系列快速带你过一遍这些繁杂的关系和人物,我听完的感觉就是,“宙斯啊!贵圈真乱!”。不过,想了解艺术中的人物,光有古希腊神话人物还不够,还要了解基督的故事,不过这个我得再找时间刷了。</li>
<li><a href="https://www.bilibili.com/video/BV1pt411K7qo?t=497">一节课梳理2000年西方艺术史</a>,小哥还有<a href="https://www.bilibili.com/video/BV1gt411a7UM">极简西方建筑</a>,快餐类的讲解,很不错,谁说快餐就不好吃,我就爱吃垃圾,入门级别最需要这类垃圾食品。</li>
<li><a href="https://www.bilibili.com/video/BV1qt411B7wD">十二分钟带你看完欧洲艺术史</a>,快速入门艺术史的小视频,适合小白。</li>
<li><a href="https://www.bilibili.com/video/BV1nZ4y1K7KW?t=434">世乔与圣智</a>,超喜欢这两个年轻的艺术家和他们的这个频道<a href="https://space.bilibili.com/9349641">卡在树上的艺术家</a>,他们对经典油画的讲解也非常引人入胜。</li>
<li><a href="https://www.bilibili.com/video/BV1zs411N7Cy?t=787">浮世绘和梵高</a>,啊,日本浮世绘还影响过梵高?是的,梵高对浮世绘和日本艺术很神往,</li>
<li><a href="https://www.bilibili.com/video/BV1gb411J7jj">简略中国美术史</a>,bookmark一下。</li>
<li><a href="https://www.bilibili.com/video/BV1jE411d7XU/">葛饰北斋-为画痴狂</a>,浮世绘的代表人物,葛饰北斋,一个影响深远的日本画家,据说梵高就深受其影响,可是,可是他居然是个色情画师!感兴趣的,还可以去看看描写他的动画片<a href="https://movie.douban.com/subject/25872959/">“百日红 百日紅”</a></li>
<li><a href="https://www.bilibili.com/video/BV1KJ411G7Xq/">莫奈一生画的女人</a>,一个凄美的故事,一个幸福的故事,莫奈的一生挚爱。看完这个,还是默默的被感动了。</li>
<li><a href="https://baike.baidu.com/item/%E9%80%8F%E8%A7%86%E6%B3%95/5082388">透视法</a>和<a href="https://baike.baidu.com/item/%E7%81%AD%E7%82%B9/7454736">灭点</a>,马萨乔和乔托开启的西方绘画的开始。</li>
<li><a href="https://www.zyzw.com/">正一艺术</a>,感谢感谢,画作都来自此网站。</li>
<li><a href="http://www.ashoucang.com/">名画油画网</a>,可以方便检索画家和画作。</li>
</ul>
世界历史大串烧
2020-10-04T00:00:00+08:00
https://www.piginzoo.com/life/2020/10/04/world-history
无题
2020-09-23T00:00:00+08:00
https://www.piginzoo.com/life/2020/09/23/some-feelings
<p>过去,还是有一些惶恐的,怕自己不会挣钱,怕自己在社会的评价和评级当中“沉沦”。</p>
<p>现在,每天都要听一听新闻联播,不为别的,就是为了让自己的生活增加荒诞感,那些听上去的各种各样的正确的废话里,透露着皇帝新装般的信息,谁都知道里面背后隐藏着什么,但是大家都不说破,还要用慷慨激昂的语气,正襟危坐的喷出来,透着欢乐。</p>
<p>你能感受到,你被一个现代性的牢笼紧紧的束缚着,被消费主义逼迫到了心灵的角落,局促而慌乱,被剥光的身体,在各种外部的评价的目光里,瑟瑟发抖。这个世界、这个社会,充满了福柯所谓的“规训”,这是一个规训的牢笼。你我都是乖乖的就范,不敢有一死的反抗。</p>
<p>这个世界确实非常操蛋了,美国的特朗普是这个操蛋世界的缩影,去他妈的美国精神、普世价值,我就是要造,我就是要像个孩子一样任性肆意任为,好在美国有四年一次的纠偏机制,终于要快把他轰下总统宝座了,但是,他已经给这个世界留下了满地鸡毛。</p>
<p>微博上清一色的“正能量”和对“负能量”的恶毒咒骂;然后,你去推特,看到的是更多的戏谑,没有人再心平气和的传播真善美;你看吐槽大会,年轻人们用一种她们唯一可以选择的对这个世界的戏谑和嘲讽对抗这个世界,他们的荷尔蒙居然都不再使得她们愤怒,可见这外部的力是多强大;你看最火的电视剧,都是悬疑的《隐含的角落》、《》
你看热搜,
然后,你再回过头来看新闻联播,你看到的
台海的、</p>
<p>我记录下来,就是未来老的一年,偶然想起这段时光,</p>
<p>为什么要开始盖房子深圳60%的公租,</p>
<p>你看到的维度,政治哲学的维度,还有没有更高的维度,
放在时间、空间里,尝试用虚拟的上帝视角来看,</p>
<p>欧洲会怎么样,美国会怎么样,中国会怎么样,
习会管理中国多少年,会有怎样的继任者,中国共产党会有怎么样的变化,</p>
<p>回到内心,
就像尼采说的,艺术是拯救我们的手段。</p>
<p>中国会怎么样?新加坡模式。</p>
<p>美国的大选从来没有这么和中国相关过。
我不觉得会倒退,但是,很大的变化。</p>
<p>年轻一代,还沉浸在数不尽的娱乐和脱口秀大会的狂热里,
去不愿意抬头看看这周边的世界,
已经逐渐走到了开始分裂、仇恨、厌恶的边缘,
想想一战、二战、冷战,以及911,这些似乎离我们太远,
但是我担心,繁华背后,是废墟的一瞬,
我们这一代,已经透支了所有的美好,我隐隐的担心,留给我孩子的是这个世界的真相,
就像你曾经没有见识过的自由的伊朗和富饶的阿富汗,
也许,也许就是一瞬,你的世界会坍塌掉,
虽然我希望自己有生之年看不到这景象,
但是,历史往往不是按照我们这种砂砾的希望一样美好发展的。</p>
<p>75界联合大会上,大国领导人直接的谩骂和诋毁,
小国之间的推诿和指责,
我能看到的也就是欧洲(但不包括英国)大陆的一些正直的声音,
也许是因为他们承受过最苦难的战火,珍惜这持续最长的和平。</p>
现代性奴役着挣扎的我们
2020-09-05T00:00:00+08:00
https://www.piginzoo.com/education/2020/09/05/post-moderm
<h1 id="前">前</h1>
<p>最近对西方哲学的入门学习,接触到了现代性、后现代的概念,让我感触良多,很想把我对这些概念的一些理解写下来,分享给朋友们。</p>
<p>作为一个西方哲学的爱好者,我学习的目的,就是想更多的理解这个社会,这个世界,尝试活的明白些,这个目的不代表任何目的性,或者说没有特别的功利性目的。而且,是带着一种谦卑和敬仰的态度,去领略从苏格拉底开始的,几千年的这些哲学大家们的思想,接受他们的洗礼。这个过程中,说实话,我对古典哲学中,特别是德国古典哲学里的那些抽象、形而上的东西,不是特别的理解,可能还是悟性不够,纯哲学的思辨可能是我这样的脑袋运算速度和容量不能完全消化的,只是大概的囫囵吞枣,反倒了是到了开始反思现代性的时候,让我突然感觉到了强烈的共鸣,让我深深的被后现代的各种流派深深的吸引住,我很沉醉他们的逻辑里,感叹着他们对近现代社会的洞悉,这些都让我感到作为一个个体的被关怀和共情的共鸣,与古典哲学的抽象、崇高的形而上形成强烈的反差,让我感觉到温度和温暖。</p>
<h1 id="后现代">后现代</h1>
<p>后现代最早是发端于艺术圈子,后来逐渐扩散到建筑、文化等更多范畴。没有一个“后”的时间概念,后,是个超越的概念,超越的是启蒙运动以后的理性主义、科学主义。在哲学范畴内,后现代代表的是对传统哲学的解构、批判、颠覆、怀疑,后现代否定了传统哲学的一切价值和内涵,但是正面建树不多,所以更多表现出来的是怀疑主义、虚无主义的色彩。虽然后现代型全面否定了工具理性,在我看来有点过了,但是,这种重新让人们回归人性本源,摆脱理性主义的束缚还是有非常多的积极意义。</p>
<h1 id="康德">康德</h1>
<p>谈到后现代,谈到现代性,第一位要提到的就是康德,康德提出了“自在之物”,他在调和经验论和唯理论当中,放置了“自在之物”,他认为每一个事物,都有他最本源本质的东西,这个是我们理性无法触及的,我们的知识都是来源于我们在时空的感知中形成感性认知,但是这远不是事物的本质,真实的事物是我们永远无法获知的。这听上去很抽象,我举个例子,你对的视觉、听觉,都是光、声在我们身体的神经细胞中引起的刺激,形成生物电,最终传导到大脑中形成的映象。那如果刨除了我们这些感知,世界到底是什么样子,可能我们永远无法描述。康德说,“有两样东西,我们越是经常持久的思考,就越是使心灵充满不断增长的惊奇和敬畏,他就是我们头顶的星空和心中道德律”,康德的逻辑里,人也是一种“自在之物”,那也有一定理性无法感知的东西,康德这样做,实际上是为我们在理性之外,留下了一定的空间,来容纳那些无法用理性解释的神圣之物:自由意志、灵魂和上帝…</p>
<h1 id="尼采">尼采</h1>
<p>康德之后便是尼采了,尼采45岁就疯掉了,他还在清醒之时,喊出了“上帝死了”,这家伙太疯狂了,尼采之所以伟大,是他生生把古典哲学,把从苏格拉底到启蒙主义、基督教,全都撕碎了。他开启了一个抛弃宏大,回归人性的道路。虽然叔本华已经开启了人性之光“唯意志论”,让我们认真的面对欲望。但是,叔本华对欲望导致的悲观人生的阴晦,在尼采这里完全被驱散,</p>
<p>尼采认为,从苏格拉底到黑格尔,他们都是试图在构建完美的形而上,他们认为世界是秩序的、统一的、完整的,是存在一种崇高目的的,他们构建了一套不言自明的评价体系“价值和事实的关联”,形成了我们所有人的观念共识,为万物立法,规范和评价所有的事情。比如,“肉体是低贱的,精神是高贵的;欲望是低贱的,理性是高贵的;混乱是低贱的,秩序是高贵的”,可是谁说,人活着或者说人类活着就是为了这些崇高和伟大,在尼采看来,我们每个人都是有自己生命的旺盛力的,一种原动力,一种与生俱来的“权力意志”,可是,我们被这些崇高伟大的“奴隶道德”所驯化,失去了自我和自我意志。那么,怎么办,如何反抗这些崇高伟大,对我们人性的束缚,尼采给出的答案是,我们要建立“主人道德”,重新拿起权力意志来创造自己的意义,成为“超人”,说白了,就是要自己做自己的主人,不被外界所定义。</p>
<h1 id="韦伯">韦伯</h1>
<p>再往后,另外一个人不得不被提及,那就是马克思韦伯。韦伯说,现代化就是一个去魅的过程,世界被去除了神秘性和魅惑性,利用理性的力量,使得宗教的都变得理性化(哲学的经院学派)。韦伯把自启蒙运动开始的理性,称之为人类的理性工具,可被量化和评估;但是同时,人类还有一个价值工具,用来对我们的观点、观念进行评判,它是非常主观的。</p>
<p>现代社会,工具理性已经完全碾压了价值理性,社会所有都在计算,导致了“官僚化”,我理解是技术官僚化,而不是“官僚主义”,就是高效、规范、人尽其责的高效可预测性的制度和机构,不仅仅政府,也包括学校、医院等诸多机构。政府变成一台庞大而精密的机器,在这种强大的官僚制度下,人都可以被指标化,人都是可被计算的,不断被优化,推动社会高效的发展, 人都可以被指标化、被KPI化,每个人都努力成为这个标准的高效的人。各种系统,比如征信化系统、教育制度、学历文凭,都在对你进行量化,这些决定了,你可以获得多少工资、多少贷款,左右着各种的社会交易。</p>
<p>工具理性确实强大,短短几百年,人类人口从7亿膨胀到70亿,还没有出现大范围的危机,不得不拜理性工具的强大,但是,它也压倒和淹没了价值理性:“去TMD的人生价值,诗和远方,我只要钱”。工具理性反过来塑造甚至吞噬我们自己,理性化把现代社会铸造成一个“铁笼”,在这个现代的铁笼中,人都被高度的简化和抽象,虽然这大大提升了人类社会的效率,但是这个牢笼机械坚硬、冷酷刺骨,人已经被异化成为一种商品,一种标准,一个零件,社会关系也被异化成可以被类似于钱可以衡量的利益关系,我们所谓的现代社会的“个性和自由”,是被束缚在铁笼之中的自由,跳出铁笼的自由和个性,就是被人们认为是背离社会的“神经病”。我们每个人的心灵,在中世纪、在中国的宗族社会,还可以寻求终极的信仰、宗教、礼教,但是理性把我们从神秘主义中唤醒,打碎了那些终极信仰和宗教的东西,但是缺没有给出解决办法,让我们在打破一切后,失去了终极的可以心灵寄托的东西,现代化,没有能带给我们心灵的自由和终极的幸福。</p>
<p>我们每个人,都愈发地迷茫和困惑,对自己的选择不是确定,韦伯认为,人生在世需要寻求意义,但是现代性带给我们的,却是内心的动摇,不确定感、和焦虑,它们成为我们每个人的精神特征。韦伯说,“人是悬挂在自己编织的意义之网上的动物”,但是,我们找不到意义和寄托,现代人充满了焦虑和无意义感,我们失去了过去那些宏大、崇高、上帝、宗族的制约后,我们仿佛“自由”了,但是背后却是一个个仍然在寻找意义的个体,在社会层面,就形成各种各样多元化的价值,各种多元价值表现在公共话题上往往是激烈对立,比如堕胎:是身体的自由,还是把胎儿视作生命;还有LGBT、控枪、电车困境….,这些带来的是政治、价值的分立,美国就是个典型。</p>
<p>不过,你指望,如果你期盼韦伯可以给出解决办法,那么你要失望了,在他看来,这种困境无法调和,因为他根植于现代化本身,导致的人们的对不同事情的终极态度互不兼容。你能离开现代社会么?不可能吧!韦伯不否认铁笼的作用,它保护了我们人类,让我们获得了优越的物质条件和70亿人口的平稳发展,我们注定要在铁笼中生活,只是,我们需要警惕这个铁笼,和他可能带来的灾难。</p>
<p>我们作为人类,作为个体,都不应该回避这些问题,面对这些问题,不断地寻求可能的解决办法,这才是真正的“思想成年 ”,正如罗曼罗兰所说,“看清生活的真相后,还依然热爱它”</p>
<h1 id="福柯">福柯</h1>
<p>法国哲学家,福柯,则从另外一个角度,像我们展示了现代性中无奈和残酷的一面,他比韦伯更细致入微的阐述了权力对我们的控制。</p>
<p>之前的皇权的惩戒,是为了凸显王权的威严,残酷、残忍。启蒙运动后,人们认为中世纪的惩罚过于残暴,开始改进对人惩罚的方式,殊不知,现代的惩戒体系,其实更加束缚人性。现代的惩戒制度,最早来自于监狱惩治体系,是由精神学家、社会学家、科学技术专家一起构建的惩戒体系,把对那些不守规则的罪犯的惩戒过程,更加科学化、机械化、责任化,形成定量化的,更精细的惩罚体系。而在这种经过专业人士们设计的司法惩戒方法,让罪犯们感到的是,精神层面的控制和训诫,在每个小房间里独自反省、整齐划一的口号、各种集体的肉体劳动,都让罪犯们不断地消磨掉他们冲动的本性,变得服从和温顺。</p>
<p>逐渐的,这种规训制度走出监狱,逐渐渗透到社会生活的各个角落。无论是在学校里,按照规矩的座位排列,门后都有一个让教导主任可以窥视的小窗,各种小红花、各种考试评分制度;到了公司里,就是各种的层级管理,上班打卡、迟到的惩罚;医院、军队….越来越多的地方,形成了层出不穷的管理制度,进行时间控制,建立纪律,考核、指标、标准、名次…各种各样的控制机制,这种全面控制、层级监视体制的规训,让你变得越来越守规矩,你不会去裸奔、去疯狂,而是带上面具,“认真”地生活,是的!你已经是被严格规训的结果。</p>
<p>更有甚者,像边沁所说的<a href="https://zhuanlan.zhihu.com/p/51346225">全景式监狱</a>,更让每个人都陷入了自我审查的境况。想想现在的你,发微信的时候,是不是都要想一想,是不是自己发了一些不该发的东西。</p>
<p>这种权力的控制,不是一个过去我们理解的那种集权的,高高在上的一位独裁者、王权那种集中的权力,而演变成了,无处不在的,任何人都拥有,但是任何人也是被权力训诫的,既是权力拥有者,又是权力的受害者。社会变成了一个“大监狱”,司法体系构建了这一切,这一切的一切,使得我们每个人都受到全面的规训、全面的控制,不仅仅是对肉体的驯服,更是对精神的驯服。这无处不在的,人人都控制和被控制的流变的权力,让我们无力反抗,我们是一副副被驯服的肉体。</p>
<p>是的,这就是福柯给我们讲述的现代权力观:微观的、分散、多态、渗透到每个领域;权力变成了人与人的关系,而不是一种被少数人所拥有的所有权;他还认为,知识构建出相应的权力结构,知识使权力的构建更加专业化,知识就是权力;这种权力结构弥散在社会各个层面,很难改变;</p>
<p>但是,我们不要用对立的二元论来看待这个权力机构,我们过去受到的教育都是非黑即白的对立二元论,这种思维习惯是很害人的。具体到福柯的权力结构,他反倒认识,这种权力结构,是有很多好处的,是这种权力结构,才保证了这75亿人的星球,可以有秩序的运作,让每个人都有自己的立身和生活,否则,社会如果崩溃,那后果会更加可怕。</p>
<p>而我们每个人,都应该理解和了解这种现代社会规训制度,从一个新的视角,来审视这个世界、甚至自己的人生。人生没有完美的标准,不要被他们的规训所规定,保持自由的灵魂。</p>
<h1 id="消费主义">消费主义</h1>
<p>当下,虽然不愿意提什么主义、意识形态啥的,但是,不得不提到资本主义,我不得不同意这个观点,就是资本主义就是要寻求资本利益的最大化,这种寻求利益最大化的目标,就会驱使资本扩大生产,生产出更多的商品,更重要的是,还要卖出去,这样才可以让资本流转起来,攫取更大的利润。那么接下来要解决的,就是市场了,要尽可能的扩大市场,促进消费。这是整个资本的需要,也是社会的需求,也是每个人欲望的需要,这股洪流交织在一起,形成了我们时下,滚滚而来的消费主义。</p>
<p>怎么能让大家拼命消费呢?</p>
<p>好吧,资本家们想出了各种各样的方法。</p>
<p>我们来提倡人人平等,对!是消费面前的人人平等 ,男女平等,老少平等,少数族群和多数族群平等,去提倡在消费面前,人人平等。过去那些达官贵人才能消费的奢饰品,普通人努努力也可以得到了。什么?你买不起,没关系,有各种的金融手段,贷款、信用卡来帮助你实现这种自由和平等。</p>
<p>不仅要在国内提倡消费平等,还要走出去,把这种伟大的消费平等,传播到世界各地去!资本家们去拓展其他国家的市场,推动其他国家的产业私有化,吞噬他们中的弱小资本,更“自由”的控制他国的市场,更多地进行商品的倾销,甚至包括民生在内的产业,如电力、水….</p>
<p>在微观层面,培养不断抛弃旧的物品不断消费的消费文化,要不断地鼓励大家扔掉旧手机,没事就换个包包,要用各种新鲜的商品,帮助你活在愉悦当中。</p>
<p>这个过程当中,最重要的实施手段便是广告,通过广告,向公众制造不安,然后告诉你,只要你买了我的商品,就可以缓解不安。广告试图培养一种性格、欲望和习惯,培养你对现状的不满,需要通过购买新东西,来填补这种不满。广告会剥削你的本能,批量生产让你感觉个性化十足的“个人主义”。 而,正如前面我们已经探讨过的,现代性给我们带来的孤独感、无力感、无目标感,在这种铺天盖地的广告的诱惑下,彻底放弃了抵抗的能力,彻底地去拥抱消费文化。</p>
<p>消费主义本质上是一种统一和从众,通过消除文化多样化,不刻意让种族隔离开;让我们远离家庭价值,更强调个人,而个人价值又要通过一个个你购买的商品被表达处理;而后现代艺术中那种虚无感和各种解构,恰好又是最好表达人情绪的手段,天然地就可以和广告、媒体结合到一起,让它们去为资本服务,人文艺术本身是关于人情绪体验的领域,被资本用于来操纵消费,再合适不过了。</p>
<h1 id="后">后</h1>
<p>对于现代性的反思,还有很多哲学家进行过反思和思考,这里无法一一阐述。而反思现代性的后现代主义,也深深影响着文学、建筑、绘画、雕塑….,理性主义虽然是近现代人类伟大的进步,科学技术发展也不断让我们的世界发展,但是,终究无法抚慰我们灵魂深处那个无处安身的自我,理性工具越是伟大,它也越会把人性和心灵逼到更狭促的死角。这种感受,我们每个人都是真真切切感知到的,经济的大发展,没有让我们感到更加幸福,反倒是40岁危机、996福报、快递小哥的困局….这一切都让我们惶恐、不安、焦虑和沮丧,我们确实应该反思这个世界、反思自己的生活,该去追求些什么,才可以让自己感觉内心幸福,心灵安宁。</p>
DBNet模型
2020-07-08T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/07/08/dbnet
<h2 id="概述">概述</h2>
<p>这个算法想法怎么来的呢?</p>
<p>看了</p>
<h2 id="box-formulation">box formulation</h2>
<p>既然approximate binary map只是 probability map和threshould map经过$\hat B$运算后的结果,他得到的只是一个“缩小版本”的文字区域。(会比真实区域缩进一圈)</p>
<p>那么,还需要一个box formulation骚操作,把他还原成真正的文本区域,这个骚操作到底是怎么做的呢?</p>
<h2 id="参考">参考</h2>
<p>【文章】</p>
<ul>
<li><a href="https://arxiv.org/pdf/1911.08947.pdf">论文地址</a></li>
<li><a href="https://www.cnblogs.com/yanghailin/p/12337543.html">DB/DBNet:Real-time Scene Text Detection with Differentiable Binarization一些问题</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/139062842">知乎-OCR相关之DBNET</a></li>
<li><a href="https://cloud.tencent.com/developer/article/1641941">PSENet PANNet DBNet 三个文本检测算法异同</a></li>
</ul>
<p>【代码】</p>
<ul>
<li><a href="https://github.com/MhLiao/DB">官方代码</a></li>
</ul>
中国历史大串烧
2020-07-07T00:00:00+08:00
https://www.piginzoo.com/life/2020/07/07/chinese-history
<h1 id="序">序</h1>
<p>在听中国历史,听着后面就忘了前面的,不行!得记个流水账,一个是让自己捋捋记住,另一个增加一个索引,查哪段都可以快速索引到,干起来~</p>
<p>这个系列于来自我刷的B站的两个<a href="https://www.bilibili.com/video/BV1Ct411u7Yr?p=1">《中国历史》</a>和<a href="https://www.bilibili.com/video/BV1Cx411j7Nt">《中国通史》</a>,两个不错的100多集历史扫盲纪录片,不知不觉地刷完了。</p>
<p>本来想起个雄壮点的名字,比如“我的史记”啥的,哈哈,但是觉得有点妄自尊大了,算啦算啦,还是起个“历史大串烧”的俗气名字吧,名字不重要,把这些历史的细节用心记住才是目的。</p>
<h1 id="编年史">编年史</h1>
<p>恩,基本上,是按照年代来的,从原始人一直到大清药丸,一路走来</p>
<h2 id="史前">史前</h2>
<h2 id="夏商周">夏商周</h2>
<p>大禹治水,最早出现在《尚书》中,</p>
<h2 id="春秋战国">春秋战国</h2>
<h3 id="孔子">孔子</h3>
<p>孔子剩余公元前551,字仲尼(仲尼,排行第二的孩子),在他的出生地,鲁源村,还有一块1924年康有为给孔子的纪念碑,有机会要去看看。</p>
<p>鲁国是周公旦的封国,所以鲁国子孙世世代代继承了周礼,但是到了春秋,礼乐败坏,只有鲁国还保存了周礼的礼数,孔子在鲁国学习周礼,仰慕三代,还曾向老子学习。</p>
<p>孔子讲仁,讲礼制,他非常推崇三代,夏商周,天下为公,夏禹、商汤、周成王、周武王、周成王、周公,都是君子,以礼数规范出一个安定的“小康”社会。但是,当下礼崩乐坏,各诸侯国都开始违反礼制,春秋后期,各国又出现,卿大夫篡夺王权,所有这些都让孔子痛心疾首。</p>
<p>孔子50多才担任鲁国大司寇(相当于现在的司法部长),迎来自己出仕的机会,去实现自己的政治抱负。他为了削弱三桓(季孙、叔孙、孟孙氏)的势力,尝试去拆毁他们的围墙,结果触犯他们的利益,被迫离开鲁国。</p>
<p>公元前457年,</p>
<p>困厄陈蔡,惶惶如丧家之犬,</p>
<h3 id="列国变法">列国变法</h3>
<p>士阶层崛起,是学而仕的平民阶层和没落贵族组成。</p>
<p>首先开始变法的李悝,他在“上地”(秦魏交界)推行习射令,判案以谁射的准谁赢,这听上去很荒唐,但是大大提升了平民的战斗力。
后来李悝被提升为魏国相国,推向全国变法。他指定的《法经》成为后面变法的范本,据说商鞅制定秦国《秦律》,就是参考自《法经》。</p>
<p>公元前453,晋国被贵族们瓜分为韩魏赵;姜子牙的后人的齐国被贵族卿大夫田氏篡夺成为田姓齐国;至此,七国开始并立。</p>
<p>战国时候的战争,不在受周王礼制束缚,开始越来越惨烈,最终发展成几十万,甚至百万人的战争。之前的春秋,几万人就是大仗了。</p>
<p>齐国:齐桓公临淄稷门建立学宫,到齐宣王时候稷下学士千余人。</p>
<p>燕国:燕昭王千里买马骨的故事,郭隗(wei)讲的一个故事,千里马买不到买马骨也可以啊,让别人知道你礼贤下士。郭隗后来被燕昭王封为国师。</p>
<p>赵王:第一次见面就封贫民虞卿黄金百镒,第二次就担任了找过的上卿。</p>
<p>苏秦,在家吃闲饭,但是凭着三寸不烂之舌,当上了合纵长。</p>
<p>孙膑:在魏国受庞涓迫害,投奔齐国,与田忌合力为齐威王效力,大败庞涓魏国。</p>
<p>吴起:杀掉嘲笑他的30多个邻居,从卫国跑到鲁国,删掉了齐国妻子,为鲁穆公攻打齐国,大败之。但是由于鲁国是孔子母国,讲究孝道,吴起没有为母亲过世而回家守孝,导致失去信任。后来吴起去魏国,和李悝一起为魏文侯效力,负责军队改革。并且著有《吴子兵法》,与《孙子兵法》齐名。魏武侯继位后,吴起失宠,他被排挤,去了楚国。楚悼王在吴起的辅佐下,楚国有了很大起色。但是,楚悼王不长命,楚悼王一去世,那些被触犯了利益的贵族一起杀死了吴起,吴起最后扑倒在楚悼王身上,导致贵族的箭射到了楚悼王尸体上,导致七十家贵族被灭族。吴起真狠呐。吴起的一生也是曲折和不得志的一生。</p>
<p>改革的名仕还有,齐国都邹忌、韩国的申不害。</p>
<p>改革建立郡县乡,加强中央集权;建立户籍制度,服务于基础劳动力和兵源;户籍制度是多么的万恶,是有历史由来的。</p>
<h3 id="诸子百家">诸子百家</h3>
<p>公元前500年左右,孔子、释迦摩尼、苏格拉底先后诞生,这个时代就是“轴心时代”,百家争鸣</p>
<p>孟子是孔子晚两代,他是孔子思想传承人,</p>
<h3 id="秦汉">秦汉</h3>
<h3 id="西汉">西汉</h3>
<!-- [百科](https://baike.baidu.com/item/%E8%A5%BF%E6%B1%89/394557) -->
<p>刘邦打天下,仰仗的是七个诸侯王。楚汉之争的时候,刘邦就发放丹书铁券,上面镌刻着对诸侯王的承认,楚王韩信就是其中之一,他们都是异姓王,刘邦仅控制函谷关以西的那些郡县,其他被诸王分割。不过西汉初年,燕王臧荼就反叛,平了后,又有人举报楚王韩信谋反,于是刘邦假托迅游云梦泽的时候,在当今淮阳的平信桥,将前来拜谒的韩信抓捕,然后贬成淮阴侯,软禁到长安,后来,在刘邦离开长安去平北部赵相国叛乱的时候,韩信称病不从,在刘邦离京后,吕后怕韩信策应,与萧何同谋,召其进宫,干净利落解决了韩信,都没等刘邦的发落,这点也反应出吕后的果断和毒辣。除了韩信,剩下的七个诸侯王,只有一个善终,剩下的不是被杀就被迫逃亡匈奴。</p>
<p>刘邦死后,吕后的儿子惠帝地位,但是惠帝善良但软弱,朝政一直被吕后控制,吕后是个狠毒的妇人,在刘邦死后,把刘邦宠幸的戚夫人做成了人彘,她大力发展吕氏家族掌控朝政,惠帝执政七年后去世,吕后索性就立了五岁的刘恭,彻底掌控朝政。但是,刘邦临死前,和重臣们杀白马立誓,“非刘氏者,天下共击之”,所以吕后还是不敢越雷池,怕得罪天下人。吕后一死,齐王刘襄联合其他诸侯王起兵反吕氏家族,陈平等重臣在长安策应,诛杀了吕氏主要人物,废掉了吕后立的另一位小皇帝刘弘,迎取代王刘恒,史称“汉文帝”。</p>
<p>文帝刘恒一直示弱,在所有人眼里,跟个废物似的,所以,陈平灭了吕氏家族后,就挑选了他当皇帝,本想立个好操纵的,不想刘恒一入长安,立刻显现帝王之相,干掉了势力庞大的陈平。
文帝时候,年轻才子贾谊上书《治安策》,指出分封制是乱世的原因,主张废除。虽然文帝非常同意,但是由于自秦开始的各种战乱导致民不聊生,不宜因为削藩再掀波澜,而是以黄老之治的方式,让百姓休养生息。</p>
<p>文帝死后,景帝刘彻继位,一上来就在晁(chao)错的建议下开始废藩,结果势力最大的吴王刘濞(bi),联合其他诸侯王,立马反叛,吴王刘濞家里有矿(铜矿)和盐(沿海),当时铸币权不在中央,刘濞大量铸币,可谓兵强马壮。结果,景帝慌了,腰斩了晁错,天真的以为刘濞的“清君侧”的借口可以被满足,可是刘濞是要他的国啊,只好认真迎战,派出大将周亚夫,结果三个月就平了叛乱,杀了刘濞。</p>
<p>终于,汉王朝从刘邦开始的异性封王,再到后来的刘姓诸王,这段由于分权导致的中央集权的弱化引发的各种问题,总算是完全解决,</p>
<h3 id="五代十国">五代十国</h3>
<h3 id="隋唐盛世">隋唐盛世</h3>
<h3 id="南朝北朝">南朝北朝</h3>
<h3 id="北宋南宋">北宋南宋</h3>
<h3 id="辽金元">辽金元</h3>
<h3 id="明">明</h3>
<h3 id="清">清</h3>
<h2 id="完">完</h2>
我的创业人生
2020-06-14T00:00:00+08:00
https://www.piginzoo.com/life/2020/06/14/my-startup-life
<h2 id="序">序</h2>
<p>从2011年12月,离开梦芭莎,和老杜一起开始筹划创业,一直到2016年12月,彻底退出,整整5年的人生时光,让我从一个对社会循规蹈矩的打工者,变成了一个油腻的创业人,期间经历了太多太多,一幕幕回忆起来,无限惆怅。虽然没有收获到财富、成功,但是这些经历都让我领悟到许多许多,成为我人生中无法抹去的重要的一幕。</p>
<p>终于,坐下来,把它们一一记录,是对过去的致敬,也是对未来的启示。</p>
<p>不要刻意贬低任剑,清华+南洋理工硕士,杜国举,高中最聪明的人,</p>
<h2 id="2012年">2012年</h2>
<p>12月20号左右,去老杜家,跟老杜去注册,找办公室,舒望1712,认识买螃蟹的,那个红沙发,赵岩,
想创业方向,卖尿不湿,开车去进货,开车去送货,
洪、张3000员招聘,兴高采烈做app,蛋解创业,泡周末,招美工,外包美工,抄app?
上线,参加rubyrails聚会,见到李笑来,
到了5月份后,转型,赵岩离开,程序员离开,剩我和老杜,开始做营销,google营销,
学习丁老头,seo,nuke,各种工具,
小郝来了,一起,做翻倍,外包亚州做英文写作,iwriter,
年底,任剑加入,</p>
<h2 id="2013年">2013年</h2>
<p>年初,杜呈加入,一起去看他的英语幼儿园,4个人在咖啡厅,25%比例,
看英语培训的时候,接到黄兴华的电话,光伏,没做过,找张明,找到老x,老x连夜答应陪去,
去开会,22万不含税,再要税不给,
然后去南六环,认识了元帅和另外一个东北小孩,来我们公司,一起做,
认识小吴,开车去昌平出租屋,做第一个项目,然后全北京跑,大雨瓢泼,去多野的车间屋顶,
8月份做胆囊手术,12月去马代,1个月,认识2个哥们,第一晚去海上看月亮垂钓,餐厅自己做,海滩,热,刺眼,
熬夜,调试modbus崩溃,南非监理,英文作用,一起经历整岛断电。</p>
<p>杨军,黄少一,江苏移动,健康跑,
我出差去南京,
杨军跟我说,10年才叫一个公司。</p>
<p>去见邵震,跟我说,给钱才干活,屋顶,朗园上。</p>
<h2 id="2014年">2014年</h2>
<p>回来,就听说接了公安部的项目,工作流引擎,17万,外包13万,最后就又给3万买源码,被坑,
然后招人接下来,做二期,
接下来搬家,办公室,痞子帮忙,中介气势汹汹,然后痞子药股份,威胁打人,给钱平事儿,
搬家,认识郑冉哥们老万,说要一起做一个项目,马x一,麻省,他的老板,一起,碰面,
拿了30万曾图的投资,后来退了又,大数据杀的,很唬人的公司,
去联想,高级大楼,说营销方案,蓝莓策划,
回来开发,用ecshop,蓝莓的动画,给我们每人一箱蓝莓,上线,
招人,小高来了,一边光伏,一边联想佳沃,
然后开始接app的活,商城的活,公安部的活,
还有六耳的策划,想自己的方向,
还接了人大出版社的张海洋的营销,刷榜,
认识了王冉,认识了北邮的x老师,跟着混,跟着见人,喝酒,跟老毕一起折腾p2p爬虫网站,
想方向,摇一摇。</p>
<h2 id="2015年">2015年</h2>
<p>跟王峥见面谈摇一摇,开始做,婚礼现场摇一摇,婚庆公司,崇文门摇一摇,韩国明星,
后来放弃,张罗旅游聚会,dick付梅他们认识,还约饭,被老x给涮了。
期间,做五粮液项目,认识了李梅、郑冉、那个美工,还有x老师,
一起开了几次变态的会,对方,3点,死磕,撤单,晓铮,
我们写方案,做实现,app,微信,
6月去美国旅游去,
想方向,读精益创业,从0到1,等,明白,要利基,8月份,开始考虑印度外包的事,</p>
<p>期间和刘一鸣一起做app,最后给了10万,我拉3个人去,
跟着去见了王思聪的投资公司,直播,山寨美国的xxx,
录屏,移动我们做,nodejs后端他们自己做,给我股份,15%,</p>
<p>10月份,开始招人,找志华,开始印度那边,3个人,走了1个,
到年底,打磨的还可以了。</p>
<p>我还盯着各种项目</p>
<ul>
<li>卡车之家的,介绍刘x进去</li>
<li>盛开的项目,后记,ecshop版权问题</li>
</ul>
<p>主要现金流,公安部的项目,饶飚,瑞安</p>
<h2 id="2016年">2016年</h2>
<p>去盯着国家数据中心那个项目,去酒店跟曾图一起见省长的儿子,
去数据中心,啥虎,一起做项目,我们负责商城,做了一起就给他们了,</p>
<p>主要项目,还是外包人到成都,</p>
<p>王晶的同学,那谁公司关门,把服务器都给了我,还有他的客户,
我去跑了南水北调,
还有啥出版社,还接他了他们的app项目,任剑后续跟进的。</p>
<p>开始招人,印度找到28人,
国内再招2人,国内4+1我+额外援助,国外28人,ip电话,
王晓刚、印度ham,协助,一起努力,
3月开始有单子,开始跑单,小郝营销,志华客服,我协调印度,外联,渠道,
见了几个客户和渠道,始终打不开,
一直到7月份,去碳九读书会,张明华介绍的,参加第一次碳九,吃饭,认识一群创业人,
然后,9月底的张本伟的课,提前一周和3个人一起读书死磕到1点,
最后2天,一起努力做项目推演,得了第一,第一次骑上了共享单车,
10月份之后,参加了2次路演,融资失败,
我要求我控股,老杜他们不同意,
12月份订单下降厉害,年底了,自己觉得突然没啥干劲了,
去参加谷歌大会,看到tensorflow的专场,突然有想投入的感觉,
接到老杜电话说,不打算投了,终止项目,我也不想干了,
英国方向继续,我也拒绝了,然后去萌生去意,
1月份,3个哥们喝了散伙酒,签了协议,17%保留</p>
<p>期间参加了nodejs社区聚会,喝酒,认识好几个。
其中,参加了一次chatbot的,也为我ai转型埋下伏笔。</p>
<h2 id="其他">其他</h2>
<p>2人,10人,20人,38人最多的时候,
常年在28人了后来,
现金流20万,100万,200万,500万,400万,</p>
<p>知道的很多公司的宿命:</p>
<ul>
<li>老毕的p2p公司</li>
<li>刘一鸣的折腾之路</li>
<li>王冉的崛起</li>
<li>张明华的打拼之路</li>
<li>卡车之家的崛起</li>
<li>光伏最早那个合作者的公司,龙克砜,后来搞元宇宙</li>
<li>王峥的100万打水漂</li>
<li>付梅、dick、方凌老公的创业梦</li>
<li>王毅专业投资人和他的劝告</li>
<li>曾图和国家信心中心这帮骗子之路</li>
<li>老万公司的衰落,三板</li>
<li>期间合作的美工公司,西三旗那个</li>
<li>对手切图网还活着</li>
<li>李栋公司的浮沉</li>
<li>黄兴华公司的兴亡</li>
<li>小蔡和他的猎头生涯</li>
<li>梦芭莎的王,做代码安全,合伙人纠纷,200万请出去</li>
<li>老戴的公司,开他的董事会,</li>
<li>黄珺的甜蜜恋人项目</li>
<li>郑冉张明的公司,维持</li>
<li>博宇和亚卿的游戏app</li>
<li>王帆找我做心理咨询,也无果</li>
</ul>
<p>公司不壮大,就是死亡。</p>
<p>第一性原理,混沌研习社,第一年800元,
蛋解创业,
碳九,张本伟,
几本创业的书,</p>
<p>一些下三滥的:营销,认识的那个北大青鸟的小孩,
去和老杜去旁听北交大的mba营销课程,知道了利基市场和一些营销概念,</p>
<p>项目:</p>
<ul>
<li>给人家做的app,老蔡的哥们,塞钱,车里,老曹他老板</li>
<li>基站定位的那个项目,那个抑郁的哥们叫啥来着,跑了好几趟
跑了无数项目,</li>
<li>给韩国公司做营销项目,没拿下,贺超姐夫,望京</li>
<li>去部队,袁伟的姐夫的项目,我和任剑熬夜,做内部采购项目</li>
<li>联想的项目,app,任剑的同学,高层,黄珺在</li>
</ul>
<p>带人:</p>
<ul>
<li>管理的成长</li>
<li>带人的经历</li>
<li>我的离职群,好朋友,</li>
</ul>
<h2 id="后记">后记</h2>
<p>在家憋了一年,转型成为人工智能专家,股份后来再次变更到11%,到最后彻底放弃掉了。
还是很难得的一个人生经历,好在是没有太赔钱,合计投入25万,期间除了最后2年,5000元工资,基本上没有收入。
赶到创业大潮,也算是体验了一把,
明白了很多,创业不易,创业的本质,企业运作的本质,
创业的股权设计,利基方向,MVP原则,合伙人的重要,
也认识了各种各样的人,见识了社会,和之前外企和技术圈的生活完全不同,变成社会人,成熟了很多,
也明白自己的能力圈,志向,
后来的小高,后来的志华,公司还在,</p>
<p>比较失败,缺乏方向,股权设计,
其实是有机会的,
泡周末,
营销方向(包括摇一摇)
印度外包(不仅切图,将来的标注、以及智能低端人力外包)</p>
<p>link到我的人工智能之旅</p>
喃喃自语
2020-06-13T00:00:00+08:00
https://www.piginzoo.com/life/2020/06/13/some-thoughts
<h1 id="嘟囔">嘟囔</h1>
<p>愈发的强烈想表达,虽然文笔不是那么优秀,但是压抑不住地表达的冲动,想让自己和这个世界说些什么。
于是,拿起键盘,倾泻出自己的感受,用文字,记录下此刻和心情。</p>
<h1 id="这个世界">这个世界</h1>
<p>可能是上了些岁数,见识过了这个世界的一些面貌,逐渐对这个世界有了一些自己的看法。特别是这几年,看到无数的光怪陆离,荒诞不经,这个世界已经开始让你觉得有些不可理喻的变化着,甚至是你曾经熟悉的那些人,也在时间的刻刀里,雕刻出他们千奇百态的面容,让我几乎有些认不出来了。</p>
<p>我惊奇的是,很多人基本的价值观是如此的扭曲,即使在我看来绝对是非常普世或者底线的东西。不过,我也不敢狂妄的贬低和否定这些价值观,而是反过来审视自己,是不是我在另外一个方向上走的太远了,别人可能永远是自己的一面好镜子。</p>
<p>谈到我的中国,谈到中国共产党,我觉得作为执政党没有什么问题,但是权力不能被制衡,不能被约束,对一些问题不能被披露,媒体无法对它有效监督,司法体系无法对其约束,这些在我看来都是非常常识性的东西,在很多人看来,居然是不可理解的。在与美国对抗的道路上,我觉得,修昔底德陷阱的确是无法避免的,一个大国的崛起,必定会引起当前最强大的美国的阻挠,这些我都可以理解,但是,当把我们这些普通人都绑在这个决斗的战车上,把这种“爱国”这种帽子扣在我头上,对不起,我没这这个义务,这不是1937年的陷落的北京城,不是老舍笔下那群日寇统治下拳拳赤子之心的人们。</p>
<p>很多人都觉得中央集权才是中国的唯一正确的体制,民主制度不适合中国的文化,西方的那套制度真的不适合中国,言辞诚恳。我也觉得有些地方不对,但是也说不出什么。于是,我就很好奇的,去研究了一下所谓西方的这套制度的演化,从古罗马的元老院制度,到启蒙运动对宗教权力的挑战,再到后来文艺复兴人性的觉醒,再到近代上帝死了后的各种后现代主义;我也从头到尾听了2遍中国的历史,了解到了中国将近四千年的变迁,从周公定礼制,到秦的大一统,董仲舒的儒家至上,唐的文化融合,宋的羸弱但藏富于民,到明清后极端加强的皇权和文化控制,再到近代中国的屈辱史。其实,民族国家的形成是一战之后的事情,之前,哪有现代意义上的民族国家啊,全天下都是皇帝主子们的家奴而已,所以那些对中国四千年泱泱集权历史崇拜的人,是崇拜错了对象。近代的中国确实是一个充满屈辱和苦难的国家,近代资本主义确实是充满了罪恶,而中共建立了新中国也确实是历史的进步。但是,我一直觉得,中共并没有给中国一个更美好的国家,他本可以做的更好,不去搞文革,有更完善的法制和司法制度,更透明的媒体,更大的言论尺度,更好的监督机制,给民营资本的空间,藏富于民。而,我们都可以看到12年后的媒体收紧,各种监察手段的增加,对言论的控制。更过分的我不太想说了,怕给自己惹来不必要的麻烦。如果有些人对这个制度和政党高歌颂扬,我真的是对这样的人,多一分警惕和小心了。他们不是利益相关,就是确实太缺乏史观,从这个角度,倒也不用和这些人计较,自己冷眼看着这个世界和逻辑就可以了。</p>
<p>自己的价值观其实也在不断变化,出国那阵,真的是对国家有一种莫名的热爱,不喜欢别人批评中国,觉得自己就是中国的一部分;后来,惊呼社科院教授居然对体制都充满善意的批判,对国家的暴力机器本质认识的深刻;然后又读过了《动物庄园、一九八四、美丽新世界》等对集权的反思和批判;再到后来对美国建国和宪法制度的崇拜,以及到后面的失望和反思;再到后来对哲学入门,了解到人作为本我的自由以及被他者的奴役,到后来了解到了福科的规训、阿伦特对人境况的思考。这一路走来,自己也在不断的变化和成长,逐渐摆脱了过去那种偏执的虚妄。</p>
<p>现在的我,不太会太去推崇哪国的政治制度,也不会不去刻意的去维系一个特定的价值观,我更喜欢的一种方式,是告知我尽可能多的,接近真实的信息,并且,告诉我观点背后的逻辑,如果信息真实,逻辑严谨,我是愿意去信任一个观点的,而且,我也愿意为这个观点表达我的支持。与之相反,我厌恶口号性的,偏激的,有煽动性,过度修饰的言论和观点,而不提供给你真实的信息,更不会告诉你观点背后推演的逻辑。这样的观点和言论,我一概警惕。</p>
<p>我曾经非常的喜欢韩寒,以至于我不太去在意他的代写门;对罗永浩也狂热的喜欢过一段,但是后面他确实辜负了喜欢他的人。我也很喜欢许知远、陈丹青。突然有一天,这些人被扣上了公知的帽子。这些人,确实有才气,是远超我们普通人的,所以我过去对他们都是仰视。后来自己慢慢成熟了,也明白,他们有他们的问题,有他们的局限性,他们不是完人,有性格上的各种弱点。现在再让我去看待这些人,如果韩寒是代写又不肯承认,确实是应该被唾弃;罗永浩确实也辜负了大家对他的喜爱,太过度消费了自己的信用;陈丹青、许知远,确实有一种让人高冷无法亲近的距离感。对这些人的看法的改变,我不觉得是我背叛了自己,而是我真正的用平视的眼光看待这些人,是我自己作为一个个体成熟的标志。</p>
<p>这些公众人物也好,我们普通人也好,只要是善良,不心存邪恶,不矫揉造作,不对权贵趋炎附势,坚持自己的内心价值,都是我值得去尊重的对象;反过来,对那些摇旗呐喊,趋附权贵,道德沦丧的人,再权重位高,名气中天,都是我心中恶心和厌恶的对象。我对权力崇拜非常的厌恶。</p>
<h1 id="香港">香港</h1>
<p>香港问题,是我和我的朋友们划开朋友圈的一个分水岭。在我看来,从铜罗书案,到送中,再到国安法,这一系列来的太无厘头了。铜锣只是很黑天鹅的一个开始,原因众所周知,一个给主子谄媚的舔狗事件,最终演化成对一国两制的送终。真的是让我觉得可悲。我的朋友里,有人拍手叫好,对港怂的暴力行为噗之以鼻,觉得他们被美国利用,当枪使,一旦遭遇强力打压,就立刻软弱,漏出香港人市侩懦弱的本质。觉得他们就该被中国管着,被抽打,被奴役,他们是一群被利用的无能废物。</p>
<p>可是,真的是这样么?200万人大游行,还不足以说明民意么?香港人本来过着相安无事的生活,维多利亚港从来都是歌舞升平,但是,这么一个无理头的黑天鹅,就把他们的生活毁灭掉了。设想如果你是一个本地香港人,你的城市发生了这一切,你会怎么做?</p>
<p>我从这些朋友眼中,看到了对起码的认知、价值感的丧失,更可怕的是对普通人的同理心的丧失。所以我有时候觉得,人是不是越上岁数,内心越僵硬,越缺乏感动的能力了呢?剩下的只是对这个世界的冷酷,和自以为是的偏执。我承认一个朋友说的,哪有什么岁月静好,世界从来就不太平。但是,再不太平,我们作为个体,也有追求静好岁月的权力,也有对美好的向往,对平凡事情的感动。</p>
<h1 id="乌克兰">乌克兰</h1>
<p>乌克兰战争,让我再一次领略了分裂的人群。</p>
<p>北约东扩,对俄罗斯的压迫感,确实是这种战争的一个导火索。拜登在这件事上的煽风点火,泽连斯基的冒进的愚蠢,包括整个欧洲在这件事上表现得迟疑,“时无英雄,使竖子成名”,这个时代确实缺乏了伟大的政治家。随着默克尔的黯然离去,这场战争如期而至。</p>
<p>在北约东扩上,我以现有的信息了解和价值判断,认为俄罗斯在这件事情确实应该抗议,甚至可以在局部进行抗争,譬如克里米亚。政治就是角逐和较量,以及妥协的艺术。其实,俄罗斯作为受害方的角色,有各种各样的选择和方法,来要回自己的利益,但是,他却选择了一个愚蠢的方法,“侵略乌克兰”。</p>
<p>我不是想讨论这件事情的对与错,这是一场侵略战争,无疑。我只是想通过这件事,对我的身边人做一次X光的透射。</p>
<p>即使我抛开主权、领土、领空,这种明显上可以定义这场战争为“侵略”这一点,想想数以百万级的人们,流离失所;数以万计的人,失去生命和亲人。所以,请不要跟我说,这场战争是被北约逼的,是俄罗斯不得不打一场战争。</p>
<p>你质问我,美国当年不一样打伊拉克、阿富汗、也门,搞的生灵涂炭的么?哪有什么正义,都是政治、利益、美国军火商的赤裸裸的交易等等。我承认,美国这样做,同样可耻,那些为了私欲、利益和政治上的交换,同样让人感觉到恶心。但等等,我们是在讨论乌克兰战争,你不能把两者混淆到一起。</p>
<p>你跟我说,当年苏联、英国、美国,不一样,要付出比这惨痛的代价,来换取和平和安宁么?为了将来的新的平衡,眼前就是要有人付出代价。不!这不一样。一个是没有选择的,一个是主动选择的。我前面说过,俄罗斯有很多选择,可以索要回自己的利益,而不是让这些普通乌克兰没有选择的失去他们的一切。</p>
<p>我眼中,只充满了那些失去家园、尊严、身体、生命的普通人,他们没有选择,他们被迫卷入。对俄罗斯而言,这本是一场有各种选项的战争,而普金选择了一种,最卑劣、软弱的、无耻的方法,他让普通人承担这一切的后果,包括乌克兰的普通人,还有俄罗斯的军人。</p>
<p>在我看来,无论你怎么解释、证明,这场战争的正确性、正当性、合理性,都说明你已经失去了最起码的是非价值判断,失去了一个作为有人性的普通人的价值,失去了感知颠沛流离的创伤感的起码的同情心。</p>
<h1 id="活着">活着</h1>
<p>多看历史,多读历史,多思辨哲学和人性,保持内心的纯真、好奇和善良,努力看透这个世界却不固执和偏执,善待每个个体,但是对丑恶、邪恶警惕和唾弃,多一些慈悲之心看众生,待自己。
所以,努力克制自己对政治的执念,看透就好,光阴珍贵,用更多的时间,去拥抱美好,绘画、音乐、哲学、文学、历史、数学以及世间美好之物,少一些对政治龌龊之事的无关痛痒的参与,提高自己的修为。</p>
<p>曾经创业过几年,后悔没有执念的去做一些事情,但是转念,自己确实不是那种执念的企业家,很高兴自己可以选择退出来。经历过,就能理解很多东西了,对企业创始人多了理解,对管理者多了份尊重和同情,也为这个商业世界的冷酷感到悲哀,物欲已经成了唯一成就的标志,且不说道德层面,单说快节奏的996,用年轻人的high一样的疯狂加班支撑商业,没有选择的向前奔跑。我讨厌这样的世界,我需要有,我过一个普通人,中等收入,按点下班,不被年龄歧视,心安理得的挣自己所挣之钱的自由。</p>
<p>我不是完人,我也会动怒,但是,我会不断的学习、反思和进步的。</p>
<p>我没那么乐观,也没那么悲观,因为经历过一些事情,也明白没有什么岁月静好,也知道后面可能会有更残酷的生活等待着我。但是,这都不影响我,此刻,想安静的呆着,不被世界的欲望烦恼,安静的坐着,读读书,听听音乐,享受这片刻的欢愉。</p>
<p>和朋友们聊天,看互联网上的媒体,看各种social媒体的狂欢,都愈发的感觉,大家热衷的问题,都是那些可以引起刺激的东西,背后你可以明显的感觉到这些话题,对你感官、欲望的刺激,而无法达到一种让你更深层次愉悦的感受,那种可以回味的感觉。可以看看这些话题,政治、美食、明星的八卦、甚至是极端的社会事件,其实都如同一顿快餐美食一样,快速的过去,享受完即刻的快感后,消逝殆尽。你甚至,都没留下回味的印象。</p>
<p>你看着自己年华流逝,不仅仅是苍老的面孔和被岁月刻刀出来的褶皱与伤痕,即使是凝视他们,也是你早晨洗脸的一瞬,然后你投入到每天的忙碌当中,又会忘记这张属于自己的脸和岁月,这岁月和碎月,让你感觉到的是一丝丝的焦虑和无助,但是各种的刺激和麻痹,会让你迅速忘却,忙碌和各种音视刺激,都会冷却你的焦虑和不安,你确实想去拨开一些真相去了解它们,但是,你的身体却诚实地岔开你的努力,继续把自己投入到每天的忙碌、刺激和琐碎当中去了,周而复始,西西弗斯般地推石前行,虽然你也知道,终点就在那里,你逃不出宿命的死亡,但是,此刻,你还是愿意迅速的把自己投入到各种忙碌的琐碎当中,寻求片刻的镇定。</p>
<h1 id="他们">他们</h1>
<p>我在一个老鸟群里,大神不少,都挺厉害的,有些应该位置也不低,上市公司的高管之类的,但是,里面充斥着高智商、权力掌控者的傲慢和自我,post的帖子和话题里,透露着对自己智商的show,这其实也没啥,毕竟确实比一般人努力且聪明,但是,当里面夹杂着德道、意识形态方面的私货的时候,就不那么让人舒服,甚至让人觉得恶心了,背后的油腻味道呼之欲出,以至于,之前在这个圈内的对这种私货反感的哥们,都纷纷退掉了。有意思的是,退掉的那些朋友们,他们里面很多人,不约而同的选择去了加拿大,去呼吸他们认为的民主空气去了,就如同我的另外一位同学,对这个社会和政党失望甚至厌恶一样,选择了直接用脚投票。我倒是,没那么爱憎分明,我留在群里,默默的冷眼地观察着他们,看着他们的表演,亦或是真情流露,我很需要对这个年纪、这个阶层、这个智商水平的人的样本,从而尽可能的推广到这个社会。</p>
<p>这些人确实很聪明,也非常自信,这些人也确实掌控者各个公司的资源,给他们画一幅画吧:自信、自负,但是非常努力,对人对己十分苛刻,对权力崇拜,爱好秩序,不同情弱者,有深深的精英意识,自觉与众不同。</p>
<p>这些人,确实有过人之处,在某些方面,偏执的努力,专业上厉害,做事上执着,执行力超强,这些确实确实非常厉害。在这点上,我想多说两句,他们实际上对第一性原理应该是理解颇深,或者说骨子里流淌着,他们知道在一件事上,最最最应该努力的方向应该是什么,一件事情做成与否的本质决定因素是什么,他们也会不断地自我反思,不断地修正,不断地学习。就像埃隆马斯克一样,他们会阅读《原则》,会读资治通鉴、曾国藩,同时也会读心理学,行为心理学、社会心理学,他们还会努力的学习管理,各种的最新的管理知识,如OKR,但是他们不是教条的接受,而是思考其管理的本质,小范围精益的去实践,总结,闭环。如果遇到专业的东西,他们立刻可以沉下心来,潜心研究,拾掇起来他们丢掉的数学、算法、信号处理,一股不啃下来誓不罢休的劲头,让团队内的专业大拿,都感觉到压力。总之,他们就是战神,是勇士,是斯巴达的战士,又是奸诈聪明的巫师,是凯撒一样的不拖泥带水的决策者。</p>
<p>这些人,却一点不会怜悯弱者,他们的自怜也往往是出于自恋,他们对强者崇拜,所以,他们不会在乎集权体制,相反,他们反倒非常崇拜,集权顶峰的掌控者,对那个顶峰的人,充满崇拜,甚至是惺惺相惜的自我映射感。他们觉得,去批评去反思去反对这个体制、去批判这个顶峰之人,不如去找到这个体制中,自己可以利用的东西,顺应这个系统,投入进去,“抱怨只是弱者的呓语”,勇者要做的就是去解决这个问题,当然,最好的解决办法,就是找到这个系统的漏洞,或者,合理的利用它的规则,或者利用好人性,利用好自己从历史、心理学、管理学、各种第一性原理中习得的本领、技巧,去掌控、操纵、融入这个系统,从而获得最大的利益。然后,他们因为能力强,确实可以做到,他们得到了利益,这种马太效应不断增强,给他们无限的信心、勇气,让他们更笃信,自己行为模式的正确性,自己行事原则的高效,从而他们的价值观,其实就变成不断追求卓越的方法论和实践,获得利益的最大化,满足欲望的不断地增加,周而复始,不断地获得快感。</p>
<h1 id="孩子">孩子</h1>
<p>其实感觉到自己的渺小,特别是自己有了下一代,自己作为一个观察者,看着他成长,看着他的进步,也看着他的向成人世界的堕落,我很明白,这个社会系统的设计,如何在悄悄的改造他,这种改造,他是无法自知的,他无意识、无能力,去反思和反抗这个世界给他的禁锢,正如福柯说的,这个社会,已经被各种技术型的专家,从各个层面、维度设计出的规训系统,这个系统下,人一步步的被规训、改造,这里,要说一句,这个规训是个中性词,它有好处,但是更有坏处,对社会是好的,对个人是毁灭性的,剿灭的是个体的那种带着纯真的自由和天马行空,就如同未改造前的孙猴子。是的,眼看着,孩子慢慢地滑向这个窠臼,无可避免的,就如同无数的人一样。我当然没有那个人格魅力或者教育能力,帮着孩子成就自己,我自己还在自渡的过程中。但,我知道,“渡”,靠的还是自己,是自己一个开悟的过程,是一个不断地探究这个世界,不断地自我反省,作为一个普通人,我们不可避免的向从古至今的无数的天才般、耀眼恒星般的先哲们那些学习,这样才有机会,渡己,在自己生命终结之时,回首这一生,才略感欣慰,感觉自己曾经成为这个世界轮回的一部分。</p>
<p>他的成长,对我来说,同样是一种成长。从他呱呱坠地,朦胧懂事,我也是朦胧地成为了一名父亲,而孩童般的天真,同样点燃了。当他开口叫爸爸,我知道,一种与生俱来的责任,已经在我身上生长,纵然各种的不情愿,我必须背负上这个烙印,由开始百般的不舒服,到后来的默默的坚持,已成习惯。纵然是他到了叛逆的年龄,需要你仰视着他的目光,听着他愤愤地不可理喻,你都只有默默地坚持,你知道,那是他荷尔蒙的旺盛外溢,你看他的目光,不是这一瞬这一刻,而是10几年,从一个只会满地乱爬的小家伙,到满脸灿烂的无邪,才到达可以有些坚毅的脸庞,你知道,他的路还很漫长,少年不知愁滋味,他的肆意有情可原,他要成长、犯错,让他冲你嚷嚷吧,他会有一天理解自己的不可理喻,他总会有这样一天,面对他的不可理喻的孩子和苦笑的内心的。</p>
<p>也许是,一切为他们这一代营造的太好了,他们无法体会80年代的粮票,无法体会从小对就有的那份追求“进步”的执念,年轻一代,还沉浸在数不尽的娱乐和脱口秀大会的狂热里,去不愿意抬头看看这周边的世界。这个世界,其实已经逐渐走到了开始分裂、仇恨、厌恶的边缘。想想一战、二战、冷战,以及911,这些似乎离我们太远太久远了,我担心,这持续的繁华之后,便是废墟的一瞬。我们这一代,已经透支了所有的美好,我隐隐的担心,留给我孩子的是这个世界的真相,就像你曾经没有见识过的自由的伊朗和富饶的阿富汗。也许,也许就是一瞬,这个世界的美好就会坍塌掉,虽然我希望自己有生之年看不到这景象,但是,历史往往不是按照我们这种砂砾的希望一样美好发展的。</p>
<p>他长大了,他们也很迷茫,他们的世界其实比我们的变化更剧烈,我只希望,他可以更对这个世界好奇、友善、热爱,而不是像我们一样,经历了这么多以后,才懂的去热爱这个世界。</p>
<h1 id="疫情">疫情</h1>
<p>2020.2,当新冠来的时候,说实话是兴奋的,虽然有一丝恐慌,但必经经历过2003年的非典,知道这一切都会安然过去,果然,很快也就过去了,可是,谁知道,居然接下来的2年多,就一直哩哩啦啦地不断的滋扰着我们,一个个的变异,一次次的惊吓,纵然是麻木不仁了,也会被每一次的新闻转折搞的心烦意乱。</p>
<p>奥密克戎来了后,死亡率下来后,各国都开始放开后,中国却迎来了上海的的封锁,作为清明节就被封在家里的2周体验,让我对上海人有了真实的共情感,被限制自由后,你突然对起码的一些东西倍感珍惜了。再加上不断地传出的各种声音,如同四月之声一样绵绵不断,让我能不间断的感受着他们的感受,突然一夜,你就失去了你平时完全不在意的东西,如同空气、水一样,从来没在意你会失去的东西。</p>
<p>到了5.1的北京,就略显荒诞了,北京不愿意重蹈上海覆辙,开始了变态级的防控,连续3天的核检后,再来一轮居家办公,仿佛回到了2020.2的时光。和朋友调侃,“资本家们在瑟瑟发抖”,朋友回我“资本家充其量会被打回原形,变成人民,而人民才是最先遭殃的”,好吧,我承认他说的很对。</p>
<p>不过,你让我去做这个决定,是解封还是清零,我真的有些为难的,我担心经济、失业,涉及到每一个普通人要生活下去的现实,但是,也担心,我的父母,那些老人的生与死,对我们是缺一两顿饭,对他们就是生死两茫茫。具象到我这样的个体,我很难再用理性、数据去衡量这些。我相信,在国外,放开对普通人、决策者而言,也同样是一个两难的选择。</p>
<p>看过一篇文章,说如果清零,牺牲掉的是那些没有选择权的其他疾病病患和老人的就医权、生命和经济,来换取大部分人的安宁;而选择放开,就需要每个个体独自承担后果,你要尽量不感染,不传给自家的老人,照顾好他们,免收病毒的侵袭。不知道…..,这个可能就是一个电车难题吧。</p>
<p>只是,无论是那种方式,都应该对每一个个体充满尊重,尊重他们的选择权,向他们耐心的解释政策的原因,倾听他们的抱怨,对他们的不解、愤怒表达理解和同情,真心地尝试解决他们遇到每一个具体的问题。真很难么?我自己觉得,很难,但是,这就是治理这个社会的责任,作为人们让渡权力的代理人,你当然有这个责任去解决每一个细小琐碎的问题,而不是直接解决掉提出问题的人。而且我相信,只要付出努力,这些问题,没有一个是诚心+耐心不能解决的。</p>
<h1 id="移民">移民</h1>
<p>我身边的一批批的朋友,走掉了,还都生活的不错,在澳洲、加国、米国、日本….,我真的是缺乏这个勇气了,特别是越长越大,皱纹越多以后。</p>
<p>我可以理解他们,他们面对中国这样的不确定性,选择了确定性。我也钦佩他们从头开始的勇气,一份新工作,一个新房子,一辆新车,一个新的朋友圈,不一样的公司氛围,社区环境,一天天孩子和自己日益不一样的价值观,还有一天天老去的恐惧,和时不时国内某个亲人的健康或者逝去带来的冲击和烦躁。这些,我们相信,他们都想过,考虑过,特别是越上岁数,这些考虑越多,顾虑越多。所以,这个时候走掉,需要极大的勇气、自信和义无反顾,不是一般人可以做出的决定。</p>
<p>我承认,我害怕这种重新开始,害怕上面的一切,害怕重新面对那些听不懂的尴尬,不理解的文化,以及变成一个老人后,各种的孤单。</p>
<p>所以,选择留下,就需要面对留下的不确定性和风险。虽然如同对任何权力的警惕一样,我同样对中共的统治心存警惕,但是我自己评估,回到文革、回到毛的那种狂热年代,变成一个完全丧失人性的群魔乱舞的时代,概率是非常非常小的。理由很简单,毛是在35年的遵义会议到49年,这14年里,几乎没有犯过错误完人过程,再加上建国后的黄金10年,第一个5年计划的成功,将近25年,已经完全把他塑造成了神。而习没有这个过程,这10年,他把国家已经带到这样一个地步,甚至都有人开始怀念江胡时代了。更何况,改革开放40年,大部分中国人都已经成为现代人,这10几亿人的共同意志,也不允许大家的命运被一个人带入深渊。我相信,还有那么那么多的理性的、感性的、善良的、温和的、坚定的知识分子们,不允许我们的世界变成那样的一个黑暗时代。</p>
<p>后面会怎么样,我不知道,虽然我不再像年轻的时候,那么充满乐观;虽然这十年里,中国乃至世界,都出现种种的倒退。但是,如果把时间的尺度拉长,十年,二十年,三十年…,会变成什么样子呢?我不知道,但我还是想给自己一些希望,给自己的孩子一些希望,幻想着这个国家、社会和世界,会在某天慢慢的反转过来,朝着更美好,朝着温良恭俭让的理想社会,继续进发。</p>
<p>我选择留下,心存希望,等待着这一切的发生…</p>
<h1 id="尾">尾</h1>
<p>活久见,把这一路的感受,默默地记录下来,讲给自己,讲给别人,这个世界滚滚向前,我们作为过客,除了留下一点点痕迹,也只能留下一点点善意了。</p>
新项目趟坑之旅 ~ TF2.0
2020-05-19T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/05/19/new-project-pits
<h1 id="开始挖坑">开始挖坑</h1>
<p>开始复现<a href="/machine-learning/2020/04/14/ocr-fa-textscanner">TextScanner</a>论文了,我创建了我的<a href="https://github.com/piginzoo/textscanner">Github项目</a>,兴冲冲的开始编码。开始之初,就暗暗下定决心,这次一定要用<a href="https://www.tensorflow.org/api_docs/python/">TF2.0</a>,都已经2.2了,该稳定了!</p>
<h1 id="各种填坑之旅">各种填坑之旅</h1>
<h2 id="趟坑准备">趟坑准备</h2>
<p>就我以往的经验,上手一个新库,痛苦的经历是不可避免的,最好的方式,是需要提前对你要面对的坑有所了解,也就是要提前学习一下。虽然大部分内容,学过之后很快都会忘记,但是,至少你会对新坑有所感知,可以明显避免一些深的、众所都知的坑。</p>
<p>所以,我去网上搜索了一些不错的TF2.0的教程:</p>
<ul>
<li><a href="https://www.tensorflow.org/guide/effective_tf2?hl=zh-cn">官方:Effective TensorFlow 2</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/70232196">TensorFlow 2.0 简明指南</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/59507137">最全Tensorflow2.0 入门教程</a></li>
</ul>
<p>阅读以及照着教程做了一些demo之后,逐步了解了TF2.0主要的新特性:</p>
<ul>
<li>tf2.0“剽窃”了pytorch的动态图,也就是<strong>egear模式</strong></li>
<li>增加自定义的model的方法,可以自己开心地定制自己的模型啦</li>
<li>加载方式增加了个tf.data</li>
</ul>
<p>恩,还有很多细节,但是核心就是这些。</p>
<h2 id="我这个这个项目">我这个这个项目</h2>
<p>Textscanner是一个比较新的OCR模型,可以参阅我的<a href="/machine-learning/2020/04/14/ocr-fa-textscanner">另外一篇博客</a>,详细了解。为了实现这个模型,我需要做以下的工作:</p>
<ul>
<li>实现一个FCN层,使用Resnet50作为FCN的编码的Backbone</li>
<li>实现多个自定义层,自定义模型,来完全表达Textscanner模型</li>
<li>实现多个loss,组合到一起</li>
<li>使用Callback作为可视化,来调试训练过程</li>
<li>使用Sequence作为加载数据的方式(没有使用新的tf.data)</li>
</ul>
<h2 id="自定义层plus自定义模型构建我的新模型">自定义层plus自定义模型,构建我的新模型</h2>
<p>在这个项目中,我们需要定义一个<strong>自定义</strong>模型,模型中包含<strong>自定义</strong>的层,自定义层内部还要加载Resnet50的预训练模型,这一连串的“<strong>自定义</strong>”,以及包含预训练模型,该如何实现呢?</p>
<p>让我们迈出第一步,就是自定模型和自定义层。</p>
<p>自定义模型,<a href="https://www.tensorflow.org/guide/keras/custom_layers_and_models?hl=zh-cn">官网</a>上有比较详细的例子,不是很难,一般都是<code>__init__</code>初始化函数中实例化层,然后再<code>call</code>中,使用<a href="https://keras-cn.readthedocs.io/en/latest/getting_started/functional_API/">Functional</a>方式进行调用,这种写法,基本上和pytorch的模型定义方法非常相像了。</p>
<p>在训练的时候,你既可以使用Model.fit方法,自动的调用训练的过程;也可以通过tf.GradientTape类,来控制训练的细节,两种方式,都可以帮助训练,计算loss,反向传播,优化参数。只不过tf.GradientTape,给你更多的控制,但是在我看来,还是fit方法更简洁。</p>
<p>实现过程中,自定义层中,FCN遇到了最多的问题。</p>
<h2 id="如何将预训练的resnet50焊接到我的fcn层中">如何将预训练的Resnet50焊接到我的FCN层中</h2>
<p>在TextScanner中,第一个层,就是一个FCN(可参考我的另一篇博文<a href="/machine-learning/2020/04/23/fcn-unet">语义分割网络:FCN,UNet</a>),我们都知道,FCN一般需要一个backbone作为编码器(我选择了Resnet50:使用了Keras自带的<a href="https://keras.io/api/applications/resnet/#resnet50-function">ResNet50</a>),然后使用其中的pool3,pool4和pool5。也就说,我需要在这个FCN的自定义层中,使用Resnet50,然后再加上上采样部分,共同组成这个自定义层。这样一个需求如何实现呢?</p>
<p>一开始,我真的一点思路都没有,搜了无数的例子,都没有能满足我这个需求的,我甚至跑到<a href="https://stackoverflow.com/questions/61649083/tf-keras-how-to-reuse-resnet-layers-as-customize-layer-in-customize-model/62113024#62113024">Stack Overflow</a>,专门发了帖子寻找方案,无果。</p>
<p>然后我做了很多尝试:</p>
<p>比如,我尝试在自定义层的<code>call</code>方法中,调用Resnet50,然后再尝试从模型中得到对应层的输出,这个方法的问题是,运行的时候,总是得到resnet的所有变量无法被梯度下降的警告。而且这个方法不是使用fucntional那样的调用的输出方式,而是从模型层的output上获得输出,这个时候得到肯定是个张量,至于是不是可以再egear模式下,顺达利的转成numpy输出,其实也是个问题。总之,最终放弃了这个方法。</p>
<pre><code>x = self.resnet50_model(input_image, training=training)
pool3 = self.resnet50_model.get_layer("conv3_block4_out").output
pool4 = self.resnet50_model.get_layer("conv4_block6_out").output
pool5 = self.resnet50_model.get_layer("conv5_block3_out").output
</code></pre>
<p>比如,我还尝试过,把Resnet的layers都拿出来,然后挨个调用,一遍通过functional方式得到最终的输出,这样看上去舒坦多了,但是,下面代码演示的写法是有问题的,因为Resnet中有很多分支和shortcut,不能这样顺序的调用,就可以得到他的运行逻辑。实际运行的时候,我就发现经常出现某个层没有按照预想的顺序调用,而是乱序的。最终,这个方法也放弃了。</p>
<pre><code>self.resnet_layers = self.resnet50_model.layers
def call(self,input_image):
x = input_image
# extract features by Resnet50
for layer in self.resnet_layers:
print(layer.name)
x = layer(x)
</code></pre>
<p>最终,我找到了一个方法,很诡异,就是再造一个新的Model,这个Model的输入使用的是Resnet的输入,输出是Resnet中对应的:</p>
<ul>
<li><code>conv3_block4_out</code></li>
<li><code>conv4_block6_out</code></li>
<li><code>conv5_block3_out</code></li>
</ul>
<p>然后用这个新的模型,嵌入到FCN自定义层中:</p>
<pre><code>class FCNLayer(Layer):
def __init__(self, name, resnet50_model):
super().__init__(name=name)
resnet50_model.layers.pop()
resnet50_model.summary()
self.resnet50_model = resnet50_model
def build(self, input_image, FILTER_NUM=4):
layer_names = [
"conv3_block4_out", # 1/8
"conv4_block6_out", # 1/16
"conv5_block3_out", # 1/32
]
layers = [self.resnet50_model.get_layer(name).output for name in layer_names]
self.FCN_left = Model(inputs=self.resnet50_model.input, outputs=layers)
......
def call(self, input_image, training=True):
pool3, pool4, pool5 = self.FCN_left(input_image)
.......
</code></pre>
<p>完整代码,可以参考我的<a href="https://github.com/piginzoo/textscanner/blob/master/network/layers/fcn_layer.py">Github的FCN实现</a>。总结一下,我的最终做法,自定义层中包含一个模型,而这个模型又使用了pretrain的Resnet50模型,很诡异哈,是的!但是,它work,而且,我没有找到更好的方法。如果你能想出更好的办法,请告诉我吧。</p>
<h2 id="多个loss的实现还得带权重">多个loss的实现,还得带权重</h2>
<p>Textscanner模型,是多个损失函数组合而成的,而且每个loss还有自己的对应的权重,这样一个loss,如何实现呢?</p>
<pre><code>losses =['categorical_crossentropy','categorical_crossentropy',localization_map_loss()]
loss_weights = [1,10,10] # weight value refer from paper
model.compile(Adam(),loss=losses,loss_weights=loss_weights,metrics=['accuracy'],run_eagerly=True)
</code></pre>
<p>是的,Keras中是支持多个loss的组合的,只需要将每一个loss的loss函数和他们对应的权重,给<code>model.compile</code>方法即可。</p>
<p>其实,还有一些方法,比如可以把所有的loss塞入一个自定义的层,这个层在模型的最后一层,<a href="https://zhuanlan.zhihu.com/p/74009996">知乎</a>上有一篇文章详细讲解了这个方法。</p>
<p>还有一种方法,就更“变态”了,参考CSDN上的<a href="https://blog.csdn.net/qq_32623363/article/details/104154418">这篇帖子</a>,他其实就是手工做损失函数的梯度下降,即把损失函数得到的结果,利用tf2.0的tf.GradientTape类,进行方向梯度下降计算。这样,你怎么设计你的loss都可以啦,管你多少个loss组合呢!</p>
<p>我还是选择了最简单<code>model.compile</code>传入的方式,简洁!</p>
<h2 id="对sequence的怀疑以及eger模式的开启">对Sequence的怀疑,以及Eger模式的开启</h2>
<p>在运行训练代码的过程中(也就是我调用model.fit的时候),遇到一个异常:</p>
<pre><code>File "/Users/piginzoo/workspace/opensource/textscanner/network/layers/fcn_layer.py", line 83, in crop
cx = abs(o1_width - o2_width)
TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'
</code></pre>
<p>原因是,我推给模型的验证集数据,居然都是空,都是None,我试图打印出来模型的入参,结果也都是[None,None,None,None]的一个张量。从表面上看,就是验证集出问题,训练集并没有问题。训练集和验证集,我是分别创建了2个Sequence的实例,但是代码都是一套。</p>
<p>我觉得,是不是,在TF2.0下,<code>tensorflow.keras.utils.Sequence</code>出了啥问题了呢?记得之前好像朦胧看到过,说Sequence被废弃了,以后都转向tf.data,来帮着加载数据了。于是,抱着这个执念,就去搜索,试图找到一些证据,来落实自己的这个朦胧回忆。</p>
<p>可是,不幸的是,并没有找到!</p>
<p>我首先去看了Sequence的文档和源码,没有找到任何蛛丝马迹,说Sequence已经被废弃了。然后继续搜索<code>TF2.0 tf.keras.utils.Sequence deprecated</code>,还是没有找到Sequence的坏话,偶尔可以看到一些言论说,Sequence不适合分布式训练的加载,而且官方确实也确实逐渐<a href="https://www.tensorflow.org/tutorials/load_data/images?hl=zh-cn">推荐使用tf.data</a>了,此外,Keras本身也是有<a href="https://keras.io/api/preprocessing/image/#loadimg-function">一个包是用来加载数据</a>的,这个包里也没用到Sequence,反倒是返回的结果都是tf.data。</p>
<p>所以,虽然tf.data是首选,但是使用Sequence也没啥问题。</p>
<p>然后,我又去看了model.fit的文档,</p>
<pre><code class="language-python">def fit(self,
x=None,
x: Input data. It could be:
- A Numpy array (or array-like), or a list of arrays
(in case the model has multiple inputs).
- A TensorFlow tensor, or a list of tensors
(in case the model has multiple inputs).
- A dict mapping input names to the corresponding array/tensors,
if the model has named inputs.
- A `tf.data` dataset. Should return a tuple
of either `(inputs, targets)` or
`(inputs, targets, sample_weights)`.
- A generator or `keras.utils.Sequence` returning `(inputs, targets)`<---- 看到了Sequence了,看来人家官方还是支持的
or `(inputs, targets, sample weights)`.
A more detailed description of unpacking behavior for iterator types
(Dataset, generator, Sequence) is given below.
</code></pre>
<p>好吧,终于,我不再纠结是不是该放弃Sequence了,况且,这个问题到底是不是因为他引起的,还不好说呢?我的思路有些涣散,立刻抖擞一下,回到这个问题上来。</p>
<p>我们再来观察这个问题,说,模型输入的是一个张量。咦?!不对啊,不是TF2.0都是<a href="https://www.tensorflow.org/guide/eager?hl=zh-cn">Eger模式</a>了么?Eger末实现,所有的数据都应该可以直接被print出来啊。</p>
<p>难道是因为,keras并没有开启eger模式,不是说默认开启的么?</p>
<p>不管怎么说,我还是死马当活马医,于是我在模型compile的时候,加入<code>run_eagerly=True</code>:</p>
<pre><code class="language-python">model.compile(Adam(),loss=losses,loss_weights=loss_weights,metrics=['accuracy'],run_eagerly=True)
</code></pre>
<p>再去调试,验证数据终于如我所愿,刷刷刷的正常了。</p>
<p>我勒个去!这个坑有点深吧,让我还和Sequence纠结了半天,差点冤枉了人家。其实,我个人还是非常非常喜欢Sequence的,设计的很清晰,配合fit时候的multiprocess和worker,就可以多进程加载数据,看这篇<a href="https://stackoverflow.com/questions/55852831/tf-data-vs-keras-utils-sequence-performance">Stackoverflow上的关于tf.data和Sequence的对比和评价</a>:</p>
<blockquote>
<p>Both approaches overlap input data preprocessing with model training. keras.utils.sequence does this by running multiple Python processes, while tf.data does this by running multiple C++ threads</p>
</blockquote>
<blockquote>
<p>Some other things to consider:</p>
<ul>
<li>tf.data is the recommended approach for building scalable input pipelines for tf.keras</li>
<li>tf.data is used more widely than keras.utils.sequence, so it may be easier to search for help with getting good performance.</li>
</ul>
</blockquote>
<p>看,Sequence没有丝毫被废弃的迹象啊,不过官方确实是更推荐使用tf.data,好吧,我宽心多了…</p>
<p>不过,回顾这个问题,我有一个还是疑惑的地方,就是我的训练数据,是没有这个问题的,是识别出来各个图片的维度的(如Tensor[None,64,256,3]);只有训练数据,才会出现[None,None,None,None]的情况。不过,打印出来的,也不是eger模式开始之后的numpy数据,而也是一个张量。</p>
<p>另外,在启动程序的时候,我还会收到来自tensorflow的警告,让我肝颤:</p>
<blockquote>
<p>WARNING:tensorflow:multiprocessing can interact badly with TensorFlow, causing nondeterministic deadlocks. For high performance data pipelines tf.data is recommended.</p>
</blockquote>
<p>呵呵,我不想在折腾了😭(换成tf.data)了,求放过吧</p>
<h2 id="训练中的可视化">训练中的可视化</h2>
<p>在训练的过程中,可视化很重要,过去我们使用tensorflow的时候,需要在训练的间隙,定期输出一些中间结果用于调试。现在,在keras中,我们要实现这一点,该如何做呢?(这个方法不是tensorflow2.0/tf.keras才有的,是keras本身就支持的)答案是使用Keras的<a href="https://keras.io/api/callbacks/">Callback机制</a>。</p>
<p>Keras的Callback,其实就是给你提供了一个回调机制,让你在每个batch、epoch调用结束的时候,可以回调你的自定义Callback类,实现特定的功能。我们就是利用这个特性,创建了一个Callback,然后在固定的1000步的时候,调用训练集中的9张图片,把原始的标注,模型预测的结果,dump成图片,写到tf.summary中,这样,tensorboard,就可以帮助我们收集起来,显示到tensorboard中了。</p>
<p>我在TextScanner中实现的这个<a href="https://github.com/piginzoo/textscanner/blob/master/utils/visualise_callback.py">可视化Callback</a>,托tf2.0的福,我调用模型来预测图片的方法很简单,就是<code>pred = self.model(images[i])</code>,这个self.model,就是Callback父类自动提供的,就是你正在训练的模型,然后通过functional的方式,就这么自然的调用了。但是,如果是tf1.x+keras,调用就不会这么简单,而是要使用K.function,来调用对应的张量,得到运行结果。可以参考我在另外一个项目中的<a href="https://github.com/piginzoo/attention_ocr/blob/master/utils/visualise_attention.py">Callback可视化实现</a>:</p>
<pre><code>functor = K.function([self.model.input[0],self.model.input[1],K.learning_phase()], [e_outputs,self.model.output])
e_outputs_data,output_prob = functor([ images,labels[:,:-1,:],True])
</code></pre>
<p>另外,这个可视化Callback中还有一个trick,就是使用matplotlib.pyplot,来显示概率分布的图。如果不适用pyplot,你需要对概率图(就是每个点值不是0-255,而是一个概率值)进行处理,使之值从[0~1]变换到[0~255],然后得到一个灰度图。但是pyplot有个神奇的功能,就是你只需要把这个Channel是1的概率图传给他,他会帮你生成一个五颜六色的RGB图(变成3通道了),而且不同的概率值,会按照他的一个映射,映射成某种颜色,使得你观察概率分布变得很方便了(再也不是一个灰度图的模样了)。于是,我使用了他的这个特性,把我的概率图,和原图做了一个merge,然后dump到tf.summary中,这样,我就可以得到一个多彩的可视化结果:</p>
<p><img src="/images/20200531/1590913202105.jpg" alt="" class="myimg30" /></p>
<h2 id="眼泪总结">眼泪总结</h2>
<p>这几周的编码和趟坑之旅,让自己对TF2.0,keras,甚至tensorflow本身,都有了很多很多深入的了解和认知。正如我们做事情一样,很多在别人看来你拥有的深入的经验和理解,其实都是你不断钻研的结果,所以,在遇到问题的时候,虽然很纠结,很痛苦,但是,反复深入理解,不断地尝试解决问题的过程,就是你最好的学习过程。</p>
<p>当你几度陷入绝望的时候,最好的方式,就是,持续的搜索,持续的思考,持续的阅读源码,持续的试错,总会有那么一个时刻,你可以收获自己的aha时刻的。这本身就是一种信念。</p>
<h2 id="参考">参考</h2>
迁移我的博客
2020-05-17T00:00:00+08:00
https://www.piginzoo.com/tech/2020/05/17/migrate-website
<h1 id="缘起">缘起</h1>
<p>我的博客是基于<a href="http://jekyllcn.com/">Jekyll</a>做的,支持Markdown和Latex,页面中的图像,是我通过我的Mac Automator脚本实现的自动截屏,然后Save到我的本地,再提交到Github去的(是的,我把Github当做了我的图床)。</p>
<p>当我每次使用类似于Sublime这种文本编辑器,编写完我的主页后,提交到Github后,Github的<a href="https://pages.github.com/">Git Page</a>系统会自动帮助我,完成了把Markdown自动转化成HTML网站的过程,然后我就可以通过域名piginzoo.github.io就可以访问了。<a href="https://pages.github.com/">Git Page</a>服务是一个Github提供的免费的个人博客系统,很帅!</p>
<p>最后,我还需要使用我的www.piginzoo.com 域名,在<a href="https://www.dnspod.cn/">DNSPod</a>上,CNAME到 piginzoo.github.io 上,完成我的域名配置和跳转,从而最终完成了我的博客网站。</p>
<p>可惜,从国内访问Github总是很慢,CNAME的解析也时常掉链子,导致我的托管主页访问起来也很慢,经常在手机上半天也出刷不来,让人捉急。</p>
<p>所以,一直想把我的博客迁移到自己的服务器上来,我自己有台速度还可以的服务器,于是,终于决定不再犯懒了,搞起来!</p>
<h1 id="动手">动手</h1>
<p>在我自己的服务器上部署的话,需要依次解决这些问题:</p>
<ul class="task-list">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />安装Ruby(jekyll需要ruby环境)和Gem</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />安装Jekyll</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />和Nginx集成</li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />还要可以自动从Git中拉取最新的内容</li>
</ul>
<p>由于我的Server是CentOS7,默认的Yum安装的Ruby版本是1.9,可是最新的版本的<a href="http://jekyllcn.com/">Jekyll</a>需要至少Ruby版本是2.x,没办法,只有先装个<a href="http://rvm.io/">RVM</a>,他是一个多版本Ruby管理的一个工具,装了他就可以很方便的安装和使用多个版本的Ruby了。</p>
<p>好,我们来安装RVM:</p>
<h2 id="安装rvm">安装RVM</h2>
<p>安装Ruby参考了<a href="https://blog.csdn.net/hooyying/article/details/83119948">这篇</a>。</p>
<ul>
<li>去<a href="http://rvm.io/">http://rvm.io/</a>去装rvm</li>
</ul>
<p>然后运行命令安装它:</p>
<pre><code class="language-python">gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL [https://get.rvm.io](https://get.rvm.io/) | bash -s stable
</code></pre>
<p>安装完RVM后,需要使用它来安装Ruby了,我选用的是Ruby 2.5.1。</p>
<h2 id="安装ruby251">安装ruby2.5.1</h2>
<p>使用命令安装Ruby:</p>
<pre><code class="language-bash">rvm install 2.5.1
</code></pre>
<p>这个过程有些慢,耐心等待。</p>
<p>安装完成后,使用命令,便可以启动Ruby 2.5.1的环境了:</p>
<pre><code class="language-bash">rvm use 2.5.1
</code></pre>
<p><strong>加入rc.local使其自动启动</strong></p>
<p>安装完Ruby后,为了可以每次在启动之后,自动都设置成Ruby 2.5.1的环境,需要把这句话<code>rvm use 2.5.1</code>加入到<code>/etc/rc.loca</code>中,保证服务器已启动就自动设置为Ruby 2.5.1的环境。</p>
<p>接下来,终于安装博客生成系统Jekyll了</p>
<h2 id="安装jekyll">安装Jekyll</h2>
<p>安装jekyll,需要使用Ruby自带的Gem工具,Gem是一个Ruby包安装工具,用于安装Ruby编写的各种应用。在命令行中输入命令:</p>
<pre><code class="language-bash">gem install jekyll
</code></pre>
<p>过程有些慢,请耐心等待。安装完毕后,你就可以来使用Jekyll生成的网站了。</p>
<p>这里暂停一下,先对Jekyll,以及我使用心得,做一个简单的介绍:</p>
<h3 id="用jekyll写博客">用Jekyll写博客</h3>
<p>Jekyll网站生成工具,博客作者,可以使用Markdown语法书写博客,然后Jekyll会自动帮你讲Markdown页面转化成HTML页面,同时还会帮你构建了一个网站的基础框架,比如首页、分类。它还支持显示模板,使用CSS定制化你的显示样式,我使用的就是他默认提供的一套Bootstrap的模板,很朴素简洁。如果你觉得太素了,你可以下载其他热心网友制作的更酷的模板,切换过去后瞬间网站就高大上了,哈哈。</p>
<p><em>同样的网站生成器,还有更灵活帅气的<a href="https://hexo.io/">Hexo</a>,还有Go语言的<a href="https://www.gohugo.org/">Hugo</a>实在是没时间再去研究鼓捣了,看以后有机会再玩吧~</em></p>
<p>我还安装了一系列的插件,帮助我丰富我的博客网站:</p>
<ul>
<li><a href="https://www.mathjax.org/">MathJax</a>,一个JS库,瞬间把我的Latex文字翻译成漂亮的数学公式。</li>
<li>我利用 MAC 自带的Automator,写了一个<a href="/assets/clipboard.py">Python脚本</a>,可以自动把你的剪贴板图片转化成jpg,存入到指定的目录,并且把路径拷贝到剪贴板,你只要paste一下,就把图片插入到了博文中。</li>
</ul>
<p>下面是一个生成的图片的例子:目录<code>20181220</code>和文件名<code>1545282900519.jpg</code>都是自动生成,防止重名:</p>
<pre><code>![](/images/20181220/1545282900519.jpg)
</code></pre>
<ul>
<li>使用了Jquery插件<a href="https://projects.jga.me/toc/">TOC</a>,来自动生成目录(不过貌似Jekyll自己也带TOC,有时间再研究吧)</li>
<li>使用了<a href="https://valine.js.org/">Valine</a>,一个国产小哥写的评论系统,他是基于<a href="https://leancloud.cn/">LeanCloud</a>开发的,可惜由于TMD“某种原因”不更新了,你懂的,它比<a href="http://livere.com/">来必力</a>好用。我最早是用的<a href="http://www.uyan.cc/">友言</a>,但是也因为“不可抗拒原因”关闭,FUCK!没办法,我只好弃用它了。</li>
<li>Valine还自动帮我完成了帖子的<a href="https://valine.js.org/visitor.html">计数器功能</a>,每篇帖子标题下方的计数器就是用它实现的。</li>
<li>安装了百度统计,帮助我了解网站和每篇帖子的访问和SEO情况。</li>
<li>另外,还自己改了一些内容,如置顶、排序、日期格式化…,Jekyll就是一个给程序员准备的Toy,本身就是一套Ruby脚本,所以作为程序员的你,可以自己尽情发挥。</li>
</ul>
<h3 id="克隆的网站">克隆的网站</h3>
<p>前面乱入了Jekyll的使用和心得,让我们继续回来,继续我们的网站迁移。</p>
<p>我们安装好Jekyll之后,还需要去Github上去克隆我们的博客代码。</p>
<p>我在服务器上创建了一个目录,然后把我的网站克隆到这里,克隆地址就是你Github托管主要的网址。</p>
<p>它没有master分支,只有一个名为“gh-pages”的分支,为什么起这么一个怪怪的分支名字呢,这个是Github Page 要求的,可以参考<a href="http://www.piginzoo.com/tech/2015/02/20/rebuild-my-website">我之前的博客</a>了解更多。</p>
<p>然后,cd到这个这个git目录中,输入命令:</p>
<pre><code class="language-bash">jekyll server &
</code></pre>
<p>顺利的话,网站就会启动起来,你会看到他会先运行一段生成程序,把你的Markdown页面转化成HTML,然后再默认在4000端口开始监听。</p>
<h3 id="部署nginx">部署Nginx</h3>
<p>虽然使用Jekyll生成了网页并且启动了一个Web服务器,但是我还是想让我的网站是构建在Nginx之上,Nginx可以帮我根据域名自动导向到我这台服务器上的多种服务,Jekyll主页服务,只是其中之一。</p>
<p>于是我修改了Nginx配置,让Nginx可以serve我的域名www.piginzoo.com ,并且,将Nginx对外服务的网页目录指向到了Jekyll的生成目录:</p>
<p>Nginx配置的修改:</p>
<pre><code> server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _ www.piginzoo.com piginzoo.com;
# 自动跳转到www
if ($host = 'piginzoo.com') {
rewrite ^/(.*)$ http://www.piginzoo.com/$1 permanent;
}
# 设置我的主页目录为jekyll生成的页面目录
root 【jekyll的生成目录】;
# 开启gzip
gzip on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript ;
gzip_vary on;
gzip_buffers 2 4k;
gzip_http_version 1.1;
# 给所有的页面自动增加*.html后缀,jekyll生成的页面的后缀
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /$1.html last;
break;
}
}
</code></pre>
<p>需要注意以下几点:</p>
<ul>
<li>通过server_name来支持多个域名的访问</li>
<li>Jekyll是根据Markdown页面自动生成的HTML静态页面,所以Nginx要把root指向到这个生成目录</li>
<li>需要增加一个rewrite,让所有的访问页面最后都自动去访问*.html文件,比如去访问<code>http://www.piginzoo.com/tech/2015/02/20/rebuild-my-website</code>,最终访问的是<code>http://www.piginzoo.com/tech/2015/02/20/rebuild-my-website.html</code>。</li>
</ul>
<h3 id="最后加入git自动拉取">最后,加入Git自动拉取</h3>
<p>因为我的页面都是在host在Github上,需要<code>git pull</code>才可以把我最新的博客页面拉取下来,所以还需要写一个自动化拉取脚本:</p>
<ul>
<li>使用crontab,设置自动每分钟拉取Github一次</li>
</ul>
<pre><code class="language-python">*/1 * * * * git --git-dir=/xxx/.git --work-tree=/xxx pull > /dev/null
</code></pre>
<p>需要使用git-dir指定你的本地git库目录,使用work-tree指定的工作目录。</p>
<ul>
<li>加入脚本后台运行jekyll server</li>
</ul>
<pre><code class="language-python">nohup jekyll server -s /xxx-d /xxx/_site/>/dev/null 2>&1 &
</code></pre>
<p>创建一个后台服务,来保持jekyll server的常驻。</p>
<p>这样,每1分钟,就去我的Github博客repo中尝试拉取最新的页面,一旦拉取了最新的页面,Jekyll会自动将其生成为HTML网页,Nginx就可以实时响应给用户了。</p>
<p>恩,完美了!</p>
<h3 id="创建帖子的脚本">创建帖子的脚本</h3>
<p>为了方便自己,创建了一个快速创建帖子的脚本,帮助我快速创建页面:</p>
<pre><code>TODAY=`date +%Y-%m-%d`
TITLE=$1
if [ "$1" == "" ]; then
echo "格式错误!"
echo "\t必须要有一个以中划线分割的主题(英文)"
echo "\t 如: create map-reduce"
exit
fi
BLOG_FILE_NAME="_posts/$TODAY-$1.md"
touch $BLOG_FILE_NAME
echo "已经创建新帖子:$BLOG_FILE_NAME"
cat >> $BLOG_FILE_NAME <<EOF
---
layout: post
title: <修改这里的标题>
category: <修改这里的分类,用英文>
---
EOF
</code></pre>
<p>只要你在命令行输入:<code>create test-123</code>,就会自动在_posts目录下创建一个新帖子,你打开编辑就好,很方便。</p>
<h2 id="好啦终于可以安静的写博客了">好啦,终于可以安静的写博客了</h2>
<p>好啦,终于都完事了,我可以安静的写博客了:</p>
<p>1、打开iterm,使用我的<code>create</code>命令创建一个新帖子</p>
<p>2、启动Sublime,编辑这个新帖子,使用我的MAC Automator脚本自动将我截屏的图片保存到目录中。</p>
<p>3、我会在本地启动一个<code>jekyll server</code>来预览我的网站。</p>
<p>4、最后,我使用<code>git add .; git commit; git push</code>,将我的修改提交到Github上去。</p>
<p>5、安静的等待一分钟,刷新我的www.piginzoo.com , 哇,新的网页出现了。</p>
<p>写博客,变成了一件简单、开心的事情,从此喜欢上了摆弄文字。</p>
<h2 id="2022111更新">2022.11.1更新</h2>
<p>换了m1的mpb,继续按照上述的文档折腾,各种问题,把趟雷后的结果记录一下:</p>
<p>rvm各种问题,懒得贴了,最后绝望的换成了rb</p>
<pre><code>brew install rbenv ruby-build
rbenv install 3.1.2
rbenv global 3.1.2
gem install bundler jekyll
</code></pre>
<p>参考:<a href="https://gorails.com/setup/macos/12-monterey">Install Ruby On Rails on macOS 12 Monterey</a></p>
Batch Normalization
2020-05-17T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/05/17/batch-normalization
<h1 id="batch-normalization">Batch Normalization</h1>
<p>同事遇到一个奇怪的现象,她训练的模型看loss的表现挺好的,在验证的时候,如果同一批次的图片差异性比较大,预测出拉来的结果很好。但是,如果同一批次图片长的很像(比如就是同一图片略微变化的增强图片),预测结果就是非常不好。</p>
<p>她怀疑是由于Batch Normalization的问题,于是,一起对Batch Normalization进行了研究和讨论。 我把讨论过程中的理解写下,便形成了这篇博客。</p>
<h1 id="为何要做normailization">为何要做Normailization</h1>
<p>首先,一个问题是,为什么要做Normalization,也就是中文所谓的“<strong>正则化</strong>”?</p>
<p>这个概念是来自于机器学习,我先给出结论“做正则化,是因为,<strong>这样可以防止过拟合</strong>”。</p>
<p>为了解释这一点,需要从模型的容量、偏差和方差的关系、过拟合欠拟合等诸多方面讨论,这里我不想展开,我给很多参考文章,里面包含了这方面的讨论,感兴趣的同学可以阅读并深入研究。</p>
<p>这里,我只想用比较通俗易懂的语言,来解释一下:</p>
<p>使用复杂(跟“$x$的高阶多项式”、“表达能力更强”、“更多的参数”、“模型容量更大”差不多都是一个意思)的模型,来去拟合数据的分布的话,特别容易过拟合;但是要是用太简单的模型,你又无法拟合出数据的真实分布。所以,你得权衡,不能太复杂也不能太简单。</p>
<p>一个解决的办法是,你先搞一个复杂的模型,然后再想办法去约束他。</p>
<p>约束的办法是,尽量通过调整参数$w$,使其变小,甚至变成0,从而是模型中的维度降低。在传统的机器学习中的L1、L2正则,就是这样的一个调整思路。</p>
<p>而在深度学习中,是Dropout和Batch Normalization如何。</p>
<p>机器学习中的L1、L2和深度学习中Dropout和Batch Normalization如何类比对应上呢?我在网上找了一些文章研究了一下,结论是:<strong>他们对应不上</strong>。</p>
<p>看知乎上关于L1、L2 VS Dropout和BatchNormalization的讨论,可大致理解他们彼此没啥对应关系:</p>
<p><a href="https://www.zhihu.com/question/278256208">神经网络中 L1 正则化和 dropout 正则化对weights 稀疏化的实质区别是什么?</a></p>
<blockquote>
<p>L1正则化和Dropout,二者的目标不一致,一个是减少权重项,实际上是追求降低复杂度,一个是增加随机扰动构造ensemble optimization的效果,目标是追求系统鲁棒性,但本质也是一个能量约束。</p>
</blockquote>
<blockquote>
<p>dropout提出的初衷是在神经网络上模拟bagging,原理比较模糊、数学上不大明确。</p>
</blockquote>
<p><a href="https://www.zhihu.com/question/288370837">关于batch_normalization和正则化的一些问题?</a></p>
<blockquote>
<p>关于它的理论研究其实还不怎么充分。BN的计算涉及用基于mini batch计算的均值、方差代替真实均值、方差,这就起到了正则化的作用。但正则化只是BN顺带的一个作用。</p>
</blockquote>
<p>所以,作为工程党,我能做的就是用L1、L2去约束常见的机器学习模型;使用Dropout和BatchNormalization去约束深度神经网络模型。</p>
<p><strong>【参考】</strong></p>
<ul>
<li><a href="https://machine-learning-from-scratch.readthedocs.io/zh_CN/latest/%E6%A8%A1%E5%9E%8B%E8%AF%84%E4%BC%B0%E4%B8%8E%E6%A8%A1%E5%9E%8B%E8%B0%83%E4%BC%98.html">模型评估与模型调优</a></li>
<li><a href="https://liam.page/2017/03/25/bias-variance-tradeoff/">谈谈 Bias-Variance Tradeoff</a></li>
<li>花书的5.2节<a href="https://cloud.tencent.com/developer/article/1164231">《容量、过拟合和欠拟合》</a></li>
</ul>
<h1 id="l1l2正则化">L1、L2正则化</h1>
<p>L1和L2的推导一直都是面试必考,大致沿着两条思路都可以推导出来:</p>
<p>参考这篇:<a href="https://zhuanlan.zhihu.com/p/29360425">深入理解L1、L2正则化</a>:</p>
<ul>
<li>方法1:正则化理解之基于约束条件的最优化:加上对参数$w$进行范数的约束,用$l_0,l_1$范数小于$C$来作为约束条件,利用拉格朗日算子法来解这个带条件的优化问题,就可以退出L1、L2公式。</li>
<li>方法2:正则化理解之最大后验概率估计:假设参数$w$属于拉普拉斯分布,就可以推导出L1;$w$属于高斯分布,就可以推导出L2正则公式。</li>
<li>L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0</li>
</ul>
<p>因为L1、L2不是本篇博客重点关注的内容,这就捎带着提一下,感兴趣,可以去阅读参考中的文章,它们都已经给出了非常详细的公式推导和讲解。</p>
<p><strong>【参考】</strong></p>
<ul>
<li><a href="https://www.cnblogs.com/heguanyou/p/7688344.html">Laplace(拉普拉斯)先验与L1正则化</a></li>
<li><a href="https://www.zhihu.com/question/20924039/answer/240037674">机器学习中常常提到的正则化到底是什么意思?</a></li>
<li><a href="https://www.shuzhiduo.com/A/B0zqlyXrdv/">深度学习(五)正则化之L1和L2</a></li>
<li><a href="https://www.cnblogs.com/nxf-rabbit75/p/9954394.html">L1正则化和L2正则化</a></li>
</ul>
<h1 id="深度学习中的batch-normalization">深度学习中的Batch Normalization</h1>
<p>Dropout也是一种正则化方法,你可以通俗地理解为bagging的朴素应用,因为这篇博客主要讲BatchNormailization,这里特不想展开了。</p>
<p>好了,我们终于迎来了我们这篇博客的猪脚:【<strong>Batch Normalization</strong>】</p>
<h2 id="为什么batch-normalization管用">为什么Batch Normalization管用</h2>
<p>Batch Normalization的原理啥的,参考的文章们讲了一通,我还是愿意用我的大白话谈谈理解:</p>
<ul>
<li>他们说的ICS(Internal Covariate Shift),就是说,你浅层的参数细微调整,会对后面层参数产生蝴蝶效应,导致不收敛。</li>
<li>ICS的根本原因,又是因为你的训练数据导致的,训练数据的每个维度上的值变换太剧烈,就会导致参数跟着调整剧烈,所以要尽量让输入的数据保持稳定,就是尽量让他们在一个尺度上</li>
<li>怎么保持一个尺度呢?就是通过Normailization,使得维度上值均值为0,方差为1</li>
<li>
<p>引入$\gamma,\beta$,说是,怕正则限制了模型的表达,给他一些弹性。不过这个是网上很模糊的说法,我尝试搜索了很多文章,都没有把这个问题讲的特别明白。</p>
<p>这篇《<a href="https://www.cnblogs.com/shine-lee/p/11989612.html">Batch Normalization详解</a>》里面,对于$\gamma,\beta$的解释,相对清楚一些,仅供参考:</p>
<blockquote>
<p>没有scale and shift过程可不可以?
BatchNorm有两个过程,Standardization和scale and shift,前者是机器学习常用的数据预处理技术,在浅层模型中,只需对数据进行Standardization即可,Batch Normalization可不可以只有Standardization呢?
答案是可以,但网络的表达能力会下降。
直觉上理解,浅层模型中,只需要模型适应数据分布即可。对深度神经网络,每层的输入分布和权重要相互协调,强制把分布限制在zero mean unit variance并不见得是最好的选择,加入参数𝛾和𝛽,对输入进行scale and shift,有利于分布与权重的相互协调,特别地,令𝛾=1,𝛽=0等价于只用Standardization,令𝛾=𝜎,𝛽=𝜇等价于没有BN层,scale and shift涵盖了这2种特殊情况,在训练过程中决定什么样的分布是适合的,所以使用scale and shift增强了网络的表达能力。
表达能力更强,在实践中性能就会更好吗?并不见得,就像曾经参数越多不见得性能越好一样。在caffenet-benchmark-batchnorm中,作者实验发现没有scale and shift性能可能还更好一些。</p>
</blockquote>
</li>
</ul>
<h2 id="怎么做batch-normailization">怎么做Batch Normailization</h2>
<p>好吧,理论差不多了,我们实战一下:</p>
<p>看例子:</p>
<p><img src="/images/20200517/1589720623208.jpg" alt="" class="myimg" /></p>
<p>上图的网络是个全连接网络,全连接网络中,如何做Batch Normalization呢?</p>
<p>很简单!就是对绿框中的8个数据求均值和方差,然后使用计算出来的均值和方差,来正则化每个数。</p>
<p>细节来了,这$\color{green}{绿框}$里的数,是一个批次(8个)的第一个维度的值,所以,你算的结果,是<strong>8个批次在第一个维度的均值和方差</strong>。</p>
<p>然后你还要依次计算其他维度的,最后把方差$\mu$和均值$\sigma$带入到这个公式:</p>
<p>$\hat{x} = \gamma * \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} + \beta$</p>
<p>你就可以得到每个数值被Batch Normailization之后的新值了。</p>
<p>当然$\gamma,\beta$是需要学习的。</p>
<h2 id="那cnn如何做batch-normailization呢">那CNN如何做Batch Normailization呢?</h2>
<p>全连接网络我们谈完了如何做Batch Normailization,那CNN网络如何做呢?</p>
<p>我们首先读一读<a href="https://kiddie92.github.io/2019/03/06/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E4%B9%8BBatch-Normalization%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9AHow%EF%BC%9F/#%E5%AF%B9%E5%8D%B7%E7%A7%AF%E5%B1%82%E5%81%9A%E6%89%B9%E9%87%8F%E5%BD%92%E4%B8%80%E5%8C%96">这篇</a>:</p>
<blockquote>
<p>对卷积层来说,批量归一化发生在卷积计算之后、应用激活函数之前。如果卷积计算输出多个通道,我们需要对这些通道的输出分别做批量归一化,且每个通道都拥有独立的拉伸和偏移参数,且均为标量。设小批量中有 m 个样本。在单个通道上,假设卷积计算输出的高和宽分别为 p 和 q。我们需要对该通道中 m×p×q 个元素同时做批量归一化。对这些元素做标准化计算时,我们使用相同的均值和方差,即该通道中 m×p×q 个元素的均值和方差。</p>
</blockquote>
<p>是的,是在每个通道上,算所有批次的一个均值和方差。</p>
<p><img src="/images/20200517/1589722001451.jpg" alt="" class="myimg30" /></p>
<p>如上图,我们算均值和方差,用的是<strong>所有批次的</strong>,<strong>同一个通道</strong>里的所有的值,也就是图中所形容的,“把N个批次的面包片的数据一起来算”,这里一个面包片形容一个通道。</p>
<p>比如,这一层的CNN的Feature Map结果,假设其维度是[N,H,W,C],那么,计算完成的均值$\mu$是[C]个,方差$\sigma$也是[C]个。</p>
<p>接下来,我们用这个通道算出的两个标量$\mu,\sigma$,对这N个面包片里面的所有的值进行归一化,得到的结果,便是Batch Normalization的结果。</p>
<h2 id="训练时候和测试时候的batch-normalization">训练时候和测试时候的Batch Normalization</h2>
<p><strong>训练的时候</strong>,需要每个批次的数据,计算$\mu,\sigma$,然后梯度下降学习$\gamma,\beta$。训练的时候,还需要记住这些均值。为什么呢?因为测试的时候需要用,这个后面会谈到。可是,这么多批次,如何都记住呢?答案是,使用移动平均法,不停的计算,每次计算后,都在网络中记录这个移动平均值。</p>
<p><em>这里有个小疑问❓训练的方差和均值,用的是这个批次计算出来的,还是移动平均出来的呢?我自己推断,应该是移动平均出来的,原因是,这样才更接近全局的样本的平均值和方差嘛。</em></p>
<p><strong>测试的时候</strong>,由于数据量很少,你用这个批次的均值和方差来做Batch Normalization,是有失公允的,应该使用所有样本的均值和方差更合理。训练的时候,我们恰好已经记住了所有数据的<strong>全局移动平均值</strong>的均值和方差,使用它们,代入Batch Normalization公式进行计算就可以了。</p>
<p>所以,<strong>如何计算方差和均值</strong>,是训练和测试的时候的一个<strong>重大</strong>区别。</p>
<p>你自己也可以脑补,这些移动平均的均值、方差,其实跟参数类似,也是要记录在网络当中的。所以,我们甚至可以说,在Batch Normalization这个环节,参数有$\gamma,\beta,移动平均\mu,移动平均\sigma$4类。</p>
<p>【 参考】</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/34879333">Batch Normalization原理与实战</a>,这篇讲的超赞</li>
<li><a href="https://www.cnblogs.com/shine-lee/p/11989612.html">Batch Normalization详解</a></li>
<li><a href="https://www.zhihu.com/question/38102762">深度学习中 Batch Normalization为什么效果好?</a></li>
<li><a href="https://www.zhihu.com/question/288370837">关于batch_normalization和正则化的一些问题?</a></li>
</ul>
<h1 id="写在最后">写在最后</h1>
<p>好,我们已经捋了一遍了正则化、Batch Normalization了,我们来总结一下。</p>
<p>正则化就是为了解决过拟合问题,传统机器学习使用L1、L2正则化方式,而深度学习使用Dropout和Batch Normalization作为正则化的手段。Batch Normalization,在训练的时候,使用当前批次的均值和方差计算Batch Normalization结果,同时学习$\gamma,\beta$两个参数;而到了测试阶段,均值和方差,就要使用训练时候的全局移动平均均值和方差来计算了。</p>
<p>最后,让我们再回最初的同事提出的那个问题:“<em>训练的时候,同样类型图片的预测结果不好</em>”。对于这个问题,我们可以大胆的推测,是因为这批图片缺乏了多样性,导致他们和之前网络遇到的图片的平均值偏差太大,致使网络无法适应,导致了最终识别的效果不佳。在我看来,这其实是一个正常的现象,只要后续训练过程中,图片足够多样化,通过不断地训练,这个问题就可以被消除。当然,训练的时候,我们还是也应该避免,同一类相似图片作为一个批次,而应该让批次内的图片也尽量多样化才好。</p>
<h2 id="再补充">再补充</h2>
<p>后来,同事再次反馈,她解决了这个问题。</p>
<p>我对她的问题的理解,是有问题的,她之前的问题是,使用tensorflow加载后,训练的没有问题,而是在训练结束后,再预测的话,会有同样类型样本,预测正确率下降的问题。</p>
<p>后来,她说她解决这个问题,解决的办法是,在加载imagenet预训练模型的时候,把加载模式从训练模式,改成全部都加载的模式(即也加载每个节点上的均值和方差):</p>
<pre><code>res_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='resnet_v2_50')
改为
res_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='resnet_v2_50')
</code></pre>
<p>我们讨论了一下,这个原因可能是,最开始加载的resnet,如果是使用了TRAINABLE_VARIABLES标志的话,会丢掉了imagenet预训练模型中的每个节点上的均值和方差,然后在这个基础上,去训练,其实是丧失了Resnet的原本的模型的东西。然后在这个基础上训练的时候,你的每一个批次,都会从头开始计算每个节点上的均值和方差了,而网络上重新开始记录这些方差和均值的移动平均值了(包括Resnet的网络节点们)。这导致,预测的时候,这些方差和均值,已经和Resnet的Weight们,不是那么匹配了。</p>
<p>正确做法,应该是在加载Resnet开始训练的时候,同时加载这些节点上的均值和方差,也就是改成GLOBAL_VARIABLES标志。</p>
<p>同事最终也验证了这一点,去掉这个标志后,加载Resnet,然后重头开始训练,收敛后,再去测试,就没有这个问题了。</p>
语义分割网络:FCN,UNet,Mask-RCNN
2020-04-23T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/04/23/fcn-unet
<h2 id="语义实例分割">语义、实例分割</h2>
<p>研究语义分割,源于现在的文字检测和识别算法,为了提高正确率,要变态地去区分到像素级别,比如在EAST、PSENET、TextScanner等算法当中,都应用到语义分割网络。而语义分割网络,作为目标识别的重要算法,也确实非常重要,之前虽然看过,但是,不自己撸一篇文章,还是很容易遗忘很多细节,所以,写下此篇,把一些细节总结下来,他日可以快速回忆起来。</p>
<p>目前主要的语义分割网络,有很多种,如FCN、UNet、Mask-RCNN、SegNet、DeepLab、RefineNet、PSPNet等等,我这里仅仅研究了FCN和UNet和Mask-RCNN,其他的有时间再去看了。</p>
<p>作为一个工程党,我不会去研究论文细节和原理本质,而是更关注实现的细节。对这个领域感兴趣的同学,可以看一下这篇知乎上的<a href="https://zhuanlan.zhihu.com/p/68147183">综述</a>,快速了解一下这个领域。</p>
<h2 id="fcn">FCN</h2>
<p>先说说FCN(Full Convolutional Network) 全卷积网络,论文地址:<a href="https://arxiv.org/abs/1411.4038">Fully Convolutional Networks for Semantic Segmentation</a>。<strong>名字由来</strong>:这名很容易和FCN(Full Connection Network)- 全连接网络混淆啊。其实,全卷积网络就是为了避免全连接网络的弊端(比如必须固定尺寸,比如全连接层参数过度哦,不得不用dropout这类手段防止过拟合啥的),改进成,所有的位置都使用卷积网络,避免使用全链接。这名就是这么来的。他不像全连接那样,把图像全部拉平,所以,还可以保持图像的空间结构。</p>
<p>全卷积网络三大件:</p>
<ul>
<li>全卷积化(Convolutionalization):跟之前差不多,但是去掉了全连接层</li>
<li>反卷积(Deconvolution):用在把小的feature map上采样上去</li>
<li>跳层结构(Skip Layer):就是把不同层柔和到一起的方法</li>
</ul>
<h3 id="反卷积">反卷积</h3>
<p>原始经过卷基层,如VGG或者ResNet后,变成了1/32 x 1/32大小,缩小了32倍,我们为了做语义分割,肯定是要把他还原成原图大小,这样才好判断每个像素的分类。</p>
<p>如何把小的feature map变成原图的大小,最简单的办法是①<a href="https://zhuanlan.zhihu.com/p/34492145">线性插值</a>,或者用②<a href="https://blog.csdn.net/chengqiuming/article/details/80300284">反池化</a>,但是这种过于简单粗暴,还有一个更好一些的办法,就是通过③“反卷积”,需要使用一个的卷积核,来帮着变大。到底如何做呢?看下图:</p>
<p><img src="/images/20200423/dconv1.gif" alt="" class="myimg30" />
<img src="/images/20200423/dconv2.gif" alt="" class="myimg30" /></p>
<p>一图胜千言,如上图,下方是反卷积之前的输入的feature map,阴影是反卷积核,上面深绿色的是反卷积后的结果,因为原图小,所以要给他加padding(白色),这样就引出反卷积的两种方式(上图所示)。第二种更常用。可以读一下<a href="https://www.zhihu.com/question/48279880">知乎</a>上的这篇文章,了解更多细节。</p>
<h3 id="跳层">跳层</h3>
<p>如果只把最后一层(如何pool5,原图1/32)直接上卷积,妈呀,一下子就把最后的feature map的宽和高,增大了32倍,这会丧失很多细节啊!所以,最好是把之前的卷积层(如pool4,甚至pool3)的反卷积到原图大小,这样好多细节信息就不会都是了,这些信息也揉到一起,这件事就叫做跳层(skip-layer)。</p>
<p><img src="/images/20200423/1587645084082.jpg" alt="" class="myimg100" /></p>
<p><a href="https://blog.csdn.net/justpsss/article/details/77170004">参考</a>:</p>
<blockquote>
<p>这里用的是VGG为例,pool1到pool5是五个最大池化层,因此图中的pool5层的大小是原图image的1/32(1/251/25),最粗糙的做法就是直接把pool5层进行步长为32的上采样(逆卷积),一步得到跟原图一样大小的概率图(fcn-32s)。但是这样做会丢失掉很多浅层的特征,尤其是浅层特征往往包含跟多的位置信息,所以我们需要把浅层的特征加上来,作者这里做法很简单,就是直接“加”上来,求和操作,也就完成了跳跃融合。也就是先将pool5层进行步长为2的上采样,然后加上pool4层的特征(这里pool4层后面跟了一个改变维度的卷积层,卷积核初始化为0),之后再进行一次步长为16的上采样得到原图大小的概率图即可(fcn-16s)。另外fcn-8s也是同样的做法,至于后面为什么没有fcn-4s、fcn-2s,我认为是因为太浅层的特征实际上不具有泛化性,加上了也没什么用,反而会使效果变差,所以作者也没继续下去了。</p>
</blockquote>
<p>另外,</p>
<ul>
<li><strong>FCN-16s</strong>就是pool4+pool5的信息,柔和到一起</li>
<li><strong>FCN-8s</strong>就是pool3+pool4+pool5的信息,柔和到了一起,是最精细的了。</li>
</ul>
<h3 id="resnet50的fcn">ResNET50的FCN</h3>
<p>FCN的backbone可以是任何主流的backbone,常用的ResNet50应该是怎么样的呢?我们来详细说说。</p>
<p>首先,可以看看Resnet50的结构,我们都知道Resnet50就比较深了,为了防止梯度小时,设计了shortcut结构。</p>
<p>好,可以先看看Resnet50的详细结构,<a href="https://www.jianshu.com/p/993c03c22d52">参见这篇</a>。</p>
<p>不过这个太复杂了,我们找个简化版本的:</p>
<p><img src="/images/20200427/1587970014152.jpg" alt="" class="myimg" /></p>
<p>我们最关心的是他什么时候feature map缩小一倍,如图所示,我标识到了上图中。</p>
<p>为什么是这些位置了,具体可以参考<a href="https://blog.csdn.net/qq_25491201/article/details/78405549">这篇</a></p>
<pre><code> #conv1 ->1/2 , 1/4
x = Conv2d_BN(x, nb_filter=64, kernel_size=(7, 7), strides=(2, 2), padding='valid')
x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), padding='same')(x)
#conv3_x ->1/8
x = identity_Block(x, nb_filter=128, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
#conv4_x ->1/16
x = identity_Block(x, nb_filter=256, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
#conv5_x ->1/32
x = identity_Block(x, nb_filter=512, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True)
</code></pre>
<p><strong>Identity_Block</strong>,<em>是Resnet设计的一个可重复的卷基层,由3组个卷积、BatchNormal、Relu激活组成,就是上图中中括弧表示的内容。</em></p>
<p>但是,我们不是直接在它刚刚变成1/2的地方就取出来去做FCN,而是在上图中的逻辑层<strong>Conv?_x</strong>的输出,也就是最后一个Relu激活函数后输出。另外,我们FCN其实只用到后3层的输出,也就是<code>Conv3_x、Conv4_x、Conv5_x</code>的输出,对应的在一般的pretrain的Resnet50的层的命名中,对应着<code>activate_22,activate_40,activation_49</code>三处。详细位置和标号,可以参见<a href="https://img-blog.csdn.net/20180913122255454">这张图</a>。</p>
<p>对于原图尺寸不断缩小一半的地方,有必要再啰嗦两句:<a href="https://github.com/divamgupta/image-segmentation-keras/blob/a9a10ace0a5a308a9d5a5dd98ae88a4de9f50844/keras_segmentation/models/resnet50.py#L122">参考代码</a></p>
<ul>
<li>1/2的时候:line 143:<code>x = Conv2D(64, (7, 7), data_format=IMAGE_ORDERING,strides=(2, 2), name='conv1')(x)</code></li>
<li>1/4的时候:line 149:<code>x = MaxPooling2D((3, 3), data_format=IMAGE_ORDERING, strides=(2, 2))(x)</code></li>
<li>1/8的时候:line 151:<code>x = conv_block(x, 3, [128, 128, 512], stage=3, block='a')</code></li>
<li>1/16的时候:line 162:<code>x = conv_block(x, 3, [256, 256, 1024], stage=4, block='a')</code></li>
<li>1/32的时候:line 170:<code>x = conv_block(x, 3, [512, 512, 2048], stage=5, block='a')</code></li>
</ul>
<p>可以看出,除了第二个(1/4处 line149),剩下的都是靠stride=2的卷积实现的缩小一倍。</p>
<h3 id="反卷积的实现">反卷积的实现</h3>
<p>tensorflow提供了反卷积函数,采用的方式就是上面提到的“第二种”的反卷积方式,即在feature map的像素之间padding零,padding多少个呢?就是strip-1个。</p>
<p>TF的函数<a href="https://zhuanlan.zhihu.com/p/31988761">tf.nn.conv2d_transpose</a>:</p>
<blockquote>
<p>传入函数的参数有value,filter,output_shape,strides,padding,data_format和name,最主要的三个参数是value,output_shape和strides。value传入函数是为了确定输入尺寸,output_shape是为了确定输出尺寸,strides就是kernel在vertical和horizon上的步长。</p>
<ul>
<li>value的格式为[batch, height, width, in_channels],height和width是用来计算输出尺寸用到的最重要的两个参数,表示输入该层feature map的高度和宽度,典型的NHWC格式;</li>
<li>filter的格式为[height, width, output_channels, input_channels],务必注意这里的channel数是输出的channel数在前,输入的channel数在后。</li>
<li>output_shape是一个1-D张量,传入的可以是一个tuple或者list,在不指定data_format参数的情况下,格式必须为NHWC。注意:这里的C要与filter中的output_channels保持一致;</li>
<li>strides的格式为一个整数列表,与conv2d方法在官方文档中写的一样,必须保证strides[0]=strides[3]=1,格式为[1, stirde, stride, 1];</li>
<li>padding依然只有’SAME’和’VALID’;</li>
<li>(与conv2d方法不同的是,这里需要人为指定输出的尺寸,这是为了使用value、output_shape和strides三个参数一起确定反卷积尺寸的正确性,具体在下个部分解释。)</li>
</ul>
</blockquote>
<h3 id="fcn的实现">FCN的实现</h3>
<p>先贴论文<a href="https://arxiv.org/abs/1411.4038">Fully Convolutional Networks for Semantic Segmentation</a>。</p>
<p>我分别找了4种实现,其实细节上还是有不少不同的,为了简化分析,我只关注fcn-32s的实现:</p>
<ul>
<li><a href="https://github.com/divamgupta/image-segmentation-keras/blob/master/keras_segmentation/models/fcn.py#L96">Keras实现</a>
<pre><code> o = f5
o = (Conv2D(4096, (7, 7), activation='relu',padding='same', data_format=IMAGE_ORDERING))(o)
o = Dropout(0.5)(o)
o = (Conv2D(4096, (1, 1), activation='relu',padding='same', data_format=IMAGE_ORDERING))(o)
o = Dropout(0.5)(o)
o = (Conv2D(n_classes, (1, 1), kernel_initializer='he_normal',data_format=IMAGE_ORDERING))(o)
o = Conv2DTranspose(n_classes, kernel_size=(64, 64), strides=(32, 32), use_bias=False, data_format=IMAGE_ORDERING)(o)
</code></pre>
<p>看!反卷积之前,对原始的feature map做了3次卷积(7x7和1x1和1x1)</p>
</li>
<li><a href="https://github.com/shekkizh/FCN.tensorflow/blob/master/FCN.py#L82">Tensorflow实现</a>
<pre><code> conv_final_layer = image_net["conv5_3"]
pool5 = utils.max_pool_2x2(conv_final_layer)
W6 = utils.weight_variable([7, 7, 512, 4096], name="W6")
conv6 = utils.conv2d_basic(pool5, W6, b6)<--------------7x7卷积
relu6 = tf.nn.relu(conv6, name="relu6")
W7 = utils.weight_variable([1, 1, 4096, 4096], name="W7")
conv7 = utils.conv2d_basic(relu6, W7, b7)<---------------1x1卷积
relu7 = tf.nn.relu(conv7, name="relu7")
W8 = utils.weight_variable([1, 1, 4096, NUM_OF_CLASSESS], name="W8")
conv8 = utils.conv2d_basic(relu7, W8, b8)<---------------1x1卷积
W_t1 = utils.weight_variable([4, 4, deconv_shape1[3].value, NUM_OF_CLASSESS], name="W_t1")
conv_t1 = utils.conv2d_transpose_strided(conv8, W_t1, b_t1, output_shape=tf.shape(image_net["pool4"]))<----------------反卷积(这个是pool5经过一些列卷加后的反卷积,strip=2)
fuse_1 = tf.add(conv_t1, image_net["pool4"], name="fuse_1")<----------和pool4融合
</code></pre>
<p>这块有个疑问?pool5经过卷积后的conv8,为何要上卷积呢?论文里明明是2 x unsampled,也就是反池化啊?!</p>
<p>不过,这里还是跟上面的做法一样,反卷积之前,对原始的feature map做了3次卷积(7x7和1x1和1x1)。</p>
</li>
<li><a href="https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/siftflow-fcn32s/net.py#L14">Caffi的实现</a>,
<pre><code> n.fc6, n.relu6 = conv_relu(n.pool5, 4096, ks=7, pad=0)
n.fc7, n.relu7 = conv_relu(n.drop6, 4096, ks=1, pad=0)
n.score_fr = L.Convolution(n.drop7, num_output=60, kernel_size=1, pad=0,param=[dict(lr_mult=1, decay_mult=1), dict(lr_mult=2, decay_mult=0)])
n.upscore = L.Deconvolution(n.score_fr,convolution_param=dict(num_output=60, kernel_size=64, stride=32,bias_term=False)
</code></pre>
<p>也是7x7卷积,2个1x1卷积后,才做反卷积</p>
</li>
<li><a href="https://github.com/wkentaro/pytorch-fcn/blob/master/torchfcn/models/fcn32s.py">Pytorch实现</a>
<pre><code> self.pool5 = nn.MaxPool2d(2, stride=2, ceil_mode=True) # 1/32
self.fc6 = nn.Conv2d(512, 4096, 7)<----7x7卷积
self.relu6 = nn.ReLU(inplace=True)
self.fc7 = nn.Conv2d(4
。
pool5是只做了一个crop剪切,, 1)<----1x1卷积
self.relu7 = nn.ReLU(inplace=True)
self.score_fr = nn.Conv2d(4096, n_class, 1)<----1x1卷积
self.upscore = nn.ConvTranspose2d(n_class, n_class, 64, stride=32,bias=False)
</code></pre>
<p>一样一样,都是7x7,1x1,1x1三个卷积。</p>
</li>
</ul>
<p>我查看了原始论文中,并没有这样的一个固定的结构。</p>
<h3 id="输出和损失函数">输出和损失函数</h3>
<p>好像大家都不太提最后的输出是啥shape,都是抄来抄去的。我理解,他一定是和原图一边大,对,一样大。
那维度呢?维度是你要分类的种类加一。
算了,举个例子吧,比如说你宽高是800x600,分类是10种。那最后的结果输出,就是800x600x11(11是因为多了背景)。</p>
<p>然后,你算损失函数,其实就是一个简单的softmax平均值就可以。让这个800x600个softmax(是一个11维度的概率向量)的平均值最小化,这样来训练即可。</p>
<h3 id="参考">参考</h3>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/32506912">FCN 的简单实现</a></li>
<li><a href="https://cloud.tencent.com/developer/article/1576594">在TensorFlow 2中实现完全卷积网络(FCN)</a></li>
<li><a href="https://www.cnblogs.com/gujianhan/p/6030639.html">全卷积网络 FCN 详解</a></li>
<li><a href="https://blog.csdn.net/qq_36269513/article/details/80420363">FCN的学习及理解</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/31428783">白裳 - 图像语义分割入门+FCN/U-Net网络解析</a></li>
</ul>
<h2 id="unet">UNet</h2>
<p>好,来说说UNet(<a href="https://arxiv.org/abs/1505.04597">论文</a>),UNet就是对FCN的改进,UNet是为了一次医学识别比赛专门搞的一个网络。</p>
<p><img src="/images/20201010/1602316588540.jpg" alt="" class="myimg" /></p>
<p>仔细看看网络结构,总共用了C1,C2,C3,C4 四层做融合,C5是最下层,只做反卷积即可。
每次融合前,都得做crop,比如第一个融合C4的融合,64x64被切成了56x56,咋切呢?其实就是直接去掉两边边就可以。</p>
<p>我自己觉得UNet也没啥好说好说的,就是用CNN做特征抽取,然后不同的层次反复融合(concat和反卷积),然后融到最后一个原图大小差不多的一个图,这个图是2通道的。</p>
<p>损失函数,原论文搞了个带权重的交叉熵损失函数,据说是为了突出边缘,是为了他的专有的比赛。我的理解,我们要做自己任务的时候,完全没必要,直接就交叉熵就可以。</p>
<h3 id="unet和fcn的区别">UNet和FCN的区别</h3>
<p>Unet实际上是改进了FCN,究竟做了哪些改进呢?</p>
<p>UNet用了更低层次的feature map,不像FCN只用了pool3、pool4、pool5,他还用了pool1,pool2。
pool5是只做了一个crop剪切。至于为何需要做crop,是因为,UNet做卷积的时候,没有做padding,会导致每做一次卷积,特征的长宽就会减少两个像素,最后网络的输出和输入大小不一样,所以去融合的时候,得切来切去的。</p>
<p>另外,和FCN的融合是用了ADD不同,UNet的融合是concat!</p>
<p>而且,UNet的输入和输出不一样,你发现了么?从572x572,变成了388x388,这个据说是因为原图太大,用个572的滑动窗口来搞,不过这块我也没太明白,所以就作罢了。在我看来,其实两边可以一样大小的。</p>
<p>另外,最后的输出你看网络图是上388x388x2,为何是2,这个是因为他这个比赛就是为了做一个病灶区域和健康区域,要是我们搞多分类,就是K分类+1(背景了)。</p>
<p>总之,就是这个UNet是为了比赛做了很多不太好理解的动作,但是,整体思想还是比FCN改进了很多,结构更清晰了,不想FCN 16s,8s啥的,UNet就是一个每层都参与,一共用了4次融合,而且,取代了Add是用了Concat,让feature更多。</p>
<h3 id="参考-1">参考</h3>
<ul>
<li><a href="https://blog.csdn.net/qian99/article/details/85084686">Unet学习笔记</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/31428783">白裳 - 图像语义分割入门+FCN/U-Net网络解析</a></li>
</ul>
<h2 id="mask-faster-rcnn">Mask Faster-RCNN</h2>
<p>Mask R-CNN是一个实例分割(Instance segmentation)算法,比目标检测检测的更细,比语义分割更多的识别出不同的种类。</p>
<h3 id="大体思路">大体思路</h3>
<p>关于识别过程,这篇<a href="https://www.cnblogs.com/hellcat/p/9907837.html">参考</a>写的很好,照搬过来了:</p>
<pre><code>1,输入一幅你想处理的图片,然后进行对应的预处理操作,或者预处理后的图片;
2,将其输入到一个预训练好的神经网络中(ResNeXt等)获得对应的feature map;
3,对这个feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;
4,将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI(截止到目前,Mask和Faster完全相同,其实R-FCN之类的在这之前也没有什么不同);
5,对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来)(ROIAlign为本文创新点1,比ROIPooling有长足进步);
6,对这些ROI进行分类(N类别分类)、BB回归和MASK生成(在每一个ROI里面进行FCN操作)(引入FCN生成Mask为本文创新点2,使得本文结构可以进行分割型任务)。
</code></pre>
<h3 id="mask-rcnn演变之路">Mask-RCNN演变之路</h3>
<p>Mask-RCNN是从RCNN –> Fast-RCNN –> Faster-RCNN –> Mask-RCNN,一路演变而成的。</p>
<p>Mask-RCNN是faster rcnn基础上的再改进,所以,有必要回忆一下从RCNN开始的物体检测过程。注意哈,rcnn、fast-rcnn、faster-rcnn都是在做物体检测,但是mask-rcnn是做了实例分割,这点和前辈们是有区别的。这也是,为何讨论语义分割的帖子里,要扯出一堆的物体检测的东西来的原因。</p>
<p>这里对rcnn、fast-rcnn、faster-rcnn的讨论不会太过详细,都是把核心要点和演变过程讲述一下,一切都是为了帮助更好的理解mask-rcnn。</p>
<h4 id="rcnn">RCNN</h4>
<p>最早的物体检测,也是开创性的,是RCNN。</p>
<p>最重要的是要确定哪些区域是有物体的,也就是常说的ROI。RCNN用聚类来确定ROI,对图像点做聚类,聚类后得到一片片区域作为备选ROI,比暴力的滑动窗口方式好多了,降低了复杂度,这个过程叫selective search。</p>
<p>通过selective search终于得到一个个的ROI,然后交给cnn去预测是哪一个类了,不过还得同时,还得做一个回归,用于微调ROI,即bbox的x,y,w,h的预测,用于修正。</p>
<p>所以,RCNN做了分类和回归。</p>
<p>这里引入那个很诡异的$G_x、P_x$的公式,就是Tx啥的那个变换,这样做我理解是为了做归一化,让x,y中心点的偏移和bbox的宽高是成比例一致的,是归一化的。毕竟不同大小的bbox的偏移规格是不一样的,只有归一化了,才在一个尺度里吧。</p>
<p>其实,我觉得直接预测$\Delta_x,\Delta_y$是不是也可以?不知道,谁知道呢?估计那帮人肯定是验证过的,这样效果更好。</p>
<h4 id="fast-rcnn">Fast-RCNN</h4>
<p>RCNN还是非常慢,大约会搞出2000个selective search得到的ROI,然后每个ROI都要过卷积CNN进行计算,慢死了!</p>
<p>于是Faster-CRNN就做出了改进,不再每次把每个ROI过CNN,而是在最终的最后一层的feature map上,直接得到缩小版的ROI。</p>
<p>他用的ROI还是selective search方法,也就是聚类的结果哈,这个是在原图上。但是,他不在每个都过CNN了,而是按照CNN的缩小比例,把每个ROI等比例缩小,直接得到对应的在最后一层Feature Map上的ROI。
比如我的ROI在原图上是24x32,我的CNN缩小了8倍,那最终就是3x4的FeatureMap上的ROI了。(这个会损失信息么?我没想清楚。。。反正他们就是这么粗暴的干了!)</p>
<p>不过,得到3x4,是不定大小的,所以,要统一成一个size,才能接后面的全连接啥的,所以这里有个trick,这块就是常说的ROI pooling,说白了,就是把多大的图都resize成一个统一尺寸。</p>
<p>ROIpooling,是把3x4⇒2x2,是变小,我开始以为是变大呢,变小的时候肯定是是不均匀的,所以只能凑活的切,所以会存在不均衡的池化,这个也是后来mask-rcnn的改进。</p>
<p><img src="/images/20201010/1602301727156.jpg" alt="" class="myimg" /></p>
<p>这图就图示了这个过程,要把ROI(黑框区域)max-pooling成2x2的,可是对不齐啊,5x7咋变成2x2啊,所以就得取舍了。</p>
<h4 id="faster-rcnn">Faster-RCNN</h4>
<p>现在再看Fast-RCNN,还是可以改进。比如ROI的确认,之前都用的selective search方法,即聚类方法,得到2000个roi,可是,聚类太慢了,所以faster-rcnn的faster,就是改进这个过程。</p>
<p>所以用 一个cnn网络,替代聚类了,这个网络就是叫RPN(region proposal network),帮我确定这些roi,恩,就改进了这点。其他都和fast-rcnn一样。</p>
<p>他怎么做的呢?</p>
<p>就是anchor,就是用最后的feature map的最后的一层的点当做轴心,每个点都扩展出10个anchor,然后用这些框当做roi。</p>
<p>那么多anchor,我用哪个去套真实物体呢,用iou,去算GT和我anchor的IOU最大的那个,我就选哪个。这个是训练的时候。真正预测的时候,用类别可以算出置信度,大的,就是对应训练的时候最大IOU那个。</p>
<p>注意!这个只是RPN网络,用RPN的损失函数,训练出来一个RPN,这也就是faster-rcnn里面说的stage1的训练。</p>
<p>有stage1,就有stage2,stage2就是用RPN帮我筛出来的ROI,再进一个网络进行这些ROI的类别判断和更精细的边框大小和位置的回归。</p>
<p>这里我一直不太明白:既然RPN已经做了ROI区域的宽高中心位置的回归,干嘛后面的网络还要做一遍,我看文献里说,是为了做“更精细”的回归,这岂不是多此一举了呢?!迷惑啊…</p>
<p><img src="/images/20201010/1602307529197.jpg" alt="" class="myimg" /></p>
<p>后面的ROI类别和更精细边框回归,都需要全连接,所以还是要做上面提到的ROI pooling,给他们搞成同样大小好做FC全连接。</p>
<p>回顾一下,stage1做proposal区域的二分类(是不是proposal)和边框回归;stage2做多类别判断和更精细边框回归。</p>
<p>白裳的这篇<a href="https://zhuanlan.zhihu.com/p/31426458">一文读懂Faster RCNN</a>讲的超详细,推荐!</p>
<p>到目前为止,faster-rcnn还可以改进,就是他还是个单尺度的检测,由于特征抽取只用了最后一层,所以,只能检测大颗粒度的物体,对小物体咋办?这就要引入下面的FPN了。</p>
<h4 id="fpn">FPN</h4>
<p>FPN和FCN名字很像,样子又很像UNet,特容易混。恩,其实,在我看来FPN就是借鉴了FCN,用同样的办法,融合了不同感受野的feature map。</p>
<p>特征金字塔网络(FPN)来解决多尺度目标检测的问题,对,是为了解决<strong>目标检测</strong>的,不是语义分割的,这点要注意。</p>
<p>在我看来,虽然是为了解决目标检测而生的,但是他也是借鉴了FCN的思想,都是通过不同感受野的feature map的融合,从而更好地抽取图像中的不同尺度的语义信息的。</p>
<p>【FCN、UNet、FPN的关系和区别】</p>
<p>FCN是鼻祖,<strong>2014.11</strong>年就出来了,2015年3最终稿,它是开山之作。为了解决XXX问题。</p>
<p>UNet是<strong>2015.5</strong>发表,FPN都是<strong>2016.12</strong>发表,终稿是2017.3的。他俩都是站在FCN的基础之上。</p>
<p>区别: 引自<a href="https://www.zhihu.com/question/351279839/answer/1002339902">知乎参考链接</a></p>
<blockquote>
<ul>
<li>FPN出自detection任务;U-Net出自segmentation任务</li>
<li>FPN的“放大”部分是直接插值放大的,没有deconvolution的filters学习参数;U-Net“放大”部分就是Decoder,需要deconvolution的filters学习参数的。</li>
<li>FPN及其大多数改进都是把原Feature Map和FPN的Feature Map做加法;U-Net及其大多数改进都是把原Feature Map和Decoder的Feature Map做Concatiantion,再做1x1卷积。</li>
<li>FPN对每一个融合的层都做detection;U-Net 只在最后一层做segmentation的pixel预测。</li>
</ul>
</blockquote>
<p><img src="/images/20201010/1602323792411.jpg" alt="" class="myimg30" />
<img src="/images/20201010/1602323913881.jpg" alt="" class="myimg30" /></p>
<p>一般backbone都是缩小32倍,比如vgg,输入标准化为224x224,最后的feature map都7x7了,这么小,还ROI pooling个屁啊,这样还怎么预测小尺度的目标啊。</p>
<p>我能不能用用之前曾的feature map,比如缩小2倍、4倍的那些feature map,可是有个问题啊,这些层的语义信息是不明显的,越往后抽象语义信息越丰富啊。咋办?结合起来呗。把不同层的feature map融合起来。</p>
<p>咋融合?</p>
<p>是一个直接的下采样和一个1x1卷积,然后和上一层的结果进行相加,完成融合,下采样就是用1个值填4个值,没参数;但是1x1卷积有参数。为何用1x1卷积呢,说是降低通道数,我理解是比如resetnet的C5出来是7x7x1024,我用1x1,把他变成7x7x128,恩,你看,计算量下来很多了,就是去通道呀。</p>
<p>在融合层用去做预测之前,还要做一个3x3卷积,干嘛用?他们都说是为了去除混叠效应,我理解就是你粗暴的把下层和上层相加了,这样融合过于粗暴,需要用一个3x3再揉合一下你们俩。</p>
<p>FPN还搞了一个P6,就是resetnet的c5,再做一次下采样的结果,干嘛用呢,用来做RPN的输入,就是产生那些anchor们用的。而p5,p4,p3,p2,都用于产生每个anchor的回归和置信度的结果用了。可以产生,恩,4个批,4个不同层次的。</p>
<p>现在有了FPN,faster-rcnn被更增强了,变成了:</p>
<p>FPN+RPN+Fast-RCNN⇒牛逼的faster-rcnn,比之前的faster-rcnn牛逼的地方就在于多尺度了!</p>
<p>多个地方都可以预测物体,那到底我用那个预测呢?这个在训练的时候需要考虑。比如我一个20x30的物体,是用p5\p4\p3\p2 这四个中的哪个去预测呢,这样我才好算后续的loss呀。论文给了一个公式 $k= 下界(k_0+log_2(\sqrt{w*h}/224))$,算出来的k,对应的就是P#的#序号。说的很玄乎,就是按照目标(GT)不同的大小,给你归队到某个尺度的预测上去。</p>
<p>其他都一样,还是roi pooling,预测网络我理解用的是一个,就是不同尺度的roi pooling后一样大小的feature map,交给这个最后的预测网络(只有一个),然后预测回归和分类即可。</p>
<h3 id="mask-rcnn">mask-rcnn</h3>
<p><img src="/images/20201010/1602328957729.jpg" alt="" class="myimg" /></p>
<p>何凯明在fpn的faster-rcnn基础上,多了一个mask预测分支(之前只有分类回归分支),这个分支就是mask分支,用来在一个roi里面,预测每个像素的分类。这个就不再是物体检测了,而变成语义分割了,不,是实例分割了(实例分割每个像素可以属于不同类别,语义分割只能属于一个)。</p>
<p>三个创新点:</p>
<ul>
<li>创新点1:改进了ROI Align,使用双线性插值,比ROIPooling有长足进步</li>
<li>创新点2:引入mask分支,用来预测</li>
<li>创新点3:损失函数的计算,作者放弃了更广泛的softmax,转而使用了sigmoid,避免了同类竞争</li>
</ul>
<p>FPN的P_x输出是7x7x256, 但是mask-rcnn用的是28x28x256?怎么大了一倍?</p>
<p>mask输出是28x28x类别数,是固定的,所以你还得还原回你的roi区域大小去。</p>
<h4 id="mask分支">Mask分支</h4>
<p><img src="/images/20201010/1602329231412.jpg" alt="" class="myimg" /></p>
<p>何凯明在fpn的faster-rcnn基础上,多了一个mask预测分支(之前只有分类回归分支),这个分支就是mask分支,用来在一个roi里面,预测每个像素的分类。这个就不再是物体检测了,而变成语义分割了,不,是实例分割了(实例分割每个像素可以属于不同类别,语义分割只能属于一个)。</p>
<p>FPN的P_x输出是7x7x256, 但是mask-rcnn用的是28x28x256?怎么大了一倍?</p>
<p>mask输出是28x28x80(80是类别数),这个ROI大小是固定的,所以你预测换,还要还原到你原图大小的坐标上去。</p>
<p>按理说,最后mask损失应该是80维度的一个softmax概率向量和one-hot的标签做交叉熵就好了。不过,那样貌似没法解决多预测问题,也就是1个点既是A类,也是B类的实例分割问题,咋办呢?何凯明想了一个招,就是用sigmod,不用softmax。具体咋操作呢?</p>
<p>你看上图中,右上角的class,即,你可以知道你预测出来的这个ROI是那一个类,对吧?然后你就去80个类里面,去找对应的那个类的图,这样就从28x28x80里面,找到了一张图,也就是28x28x1,对,这张图和你的GT一对比,一样的地方都是1,不一样的地方都是0,然后你就做sigmod的损失就好了。</p>
<h4 id="双线性插值">双线性插值</h4>
<p>为何要做差值呢?之前的faster-rcnn里,有一个操作是ROI pooling,</p>
<p><img src="/images/20201010/1602300132770.jpg" alt="" class="myimg40" />
<img src="/images/20201010/1602300388464.jpg" alt="" class="myimg40" /></p>
<p>左图,就是用周边4个点($Q_{11},Q_{12},Q_{21},Q_{21}$)的值,来确定中间位置的点P的值。恩,这就是双线性差值。</p>
<p>右图,黑框是ROI,3.2x2.2的一个框,要pooling成2x2,咋办?虚线交叉点都是像素值。
做法是,先化成4个小黑框,然后4个黑框里面找4个对齐的点,然后算这些点的双线性差值的值。
然后这4个点里面,再max pooling一个出来,作为这个小黑框的值。
最终,得到了2x2的值。</p>
<p>这么做有啥好处呢?好处是,考虑了其位置和值,而不是想之前的ROI pooling那样粗暴。</p>
<h4 id="参考-2">参考</h4>
<p>【视频】</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV1b441127cs">小象学院的专题分享,讲的最好</a></li>
<li><a href="https://www.bilibili.com/video/BV1bW411w7ZF">鱿鱼哥的讲解,讲的很不错,有理论有实战</a></li>
<li><a href="https://www.bilibili.com/video/BV17J411e7Fy">七月在线的讲解</a></li>
<li><a href="https://www.bilibili.com/video/BV1mD4y1m7Au">一个培训的大嗓门讲的</a></li>
<li><a href="https://www.bilibili.com/video/BV17Z4y1M7MT">声音腼腆的小哥讲的</a></li>
<li><a href="https://www.bilibili.com/video/BV1sz4y1Z771">Faster-RCNN就是淦,讲fasterrcnn的</a></li>
<li><a href="https://www.bilibili.com/video/BV1QK411J72H">纯撸论文的视频</a></li>
<li><a href="https://www.chinahadoop.cn/course/1316">小象的深度视觉课中的关于分割和识别的2节</a></li>
<li><a href="https://www.bilibili.com/video/BV1d4411n7mu">一个培训机构的讲解,凑活</a></li>
<li><a href="https://www.bilibili.com/video/BV1YW411E77M">将门的mask-rcnn的分享</a></li>
</ul>
<p>【文章】</p>
<ul>
<li><a href="https://www.cnblogs.com/hellcat/p/9907837.html">cnblog,最好的一篇</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/37801090">语义分割综述</a> ,stone的,就是小象讲maskrcnn最好的那哥们,他的<a href="https://zhuanlan.zhihu.com/c_197474183">语义分割专栏</a>.</li>
<li><a href="https://zhuanlan.zhihu.com/p/37998710">stone的讲mask-rcnn的</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/68147183">雷鸣的SIGAI的语义分割综述</a></li>
<li><a href="https://blog.csdn.net/qq_38299170/article/details/105233638">mask-crnn的解析</a> 目前我们用的<a href="https://github.com/wandaoyi/mask_rcnn_pro">mask-rcnn的代码</a>对应的文章</li>
<li><a href="https://www.jianshu.com/p/cf1dc2c1d81f">RFCN,是听小象里知道的网络,需要了解一下</a></li>
</ul>
【OCR实践系列】Aster、FA和TextScanner的一些研究
2020-04-14T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2020/04/14/ocr-fa-textscanner
<h1 id="最近">最近</h1>
<p>最近,苦于要解决文字中生僻字、低频词的识别,以及识别正确率的问题,做了一些研究。</p>
<p>之前用的crnn,3770的一级字库,使用我们自己标注的图片,正确率跑到84%,不是特别满意,曾经看过<a href="https://juejin.im/entry/5b3081386fb9a00e8945909b">阿里读光OCR团队</a>分享过,他们通过注意力方式,切出单字来,大大正确率:</p>
<blockquote>
<p>生僻字的解决方法如上图所示,首先使用行识别,再进行了Attention单字识别方案解决了生僻字语料偏少的问题,Attention可以解决单字切字问题。通过上述方法,我们对2万多生僻字测试集进行了测试,精确度从21%提高到了99%,基本上解决了生僻字问题。</p>
</blockquote>
<p>所以我就尝试实现<a href="https://github.com/piginzoo/attention_ocr">Attention OCR</a>,但是,总是不收敛,于是开始尝试各类方法,包括回顾了我实现过程中主要参考的Aster的TRN网络、Focus Attention以及最近比较火的TextScanner模型,把自己的一些心得体会记录下来,形成此文。</p>
<h1 id="先说说aster的trn">先说说Aster的TRN</h1>
<p>先贴论文:<a href="https://www.researchgate.net/publication/325993414_ASTER_An_Attentional_Scene_Text_Recognizer_with_Flexible_Rectification">Aster:An Attentional Scene Text Recognition with Flexible Rectification</a></p>
<p>论文团队给了一个代码实现:<a href="https://github.com/bgshih/aster">Github Aster</a>,主要包括了变形纠正的SRN网络和后面的文字识别TRN网络,前面的变形纠正网络,我没有细研究,目前没有需求,略过,主要是看了看文字识别网络,感兴趣主要是因为,他是一个典型的注意力识别模型,是具代表性的,当然这也不是他的原创,<a href="https://arxiv.org/pdf/1603.03915">RARE</a>里最早提出来的,他只不过借鉴过来。这里我把论文学习的过程的一些理解整理出来:</p>
<p>论文说,CTC的问题是说,他是一个组合概率的$\Sigma$,即所有的排列组合的关系,很难确定字之间的关系,这点不是很特别赞同,因为CRNN其实也是使用了bi-LSTM来捕捉图像前后的顺序贯彻习的,但是CRNN确实不太好确定字的位置,在解码每个字的时候,全靠之前的bi-LSTM抽取的特征,这个时候遇到对齐问题,所以也只好靠B变换,插入空白来解决了。</p>
<p>注意力实际上是另外一种尝试,他用注意力机制,来在输入的bi-LSTM抽取的特种中来回跳转,通过注意力捕捉后的注意力向量,来参考这些信息,“聚焦到”对应的需要解码的图像特征,然后,避免了对齐问题。</p>
<p>不过,金连文教提过,微软亚洲研究院做过评测,注意力是干不过CTC的,特别是在长文本的情况下,论文也提到了,超过11个字就明显干不过了.</p>
<blockquote>
<p>As can be seen, the recogintion accuracy is farely even on words whose lengths are equal to or less than 11. Beyond this length, a drop in accuracy is observed.</p>
</blockquote>
<h1 id="先说说网络结构">先说说网络结构</h1>
<p>网络结构上,有个细节有些迷惑,第5页里面提到“Next, the feature map is converted into a feature sequence by being split along its row axis. The shape of the feature map is $(h_{conv},w_{conv},d_{conv})$,respectivly its height, with and depth.”,这句很含糊,因为前面提到了,高度已经被卷集成1了,第7也的Table1图中的Block5输出为1,也表明了这点,但是这里有提到了所谓的$h_{conv}$,很矛盾啊?!而且,Fig7中的这张图也没有把高度画成1。</p>
<p>他的Conv用了backbone的网络,我看Table6中,尝试了VGG和ResNet,我是自己搭了一个网络,当然也不是自己啦,是照抄了CRNN的Conv网络部分,但是是从头自己训练的,是不是应该借鉴一下,使用vgg或者resnet初始化呢?鉴于我不收敛的悲惨现状,确实应该去尝试一下。</p>
<p>解码器上有点意思,他用了一个bi-RNN,注意啊,是decoder,encoder也用了,但是这里是decoder。然后他会前向解码一次,后向解码一次,然后各自$\sum$一下,谁大就用谁的答案,这个做法挺有意思。注意,他不是挨个字比较,挑概率高的字,而是整个解码结果sum后比较。所以,他的lost也是逼着前后解码都要好。这个玩法,很有意思。他的Table5,也比较了一下,bi-RNN确实比单向RNN效果要好一些。</p>
<h1 id="训练细节">训练细节</h1>
<p>他说了,2天才收敛的,大概是用了100万batchx64张图片,6400万张。使用的数据集包括Synth90K和SynthText,Synth90K是专门为识别训练合成的数据集,大概有900万张;SynthText是为了检测用的,数量我也没查,他们把文档给切出来用的。基本上每个batch,这两种数据一样一半。我看了图,差不多2万个batch以内是明显变化的,差的情况,4万个batch之内,也是明显变化的,这个和我自己写的那个网络不收敛是不一样的,555555。</p>
<p>他提到了个细节,他的图都是直接暴力resize成32x256的,像我那样,保持比例resize然后padding,他说效果反倒次,这个让我有点意外。不过他没又给出差多少的定量分析数据。</p>
<h1 id="其他">其他</h1>
<p>他提到了,如果用aster的STN获得的变形矫正的点,可以帮助更精确地定位文字,也就是可以帮助提高检测的精度,这个思路也挺有意思的,不过我没有细看,回头有时间研究一下。</p>
<p>我的<a href="https://github.com/piginzoo/attention_ocr">Attention OCR</a>,也是借鉴了这个思路,不过我没有用backbone的conv,而是照着crnn弄了一个,另外,我也没有用它的bi-rnn的decoder,我训练的过程就是不收敛,我tensorboard观察梯度直方图,根本梯度变化就是0,唉,究竟哪里出了问题呢?至少从他的论文上看,人家训练上来是慢慢收敛的,而不是一开始就跟我那个似的,不停震荡。</p>
<h1 id="接下来说说fafocus-attention">接下来说说FA(Focus Attention)</h1>
<p>先贴论文:<a href="https://arxiv.org/pdf/1709.02054">Focusing Attention: Towards Accurate Text Recognition in Natural Images</a></p>
<p>2017.10的论文了,日期有点老,不过,我还是去啃了一下。</p>
<p>上来,他先抛出了“attention drift”的概念,大白话就是说,你解码的时候,你还原出编码器的对应位置,发现,根本不是要解码的那个区域,那还能解码的对啊?!</p>
<p>作者说,他们率先采用了Resnet做backbone,这个听着有点扯啊,anyway,有个预训练的应该是好的,CRNN还用vgg呢。他们还参考人家语音识别的ctc+attention的方法,失败啦。</p>
<p>作者说,传统的AN(attention network)不好train那种海量的样本集,比如800百万(我估计是笔误,是800万)的合成样本集。这句话,让一直train不出来自己撸的网络的我,稍感宽慰。</p>
<h1 id="fa网络">FA网络</h1>
<p>(…未完成)</p>
<h1 id="说说ca-fcn">说说CA-FCN</h1>
<p>这个可以说是textscanner的前导算法,</p>
<h1 id="由来">由来</h1>
<p>由于会存在弯曲的文字识别图片,导致ctc这种靠一个一维的序列来识别有些困难了,下面这图,很明显得考虑二维的信息啦。</p>
<p><img src="/images/20200709/1594260204031.jpg" alt="" class="myimg" /></p>
<p>随着语义分割网络,如<a href="/machine-learning/2020/04/23/fcn-unet">FCN</a>,香酥鸡,不,是像素级的语义分割,可以对二维的汉字信息进行很好的辨析,这个就是这个算法的发心。</p>
<p>##</p>
<p>这个算法核心就3点:</p>
<ul>
<li>把FCN语义分割方法引入进来,避免ctc那样的一维序列方式,哈哈,升维了(二维了)</li>
<li>引入了注意力机制,嫌语义分割还不够狠,再加上注意力,哈哈,想SOTA就要下猛剂啊</li>
<li>啥imprecise localization的模糊初始啥的,没搞明白,//TODO???</li>
</ul>
<h1 id="参考">参考</h1>
<ul>
<li>
<p><a href="https://blog.csdn.net/weixin_42111770/article/details/84881558">图像文字识别初探(二)-FAN(Focusing Attention Network)</a></p>
</li>
<li>
<p><a href="https://blog.csdn.net/loadqian/article/details/80940924">Focusing Attention Network(FAN)自然图像文本识别 学习笔记</a></p>
</li>
</ul>
<h1 id="textscanner">TextScanner</h1>
<p>TextScanner是旷视的姚神、华中科技大的白神坐阵的最新的一个识别力作,第一作者是旷视的<a href="https://www.wanzy.me/">万昭祎</a>,第二作者是华中科技大的<a href="https://www.profillic.com/search?query=Minghang">何明航</a>。我就阅读论文中遇到的一些问题,向何明航进行了请教,得到了他很大帮助,这里特别感谢一下。</p>
<p>这篇是目前效果SOTA的一个识别框架,所以,我也花了最多的时间去学习和理解。它也开启了不同于CTC和Attention之外的第三条识别道路,就是尽量采用卷积,少量的RNN,速度可以做到更快。</p>
<p>其核心思路,在我看来就是三个图:</p>
<ul>
<li>G:Character Segmentation:W,H,Class(Class是字符集个数),这个用来分辨是哪个字符</li>
<li>H:Order Segmentation:W,H,N(N是序列长度),这个是来分辨字符的从左往右的顺序</li>
<li>Q:Localization Map:W,H,1,这个是用来告诉那些像素是字符像素</li>
</ul>
<p>“<strong>每个字符在什么中心位置上,是哪一个字符,排在第几个顺序上</strong>”,一言以蔽之,就是这句话。</p>
<p>接下来,看下网络结构,</p>
<h1 id="网络结构">网络结构</h1>
<p>这里主要参考第3页的第3节:<strong>3.Methodology</strong></p>
<p><img src="http://www.piginzoo.com/images/20200416/1587021816112.jpg" alt="" class="myimg" /></p>
<p>开始是3个子网络的输出(Character Segmentation,Order Segmentation,Localization Map),后2个子网络输出(Order Segmentation,Localization Map)的结果还要合体(element-wise相乘)成一个新的结果(Order Maps),然后在来一次合体,即Character Segmentation和Order Maps合体,得到最后的Word Formation。</p>
<p>细节是,要搞清楚每个输出的维度:</p>
<ul>
<li>Character Segmentation:W,H,Class(Class是字符集个数)</li>
<li>Order Segmentation:W,H,N(N是序列长度)</li>
<li>Localization Map:W,H,1</li>
<li>Order Maps:W,H,N</li>
</ul>
<h2 id="class-branch---charachtor-segmenationgwhclass">Class Branch - Charachtor Segmenation($G(w,h,class)$)</h2>
<p>输入是backbone之后的feature,我没细想,应该是resize之后,但肯定是固定size的。
比如vgg,resenet输出都是224x224x3=>7x7x512,那这图会从32x256=>1x8。</p>
<p>所以,这个块是有问题的?!走不通了。</p>
<p>所以,我看了论文里提到了,是用了CA-FCN的结构来抽取feature,只不过是把VGG替成了Resnet50:</p>
<blockquote>
<p>Our model is built on top of the backbone from CA-FCN, in which the character attentions are removed and VGG blocks are replaced with a ResNet-50(He et al. 2016) base model.</p>
</blockquote>
<p><img src="http://www.piginzoo.com/images/20200418/1587184093352.jpg" alt="" class="myimg" /></p>
<p>这样理解的话,就应该如上图,去掉了attention,取最后的FCN网络的结果,那和原图一样,是64x256的输出,通道数应该是FCN最后隐层神经元个数。</p>
<blockquote>
<p>During training and inference, the input im- ages are resized to 64 × 256.</p>
</blockquote>
<p>然后过2个卷积,然后过一个全连接,最后输出(w,h,c),比如(32,256,3370),c是字符分类个数,比如3770的一级字库数。</p>
<blockquote>
<p>The prediction module is composed of two stacked convolutional layers with kernel size 3×3 and 1×1.</p>
</blockquote>
<h2 id="geometry-branch---localization-mapgwh1">Geometry Branch - Localization Map($G(w,h,1)$)</h2>
<p>输入是backbone之后的feature,文中没有提,只是提到了过一个sigmod,所以我推测,是不需要再像Class Branch再过2个卷积的,而是直接Sigmod了。</p>
<p>但是,有一点,我假定backbone抽取出来的是256的维度的,但是,256维度是没办法过sigmod的,必须要变成一个值,才可以算出单个点的sigmoid值来,
所以至少需要过一个全连接啊,所以,我推测,这里需要一个全链接,参数是256x1,这样(w,h,256)x(256,1)=> (w,h,1),然后再过sigmoid函数,
得到了Localization Map($G(w,h,1)$)。</p>
<p>TODO:这个细节不知道推测的对不对,需要去问一下原论文作者???</p>
<p>这些需要停一下,我们得到的G到底是个什么鬼?</p>
<p>是在每个点上计算了概率,我理解是是不是文字的一个概率,这张图就能确定哪些点是文字,那些点是背景。</p>
<h2 id="geometry-branch---order-segmentationswhn">Geometry Branch - Order Segmentation($S(w,h,N)$)</h2>
<p><img src="http://www.piginzoo.com/images/20200415/1586943957097.jpg" alt="" class="myimg" /></p>
<p>这个是最复杂的一个了。</p>
<p>这个很像一个U-Net,3个上卷积(越卷越小):上卷积变成1/2大小,16应该是卷积核,也就是输出的通道数;然后再来,1/4,32;1/8,64。
为什么会变小?我猜可能是stide是(2,2)的原因吧???</p>
<p>然后过一个RNN,维度不变,这个RNN应该隐层个数应该是64,这样才可以保持输出通道数不变。
RNN这块,需要把[h,w,c]=>[w,h*c],主要是为了让他成一个保持左右顺序的序列。</p>
<p>然后再下卷积(越卷越大),第1、2下卷积的后,要融合一下左面上卷积的结果后。
上采样,融合,上采样,融合,上采样,融合,上采样,最后得到一个feature map,大小应该是原图的大小w,h,但是channel数多少,这个可能得自己设计。
但是,在输出之前,得过两个卷基层,然后输出(w,h,N)的结果。最后这个N,是可以由最后一个卷积核的个数的来控制的。</p>
<blockquote>
<p>Following the upsampling path, two convolutional layers are employed to generate the order segmenta- tion maps S。</p>
</blockquote>
<p>最后把S(w,h,N)softmax一下。</p>
<p>接下来,要计算Order Map(H)了:</p>
<p>就是把Localitation Map(S - w,h,N)和 Order Segmentation(Q - w,h),两个东西做element-wise乘法,就是对应位置相乘,
成完后,你就得到了N个 w,h的 feature map。也就是H。其中每个w,h形状的图,就是上图中说的$H_k \in (1,N)$。</p>
<p>这里有个细节, Order Segmentation(Q - w,h)是经过sigmoid计算的,Localitation Map(S - w,h,N)是经过softmax计算的,
他们相乘了,得到了的数应该会非常小,比如在某个点上,sigmoid计算的Q的值,softmax计算的S值,相乘,会变成更小的一个数。</p>
<p>然后,就得到了Order Maps的热力图H(h,w,N)</p>
<h2 id="order-map---hhwn">Order Map - H(h,w,N)</h2>
<p>这个图表示了啥含义?</p>
<p>还记得前面说过,Order Segmentation(S)代表字符的顺序号,Localization Map(Q)代表一个点是不是文字,那两个“合体”后呢?</p>
<p>每张热力图 Order Map $H_k$就对应一个位置,这张$H_k$里面的像素,就表示这个像素上,是不是一个文字点。</p>
<h2 id="最后大合体-word-formation了">最后大合体 Word Formation了</h2>
<p>最后,我们还差是哪个字符的信息,他在 Charactor Segmentation(G)中,所以,要在再做一次element-wise(就是对应像素)的乘,这次相乘的是G和$H_k$,挨个乘,得到N张图。</p>
<p>N就是字符的个数,论文里面是提到了N是设成30,也就是最多支持30个字符。</p>
<p>最最最后,我们对每张(注意!是每张),做一个积分:</p>
<p>$p_k = \int_{(x,y)\in\Omega} G(x,y) * H_k(x,y)$</p>
<p>来,观察这个积分,特别神奇:</p>
<p>$G(x,y)$是一个$(h,w,C)$的东东,是个三维的,而$H_K(x,y)$是一个一维的,你是把要把这个一维的和三维的相乘后,求积分,就是求和啦,得到一个数,是一个概率值。</p>
<p>发挥你的想象力,$H_k$表示的是第k个位置的情况,里面的点上是sigmoid概率值,是不是前景的值,你可以理解成一个蒙版,蒙在$G$上,关键的来,G是啥来着?
G是每个点可能是某个字符的概率呀,你$H_k$虽然给我规定了很多前景的点,但是这些点不一定都是一个字符,所以这个你求的时候,是大家相当于一起来投票一样。</p>
<p>最终,你得到的是一个维度为C(字符集个数)的概率向量,是不是归一化,我有点想不清楚了,但是看论文上说的意思,应该是。</p>
<p>然后你挑一个最大的,就是这个位置上,的字符。</p>
<h2 id="20206-补充">2020.6 补充</h2>
<p>在我看来,Word Formation,才是这个算法的灵魂。</p>
<p>这个算法,最终就是要的结论是:在对应位置上的那个字符到底是谁?</p>
<p>Word Formation确定的顺序就是字符的顺序。</p>
<p>而那个积分概率$p_k$,就是最终字符的概率,想想,这个$p_k$的维度是多少?答案是,字符集的个数。</p>
<p>再来看看这个公式:$p_k = \int_{(x,y)\in\Omega} G(x,y) * H_k(x,y)$</p>
<p>$G维度是[H,W,C], H_k维度是[H,W,1]$,他们相乘后,得到的是维度是$[H,W,C]$,C就是字符集的个数,然后通过积分,也就是$\sum$,最终消掉了H和W,最终剩下的只有C。
所以,你最终得到的是一个维度为C的概率向量。</p>
<h2 id="关于损失函数">关于损失函数</h2>
<p>第四页的公式(4)给出了损失函数:</p>
\[L=\lambda_l * L_l + \lambda_o * L_o + \lambda_m * L_m + L_s\]
<p>好,我们分解开每个子loss,挨个说:</p>
<p>第一个:$L_l$,对应着localization map(Q)的损失,那么localization map是啥来呢?再回忆一下,是这个点是不是文本的概率。</p>
<p>第二个:$L_o$,对应的是Order Map(H)的损失,order map是啥来着?回忆一下,是每个位置上,对应的每个点是文本的概率。</p>
<p>第三个:$L_m$,是互训练的时候的损失,<a href="#L_m">后面</a>会详细研究</p>
<p>第四个:$L_s$,对应的是Sgementation Map(G)的损失,segmentation map是啥来着?回忆一下,是每个像素,是某个汉字的概率。</p>
<p>好了,我们看到,这些都是概率,还是有的是多分类,所以,损失函数就大多用了交叉熵,如$L_s$和$L_o$,不过$L_l$换成了L1 smooth,这个细节需要注意,不过我觉得其实用交叉熵也没啥问题。</p>
<h2 id="关于训练样本">关于训练样本</h2>
<p>好,上面说了损失函数,那么就要对应的提供样本GT了。</p>
<p>我们看到,我们有$L_l$、$L_o$、$L_s$要计算,就意味着我们有3种GT样本需要制作,怎么制作呢?我们一个个的说。</p>
<p><img src="http://www.piginzoo.com/images/20200418/1587176164416.jpg" alt="" class="myimg" /></p>
<ul>
<li>先说说$L_s$需要的GT,即Character Sgementation(G)的GT:
<blockquote>
<p>Inside P’area,the class of the corresponding character is rendered as ground truth of the character segmentation.</p>
</blockquote>
<p>其实就把标注的单字的标注框,shrink一下,然后得到的多边形里面,都填充成对应的字符,就得到了Character Segmentation的GT。当然,真正计算的损失的时候,还需要把这个字符转成one-hot向量。</p>
<p>实际得到的GT是一个(H,W,C+1),C是字库字符数,+1是要算上背景,且第三个C维度是一个one-hot编码的张量。</p>
</li>
<li>
<p>然后说说$L_o$所需要的GT,也就是Order Map(H),准确的是说,是每一个$H_k$的GT。</p>
<p><em>吐槽一下,这块论文里写的确实太晦涩了,真心看不懂,想了半天也没想清楚,情不得已,不得不向何明航同学请教,在他的帮助下,终于搞清楚了。</em></p>
<p>先看原文:</p>
<blockquote>
<p>To generate the ground truth of order maps with character-level annotations, the center of Gaussian maps is firstly detected by computing the central points of characters bound- ing boxes. As Fig. 4 shown,2D Gaussian maps $\hat{Y}_k \in R^{h×w}$ with σ and expectation at central points are generated for each character. Then the order of characters is rendered for pixels inside $\hat{Y}_k$ area. Finally $\hat{Z}_k$ is normalized to [0, 1], to produce the ground truth $Z_k$ of $H_k$.</p>
</blockquote>
<p><img src="http://www.piginzoo.com/images/20200418/1587181174549.jpg" alt="" class="myimg" /></p>
<p>有几处让人糊涂的地方:高斯分布,是用高斯方式采样一些样本点么?如果是一堆点的集合,那文中提到的$\hat{Y}_k$是点集么?那$\hat{Y}_k$的值又指的是什么?像素值么?$\max\hat{Y}_k$是像素值最大的值么?后面还提到要把$\hat{Z}_k$归一化,可是$\hat{Z}_k$的值都是k,怎么归一化?难道变成均匀分布的概率值?</p>
<p>带着这些问题,请教了何明航,终于得到了合理的解释:</p>
<p>最核心的是$\hat{Y}_k$的理解,它其实是一个高斯过滤图:</p>
<p><img src="http://www.piginzoo.com/images/20200418/1587182593359.jpg" alt="" class="myimg30" /></p>
<p>他的值,其实就是概率密度函数的值,是一个概率值,凡是值比最大值小于0.5的点,值都被强制归0(就是上述公式里的处理)。
因为这些概率值都非常小,所以要做一个归一化(上面提到的)的动作,把值变到[0~1]之间,这个归一化动作也是有意为之的,因为,在Order Maps中的某个$H_k$,对应的区域就应该是文字区域,且这个区域表达的是“是前景文字的概率”,所以,归一化正好是为了满足这点。</p>
<p>这里我们需要思考一下,为何要这样做?也就是这个GT的insight:</p>
<blockquote>
<p>前面提过,每个$H_k$对应是第几个字符的中心位置,按理说,应该是一个像素的位置值作为GT。但是,这里的设计是,用一个均值在这个字符的中心位置(方差是超参),来表达这个中心位置,这样做,我觉得,可能是因为文字块是一个区域,用一个正态分布来表示这个区域,越靠近中心区域给的权重越高。在网络预测时候,尽量让这个中心点预测为前景(文字)的概率最大,然后越往周边,预测为前景(文字)的概率逐渐decay,这样个设计,来帮助“确定”字符的中心区域。<strong>“对!用一种正态分布的方式来表达字的中心位置!”</strong></p>
</blockquote>
<blockquote>
<p>再回忆一下论文中提到过,$H_k=S_k*Q$,$S_k$是order segement图[H,W,K]在axis=2上的<strong>切片</strong>,也就是对应的概率值(按照类别K进行softmax归一化的),这个切片图$S_k$然后要和一个$Q$相乘,$Q$是一个[H,W,1],每个点的值是[0~1]的概率值,是经过sigmod计算后的,这样的两个数相乘,得到了$H_k$,所以$H_k$的数都是特别小的数。现在,我们就是要做这个特别小的值的$H_k$的样本来了。</p>
</blockquote>
<blockquote>
<p>理论上,在每个Order Segmentation的$S_k$对应的图上,第k个字符的那些点的标签的GT,softmax值都应该是1;而Localization Map($Q$)的GT现在被我们把表示成了“正态分布归一化”的图。现在这两者相乘,也就是去模拟论文里$H_k=S_k*Q$的计算的话,那其实就是每个字符的“正态分布归一化”就是了。</p>
</blockquote>
<p>这里,我是觉得论文的“《Label Generation》”的式(2)中,将$\hat{Z}_k = k$,这个赋值就很无厘头了,而且,后面论文也说了,要讲这个$\hat{Z}_k$还要归一化,就更说明这个式子是有问题的,其实,在我理解,就应该是归一化后的值,也就是$\frac{\hat{Y}_k}{max\hat{Y}_k}$</p>
</li>
<li>
<p>有了每个Order Map的每个$H_k$的GT,就可以制作Localization Map(Q)的GT了</p>
<p>其实就是把各个$H_k$合成到一起,不过细节上还是有些不太一样。</p>
<p>实现上,是把$\hat{Y}_k$归一化后(注意噢!要归一化),合并到一起,而不是直接$Z_k$合并到了一起。还记得$\hat{Y}_k$和$\hat{Z}_k$的区别么?$\hat{Z}_k$是去掉了一些概率值比较小点而已。</p>
</li>
</ul>
<h3 id="202073更新">2020.7.3更新</h3>
<p>实现过程中,还是有一些问题,必须要再捋一捋:</p>
<h2 id="互训练mutual-train">互训练(Mutual Train)</h2>
<p>不是所有的标注都是有字符级别的bounding box的,成本太高,大部分的样本是只有一个字符串。
这种情况下,就可以考虑论文里说的互训练方式。</p>
<p>字符串样本,<strong>至少</strong>提供了两个信息:字符的顺序,以及字符是什么。能不能利用这些信息来训练网络呢?</p>
<p>答案是可以的。</p>
<h2 id="预测后的点是某个字的点是第几个位置的点">预测后的点(是某个字的点,是第几个位置的点)</h2>
<p>Character Segmentation网络预测出一个$\hat{G}$,这个预测是每个像素是啥字符。如果我的这个字符串里的每个字符都是唯一的话,</p>
<p>而Order Map,吐出来的$\hat{H}$(这里直接略过Localization Map:Q,和Order Segmenation:S),直接把两者结合(就是element-wise乘)的结果H拿出来了,这个预测是每个顺序上都有那些点是文字前景。</p>
<p>好,这个时候,结合这两个$\hat{G}$和$\hat{H}$信息,我们可以通过下面这个式子,得到了一些点:</p>
<p>$\Psi_h^k={(i,j)|\hat{H}(i,j)=k,Q(i,j)>\epsilon}$</p>
<p>$\Psi_g^k={(i,j)|\hat{H}(i,j)=k,G(i,j)>\epsilon}$</p>
<p><em>$\epsilon$=0.2</em></p>
<p>这里,用到了Q,Q是啥来着,是图片上的点是前景的概率,只有是前景概率>0.2的点,我才采用。</p>
<p>再通俗一点解释,</p>
<p>$\Psi_h^k$,就是拿着某个<strong>位置</strong>的汉字,去找这个对应位置的$H_k$图,然后根据Q的阈值,找出来是文字的点。</p>
<p>$\Psi_g^k$,就是拿着某个位置的<strong>汉字</strong>,去G中去找那些是这个汉字的点,然后再依据Q的阈值,找出这些点。</p>
<p>好,拿到这些点了,我们就可以算出两个损失:</p>
<h2 id="用这些点相互校验算损失">用这些点,相互校验,算损失</h2>
<p>我们会算用预测位置的$H_k$点(它可以确定是哪个字),去$G$中找到对应的点,来算这些点的损失。</p>
<p>我们会算用每个字,去找出$G$中这个字对应点,这些点是可以确定顺序的(因为标签字符串中这个字在第几个可以确定),来去找到对应位置为k的$H_K$中的点的损失。</p>
<p>$L_g^k=\frac{1}{| \Psi_h^k |} \sum\limits_{(i,j)\in \Psi_g^k} L_{CE}\Big\lgroup G(i,j),onehot(T(k))\Big\rgroup$</p>
<p>$L_h^k=\frac{1}{| \Psi_g^k |} \sum\limits_{(i,j)\in \Psi_h^k} L_{CE}\Big\lgroup G(i,j),onehot(T(k))\Big\rgroup$</p>
<p><img src="http://www.piginzoo.com/images/20200418/1587218126632.jpg" alt="" class="myimg30" /></p>
<p>为了更理解清楚讲清楚这事,我手工撸了图,可以更清晰的理解这事。</p>
<p>T是字符序列。</p>
<p>上面的图,是我预测出来G的每个像素点是哪个汉字的softmax概率(是个3370字库概述的巨大的多维概率分布噢)。</p>
<p>下面的图,是我预测出来每个$H_k$,一共有30个,代表最多30个字符,但是每个$H_k$上只有零星的一些点,表示这些像素组成了第k个字符,而且这些点是呈一个正态分布的,其均值位置就是汉字的中心。</p>
<p><strong>看这上图,我们来详细说一下第一个算$L_g^k$式子:</strong></p>
<p>$L_g^k=\frac{1}{| \Psi_h^k|} \sum\limits_{(i,j)\in \Psi_g^k} L_{CE}\Big\lgroup G(i,j),onehot(T(k))\Big\rgroup$</p>
<p>求$L_g^k$,可是,他居然出了一个下标是h的$ | \Psi_h^k | $,为何是拧着的呢?
这个细节很重要。$L_g^k$是啥损失,是识别是哪个字符的损失计算。</p>
<p>他用的是哪些点?他用的是$H_k$,即那些第k位置,是前景的点。</p>
<p>把这些$H_k$上的点,找到其对应的$G$上的点,G上的点是啥来?是哪个字符的softmax概率。
所以,用$T(K)$,即字符的one-hot表示,做一个交叉熵,算出损失。</p>
<p>最后除以$| \Psi_h^k|$做一个均一化,算是平均损失。</p>
<p>我们回顾一下,我们用在$H_k$中点,算了G中的损失,所以这种交叉玩法,就是论文里管他叫“相互训练 - mutual supervision training”的缘故。</p>
<p>再说<strong>第二个算$L_h^k$式子:</strong></p>
<p>$L_h^k=\frac{1}{| \Psi_g^k|} \sum\limits_{(i,j)\in \Psi_h^k} L_{CE}\Big\lgroup G(i,j),onehot(T(k))\Big\rgroup$</p>
<p>同上,这个是从G图中,找出样本中是第k位置的汉字,然后用这个汉字,去反向筛出来G中的那些是这个字的点。</p>
<p>然后拿着这些点,回到$H_k$中,与那些对应的点,算交叉熵。这些点的GT值是一个维度为N(30)的one-hot向量。</p>
<h2 id="提高置信度">提高置信度</h2>
<p>无论是$\Psi_h^k$,还是$\Psi_g^k$,都是需要被Q(是不是文字前景,而且不会太多,只会是以文字中心为均值的正态分布)的阈值给筛选掉很多。所以,如果剩下的就没几个点了,你的预测估计也不太靠谱了。</p>
<p>所以,要衡量你的置信度,可以用这个筛选下来的点的数量来当做置信度,来调节损失函数中的“贡献”,置信度低,计算损失的时候,权重就给小点。</p>
<p><strong>我们来算算G图上,某个字的置信度$\Phi_g$:</strong></p>
\[n_g^k=
\left\{
\begin{array}{l}
1 , \quad if \quad \Psi_g^k \ne \emptyset, \\
0 , \quad otherwise
\end{array}
\right.\]
\[\Phi_g = \frac{\sum_{k=1}^{\|T\|} n_g^k}{\|T\|}\]
<p><strong>我们来算算$H_k$图上,是这个位置的点的置信度$\Phi_g$:</strong></p>
\[n_h^k=
\left\{
\begin{array}{l}
1 , \quad if \quad \Psi_h^k \ne \emptyset, \\
0 , \quad otherwise
\end{array}
\right.\]
\[\Phi_h = \frac{\sum_{k=1}^{\|T\|} n_h^k}{\|T\|}\]
<h2 id="最后终于可以计算l_m了">最后,终于可以计算$L_m$了<a name="L_m"></a></h2>
<p>算一下G的损失:</p>
<p>$L_g=\frac{(\Phi_h)^\gamma}{|T|} \sum\limits_{k=1}^{|T|} L_g^k$</p>
<p>$\gamma=2$,$\gamma$是次方,不是简单的相乘啊,别看错了。</p>
<p>算一个H的损失:</p>
<p>$L_h=\frac{(\Phi_g)^\gamma}{|T|} \sum\limits_{k=1}^{|T|} L_h^k$</p>
<p>最后合到一起:</p>
<p>$L_m=L_h + \lambda * L_g$</p>
<p>$\lambda=0.2$</p>
<h2 id="参考-1">参考</h2>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/102493641">TextScanner阅读笔记</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/100683420">旷视研究院提出TextScanner:确保字符阅读顺序,实现文字识别新突破</a></li>
</ul>
<h1 id="附录优秀的ocr分享">附录:优秀的OCR分享</h1>
<p>跟文章主题无关,不过,顺道揉到此贴中吧,都是网上优秀的OCR的分享。</p>
<ul>
<li><a href="https://www.bilibili.com/video/av73805100?p=7">腾讯云上的一个OCR培训</a> ,一位女工程师讲的。</li>
<li><a href="http://www.julyedu.com/video/play/136">July七月的OCR识别课程</a>,</li>
<li><a href="https://yunqi.aliyun.com/2018/shanghai/review?spm=a2c4e.11153940.blogcont603444.8.5e612cfblAaE9b">阿里读光OCR负责人的分享</a>,剔除了低频字识别的方法</li>
<li><a href="http://www.mooc.ai/open/course/605">旷视的姚聪的视频的分享</a></li>
<li><a href="https://www.bilibili.com/video/av83837791?t=1889">旷视最近的一个分享</a></li>
<li><a href="https://mp.weixin.qq.com/s/z5hRafxepA4Zj5pbbK8HzA">百度小哥的一个分享</a></li>
<li><a href="https://www.iqiyi.com/v_19rvi9r9mo.html#vfrm=8-8-0-1">Valse的学术视频</a>,<a href="http://valser.org/webinar/slide/index.php/Home/Index/index/dir/20191017.html">对应的ppt</a></li>
<li>白翔老师的的一系列文章分享:
<ul>
<li><a href="https://mp.weixin.qq.com/s/P80VlmxoWLQ3Ut3tJvRNNQ">华科白翔教授团队ECCV2018 OCR论文:Mask TextSpotter</a></li>
<li><a href="https://mp.weixin.qq.com/s/4Tj92Mmj2-zOHfk1Tk167w">白翔:复杂开放场景中的文本理解</a></li>
<li><a href="https://mp.weixin.qq.com/s/0ysaJGNslckesv21o752FA">图像OCR年度进展 VALSE2018之十一</a></li>
<li><a href="https://mp.weixin.qq.com/s/Y7Xpe1DlhGR9XRB7GunGnA">白翔:趣谈“捕文捉字”– 场景文字检测 VALSE2017之十</a></li>
</ul>
</li>
<li><a href="https://www.iqiyi.com/w_19rsxii7cp.html">更早的一个OCR分享</a>,不过有点老2014的,参考用。</li>
<li>CSIG文档图像分析与识别专委会,这个公众号非常赞</li>
<li><a href="https://www.bilibili.com/video/BV1Gt4y127S6?t=3319">SFFAI58-文本识别专场,讲了TextScanner,白翔的学生讲的</a></li>
<li><a href="https://www.bilibili.com/video/BV1SE411Y7d2">金连文-基于深度学习的文字识别</a></li>
<li><a href="https://www.bilibili.com/video/BV1E7411t7ay?p=14">旷视x北大《深度学习实践》之文本识别</a>,姚聪讲的,2节课,很系统</li>
</ul>
有趣の每天
2020-03-02T00:00:00+08:00
https://www.piginzoo.com/life/2020/03/02/fun
<h1 id="前">前</h1>
<p>每天似乎经过很多,但是回望却什么也没有留下,不可以!搞个自己的微博,不用再被审查河蟹,记录下曾经每天看到的光怪陆离、有意思的、有意义、让我震撼的东西,就如同<a href="http://www.dapenti.com">打喷嚏</a>的<a href="http://www.dapenti.com/blog/blog.asp?subjectid=70&name=xilei">图挂</a>、<a href="http://www.dapenti.com/blog/blog.asp?subjectid=184&name=xilei">浮世绘</a>,潦草的涂抹就好,沉淀下来就好。</p>
<p>不懒了,搞起来……</p>
<p>【我喜欢的直通车】: <a href="http://www.dapenti.com">打喷嚏</a>、<a href="https://www.youtube.com/channel/UCFsbHZ_mIFElwDxypEZjKWA">方可成</a>、<a href="https://www.youtube.com/channel/UCE2tB8fPCGoMGAwwBMc7BuQ">OkButSoWhat</a>、<a href="https://v.qq.com/s/videoplus/1451044754">十三邀</a>、<a href="https://www.youtube.com/c/TVBS%E6%96%87%E8%8C%9C%E7%9A%84%E4%B8%96%E7%95%8C%E5%91%A8%E5%A0%B1TVBSSisysWorldNews">文茜的世界周報 </a>。</p>
<p>【我的豆瓣】:<a href="https://book.douban.com/people/piginzoo/">我的书单</a>,<a href="https://movie.douban.com/people/piginzoo/">我的电影</a></p>
<h1 id="20231015">2023.10.15</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=Cs_iPlrcP1w">加拿大地理10分钟速成</a>,快速了解加拿大地理。</li>
<li><a href="https://www.youtube.com/watch?v=NIaZ3QmvtdU">XJ棉花 引起中國民族主義大戰 TVBS文茜的世界周報 20210327</a>,听文茜客观的评价XJ。</li>
<li><a href="https://www.youtube.com/watch?v=ncv6XcyLbJQ">房地产企业是如何闪躲腾挪的</a>,有点开眼。</li>
<li><a href="https://www.bbc.com/zhongwen/simp/world-50060829">中东变局:关于库尔德人 你需知道的几件事</a>,3000万库尔德人的悲惨的过去、现在和未来,巴以冲突算不了啥。</li>
<li><a href="https://www.163.com/dy/article/H30C76KA05311J7S.html">被世界遗忘的加沙地带:人们挖地道走私炸鸡、炸弹和新娘</a>,加沙的地道战让我印象太深了。</li>
<li><a href="https://www.bilibili.com/video/BV1u4411d7yN/">Favicon不会中文的亚裔在中餐馆强行用中文点了一份中式凉菜</a>,哈哈哈哈哈哈哈。</li>
<li><a href="https://www.youtube.com/watch?v=0MODInLXIrI">解读《奥本海默》:30个场景,意象,与视听语言解析</a>,好吧,给我种了草。</li>
<li><a href="https://www.youtube.com/watch?v=XbiC4jofUzs&t=542s">奧本海默的傳奇一生,電影裡刪減的秘史!</a>,讲海默传奇一生的。</li>
<li><a href="https://www.youtube.com/watch?v=V-MFbZJ15_g">付鹏:逆全球化下的全球资产配置——“最好的时代结束了!”一个新的经济节点开始了,但是不太好 汇丰HSBC私人银行客户分享</a>,付鹏的分享,质量很高。</li>
<li><a href="https://weibo.com/tv/show/1034:4948899895377953">花30万买了一台报废法拉利,花半年时间翻新</a>,牛逼!</li>
<li><a href="https://video.h5.weibo.cn/1034:4949150450778185/4949151046435978">瓦依那+任素汐 《大梦》乐夏完整版。一首歌唱尽了人的一生。</a>,泪目了。</li>
<li><a href="我去过最高的地方!5345米攀登川西雪山乌库楚">https://www.bilibili.com/video/BV13m4y1q7Xh/</a>,太牛了,跟着up主一起登山、挣扎和放弃。</li>
<li><a href="https://www.youtube.com/watch?v=wCZnsOGDX5U">我为什么要转山?冈仁波齐朝圣之路</a>,Danni小姐姐的转山之旅。</li>
<li><a href="https://www.bilibili.com/video/BV1X3411z75u/">这才是全球最美公路,新国道219,青藏高原段完整版</a>,219国道,这辈子一定要走一遍的。</li>
<li><a href="https://video.weibo.com/show?fid=1034:4947427250339868">EUV光刻机,这是制造芯片的必须设备,是人类智慧与科技的结晶,世界上最精密的一种机器</a></li>
<li><a href="https://www.bilibili.com/video/BV1VW41147Fh/">【小高姐】酱牛肉 肉酥 筋软 味道香 三酱牛肉的秘诀哔哩哔哩</a>,这个必须收藏。</li>
<li><a href="https://www.bilibili.com/video/BV1414y167xJ">富二代家道中落,自我囚禁三年,沦为精神病人</a>,大千世界无奇不有,其实小哥貌似还很年轻。</li>
<li><a href="https://www.bilibili.com/video/BV14h4y1P7aa/">男女生活在山林,种菜带娃,享受低欲望生活</a>,和上面一样,都是疯子峰哥的作品,覆三观、大开眼。</li>
<li><a href="https://www.youtube.com/watch?v=X4otYJGByic&t=29s">陌生人——柴静对话圣战分子</a>,柴静制作,质量没得说。</li>
<li><a href="https://www.thepaper.cn/newsDetail_forward_24474033">澎湃:在亲人临终前,我们应该怎么做?
</a> 如何陪着心爱的人离开这个世界。</li>
<li><a href="https://movie.douban.com/trailer/298947/#content">舞迪斯科特</a>,鹿特丹电影节上的中国影片,一出现实的荒诞剧。</li>
<li><a href="https://www.youtube.com/watch?v=zP1K72bfoBU">十三邀:许知远对话何怀宏</a>,温和而坚定,是我仰慕的一种性格。</li>
<li><a href="https://www.youtube.com/watch?v=3z4pnBzTbP4">ChatGPT正在产生心智吗?</a>,这个讲chatgpt的,很赞。</li>
<li><a href="https://www.youtube.com/watch?v=ko9z9q0iIRs">红色高棉1</a>,<a href="https://www.youtube.com/watch?v=bWcJaAaR54k">红色高棉2</a>,多少了解了柬埔寨人民的悲惨历史。</li>
<li><a href="https://www.youtube.com/watch?v=iseyXDTCOR4">一口气就能看完日本历史</a>,4小时,乖乖,我承认我没有刷完。</li>
<li><a href="https://www.youtube.com/watch?v=Bff03gWjeCc">参观价值300万元的非洲豪宅</a>,来开开眼界。</li>
<li><a href="https://www.youtube.com/watch?v=11MPc9n9_xg">老房子改造过程完整视频</a>,几个小姐姐一起改造老房子,很解压。</li>
<li><a href="https://www.youtube.com/watch?v=tWmNN87VvcE">郭宇谈财富</a>,这个哥们是字节上岸的,又会理财的小鸣人。</li>
<li><a href="https://www.bilibili.com/video/BV1x14y167eb/">一 所 魔 幻 现 实 的 乡 村 小 学 !</a>,有梦想、情怀的足球老师。</li>
<li><a href="https://v.qq.com/x/cover/mzc0020028mcii8/h0046dng81f.html">许知远对话田浩江</a>,当我们唱起歌 苦难就消失了。</li>
<li><a href="https://www.bilibili.com/video/BV1zt4y1N7pu/">诺奖作家帕慕克:我们如何度过灾难</a>,认识了土耳其的国宝作家,<a href="https://book.douban.com/subject/1851385/">《我的名字叫红》</a>,<a href="https://book.douban.com/subject/36016812/">《瘟疫之夜》</a>。</li>
<li><a href="https://www.youtube.com/watch?v=Gyq0wpRet-I&ab_channel=Y%C2%B7%E4%B8%80%E7%B3%AF">馬世芳說「送別」+ 龍珣「送別」</a>,还有<a href="https://www.bilibili.com/video/BV1nP411S74y/">国内现存最早《送别》唱片的演唱者龙珣先生的一生</a>,让人唏嘘。</li>
<li><a href="https://video.weibo.com/show?fid=1034:4943313376051215">歌剧:幸福来敲门的叮咚</a>,好好听。</li>
<li><a href="https://video.weibo.com/show?fid=1034:4942726593183785">我什么档次能参观到汤臣一品的房子</a>,开眼界。</li>
<li><a href="https://m.weibo.cn/status/4943420617395132?sourceType=weixin&from=10D9095010&wm=9021_0002&s_channel=4&s_trans=6376147873_4943420617395132#&video">孟岩的投资课</a>,非常好的投资科普视频。</li>
<li><a href="https://www.bilibili.com/video/BV1YM4y117FD">从《三体》到《思想录》:会思想的人,将宇宙尽收囊中</a>,帕斯卡尔神奇的科学家。</li>
<li><a href="https://mp.weixin.qq.com/s/gvAT70CGmgG1e8k4YSTjsQ">很多人都处于这种顿悟的边缘,可是顿悟却迟迟不来</a>,阅读来理解这个世界。</li>
<li><a href="https://mp.weixin.qq.com/s/m8Ikx1VfbVqBCizEJlFVxQ">一无所有的年轻人,还配谈理想吗?</a>,年轻,还需要诗和远方。</li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
<h1 id="20234">2023.4</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=BKUIEEZkxI4">4年的荒岛建设过程</a>,夫妻俩的神奇荒岛建设过程,10个小时,过瘾。这小哥之前还来中国学过<a href="https://www.youtube.com/@RealKungFu">功夫</a>。</li>
<li><a href="https://www.youtube.com/watch?v=BHiHRR7I7y8">夫妻两人买下两个集装箱,花费四年将其改造成千万人梦想中的别墅</a>,神奇的造房过程,看的羡慕死了。</li>
<li><a href="https://www.youtube.com/watch?v=FtiaSn5iCg8">3 Years Alone In The Forest Building A Log Cabin</a>,21岁小伙,18岁开始在森林里造房子。</li>
<li><a href="https://www.youtube.com/watch?v=NB6te314Q14">“星舰”为何会爆炸?SpaceX能否帮助人类移民火星?</a>,李永乐老师讲星舰,通俗易懂。</li>
<li><a href="https://www.youtube.com/watch?v=jqfY3mekqtg&t=23s">Starship星舰轨道级发射的几个关键看点</a>,星舰科普。还有<a href="https://www.youtube.com/watch?v=tzwYHrrZvY4">这个</a> , <a href="https://www.youtube.com/watch?v=3hqbpzNw0Dg">这个</a>。</li>
<li><a href="https://www.youtube.com/watch?v=Bwx3BclIDxQ&ab_channel=%E7%BC%93%E5%86%B2%E5%B8%A6">自由主义</a>和<a href="https://www.youtube.com/watch?v=coaWe6R6CF8">保守主义</a>,新淘来的UP主,讲哲学通俗易懂。</li>
<li><a href="https://www.youtube.com/watch?v=sivliuOKRd8">人,为什么不能是手段?</a>,<a href="https://www.youtube.com/@philosophy_1">思想万有引力</a>的这个讲解铿锵有力。还有<a href="https://www.youtube.com/watch?v=DbtVWsSzUOQ">哈耶克</a>这集。</li>
<li><a href="https://www.youtube.com/watch?v=uhKawJ4diow">百万漕工衣食所系?</a>,<a href="https://www.youtube.com/watch?v=aP400t0c9bw">漕运改海运,大清从自救走向自毙</a>,一直听说过这个梗,不知道究竟啥意思,听完懂了,原来如此。</li>
<li><a href="https://www.youtube.com/watch?v=_IMww7gwIus">普通人成為有錢人的唯一方法,老高與小茉</a>,这期讲的非常有意思,发财基本靠运气,躺平但是要消息灵通。</li>
<li><a href="https://www.youtube.com/watch?v=visrCKe-hZo">阿海的幾次生死經歷</a>,一个中国人在美陆战队的生死经历。</li>
<li><a href="https://www.youtube.com/watch?v=9v91Om_q7s8">山東艦首次遠航 具有作戰能力嗎?</a>,看完才明白,中美之间差距太大了。</li>
<li><a href="https://www.youtube.com/watch?v=IbjKFLnhWP0">《绍宋》</a>,也算是网络爽文经典了吧。</li>
<li><a href="https://www.youtube.com/watch?v=NrO2h0qBfJU">日本电影,秘密花园</a>,越哥讲的一个神奇的女财迷的故事,哈哈。</li>
<li><a href="https://www.youtube.com/watch?v=MTQ01oJGMT4">瑞士梦境般的童话小镇,采尔马特 Zermatt</a>,我也想有朝一日,抬头便见仰望马特洪峰!</li>
<li><a href="https://www.youtube.com/watch?v=fw9t2eN5Xow">世界上最美的岛屿!断崖绝壁上的旷野之息,法罗群岛</a>,UP主太猛了,悬崖上的行走,在冰岛梦幻之岛上。还有这个<a href="https://www.youtube.com/watch?v=WWjtpN7604g">法罗群岛的世界尽头的足球场!</a>,记录了他的危险之旅。</li>
<li><a href="https://www.youtube.com/watch?v=yMcgd--dvr8">The KK Show 王志安</a>,王志安是个有意思的人。还有这集<a href="https://www.youtube.com/watch?v=DnTgCFh5hbU">The KK Show中國體制內的第二代</a>,讲的也很有意思。</li>
<li><a href="https://video.h5.weibo.cn/1034:4894429862101022/4895092249203964">台式电脑CPU,GPU的内部系统结构,主板,电源,散热和显卡等</a>,这个3D讲解太赞了。</li>
<li><a href="https://www.bilibili.com/video/BV15T411k75c/">“创业大学”Y Combinator的故事</a>,硅谷的摇篮之一。</li>
<li><a href="https://www.bilibili.com/video/BV1TV4y1Q7jc">工程师理想中的电子实验室配备什么?打造自己的家庭实验室</a>,虽然是硬件盲,但还是心向往之。</li>
<li><a href="https://www.bilibili.com/video/BV1ZP4y1q7pq">一口气看懂大明王朝,国产权谋剧巅峰之作,老戏骨云集</a>,早有耳闻,确实太牛逼了,我真的活不过3集。</li>
</ul>
<h1 id="20233">2023.3</h1>
<ul>
<li><a href="https://www.bilibili.com/video/BV1ua411H7ZB/?">《厌女》上野千鹤子</a>,女性的平权之路漫漫兮。</li>
<li><a href="https://video.h5.weibo.cn/1034:4872061575954493/4872063091477513">TT上出了一个新的少年滤镜</a>,瞬间让人泪目。</li>
<li><a href="https://www.youtube.com/watch?v=BMsyssBXRsQ">Ocean Ramsey Encounters GIANT 20ft Great White Shark</a>,这大鲨鱼,疯了疯了。</li>
<li><a href="https://m.weibo.cn/status/4873107548670689#&video">纽约街头采访一对幸福的灵魂伴侣</a>,soulmate,眼中流露的只有浓浓的爱。</li>
<li><a href="https://www.youtube.com/watch?v=cBXNbQIoCFE&t=14s">我为何20大后回国投资</a>,最近淘到了王海滨,一位前橡胶期货trader,他对政经的分析很不错。</li>
<li><a href="https://weibo.com/tv/show/1034:4873249285406732">如何科学地炒出一款美味的西红柿鸡蛋</a>,以科学的态度,去炒一盘鸡蛋西红柿,哈哈哈哈。</li>
<li><a href="https://video.h5.weibo.cn/1034:4874730394812436/4874874029873154">花三年造了一片荧光海</a>,有些事,值得人生花3年去做。</li>
<li><a href="https://weibo.com/tv/show/1034:4870791217741877?from=old_pc_videoshow">视障钢琴少女震惊评委</a>,好听到哭。</li>
<li><a href="https://www.bilibili.com/video/BV1nX4y1N7UB">散户vs华尔街世纪大战</a>,虽然UP主讲述的戏剧化一些并且带有意识形态,但是这个真实的事件确实精彩万分。</li>
<li><a href="https://www.bilibili.com/video/BV1Po4y1a7Rw">王小波外甥听劝放弃音乐搞事业,获财富自由</a>,很喜欢这个姚勇,和小波一样,很聪明、通透和善良。</li>
<li><a href="https://www.bilibili.com/video/BV1W84y1E78E">华尔街高频交易员,如何割大批韭菜</a>,华尔街也有被割韭菜的一天。</li>
<li><a href="https://www.youtube.com/watch?v=QikoqoZ9HCw&t=431s">卢麒元:如何跨越官僚垄断资本主义的陷阱完整版</a>,<a href="https://www.youtube.com/watch?v=rJKnnQFRNbk">卢麒元:税政改革——不流血的革命</a>,卢麒元老师讲的非常好,虽然我是自由派,也不是非常认同他的一些看法,但是不影响我非常欣赏卢麒元老师,一位爱思考、有担当和热爱这个国家的左翼经济学家。</li>
<li><a href="https://video.h5.weibo.cn/1034:4870609424023689/4870610083906297">李宏毅大佬讲解ChatGPT是怎样练成的</a>,逗逼李宏毅老师的讲解,深入浅出通俗易懂。</li>
<li><a href="https://www.bilibili.com/video/BV1MY4y1R7EN">万字科普ChatGPT-4为什么会颠覆人类社会</a>,Yjango大神讲chatgpt,是我看到做科普做的最好的。</li>
<li><a href="https://www.bilibili.com/video/BV1rj41137cr">一口气搞清楚ChatGPT牛X在哪?谁会失业?巨头商战…</a>,小林讲chatgpt,what?!哈哈哈哈,确实还讲的不错呢。</li>
<li><a href="https://www.bilibili.com/video/BV1K24y1V7qy">ChatGPT这一战,科技巨头将重新洗牌</a>,小姐姐为了讲chatgpt很努力了,做了个系列。</li>
<li><a href="https://wqw547243068.github.io/chatgpt">ChatGPT学习笔记</a>,网友推荐的gpt笔记,牛逼致死,需翻墙。</li>
<li><a href="https://www.bilibili.com/video/BV1GD4y1G7Fv/">放弃铁饭碗搞农业,一无所有【沈帅波】</a>,创业不易啊,但是,为何我总是不厚道地想笑呢,哈哈哈哈。</li>
<li><a href="https://sspai.com/post/78288">抛开分数,看看那些和学习有关的方法、价值和意义</a>,讲的略显牛逼,关于学习,博主确实强大无比,而且屌爆的是,还有<a href="https://www.youtube.com/watch?v=pY37IlfyATA&t=1415s&ab_channel=%E8%9E%BA%E4%B8%9D">视频版</a>!</li>
<li><a href="https://www.youtube.com/watch?v=bI_4qlmL2eQ&ab_channel=%E9%9D%92%E8%9B%99%E5%88%80%E5%9C%A31993">從不相信到相信,再到放棄,一個信仰者的内心自述</a>,听刀圣讲自己信仰建立又破灭的过程,体会独立思考对人的改变。还有<a href="https://www.youtube.com/watch?v=RZ3xY62xWDo">续集2:你知道你生活在一個 虛擬世界中嗎?人越老,對世界的理解越困惑,怎麽辦?</a>。</li>
<li><a href="https://www.bilibili.com/video/BV12g4y147cK">12年很长,12年一转眼就到了</a>,2分钟广告短片「爸爸与女儿的风景」浓缩父女之间12年的光阴,还有广告制作的<a href="https://www.bilibili.com/video/BV1P24y1x7QN/">番外篇</a>,很有意思。</li>
<li><a href="https://www.youtube.com/watch?v=TBzOZAjT3GE">沈dong的red轮盘</a>,<a href="https://www.youtube.com/watch?v=3-fjdrI8_ZM">2</a>,这个太劲爆了,反正我是开眼了,三观尽刷。</li>
<li>最近没刷越哥了,这3部,很赞:<a href="https://www.youtube.com/watch?v=R9NEiQbCIMw">【越哥】拍给成年人看的日本电影,适合一个人,深夜独享!</a>,<a href="https://www.youtube.com/watch?v=qzd7NQnfD2o">【越哥】一部“三观不正”的爱情电影,观众一边骂,一边却感动落泪!</a>,<a href="https://www.youtube.com/watch?v=8q6tSmJhYS0">【越哥】影后又一神作,至今无缘国内院线,说透了底层女性的悲哀和无奈!</a></li>
<li><a href="https://www.youtube.com/@junk_king">破烂儿王</a>,一位生活在纽约的精力旺盛的神奇小哥。</li>
<li><a href="https://www.bilibili.com/video/BV1N54y167T9/">【精酿入门】最流行的精酿啤酒风格! 10支必喝IPA</a>,最近馋了,迷上了精酿,口水ing…</li>
<li><a href="https://www.bilibili.com/video/BV1XF41187H8/">梁文道 刘擎 周濂: 年轻人为什么不快乐?</a>:锵锵三人行又回来么?这个系列节目很赞啊。</li>
<li><a href="https://www.bilibili.com/video/BV1dx4y1A7P3?spm_id_from=333.880.my_history.page.click">80万赞已到,我去天上吃饭了朋友们!</a>,行走于高空的电线潮人们的生活。</li>
</ul>
<h1 id="2023212">2023.2.12</h1>
<ul>
<li><a href="https://video.h5.weibo.cn/1034:4868052064600143/4868053902563239?display=0&retcode=6102">“苏珊大妈的孙子”</a>,唱《寂静之声》的英国胖哥,听醉了。</li>
<li><a href="https://weibo.com/tv/show/1034:4867665353965641?from=old_pc_videoshow">开卡车的篮球少年</a>,超励志的篮球哥,热爱可以改变一切。</li>
<li><a href="https://video.h5.weibo.cn/1034:4866573966704723/4866580134237008?display=0&retcode=6102">NHK事件之泪纪录片:流落至公交车站,一位无家可归的女性之死</a>,记住她“大林三佐子”,就是现代版的“被嫌弃的松子的一生”。</li>
<li><a href="https://www.ifanr.com/1534476?utm_source=rss&utm_medium=rss&utm_campaign=">45 岁硅谷富豪重返 18 岁</a>,我只能说,这帮有钱人的追求,完全超出了我们的想象力。</li>
<li><a href="https://www.bilibili.com/video/BV1vv4y1Q7Ko/">电影《碟中谍7:致命清算(上)》幕后花絮</a>,汤哥太拼了,冲这个制作的努力和拼劲,要去电影院支持一把。</li>
<li><a href="https://weibo.com/tv/show/1034:4866442919870501?from=old_pc_videoshow">80年代计划生育广告</a>,那时候人矿们还是充满了希望的。</li>
<li><a href="https://weibo.com/tv/show/1034:4864808114389000?from=old_pc_videoshow">一场事故,我“救了”两条人命!</a>,袁启聪老师讲了他撞车事故后,拯救了一个灵魂的故事,感动。</li>
<li><a href="https://www.bilibili.com/video/BV1PD4y1H7cM/?vd_source=9743f283e4385666cbcd0d6d08628d90">38岁小舅大年三十当众出柜</a>,被压抑的灵魂,终于得到了释放。</li>
<li>《叶卡捷琳娜大帝》<a href="https://www.youtube.com/watch?v=Hp2tWLx9HLY">第一季</a>,<a href="https://www.youtube.com/watch?v=Hp2tWLx9HLY">第二季</a>,<a href="https://www.youtube.com/watch?v=lEpUtsm1UWs">第三季</a>,一起来感受一下俄罗斯女沙皇的壮丽一生。</li>
<li><a href="https://video.h5.weibo.cn/1034:4861717805727769/4861722127761573?display=0&retcode=6102霸王别姬这七分钟">霸王别姬七分钟</a>,人鬼不分的年代。</li>
<li><a href="https://video.h5.weibo.cn/1034:4860483157819441/4860486883225463?display=0&retcode=6102">超级震撼的烟花</a>,太绚烂了。</li>
<li><a href="https://view.inews.qq.com/k/20230117A06G1R00">殷剑峰:财政的“钱”去哪了?</a>,感受下国家对居民侧的挤压。</li>
<li><a href="https://www.youtube.com/watch?v=W19chvY0-vw">泡沫經濟下的真實日本,1988vs2023對比太慘烈</a>,和小林之前做的日本系列比,这个也非常震撼,感叹日本经济帝国的陨落。</li>
<li><a href="https://www.bilibili.com/video/BV1ED4y1n7MD/">【睡前消息541】社会化抚养概论</a>,马督工抛出的这个理论,我真的很想吐槽,初心是好,但是,真的是人矿的高效开采呀。</li>
<li>淘到博物UP主“自說自話的總裁”,<a href="https://www.youtube.com/watch?v=iO_5T4eVv2c">金槍魚</a>、<a href="https://www.youtube.com/watch?v=e-0CvTyHy5E">石斑鱼</a>、<a href="https://www.youtube.com/watch?v=9QRT0g4moMQ">大黄鱼</a>、<a href="https://www.youtube.com/watch?v=Qc0gkU6Tphs">三文鱼</a>、<a href="https://www.youtube.com/watch?v=kUVBY9rz_9A">鮑魚</a>、<a href="https://www.youtube.com/watch?v=aZDgLKmWla4">龙虾</a>….,各种知识,太上头了,根本停不下来。</li>
<li><a href="https://www.youtube.com/watch?v=0JaqMiWKsk8">织田信长的故事</a>,
一口氣看完《武士時代》從織田信長到豐臣秀吉統一日本進攻大明,再到德川家康開啟幕府時代。</li>
<li><a href="https://www.bilibili.com/video/BV1DX4y1N7Qf">大唐Gang</a>,要不是真理局让这视频下架,我还真不知道这视频还火遍全球呢。</li>
<li><a href="https://video.h5.weibo.cn/1034:4858634434445340/4858666286586314?display=0&retcode=6102"> 1999年的中国发生了什么?【激荡四十年·1999】</a>,大象放映室的这个系列节目一如既往的优质。</li>
<li><a href="https://weibo.com/tv/show/1034:4856409905627267?from=old_pc_videoshow">梁朝伟是如何用眼神演戏的</a>,很喜欢他忧郁的眼神。</li>
<li><a href="https://www.bilibili.com/video/BV13i4y1S7Er">80后,怀揣20万人民币,北漂三无人员,移民加拿大后成功沦为房奴车奴孩子奴</a>,普通人的故事,最让人感动。</li>
<li><a href="https://www.bilibili.com/video/BV1v44y137f5/">普通人如何在现代围城战中艰难求生</a>,《这是我的战争》与萨拉热窝围城,萨拉热窝围城战,3年,悲惨,普通人永远是最弱势的。</li>
<li><a href="https://movie.douban.com/subject/3908423/?from=subject-page">夏日大作战</a>,超好看的日漫,刷完了!</li>
<li><a href="https://www.youtube.com/watch?v=Dm53S3YwdkM">《再见老张》</a>,喜剧大赛的诚心之作。</li>
<li><a href="https://weibo.com/tv/show/1034:4849562523992078?from=old_pc_videoshow">《月亮与四百万英镑》</a>,房市一哥“炒房教父”欧成效的故事!</li>
<li><a href="https://www.bilibili.com/video/BV1v64y1t7wh/?">40W私人订制的房车什么样?</a>,淘到了有意思的UP主两口子十三要和拳头,羡慕他们自由自在的房车生活。第一次认识他俩,是看他们<a href="https://www.youtube.com/watch?v=xcQnZq-Gmpc">爬华山自虐的视频</a>。</li>
<li><a href="https://www.youtube.com/watch?v=L2cDgxYUi6w">新疆最险的公路盘龙古道</a>,30多公里,600多个S弯,180多个急转弯,将来一定要去自驾。</li>
<li>最新的不明白博客:<a href="https://www.youtube.com/watch?v=5yvPgoclHk4">地方债会拖垮中国经济吗?</a>、<a href="https://www.youtube.com/watch?v=fHWvkLNNVxU">独裁者的终局与继承</a>,很好的节目,略偏右,不过瑕不掩瑜。</li>
<li><a href="https://www.youtube.com/watch?v=0JqBfYwQcqg">可控核聚变如何制造终极能源?</a>,美国的<a href="https://tech.ifeng.com/c/8LgND4kCi1g">可控核聚变历史性突破</a>,让我找来回形针的这个知识点复习复习。</li>
<li><a href="https://www.youtube.com/watch?v=ADp3WmFtyFA">【小岛浪吹】终章:江泽民, 是如何改变中国的</a>,恰逢老江同志驾鹤西去,算是小岛对他最好的悼念。</li>
<li><a href="https://space.bilibili.com/479817898/favlist?fid=779538498&ftype=create">王纯迅的通天塔 - 我对世界的基础认知</a>,淘到了个神人,王纯迅,他的通天塔系列很赞,另外,他的定投策略,我也复现了一遍,作为我的ETF主力策略。</li>
<li><a href="https://www.toutiao.com/video/7164377185984184836">探访二环内居住地下室的北京人,一住就是30年,看什么感受</a>,人间浮世绘。</li>
<li><a href="https://www.youtube.com/watch?v=peMdyInVXwk">纪录片:书记</a>,书记 2009 郭永昌,记录真实官场。</li>
<li><a href="https://www.youtube.com/watch?v=jQIzQyTKbRk">纪录片:中国市长</a>,2015,大同 ,记录真实官场。</li>
<li><a href="https://www.rijksmuseum.nl/en/johannes-vermeer">维米尔de在线画廊</a>,跟着讲解一起欣赏大师,酷。</li>
<li><a href="https://www.bilibili.com/video/BV16P4y1w7zE">解读博尔赫斯:作家的作家、幻境的建筑师</a>,是时候可以读一读博尔赫斯的作品了。</li>
<li><a href="https://www.bilibili.com/video/BV1SG4y1S72w">四瓶大可乐换俩个阿富汗小女儿咯</a>,阿富汗的小女孩们,生在一个战乱的世界。</li>
<li><a href="https://www.bilibili.com/video/BV1Cs411Z7Gi">《特殊交易》</a>,小姐和小朋友的故事。</li>
<li><a href="https://www.bilibili.com/video/BV1gM41127ZP">38岁,创业10年烧掉20亿:你做好赔光的准备了吗?</a>,创业不易,蜜芽的创始人讲她的奋斗史。</li>
<li><a href="https://www.youtube.com/watch?v=rbz8c99NjxI">猩猩进化论</a>,喜剧大赛作品,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。</li>
<li><a href="https://www.youtube.com/watch?v=0M9PwpjcP_U">FTX破产,加密貨幣金童跌落神坛</a>,又一个金融骗子的故事。</li>
</ul>
<h1 id="2022117">2022.11.7</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=-f7070k1MXA">【小岛浪吹】蛤王历险记,江核心是如何渡过大跃</a>,小岛的整个江核系列,让我们从多方面了解那些神秘的领导人。</li>
<li><a href="https://www.bilibili.com/video/BV1xz411b7pD">28定律与幂律分布</a>,妈咪说给我们科普幂次分布。顺道推荐一下<a href="www.latexlive.com">妈咪说的latex在线工具</a>,相当赞,<a href="https://www.bilibili.com/video/BV14g4y1q7pb">视频介绍</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1mB4y177Fg">《眩:北斋之女》</a>,葛饰北斋的三女荣的半生的小说,好喜欢这个奇女子。<a href="https://movie.douban.com/subject/25872959/">动画版</a>也很好看。结尾的富士越龙图,让我难忘。</li>
<li><a href="https://www.youtube.com/watch?v=ERcBr9y1qg4&t=6342s">Getting Things Done冯唐论成事心法</a>,冯唐是我很佩服的一个人,做啥啥成,他来讲讲他的成事心法,这碗鸡汤,得干。同样味道的<a href="https://www.youtube.com/watch?v=H_3Ue1Y1GJ4&ab_channel=WildChinaTravel">另外一碗</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1N54y1y7nE">宝万之争</a>:金融教科书级操作,起底宝能股市围猎万科全过程。还有<a href="https://www.bilibili.com/video/BV14h411X7qn/">下</a>。想起来看这个,是因为读到冯唐曾在当年也是这个故事里的“华润”有过一段职业经历。</li>
<li><a href="https://www.youtube.com/watch?v=0U8ZT0nVPEI">一个视频彻底看懂美联储是如何加息的? - YouTube</a>,老听说加息加息,到底细节是什么,来看这个。</li>
<li><a href="https://www.bilibili.com/video/BV178411s727/">日元崩盘, 日本国债闪崩的背后…</a>,小林的日本失去30年的系列最后一个,果然没失望。</li>
<li><a href="https://mp.weixin.qq.com/s/oMF_SpiOUrfQlaYEkSs-TA">戈尔巴乔夫难题:水浅的地方,石头都被摸完了</a>,详细地讲述了戈尔巴乔夫的努力和挣扎,以及苏联的波折命运。可以配合着马前卒的<a href="https://www.bilibili.com/video/BV1XG411G7ZE/">【睡前消息481】苏联解体前,戈尔巴乔夫的中国形象</a>一起品鉴。</li>
<li><a href="https://www.bilibili.com/video/BV1Vd4y1i7VB/">毫无规则,随心所欲的生活</a>,浮生一日的有意思的一集。</li>
<li><a href="https://mp.weixin.qq.com/s/s7f6jqbgfXcOxAJcjpvq-Q">一个量化CTA策略基金经理的投研独白</a>,这个CTA投资大神的分享很干货。</li>
<li><a href="https://weibo.com/tv/show/1034:4822193067196484?from=old_pc_video">《信号》</a>,爱了爱了。</li>
<li><a href="https://www.youtube.com/watch?v=iR8ggJ1mRyQ&t=365s&ab_channel=%E5%A4%A9%E4%BA%AE%E6%99%82%E5%88%86">集權之路驚心動魄</a>,这个上位过程确实惊心动魄,堪比宫斗大剧。</li>
<li><a href="https://www.bilibili.com/video/BV19g4y1q79q/">打开日本帝国疯狂开关的“226兵变“事件</a>,来,补一补日本军国转型的226兵变。还有<a href="https://www.bilibili.com/video/BV1Ez4y1m7s5/">这个</a>。</li>
<li><a href="https://www.youtube.com/watch?v=b_31abkf1h0&ab_channel=%E4%B8%8D%E6%98%8E%E7%99%BD%E6%92%AD%E5%AE%A2">蔡教授的分享</a>,让我更了解了我党和他的本质。</li>
<li><a href="https://www.bilibili.com/video/BV1SG4y1H7W4/?spm_id_from=pageDriver">坤姐闯江湖</a>,大姐是留在悉尼的博士,娓娓讲来澳国的平日生活。</li>
<li><a href="https://www.bilibili.com/video/BV1SD4y1B7Rd">70年代大滞胀为何发生?对当下通胀有何启示?</a>,这次的通胀,更像70年的通胀,一起来详细回顾一下吧。</li>
<li><a href="https://live.csdn.net/room/Hansen666666/r6Cj8k6S">前沿科技创新创业趋势分析(2022)</a>,陆奇博士带我一窥未来,是最近两年还会对科技心动的视频。</li>
<li><a href="https://mp.weixin.qq.com/s/ZRAo2k8y0lnEeqk8fn9Bgg">殷昱国</a>,看着网飞为他拍摄的<a href="https://www.bilibili.com/video/BV16g411Y7Vd/">纪录片</a>,内心澎湃,他如愿的留在了他的精神之地,罗马尼亚,在他十七岁那年,在他飞翔在那里仅仅80天之后。也结识了罗马尼亚诗人<a href="https://baike.baidu.com/item/%E7%B1%B3%E5%93%88%E4%BC%8A%C2%B7%E7%88%B1%E6%98%8E%E5%86%85%E6%96%AF%E5%BA%93/8253798?fr=aladdin">爱明内斯库</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1Ni4y1U7qu">白银之战(上):一个家族,教美国做事!</a>,<a href="https://www.bilibili.com/video/BV1ZT4y1r7Un">白银之战(下):三兄弟决斗华尔街,树立美式“大而不能倒”新标杆</a>,这个太精彩了,一个家族挑战一个国家,美国期货历史上的大戏。</li>
<li><a href="https://www.bilibili.com/video/BV1ve41157Bu">成为CEO前的日子:睡工地毛坯房,一天搬3车水泥…</a>,小概率的人生蜕变,让人唏嘘。</li>
<li><a href="https://www.bilibili.com/video/BV14K4y19715/">索洛模型</a>,这个必须要了解下,否则不理解,投资为何越投越赔呢。</li>
<li><a href="https://www.youtube.com/watch?v=Y2cGwnAi-xM&t=394s&ab_channel=%E5%94%B1%E8%B7%B3%E8%97%A5%E5%B8%AB%E5%A5%B6%E9%85%AA%E7%B3%95Nanoak">Kyoka</a>,日本的美女街舞大神,还参加过国内的<a href="https://www.youtube.com/watch?v=5bZoHLC0hno&t=196s&ab_channel=YOUKUSHOW-GetAPPnow">街舞节目</a>.</li>
<li><a href="https://www.youtube.com/watch?v=mBLSdyCDIsU">没有学习的人不伤心</a>,这集喜剧大赛,让人笑中带泪,体会到差生的不易。</li>
<li><a href="https://www.youtube.com/watch?v=e2C226dzP_E&ab_channel=%E6%91%A9%E5%B0%94%E5%AE%B6%E7%9A%84%E9%99%88%E6%B3%B0%E5%B1%B1">工藤静香</a>,妥妥人生赢家啊。灰常八卦的娱乐八卦。</li>
<li><a href="https://csdiy.wiki/">CS自学指南</a>,牛逼致死,一位北大哥们整理的。</li>
<li><a href="https://zhuanlan.zhihu.com/p/440237320">如何购买性价比超高的4k显示器</a>,显示器坏了,打算买个27寸4k的,发现了这篇帖子,真专业!</li>
<li><a href="https://video.h5.weibo.cn/1034:4817673629138952/4817673961604864">高端的视频往往只需要最简单的剪辑方式</a>,哈哈哈哈哈哈哈</li>
<li><a href="https://h5.video.weibo.com/show/1034:4822042214858761">怎么和孩子愉快交流</a>,哈哈哈哈哈,我学会了。</li>
<li><a href="https://github.com/liu673cn/box">TVBox 开源版</a>,好东东要低调分享,谁用谁知道。</li>
<li>马斯克在下一盘很大的棋:<a href="https://www.ted.com/talks/gwynne_shotwell_spacex_s_plan_to_fly_you_across_the_globe_in_30_minutes">SpaceX’s plan to fly you across the globe in 30 minutes</a>,<a href="https://www.ted.com/talks/jennifer_heldmann_spacex_s_supersized_starship_rocket_and_the_future_of_galactic_exploration">SpaceX’s supersized Starship rocket</a>,<a href="https://www.ted.com/talks/lucianne_walkowicz_let_s_not_use_mars_as_a_backup_planet">Let’s not use Mars as a backup planet</a>,<a href="https://www.ted.com/talks/melodie_yashar_how_to_build_for_human_life_on_mars">How to build for human life on Mars</a>。</li>
</ul>
<h1 id="2022926">2022.9.26</h1>
<ul>
<li><a href="https://weibo.com/tv/show/1034:4812624597286941?from=old_pc_videoshow">世界奇妙物语:Air医生</a>,小栗旬演的一集,有点意思。</li>
<li><a href="https://video.h5.weibo.cn/1034:4811774663524428/4811786447229409">陈珊妮2022「调教X教条」啰嗦体官方影片</a>,居然没有被和谐。“我们是自由的!”</li>
<li><a href="https://mp.weixin.qq.com/s/djCmV9NPAkYCUbZlPFSYFQ">别高价求了,这15本书再版了</a>,8错,收藏一下。</li>
<li><a href="https://video.h5.weibo.cn/1034:4811199150489626/4811200841652647">2022年的火人节</a>,6万人在没有手机信号的内华达州的黑岩城沙漠里呆了7天,创造出一个梦幻之地。还有这个<a href="https://video.h5.weibo.cn/1034:4812101219450895/4812103854066678">黑岩沙漠参加“火人节”</a>。</li>
<li>又淘到一个UP主<a href="https://space.bilibili.com/21262795">钞能力毛毛</a>,话题都不错,<a href="https://www.bilibili.com/video/BV1rY4y1a7E7">揭开《广场协议》之谜,谁才是让日本经济失落30年的真狼?</a>,<a href="https://www.bilibili.com/video/BV1kS4y1s7nC">明天不会更好吗?2023债务危机大预测</a></li>
<li><a href="https://www.bilibili.com/video/BV1BW4y1t76x?p=1">【投资论·2022】洪灏对话徐小庆:投资要义</a>,第一次知道徐晓庆,不错的一位经济大咖。</li>
<li><a href="https://mp.weixin.qq.com/s/otzngMQ6EdsCHowB5iH1fA">很认真地聊一下房地产</a>,智先生的文章质量很好,<a href="https://mp.weixin.qq.com/s/-ZPxyfWNlODOqrWBcEjiQQ">认真聊一下全球经济的恶化程度</a>写的更详细,bookmark一下,未来回来看看。</li>
<li><a href="https://www.bilibili.com/video/BV1GP4y1Y7iL">你买房子的钱,都花哪儿了?</a>,肢解一下房价到底都由哪些内容构成,结论是,大部分都被国家、银行拿走了。</li>
<li><a href="https://mp.weixin.qq.com/s/K7JvMop6Pm3eMHvo_PW0ug">花50年建一个不能住的“城市”,有什么意义?</a>,从27岁到77岁,艺术家Michael Heizer在美国一片荒无人烟的沙漠中,完成了当代艺术史上最大的雕塑:一个《城市》。</li>
<li><a href="https://www.bilibili.com/video/BV1wa41137ha">不懂为何房价跌、就业难?读懂经济,你缺的是上帝视角</a>,新淘来了经济up主,塔哥FM,讲的深入浅出的中国经济,看出了命运。</li>
<li><a href="https://www.bilibili.com/video/BV1st4y1A74z?spm_id_from=333.999.0.0">与日本和美国相比,中国的房地产走到哪一步了?</a>,另外一个up主,路财主,一样讲的通俗易懂,对房价,不看好。这个<a href="https://www.youtube.com/watch?v=f1JBgNcCbWQ">我们处于什么样的时代?</a>也很警示。还有这个<a href="https://www.youtube.com/watch?v=P4K-P7equkI&t=1223s">老龄化的中国会是什么样子?(修错后)</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1nd4y1M789?spm_id_from=333.880.my_history.page.click">伊朗爆发头巾之乱,人们今天流的眼泪,是当年脑子进的水?</a>,赵灵敏老师,把伊朗的世俗化被打断,宗教治国的过程讲的很清楚。</li>
<li><a href="https://www.bilibili.com/video/BV1BV4y1K7C7">V圈已经一半是饭圈的形状了【老蒋V圈观察2.0上】</a>,老蒋总是一副神神叨叨的样子,不过,通过他还是窥视了虚拟主播圈的狂魔乱舞。</li>
<li><a href="https://www.bilibili.com/video/BV1Qg411275n">我去送了一个月外卖——其实也就是上了一个月班</a>,当个外卖员,真心不易,生活不易,人生不易。</li>
<li>【力哥说理财】基金生财一课通 09 纯债基金实战攻略<a href="https://www.bilibili.com/video/BV1MJ411H7JD?spm_id_from=333.880.my_history.page.click">(上)</a>和<a href="https://www.bilibili.com/video/BV1WJ411J79q?spm_id_from=333.880.my_history.page.click">(下)</a>,讲的真心不错,对纯债基金了解了深入了很多。</li>
<li><a href="https://www.youtube.com/watch?v=QfsQ1T_JcS0&t=637s">如何在Fidelity挑选共同基金 (Mutual Fund)?How to pick Mutual Fund from Fidelity?</a>,UP主<a href="https://www.youtube.com/channel/UC5RtC9dKUJ9noJ4C6N4XnmQ">跟我一起来谈钱</a>,主要做美国资产投资,将来可能用得到,她的视频我都会看看。这期讲米国基金咋买。</li>
<li><a href="https://www.youtube.com/watch?v=ZuItzDktDiI">为什么你应该去听Podcast播客?-我最爱的播客推荐(财经, 知识和故事类Podcasts)</a>,胖哥的这期podcast推荐质量非常高!我立刻下载了软件,订阅他说的planet money和this American life。</li>
<li><a href="https://www.youtube.com/watch?v=sTQQUKWb0G4&ab_channel=MoneyXYZ">财富人生和安全边际,我和贫穷的故事</a>,胖哥除了讲道理,讲故事能力也超强啊,这集让我对他有了深入了解,还有一种莫名的感动。</li>
<li><a href="https://www.youtube.com/watch?v=eJV1LI6GPlk">【小岛浪吹】蛤王崛起!聊聊江是如何进入党,如何发迹</a>,原来江同志这么厉害!</li>
<li><a href="https://www.youtube.com/watch?v=ovlA_5J6FJs">全世界都在薅欧洲羊毛!</a>,所长林超这个视频还是有些信息量的。</li>
<li><a href="https://www.youtube.com/watch?v=Q99F4Kqxx04">【精彩】神话对冲基金LTCM的世纪大崩盘</a>,小林每集都不会让人失望,听LTCM的故事吧。还有这集<a href="https://www.bilibili.com/video/BV1ue4y1C7FR?spm_id_from=333.880.my_history.page.click">Web3.0到底是怎么回事儿?</a>,给咱们一个这些虚拟货币、NFT、Web3啥的全景视图。</li>
<li><a href="https://www.bilibili.com/video/BV1qP411H7nW/?spm_id_from=333.880.my_history.page.click">我曾3次被奥斯卡·王尔德打动《夜莺与玫瑰》《道连格雷的画像》《自深深处》</a>,小姐姐的声音太好听了,跟着她,了解了王尔德的更多。</li>
<li><a href="https://www.youtube.com/watch?v=M_5H4tXf6i8&ab_channel=SharingSocial">叫魂:1768年中国妖术大恐慌</a>,政治性运动,由来已久,之前听过这个词,但是真正理解是听了“江湖满地一渔翁5440”的视频号的的叫魂的讲解之后,可惜,视频号无法网页分享俩接,就找了另外一个。</li>
<li><a href="https://www.bumingbai.net/">不明白播客</a>,新淘到的一个播客,不错,话题我都很感兴趣,过于敏感,就不贴上来了。是纽约时报和华尔街日报、新华社的曾经记者袁莉创办的。</li>
<li><a href="https://video.h5.weibo.cn/1034:4814700991676462/4814706000530570">魔术师大卫·布莱恩 做客肥伦秀表演近景魔术</a>,太惊悚了,太惊悚了。</li>
<li><a href="https://m.weibo.cn/status/4814630708314864?sourceType=weixin&from=10C9295010&wm=9021_0002&featurecode=newtitle">人陷入流沙后该怎么办?</a>,奇怪的技能又增加了。</li>
</ul>
<h1 id="202297">2022.9.7</h1>
<ul>
<li><a href="http://www.stats.gov.cn/tjsj/zxfb/202202/t20220227_1827960.html">中华人民共和国2021年国民经济和社会发展统计公报</a>,这个好全,很多经济数据都有,省的自己再去归纳了。</li>
<li><a href="https://www.bilibili.com/video/BV1Me4y1Y7G5">来杰哥家康康!全屋智能化!游戏房!真的蛮大哦!</a>,惊了,这大house和游戏装备、直播器材,真乃宅男宅女梦想之所啊。</li>
<li><a href="https://www.bilibili.com/video/BV13U4y1k7Vx">我养了一朵云</a>,科技宅男的脑洞之作,一个超治愈的宠物云。</li>
<li><a href="https://www.bilibili.com/video/BV1gb411E7C8">麦克斯韦方程组是什么?电场和磁场有什么重要联系?李永乐老师讲最美物理公式</a>,终于跟着李永乐老师学习了传说中的麦克斯韦大方程,不难吆。</li>
<li><a href="https://www.bilibili.com/video/BV12Y411h7NV">up主鹦鹉梨:“纯欲”是我讨厌的时尚风潮,它让性感分出高低贵贱。</a>,关注鹦鹉梨一段时间了,之前是被她的贫嘴折服,这次知道了她的故事,人人不易啊。</li>
<li><a href="https://www.bilibili.com/video/BV1cJ411j7qf">「干货」十万块的教训!考雅思和上语言班之间该如何抉择?</a>,感谢小破站,又认识了一个有意思的小姐姐<a href="https://space.bilibili.com/8736958">他塔拉</a>,她的雅思箴言很有价值。有意思的小姐姐的,<a href="https://www.bilibili.com/video/BV13G4y1Y7Yf">这么美好的夜晚,以后都不会有了吧</a>,<a href="https://www.bilibili.com/video/BV1Ng411Q7P5">24岁,我决定以后再也不学英语了</a>,<a href="https://www.bilibili.com/video/BV17S4y1S7eM">我靠我考上哈佛了!!!!!!!</a>,都非常有意思,我就喜欢这样有趣的人。</li>
<li><a href="https://www.bilibili.com/video/BV13k4y117Mv">五年级离开学校,在家自学8年——在应试教育的夹缝中生长</a>,MOON穷尽她的积蓄去采访的8年自学成才的小哥哥,很有趣的人生,也知道了他的<a href="https://flow.yitopia.co/board/MvpypZx2GwRJ">自学学社</a>,一群了不起啊的年轻人!</li>
<li><a href="https://www.bilibili.com/video/BV1GP411L7wj">美国连放4个大招围追堵截!试图掐断中国芯片的未来?</a>,不带价值观哈,看这个视频,能感受到芯片行业之难。</li>
<li><a href="https://www.bilibili.com/video/BV1Jd4y1G7Lf">【何止】既不“专业”,也不挣钱,我真怕,这样的片子以后再也没人拍了《村小的孩子》</a>,留守儿童,仿佛在重复他们父辈的悲剧,底层人向上晋级太难了。</li>
<li><a href="https://www.bilibili.com/video/BV1vX4y1K7iQ">法国、英国、西班牙、德国、俄罗斯文艺复兴巴洛克建筑艺术史</a>,陈文捷老师又更新楼!</li>
<li><a href="https://www.bilibili.com/video/BV1Ca411G7pi">【睡前消息476】四川高温先保谁,社会主义公民请选择</a>,马督工讲出了资源平衡的难处,穷人和富人的利益如何统一?很难。</li>
<li><a href="https://space.bilibili.com/440531053">UP主通识哲学</a>的系列视频:<a href="https://www.bilibili.com/video/BV1cW4y1B7dG">道德与立场</a>,<a href="https://www.bilibili.com/video/BV1Y14y1x7pg">平等与自由</a>,<a href="https://www.bilibili.com/video/BV1QA4y1f7B8">你不知道的事</a>….等,都很有意思,虽然刺耳,但可以让你思考。</li>
<li><a href="https://www.bilibili.com/video/BV1M34y1B7yr">【纪录片/自译中字】【佐田雅志】长江(Yangtze)(1981年)</a>,一部珍贵的纪录片,这个日本人花光了他的积蓄,为我们留下了一部宝贵的历史。</li>
<li><a href="https://www.bilibili.com/video/BV1td4y1d71E">一个普通男孩的10年,24岁当保安,少走四十年弯路</a>,一个普通人对命运的抗争,看的我眼眶有些湿润。</li>
<li><a href="https://www.bilibili.com/video/BV1xr4y157BY">【不正经研究】非洲有多少将军是石家庄毕业的?</a>,我们给黑非洲播下的各种恶之果。</li>
<li><a href="https://www.bilibili.com/video/BV1MW4y1S79Z">【睡前消息455】阆中核酸自费,“普通”中国城市没钱了。</a>,马督工讲出了中国财政之困。</li>
<li><a href="https://www.bilibili.com/video/BV1EN4y1T7aK">本雅明诞辰130周年,是时候好好读读他的书了【周可】</a>,跟着周可老师,认识了本雅明,很喜欢。</li>
<li><a href="https://www.bilibili.com/video/BV18T411E7MU">梁永安、林白、刘铮、罗翔、王德威:文学应抓住“此刻”的时代精神</a>,认识更多的文学青年,聆听名家的思辨。</li>
<li><a href="https://www.bilibili.com/video/BV1NY4y1j71V">20分钟详解日本经济泡沫</a>,小林的经济视频越做越优秀了。</li>
<li><a href="https://www.bilibili.com/video/BV1Ca411873G">舒曼「夢幻曲」為何是世紀經典?</a>,真好,喜欢这种娓娓道来的小白讲解。</li>
<li><a href="https://www.bilibili.com/video/BV1ua411L7Vj">刘瑜:普通人关心政治还有意义吗?</a>,听过她在看理想的节目,这次出了书,果断买一本。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4807201693565072">吃柠檬鸡爪</a>,服了这位表演者了。</li>
<li><a href="https://m.weibo.cn/status/4807380423148880">一本正经在父母面前撒谎</a>,哈哈哈哈哈哈。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4805357491650613">再次见你</a>,被暖哭了。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4804322085765156">从五个方面解读美军为什么强大</a>,美军确实太强大了。</li>
<li><a href="https://mp.weixin.qq.com/s/5qVvlTMu6rgHH8qi8cfsjA">70岁老太,花50年囤了一屋子垃圾!网友:这不就是我奶奶?</a>,恩,是我妈!</li>
<li><a href="https://mp.weixin.qq.com/s/JB-XCOenaHVMDb5dn9FdyA">LP江湖20年:氪金者、撒币者、转身者</a>,中国投资界20年。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4803490455945357">大神Animist定格动画新作合集</a>,酷毙了!</li>
<li><a href="https://h5.video.weibo.com/show/1034:4803335929397260">消防灭火与自救逃生的几个方法</a>,消防常识,希望永远用不到。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4801725442490372">【何同学】我做了一个自己打字的键盘.</a>,何同学难道已经成为了专职科技博主了么?</li>
<li><a href="https://video.h5.weibo.cn/1034:4802819782541421/4802820081457205">这视频真不赖</a>,把媚上和忽悠领导演绎到了极致。</li>
<li><a href="https://m.weibo.cn/status/4803102551837904">小狗狗等主人</a>,主人因出门办事晚上便没有回家,狗狗却一直在门口望着主人回家的路,思绪万千了一晚上,等到主人回来,狗狗虽然很开心,但是看得出它在强装镇定不哭。</li>
<li><a href="https://www.douban.com/note/834859707">道士下山参加高考</a>,你永远不会体验的人生。</li>
<li><a href="https://www.bilibili.com/video/BV1xr4y1j7yL">元宇宙何日实现?扎克伯格说了不算,这个硅谷天才说了算</a>,卡神卡神卡神!!!</li>
<li><a href="https://mp.weixin.qq.com/s/6PlsH6FHAFaTY2Zmw-4rwQ">在高铁争夺战中,为什么有些地方成功了,有些没有?</a>,高铁背后,是地方利益之争。</li>
<li><a href="https://video.h5.weibo.cn/1034:4793393814110242/4793414288147586">一次性讲清楚中国正在征收的18种税</a>,看懂中国的税收体制。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4792918905651269">《囚》</a>,中国人和房子,永远的痛。</li>
<li><a href="https://mp.weixin.qq.com/s/uhfcz7iR3wZxoguuN6uvvg">在北京精英中学和宁夏扶贫中学,“努力”有什么区别?</a>,让我想起英国那部经典的人生七年。</li>
<li><a href="https://mp.weixin.qq.com/s/fHf8mu6gfn51Np6Yvvm2ug">特斯拉Model 3拆解报告</a>,喜欢这种硬核文章。</li>
<li><a href="https://mp.weixin.qq.com/s/564vA2LbXqFm7EqrExmYyw">这位B站活菩萨,拯救了70万大学生的期末</a>,一位“高数的神”,南京理工大学的学导。他的<a href="https://www.bilibili.com/video/BV17g411R7P1">我眼里的热爱与生活</a>,是给小学弟们的真诚对话。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4787366582484994">岛国40年传承的街头小摊车,二代目摊主顶着喷枪徒手烤肉</a>,真好,生活如此简单。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4787937729249306">1994年王杰与齐秦参加节目时互飙对方的成名曲</a>,两个天王的飙歌,爽死了。</li>
<li><a href="https://www.bilibili.com/video/BV1D34y1n7Bw">雨林故事</a>,太逗比的赵忠祥。</li>
<li><a href="https://c.m.163.com/news/a/HC0NUN4M000187OQ.html">为了捍卫尊严,我86岁的法国邻居想去万里之外养老</a>,很暖很暖的小故事,老人的尊严。</li>
<li><a href="https://www.youtube.com/watch?v=dhW4XFGQB4o&t=19s&ab_channel=PrimitiveTechnology">7年了,哥们终于造出青铜器了</a></li>
<li><a href="https://mp.weixin.qq.com/s/TLWtWcgQsJ7VQXQeXMpA-w">当资产负债表不想奋斗了</a>,年轻人们都想躺平了。</li>
<li><a href="https://www.youtube.com/watch?v=KfVTbsRMk60">真實錄像,雪豹獨自面對藏獒群</a>,雪豹的纪录片。</li>
<li><a href="https://www.youtube.com/watch?v=w8zEOnmecp0&t=1s">一个在海外长大的华人谈谈对六四的看法,无法保证绝对的中立</a>,小岛讲的还挺中立的,很多细节可能你都不知道。不过也可以看看<a href="https://www.youtube.com/watch?v=HCp8njH-ILg">台湾版</a>。</li>
<li><a href="https://www.youtube.com/watch?v=-xwtz5I_ySY&ab_channel=BugTik">After the divorce, she renovated the house by herself, renovating the yard, the kitchen</a>,好治愈啊。</li>
<li><a href="https://www.youtube.com/watch?v=7QaTt7lL52Q&t=1s&ab_channel=bianbian%E8%BE%B9%E8%BE%B9">我回国了!为什么要回国?国内和国外找工作的区别 接下来去哪?聊聊心里话</a>,人生不易啊,每个个体都在挣扎。</li>
<li><a href="https://www.youtube.com/watch?v=bdp-uagGY5c&ab_channel=MoneyXYZ">美联储如何”缩表”抑制40年最高通胀?什么是”缩表”?</a>,加拿大小胖哥的缩表讲解,狠赞。</li>
<li><a href="https://www.trt.net.tr/chinese/covid19">新型冠状病毒最新状况</a>,全球新型冠状病毒最新数据,统计,确诊和死亡率。</li>
<li><a href="https://open.163.com/newview/movie/free?mid=BC806RSKR&pid=BC806RSNF">【TED-ed】等离子体是什么-网易公开课</a>,等离子的概念,涨姿势。</li>
<li><a href="https://www.bilibili.com/video/BV1M34y1C71Z">6分钟讲明白什么是洗钱</a>,衣戈猜想的视频都挺有意思。</li>
</ul>
<h1 id="2022530">2022.5.30</h1>
<ul>
<li><a href="https://www.bilibili.com/video/BV1n54y1Z7tS">黄晓丹 「和诗人一起梦游」杜甫篇01:在一个晦暗不明的时代,如何找到生活下去的热情?</a> ,非常粉晓丹老师,貌似这是一个系列啊,期待ing…</li>
<li><a href="https://www.bilibili.com/video/BV1Qv4y1A7Y6">【神经科学101】33 把皮肤细胞变成神经元?神经干细胞·山中因子·2012诺贝尔奖</a>,UCLA的在读小本,分享的这个话题很有意思的,神经~</li>
<li><a href="https://www.bilibili.com/video/BV1it4y1W745">巴斯特·斯克鲁格斯的歌谣</a>,今年刷的有一部神片,科恩兄弟神作,这个是越哥说电影版,不过强力推荐还是直接去刷原片。</li>
<li><a href="https://www.youtube.com/watch?v=h5D3mv8ewCY">How mRNA Medicine Will Change the World - Melissa J. Moore - TED</a>,mRNA改变未来,在遗传病、癌症方便,都大有可为。</li>
<li><a href="https://www.bilibili.com/video/BV1Nv4y1P7is">混黑帮、绯闻无数、三十年拒见父亲,古龙的孤独人生</a>,从来不知道,古龙的一生,是如此的放荡不羁。</li>
<li><a href="https://www.bilibili.com/video/BV1ft4y1D74N">【音乐史科普】20世纪最伟大的作曲家,苏维埃的信徒——肖斯塔科维奇</a>,认识了在苏联巨大阴影下,奇迹般活下来,并创作了大量精品的肖斯塔科维奇。为了创作,活下去。</li>
<li><a href="https://www.bilibili.com/video/BV1TR4y1A7E8">低成本口碑佳作《毛骗》</a>,是当年学生时代的李洪绸的<a href="https://baike.baidu.com/item/%E6%AF%9B%E9%AA%97/141533">神作</a>,刷了几集,以当年的成本状况,做成这样相当牛逼了。</li>
<li><a href="https://www.bilibili.com/video/BV1G44y1g79M">一名穷学生DIY申请美国、澳洲、新加坡、荷兰本科的经历</a>,小姐姐太励志了 ,果断加了小姐姐的微信,默默关注她。</li>
<li><a href="https://www.bilibili.com/video/BV1x54y15731">【科学八卦史】日本21世纪最大学术丑闻:小保方事件</a>,神奇的生物八卦系列。这个好包括,<a href="https://www.bilibili.com/video/BV1dA411i7aQ">【科学八卦史】他曾与诺贝尔奖擦肩而过,却沦落到开班车为生</a>,<a href="https://www.bilibili.com/video/BV1Se411x712">【科学八卦史】生活虐我千百遍,我待生活如初恋</a>,<a href="https://www.bilibili.com/video/BV1GE411H7Nv">【科学八卦史】他以一人之力碾压全球科学家,让资本沦为自己的提款机,却被千夫所指</a>,刷的我是浴霸不能啊。</li>
<li><a href="https://www.bilibili.com/video/BV1qk4y1R79H">【照理说事】外汇储备是什么?我国拥有3万亿美元外汇储备,这些钱是属于谁的?</a>,<a href="https://www.bilibili.com/video/BV1vi4y187iZ">我国3万亿美元外汇储备,为何要去买美国国债?可以给大家分了吗</a>,外汇储备到底咋回事,我还真不清楚。</li>
<li><a href="https://www.bilibili.com/video/BV1Xh411p7VH">《一直游到海水变蓝》:贾樟柯的文学纪录片,难道就拍了个这?</a>,硬着头皮看完了<a href="https://www.bilibili.com/bangumi/play/ss39649?t=6490">贾老师的片子</a>,然后看到了这个解读,确实,回去品一下,很多东西确实没体会到。</li>
<li><a href="https://www.bilibili.com/read/cv15816379">“学神”童哲,没能撑住万门大学</a>,听过万门的几门专家大课,一直祝福它可以长久下去,没想到,居然发生了这个,童哲是怎么了?</li>
<li><a href="https://www.bilibili.com/video/BV1CS4y1c7vr">为何铁托去世不久南斯拉夫就分崩离析了?如今的巴尔干还会再分裂吗?</a>,多灾多难的巴尔干半岛,多灾多难的南斯拉夫人民。</li>
<li><a href="https://www.bilibili.com/video/BV1mP4y1T7LR/">《变化中的世界秩序》瑞·达利欧</a>,达里奥的新作,讲述了这个世界的争霸赛。</li>
<li><a href="https://www.youtube.com/watch?v=KQ-H-OyN2Y0">十三邀 - 第六季: 第3期:许知远对话何多苓 天生是个审美的人</a>,太喜欢何多苓老师了,自由率真和执着。</li>
<li><a href="https://m.thepaper.cn/newsDetail_forward_5577045">一群北京文青冲上街头,让中国人记了40年</a>,何老师提到的星星画展,怀念那个自由的年代。</li>
<li><a href="https://www.youtube.com/watch?v=nhddYPGIevU&list=PUliSQfmvqSQVc-ue1XV2pbw&ab_channel=SurvivalBeast">Survival Beast</a>,荒野生存+赶海系列,解压视频系列。</li>
<li><a href="https://www.youtube.com/watch?v=V3uonKwk2EM">四月之声</a>,上海留下的声音,必须记录下来。</li>
<li><a href="https://mp.weixin.qq.com/s/xQ3unQfPGVHgfHvCR4iIAA">离开豆瓣的日子</a>,豆瓣当年的最早一批理想主义者,里面好几位技术大咖都耳熟能详。</li>
<li><a href="https://www.modevol.com/">渐构</a>,YJango大神把自己的学习系列做成了网站。</li>
</ul>
<h1 id="2022417">2022.4.17</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=RAEwmTOXRXE">小岛浪吹 为什么上海的抗疫政策可以特殊化,为什么上海封城效果差,未来中国疫情会如何收场</a>,很喜欢小岛,不左不右,不喊口号,只拼逻辑。</li>
<li><a href="https://www.youtube.com/watch?v=cdZZpaB2kDM">Elon Musk talks Twitter, Tesla and how his brain works — live at TED2022</a>,老马说,2年内人形机器人上市,收购twitter有planB,哈哈,各类八卦。</li>
<li><a href="https://www.youtube.com/watch?v=mh_gjwSXTVg">香蕉皮能展成平面吗?微分几何之高斯绝妙定理</a>,李永乐带我们去微分几何去飞。</li>
<li><a href="https://www.youtube.com/watch?v=pWWhrzvpDDs">凯利公式是啥?按这个炒股能成巴菲特?如何分配手里的钱进行最优投资,李永乐老师告诉你</a>,永乐老师继续飞。</li>
<li><a href="https://www.youtube.com/watch?v=VrYIpF-Q8Bo">【柯P老實說.EP12】我在生離死別之間學到的事,世間的成功與失敗要怎麼分辨|20200911 高雄女中演講</a>,一次,我就路转粉了,柯P很赞。</li>
<li><a href="https://www.youtube.com/watch?v=DZJ9HStdLk8&t=20s">【国宴大师•红烧排骨】软烂耙香、色泽红亮,最详细的家庭版红烧排骨做法,就是下饭! 老饭骨</a>,美食界的大爷、二伯和三叔,后来才知道,大爷已经去世了,再看,就有淡淡的忧伤了。</li>
<li><a href="https://www.youtube.com/watch?v=eB3bn8JMYBI&t=2s">一口气看完日漫热血神作进击的巨人</a>,真的就是一口气刷完了,虽然没那个精力和时间去看一遍,看这个浓汤宝也很热血。<a href="https://www.youtube.com/watch?v=PBuqXj57FHw">2</a>,<a href="https://www.youtube.com/watch?v=PBuqXj57FHw">3</a>。</li>
<li><a href="https://www.youtube.com/watch?v=NuM_O6T1eUw">一口气看完日漫神番一拳超人</a>,一发不可收的浓汤宝系列,这次是一拳超人。<a href="https://www.youtube.com/watch?v=pWWhrzvpDDs">第二季</a>。</li>
<li><a href="https://www.youtube.com/watch?v=VoWNBsmjhDI">彭丽媛1999年在节目中谈及自己丈夫</a>,这么8的东西,看着非常唏嘘,甚至有些魔幻。</li>
<li><a href="https://www.youtube.com/watch?v=U7Op8La39Ic&t=163s">强人普京:他的雄心、盲点和局限</a>,认识了赵灵敏老师,查了一下,之前是南都的。</li>
<li><a href="https://www.youtube.com/watch?v=0cXTyTmDRUI">超越認知的印度 老高與小茉</a>,老高与小丽的这集有点意思,讲印度宗教的。</li>
<li><a href="https://www.bilibili.com/video/BV1eM4y1M7U6?spm_id_from=333.880.my_history.page.click">18年戛纳有多瞎眼?神片《夜以继日》面前的各位都是弟弟</a>,淘到新的一枚电影UP主,很赞那,<strong>AB电影馆</strong>。</li>
<li><a href="https://www.bilibili.com/video/BV1mP4y1T7LR">【动画+中文配音+字幕】《变化中的世界秩序》瑞·达利欧</a>,达里奥的新作,堪比之前的<a href="https://www.bilibili.com/video/BV1KA411u7ft">《经济机器是怎样运行的》</a></li>
<li><a href="https://mp.weixin.qq.com/s/Fh1y4GEn2U58a10xczwTfQ">陈嘉映:人文主义者最好的时代一去不返了</a>,看的有一种莫名的悲伤,昨日世界,已经远去。</li>
<li><a href="http://www.gexiao.me/2021/12/28/risk-model/">我的风险防范模型</a>,网友的分享,人确实需要有风险意识,特别是当下越来越悲观的世界。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4748677106040862">【说唱】父亲不让我出门</a>,这糙糙的画面感,挡不住这魔性的歌曲,我…,居然看完了。</li>
<li><a href="https://h5.video.weibo.com/show/1034:4753509179129936">为了一颗青菜</a>,哈哈哈哈哈,上海疫情,为了一棵菜,这么的无底线,哈哈哈哈。</li>
<li><a href="https://mp.weixin.qq.com/s/coViqckoBQyt_FhoDkGuPg">上海破防</a>,是我看到的逻辑上最清晰的文章,关于上海疫情,是清零,还是躺平。</li>
<li><a href="https://mp.weixin.qq.com/s/dh4qoSByfRM60dppE1WZdw">新冠肺炎的经济学分析:病死率的因果识别与防控的机会成本</a>,这种文章,才是最有良心的,用数据说话,不洒情绪。</li>
<li><a href="towel.blinkenlights.nl">nc towel.blinkenlights.nl 23</a>,运行这个命令,mac上,可以开启一个字符界面的星球大战,太NB了。</li>
</ul>
<h1 id="2022317">2022.3.17</h1>
<ul>
<li><a href="https://www.toutiao.com/w/i1727240432626703/">外企职业生涯的活化石</a>,一个老外企人的经历,代表了过去的那个时代</li>
<li><a href="https://video.h5.weibo.cn/1034:4745485593018434/4745503855612509">俄罗斯方块职业电竞选手到底有多牛</a>,神奇的东京电视台,神奇的俄罗斯方块小子</li>
<li><a href="https://h5.video.weibo.com/show/1034:4722697683533923">日本纳豆老仙人</a>,依然是神奇的东京电视台,神奇的世外高人。</li>
<li><a href="https://mp.weixin.qq.com/s/ptcdj_ytB1F1vuL9Obvt5w">大厂中层“再就业”:路难选,意难平</a>,这个卷的世界的真实残酷。</li>
<li><a href="https://www.bilibili.com/video/BV1U34y1b7QV">青山集团对西方集团血洗</a>,青山这事,是一次很经典的期货多空之战。</li>
<li><a href="https://mp.weixin.qq.com/s/9x2dvMJPMyI2gDObcH0whw">从个人经历谈中国年轻一代认识中西方道路的心路历程</a>李晓鹏博士用自己的亲身经历,描绘了这代人的思想变迁。</li>
<li><a href="https://mp.weixin.qq.com/s/X7Mw1p-XW49Ulc9jVqSZvg">宽客之路</a>,做一个顶级量化宽客,这条路路漫漫。</li>
<li><a href="https://m.weibo.cn/status/4730736756919714">动画短片《939号》</a>,讽刺了极端强权对于个人意识的毁灭。</li>
<li><a href="https://m.weibo.cn/status/4729917218488915">老外的拍脑袋游戏</a>,太欢乐了,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</li>
<li><a href="https://m.weibo.cn/status/4729211992410665">《骑手谜云》</a>,讲述外卖公司如何“合法”地将人力成本和用工风险层层外移。</li>
<li><a href="https://youzhiyouxing.cn/curriculum">有知有行</a>的投资第一课,非常好的投资基本知识的讲述。</li>
<li><a href="https://www.bilibili.com/video/BV1Hy4y1p7wR">帅哥切·格瓦拉的血色浪漫</a>,一个理想主义者的一生。</li>
<li><a href="https://www.bilibili.com/video/BV1QQ4y1K7aZ">轻松读懂经济指标</a>,很棒的一个各种宏观经济指标扫盲的教程。</li>
<li><a href="https://card.weibo.com/article/m/show/id/2309404724478998610280">我在学术界与工业界的经历</a>,大神在工业界和学术圈切换的苦与乐。</li>
<li><a href="https://m.weibo.cn/status/4585587874727810">1980s昭和年代的圣诞节</a>,属于日本八十年代的美好。</li>
<li><a href="https://www.bilibili.com/video/BV1tt411M7WC">融合投影Logistix妹子超炸演绎D-trix编舞Who You Are</a>,酷毙了。</li>
<li><a href="https://mp.weixin.qq.com/s/gzUDv3c2ZjZBciStO4nRDQ">为什么每次体检都要抽那么多血?</a>,好棒的科普图挂。</li>
<li><a href="https://mp.weixin.qq.com/s/Qr4Bukf8EftkxAraN-2yIQ">十三邀 刘擎:快乐的人不读哲学</a>,话说,许知远在刘擎老师面前,完全发挥不出来啊。</li>
<li><a href="https://www.youtube.com/watch?v=2ldjw03uj2c">黄奇帆谈房地产</a>,大佬确实牛逼。</li>
<li><a href="https://www.youtube.com/watch?v=l4ipbo-M9gY">黄奇帆:聊一波共同富裕</a>,讲的很好,逻辑自洽。</li>
<li><a href="https://www.bilibili.com/video/BV1AY411h7YT">【浮生一日】学生在老师背后怎么说他?</a>,当年的班主任其实是这样的。</li>
<li><a href="https://www.bilibili.com/video/BV1j7411r7un">丹尼斯·霍珀导演的《逍遥骑士》片段</a>,最迷幻的一段剪辑。</li>
<li><a href="https://www.youtube.com/watch?v=sL4A-NToBi4">从“条顿悲歌”到北约东扩、波兰视角的欧洲史之三、插进来的法史、从跑路的瓦卢瓦亨利到惊悚的“血婚”玛戈王后</a>, 光锐很健谈。</li>
<li><a href="https://www.youtube.com/watch?v=LX8VnffTurQ">从“条顿悲歌”到北约东扩、波兰视角的欧洲史之二、卢布林联合的由来和缺陷</a>,光锐很健谈。</li>
<li><a href="https://www.youtube.com/watch?v=TAfjl93lx-U">从“条顿悲歌”到北约东扩、波兰视角的欧洲史之一、格伦沃尔德大战的前前后后</a>,光锐很健谈。</li>
<li><a href="https://www.youtube.com/watch?v=wLvPMkqobaE&t=3451s">袁腾飞: 俄罗斯与欧洲矛盾开始《克里米亚战争风云》完整版.第零次世界大战</a></li>
<li><a href="https://www.youtube.com/watch?v=lAvBgIJjjZM">聊聊我四年的抑郁症经历</a>,一个抑郁症患者的真实感受。</li>
<li><a href="https://www.youtube.com/watch?v=6FfRjYO4tBM&list=PLG58XXH-jpcE6MFy4PigcD87Pu6zG2qZ4">史诗级电影《星球大战》系列电影解说合集</a>,太过瘾了。</li>
</ul>
<h1 id="2021126">2021.12.6</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=3vmTnrIbK9M">吴思:《血酬史观:中国历史的一种分析框架》YouTube</a>,全新的史观。</li>
<li><a href="https://www.bilibili.com/video/BV1tC4y1a7sv">华尔街量化革命,数学天才西蒙斯和他的大奖章基金(以及文艺复兴科技公司)</a>,西蒙斯大神的全部</li>
<li><a href="https://www.bilibili.com/video/BV19W411F7uc">【数学狂】数学天才中的亿万富翁和量化投资之王– 詹姆斯·西蒙斯访谈</a></li>
<li><a href="https://m.mp.oeeee.com/a/BAAFRD000020211130629180.html">这部火出圈的动画,把一群成年人都看哭了</a>,萌死人的波吉,社畜的治愈动画。</li>
<li><a href="https://www.youtube.com/watch?v=cDk1FPoCfqI">Favicon超越你想象的NFT 老高與小茉YouTube</a>,老哥这个讲NFT很强通俗易懂。</li>
<li><a href="https://baike.baidu.com/item/%E5%8C%97%E6%96%B9%E7%9A%84%E7%BA%B3%E5%8A%AA%E5%85%8B/813312">北方的纳努克</a>,一部纪实但是残酷的纪录片,据说后来纳努克因为配合拍摄错过捕猎季而饿死了。</li>
<li><a href="https://www.zhihu.com/question/20372622">美国好莱坞政治“黑名单”事件是怎么回事?</a>,麦卡锡时代的著名的“好莱坞十君子”事件。</li>
<li><a href="https://www.163.com/dy/article/GAP21ADF05238V2G.html">法军叛乱刺杀戴高乐</a>,戴高乐因为阿尔及利亚失败而转为和平时,付出的代价。</li>
<li><a href="https://www.sohu.com/a/274585308_488967">安东尼奥尼《中国》</a>,号称被禁30年的纪录片,很多视角都是窥探的、独特的: <a href="https://www.bilibili.com/s/video/BV1GC4y1p796">片源</a></li>
<li><a href="https://baike.baidu.com/item/%E9%98%BF%E5%B0%94%E5%8F%8A%E5%88%A9%E4%BA%9A%E6%B0%91%E6%97%8F%E8%A7%A3%E6%94%BE%E6%88%98%E4%BA%89/3937311">阿尔及利亚独立战争</a>,<a href="https://zhcn.eferrit.com/%E9%98%BF%E5%B0%94%E5%8F%8A%E5%88%A9%E4%BA%9A%E7%8B%AC%E7%AB%8B%E6%88%98%E4%BA%89%E6%97%B6%E9%97%B4%E8%A1%A8/">时间表</a>,和法国国内的反战的<a href="https://www.jiemian.com/article/2128979.html">五月风暴</a>,为革命而革命,和真正的独立革命,交织的年代。</li>
<li><a href="https://sa.sogou.com/sgsearch/sgs_tc_news.php?req=tMAEYo4Kxc0f76vi-gyJLMNtMvg9xTQd_BXqntU0Zsk=&user_type=1">《光明共和国》</a>,“邪典恶童”的身后,是成人世界的油腻和冷酷</li>
</ul>
<h1 id="2021913">2021.9.13</h1>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/23344406">库尔兰</a>,是德国最后的挣扎和倔强,抛开纳粹的罪恶,单就军人的意志和群体的力量而言,库尔兰德军的坚守是一个奇迹。<a href="https://www.bilibili.com/video/av11339654">库尔兰1944—二战微电影</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1Dx41167yN">【一席】梁永安:在单身的年代我们如何面对爱情?</a>,又淘到一枚有意思的讲者和思考者、老者,梁老师一位老爷爷,仍然内心纯真,关注爱情、女性。<a href="https://www.youtube.com/watch?v=oQjEwmKX-XI">一条:梁永安聊了聊愛情與婚姻</a>。知道了伍尔夫、知道了大卫尼尔。</li>
<li>也是在梁永安老师的视频里,知道了<a href="https://haokan.baidu.com/v?pd=wisenatural&vid=7838267943372894590">大卫-尼尔</a>,一位勇敢的女性,在20世纪40年代,深入西藏14年的西方神奇女性。</li>
<li><a href="https://www.bilibili.com/video/BV1AK4y1f7rE?p=51">戴锦华:从电影谈起(合45讲)</a>,戴锦华教授不仅仅是一个电影专业的教授,更是对社会、政治、文化都涉猎很深的大家,真高兴有机会认识她,有机会聆听她的课程。</li>
<li>之前听说过,但是这次刷了几部<a href="https://www.bilibili.com/video/BV1ZK4y1E723">王家卫</a>的电影,才真正开始接触这个天才的导演,<a href="https://www.bilibili.com/video/BV18t411T7cy">花样年华</a>算是他的巅峰之作,确实需要一些解读才可以深入理解。电影剪辑确实是个神奇的事情。</li>
<li><a href="https://www.bilibili.com/video/BV1AC4y1Y73g">昆仑山</a>,是一个神山,劈开了新疆和西藏,充满着什么,想起昆仑,就想起西域,什么金轮法王也突然冒出脑海。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ss12415?t=6075">钢的琴</a>,喜剧的手法来刻画了一代人的悲剧,不过,之前没注意过电影的各类手法,这次在戴锦华教授的讲解后,再看钢的琴,别有风味。</li>
<li>最近无数次被安利这本,<a href="https://www.bilibili.com/video/BV1sv411q7UK">《光明共和国》</a>,去以一种完全不同的视角看待儿童,南美的魔幻世界在此一次呈现。小姐姐还安利了一个更神奇的<a href="https://www.bilibili.com/video/BV1aU4y157zq">北欧犯罪小说天王尤•奈斯博</a>,让你知道没死角的人生长什么样。</li>
<li>还是小姐姐UP主安利的<a href="https://www.bilibili.com/video/BV1VK4y1A7oh">《下沉年代》</a>,于是,我按照她说的找来2期播客<a href="https://www.ximalaya.com/renwenjp/5965874/388671132">一五一|American’T :正在下沉的美国梦</a>和<a href="https://www.ximalaya.com/renwenjp/29887212/402177379">文化有限:下沉年代:美国是不是不行了</a>,算是比较彻底的了解了这本,讲美国衰败之路的书。现在就差去读一读实体书了。</li>
<li><a href="http://www.ximalaya.com/share/sound/410890367?cId=39&albumIds=29887212%2C5965874%2C49698485&uid=30788883&shrdv=8eb7fe93-f9ed-3f12-a34f-95e2acd2fbfe&shrh5=android&subType=1015&shrid=17c1056593af4b7&shrdh=1&shrpid=17c1056593a152b2&commandShareId=2a23cd4d5325786106bc653c847a1ab4&shareTime=1632361666874&shareLevel=1">文化有限 - 那些忧伤的年轻人</a>,其实是讲许知远老师的书的,不过唤起很多青春的回忆,顺道安利一下文化有限这个读书播客节目,做的真好。也知道了许知远的一本禁书<a href="https://matters.news/@philosophia1979/%E4%BD%99%E6%9D%B0-%E5%81%9A%E4%B8%80%E9%A2%97%E9%92%89%E7%A8%B3%E7%9A%84%E9%92%89%E5%AD%90-%E8%AF%84%E8%AE%B8%E7%9F%A5%E8%BF%9C-%E6%8A%97%E4%BA%89%E8%80%85-bafyreifh2jxn2ypii5ipgin6kgvclmftd7en3gli4mq6ziwiddkw4mrwcu">《抗争者》</a>,因为采访了一些违禁人物,而被block掉了。</li>
<li><a href="https://mp.weixin.qq.com/s/fU3HM5No6-TlgNdG9GajdA">没读过他的书,算不上真·文艺青年</a>,波拉尼奥,一个神奇的智利、墨西哥、西班牙作家,为了生计而写书,诗歌才是他的全部,那本2666,已经吃灰了,我要从书架上拿下来读读了。</li>
<li><a href="https://m.douban.com/subject_collection/ECLUPI54A">豆瓣拉美文学TOP50</a>,豆瓣居然有这种书榜,收藏了,一直非常喜欢2种文学:日本文学和拉丁美洲文学,这个必须bookmark上。</li>
<li><a href="https://www.bilibili.com/video/BV15s411k7W9?from=seopage">关于苏珊桑塔格</a>,之前不知道这位美国的最后女性知识分子,一位不断地反抗美国主流价值的女权主义奇女子,被戴锦华安利后,看了这部纪录片,对她了解了很多。</li>
<li><a href="http://qnck.cyol.com/content/2007-10/09/content_1916789.htm">格瓦拉遗骨是如何找到的</a>,当年切格瓦拉被玻利维亚政府枪杀抛尸野外,1997年掀起的一场寻找他尸骨的壮举,终于30年后将这位著名革命家的遗骨送回了古巴。是最近才知道的一个故事,很感动。还有他的著名日记<a href="https://book.douban.com/subject/25904931/">《玻利维亚日记》</a>,一直记录到他临死前的一天。还有他的传记电影:<a href="https://movie.douban.com/subject/1929402/">切·格瓦拉传:阿根廷人</a>。</li>
<li><a href="https://movie.douban.com/subject/1292735/">北方的纳努克</a>,1920年的一部记录爱斯基摩人的<a href="https://baike.baidu.com/item/%E5%8C%97%E6%96%B9%E7%9A%84%E7%BA%B3%E5%8A%AA%E5%85%8B/813312">纪录片</a>,据说是每一个纪录片工作者必须要看的经典。但是,纳努克因为参与拍摄,耽误了捕猎活动,那个冬天全家饿死了。也让这部纪录片争议很大。可以读读这篇<a href="https://movie.douban.com/review/1353807/">影评</a>,了解更多。</li>
<li>通过这部电影<a href="https://baike.baidu.com/item/%E9%98%BF%E5%B0%94%E5%8F%8A%E5%B0%94%E4%B9%8B%E6%88%98/3123268">阿尔及尔之战</a>,<a href="https://www.youtube.com/watch?v=gmg8mciU8Bs">电影链接</a>,让我了解到了阿尔及利亚人的反殖民独立过程中,和法国人的抗争。是戴锦华老师推荐的黑白片。后来我又陆续找了一些文章(<a href="https://k.sina.cn/article_6093535129_16b33f79900100isnw.html?wm=13500_0055&vt=4">1</a>,<a href="https://www.163.com/dy/article/GAP21ADF05238V2G.html">2</a>)让我更多的了解了那段历史,也知道了<a href="https://zh.wikipedia.org/wiki/%E5%BC%97%E6%9C%97%E8%8C%A8%C2%B7%E6%B3%95%E5%86%9C">法农</a>,还了解到戴高乐因为同意独立差点被暗杀的故事。正如戴锦华老师说的,现在的历史的叙事,是冷战的胜利者,西方资本主义的叙事,他们更偏重于和平主义者,而不是法农这样的激进左翼。</li>
<li>无意间看了这部小日剧<a href="https://movie.douban.com/subject/1308685/">《烟花》</a>,太喜欢了,少男少女的萌动,那些美好,让人陶醉。才50分钟的电影,让我久久不能忘记那个蝉鸣的夏天。它还有个<a href="https://movie.douban.com/subject/26930504/">动画版</a>,我看评分很低,和B站弹幕中的评价大抵相同。</li>
<li>在戴锦华教授的安利下,看了<a href="https://movie.douban.com/subject/1292466/">《往日情怀》</a>,芭芭拉史翠珊主演的经典,据说《欲望都市》中,还有向它致敬的<a href="https://www.bilibili.com/video/BV1sx411M7Sn/">桥段</a>。我看的时候感觉很多细节没看懂,后来看影评以及再看戴锦华老师的讲解,才理解到它浓厚的时代背景。也知道了麦卡锡主义下的对好莱坞左派打压的著名的<a href="https://www.zhihu.com/question/20372622">《好莱坞十君子》</a>。</li>
</ul>
<h1 id="从建国到文革">从建国到文革</h1>
<p>整理了一个建国后,到文革结束、改革开放的时间线,总是对这段历程模模糊糊,这次好好捋一下:<a href="https://zh.wikipedia.org/zh-hans/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%8E%86%E5%8F%B2%E5%B9%B4%E8%A1%A8">参</a></p>
<ul>
<li>1949.10 金门战役,解放军进攻失败</li>
<li>1949.12 毛泽东访问苏联</li>
<li>1950.6 朝鲜战争爆发,10月人民志愿军入朝</li>
<li>1951~1957 第一个五年计划</li>
<li>1951 三反,反贪污、浪费、官僚主义,针对党内部、国家机关单位、各级部门,肃清贪污腐败,拜金、寻租</li>
<li>1952.10 五反,反行贿、偷漏税、偷工减料、盗骗国家财产、盗窃经济情报,针对私人工商业、资产阶级,工商界整肃,资产阶级逐渐消亡</li>
<li>1953~1956 斯大林模式的社会主义改造,56年年结束</li>
<li>1953.7 朝鲜停战协定</li>
<li>1954.9 炮击金门,九三炮战爆发</li>
<li>1956.2 赫鲁晓夫苏共20大全否斯大林,中共反右反修(毛捍卫斯大林)</li>
<li>1957 4-5月,百花齐放,百家争鸣,大鸣大放;6-7月,引蛇出洞,反右运动。是第一场波及社会各阶层的群众性大型政治运动。</li>
<li>1958~1960,大跃进,60年冬叫停</li>
<li>1958~1962年,大饥荒1500~5000万人非正常死亡</li>
<li>1959.3 西藏骚乱,达赖喇嘛流亡国外</li>
<li>1959.7 庐山会议,彭反大跃进,打到彭反右倾</li>
<li>1960.8 苏联核援助全面撤离</li>
<li>1962.1 七千人大会,三分天灾七分人祸,毛做自我批评</li>
<li>1963.9~1964.7 中苏论战, 九评苏共</li>
<li>1963.10 中印边境战争爆发</li>
<li>1963.2~1965 四清,反修防修,防止演变,77,560人死,5,327,350人倒</li>
<li>1964.10 第一颗原子弹爆炸成功</li>
<li>1965.11 姚文元批吴晗《海瑞罢官》,映射为彭翻案</li>
<li>1966.5 中央政治局扩大会议,《五一六通知》标志文革开始,成立“中央文化革命小组”,毛泽东发动文化大革命的真正对象是刘少奇等人,被人误以为只是反右四清等运动的延续,所以他们的目标仅仅是中下层敢于发表不同观点的知识分子等。
<ul>
<li>7月 毛泽东支持红卫兵,《炮打司令部——我的一张大字报》</li>
<li>8月 第八届中央委员会第十一次会议,《中国共产党中央委员会关于无产阶级文化大革命的决定》(《十六条》)</li>
<li>红八月,8月18日,毛泽东、林彪接见全国各地红卫兵,至11月,会见了超过1100万红卫兵,全国进入混乱状态,串联、张贴大字报、标语,“破四旧”,冲击寺院、庙宇、教堂等,砸毁文物,破坏古迹,焚烧书籍、字画。、针对“剥削阶级”、“反动派”抄家,攻击学术权威、知识分子,殴打、虐待,人格上侮辱,被害或自杀。全国红卫兵<a href="https://zh.wikipedia.org/wiki/%E5%A4%A7%E4%B8%B2%E8%81%94">大串联</a>。</li>
<li>9月5日,中央通知,来京观摩文革运动者,交通费与生活费由中央财政补助,大串联高潮。</li>
</ul>
</li>
<li>1966.10 刘少奇、邓小平被定性“资产阶级反动路线”,自我检讨</li>
<li>1967.1 第一次批斗刘少奇</li>
<li>1966.11 上海成立“上海工人革命造反总司令部”</li>
<li>1967.1 张春桥姚文元赴上海王洪文等工人运动夺取了上海党政大权,上海市委领导被批斗,“一月风暴”,全国“夺权”开始,中央文革小组发贺电肯定夺权</li>
<li>1967.2 毛批其他老高层反对文化大革命,张春桥等称为“二月逆流”</li>
<li>1967.4 林昭遇害,1957第一批右派</li>
<li>1967.7~9 江青提出“文攻武卫”,武斗升级为枪炮对打,全国内战状态,9月《九五命令》平息</li>
<li>1968.10 毛提出干部下放,被打击干部下放五七干校</li>
<li>1968.10 八届二中全会,林彪正式作为毛泽东的继承人,刘少奇定为“叛徒、内奸、工贼”、“永远开除出党”、“中国的赫鲁晓夫”</li>
<li>1968.12 毛泽东发起“上山下乡运动”,1600多万青年人赴乡下劳动</li>
<li>1969.3 中苏珍宝岛事件</li>
<li>1969.4 中共九大,林彪、江青集团的主要成员进入了中央委员会,林彪作为党的接班人列入《党章》</li>
<li>1969.5 “清理阶级队伍”运动,各地军管会和工宣队,对“地、富、反、坏、右、特务、叛徒、走资派、漏网右派、国民党残渣余孽”进行大清查,此间全国3000万人被斗,50万人死亡</li>
<li>1969 6月贺龙离世,11月刘少奇去世</li>
<li>1969.12 毛泽东“知识青年到农村去,接受贫下中农的再教育”指示,鉴于青年难以稳定控制,清除这些人出城市,1966、1967、1968届初高中毕业生(老三届),上山下乡运动开始</li>
<li>1970.1 《关于打击反革命破坏活动的指示》《关于反对铺张浪费的通知》和《关于反对贪污盗窃、投机倒把的指示》,“一打三反”运动,发动政治运动,很多人死刑,有期徒刑等惩罚,27岁的遇罗克1970.3.5,死刑</li>
<li>1970.4 第一颗人造地球卫星东方红一号上天</li>
<li>1971.9 9.13林彪、叶群、儿子林立果出逃在蒙古坠机,九一三事件</li>
<li>1972.9 毛将王洪文调北京,次年在十届一中全会提为中央副主席,有意培养为接班人</li>
<li>1973.12 第一次提出了计划生育政策</li>
<li>1974.1 文革“批林批孔运动”,批判林彪及孔子</li>
<li>1974.10 邓小平任第一副总理,后增补为中共中央副主席</li>
<li>1974.11 彭德怀离世</li>
<li>1975.1 十届二中全会选举邓小平为中共中央副主席、政治局常委</li>
<li>1975.11 毛泽东、四人帮发动批邓、反击右倾翻案风,批判邓小平</li>
<li>1976.1 周恩来去世,纪念活动导致“南京三·二九事件”,“四五天安门事件”,导致撤消邓小平职务,华国锋任第一副主席、国务院总理</li>
<li>1976.7 唐山大地震</li>
<li>1976.9 9.9,毛泽东逝世</li>
<li>1976.10 华国锋在军委副主席叶剑英支持下,以通知四人帮成员开会为名,逮捕四人帮,“粉碎四人帮”事件,怀仁堂事变</li>
<li>1977.7 十届三中全会,邓小平恢复一切党政军职务(中共中央副主席、国务院副总理、中共中央军委副主席兼解放军总参谋长),9月“拨乱反正”</li>
<li>1978.5 由其最亲密的战友、中央党校副校长胡耀邦,在《光明日报》发表南京大学胡福明《实践是检验真理的唯一标准》文章,批评“两个凡是”</li>
<li>1978.12 十一届三中全会,重要转折点,邓小平提出要“解放思想,实事求是”,华国锋作自我批评,平反四五天安门事件,确认邓小平领导地位,“改革开放”拉开序幕</li>
<li>1979.1 邓小平访美,中美建交</li>
<li>1979.2 中越战争爆发</li>
<li>1979.6 计划生育一孩政策实施</li>
<li>1980.2 十一届五中全会邓小平亲信胡耀邦和赵紫阳增补为中共中央政治局常委,9月,赵紫阳在五届人大三次会议上接替华国锋出任国务院总理,</li>
<li>1980.8 深圳经济特区成立</li>
<li>1981.6 华国锋辞去中央主席和军委主席职务,胡耀邦任中央主席,邓小平任中央军委主席,邓小平成为中国实际上的最高领导人</li>
</ul>
<h1 id="2021814">2021.8.14</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=EueK9q8DoVM">【一席】江柏安:音樂的三種聲音</a></li>
<li><a href="https://www.youtube.com/watch?v=eQAFnhPB8-g">豆瓣9.4《非典十年祭》:当下肺炎疫情的启示录</a></li>
<li><a href="http://www.zxiaoji.com/?p=1023">狄 德 罗 效 应</a>,狄德罗为了配上红色长袍,不断的升级消费,像极了我们面对的消费陷阱。</li>
<li><a href="https://www.zhihu.com/question/21860830/answer/75154638">《人间失格》</a>,太宰治把自己映射到叶藏,他是这个世界的局外人,对于存在于这个世界,他没有信心,他不愿意再去讨好这个世界了。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ep306875">《生活多美好》</a>,乔治,你来到这个世界上,就是为了这世间的美好而来,而活着,你有那么多值得爱的人,你应该坚守她们。</li>
<li><a href="https://www.bilibili.com/video/BV1qg411g7FM">林毅夫vs张维迎</a>,一共有3部分,这个是第一部分,两位经济学大佬针锋相对,我这种经济盲,觉得两人说的都有道理。</li>
<li><a href="https://mp.weixin.qq.com/s?__biz=MzU4NDY2MDMzMA==&mid=2247484970&idx=1&sn=659345afb9782c4a7864df5cee108ab3">公平的错觉:韩国教育辛酸史</a>,看完只想说,韩国人太变态了,但是细想,中国何尝不是在朝着这条路走的呢,最近的限制补习,只会把成本推向更高,东亚人的读书人情结,很难改变。</li>
<li><a href="https://www.bilibili.com/video/BV1oJ411N728">一日四季的独库公路,可能跟你想的并不一样</a>,跟着她们俩一起走一遍新疆最美的独库公路,太美了,要不是我亲自去过一趟,真不敢相信,还有这般人间美丽之所。当然,还有<a href="https://www.bilibili.com/video/BV1tK411p7bY">大西洋的最后一滴眼泪-赛里木湖</a>。</li>
<li><a href="https://www.youtube.com/watch?v=bQG1nAQrQeo&ab_channel=%E4%B8%80%E5%B8%ADYiXi">读书的料</a>,那些从大山里、农村里的凤凰男女们,她们的艰辛和所谓的成功背后,承担着怎样的心理上的压力,又有着怎么样的苦闷的精神负担和枷锁呢。</li>
<li><a href="https://video.h5.weibo.cn/1034:4642126424899667/4642134122561997">蒙古帝国:从成吉思汗到忽必烈 (2018) #水山汉化#</a>,总是在最关键的时候,大汉们死掉了,否则,蒙古真的要统治全世界了。</li>
<li><a href="https://www.youtube.com/watch?v=1kiBAkb4gvw&ab_channel=%E8%B6%8A%E5%93%A5%E8%AF%B4%E7%94%B5%E5%BD%B1">百变狸猫</a>,狸猫们在一点点的失去自由、失去自我,”能毀滅的都毀滅了,剩下的就是自我毀滅”,狸猫就是我们的映射。</li>
<li><a href="https://www.youtube.com/watch?v=p291o7r1Qis&ab_channel=%E5%B0%8F%E5%B2%9B%E5%A4%A7%E6%B5%AA%E5%90%B9-%E9%9D%9E%E6%AD%A3%E7%BB%8F%E6%94%BF%E7%BB%8F%E9%A2%91%E9%81%93">【2020十五期】两种不同的教育,最有效率的阶级划分</a>,把教育背后,蕴含的阶级的差异性,以及对跃迁的作用,都描述的狠透彻了。“小岛”这个哥们是新加坡侨居的一个为大陆仔,年岁不大,认知不浅。</li>
<li><a href="https://www.youtube.com/watch?v=VnCeQZKr2nY&ab_channel=%E8%87%BA%E5%A4%A7%E6%BC%94%E8%AC%9B%E7%B6%B2">認識歐洲與歐洲聯盟 109-1全球通識講座</a>,蘇宏達,國立臺灣大學政治學系教授,太逗比的一个老顽童啦,讲欧洲,讲文化,讲历史。</li>
<li><a href="https://www.bilibili.com/video/BV1Px411r7pX/">2015年第一届欧洲运动会开幕式</a>,看后半段,简直就是一幕大型舞台剧,欧洲人生生把开幕式变成一出舞台剧。</li>
<li><a href="https://www.bilibili.com/video/BV1zf4y127yE?zw">世纪大战!</a>,2001年大阪世乒赛,刘国正vs金泽洙,简直就是神话一边的一场比赛,完全具备了热血漫画的颜色。</li>
<li><a href="https://v.qq.com/x/cover/2xxvt9eg1d231wv/q0021ey62qf.html">被嫌弃的松子的一生 </a>,松子努力讨好别人,但是总是被命运抛弃,但是自始至终,松子都没有放弃对这个世界的爱。“生而为人,我很抱歉!”</li>
<li><a href="https://www.ithome.com/0/553/787.htm">虚幻引擎 5 抢先体验版</a>,我勒个去,现在的3D渲染已经到了这种登峰造极的地步了。</li>
<li><a href="https://www.bilibili.com/video/BV1Lp4y167a4">温铁军大佬降维打击,怒怼女拳师名场面</a>,标题过于夸张,女权关系不大,温倒是很一针见血的指出了农村的财产关系才是这一切问题的所在。</li>
<li><a href="https://www.bilibili.com/video/BV1uB4y1u7db?t=50">美国人挑战高考数学</a>,马思睿带着几个学霸老外,被高考数学完虐的过程。</li>
<li><a href="https://www.bilibili.com/video/BV1av411K7Ds">曹操和他父亲的故事</a>,曹操和他父亲的故事,狠感动,没有血缘关系,却胜过血缘关系,谁说,美国人没有亲情。</li>
<li><a href="https://www.bilibili.com/video/BV1jb41127iB">张雪峰 讲述高校史</a>,真心不知道,南京大学曾经亚洲第一的学校,这么牛叉呢。张逗神用逗逼的方式,讲述了这么多学校的牛逼史。</li>
<li><a href="https://www.bilibili.com/video/BV1kU4y1h7oC">《饱食穷民》</a>,『不知休止地前行 直到把自己累死』现代性贫困,借贷、996和减肥厌食症,日本的这些问题,就是我们眼下的境况。</li>
<li><a href="https://www.bilibili.com/video/BV1Px411V7ek">《零零后》一一的世界前传(成长的秘密)</a>,新的一代确实和我们不同,她们更独立、更自由,但是,能负担这样教育的还是少数啊,多数还是要进入到公立学校被鞭挞成一个模样。</li>
<li><a href="https://mp.weixin.qq.com/s/IWLyKCE0fLwXsrr5yICUFQ">内卷文化造就了精致的利己主义者</a>,robin的观点,把内卷和精致的利己主义者阐述的狠清楚。</li>
<li><a href="https://mp.weixin.qq.com/s/wvFK3iA9lFlX1fL2N_GUyA">神级反转</a>,是中国高中男子篮球联赛半决赛的最后18秒,神级反转,惊为天人,比灌篮高手、热血高校还是热血。</li>
<li><a href="https://m.douban.com/group/topic/59034050/?bid=0FumsGwfRXc">徐高:怎样用好最重要的几年学好经济学?</a>,徐神的分享,把自己的奋斗,用经济学的概念,解释出来,但是一点不晦涩,通俗易懂。</li>
<li><a href="https://video.h5.weibo.cn/1034:4642247812251685/4642518338110536">衡中的苦,苦的让你怀疑人生</a>,张的讲演,听上去让人热情澎湃,但是却夹杂着丝丝怨气,虽然是奋斗,但是,缺乏正气。不过,从演说的角度,确实非常牛x。</li>
<li><a href="https://www.bilibili.com/video/BV1QQ4y197PZ">“遵照原文,未加改动”</a>,一个有良知的知识分子、语文老师,对当下语文教材中的龌龊进行的严谨和严厉的批驳。</li>
<li><a href="https://mp.weixin.qq.com/s/LYVkV6omku0kmsIy-rbJAA">人类增长计划770</a>,社会主义的罗马尼亚,在人类历史上进行的一次悲惨和失败的刺激生育计划,造成了无数孩童的伤害。</li>
<li><a href="https://www.zhihu.com/question/310310600/answer/1982713897">新疆北疆好玩还是南疆好玩?</a>,对于去新疆玩的朋友,这篇可谓是一个非常非常棒的指南,感谢作者。</li>
<li><a href="https://zhuanlan.zhihu.com/p/69611161">西美尔</a>,金钱只是通向最终价值的桥梁,而人是无法栖居在桥上的,西美尔是德国哲学家,他对金钱、时尚的认知入木三分。</li>
<li><a href="https://www.bilibili.com/video/BV1Ff4y1475c?">《娱乐至死》</a>,浙江大学的杜骏飞老师带读波兹曼的这本经典,让我们看清娱乐的本质,让我们远离这些虚幻的异化之物。</li>
<li><a href="https://www.bilibili.com/video/BV1ZP4y1s7Lx">为什么学生一定要去学校学习,一定不要在家自学
</a>,未名子,也是个神人,他对关于孩子要去学校上学的认知,绝B会让你脑洞散开。</li>
<li><a href="https://movie.douban.com/subject/24750126/">荒蛮故事</a>,阿根廷鬼才导演“达米安·斯兹弗隆”,用六个小故事,用黑色、反讽的风格,帮你打开脑洞的界限。</li>
</ul>
<h1 id="2021328">2021.3.28</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=Vl-iuGaTeyg&list=PLIV5cbo2AdcJ_uAwpRuQTXpKy-pZ1Tezu">冯唐的成事心法</a>,属于很有味道的鸡汤,很适合中老年朋友的口味,毒辣透彻有嚼头。啥?鸡汤里没肉啊,如何有嚼头?!恩,有的。</li>
<li>来了来了,青蛙的新的一集的<a href="https://www.bilibili.com/video/BV1qi4y1K7GY">200年十字军东征</a>,过瘾过瘾,把这段历史的来龙去脉讲的透透的。</li>
<li>回味2个老广告,老了老了….,<a href="https://www.youtube.com/watch?v=2HRNK2pOr-A">刘德华、关之琳的愛立信T15</a>,和经典的<a href="https://www.bilibili.com/video/av15380385/">张德培信赖飘柔,头发更飘柔</a>。</li>
<li>超喜欢这期十三邀里的老顽童“陈传兴”,<a href="https://v.qq.com/x/cover/mzc00200wd6f6hf/w3232m0qi0e.html">黑夜是一艘渡船,记忆其实在未来</a>,老爷爷真的是一个太有趣的人了,热爱文学、哲学的导演,我希望我老了以后,可以像他一样睿智就好。</li>
<li>突然很想看道长的一千零一夜,一口气温习了<a href="https://www.youtube.com/watch?v=Qimbe2oK4f8">生命不能承受之轻</a>、<a href="https://www.youtube.com/watch?v=SLZ-_kOQFJ4">干校六记</a>、<a href="https://www.youtube.com/watch?v=reLzyA4QZa0">李尔王</a>,过瘾!</li>
<li>小姐姐带着我一起重温了<a href="https://www.bilibili.com/video/BV1iJ411v7UQ?t=21">垮掉的一代</a>,凯鲁亚克的<a href="https://book.douban.com/subject/1917972/">在路上</a>、艾伦金斯伯格的《嚎叫》,他们是60年代的嬉皮士们的先辈,还有一部1965年,艾伦金斯伯格参与的纪录片《<a href="https://movie.douban.com/subject/3055430/">垮掉的一代</a>》。我又找来凯鲁亚克的<a href="https://v.qq.com/x/cover/h3z6q3bswkq2qoh.html">在路上的电影</a>温习了一遍,永远的在路上,永远的追寻之路。</li>
<li>终于等来了大象放映室的激荡四十年之<a href="https://www.bilibili.com/video/BV1bX4y1V7KF?t=1">1988</a>,一起追忆那些往昔。</li>
<li>很早之前看过<a href="https://www.bilibili.com/video/BV1xy4y177rz?t=769">上帝之城</a>,不过剧情已经记不清了,这次看TOP的讲解,重温这部经典,仍然震撼。</li>
<li><a href="https://video.h5.weibo.cn/1034:4619009933639739/4619011364493487">小水坑的春夏秋冬</a>,跟着UP主,陪着小动物们,一起度过春夏秋冬,在这喧闹的南京城里,安静地陪伴他们,治愈的狠。</li>
<li><a href="https://www.bilibili.com/video/BV1rb4y1Q7Gm?t=55">海子短暂的一生</a>,他的真名“查海生”,北大的海子和八十年代的诗歌,他的命运和这段历史,永远无法分开。</li>
<li>谌洪果的人文通识解读之<a href="https://www.bilibili.com/video/BV1ok4y1y75H?t=3214">通往奴役之路</a>,哈耶克让我们警惕所有以全民的利益为理由对自由的危害。</li>
<li><a href="https://zhuanlan.zhihu.com/p/43952556">布拉格之春50周年:幻灭的变革</a>,从1968年1月开始的捷共改革,到1968年8月的苏联的入侵,布拉格之春,一段波澜的历史。</li>
<li>之前不知道徐浩峰,那天不经意看了电影《师父》的介绍,以为是部武打片,看完发现才发现是一个文艺片,<a href="https://v.qq.com/x/cover/mzc00200pyh89l0/d3220afcycc.html">许知远带我们认识这位“武打片”编剧</a>,神人也,最后的对话,明显把许知远逼到了死角。</li>
<li><a href="https://www.youtube.com/watch?v=uU2TaS73ip4&ab_channel=%E5%8D%81%E4%B8%89%E9%82%80">十三邀×微信十年</a>,里面对待微信的方式不谋而合,我也是关掉了所有的通知,公众号虽然定了很多,但是内心明白,读书和大段的讲授才更重要。</li>
<li>今日知道了<a href="https://www.youtube.com/watch?v=_BB9sDlX3IM&ab_channel=%E7%9B%8E%E6%A0%BC%E9%B2%81%E5%AD%A6%E5%9B%AD">包豪斯</a>,现代建筑艺术的开启。起源于二战前,德国的格罗皮乌斯创建的<a href="https://zhuanlan.zhihu.com/p/84176694">包豪斯学院</a>,将包豪斯分格传遍全世界。</li>
<li><a href="https://video.h5.weibo.cn/1034:4618563840049182/4618567590348895">《棉花》</a>,正好应景最近的新疆棉事件,展示了整个棉花的产业链里的无数普通人的命运。</li>
<li>小盆友太可爱了,从老爸手里轻易骗取了一百元,哈哈哈哈哈:<a href="https://video.h5.weibo.cn/1034:4618966342238240/4618966587150797">如何在不碰瓶子的情况下,抽出底部的钞票</a></li>
<li><a href="https://www.bilibili.com/bangumi/play/ss11370/">我在伊朗长大</a>,一部描述伊朗社会变迁的动画,以一个小女孩的视角,经历这一切。</li>
</ul>
<h1 id="60年代">60年代</h1>
<p>波澜壮阔的60年代,摘自于刘擎的<a href="https://www.bilibili.com/video/BV1wr4y1N7Xy?p=17">二十世纪西方思想文化潮流</a>.</p>
<p>世界领袖:3M:毛泽东、马克思和马尔库塞</p>
<p>文学:《伊甸园之门—六十年代美国文化》《嚎叫》《麦田守望者》《第二十二条军规》</p>
<p>电影:巴黎戏梦(Dreamers)、生于七月四日、大门(The Doors)、冰风暴(The Ice Storm)、革命之路(Revolutionary Road)</p>
<ul>
<li>1960
<ul>
<li>中苏分裂</li>
<li>北卡罗莱纳州格林斯博罗市的黑人静坐,学生非暴力联合委员会(SNCC)</li>
<li>肯尼迪就任总统</li>
<li>阿拉巴马废除车站和公共汽车上的种族隔离政策</li>
</ul>
</li>
<li>1961
<ul>
<li>柏林墙修建</li>
<li>约翰海乐的第二十二军规</li>
</ul>
</li>
<li>1962
<ul>
<li>学生争取民主社会组织(SDS)《休伦港宣言》</li>
<li>阿尔及利亚独立</li>
<li>甲壳虫乐队走红</li>
<li>古巴导弹危机</li>
<li>马丁路德金华盛顿10万人聚会《I have a dream》</li>
</ul>
</li>
<li>1963
<ul>
<li>肯尼迪被暗杀</li>
</ul>
</li>
<li>1964
<ul>
<li>MalcomX(马尔科姆 埃克斯)南部的黑人民权运动</li>
<li>言论自由运动,伯克利</li>
<li>马尔库塞《单向度的人》</li>
<li>斯坦利库布里克《奇爱博士》</li>
<li>美国公民权利法案</li>
<li>马丁路德获得诺贝尔和平奖</li>
</ul>
</li>
<li>1965
<ul>
<li>美国北越轰炸</li>
<li>华盛顿反战游行</li>
<li>洛杉矶瓦茨贫民窟大骚乱</li>
<li>MalcomX(马尔科姆 埃克斯)被暗杀</li>
<li>鲍勃迪伦《把一切带回家》</li>
<li>中国文化大革命开始</li>
</ul>
</li>
<li>1966
<ul>
<li>马丁路德反战</li>
<li>全国妇女组织(NOW)</li>
</ul>
</li>
<li>1967
<ul>
<li>旧金山梦幻爱之夏的性解放运动</li>
<li>切格瓦拉在玻利维亚被暗杀</li>
<li>《妇女权利法案》</li>
</ul>
</li>
<li>1968
<ul>
<li>越南春季攻势</li>
<li>布拉格之春</li>
<li>哥伦比亚大学运动</li>
<li>巴黎3.22运动</li>
<li>巴黎5月风暴</li>
<li>马丁路德被暗杀</li>
<li>芝加哥民主大会</li>
<li>苏联入侵捷克</li>
</ul>
</li>
<li>1969
<ul>
<li>文化大革命结束</li>
<li>SDS解体</li>
</ul>
</li>
</ul>
<h1 id="2021216">2021.2.16</h1>
<ul>
<li>看奇葩说瞥见刘擎老师,刷了刘擎老师的<a href="https://www.bilibili.com/video/BV1wr4y1N7Xy?p=15&spm_id_from=pageDriver">西方思想文化潮流</a>课,重温了左翼的马尔库塞的单向度的人,很好奇是不是许知远的《单向街》来自于这里,一搜不是,单向街出自于<a href="https://baike.baidu.com/item/%E7%93%A6%E5%B0%94%E7%89%B9%C2%B7%E6%9C%AC%E9%9B%85%E6%98%8E">本雅明</a>,一位48岁就被纳粹迫害自杀的哲学、文学天才。</li>
<li><a href="https://www.youtube.com/watch?v=Fx6UQstMm48">十三邀访罗翔</a>,看的出,相差一岁的许知远和罗翔,在思想上很多共通,可能是他采访过的里面算是很顺畅的一位。当然,我也知道了中国近代的大法学家<a href="https://baike.baidu.com/item/%E6%B2%88%E5%AE%B6%E6%9C%AC/3956618?fr=aladdin">沈家本</a>。</li>
<li>马勒第二交响曲,各种版本:<a href="https://www.bilibili.com/video/BV1CJ411A7tj/?spm_id_from=333.788.b_7265636f5f6c697374.4">1</a>,<a href="https://www.bilibili.com/video/BV1oE41157py/?spm_id_from=333.788.videocard.6">2</a>,<a href="https://www.bilibili.com/video/BV1jE411P7Y7/?spm_id_from=333.788.videocard.15">3</a>,<a href="https://www.bilibili.com/video/BV1fW411g7jJ/?spm_id_from=333.788.videocard.3">4</a>,<a href="https://www.bilibili.com/video/BV1kA411E7Hv/?spm_id_from=333.788.videocard.17">5</a>,<a href="https://www.bilibili.com/video/BV1y54y1r73k/?spm_id_from=333.788.videocard.1">6</a>,<a href="https://www.bilibili.com/video/BV11T4y1G75E/?spm_id_from=333.788.videocard.0">7</a>,<a href="https://www.bilibili.com/video/BV1Hs411R7Ax?from=search&seid=9896810694756415478">8</a>,听一听,看看喜欢哪个版本?</li>
<li>Tesla的两位最早的创始人,讲述<a href="https://video.h5.weibo.cn/1034:4604238735540271/4604248879007441">tesla的故事</a>,原来马斯克只是第4位CEO,即使到现在,特斯拉还是按照创始人最开始的愿景在发展,很喜欢这灵位白发苍苍的IT老者:Eberhard和Tarpenning。</li>
<li><a href="https://mp.weixin.qq.com/s/U3wWF6n74CrlkMoeg4gp-g">知识贴</a>,最近的显卡都被弄去挖矿了,诅咒比特币往死里跌</li>
<li>三天,刷完了意大利高分电影<a href="https://v.qq.com/x/cover/szdk5vibdh32543/e0022yenjw5.html?ptag=douban.movie">《灿烂人生》</a>,我已经不知道该怎么形容这部电影了,我只能静静地不断地被时间感动。</li>
<li><a href="https://www.bilibili.com/video/BV1nN411o71i?p=2&spm_id_from=pageDriver">Rose</a>,太Q了,大眼萌的我都快化了,好喜欢这个英国的天使爱美丽。</li>
<li><a href="https://www.youtube.com/watch?v=7Mi3TT5_dc8&ab_channel=%E7%8E%8B%E5%89%91WongKim%27sObservation">凤凰卫视的大地震</a>,王健老师八了一下凤凰网和刘长乐的故事。</li>
<li>终于,有时间静静的坐下来,刷完了“文艺青年必看”的<a href="https://www.iqiyi.com/v_19rrgcco6k.html?vfm=m_331_dbdy&fv=4904d94982104144a1548dd9040df241">Once曾经</a>,<a href="https://movie.douban.com/subject/2053515/?from=subject-page">豆瓣介绍</a>,完事八了八男女主演和导演(主演<a href="https://movie.douban.com/celebrity/1045079/">格伦</a>),居然都是歌手,真实出演,很好看,上一次看这类电影是《<a href="https://movie.douban.com/subject/6887029/">醉乡民谣</a>》了。</li>
<li>淘了个新的油管UP主,八了八<a href="https://www.youtube.com/watch?v=ISlfUzVUcSA&ab_channel=%E5%86%B2%E6%B5%AA%E6%99%AE%E6%8B%89%E6%96%AF">潘石屹和他的SOHO的故事</a>,没落的SOHO,和它经历过的过山车一样的中国房地产。</li>
<li>大象放映室,一直很喜欢UP主的电影解说,她最近做的中国改革开放40年,从1978年已经做到<a href="https://www.youtube.com/watch?v=PK4VglvvgqE&ab_channel=%E5%A4%A7%E8%B1%A1%E6%94%BE%E6%98%A0%E5%AE%A4">1986年</a>了,真的很不错,很多故事我也不知道。</li>
<li><a href="https://video.h5.weibo.cn/1034:4599913665724473/4600040587266097">洗碗机的奥秘</a>,给你完整了讲了洗碗机的机理,很好的知识贴。</li>
<li><a href="https://www.bilibili.com/video/BV1EW411u7JG?p=2">温铁军:新中国十次危机</a>,虽然很左,但是确实讲的非常好,也让我知道了中共驾驭这么大一个国家的基本逻辑。他的另外一个比较简短的讲<a href="https://video.h5.weibo.cn/1034:4575050624335885/4575051222093136">土地革命和中产阶级</a>的,也值得一听。</li>
<li><a href="https://www.bilibili.com/video/BV1Xs411Z7c2?p=2&t=20">混沌</a>,一个讲数学和混沌的e文视频,很不错。</li>
<li><a href="https://weibo.com/ttarticle/p/show?id=2309404595026045829227">一群穷孩子的人生实验</a>,命运之神是最多变和无常的,孩子们是不幸的,却又是幸运的。</li>
<li><a href="https://zhuanlan.zhihu.com/p/46119157">朗道</a>,之前居然不知道的苏联物理大神,<a href="https://baike.baidu.com/item/%E5%88%97%E5%A4%AB%C2%B7%E8%BE%BE%E7%BB%B4%E5%A4%9A%E7%BB%B4%E5%A5%87%C2%B7%E6%9C%97%E9%81%93/2194600">百科</a>,他的著名的朗道十诫,他和诺贝尔奖的故事,都非常有趣。他的物理教材《朗道十卷》,更是专业物理学者们的bible。</li>
<li><a href="https://book.douban.com/subject/26831765/">远方之镜</a>, 巴巴拉·W·塔奇曼的历史纪传,<a href="https://www.youtube.com/watch?v=P6q75kzKS60&t=3s&ab_channel=%E6%AF%8F%E6%97%A5%E4%B8%80%E4%B9%A6">油管上的听书</a>,讲述了14世界一位骑士的一生,是那个时代的缩影。他的<a href="https://book.douban.com/subject/1322401/">《八月战火》</a>,也非常棒。</li>
<li>纽约客6万字美国大疫纪事:<a href="https://mp.weixin.qq.com/s/EzSz1IgDJK3VKUsSgg9Pnw">新冠悲剧背后的错误与挣扎</a>,6万字,带着我们重新回顾一遍美国的新冠发展过程。</li>
<li><a href="https://www.youtube.com/watch?v=lqRhhTgpmOk&list=PLxmPWDbLYn31XEyXZrUTqQHEdUyjo2CKt&index=8&ab_channel=%E8%B7%AF%E4%B8%8A%E8%AF%BB%E4%B9%A6%C2%B7%E7%B2%BE%E8%AF%BB%E5%85%A8%E7%90%83%E5%A5%BD%E4%B9%A6">精读诺贝尔文学奖获奖作品20本</a>,嘘!偷偷的收藏一下,这个是收费的诺奖20本书,油管上可耻的盗了,我可耻的收藏了:),雪国、新月集、霍乱时期的爱情故事….</li>
<li><a href="http://www.pengzhihui.xyz/">稚晖</a>,一个神奇的理工男,你以为他是个硬件专家,其实人家是一个CV专家噢。他的透明小电视太惊艳了。</li>
<li>这集的<a href="https://www.bilibili.com/video/BV1Ny4y1n7XP">北京青年x凉子访谈录</a>,让我知道了一个词,小镇做题家。</li>
<li><a href="https://www.bilibili.com/video/BV1XT4y1N7fp">“学校并不培养优秀的人,它只是教你「听话」…”</a>,北京青年x凉子访谈录采访的一个没上大学的作家。</li>
<li><a href="https://www.bilibili.com/video/BV1ok4y127FP/?spm_id_from=trigger_reload">帕格尼尼</a>,小提琴之神,神一般的演奏技巧。</li>
<li><a href="https://www.bilibili.com/s/video/BV1w7411D7RG">少女疑云</a>,我小时候印象超深的一部日剧,记得钢琴键里面藏刀片的经典场景,终于找到了又,当然,还有她弹奏的肖邦的革命,至今还记得。</li>
<li><a href="https://www.sohu.com/a/311143185_609049">画家弗拉基米尔-沃列戈夫</a>,突然看到他画的<a href="https://www.dapenti.com:99/dapenti/668da125/90e43652.jpg">一幅画</a>,狠惊艳,于是就去搜了一下,他是俄罗斯的当代画家。</li>
<li><a href="https://weibo.com/tv/show/1034:4343644967379894?from=old_pc_videoshow">20个小时学会任何东西</a>,技巧就是分解、矫正和坚持20小时。</li>
<li>星际穿越中的<a href="https://www.bilibili.com/video/av968297662/">不要温柔地走入那良夜</a>,是英国诗人<a href="https://baike.baidu.com/item/%E4%B8%8D%E8%A6%81%E6%B8%A9%E5%92%8C%E5%9C%B0%E8%B5%B0%E8%BF%9B%E9%82%A3%E4%B8%AA%E8%89%AF%E5%A4%9C/8670983?fr=aladdin">狄兰·托马斯的诗句</a>,表达了对于死神将可爱的人们带离这个世界的愤怒,“怒斥光明的消逝”。</li>
</ul>
<h1 id="20201227">2020.12.27</h1>
<ul>
<li><a href="https://www.bilibili.com/video/BV1AZ4y157iZ">杨德昌的《海滩一天》</a>,是杨导的第一步作品,却揭示了人生命运的波折,让我印象深刻。</li>
<li><a href="https://www.bilibili.com/video/BV1BE411y7Qu">中央车站</a>,越哥从来没让我失望过,这部治愈系的,揭示人的复杂,却不让人绝望,我们都是受过伤的刺猬,但是最终我们会选择拥抱世界的。</li>
<li>继续,越哥推荐的<a href="https://www.youtube.com/watch?v=EnCNSv-HCPY">《阿弥陀堂讯息》</a>,同样的治愈系,让我们淡泊明志,珍爱世界。</li>
<li><a href="https://www.youtube.com/watch?v=WbYmPl6xKMk">婚姻最大的致命伤,不是出轨《革命之路》</a>,泰坦尼克之后,Jack和Rose的婚后生活,都是带刺的玫瑰,都是心怀理想,电影讲出了我们内心最挣扎的一面。</li>
<li><a href="https://www.bilibili.com/video/BV15J411U7mr">小丑2019</a>,跟着亚瑟一起,经历被世界遗弃,到绝望,到最终堕落的过程。<a href="https://www.bilibili.com/video/BV11x41167uG">杰昆菲尼克斯</a>演技爆棚,淋漓尽致。</li>
<li><a href="https://www.bilibili.com/video/BV1kr4y1F7M5">【三教极简史】困扰我多年的问题:基督,犹太,伊斯兰教的关系?</a>,把这三教的关系讲的清清楚楚,赞一个。</li>
<li><a href="https://www.bilibili.com/video/BV155411V7Pc?t=1">史上最长,没人比我更懂精神鸦片–马勒</a>,神奇的马勒,神奇的马勒第二交响曲——复活,<a href="https://space.bilibili.com/472387555">小哥哥</a>给还给我们讲了很多很多不熟悉的音乐家的故事,是最近淘到的不错的UP主。</li>
<li><a href="https://www.bilibili.com/video/BV144411L7KF?t=2462">【回到2049】S04E21 人体卫士:免疫力与免疫系统</a>,话说这个老刘啥都懂啊,这免疫系统也讲的头头是道啊,虽然嘴比较碎道,知识却十分丰富的。另外,<a href="https://www.bilibili.com/video/BV1Px411e7qH?p=2">这个</a>和<a href="https://www.bilibili.com/video/BV1uW411b7yX?t=286">这个</a>,也讲的不错,让我对巨噬、T到B细胞的关系,梳理了一遍,清楚多了。</li>
<li>笑眯眯的胖纸Liam又来了,他的<a href="https://www.bilibili.com/video/BV1Lk4y1B74D">中国建筑师走向世界?深圳地标将是一坨石头?(侃爷做的才是一坨石头)</a>,让我重新认识了马岩松,之前瞥到过<a href="https://v.qq.com/x/cover/mzc002000zad81b.html">十三邀关于他的故事</a>,没太在意,没想到是个建筑大神啊!我家门口的中央公园大道,那个黑乎乎的外星飞船一般的建筑,原来也是他的杰作。</li>
<li>还有渣男的建筑之神路易斯康的故事,<a href="https://www.bilibili.com/video/BV1xA411J7vF">上</a>和<a href="https://www.bilibili.com/video/BV1xA411J7vF?t=28">下</a>,带我认识了,害羞的、不屈服的、充满才气的、勤奋的渣男建筑之神——<a href="https://www.zhihu.com/question/22550011/answer/23252990">路易斯康</a>。当然,我也趁机知道了,建筑奖里的诺贝尔,<a href="https://baike.baidu.com/item/%E6%99%AE%E5%88%A9%E5%85%B9%E5%85%8B%E5%A5%96/6092239?fr=aladdin">普利兹克奖</a>。</li>
<li>这个<a href="https://www.bilibili.com/video/BV1Bz4y1k73v?t=41">讲咖啡的</a>,给我们讲述了这个行业的很多知识,确实很专业,回形针出品的。</li>
<li>这个是回形针的新作品,<a href="https://www.bilibili.com/video/BV1CK411u7n5">基本操作</a>,他们的想法很神奇,也很有情怀,如果能实现了,太牛叉了,期待ing。</li>
<li>又是鹿哥,带我认识了坚强的墨西哥国民画家,<a href="https://www.bilibili.com/video/BV1YZ4y1G75T?t=1">没人比我更懂一字眉–弗里达卡罗</a>,那个一字眉的样子,相信你一定曾经看过,我之前看过一个关于她的传记的电影介绍,一生充满神奇的经历。</li>
<li>门外汉系列,<a href="https://www.bilibili.com/video/BV1KV411U7iU?t=9">【门外汉画调子】01 用五个调子画素描,你真的会吗?</a>,<a href="https://www.bilibili.com/video/BV1Kv411z7sT?t=3">【门外汉画透视】01 这个透视技巧很多人不知道,却又必须得知道</a>,让我这个对绘画神往,却一直下不了决心学习的门外汉,一窥了一些绘画的技巧。</li>
<li><a href="https://www.bilibili.com/video/BV19E411q7k8?p=15&t=26">【俗说宇宙】我们的太阳系(合集)</a>,听同事讲的天文的距离的讲座后,了解到太阳系到底有多大,了解到了柯伊伯带,还有更广阔的、遥远的奥尔特云。</li>
<li><a href="https://www.bilibili.com/video/BV1cx411x72t?t=365">五分钟了解《轴心时代》</a>,春秋、古希腊、古巴比伦、佛陀,大师们一波来一波走,好像历史总是这样。</li>
<li><a href="https://www.bilibili.com/video/BV1iy4y167H2?t=3">【杨立华】清谈,虚无?魏晋的价值虚无与归宿</a>,北大杨神,魏晋是他擅长的,虽然他主攻儒家,讲透那个风华绝代的年代。</li>
<li>十三邀之许倬云,<a href="https://v.qq.com/x/cover/mzc0020019dz35p/p307602x7ny.html">今天人们陷入意义危机 要有远见超越未见</a>,心怀天下,心怀国家,耆耄之年的许倬云,让人尊敬、感动。</li>
<li><a href="https://video.h5.weibo.cn/1034:4579148916523078/4579166043767347">《如何让好人变成杀人犯》</a>,太可怕了,心智可以被这样操纵。</li>
<li><a href="https://www.bilibili.com/video/BV1LE411G7oD">如何学习艺术史</a>,博士小姐姐给我们列了书单,很专业的讲了如何学习艺术史,收藏。</li>
<li>西方艺术史<a href="https://www.youtube.com/watch?v=_GgW6mtvktQ">上</a>和<a href="https://www.youtube.com/watch?v=0tvesL99RqI&t=990s">下</a>,讲的很好,作者丁宁,打算买本看看。</li>
<li><a href="https://www.youtube.com/watch?v=BPhZ7fhT_RM&ab_channel=%E6%96%B9%E5%8F%AF%E6%88%90FANGKecheng">方可成的求知焦虑经历</a>,真的很感同身受啊</li>
</ul>
<h1 id="20201115">2020.11.15</h1>
<p>学习和教育系列</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV1jV41127i8">《学校如何运转》</a>,十一校长对教育的理解,讲得非常好,可惜这样的校长在中国太少了。</li>
<li><a href="https://www.bilibili.com/video/BV19i4y1j7yN">《怎样解题》数学思维的新方法</a>,对数学的学习很有帮助的学习方法分享。</li>
<li><a href="https://www.bilibili.com/video/BV1164y1T7VD/">如何成为一个很厉害的人?</a>,图灵的猫讲的很好啊,不要被自己臆想的问题吓到,抽丝剥茧的解决它。</li>
<li><a href="https://www.himself65.com/quit-qhnu/">退学</a>,无意间淘到的一个twitter主,他的故事狠励志。</li>
<li><a href="https://www.bilibili.com/video/BV1Uz4y1C7dY">传说中的衡水中学,匪夷所思的事</a>,你因为他们都是学霸往死了学,不是,他们学的狠科学,也确实非常努力。小哥们最后的反转太神了,一定看到最后。这个节目的up主<a href="https://space.bilibili.com/496688267">北京青年x凉子访谈录</a>,都集都非常神奇,简直是当代青年图鉴。</li>
<li><a href="http://vancexu.github.io/2015/01/08/learning-how-to-learn-part-one.html">Learning How to Learn</a>,著名的的Dr. Barbara Oakley 教授,著有课程同名书籍:《Learning How to Learn ——How to Succeed in School Without Spending All Your Time Studying; A Guide for Kids and Teens》 2018年8月出版,她也是《学习之道》一书的作者。
她小学到高中数理成绩一路垫底,因此热爱文学。职场生活,不得不学习大量新鲜知识,甚至是头疼的数学知识。放下工作,回到学校,竟然学成了工程学博士,后留任教授。在MOOC、Coursera上开创最受欢迎的学习课“learning how to learn”,数十万人报名。<a href="https://www.bilibili.com/video/BV1NW411C7d8?p=1">B站的链接</a>,有中文字幕,不过比较老。<a href="https://study.163.com/course/courseMain.htm?courseId=1005319012">网易公开课上的链接</a>,</li>
<li><a href="https://www.bilibili.com/video/BV1rE411s7Gt">掌握学习本质</a>,核聚的高效学习的训练营。</li>
<li>洪兰教授在混沌大学讲授的<a href="https://www.bilibili.com/video/BV1CK4y1t72p?p=1">认知心理学</a>,洪兰教授是台湾中央大学认知神经科学研究所所长,她讲述了很多关于脑科学和认知的知识,了解这些知识,也有利于我们更好地让我们的学习方法更符合认知规律。</li>
<li><a href="https://www.bilibili.com/video/BV1cA411Y73k">学会如何学习</a>,B站的axtoliu UP主的分享,言简意赅的总结了Barbara Oakley 教授的学习之道内容。</li>
<li><a href="https://www.bilibili.com/video/av37126621">如何提高学习效率?</a></li>
<li><a href="https://www.bilibili.com/video/av88910392">费曼学习法</a>:学完,去讲给别人。</li>
<li><a href="https://www.bilibili.com/video/av77295377">费曼的超级阅读法</a>:从开始读直到能读下去</li>
<li><a href="https://www.bilibili.com/video/av70998909">为什么费曼学习法被称为终极学习法</a>:一个搞神经网络的大神,他的学习观系列超赞</li>
<li><a href="https://www.bilibili.com/video/BV1fC4y1W767">从学渣到博士:一个学习方法改变我的命运,自创2.0版费曼学习法</a>,他除了讲授费曼的要点外,还提到了费曼学习法在英语学习中的要点。</li>
<li><a href="https://space.bilibili.com/434346657/channel/detail?cid=113847">北大学霸讲高效学习</a>,请了18位北京大学的在读学霸们,分享他们的高考和学习经验。</li>
<li><a href="https://www.bilibili.com/video/BV1164y1T7VD/">如何成为一个很厉害的人?</a>,大致和第一性原理的概念差不多,克服惯性思维,转换思维模式。</li>
<li><a href="https://www.bilibili.com/video/BV1rZ4y157dj">陪孩子走过初中三年</a>,要是早点听到这本就说好了</li>
</ul>
<h1 id="20201026">2020.10.26</h1>
<ul>
<li><a href="https://www.bilibili.com/bangumi/play/ep329499">我是XX生</a>,第二季了,看了几个,感觉貌似离普通年轻孩子的生活渐行渐远,都开始走高大上的专业、博士硕士啥的了,我也明白,主旋律让强基,导演们也得跟着旋律走,但我其实更想了解更普通的XX生,那些为命运挣扎的孩子们。anyway,还是拍的很不错的,让我们一窥不一样的道路。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ss5297?t=3933">千年女优</a>,B站的直链,<a href="https://movie.douban.com/subject/1307394/">豆瓣的介绍</a>,淘自<a href="http://www.dapenti.com/blog/more.asp?name=dianying&id=152421">B站电影免费分区“值得看的电影”不完全合集</a>,还有许多好看的电影。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ss20169?t=1395">筑地寻味</a>,我们吃饭的时候必看,每集一个老外的视角去追寻筑地和日本的美食,十分下饭。</li>
<li><a href="https://video.h5.weibo.cn/1034:4563202864775195/4563203131183140">一个孩子的TED演讲:寒窗苦读为了什么?</a>,也许99.9%的人都无法经历这种生活,但是让人向往和反思。</li>
<li><a href="https://www.bilibili.com/video/av82237792/">经济是如何运行的</a>,貌似贴过,不过再贴一遍,因为太经典了。</li>
<li><a href="https://video.h5.weibo.cn/1034:4561867868143653/4561872618002689">如何说话</a>,MIT的AI老教授,手把手交给我们如何去表达和演讲,讲的挺好的,居然听完了。</li>
<li><a href="https://video.h5.weibo.cn/1034:4561068262096931/4561077003887906">科普广义相对论</a>,油管科技网红<a href="https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA">Veritasium</a>讲述的广义相当论的概念,我居然听懂了。</li>
<li><a href="https://towardsdatascience.com/has-global-violence-declined-a-look-at-the-data-5af708f47fba">全球暴力降低了么?</a>,答案是降低了,1700年就大幅下降,1850年之后就更低了,2000后基本上就非常稀少了,这符合你的认知么?</li>
</ul>
<h1 id="2020106">2020.10.6</h1>
<ul>
<li><a href="https://baike.baidu.com/item/%E4%B8%89%E7%BA%BF%E5%BB%BA%E8%AE%BE/1691434">三线建设</a>,一段像我这岁数都不曾了解的历史,是那一代人的时代,不应该被遗忘。</li>
<li><a href="https://www.youtube.com/watch?v=pnGN2EfwAw4">阿修罗</a>,据说日本都封了很久的题材。<a href="https://space.bilibili.com/254576906">少年看电影</a>推荐的很多动画片都很棒,还比如这个<a href="https://www.youtube.com/watch?v=S-G8pP4UrVU">强风吹拂</a>,很鸡汤励志的青春片。</li>
<li><a href="https://www.youtube.com/watch?v=P6vaNfFT8V0">双旗镇刀客</a>,我是不太懂电影艺术,但是在圈内评价很高,据说非常黑泽明化,我刷了最后一段,确实很震撼。</li>
<li><a href="https://www.youtube.com/watch?v=DNBS_fRA7CU">方可成老师的开学第一课</a>,终于方老师满血复活了,同时回归的,还有他的新的一期的<a href="https://www.youtube.com/watch?v=g6zgObJzSyY">夜话</a>,让我想起当年的武周同和零点夜话。</li>
<li>最近喜欢上刷这对<a href="https://www.youtube.com/channel/UCSW4sokhjnXHipsOdv7T1wA">夫妻的穷游</a>,很质朴的两口子,一直在路上。其中的<a href="https://www.youtube.com/watch?v=erJaXtindOo">伊朗</a>,<a href="https://www.youtube.com/watch?v=jWgYyMfaAew">阿塞拜疆</a>,<a href="https://www.youtube.com/watch?v=dwRPCuEY8QQ">亚美尼亚</a>,让我完全看到了另外的世界,真实的中东纷乱的世界。想到这几天阿塞拜疆和亚美尼亚的战斗正酣,不由更是感慨万分。</li>
<li><a href="https://www.bilibili.com/video/BV1Dk4y1y7iw?t=308">从入坑到转行,看建筑学up们怎么说</a>,让偶们这些外行们多少理解了建筑狗们的不易。顺道捕获一枚可爱的UP主<a href="https://space.bilibili.com/598257922">海边的Liam </a>,胖乎乎的笑眯眯的超可爱,立刻路转粉,比如这集<a href="https://www.bilibili.com/video/BV1ja4y1J7Gz">聊聊女性建筑师</a>,讲美国的女建筑大师,很有意思。</li>
<li>盯着这个<a href="https://www.bilibili.com/video/BV1ut411U7R6">素描头像</a>,30分钟,居然目不转睛的看完了,羡慕死UP主的绘画功底了。还有这个,<a href="https://www.bilibili.com/video/BV1Gt4113749">雕塑的教学课</a>,每个雕塑家都是解剖学家么?</li>
<li><a href="https://www.bilibili.com/video/BV1Rs411A7ih?t=5989">吸血鬼猎人D剧场版</a>,经典的日本动画,居然在B站上有高清版,美美地偷偷地刷了一晚上;推荐的还有<a href="https://movie.douban.com/subject/1441644/">妖兽都市</a>(<a href="https://www.bilibili.com/video/BV1Xa4y1a7k1">介绍</a>)和之前提过的忍者片<a href="https://movie.douban.com/subject/1421884/">兽兵卫忍风帖</a>,对,顺道在推荐一下伊藤计划三部曲。这些都是超好看的日漫。</li>
<li><a href="https://www.bilibili.com/video/BV1Rk4y1y7c8?t=474">好色一代男</a>,日本浮世绘风格的“色情”动画,日本版金瓶梅,讲述了传奇世之介的故事。</li>
<li><a href="https://www.bilibili.com/video/BV1bs411n7ic">巨人的文明——罗马建筑文明</a>,讲的太赞了,把罗马历史和建筑串讲了一遍,强力推荐。陈文捷老师出了三本科普性质的建筑史的书:<a href="https://book.douban.com/subject/30246810/">巨人的文明</a>,<a href="https://book.douban.com/subject/30658059/">文明的开端</a>,<a href="https://item.jd.com/12712169.html">天才的世界</a>,还有一本<a href="https://book.douban.com/subject/1635131/">世界建筑艺术史</a>,都非常赞。</li>
</ul>
<h1 id="2020103">2020.10.3</h1>
<ul>
<li><a href="https://weibo.com/tv/show/1034:4555543453564949?from=old_pc_videoshow">PBS Nova 人类本性 (2020)</a>,我的最爱话题,CRISPR基因编辑技术和应用的PBS纪录片。</li>
<li><a href="https://www.bilibili.com/video/av18415531/">沙漠之花</a>,卧槽,非洲居然有好几亿女人被恶毒的割礼毒害,虽然之前听说过这个词,但是真正理解它的含义,还是让我不寒而栗了很久,愿这种罪恶的东西今早在世界上消失殆尽把。</li>
<li><a href="https://www.bilibili.com/video/BV1Bt4y1176s">开发者</a>,这篇好屌,比西部世界还脑洞,量子计算来预测因果,还有各种科技硬核,可惜又是电视剧,真心没时间刷,看看集锦过过瘾吧。</li>
<li><a href="https://www.bilibili.com/video/av244158043">牯岭街少年杀人事件</a>,杨德昌导演的4小时巨著,堪称经典,看着小四一步步的随着那个黑暗时代,逐渐滑向黑暗的过程,痛心不已。</li>
<li><a href="https://www.bilibili.com/s/video/BV19K411J7NQ">嬉皮士到底是一群什么人?</a>,那个年代,一群不羁的美国年轻人引领的一场改变世界的运动,浪漫但又混乱,自由但又无奈。</li>
<li><a href="https://www.bilibili.com/video/BV1Cp4y1U7fp">消费主义是如何对年轻人进行欺骗与洗脑的?</a>,这个话题本身我就感兴趣,正好是当下这个社会的场景再现。</li>
<li><a href="https://www.bilibili.com/video/av752721494/">蒋勋 - 留十八分钟给自己</a>,诗歌、画境,蒋勋带着我们流淌他的岁月,跟着一起来一场心灵的旅行。</li>
<li><a href="https://www.bilibili.com/video/BV1h54y1m7x8">The Social Dilemma - 社交困境</a>,熟肉版的,讲述社交网络对我们的影响和控制,Netflix的良心之作。</li>
<li><a href="https://www.bilibili.com/video/BV1mk4y1z7mz">最伟大的骑士-威廉·马歇尔传</a>,小哥讲的骑士故事太精彩了,可惜只讲到第三集。</li>
<li><a href="https://www.bilibili.com/video/BV1Nb411b7Ft?p=1">教你背单词</a>,刚开始我看了还挺激动,不过尝试了一下,还是不太实用,不过这个视频还是狠值得推荐,让我对英语单词有了更深的理解。</li>
<li><a href="https://www.youtube.com/watch?v=16agucwCq7k">甲贺忍法帖</a>,讲日本忍者的神片,不是火影,不是火影,根本不是一个层次的。<a href="https://www.zhihu.com/question/25428550">对比</a>。它还有<a href="https://www.youtube.com/watch?v=HZGAwo33Wi4">电影版</a>.</li>
<li><a href="https://weibo.com/tv/show/1034:4549840680452118">费曼生动解释“火”现象</a>,对,就是他,费曼学习法的费曼,爱因斯塔之后最伟大的物理学家,讲火的形成,讲的太有意思了。</li>
<li><a href="https://www.youtube.com/watch?v=LvAK84AQPew&ab_channel=OkButSoWhat">为什么我们的教育培育不出性感的公民?</a>,OkButSoWhat的老视频,讲透这个荒诞的世界。</li>
<li><a href="https://www.youtube.com/watch?v=UpCEN4aSmP0&list=PL90U7hPergjtKMHtxeP3TlL0JTfQbRjd8">激荡四十年</a>,是我喜欢的大象放映室(做电影解说的UP主),做的一个讲中国这四十年的辩护的系列讲解,做的很不错。目前还在持续更新中。</li>
<li><a href="https://www.youtube.com/watch?v=uNGh6Q--2_Q">採訪200多位老人尋找失傳好歌</a>,把时光留住的民谣,小何去挽救民谣的故事。</li>
<li><a href="https://www.bilibili.com/video/BV1Xi4y1t7hN">你永远见不到的山区留守儿童的真实生活</a>,<a href="https://space.bilibili.com/480366389">溫暖的冷风</a>,一个非常善良的年轻人,走进山里,把一个个贫穷的幼小的灵魂展现给我们。唉,这世界就是这样的不公平。</li>
<li><a href="https://www.bilibili.com/video/BV1y4411k7eS?p=1">宇宙之卵:今生前世</a>,一个奇妙的脑洞,一个自我救赎的世界。</li>
<li>《想象的共同体》<a href="https://www.bilibili.com/video/BV175411W7YB">1</a>,<a href="https://www.bilibili.com/video/BV1za4y1Y7Z9">2</a>,<a href="https://www.bilibili.com/video/BV1zA411i7CS">3</a>,<a href="https://www.bilibili.com/video/BV1qv411y78K">4</a>,一个系列,讲的不错。</li>
<li><a href="https://zhuanlan.zhihu.com/p/51346225">互联网“全景监狱”:被凝视下的自我规训</a>,当下的互联网监控,正是福柯所说的无所不在的权力控制,边沁的全景式监狱的写照。</li>
<li><a href="https://www.bilibili.com/video/BV17s411s7Bb/">内在与外在的联系</a>,又一个神片,讲人、复杂科学、宇宙、Akasha/螺旋/蛇与莲花/超越思维等话题的纪录片。</li>
<li><a href="https://www.youtube.com/watch?v=OHTqCYCQJe0">量子计算机可以取代经典计算机?</a>,<a href="https://www.youtube.com/watch?v=OJEoWNZKcfs">什么是量子计算机?</a>,妈咪说的两集关于量子计算机的讲解,可以让你快速了解神秘的量子计算机。</li>
<li><a href="https://www.bilibili.com/video/BV1Tk4y167Md">建筑师做方案是如何推敲的?</a>,作为建筑设计外行,看看这个视频,还是多少窥探了一下这个行业的一些模样。</li>
<li><a href="https://www.youtube.com/watch?v=F55xFx0BTg4">《天真的人类学家》</a>,纳吉尔巴利的故事,很有意思,让我了解了人类学的故事,找时间找来<a href="https://book.douban.com/subject/6712255/">书</a>读一读。</li>
<li><a href="https://www.youtube.com/watch?v=5AfZq1hQPxk">《规训与惩罚》</a>,福柯的代表作,没时间读书,来听听这个,对福柯感兴趣,可以听听谌洪果老师的人文通识讲解<a href="https://www.youtube.com/watch?v=YVFDRj9AQnw">福柯</a>。</li>
<li>谈到人类学,国内有名的一位是“星”,他的代表作<a href="https://book.douban.com/subject/34837907">《大河移民的故事》</a>,可以听听<a href="https://www.youtube.com/watch?v=EQIw-wsjsIo">开卷八分钟对这本书的讲解</a></li>
<li><a href="https://www.zhihu.com/question/23698512">李猛是个神人</a>,<a href="https://www.douban.com/group/69555/">李猛豆瓣小组</a>,一位70后的哲学大神,可惜在当下注定是<a href="https://www.douban.com/group/topic/78871489/">不得志的人</a>。</li>
<li><a href="https://www.youtube.com/watch?reload=9&v=xg27b_Tx8_c&feature=youtu.be&ab_channel=mimiFish">美国的故事(第二季)</a>,音频的,巨长,7小时。</li>
</ul>
<p>艺术序列</p>
<ul>
<li><a href="https://www.bilibili.com/video/BV1Tx411w7pd?t=223">大师版的卡农</a>,治愈系的音乐,和妻静静的听完,想起儿子小时候练琴的时光,岁月如歌。</li>
<li><a href="https://www.bilibili.com/video/BV1Bz411e71M?t=634">古典乐时间线</a>,MM带我们走过音乐的历史长河,很短小的一个音乐风格扫盲视频。</li>
<li><a href="https://www.bilibili.com/video/BV194411t7kS?t=625">西洋美术史</a>,儿子一听就听出来,是台湾版哆啦A梦的配音解说的,非常赞的一个讲西方美术史的动画片,对!动画片!超有爱。可惜被B站和谐的七零八落,可惜了,不过,我还是没有强迫症的刷完了,超赞。</li>
<li><a href="https://www.bilibili.com/video/BV1z4411w7so?t=278">古希腊神话故事</a>,想理解西方绘画,就得理解古希腊神话,这个系列快速带你过一遍这些繁杂的关系和人物,我听完的感觉就是,“宙斯啊!贵圈真乱!”。不过,想了解艺术中的人物,光有古希腊神话人物还不够,还要了解基督的故事,不过这个我得再找时间刷了。</li>
<li><a href="https://www.bilibili.com/video/BV1aj411f7oF?p=1">油画英雄志</a>,胖阿姨的讲解和蔼可亲,娓娓道来,非常适合我这类小白听故事的愿望,不知不觉就跟着阿姨留恋了几百年,对欧洲的油画艺术多了一份了解。</li>
<li><a href="https://www.bilibili.com/video/BV1pt411K7qo?t=497">一节课梳理2000年西方艺术史</a>,小哥还有<a href="https://www.bilibili.com/video/BV1gt411a7UM">极简西方建筑</a>,快餐类的讲解,很不错,谁说快餐就不好吃,我就爱吃垃圾,入门级别最需要这类垃圾食品。</li>
<li><a href="https://www.bilibili.com/video/BV1nZ4y1K7KW?t=434">世乔与圣智</a>,超喜欢这两个年轻的艺术家和他们的这个频道<a href="https://space.bilibili.com/9349641">卡在树上的艺术家</a>,他们对经典油画的讲解也非常引人入胜。</li>
<li><a href="https://www.bilibili.com/video/BV1zs411N7Cy?t=787">浮世绘和梵高</a>,啊,日本浮世绘还影响过梵高?是的,梵高对浮世绘和日本艺术很神往,</li>
<li><a href="https://www.bilibili.com/video/BV1gb411J7jj">简略中国美术史</a>,bookmark一下。</li>
<li><a href="https://www.bilibili.com/video/BV1bt411c7GJ">汤姆猫的钢琴,神同步</a>,太可爱的钢琴MM了,陪着猫鼠大战,神同步演奏了李斯特的第二号匈牙利狂想曲。</li>
<li><a href="https://www.bilibili.com/video/BV1jE411d7XU/">葛饰北斋-为画痴狂</a>,浮世绘的代表人物,葛饰北斋,一个影响深远的日本画家,据说梵高就深受其影响,可是,可是他居然是个色情画师!感兴趣的,还可以去看看描写他的动画片<a href="https://movie.douban.com/subject/25872959/">“百日红 百日紅”</a></li>
<li><a href="https://www.bilibili.com/video/BV1KJ411G7Xq/">莫奈一生画的女人</a>,一个凄美的故事,一个幸福的故事,莫奈的一生挚爱。看完这个,还是默默的被感动了。</li>
<li><a href="https://www.bilibili.com/video/BV18J411B7Rz/">音乐何须懂</a>,中国音乐学院的周海宏老师,把高雅音乐拉下神坛。</li>
<li><a href="https://www.bilibili.com/video/BV1n7411C7Q5?p=1">湖北大学-西方美术史十六讲</a>,一个慕课课程,很不错,短小精悍,很适合入门。</li>
<li><a href="https://www.bilibili.com/video/BV1xs411q7jZ?p=1">CCTV世界名画·华丽的大师</a>,CCTV做的一个纪录片,相当不错。</li>
<li><a href="https://www.bilibili.com/video/BV1ps411e7CB?p=1">北京大学的朱青生教授《艺术史》</a>,朱青生老师讲的抽象,像在吟诵一首长诗,但是却不浮华,而是直奔本质。</li>
<li><a href="https://www.bilibili.com/video/BV1qt411B7wD">十二分钟带你看完欧洲艺术史</a>,快速入门艺术史的小视频,适合小白。</li>
<li><a href="https://baike.baidu.com/item/%E9%80%8F%E8%A7%86%E6%B3%95/5082388">透视法</a>和<a href="https://baike.baidu.com/item/%E7%81%AD%E7%82%B9/7454736">灭点</a>,马萨乔和乔托开启的西方绘画的开始。</li>
</ul>
<h1 id="202095">2020.9.5</h1>
<p>哲学系列:</p>
<ul>
<li><a href="https://space.bilibili.com/247822643/video">谌洪果系列分享:很佩服的西北大学的“退学老师”</a></li>
<li><a href="https://space.bilibili.com/457161443">人文Geek:做的很棒的课件视频,偏后现代</a></li>
<li><a href="https://www.bilibili.com/video/BV1ft411877F">张志伟 - 西方哲学智慧大学课程:张老师学院派,讲得很好</a></li>
<li><a href="https://space.bilibili.com/90070513">钱金铎的分享:年轻但是很学术</a></li>
<li><a href="https://www.bilibili.com/video/BV11t411E7aS?p=12">维特根斯坦专题:偶像大拼盘</a></li>
<li><a href="https://www.youtube.com/channel/UCE2tB8fPCGoMGAwwBMc7BuQ">OkButSoWhat:油管上的大爱</a></li>
<li><a href="https://space.bilibili.com/25221249">野鱼姬小MM:哲学系可爱的小MM</a></li>
<li><a href="https://space.bilibili.com/376872704">潜在狗子:</a></li>
<li><a href="https://space.bilibili.com/52398059">micc麦总说哲学:斯坦福的在读博士</a></li>
<li><a href="https://space.bilibili.com/362588980">汤质看本质:很牛逼,不过后面开始水</a></li>
<li><a href="https://space.bilibili.com/58617276">回到2049:神神叨叨的神人</a></li>
<li><a href="https://space.bilibili.com/142128036">犹格索斯泡泡:台湾的一个高中老师,很棒</a></li>
<li><a href="https://space.bilibili.com/375089647">多萝西123:哲学系美女学霸</a></li>
</ul>
<h1 id="202082">2020.8.2</h1>
<ul>
<li>梁文道的<a href="https://shop.vistopia.com.cn/article?article_id=7DWzD&_t=0.20392016729719198">“新铁幕演说”之后,中美关系会走向何方?</a>,讲到了中美关系的各个方面,值得一听。这篇被404的<a href="http://www.dapenti.com/blog/more.asp?name=xilei&id=150129">中美关系为何急转直下?</a>,可以一起阅读。</li>
<li><a href="https://cn.nytimes.com/opinion/20200717/china-us-cold-war/">在崩塌的地缘政治中,我被迫离开中国</a>,一个在中国生活多年的老外记着,情真意切地讲述了自己和中国的渊源,以及当下中美冲突被迫离开自己喜爱的中国,言语中透着伤感,让人唏嘘。</li>
<li><a href="https://www.zhihu.com/question/393041571/answer/1283419127">为什么美国贫富差距那么大,美国年轻人却自得其乐,而中国年轻人近年来开始会因为《后浪》等而抱怨生活困难?</a>,什么时候底层劳动者坐地铁不尴尬,可能才会真正改变。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ss23768">超级工程3</a>,刷完了,确实太牛逼了,这些工程就是人类的奇迹,对我而言,是非常震撼的,也感叹无数普通人、无数精英,一起努力合作出来的伟大工程。我观察这个是2018年拍摄的,于是我又回过头去刷了刷之前的<a href="https://www.bilibili.com/video/BV1Zt411x7Kn">超级工程1、2</a>,同样震撼,不过对比我看3的震撼小了很多,震撼疲劳了,呵呵。</li>
<li><a href="https://www.bilibili.com/video/BV1At4y1D7XC">美国教育体系之思考</a>,讲的是美国的新型学校HighTechHigh,一个神奇的学校,没有固定科目,老师决定一切教学内容,不考试只做项目,会涉及各种学科,完全改变教学的传统方式,我谷歌了有了一下,HTH在美国都是热门话题。</li>
<li><a href="https://www.bilibili.com/video/BV1RC4y1b78o">老蒋说UP主的变现</a>,老蒋挺神的一个哥们,B站的UP主,把自己的一年收入大曝光,你可以了解到这些头部UP主的收入结构和比例,让我们这些小白也开开眼。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ss28075">我是xx生</a>,老婆大人推荐的,让我们知道了这些艺考啊、小众专业的孩子们打拼和抉择的过程,都不容易啊,虽然像鸭子一样被赶着,也可以在里面找到不一样的人生。</li>
<li><a href="http://www.dapenti.com/blog/more.asp?name=xilei&id=149930">自制土豆加农炮</a>,colinfurze是个神奇的英国小子,当然也不小了,各种机械硬核制作,这次的土豆炮从头打造,完全是为了上一集的自制坦克准备的,哈哈。</li>
<li>我在阿姆斯特丹的奇幻體驗 - 迷幻蘑菇之旅<a href="https://matters.news/@cherryyoko/%E6%88%91%E5%9C%A8%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E4%B8%B9%E7%9A%84%E5%A5%87%E5%B9%BB%E9%AB%94%E9%A9%97-%E8%BF%B7%E5%B9%BB%E8%98%91%E8%8F%87%E4%B9%8B%E6%97%85-%E4%B8%8A-bafyreihb7f5oqumpnd23qptalt352iojixvbppm73fb3pvbo437gdquvmq">上</a>、<a href="https://matters.news/@cherryyoko/%E6%88%91%E5%9C%A8%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E4%B8%B9%E7%9A%84%E5%A5%87%E5%B9%BB%E9%AB%94%E9%A9%97-%E8%BF%B7%E5%B9%BB%E8%98%91%E8%8F%87%E4%B9%8B%E6%97%85-%E4%B8%8B-bafyreibwn6jbskl5mduvirj2g77cl65yqysamtsu5vjtg2p4jmgfnbi5um">下</a>,这个帖子太欢乐了,各种迷幻感觉让我神往,可惜没机会尝试,哈哈。这玩意算是毒品么?没吃过猪肉,还不兴我们看看猪跑么。</li>
<li>姐姐推荐的<a href="https://www.youtube.com/watch?reload=9&v=xg27b_Tx8_c&feature=youtu.be">美国的故事</a>,貌似是从喜马拉雅盗版搬运过来的有声书,可耻的收藏了</li>
<li><a href="https://www.bilibili.com/video/BV1R7411V7A4">红旗河究竟是一个什么样的工程</a>,<a href="https://www.zhihu.com/question/67655481">红旗河工程是否有实现可能</a>,“红旗河”,听说到了解这个词,是一个从新鲜到吓尿的一个过程,我靠,这些水利爱国党们太能狂想了,简直是基建狂人的YY巅峰之作,服了服了。</li>
<li>相比于红旗河,这才是基建狂人的真实杰作,牛逼之极了:<a href="https://www.bilibili.com/video/BV1PJ41177df">将秦岭南北凿穿!中国又一大型调水工程,将15亿方长江水引入黄河</a>、<a href="https://www.bilibili.com/video/BV1ZJ411L71z">凿穿秦岭,中国打造全球最深输水通道,把长江水引入黄河</a>。</li>
<li><a href="https://www.bilibili.com/video/BV18A411e7De">长江的10大支流是哪些?</a>,水利贴哈,感兴趣的扑上来吧,顺道推荐一下摆弄gogole earth的UP主<a href="https://space.bilibili.com/128501332">小朱看地球</a>。</li>
<li><a href="https://user.guancha.cn/main/content?id=357649&s=fwtjgzwz">印象不是真相:执政党的支持率到底有多高?</a>,不做恨国党、也不做爱国党,客观的看待一些东西,以及审视他背后的原因、动机,才是最重要的。成绩要肯定,但是问题绝对也不能遮掩。</li>
</ul>
<h1 id="202076">2020.7.6</h1>
<ul>
<li>温铁军的讲座<a href="https://video.h5.weibo.cn/1034:4523177422815269/4523428272912302">《跳出“中国崩溃论”——中国经济的艰难转轨》</a>,可以回顾一遍那些过往的“崩溃”历史</li>
<li><a href="https://mp.weixin.qq.com/s/ldTFpt0YryjgXMKZfvOWIw">周杰伦粉丝的死心史</a>,看的好叫人桑心,周董的坠落之路,但是,这可能只是周董回归到普通人而已,他成不了<a href="https://www.zhihu.com/question/19552430">坂本龙一</a></li>
<li><a href="https://www.bilibili.com/video/BV13J411e7tQ/">蒙古帝国击灭40多个国家</a>,这个up主做的很赞那,跟着地图在中亚走来走去,还能看到山脉和高原的起伏,貌似是个游戏地图。</li>
<li><a href="https://card.weibo.com/article/m/show/id/2309404523262636851244?_wb_client_=1">浅谈我国古代官僚体系</a>,快速把我国历史的官僚体系做一个梳理。</li>
<li><a href="https://weibo.com/tv/show/1034:4522368618397715">《地球之盐》</a>,传奇摄影师<a href="https://fotomen.cn/2016/11/04/saerjiaduo/">萨尔加多</a>的记录片,讲述的非洲苦难,让人触目惊心</li>
<li>明明白白搞清楚<a href="https://www.bilibili.com/video/BV1az411e7jc">失业率统计</a>,当下到底是多少,是个迷。这个黑水调查UP主刚开始做,关注。</li>
<li>大象公会的<a href="https://mp.weixin.qq.com/s/V8moTSsXfHSWRvkX8f_J3A">高考,一碗端不平的水</a>,详细梳理了一直畸形发展的中国高考制度,有数据和对比,才更了解一个制度的问题。</li>
</ul>
<h1 id="2020623">2020.6.23</h1>
<ul>
<li>马伯庸的<a href="https://weibo.com/ttarticle/p/show?id=2309404518349034881330">陪孩子读《木兰辞》</a>,我读的津津有味,很多细节的讲解都让我对作品的理解深入了很多,才真正理解古人的文笔。</li>
<li>淘到一枚新的UP主<a href="https://space.bilibili.com/484505598">无声船长</a>,一口气看完了他的所有的哲学介绍,其中<a href="https://www.bilibili.com/video/BV1RE411Y7SB?t=407">存在主义</a>,<a href="https://www.bilibili.com/video/BV1BE411r7nD">资本主义</a>,<a href="https://www.bilibili.com/video/BV1GJ411977w">对权力的解读</a>,都让我受益良多。其中,存在主义里面提到的,人生无趣但是仍要选择、坚持,就是加缪的《西西佛斯神话》所要表达的内容。</li>
<li><a href="https://movie.douban.com/subject/11537954/">瑞克和莫蒂</a>,豆瓣动画排名第一动画神剧,Rick这个神奇的姥爷,看透了世界,从此陷入虚无主义的荒诞当中,唯有亲情是他唯一的救赎。表面是一个荒诞不羁的动画,实则是对这个世界的荒诞的嘲讽。<a href="https://www.youtube.com/channel/UCf_bknpnrxghX7yFzcGTSPQ">油
管上</a>有简短对每集的介绍。</li>
<li>老六de<a href="http://www.dapenti.com/blog/more.asp?name=agile&id=149164">这些痛苦一点儿都不高尚</a>,大概是针对后浪那时候写的,不过现在读来,还是味道十足,该和青春的自恋告别,面对成人的灰暗世界了。</li>
<li><a href="http://blog.sina.com.cn/s/blog_5cd6dbad0102vz76.html">罗伯特议事规则</a>是1876年罗伯特指定的讨论会议的规则,已经被广泛采用,里面的原则简单实用,甚至可以用在乡村会议中,凸显效率、公平、和谐等原则。<a href="https://v.youku.com/v_show/id_XMTU0Mjg0MTc2OA==.html?spm=a2h0k.8191407.0.0">优酷</a>上有一个台湾小朋友应用规则议事的demo。</li>
<li>关注<a href="https://zhuanlan.zhihu.com/p/142899823">AHA视频</a>有段时间了,我专门尝试去搜它的<a href="https://www.qcc.com/creport/e5a14948f97ae22de75ca3698261b29d">创始人</a>,居然没有什么报道,有点神秘哈。不过它的这个<a href="https://space.bilibili.com/103601119/">写实视频</a>是我一直想看的节目,不是电视台那种俯视,而是平视着尽可能地忠实记录他们就好,不像冷暖人生那样非让你流泪,客观冷静,让你自己体会生活别后的真实,恩,他们做的还不错。</li>
<li>同样的,还有<a href="https://space.bilibili.com/17186754">人类实验室</a>,做的都是尝试用创作的手段展现生活的真实,<a href="https://www.bilibili.com/video/BV187411m7zb">《静音》当初劝你找个有钱人嫁了</a>拍的很不错,不过很多其他的片子,总是感觉用力过猛的感觉,有种刻意在里面,反倒让我看的时候充满了警惕,而无法刺穿我的情绪。不管怎么说,已经做得很不错了。</li>
<li><a href="https://v.qq.com/x/cover/1jzaia3sw5vcrws/z0030vlb16o.html">面孔:20世界杰出人物</a>,这100年来改变我们的人们,这个BBC的纪录片很正能量,确实也拍的不错。</li>
<li><a href="https://www.bilibili.com/video/BV11T4y1J7Lk?t=699">十年自学各种技能做游戏</a>,老哥真的牛,一个人开发了steam上的游戏<a href="https://store.steampowered.com/app/1017410/_/">原石计划</a>,我只能默默的伸出拇指,画出一个大写的“服”!从策划、美工、编程全部一人搞定,听得出,十年也走了不少弯路,一路走来,不易!</li>
<li><a href="https://www.bilibili.com/video/BV1xJ411b7oS?t=517">3Blue1Brown</a>,国外版的妈咪说,不过人家做的更早,长得更帅,终于这集真人出演,帅倒路人。一路娓娓道出了数学的各种故事:香农、洛伦兹…</li>
<li><a href="https://www.youtube.com/watch?v=MyJYaFG_VH8&t=894s">北京舞蹈学院的舞者</a>,讲了4个舞蹈人的故事,很不错的一个频道,很不错的故事,让我了解了不一样的人生。</li>
<li><a href="https://www.youtube.com/watch?v=6h1gF-vowM8">夜钓的中年人</a>,又是Aha的视频,一个个深夜里,远离灯红酒绿和喧嚣的小河边,一个个都是有故事的人,中年,才是品尝生活滋味的年纪。</li>
</ul>
<h1 id="2020610">2020.6.10</h1>
<ul>
<li>民谣的中年叔叔们唱着悲歌<a href="https://weibo.com/7275855980/J5JsRwOLc?type=comment">天空之城</a>,让人唏嘘,李志的<a href="https://www.youtube.com/watch?v=buxL8RZ4gpA">人民不需要ZY</a>彻底被他们封杀后,兄弟们没有忘记他。</li>
<li><a href="https://www.bilibili.com/bangumi/play/ep315981">全景:医学上的重大突破-编辑你的基因</a>,<a href="https://www.bilibili.com/video/BV19W411Q7Tv?t=3221">基因医生</a>,都是基因编辑的应用,不是最近采用,从90年代就开始,中间也经历了低谷,2010年后的<a href="https://www.bilibili.com/video/BV15x411Z7kf/">CRISPR</a>只是这些年成熟起来的一种方法。当然里面肯定有万能的<a href="https://www.bilibili.com/video/BV1Rx411a7hR/">锋哥</a>的身影。</li>
<li><a href="https://www.bilibili.com/video/BV1Bx411u7uG?p=2">许钧的“内心独白”《自己》</a>,<a href="https://www.bilibili.com/video/BV1Bx411u71P/">苏运莹《野子》</a>,好歌曲里这两首给我印象太深了,居然听歌可以听到泪眼。还知道了以为香港奶奶级女歌神<a href="https://www.zhihu.com/question/49857860">杜丽莎</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1t5411s7ZY/">马爷讲第一性原理</a>,<a href="https://36kr.com/p/5068808">第一性原理</a>是一种思维逻辑,关注问题最本质,剥丝抽茧直奔本质。</li>
<li><a href="https://www.bilibili.com/video/av243443906/">揭秘2万家MCN机构运作套路,深挖直播带货骗局</a>,MCN就是撮合电商平台、主播和厂家的皮条客,为了利益和贪婪,一起吹起这个大泡泡。</li>
<li><a href="https://weibo.com/tv/v/J67YW1MHR">我们是如何被现代社会规训的?</a>,正如<a href="https://baike.baidu.com/item/%E7%B1%B3%E6%AD%87%E5%B0%94%C2%B7%E7%A6%8F%E6%9F%AF/576152">福柯</a> 的<a href="https://book.douban.com/subject/1012307/">《规训与惩罚》</a>所言,现代的监狱、法律各种暴力手段,约束了我们,使我们屈服于权力,甚至不自知。</li>
<li><a href="http://www.huogua.net/a/34477">这么多年来,我对油画棒的误解都太深了</a>,画家真的是魔术师,用手上的颜料,就可以造出一个世界,羡慕死了。</li>
<li><a href="https://www.youtube.com/watch?v=qSPyj-vYV9Y">《男与女》</a>,冲动也许是人生最美好的东西之一,但年龄越大它会越淡去,更多的是无法选择的责任。男主孔刘,演绎出中年男人面对真挚感情时那种无助和纠结。之前看过孔刘的《82年生的金智英》,非常赞的一位男演员。越哥从来没让我失望过。</li>
<li><a href="https://www.bilibili.com/video/av753538309/">真实体验美国海军陆战队训练营</a>,我看这个还是很shocked,军队虽然是暴力机器的组成另我这样的人不耻,但是做为一个个体在其中被暴虐然后超越身体和精神的极限,也是一种难忘的磨练。</li>
</ul>
<h1 id="202064">2020.6.4</h1>
<ul>
<li>这个日子里,恰好看到胖哥的这集<a href="https://www.youtube.com/watch?v=CwosiM3vqfI">胖哥说64</a>,他还贴出了那个著名的<a href="https://www.youtube.com/watch?v=uyauJ34d2K0">3小时纪录片</a>,帮助我们可以了解那段不应该忘记的时间和历史。</li>
<li>又淘到一枚有意思的节目:<a href="https://space.bilibili.com/247822643">知无知人文通识解读</a>,<a href="https://baike.baidu.com/item/%E8%B0%8C%E6%B4%AA%E6%9E%9C">谌洪果老师</a>是一位法学和政治哲学方面造诣颇深的教授,2013年就从<a href="https://www.zhihu.com/question/22349620">西北政法大学辞职</a>,当年也是引起很大风波的。</li>
<li>HBO的神剧<a href="https://zhuanlan.zhihu.com/p/111556914">都市女孩</a>,<a href="https://movie.douban.com/subject/26702166/">第六季</a>居然豆瓣9.0,看知乎的这个介绍,也能感觉出来,一帮真实、反叛又丧的真实女孩,很有意思。</li>
<li><a href="https://movie.douban.com/celebrity/1022616/">大表姐詹妮弗·劳伦斯</a>讲当下美国政治的问题:<a href="https://www.guancha.cn/Shipin/2020_06_01_552552.shtml">民意对国策到底有几分影响?</a></li>
<li><a href="http://n.miaopai.com/media/KvFfv0UcB6Q6lIhNSALgR3ThzbZ6kdFQ">George Floyd是怎么死于警察之手的?</a>,这次在美国引起轩然大波的佛洛依德案的来龙去脉,很客观,看了后的感觉是,这就是警察的问题。美国警察对黑人的歧视引发的骚乱,上一次是<a href="https://zh.wikipedia.org/zh/1992%E5%B9%B4%E6%B4%9B%E6%9D%89%E7%A3%AF%E6%9A%B4%E5%8B%95">92年的洛杉矶骚乱</a>,再往前是67、68年的骚乱。这个是美国的一个历史遗留伤疤。</li>
<li><a href="https://video.h5.weibo.cn/1034:4511417064423444/4511422949922148">教科书级的即兴演讲读解</a>休斯顿警察局局长的激情演讲,智慧、情商与演讲艺术结合。除了演讲技巧,共情和真心也很重要。</li>
<li><a href="https://www.bilibili.com/video/av583111217/">“去他妈的后浪”</a>,<a href="https://www.zhihu.com/people/li-hou-chen">李厚辰</a>的这期博客引起很大风波,不过正式通过这个,我了解了<a href="https://www.ximalaya.com/zhubo/49273220/">翻转电台</a>,又淘到一枚有意思的人和一个有意思的节目~</li>
</ul>
<h1 id="2020527">2020.5.27</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=YdcZzVRcYWY&t=2194s">关于香港的国安法</a>,这次人大提出这个香港国安法,在大陆人看来是维护了国家统一,痛击了分裂国家的人,但是实际上是牺牲掉了香港、全香港人,会让香港金融地位一落千丈,最终香港人遭受经济衰退的后果。静观这个修正案导致的深远影响把。</li>
<li><a href="https://zh.wikipedia.org/wiki/%E5%87%86%E5%99%B6%E5%B0%94%E7%81%AD%E6%97%8F">准噶尔灭族</a>,讲的是乾隆为了平定准噶尔的西蒙(之前蒙族分为漠北、漠南和西部)进行的战争,早年康熙帝的时候他们就叛乱过,乾隆年又叛乱,所以乾隆来了个狠的,对他们进行了灭族。不过也有记录说,他们大部分是死于瘟疫。不过,确实使得准噶尔的蒙人们人口巨减。</li>
<li><a href="https://book.douban.com/subject/34948951/">《大话西方艺术史》</a>,意公子她们做的书,打算买本瞅瞅,是艺术入门书籍。意公子的<a href="https://space.bilibili.com/5509691">意外艺术</a>,做的也挺有意思,可以了解很多艺术启蒙的故事。</li>
<li><a href="https://www.youtube.com/watch?v=fTVMxT1EreU">《控方证人》</a>太精彩了,剧情上,演员堪称完美。最后的翻转出乎意料。<a href="https://movie.douban.com/subject/1296141/">豆瓣上</a>的评分高达9.6。</li>
<li><a href="https://www.youtube.com/user/NTUCASE">台大的这个在线频道</a>很赞那,刷了一下午这个<a href="https://www.youtube.com/user/NTUCASE/playlists?view=50&sort=dd&shelf_id=15">探索新知频道</a></li>
<li><a href="https://www.jianshu.com/p/547d9d3106f6">李安的父亲三部曲</a>:<a href="https://www.youtube.com/watch?v=c6ePfVkGCCs">《推手》</a>,<a href="https://www.youtube.com/watch?v=aF7DsKMkVa4">《喜宴》</a>,<a href="https://movie.douban.com/subject/1291818/">《饮食男女》</a>。和父亲那种割裂但是又无法割裂的中国人的感情,刻画的如此细微入木,光看介绍的视频,都让我泪光闪烁了,有时间一定找来原片静静的刷一下。</li>
<li>捉得一枚喜欢的油管UP主,<a href="https://www.youtube.com/channel/UCE2tB8fPCGoMGAwwBMc7BuQ">“OkButSoWhat”</a>,非常喜欢他的对这个世界清澈和理智的思考,他在墙内,还可以像汉娜说的那样去“行动”,非常佩服。这也算是王阳明的知行合一的体现吧。里面的每个视频都值得认真观看。</li>
<li><a href="https://zh.wikipedia.org/zh-hans/%E6%B1%89%E5%A8%9C%C2%B7%E9%98%BF%E4%BC%A6%E7%89%B9">汉娜·阿伦特</a>的<a href="https://book.douban.com/subject/3431988/">《人的境况》</a>,是<a href="https://www.youtube.com/watch?v=WO9xFB7vzC8">“OkButSoWhat”的生活在專制和資本主義的雙重壓迫下</a>节目中推荐的阿伦特的代表作。我第一听说阿伦特的名字,还是源于<a href="https://book.douban.com/subject/24869065/">《平凡的邪惡》</a>里面的故事“为纳粹辩护的女人”。再后来,知道了她是海德格尔曾经的恋人。但是她的光芒绝不是海德格尔可以淹没的,她自己的关于集权、大众、资本主义的思考,远超同龄的政治哲学家,影响深远。</li>
</ul>
<h1 id="2020519">2020.5.19</h1>
<ul>
<li>王小帅的《<a href="https://www.bilibili.com/video/BV1nJ411e7a5">地久天长</a>》,女主角咏梅是我们全家人都很喜欢的高考剧《小欢喜》里那个温柔的妈妈,这里却是一个失独但是坚强的妈妈。这部电影讲述了失独的悲惨,以及随之改变的人生。在那个时代下,人的命运如此的不堪一击。我是看到这个B站上的<a href="https://www.bilibili.com/video/BV1HA411t7x4">“杀死那个石家庄人”</a>的系列中的镜头,又想起了这部记忆深刻的电影。</li>
<li><a href="https://www.bilibili.com/video/av6728021/">我们这一代的困惑</a>,年轻的时候要是能看到就好了,虽然现在这哥们说的都懂了,并且深有体会。“人生的大多数事情都是非线性的”,所以,不要太过执着,静静地做自己的开心的、对的就好,剩下的交给时间。</li>
</ul>
<h1 id="2020511">2020.5.11</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s/xz9cIEqrJtuXjjaweIolFw">全球核战时,如何才能保住自己的小命</a>,核战争太可怕了。。。。</li>
<li><a href="https://www.youtube.com/watch?v=-QJlN-YbdDE">出·路</a>,<a href="https://movie.douban.com/subject/26904137/">豆瓣上</a>评分不是很特别高,对我来说还是很震撼的。你仿佛是在看不同的世界人,每个世界里的人们貌似都在挣扎,但又彼此没有关系。可是真的没有么?彼此的割裂是什么原因造成,如何弥补,每一个灵魂真的平等,值得融合么?</li>
<li><a href="https://www.jianshu.com/p/ec0af1569075">伊藤计划三部曲</a>是朋友推荐的一个系列动画片,作为日本科幻动漫的死粉,非常喜欢。<a href="https://baike.baidu.com/item/%E4%BC%8A%E8%97%A4%E8%AE%A1%E5%88%92/3837842">伊藤计划</a>是同龄早逝的天才作家,动画里充满了对人类终极命运的思考,三部曲分为《<a href="https://movie.douban.com/subject/25850715/">虐杀器官</a>》《<a href="https://movie.douban.com/subject/25850802/">和谐</a>》《<a href="https://movie.douban.com/subject/26271875/">尸者帝国</a>》,很是过瘾。</li>
<li><a href="https://weibo.com/tv/v/IwiSS6rsM">NHK纪录片《14亿人膨胀的欲望 :中国#互联网金融# 的光与影 2016》</a>,银行的钱都去了国企,中小企业融资咋办?当初为解决这个问题的金融创新,居然掀起一个巨浪,但是背后被各种欲望吞噬,然后反噬的一个行业。</li>
<li><a href="https://www.zhihu.com/question/24317568/answer/512070944">怎样提高审美能力?</a>,典型的知乎帖,不过对我这类无美观的理工男已经足够受用了,后来又关注了话题”<a href="https://www.zhihu.com/question/35330279">成人学画画靠谱么?</a>“,才逐渐明白,审美那个真的是来安慰大众的,绘画、音乐都是要经过常年累月的训练,才能习得,不经过这些艰苦训练,你根本体会不到一幅画的真正牛x之处。好吧,至少是一味很好的安慰剂,可以让我一窥艺术、审美之门。</li>
</ul>
<h1 id="202058">2020.5.8</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=nmqggupYAq8">疫区日记之当我们被贴上封条后</a>,记录了一个小城里的新冠防疫过程,看着保安流着泪说出自己的恐惧和对家人的思念,我感同身受。疫情之下,每个人都是脆弱的。</li>
<li><a href="https://www.youtube.com/watch?time_continue=1854&v=OtzMWFOi34I&feature=emb_logo">40年代的北京和建国之初</a>,纯俄语的,挂上油管自动翻译也看不懂,但是画面是真实的,看到了梁思成极力阻止却最终失去的老北京城墙,那时候的人,那时候的事,看到满脸肉嘟嘟的小娃娃,想想,可能竟然和爸妈同岁。</li>
<li><a href="https://www.zhihu.com/question/308429562/answer/647578201">哪些知识越了解越觉得『对这个世界很绝望』?</a>,知乎这种智商贩卖贴虽然让人高高在上不舒服,但是确实有些东西让人还是能够思考的。资本主义带给我们的东西究竟是什么,欲望,消费,以及伦理的关系,值得每个人去思考和反思。顺道说,马克思韦伯的新教和资本主义确实应该去读一读。</li>
<li><a href="https://www.zhihu.com/question/26720067/answer/121860656">一个人的学习能力能有多强大?</a>,还是这个<a href="https://www.zhihu.com/people/cui-bobby">mushrobby</a>的知乎文,不喜欢他的偏左观点,但是不影响对这哥们的欣赏,这篇里面的执行力,真心服。</li>
<li><a href="https://zhuanlan.zhihu.com/p/139442860">大神利用AI修复古董纪录片,还原1920年的京城生活</a>,我居然静静的看完了,特别是对着作揖那段,真实!整整100年,感觉到了时光的穿越。</li>
<li><a href="https://www.youtube.com/watch?v=4RLfWWY2Qd8">一部不起眼的日本电影,却激励了无数日本人《佐贺的超级阿嬷》</a>,又是越哥!越哥!越哥!越哥从没让我失望过,每个人都会遇到疼爱他的嬷嬷,这段时光永远珍惜。顺到说一下,儿子说,思王推荐过这部小说,去年。</li>
<li><a href="https://coolshell.cn/articles/19085.html?from=timeline&isappinstalled=0">谈谈我的“三观”</a>,陈皓的博文,技术大神,三观很正,很舒服,同道人。</li>
<li><a href="https://www.bilibili.com/video/BV15K4y187E9?from=search&seid=10639041733662039338">杀死那个河北人</a>,这才是真实的后浪,跟前几天B站的后浪宣传片比起来,这个才更真实,也更魔幻。</li>
<li><a href="https://baike.baidu.com/item/%E5%A4%A9%E5%90%AF%E5%A4%A7%E7%88%86%E7%82%B8/10161065?fr=aladdin">天启大爆炸</a>,天启就是明熹宗朱由校的年号,这个小皇帝,是个好木匠,不理朝政,宠信魏忠贤。对,就是他执政期间,北京城发生的一次死了2万人的大爆炸。我也是头一次听说,顺道还去搜了一下著名的俄罗斯的<a href="https://www.zhihu.com/question/20346098">通古斯大爆炸</a>。</li>
</ul>
<h1 id="202056">2020.5.6</h1>
<ul>
<li>昨晚刷动画神剧<a href="https://movie.douban.com/subject/1302770/">阿基塔</a>到12点半,后赛博时代的挽歌,很符合我的口味。知乎上有专门的<a href="https://www.zhihu.com/search?type=content&q=%E9%98%BF%E5%9F%BA%E6%8B%89">阿基拉话题</a>,聊聊阿基拉是如何封神的。</li>
<li><a href="https://www.youtube.com/watch?v=ioJ9YZZFcBY&t=16s">法国大革命(第一集)你们总是嫌我短 这次满足了吧~|岩论</a>,我其实不喜欢岩论那种阴阳怪气的调调,故意卖弄又故作谦虚,但是,他讲的这4集法国大革命确实精彩,说透了革命中暴民和愚民的本质,革命太可怕了,良知、理性和平和都会被吞噬。</li>
<li>法国大革命之前是<a href="https://baike.baidu.com/item/%E4%B8%83%E5%B9%B4%E6%88%98%E4%BA%89/430415?fr=aladdin">七年战争</a>,顺道了解了一下,而且这段历史,和胖哥的<a href="https://www.youtube.com/watch?v=4rG8b7K-2ic&feature=youtu.be">加拿大历史</a>也能接上了。</li>
<li><a href="https://www.youtube.com/watch?v=2JRTIpNJs1k">橫道世之介</a>,那个单纯美好的男生,那个喜爱摄影的男生,那个清澈见底的男生,虽然离去,但是在每个人心中留下的,都是美好。很治愈的一个电影。</li>
<li><a href="https://www.youtube.com/watch?v=JKjEPsS5QYI">【越哥】贝利叶一家</a>,一部超级治愈的喜剧片,一家聋哑人,不是简单的温馨,有冲突,有自由也有纠结。</li>
<li>棒棒<a href="https://www.bilibili.com/video/BV1r54y1Q7L7">上</a>和<a href="https://www.bilibili.com/video/BV15T4y1371J">下</a>,讲的是生活在重庆挑扁担出苦力的一群最底层人的生活,这其实才是这个世界真实的一面。</li>
</ul>
<h1 id="2020430">2020.4.30</h1>
<ul>
<li>我的天才女友<a href="https://www.youtube.com/watch?v=FimHVNyaIZ0&list=RDCMUCXLsxU_3EWUPT83U35tsSXA&index=1">第一季</a>,<a href="https://www.youtube.com/watch?v=fZzB7L8nYE4&list=PLWDQ1job1_1ZCXDZrUpb1u55q7G-Zaz5v&index=1">第二季</a>,豆瓣上的影评<a href="https://movie.douban.com/subject/28427782/">第一季</a>,<a href="https://movie.douban.com/subject/30395843/">第二季</a>。真的深深被萨拉迷住了,美丽充满诱惑又那么危险,看着人生的起伏,又同情又惋惜,可是,人生不就是应该赤裸和真实么?这么美丽的容颜和才气,甚至这种桀骜不驯,不都是编剧渴望赋予她的不同么?而我们每个人,其实只能被平庸吞噬,也只有偷着屏幕替别人惋惜的如此而已。人生如梦。此剧改编自小说《那不勒斯四部曲》。</li>
<li>相比天才女友,今晚看的这部<a href="https://www.youtube.com/watch?v=X1HTOTZZJhU">幸福的拉扎羅</a>就没那么惊艳了,但是,也远超一般的电影,宗教般的救赎主题,男猪脚清澈的眼神,都让人治愈温暖。<a href="https://movie.douban.com/subject/27072795/">豆瓣</a>上有导演<a href="https://movie.douban.com/celebrity/1338597/">爱丽丝·洛尔瓦</a>的介绍,她也是一个位极具才华的意大利女导演。</li>
</ul>
<h1 id="2020425">2020.4.25</h1>
<ul>
<li>这个美国的记录片《<a href="https://www.bilibili.com/bangumi/media/md20693/">蛮族崛起</a>》很好看,讲的是罗马帝国一次次在蛮族的反抗和入侵下的衰败。第一集是<a href="https://baike.baidu.com/item/%E6%B1%89%E5%B0%BC%E6%8B%94%C2%B7%E5%B7%B4%E5%8D%A1/10625136">汉尼拔</a>,好牛逼的将领啊,翻阅阿尔卑斯山,杀的罗马片甲不留,导演了这场著名的<a href="https://baike.baidu.com/item/%E5%9D%8E%E5%B0%BC%E4%BC%9A%E6%88%98/2391915">坎尼会战</a>!</li>
<li><a href="https://www.huxiu.com/article/351811.html">陈冲的一个采访</a>,她对艺术电影、艺术的理解,尽然让我去看了<a href="https://v.qq.com/x/cover/mzc00200viduxqe.html">十三幺</a>对她的采访,了解到她年少成名,背井离乡从心开始,沧桑的三四十年,多tough的一个女人!。</li>
<li>过程中,知道了刁亦男的<a href="https://movie.douban.com/subject/27668250/">南方车站的聚会</a>, 毕赣的<a href="https://movie.douban.com/subject/26633257/">地球最后的夜晚</a>,小众的艺术电影。也认识了(阿奈丝·宁 - AnaisNin)[http://news.sina.com.cn/o/2003-11-18/08121137478s.shtml],20世纪著名的西方性文学女性作家,<a href="https://book.douban.com/subject/1417606/">维纳斯三角地</a>,<a href="https://book.douban.com/subject/1394432/">小鸟</a>。</li>
<li>严峰老师的<a href="http://www.dapenti.com/blog/more.asp?name=agile&id=147851">不必浪费时间读的书</a>,很好的建议反书单。</li>
<li><a href="https://www.bilibili.com/video/BV1E7411C7sG/?spm_id_from=333.788.videocard.6">自得琴社演奏《哆啦A梦》</a>,毫无违和感,哈哈。</li>
<li><a href="https://baike.baidu.com/item/%E7%8E%8B%E5%9D%9A/22818?fr=aladdin">王坚</a>坚守<a href="https://baike.baidu.com/item/%E9%92%93%E9%B1%BC%E5%9F%8E%E4%B9%8B%E6%88%98/635284">钓鱼城</a>36年,还炮伤蒙古大汗蒙哥,导致他得病身亡,临死前遗嘱要屠城钓鱼城,到忽必烈的时候,守将王立开城降元,以不屠一人为条件,有保全了全城人性命。</li>
<li>奇书<a href="https://zhuanlan.zhihu.com/p/45873966">《 哥德尔、艾舍尔、巴赫——集异璧之大成》</a>,作者侯世达从数学、逻辑学、生命遗传、大脑思维、人工智能、甚至音乐、绘画等许多不同领域。张江对它的<a href="https://www.bilibili.com/video/BV1t4411L7xD/?spm_id_from=333.788.videocard.4">介绍</a>,混乱博物馆对他的<a href="https://www.bilibili.com/video/BV1zx411M7HS/?spm_id_from=333.788.videocard.1">介绍</a>。</li>
</ul>
<h1 id="2020420">2020.4.20</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s/7xu6A4bjyEzoNt9d_gg1zA">博士学位真的那么重要吗?上交大博士亲述科研心路</a>,看着居然有些感动,一路奋斗,不容易。</li>
<li><a href="https://www.guokr.com/article/445903/">许晓东教授团队发现了世界首例病毒中的朊病毒</a>,没经费,研究生出去打工,不断的坚持。大部分人不知道这个东西的意义,不解释,意义非常重大。</li>
<li><a href="https://baike.baidu.com/item/%E9%A9%AC%E6%80%9D%E8%81%AA/77996">马思聪</a>,悲怆的一声,满怀对国家的热情,到出逃成为“叛国贼”,心驰神往的故土。。。</li>
<li><a href="https://www.youtube.com/watch?v=m4vNPnvEREc">李泽华</a>的视频,心塞,基层实在是黑暗,跟前几天的刷手机一样,他说“<a href="https://www.jianshu.com/p/a12a23e855a4">人心惟危,道心惟微,惟精惟一,允执厥中</a>,是啊,人心邪恶,但是自己还是要秉承正道,保持理想。</li>
<li><a href="https://baike.baidu.com/item/%E6%8A%A4%E6%AD%A5%E8%BE%BE%E5%86%88%E4%B9%8B%E6%88%98/10742778?fr=aladdin">护步达冈之战</a> ,我都惊了,2万vs70万,可能有夸张,但是也够牛逼了,也算是是人类战争史上的奇迹了,小时候的背诵过的历史人物,完颜阿骨打,金国的太祖,太V5了。</li>
<li><a href="https://www.zhihu.com/question/389663886/answer/1171696821?utm_source=wechat_session&utm_medium=social&utm_oi=27521894580224">中行原油宝爆仓300亿</a>,这事注定要记录史册,石油价格跌到-37元,导致的这一系列黑天鹅事件,永记史册。</li>
<li>飞机翅膀的压力差是如何产生的?儿子的这个问题,难倒了我,搜索学习后,发现了:<a href="https://www.zhihu.com/question/22042210">飞机的升力仅仅只是由于伯努利原理产生的吗?</a>,<a href="https://www.bilibili.com/read/cv559615/">你真的认真想过飞机是怎么飞起来的吗?</a>,<a href="https://www.zhihu.com/question/63766067">为什么机翼上方空气流速大于下方?</a>,<a href="https://baike.baidu.com/item/%E4%BC%AF%E5%8A%AA%E5%88%A9%E5%8E%9F%E7%90%86/9852095?fromtitle=%E4%BC%AF%E5%8A%AA%E5%88%A9%E6%96%B9%E7%A8%8B">伯努利原理</a>。结论就是:上面流速快,但是不是同时到达的(等时原理),按个说法是不对的;伯努利原理根据流速,可以得到压强差,产生压力这个是对的;再深入,为什么会上面的流速快?这个涉及到空气动力学和流体力学,需要更深入了。</li>
</ul>
<h1 id="2020416">2020.4.16</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s/u48h1aBzlmHuNmMakHZA3A">兽爷丨悲喜从此各西东</a>,兽爷,这个老南方报的记者,感叹着时代的堕落</li>
<li><a href="https://movie.douban.com/celebrity/1016673/">詹妮弗·康纳利</a>,美国的神仙姐姐,据说是在美国往事里,一鸣惊艳,找时间要找来看看,我认识她是在美丽心灵里面,还一度以为是黛比摩尔呢,阿丽塔里也有她的身影。</li>
<li><a href="https://weibo.com/1882345883/ICZoFu5Il">我为什么不教我女儿讲中文!!! #仲尼Johnny的vlog</a>,又淘到一枚,逗逼而且可爱的v主播,太逗比了。</li>
<li><a href="https://www.youtube.com/watch?v=gkj1Mfyp7e0">脸庞、村庄</a>,阿涅斯和JR的乡间旅行,一路前行,生命不止。才知道,阿涅斯是法国国宝级的女导演,这个老太太身体里蕴含着无尽的生命力,看得我感动,谢谢越哥的这篇解说。<a href="https://www.thepaper.cn/newsDetail_forward_6761676">阿涅斯·瓦尔达,离开我们一整年了</a></li>
<li><a href="https://www.youtube.com/watch?v=OxZExW7qovM">心房客</a>,无趣的晚上,因为越哥的“脸庞、村庄”,和这部讲述孤独的电影,一下子被充满了。孤独的人,孤独的心,永远不会因为喧嚣和人群,而消失,经历了这些孤独,才可以体会到陪伴的幸福。</li>
</ul>
<h1 id="2020415">2020.4.15</h1>
<ul>
<li><a href="https://www.youtube.com/channel/UCAPTk-pgX5cfharAoWnkRUQ">油管秦胖子</a>,喷嚏大魔怪推荐的,确实讲的很客观,比文昭、stone之类的更客观。</li>
<li><a href="http://www.dapenti.com/blog/more.asp?name=xilei&id=147540">疫情之后,何去何从?</a>,疫情以后,失业和经济衰退,国家保护主义。。。一堆的问题会接踵而来。</li>
<li><a href="https://www.youtube.com/channel/UCjJklW6MyT2yjHEOrRu-FOA">蒙面财经</a>,国内不让说,国外懂行的又少,能把中文经济问题讲清楚讲出来的人太少,这个还凑活</li>
<li><a href="https://www.youtube.com/watch?v=UlqL3OG4Eqc">妈咪说:幂次分布</a>,妈咪说,总是能把数学问题讲的清清楚楚</li>
<li><a href="https://baijiahao.baidu.com/s?id=1638414836201419191&wfr=spider&for=pc">不教胡马度阴山,阴山在哪里?</a>,原来就在黄河北岸,就是阴山山脉。</li>
<li><a href="https://www.sohu.com/a/274980386_164631">河西走廊为什么重要?看看晚唐北宋就知道了 </a>,了解了解河西走廊,是一个狭长的通往西域的地带。</li>
<li><a href="https://www.bilibili.com/video/BV1kW411G7sM">发现更大的世界</a>,知乎的广告做的真赞,虽然越来越不喜欢某乎,但是这个广告确实赞</li>
<li><a href="https://www.bilibili.com/video/BV1Nc411h7Kh?t=321">如何驯化免疫细胞</a>,<a href="https://www.bilibili.com/video/BV1t7411s7PX">人类为何无法抵抗艾子明</a>,<a href="https://www.bilibili.com/video/BV18E411w7rW">癌细胞究竟狡猾在哪</a>,生物3连,讲免疫的,很赞都,混乱博物馆和一个生物狗小伙的奉献。</li>
<li><a href="https://www.youtube.com/channel/UCfIbForcbE83cxm8MScOTlQ">我是郭杰瑞</a>,很不错的美国版“陈秋实”,专门爆料美国人自己的黑暗面。</li>
<li><a href="https://www.bilibili.com/video/BV1m7411p7M7/">修复版的迷魂记</a>,我承认,我是冲着女主的美丽去的,其次才是希区柯克的大名~</li>
</ul>
<h1 id="202045">2020.4.5</h1>
<ul>
<li><a href="https://wenku.baidu.com/view/ba714a29580102020740be1e650e52ea5518ceec.html">中国金融体系</a>,这个百度的ppt讲的挺全,收藏一个,不过,我去搜了美国的金融体系,至少国内没有,除了<a href="https://baike.baidu.com/item/%E7%BE%8E%E5%9B%BD%E9%87%91%E8%9E%8D%E4%BD%93%E7%B3%BB/4309203?fr=aladdin">百度百科</a>这类的,寥寥几句,知乎上更是无人回答,很是诡异,我尝试去谷歌一下,无奈英文不好,找不到合适的这类的汇总ppt。不过感谢喷嚏大魔怪的美国金融体系信息,补充一下:<a href="http://j.17qq.com/article/hdmlmgndv.html">美国金融体系</a>和<a href="https://www.federalreserve.gov/aboutthefed/structure-federal-reserve-system.htm">Federal Reserve System</a>。</li>
<li><a href="https://www.bilibili.com/video/BV1554y1978z?t=3">《有熊谷守一在的地方》</a>,一花一草,一鱼一虫,都是老爷子的故交,天地交融的神仙生活,羡慕死老爷子了。</li>
<li><a href="https://www.bilibili.com/video/BV1u7411N77f">小波</a>的视频,太像老毕了,涂生了亲切感。</li>
</ul>
<h1 id="2020327">2020.3.27</h1>
<ul>
<li><a href="https://mysupervisor.org/index.php">导师评价网</a>,哈哈哈,终于可以去吐槽你的老师了</li>
<li><a href="https://www.youtube.com/watch?v=ZsXOJjSD8BQ">饥饿站台</a>,对这个社会和世界本质刻画的太深刻了,资源就这么多,每个人都要拼命爬到上层,挥霍和支配别人的命运,而底层人没有权益,甚至生存权,尝试改变弹劾容易,因为你改变不了资源的稀缺性和人性。</li>
<li><a href="https://www.bilibili.com/video/BV1k7411p7FJ">瑞幸咖啡造假</a>,被“浑水”做空吊打,黑吃黑,但是,这种在国内被追捧的明星企业,却缺乏了最需要坚守的道德底线,诚实。它其实是中国企业、社会的一个缩影而已。</li>
<li><a href="https://www.bilibili.com/video/BV1Ve411x7yX?t=167">曹操来了</a>,介老外,京腔太地道了,一度让我以为是配音视频。</li>
<li><a href="https://www.bilibili.com/video/BV1GE411c7kX?p=1">中国历史地理</a>,一直想了解了解古代历史的地理变化,熟悉那些过往的地区,什么关中,江南,高句丽啥的,终于让我找到了葛老的这门课,刷起来~</li>
<li><a href="https://www.youtube.com/watch?v=rfriwDTuFvA">方可成荐书喽</a>,很不错哦,赶紧更新了我的<a href="https://www.douban.com/people/piginzoo/">微信书单</a>,崔卫平教授的《<a href="https://book.douban.com/subject/1083333/">积极生活</a>》,还有理想国的M系列。</li>
</ul>
<h1 id="2020325">2020.3.25</h1>
<ul>
<li><a href="https://weibo.com/1750070171/IzQz4hfZd?type=comment">人肉版我的世界</a>,小哥用原始工具打造的神殿,服了。</li>
<li><a href="https://www.zhihu.com/question/380898009/answer/1097795208">如何看待 3 月 24 日美国疫情确诊人数破 4 万?</a>,好帖子,给我接了不少惑:不会像帝国理工预测那样:(即使管制也只是延后而不会减少感染人数);中国的严控措施是正确和及时的,韩国没有管控,但是大量检测和隔离患者起到作用;通过一些柔性措施,可以控制传染率R到1以下,从而保障经济不崩溃;目前各国都在加速研发疫苗和治疗药物。</li>
<li><a href="https://baijiahao.baidu.com/s?id=1600991396468482916">爱嗑药的竹林七贤</a>,哈哈,原来七贤是集体嗑药啊,不过,是为了逃避北魏那个龌龊的世道。</li>
<li>天天新冠了,都不知道<a href="https://www.drugtargetreview.com/news/31712/crispr-restore-retinal-function/">CRISPR治疗盲人</a>,这可是人类医学史上重大进展,是把基因编辑技术第一次试用在人类的治疗上(之前那个深圳垃圾科学家修改婴儿基因除外),期待啊。</li>
<li><a href="https://www.youtube.com/watch?v=VjfroqAiAbM">《不成问题的问题》</a>,范伟鲜活地诠释了圆滑世故和狡黠的中国人。中国人的这种文化,是优点还是劣根呢?</li>
</ul>
<h1 id="2020322">2020.3.22</h1>
<ul>
<li><a href="https://movie.douban.com/subject/1418076/">天堂回信</a>,92年的老电影,看<a href="https://www.bilibili.com/video/av30269522?t=622">越哥说电影</a>的解说,生生给看哭了,小演员太可爱了,老爷爷也是老戏骨,更感人的是那份浓浓的爷孙爱,相信看的人都会想起家里慈祥的爷爷奶奶、姥姥姥爷。</li>
<li><a href="https://www.youtube.com/channel/UCFsbHZ_mIFElwDxypEZjKWA">方可成</a>,这么温和的声音,都容不下了,唉….</li>
<li><a href="https://www.bilibili.com/video/av66839482">香火</a>,居然是宁浩的处女座,渣渣的画质,讲的故事却颇有味道,让我想起了小武。</li>
<li><a href="https://zhuanlan.zhihu.com/p/20352551">张锋</a>的开挂人生有多牛逼,可以去B站观看这个<a href="https://www.bilibili.com/video/av82703099?t=397">科学八卦</a>,可以在欢乐中领略张锋同志的牛X!</li>
<li>虽然之前刷过,再刷<a href="https://www.youtube.com/watch?v=jdlMTeC1RBA">越哥解说的罗生门</a>,还是被人的复杂性深深折服,找时间必须找来片子刷一遍。</li>
<li><a href="https://mp.weixin.qq.com/s/lc4L7ymG7epaOFifmjCkvA">几名高中生给另一位高中生的信</a>,是师大实验的高中生写的,顺道看了他们的公众号“哲学社”,这个年纪就这么大的视野和学习能力,让我赞叹不已!</li>
</ul>
<h1 id="2020317">2020.3.17</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s?__biz=MzI4MjczMTY0NA==&mid=2247485702&idx=1&sn=a70d9022316c16366d3d030f1aca88f8&chksm=eb943c15dce3b503fafc52175d4067cde3589690bb97ea294d1316cbacca8148698d34546dfa&mpshare=1&scene=1&srcid=&sharer_sharetime=1582551746542&sharer_shareid=47408552332cf6cd449f2f9e1c52bf2f#rd">病菌,如何改写人类历史?</a>,有意思,把细菌病毒史和人类历史捋了一遍,让我看到了有意思的关联。一个是历史的代表(几十亿年了),一个是进化的代表(最高进化体)。</li>
</ul>
<h1 id="2020316">2020.3.16</h1>
<ul>
<li>看到一篇讲方舱的那个博士看的那本书《<a href="https://book.douban.com/subject/25971624/">政治秩序的起源</a>》,但是文章立刻被删掉了,所以我只好放到我的网站上了:《<a href="/assets/wuhanfangcang.htm">武汉方舱医院里的那本书</a></li>
<li>CYX推荐了2本书,<a href="https://book.douban.com/subject/27007549/">《中央帝国的财政密码》</a>,<a href="https://book.douban.com/subject/27045287/">《谁在世界中心》</a>,需要读一下,国内人的视角,值得队一度,bookmark先。</li>
<li><a href="https://www.youtube.com/watch?v=fkQIlHIAEws&list=PLheCxSdek4OxB67mjunyL0J4y5qkdjg4o">太平洋战争</a>,一口气看完了,对整个太平洋战争中日军和美军的战争历程,以及惨烈,都领略了一遍,贴别是日军的变态,印象深刻。</li>
<li><a href="https://www.weibo.com/tv/v/IyqQqwUoH?fid=1034:4482062376435740">美国女议员连环套问,为全美讨免费检测</a>,牛,民主社会下的质询、媒体的曝光、官僚的无趣,都展露出来,堪称电影。</li>
</ul>
<h1 id="2020312">2020.3.12</h1>
<ul>
<li>
<p><a href="https://zhuanlan.zhihu.com/p/26931133">George Church</a>,哈佛医学院的遗传学泰斗,人工合成核糖体,核糖体是用来合成蛋白质的玩意,他居然可以控制核糖体的合成。</p>
</li>
<li>
<p><a href="https://www.zhihu.com/people/duan-shi-shi-68/posts">努力的小哥们</a>,典型的鹅厂、头条的顶级工程师的成长路径,刷了小哥们的知乎,可以看到他的成长轨迹,基本上本硕上来,大厂走一遍,一路刷副本打怪上来,没浪费任何时间和机会,终于就成网易深度架构师大神。估计很多人羡慕,但是不是人人都能有这种忍耐力、持久力和学习力的。</p>
</li>
</ul>
<h1 id="2020311">2020.3.11</h1>
<ul>
<li>
<p><a href="https://www.zhihu.com/question/19793205/answer/22313980">怎样和青春期叛逆的孩子沟通?</a>,里面说的几点原则确实挺好的:“不扮演全能适当装傻、不要用自己的价值喜恶来评判孩子的鉴赏力、荒谬和不合理的要求不要上来打死而是探讨权衡利弊、成人的态度来对待”,BM一下,提醒自己。</p>
</li>
<li>
<p><a href="https://baijiahao.baidu.com/s?id=1599987958878147291">战国四公子</a>:就是战国时期四位有名的君子,都是重臣或者侯爵,人品高尚,门客众多。皆出身名门,广纳人才,礼贤下士:春申君,信陵君,平原君,孟尝君,他们都是当时政坛上的中流砥柱。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av9400394">战国时期的地图变化</a>。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av17110131/">纪录片 请为我投票</a>,小胖子简直是戏精,小男孩很暴力很有钱,老师最后说,大家都收获了难得的教训,弹幕上弹出“难得的教训:记得贿赂”,哈哈。这个社会的缩影啊。这个是2007的纪录片,现在的话,估计是拍不出来了。</p>
</li>
</ul>
<h1 id="2020310">2020.3.10</h1>
<ul>
<li>
<p><a href="https://matters.news/@2020Era/%E5%8F%91%E5%93%A8%E5%AD%90%E7%9A%84%E4%BA%BA-bafyreihrpvzudkmtakoxvquhhw75ajqvhkn4oxb4pges3od5rqusa436ba">发哨子的人</a>,今日发布,今日秒删。本可以避免的悲剧,3140条生命的消失,还有4794的重症,80928的感染。现在又变成了歌舞升平的送个,今天老大哥终于敢去武汉视察了,小区楼顶,小区人家,小区周边,都防密严备。我这一生,确实也见证了这一片的荒诞,呵呵。</p>
</li>
<li>
<p><a href="https://mp.weixin.qq.com/s/Q532XzoYWDoZdkSU_e6JRg">乌合之众</a>,一本好书,讲群体性格的,已经放书架上好多年了,得抽空读读。顺道被科普了另外2本:《<a href="https://book.douban.com/subject/3057556/">狂热分子</a>》《<a href="https://book.douban.com/subject/3077186/">群氓之族</a>》。另外,还顺道淘到了一个好节目:《<a href="https://space.bilibili.com/54992199/channel/detail?cid=92374">从书说起</a>》,抽时间横扫一下所有的视频。</p>
</li>
</ul>
<h1 id="202038">2020.3.8</h1>
<ul>
<li><a href="https://www.bilibili.com/video/av36040687">《少数人的晚餐》</a>:神动画啊,刻画出了人的贪婪,社会的等级,上层人的贪婪、不自知的被禁锢,下层人的悲惨、被吞噬,压迫到极端后的反抗和颠覆,但是重新登上社会上层的那些下层人,重复这个轮回。B站有个帖子,深刻的剖析了这部动画的内涵:<a href="https://www.bilibili.com/read/cv1412650">《少数人的晚餐——资本主义剥削下无法挽救的劣根性轮回》</a>。</li>
</ul>
<h1 id="202036">2020.3.6</h1>
<ul>
<li>一个神奇UP主,<a href="https://space.bilibili.com/344849038">于建国,哈哈,让我想起了川建国</a>,惊了我了,17年我就听过<a href="https://www.bilibili.com/video/av50056416">他的讲座</a>,那时候刚入坑深度学习,听着还是云山雾罩,这2年鼓捣这玩意,加上最近对生物的兴趣学习,以及对学习方法和理论的兴趣,带着这些再来听这哥们的系列讲座,惊了。介是学通了啊,你看他的up系列,从学习谈到知识,熵,生命的演化,把生命、物理、人工智能、进化…都打通了,还上去很自洽,当然不自洽我也无力反驳一个人工智能的博士,总之,是我很喜欢的类型。昨晚一口气听完了他所有的up视频,相当过瘾。“神网网络结构的本质是人类的先验知识”</li>
<li><a href="https://mp.weixin.qq.com/s/29fO6VXqKTRxkE4JoQwVEQ">青柠</a>,javaeye老鸟群里的一个哥们,很符合口味的一个技术老鸟,困居武汉,真实记录了他的生活,对网上的各种信心,不盲从和心动,深入调研,形成了这一系列的文章,不带链接的,是被和谐掉的,倒也真实。</li>
</ul>
<h1 id="202035">2020.3.5</h1>
<ul>
<li><a href="https://zh.wikipedia.org/wiki/%E8%B5%B0%E5%90%91%E6%9C%AA%E6%9D%A5%E4%B8%9B%E4%B9%A6">走向未来从书</a>:今天听说的一套,80年代初的书,给当时的人打开了视野,可惜64后被禁。<a href="https://www.zhihu.com/question/20301147">知乎上的讨论</a>,<a href="https://book.douban.com/series/509">豆瓣</a>上居然还有介绍。“这套书承载的知识大部分已经不是那么有价值。当时的振聋发聩,是现在无法想象的。”</li>
</ul>
<h1 id="202033">2020.3.3</h1>
<ul>
<li>
<p><a href="http://bestcbooks.com/">计算机汇总</a>:有时候,做这类资料汇总的工作也是很赞的</p>
</li>
<li>
<p><a href="https://www.zhihu.com/question/20893170/answer/28570439">周筠对老罗的评价</a>:胖子早上发的评价罗永浩的帖子链接,一堆人吐槽他,看到了这篇周筠写的,非常好。反思老罗,是为了以他为鉴,审视自己,大概才是对个人的意义。</p>
</li>
<li>
<p><a href="http://i.gaozhongwuli.com/research/15438.html">胡克是牛顿时代的大神</a>,之前生物课的细胞发现的时候,听过这个名字,这次又从物理的胡克定律听说了他,他是被牛顿光辉淹没的巨人啊。他的《<a href="http://blog.sina.com.cn/s/blog_783194d50100z06h.html">显微绘图</a>》,绘制的精美绝伦。</p>
</li>
<li>
<p><a href="https://www.zhihu.com/question/21552237/answer/91755744">美学如何入门</a>:好帖子,虽然还是一堆的术语和印证,让我感到高冷在上,但是,搞清楚了很多东西。好在是有之前的一些哲学学习,可以让我从头看到尾,找时间,踏实的找一门美学的mooc课先跟下来再说。不过,诚如他说的,我想要的就是可以理解那些艺术作品,无论是古代的还是现代的,没太多奢求。</p>
</li>
</ul>
<h1 id="202032">2020.3.2</h1>
<ul>
<li>
<p><a href="https://www.bilibili.com/video/av16091118?p=38">文景之治</a>,怪不得那么有名,原来是区别于儒术的黄老之术,黄是皇帝,老是老子</p>
</li>
<li>
<p><a href="https://baike.baidu.com/tashuo/browse/content?id=a46e4d351699a503fefb9c64&lemmaId=2293027&lemmaId=2293027&fr=qingtian">横断山脉,太壮观了</a>,无数的高峰,美丽到震撼。而且形成了六江,其中1条就是湄公河的源头。而金沙江,拐了大弯,成了长江最重要的支流。</p>
</li>
</ul>
<h1 id="202031">2020.3.1</h1>
<ul>
<li>
<p>看了雁门关的地图,怪不得是历史中的要塞呢,一越过就一马平川啊,怪不得杨家将拼死保卫呢。这一大早看了一早上的地理,起因是看秦朝,关中平原引起的兴趣:
<a href="https://www.bilibili.com/video/av89333719/">雁门关</a> ,<a href="https://www.bilibili.com/video/av90838876/">秦岭</a> ,<a href="https://www.bilibili.com/video/av87682526/">五岳</a> ,原来秦岭、淮河这么重要,整个分割南北啊;五岳,最西边是华山,但是在中国最中间,中华山,中华,这词是孙中山最开始叫起来的,居然就成了我们的代名词了。
“<a href="https://space.bilibili.com/442603088">三维地图看世界</a>” UP主不错,收藏一下。</p>
</li>
<li>
<p><a href="https://space.bilibili.com/19515012">貌似14年就骑车环游中国</a>,小哥们很瘦弱,但是内心很强大,看了牦牛姑娘、象雄痕迹,神往、向往,但是这种生活过不了,很少有人能像他这样,把旅行做成事业。</p>
</li>
</ul>
<h1 id="朋友圈的搬运">朋友圈的搬运</h1>
<p>把之前朋友圈里的有意义的帖子搬运过来:TODO…</p>
新冠病毒引发的生物自习课
2020-02-21T00:00:00+08:00
https://www.piginzoo.com/education/2020/02/21/biology
<h1 id="引子">引子</h1>
<p>新型冠状病毒肆虐,已经在家猫了一个月了,期间病毒肆虐,瘟疫四起,然后,很想了解一下病毒究竟何物,倒是看了不少的科普视频,李永乐老师、妈咪说、毕导、回形针啥的,大致理解了病毒的机理,但是涉及到很多很多基础概念,让自己摸不清头脑,于是,又找来高中的生物课,把细胞、遗传中涉及到的基础概念学习学习,便有了此篇博客。学习这玩意纯粹是好奇心和兴趣,也完全是和生活同步,应个景。</p>
<h1 id="科普视频">科普视频</h1>
<p>一直想把最近看的各种不错的科普视频整理一下,终于坐下来开始捋一捋了:</p>
<ul>
<li>回形针:首推的是回形针的这个<a href="https://www.bilibili.com/video/av86216616">关于新冠的一切</a>,讲的通俗易懂,条例很清晰,一如既往的冷静冷酷,把很多细节交代的很清楚,其中计算致死率的算法也帮我改进了了一下我的计算方法。另外,回形针这类科普节目的流行,极大满足了我这种好奇心比较强的人,必须给他们这个团队点赞。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=86216616&cid=147361701&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>李永乐老师:都是就着那块熟悉的黑板进行,讲的超级清楚,必须要推荐,三个系列:<a href="https://www.bilibili.com/video/av85278764">细菌</a>,给我们讲了细菌的本质,了解了这个,才可以进一步解锁病毒;然后是<a href="https://www.bilibili.com/video/av85537015/">病毒</a>,让我们了解病毒是如何侵入细胞的;最后是<a href="https://www.bilibili.com/video/av87775412/">埃博拉病毒</a>,让我们了解病毒的可怕和防止。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=85537015&cid=146218220&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>妈咪说:真的高产,一口气就做了6期,关于微生物、病毒和防止的视频,真的是一网打尽啊,和前2个比,妈咪说的清晰易懂一点不输给他们,那么就来挨个看看<a href="https://www.bilibili.com/video/av85949028">微生物</a>、<a href="https://www.bilibili.com/video/av86145995">冠状病毒</a>、<a href="https://www.bilibili.com/video/av86327531">预防传染病</a>、<a href="https://www.bilibili.com/video/av86690346">治疗冠状病毒</a>、<a href="https://www.bilibili.com/video/av86940099">天花和狂犬</a>、<a href="https://www.bilibili.com/video/av87633356">预测拐点</a>。顺道说一下,妈咪说UP大神,是我非常非常喜欢的科学博主,人家主职是数学和物理,其中的复杂科学系列,最近刚刷完,讲的超级赞。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=86145995&cid=147241866&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>毕导:超逗比的清华帅宅男,也贡献了2篇:<a href="https://www.bilibili.com/video/av88290870">科学家光写论文不抗疫情?几分钟带你看完新冠病毒的所有论文</a>,和<a href="https://www.bilibili.com/video/av85508117">病毒传播感染模型</a>。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=88290870&cid=151707407&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>回到2049:人不大,老气横秋的2049,也贡献了几篇:<a href="https://www.bilibili.com/video/av87412001">关于冠状病毒</a>,<a href="https://www.bilibili.com/video/av53405479/">人体卫士:免疫力与免疫系统</a>,<a href="https://www.bilibili.com/video/av87184109">瘟疫公司:传染病的特征、传播与防控</a></li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=87412001&cid=149360818&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>张文宏教授:良心教授,专业教授,这次疫情让我们认识了他:<a href="https://www.bilibili.com/video/av85813934/">华山医院张文宏医生科普传染病知识</a>,<a href="https://www.bilibili.com/video/av91240513/">张文宏主任为你讲解新冠肺炎是怎么回事 </a>。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=85813934&cid=146676872&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>果壳网也贡献了一系列的科普:<a href="https://www.bilibili.com/video/av93911120">一个重症患者从感染新冠病毒到发病的全过程
</a>、<a href="https://www.bilibili.com/video/av88875660">成功治愈一名新冠肺炎患者的ECMO是如何工作的</a>、<a href="https://www.bilibili.com/video/av90998967">100年前伦敦的梦魇-霍乱,教会了人类什么?</a>、<a href="https://www.bilibili.com/video/av87566471">冠状病毒是如何通过粪便传播的</a>、<a href="https://www.bilibili.com/video/av87143201">猫狗是否会传染新型冠状病毒?</a>、<a href="https://www.bilibili.com/video/av91656267">人类很少关心野生动物的命运,直到病毒把我们连在一起</a>。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=93911120&cid=160381987&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<ul>
<li>还有思维实验室,也提供了一系列的内容:<a href="https://www.bilibili.com/video/av93125552">你的免疫系统可能会杀死你!细胞炎症因子风暴!</a>、<a href="https://www.bilibili.com/video/av86052908">新型冠状病毒有多狡猾?</a>、<a href="https://www.bilibili.com/video/av82284089">2000亿细菌在你那里做什么?居然在保护你</a>、<a href="https://www.bilibili.com/video/av79261306">历史上传染病有多可怕?了解下当年的疫情黑死病</a>。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=86052908&cid=147079677&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<p>B站上的一些其他科普视频,也值得去浏览一遍,增厚自己对病毒、人体的理解:</p>
<ul>
<li><a href="https://www.bilibili.com/video/av90424787">新冠病毒的自我修养:如何统治全人类</a></li>
<li><a href="https://www.bilibili.com/video/av90277922/">放弃无趣生殖能力的病毒有多恐怖?屠杀一亿人只是下酒菜</a></li>
<li><a href="https://www.bilibili.com/bangumi/play/ep120947">病毒为何致病</a></li>
<li><a href="https://www.bilibili.com/video/av86485441/">各类病毒的对比</a></li>
<li><a href="https://www.bilibili.com/video/av24441778/">噬菌体</a></li>
<li><a href="https://www.bilibili.com/video/av17238727/">杀死超级耐药细菌的病毒</a></li>
<li><a href="https://www.bilibili.com/video/av85329528/">各类病毒纪录片推荐</a></li>
<li><a href="https://www.bilibili.com/video/av86101609/">当你患上冠状病毒后身体会发生什么?</a></li>
<li><a href="https://www.bilibili.com/video/av86450796/">人类为什么无法抵抗艾滋病病毒?</a></li>
<li><a href="https://www.bilibili.com/video/av84647486/">十分钟了解冠状病毒:从SARS到MERS到新型冠状病毒肺炎</a></li>
<li><a href="https://www.bilibili.com/video/av88402765/">新冠病毒基础知识点2.0</a></li>
<li><a href="https://www.bilibili.com/video/av85751585">【鬼谷闲谈】病毒:生于三界之外 不灭六道之中</a></li>
<li><a href="https://www.bilibili.com/video/av88796064">【混乱博物馆】病毒是如何欺骗你的</a></li>
<li><a href="https://www.bilibili.com/video/av39134855/">【纪录片】疫情大爆发</a></li>
<li><a href="https://www.bilibili.com/video/av86975239/">电子显微镜下的 50 幅人体微观世界(太震撼了)</a>
还有一些纪录片,很赞,但是涉及到版权,只贴个名字,大家自行百度吧:</li>
</ul>
<p> <img src="/images/20200227/1582767887930.jpg" alt="" class="myimg20" /></p>
<p>最值得推荐的是一部BBC的讲细胞和病毒的纪录片《人体的奥秘之细胞的暗战》,大片的既视感,讲的很生动,好在B站上有链接,我贴两个:<a href="https://www.bilibili.com/video/av89127540/">1</a>,<a href="https://www.bilibili.com/video/av35509402/">2</a>,<a href="https://www.bilibili.com/bangumi/play/ep119619">3</a></p>
<h1 id="文章">文章</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s?__biz=MzI4MjczMTY0NA==&mid=2247485702&idx=1&sn=a70d9022316c16366d3d030f1aca88f8&chksm=eb943c15dce3b503fafc52175d4067cde3589690bb97ea294d1316cbacca8148698d34546dfa&mpshare=1&scene=1&srcid=&sharer_sharetime=1582551746542&sharer_shareid=47408552332cf6cd449f2f9e1c52bf2f#rd">病菌,如何改写人类历史?</a>捋了一遍整个人类历史经历过的病毒和细菌,以及他们如何改变了历史的进程。</li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=35509402&cid=62254754&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h1 id="生物学学习">生物学学习</h1>
<p>由于前面提到,很多概念不是很了解,因此非常想找一门讲述这些基础概念的课,认真学习一下。</p>
<p>别说,还真找到了,就是有点长,居然是一门长达几十个小时的高中生物课,顺道吐槽一下,现在高中生物学习的内容真的是挺深的啊,我记得我高中的时候,没学过这么多生物知识啊。</p>
<p>这门课就是一个叫苏苏苏的B站UP主上传的课,看其本人就是一枚在读生物研究僧,这门课还是很赞的,建议对生物感兴趣的同学们,可以从头到尾听一遍,<a href="https://space.bilibili.com/326497292">【UP主的space】</a>,里面有3门课,分别是细胞、遗传和免疫。介老师讲的特别逗,也特别清晰,非常赞的一门课,还时不时地给孩子们灌点有毒鸡汤,非常接地气,一点不觉枯燥。</p>
<p>由此,也引出了我这篇博客的下篇,就是我的听课笔记。</p>
<p>记录这些,主要是对抗记忆的衰退,提纲挈领的写下听课的笔记,方便未来自己回忆。</p>
<h1 id="分子生物">分子生物</h1>
<p>第一部分,主要讲细胞结构、细胞的有机生物构成等知识。</p>
<h2 id="细胞中的元素和化学物">细胞中的元素和化学物</h2>
<h2 id="蛋白质">蛋白质</h2>
<p>蛋白质的基本组成元素是氨基酸,氨基酸都是氨基+羧(suo)基+侧链基团,中心是一个碳原子,这种通用结构。羧基就是一个变的,不同的羧基,就是不同的蛋白质。</p>
<p><img src="/images/20200227/1582770745317.jpg" alt="" class="myimg20" /></p>
<p>一般带羧基的都叫XX酸,再加上有个氨基,所以,这玩意叫$\color{red}{氨基酸}$。</p>
<p>生物中的氨基酸有20种,有一类是咱身体自身可以合成的,需要从外界摄取,叫必需氨基酸,有8种,谐音是“笨蛋来宿舍凉一凉鞋”,“苯、蛋、赖、苏、色、亮、异亮、缬”。</p>
<p><strong>生物大分子</strong>:是指细胞内存在的蛋白质、核酸、多糖这些大个的分子,大概有几千到几十万个原子组成。但是,脂肪和葡萄糖不是大分子。生物大分子,都是以若干个碳原子构成的碳链作为基本骨架的。</p>
<p>两个氨基酸,的羧基,结合,脱掉一个水分子,然后他俩就结合到一起了,术语叫“脱水缩合”,这个结合叫$\color{red}{肽键}$,2个氨基酸结合叫二肽,10个叫十肽。</p>
<p>一个蛋白质分子,是由一条或者多条肽链,折叠而成。“蛋白质就是氨基酸脱水折叠而成”。</p>
<p>这样,不同的氨基酸组合,排列顺序,空间结构不同,所以,蛋白质种类无数。</p>
<p>蛋白质,会变性,就是“死了”,没有生化功能了,比如鸡蛋煮熟了,而且,是不可逆的。</p>
<p>蛋白质含氮量大概是16%,早起用含氮量来看蛋白质含量,所以,才会出现当年三聚氰胺添加到奶里增加蛋白质检验指标数的丑闻。</p>
<p>蛋白质:组成组织,催化(其实就是酶,酶就是蛋白质),激素也是蛋白质,还可以运输(马达蛋白、血红蛋白)。</p>
<p>不过酶和激素不一样,酶是细胞内用,是催化剂;激素是跑遍全身的,是有腺体产生的,他就是直接的生化参与元素,也不一定都是蛋白质,也可能是胺、脂类等。</p>
<p>第一个人工合成的蛋白质,是中国合成的人工胰岛素,1965年。</p>
<h2 id="核酸">核酸</h2>
<p>核糖核酸:RNA,主要在细胞质里面,是由核苷酸组成。</p>
<p>脱氧核糖核酸:DNA,主要在细胞核里面,是由脱氧核糖核苷酸组成。为啥叫脱氧呢,是五碳糖2号位置少了一个氧原子,所以叫“脱氧”。</p>
<p>核苷酸是由:磷酸基团 + 五碳糖 + 含氮碱基,组成。脱氧核糖是2号位少一个氧。</p>
<p><img src="/images/20200227/1582772066646.jpg" alt="" class="myimg" /></p>
<p>变化的就是含氮碱基,一共有5种:(所以有5种核苷酸、脱氧核苷酸)</p>
<ul>
<li>腺嘌呤A</li>
<li>胞嘧啶C</li>
<li>鸟嘌呤G</li>
<li>胸腺嘧啶T</li>
<li>尿嘧啶U</li>
</ul>
<p>RNA只有ACGU,DNA只有ACGT。</p>
<p>所谓DNA,其实就是由脱氧核糖核酸们双螺旋链接,并且包裹上蛋白质形成的一条长链。DNA是双链的,每个链都是由脱氧核糖核酸组成,通过3’-5’磷酸二酯键连接到一起。两条链中间是靠碱基之间的氢链链接。只能是AT,CG组合,AT是2对氢键,CG是3对氢键。</p>
<p><img src="/images/20200227/1582772286322.jpg" alt="" class="myimg" /></p>
<p>RNA是单链的。</p>
<h2 id="糖和脂质">糖和脂质</h2>
<h3 id="糖">糖</h3>
<p>有机糖,有五碳糖和六碳糖,五碳糖就是核糖和脱氧核糖;其他的糖是六碳糖(葡萄糖、果糖、半乳糖),他们都是一个糖类分子。</p>
<p>常见的糖:</p>
<p>蔗糖:二糖,是由葡萄糖和果糖,缩水而成。</p>
<p>乳糖、麦芽糖、阿斯巴甜(无糖可乐成本)、肝脏里的糖原。</p>
<p>糖的种类:单糖、二糖、多糖。</p>
<p>糖、蛋白质、脂肪可以别氧化功能,先消耗糖,不足之后是脂肪,最后是蛋白质。</p>
<p>二糖(两个一元糖组成):麦芽糖(2个葡萄糖),蔗糖(果糖+葡萄糖),乳糖(葡萄糖+半乳糖)。</p>
<p>多糖:多个葡萄糖组合而成,组合结构不同,形成淀粉、糖原、纤维素。</p>
<h3 id="脂质">脂质</h3>
<p>脂质:有三种,a、脂肪,b、磷脂,c、固醇(胆固醇,性激素,维生素D)</p>
<p>脂肪:就是CHO3个元素组成。是由甘油,链接3条脂肪酸链,也叫“甘油三酯”。</p>
<p>饱和脂肪酸和不饱和脂肪酸,都是脂肪,区别在于脂肪酸组成链的时候,链上的碳C是双链的是不饱和脂肪酸,如果是碳碳之间是单链的是饱和脂肪酸,不饱和脂肪酸可以降低胆固醇,是好油。</p>
<p>橄榄油中不饱和脂肪含量高,不过别搞错,它还是含有很多饱和脂肪酸的,所以也不能多食。</p>
<p>磷脂:由CHONP5个元素组成。</p>
<p>它用来构成细胞膜,他是由甘油,链接2个脂肪酸链,第3个,链接磷酸基团和其他基团。</p>
<p>固醇:也是CHO3元素组成。有3类:</p>
<ul>
<li>胆固醇:细胞膜组成成分,还参与血液中脂类运输,</li>
<li>性激素:促成生殖细胞形成,促进性器官发育。</li>
<li>维生素D:促进人和肠道对钙和磷的吸收。</li>
</ul>
<p>血管内壁破损后,糖、脂肪就会沉积在破口处,堵塞血管,所以,要降低胆固醇,说白了就是少让他往那里搬运脂肪。</p>
<p>体检的时候,会查低密度脂蛋白和高密度脂蛋白。低密度脂蛋白,这种不好,他负责往血液里运胆固醇,他是“坏”指标;而另外一种高密度脂蛋白,他是负责把胆固醇运到肝脏里消化掉,是“好”指标。</p>
<h2 id="细胞中的无机物">细胞中的无机物</h2>
<h3 id="水">水</h3>
<p>结合水:固化在细胞中的水。</p>
<p>自由水:可以自由流动,游离在体内。</p>
<h3 id="无机盐">无机盐</h3>
<p>占身体的1%。</p>
<p>渗透压,就是溶质分子和水分子高低,导致的内外向水分子或者溶质分子的流动。</p>
<h2 id="细胞膜">细胞膜</h2>
<p>是由磷脂组成,但是还包含了一些蛋白质,可以通过浓度差,把一些小分子颗粒渗透进来,叫做被动传输;也可以由atp提供能量,做主动传输,可以把外面低浓度的东西,通过蛋白质当载体,运输到细胞内部来。</p>
<p><img src="/images/20200227/1582772501325.jpg" alt="" class="myimg" /></p>
<p>结构化学,极性分子</p>
<p>细胞内外的静息电位</p>
<p>差速离心法:分离各种细胞器。</p>
<h2 id="细胞器">细胞器</h2>
<p>细胞膜(城墙)</p>
<p>细胞核(市政府)</p>
<p>细胞质(城市空地)</p>
<p>叶绿体(太阳能发电站)</p>
<p>线粒体(发电厂):跟个大米粒一样,类似个供电站,动物植物细胞都有,里面有酶,细胞有氧呼吸产生能量,</p>
<p>内质网:糙内质网合成蛋白质,光内质网合成脂质</p>
<p>高尔基体:也可以造蛋白,和多糖。</p>
<p>核糖体(养殖场):无模结构,内质网上附着的核糖体合成分泌蛋白(就是要排出细胞的蛋白),游离在细胞质中的核糖体合成细胞内蛋白</p>
<p>液泡(粮仓):植物细胞中的一个大水泡,跟细胞质不是一码事,有渗透吸水有关,有机物无机物都有</p>
<p>溶酶体(垃圾场):吞噬衰退老的细胞器,病毒和细菌</p>
<p>中心体:动物和低等植物有,跟有丝分裂油管</p>
<p>细胞骨架(城市框架):蛋白质的纤维组成,支撑细胞,固定各个细胞器;细胞核里面也有细胞核骨架。</p>
<p><img src="/images/20200227/1582770996663.jpg" alt="" class="myimg20" />
<img src="/images/20200227/1582771034770.jpg" alt="" class="myimg40" /></p>
<p>蛋白质加工过程:氨基酸首先通过包吞方式进入细胞内,然后在光华内质网上被合成成蛋白质,然后通过囊泡传输给高尔基体,高尔基体加工后,再形成囊泡,然后由细胞壁通过包吐方式,传给给细胞外。</p>
<h2 id="细胞核">细胞核</h2>
<p>红细胞是没有细胞核的,退化了。</p>
<p>细胞核控制着细胞里面的新陈代谢,新陈代谢就是细胞内的各种生物化学反应,细胞核要是没有了,就没有上面的蛋白质生成了,细胞核是总指挥。</p>
<p>染色质:就是变成染色体之前的形态,在分离的时候,染色质会高度螺旋,变端变粗,成为杆、棒状,然后分裂完,解开螺旋,又变成一团麻一样的染色质。所以,染色体就是染色质,只是不同时期的时候名字不一样而已。本质上就是DNA+蛋白。</p>
<p><img src="/images/20200227/1582791039469.jpg" alt="" class="myimg20" /></p>
<p>核仁:合成rRNA。</p>
<h2 id="细胞中的生化反应---酶">细胞中的生化反应 - 酶</h2>
<p>胃蛋白酶,消化用的,胃里的。</p>
<p>活化能:从低能变成容易变成容易发生化学反应的高能、活跃状态所需要的能量,催化剂可以有效降低这种活化能,酶就是一种催化剂,它也可以降低活化能。</p>
<p>酶的化学本质就是蛋白质, 他催化了有机化学的反应,叫“<strong>酶促反应</strong>”,他的能力叫酶的活性。</p>
<p>酶的催化效率非常高,远超一般的无机催化剂。</p>
<p>一种酶只能催化特定的一种或一类的化学反应,酶具备专一性。</p>
<h2 id="atp三磷酸腺苷">ATP(三磷酸腺苷)</h2>
<p>ATP是个蓄电池,</p>
<p>脂类、蛋白和糖,可以在氧化后供能,但是太慢了,直接能源物质ATP可以直接供能,更高效,</p>
<p>放能过程是水解后,3个磷酸变2个(ADP),并释放大量能量,</p>
<p>ATP←→ADP,不停循环,吸能就是ADP变成ATP,放能就是ATP变成ADP,跟个蓄电池一样。</p>
<p>他的能量是来自于上面提到的脂类、蛋白和糖水解,细胞可以是ATP供能,也可以是自己水解这三类物质获得,本质上,能量是来自于太阳。</p>
<p>所以细胞呼吸,就是有机物在细胞内进过氧化分解,生成二氧化碳或者其他产物,并且释放能量,合成ATP的过程。</p>
<h2 id="有氧无氧呼吸">有氧无氧呼吸</h2>
<p>就是细胞在氧气和酶的作用下,把糖等有机物彻底氧化分解,产生二氧化碳和水,并释放大量能量,40%的命令都转换到ATP中,剩下的变成了热量释放了。(很高了,内燃机转化率才25%)</p>
<p>$ C_6H_{12}O_6+6H_2O+6O_2=6CO_2+12H_2O+energy[32 ATPs]$</p>
<p>解释:葡萄糖+水+氧气⇒二氧化碳+水+能量(这些能量可以合成32个ATP分子)</p>
<p>这个过程分为3个阶段,第2、3个阶段发生在线粒体里面,所以上面说过,线粒体是细胞的发电厂, 而且<strong>放能最多的就是在第三个阶段</strong>,是离子H和氧结合产生水的过程(细节得看老师讲的3个详细阶段,涉及到葡萄糖⇒丙酮酸⇒氢离子的那个化学反应过程)</p>
<p>无氧呼吸,不需要氧,不同催化剂产生酒精或者乳酸:大多数植物、酵母菌产生酒精;动物和乳酸菌、高等植物(土豆,甜菜根)产生乳酸。无氧呼吸能量产生的少。无氧转化效率是30%,70%变成热量。</p>
<p>锻炼减肥的时候,无氧运动,转成atp少,更多的变成热量。</p>
<p>B站演示动画:<a href="https://www.bilibili.com/video/av10677750?p=2">细胞有氧呼吸作用</a></p>
<iframe src="//player.bilibili.com/player.html?aid=10677750&cid=17621939&page=2" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h2 id="光合作用">光合作用</h2>
<p>叶绿素、胡萝卜素、叶黄素,在叶子上,吸收光能,绿色是因为叶绿素不太吸收绿色,绿色都放射了,所以叶子是绿色的。</p>
<p>光合作用是二氧化碳+水,生成氧气,和有机物的过程。</p>
<p>$CO_2+H_2O^* = (CH_2O) + O^*_2$</p>
<p>分为2个过程:一个是在叶绿体上,需要光,主要是分解水,ATP生成;第二个阶段不需要光,也叫暗反应,在叶绿体基质中,很复杂,是一个叫华尔文过程,就是C3,C5在酶的作用下不停的转化,变成有机物的一个反复过程。</p>
<p>这里有个概念,植物既做光合作用,也做有氧呼吸,也就是他自己产生的氧气,自己会耗掉,所以,当光强足够强的时候,植物才对外释放额外的氧气,但是也有个光强也有个饱和点,再多的光强也不会产生额外的氧气了。</p>
<p>B站演示动画:<a href="https://www.bilibili.com/video/av10697319?p=2">光合作用</a></p>
<iframe src="//player.bilibili.com/player.html?aid=10697319&cid=17652390&page=2" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h2 id="细胞增殖">细胞增殖</h2>
<p>有丝分裂,它先准备,时间比较长,然后再分裂,分裂很快,但是准备很久。红细胞、横纹肌细胞、神经细胞,已经分化完成,永远不会再分裂。</p>
<p>早期的胚胎细胞分裂走起是30分钟-75分钟,是很快的。</p>
<p>$\color{red}{有丝分裂}$:</p>
<p><img src="/images/20200227/1582773270278.jpg" alt="" class="myimg" /></p>
<p>DNA要严格复制,不能出错。</p>
<ul>
<li>最开始DNA还是染色质,一团乱麻,但是慢慢地,就高度螺旋化,成染色体(就是有形状了),中间有个凹陷的“着丝点”,就是连接处。</li>
<li>然后,螺旋更强烈,然后细胞核膜分解消失,然后染色体的两头形成一种纺锤状的物质叫“纺锤丝”,就是未来的核膜,他就是细胞质中的蛋白质形成的。</li>
<li>然后,这些”纺锤丝”拉着染色体,很整齐的形成一个“赤道板”,就是未来2个细胞的分割线。</li>
<li>然后,“着丝点”断裂,染色体</li>
<li>然后,然后纺锤丝逐渐消失,核膜、核仁重新形成,染色体去螺旋化然后变成乱麻状的染色质,然后再形成一个分割他们两个细胞核的细胞壁,细胞分裂完成。</li>
</ul>
<p>上面见的是植物有丝分裂,动物的略有不同:</p>
<ul>
<li>动物细胞有一个叫中心粒的东西,他先复制一下</li>
<li>纺锤丝是由这分裂出来的2个中心粒来形成纺锤丝的两极的</li>
</ul>
<p><strong>无丝分裂</strong>:低等生物,没有出现纺锤丝和染色体变化(螺旋),就是一个细胞核,拉伸断裂成2个而已。</p>
<p>可以去B站围观有丝分化的动画演示:</p>
<ul>
<li><a href="https://www.bilibili.com/video/av20412666/">有丝分裂</a></li>
<li><a href="https://www.bilibili.com/video/av10184169/">细胞周期和有丝分裂</a></li>
</ul>
<iframe src="//player.bilibili.com/player.html?aid=20412666&cid=33365491&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<iframe src="//player.bilibili.com/player.html?aid=10184169&cid=16824980&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h2 id="细胞分化">细胞分化</h2>
<p>就是形成不同组织、器官。分化很稳定,不可逆。就是你变成啥器官细胞,肯定会持续变成,而且,肺细胞不可能再演变成胃细胞了。</p>
<p>胚胎期,他们的分化潜能最大,一旦慢慢长大,具有分化潜能的细胞会越来越少,能力也越来越差,比如后期的干细胞只能分裂成10种左右的器官细胞,但是早期的胚胎细胞(比如原肠胚细胞)可以分裂成200多种器官。</p>
<p>一旦分化了,就不可能再变成其他细胞了,定型了。但是,可以通过人为的干扰,可以让这个特性失效,让某些定型细胞重 新具备分化潜能。</p>
<p>不同细胞的基因表达不同了,所谓表达,就是生成不同的蛋白,我理解。</p>
<p>所有细胞都有的表达的基因叫“管家基因”,比如核糖体蛋白基因;特定细胞才表达的基因叫“奢侈基因”,比如血红蛋白基因,只在红细胞里面表达。</p>
<p>干细胞:就是那些潜能细胞,未充分分化,尚不成熟,可再生多种器官细胞,也叫“万能细胞”。</p>
<p>把人的体细胞核引入卵细胞,分裂出来的就是很强分化能力的细胞,进行人工干预后,可以形成各种器官,但是各国都禁止,因为伦理上认为卵细胞分化出来的就是胚胎了。然后,2006年,日本科学家,不用卵细胞了,而用普通体细胞,通过转录因子来实现,这个技术叫:IPS:诱导功能干细胞。</p>
<h2 id="细胞的衰老和凋亡">细胞的衰老和凋亡</h2>
<p>细胞衰老的原因,一种是“端粒学说”,端粒是细胞DNA末端的那一段结构,每次分类,这个端粒就变少,少了以后,DAN复制就容易出错,所以细胞分裂40-50代就完蛋了。还有一种是“自由基”学说,说是带电的活跃分子,他越来越多的缘故,自由基太多容易一起癌变。</p>
<p>细胞凋亡是自杀,细胞器会变成小颗粒,被吞噬细胞吃掉;细胞坏死是他杀,细胞质散落,会引起炎症。</p>
<p>细胞的癌变:</p>
<p>1951年去世的好莱坞明星海拉的宫颈癌细胞,被实验室实验使用,一直用到现在,对比一般的细胞也就是50来代,不超过2个月。</p>
<p>癌细胞表面的糖蛋白少,不容易相互黏着,所以容易游走,也就是容易扩散。</p>
<p>影响癌症的有两种基因:原癌基因,是负责细胞分裂的,调节细胞周期,控制生长;抑癌基因,是抑制不正常增殖的。</p>
<h1 id="遗传">遗传</h1>
<h2 id="孟德尔杂交实验">孟德尔杂交实验</h2>
<p><strong>孟德尔第一定律:</strong></p>
<p>大概意思就是说,有两种遗传因子,也就是基因,一种叫显式基因,就是可以表现出来的,一种是隐形基因,是与之相反的表现。每种都是成对出现。举个例子,显式是AA,隐式是aa,当然还有Aa这种。在形成配子的时候,就是下一代的时候,基因会分离,然后随机组合。比如AA+aa,可以成Aa。而AA+Aa,可能能AA,Aa。而Aa+Aa,可能成AA,aa和Aa。</p>
<p>其中AA,aa叫纯合子,Aa叫杂合子。</p>
<p>AA和Aa,它们表现的出来的都是A特征,a会被隐藏。当然aa肯定是表现成a。</p>
<p>特征是啥,其实就是高矮、胖瘦、蓝黄眼睛,成对出现的。</p>
<p>这玩意其实是一个排列组合的过程,AA,aa,Aa,彼此间排列组合的过程,很简单。</p>
<p>孟德尔就就假设了一种表征分2种。</p>
<p>分离定律,啥意思?就是说Aa,这样的基因,自交(啥叫自交,就是自己和自己杂交,只有植物可以,它们雌雄同体,动物做不到),然后你就发现AA,aa,Aa,各占1/3,”分离“啦。直接观察到了就是变异(也就是aa)的,占1/3。</p>
<h3 id="多种性状在一起">多种性状在一起</h3>
<p>上面讨论的都是一个性状,那多个性状在一起呢?</p>
<p>孟德尔研究告诉我们,一堆性状在一起的时候,各个性状对之间,互不干扰。</p>
<p>AABB+aabb ⇒ AaBb</p>
<p>AaBb <strong>+</strong> AaBb<strong>⇒</strong></p>
<p>AABB() 、AaBB()、aaBB()、</p>
<p>AABb() 、AaBb()、aaBb()、</p>
<p>AAbb() 、Aabb()、aabb()</p>
<p>由于隐形性状ab和显性性状AB在一起的时候不表现,所以最后就会是:</p>
<p>AB, Ab, aB,ab 4个组合样子,比例就是9:3:3:1</p>
<p>这里需要说明一下,算比例不能用上面的9个算,得画一个4x4的表格,来组合AB,Ab,aB,ab他们,4x4=16=9+3+3+1</p>
<p>挺简单的,</p>
<p>这里有个细节要再说一下,我的基因是AaBb,我分裂的时候,我遗传出去的每个基因要分离(就是减半),所以,我可能分离出来4中基因,AB,Ab,aB,ab,去和另外一个性细胞他的一半去组合。</p>
<p>对,时刻牢记,我分裂的时候,我的基因也分为一半。</p>
<p>一些概念:</p>
<ul>
<li>基因型:就是究竟可以组合出几种基因,AABB,AaBB….aabb,是9种</li>
<li>表现型:就是只看显性的,那么只有A和B</li>
<li>配子:就是分离后的基因组合,就是AB,Ab,aB,ab,是4种</li>
<li>分离比:就是表现形式的后代的比例</li>
</ul>
<p>然后,就可以做数据归纳法了,就是3种基因混在一起,4种,5种…..</p>
<p>不过,真实世界比这个要复杂,</p>
<p>有的时候,Aa不是和AA一样,可能是一种新的特征,是A和a两种的融合,比如老师说的那个啥花,A是白色,a是红色,而Aa就是粉色。</p>
<p>也可能是A和a的组合,才一起决定一个性状等。</p>
<h2 id="减数分裂">减数分裂</h2>
<p>减数分裂是生殖细胞特有的,染色体复制1次,但是细胞分裂2次,整个过程是:</p>
<p>1、先复制染色体,1个DNA变2个</p>
<p>2、然后第一次分类,整个时候没有着丝点,就是简单的分开DNA,一边一个,做一次分裂</p>
<p>3、每个分开的细胞,再分裂一次,着丝点把一个DNA分成了一半,变成1/2的DNA了</p>
<p>看,分裂了2次。</p>
<p>卵子分裂自己的,精子分裂自己的,只有生殖细胞这样,其他细胞不这样。</p>
<p>母体细胞,就是完备的DNA的细胞,叫做”精原细胞“或者”卵原细胞“,</p>
<p>减数分裂的,1/2的DAN细胞,叫做精子、卵子。</p>
<p>男的精原细胞,可以不断地有丝分裂增殖,然后某一些精原细胞做减数分裂,变成精子;</p>
<p>而女的卵原细胞,在胚胎形成期就完成了有丝分裂,发育好后只进行减数分裂了;</p>
<p>所以,女人的卵子一生就定了;男人的精子可以源源不断。</p>
<p>同源染色体,我理解就是控制同一性状的染色体,他们俩必须要分开到配子里,</p>
<p>怎么控制同源染色体分开呢?说是有个”联会“的概念,就是让这些同源染色体,先两两配对,有这么一个过程。</p>
<p>所以,1个精原细胞,先复制染色体,(变胖了,变胖的叫四分体)然后有丝分裂,也叫第一次减数分裂,变成跟之前基因数相同,但是染色体是一半的次级精母细胞,然后它在做第二次减数分裂,变成2个精子。</p>
<p>所以,1个精原细胞,可以变成4个精子。</p>
<p>四分体的时候,会发生交叉互换,就是同源染色体会在同样位置上进行互换,交换了DNA片段。</p>
<p><img src="/images/20200227/1582771150415.jpg" alt="" class="myimg30" /></p>
<p>上面是精子,那卵子呢?</p>
<p>卵子跟他差不多,但是,四分体第一次分裂后,会变成1个大的细胞,1个小的细胞,小的叫极体,然后极体再分裂成2个极体,而那个大的细胞,再分裂之后,变成1个小的极体,和1 个真正的卵细胞。最终那3个极体细胞会退化消失掉。</p>
<p>总结一下,1个卵原细胞,最终分裂成3个极体,和1个卵细胞。</p>
<p>B站动画演示:<a href="https://www.bilibili.com/video/av38889614">减数分裂全过程</a></p>
<iframe src="//player.bilibili.com/player.html?aid=38889614&cid=68351113&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h3 id="受精过程">受精过程</h3>
<p>只有1个精子可以和卵子结合,这个精子识别了糖蛋白受体以后,释放出酸性水解酶(溶酶体分泌出来的),溶解掉卵细胞表面,钻入结合。</p>
<p>细胞核来自父母双方,但是细胞质大部分是来自于母方。</p>
<p>B站动画演示:<a href="https://www.bilibili.com/video/av14850312">女性的受精过程</a></p>
<iframe src="//player.bilibili.com/player.html?aid=14850312&cid=24195813&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h2 id="遗传-1">遗传</h2>
<p>萨顿假说:(他只是觉得染色体和基因相关,基因是啥,是个抽象概念,就是保持和传递性状的玩意,萨顿认为,基因的载体是染色体,但是他只是猜想,摩尔根才给出了证明)</p>
<ul>
<li>减数分裂,非同源染色体自由组合</li>
<li>基因和染色体有相关关系</li>
</ul>
<p>摩尔根实验:</p>
<p>他用果蝇做实验,8个染色体,其中有2个是控制性别的,2个是同源的,4对同源。控制性别的XX是雌,XY是雄的。</p>
<p>卡文迪许实验室,和DNA螺旋体模型的构建故事,诺贝尔奖的恩怨。</p>
<h2 id="dna">DNA</h2>
<h3 id="dna结构">DNA结构</h3>
<p>他们之间3,5位置,结合,把他们一个个接到了一起。</p>
<p><img src="/images/20200227/1582771208852.jpg" alt="" class="myimg30" /></p>
<p>碱基互补原则(沙加夫规则/查克夫规则),就是AT、GC配对</p>
<h3 id="dna复制">DNA复制</h3>
<p>就是拧巴在一起的2条链,被解旋酶给分开,然后利用细胞核内游离的脱氧核糖核苷酸,各自配对结合,然后DNA聚合酶再把他们的3,5位置的磷酸分子焊接(形成3’5’磷酸二酯键)到一起,组成一个新链。</p>
<p>一个DNA上有很多碱基对,不是每个对就是一个基因,而是一组碱基对组成一个基因,而且是线性的,就是说,连续的一段,而不是花着来的。</p>
<p>比如大肠杆菌,470万个碱基对,但是只有4400个基因,每个基因是1000个碱基对左右。</p>
<p>人大约有2-3万个基因,分布在46个(23对同源)染色体上,大概有30亿个碱基对。最大的染色体约含有2亿5千万个碱基对,最小的则约有3800万个碱基对。在基因与基因之间,会有一段可能含有调控序列和非编码DNA的基因间区段,也就说,不是所有的碱基对都属于基因,可能是没用的,只有2%的碱基对构成了基因,98%的碱基对没用。</p>
<p>“基因是有遗传效应的遗传片段”</p>
<h3 id="dna指导合成蛋白质">DNA指导合成蛋白质</h3>
<p>细胞核,DNA出不去,那怎么指导,在细胞质中合成的蛋白质呢?</p>
<p>所以需要一个信使“mRNA”, message RNA,信使RNA。</p>
<p>通过mRNA把DNA的遗传信息传递出去,这个过程叫“$\color{red}{转录}$”。</p>
<p>转录过程:</p>
<ul>
<li>首先是RNA聚合酶先找到对应的基因片段,这得费点功夫,比如人的只有2%的DNA上有遗传片段</li>
<li>RNA聚合酶找到了那段后,就给那段包裹起来,然后在罩上的这里面,偷偷的解开了双螺旋链</li>
<li>然后在里面让RNA的组成,“核糖核酸”,注意,不是脱氧核糖核酸,而是核糖核酸,跟这些碱基对配对,不过犹豫RNA里没有T,所以T就变成了U了</li>
<li>然后,在把这些碱基一个个的穿起来,串成1个RNA串,然后就可以吐出来了</li>
<li>最后,RNA聚合酶,再把DNA链拉上,完好无损的</li>
</ul>
<p>这个过程观看,观看老师课上的动画演示:<a href="https://www.bilibili.com/video/av44127961/?p=12&t=981">16分钟开的动画演示</a>,非常清楚。也可以观看这个<a href="https://www.bilibili.com/video/av39528765/">转录翻译</a>。</p>
<iframe src="//player.bilibili.com/player.html?aid=39528765&cid=69443960&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<p>这些需要说明一些事情:</p>
<ul>
<li>使用的是RNA聚合酶,上面DNA复制的时候是DNA聚合酶,注意区别</li>
<li>另外,解开DNA链,用的就是RNA聚合酶,而不是复制的时候的解旋酶了,RNA聚合酶就可以干解旋的事儿</li>
<li>DNA解开后的两条链,用来吸引其他核糖核酸的那条,叫模板链。另外那条闲着的,叫编码链。</li>
<li>DNA转录时时发生,但是DNA复制只发生在S期(间期)发生</li>
</ul>
<p>好啦,转录完,一条RNA链就诞生了,上面可是有了DNA上的遗传密码的噢。</p>
<h3 id="遗传密码">遗传密码</h3>
<p>DAN合成的RNA上,是一堆的ACGU编码,这个编码可以指导合成蛋白质,可是,这一堆乱码怎么就表达合成啥蛋白质呢?这个就是所谓的遗传密码。</p>
<p>“克里克、马太、尼伦伯格”等科学家,一起努力,共同破解了这个神奇的编码世界。</p>
<p>我们知道,信使rRNA上的密码是一系列的ACGU,是一个长序列,基因编码实际上是3个一组,来进行蛋白表达的。3个碱基,对应1个密码子,3个有64种组合,但是对应20种氨基酸,所以就有一个对应密码表了,这种规则是固定的,所有生物共用这套密码本,太神奇了:</p>
<p><img src="/images/20200227/1582790041803.jpg" alt="" class="myimg" /></p>
<p>这个表里,可以看出有的是3-4种密码对1个氨基酸,有的1个密码就对一个氨基酸,</p>
<p>另外,密码子不重用,没有间隔,比如</p>
<table>
<tbody>
<tr>
<td>ACG</td>
<td>CGT</td>
<td>AAC</td>
<td>….,</td>
</tr>
</tbody>
</table>
<p>这样持续下去,中间没有间隔。</p>
<p>3个碱基,对应1个密码子,3个有64种组合,但是只有61个用于编码,剩下的3个是终止密码子,是为了合成蛋白的时候,终止合成,让它成为一个独立的蛋白质多肽链。</p>
<p>朊病毒,是一种破坏蛋白质结构的病毒,比如疯牛病,他的机理是,他感染的蛋白质,会产生结构异常,一般蛋白质的折叠结构是固定的,这种病毒可以导致折叠结构异常,从而使得蛋白质失去效用。</p>
<p>2019年1月21日,西北农林科技大学的徐晓东教授和他媳妇、研究生共同发现了朊病毒,引起轰动,不过这哥们一直不太受重视,匮乏科研经费,研究生甚至出去打工替补实验室,不过功夫不负有心人,终于功德圆满。</p>
<p>【<strong>中心法则</strong>】</p>
<p><img src="/images/20200227/1582788439453.jpg" alt="" class="myimg30" /></p>
<p>所谓中心法则,其实就是讲述DNA如何通过信使RNA来合成蛋白质;不过后来科学家发现,有的病毒RNA也可以合成自己;有的病毒RNA还可以先合成一个DNA单链,然后解开,然后用单链DAN复制成双链DNA,然后织入到宿主DAN中;还有最后这个朊病毒,可以直接合成蛋白质。所以,中心法则,就变成上图的模样。</p>
<h3 id="基因改变">基因改变</h3>
<p>一种是<strong>基因突变</strong>,就是DNA中某个碱基对发生改变了,比如改变了,或者多了一对,少了一对,这就会导致他在转录的时候,影响蛋白质合成。</p>
<p>有可能是自发突变,比如收到X光照射,收到亚硝酸、碱基类影响,被病毒织入自身DNA。大概是$10^{-5} ~ 10^{-8}$的概率。基因突变大部分都是有害的。</p>
<p>当然,基因变异也可能带来好处,就是生物变异,变异后,适应大自然的性状就会保留下来,也即是有这个新技能的动植物存活下来了,从而促进了生物的进化。</p>
<p>一种是<strong>基因重组</strong>,就是有性繁殖的时候,在减数分裂的分裂的时候,会进行同源染色体的等位基因局部互换,然后还会和其他性细胞进行合体,从而带来新的性状。</p>
<h1 id="稳态调节">稳态调节</h1>
<h2 id="人体内环境">人体内环境</h2>
<p>人体的体液,2/3是细胞内页,1/3是细胞外液(包括血浆、组织液和淋巴液。细胞外液也叫“内环境”)。</p>
<p>血浆是由:白细胞、血小板、血浆、红细胞组成。血小板和白细胞很少,主要是红细胞。</p>
<p>淋巴,也叫淋巴液,是在淋巴管流动的液体,生活着淋巴细胞和吞噬细胞。</p>
<p>血管把运送营养物质,透过毛细血管壁,进入到组织液当中,然后再进入到细胞当中;同样,细胞的代谢的废物会排泄到组织液中,然后组织液再排到血管当中个,最终由血液带出;血液和组织液是双向交换的。</p>
<p>不过淋巴不是双向的,是单向的,组织液中把异常蛋白质(废物)排到淋巴液里,淋巴液再排到血液里。</p>
<p>血液,90%都是水,8%的蛋白质,1%是无机盐。</p>
<p>渗透压,说的就是对水分子的吸引力,$Na^+$(钠离子)维持细胞外液渗透压起决定作用;$K^+$(钾离子)维持细胞内液渗透压起决定作用。不均衡会导致组织液或者细胞吸水,比如水肿就是这个原因。</p>
<p>血液的PH只在7.35-7.45之间。</p>
<p>呼吸的时候,肺泡获得氧气,然后氧气进入肺部的毛细血管,然后找一个红细胞,氧气钻入红细胞,然后红细胞带着他到达身体的各个部分,到达后,氧气会从红细胞中钻出,进入到血浆中,然后穿越毛细血管壁进入到组织液当中,然后再到组织内的细胞内,细胞就可以利用氧气做有氧呼吸制造ATP了。</p>
<p>细胞代谢后,产生的代谢废物和二氧化碳,会进入到组织液中,然后进入血液,二氧化碳会回到肺中排出,而各种废物会通过血液进入肾,通过肾小球过滤成尿液排出。</p>
<p>葡萄糖是在我们的消化道中被吸收的,小肠绒毛上皮细胞,然后就进入了小肠中的毛细血管,然后随着血液循环,传输给身体各个部分,然后类似氧气一样,通过组织液,最终进入到细胞内。</p>
<p>谷草转氨酶(GOT)心脏中活力最大,其次是肝脏;谷丙转氨酶(GPT)肝脏中活力最大;如果有病变感染,GPT散落到血液中,就会检测到,所以临床用血液中的GPT含量来判断肝脏的健康程度。</p>
<p>肌酐是肌肉代谢,尿酸素也是,如果这两个指标高,就表明肾有问题了,肾是无痛觉的。</p>
<h2 id="神经系统">神经系统</h2>
<p>神经分为中枢神经和外周神经。中枢神经包括大脑和脊髓。而他俩扩展出来的神经网络叫外周神经系统。类比一下,就如树干与树枝。</p>
<p>神经中枢:指的是中枢神经中,一片区域,完成某个特定功能,比如大脑皮层的一片区域是负责语言的,就叫做“语言中枢”。</p>
<p>脑神经有12对,其中的”迷走神经”,属于脑神经,他分布很广,控制着所有的内脏,包括呼吸、消化、心脏等。</p>
<p>脊神经,控制所有的肌体,躯干和四肢,一共有31对。</p>
<p>“自主神经系统”,就是控制内脏运动的神经,分为交感神经,和副交感神经。交感神经是兴奋的时候占优势,一般都是脊神经发出的;副交感神经是安静的时候占优势,一般都是从大脑发出的(迷走神经就是其中的一个)。</p>
<p>组成神经系统的细胞,有2种,一种是神经细胞(也叫神经元),一种是神经胶质细胞。他的结构:</p>
<ul>
<li>树突:接受其他神经细胞信号的一端</li>
<li>轴突:发送信息到其他神经元的一端,一般比较长</li>
<li>髓鞘:就是轴突上的绝缘体,防止生物电短路。</li>
<li>神经纤维:轴突和髓鞘合起来叫神经纤维。</li>
</ul>
<p>“神经末梢”,就是神经的末端,分为感觉神经末梢,就是感受外部刺激的;而运动神经末梢,是控制肌肉、腺体运动的。</p>
<p>“神经胶质细胞”,是帮助滋养、支撑神经元的,他是起辅助作用的。</p>
<p>外周神经细胞可以再生,有一种叫“施旺”细胞帮助修复它们。但是中枢神经细胞是不能再生的,虽然之前的研究说是大脑的神经元不会再生,但是最近的研究发现,学习、运动可以增加海马区(记忆相关的)的神经元会增多。</p>
<p>兴奋,是个专有词汇,是指感受到刺激后,从静止到活跃的过程。
生物收到刺激,会产生生物电信号,然后在神经纤维上传导,这个电信号也叫神经冲动,在神经两端加上电压表可以测到的。
原因是,刺激会导致神经细胞表面的“钠钾泵”蛋白开放,他是一个主动转运的蛋白,$N^+$钠离子就会内流,这样细胞膜内就产生正点,而细胞膜就带负电了,然后和神经纤维的另外一段就产生电位差,产生生物电。
传递过去后,到了神经末梢,然后传给另外一个神经细胞,传递下去了。</p>
<p>可以看一下B站的<a href="https://www.bilibili.com/video/av10629964?p=2">动画演示</a>,加深理解:</p>
<iframe src="//player.bilibili.com/player.html?aid=10629964&cid=17546810&page=2" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<p>神经元之间,靠“突触”相连,突触是左面的神经元的末梢的突触小体,和右面的神经元的树突的结合体。
突触是二者的合体,但是,其实没有合体,中间是有间隙的,叫突触间隙。
神经信号,也就是兴奋,传导的时候,左面的神经末梢的突触小体中的突触小泡,会释放神经递质到右面的神经元里,与受体结合,并释放出信号。</p>
<p><strong>大脑结构</strong></p>
<p>大脑皮层,就是脑外面薄薄得一层,凹进去的叫沟,凸出的叫回。最中间的那个沟,前面的叫中央前回,后面的中央后回。中央前回控制着躯体运动,而且左右交叉。手站的面积比较大,因为触觉以及控制要求的比较多。
大脑属于高级中枢,他来管理低级中枢,也就是脊髓。</p>
<p>可以去B站看一下<a href="https://www.bilibili.com/video/av9996476?p=2">大脑的结构</a>,了解更多:</p>
<iframe src="//player.bilibili.com/player.html?aid=9996476&cid=16872690&page=2" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
<h2 id="免疫系统">免疫系统</h2>
<p>$\color{red}{抗原}$:是个不好的词,就是病原体表面上的那些可以和免疫细胞受体结合的物质,这些物质其实就是蛋白质。“抗原就是进入生物体的大分子异物”。</p>
<p>免疫系统组成:器官、细胞、活性物质。</p>
<p>免疫器官包括:中枢免疫器官、外周免疫器官。
中枢免疫器官,这里是免疫细胞产生的地方,包括骨髓、胸腺(主要是产生T细胞)。
外周免疫器官,脾、淋巴、扁桃体。</p>
<p>骨髓中的造血干细胞,会分化出红细胞、血小板和白细胞。其中白细胞就是免疫细胞。大部分的白细胞都是骨髓产生的。</p>
<p>胸腺会孵化T细胞,T细胞是在骨髓中产生,但是在胸腺中成熟的。胸腺在青春期达到发育高峰,随后就逐渐退化了。</p>
<p>脾脏是人的血库,可以储存血液,以备失血、缺氧、运动的时候提供补充,如果血液里有病菌、抗原、异物啥的,脾脏中的巨噬细胞就会吞掉它们。还会吞噬死亡衰老的细胞,比如衰老的红细胞、血小板。</p>
<p>免疫细胞:就是白细胞,全部来自于骨髓的免疫干细胞,一共有5种。</p>
<ul>
<li>淋巴细胞:B细胞和T细胞</li>
<li>中性粒细胞、嗜酸性粒细胞、嗜碱性粒细胞:个大,内含颗粒状物质</li>
<li>单核细胞:巨噬细胞、树突状细胞</li>
</ul>
<p>抗原呈递细胞:就是身体的异物首先被这些抗原呈递细胞(树突状细胞、巨噬细胞),检测,就相当于试纸一样,检测完的结果,会暴露在细胞的表面,然后传递给其他有杀灭能力的免疫细胞(B细胞、T细胞),这样的“检测”细胞,就是抗原呈递细胞。
他就是中介,是个检测员。</p>
<p>免疫活性物质:就是免疫细胞产生的,可以发挥免疫作用的物质,比如抗体、溶菌酶、细胞因子(干扰素、白细胞介素、肿瘤坏死因子)等。
其中抗体最重要,抗体是能与某种抗原结合的蛋白质,分布在全身的血清里。他和抗原一结合,就沉淀下来了,然后巨噬细胞就可以吃掉他们了。</p>
<p>人体本来有皮肤、粘膜,以及免疫器官的保护,但是如果人体免疫力低下,病原体继续扩散,就会触发免疫系统的第三道防线,就是免疫细胞的工作。</p>
<p>免疫细胞工作,一种是体液免疫,就是进入体液的病原体。过程是这样的:B细胞首先和病原接触,摸摸他的底;同事,吞噬细胞吞噬病原体,然后把病原体的抗体放到自己的表面,然后抗原呈递给辅助性T细胞,辅助性T细胞再传递给B细胞,B细胞double confirm了抗原,就开始增殖,准备大干一场了。他会分裂成,大量的浆细胞和少量的记忆B细胞,浆细胞完成病原杀灭后就消失了(消灭过程是分泌抗体,与病原结合沉淀,然后巨噬细胞吞噬),而记忆B细胞会在人体内存活很久,甚至是一辈子,这个也是你得过啥病痊愈后,就不会再轻易得的原因,因为记忆B细胞已经记住这些坏蛋了,下次再出现,立刻杀灭。</p>
<p>第二种,是细胞免疫,这种是病原体进入了体细胞了,而不是仅仅在体液里(血液、淋巴液),这个时候,就需要进行细胞免疫活动了。这个时候,这个细胞已经是完蛋了,叫“靶细胞”。基本过程跟体液细胞一样的,就是抗原呈递给辅助性T细胞,不过,一个额外的过程也出现,就是细胞毒性T细胞出场了,他会识别靶细胞的表面的蛋白变化,然后细胞毒性T细胞就开始活化分裂,分裂出记忆T细胞和细胞毒性T细胞,细胞毒性T细胞就开始随着身体血液扩散到全身,像警察一样,去找那些感染的细胞,然后消灭它。</p>
<p><strong>过敏</strong></p>
<p>有些人,在过敏原的刺激下,他们的B细胞会活化,分泌抗体,这些抗体就会吸附在消化道、呼吸道、细胞(致敏肥大细胞)表面。</p>
<h2 id="内分泌">内分泌</h2>
<p>内分泌,就是内分泌腺,分泌出激素,然后进入血液循环,然后进入组织液,最终到达被作用的细胞,被作用的细胞叫靶细胞、靶器官。</p>
<p>内分泌,是由腺体分泌的,包括内分泌腺、外分泌腺。外分泌腺就是汗腺、胃腺、唾液腺,它们是不进入我们的身体内环境的。内分泌腺,包括垂体、甲状腺、肾上腺,它们分泌的激素,会从腺体的毛细血管出来进入血液,达到全身各处。这是用中“体液调节”。</p>
<p>“促胰液素”是人类发现的第一种激素,是小肠粘膜上分泌出来的促使胰腺分泌胰液的激素。</p>
<p>“班廷”发现了胰岛素,后来获得诺贝尔奖。</p>
<p>“睾酮”是睾丸内分泌的雄激素。</p>
<p>激素是由腺体分泌,但是一些器官表面的内分泌细胞,也可以分泌,如小肠表面。</p>
<p>下丘脑,有一些内分泌细胞,也可分分泌激素,促激素释放激素(催发垂体分泌垂体促激素)和抗利尿激素(促进肾小管对水的吸收,比如吃咸的时候分泌)。</p>
<p>垂体,分泌促激素(促发其他腺体分泌激素);和生长激素(促进蛋白质合成和骨生长),侏儒症、巨人症都是因为这个分泌混乱的原因。</p>
<p>甲状腺,分泌甲状腺激素,促进新陈代谢、生长发育、促进中枢神经发育,提高兴奋度。所以甲亢,就是甲状腺分泌太多,会消化过快,过于亢奋。</p>
<p>肾上腺,在肾脏内侧上方,分泌肾上腺素,是一种神经递质,提高机体应激能力。</p>
<p>卵巢,分泌雌激素、孕激素,促进生殖器官生长,生殖细胞生长。</p>
<p><strong>血糖调节</strong></p>
<p>人体内有两种糖原:肝糖原分解可以得到葡萄糖,肌糖原分解得不到。
脂肪也可以转换成葡萄糖。</p>
<p>血糖的3个来源:食物中被消化道分解吸收的、肝糖原、脂肪。
血糖的3个去处:氧化分解(通过有氧呼吸变成能量),肝糖原、肌糖原,脂肪。</p>
<p>胰脏中分泌2种胰岛细胞,胰岛B细胞可以降血糖,促进血糖分解,抑制肝糖原转换等;胰岛A细胞,正好想法,是促血糖的,他促进肝糖原分解和促进合成葡萄糖。</p>
<p>糖尿病的原因就是,体内葡萄糖太多了,超过了肾小管的“肾糖阈”。I型糖尿病是先天性缺少胰岛B细胞导致;II型糖尿病是大部分得的,是因为他们的胰岛素无法和受体结合导致的。</p>
<p>发烧,其实是机体自我调节过程,下丘脑会把人体的温度从37度调节到39度,这个温度利于免疫细胞活性,不利于病原体存活。烧退的时候,人体需要降温,这个时候,毛孔会打开,汗腺分泌汗液,起到挥发作用,从而降低体温。所以烧退的时候,人会大汗一场。</p>
<p><strong>尿液形成</strong></p>
<p>血液经过肾小球,水分和有机物质就会积累在肾小球外面的肾小囊中,形成原尿,然后经过肾小管的时候,水分会被重新收回去部分,99%的水分、葡萄糖、无机盐会被重新收回静脉,剩下的就是真正的含氮的废物。</p>
<h1 id="后记">后记</h1>
<p>终于完成了对生物、人体、细胞一个基础的学习和了解,澄清了很多过去不太懂的概念,至少再去看一些消息、传言或者文章,很多内容应该是有一定的理解能力了,很高兴。这个过程中,也惊叹于大自然的奇妙,人体的复杂,以及前赴后继的生物学、医学上这些先辈们孜孜不倦的研究和追求,也深感自己的无知和渺小,我们始终是大自然里卑微的一个个个体,常怀有敬畏之心,虚怀若谷的不断学习。</p>
儿子的初中复习
2020-01-01T00:00:00+08:00
https://www.piginzoo.com/home/2020/01/01/son-review
各种树
2019-12-07T00:00:00+08:00
https://www.piginzoo.com/tech/2019/12/07/tree
<h2 id="一片篇森林">一片(篇)森林</h2>
<p>远航君的一番讲解(<code>在远航的帮助下。。。:)</code>),让我对树又燃起兴趣,于是,有兴趣码上一篇,但是,又觉得不能只见树木不见森林,所以多刨几个坑,留着做未来各种树。</p>
<h2 id="一些简单的概念">一些简单的概念</h2>
<p>有些概念还是得先置的。</p>
<h3 id="各种简单树">各种简单树</h3>
<p><strong>二叉树满树</strong>:就是所有叶子都满满的二叉树。</p>
<p><strong>完全二叉树</strong>:就是最后一层所有的结点都连续集中在最左边,再往上都是满树。所以,别被“<strong>完全</strong>”迷惑了,这个树不是“完全”的,可以缺的,只是都是靠左而已。</p>
<p><strong>二叉查找树</strong>:别看就多了“<strong>查找</strong>”二字,他就变成排序的了,这样,你就可以进行查找了。所谓排序,就是给二叉树多了早么一个规则“左孩子<父节点<右孩子”。</p>
<p>前序遍历啥的,比较简单,自行百度吧。</p>
<h3 id="旋转">旋转</h3>
<p>看图,不说话了</p>
<h4 id="左旋"><strong>左旋</strong></h4>
<p><img src="/images/20191207/left-rotate.gif" alt="" class="myimg30" />
<img src="/images/20191207/left-rotate2.gif" alt="" class="myimg30" /></p>
<p>算了,还是说两句吧:</p>
<ul>
<li>旋得有个中心,这中心就是左图的S,右图里面的节点4。</li>
<li>所谓左旋,就是感觉把中心点<strong>“拎”</strong>起来,整个树往左边拱了一下,是逆时针而动。</li>
<li>下面的右旋,反之。</li>
</ul>
<h4 id="右旋"><strong>右旋</strong></h4>
<p><img src="/images/20191207/right-rotate.gif" alt="" class="myimg30" />
<img src="/images/20191207/right-rotate2.gif" alt="" class="myimg30" /></p>
<p>挺复杂哈~,可是你仔细想想,其实挺合理的。因为要维持“左孩子都比父亲小,右孩子都比父亲大”的规则,而且,又尽量不增加树的深度,貌似,这样搞是最合理的。呵呵。</p>
<h2 id="红黑树">红黑树</h2>
<h3 id="啥叫红黑树">啥叫红黑树</h3>
<p>远航君主要是给我们讲在这个了,我先抛个官方的“红黑树”定义:</p>
<pre><code>在二叉查找树基础上,添加以下性质
1. 节点是红色或黑色
2. 根节点是黑色
3. 每个为空的叶子节点是黑色的
4. 每个红色节点的两个子节点都是黑色
5. 从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点
</code></pre>
<p>然后,我给我给的定义“非常有病的晕头转向的有颜色的树”。哈哈。</p>
<p>开玩笑啦,红黑树,请记住$\color{red}{红五条}$就可以了。在远航老师的带领下,我们深入探讨了一下:</p>
<ul>
<li>红黑树,还是一个<strong>二叉查找树</strong>噢,别忘了,排过序的噢~</li>
<li>每个叶子其实还有2个隐形的黑孩子,nil,其实实现的时候也不会占空间,就用一个拷贝就可以,因为他就是个占位符</li>
<li>为什么会想出红黑这么一个变态的结构?我们几个其实没有讨论清楚,未来可以深入研究下。</li>
<li>主要解决的是查找问题,比如jdk8以后的hashmap为了防止在某个key上冲突,在这个key上挂了一个红黑树,加速之。</li>
<li>红黑树主要是个折中,甜甜的话,只要黑的平衡就好,咱不要求整颗大树都平衡,太折腾了,就折中下,让局部的黑色节点平衡吧(就是第5条)</li>
<li>远航君演示过,如果插入一个节点,可能会导致破坏红黑树的和谐,但是有限几步的变换,就可以让树变成新的稳态红黑树,这也许正是红黑树的优势吧。(至于完美的平衡二叉树的变换,是不是会花费很多步,没细想。。。)</li>
</ul>
<h3 id="插入节点">插入节点</h3>
<p>插入一个新的点到已经稳态的一个红黑树,会有几种插法?答案:“茴香豆有6种写法”。</p>
<p>往左树上3种,往右树上3种,两边是对称的,好吧,我们只讨论左边的3种吧。</p>
<p>对了,插入的时候,怎么插啊。其实是一个查找过程,你总是可以把这个新插入的数,从根节点出发,如果比根节点大,往左走,否则,往右走。然后到下一层后,递归进行。最后,总是可以到达一个叶子节点吧,然后看是比这个最后的叶子节点大还是小,决定往左子树或者右子树上插入。</p>
<p>另外,插入的新节点的颜色都规定为红,为毛?不知道,龟腚!</p>
<p>然而,问题就惊悚出现了,万一最后找到的叶子节点是红色怎么办?如果你把新节点插在他的后代上,就出事了。因为,违反了红五条的第4条<code>4. 每个红色节点的两个子节点都是黑色</code>了。</p>
<p>好啦,别急,我们有解决办法。</p>
<p>先说说,图示上的字母:</p>
<ul>
<li>N:新插入节点</li>
<li>P:父节点</li>
<li>U:叔叔节点</li>
<li>G: 爷爷节点</li>
</ul>
<h4 id="情况1">情况1</h4>
<ul>
<li>新节点N,他爹P、他叔父U节点都为红色。</li>
</ul>
<p><img src="/images/20191208/1575771039934.jpg" alt="" class="myimg30" /></p>
<p>这种情况,将新节点N的父节点P和叔父节点U的颜色都改为黑色,若爷爷节点G是跟节点就将其改为黑色,否则将其颜色改为红色,并以爷爷节点G为插入的目标节点。这就相当于把爷爷节点G,当做一个新插入节点,然后递归看属于情况1、2、3,然后如法炮制往上传播。</p>
<p><strong>这种方法,就是简单变色</strong>,简单吧。</p>
<p>对不一定能解决问题,可能存在向上递归。</p>
<h4 id="情况2">情况2</h4>
<ul>
<li>新节点N的叔叔节点U为黑色</li>
<li>新节点N和父节点P在同一边</li>
</ul>
<p><img src="/images/20191208/1575771070311.jpg" alt="" class="myimg30" /></p>
<p>(即父节点为爷爷节点的左儿子时,N也是父节点的左儿子。父节点为爷爷节点的右儿子时。N也是父节点的右儿子)。以父节点为爷爷节的左儿子为例,将<strong>父节点改为黑色</strong>,<strong>爷爷节点改为红色</strong>,然后以爷爷节点为基准<strong>右旋</strong>。(N为父节点右儿子时做相应的左旋。)</p>
<p>恩,<strong>这种方法:1、改爹为红色;2、改爷爷为黑色。3、右旋。</strong></p>
<p>这种情况赞,不会再往上递归啦,好开森。</p>
<h4 id="情况3">情况3</h4>
<ul>
<li>新节点N的叔叔节点U都为黑色</li>
<li>新节点N和父节点P不在同一边</li>
</ul>
<p><img src="/images/20191208/1575771103215.jpg" alt="" class="myimg30" /></p>
<p>(即父节点为祖父的左儿子时,N是父节点的右儿子。父节点为祖父节点的右儿子时。N也是父节点左右儿子)。以父节点为祖父节点的左儿子为例。以父节点为基准,进行左旋,然后以父节点为目标插入节点进入情况3的b情况进行操作。</p>
<p>恩,<strong>这种情况,只左旋,不变色。</strong></p>
<p>我靠,我定睛一瞧,这不就是情况2么?那再按照情况2,再搞一下不就好了么。哈哈。</p>
<h3 id="删除">删除</h3>
<p>远航君没有来得及讲呢,坐等他大范围分享的时候补上。</p>
<h2 id="b树">B树</h2>
<p>B树、B+树、B-树、B*树。。。</p>
<p>等着远航君或者哼仔来讲了,哈哈,先占个坑</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="/assets/red_black_tree.pdf">远航君的PPT</a></li>
<li><a href="https://www.cnblogs.com/gejuncheng/p/9081886.html">红黑树的插入删除操作</a></li>
</ul>
程序的编译、装载与链接
2019-12-01T00:00:00+08:00
https://www.piginzoo.com/tech/2019/12/01/compile-link-load
<h2 id="前言">前言</h2>
<p>作为计算机专业的人,最遗憾的就是上编译原理的那学期被老师拉去干活了,没上成。所以,对一个程序怎么就从源代码变成了一个在内存里活灵活现的进程,一直心怀好奇。这种好奇,一直驱使我,要找个机会深入了解一下。所以,就写下此贴,督促自己深入研究一下。不过,这篇帖子没有深入研究编译原理、操作系统原理这些内容,而是主要聚焦在程序的链接和加载这两个主要话题。</p>
<p>研究程序的链接和加载,主要就参考三本书、一个视频、一个音频,这些内容,都在后面<a href="#参考">参考</a>都列出了。三本书里,最主要还是《程序员的自我修养 - 链接、装载与库》,里面涉及到的代码我放到了<a href="https://github.com/piginzoo/link-load-library-code">我的github</a>上,并且配有shell脚本和说明,运行后可以实操理解到更多内容。另外,南大袁春风老师的计算机原理讲解,对我帮助也很大,你知道,视频还是最直接可以传达知识的方式。另外,为了方便自己的实验,我还制作了一个ubuntu的docker环境,并且内置了代码和环境,方便实验:
<a href="registry.cn-hangzhou.aliyuncs.com/piginzoo/learn">阿里docker镜像</a>,也欢迎拉取玩耍。</p>
<p><code>docker pull registry.cn-hangzhou.aliyuncs.com/piginzoo/learn:1.0</code></p>
<h2 id="概述">概述</h2>
<p>每天,无数的程序,他们被写出来,编译出来,部署上去,不停的跑着,他们干着千奇百怪的事情,可是,就像这个千奇百怪、光怪陆离的世界一样,是由每个人、每个个体组成的,如果我们剖析每个人,发现他们其实都是一样的结构,都是由细胞、组织组成,再深究,便是基因了,DNA里面的那一个个的“核苷酸基”,决定了他们。</p>
<p>同样,通过这个隐喻来认知计算机,我们可以知道,计算机的基因和本质就是冯诺依曼体系,啥是冯诺依曼体系呢,通俗的讲,就是定义了整个硬件体系(CPU、外存、输入输出),以及取指执行的运行流程等等。可是,到底一个程序,如何与硬件亲密无间的运行起来了呢,应该是很多人不了解的,甚至包括许多计算机专业的同学们。</p>
<p>本质上来讲,这个过程其实就是一个“从代码编译成目标文件、然后不同目标文件链接到一起成为可执行文件,最终讲可执行文件加载到内存中,被操作系统管理起来的一个进程,可能还会动态的再去链接其他的一些程序(如动态链接库)”,但是,每个部分都隐藏着很多很多细节,好奇心很强的你,一定想知道,到底计算机怎么做到的。</p>
<p>我们这片帖子不打算讨论硬件、进程、网络的这么庞大的体系,我们就聚焦在程序的$\color{red}{链接和加载}$,这两个主题,当然,这已经很大了。</p>
<p>来吧,我们来一起探索吧。</p>
<h2 id="基础">基础</h2>
<p>虽然我们只聚焦在链接和加载,但是,还是需要把一些基础知识交代一下的,否则,是无法理解链接和加载的。</p>
<h3 id="硬件基础">硬件基础</h3>
<p>先说说硬件吧,</p>
<p><strong>首先就是CPU</strong>:</p>
<p><img src="/images/20191223/1577076381870.jpg" alt="" class="myimg30" /></p>
<p>CPU由一大堆寄存器,还有算数逻辑单元(就是做运算的),还有控制器组成,每次,通过PC(程序计数器,存着指令地址)寄存器,去内存里去寻址可执行二进制代码,然后加载到指令寄存器里,然后涉及到地址的话,再去内存里去加载数据,计算完,再写回到内存里。每条指令都会放到指令寄存器(IR)中,等着CPU去取出来运行。指令哪里来的?是从硬盘加载到内存里,又从内存里加载到IR里面的。指令运行过程中,需要一些数据,这又要求从内存里取出一些数据,放到通用寄存器中,然后交给ALU去运算,结果出来,又会放到寄存器或者内存中,周而复始。</p>
<p>每一步都是一个时钟周期,现在的CPU一秒钟可以做1G次,是1000000000,几十亿次/秒,不过,这也就到头了,现在市场上的CPU主频据说到了4GHz就到头了,限于工艺,上不去了,所以就慢慢转多核了,就是把几个CPU封装到一起卖了,并行之。我看看我笔记本上,服务器上,都是2.5-3GHz的,现在卖的多核,其实就是处理器多个,共享一下内部缓存,打包在一起。</p>
<p><strong>然后,是主板了</strong>:</p>
<p><img src="/images/20191220/1576808941442.jpg" alt="" class="myimg" /></p>
<p>如图,我们看到了,我们经常听说的“北桥、南桥”,他们是啥?</p>
<p>北桥其实就是一个计算机结构,准确说的是一个芯片,它连接的设备都高速设备,通过PCI总线,把cpu、内存、显卡串在一起,他的亲戚都是高速设备;而南桥就要慢很多了,都是鼠标、键盘、硬盘等这些“穷慢”亲戚,他们之间用ISA总线串在一起。</p>
<p><strong>硬盘呢,</strong></p>
<p>硬盘硬件上是盘片、磁道、扇区这样的一个结构,太复杂了,所以,从头到尾,给这些扇区编个号,就是所谓的“LBA(Logical Block Address)”的一个逻辑扇区的概念,方便寻址。</p>
<p>为了隔离,每个进程有一个自己的虚拟地址空间,然后想办法给他映射到物理内存里,但是内存不够怎么办?就想到了再细分,就是分页,分成4k的一个小页,常用的在内存里,不常用的交换到磁盘上。这就要经常用到地址映射计算(从虚拟地址到物理地址),这个工作就是MMU(Memory Management Unit),这玩意为了快都集成到CPU里面了。</p>
<p><strong>最后,说说输入输出设备</strong></p>
<p>还有好多外设,他们负责输入输出,他们一旦被外界输入东西,或者要输出东西,就要得去告诉CPU,告诉他“我有东西了,来取吧”,“我要输出啦,来帮我输出吧”,这事就要靠一个叫“中断”的机制了,你可以理解中断就是一种消息机制,用于通知CPU,来帮我干活。当然,也不是人人都可以直接骚扰CPU的,他们都要通过中断控制器来集中骚扰CPU的。</p>
<p>这些外设,都有自己的buffer,这些buffer也得有地址吧,这个地址叫端口。</p>
<p><img src="/images/20191223/1577075515858.jpg" alt="" class="myimg20" /></p>
<p>还得给每个设备编个号,这样系统才能识别谁是谁,每次中断,CPU一看,噢,原来是05,05是键盘啊,06!06是鼠标啊。这个号,叫中断编号(IRQ)。</p>
<p>每次都要骚扰CPU,非要这样么?可以直接把数据从外设的buffer(端口)里,直接灌到内存里,不用CPU参与,多好啊。对,这个做法就是DMA。每个DMA设备也得编个号,这个编号就是DMA通道,这些号可不能冲突啊。</p>
<p><img src="/images/20191223/1577075790526.jpg" alt="" class="myimg20" /></p>
<h3 id="汇编基础">汇编基础</h3>
<p>对于汇编,我其实也忘光了,所以得补补汇编知识了,起码能读懂一些基础的汇编指令。</p>
<h4 id="汇编语法">汇编语法</h4>
<p>汇编分门派呢!”AT&T语法” vs “Intel语法”:GUN GCC使用传统的AT&T语法,它在Unix-like操作系统上使用,而不是dos和windows系统上通常使用的Intel语法。</p>
<p>最常见的AT&T语法的指令:movl %esp, %ebp,movl是一个最常见的汇编指令的名称,百分号表示esp和ebp是寄存器,在AT&T语法中,有两个参数的时候,始终先给出源(source),然后再给出目标(destination)。</p>
<p><strong>AT&T语法</strong>:</p>
<p><code><指令> [源] [目标]</code></p>
<h4 id="寄存器">寄存器</h4>
<p>寄存器是干嘛的?就是放着各种给cpu计算用的地址啊、数据用的,可以认为是为CPU计算准备数据用的。一般,分为8类:</p>
<table>
<tbody>
<tr>
<td>累加寄存器:</td>
<td>存储执行运算的数据和运算后的数据。</td>
<td>就是放计算用的数,算之前,算完后的</td>
</tr>
<tr>
<td>标志寄存器:</td>
<td>存储运算处理后的CPU的状态。</td>
<td>一般溢出啊,或者JMP的时候看条件用的</td>
</tr>
<tr>
<td>程序计数器:</td>
<td>存储下一条指令所在内存的地址。</td>
<td>存着指令的地址,读他才能找到代码在哪,代码寻址用的</td>
</tr>
<tr>
<td>基址寄存器:</td>
<td>存储数据内存的起始地址。</td>
<td>读内存用的,不过只放起始地址,寻址用的</td>
</tr>
<tr>
<td>变址寄存器:</td>
<td>存储基址寄存器的相对地址。</td>
<td>读内存用的,不过只放偏移地址,寻址用的</td>
</tr>
<tr>
<td>通用寄存器:</td>
<td>存储任意数据。</td>
<td>这个是放任意数据用的,我怎么觉得累加寄存器有点鸡肋了,用它不就得了</td>
</tr>
<tr>
<td>指令寄存器:</td>
<td>存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作。</td>
<td>存执行指令用的</td>
</tr>
<tr>
<td>栈寄存器:</td>
<td>存储栈区域的起始地址。</td>
<td>寻址用的,永远指着当前栈的栈顶地址(内存的)</td>
</tr>
</tbody>
</table>
<p><strong>命名</strong></p>
<p>命名上,x86一般都是指32位;x86-64一般都是指64位。32位寄存器,一般都是e开头,如eax,ebx;64位寄存器约定上都是以r开头,如rax,rbx。</p>
<h5 id="32位寄存器"><strong>32位寄存器</strong></h5>
<p>32位CPU一共有8个寄存器</p>
<table>
<tbody>
<tr>
<td>%eax</td>
<td>%ebx</td>
<td>%ecx</td>
<td>%edx</td>
<td>%esi</td>
<td>%edi</td>
<td>%ebp</td>
<td>%esp</td>
</tr>
</tbody>
</table>
<p><strong>详细的介绍</strong></p>
<table>
<tbody>
<tr>
<td>%eax</td>
<td>累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高;</td>
</tr>
<tr>
<td>%ebx</td>
<td>EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用</td>
</tr>
<tr>
<td>%ecx</td>
<td>ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;</td>
</tr>
<tr>
<td>%edx</td>
<td>EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。</td>
</tr>
<tr>
<td>%ebp</td>
<td>EBP为基指针(Base Pointer)寄存器,一般作为当前堆栈的最后单元,用它可直接存取堆栈中的数据;</td>
</tr>
<tr>
<td>%esp</td>
<td>ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。</td>
</tr>
<tr>
<td>%esi/%edi</td>
<td>ESI、EDI为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量, 它们可作一般的存储器指针使用。</td>
</tr>
</tbody>
</table>
<h5 id="64位寄存器有32个"><strong>64位寄存器有:32个</strong></h5>
<table>
<tbody>
<tr>
<td>%rax</td>
<td>%rbx</td>
<td>%rcx</td>
<td>%rdx</td>
<td>%rsi</td>
<td>%rdi</td>
<td>%rbp</td>
<td>%rsp</td>
<td>%r8</td>
<td>%r9</td>
<td>%r10</td>
<td>%r11</td>
<td>%r12</td>
<td>%r13</td>
<td>%r14</td>
<td>%r15</td>
</tr>
</tbody>
</table>
<p><strong>两者的区别:</strong></p>
<blockquote>
<p>1、64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r 。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。</p>
<p>2、32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值</p>
<p>3、64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用</p>
<p>4、64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式。</p>
</blockquote>
<p>对了,寄存器可不是L1、L2 cache啊!Cache位于CPU与主内存间,分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期在主板上,现在也都集成在CPU内部了,常见的容量有256KB或512KB。寄存器很少的,拿64位的来说,也就是16个。64x16,算算,也就是1024,1K啊。</p>
<p>总结:大致来说数据是通过内存-Cache-寄存器,Cache缓存则是为了弥补CPU与内存之间运算速度的差异而设置的的部件。</p>
<h4 id="寻址方式">寻址方式</h4>
<p>接下来说说寻址,啥叫寻址?就是告诉CPU去哪里去取指令、数据,总得有个地址啥的把,对,这个机制就是寻址。</p>
<p>比如<code>movl %rax %rbx</code>,这个涉及到寻址,寻址会寻“寄存器”、“内存”,会直接暴力的直接寻址,也可以是委婉的间接寻址,下面是各种寻址方式:</p>
<table>
<tbody>
<tr>
<td>寻址模式</td>
<td>示例</td>
<td>说明</td>
</tr>
<tr>
<td>全局符号寻址(Global Symbol)</td>
<td>MOVQ x, %rax</td>
<td> </td>
</tr>
<tr>
<td>直接寻址(Immediate)</td>
<td>MOVQ $56, %rax</td>
<td>直接把56这个数搬到rax寄存器</td>
</tr>
<tr>
<td>寄存器寻址(Register)</td>
<td>MOVQ %rbx, %rax</td>
<td>把rbx里面的值,搬到rax中</td>
</tr>
<tr>
<td>间接寻址(Indirect)</td>
<td>MOVQ (%rsp), %rax</td>
<td>rbx里是个地址,按照这个地址寻址后的数,搬到rax中</td>
</tr>
<tr>
<td>相对基址寻址(Base-Relative)</td>
<td>MOVQ -8(%rbp), %rax</td>
<td>rbx里是个地址,按照这个地址寻址后,再回退8个位置,那个位置里的数,搬到rax中</td>
</tr>
<tr>
<td>相对基址偏移缩放寻址(Offset-Scaled-Base-Relative)</td>
<td>MOVQ -16(%rbx,%rcx,8), %rax</td>
<td>妈呀,地址是:指地址-16 +%rbx +%rcx * 8,然后到里面找到值,搬到rax里</td>
</tr>
</tbody>
</table>
<p>另外,你可能会看到这种指令<code>movl,movw</code>,mov后面的l、w是什么鬼?</p>
<table>
<tbody>
<tr>
<td>前缀</td>
<td>全称</td>
<td>Size</td>
</tr>
<tr>
<td>B</td>
<td>BYTE</td>
<td>1 byte (8 bits)</td>
</tr>
<tr>
<td>W</td>
<td>WORD</td>
<td>2 bytes (16 bits)</td>
</tr>
<tr>
<td>L</td>
<td>LONG</td>
<td>4 bytes (32 bits)</td>
</tr>
<tr>
<td>Q</td>
<td>QUADWORD</td>
<td>8 bytes (64 bits)</td>
</tr>
</tbody>
</table>
<p>就是一次你搬运的数据数量。</p>
<h4 id="常用的指令">常用的指令</h4>
<p>好,最后说说指令本身,每个CPU类型,都有自己的指令集,就是告诉CPU干啥,比如是加、减、移动、调用函数啥的。下面是一些非常常用的指令:</p>
<table>
<tbody>
<tr>
<td>操作码</td>
<td>操作数</td>
<td>功能</td>
</tr>
<tr>
<td>movl</td>
<td>A,B</td>
<td>把A赋给B</td>
</tr>
<tr>
<td>and</td>
<td>A,B</td>
<td>A=A+B</td>
</tr>
<tr>
<td>push</td>
<td>A</td>
<td>把A压栈</td>
</tr>
<tr>
<td>pop</td>
<td>A</td>
<td>出栈结果赋值给A</td>
</tr>
<tr>
<td>call</td>
<td>A</td>
<td>调用函数A</td>
</tr>
<tr>
<td>ret</td>
<td>无</td>
<td>将处理结果返回函数的调用源</td>
</tr>
</tbody>
</table>
<p><strong>参考:</strong></p>
<p>这篇汇编入门的小文写的很不错,推荐读读<a href="https://nifengz.com/introduction_x64_assembly/">x86-64汇编入门</a>,另外,愿意自虐的同学,可以下载<a href="https://software.intel.com/en-us/articles/intel-sdm">Intel官方的指令集手册</a>仔细研读。</p>
<h3 id="一些工具和玩法">一些工具和玩法</h3>
<p>这篇文档还会涉及到一些工具,这里列一下,大家可以尽情玩耍一下他们~</p>
<ul>
<li><a href="http://www.shanghai.ws/gnu/gcc_1.htm">gcc</a>:超级编译工具,可以做预编译、编译成汇编代码、静态链接、动态链接,啥都能干,本质上是各种编译过程工具的一个封装器。</li>
<li><a href="https://wizardforcel.gitbooks.io/100-gdb-tips/index.html">gdb</a>:太强了,命令行的调试工具,简直是上天入地的利器。</li>
<li><a href="https://man.linuxde.net/readelf">readelf</a>:过于牛逼,可以把一个可执行文件、目标文件底裤完全拔掉,让你观瞧</li>
<li><a href="https://man.linuxde.net/objdump">objdump</a>:跟readelf功能差不多,不过貌似他依赖一个叫“bfd库”的玩意,我也没研究,另外,他有个readelf不具备的功能,就是反编译。剩下的两者都差不多了。</li>
<li><a href="https://man.linuxde.net/ldd">ldd</a>:这个小工具也很酷,可以让你看一个动态链接库文件依赖于哪些其他的动态链接库。</li>
<li><code>cat /proc/<PID>/maps</code>:这个命令很有趣哈,可以让你看到进程的内存分布。</li>
</ul>
<p>还有各种利器,自己去探索吧。</p>
<h3 id="其他">其他</h3>
<h4 id="地址编码">地址编码</h4>
<p>假如有个整形变量1234,16进制是0x000004d2,占4个字节,比如是起始地址是0x10000,那么终止地址是0x10003,那么在外界看来,是0x10000还是0x10003是他的地址呢?答案是,小地址是,即0x10000是他的地址。</p>
<p>那接着问题来了,这个4个字节里面,怎么放这个数?高地址放高位,还是低地位放高位?答案是,都可以!</p>
<p>大端方式:高位在低地址,如 IBM360/370,MIPS:</p>
<table>
<tbody>
<tr>
<td>0x10000</td>
<td>0x10001</td>
<td>0x10002</td>
<td>0x10003</td>
</tr>
<tr>
<td>d2</td>
<td>04</td>
<td>00</td>
<td>00</td>
</tr>
</tbody>
</table>
<p>小端方式:高位在高地址,如 Intel 80x86</p>
<table>
<tbody>
<tr>
<td>0x10000</td>
<td>0x10000</td>
<td>0x10000</td>
<td>0x10000</td>
</tr>
<tr>
<td>00</td>
<td>00</td>
<td>04</td>
<td>d2</td>
</tr>
</tbody>
</table>
<p>就是这么变态,呵呵。</p>
<h2 id="编译">编译</h2>
<p>接下来,说说编译吧,由于我没学过编译,其实我对词法分析、语法分析也不甚了解,找机会再深入吧,这里只是把大致知识梳理一下。</p>
<p><code>词法分析->语法分析->语义分析->中间代码生成->目标代码生成</code></p>
<ul>
<li>
<p>首先是$\color{red}{词法分析}$,通过FSM(有限状态机)模型,说白了,就是按照语法定义好的样子,挨个扫描源代码,把其中的每个单词和符号,都给他做个归类,比如你是关键字、你是标识符、你是字符串还是数字的值等,然后把大家都分门别类的放到各个表中(符号表、文字表)。如果你不符合语法规则,那么对不起,词法分析过程中,就会给出各类警告,咱们编译过程中看到的很多语法错误,就是它干的。有个开源的lex的程序,可以搞来玩玩,体会一下这个过程。</p>
</li>
<li>
<p>词法分析后,就是$\color{red}{语法分析}$了,由词法分析的符号表,要形成一个抽象语法树,方法是“上下文无关语法(CFG)”。这过程,就是把程序表示成一棵树,叶子节点就是符号和数字,自上而下组合成语句,也就是表达式,层层递归,从而形成整个程序的语法树。同上面的词法分析一样,也有个开源项目,可以帮你做这个树的构建,就是yacc(Yet Another Compiler Compiler)。</p>
</li>
<li>
<p>接下来是$\color{red}{语义分析}$,这个步骤,我理解要比语法分析工作量小一些,主要就是干一些类型匹配、类型转换的工作,然后把这些信息更新到语法树上。</p>
</li>
<li>再往下是$\color{red}{中间语言生成}$,干嘛呢?就是把抽象语法树,转成成一条条<strong>顺序</strong>的中间代码,这种中间代码,往往采用一种叫<strong>三地址码</strong>或者<strong>P-Code</strong>的格式,形如<code>x = y op z</code>,长成这个样子:
<pre><code>t1 = 2 + 6
array[index] = t1
</code></pre>
<p>不过这些代码,是和硬件不相关的,还是“抽象”代码。</p>
</li>
<li>最后终于到了$\color{red}{目标代码生成}$了,就是把中间代码,转换成<strong>目标机器</strong>代码,这就需要和真正的硬件和操作系统打交道了,要按照目标CPU和操作系统,把中间代码翻译成符合目标硬件和操作系统的汇编指令,而且,还要给变量们分配寄存器、规定长度啥的了,最后得到了一堆汇编指令。
对于整形、浮点、字符串,都可以翻译成,把几个bytes的数据初始化到某某寄存器中,但是对于数组啊,其他的大的数据结构,就要涉及到为它们分配空间了,这样,才可以确定数组中某个index的地址啊,不过,这事儿,编译不做,留给链接去做。</li>
</ul>
<p>编译不是这篇帖子的重点,这里就不过多讨论了,那也是个一大坨的东西,有机会再开个帖子讨论编译原理吧!感兴趣的同学,可以读读这篇:《<a href="https://pandolia.net/tinyc/index.html">自己动手写编译器</a>》。</p>
<h2 id="链接">链接</h2>
<p>编译一个c源文件代码,就对对应得到一个目标文件。一个项目中会有一堆的c源代码,编译后会得到一堆的目标文件。这些目标文件是二进制的,就是一堆0、1的集合,到底这一堆0、1是如何排布的呢,接下来,我们得说一说,这些0、1组成的目标文件了。</p>
<h3 id="目标文件">目标文件</h3>
<p>目标文件是没有链接的文件(所谓链接,就是指一个目标文件,可能会依赖其他目标文件,把他们“串”起来的过程,就是链接)。这些目标文件,已经和这台电脑的硬件和操作系统相关了,比如寄存器、数据长度,但是,对应的变量的地址没有确定。目标文件里面有啥呢?有数据、有机器指令代码,还有符号表(符号表就是你源码里面那些函数名、变量名和代码的对应关系,我们后面会细讲)和一些调试信息。</p>
<p>目标代码总得有个结构吧,是的,这结构是依据一个叫<a href="https://en.wikipedia.org/wiki/COFF"><strong>COFF</strong></a>(Common File Format)的规范。Windows和Linux的可执行文件(PE和ELF)就是尊崇这种规范。大家用的都是COFF格式,甚至动态链接库也是。linux下的file命令可以让你窥视一个文件的这些信息,可以试试。</p>
<blockquote>
<p>通过file命令可以参看目标文件、elf可执行文件,甚至shell文件:</p>
</blockquote>
<pre><code> file /lib/x86_64-linux-gnu/libc-2.27.so
/lib/x86_64-linux-gnu/libc-2.27.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, BuildID[sha1]=b417c0ba7cc5cf06d1d1bed6652cedb9253c60d0, for GNU/Linux 3.2.0, stripped
file run.sh
run.sh: Bourne-Again shell script, UTF-8 Unicode text executable
file a.o
a.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
file ab
ab: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
</code></pre>
<p>看到了吧,不同的文件的区别。</p>
<h3 id="目标文件的结构">目标文件的结构</h3>
<p>好,我们来说一说,Linux下的目标ELF文件(或可执行ELF文件)的结构吧:</p>
<p><em>ELF是Executable LinkableFormat的缩写,是Linux的链接、可执行、共享库的格式标准,尊从COFF。</em></p>
<table>
<tbody>
<tr>
<td>ELF头部</td>
</tr>
<tr>
<td>.text</td>
</tr>
<tr>
<td>.data</td>
</tr>
<tr>
<td>.bss</td>
</tr>
<tr>
<td>其他段</td>
</tr>
<tr>
<td>段表</td>
</tr>
<tr>
<td>符号表</td>
</tr>
</tbody>
</table>
<p>ELF文件的结构,包含ELF的头部说明,然后是各种“段”(section),段是一个逻辑单元,会包含各种各样的信息,比如代码(.text)、数据(.data)、符号等。</p>
<h4 id="文件头elf-header">文件头(ELF Header)</h4>
<p>先说说ELF文件开头部分的ELF头,它是一个总的ELF的说明,里面包含是否可执行、目标硬件、操作系统等信息,还包含一个重要的东东,“段表”,就是用来记录段(section)的信息。</p>
<p>看个例子:</p>
<pre><code> ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 816 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 64 (bytes)
Number of section headers: 12
Section header string table index: 11
</code></pre>
<p>说明:</p>
<ul>
<li>其中,”7f 45 4c 46”是<strong>ELF魔法数</strong>,其实就是DEL字符加上“ELF”3个字母,表明他是一个elf目标或者可执行文件
关于elf文件头格式。</li>
</ul>
<p>还会说明诸如,可执行代码起始的入口地址;段表的位置;程序表的位置;….多种信息。细节就不赘述了,感兴可以参考下面的参考文档,有很详细的说。</p>
<p>关于更详细的elf文件头的内容,可以参考:</p>
<ul>
<li><a href="https://paper.seebug.org/papers/Archive/refs/elf/Understanding_ELF.pdf">ELF 格式解析</a></li>
<li><a href="https://blog.csdn.net/feglass/article/details/51469511">ELF文件格式解析</a></li>
<li><a href="http://gnaixx.cc/2016/09/30/20160930_elf-file/">ELF文件格式分析</a></li>
<li><a href="http://www.chuquan.me/2018/05/21/elf-introduce/">ELF文件结构</a></li>
</ul>
<h4 id="段表section-table">段表(section table)</h4>
<p>除了elf文件头,就属段表重要了,各个段的信息都在这里呢,先看个例子:</p>
<p>命令<code>readelf -S ab</code>可以帮助查看ELF文件的段表。</p>
<pre><code> There are 9 section headers, starting at offset 0x1208:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 08048094 000094 000091 00 AX 0 0 1
[ 2] .eh_frame PROGBITS 08048128 000128 000080 00 A 0 0 4
[ 3] .got.plt PROGBITS 0804a000 001000 00000c 04 WA 0 0 4
[ 4] .data PROGBITS 0804a00c 00100c 000008 00 WA 0 0 4
[ 5] .comment PROGBITS 00000000 001014 00002b 01 MS 0 0 1
[ 6] .symtab SYMTAB 00000000 001040 000120 10 7 10 4
[ 7] .strtab STRTAB 00000000 001160 000063 00 0 0 1
[ 8] .shstrtab STRTAB 00000000 0011c3 000043 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
p (processor specific)
</code></pre>
<p>这个可执行文件里面有9个段。</p>
<p>常见的3个段:代码段、数据段、bss段:</p>
<ul>
<li>代码段:.code或者叫.text</li>
<li>数据段:.data,放全局变量和局部静态变量</li>
<li>BSS段:.bss,为未初始化的全局变量和局部静态变量预留位置,不占空间(???bss的意义?)</li>
</ul>
<p>还有其他一堆的段:</p>
<ul>
<li>.strtab : String Table 字符串表,用于存储 ELF 文件中用到的各种字符串。</li>
<li>.symtab : Symbol Table 符号表,从这里可以所以文件中的各个符号。</li>
<li>.shstrtab : 是各个段的名称表,实际上是由各个段的名字组成的一个字符串数组。</li>
<li>.hash : 符号哈希表。</li>
<li>.line : 调试时的行号表,即源代码行号与编译后指令的对应表。</li>
<li>.dynamic : 动态链接信息。</li>
<li>.debug : 调试信息。</li>
<li>.comment : 存放编译器版本信息,比如 “GCC:(GNU)4.2.0”。</li>
<li>.plt 和 .got : 动态链接的跳转表和全局入口表。</li>
<li>.init 和 .fini : 程序初始化和终结代码段。</li>
<li>.rodata1 : Read Only Data,只读数据段,存放字符串常量,全局 const 变量,该段和 .rodata 一样。</li>
</ul>
<p>段表里面,记着每个段的开始的位置和位移(offset)、长度,毕竟这些段,都是紧密的放在二进制文件中,需要段表的描述信息,才能把他们每个段分割开。</p>
<p>有了段,我们其实就对可执行文件,了然于心了,其中.text代码段里面放着我们可以运行的机器指令,而.data数据段里面放着全局变量的初始值,还有.symtab里面放着我们当初源代码中的函数名、变量名的代表的信息。</p>
<p>目标ELF文件和可执行ELF文件虽然规范是一致的,但是还是有很多细微区别:</p>
<h4 id="目标elf文件的重定位表">目标ELF文件的重定位表</h4>
<p>在段表中,你会发现这种段:<strong>.rel.xxx</strong>,包含rel的字样,这样的段是干嘛用的?</p>
<p>这些段就是链接用的!因为你需要把某个目标中出现的函数啊、变量啊,这些东东的地址,要换成其他目标文件中的位置,也就是地址,这样才能正确的引用到这些变量,调用到这些函数啊。至于链接细节,后面讲链接的时候再说。</p>
<p>一般有text、data两种重定位表:</p>
<ul>
<li>.rel.text:代码段重定位表,就是描述代码段中出现的函数、变量的引用地址信息的描述的</li>
<li>.rel.data: 数据段重定位表</li>
</ul>
<h4 id="字符串表">字符串表</h4>
<p><strong>.strtab、.shstrtab</strong></p>
<p>ELF中很多字符串呢,比如函数名字啊,变量名字啊,都需要有个地方放吧,恩,他们都放到一个叫“字符串”表的段中。</p>
<h4 id="符号表">符号表</h4>
<p>注意哈,字符串表只是字符串,符号表跟他不一样,符号表更重要,是表示了各个函数、变量的名字对应的代码或者内存地址啦。这玩意,在链接的时候,非常有用。因为链接,就是要找个各个变量和函数的位置啊,这样才可以更新编译阶段<strong>空出来</strong>的函数、变量的引用地址啊。</p>
<p>每个目标文件里面都有这么一个符号表,用nm和readelf都可以查看:</p>
<p><strong>a.o目标文件的符号表</strong></p>
<p><code>nm a.o</code></p>
<pre><code> U _GLOBAL_OFFSET_TABLE_
U __stack_chk_fail
0000000000000000 T main
U shared
U swap
</code></pre>
<p><code>readelf -s a.o</code> , 来,看看目标文件的符号表长啥样:</p>
<pre><code> Symbol table '.symtab' contains 12 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS a.c
2: 00000000 0 SECTION LOCAL DEFAULT 1
3: 00000000 0 SECTION LOCAL DEFAULT 3
4: 00000000 0 SECTION LOCAL DEFAULT 4
5: 00000000 0 SECTION LOCAL DEFAULT 6
6: 00000000 0 SECTION LOCAL DEFAULT 7
7: 00000000 0 SECTION LOCAL DEFAULT 5
8: 00000000 85 FUNC GLOBAL DEFAULT 1 main
9: 00000000 0 NOTYPE GLOBAL DEFAULT UND shared
10: 00000000 0 NOTYPE GLOBAL DEFAULT UND swap
11: 00000000 0 NOTYPE GLOBAL DEFAULT UND __stack_chk_fail
</code></pre>
<p>看这个目标ELF文件的符号表:可以看到swap函数,Ndx是UND,就是Undefined的缩写,表明不知道它到底在哪个段,因为他需要被重定位的,负责就是写个1啊3啊之类的数字,表明段中的index;同样,对于全局变量shared也是同样的定义。这些内容,都会在后面的静态链接的时候,被链接器修改。</p>
<p>为了对比,我们可以看一下可执行文件ab的符号表的样子,看看静态链接后,这些符号的Ndx的变换:</p>
<p>** 可执行文件ab的符号表 **</p>
<p><code>nm ab</code></p>
<pre><code> 0804a000 d _GLOBAL_OFFSET_TABLE_
0804a014 D __bss_start
080480d7 T __x86.get_pc_thunk.ax
0804a014 D _edata
0804a014 D _end
080480db T main
0804a00c D shared
08048094 T swap
0804a010 D test
</code></pre>
<p><code>readelf -s ab</code></p>
<pre><code> Symbol table '.symtab' contains 18 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 08048094 0 SECTION LOCAL DEFAULT 1
2: 08048128 0 SECTION LOCAL DEFAULT 2
3: 0804a000 0 SECTION LOCAL DEFAULT 3
4: 0804a00c 0 SECTION LOCAL DEFAULT 4
5: 00000000 0 SECTION LOCAL DEFAULT 5
6: 00000000 0 FILE LOCAL DEFAULT ABS b.c
7: 00000000 0 FILE LOCAL DEFAULT ABS a.c
8: 00000000 0 FILE LOCAL DEFAULT ABS
9: 0804a000 0 OBJECT LOCAL DEFAULT 3 _GLOBAL_OFFSET_TABLE_
10: 08048094 67 FUNC GLOBAL DEFAULT 1 swap
11: 080480d7 0 FUNC GLOBAL HIDDEN 1 __x86.get_pc_thunk.ax
12: 0804a010 4 OBJECT GLOBAL DEFAULT 4 test
13: 0804a00c 4 OBJECT GLOBAL DEFAULT 4 shared
14: 0804a014 0 NOTYPE GLOBAL DEFAULT 4 __bss_start
15: 080480db 74 FUNC GLOBAL DEFAULT 1 main
16: 0804a014 0 NOTYPE GLOBAL DEFAULT 4 _edata
17: 0804a014 0 NOTYPE GLOBAL DEFAULT 4 _end
</code></pre>
<p>可以看到,shared的Ndx现在是4了,而swap的Ndx是1了,对应的就是4:数据段、1:代码段:</p>
<pre><code> 上面曾经显示过的段的编号
。。。。
[ 1] .text PROGBITS 08048094 000094 000091 00 AX 0 0 1
[ 2] .eh_frame PROGBITS 08048128 000128 000080 00 A 0 0 4
[ 3] .got.plt PROGBITS 0804a000 001000 00000c 04 WA 0 0 4
[ 4] .data PROGBITS 0804a00c 00100c 000008 00 WA 0 0 4
[ 5] .comment PROGBITS 00000000 001014 00002b 01 MS 0 0 1
。。。
</code></pre>
<p>看到了把,对应的第一列的序号,就标明了代码段是1,数据段是4。</p>
<p>另外,第二列Type也挺有用的:Object就表示是数据的符号;而Func就是函数符号;</p>
<h2 id="静态链接">静态链接</h2>
<p>好了,前面讲目标文件差不多了,我们得到了一大堆零散的目标ELF文件,是时候把他们“合体”了,这需要链接过程了,就是要把这些目标文件“凑”到一起,也就是把各个段合并到一起,</p>
<p><img src="/images/20191203/1575370638734.jpg" alt="" class="myimg30" /></p>
<p>合并开始!读每个目标文件的文件头,获得各个段的信息,然后做符号重定位:</p>
<ul>
<li>
<p>读每个目标文件,收集各个段的信息,然后合并到一起,其实我理解就是压缩到一起,你的代码段挨着我的代码段,我们合并成一个新的,因为每个ELF目标文件都是有文件头的,这些信息都有,所以,是可以很严格合并到一起的</p>
</li>
<li>
<p>符号重定位,说白了,就是把之前调用某个函数的地址,给重新调整一下,或者某个变量的在data段中的地址重新调整一下,为毛?因为合并的时候,各个代码段都合并了,对应代码中的地址都变了啊,所以要调整呀。这步是链接最核心的东东!</p>
</li>
</ul>
<p><code>ld a.o b.o ab</code></p>
<p>我们来细看一下a.o+b.o=> ab的变化,特别是虚拟地址的变化:</p>
<p>先看看链接前的目标ELF文件:a.o,b.o</p>
<pre><code>a.o的段属性(objdump -h a.o)
------------------------------------------------------------------------
Idx Name Size VMA LMA File off Algn
0 .text 00000051 0000000000000000 0000000000000000 00000040 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 0000000000000000 0000000000000000 00000091 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 0000000000000000 0000000000000000 00000091 2**0
ALLOC
b.o的段属性(objdump -h b.o)
------------------------------------------------------------------------
Idx Name Size VMA LMA File off Algn
0 .text 0000004b 0000000000000000 0000000000000000 00000040 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000008 0000000000000000 0000000000000000 0000008c 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 0000000000000000 0000000000000000 00000094 2**0
ALLOC
</code></pre>
<p>接下来是a.o + b.o,链接合体后的可执行ELF文件:ab</p>
<pre><code>ab的段属性(objdump -h ab)
------------------------------------------------------------------------
Idx Name Size VMA LMA File off Algn
0 .text 00000091 08048094 08048094 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .eh_frame 00000080 08048128 08048128 00000128 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .got.plt 0000000c 0804a000 0804a000 00001000 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .data 00000008 0804a00c 0804a00c 0000100c 2**2
CONTENTS, ALLOC, LOAD, DATA
</code></pre>
<p>来,我们来玩一玩,“<strong>找不同</strong>”!</p>
<p>可执行ELF文件ab的VMA填充了。VMA是啥?为何需要调整?看来,是时候说一说可执行ELF文件了。</p>
<h3 id="目标elf文件和可执行elf文件">目标ELF文件和可执行ELF文件</h3>
<p>我们上面一直刻意不区分的目标ELF文件和可执行ELF文件,原因是想先介绍他们共同的ELF规范部分,但是,其实两者是有区别的,这一小节忍不住想说一下,希望不打断看官的思路。</p>
<p>目标ELF文件和可执行ELF文件,其实是两个目的,两个视角:</p>
<p><img src="/images/20200101/1577865460612.jpg" alt="" class="myimg" /></p>
<p>目标文件是为了进一步链接用的,所以,我们可以用“<strong>链接视角</strong>”来看待他,他有各个sections,用段表section head table(SHT)来记录,归档不同的内容,还有重要的重定位表,用于链接;</p>
<p>而可执行文件是为了“<strong>进程视角</strong>”存在的,他根本不需要啥重定位表,但是,他多了一个叫 “<strong>program header table(PHT)</strong>”,用来告诉操作系统,你如何把各个section加到到进程空间的segment中。进程里面专门有个“<strong>segment</strong>”的概念,定义出“<strong>虚拟内存区域</strong>”(VMA,Virtual Memory Area),每个VMA就是一个segement。这些segment,是操作系统为了装载需要,专门又对sections们做了一次合并,定义出不同用途的VMA(如代码VMA、数据VMA、堆VMA、栈VMA)。在目标文件中,你会看到地址都是从0开始的,但是在可执行文件中,是0x8048000开始的;为何是这么个数?这个是因为操作系统进程虚拟地址的开始地址就是这个傻数。关于<strong>虚拟地址空间</strong>,我们在这里不展开了,后面讲<a href="#虚拟地址空间">装载</a>的部分,会再详细讨论了。</p>
<p>虽然两者有区别,但是大体的规范是一样的,都有ELF头、段表(section table)、节(section)等基本的组成部分。</p>
<p>可以参考这篇文章《<a href="https://blog.csdn.net/ailunlee/article/details/98636559">ELF可执行文件的理解</a>》,加深理解。</p>
<h3 id="合体的elf可执行文件">合体的ELF可执行文件</h3>
<p>好吧,我们回来看合体(链接)后的可执行ELF文件ab吧。</p>
<p>ab的段属性(<code>objdump -h ab</code>):</p>
<pre><code> Idx Name Size VMA LMA File off Algn
0 .text 00000091 08048094 08048094 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .eh_frame 00000080 08048128 08048128 00000128 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .got.plt 0000000c 0804a000 0804a000 00001000 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .data 00000008 0804a00c 0804a00c 0000100c 2**2
CONTENTS, ALLOC, LOAD, DATA
</code></pre>
<p>你可以看到,ab的代码段.text,就是从0x8048094开始的,长度是0x91,也就是145个字节长度的代码段。</p>
<p>好!段的开头地址确定了,接下来就好找,段里面的符号对应的地址了(也就是.text段中的函数,和.data段中的变量)</p>
<p>我们回过头来,去看几个符号:swap函数、main函数、test变量、shared变量:</p>
<pre><code> Num: Value Size Type Bind Vis Ndx Name
10: 08048094 67 FUNC GLOBAL DEFAULT 1 swap
12: 0804a010 4 OBJECT GLOBAL DEFAULT 4 test
13: 0804a00c 4 OBJECT GLOBAL DEFAULT 4 shared
15: 080480db 74 FUNC GLOBAL DEFAULT 1 main
</code></pre>
<ul>
<li>main函数:地址是080480db,Ndx=1,Type=FUNC,也就是说,main这个符号,对应的是一个函数,在代码段.text,起始地址是080480db。</li>
<li>test变量:地址是0804a010,Ndx=4,Type=OBJECT,也就是说,test这个符号,对应的是一个变量,在数据段,起始地址是0804a010。</li>
</ul>
<p>那问题来了,这些地址,都是如何确定的呢?要知道目标ELF文件a.o、b.o里面的地址还都是0作为基地址的,到了他俩合体后的可执行文件ab,怎么就填充了这些东西呢?这就要引出<strong>“符号重定位”</strong>了。</p>
<h3 id="符号重定位">符号重定位</h3>
<p>既然链接是把大家的代码段、数据段,都合并到一起,那么就需要修改对应的调用的地址,比如a.o要调用b.o中的函数,那合并到一起成为ab的时候,就需要修改之前a.o中的调用的地址为一个新的ab中的地址,也就是之前b.o中的那个函数swap的地址。</p>
<p>那链接器是怎么做的呢?是通过“<strong>重定位</strong> + <strong>符号解析</strong>”完成的。</p>
<p>最开始啊,编译完的目标文件,其实里面的变量地址、函数地址,基准地址,都是0,也就是啥都是0地址开始的。</p>
<p>可是,一旦你链接,你就不能从0开始了,你要从操作系统规定的应用进程的规定<strong>虚拟起始地址</strong>开始作为基准地址了,这个规定是多少?<code>0x08048094</code>。别问我为何是这么个怪地址,真心不知。</p>
<p>另外,你还合并了好几个目标文件的各个段,他们肚子里的函数呀、变量呀,地址都是基于0的啊,现在合体了、合并了,都要开始逐一调整一通了吧!</p>
<p>之前每个函数、变量的地址,都是相对于0的,也就是,你是知道他们每个人的偏移offset的,这样的话,你只需要告诉他们新的基地址的调整值,他们就可以加上之前的offset,算出新的地址啦。把所有涉及到他们被调用的地方,都改一下,就完成了这个重定位的过程啊。</p>
<p>具体怎么干呢?</p>
<p>是通过重定位表来完成:</p>
<h3 id="重定位表">重定位表</h3>
<p>就是一个表,记着之前每个object目标文件中,哪些函数呀、变量呀,需要被重定位,恩,这个是一个单独的段,命名还有规律呢!就是.rel.xxx,比如.rel.data、.rel.text。</p>
<p>看个栗子:</p>
<pre><code> RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
0000000000000025 R_X86_64_PC32 shared-0x0000000000000004
0000000000000032 R_X86_64_PLT32 swap-0x0000000000000004
</code></pre>
<p>看到了吧,shared变量,和swap函数,都在a.o的重定位表中被记录下来,说明,他们的地址后期会被调整。</p>
<p>而其中的offset中的25,就是shared变量对于数据段的起始位置的位移offset是25个字节;同样,swap函数相对于代码段开始的offset是32个字节。</p>
<p>另外,VALUE这列的“shared、swap”,会对应到符号表里面的饿shared、swap符号。重定位表只记录那些符号需要重定位,而关于这个函数啊、变量啊,更详细的信息,都在符号表中。</p>
<p>接下来,精彩的事情发生了,也就是链接中最关键的一步,也就是要修改链接完成的文件中,调用函数和变量引用的地址了:</p>
<h3 id="指令修改">指令修改</h3>
<p>要修改函数和数据的应用地址,有很多修改方法,修改有很多种方法,这涉及到各个平台的寻址指令差异,比如R_X86_64_PC32。但是本质来讲,就是需要一种计算方法,计算出链接后的代码中对函数的调用地址、变量的应用地址,进行链接后的修改地址。</p>
<p>对于32位的程序来说,一共有10种重定位的类型,想尽情了解,可以阅读<a href="https://bbs.pediy.com/thread-246373.htm">这篇博客</a>,获得更多信息,这里,我觉得举个例子,可能更容易理解:</p>
<p>好!那就让我们来个糖炒栗子,俩文件a.c,b.c,然后链接成ab,我们看看链接过程中,是如何做指令地址修改的:</p>
<p>** 先看看源代码 **</p>
<p><strong>a.c</strong></p>
<pre><code> extern int shared;
int main()
{
int a = 0;
swap(&a, &shared);
}
</code></pre>
<p><strong>b.c</strong></p>
<pre><code> int shared = 1;
int test = 3;
void swap(int* a, int* b) {
*a ^= *b ^= *a ^= *b;
}
</code></pre>
<p><strong>a.c的汇编文件</strong></p>
<pre><code>00000000 <main>:
....
31: 89 c3 mov %eax,%ebx
33: e8 fc ff ff ff call 34 <main+0x34> <------------- 调用swap函数
38: 83 c4 10 add $0x10,%esp
....
</code></pre>
<pre><code>Relocation section '.rel.text' at offset 0x24c contains 4 entries:
Offset Info Type Sym.Value Sym. Name
....
00000034 00000e04 R_386_PLT32 00000000 swap
</code></pre>
<p>可以看到,目标文件a.o中的汇编指令,和重定位表中为<code>R_386_PLT32</code>的重定位方式。</p>
<p>然后,链接后得到ab的代码</p>
<p><strong>链接后的 ab ELF可执行文件</strong></p>
<pre><code>08048094 <swap>:
8048094: 55 push %ebp
8048095: 89 e5 mov %esp,%ebp
....
080480db <main>:
....
804810c: 89 c3 mov %eax,%ebx
804810e: e8 81 ff ff ff call 8048094 <swap>
8048113: 83 c4 10 add $0x10,%esp
....
</code></pre>
<p>我们来分析一下:</p>
<p>1、修正后的swap地址是:<code>0x08048094</code></p>
<p>2、修正后的代码地址是: <code>0x804810e</code></p>
<p>3、原来的调用代码: <code>33: e8 fc ff ff ff call 34 <main+0x34></code>,其实是0xfffffffc,补码表示的-4</p>
<p>4、先看看修改完成的:ab中,<code>804810e: e8 81 ff ff ff call 8048094 <swap></code></p>
<p>看到了吧,e8 fc ff ff ff 修改成了=> e8 81 ff ff ff,补码表示是-127</p>
<p>5、这个值怎么算的?</p>
<p>看看a.o的重定位表中的信息是:<code>00000034 00000e04 R_386_PLT32 00000000 swap</code></p>
<p>所谓R_386_PLT32,是:L+A-P</p>
<ul>
<li>L:重定项中VALUE成员所指符号@plt的内存地址 => 8048094,就是修正后的swap函数地址</li>
<li>A:被重定位处原值,表示”被重定位处”相对于”下一条指令”的偏移 => fcffffff,就是源代码上的地址,固定的,补码表示的,实际值是-4</li>
<li>P:被重定位处的内存地址 => 804810e,就是修正后的main中调用swap的代码地址</li>
</ul>
<p>我们按照这个公式,计算一下修正后的调用地址:</p>
<p><strong>L+A-P:8048094 + (-4) - (804810e) = - 127 = -0x7f</strong>,补码表示就是 ffffff81,由于是小端表示,所以最终替换完的指令为:</p>
<p><code>804810e: e8 81 ff ff ff call 8048094 <swap></code></p>
<p>代码在执行的时候,会用当前的地址的下一条指令的地址,加上这个偏移(-127),正好就是swap修正后的地址0x08048094,不信,可以自己计算一下。</p>
<h3 id="静态链接库">静态链接库</h3>
<p>我们自己写的程序,可以编译成目标代码,然后等着链接,但是,我们可能会用到别的库,他们也是一个个的xxx.o文件么?然后,我们链接的时候,需要挨个都把他们指定链接进来么?</p>
<p>我们可能会用到c语言的核心库、操作系统提供的各种api的库、以及很多第三方的库。比如c的核心库,比较有名的是glibc,原始的glibc源代码很多,可以完成各种功能,如输入输出、日期、文件等等,他们其实就是一个个的xxx.o,如fread.o,time.o,printf.o,恩,就是你想象的样子的。</p>
<p>可是,他们被压缩到来一个大的zip文件里,叫libc.a:<code>./usr/lib/x86_64-linux-gnu/libc.a</code>,就是个大zip包,把各种*.o都压缩进去了,据说libc.a包含了1400多个目标文件呢:</p>
<pre><code> objdump -t ./usr/lib/x86_64-linux-gnu/libc.a|more
In archive ./usr/lib/x86_64-linux-gnu/libc.a:
init-first.o: file format elf64-x86-64
SYMBOL TABLE:
0000000000000000 l d .text 0000000000000000 .text
0000000000000000 l d .data 0000000000000000 .data
0000000000000000 l d .bss 0000000000000000 .bss
.......
</code></pre>
<p>我好奇的统计了一下,其实,不止1400,我的这台ubuntu18.04上,有1690个呢:</p>
<pre><code> objdump -t ./usr/lib/x86_64-linux-gnu/libc.a|grep 'file format'|wc -l
1690
</code></pre>
<p>如果你以–verbose方式运行编译命令,你能看到整个细节过程:</p>
<p><code>gcc -static --verbose -fno-builtin a.c b.c -o ab</code></p>
<pre><code> ....
/usr/lib/gcc/x86_64-linux-gnu/7/cc1 -quiet -v -imultiarch x86_64-linux-gnu b.c -quiet -dumpbase b.c -mtune=generic -march=x86-64 -auxbase b -version -fno-builtin -fstack-protector-strong -Wformat -Wformat-security -o /tmp/cciXoNcB.s
....
as -v --64 -o /tmp/ccMLSHnt.o /tmp/cciXoNcB.s
.....
/usr/lib/gcc/x86_64-linux-gnu/7/collect2 -o ab /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginT.o ...
</code></pre>
<p>可以看到整个过程就是3步:</p>
<ul>
<li>cc1做编译:编译成临时的汇编程序<code>/tmp/cciXoNcB.s</code></li>
<li>as汇编器:生成目标二进制代码</li>
<li>collect2:实际上是一个ld的包装器,完成最后的链接</li>
</ul>
<p>还可以看到,会链接各类的静态库,其实他们都在libc.a这类静态库中。</p>
<h2 id="装载">装载</h2>
<p>好啦,上面,终于把一个程序编译、链接完了,变成了一个可执行文件啦,接下来,就要聊聊如何把他加载到内存了,这个就是“装载”过程了。</p>
<h3 id="虚拟地址空间">虚拟地址空间</h3>
<p>在谈加载到内存里之前,我们得先谈谈<strong>进程虚拟地址空间</strong>的概念。</p>
<p>进程虚拟地址空间,在我看来是一个非常重要的概念,他的意义在于,让每个程序,甚至后面的进程概念,都变得独立起来,每个人玩自己的,不考虑啥物理内存啊,硬盘啊,在文件中的绝对位置啊。他关心的,就是只是自己在一个虚拟空间的地址位置了。这样链接器就好安排每个代码、数据的位置了,将来,装载器,也好安排指令和数据,甚至栈啊、堆啊她们的位置了,恩,与硬件无关了。</p>
<p>这个地址编码也很简单,就是你总线多大,我就能编码多大,比如8位总线,地址也就256个;到了32位,地址就可以是4G大小了;到了64位,妈呀!我已经算不清楚了,太大了。这个大的一个地址空间,都给一个程序和进程用啦,哈哈,好大好大啊,可是,真实内存可能也就16G、32G,还有那么多进程兄弟们,怎么办?怎么装载进来,映射进来,恩,别急,后面我们会讲,不过,你已经自己给出了答案,就是要映射。</p>
<h3 id="如何载入内存">如何载入内存</h3>
<p>前面说了,你一个可执行文件,地址空间硕大无比,那你怎么把自己这头大象,装入只有16G空间大小的“冰箱”—-内存?!</p>
<p>答案是映射。</p>
<p><img src="/images/20191219/1576724995161.jpg" alt="" class="myimg50" /></p>
<p>这样,你就把可执行文件中的一块一块的装进内存里面了,前提是进程需要的块,比如正在或者马上要执行的代码,数据啥的,但是剩下的怎么办?还有如果内存满了怎么办?这些不用担心,操作系统负责调度,会判断你是否用到了,就给他加载;如果满了,就按照LRU算法替换旧的,诸如此类的做法。</p>
<h3 id="进程视角">进程视角</h3>
<p>我们切换到进程的视角,进程也是要有一个虚拟空间的,叫做“进程虚拟空间(<strong>Process Virtual Space</strong>)”注意,我们又提到了虚拟空间,<a href="#目标ELF文件和可执行ELF文件">前面</a>曾经聊起过这个话题,那时候就谈过,链接器需要、进程加载也需要。链接的时候,给每段代码呀、数据呀,编个地址。现在,进程,也需要地址啊,这个地址又是一个虚拟地址,我的学习认知,觉得,她们俩不是一回事,但是差不多了多少,都应该是总线位数的编码出来的空间大小,各个内容存放的位置也不会有太大变换。</p>
<p>但是,毕竟是不一样的呀,所以啊,她们俩之间,也需要映射。有了这个映射,进程发现自己所需要的可执行代码缺了,才能知道到可执行文件中的第几行到第几行加载啊。对!这个映射关系就存在可执行ELF的PHT(程序映射表 - Program Header Table)中,<a href="#目标ELF文件和可执行ELF文件">前面</a>介绍过,就是个映射表。</p>
<p>我们在把这个PHT映射表的细化一下。</p>
<p>你说,你直接把可执行文件原封不动的映射到进程空间,多好啊啊,这样映射多简单啊。</p>
<p>不是这样的。</p>
<p>为了空间布局上的效率,链接器,会把很多段(section)合并,规整成可执行的段(segment)、可读写的段、只读段等,合并了后,空间利用率就高了,否则,很小的很小的一段,未来物理内存页浪费太大(物理内存页分配一般都是整数倍一块给你,比如4k),所以,链接器,趁着链接,就把小块们都合并了,这个合并信息就在VMA信息里,这个VMA信息就在可执行文件头里,通过:</p>
<p><em>这里有2个段:section和segment,中文都叫段,但是有很大区别的,section是目标文件中的单元,而segement是可执行文件中的概念,是一个section的组合或者说集合,是为了将来加载到进程空间里面用的。在我理解,segement和VMA是一个意思。</em></p>
<p><code>readelf -l ab</code> 可以查看程序映射表 - Program Header Table:</p>
<pre><code> Elf file type is EXEC (Executable file)
Entry point 0x80480db
There are 3 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x08048000 0x08048000 0x001a8 0x001a8 R E 0x1000
LOAD 0x001000 0x0804a000 0x0804a000 0x00014 0x00014 RW 0x1000
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
Section to Segment mapping:
Segment Sections...
00 .text .eh_frame
01 .got.plt .data
</code></pre>
<p>你看,“<strong>Segment Sections</strong>”,就告诉你了,如何合并这些sections。</p>
<p>你看上面的例子,他有3个段(Segment),其中2个type是LOAD的Segment,一个是可执行的Segment,一个是只读的Segment;那第一个Segment,可执行那个,到底合并哪些Section呢? 答案是:<code>00 .text .eh_frame</code>。</p>
<p>这个信息,是存在可执行文件的一个叫“程序头表(Program Header Table - PHT)”里面的,就是你用readelf -f看到的内容。告诉你sections如何合并成segments。</p>
<p>好吧,再总结一下!</p>
<ul>
<li>目标文件是有自己的sections的,so,可执行文件也一样</li>
<li>只不过,可执行文件又创造了一个概念,segment,就是把sections做了一个合并</li>
<li>但是,这事没完,真正装载的时候,放到内存里面的时候,还要</li>
</ul>
<h3 id="段segment地址对齐">段(Segment)地址对齐</h3>
<p>内存啊,都是一个一个4k的小页,便于分配,这个就不多说了,涉及到内存管理。</p>
<p>所以呢,操作系统一个给你,就给你一摞4k小页,那问题了了,即使你压缩了sections们成了segment,你也不正好就4k大小啊,又多又少,就算你多一丢丢4k的整数倍,操作系统都得额外再给你分配一页,多浪费啊。</p>
<p>办法来了,就是段地址对齐。</p>
<p><img src="/images/20191219/1576726917641.jpg" alt="" class="myimg" /></p>
<p>看,一个物理页(4k)上,不再是放一个segment,而是还放着别的,然后物理页和进程中的页,是1:2的映射关系,浪费就浪费了,没事,反正也是虚拟的。物理上就被“压缩”到了一起,过去需要5个才能放下的内容,现在只需要3个物理页了。</p>
<h3 id="堆和栈">堆和栈</h3>
<p>可执行文件加载到进程空间里面之后,进程空间还有两个特殊的VMA区域,分别是堆和栈。</p>
<p><img src="/images/20191219/1576734365469.jpg" alt="" class="myimg30" />
<img src="/images/20191220/1576811733747.jpg" alt="" class="myimg30" /></p>
<p>你通过查看linux中的进程内存映射,也可以看到这个信息:<code>cat /proc/555/maps</code></p>
<pre><code class="language-..."> 55bddb42d000-55bddb4f5000 rw-p 00000000 00:00 0 [heap]
...
7ffeb1c1a000-7ffeb1c3b000 rw-p 00000000 00:00 0 [stack]
</code></pre>
<h3 id="参考">参考</h3>
<p><a href="https://manybutfinite.com/post/anatomy-of-a-program-in-memory/">Anatomy of a Program in Memory</a>
<a href="https://tinylab.gitbooks.io/cbook/zh/chapters/02-chapter2.html">Gcc 编译的背后</a></p>
<h2 id="动态链接">动态链接</h2>
<p>静态链接我们大致搞清楚,接下来,我们要说说动态链接。</p>
<p>动态链接的好处很多:</p>
<ul>
<li>代码段可以不用重复静态连接到需要他的可执行文件里面去了,省了磁盘空间。</li>
<li>运行期,还可以共享动态链接库的代码段啊,运行期也省内存了</li>
</ul>
<h3 id="一个栗子">一个栗子</h3>
<p>先举个例子,看看动态链接库怎么写:</p>
<p>lib.c:就是动态链接库代码:</p>
<pre><code>#include <stdio.h>
void foobar(int i) {
printf("Printing from lib.so --> %d\n", i);
sleep(-1);
}
</code></pre>
<p>为了让他其他程序引用他,需要为他编写一个头文件:lib.h</p>
<pre><code> #ifndef LIB_H_
#define LIB_H_
void foobar(int i);
#endif // LIB_H_
</code></pre>
<p>最后是调用代码:program1.c</p>
<pre><code>#include "lib.h"
int main() {
foobar(1);
return 0;
}
</code></pre>
<p>好,让我们来编译这个动态链接库:<code>gcc -fPIC -shared -o lib.so lib.c</code>,然后我可以得到lib.so</p>
<p>然后,编译引用他的程序的program1.c: <code>gcc -o program1 program1.c ./lib.so</code>,这个时候需要引用这个动态链接库。这样就可以顺利的引用这个动态链接库了。</p>
<p><img src="/images/20191219/1576735881582.jpg" alt="" /></p>
<p>这背后,到底发生了什么?</p>
<p>编译program1.c的时候,他引用了函数foobar,可是这个函数在哪里呢?所以,要在编译的时候,也就是链接的时候,告诉这个program1程序,你需要的那个foobar在lib.so里面,也就是在编译参数中,需要加入./lib.so这个文件的路径。据说,链接器要拷贝so的符号表信息到可执行文件中。</p>
<p>可是,在过去静态链接的时候,我们要对program1中对函数foobar的引用进行重定位,也就是修改program1中对函数foobar引用的地址,可是,现在是动态链接了,就不需要做这件事了,因为链接的时候,根本就没有foobar这个函数的代码在代码段中。</p>
<p>那什么时候,再告诉program1,foobar的调用地址到底是多少呢?答案是运行的时候,也就是运行期,加载lib.so的时候,再告诉program1,你该去调用哪个地址上的lib.so中的函数。</p>
<p>我们可以通过查看/proc/$id/maps,可以查看运行期的program1的样子:</p>
<p><code>cat /proc/690/maps</code></p>
<pre><code> 55d35c6f0000-55d35c6f1000 r-xp 00000000 08:01 3539248 /root/link/chapter7/program1
55d35c8f0000-55d35c8f1000 r--p 00000000 08:01 3539248 /root/link/chapter7/program1
55d35c8f1000-55d35c8f2000 rw-p 00001000 08:01 3539248 /root/link/chapter7/program1
55d35dc53000-55d35dc74000 rw-p 00000000 00:00 0 [heap]
7ff68e48e000-7ff68e675000 r-xp 00000000 08:01 3671326 /lib/x86_64-linux-gnu/libc-2.27.so
7ff68e675000-7ff68e875000 ---p 001e7000 08:01 3671326 /lib/x86_64-linux-gnu/libc-2.27.so
7ff68e875000-7ff68e879000 r--p 001e7000 08:01 3671326 /lib/x86_64-linux-gnu/libc-2.27.so
7ff68e879000-7ff68e87b000 rw-p 001eb000 08:01 3671326 /lib/x86_64-linux-gnu/libc-2.27.so
7ff68e87f000-7ff68e880000 r-xp 00000000 08:01 3539246 /root/link/chapter7/lib.so
7ff68ea81000-7ff68eaa8000 r-xp 00000000 08:01 3671308 /lib/x86_64-linux-gnu/ld-2.27.so
7ffc2a646000-7ffc2a667000 rw-p 00000000 00:00 0 [stack]
7ffc2a66c000-7ffc2a66e000 r--p 00000000 00:00 0 [vvar]
7ffc2a66e000-7ffc2a670000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
</code></pre>
<p>可以看到一个叫ld-2.27.so,这个玩意,其实就是<strong>动态连接器</strong>,系统开始的时候,他先接管控制权,加载完lib.so后,再把控制权返还给program1。凡是有动态链接库的程序,都会把他动态链接到程序的进程中的,由他首先加载动态链接库的。</p>
<h3 id="got和plt">GOT和PLT</h3>
<p><img src="/images/20191228/1577542159280.jpg" alt="" class="myimg" /></p>
<p>GOT和PLT很复杂,细节很多,不太好理解,我其实细节也不是很清楚,只是把大致的过程搞明白了,所以,这里只是说一说我的一些理解,如果感兴趣可以去看南大袁春风老师的关于<a href="https://www.bilibili.com/video/av69563153/?p=98">PLT的讲解</a>,我也是借鉴拉她老人家的PPT:</p>
<p>GOT是放在数据段里的,而PLT是在代码段里面的,所以,GOT是可以改的,放的跳转用的函数地址;而PLT里面放的是代码,是告诉怎么调用动态链接库里面的函数的代码(不是函数的代码,是怎么调用的代码)。</p>
<p>假如主程序需要调用动态链接库lib.so里的1个函数:ext();</p>
<p>那么在GOT表里和PLT表里,都有1个条目,GOT表里是未来这个函数加载后的地址;而PLT里放的是如何调用这个函数的代码,这些代码是在链接期,链接器生成的。</p>
<p>GOT里面还有3个特殊的条目,PLT里面还有1个特殊的条目。</p>
<p>GOT里的3个特殊条目:</p>
<ul>
<li>GOT[0]: .dynamic section的首地址,里面放着动态链接库的符号表啥的信息。</li>
<li>GOT[1]: 动态链接器的标识信息,link_map的数据结构,这个不是很明白是什么意思,我理解就是链接库的so文件的信息,用于加载?</li>
<li>GOT[2]: 这个是调用动态库延迟绑定的代码的入口地址,延迟绑定的代码是一个特殊程序的入口,实际是一个叫“_dl_runtime_resolve”的函数的地址。</li>
</ul>
<p>PLT里的特殊条目:</p>
<ul>
<li>PLT[0]: 其实就是去调动“_dl_runtime_resolve”函数的代码,是链接器自动生成的。</li>
</ul>
<p>好,我们说一下整个过程开始了:</p>
<p>因为是延迟绑定,所以,动态重定位这个过程,就需要在你第一次调用函数的时候触发。
啥叫动态重定位啊?就是要告诉进程加载程序,修改新载入的动态链接库被调用处的地址,谁知道你把so文件加载到进程空间啥犄角旮旯了啊?你得把加载后的地址告诉我,我才能调用啊,这个过程就是动态重定位。</p>
<p>好,看我们.text的主程序开始调用ext函数了,ext函数的调用指令:</p>
<p><code>804845b: e8 ec fe ff ff call 804834c<ext></code></p>
<p>咦? 804834c是谁?噢!原来是PLT[1]的地址,就是ext函数对应的PLT表里的代理函数,记得不?每个函数都会在PLT、GOT里面的对应一个条目。</p>
<p>好,现在就跳转到这个函数(PLT[1])去啦。</p>
<p>PLT[1]<ext>:</ext></p>
<pre><code>804834c: ff 25 90 95 04 08 jmp *0x8049590
8048352: 68 00 00 00 00 pushl $0x0
8048357: e9 e0 ff ff ff jmp 804833c
</code></pre>
<p>这个函数干啥了?首先是跳到0x8049590里面写的那个地址去了(jmp *xxx,不是跳到xxx,而是跳到xxx里面写的地址上去)。</p>
<p>这里有2个细节:</p>
<p>1、0x8049590这个地址就是GOT[3],GOT[3]就是ext函数对应的GOT条目啊。</p>
<p>2、0x8049590里面写的那个地址其实就是PLT[1](ext对应的plt条目)的下一条</p>
<p>我靠,你看到这,肯定乐了。PLT[1]代码是不是有病啊?绕这么个圈子(用GOT[3]里的地址跳)jmp,其实就是跳到了自己的下一条。是,这次是可笑,但未来这个值会改的,改成真正的动态库的函数地址,就不可笑了,就直接去执行函数了,赞不?</p>
<p>接着来,</p>
<p>跳回来之后(PLT[1]),接下来是压栈了一个0,为何是0?0 就表示是第一个函数,也就是ext的索引。</p>
<p>然后继续跳0x804833c,这个是谁?这个是PLT[0],PLT[0]是谁?PLT[0]是去调用“_dl_runtime_resolve”函数呀。我靠,看来是要调用这个函数干点啥坏事了!</p>
<p>对!就是要调用他了,不过之前还要干一件是,就是<code>push 0x8049588</code>,0x8049588是谁?0x8049588是GOT[2]。GOT[2]里面放着so的信息啊(我理解的,不一定完全正确)</p>
<p>好了,至此,我们看到,终于要去召唤神龙,调用“_dl_runtime_resolve”函数,去加载整个so了,那参数呢?2个:一个是你压栈的那个0,就是ext函数的索引,后续通过这个索引,可以找到GOT表的位置,把真正的函数的地址回填回去;第二个参数就是你压栈的GOT[1],就是动态链接器的标识信息,我理解,就是告诉加载器,so名字叫啥,他好去加载啊。</p>
<p>加载完成,立刻回调你安放到位置的so里面,索引为0的ext函数的地址,到GOT[3]中,也就是索引0。</p>
<p>下一次你再调用这个函数的时候,还是先调用PLT[1](ext的代理代码),但是里面的<code>jmp \*0x8049590 </code>(jmp *GOT[3]),就可以直接跳转到真正的ext里面去啦。</p>
<p>我的天哪!终于捋完了,必须总结一下。</p>
<p>动态链接库,你动态把so加载到虚拟地址空间,地址是不定的,所以跟静态链接的思路一样,你需要做重定位,也即是要修改调用的代码地址。可是,因为是动态链接,都已经是运行期了,就不能修改内存代码段(.text)啦,因为它是只读的了。那怎么办?有办法,加载完之后,把加载的函数地址写到一个叫GOT表里就不得了。对,这个就是加载时刻,修改GOT表的方法,我这里没讲,但是是可行的。可是,现在想整一件更牛逼的事情。就是,我在主程序启动的,不加载so,我等你第一次调用某个动态链接库的函数的时候,再加载整个so,在更新GOT表。我靠!服了服了,这事要懒加载到最后一刻啊。没事,也有办法,就是通过上面的一通神操作,思路就是,你主程序调用某个动态链接库函数的时候,其实是先调用了一个代理代码(PLT[x]),他呢,其实是会记录一下,自己的序号(确定是调哪个函数),还有动态联机库的文件名,这2个参数,然后转去调用一个叫“_dl_runtime_resolve”的函数,这个函数负责把so加载到进程虚拟空间去,并且回填一下加载后的函数地址,到GOT表。以后在调用,就可以直接去调用那个函数了。</p>
<p>恩,就这个样子,希望过段时间,我自己还能看懂,如果看不懂,就再去看一遍<a href="https://www.bilibili.com/video/av69563153/?p=98">南大袁春风老师的讲解</a>!</p>
<h3 id="参考-1">参考</h3>
<p>这个是一篇<a href="https://luomuxiaoxiao.com/?p=578">很赞的文章</a>讲的PLT的内容,引用过来:</p>
<p><img src="/images/20191219/got_plt.gif" alt="" class="myimg" /></p>
<blockquote>
<p>对动态链接库中的函数动态解析过程如下:</p>
<ol>
<li>从调用该函数的指令跳转到该函数对应的PLT处;</li>
<li>该函数对应的PLT第一条指令执行它对应的.GOT.PLT里的指令。第一次调用时,该函数的.GOT.PLT里保存的是它对应的PLT里第二条指令的地址;</li>
<li>继续执行PLT第二条、第三条指令,其中第三条指令作用是跳转到公共的PLT(.PLT[0]);</li>
<li>公共的PLT(.PLT[0])执行.GOT.PLT[2]指向的代码,也就是执行动态链接器的代码;</li>
<li>动态链接器里的_dl_runtime_resolve_avx函数修改被调函数对应的.GOT.PLT里保存的地址,使之指向链接后的动态链接库里该函数的实际地址;</li>
<li>再次调用该函数对应的PLT第一条指令,跳转到它对应的.GOT.PLT里的指令(此时已经是该函数在动态链接库中的真正地址),从而实现该函数的调用。</li>
</ol>
</blockquote>
<ul>
<li><a href="http://www.landq.cn/2019/08/11/Linux%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93%E4%B9%8BGOT-PLT/">Linux动态链接库之GOT,PLT</a></li>
<li><a href="https://www.cnblogs.com/pannengzhi/p/2018-04-09-about-got-plt.html">深入了解GOT,PLT和动态链接
</a></li>
<li><a href="https://luomuxiaoxiao.com/?p=578">可执行文件的PLT和GOT</a></li>
<li><a href="https://www.freebuf.com/articles/system/135685.html">Linux中的GOT和PLT到底是个啥?</a></li>
<li><a href="https://blog.csdn.net/linyt/article/details/51635768">聊聊Linux动态链接中的PLT和GOT</a></li>
<li><a href="http://www.chuquan.me/2018/06/03/linking-static-linking-dynamic-linking/">链接、静态链接、动态链接</a></li>
</ul>
<h3 id="linux的共享库组织">Linux的共享库组织</h3>
<p>Linux为了管理动态链接库的各种版本管理,定义了一个so的版本共享方案:</p>
<p><code>libname.so.x.y.z</code></p>
<ul>
<li>x是主版本号:重大升级才会变,不向前兼容,之前的引用的程序都要重新编译</li>
<li>y是次版本号:原有的东东不变,增加了一些东西而已,向前兼容</li>
<li>z是发布版本号:任何接口都没变,只是修复了bug,改进了性能而已</li>
</ul>
<p><strong>SO-NAME</strong></p>
<p>Linux有个命名机制,用来管理so们之间的关系,这个机制叫SO-NAME。</p>
<p>任何一个so,都对应一个SO-NAME,其实就是<code>libname.so.x</code>,对,去掉了y和z。</p>
<p>一般系统的so,不管他的次版本号和发布版本号是多少,都会给他建立一个SO-NAME的软连接,例如 libfoo.so.2.6.1,系统就会给他建立一个叫libfoo.so.2的软链。</p>
<p>为什么要这么干呢?</p>
<p>这个软连接会指向这个so的最新版本,比如我有2个libfoo,一个是libfoo.so.2.6.1,一个是libfoo.so.2.5.5,那么软连接默认就会指向版本最新的libfoo.so.2.6.1。</p>
<p>在编译的时候,我们往往需要引入依赖的链接库,这个时候,依赖的so,使用软链接的SO-NAME,而不使用详细的细版本号。</p>
<p>在编译的ELF可执行文件中,会存在.dynamic段,用来保存自己所依赖的so的SO-NAME。</p>
<p>在编译的时候,有个更简洁指定lib的方式,就是<code>gcc -lxxx</code>,xxx就是libname中的name,比如<code>gcc -lfoo</code>就是告诉,链接的时候,去链接一个叫libfoo.so的最新的库,当然,这个是动态链接。如果加上-static:<code>gcc -static -lfoo</code>就会去默认静态链接libfoo.a的静态链接库,规则是一样的,顺道提一句。</p>
<p><strong>ldconfig</strong></p>
<p>Linux提供了一个工具“ldconfig”,运行它,linux就会遍历所有的共享库目录,然后更新所有的so的软链,指向她们的最新版,所以一般安装了新的so,都会运行一遍ldconfig。</p>
<h3 id="系统的共享库路径">系统的共享库路径</h3>
<p>在Linux下,是尊崇一个叫FHS(File Hierarchy Standard)的一个标准,来规定系统文件是如何存放的。</p>
<ul>
<li>/lib:存放最关键的基础共享库,比如动态链接器、C语言运行库、数学库,她们都是/bin,/sbin里面的系统程序用到的库</li>
<li>/usr/lib: 一般都是一些开发用到的 devel库啥的</li>
<li>/usr/local/lib:一般都是一些第三方库,GNU标准推荐第三方的库安装到这个目录下</li>
</ul>
<p>另外说一句/usr目录不是user的意思,而是“unix system resources”的缩写,哈哈。</p>
<p><a href="https://www.cnblogs.com/sddai/p/10615387.html">详细了解/usr</a>:</p>
<blockquote>
<p>/usr 是系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。</p>
</blockquote>
<h1 id="后记">后记</h1>
<p>研究这个话题,前前后后经历了快一个月,文章就是流水账,把自己的过程中的体会记录下来,并且还写了一个PPT,在单位给同事们做了一次分享。虽然也只是浮光掠影,但是终究是了结了多年的心愿,对可执行文件的格式,加载这些基础知识做了一次梳理,还是收获满满的。你说,这些知识,对实际的工作有什么帮助?可能会有帮助,但是也非常有限。但是,了结了这些内容,极大的满足了自己的好奇心,<strong>“行无用之事,做时间的朋友”</strong>,做一些有意思的事情,过程本身就充满了乐趣。</p>
<p>文章可能会有纰漏和错误,没关系,能看到这里的同学,也请给指出来,留言给我,或者邮件给我,也可以一起讨论学习,共同进步!</p>
<h1 id="参考-2">参考</h1>
<ul>
<li><a href="https://www.bilibili.com/video/av69563153/?p=1">南京大学-袁春风老师-计算机系统基础</a></li>
<li><a href="https://www.yuanrenxue.com/geektime/computer-organization-course.html">深入浅出计算机组成原理-极客时间</a></li>
<li><a href="https://book.douban.com/subject/26365491/">程序是怎样跑起来的</a></li>
<li><a href="https://book.douban.com/subject/3652388/">程序员的自我修养</a></li>
<li><a href="https://book.douban.com/subject/1230413/">深入理解计算机系统</a></li>
<li><a href="https://man.linuxde.net/readelf">readlf、nm、ld、objdump、ldconfig、gcc命令</a></li>
<li>三本小书:</li>
</ul>
<p><img src="/images/20191203/1575355245154.jpg" alt="" class="myimg myimg20" />
<img src="/images/20191203/1575355308075.jpg" alt="" class="myimg myimg20" />
<img src="/images/20191203/1575355334411.jpg" alt="" class="myimg myimg20" /></p>
变分推断
2019-10-10T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/10/10/vi
<h1 id="前言">前言</h1>
<h1 id="变分法">变分法</h1>
<p>泛函极值:</p>
<p>高数中,我们求极值,可以用$f’(x)=0$这个方法。
类比,在泛函中,如果一个函数满足<strong>欧拉拉格朗日方程</strong>,这个函数可以成为最大值的函数。</p>
<h1 id="前导线性代数知识">前导线性代数知识</h1>
<p>只写泛函用到的一些前导线代基础概念:</p>
<p><a href="https://www.youtube.com/watch?v=Zrk3C26GC5E">二次型相关概念</a></p>
<ul>
<li>二次型:$x_1^2+3x_2^2-5x_3^2+4x_1x_2-8x_2x_3$,可写成$X^TAX$</li>
<li>标准型:$x_1^2+3x_2^2-5x_3^2$,只有2次项</li>
<li>规范性:$x_1^2+x_2^2-x_3^2$,标准型系数为$\pm1,0$</li>
</ul>
<p><a href="https://www.youtube.com/watch?v=gKbEW4LbqE4">特征向量相关概念</a></p>
<p>两个有意思的性质:</p>
<ul>
<li>$\sum\limits_{i=1}^n a_{ij} = \sum\limits_{i=1}^n \lambda_i$ :矩阵A主对角线的元素相加,等于,所有特征值相加</li>
<li>$|A|=\prod\limits_{i=1}\lambda_i$:矩阵A行业式值,等于,所有行列式相乘</li>
</ul>
<p><a href="https://www.bilibili.com/video/av68468820/">相似对角化概念</a></p>
<p>相似:如果$PAP^{-1}=B$,则称$A~B$,即<strong>A相似于B</strong>。</p>
<p>相似对角化:如果$PAP^{-1}=\Lambda$,其中$\Lambda$是一个对角矩阵(就是只有对角线为非0,其余都是0),就称A可<strong>相似对角化</strong>。</p>
<p>[]</p>
<p>[参考]</p>
<ul>
<li>远航君的线性代数讲座</li>
</ul>
<h1 id="泛函分析孙炯"><a href="https://www.bilibili.com/video/av20207040">泛函分析(孙炯)</a></h1>
<h2 id="第一章">第一章</h2>
<h3 id="第一节">第一节</h3>
<p>运算=算子,映射:空间⇒空间,泛函是从“变分、微分方程、积分方程、函数论、量子物理”综合基础上发展出来的。使用几何、代数的方法,研究无限维的函数、算子、极限。所谓几何,就是研究“垂直、距离、长度”,专业词汇“距离、范数、内积”</p>
<p>泛函,就是类比解析集合,那些点,就变成了函数,sin,cos。。。,但是给他们加上距离、范数、内积这些。这个时候函数变成了无穷维,泛函就变成了无穷维到无穷维的变换。既然是无穷维,收敛性就变得很重要了。“收敛性”是泛函中的一个最重要的问题。泛函研究方法,是尝试把有限维空间的方法搬过来。</p>
<p><strong>向量分解</strong></p>
<p>正交坐标系:$\vec{i}=(1,0,0),\vec{j}=(0,1,0),\vec{k}=(0,0,1)$</p>
<p>内积:$\vec{a} \cdot \vec{b} = (\vec{a},\vec{b}) = a_1 b_1 + a_2 b_2 + a_3 b_3 = |\vec{a}| |\vec{b}| \cdot cos(\theta)$
其中:$a_1 =( \vec{a_1},\vec{i}), a_2=(\vec{a_2},\vec{j}), a_3=(\vec{a_3},\vec{k})$</p>
<p>“投影”:可以表示为和单位向量的内积:$a(a1,a2,a3), 投影a1=(a,i), 投影a2=(a,j), 投影a3=(a,k)$,$i,j,k$是单位向量,$(a,k)$是内积。</p>
<p>模:$|a|=\sqrt{a_1^2 + a_2^2 + a_3^2}$</p>
<p>由上面的公式们,还可以进一步推导出:</p>
<p>$\vec{a} = a_1 \vec{i} + a_2 \vec{j} + a_3 \vec{k} = (\vec{a_1},\vec{i})\vec{i} + (\vec{a_2},\vec{j})\vec{j} + (\vec{a_3},\vec{k})\vec{k} $</p>
<p>$|a|^2=\sum\limits_{i=1}^n |(\vec{a},\vec{e})|$</p>
<hr />
《AI与第一性原理》
2019-10-06T00:00:00+08:00
https://www.piginzoo.com/leaning/2019/10/06/ai-first-principle
<h1 id="序">序</h1>
<p>这篇文章是源于在单位做的一次内部分享,向大家介绍第一性原理以及通过这个视角去看待人工智能。后将自己的讲演的部分思路整理成文,做一个总结,便有了此文。</p>
<p>这个<a href="/assets/ai-1st-principle.pdf">PPT</a>是讲座的文稿,感兴趣的朋友可以下载。</p>
<h1 id="ai和第一性原理">AI和第一性原理</h1>
<p>AI,也就是人工智能,这几年非常火,但是究竟AI的本质是什么呢?探究AI的本质的过程,实际上可以用第一性原理的方式来理解,可能跟容易。我们这里就一起来探讨AI的本质,第一性原理,如何使用第一性原理来理解AI本质。</p>
<h2 id="第一性原理">第一性原理</h2>
<p>首先介绍一下,第一性原理,这个概念来自于古代希腊先哲,亚里士多德,“在任何一个系统中,存在第一性原理,是一个最基本的命题或者假设,不能被省略,也不能被违反。”,是的,这就是亚里士多德提出的第一性原理。这个概念听上去有些晦涩,但是解释起来,非常容易理解。就是任何事物,都有其内在的存在的“第一性原理”,在我理解,就是其最最本质的东西,这个东西其实就在那里,是基于最基本的假设,你必须要认可它,它不需要什么前提和证明,有了它,你就可以去推演其他别的结论出来,这些结论最终形成了整个系统。</p>
<p>概念晦涩,举几个例子吧。比如,我们初中就开始学习的,牛顿整个的机械论,他的第一性原理,就是万有引力,他所谓的“基本命题”就是万物之间有相互的吸引力,并在不受外力的时候,保持物体的运动惯性。这两个假设,构建出整个牛顿力学的整体大厦,指导着建筑、工业甚至天体物理的方方面面。而,重新把这个概念推介给世人的埃隆马斯克,也是一位第一性原理的实践者。马斯克从小就一个梦想,去殖民火星,所以他开始致力于民用火箭的开发。他最开始去寻找俄罗斯火箭公司,对方给他的报价是6500万美元以上,这个价格对他来首,太过昂贵了。马斯克于是重新思考这个问题,他于是潜心研究火箭原理达2年时间,了解火箭制造的方方面面,始终不断地思考火箭制造中,最核心的成本在什么地方,他不断的思考和实践,最终使得他的SpaceX公司将发射火箭的成本削减至原本的十分之一。随后,他又在他的另外一家电动车制造公司Tesla中,思考如何降低电动汽车电池高成本问题,当时储能电池的价格是每千瓦时600美元,这个价格对整车来说,太过昂贵。于是,马斯克他们仔细分析电池的组成,从第一原理角度进行思考:电池组到底是由什么材质组成?这些电池材质在原料市场价格是多少?他们考察后发现,电池是由碳、镍、铝和一些聚合物组成,如果从伦敦金属交易所购买这些原材料,只要 80 美元/千瓦时。两者相差8倍之多。这个价格差距中,如果他可以找到降低电池技术的方法,那么剩下的只有原材料的成本了。最终,他们做到了,大幅的降低了电池的成本,从而使得整个电动车工业蓬勃发展起来。</p>
<p>第一性原理是和演绎法一起相生相伴的,演绎法其实就是三段论的推导,三段论指的是“大前提、小前提、结论”,大前提,就是指一般性的公理,而小前提往往是一些特例性的事实,有了大前提,小前提就可以依据这个演绎法,可以推导出结论。举个例子:“人都会死的,亚里士多德是人,所以亚里士多德也会死的。”,就是三段论的一个很浅显易懂的例子。你是否觉得,这个方法没什么呀,很容易理解啊。但是,这里面蕴含着一些东西,不知道你是否注意到了?那就是,大前提至关重要,如果大前提错了,或者不是很稳固的一个假设,那么结论就有可能不正确。那么,如何保证大前提正确,这就要求,大前提也是依据演绎法推导出来的。也就是大前提是,另外一个演绎推理的结论,大前提还有一个它自己的大前提。这就形成了一个递归,一直可以不断地向前追溯,直至达到第一性原理。不知道大家感觉到没有,这像什么?这非常像小时候的证明题,给你一些假设条件,你依据一些推理,得到最终的结论,这样得到的结论非常可信。是的,第一性原理和演绎法最经典的一个例子就是欧几里得的《几何原本》,他从最开始的5个公理、5个公设开始,推导出来476个几何结论,牢固坚实。</p>
<p>所以,第一性原理,辅以演绎法,是我们思考这个世界的一个非常重要的方法。我们应该使用这种方法,去建立我们看待这个世界的视角。任何事物,我们都应该不断地去思索其最根本的原因和本质是什么?找到了这个本源、本质、它的第一性原理,其他的现象、结论和问题,都可以迎刃而解。当然这不是一件容易的事情,这个过程中,我们需要不断的学习、思考,去伪存真,不断地思索,是否已经探究到事物最最本真的那些东西,不断地质疑,求证,反复的推演,直至我们去确信我们寻到了它。</p>
<h2 id="人工智能">人工智能</h2>
<p>回到AI上,从2016年,AlphaGo战胜李世石,就开始火起来,以至于创业圈、产业界甚至国家层面,都在热炒人工智能,到处都在宣扬人工智能将超越人类,人类将面临灭顶之灾的言论。可是,真的是这样么?好,让我们思考一下,这个最热的概念背后的本真是什么。</p>
<p>首先是为什么AI会火起来,你看到的是AlphaGo的胜利,而我看到的是科技作为生产力的匮乏。我们经历过IT革命、互联网大潮,已经持续了30多年,可是现在这两大技术支撑点,已经开始红利消失,人们急需一种新的科技形态,来接过生产力的接力棒。所以,人们左看右看,区块链过于炒作,物联网也迟迟无法落地,5G只局限在通讯行业,唯独AI人工智能,似乎可以帮助我们来完成科技作为生产力的这一棒。是的,就这样,AI被推上神坛,尽管它还不成熟,它还经历过3次低谷,人们都不care,对科技生产力的渴望,让人们急不可耐的把它推上了舞台。可是,聪明的你可能会问,为什么需要新的生产力,恩,这正是第一性原理的思考方式,你在试图探究事物往深处的本源了,很为你点赞。这个问题其实很难回答,在我的理解,是因为如果没有新的生产力,就无法更多更高效地创造商品和价值,而不断膨胀的消费欲望和信贷扩张,就会戛然而止,世界的经济就会陷入停滞和衰退,从而引发各种经济、社会、政治问题,甚至战争。金融界的乔布斯Ray Dalio,曾经制作过一个30分钟讲述<a href="https://open.163.com/newview/movie/free?pid=MBPO9ED98">经济运行规律</a>的视频,简单易懂的阐述了这个过程,感兴趣的你可以去谷歌一下。</p>
<p>那么,抛开网上这些吹捧之词,我们想了解一下AI产业到底如何呢?到底发展如何呢?了解这些,可能你就不会人云亦云的去跟着“他们”去狂欢,亦或为人类的未来的“灭绝”恐惧了。然后,这个问题就变成了,我有什么办法可以最快速、高效和全面的了解目前的AI行业了,而不是只听媒体上的叫嚣。我想到了一些办法:去36氪上去查AI相关企业的融资情况,因为我坚信,投资人是在理念、信息方面远超一般人的,而且,真金白银的投出去的钱,他们是会心疼的,他们一定会更谨慎和用脚投票的。所以,观察他们对这些AI企业的投资情况,趋势以及额度,你就可以对这个行业的情况有一个了解;我还找到了我认为目前在AI方向上,做的最好的百度(当然你可以认为是阿里,没有关系,这个很主观),你去这些你认为的AI巨头网站上,去观察他们的行业案例、解决方案、技术白皮书,你就可以迅速的知道一线企业究竟在什么地方做到了AI落地;我还回去找一些AI企业的行研报告,通过专业咨询师的眼睛,快速的领略他们眼中的这个行业的情况,要知道,一份行研的价值是浓缩了专业人士花费了时间和金钱之后的量化指标和主观感受的结晶。还有没有更好的方法,更客观的方法,更低成本高效率的方法,帮助你了解这个行业的真实状况,这才是你应该思考的东西,这样得到的结论,你自己才可以更信服。</p>
<p>再回到AI这个专业领域上,什么又是这个AI这个学科最本真的东西呢。我最开始学习的时候,不知道这个学科的本真的东西,所以学习的效率不是很高,花了很长时间才摸到了门。在我眼中,了解这个学科首先是了解整个学科的框架,然后是理解每一个大的分类后面最本质的内容。人工智能这个学科确实太大了,我们以目前最火的深度神经网络来说吧,它其实只是机器学习的一个分支,只不过,神经网络真的效果出奇的好,才可以从众多机器学习方法中脱颖而出。但是,如果我们往深里探究,整个机器学习,本质上就是在寻找数据中的统计规律,这个规律需要被表示,要么是通过线性方法,要么是通过非线性的方法,更一般的意义上,可以通过概率分布的方法。而概率分布的密度函数,本身就是一个函数,既然是函数,就可以被数学上表示和拟合,而拟合方法,就可以通过深度神经网络的无数个神经元组成的组合,来表达出来。如果再往深里探究,本质是数学中的最优化理论,以及泛函中的万能逼近定理,包括寻找参数过程中的反向梯度下降等等,诸多理论,都是信息论、概率统计、泛函、最优化以及随机过程诸多数学分支中的严谨的数学定理在做支撑。熟悉么?仿佛又回到了欧几里得的那个5个公理和5个公设的支撑,是的,整个人工智能,都是建立在近现代数学基础之上的,这正是第一性原理的完美诠释么?</p>
<h1 id="尾">尾</h1>
<p>所以,不要被媒体和专家们所迷惑,自己深入其中,去探究所谓的人工智能到底是什么概念,探求他的本质,探究到本真,一切迷雾都会烟消云散。这就是第一性原理的思维方法。无论是了解AI的过程,还是你工作生活中遇到的问题,都不要被表象和喧闹所迷惑,沉下心来,去认真探究事物本真的东西,拨开一层层别人给涂抹的外衣,看到他最内在的本源,这样,你就会少了很多迷茫,对工作、对生活,甚至对人生,多了一份自信和从容。</p>
从泰勒展开到欧拉公式,再到傅里叶变换
2019-10-06T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/10/06/Taylor-Euler-Fourier
<h2 id="序">序</h2>
<p>泰勒展开非常重要,去听<a href="https://www.bilibili.com/video/av27158514?t=815">妈咪说的讲解</a>,很是有感觉,很想把这些数学概念都柔和到一起。</p>
<h2 id="泰勒展开">泰勒展开</h2>
<h3 id="由来">由来</h3>
<p>为何泰勒要攒出这么一个展开来呢,根本原因是,他想把任何函数,都可以用一堆的多项式来拟合,为何是多项式啊?因为多项式简单啊。</p>
<h3 id="漂亮的解释">漂亮的解释</h3>
<p><a href="https://www.bilibili.com/video/av27158514?t=815">妈咪说的解释</a>,真叫是一个赞👍!</p>
<p>他用了一个类比,一个小人很变态的东跑西跳,方向还非常飘忽走位,现在呢,另外一个小人,怎么能完全模拟出这个小人的走位呢?</p>
<p>所以,我们需要有初始的速度,然后还要有一样的加速度,还要有加速度的加速度,还要有加速度的加速度的加速度…,都做到了,这小人跟被模仿的小人的走位一样啦。这就是一个朴素的理解。</p>
<p>而这加速度,加加速度,加加加速度,…,实际上就是1阶导、2阶导、3阶导…,整个模拟过程,就是一个泰勒展开。</p>
<h3 id="严谨的推导">严谨的推导</h3>
<p>我要用一个多项式$g(x)$来拟合一个函数$f(x)$,我假设,这个多项式$g(x)$长这个样子:</p>
<p>$ f(x) = g(x) = a_o + a_1x + a_2x^2 + a_3x^3 + … + a_nx^n $</p>
<p>好,那我先算算$x=0$的时候吧,</p>
<p>$ f(0) = g(0) = a_o $</p>
<p>然后,我对$g(x),f(x)$都求导后,再求$x=0$的值:</p>
<p>$ f’(0) = g’(0) = a_1 $</p>
<p>再求2阶导,3阶导,…,N阶导</p>
<p>$ f’‘(0) = g’‘(0) = 2a_2 $</p>
<p>$ f’’‘(0) = g’’‘(0) = 3!a_3 $</p>
<p>………</p>
<p>$ f^n(0) = g^n(0) = n!a_n $</p>
<p>好啦,这样就可以求出来$a_o,a_1,…,a_n$了</p>
<p>$a_o=f(0)$</p>
<p>$a_1=\frac{f’(0)}{1!}$</p>
<p>$a_2=\frac{f^2(0)}{2!}$</p>
<p>$a_2=\frac{f^3(0)}{3!}$</p>
<p>……..</p>
<p>$a_n=f^n(0)/n!$</p>
<p>把这个式子带回到多项式表示中,我们得到了著名的“<strong>麦克劳林展开式</strong>”:</p>
<p>$ f(x) = g(x) = f(0) + \frac{f’(0)}{1!}x + \frac{f^2(0)}{2!}x^2 + \frac{f^3(0)}{3!}x^3 + … + \frac{f^n(0)}{n!}x^n $</p>
<p>看!推导起来,不是很难,是不是。</p>
<p>然后,把麦克劳林展开式从0点的展开,扩展到任意的一个点$a$处,相当于把函数$f(x)$沿着$x$轴方向移动了a个单位,这样就得到了<strong>泰勒展开式</strong>:</p>
<p>$ f(u) = g(u) = f(u=0) + \frac{f’(u=0)}{1!}x + \frac{f^2(0)}{2!}x^2 + \frac{f^3(0)}{3!}x^3 + … + \frac{f^n(0)}{n!}x^n $</p>
<p>好,说完泰勒展开,说说欧拉公式!</p>
<h2 id="欧拉公式">欧拉公式</h2>
<p><a href="https://www.bilibili.com/video/av27088046?t=582">妈咪说</a>和<a href="https://www.bilibili.com/video/av26713674">李永乐</a>老师讲的都很棒,不过都差不多,妈咪说给出了证明。</p>
<h3 id="先说说虚数">先说说虚数</h3>
<p>虚数单位$i$,他的定义是$i=\sqrt{-1}$,也就是说$i^1=-1$,这个是为了解决实数在开方这个运算上不封闭,而扩展到了复数域,恩,复数域终于封闭了!</p>
<p>复数就可以标示为$a+bi$,$a、b$都为实数,其中$a$叫实部,$b$叫虚部,一个虚数,可以在一个复平面上,用一个向量表示。</p>
<p>$i$有个特性,挺有意思的,就是用它乘以一个复数,就相当于是这个复数对应的向量,<strong>逆时针旋转$90^{\circ}$</strong>。</p>
<p>一个复数,还可以表示生成三角函数:<strong>$a(cos\theta + i*sin\theta)$</strong>,介就把复数,表示成了一个<strong>极坐标</strong>,酷吧。</p>
<p>这个$a(cos\theta + i*sin\theta)$如果套入到欧拉公式($a(cos\theta + i*sin\theta) = e^{i\theta}$),复数就变成了$e^{i\theta}$了。(欧拉公式我们回头再证明,先给出,主要是想说明,复数的多种表示形式),当$\theta=\pi$的时候,导入到欧拉公式,就是著名的<strong>欧拉恒等式</strong>($e^{i\pi}=-1$)么?哈哈,酷。</p>
<h3 id="欧拉公式-1">欧拉公式</h3>
<p>先说说3个函数$e^x,cos(x),sin(x)$的麦克劳林展开式:</p>
\[\begin{align}
e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^n}{n!} \\
cos(x)=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\frac{x^8}{8!}+... \tag{1} \\
sin(x)=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}+... \tag{2} \\
\end{align}\]
<p>那么,我们把x换成一个虚数$x=i\theta$,带入到展开式中:</p>
<p>$e^{i\theta}=1+i\theta+\frac{(i\theta)^2}{2!}+\frac{(i\theta)^3}{3!}+\frac{(i\theta)^4}{4!}+\frac{(i\theta)^5}{5!}+\frac{(i\theta)^6}{6!}+\frac{(i\theta)^7}{7!}+…+\frac{(i\theta)^n}{n!}$</p>
<p>我们知道$i^2=-1,i^4=1$,这样式子就成了:</p>
<p>$e^{i\theta}=1+i\theta-\frac{\theta^2}{2!}-\frac{\theta^3}{3!}i+\frac{\theta^4}{4!}+\frac{\theta^5}{5!}i-\frac{\theta^6}{6!}-\frac{\theta^7}{7!}i+…$</p>
<p>我们合并一下实部和虚部:</p>
<p>$e^{i\theta}=(1-\frac{\theta^2}{2!}+\frac{\theta^4}{4!}-\frac{\theta^6}{6!}+…) + (\theta-\frac{\theta^3}{3!}+\frac{\theta^5}{5!}-\frac{\theta^7}{7!}+…)i$</p>
<p>发现了么?参考上面的麦克劳林展开式$(1)和(2)$,实部恰好是$cos\theta$,虚部恰好是$sin\theta$,所以,最终我们得到了欧拉公式:</p>
<p><strong>\(e^{i\theta}=cos(\theta)+sin(\theta)i\)</strong></p>
<h3 id="欧拉恒等式">欧拉恒等式</h3>
<p>前面已经提过了,当$\theta=\pi$的时候,欧拉公式就变成了:</p>
<p>$\color{red}{e^{i\pi}+1=0}$</p>
<p>这就是数学上所谓的最美恒等式,包含了数学里面最神秘和常见的几个元素:$1,i,e,0,\pi$</p>
<h2 id="傅里叶变换">傅里叶变换</h2>
<p>傅里叶级数:任何一个<strong>周期</strong>函数,都可以写成一系列正弦、余弦函数的组合。</p>
<p>每个正弦、余弦函数还要包含几个参数:</p>
<ul>
<li>振幅</li>
<li>频率</li>
<li>相位</li>
</ul>
<p>但是,傅里叶级数的分解,是要求函数得是周期函数,但是,如果不是周期函数,那咋样?</p>
<p>那就要靠傅里叶变换了(也叫连续傅里叶变换)</p>
<h3 id="三角函数正交性">三角函数正交性</h3>
<p>为何要推导“三角函数正交性”?这是为了表达,1,sin,cos是一组在频域中的标准正交基,这样,
一个函数的,可以分解成傅里叶级数,也就可以看成是这3个标准正交基的线性组合了。
我们知道,任何一个向量,都可以看成是一个此空间下的标准正交基的线性组合,就是为了满足这个变态的要求。</p>
<h4 id="三角函数积化和差公式">三角函数积化和差公式</h4>
<p>参考<a href="https://zhuanlan.zhihu.com/p/20102140">知乎三角函数推导</a></p>
<p><img src="/images/20191007/1570430405032.jpg" alt="" class="myimg20" /></p>
<p>看上图,俩向量$a,b$,我们假设,$a,b$的模都是1,这样,就得到了a,b两点的向量表示:</p>
<p>$a:(cosx,sinx)$</p>
<p>$b:(cosy,siny)$</p>
<p>然后我们做$a,b$点积:</p>
<p>$ a \cdot b = |a|*|b|*cos(\theta)$</p>
<p>其中,$\theta$是$a,b$两向量之间的夹角。$\theta=x-y$(注意,角度一个是正,一个是负,所以要相减,才可以得到夹角)</p>
<p>所以,可以推出:</p>
<p>$cos(x-y)=cosx*cosy + sinx*siny$ (1)</p>
<p>把$y=-y$,带入上式,得到:</p>
<p>$cos(x+y)=cosx*cosy - sinx*siny$ (2)</p>
<p>把$x=\frac{\pi}{2}-x$,带入上式,得到:</p>
<p>$sin(x+y)=sinx*cosy + cosx*siny$ (3)</p>
<p>把$y=-y$,带入上式,得到:</p>
<p>$sin(x-y)=sinx*cosy - cosx*siny$ (4)</p>
<p>(1)和(2)相减,就可以得到,积化和差公式:</p>
<p>$sin(x)*sin(y) = \frac{1}{2}[cos(x-y) - cos(x+y)]$</p>
<p>(3)和(4)相加,就可以得到,积化和差公式:</p>
<p>$sin(x)*cos(y) = \frac{1}{2}[sin(x-y) + sin(x+y)]$</p>
<h4 id="正交性证明">正交性证明</h4>
<p>参考<a href="https://zhuanlan.zhihu.com/p/80683289">知乎三角函数正交性证明</a></p>
\[\begin{align}
& \int_{-\pi}^\pi sinmx * cosnx dx \\
= & \frac{1}{2}\left[ \int_{-\pi}^\pi sin(n+m)xdx + \int_{-\pi}^\pi sin(n-m)xdx \right] \\
= & -\frac{1}{2}\left[ \frac{1}{n+m} cos(n+m) x|_{-\pi}^\pi + \frac{1}{n+m} cos(n-m) x|_{-\pi}^\pi \right]\\
= & 0
\end{align}\]
<p>类似的,可以证明:</p>
\[\int_{-\pi}^\pi sinmx * sinnx dx =
\left\{
\begin{aligned}
0,&m\neq n \\
\pi,&m=n \neq 0
\end{aligned}
\right.\]
\[\int_{-\pi}^\pi cosmx * cosnx dx =
\left\{
\begin{aligned}
0,&m\neq n \\
\pi,&m=n \neq 0
\end{aligned}
\right.\]
<h3 id="傅里叶级数">傅里叶级数</h3>
<p>https://zhuanlan.zhihu.com/p/41455378</p>
<h4 id="傅里叶猜想">傅里叶猜想</h4>
<p>首先啊,傅里叶猜,是不是任何一个周期函数,可以考虑变成一堆的$sin,cos$函数的叠加?</p>
<p>形如,</p>
<p>$f(t)=a_0+\sum_{n=1}^\infty A_n * sin(nt+\phi)$</p>
<p>然后,可以推导:</p>
\[\begin{align}
f(t) & =a_0+\sum_{n=1}^\infty A_n * sin(nt+\phi)\\
& =a_0+\sum_{n=1}^\infty A_n * (sin(\phi) * cos(nt) + cos(\phi) * sin(nt)) \tag{5} \\
& =a_0+\sum_{n=1}^\infty (a_n * sin(\phi)) * cos(nt) + (a_n * cos(\phi) * sin(nt) \\
& =a_0+\sum_{n=1}^\infty a_n * cos(nt) + b_n * sin(nt)
\end{align}\]
<p>其中式(5)是利用了三角公式(3)。最终,我们得到傅里叶级数的这个样子:</p>
<p>$f(t)= a_0 + \sum_{n=1}^\infty a_n * cos(nt) + \sum_{n=1}^\infty b_n * sin(nt)$ (6)</p>
<p>我们,对他两边积分:</p>
<p>$\int_{-\pi}^{\pi}f(t) dt= \int_{-\pi}^{\pi}a_0 dt + \sum_{n=1}^\infty a_n * \int_{-\pi}^{\pi}cos(nt)dt + \sum_{n=1}^\infty b_n * \int_{-\pi}^{\pi}sin(nt)dt$</p>
<p>后面两项三角函数积分为0,</p>
<p>所以,我们得到 $a_0=\frac{1}{\pi}\int_{-\pi}^{\pi}f(t) dt$</p>
<p>然后,我们再在(6)式上,左右都乘以$coskt$,我们得到:
$\int_{-\pi}^{\pi}f(t)coskt dt= \int_{-\pi}^{\pi}a_0 coskt dt + \sum_{n=1}^\infty a_n * \int_{-\pi}^{\pi}cos(nt)cos(kt)dt + \sum_{n=1}^\infty b_n * \int_{-\pi}^{\pi}sin(nt)cos(kt)dt$</p>
<p>第1项积分为0,第3项根据上面正交性的第一项恒等0,就剩下第2项了:</p>
<p>$\int_{-\pi}^{\pi}f(t)coskt dt= \sum_{n=1}^\infty a_n * \int_{-\pi}^{\pi}cos(nt)cos(kt)dt$</p>
<p>然后,由之前的证明过的三角正交性,当$k=n$时候,这项为0,当$k \neq n$时候,这项为$\pi$,最终,我们得到了:</p>
<p>$\int_{-\pi}^{\pi}f(t)coskt dt= a_k\pi$</p>
<p>所以,我们终于得到一个通项$a_k$的求法:</p>
<p>$a_k=\frac{1}{\pi}\int_{-\pi}^{\pi}f(t)coskt dt$</p>
<p>同理,我们可得:</p>
<p>$b_k=\frac{1}{\pi}\int_{-\pi}^{\pi}f(t)sinkt dt$</p>
<p>这样,我们就得到2个通项:$a_k,b_k$</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://www.bilibili.com/video/av27158514?t=815">妈咪说的泰勒展开的解释</a></li>
<li><a href="https://www.bilibili.com/video/av27088046?t=582">妈咪说的欧拉公式的解释</a></li>
<li><a href="https://www.bilibili.com/video/av26713674">李永乐对欧拉公式的解释</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/20102140">知乎三角函数推导</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/80683289">知乎三角函数正交性证明</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/41455378">傅里叶变换的推导</a></li>
</ul>
图像处理
2019-09-30T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/09/30/image-process
<h1 id="开始">开始</h1>
<p>最近对传统图像处理🎨感兴趣,搞搞看!简单的货,什么RGB,图像基本操作啥的,就不想再讲了,就想直奔有点不好理解的主题,聊点干货。</p>
<h1 id="一些概念">一些概念</h1>
<h2 id="hsv">HSV</h2>
<p>那天,小伙伴们聊起了HSV,色相(Hue)、饱和度(Saturation)、明度(Value),其实大白话就是:什么颜色(H)?鲜艳不鲜艳(S)?亮还是暗?(V)。与RGB色彩模型相比,HSL色彩模型对色彩的表述方式非常友好,非常符合人类对色彩的感知习惯。</p>
<p><img src="/images/20190930/1569832077251.jpg" alt="" class="myimg30" /></p>
<p>HSV也叫HSB,俩是同一个东西。还有个HSL,略微有些区别,我也研究,感兴趣参看<a href="https://www.zhihu.com/question/22077462">知乎这篇</a>。</p>
<ul>
<li>HSB(也就是HSV)中的 H :好理解,大家都明白,就是啥颜色。</li>
<li>HSB(也就是HSV)中的 S :控制纯色中混入$\color{red}{白色}$的量,值越大,白色越少,颜色越纯;</li>
<li>HSB(也就是HSV)中的 B :控制纯色中混入$\color{red}{黑色}$的量,值越大,黑色越少,明度越高;噢!对,这个就是HSV的V。</li>
</ul>
<p>HSV和RGB可以逐个像素转换,转化公式过于亮眼,我也没啥兴趣,就不列出了,感兴趣的自行谷歌吧。</p>
<p>不过,你说HSV有啥用,我觉得,对那帮搞PS的人或者捧着调色板长大的画画的人们友好,但是对我们在这帮搞计算机的跟着RGB概念一起长大的程序猿们来说,十分不友好。我能想到的也就是个去除图像中的红色印章的实际用途。</p>
<h1 id="hough变换">Hough变换</h1>
<h2 id="hough变换干嘛用的">Hough变换干嘛用的</h2>
<p>就是为了从一幅图里(往往是二值化图),找出那些点共线,就是,他们在一条直线上。你说这玩意干什么用?有大用啊。你可以找出图像里的直线来,是的,共线的点超过一个阈值,就是一条直线了呀。直线对图像出来来说很重要,可以帮你找出一些边界来,比如身份证的四个边,一本书的边界,方便你后续的旋转校正等操作啊。</p>
<p>是的,Hough变换基本上都是在边缘检测后的二值图上来来搞的,你问为何,点少啊,好处理啊。否则,一堆点,Hough变换非崩溃不可。</p>
<h2 id="原理">原理</h2>
<p>先把一个直线化从平面坐标系,转化到极坐标系里:</p>
<p><img src="/images/20191006/1570349363184.jpg" alt="" class="myimg20" /></p>
<p>直线:$y=k*x+b$</p>
<p>把换算$k,b$成$r,\theta$表示:$y=\left(-\frac{cos\theta}{sin\theta}\right)*x + \left(\frac{r}{sin\theta}\right)$</p>
<p>整理可得:$r=x*cos\theta + y*sin\theta$</p>
<p>所以,一个直线,可以被$\color{red}{极坐标表示}$,成一个固定的$r$和一个固定的$\theta$: $(r,theta)$。然后你固定一个点$(x0,y0)$,你变$r$和$\theta$,你就得到过这个$(x0,y0)$点的一组直线,对吧?这组直线,就可以表示成一个正弦曲线(牢记!每个正弦曲线上的点,代表过$(x0,y0)$<strong>一条</strong>直线)</p>
<p><img src="/images/20191006/1570349908390.jpg" alt="" class="myimg20" /></p>
<p>然后,我们换个点(x1,y1),穿过它的直线又组成一个族群,这个族群,又是一条正弦曲线,对吧?</p>
<p><img src="/images/20191006/1570350185281.jpg" alt="" class="myimg20" /></p>
<p>那问题来来了,交汇点是啥?交汇点,$r、theta$一样,对吧?但是对应的坐标点$(x0,y0) , (x1,y1)$不一样了吧?</p>
<p>那相交说明啥?说明,他们俩分别画了个穿过自己的直线,结果两条直线是同一条直线。$\color{red}{相交说明共线!}$</p>
<p><img src="/images/20191006/1570350259136.jpg" alt="" class="myimg20" /></p>
<p>每一个(x,y) 为中心的直线族代表一条正弦曲线,这上面2个点,所有有2个正弦曲线,结果他们俩相交了,那,结论是,这个极坐标上(r,theta)点,代表的是同一直线。</p>
<p>继续引申,如果很多正弦曲线相交在一点呢?那说明很多点(对应一条正弦),都在一条直线上,越多重合点,说明越多点在“某条”直线上。</p>
<p>结论终于来了:</p>
<blockquote>
<p>霍夫变换要做的,就是跟踪原图像中的每个像素在$r,b$空间中的“过点直线族”对应的曲线的交点,超过一定阈值,就认为这个点对应的那个$r,\theta$是一条直线。</p>
</blockquote>
<p>解释:就是看,多少条极坐标下的曲线,形成的重叠交点,重叠一次就+1,最后看,多少次叠加,超过某个阈值,我就认为,这个点对应的r和theta是一条直线啊。哈哈。明白了。</p>
<p>好!下面品味下面的话:</p>
<ul>
<li>Hough变换通过映射,将一个形状识别问题,转换成了一个统计问题</li>
<li>所以,没法做全图的,计算量太大了,一般都是转成二值化的图后,只算为1的点,这样计算量就降下来了</li>
<li>找到的正弦的点后,这个点被重叠下很多次,这个点就是很确信是一个直线了,$\color{red}{共线足够多,原图中就存在一条直线}$</li>
</ul>
<p><em>除了直线共线,还可以用Hough变换做圆形共线,目前用不到,暂时不研究了</em></p>
<h2 id="实践">实践</h2>
<p>opencv中有个函数,帮你干这事:</p>
<p><a href="https://zhuanlan.zhihu.com/p/34114020">参考</a></p>
<pre><code class="language-python"> lines = cv2.HoughLines(
image=edges,
rho=1,
theta=np.pi/180,
threshold=100,
lines=minLineLength,
srn=maxLineGap)
</code></pre>
<h1 id="canny-边缘检测">Canny 边缘检测</h1>
<p>边缘检测,其实,就是要一个二值化的图,而且,就边缘的那个点是1,剩下的都是0,很细,就是一条线,恩,这才叫“边缘检测”。</p>
<p>咱要找“边”,那边的特征是啥?特征就是灰度值变换很剧烈。</p>
<p>所以,我们第一个就想到了,求导,导数越大,说明,丫变化的越剧烈。在图像里,求导就是求“差商”,说白了,就是用右面的像素灰度值减去左面的像素灰度值,同理上下方向是上面的灰度值减去下面的灰度值,恩,x、y两个方向的求导就算好了。</p>
<p>这事其实,可以用一个[-1,0,+1]的一个算子,去和原图上的某个点做一个卷积,就可以实现。不信你自己卷积一下试试。</p>
<p>不过,有个更好的算子,索贝尔算子,可以更好地完成这个任务。</p>
<h2 id="索贝尔算子sobel计算梯度">索贝尔算子Sobel计算梯度</h2>
<p><img src="/images/20190930/1569837186292.jpg" alt="" class="myimg30" /></p>
<p>看这个算子:</p>
<ul>
<li>他实际上是做了一个平滑处理:中间那个-2来说实现的。</li>
<li>然后他做了一个梯度处理:[-2,0,2],是的</li>
</ul>
<p>$Edge Gradient(G)=\sqrt{G_x^2 + G_y^2}$</p>
<p>$Angle(\theta)=tan^{-1}\left( \frac{G_y}{G_x} \right)$</p>
<p>然后,两个方向$x,y$方向的梯度合成了整体梯度,就可以得到这个点上的梯度,俩数:</p>
<ul>
<li>梯度的模</li>
<li>梯度的角度</li>
</ul>
<p>恩,两个合成一个矢量,就是梯度。</p>
<p>那,我就可以得到一张<strong>“新图”</strong>,就是由梯度表示的图,每个像素值,都是2值,一个是梯度模,一个是梯度的角度。</p>
<p>好,我们来找边缘了:</p>
<h2 id="非极大值抑制nms">非极大值抑制(NMS)</h2>
<p><img src="/images/20190930/1569837793894.jpg" alt="" class="myimg30" /></p>
<p>看这张图,$g1,g2,g3,g4$都是$c$点周边的点,那我问你,$c$点是边缘点么?</p>
<p>啥叫边缘点来着,就是丫的梯度最大,丫就是。如果$c$的梯度最大,$c$相比$g1,g2,g3,g4$就是一个边缘点,恩,比出来的。</p>
<p>那怎么比较$c$和这4个包裹点$g1,g2,g3,g4$呢?</p>
<h3 id="线性差值">线性差值</h3>
<p>$c$点的梯度不是有方向么,就是这条蓝色的线,你看到了吧。他和$g1,g2$所组成的直线,相交在$O$点。
于是,我们就用线性插值,算出$O$到点的梯度值(其实是梯度的模)。这个使用一个三角函数计算,就可以得出。比如$\theta=60$度,也就是$tan(\theta)=\sqrt{3}$,图像中,两个像素距离都是1,那么可以推导出,$|Og2|=1,|g1g2|=|g2C|=\sqrt{3}$,根据这个比例,再加上$g1,g2$上的梯度模差,可以线性插值算出$O$点的梯度模的值。(恩,这玩意是基于$g1,g2$的梯度模值是线性变换的,恩,这个假设很重要!)</p>
<p>好啦,有了$O$点(也就是图中$dTmp1$)的梯度模,有了$c$点的梯度模,还有一个$dTmp2$点的梯度模,你比一下,看看,是不是$c$点最大,如果是最大,他就是一个边缘点,否则,就给他置0,yes,消灭掉他。</p>
<h2 id="边缘链接">边缘链接</h2>
<p>好!我们找到了一堆的边缘点了,可是,他们只是边缘候选点,而且他们还是断断续续的啊,我们得想个办法,再筛选他们一下。</p>
<p>这里呢,提出2个阈值,maxVal和minVal,用它们对候选边缘点再做一次过滤。</p>
<p>如果是大于maxVal的点,确定无疑是边缘点了,然后,看这些点的8邻居,是否存在介乎于maxVal和minVal之间的点,是的话,这个点也被标示为边缘点,然后这个新的点再看他周边的8个点,循环往复,直到没有新的可能的点了,就停止了。</p>
<p>这样,最终把这些点标注出来的一个二值图像,就是一个边缘图了。$\color{red}{二值边缘图。}$</p>
<p>完成。</p>
<h2 id="实践-1">实践</h2>
<p>Canny边缘检测的效果相当不错,实践中推荐多多使用它。</p>
<pre><code class="language-python"> #image, threshold1, threshold2, edges=None, apertureSize=None, L2gradient=None
edges = cv2.Canny(image=img,
threshold1=10,
threshold2=100,
apertureSize=3,
L2gradient=True)
</code></pre>
<h1 id="harris-corner-探测角探测">Harris Corner 探测:角探测</h1>
<p>找角,角的特点,区别于线,线的特点是在一个方向上梯度变化大,但是其他方向,
看一个点,太武断,看一个窗口区域,去一个点的邻域,</p>
<p>未完成,待续。。。</p>
<h1 id="傅里叶变换">傅里叶变换</h1>
<p>参考,我的另外一篇博客:<a href="/machine-learning/2019/10/06/Taylor-Euler-Fourier">从泰勒展开到欧拉公式,再到傅里叶变换</a></p>
<h1 id="sift同一物体映射">SIFT:同一物体映射</h1>
<p>SIFT:Scale-invariant feature transform(尺度不变特征变换)</p>
<h2 id="sift干啥用的">SIFT干啥用的</h2>
<p>SIFT就是想判断两张图片那部分是相同的,</p>
<h2 id="建立高斯差分金字塔">建立高斯差分金字塔</h2>
<p>##</p>
<h1 id="参考">参考</h1>
<h2 id="视频">视频</h2>
<ul>
<li><a href="https://www.bilibili.com/video/av44912402">小哥哥的图像算法视频,超级赞,完全手撸各类算法</a></li>
<li><a href="https://www.bilibili.com/video/av61178093/">西安电子科技大学-任老师的课,朴素但是很经典</a>
还有一些,也不错,不够我也没看,讲的内容差不多,bookmark之: 👨</li>
</ul>
<p><a href="https://www.bilibili.com/video/av43045572/">https://www.bilibili.com/video/av43045572/</a>
<a href="https://www.bilibili.com/video/av17588571/">https://www.bilibili.com/video/av17588571/</a>
<a href="https://www.bilibili.com/video/av43045572/?p=16">https://www.bilibili.com/video/av43045572/?p=16</a>
<a href="https://www.bilibili.com/video/av14319808/?p=63">https://www.bilibili.com/video/av14319808/?p=63</a></p>
如何部署tensorflow docker环境
2019-09-28T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/09/28/tf-docker
<h2 id="背景">背景</h2>
<p>最近的项目,涉及到tensorflow的生产环境的部署,还得上docker,所以,我就开始了项目部署的折腾之旅。</p>
<p>这里涉及到到很多基础的概念,比如docker镜像、docker容器、docker服务编排、tensorflow的GPU支持、python的本地安装setuptools等诸多基本概念和知识,就不给科普了,假设你都已经有了大致的了解,这里主要讲一下我的探坑之旅。</p>
<h2 id="基本base镜像">基本base镜像</h2>
<p>先得有个能跑tensorflow的环境把,好,就得先搞个基础的能认出GPU的tensorflow的环境吧,这个可是基础啊。</p>
<h3 id="nvidia驱动cudacudnndockernvidia-docker">nvidia驱动,CUDA,CUDNN,docker,nvidia-docker</h3>
<p>这事儿挺纠结的,而且也走了一些弯路,开始啊,我其实没太搞清楚,nvidia驱动,CUDA,CUDNN,docker,nvidia-docker的关系。我们都知道,如果是直接在操作系统里面装tensorflow-gpu,就得先装nvidia驱动,然后装CUDA,然后再装CuDNN,然后最后才能装tensorflow-gpu的pip包,还不能装tensorflow,必须装-gpu版本,才可以真正跑起来tensorflow的gpu训练。可是,到了docker的世界,改怎么办呢?</p>
<p>这里有张图,可耻的😈盗用一下:</p>
<p><img src="/images/20191007/cuda-tf-docker.png" alt="" /></p>
<p>一图胜千言啊,很明白,就是你在宿主机里,也就是跑docker服务的那个宿主操作系统里面,只需要装个nvidia驱动就完了,啊!这么简单啊?!对,就酱紫,完事。</p>
<p>那CUDA、CuDNN那些呢?答案是,在镜像image里面。也就是说,你要是想让一个docker容器未来跑起来可以支持tensorflow去使用显卡,你得搞一个包含了CUDA和CuDNN的images镜像,然后再在这里面装个tensorflow-gpu就可以了。</p>
<p>哦!</p>
<p>不过,你以为就完了么?并没有。🤡</p>
<p>你如果去用docker run 去跑他,还是不行,还是认不出显卡来。这个时候,你还需要安装nvidia公司的docker的一个辅助包,叫nvidia-docker,这个是个yum/apt包,装完后,就可以让docker支持显卡啦。</p>
<p>nvidia-docker v1的时候,你得用一个新命令去跑docker:<code>nvidia-docker run myimg</code>,到了 nvidia-docker v2的时候,就舒服多了:<code>docker run --runtime=nvidia myimg</code>就可以了,爽了吧。</p>
<p>总结一下,就是,为了跑一个支持GPU显卡的docker,真TMD费劲!</p>
<ul>
<li>得在docker服务的宿主机上装nvidia驱动</li>
<li>在宿主机上,还得装 nvidia-docker</li>
<li>得搞个装了CUDA和CuDNN的image镜像</li>
<li>最后,在镜像里面,别忘了得装tensorflow-gpu版本</li>
<li>最最后,跑起来docker容器的时候,别忘了加上 –runtime=nvidia参数</li>
</ul>
<p>不过,这个都是我意淫的,我并没有这么做,我只是docker pull tensorflow/tensorflow:1.14.0-gpu-py3了一下,就把这个过程都省略了,哈哈,我就是这么无耻!</p>
<h3 id="好吧我说说我的web服务镜像制作了">好吧,我说说我的web服务镜像制作了</h3>
<p>有了一个好的基准image,还没完。生产环境,可是不能联网的,所以我要把能装的pip啥的需要联网的东东,都要塞进这个基准base镜像里。</p>
<p>所以,我需要解决几个问题:</p>
<ul>
<li>要把apt源换成阿里的,这样后续就可以<code>apt-get install</code>爽爽的装了</li>
<li>还要把语言环境改成中文</li>
<li>要把项目中依赖的pip包都全家桶装好,并且安装过程中使用豆瓣的pip源,这样才可以爽</li>
</ul>
<p>好吧,看最后的<a href="https://github.com/piginzoo/ocr/blob/master/config/Dockerfile.base">Dockerfile</a>.</p>
<p>docker build,完成!</p>
<h2 id="制作web服务镜像">制作Web服务镜像</h2>
<p>好,有了基准镜像image,要开始在其基础上,制作我们的Web服务镜像了。</p>
<p>不过,我们首先要调整一下我们的代码结构:</p>
<h3 id="先改造代码结构">先改造代码结构</h3>
<p>之前,是3个项目分开的,一个CTPN,一个CRNN,一个Web。太散了。我只好用很蹩脚的脚本,在路径中添加了他俩的路径,好让解释器可以找到他们。</p>
<pre><code>conf.py
CTPN_HOME=['ctpn']
CRNN_HOME=['crnn']
# 为了集成项目,把CTPN和CRNN项目的绝对路径加到python类路径里面
for path in conf.CRNN_HOME+conf.CTPN_HOME:
sys.path.insert(0, os.path.join(os.path.abspath(os.pardir), path))
sys.path.append(".")
# 完事了,才可以import ctpn,否则报错
import main.pred as ctpn
import tools.pred as crnn
</code></pre>
<p>我一直有个心愿🙏,就是用python的setuptools,把ctpn、crnn这两个项目搞成一个本地安装的library的概念,这样就可以心安理得的import了。终于,借这个部署docker的契机,搞一把。</p>
<p>于是,我果断的开始书写crnn的<a href="https://github.com/piginzoo/ocr/blob/master/crnn/setup.py">setup.py</a>和ctpn的<a href="https://github.com/piginzoo/ocr/blob/master/ctpn/setup.py">setup.py</a>,过程中很多问题,也有很多收获:</p>
<ul>
<li>我以为生成egg包,就是我的包的名字,比如生成的叫ctpn.egg的包,那么我就可以<code>import ctpn</code>,引入到我所需要的位置了。其实是不行的,你必须还要在ctpn这个包里面,增加一个ctpn的文件夹,然后把所有的py源码放到到这个目录中。也就是说,这个ctpn文件夹,才是真正担当了<code>import ctpn.xxx</code>的包名的作用</li>
<li>find_packages很爽,一句<code>packages=find_packages(where='.', exclude=(), include=('*',))</code>,就把所有的代码都找到了,放到了egg包中</li>
<li>ctpn中有2个c++的程序,需要单独编译并安装成一个单独的包,对,单独的包,本来,我还幻想,我的ctpn的python代码的egg包,可以和这个c++程序们在一个包中,后来发现,生成的egg文件(其实丫就是一个zip包),死活统一不到一起。我的python代码生成egg包叫<code>ctpn-1.0-py3.6.egg</code>,可以,c++程序生成的包叫<code>ctpn-1.0-py3.6-macosx-10.6-intel.egg</code>,为毛,非要有个macosx-10.6-intel这个鬼呢?!死活消除不掉,而且,他还必须是目录结构,而不是一个zip包,恩,纠结后,我终于放弃了。踏踏实实为他们各自做一个包,而且,更拧巴的是,你还得为里面的<code>nms.py</code>单独生成一个<code>ctpn_bbox</code>的包,不能用统一成<code>ctpn</code>包,否则,这个包会强占了ctpn这个包的名字,导致你找不到其他python文件啦。真心纠结😭。
来看看,最后的C++动态库相关的egg目录结构:
<pre><code>ctpn_bbox-1.0-py3.6-macosx-10.6-intel.egg/ctpn_bbox
├── __pycache__
│ └── nms.cpython-36.pyc
├── bbox.cpython-36m-darwin.so
├── nms.cpython-36m-darwin.so
└── nms.py
</code></pre>
</li>
<li>恩,c++的代码是靠cythonize搞定的,我开始因为是人家先写了一个c++程序,然后编译成so库,然后再生成一个python代码,被我们调用的,其实我错了,cythonize的玩法是,你先写python代码,然后他把你的python代码翻译成c++代码,然后你编译c++程序生成so文件就可以啦。
<blockquote>
<p><a href="https://www.cnblogs.com/jianmu/p/7497274.html">Cython库</a>正好符合这种场景需求,将已有的Python代码转化为C语言的代码,并作为Python的built-in模块扩展。其最重要的功能是:
write Python code that calls back and forth from and to C or C++ code natively at any point.
即 将Python代码翻译为C代码。之后就可以像前面文章介绍的C语言扩展Python模块使用这些C代码了。
我的理解:这个是python代码=>c代码,然后编译,然后再用python调用so,不是我理解的用c代码写功能,而是用python写,转成c。</p>
</blockquote>
</li>
<li>crnn虽然没有c++代码,但是依然生成一个*.egg结尾的文件夹,而不是一个zip文件,为何呢?原因是,他需要包含资源文件,所以使用package_data:<code>package_data={'crnn.config':['charset.3770.txt','charset.5987.txt','charset.6883.txt']}</code>,我们把资源文件放到了egg里,也就导致了,安装完的egg是一个文件了,而不是zip文件了。</li>
</ul>
<p>好吧,终于折腾好了,然后一个python setup.py就把ctpn、crnn都装到了本地的库里面了,世界清静了💀….</p>
<h3 id="终于可以开始构建web镜像了">终于可以开始构建Web镜像了</h3>
<p>有了那个可以跑tensorflow-gpu、还填满了各种需要的pip包的基准base镜像,在加上我搞好的捋顺的代码结构,<strong>终于可以制作我的镜像了</strong>。</p>
<p>我要搞2个版本:</p>
<p>1、可以调用tensorflow-serving的docker的docker,绕口哈,就是他只是个web程序,模型是由tensorflow-serving docker加载的。</p>
<p>2、可以自己加载模型,并且可以对外服务,本质就是tensorflow模型预测+web程序的合体</p>
<p>你问我,我为什么要这么搞?</p>
<p>我就是觉得这样爽,我要各种情况都要支持啊:既支持tensorflow单独跑的方式,也支持和tensorflow-serving集成的方式跑。对了,关于tensorflow-serving的趟坑之旅,可以参考我的<a href="/machine-learning/2019/09/17/tf-serving">这篇</a>。我甚至,还可以让代码支持不用docker的方式跑,方便调试嘛。</p>
<p>好啦,奇怪的废话不说了,继续。</p>
<p>其实,制作Web镜像,并没有太多需要说的地方,就只注意以下几点:</p>
<ul>
<li>git pull代码这事,我是不管的,不在容器里git pull,不好,交给外面去,交给运维的同志们去搞</li>
<li>所以,我要做的就是把代码ADD到镜像里即可</li>
<li>然后要运行了c++的库的编译安装过程,我搞了个install.sh,运行一下即可</li>
</ul>
<p>依然,<code>docker build</code>,运行,既可以,生成我们需要的ocr.web镜像啦。</p>
<p>好吧,看最后的<a href="https://github.com/piginzoo/ocr/blob/master/config/Dockerfile">Dockerfile</a>.</p>
<h3 id="基准image的dockerfile">基准Image的dockerfile</h3>
<pre><code># 基于tensorflow/tensorflow:1.14.0-gpu-py3生成一个基础镜像
# 他满足了:nvidia支持、pytnon3支持、ubuntu支持
From tensorflow/tensorflow:1.14.0-gpu-py3
MAINTAINER piginzoo
ADD config/sources.list /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y libsm6
RUN apt-get install -y libxrender1
RUN apt-get install -y libxext-dev
RUN apt-get install -y language-pack-zh-hans
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN:zh
ENV LC_ALL zh_CN.UTF-8
# 安装所需要的第三方包
ADD ocr/requirements.txt /home/requirements.txt
RUN pip install -r /home/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
</code></pre>
<h2 id="容器启动">容器启动</h2>
<p>终于终于,可以把程序跑起来啦,好开森啊。🤪</p>
<h3 id="全靠环境变量传入参数">全靠环境变量传入参数</h3>
<p>记得不?我说过,我的程序要能单独跑,也能和tensorflow-serving配合跑;可以在容器里面跑,还要可以不用容器也可以跑(调试用)。为了满足上述各种方式,我也拧巴了一阵。</p>
<p>开始我是在Web的启动脚本里,加了一堆的启动参数。使用linux本身自带的<a href="http://witmax.cn/shell-mac-parse-parameters.html">getopt</a>。对了,linux还带一个getopts,虽然多了个s,但是不如getopt好用,主要是不支持长参数(例如–mode=xxxx)。另外,mac的getopt和linux的,还不太一样,会导致你开发过程有问题,解决之道是装一个gnu-getopt:<code>brew install gnu-getopt</code>。然后,我想在容器启动的时候,传给容器不同的参数,来动态决定是单独跑还是和tensorflow-serving集成,多好啊。</p>
<p>但是,现实是残酷的。要往runtime的容器里面传入参数,只能通过环境变量,靠!苦恼死了。只好调整我的启动shell脚本,都改成了传入环境变量,而且,还得改python脚本,从环境变量里面读取各种参数,其中折腾和滋味就不说了。</p>
<p>现在的Web服务启动脚本变成了这个样子:<a href="https://github.com/piginzoo/ocr/blob/master/ocr/bin/server.sh">server.sh</a>。</p>
<p>最终我们定义了2个重要参数:</p>
<ul>
<li>模式:single;tfserving,来决定是单独启动,还是配合tensorflow-serving方式启动</li>
<li>端口:对外服务的端口</li>
</ul>
<h3 id="容器启动脚本">容器启动脚本</h3>
<p>然后,我们就可以针对我们不同的模式,传入不同的环境变量,来启动容器了。</p>
<p>由于这种方式,需要mount不同的文件和文件夹,导致,docker启动的脚本也有不同,主要是挂载不同的docker容器的目录:</p>
<ul>
<li>对于单独启动的方式,要挂载模型文件目录、日志目录、以及web服务的配置文件目录</li>
<li>对于配合tensorflow-serving方式的容器启动方式,需要挂载SavedModel模型的目录到tensorflow-serving的容器上</li>
</ul>
<p>好,可以参考<a href="https://github.com/piginzoo/ocr/blob/master/bin/docker.sh">docker.sh</a>。</p>
<h2 id="容器编排">容器编排</h2>
<p>到这里,貌似一起要结束了,可是,并没有。</p>
<p>我们需要放到生产环境,是需要服务编排的:</p>
<blockquote>
<p><a href="https://yeasy.gitbooks.io/docker_practice/compose/introduction.html">Docker Compose</a>定义和运行多个Docker容器的应用,多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
概念:</p>
<ul>
<li>服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。</li>
<li>项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。
“项目是关键,包含多个服务!”</li>
</ul>
</blockquote>
<p>好,那就开始写docker-compose文件吧。</p>
<p>我分成了2个文件:<a href="https://github.com/piginzoo/ocr/blob/master/config/docker-compose-single.yml">docker-compse-single.yml</a>和<a href="https://github.com/piginzoo/ocr/blob/master/config/docker-compose-tfserving.yml">docker-compse-tfserving.yml</a>。分为2个的原因,是因为两种方式的容器启动方式是不一样的,“single方式”启动一个容器就可以,就是web服务容器;而“tfserving方式”,要启动Web服务容器、tensorflow-serving容器,2个容器。而且两种方式还要一些不同的环境变量需要传入,所以写成2个编排文件。未来在生产环境下,会主要使用“tfserving方式”的编排方式。</p>
<h2 id="实操安装步骤">实操安装步骤</h2>
<p>这里,把整个的安装步骤,列出来,为后续部署提供手册:<a href="https://www.tensorflow.org/install/gpu">Tensorflow官网提供的参考</a></p>
<p>我们上面讨论过了,只需要在宿主机上安装GPU显卡驱动即可,其他的CUDA tookit、cuDNN都不需要了。另外就是安装一下nivdia-docker:</p>
<ul>
<li>显卡驱动</li>
<li>nivdia-docker</li>
</ul>
<h3 id="安装显卡驱动">安装显卡驱动</h3>
<p>1.下载显卡驱动:<a href="https://www.nvidia.com/Download/index.aspx?lang=en-us">nvidia官网驱动下载</a>,选择:Tesla/P/P40/P/P40/RHEL7/CUDA10.0。</p>
<p>这里有个快捷下载通道:<a href="https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-10-0-10.0.130-1.x86_64.rpm">下载地址</a>;或者wget直接获得:</p>
<p><code>wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-10-0-10.0.130-1.x86_64.rpm</code></p>
<blockquote>
<p>为何要选择CUDA10.0?
原因是,我们的Docker采用的是tensorflow1.14,这个版本需要匹配CUDA10.0.
Tensorflow版本和CUDA版本的对应关系:<a href="https://www.tensorflow.org/install/source#tested_build_configurations">对应关系详细信息</a></p>
</blockquote>
<p>2.安装显卡驱动:
在Linux(我们是CentOS7)中安装:<a href="https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#axzz4VZnqTJ2A">参考nvidia官网安装驱动</a></p>
<p>详细步骤(大自然搬运工,详细还是去参考<a href="https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#axzz4VZnqTJ2A">官网安装步骤链接</a>):</p>
<ul>
<li><code>lspci | grep -i nvidia</code>,看看您的是什么显卡</li>
<li><code>uname -m && cat /etc/*release</code>,去看看操作系统信息</li>
<li><code>gcc --version</code>,确定GCC版本</li>
<li><code>sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)</code>,需要安装开发devel-libs</li>
</ul>
<p>安装:</p>
<pre><code>- rpm --install cuda-10-0-10.0.130-1.x86_64.rpm
- yum clean expire-cache
- yum install nvidia-driver-latest-dkms
- yum install cuda
</code></pre>
<p>如果一切顺利,就可以敲<code>nvidia-smi</code>,看到显卡信息了。</p>
<p>可悲的是,我们并不顺利,好吧,请看我们的悲惨遭遇。</p>
<h3 id="安装nvidia-docker">安装Nvidia Docker</h3>
<p>不同于普通docker,我们需要安装由<a href="https://github.com/NVIDIA/nvidia-docker">nvidia公司提供的特殊版本的docker</a>服务:</p>
<p>运行以下命令:</p>
<pre><code>$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
$ sudo yum install -y nvidia-container-toolkit
$ sudo systemctl restart docker
</code></pre>
<h3 id="悲惨趟坑和正确姿势">悲惨趟坑和正确姿势</h3>
<h4 id="悲惨的趟坑之旅">悲惨的趟坑之旅</h4>
<p>前面讲过正常的流程,我们却十分坎坷的遇到了各种问题,从下午3点一直忙到10点,才搞定,好吧,我们来说说:</p>
<p>我们在安装kernel-devel的时候,就发现,uname -r显示的kernel版本,和我们默认安装<code>yum install kernel-devel</code>的版本不一致,我们的 <code>uname -r</code>显示的是<code>kernel 3.10.0-957.el7.x86_64</code>,而我们装上的kernel-devel版本是3.10.0-1062。这个我们其实到最最后也不知道是不是这个问题导致我们后续的显卡问题,后来,我们把kernel都升级到了1062个build版本,这个问题,其实是个插曲。</p>
<p>我们照着上面流程安装完<code>gcc、kernel-devel、nvidia-driver-latest-dkms、cuda</code>后,敲入 <code>nvdia-smi</code>,我们得到了:</p>
<pre><code>NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
</code></pre>
<p>悲桑~</p>
<p>于是,我们就开始各种的自我怀疑和乱投医,我们尝试了多种后来看来完全没有作用的尝试,都是始终面对上面这个错误的桑心:</p>
<ul>
<li>开始装错了cuda.repo版本,居然装成了7,但是改成10,依然桑心</li>
<li>我们去<a href="https://developer.nvidia.com/cuda-downloads">https://developer.nvidia.com/cuda-downloads</a>,去下载runfile(cuda_10.2.89_440.33.01_linux.run,乖乖2G呢),运行了,报一个莫名的错</li>
<li>我们也推荐同样这页推荐的rpm(network)方式,依然桑心
<pre><code> sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms cuda
sudo yum -y install cuda-drivers
</code></pre>
</li>
<li>我们还尝试多种错误姿势,都无果</li>
</ul>
<p>后来,我们发现根本不能按照nvidia官网的文档来装,因为他的那个流程里,根本没有让我选择究竟是哪一款显卡的过程,这怎生靠谱呢?</p>
<p>我们后来按照显卡型号寻过去,下载驱动,然后再装各类东西,才搞定的,后面会提及。</p>
<p>装好,驱动后,运行nvidia-smi,可以显示正常了。可是和docker的集成还是有问题的。我们安装的nvidia-docker,然后下载了nvidia家的测试容器:nvidia/cuda,然后运行测试命令<code>docker run --gpus all nvidia/cuda nvidia-smi</code>,ok了。</p>
<p>于是,我们去尝试启动我们的compose文件:docker-compose up …..,结果报错,说compose不认识runtime=nvidia参数。哦,我意识到了,是需要修改compose文件中的runtime参数为gpus,于是修改之,结果继续报错,2.3的compose是不支持–gpus参数的,我谷歌后,看到大家都抱怨这个问题,貌似nvidia还没有给出一个官方的支持,怎么办?</p>
<p>那必须得装老版本的nvidia-docker2,才可以重新支持runtime这个参数,至于gpus参数嘛,彻底放弃了。</p>
<p>于是安装nvidia-docker2,安装完,重启docker(这点很重要),立刻就好了。</p>
<p>期间还装了nvidia-docker-compose,pip方式装的,其实没啥用。</p>
<h4 id="正确姿势">正确姿势</h4>
<p>好吧,我们来说一下,我们在CentOS 6.7.1810/Kernel 3.10.0-957.el7.x86_64上正确安装Nvidia Tesla P40的正确的姿势:</p>
<ul>
<li>正确的升级kernel,此举是否是必须,其实我们也不是特别自信,但是至少我们是做了,让kernel的版本和kernel-devel的版本一致了(这个问题前面谈过了):<code>yum install kernel-3.10.0-1062.4.3.el7.x86_64</code></li>
<li>去<a href="https://www.nvidia.com/Download/index.aspx?lang=en-us">https://www.nvidia.com/Download/index.aspx?lang=en-us</a>,选择Tesla/P40/64bit-REHL7/10.0,选择正确的驱动。</li>
<li>然后,你应该得到这个<a href="http://us.download.nvidia.com/tesla/410.129/nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm">http://us.download.nvidia.com/tesla/410.129/nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm</a>,对!是一个rpm。</li>
<li>安装他:<code>rpm -i nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm</code></li>
<li>没完,还要安装一个<code>yum install cuda-drivers</code></li>
<li>重启!就ok啦!</li>
</ul>
<h4 id="全套">全套:</h4>
<pre><code># 升级内核,需要3.0,这个不知道是否是必须,好像是要和安装的kenerl-dev的版本匹配
yum install kernel-3.10.0-1062.4.3.el7.x86_64
# 下载P40对应的显卡驱动,这个是通过官网的下载网页按型号查找到的
wget http://us.download.nvidia.com/tesla/410.129/nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm
# 安装驱动
rpm -i nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm
yum clean all
# 安装CUDA
yum install cuda-drivers
reboot
# 安装nvidia-docker2,一定要是版本2,这个版本虽然旧,但是支持runtime选项
yum install nividia-docker2
systemctl restart docker
#最后测试:
docker run --runtime nvidia nvidia/cuda nvidia-smi,可以看到GPU的细节,OK!
</code></pre>
<h4 id="血泪史">血泪史:</h4>
<ul>
<li>去<a href="https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/">https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/</a>直接去下驱动,不靠谱!</li>
<li>按照官网去安装<a href="https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#abstract">https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#abstract</a>,不靠谱!</li>
<li>官网的都是让你去下载一个allinone包,根本没地方让你选择p40的卡的型号,我们还奇怪呢?怎么这么智能?其实,实践告诉我们,不靠谱!</li>
</ul>
<h2 id="总结">总结</h2>
<p>终于,这事差不多了,最后总结一下,为了让部署一个完整的支持GPUTensorflow程序上线,你需要做:</p>
<ul>
<li>构建一个基础镜像,让其支持GPU,支持tensorflow-gpu,并安装好各种包</li>
<li>构建你的web容器,编译好ctpn中的c++动态库,使用本地安装包方式部署好代码</li>
<li>容器启动采用环境变量的方式传入需要的动态参数,并且,mount好各自的目录</li>
<li>最后使用docker编排服务,绑定好各自需要的内容</li>
</ul>
Tensorflow Serving
2019-09-17T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/09/17/tf-serving
<h1 id="为什么要使用tensorflow-serving">为什么要使用tensorflow serving</h1>
<p>我是很讨厌这种东西的,其实,之前用flask挺好的啊,我自己加载模型,对外服务。可是,我遇到了问题,就是我flask是多进程,多进程,想共享模型的是有问题的。啥问题来着,我忘了,不好意思,反正肯定是有问题的。后来,我不得不每个worker进程就加载一次模型,这样,一个GPU很快就被撑爆了,我试了一下,最多只能起3个worker进程,也就是只能最多塞3份模型进GPU了。否则就OOM了。</p>
<p>后来我去网上谷歌,也没啥好方案,都推荐用tf-serving,去大神群(QQ群:785515057)问,大家的回答也是一致,就是用tf-serving吧,再看看人家官网上,一通吹牛逼,就屈服了。</p>
<h1 id="tensorflow-serving是什么">tensorflow serving是什么</h1>
<p>说白了,就是一个帮你管理模型的一个服务。我开始以为他提供web服务呢,发现虽然可以,但是远远不够。他对外主要支持grpc服务和restful服务,但是没地方给你做预处理的地方,就是仅仅封装好模型的入口和出口的一个api。所以,一般大家都要在外面,再跑一个flask web 服务,用来做预处理和后处理。</p>
<p>不过,他也干了不少事:</p>
<ul>
<li>帮你加载一份模型,恩,对,我就是这个问题解决不了,不够,不知道他肚子里面的进程、线程模型,黑盒</li>
<li>要提高性能,他提供了一个batch机制,大白话解释,就是他帮你凑一波请求,动态凑成一个batch,交给GPU去处理,这事对你是透明的,你就管一个个的向他请求,他去凑,这事儿挺酷的</li>
<li>他给你弄个了docker,你docker pull后直接用,省去了不少麻烦</li>
</ul>
<p>恩,想想,他也就是干了这些事。</p>
<h1 id="版本的选择和安装">版本的选择和安装</h1>
<p><code>docker pull tensorflow/serving:1.12.3-gpu</code></p>
<p>目前<a href="https://github.com/tensorflow/serving/releases">tensorflow serving</a>的docker最新的版本是1.14,但是1.14/1.13是需要CUDA10和cuDNN7.4的支持,我们的环境是CUDA9和cuDNN7.0,所以我们只能选择1.12.3(支持CUDA9里最新的)</p>
<p>关于tensorflow和CUDA和cuDNN的关系,请参考:<a href="https://blog.csdn.net/yuejisuo1948/article/details/81043962">tensorflow CUDA cudnn 版本对应关系</a></p>
<p>未来新机器来了,我就装CUDA10了,用最新的了。</p>
<p>(不过,貌似CUDA9也可以支持tf-serving 1.14,不受影响,tensorflow-gpu 1.14不行而已,好像是哈,懒得去验证了)</p>
<h1 id="模型的导出">模型的导出</h1>
<p>tf-serving要用SavedModel格式,我们往往训练出来的是Checkpoint格式,要转。</p>
<p><a href="https://www.tensorflow.org/guide/saved_model">tensorflow的模型</a>有两种格式:</p>
<ul>
<li>Checkpoint格式,是我们一般保存格式的方式,目前的github上代码都是这种格式</li>
<li>SavedModel格式,是一种独立于语言且可恢复的神秘序列化格式</li>
</ul>
<p>参考:<a href="https://mp.weixin.qq.com/s/GDfOBG-DF5HnlOZXSyf0JQ?">TensorFlow 到底有几种模型格式?</a></p>
<p>Tensorflow Serving必须使用SavedModel格式,所以要转一下:</p>
<p>以CTPN的model转化为例子:</p>
<pre><code> session = tf.Session(graph=g)
saver.restore(sess=session, save_path=ckptModPath)
builder = SavedModelBuilder(savedModelDir)
inputs = {
"input_image": build_tensor_info(input_image),
"input_im_info": build_tensor_info(input_im_info)
}
output = {
"output_bbox_pred":build_tensor_info(bbox_pred),
"output_cls_prob": build_tensor_info(cls_prob)
}
prediction_signature = build_signature_def(
inputs=inputs,
outputs=output,
method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
builder.add_meta_graph_and_variables(
sess=session,
tags=[tf.saved_model.tag_constants.SERVING],
signature_def_map={tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: prediction_signature})
builder.save()
</code></pre>
<ul>
<li>build_tensor_info方法来构建一个<strong>输入</strong>入口名字的绑定,需要传入一个张量,这个张量还是要定义的,同样<strong>输出</strong>也需要这样绑定</li>
<li>基本上就是这样的模板代码,没啥好改的,照着写就成了</li>
<li>add_meta_graph_and_variables的参数tags,好像必须定义成这个SERVING,我尝试改了,报错,后来忙,也没顾上研究了,改回去了</li>
</ul>
<h1 id="模型的使用">模型的使用</h1>
<p>好了,要跑起来了,就是启动谷歌提供的那个封装好tensorflow serving的docker镜像了。</p>
<p>模型使用是一个封装好的谷歌提供的docker image,这个image不允许你修改,只能用。他也提供了可以打开修改的开发版,我没有玩。</p>
<pre><code> # "--runtime=nvidia":启动nvidia-docker,是一种特殊的docker,支持GPU资源管理
docker run \
--runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=1 \
-t --rm \
-p 8500:8500 \
--cpus=10 \
--mount type=bind,source=$CRNN_MODEL,target=/model/crnn \
--mount type=bind,source=$CTPN_MODEL,target=/model/ctpn \
--mount type=bind,source=$CONFIG,target=/model/model.cfg \
tensorflow/serving:$TF_VERSION-gpu \
--model_config_file=/model/model.cfg
</code></pre>
<ul>
<li>runtime=nvidia实际上就是启动了nvidia的docker,当然你可以直接启动nvidia-docker</li>
<li>cpus=10,用cpu的数量,实际上,这个只是说,你可以使用到1000%的cpu使用率,而不是给你分配10个cpu,比如给你分配20个cpu,每个上面都限额到50%的使用率,当然调度细节还是取决于docker自己</li>
<li>model_config_file指定了docker内部的配置文件的路径,这个路径是用mount绑定上去的</li>
<li>e NVIDIA_VISIBLE_DEVICES=1,实际上还是通过制定环境变量的方式,制定使用哪个显卡</li>
<li>p,指定了对外服务的grpc的端口</li>
</ul>
<p>上一步骤中,导出后的模型是这个样子:</p>
<pre><code>└── ctpn
├── 100000
│ ├── saved_model.pb
│ └── variables
│ ├── variables.data-00000-of-00001
│ └── variables.index
├── 100001
│ ├── saved_model.pb
│ └── variables
│ ├── variables.data-00000-of-00001
│ └── variables.index
</code></pre>
<ul>
<li>100000,100001,这个所谓的版本号完全是自己控制的,你也可以写成100,101之类的</li>
<li>但是,tf-serving的docker可当真,他真会按照这个目录中的目录数字编码,找最大的,认为是最新的</li>
<li>这个模型的更新和部署后,你不用管,tf-serving会自动加载最新的对外服务,这个是很牛逼的特性,热部署啊</li>
</ul>
<p>配置文件样例如下:</p>
<pre><code>model_config_list: {
config: {
name: "crnn",
base_path: "/model/crnn",
model_platform: "tensorflow"
},
config: {
name: "ctpn",
base_path: "/model/ctpn",
model_platform: "tensorflow"
}
}
</code></pre>
<p>没啥,就是指定好多个模型的目录,很明了。多模型的方式,就没办法通过docker run的时候灌入,只能靠这种配置文件的方式了。</p>
<h1 id="问题">问题</h1>
<p>本来,git pull安装好tf-serving docker,转好模型格式,然后docker run之后,就可以对外服务了,可是偏偏老天存心折磨我,让我遇到很多坑和问题:</p>
<h2 id="ctc的sparsetensor的问题">CTC的SparseTensor的问题</h2>
<p>CRNN最后一步是ctc推断,得到的是一个SparseTensor,本来,模型转化的时候,把这个输出,通过build_signature_def绑定好就成,模型转化的时候没问题。但是在跑起来的时候,做预测之后,返回给客户端的时候,报错:</p>
<pre><code> File "/app.fast/projects/ocr_tfs/ocr/module/crnn/crnn.py", line 52, in crnn_predict
response = stub.Predict(request, 60.0)
File "/root/py3/lib/python3.5/site-packages/grpc/_channel.py", line 514, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/root/py3/lib/python3.5/site-packages/grpc/_channel.py", line 448, in _end_unary_response_blocking
raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.INVALID_ARGUMENT
details = "Tensor :0, specified in either feed_devices or fetch_devices was not found in the Graph"
debug_error_string = "{"created":"@1568700637.666090704","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1095,"grpc_message":"Tensor :0, specified in either feed_devices or fetch_devices was not found in the Graph","grpc_status":3}”
</code></pre>
<p>这个问题的原因就是,貌似SparseTensor这个张量不在计算图里,我觉得是tf的bug,不过网上有解决方案,就是把SparseTensorf的3个分量分别拆成3个张量,作为输出,绑定到模型输出上:</p>
<pre><code>SparseTensor的3个分量绑定:
output = {
"output_indices": tf.saved_model.utils.build_tensor_info(decoded.indices),
"output_values": tf.saved_model.utils.build_tensor_info(decoded.values),
"output_shape": tf.saved_model.utils.build_tensor_info(decoded.shape),
}
</code></pre>
<p>实际上,原有模型无需重新训练,只要把之前的SparseTensor的3个分量取出来分别绑定,原有代码和模型都是无需调整的。</p>
<p>好吧,就这样忍了,3个输出就3个输出吧,不纠结了。</p>
<p>参考:<a href="https://github.com/tensorflow/tensorflow/issues/22396">Assign the name to SaprseTensor when build_tensor_info of it</a>:“The problem can be solved by exporting the three dense tensor of the Sparse Tensor instead of exporting the Sparse Tensor itself”.</p>
<h2 id="ctc的beamsearchdecoder慢问题">CTC的BeamSearchDecoder慢问题</h2>
<p>CTC的问题,就是慢,开始以为是beam_width的问题,调试了之后,发现确实为1。后来以为是docker的问题,后来发现,就是ctc的beamSearchDecoder慢,谷歌发现有人也反馈慢,<a href="https://github.com/tensorflow/tensorflow/issues/26200">tf.nn.ctc_beam_search_decoder is very slow on tf >=1.4</a>,但是就搜到了这么一篇。</p>
<p>测试了一下之前的tensorflow1.9 vs 1.14版本,都是直接运行模型(不是通过tf-serving)的模型,就是想看看ctc的情况。
写了一个<a href="https://github.com/piginzoo/crnn/blob/convert_tfs/test/test_ctc.py">CTC测试代码</a>,</p>
<blockquote>
<p>tensorflow1.14版本:
batch=128,sequence=50 BeamSearch耗时:18秒
batch=128,sequence=128 BeamSearch耗时:46秒</p>
</blockquote>
<blockquote>
<p>tensorflow1.9版本:
batch=128,sequence=50 BeamSearch耗时:13秒
batch=128,sequence=128 BeamSearch耗时:33秒
batch=128,sequence=64 BeamSearch耗时:33秒</p>
</blockquote>
<p>结论对比1.9,1.14性能下降了。大概下降了30%左右。目前没有分析出是什么原因。</p>
<p>另外,我之前理解beam_width=1的beam_search_decoder就是greedy_decoder的想法是错的,原因是:</p>
<p><img src="/images/20190919/1568873360763.jpg" alt="" /></p>
<p>如图,考虑beam_width=1,你不是从红色里面挑一个最大的就成,而是要算$p(a)*p(\epsilon)+p(a)*p(a)$和$p(a)*p(b)$,要比一下谁大,所以,然后保留谁,所以不是简单的就算。</p>
<p>想明白这事后,我本来想自己实现各beam_width=1的beam_search_decoder来着,不过一搜,有开源的,<a href="https://github.com/githubharald/CTCDecoder.git">CTCDecoder</a>,于是我下来一个,一测,效果其实比tensorflow的ctc要差很多(我就测的是beam_width=1,sequence=128,batch=128,classes=3862),所以,虽然tensorflow1.14的慢很多,也只有忍了。</p>
<h2 id="版本的问题">版本的问题</h2>
<p>之前用的是1.14,直接拉取了最新的,他回到导致
你还必须得pip安装tensorflow-serving-api-gpu版本,因为他会自动关联安装tensorflow-gpu的对应版本,貌似,版本是一一对应的,比如tensorflow-serving-api-gpu:1.14会自动安装tensorflow-gpu:1.14版本,这很恼人,因为会卸载你服务器上的稳定的tensorflow-gpu版本,导致你别的项目的训练出问题。(这里不用吐槽我们为何不用docker隔离训练,你吐槽的对,不过最近不顾不上,回头再搞)。</p>
<p>好吧,最后的方案确定:</p>
<p>tensorflow-serving-api 1.14.0 + tensorflow serving docker 1.14,不考虑tensorflow的低版本了,但是这个环境无法用于训练。</p>
<h1 id="参考">参考</h1>
<p><a href="https://note.qidong.name/2018/11/tensorflow-serving/">https://note.qidong.name/2018/11/tensorflow-serving/</a></p>
【OCR实践系列】EAST理解及实现
2019-08-28T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/08/28/east
<h1 id="1概述">1、概述</h1>
<p>网上文章,很多了,他们讲的我都不想细讲了,可以参考最后的参考文档,我只会谈谈我的一些理解。</p>
<p>是的,奇怪的废话少说,直奔主题吧….</p>
<h1 id="2论文解读">2、论文解读</h1>
<p>先给个下载地址:<a href="https://arxiv.org/pdf/1704.03155.pdf">https://arxiv.org/pdf/1704.03155.pdf</a></p>
<p>说啥pipeline,说白了就是2步就文本检测这事儿搞定,要是你搞过CTPN,就知道丫多繁琐。这两步是啥?</p>
<ul>
<li>一个网络,砰地一声,就检测出每个点是否是文本点,以及他到围绕他的那个框的4个距离</li>
<li>再来一个local aware NMS
完事!</li>
</ul>
<h2 id="21-网络结构">2、1 网络结构</h2>
<p><img src="/images/20190904/1567587434541.jpg" alt="" class="myimg30" />
<img src="/images/20190828/1566983244013.jpg" alt="" class="myimg30" /></p>
<p>这图很多人都讲过了,他们见过的东东,我就不提了,补充我自己的理解:</p>
<ul>
<li>argman大神的代码子用的是resnet V50,无所谓啦,只要这个pretrain网络可以吐出来conv4,conv3,conv2,conv1 4个feature map,而且是每个都是上一个的1/2就成.</li>
<li>左面的图就是<a href="https://blog.csdn.net/nima1994/article/details/82686132">resnet50</a>,可以观察一下哪里让图像变小的,箭头的地方就是变小的地方,有的是pool,大部分是靠stride=2的卷积,而且这个卷积都在第一个block,后面组内重复的block是stride=1了</li>
<li>有个细节,右图中的f4,大小是图像的1/4,而不是原图大小,这个细节很重要,影响代码实现</li>
<li>从最后uppooling+contact后的合成的最后的那个大图中,实际上是512x512x32的那个feature map,到最后的score map/geometry map/angel map,就是绿色=>蓝色的这块是咋做的呢?答案是,用的是一个1x1的卷积实现的
<pre><code class="language-python">F_score = slim.conv2d(g[3],1,1, activation_fn=tf.nn.sigmoid, normalizer_fn=None)
geo_map = slim.conv2d(g[3], 4, 1, activation_fn=tf.nn.sigmoid, normalizer_fn=None) * FLAGS.text_scale
angle_map = (slim.conv2d(g[3], 1, 1, activation_fn=tf.nn.sigmoid, normalizer_fn=None) - 0.5) * np.pi/2 # angle is between [-45, 45]
</code></pre>
</li>
<li></li>
</ul>
<h2 id="22-样本数据">2、2 样本数据</h2>
<p><img src="/images/20190828/1566983699868.jpg" alt="" class="myimg" /></p>
<p>再说说这图,这图是啥啊?是告诉你样本咋做。</p>
<ul>
<li>左上那个黄框是GT(标注),但是真正用的正样本,是绿框,往里缩进了1/3,你问为何,我也不知道,我估计是让这些点更靠里,更可信吧。而且,这样预测的4个值(上下左右)可能才都大小差不多。</li>
<li>最后我们的样本是啥,是5张图,对,6张图,跟输入的数据,原图,大小一样,都是1通道的</li>
<li>b就是一个score map的例子,很直观,但是geometry map就不一样了,每个像素点代表的值是啥呢?是他们到对应位置的长度。啥意思?比如geometry map中的第一张,就是每个像素,到他对应的那个文本框的上边的距离,对,这个geometry map图像中的每个值,都是这个像素距离他对应的文本框上沿的距离。所以,geometry图,4张,分别应该叫“上沿图、下沿图、左沿图、右沿图”,这个理解了,角度图也应该理解。合计,你算算,正好是6张图。</li>
</ul>
<h2 id="23-到底预测了啥">2、3 到底预测了啥</h2>
<p>有个特别浅显的问题?就是,到底EAST预测了啥?</p>
<p>其实,他就是预测了每个像素,对,每个像素,他是不是文本框的点。如果是,那么他到包裹他的文本框的上下左右的距离是多少。注意,这个文本框是一个带角度倾斜的矩形框。</p>
<p>既然每个点都预测一个框出来,那么就会出现矛盾。比如我和你本是挨着的点,可是我预测的到框的距离,和你预测的框的距离,有差异。(本来大家挨的很近,不应该相差太多),这个时候,需要用NMS算法来合并,可是点太多了,主要是NMS搞起来,效率太低了,所以论文里提了个LANMS算法。</p>
<p>最后通过不同点的得到的框,通过LANMS合并后,得到的最后的框,就是我们要的文本检测的框们。</p>
<h1 id="3代码解读">3、代码解读</h1>
<p>说说代码吧,我们的代码在这里,for argman的,<a href="https://github.com/zyh8306/EAST/">传送门</a></p>
<p>我们补充了大量的注释,把我们的理解都写到了里面,应该对你阅读代码很有帮助。但是,有些细节,还是要在这里特殊说明一下。</p>
<h2 id="31-样本准备">3、1 样本准备</h2>
<p>样本准备是第一步,也是代码里写的复杂的,idar.py::generator是入口。</p>
<p><a href="https://github.com/zyh8306/EAST/blob/master/utils/icdar.py">https://github.com/zyh8306/EAST/blob/master/utils/icdar.py</a></p>
<ul>
<li>shrink_poly函数,是论文中说的,将文本区缩小1/3,是为了让正样本置信度更高</li>
<li><code>if tag:cv2.fillPoly(training_mask, poly.astype(np.int32)[np.newaxis, :, :], 0)</code>,这句话是处理那么模糊的框,认为他不是文本框,毕竟,模糊的框,我们也就不勉强了</li>
<li>crop_area方法很诡异,到底是干嘛的呢?其实,就是把框</li>
</ul>
<h3 id="crop_area方法">crop_area方法</h3>
<p><img src="/images/20190904/1567589571373.jpg" alt="" class="myimg30" /></p>
<ul>
<li>把文本框往x轴做投影,再往y轴做投影,投影落到的地方为1,没有落到的位置为0。</li>
<li>然后在0的地方采样,x轴采2个,y轴采2个,然后用这4个点,可以切出一张子图来</li>
<li>这张子图,包含一定数量的文本框,并且,不会把一个文本框切成两半</li>
</ul>
<p><strong>为何要这样做?</strong></p>
<p>我理解,是为了,做样本增强,这样一张图,其实可以被随机分割好多次,相当于多出很多样本</p>
<h3 id="generate_rbox方法">generate_rbox方法</h3>
<p>idar.py::generate_rbox方法是最复杂也是最核心的代码,他负责,从4点的不规则四边形(4个点,8个值),rbox标注,变成6张图:score map(1),角度$\theta$(1),点到框的4个距离AABB(4),合计6个。</p>
<p><img src="/images/20190828/1566987583219.jpg" alt="" class="myimg" /></p>
<p>处理一个4边形的过程,如上图所示:</p>
<ul>
<li>先确定直线$p_0p_1$,叫edge,$p_1p_2$,叫forward</li>
<li>然后看$p_3$和$p_2$离直线$p_0p_1$谁距离远,就选谁,做一条平行线(虚线),叫edge opposite</li>
<li>同理,看看$p_0$和$p_3$,谁离$p_1p_2$远,就通过谁,做一条平乡线(虚线),叫forword opposite</li>
<li>好,这样可以得到一个平行四边形</li>
<li>同理,还可以通过做$p_0p_3$的平行线,再得到一个平行四边形</li>
<li>然后挑一个面积最大的平行四边形出来</li>
<li>最后,做一个内接这个平行四边形的矩形出来</li>
<li>并,计算这个矩形的下边和x周的夹角</li>
</ul>
<p>这里面涉及到一些数学公式,都不难,耐心的对着注释,自己动手画一画,都可以理解,如:</p>
<ul>
<li>计算四边形的面积</li>
<li>如何做缩小四边形的计算(这个没看懂)</li>
<li>如何计算点到直线的距离</li>
<li>如何计算平行四边形的夹角(argtan)</li>
<li>如何计算两条直线的交点</li>
</ul>
<p>需要额外提一句的是:<strong>fit_line函数</strong></p>
<p>他返回的的是3个参数,实际返回的是一个直线的表示。我们都知道直线可以表示成$ax+by+c=0$,他返回的就是$[a,b,c]$,这个需要理解一下。</p>
<h2 id="32-模型构建">3、2 模型构建</h2>
<p><a href="https://github.com/zyh8306/EAST/blob/master/nets/model.py">https://github.com/zyh8306/EAST/blob/master/nets/model.py</a></p>
<p>里面会涉及到resnet50,其实我们也没有细读,大致看了一下,对着网上的resnet50的网络图对照了一下,差不多理解了,就pass了。</p>
<h3 id="model">model</h3>
<p>其中,model方法是核心:</p>
<p><img src="/images/20190904/1567591439518.jpg" alt="" class="myimg30" />
<img src="/images/20190828/1566983244013.jpg" alt="" class="myimg30" /></p>
<ul>
<li><code>end_points['poolx']</code>,这个就是resnet50中返回的feature map。我们一直脑海中有个问题,resnet50,有51层呢,到底哪些层吐出来的张量,喂给了我们的EAST的model,也就是,网络图中的$f1,f2,f3,f4$,其实,就是resnet中的图中的conv2,conv3,conv4,conv5他们的输出</li>
<li>最下面的$f1$是原图大小的1/32;然后上卷积后和$f2$合体,大小是1/16;然后再上卷积后和$f3$合体,大小是1/8;然后上卷积后和$f1$合体,大小是1/4,对!这里有个细节,你得到feature map是<strong>原图的1/4</strong>,这个细节很重要</li>
<li>所以你得到的是的结果是 [W/4,H/4,512],那你如何从这个张量得到最后你想要的6张图的(我们都知道,EAST预测结果是6张图)</li>
<li>实际上,是通过6个核为[1x1],stride=1的卷积得到的,也就是右图中的蓝色框</li>
</ul>
<h3 id="loss">loss</h3>
<p>损失函数,和论文还是有些出入的</p>
<p>首先是,每个像素,是否是文本框内的点的分类的损失函数,按理说,应该是一个二分类,也就是二分类的交叉熵,但是,作者不知何故,改成了dice_coefficient,我也不知作者起这个名字表达啥意思,字面意思是,筛子相关系数。</p>
<blockquote>
<p>这个函数的实现有点意思,作者说,没照着论文里的代码撸,而是换了个思路,
就是看 概率IoU = 交/并,交是所有的概率相加,并是所有的概率相加
这个loss在[-1,1]之间,好吧,就是想知道这个损失反向求导的函数是啥,呵呵</p>
</blockquote>
<p>真心不知道作者是为何要这么干。</p>
<h2 id="33-训练过程">3、3 训练过程</h2>
<p><a href="https://github.com/zyh8306/EAST/blob/master/main/train.py">https://github.com/zyh8306/EAST/blob/master/main/train.py</a></p>
<p>训练过程,没啥特殊的,就是常规的定义好各种summary scalar,准备好训练数据集、验证数据集,然后就可以session.run了</p>
<h3 id="预测后的后处理">预测后的后处理</h3>
<p>在训练的时候,需要验证,验证的时候,要把EAST预测的6张图,变成对应的所有的框,前面算法里面提到了,具体代码是如何实现的呢?</p>
<p>秘密就在eval.py::detect方法!</p>
<p><a href="https://github.com/zyh8306/EAST/blob/master/main/eval.py">https://github.com/zyh8306/EAST/blob/master/main/eval.py</a></p>
<pre><code>text_box_restored = restore_rectangle(xy_text[:,::-1]*4,# 为何要乘以4,上面解释了
</code></pre>
<p>这里说个细节,就是上面这句话,xy_text其实是每个点的坐标,为何要乘以4呢,原因就是,我们的网络得到的图,是原图的1/4,之前谈过这事,所以,这里要把这些坐标,都乘以4。</p>
<p><strong>restore_rectangle_rbox方法</strong></p>
<p>这个方法,是最核心的,里面的一些细节还暂时没搞清楚,大致理解,是做了一个旋转矩阵,然后把得到的根据每个点的4个距离和倾斜角度,得到这个点对应的框的4个点的值。</p>
<p>首先是构建了这样的数组p:</p>
<pre><code> p = np.array([np.zeros(d_0.shape[0]),
-d_0[:, 0] - d_0[:, 2], # d维度是[h*w,4],d_0[:, 0]实际上是降维了[h*w],或者说[h*w,1],实际上得到是矩形的高
d_0[:, 1] + d_0[:, 3], # 矩形的长,维度是[h*w]
-d_0[:, 0] - d_0[:, 2], # 矩形的宽负数,维度是[h*w]
d_0[:, 1] + d_0[:, 3], # 矩形的长,维度是[h*w]
np.zeros(d_0.shape[0]),
np.zeros(d_0.shape[0]),
np.zeros(d_0.shape[0]),
d_0[:, 3],
-d_0[:, 2]])
</code></pre>
<p>观察这个数组,其实可以得到这样的一个数组$[0,-h,w,-h,w,0,0,0,left,]$,而你如果两两一对,进一步可以得到$[(0,h)(w,h),(w,0),(0,0)]$,这个是4个点的感觉,如果你画到坐标轴上,就是如下的一个图:</p>
<p>接下里的rotate_matrix_x,是$[cos\theta,sin\theta]$</p>
<p>旋转矩阵如下:</p>
<pre><code> # [x'] [cos,-sin,0] [x]
# [y'] = [sin, cos,0] * [y]
# [1 ] [0 , ,1] [1]
</code></pre>
<p>也就是,$x’=x*cos\theta - y*sin\theta$,$y’=x*sin\theta + y*cos\theta$。</p>
<p>后续还要经过一个C语言写的lanms的,最终过滤出我们想要的框来,这个就更没有去细看了,感兴趣的同学可以深入去读一读。</p>
<h3 id="验证">验证</h3>
<p>我们给增加了一个validate过程,之前的argman的代码是没有的,其中,我们用得到的框,传入evaluator.evaluate方法,这个方法实际上基于ICDAR2013的官方提供的评测方法[DetEval],<a href="https://wisdomai.xyz/tool/archives/2520">参考</a>。代码也是从官方的代码迁移过来的。</p>
<blockquote>
<p>ICDAR2013则使用了新evaluation方法:DetEval,也就是十几年前Wolf提出的方法。“新方法”同时考虑了一对一,一对多,多对一的情况, 但不能处理多对多的情况。
(作者说,实验结果表示在文本检测里这种情况出现的不多。)</p>
</blockquote>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://www.julyedu.com/course/getDetail/138/">七月在线有个不错的OCR课程</a>,里面的好未来的杨老师讲了EAST,不错</li>
<li>Argman大神的<a href="https://github.com/argman/EAST">Github repo</a>,我们的代码就是fork于他</li>
<li><a href="https://cloud.tencent.com/developer/article/1329171">https://cloud.tencent.com/developer/article/1329171</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/37504120">https://zhuanlan.zhihu.com/p/37504120</a></li>
<li><a href="http://note4lin.top/post/east%E5%8F%8A%E5%BA%94%E7%94%A8/">讲AdvancedEAST的</a></li>
</ul>
美国工厂
2019-08-24T00:00:00+08:00
https://www.piginzoo.com/life/2019/08/24/usa-factory
<p><img src="/images/20190825/1566662532615.jpg" alt="" class="myimg" /></p>
<p>刚刚看了《美国工厂》,感触颇深。</p>
<p>记录片网上有片源,这里不传播盗版,可以看看<a href="https://mp.weixin.qq.com/s/48ZATA0OryYx2rdiJDz9pQ">这篇</a>,了解大概。</p>
<p>中美文化差异啥的这种大的空洞的话题,我不想谈了。我只想从个体的角度说一说。</p>
<p>印象比较深的是,在美国汽车工会的召集的一个很多被解雇的、或者支持成立工会的会议上,组织者的一番话让人感动,他谈到,美国人经过那么多年的努力,终于做到了让资本家学会赚钱的同时,尊重劳动者,做到平衡。这是一个很政治正确的说法,可是现实却是,福耀没有来之前,这两千多人是没有工作的,工作给他们薪水,也给他了他们尊严。他们确实应该“感激”福耀,但是,他们自小就接受的教育里,对任何的强制、管制和威胁,都是不太care的,他们有的人选择了屈服,但是也有相当大一部分人选择了站出来支持成立工会,当然,他们这些人被福耀逐一的开除了。我相信,最后60%支持不建立工会的人群里,相当一部分是因为迫于生存的压力,迫于中方施加的你懂得的压力,才被迫支持。当然,也肯定有一部分人,是发自内心坚定支持的。</p>
<p>想想看,如果换做你,每个月2200美元的薪水,还是为了改善整体工作的氛围和福利,站出来发声,你会选择哪一个,我想绝大部分中国人会选择沉默的。而事实也是,大部分美国人也选择了沉默。是的,他们也是人,是一个需要权衡的理性思考的人,对利益敏感的人。</p>
<p>片中的那个后来的中方总经理,很了解美国人,也很懂得利用美国的资源(为美国反工会的那个咨询组织付了100万美金)来帮助“引导”工人们,多少,纪录片里有些“阴谋”和“手段”的感觉,可是,你再把你换成他,你会怎样?你是曹德旺派来的,被信任的高管,你要对你的老板负责,你要搞定这事,搞定是要超越道德和同情的,况且,你作为中国人,也不认为这些美国佬是值得被同情的,你爬上高管的rule告诉你,干活拿钱,天经地义。</p>
<p>福耀从亏4000万美金到2018年,开始盈利了,这个转变,你是觉得是不是该祝贺他呢?可是他是谁,是曹德旺,还是那个中方高管,还是那些中层的美国、中国管理者,还是2000多个普通工人,那被解雇和离职的几千个人呢?</p>
<p>资本没有人情味,它就是要追逐利润,赤裸裸的挺好,但是,还是要粉饰自己的这种赤裸的贪婪,比如曹对中国员工说,你是要为中国争气,比如中方高管的,one familily。要团结,要洗脑成一样,让员工彻底的放弃思考和不满,变成高效的机器,让那些不适应者淘汰掉,资本本身就应该是这个逻辑。</p>
<p>残酷哈?是的。否则,他不会扭亏为盈。不会在美国,在俄亥俄州立住脚。其实,曹德旺、中方的高管,也是人,也有善良的一面,有人性的一面。但是,他们不得不,自以为的,悲情地,收敛起自己的道德和人性,用军队化的、统一的、威胁的、铁腕的手势,去把这部“机器”调优到最佳,让这个商业机器,变成一个印钞机。至于,生产线上的人,是不是物化,是不是卓别林一样的存在,嗯,“这个问题不是那么重要”,又或,扭亏为盈的一刻的狂喜冲走了那一丝丝的内疚和同情。</p>
<p>有意思的,有一段是镜头转向福建的工厂,美国人以友邦惊诧论的错愕,看着在他们眼里觉着怪诞的一幕幕,早会集体喊号报到,每天12小时的工作,每年春节回家一次,不需要保护的玻璃回收…..,是的,我们都习以为常了,也都心知肚明的明白,这些才是效率和金钱的来源,甚至,打心底的维护这个存在即合理的事实,“不就应该这样努力工作,才能赚取体面的生计么”,别谈什么人权,那些人不来这里打工,连生存的尊严都没有。</p>
<p>我常常在论坛上,看到这类的说法,对强权的深刻理解和支持,又或,对普通劳动者或者受害者的深刻同情和支持,两者都有,还撕咬的很厉害。他们这些人如果没有工作,如何如何。。。他们不是活的好好地么?乱了连起码的生存都是问题。又或,每个个体都应该有自己的人权,都应该得到起码的尊重。</p>
<p>可是,我想,只有自己变成了论坛里面大家说起来的那个代词“他”或者“她们”的时候,真的陷入了他的遭遇和状况里,还跟他有一样的家庭、教育,或者认知的局限性的时候,这种讨论才有意义。真的变成了那个人,可能对他来说,生存就是第一位的,他不理解什么是自己该有的权利,有饭吃就好,能旅游就是天堂。又或者,像那个被解雇的美国人,从小就认为自由之身是高于一切,不允许被别人控制、胁迫,宁可不要这份薪水。又或者,他就是一个自私的人,能月月领到薪水,自己好就可以,根本不在乎别人。这种人虽然你不齿,但是他没有侵害任何人的利益,就是谨慎和本分的活着而已,不会被你忽悠着去支持成立工会,畏缩着躲到人群的、角落里。每个人,对,是每个人,都会有自己的选择和立场,有自己的境遇,你愿意去替他承受他的承受么?如果不能,你的任何议论都是廉价的,无意义的。</p>
<p>是的,人都是一个个个体,是“自私”的。曹德旺是自私的,中国高管是自私的,车间主任是自私的,工人们是自私的,这些人的无数的利益焦灼在一起,形成了某种平衡。就像大自然的和谐一样,是各种残酷自然选择后,形成的某种和谐。正如亚当斯密对经济的看法,自私反倒成为了道德和规范的基础,谁说,自私就不能孕育出公正。</p>
<p>私心构建公正,这听上去很可笑,可是,确实就是构建了西方的价值体系,当然也没有那么简单粗暴,欧美现有的价值体系里,还有继承自亚里士多德就开始的古希腊民主思想,还有基督教义中的很多自我克制和约束,以及新教唤醒的启蒙运动等等,这里就不一一赘述了,直到亚当斯密、洛克、霍布斯、孟德斯鸠等等先哲,才构建出西方现有的价值体系,才有了契约精神下,自私反倒促进公正和牵制。</p>
<p>当然,如果私心和私权,出现野蛮的增长,增长到开始超越这个约束条件的时候,公权就应该适度的干预了,这个也就是政府、工会他们存在的理由,就如同,不能让尾大不掉的行业寡头,去侵害个体劳动者利益的事情发生。这要求利益的各方,企业主、个体劳动者、政府/工会,都要相互理解、妥协、提防、同情,各种交织在一起的情感和理想之后,各方妥协出一个充满智慧的解决方案,尽量做到双赢的局面。当然,公权应该做到适可而止,手不能太长。而且,对公权更应该警惕,因为它更强大,他的能量是远远超过企业的,他一旦强大,不受约束,对其他各方都是灾难。当然,不仅是限制公权,而是,凡是侵害到公众利益,个体的利益的权力和控制的滥用,都要警惕,不仅公权,私权亦然。</p>
<p>世界太大了,人群太大了,回到我自己,做为一个个体。我觉得,我能做的,也只能是保持着自己的一份慈悲心,对任何人不要苛求太多,不要太强的控制欲,不要让自己的欲望和虚荣控制了自己,不要因为压力、责任,甚至正义感,而“不得不”去剥夺别人权利和自由。即使,缺少了这份手腕和强力,让自己做不成很多事,甚至,连体会为多数人谋福祉的机会都没有,也坚守自己的这个理念。</p>
<p>即便是对待那些不上进,不努力,不开窍,甚至,刻意偷懒,“偷奸耍滑”的人,我觉得,我能做的,也只是,劝诫他们,然后离开他们,我觉得,我没有惩罚的权利,每个人,都会为自己的选择,承受相应的后果。或者,我会按照“契约精神”,按照既定的规则,去他适度的惩罚。而当我认为这个规则不合理的时候,我可能都不会去履行这个规则。</p>
<p>对于那些在我的视角里,“迷途”的人们,坚持自己的观点,活在自己的逻辑里的人呢,我觉得,一份谦逊就足够了,越来越觉得,争论价值观的东西,没有任何意义。你活在你的世界里,你没有必要去干扰别人的世界,或者强行把别人拉入你的世界。尊重别人就好,尊重他的价值观,克制的表达就好,注意边界,少一些刺激,控制好情绪。况且,他会变,我也会变,未来是一个未知,一切都是流变的,何必执念那么强呢。</p>
<p>那如果遇到了严重违背我价值观的邪佞小人呢?是该迎头痛击呢,还是应该避而远之呢,又或佛教那样尝试悲悯之心去感化他呢。其实,我也不知道。我也不知道。</p>
<p>说到底,人就是沧海一粟,在历史长河里划过,对绝大部分人来说,这颗流星划过的痕迹,只有你身边的这些人才留意到,所以,很多事儿,执念不用太强,保持一颗悲悯之心和渺小之心,虚怀若谷地去探究自己对这个世界好奇可能时间都远远不够,用心的去热爱和拥抱你认识的那些善良普通的朋友们都远远不够,努力弄出点动静留下自己生命的痕迹的时间都远远不够。</p>
<p>看完这个记录片的想写点什么,可能缺少逻辑,但是,还是想写下一些文字,聊以慰藉自己的内心。</p>
GAN
2019-07-21T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/07/21/gan
<h1 id="概述">概述</h1>
<p>D判别网络和G生成网络,是2个网络,但是给他们接到一起。他们的训练也是分开的,先训练D(这个时候,要固定住G的参数们),让他有足够强的识别生成图片和真实图片的分辨能力,训练好了D,这个时候,G才登场,他尽量训练自己(D在这个时候参数要固定住),可以骗过D,让D觉得他是真实图片,而不是生成图片。这2个过程,也就是先训练D,后训练G,不停的来,到一定阶段,D和G,就训练好了,这个时候的G,就是我们要的一个需要的生成网络。</p>
<p>原始论文:<a href="https://arxiv.org/pdf/1406.2661v1.pdf">这里</a>,<a href="https://blog.csdn.net/wspba/article/details/54577236">中文版</a></p>
<p>有一些问题需要澄清:</p>
<ul>
<li>G的输入是啥?答案是啥都行,比如高斯分布的初始化数据,或者随机初始化的等等。初始化的数据的维度也是无所谓的。别太少就成。</li>
<li>每次训练D和G到什么程度?一般是固定一个固定的次数,训练这么多次,就切换到另外一个,这个次数是一个超参</li>
</ul>
<h1 id="基本原理">基本原理</h1>
<h2 id="恩推倒-8">恩,推倒 8)</h2>
<p>假设生成分布是$P_G(x;\theta)$,真实分布是$P_{data}(x)$</p>
<p>从中真实分布$P_{data}(x)$中采用${x^1,x^2,…,x^m}$,</p>
<p>这是俩分布哈。</p>
<p>那么,我把真实样本(${x^1,x^2,…,x^m}$)带入到生成分布$P_G(x;\theta)$当中,可以求个似然概率吧。</p>
<p>$L=\prod_{i=1}^m P_G(x^i;\theta)$</p>
<p>那么生成分布是要是尽量靠近真实分布的话,那这个似然概率$L$也应该最大吧。然后找出这个使之最大的$\theta$就可以了。</p>
<blockquote>
<p><em>不过,这事真是没太想明白,这里有2个变量,一个是到底是啥分布,第二个是确定分布后的参数,不过,如果是是GAN,您不是默认就认为真实分布就应该是生成分布了吧,那就相当于俩变数里确定了一个,那剩下的就一个了,就是参数$\theta$了啊。恩。。。。这么想,这个似然概率有点道理….恩,可以可以可以可以。<—–你丫嘚啵嘚啵自言自语啥呢╮(╯▽╰)╭</em></p>
</blockquote>
<p>继续继续….推倒</p>
<p>$\theta = \mathop{\arg\max}\limits_{\theta} \prod_{i=1}^m P_G(x_i;\theta)$</p>
<blockquote>
<p>把上面的式子抄下来</p>
</blockquote>
<p>$=\mathop{\arg\max}\limits_\theta \log \prod_{i=1}^m P_G(x_i;\theta)$</p>
<blockquote>
<p>取个log,不犯法</p>
</blockquote>
<p>$=\mathop{\arg\max}\limits_\theta \sum_{i=1}^m \log P_G(x_i;\theta)$</p>
<blockquote>
<p>${x_1,x_2,…,x_m}$来自于真实样本哈,对,你使用真实样本放到了生成的模型里,诡异哈?!我还是那个理解:就是如果咱俩像,那我$P_{data}$的数据代入到你$P_G$里面也应该似然最大</p>
</blockquote>
<p>$\approx \mathop{\arg\max}\limits_\theta E_{x\sim P_{data}} [ \log P_G(x;\theta)]$</p>
<blockquote>
<p>我靠,怎么就约定于了,这画风转变也忒突然了点了吧,李宏毅老师也没有解释,其实这个就是一阶矩估计均值近似于期望的意思,来,看个<a href="https://www.cnblogs.com/tangchong/p/3157710.html">参考</a></p>
</blockquote>
<p>$=\mathop{\arg\max}\limits_\theta \int_x P_{data}(x) log P_G(x;\theta) dx$</p>
<blockquote>
<p>这个没啥,就是标准的期望的原始定义</p>
</blockquote>
<p>$=\mathop{\arg\max}\limits_\theta [ \int_x P_{data}(x) log P_G(x;\theta) dx - \int_x P_{data}(x) log P_{data}(x;\theta) dx ]$</p>
<blockquote>
<p>“接下来,加一项没有什么用的东西”,宏毅老师如是说,确实是,这个骚操作确实对argmax这个求最大没啥影响,因为后一项和参数$\theta$确实没啥鸟关系,但是总是觉得怪怪的,可能也是Ian Goodfollow这种大神的神来之笔吧,丫这么骚操作,就是为了凑KL散度,那你又要问了,为何要凑KL散度,没啥,就是想说明,你从极大似然,居然可以推出一个KL散度,而已。而已?!恩,至少我是这么理解的。</p>
</blockquote>
<p>$=\mathop{\arg\max}\limits_\theta \int_x P_{data}(x) log \frac{P_G(x;\theta)}{P_{data}(x;\theta)}dx$</p>
<p>$=- \mathop{\arg\max}\limits_\theta \int_x P_{data}(x) log \frac{P_{data}(x;\theta)}{P_G(x;\theta)}dx$</p>
<p>$= \mathop{\arg\min}\limits_\theta \int_x P_{data}(x) log \frac{P_{data}(x;\theta)}{P_G(x;\theta)}dx$</p>
<blockquote>
<p>整理一下,我去,这个就是KL散度啊,恩,去复习一下<a href="http://www.piginzoo.com/machine-learning/2018/01/03/cross-entropy-kl">交叉熵、散度</a>概念们</p>
</blockquote>
<p>$=\mathop{\arg\min}\limits_\theta KL(P_{data}\|P_G)$</p>
<blockquote>
<p>结论是啥,我骚推倒一通后,就是想得到一个结论:其实,你呀忙了半天,就是想找一个$P_G$,让他和$P_{data}$越接近越好(KL散度尽量小),你是不是觉得好有道理啊。不够,瞬间,你是不是有一种被忽悠的感觉,“这不是废话么?!我就是要找一个跟真实分布越相近越好的生成模型嘛”,哈哈。对,你反应过来了,Ian Goodfollow,用一堆数学来证明了,这事是可行的而已。</p>
</blockquote>
<p class="red">* 你按照真实分布中的样本带入生成分布中得到似然概率极大化,推出最终这事儿就是使两种分布的KL散度最小。</p>
<h2 id="问题来了咋个找这个p_g">问题来了,咋个找这个$P_G$</h2>
<p>如果这个$P_G$是个具体的分布,而且和真实分布$P_{data}$一致,也就是我们知道他的密度函数,那就好办了,我们就用极大似然,求出对应的参数,这事就结了。</p>
<p>但是,残酷的事实是,你不知道$P_{data}$长什么样子,那么,你也不知道自己该如何准备怎样的一个$P_G$,那怎么办呢?即时我搞出来一个$P_G$,我怎么就能做到让这个$P_G$就和真是分布$P_{data}$很接近呢?en,就是这2个问题:</p>
<ul>
<li>$P_G$应该搞成啥样?</li>
<li>搞出来的$P_G$到底多像真实分布$P_{data}$呀</li>
</ul>
<p>那来吧,我们来尝试解决它:</p>
<ul>
<li>用深度网络来表示$P_G$,恩,神奇的深度网络,理论上可以拟合任意的函数,也即是可以模拟任意的分布,是一个泛函的空间吧,你可以理解。</li>
<li>把$P_G$和$P_{data}$灌给一个分类器,让他来分辨差异性,如果分表不出来的时候,就说明$P_G$非常非常像$P_{data}$了,对,灌给一个分类器D,2分类,灌进去的是生成的样本和真实的样本,分类结果是你们有多像?0是不像,1是完全一样。</li>
</ul>
<p>看这段话,我们可以得出:你只要造一个神迹网络(模拟$P_G$),再采样来一堆的$P_G$生成样本,和一堆的$P_{data}$真实样本,这事貌似就可以干了。</p>
<p>好,那我们把这问题,形式化表达一下:</p>
<p>$G^*= \mathop{\arg\min}\limits_\theta Divergence(P_{data},P_G)$</p>
<p>对,我们就是要找到这样一个$G^*$,为了找到这个最大的G,我们就需要<strong>引入一个判别器 D</strong>,就是上面提到的那个2分类器(像还是不像的分类器),最终的输出是一个sigmod的分类器就可以了,对,不过它其实也是个神经网络,最不过最后的输出是一个2分类(像,还是不像),然后这就变成了一个优化问题,那还是老规矩,交给“梯度下降”大法来搞定了。</p>
<blockquote>
<p>这个时候,我们需要停顿一下,回魂一下。
思考问题的时候,要保持清醒,清醒的知道:我是谁?我从哪里来?我要去往哪里?
那,回到我们这里,我们在干嘛呢?我们是要找一个生成模型$P_G$去尽可能的靠近真实数据$P_{data}$,那么为了做这事,我引入了一个神经网络<strong>$G$</strong>来表示$P_G$,然后我又需要一个神经网络<strong>$D$</strong>来判断我$P_G$是不是越来越靠近真实分布$P_{data}$了。恩,对,就是这么一个事。</p>
</blockquote>
<p><img src="/images/20190825/1566708973251.jpg" alt="" class="myimg" /></p>
<p class="red">* 这是神来之笔啊,Ian Goodfellow“设计”(我认为是灵光乍现)出这么一个结构,用个神网来表达$P_G$,而真实分布无需啥神网表示,而是引入了一个判别器D。这个结构,在我看来,相当屌。</p>
<h2 id="谈谈判别器d">谈谈判别器D</h2>
<p>对,我们就是要构建一个判别器,可以尽可能的分别$P_G$生成的样本,和真实样本$P_{data}$,那我们来单独先看看这个判别器,怎么能做好一个判别器,有个好的判别器,就可以逼着生成器不断改进了。</p>
<p><img src="/images/20190825/1566714645330.jpg" alt="" class="myimg" /></p>
<p>这个判别器,是一个神经网络。既然是神经网络,就得整个损失函数出来吧,这样就可以做梯度下降,做最优化了呀。损失函数来了:</p>
<p>$V(G,D)= E_{x\sim P_{data}} [ \log P_G(x;\theta)] + E_{x\sim P_G} [ \log (1 - D(x))] $</p>
<p>这个式子咋来了?不知道。不过,直观上还是挺好理解的:<strong>如果来源$x\sim 𝑃_{𝑑𝑎𝑡𝑎}$,$D(x)$尽可能高;如果来源$x \sim 𝑃_𝐺$,$D(x)$尽可能低</strong>。</p>
<p>我们的目标呢,就是:</p>
<p>$ \arg \max \limits_D V(D,G)$</p>
<p>对,去找一个<span class="red">牛逼的D</span>,让这个D可以做到,使得$V(D,G)$最大,这里G假设是固定的了,是之前的已经稳定下来的一个生成器,我们的$D$可以最大化,使得我们最能分辨是生成式数据还是真实数据。</p>
<p>来,让我们更详细地分析分析这个式子:</p>
<p>$V(G,D)= E_{x\sim P_{data}} [ \log D(x;\theta)] + E_{x\sim P_G} [ \log (1 - D(x))] $</p>
<p>$= \int_x P_{data} [ \log D(x)] dx + \int_x P_G [ \log (1 - D(x))] dx $</p>
<p>$= \int_x[P_{data} \log D(x)] + \int_x P_G [ \log (1 - D(x))]dx $</p>
<p>这几步没啥,我们就是要让这个式子最大化,接下来要变态了:</p>
<p>宏毅老师说,为了$max V(G,D)$,G现在已经固定下来了,这个时候就是要找一个$D^*$,使得$ \arg \max \limits_D V(D,G)$,那咋玩呢?恩,这么玩:</p>
<p>我让上面的积分式中的每一项都最大,宏毅老师的说法是,给定某一个$x$,我觉得都是一个意思:也就是让积分项中的$P_{data} \log D(x)] + \int_x P_G [ \log (1 - D(x))$最大,这个项中,假设某一个x确定,那么变得就是一个$D$,$D$是啥,是一个函数,是一个密度函数,这事貌似就变成了一个泛函问题了,就是找到这么一个$D^*$,让这项最大化。</p>
<blockquote>
<p>我理解,宏毅老师想表达的是,积分项里面,对每一个$x$,都可以选择一个$D$,让这项最大,那么积分起来,也就是每个$x$的项都加起来,也一定是最大,也就是满足了 $ \arg \max \limits_D V(D,G)$。可是,我总是觉得有些追追不安,你$x1$可以找到一个$D_1$可以使得这个式子最大,而$x2$又可以找到一个$D_2$,可是谁说$D_1,D_2$就一样呢,你没法让两者,甚至更多者统一成一个$D$呀。你这么推导,是不是,牵强呢。有时间的话,得去找Ian Goodfellow的论文看看,看看他怎么“自圆其说”的。</p>
</blockquote>
<p>如果按照上面的思路继续往下,其实,就简单了:</p>
<p>就是优化这个式子:$P_{data} \log D(x)] + \int_x P_G [ \log (1 - D(x))$,寻找一个最优的$D$,称之为$D_*$。这个式子里,变元只有不确定的$D$,嗯,就是个泛函问题了。宏毅老师的推导也简单粗暴:</p>
<p>$P_{data}(x) logD(x) + P_G(x) \log (1 - D(x)$,对应:</p>
<ul>
<li>$P_{data}(x)$ => a</li>
<li>$log D(x)$ => D</li>
<li>$P_G(x)$ => b</li>
</ul>
<p>这个式子就变成了:$f(D)=a*log (D) + b * log(1-D)$</p>
<p>然后对$D$求偏导,求出最大值$D^*$:</p>
<p>$\frac{d(f(D))}{dD}= a * \frac{1}{D} + b * \frac{1}{1-D} =0$</p>
<p>然后解出来$D^*$:</p>
<p>$D^* = \frac{a}{a+b} = \frac{P_{data}(x)}{P_{data}(x)+P_G(x)}$</p>
<p>好,既然算出了每项中使之最大的$D^*$,那么把这个$D^*$带回到之前的$V(G,D)$中,去求求$V(G,D)$的最大值吧:</p>
<p>$V(G,D)= \int_x[P_{data} \log D(x)] + \int_x P_G [ \log (1 - D(x))]dx $</p>
<p>$= \int_x[P_{data} \log \frac{P_{data}(x)}{P_{data}(x)+P_G(x)}] + \int_x P_G [ \log (1 - \frac{P_{data}(x)}{P_{data}(x)+P_G(x)})]dx $</p>
<p>$= \int_x[P_{data} \log \frac{1/2 * P_{data}(x)}{(P_{data}(x)+P_G(x))/2}] + \int_x P_G [ \log (1 - \frac{1/2 * P_{data}(x)} {(P_{data}(x)+P_G(x))/2})]dx $</p>
<p>$=
\int_x P_{data} \log * \frac{1}{2} +
\int_x[P_{data} \log \frac{P_{data}(x)}{(P_{data}(x)+P_G(x))/2}] +
\int_x P_G \log * \frac{1}{2} +
\int_x P_G [ \log (1 - \frac{P_{data}(x)} {(P_{data}(x)+P_G(x))/2})]dx
$</p>
<p>$= 2log \frac{1}{2} +
\int_x[P_{data} \log \frac{P_{data}(x)}{(P_{data}(x)+P_G(x))/2}] +
\int_x P_G [ \log (1 - \frac{P_{data}(x)} {(P_{data}(x)+P_G(x))/2})]dx
$</p>
<p>$= 2log \frac{1}{2} +
\int_x[P_{data} \log \frac{P_{data}(x)}{(P_{data}(x)+P_G(x))/2}] +
\int_x P_G [ \log (\frac{P_G(x)} {(P_{data}(x)+P_G(x))/2})]dx
$</p>
<p>$= 2log \frac{1}{2} +
KL\left(
P_{data} \| \frac{P_{data}(x)+P_G(x)}{2}
\right) +
KL\left(
P_G \| \frac{P_{data}(x)+P_G(x)}{2}
\right)
$</p>
<p>$= 2log \frac{1}{2} + 2JSD(P_{data}\|P_G)$</p>
<p>哈,有点乱!是吧。没事,你自己也推一遍吧。我是老老实实的推了一遍,一点也不难,其实,主要工夫都花在latex的排版上了,很多推导看上去挺复杂,其实就是个机械活动,一步步的推出来就好。</p>
<p>关键还是别迷失,我是谁?我从哪里来?我要去往哪里?恩,我在干嘛呢。必须回顾一下:</p>
<blockquote>
<p>我是在求$V(G,D)$的最大值呢,我让每一项都最大,然后把由一项导出的最大值$D^*$带回到$V(G,D)$,得到了$V^*(G,D)$:</p>
</blockquote>
<p>$ V^*(G,D) = 2log \frac{1}{2} + 2JSD(P_{data} \| P_G) $</p>
<p class="red"> * 我们在让判别器牛逼之极(最优化)(这个时候G固定),居然发现,损失函数居然是一个$P_G$和$P_{data}$的JS散度,她的最大值$V(G,D^*)$就是一个Divergence -- JS Divergence</p>
<p>JSD,其实就是<a href="https://zxth93.github.io/2017/09/27/KL散度JS散度Wasserstein距离/index.html">JS散度</a>。嗯,嗯,你没有看错,最后这个最大值居然就是这个$V(G,D)$最后居然就是JS divergence(JS散度)。<a href="https://zxth93.github.io/2017/09/27/KL散度JS散度Wasserstein距离/index.html">JS散度</a>是什么鬼来着?其实很简单,就是两个分布的a->b的KL散度和b->a的KL散度的平均。这样避免KL散度有方向性的问题。</p>
<p><strong>$V(G,D)$是什么来着?估计你都忘了。我提醒你一下,是判别器$D$的最大值,就是说,你这个判别器,尝试去判别生成器生成的样本$P_G$和真实样本$P_{data}$,你的极大值,也就是你最牛逼的判断力,其实就是两个分布的JS散度值,这事说明了什么?什么也不说明,哈哈。只是告诉你一种直觉,冥冥之中自有安排。</strong></p>
<h2 id="回到求解生成器g的上面来">回到求解生成器G的上面来</h2>
<p>前面提过这个公式:$G^*= \mathop{\arg\min}\limits_\theta Divergence(P_{data},P_G)$,记得吧,这是啥来着?是生成网络G,孜孜以求的目标。就是要找到这么一个G,可以让G的分布$P_G$和真实数据的$P_{data}$的可衡量的距离,尽量的小。</p>
<p>我们也尝试探讨了,对某个固定下来的G来说,我去寻找一个判别器$D_*$,可以让$V(G,D)$那个损失函数得到最大值,从而让这个D足够牛逼,可以分辨G出来的假东东和真实的数据。而且,这个最大值,其实就是$P_G$和$P_{data}$的JS散度值。</p>
<p>好啦,把这俩事儿,接到一起,其实就是Ian Goodfellow的GAN论文里的那个著名的GAN的损失函数:</p>
\[\min_{G} \max_{D} V\left(D, G\right) = \mathbb{E}_{\boldsymbol{x} \sim p_{data}{\left(\boldsymbol{x}\right)}}{\left[\log D\left(\boldsymbol{x}\right)\right]} + \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}\left(\boldsymbol{z}\right)}{\left[\log \left(1 - D\left(G\left(\boldsymbol{z}\right)\right)\right)\right]}\]
<p>也就是,先固定G优化D,使这个式子最大;然后再固定D优化G,使得这个式子达到最小;</p>
<p><img src="/images/20190825/1566738436112.jpg" alt="" class="myimg30" />
<img src="/images/20190825/1566737524448.jpg" alt="" class="myimg30" /></p>
<p>宏毅老师在这块花了不少口舌,他其实就是尝试解释,$\arg\max\limits_D V(G,D)$,就是在衡量$P_G$和$P_{data}$的Divergence,找到了$D^*$,再去$\arg\min\limits_D V(G,D)$的过程。</p>
<p>左图就是说,你全局假设只有3个G,就从这里面挑一个最好的就成。那你先去看每个G,他对应的$D^*$得到的$V(G,D^*)$是多少,这个时候,这个$V(G,D^*)$就是$P_G$和$P_{data}$的散度距离。然后比较这3个G的$V(G,D^*)$,就是最好的那个$G^*$。</p>
<p>右图,把这个过程进一步细化,变成不断迭代的过程,特别解释了在求解$G^*$的时候,需要优化的式子里面包含一个max,包含max的优化求解有些复杂,需要分段计算梯度值,我理解,大致就是这个细节或者说是难点。</p>
<p>这里,宏毅老师特别强调了一个细节,就是你做梯度下降的时候,你是假设G不是剧烈变化的:</p>
<p><img src="/images/20190825/1566738996038.jpg" alt="" class="myimg30" /></p>
<p>如图,左图的蓝色,是上一个迭代的D,你算了他的最大值,也就是$V(G_0,D_0^*)$,那个最大值(绿色虚线),就是就是$P_G$和$P_{data}$的散度距离 – JS散度,然后你对G做了一个梯度下降,使之成为了另外一个G:$G_1$(G其实是个泛函了,呵呵,不过用神经网络表示他你也不用太纠结了),别忘了,你的初衷是$G^*= \mathop{\arg\min}\limits_\theta Divergence(P_{data},P_G)$,如果$G_0$和$G_1$变化剧烈,就像上图一样,那你用的那个D,也就是$D_0^*$,已经不是$V(G_1,D)$对应的最大值了呀,人家的是$D_1^*$,不是最大值,这个绿线就不再表示的是JS散度了啊,那完蛋了,这事没的玩了。不过,别担心,宏毅老师的解释是,你做的G的梯度下降,会非常的小的$\delta$变化,这样的话,我们还认为变化后的$G’$,他的最大值还在$D_0^*$就好。</p>
<p>这样,你就可以放心的更新一遍G的参数了。所以,这也要求你不要太剧烈更新G。实际上,这个细节也深深影响到了后面的训练策略。</p>
<p>总之,宏毅老师废了不少口舌,来讲这个过程。其实,都是在帮着解释Ian Goodfellow的那个著名的GAN损失函数,看着是一个式子,但是其实,他是一个动态的公式,固定一个,训练另外一个,argmax、argmin,不断地交替:(恩,再放一遍这个著名公式)</p>
\[\min_{G} \max_{D} V\left(D, G\right) = \mathbb{E}_{\boldsymbol{x} \sim p_{data}{\left(\boldsymbol{x}\right)}}{\left[\log D\left(\boldsymbol{x}\right)\right]} + \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}\left(\boldsymbol{z}\right)}{\left[\log \left(1 - D\left(G\left(\boldsymbol{z}\right)\right)\right)\right]}\]
<p class="red">* 这段总结一下,就是,要是你G每次梯度下降的别太厉害,就是得到的新的G'基本上变化不大,还是近似于G,的前提下:D的最大化,那么这种策略,在这个Ian Goodfellow设计出的这个网络中,就是在让$P_G$和$P_{data}的JS散度缩小的过程,就是让我(生成用的分布$P_G$)不断概率似然真实分布$P_{data}$的过程,也就是$P_G$越来越像$P_{data}的过程。$</p>
<p><em>不过,之前您不是推导是KL散度呢,现在怎么变成JS散度了呢,而且后面还有各种散度,比如WGAN都可以呢?恩,我也不知道,我也迷惑着这点呢?</em></p>
<h2 id="好啦实操训练了">好啦,实操训练了</h2>
<p>实际训练的时候,你怎么算这两个期望呢?那只好靠采样了,</p>
\[V(D, G) =
\mathbb{E}_{\boldsymbol{x} \sim p_{data}{\left(\boldsymbol{x}\right)}}{\left[\log D\left(\boldsymbol{x}\right)\right]} + \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}\left(\boldsymbol{z}\right)}{\left[\log \left(1 - D\left(G\left(\boldsymbol{z}\right)\right)\right)\right]}\]
<p>在生成器G固定下来的时候,就变成了</p>
\[\arg\max\limits_D
\tilde{V} =
\frac{1}{m} \sum\limits_{i=1}^m log D(x^i) +
\frac{1}{m} \sum\limits_{i=1}^m log (1 - D(\tilde{x}^i))\]
<ul>
<li>${x_1,x_2,…,x_m}$是从真实样本$P_{data}$中采样的</li>
<li>${\tilde{x}_1,\tilde{x}_2,…,\tilde{x}_m}$是从$P_G$产生的样本中采样的</li>
</ul>
<p>然后你就要把$\tilde{V}$最小化,这件事,李宏毅老师说,就相当于是train一个这2个类别的分类器,这个其实不太理解,我还专门去看了看<a href="https://blog.csdn.net/chaipp0607/article/details/78082154">逻辑回归这种二分类器的损失函数</a>,长的也不太一样。不过,从直观上理解,这事倒是可以理解的。宏毅老师也没打算推导,我也就不纠结了。</p>
<div align="center" style="font-weight:bold;font-size:medium;">GAN算法</div>
<table align="center" width="70%">
<tr style="border:3px solid #000;">
<td style="padding:20px;">
初始化 $\theta_d$ for D( discriminator) , $\theta_g$ for G( generator)<br /><br />
在每次迭代中:<br /><br />
1. 从数据集 $P_{data}(x)$中sample出m个样本点${x^1,x^2,...,x^m}$,这个m也是一个超参数,需要自己去调。<br /><br />
2. 从一个分布(可以是高斯,正态..., 这个不重要)中sample出m个向量${z^1,z^2,...,z^m}$<br /><br />
3. 将第2步中的$z$作为输入,获得m个生成的数据${\tilde{x}_1,\tilde{x}_2,...,\tilde{x}_m}(\tilde{x}_i=G(z^i))$<br /><br />
4. 更新discriminator的参数 $\theta_d$ 来最大化$\tilde{V}$, 我们要使得$\tilde{V}$越大越好,那么下式中就要使得$D(\tilde{x}^i)$ 越小越好,也就是去压低generator的分数,会发现discriminator其实就是一个二元分类器:<br />
* $Maxmize(\tilde{V} =
\frac{1}{m} \sum\limits_{i=1}^m log D(x^i) +
\frac{1}{m} \sum\limits_{i=1}^m log (1 - D(\tilde{x}^i))
$<br />
* $\theta_d \gets \theta_d + \eta \nabla \tilde{V}(\theta_d)$ ($\eta$也是超参数,需要自己调)<br /><br />
1~4步是在训练discriminator, 通常discriminator的参数可以多更新几次<br /><br />
5. 从一个分布中sample出m个向量 ${z^1,z^2,...,z^m}$,注意这些sample不需要和步骤2中的保持一致。<br /><br />
6. 更新generator的参数[公式] 来最小化:<br />
* $
\tilde{V} =
\frac{1}{m} \sum\limits_{i=1}^m log (1 - D(G(z^i)))
$<br />
* $\theta_g \gets \theta_g + \eta \nabla \tilde{V}(\theta_g)$
<br /><br />
5~6步是在训练generator,通常在训练generator的过程中,generator的参数最好不要变化得太大,可以少update几次
</td>
</tr>
</table>
<ul>
<li>恩,是的G不要更新太剧烈(原因前面解释过,变化剧烈,max V就不是js散度了)</li>
<li>反倒是D,可以多更新几次</li>
</ul>
<h1 id="难道只有js散度">难道只有JS散度?</h1>
<p>咱们前面证明过,寻找$P_G$的过程,就是让$P_G$和$P_{data}$的某种divergence变小的过程(其实只给了一个KL散度,但其实可以扩展成任何的divergence,宏毅老师专门讲了一节课<a href="https://www.bilibili.com/video/av24011528/?p=5">fGAN</a>,我纠结要不要写写fGAN呢,….,hmmmmmmm,再说吧),现在我们就只有JS散度,JS散度好不好呢?</p>
<h2 id="js散度哪不好">JS散度哪不好</h2>
<p>先说结论,不好!</p>
<p>李宏毅在关于<a href="https://www.bilibili.com/video/av24011528/?p=6">WGAN课</a>中讲了大半节课,我还去寻找了他说的论文读了读<a href="https://arxiv.org/pdf/1904.08994.pdf">From GAN to WGAN</a>,下面我来大白话解释解释,我喜欢大白话,话糙理不糙,直奔主题,第一性原理(你丫怎么这么贫拿):</p>
<p>文中和课中,给了一个例子,其实就是一个例子,文中更详细一些:</p>
<p>就是俩分布$P$和$Q$,很极端的,x定义域一个在0,一个是在$\theta$,y是[0~1]均匀分布的,这么俩变态分布。这么设计就是想演示俩分布不重合的时候,JS散度的特殊性。(注意哈,y不是概率密度的值,它也是随机变量,这是个2维的概率分布)</p>
<p><img src="/images/20190831/1567221028993.jpg" alt="" class="myimg30" /></p>
<p>$\forall (x,y)\in P x=0 , y\sim U(0,1)$</p>
<p>$\forall (x,y)\in Q x=\theta, 0\leq\theta\geq1 , y\sim U(0,1)$</p>
<p>好啦,看看俩人$P、Q$的KL、JS散度:</p>
<p>$KL(P\|Q) = \sum\limits_{x=0,y\sim U(0,1)} 1 \cdot log \frac{1}{0} = + \infty$</p>
<p>$KL(Q\|P) = \sum\limits_{x=\theta,y\sim U(0,1)} 1 \cdot log \frac{1}{0} = + \infty$</p>
<p>那,JS散度呢?</p>
<p>JS散度公式是啥来这:</p>
<p>$JS(P,Q) = \frac{1}{2} \left( KL(P\|\frac{P+Q}{2}) + KL(Q\|\frac{P+Q}{2}) \right)$</p>
<p>带入一算,得到:</p>
<p>$JS(P,Q) = \frac{1}{2} \left(
\sum\limits_{x=0,y\sim U(0,1)} 1 \cdot log \frac{1}{1/2} +
\sum\limits_{x=\theta,y\sim U(0,1)} 1 \cdot log \frac{1}{1/2}
\right)
= log2
$</p>
<p><img src="/images/20190831/1567222665752.jpg" alt="" class="myimg30" /></p>
<p>那么,问题就来了,如图所示,只要你两个分布靠的很远,即时你们慢慢挪近了,你们的JS散度,还是log2,直到你们相交。</p>
<p>可是,在高维空间里,大部分的数据其实都集中在一个manifold(流形)上,你采样的真实样本,和生成样本,很有可能,而且,大部分时候是天各一方,木有交集的。那,你求他们的JS散度当做损失函数,还梯度下降个屁啊。</p>
<p>所以,我们继续另外一个方法,来让我们两颗心靠近的时候,可以给我们一个客观的逐渐贴近的衡量。这个时候,TA来了,她就是WGAN。</p>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<p>ae4902a73378fdf69b0b8a0b5fc349a7684dc811</p>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
<h2 id="wgan">WGAN</h2>
<p>WGAN是一个真心不懂的算法,他是要找从一个分布,移动到另外一个分布的距离,就是宏毅老师说的把一个分布土堆,推成另外一个分布土堆的形象比喻。他又把这事变成了一个二维矩阵求解的问题,然后又把二维矩阵求解变成一个最优化问题,这个就是WGAN大致的思路。</p>
<p>我其实也没有纠结这个算法,因为,后面你会看到,你不会去真正去求解这个最优化算法,而是,通过某种方法,可以近似的进行求解就可以了。</p>
<p>以下这些图摘自宏毅老师的<a href="http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2018/Lecture/WGAN%20(v2).pdf">WGAN PPT</a>:</p>
<p><img src="/images/20190831/1567223365069.jpg" alt="" class="myimg30" /></p>
<p><img src="/images/20190831/1567223423359.jpg" alt="" class="myimg30" /></p>
<p><img src="/images/20190831/1567223458954.jpg" alt="" class="myimg30" /></p>
<p>回到我们的场景,我们要干嘛来着?</p>
<p>我们要求$P_G$和$P_{data}$的距离,之前用的JS散度,现在换成了WGAN散度,然后我们使之最大化,从而去优化判别器网络,记得吧。</p>
<p>$V(D, G) = \max \limits_{D \in 1-Lipschitz} \left\{ E_{x \sim P_{data}}[D(x)] - E_{x \sim P_G}[D(x)] \right\}$</p>
<p>这里啥叫1-Lipschitz,为何用这个样子的一个式子,就可以让损失函数变成WGAN距离,宏毅老师说,忒复杂,不给出证明了,我选择放弃也,哈哈。</p>
<p>稍微解释一下<strong>1-Lipschitz</strong>,这玩意是一种叫Lipschitz约束的一种特例情况,
$\| f(x1) - f(x2) \| < K\| x1 - x2 \|$,当K=1的时候,就是1-Lipschitz约束。</p>
<p>再品一下这事儿,就是说,你找的那个D,要满足1-Lipschitz的约束,这样再用上面这个$V(D,G)$式子求出最大值的过程,就是在缩小Wasserstein距离的过程。</p>
<h2 id="wgan带来的算法变换">WGAN带来的算法变换</h2>
<h2 id="wgan-gp">WGAN-GP</h2>
<h1 id="gan使用的神经网络改进">GAN使用的神经网络改进</h1>
<p>之前光顾着讨论如何衡量$P_{data}$和$P_G$啦,还没怎么讨论过,生成网络$G$和判别网络$D$,到底用啥?是全连接的?还是长的是别的模样呢?好,那我们来说说这块:</p>
<h2 id="dcgan">DCGAN</h2>
<p>生成网络$G$还有判别网络$D$都是CNN(卷积神经网络),对,这玩意就是DCGAN了。</p>
<ul>
<li>不要pooling层了,pooling层啥参数都没用,还损失了很多信息,不好,我们无论是在生成的时候(图变大),还是判别的时候(图变小),都用卷积。不过一般意义都认为卷积可以让图变小,但是卷积还能图变大呢?!恩,可以的,后面的微步幅度卷积(fractionally strided convolution)可以办到,一会儿再说。</li>
<li>另外,一般典型那几个CNN网络,还需要一个FC(全连接)层,恩,去掉,不要了</li>
<li>另外$G$网络的激活函数改成$Relu->tanh$,$D$网络的激活函数从$Relu->LeakyRelu$</li>
</ul>
<p>来,看一个更形象的图,这图是个讲DCGAN的文章都配:</p>
<h3 id="生成网络g网络图">生成网络$G$网络图</h3>
<p><img src="/images/20190831/1567265547255.jpg" alt="" class="myimg" /></p>
<p>这个网络里还是有一些细节要说的:</p>
<ul>
<li>输入是个100维度的高斯分布的z,怎么就变成了4x4x1024的feature map了呢?全连接啊,所以,得这两者之间,要有一个100x4x4x1024=1638400,大约164万个参数,乖乖</li>
<li>你看,4个卷积,1个全连接,不是绝对的,如果数据复杂且分辨率要求高,那就多加几个卷积,否则,就减少两个</li>
</ul>
<h3 id="fractionally-strided-convolution微步幅度卷积">fractionally strided convolution(微步幅度卷积)</h3>
<p>这玩意就是上面说的,可以把feature map卷大的,$G$网络里用的,其实一点也不复杂。<a href="https://blog.csdn.net/stalbo/article/details/79359095">这篇</a>讲的挺好的,还推到了一下数学上严谨的表达,用矩阵相乘的方式表达,感兴趣的同学可以细读。</p>
<p>一图胜千言,可耻的盗图一下:</p>
<p><img src="/images/20190831/20180301140406091.gif" alt="" class="myimg25" />
<img src="/images/20190831/20180301140711767.gif" alt="" class="myimg25" /></p>
<p>嗯,就是这样的卷的,下面的蓝色是输入,上面的墨绿是输出,这两种方法都可以,您二选一就成,明白了吧。</p>
<h3 id="判别网络d">判别网络$D$</h3>
<p>这个真心没啥好说的,就是个二分类判别器,输入是一张3通道的图,输出是2分类的判别,觉得是真图片为1,觉得是假的为0。中间,就是个CNN的卷积网络,用VGG、Resnet啥的都应该没问题。只不过有时候灌入真样本,有时候灌入假样本(也就是固定G,生成的样本)。</p>
<p>至于按照啥卷积核来搞,我没去看论文,估计就是跟$G$反过来就成,我是说卷积核大小和数量。</p>
<h1 id="各种的gan干mathopganlimitsbackprime">各种的GAN(干$\mathop{gan}\limits^\backprime$)</h1>
<p>前面理论忒枯燥,我对GAN都不想干了,没兴趣了。还是直接说应用吧,看看到底这玩意怎么玩,这部分好玩。</p>
<h2 id="cgan条件gan---conditional-gan">CGAN(条件GAN - conditional GAN)</h2>
<p>这玩意好玩!你说段文字,GAN帮你生成一个文字描述的图片。好玩吧。比如,你输入一个“好高的大楼”,GAN一会儿就给你憋出一张高楼的图片,屌爆了</p>
<p><img src="/images/20190901/1567267907593.jpg" alt="" class="myimg" /></p>
<p>又是一图胜千言,不过,还是得嘚啵嘚啵:</p>
<ul>
<li>原始GAN是输入一个随机变量z,这里还要多输入一个你的句子(一般都要先embedding好),然后你生成一张假图片</li>
<li>判别的时候,过去就是输入一张图就可以,这图是生成的,也可以是真实图片,反正就是让判别器判别呗,现在呢,除了输入图片,还要把你的那个句子输入进去</li>
</ul>
<p>简单吧,这思路真的是简洁,献上膝盖。</p>
<p>现在判别器要判别:</p>
<ul>
<li>
<p>文字是“火车”,图也是火车真图,判别为真
(<img src="/images/20190901/1567320267648.jpg" alt="" width="5%" />,”火车”)=> 1</p>
</li>
<li>
<p>文字是“猫”,即时图是火车真图,判别也是假
(<img src="/images/20190901/1567320267648.jpg" alt="" width="5%" />,”猫”)=> 0</p>
</li>
<li>
<p>文字是“火车”,但是图不是火车,或者生成的是火车但是不清楚、模糊,也判断为假
(<img src="/images/20190901/1567320299220.jpg" alt="" width="5%" />,”火车”)=>0 或者(<img src="/images/20190901/1567320737048.jpg" alt="" width="5%" />,”火车”)=>0</p>
</li>
</ul>
<h3 id="算法">算法</h3>
<p><img src="/images/20190901/1567320909724.jpg" alt="" class="myimg" /></p>
<h3 id="损失函数">损失函数</h3>
<p>损失函数,跟之前的GAN不太一样了,多了最后一项,就是输入分类和真实负样本,判别器也应该给越小越好的分数:</p>
<p>\(\arg\max\limits_D
\tilde{V} =
\frac{1}{m} \sum\limits_{i=1}^m log D(c^i,x^i) +
\frac{1}{m} \sum\limits_{i=1}^m log (1 - D(c^i,\tilde{x}^i)) +
\boldsymbol{\frac{1}{m} \sum\limits_{i=1}^m log (1 - D(c^i,\hat{x}^i))}\)</p>
<ul>
<li>$c^i$是条件,是分类向量或者词、句嵌入</li>
<li>$x^i$是真实图像,而且是和条件$c^i$相符的正样本</li>
<li>$\tilde{x}^i$是生成网络$G$生成图像</li>
<li>$\hat{x}^i$是真实的图片,但是他们和条件$c^i$不一致,属于负样本</li>
</ul>
<h2 id="cyclegan">CycleGAN</h2>
<p>cycle GAN是用来做风格迁移的。</p>
<p><img src="/images/20190905/1567690623117.png" alt="" class="myimg" /></p>
<p>我们可以还是研习GAN的思路,不过这次,我们传的不是一个正太分布的随机变量了,而是一张图,然后我们的真实数据,变成了你想学习的风格画作,然后你就train就可以。宏毅老师说,如果生成网络比较浅,应该就可以实现这个效果,但是,如果比较深的话,这个结构会导致一个问题,就是生成网络会直接生成一张固定的真实画作,然后就总是骗过判别器了。</p>
<p>解决这个问题的办法,就是cycle GAN。</p>
<h1 id="各种玩法">各种玩法</h1>
<h2 id="图像生成">图像生成</h2>
<h2 id="风格迁移">风格迁移</h2>
<h2 id="stackgan">StackGAN</h2>
<h1 id="实战一把">实战一把</h1>
<p>耍一耍宏毅老师的,二次元头像生成</p>
<h1 id="参考">参考</h1>
<h2 id="教程们">教程们</h2>
<ul>
<li><a href="https://www.bilibili.com/video/av24011528">宏毅老师的GAN讲座</a>,依然逗逼,通俗易懂。还有这个宏毅老师的<a href="http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html">课件</a></li>
<li><a href="https://space.bilibili.com/288145541/channel/detail?cid=48325">中科院的一个系列讲座</a>,说实话讲的一般</li>
<li><a href="https://www.bilibili.com/video/av26994015/">某培训机构的讲座</a>,讲的一般,不过有了胜于无</li>
<li><a href="https://pan.baidu.com/s/1Btp0K5OshPTn75rIhHoiFg">《生成模型—生成对抗网络》- 百度云盘</a> 提取码: 8gqn,一位大神写的小书</li>
<li><a href="https://echenshe.com/share/dls/">一个很全的GAN教程</a>,gitbook的,很方便在线学习</li>
<li><a href="https://json0071.gitbooks.io/deeplearning/gan.html">GAN的资料整理</a>,一个网友整理的,很丰富</li>
<li><a href="https://zning.me/15606648118087.html">GAN 论文合集</a>,看上去很多屌,不过估计很少有人都去读,权当当个检索索引吧,万一需要看呢。</li>
<li><a href="https://github.com/Morde-kaiser/LearningNotes/blob/master/GAN-Overview-Chinese.pdf">万字综述之生成对抗网络 PDF</a>,<a href="https://zhuanlan.zhihu.com/p/58812258">知乎在线阅读版</a>,小哥阅读一个GAN综述文献后的总结,良心之作</li>
</ul>
<h2 id="小文和资源们">小文和资源们</h2>
<p>过程中,读到的排版又漂亮,内容又干货的小文,忍不住bookmark下:</p>
<ul>
<li>一个很整洁的博客,介绍GAN的<a href="https://leovan.me/cn/2018/02/gan-introduction/">小文</a>,很喜欢</li>
<li>各种GAN,<a href="https://deephunt.in/the-gan-zoo-79597dc8c347">GAN zoo</a>,太多了,多到我密集恐怖了,<a href="https://zhuanlan.zhihu.com/p/33658205">知乎</a>上也有一个</li>
<li>跟上面一篇一样,<a href="https://github.com/zhangqianhui/AdversarialNetsPapers">这个 repo</a>多了代码</li>
<li>10个明星GAN的<a href="https://mp.weixin.qq.com/s?__biz=MjM5MTQzNzU2NA%3D%3D&idx=1&mid=2651662154&sn=44d09ee2beeca8f50415acfc06a12a1a">讲解</a></li>
</ul>
架个v2ray
2019-06-04T00:00:00+08:00
https://www.piginzoo.com/tech/2019/06/04/v2ray
<p>这几天墙貌似升级,之前的SS全部被封杀,没办法,只好v2ray一把了。把整个历程记录一下,以备今后架设使用。顺道感谢一下,万能的胖仔,为我提供技术支持。</p>
<p>先贴个文档,<a href="https://toutyrater.github.io/">简易版V2ray手册</a>,说简易,其实也不简易,挺多的,耐着性子看完了。实在是没心情再看官方的document了,这个差不多就够了。</p>
<h1 id="原理篇">原理篇</h1>
<p>原理上,和SS一样,都是为了和墙大作战,不过,比SS更强大和复杂,所以可以更好地对抗墙:</p>
<pre><code>简单来说,SS 功能单一,V2Ray 功能强大。听起来似乎有点贬低 SS呢?当然不!换一个角度来看,SS 简单好上手,V2Ray 复杂配置多。
</code></pre>
<p>我的理解,就是客户端建立一个到v2ray主机的通道,上面跑<a href="https://toutyrater.github.io/basic/vmess.html">VMess协议</a>,然后到了服务器端解密解包,然后帮助路由出去,回来的包再按照这个路数回来即可。</p>
<pre><code>{浏览器} <--(socks)--> {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <--(VMess)--> {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <--(Freedom)--> {目标网站}
</code></pre>
<p>除了加密,就是伪装了,这个很赞,V2ray可以伪装成各类协议,比如伪装成一个web服务器,也可以伪装成用一个tcp的标准服务、STMP的流媒体、甚至是微信的视频服务器啥的,一堆选择,总有一款适合您。当然TLS支持是必须滴。</p>
<p>不过胖仔告诫说,如果犯懒使用tcp或者<a href="https://toutyrater.github.io/advanced/mkcp.html">KCP</a>,就跟之前的SS没啥区别,就跟裸奔一样,一定要伪装成,TLS的Websocket服务器,这样,才可以躲避万恶的墙的扫描。最好再准备一个宣扬我党政策的大主页,就绝对安全了,哈哈。</p>
<h1 id="服务端配置">服务端配置</h1>
<p>我犯懒,直接谷歌了一个<a href="https://233v2.com/post/16/">教程</a>,一键安装之,很不错,还有个shell菜单引导你,省去了配置修改config.json,不过,你最好还是提前通读一下<a href="https://toutyrater.github.io/">简易配置文档</a>先。</p>
<p>我本来一键式用最简单的方式,也就是tcp,设置的,都没搞啥KCP协议,恩,很快就跑起来了,然后安装了V2RayX,通了,很高兴。(细节大家就读这个小哥哥的文档即可,还是写的很赞的)。</p>
<p>然而,胖仔恐吓我,说,这种方式跟裸奔没啥区别,必须要TLS+WebSocket方式,寻求终极安全。鉴于这两日被墙强奸的痛楚,就只好硬着头皮去鼓捣tls+ws方式。感谢热心似火的胖仔,给我提供了爽爽的<a href="/assets/installtlscert.sh">一键安装脚本</a>,满心欢喜运行一把,fail了,细看,应该是因为胖仔这个是for Ubuntu的,我的是CentOS,没关系,读读脚本,自己搞定,否则,再去滋扰人家,多不好意思啊。</p>
<p>细看了一下,其实也不难,大致流程就是:</p>
<ul>
<li>装个Nginx</li>
<li>申请个免费的TLS证书,改造自己的服务器成为https</li>
<li>然后把nginx的websocket请求代理给本地的v2ray的端口为10000的服务</li>
<li>v2ray端配置成Webscoket+TLS方式即可</li>
</ul>
<p>nginx就不用说了吧,yum直接搞定。</p>
<p>就是先调用~/.acme.sh去申请个证书,acme是啥,是一个免费提供TLS安全证书的脚本,细节也没兴趣搞了,感兴趣可以去看看<a href="https://moe.best/tutorial/acme-le-wc.html">这篇</a>,恩,随便搜了一篇贴给你。</p>
<p>然后,胖仔的脚本帮助生成了一个SSL的配置,真好,省去的我这个SSL配置盲的工夫。</p>
<p>然后就差配置v2ray了,于是,我有启动小哥哥的配置脚本,菜单上一选,搞定。</p>
<p>好啦,重启v2ray、nginx服务,然后,去配置客户端喽。</p>
<h2 id="新服务器配置流程">新服务器配置流程</h2>
<p>前面讲的有点乱,把配置过程重新捋一捋:</p>
<ul>
<li>先改成证书登录</li>
</ul>
<pre><code>ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP
# 取消sshd的密码登录
# vim /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
</code></pre>
<ul>
<li>配置你的域名</li>
</ul>
<p>去DNS域名配置的网站,配置上A记录:IP <-> 域名,这个是为了给服务器配置一个域名,
域名一定是要有的,因为https服务需要的证书,需要绑定一个固定域名,如果没有,买个去吧,推荐狗爹goddady。</p>
<ul>
<li>安装必要工具</li>
</ul>
<p>一般初始服务器都很干净,需要装一些工具,我的是centos7:</p>
<pre><code>yum install -y vim # vi实在难用
yum install -y net-tools # ping啥的
yum install -y lrzsz # 上传下载的小工具
yum install -y wget
</code></pre>
<ul>
<li>去服务器上,安装nginx</li>
</ul>
<p>我的是centos7,yum源不带nginx,所以需要用epel:</p>
<pre><code>yum install epel-release
yum install nginx
</code></pre>
<p>备份原有配置,使用我提供的配置<a href="/assets/v2ray/nginx.conf">nginx.conf</a>,主要是设置证书和websocket的路径。
然后先别着急重启nginx服务器呢,等下面的证书安装完成后再重启。</p>
<ul>
<li>安装证书</li>
</ul>
<p>运行我提供的<a href="/assets/v2ray/cert.sh">cert.sh</a>,他会运行acem的脚本去为你申请一个证书,命令需要一个参数,就是你的域名,
运行完后,会在/etc/v2ray/目录下创建你的证书,并且把更新证书的命令放到cron里,当然这些都是自动化的。</p>
<p><code>cert.sh YOUR_DOMAIN_NAME</code></p>
<p>然后,就可以重启nginx服务了,<code>systemctl restart nginx</code>,如果正常的话,去你的浏览器,敲入你的https://你的域名,就可以正常访问你的网站了,这就说说明你的证书有效了。</p>
<ul>
<li>安装v2ray</li>
</ul>
<pre><code>wget https://install.direct/go.sh
chmod +x go.sh
./go.sh
</code></pre>
<p>然后备份/etc/v2ray目录中的config.json,使用我提供的配置文件<a href="/assets/v2ray/config.json">config.json</a>,
注意1点,使用就配置中的那个id,就是很长的那个uuid。
这个uuid是一个自动生成的,当然你也可以重新生成,但是不如就用最开始安装生成的那个。</p>
<p>然后重启服务<code>systemctl restart v2ray</code>。</p>
<ul>
<li>最后,安装一个<a href="/assets/v2ray/bbr.sh">bbr</a>,这是一个帮助加速网络的脚本,主要是优化了tcp协议栈的处理,也是一键式的:</li>
</ul>
<p><code>./bbr.sh</code></p>
<p>这个安装完需要重启。</p>
<h1 id="客户端">客户端</h1>
<p>我发现了2个客户端,一个是v2rayX,一个v2rayU,抱歉,都是for Mac的,如果您需要windows的,自行谷歌吧,哦不,自行百度吧。</p>
<p>客户端其实和服务器端没啥区别,你去<a href="https://github.com/v2ray/v2ray-core/releases">官网</a>下载的话,其实,就是很对付的给你弄一个交叉编译版本,比如mac、windows版本而已,你还是去人肉编辑config.json,好变态,所以,v2rayX/v2rayU,就给你给套了个配置的壳子,好用多了。其实,底层还是包了个v2ray内核。</p>
<p>V2rayU,我没有使用,这里只说说V2RayX的设置吧,V2RayU自行对比设置吧。</p>
<h2 id="v2rayx的设置">V2RayX的设置</h2>
<p><a href="https://233v2.com/post/9/">V2rayX</a>很好用,而且<a href="https://233v2.com/post/9/">这篇文档</a>也讲的很清楚,我就不贴图了,仔细阅读即可。我这里丹丹说说websocket+TSL的配置吧。</p>
<ul>
<li>Address:地址不能写IP了,要写一个域名,建议走一个info买的便宜域名,别用国内自己常用的域名,防止喝茶</li>
<li>Port:端口,恩,443,TLS嘛</li>
<li>Network:这里选择Websocket即可</li>
<li>然后点开“transport setting…”,配置2个地方:</li>
<li>
<ol>
<li>Websocket
path是你服务器上的websocket对外服务的路径,比如/mymsg
在”header”里面输入{“Host” : “xxx.yourdomain.info”},恩,你绑的域名</li>
</ol>
</li>
<li>
<ol>
<li>TLS
勾选Use TLS,然后在Server Name处填入”xxx.yourdomain.info”</li>
</ol>
</li>
</ul>
<p>恩,差不多了,然后把log level改成debug,暗中观察日志即可,有错排错,谷歌之即可。</p>
<h1 id="遇到的一些问题">遇到的一些问题</h1>
<ul>
<li>别忘了绑定的主机到一个域名,恩,买个info的,防止喝茶</li>
<li>nginx配置过程中,主要是websocket服务要绑定个路径,这个其实可以通过chrome浏览器就可以测试(其实,万恶的墙也是这样来侦测你的),方便排查</li>
<li>没事就观察v2rayx的客户端日志、v2ray服务器端日志、nginx日志,然后股沟之,一般问题都轻松搞定</li>
</ul>
<h1 id="关于主机vps">关于主机/VPS</h1>
<p>如果你要买主机,首推谷歌的免费的主机,白送你一年的试用,详细请看<a href="https://www.vediotalk.com/?p=2798">这里</a></p>
<p>如果你想买其他的,我知道的只有<a href="https://bandwagonhost.com/">搬瓦工</a>和<a href="https://www.nfphosting.com/">NFPHost</a>,不过我的两台VPS都阵亡了,最近不曾使用他们了。我还去问了一下搬瓦工客服,说换个ip大概需要50块钱人民币左右,呵呵,暂时先算了,看看未来可以自动解封么。。。</p>
<p>我一般都买个100元RMB上下的,就够了,太贵的也没啥必要。不过以后再买,就直接搞v2ray了。</p>
<h1 id="使用cloudfare加速啦">使用CloudFare加速啦!</h1>
<p>还是这篇<a href="https://www.gitloc.com/archives/59.html">教程</a>,里面讲的很清楚,如何建立cloudflare的加速,其实,就是让你先去访问cdn,通过cdn缓存v2ray的数据,从而达到加速的目的。</p>
<p>教程讲的很清楚,我就补充一些内容吧:</p>
<h2 id="使用worker方式代理">使用worker方式代理</h2>
<p>这个<a href="https://www.gitloc.com/archives/59.html">教程</a>里提到加速方式是“worker”方式,说白了,就是直接在网页里嵌入一段js,然后,cloudfare会给你代理的域名一个代理域名,你访问的时候,就访问这个代理域名,代理域名会把你要的页面发给你,并且缓存。这种方式的好处是,你对目标网站相关的内容不需要做任何修改。</p>
<p>不过,这种方式,需要对v2ray客户端进行修改:</p>
<ul>
<li>把v2ray的host地址,改成这个cloudfare给你生成的代理地址,形如:late-waterfall-1a2b.xxxxxx.workers.dev,xxxxxx就是你的cloudfare的work名字</li>
<li>在websocket的header要把伪装主机改成这个名字:
<pre><code>{
"Host" : "late-waterfall-1a2b.xxxxxx.workers.dev"
}
</code></pre>
</li>
</ul>
<p>然后,再试试,OK啦,去油管上测试一下视频,果然快了很多啊。</p>
<h2 id="使用dns方式代理">使用DNS方式代理</h2>
<p>除了这种worker的方式,其实还有一种更好的方式,至少我是认为更好的,这个好处是,这个域名是对外的,任何访问这个域名的人,都会被Cloudflare加速。</p>
<p>参考<a href="https://www.imhunk.com/cloudflare-tutorials/">这篇</a>,在cloudflare里,创建你的域名加速。cloudflare的wizzard还是很有好的,你可以按照他的步骤很容易地设置起来你的域名的CDN。</p>
<p>麻烦点的是,他需要接管你的DNS解析,把之前你在别地方的DSN解析替换掉,换成cloudflare的。这就需要你去你的DNS购买提供商那里把naming server从原有的解析服务器替换成cloudflare的。</p>
<p>其他的都很简单,剩下的就是静静等待,有个半天就生效了,生效以后你可以看到的ip已经被proxy了。</p>
<p>另外,cloudflare的免费服务每天可以有10万次,不过对我们来说,足够了。</p>
<h2 id="挑选一个最牛逼的代理">挑选一个最牛逼的代理</h2>
<p>生命不息,折腾不止,教程里面会让我们继续折腾,就是找一个cloudflare最快的主机,啥意思?我们知道,CDN就是在你要访问的时候,截获你的访问,把你导向到一台缓存服务器,cloudfare其实准备了无数这样的服务器,我们得找出一台最快的,然后固定住它,一直就用它啦,多好啊。</p>
<p>开搞,首先得搞一份所有的cloudfare的CND服务器列表,大神们已经干了这事了,可以参照这个<a href="https://github.com/bigfangfang/IBMVPS/blob/master/fping-msys2.0/%E8%87%AA%E5%8A%A8%E6%9F%A5%E6%89%BE%E6%9C%80%E4%BC%98CF%E8%8A%82%E7%82%B9-%E6%87%92%E4%BA%BA%E4%B8%93%E7%94%A8.bat">脚本</a>,不过,是个bat,而且附带的也是个fping.exe,可是我的是mac啊。</p>
<p>好在是胖纸已经帮我搞了一份这个<a href="/assets/ip.txt">ip.txt</a>了,而我只需要<code>brew install fping</code>,然后跑一下这个脚本,就可以得到最快的IP啦:</p>
<pre><code>fping -f ip.txt -c 4 --interval=1 -s|sort -r -k6|grep " 0% loss"|tail -n 20 >fastip.txt
mkdir -p temp
for ip in `cat fastip.txt|awk '{print $1}'`
do
echo "test ip:${ip} speed..."
curl --resolve apple.freecdn.workers.dev:443:${ip} https://apple.freecdn.workers.dev/105/media/us/iphone-11-pro/2019/3bd902e4-0752-4ac1-95f8-6225c32aec6d/films/product/iphone-11-pro-product-tpl-cc-us-2019_1280x720h.mp4 -o temp/${ip} --connect-timeout 2 --max-time 10
done
ls -lS temp > realfastip.txt
cat realfastip.txt |awk 'BEGIN{while(getline line <"fastip.txt"){split(line,arr," ");list[arr[1]]=line}}{print $0 "\t" list[$NF]}'
echo "press ENTER key to continue..."
read
rm -rf temp
</code></pre>
<p>不过,我跑了几次,发现每次都不是很稳定,最快的IP变来变去,算啦,随便挑一个把….</p>
<p>接下来,要回去修改一下v2ray的配置,把host地址,改成这个IP,然后就完美了。</p>
<p>实测了一下:</p>
<p>之前没有用Cloudflare,大概是1.5-2Mbps,使用Cloudflare加速后,可以到3.5-4Mbps,修改成最快的IP后,可以到5-6Mbps。</p>
<p>我家用的是超烂的长城宽带,万能的胖纸使用的移动宽带,可以加速到20-40Mbps,煞是让人羡慕ing….</p>
<p>不过,由于这个CDN的节点速度不稳定,未来可能会有更好的IP优化,也可能当前使用的IP会退化,最好的办法是写一个定时器,去fping一圈,每次优选一个最好的IP,然后动态更新你的v2ray主机名字,这样就超级完美了,不过,懒得再折腾了,目前已经相当满意了。</p>
<h1 id="更新">更新</h1>
<h2 id="202212">2022.12</h2>
<p>2022.12,由于众所知之的原因,墙又一次升级,居然把443端口给封了,现象就是,只要是我的服务器有任何针对443的访问流量,IP立刻就会被封,大约十分钟后,又给你放开,但是只要访问,又封,无语嘞。</p>
<p>按理说,v2ray本身就加密,加上ssl/tls,再次加密,不会有什么问题,但是,我看网上说,可能墙启动了人工智能识别,我倒是觉得没那么牛逼,其实就是看你日日莫名其妙上传这么多流量,而且还是443的websoket,就无脑给你封掉,大概率是那些翻墙的人吧。</p>
<p>我把443换成80的ssl,依然被封,网上查了,用高位端口,也一样,只要你之前被盯上,估计短期就不会解封的。好吧,我只好再去买台了。</p>
<p>这次,并没有再买阿里的新加坡服务器了,一个是因为zone里没有新加坡了,只有香港,而且288元/年的套餐也没有了,最便宜要400。靠!所以,就转向了aws,aws的lightsail每个月3.5刀,就他了。</p>
<p>然后,就需要重装一遍,自己很久不搞了,几乎又把之前的坑都试了一遍,觉得有必要再记录一遍:</p>
<ul>
<li>装完nginx,要配置下服务器的域名,acme要验证你的域名,我本来用–domain,它是直接用一个域名提供商的api+token去远程调用api插入一个txt记录,这个倒是简单,但是我死活不通timeout。最后,我只好用–nginx,也就是自动让acme去改nginx的conf配置,然后验证我这个域名对应的服务器是靠谱的,所以才需要提前配置好server_name,再nginx上绑好域名。</li>
<li>acme,需要root身份,否则,他要重启nginx的时候,会一堆的nginx权限报错,nginx的主进程必须要root启动,只是子进程可以指定用户,我就是用非root装的,改了一堆的文件权限,才通过,唉,下次直接用root装</li>
<li>acme已经在2021年切刀zerossl来提供证书了,所以有一个注册过程<code> ~/.acme.sh/acme.sh --register-account -m xxxxxx</code></li>
<li>v2ray也是涉及到权限的细节,有一个问题,说啥md5加密不再使用啥的,需要加入一个环境变量<code>Environment="V2RAY_VMESS_AEAD_FORCED=false"</code>到<code>/etc/systemd/system/v2ray.service</code>中,才可以</li>
<li>别忘嘞做时钟和时区对齐,否则也报错</li>
<li>最最后,别忘嘞加入crontab,来定期同步最新的证书</li>
</ul>
<p>总结一下:
买机器、装nginx、注册新2级域名、绑到nginx上、安装acme、注册到openssl、申请和安装证书、安装v2ray、修改v2ray环境变量、修改各种文件权限、修改时区、加入acme的定期更新证书到crontab,酱紫。</p>
<p>整一台机器得需要个2~3个小时。</p>
<p>再次记录一下这些关键细节点,方便下次重装。</p>
<h2 id="2022125">2022.12.5</h2>
<p>购买的东京aws服务器又被封了,ip没有,80端口被封,这次没办法,只好再做修改,挂上了cloudflare的d代理。</p>
<p>具体是,把namesilo中的ip解析nameserver改成了cloudflare的,并且在cloudflash中加入站点,并且,把dns解析都改在cf来解析了。其中,每个A记录,都有一个proxy的选项,勾选后,这个子域名,就会被代理。也就是,每次访问可能都是一个不同的ip,真实的ip会被隐藏在后面了,省的被发现了。</p>
<p>不过,后来和胖纸聊,他说主要原因是tls导致的,建议把tls关上,他现在就不用tls。本来我认为是v2ray的vmess加密+tls(ssl)的加密,会双保险。但是他说,可能墙已经识别出tls的某些特征,建议我不用tls,直接用http,用vmess加密就够了。</p>
<p>于是,就把旧机器删了,再买了一台,反正也不用再搞域名ssl证书也就是acme那些麻烦玩意了,很快就搞定了一台。</p>
<p>另外,用cloudflare的代理,发现它果然可以帮助我隐藏真实ip,而是每次都是个不同的ip,但是,被代理后速度从200ms变成了800ms,靠,这根本没法用。虽然可以通过一个脚本可以检测出最优的代理edge ip,但是还是太麻烦,算了,不代理了,只要不再用tls导致再被封就好。</p>
<p>最后,又优化了一下网络,开启了bbr,是一个谷歌的网路流量优化的算法,需要在服务器上开启,开启后,速度快了将近一倍。
bbr已经在内核5.x上默认内嵌了,只要开启即可。默认的bbr速度就很好了,不过还有大神做了不同的调优版本的内核,但是都需要重新下载新的内核,一个是不安全,另外一个是我看了对比,优化幅度不是特别大,开启默认的bbr效果就已经提升明显了,没必要再精益求精了。</p>
<p>好吧,如果再出问题,就删掉再买一台,再花个半小时搞定,嗯,就这么办!也只有这么办了,好讨厌的墙。</p>
<p>接下来,把我详细的步骤,列举出来,方便朋友们架设,也方便以后自己来搞。之前的那些内容太繁琐了,啥SSL的,
现在,模式变得非常简单,不需要SSL/TLS了,就用vmess+http。</p>
<h3 id="1-购买域名和主机">1. 购买域名和主机</h3>
<ul>
<li>买一个域名,推荐去<a href="https://www.namesilo.com/">namesilo</a>(注:这步不是必须的,可以没有域名,只用IP)</li>
<li>需要去aws买一台主机,可以在淘宝上买代金券,每年成本可以降得很低,自行搜索aws代金券即可。(大约每年140元人民币)</li>
<li>需要配置域名和aws主机的绑定,买完域名在namesilo里就干了。(注:这步不是必须的,可以没有域名,只用IP)</li>
<li>推荐使用ubuntu服务器20.04LTS版本</li>
</ul>
<h3 id="2-配置服务器">2. 配置服务器</h3>
<p>【准备SSH登录】</p>
<p>使用密钥方式登录服务器:</p>
<p>准备key: 从aws下载私有key到~/.ssh并修改访问权限:</p>
<p><code>chmod 600 ~/.ssh/xxxx.pem</code></p>
<p>登录服务器:</p>
<p><code>ssh -i ~/.ssh/xxxx.pem <服务器IP></code></p>
<p>【安装各种软件】</p>
<p>登陆后,依次运行下面的命令:</p>
<p>更新apt源</p>
<p><code>sudo apt-get update</code></p>
<p>安装nginx
<code>sudo apt install nginx</code></p>
<p>配置nginx</p>
<p><code>sudo vim /etc/nginx/nginx.conf</code></p>
<pre><code> events {worker_connections 1024; }
user www-data;
worker_processes auto;
pid /run/nginx.pid;
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
server {
server_name <你的域名(这行可以不要,如果没有域名的话)>;
root /usr/share/nginx/html;
listen 80 default_server;
location /msg {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
}
</code></pre>
<p>修改一下root密码,方便后续安装,因为v2ray需要以root身份安装</p>
<p><code>sudo passwd root</code></p>
<p>切换到root用户</p>
<p><code>su -</code></p>
<p>以root身份安装v2ray</p>
<p><code>bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)</code></p>
<p>安装后,配置v2ray</p>
<p><code>vim /usr/local/etc/v2ray/config.json</code></p>
<p>(之前,需要去<a href="https://www.uuidgenerator.net/">UUID在线生成</a>生成v2ray的id,配置里需要用)</p>
<pre><code> {
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
"port": 10000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "<v2ray的id,自动生成的,这个很重要,将来客户端连接需要配置个id>",
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/msg"
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}
//include_ss
//include_socks
//include_in_config
//
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
}
//include_out_config
//
],
"dns": {
"server": [
"1.1.1.1",
"1.0.0.1",
"8.8.8.8",
"8.8.4.4",
"localhost"
]
},
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
},
{
"type": "field",
"inboundTag": ["tg-in"],
"outboundTag": "tg-out"
}
,
{
"type": "field",
"domain": [
"domain:epochtimes.com",
"domain:epochtimes.com.tw",
"domain:epochtimes.fr",
"domain:epochtimes.de",
"domain:epochtimes.jp",
"domain:epochtimes.ru",
"domain:epochtimes.co.il",
"domain:epochtimes.co.kr",
"domain:epochtimes-romania.com",
"domain:erabaru.net",
"domain:lagranepoca.com",
"domain:theepochtimes.com",
"domain:ntdtv.com",
"domain:ntd.tv",
"domain:ntdtv-dc.com",
"domain:ntdtv.com.tw",
"domain:minghui.org",
"domain:renminbao.com",
"domain:dafahao.com",
"domain:dongtaiwang.com",
"domain:falundafa.org",
"domain:wujieliulan.com",
"domain:ninecommentaries.com",
"domain:shenyun.com"
],
"outboundTag": "blocked"
} ,
{
"type": "field",
"protocol": [
"bittorrent"
],
"outboundTag": "blocked"
}
//include_ban_ad
//include_rules
//
]
},
"transport": {
"kcpSettings": {
"uplinkCapacity": 100,
"downlinkCapacity": 100,
"congestion": true
},
"sockopt": {
"tcpFastOpen": true
}
}
}
</code></pre>
<p>修改启动文件</p>
<p><code>vim /etc/systemd/system/v2ray.service</code></p>
<p>加入这行,这个是因为v2ray有个小bug,需要这样修改下,感兴趣可以自行谷歌:</p>
<p><code>Environment="V2RAY_VMESS_AEAD_FORCED=false"</code></p>
<p>启动v2ray</p>
<p><code>systemctl enable v2ray;systemctl restart v2ray</code></p>
<p>安装网络工具包,然后查看端口80和10000是否运行?</p>
<p><code>apt install net-tools</code></p>
<p><code>netstat -lntp</code></p>
<p>开启bbr,加速: 这个是一个优化方法,可以让网速提速1倍,感兴趣可以自行搜索原理:</p>
<pre><code>echo net.core.default_qdisc=fq >> /etc/sysctl.conf
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr
</code></pre>
<p>bbr开启的话,正常结果为:</p>
<pre><code>> sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
>sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic bbr
>lsmod | grep bbr
tcp_bbr 20480 1
</code></pre>
<p>调整时钟:必须要跟网络时间服务器同步,否则,客户端和服务器不一致,会连接不上。</p>
<pre><code>apt-get install ntpdate
ntpdate cn.pool.ntp.org
tzselect
echo "TZ='Asia/Shanghai'">>~/.profile ; export TZ
</code></pre>
<h3 id="3配置客户端">3、配置客户端</h3>
<ul>
<li>windows上用<a href="https://github.com/2dust/v2rayN/releases">v2rayN</a></li>
<li>MAC上用<a href="https://github.com/yanue/V2rayU/releases">v2rayU</a></li>
<li>安卓上用p<a href="https://github.com/2dust/v2rayNG/releases">v2rayNG</a></li>
<li>IOS苹果上很麻烦,默认的国内appstore没有v2ray客户端,需要去国外的appstore上安装。具体步骤是:1、参考<a href="https://zhuanlan.zhihu.com/p/101024418">这篇</a>去注册个美国apple ID,然后切换到美国市场。2、安装一个叫oneclick的免费客户端,他们都推荐收费的ShadowRocket,但是我没法设置信用卡,只好用免费的oneclick了,我感觉挺好用的。</li>
</ul>
<p>以mac上的配置为例,展示配置细节:</p>
<p><img src="/images/20230211/1676113790579.jpg" alt="" class="myimg" /></p>
<p>(注:如果没有购买和配置域名,不需要填写headers)</p>
<p>其他平台上,配置大同小异。</p>
<h3 id="其他">其他</h3>
<ul>
<li>配置中,肯定会遇到很多坑,耐心排查和百度(还没能翻墙)应该都可以解决</li>
<li>客户端软件肯定需要先翻墙,才能下载,这个时候就是先有鸡先有蛋的问题了,建议先找个免费的vpn啥的下载下来</li>
<li>账号尽量不要分享给其他人,现在查得严,倒不是怕其他人滥用,而是,稍微用的人多,就会封IP</li>
<li>为了防止失联,建议买2台,互备,淘宝优惠券相当实惠,而且,GFW时不时会封一下,这时切换到另外一台,不影响使用</li>
</ul>
<h2 id="2023417">2023.4.17</h2>
<h3 id="针对chatgpt的增强">针对chatgpt的增强</h3>
<p>chatgpt火了,但是,必须要翻墙才可以;随着翻墙的人多,chatgpt开始限制大陆地区的ip。特别是aws的IP,全封。阿里的海外服务器,开始还可以,但是后来,也封了。</p>
<p>后来,有人提出,用cloudclare的warp服务,来规避ip被封。本质上,我理解,就是在你的ip之外,再设置一个代理,每次都更换自己的ip到一个变动ip,也就是代理的代理。</p>
<p>开始还可以,但是用了一段时间后,估计是chatgpt发现某个ip上来的请求太多了,就开始报429的错误码。</p>
<p>最后,又谷歌半天,发现需要多尝试一些warp IP,直到你切换到某个没有过多人用的IP,才可以稳定到这个ip上,才可以。</p>
<p>具体做法:</p>
<p>1、给服务器套上cloudflare的warp服务</p>
<p><code>curl chat.openai.com</code></p>
<p>如期的出现1020错误码。</p>
<p>为库安装GPG Key:</p>
<pre><code>curl https://pkg.cloudflareclient.com/pubkey.gpg
sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
</code></pre>
<p>添加源到库:</p>
<pre><code>echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main"
sudo tee /etc/apt/sources.list.d/cloudflare-client.list
</code></pre>
<p>update APT:</p>
<p><code>sudo apt update</code></p>
<p>安装Warp:</p>
<p><code>apt install cloudflare-warp</code></p>
<p>注册Warp 运行命令给设备注册:</p>
<p><code>warp-cli register</code></p>
<p>打开代理模式:</p>
<p><code>warp-cli set-mode proxy</code></p>
<p>连接Warp:</p>
<p><code>warp-cli connect</code></p>
<p>查验</p>
<p><code>curl ifconfig.me --proxy socks5://127.0.0.1:40000</code></p>
<p>结果会显示一个被代理后的cloudflare提供的代理ip,再测试不使用socks5时候还是1020错误代码,第二条命令带上socks5,没有1020错误代码提示了。</p>
<p>2、更新v2ray配置</p>
<p>上面的warp服务,只是让你的服务器,可以对外服务器的时候,可以提供一个新的代理ip。
现在,要把这个代理ip服务,和你的v2ray服务结合起来。
也就是,一般翻墙的时候,不使用这个代理ip(原因是,再代理一次速度会慢很多);如果是访问chatgpt的时候,就用这个新的代理ip去访问chatgpt。</p>
<p>修改你的v2ray配置,再outbounds和routings部分,加入一下的配置:</p>
<pre><code># outbounds
{
"tag": "chatgpt",
"protocol": "socks",
"settings": {
"servers":[
{
"address": "127.0.0.1",
"port" : 40000
}
]
}
}
# routings
{
"type":"field",
"outboundTag":"chatgpt",
"domain" :[
"chat.openai.com",
"ip138.com"
]
}
</code></pre>
<p>说明:</p>
<ul>
<li>40000,就是新的warp服务的端口</li>
<li>可以看出来,只有在路由到<strong>chat.openai.com</strong>域名的时候,才会走这个warp代理ip服务</li>
<li>为何要搞搞ip138.com路由呢?是为了测试用这个网站解析ip的时候,可以看到新的代理ip</li>
<li>重启v2ray,完事</li>
</ul>
<p>不过,有的代理ip因为用的人太多,所以会报429的错误,所以接下来,要解决429错误的问题嘞。</p>
<p>2、狂刷warp,直到获得一个稳定IP</p>
<p>解决错误码429的办法,就是重新登陆warp服务,不断地尝试获得新的ip,直到某个ip不再报错,即可。</p>
<p><code>warp-cli disconnect && sleep 3 &&warp-cli connect</code></p>
<blockquote>
<p>不断刷下边的这条命令,再刷新chatgpt的页面验证是否可以正常使用。</p>
</blockquote>
<blockquote>
<p>即使在晚上的最高峰,往往刷个5次就能找到一个合适的节点实现chatgpt的访问。并且这个节点很长时间内都不会失效</p>
</blockquote>
<p>参考:</p>
<ul>
<li><a href="https://mailberry.com.cn/2023/02/cf-solve-it-completely-error-code-1020-by-warp/">给节点套上CF的warp</a></li>
<li><a href="https://watermelonwater.tech/%e5%a6%82%e4%bd%95%e5%bd%bb%e5%ba%95%e8%a7%a3%e5%86%b3chatgpt429%e9%94%99%e8%af%afyou-are-being-ratelimited/">如何彻底解决chatgpt429错误</a></li>
</ul>
<h1 id="最后">最后</h1>
<p>这年头,翻出去不容易,口袋越收越紧了,年轻淫们,可以人肉翻就赶紧翻吧。我呢,为了看看油管,翻翻股沟,唉,这年头,生活、学习都不易啊。</p>
西方哲学
2019-05-16T00:00:00+08:00
https://www.piginzoo.com/education/2019/05/16/aizhihui
<h2 id="导言">导言</h2>
<p>学校里不愿意给你讲《西方哲学》,可是尼玛,这可是近现代300多年,美帝国主义强大的根源啊,同时,也是无数先哲对世界、社会、人生、人类的思考啊,怎么能不学习和了解呢!既然“他们”不愿意教,也不鼓励你学,那咱就自己学呗。</p>
<p>把自己的看的、听的、读的一些新的体会记录下来,留给健忘的自己,如果能对读者你有点帮助、触动或者启发,大满足了也。</p>
<p>西方哲学家们的传承脉络:</p>
<p><img src="/images/20190516/1557969359999.jpg" alt="" class="myimg" /></p>
<h3 id="霍布斯thomas-hobbes-15881679"><a href="https://zh.wikipedia.org/wiki/%E6%89%98%E9%A9%AC%E6%96%AF%C2%B7%E9%9C%8D%E5%B8%83%E6%96%AF">霍布斯</a>(Thomas Hobbes 1588-1679)</h3>
<p>霍布斯的理论挺有意思的,就是你作为老百姓,你丫就是邪恶的,人性中的饿表现在,你一旦有能力,就有可能侵害别人,反之亦然。所以,这个社会就是丛林法则。那你不就该哭了么。没事,他想了一个招,给你一个“利维坦”,这是啥货?在古希腊神话中是一个凶恶怪兽,无所谓了,你就是认为他很强大也狠邪恶。然后,你出卖自己的自由给他,他来保护你。他是被人格化,不再像过去马基雅维利的《君主论》中那个主子,而有可能是一个政党、一个组织,而且他是站在人民的角度上的。“孩子们,我都是为你们好,放弃自由把,我给你安全”,哈哈,听上去熟悉么?但是,致命的是,他并没有一个约束这个利维坦的办法,也就是权力没有关入笼中。可能你觉得挺二的一个理论,但是这个可是经过黑暗中世纪、王权以及科学理性都刚刚启蒙的17世纪啊,可以提出一套至少在今天“某些人”眼中,还是挺对还可以看到的体制,不得不说厉害啊。</p>
<p>霍布斯主张咱们啊,彻底放弃自由和权力,完全交给利维坦,这点我真心接受不了,所以,才有了洛克的改进。</p>
<h3 id="洛克-john-locke16321704"><a href="https://zh.wikipedia.org/wiki/%E7%BA%A6%E7%BF%B0%C2%B7%E6%B4%9B%E5%85%8B">洛克</a> (John Locke,1632-1704)</h3>
<p>真心不知道,洛克在米国地位这么高,号称美国建国的精神之父。他是站在马基雅维利、霍布斯这两位“邪恶”巨人肩膀上,反向提出的理论,相信人性本善,后续的卢梭、孟德斯鸠都是秉承了人性善这点。</p>
<p>洛克认为,人性中是有恶的,但是,不同于霍布斯,他认为人们通过理性和自制,可以改变,本质上人是善良,最后自由的。自由在洛克这里是至关重要的,财产权、生命权、健康权等都是神圣不能侵犯的。但是,总有一小撮人,她们是不会遵守道德约束(也就是洛克说的自然法),那咋办?人们只好牺牲一部分自由,交给一个叫政府的机构,商定共同约定要遵守的内容,并且建立惩戒。</p>
<p>洛克同时也担心政府作恶,他对政府的态度始终是不信任,是奴仆,是服务于我们大众的观点,所以,要处处限制政府,防止他作恶。但是如果,他真的作恶了,怎么办?推翻它!</p>
<p>财产权不能被侵犯,这个特别重要,要无论如何被捍卫。但是,财产和财富要有限度,超过限度应该被限制,这个也是递进税收,防垄断等政策的思想来源。但是,多于财产的处置,洛克没有给出答案,这个漏洞,导致福利社会成为好吃懒做的人的温床,到现在还是米国共和党和民主党的一个争论焦点,该不该给底层人民以福利。</p>
<p>洛克没有把理想体制定义为民主制,无论哪种体制,只要满足人民的福祉,为人民服务,并且,限制住公权,都是可以接受的,比如君主统治,君主立宪,集权统治等。这个挺有意思。</p>
<h3 id="帕斯卡尔">帕斯卡尔</h3>
<p>其实就是帕斯卡,初中就知道这位仁兄,学习他的关于液体压强的帕斯卡定律,可是,不曾想,他居然也是一位哲学家。为此,我专门去百度百科去查了一下,对他的思想和哲学一笔带过,但到时维基百科上,专门提到了他的哲学成就。</p>
<blockquote>
<p>1654年末一次信仰上的神秘经历后,他离开数学和物理学,专注于沉思和神学与哲学写作。他是坚定的詹森教派信徒,人文思想大受蒙田影响。宗教论战之作《致外省人书》(Lettres provinciales)被奉为法文写作的典范,身后其笔记本被编为《思想录》。</p>
</blockquote>
<p>帕斯卡的哲学,充满悲观主义,但是也同时教给你一些积极地东西。挺奇怪的吧。悲观的是啥,就是赤裸裸的在揭示人性的丑陋面:被情绪左右、胆小、鲁莽、愚蠢、狂妄和虚荣。人在茫茫大众中,感觉到的是自己的渺小和卑微,无法把控的自我和情绪,对现实的无力感。积极地一面呢,就是人要相信心灵的力量,除了我们理性的逻辑的头脑,还要有心灵和精神的感悟,是人们自我救赎的办法。所以,最终,帕斯卡还是把这一切导向到了宗教,得到终极的宁静。</p>
<p>帕斯卡把人比作思想的芦苇,芦苇就是指人无法把控自我命运的可悲,而人唯一剩下的无法被剥夺的就是“思想”,所以,人文的修养,在帕斯卡这里倍受推崇。这个是不是完全颠覆,我们对他是一个科学家的认知。</p>
<h2 id="解构主义与后现代主义"><a href="https://www.bilibili.com/video/av17996649/">解构主义与后现代主义</a></h2>
<p>不是哲学思潮,而是文学、艺术、建筑、后工业社会。</p>
<p>反对知识论,反对理性主义,知识已经成为生产力和权力,知识分子已经技术化、职业化,成为掌握话语权的阶层,不太关心整体大众的福祉了。后现代就是对宏大叙事的不信任。</p>
<p>没有一个“后”的时间概念,后,是个超越的概念。超越的是启蒙运动以后的理性主义,是科学主义。</p>
<p>后现代是彻底意义上的解构、批判、颠覆、怀疑。
后现代否定了传统哲学的一切价值和内涵,但是正面建树不多,所以更多表现出来的是怀疑主义、虚无主义的色彩。
现代性包含3个特征:职业性的科学、普遍的道德准则和法律、自由的艺术创作。
但是后现代型全面否定了工具理性,有点过了。</p>
<h2 id="各种视频笔记">各种视频笔记</h2>
<p><a href="https://www.bilibili.com/video/BV1ut411K7nw?t=1816">https://www.bilibili.com/video/BV1ut411K7nw?t=1816</a></p>
<p>科学的世界观,是这个时代最正的世界观,信科学得永生
9102年了 <br />
世界观———->方法论———–>方法
价值评判 效用评判
当今,任何小众文化,科学都是史无前例的对手,科学是真,其他是假的错的伪的。
比如上帝、中医,是不符合科学的标准,而不能完全说是错的、假的、伪的,非科学,而不是伪科学。
科学的可证伪性,就如同一个自我批判的人,你很难找到他的槽点的。
随机双盲大数据的现代医学vs中医,对自己这么残忍了,我看你还敢张随就来的碾压姿态。
没有科学,7亿->70亿,
知识的副作用很少提及,比如环境污染、广岛长崎悲剧,解脱的解释是“工具无罪”,核技术还可以发电呢,
可是背后还是人,工具被造出来,就不可能是独立的,是被赋予了意图的,比如刀,
科学发展到现在,是不是误伤到了人,需要反思,
不去科学的分析科学而笃信科学,只是高级迷信
十七世纪,科学从哲学中分离,笛卡尔、牛顿《自然哲学的数学原理》、莱布尼兹三位首先是是哲学家,
科学脱胎于哲学,是因为过往学科里,只有哲学具备追问终极和反思自身两种属性。
追问终极和反思自身在科学上变成了数学和实验,成为了具象的手段,数学是精确的,实验是确定的。
本体=>物理学来解决,心智=>神经科学和生物学,语言=>认知科学…….
牛顿给我们的最大哲学观是机械论,后人根据万有引力发现了冥王星,他就是上帝!
但是科学也是一次次被自我颠覆,爱因斯坦,
物质的世界貌似都被处理了,但是精神的世界
哲学是介于科学和神学之间的一种存在,确定确定性知识所不能认识的事物,但是用的科学一样的追问态度,而不是教条和权威
机械论=量子科学=不确定=复杂科学,由盲目自信,回到了对自然的敬畏之心。
科学的盾:可证伪性;科学的矛:无限进步论=>”所有的恶都是知识不足带来的”。你批评知识,是你不够进步,原因是你缺乏知识。环境污染、人类内心空虚,是因为科学发展不够导致的。
但是,无限进步论,不可证伪,哈哈哈哈。对无限进步论的信仰,和宗教信仰,有什么本质区别么?
“信上帝仍然苦难,上帝说,那是对我的信任还不足够虔诚”
不反对科学,反对的是科学主义。
科学的发展来自于和非科学间多元的互动、启示。
对科学范式的挑战,来自于谜题,来自于反常,最终颠覆了集体心智。
其实,科学的发展就来自于这种范式的颠覆:
自然时空观=>绝对(机械)时空观=>相对时空观=>量子时空观=>???
科学世界观,是一种有态度没原则的傲慢。
马尔库塞的“单向度的人”:人类的自然科学方法,为人的统治提供了概念和工具,在满足人的需要的过程中,剥夺了人的独立思想、自主性和反对派存在的权利。</p>
<p><a href="https://www.bilibili.com/video/BV1qi4y1g7Rx?t=1727">https://www.bilibili.com/video/BV1qi4y1g7Rx?t=1727</a></p>
<p>1、认知论:经验,通过感知获得,如何确定感官信息是可靠的,如何确定这个世界是真是的,笛卡尔的“我思故我在”,指的是思考着的我,才是真实的存在。
2、心灵哲学:什么是意识、心灵、精神,二元论认识肉体和精神是分开的,忒修斯之船
3、自由意志:可以控制原始欲望,就代表你有自由意志,因为人有自由意志,社会的法律、司法才得以建立。
4、伦理学:关于伦理、道德,不是描述性而是规范性和评判性的。功利主义的幸福最大化,道德可以量化;义务论,康德的学说,认为每个人的尊严和权利都应该被尊重。
5、人生意义:虚无主义、存在主义(萨特,存在先于本质,人生自己来谱写)、荒谬主义
6、上帝存在</p>
<p><a href="https://www.bilibili.com/video/BV1UT4y1G7VZ">https://www.bilibili.com/video/BV1UT4y1G7VZ</a></p>
<p>叔本华,集成了康德的现象和本质的假设,但是康德说,每个事物背后都有物自体,是割裂的,叔本华认为,因为理性无法穿透物自体
人们在尝试理解这个世界过程中,割裂了这个世界,导致了痛苦。这里叔本华叫做表象
宇宙是一个无边无际、无目的、无意识的整体,我们的理性认知,把这个统一的意志(will)给分割了,这种分割导致被分割的个体之间进行了对抗和冲突。
人类是欲望的努力,人生在不满和无聊中摇摆,欲望使你不满,但是被满足后有深感无聊。对抗这种悲观的方法就是自杀。
解决办法一个是艺术,一个是普世共情,艺术可以穿透时空、个体表象,让你感知到永恒的不割裂的存在;而共情感受,是一种更普世的</p>
<p><a href="https://www.bilibili.com/video/BV1Bx41197x2">https://www.bilibili.com/video/BV1Bx41197x2</a></p>
<p>什么塑造了今天的我。
我们是生活在一系列复杂原因造成的后果当中。
形成了我们整个一套的观念系统,也就是我们的世界观。
什么塑造了今天的世界?答案是现代性。
什么塑造了我们来处理今天整个世界的世界观?答案是历史唯物主义。
那么问题接着来了,
什么是现代性?
什么是历史唯物主义?</p>
<p>现代性:人本、理性。
这两个概念都是启蒙运动之后才有的概念,中世纪是神本、信仰的,古代中国是宗族本、德行体系。都是集体心智。
这些都是为了配套当时的自然、生产力、文化、统治的。
不同集体心智的人是无法相互理解的。
所以不能认为人本和理想就是天经地义的,尽管我知道你认为是天经地义的。
现代性,就是要批判人本和理性。批判它们带来的伦理危机。
人本之后,一切都由你,都被允许,但是皆无意义,我们被投入到一种供需关系里,被金钱丈量,
消费主义,让我们要幸福可以买得到,所以你被引导着,奋斗者,人本主义告诉我们,我们可以追求任何我们想追求的东西,
理性主义告诉我么,我们追求的任何东西都没有意义,
我们陷入一种矛盾和迷茫当中</p>
<p>历史是对时间链的回溯,唯物认为是物质,唯心认为是思想理念,但是都只是一种视角,有没有更高的维度和视角?
我们这样二元化,“唯”字,是因为,我们认识物质、客观和精神、主观是对立的,甚至是唯一的。
但是实际上,物质和精神之间,有一个中间物,“观念真实世界”!
怎么理解这个词?
就是人类想象出一个共同的共识性的想象,然后在客观世界之上产生了一个真实的观念和影响。
“国家、宗教、政治、艺术、公司….,甚至是漫威”,
是一种集体文化基因,也有人称之为“模因”,
哲学就是哲学史,哲学史就是思想史,思想史就是观念史,
好像世界就是牛顿、爱因斯坦开启的,其实,还有另外一堆人,同样影响着我们,也就是唯物+唯心。</p>
<p>近代哲学的开始,是从笛卡尔。
为何从他开始?
因为从他开始了人本和理性的探讨。
通过“我思故我在”,实际上是明确了“我”这个主体的存在。
然后才可以通过理性工具,去一个个的认识和把握“客体”(客观世界),
先确定我,然后通过理性,去把握外部世界,二元统一了起来。</p>
<p>休谟否定了归纳法?从而通过怀疑论彻底否定了笛卡尔???</p>
<p>康德的先验知识和有限理性,批判了休谟???但是也主客体分裂,有限理性问题最终是靠黑格尔解决的。</p>
<p>黑格尔认为世界不是二元的,而是一元的,二元有时候看上去对立,但都是在一个正反合的一个过程中,
我们愚蠢的人类必须制造对立的概念才能把我自身,比如善恶、美丑,都是靠制造正反概念才能明确彼此,
实际上,她们其实都是事物的不同面而已,是事物“绝对精神”的外在表现而已,
绝对精神是一种至高无上的理性,理性是无限的,万物是同一的,只是我们尚未达到而已,“理性之神”,
他的理论把历史和哲学结合到一起,形成一种宏大的发展的、规律的叙事效果,直接启发马克思。
“绝对精神”在马克思那里变成了“共产主义”。
不过,马克思那里,黑格尔的形而上的思辨哲学,变成了一个形而下的实践哲学。
真正做到了知行合一,塑造了我们。</p>
<p>但是马克思哲学、黑格尔哲学属于决定论,认为世界是规律性的,把人进行了抽象,
尼采登场,后现代主义萌芽,</p>
<p>尼采认为,从苏格拉底到黑格尔这种形而上构建的,都这个世界是秩序的、统一的、完整的,是存在一种崇高目的的,
他们构建了一套不言自明的评价体系“价值和事实的关联”,形成了我们所有人的观念共识,为万物立法,规范和评价所有的事情,
“肉体是低贱的,精神是高贵的;欲望是低贱的,理性是高贵的;混乱是低贱的,秩序是高贵的”
人类与生俱来的“权力意志”,被“奴隶道德”驯化,我们要建立“主人道德”,重新拿起权力意志来创造自己的意义,成为“超人”。</p>
<p>海德格尔用一套全新的、重新构建所以超级复杂的文本,是为了脱离之前那套形而上的观念系统和话语体系,之前的已经被尼采摧毁了,
形而上的基础不再是主体、本质、理性,而是更出现的“存在”,存在就是背景,存在无法展现自身,只能通过存在者来展现,
我理解,还是一种唯心,只不过这种唯心是更高阶、更高维,你的存在,是你自己意识不到,是更高维的
比如我作为人类,运用我的理性,创造了世界,但是更高阶的上帝视角上,俯视我的时候,我才有被存在的价值,
如果没有这个更高阶的天地自然,我的存在就没有任何意义,
他那句“向死而生”,在我看来,也是自己法则终极的规则下,我才意识到我生而存在着,
所以,这种存在是一种我们这个维度的人,无法用理性能够理解的,他实际上也是在呼应尼采理性的局限性。
存在不可说,是超越理性的。</p>
<p><a href="https://www.bilibili.com/video/BV1gt411V75B">https://www.bilibili.com/video/BV1gt411V75B</a></p>
<p>我们说,现代性,是人本+理性,但是你会观察到,很多人不理性,也活得挺滋润的,
其实,理性现在确实已经别贯彻到学科、政治、行政里面,但是生活当中,我们却是 “人本+欲望”,
过去理性一直在压制欲望,但是,现代突然有一天,解决了这个欲望问题,
亚当斯密承认人的自私和贪婪,并且合理利用了它,把他引入了商业社会,
现代西方其实是系统理性+人本欲望+神本信仰的综合体,
而东方则是系统理性+人本欲望+宗族本位德行的综合体,不过德行没了,变成了胡适引入的“实用主义”,</p>
<p>我们现在的世界就是,物质繁荣,欲望膨胀,自我迷茫</p>
<p>萨特的存在主义和海德格尔的存在,不是一个层次的东西,
海德格尔的存在是更大范畴的,你作为存在者,存在是在你理性之外,你可以感知到,但是是一种不可名状的东西,他都是存在的显现,
萨特的存在尺度小的多,你是自由的,你去发明吧,没有任何普遍的道德准则去指点你应该怎么做。</p>
<p>萨特和海德格尔的根本却别是,海德格尔强调我们每个人作为存在者是关联的,是在大背景之下,是一种大我;而萨特把我们每个人看做是绝对自由的个体,你的拥有绝对自由,选择的自由,“他人即地狱”,他者是一个负面的,影响你自由的因素,是一种小我,是冲突的来源,是自我的对立面。大乘和小乘的区别。</p>
<p>梅洛庞蒂,萨特的好友,不同意萨特这种又陷入二元对立的逻辑当中,他把自我给弱化,更强调是各个事物之间的关联关系,这种关系被他自己叫做“结构主义”,我的理解,其实就是狭义版的海德格尔的存在。这种结构,先于事物,先于你我就在那里了,你只不过是加入了这个结构当中而已。
我们的身体在世界交互过程中,产生最重要的结构,就是“语言”,语言是一种结构。
要想谈论人,就要谈论语言,要想谈论语言,就要谈论社会,
20世纪下半夜,存在主义就在欧洲学界式微了,
结构主义,列维斯特劳斯发扬光大的,“事物的表象是不重要的,背后的共有结构才是重要的”,对象不重要,对象与对象的关系更重要,是关系塑造了对象,而不是反之。
这里特别提一下,语言,索绪尔的语言符号学,探讨语言结构,提出过一个一阶符号、二阶符号的概念,一阶符号是符号表面意义,二阶符号是它在文化中扭曲出来的意义,</p>
<p>对结构主义的颠覆者,认为结构,特别是语言、符号,都是变化的,流变的,所以不存在一个稳定的结构的,
他举得例子“钱是交换的中介,国家是一个政治的实体…”,其实,都是会变得,钱只是信任的故事,国家是想象的共同体。。。</p>
<p><a href="https://www.bilibili.com/s/video/BV13W411T7GG">https://www.bilibili.com/s/video/BV13W411T7GG</a></p>
<p>后现代,哲学开始消解,体系开始消解,
逐渐向艺术、美学、文学、政治哲学转变,</p>
<p><a href="https://www.bilibili.com/video/BV1Kp411o7Bc/">https://www.bilibili.com/video/BV1Kp411o7Bc/</a></p>
<p>庄子的无用之树的故事,
还有女孩的哲学分支的</p>
<p><a href="https://www.bilibili.com/video/BV1f4411x7E9">https://www.bilibili.com/video/BV1f4411x7E9</a></p>
<p>国家、宗教、商业、手工业,
宗教发展,信主,所有世界都陷入宗教的信仰当中,有其必然性,
中国是宗族社会,重德,发展出礼教,
古希腊是一个异端,商业的发展,复杂性高于农业,思维更活跃,
“神如何创造世界,世界的本质是什么”民主,理智+逻辑去探求世界的本质,
哲学、自然科学、数学。古罗马延续了希腊,古典时代。
直到,古罗马将基督教奉为国家。分裂,战乱,中世纪。
中世纪,国家、宗教,相恨相杀纠缠千年。
艺术,成为宗教的仆人,商业,是罪恶。
理性+宗教=>中世纪的经院哲学。5-15世纪,古罗马陷落到君士坦丁堡陷落,千年的。
启蒙运动,开始关注人本身,人的身体,绘画、雕塑,艺术领域去宗教化=>文艺复兴,
人的自由、理性的人文主义,人被解放出来后,进一步形成了科学革命,然后是工业革命,
宗教也被影响,宗教改革,新教,不再把商业视为罪恶,而是荣耀上帝的事情,
社会取代了教会,人类进入现代性社会,
人类获得前所未有的科技的力量,国家,商业,资本,金融,科技,蓬勃发展,
资本为了发展,寻找更廉价的劳动力和原材料,更多可以倾销商品的市场,
人们都在相信明天会更好的时候,资本主义让资本和国家不断的发展,
现代社会到来,人们发现,虽然一切都在发展,但是人们却并没有获得自由,
“上帝死了”,旧有的观念、价值都不复存在,人被资本、机器所异化,
人们找不到自己存在的意义,人们需要主观、非理性、自我的独特价值,
民族主义、社会主义、种族主义。。。发展起来,
资本主义继续发展,“你想要的幸福买得到”,商品大繁荣,但是,内心大空虚,
消费主义袭来,经济增长+负债经济。</p>
<p><a href="https://www.bilibili.com/video/BV1Pt4y127PQ">https://www.bilibili.com/video/BV1Pt4y127PQ</a></p>
<p>马克思的历史唯物和他的阶级斗争是矛盾的,因为阶级是人的,人群的,主观的,这就不是历史唯物的产物,</p>
<p>亚当斯密(看不见的市场的手)+洛克(有限政府)
人类按照这种方式形成国家和社会制度,是延续了理性主义,即人类会按照理性不断地追求更美好的世界,
马克思、尼采、佛洛依德、海德格尔,后现代的开启者
后现代真正成型,是在法国,福柯(现代思潮的批判)、列维斯特劳斯(法国结构主义、文化人类学)、雅克拉康(精神分析的结构主义化)、罗兰巴特、阿尔库赛。
还有德里达提出了整个解构哲学,
后现代的特点:
1、宏大叙事的消解。2、知识之间没有沟通。
后现代的特点:
1、差异性(个性),统一知识体系的解体。2、3、解释学(我理解就是逻辑分析),对多元的理解。4、历史理论。</p>
<p><a href="https://www.bilibili.com/video/BV1EZ4y1K79v">https://www.bilibili.com/video/BV1EZ4y1K79v</a></p>
<p>逻各斯主义,不接触</p>
<h2 id="教材">教材</h2>
<p>应该非常多,我信息有限,我就列一列我了解和学习这些内容的来源</p>
<h3 id="书">书</h3>
<ul>
<li>《<a href="https://book.douban.com/subject/1008189/">西方哲学史</a>》 罗素,其实网上推崇梯利的版本,我不小心买错了,翻了翻,也很棒</li>
<li>《<a href="https://book.douban.com/subject/14439405/">哲学的故事</a>》,无意间淘到的书,主要的思想和哲学家都介绍到了</li>
<li>《<a href="https://book.douban.com/subject/1045201/">哲学的慰藉</a>》,资中筠老太太翻译的英伦鬼才的作品,重点介绍了他喜欢的几位哲学家</li>
<li>《<a href="https://book.douban.com/subject/3658068/">大众哲学</a>》已故的艾思奇老先生的作品,据说毛主席也推荐,马列专修</li>
<li>《<a href="https://book.douban.com/subject/1045818/">苏菲的世界</a>》,别笑,我这种哲学小白,其实特别需要这种通俗读本快速得到全貌</li>
</ul>
<h3 id="视频">视频</h3>
<ul>
<li><a href="https://space.bilibili.com/247822643/video">谌洪果系列分享</a>:很佩服的西北大学的“退学老师”</li>
<li><a href="https://space.bilibili.com/457161443">人文Geek</a>:做的很棒的课件视频,偏后现代</li>
<li><a href="https://www.bilibili.com/video/BV1ft411877F">张志伟/西方哲学智慧大学课程</a> :张老师学院派,讲得很好</li>
<li><a href="https://space.bilibili.com/90070513">钱金铎的分享</a>:年轻但是很学术</li>
<li><a href="https://www.bilibili.com/video/BV11t411E7aS?p=12">维特根斯坦专题</a>:偶像大拼盘</li>
<li><a href="https://www.youtube.com/channel/UCE2tB8fPCGoMGAwwBMc7BuQ">OkButSoWhat</a>:油管上的大爱</li>
<li><a href="https://space.bilibili.com/25221249">野鱼姬小MM</a>:哲学系可爱的小MM</li>
<li><a href="https://space.bilibili.com/376872704">潜在狗子</a>:</li>
<li><a href="https://space.bilibili.com/52398059">micc麦总说哲学</a>:斯坦福的在读哲学博士</li>
<li><a href="https://space.bilibili.com/362588980">汤质看本质</a>:很牛逼,不过后面开始水</li>
<li><a href="https://space.bilibili.com/58617276">回到2049</a>:神神叨叨的神人</li>
<li><a href="https://space.bilibili.com/142128036">犹格索斯泡泡</a>:台湾的一个给高中生做哲学科普的男神老师,很棒</li>
<li><a href="https://space.bilibili.com/375089647">多萝西123</a>:哲学系美女学霸</li>
<li><a href="https://www.bilibili.com/video/av13373871">耶鲁大学哲学公开课</a>,老爷爷讲的非常有激情</li>
<li>王东岳老师的东西方哲学中的西方哲学部分(混沌大学)</li>
<li><a href="https://www.bilibili.com/video/av16804255">【陈亚军】现代英美哲学</a></li>
</ul>
<h3 id="音频">音频</h3>
<ul>
<li>徐贲老师的看理想app上的《现代的诞生:启蒙运动经典》和《自由的黎明:文艺复兴经典》,还有未来要推出的第三部,非常赞,必须推荐</li>
<li>傅佩荣的西方哲学:喜马拉雅专栏</li>
<li>郁喆隽的复旦哲学课:喜马拉雅专栏</li>
<li>周濂讲西方哲学智慧:喜马拉雅专栏</li>
<li>雷思温哲学闪耀时:豆瓣音频</li>
</ul>
<p>(这些音频涉及到版权,鼓励大家购买,如果囊中羞涩,也可以跟我联系,我分享部分给你)</p>
VGG的fine tunning
2019-04-28T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/04/28/vgg_fine_tune
<p>我们都知道,VGG模型是一个简单易用的模型,你可以用它来做fine-tuning,也就是微调。把图像管给他,然后他得到一个抽象的向量,你用这个向量来做其他的任务。这个网络已经有人做过很好的训练了,里面的那些权重都已经接近极致,所以你也不需要再大改了,拿来直接用就好。</p>
<h1 id="问题">问题</h1>
<p>我正好手头有个项目需要用vgg作为基础,来训练我的任务,于是,我兴冲冲的就搭了一个vgg网络:</p>
<pre><code>def vgg16_2(inputs, scope='vgg_16'):
with tf.variable_scope(scope, 'vgg_16', [inputs]) as sc:
with slim.arg_scope([slim.conv2d, slim.fully_connected],
activation_fn=tf.nn.relu,
weights_initializer=tf.truncated_normal_initializer(0.0, 0.01),
weights_regularizer=slim.l2_regularizer(0.0005)):
net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')
net = slim.max_pool2d(net, [2, 2], scope='pool1')
net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')
net = slim.max_pool2d(net, [2, 2], scope='pool2')
net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
net = slim.max_pool2d(net, [2, 2], scope='pool3')
net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4')
net = slim.max_pool2d(net, [2, 2], scope='pool4')
net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5')
net = slim.max_pool2d(net, [2, 2], scope='pool5')
net = slim.fully_connected(net, 4096, scope='fc6') <----------------全链接层
net = slim.dropout(net, 0.5, scope='dropout6')
net = slim.fully_connected(net, 4096, scope='fc7')
return net
</code></pre>
<p>用的是slim,是一个简化你用tensorflow low api的工具package,我想当然的的就加入上了上面说的“全连接层”,然后跑起来,然后,就报错了啦:</p>
<p>说我的fc7层有问题,恩?怎么维度不一致呢?lhs shape= [4096,4096] rhs shape= [1,1,4096,4096]
lhs是我的图定义,也就是我的代码中定义的维度;而rhs是模型文件中的维度。不一致!</p>
<pre><code>Assign requires shapes of both tensors to match. lhs shape= [4096,4096] rhs shape= [1,1,4096,4096]
[[node save/Assign_29 (defined at /Users/piginzoo/software/python3/lib/python3.6/site-packages/tensorflow/contrib/framework/python/ops/variables.py:748) = Assign[T=DT_FLOAT, _class=["loc:@vgg_16/fc7/weights"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](vgg_16/fc7/weights, save/RestoreV2:29)]]
</code></pre>
<p>难道是我的输入有问题?还是,啥问题?馒头雾水</p>
<h1 id="slim的vgg实现">slim的vgg实现</h1>
<p>然后,我看了<a href="https://gist.github.com/omoindrot/dedc857cdc0e680dfb1be99762990c9c/">这篇</a>,噢~,原来slim中就有vgg的实现,</p>
<pre><code>logits, _ = vgg.vgg_16(images, num_classes=num_classes, is_training=is_training, dropout_keep_prob=args.dropout_keep_prob)
variables_to_restore = tf.contrib.framework.get_variables_to_restore(exclude=['vgg_16/fc8’])
init_fn = tf.contrib.framework.assign_from_checkpoint_fn(model_path, variables_to_restore)
init_fn(sess)
fc8_variables = tf.contrib.framework.get_variables('vgg_16/fc8’)
fc8_init = tf.variables_initializer(fc8_variables)
sess.run(fc8_init)
_ = sess.run(fc8_train_op, {is_training: True})
</code></pre>
<p>原来,人家只用到了fc7,fc8没有加载,而是自己初始化,用来训练自己的东西。</p>
<p>然后我一跑,恩,没问题,好了。于是,我修改了自己的代码,也没问题。</p>
<p>可是,我不想用slim的vgg,我自己写的究竟跟他差在什么地方,于是点进去看了slim的vgg实现:</p>
<pre><code> net = slim.conv2d(net, 4096, [7, 7], padding='VALID', scope='fc6')
net = slim.dropout(net, 0.5,scope='dropout6')
net = slim.conv2d(net, 4096, [1, 1], scope='fc7') <--------看这里!
</code></pre>
<p>什么?居然不是全连接,而是做了一个1x1的卷积,从而实现了全连接的效果。怪不得是[1,1,4096,4096]呢!原来是卷积的结果。靠!
可是,你去看人家的VGG定义:</p>
<p><img src="/images/20190428/1556444778797.png" alt="" class="myimg" /></p>
<p>其实,就是卷积啊,是自己学艺不精,没彻底搞清楚,就动手了,惭愧~</p>
<h1 id="照着修改自己的vgg图">照着修改自己的vgg图</h1>
<p>那好吧,于是,理解了原因那就好办了,我还是用自己的vgg的图定义把,然后加上一个神奇操作 tf.squeeze</p>
<pre><code>vgg_fc7 = tf.squeeze(vgg_fc7,axis=[1,2])
</code></pre>
<p>这个squeeze,可以帮助我们把多余的1维的去掉,就是把[1,1,4096,4096]=>[4096,4096]了,赞!
可是为何是axis=[1,2],而没有[0]呢?恩,0位置是batch。</p>
<h1 id="必须是224x224">必须是224x224</h1>
<p>是的,VGG的输入必须是224x224,为何呢?</p>
<p>因为上面说的最后模拟成全链接的那个[batch,1,1,4096]的时候,然后你才可以squeeze中间的两个1。如果输入不是224,做完6层的池化后,成不了[1,1]的,这样就会报错。其实,你去看slim的实现中,也是默认最后一定要宽W和高H变成1的。</p>
<h1 id="keras来fine-turning-vgg">keras来fine-turning vgg</h1>
<p>一不做,二不休,我顺道看了一下,我搜到的关于keras如何fine-tuning vgg的<a href="https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/">文章</a>:</p>
<pre><code>from keras.applications import VGG16
vgg_conv = VGG16(weights='imagenet', include_top=False, input_shape=(image_size, image_size, 3))
</code></pre>
<ul>
<li>靠的是include_top来去掉fc层。</li>
<li>通过trainable来frozen一些层</li>
</ul>
<h1 id="一些vgg的资源">一些VGG的资源</h1>
<ul>
<li><a href="http://deanhan.com/2018/07/26/vgg16/">VGG16学习笔记</a></li>
<li><a href="https://www.jianshu.com/p/e96b7a9b4229">VGG19模型训练+读取</a></li>
<li><a href="https://arxiv.org/abs/1409.1556">VGG论文</a></li>
</ul>
【OCR实践系列】CTPN、CRNN项目实践
2019-04-24T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/04/24/ocr-notes
<h2 id="概述">概述</h2>
<p>从春节后,就着手这个项目,从开始研究,到上手代码,到样本生成,到真实样本采集等,经历了整个过程,已经2个月了,项目也基本上完成的差不多了,开一个帖子,把自己的项目中的点滴记录下来。</p>
<h2 id="ctpn">CTPN</h2>
<h3 id="代码库">代码库</h3>
<p>我最终选择的是<a href="https://github.com/eragonruan/text-detection-ctpn">eragonruan</a>的版本,fork了一份,放到了我的<a href="https://github.com/piginzoo/text-detection-ctpn">github</a>上,但是CTPN确实有不少问题,如果让我重新选择的话,我可能会选择EAST或者PSNet。特别是PSNet,有个QQ群【785515057】,群主就是复现<a href="https://github.com/liuheng92/tensorflow_PSENet">PSNet代码</a>的“晓恒”,群里面也非常友爱互助,真后悔没有早点遇到这群人。不过,CTPN是一个保守选择,对我们的场景,是够用的了。我也没时间再去研究PSNet了,也只有这样了,下个项目或者二期的时候,我会去再选择PSNet了。</p>
<p>另外,我fork的版本修改了和增加了狠多内容,包括:</p>
<ul>
<li>重写了训练数据生成的部分,基本上是从头写的了</li>
<li>重构了样本split的代码</li>
<li>修改了样本加载机制,没有用TFRecord,而是用的shuffle_batch的方式</li>
<li>重构了训练代码,加入了早停、Validate验证等</li>
<li>重构了预测代码</li>
<li>修改了很多细节,模型细节,训练细节等</li>
</ul>
<p>网络结构没有什么变化,还是vgg做为backbone,然后接一个LSTM,全连接后,做一个anchor的正负例和回归预测。不过,这些代码里面,增加了大量的注释,都是我对代码的理解,特别是核心类anchor_target_layer.py,由于注释太多,我都惨不忍睹了,只好备份一下注释版,然后删除掉注释,整了一个整洁版。</p>
<h3 id="修改细节">修改细节</h3>
<h4 id="样本数据生成">样本数据生成</h4>
<p><a href="https://github.com/piginzoo/text-detection-ctpn/blob/banjin-dev/data_generator/generator.py">generator.py</a>,里面尽量模拟了各种的文字情况。从网上花钱买了一些白纸背景,然后,搞了一堆的20多种字体,生成的时候,不仅仅生成文字,还要生成数字,字母等,而且考虑到各自的比例,按概率生成。并且,做了各类模糊和处理,加入了仿射(完成倾斜),模糊,锐化,加入了干扰线。</p>
<h4 id="bbox样本的split">bbox样本的split</h4>
<p>我们知道,CTPN的样本,不是你的标注,而是把你的标注的四边形,变成一个一个的小矩形,这个是靠<a href="https://github.com/piginzoo/text-detection-ctpn/blob/banjin-dev/utils/prepare/split_label.py">split.py</a>完成的,代码读着有些诡异,要对opencv处理多边形的形态学api比较熟悉才行,倒是不难。有个细节说一下,切的时候,第一个图像必须是要和16整数倍的像素对齐的,所以可能会切出来宽度很小,但是太窄了,我担心当做样本去和anchor比较的时候,基本上没啥用(算IoU算不出高值来,算regression调整有比较剧烈),所以,我把小于3个像素的切出来的bbox都直接扔掉了。最后一个bbox也有这个问题,我本来也是同样的处理方法,后来发现右边总是没有,老缺一块,所以后来我就索性多算一些,直接把最后一个bbox直接设成16像素了,多点就多点吧,后面crnn识别反正也能搞定。</p>
<h4 id="训练">训练</h4>
<p><a href="https://github.com/piginzoo/text-detection-ctpn/blob/banjin-dev/main/train.py">train.py</a></p>
<h5 id="启动参数">启动参数</h5>
<p>加入了一系列的参数,方便训练,以及验证。如lambda,是按照论文加上的,主要是观察到rpn classes的loss和regression的loss,差差不多3个数量级,所以默认设置lambda=1000;</p>
<h5 id="验证f1和早停">验证、F1和早停</h5>
<p>之前的代码是没有验证集的,我加入了验证集,并且在训练的过程中进行验证。验证什么?验证F1。F1如何算?这个后面再细谈。</p>
<p>加入了F1,Recall,Precision的计算,并且把他们加到了summary中,以便于后续在TensorBoard中观察。</p>
<p>加入了早停,默认是5次,加载10张验证集图片,计算探测出来的大的GT框的F1,如果持续5次都没有改进,就会早停。</p>
<h5 id="图片resize">图片Resize</h5>
<p>之前,看eragonruan君的代码中总是resize图片,我当时就想,resize啥啊,不resize也没事啊,于是,我就给他的resize相关代码,都删掉了。我造的样本没事,但是,当我用真实的样本的时候,训练不超过100 steps就出现OOM,靠。同样的代码,我切回我的训练集,就没事。没办法,只好又把resize代码加了回来。resize的处理还是有些麻烦的,所以我秉承一个原则,在数据进入network前才做resize,从network预测出来的结果立刻就是un-resize回去。我写了单元测试,没事,但是还有一丝担心,这毕竟对训练息息相关。</p>
<h5 id="可视化调试">可视化调试</h5>
<p>我在session.run的feed_dict加入了一个张量,“input_image_name”,把文件名传入了计算图,为何呢?为了可视化。我想在训练过程中,把整个训练过程可视化。可视化什么?可视化anchor的产生过程。anchor的生成,和GT别的比较,选择,这个过程都是在代码中,只能通过读代码理解代码,才能理解,一旦有问题,你根本无法验证。我很郁闷这点。所以,我就写了一个调试代码,把图片传入后,把anchor生成、筛选过程等,都可视化出来,把anchor、gt和一些调试信息,都画到了图上,输出到data/pred目录下。</p>
<h5 id="评价">评价</h5>
<p>实现了对CTPN预测出来的框的检测,实现是参考<a href="https://blog.csdn.net/weixin_35653315/article/details/71591596">这篇</a>和<a href="https://blog.csdn.net/liuxiaoheng1992/article/details/82632594">这篇</a>:</p>
<blockquote>
<p>ICDAR2013则使用了新evaluation方法:DetEval,也就是十几年前Wolf提出的方法。“新方法”同时考虑了一对一,一对多,多对一的情况, 但不能处理多对多的情况。
(作者说,实验结果表示在文本检测里这种情况出现的不多。)
这里的框无论是标定框还是检测框都认为是水平的矩形框</p>
</blockquote>
<p>其实,思路很简单,就是分为3种情况,1对1,1对M,M对1。每个框都属于这3种情况中的一个,不会重复。细节可以参考那两篇<a href="https://blog.csdn.net/liuxiaoheng1992/article/details/82632594">博文</a>。</p>
<p>这个算法支持对小框,也就是bbox,和大框(GT)的评价,不过,后来bbox的评价基本上被我废弃了,因为,没必要,直接看大框的就可以了。</p>
<h5 id="anchor的筛选">Anchor的筛选</h5>
<p><a href="https://github.com/piginzoo/text-detection-ctpn/blob/banjin-dev/utils/rpn_msr/anchor_target_layer.py">anchor_target_layer.py</a></p>
<p>我认为,这个类才是整个项目的核心,代码复杂,也不好理解,也是我花时间比较多的内容。看这个内容,还是要对论文熟悉,对算法熟悉,否则,你看着肯定是馒头雾水。你可以参阅白裳的<a href="https://zhuanlan.zhihu.com/p/34757009">这篇讲解</a>,我这里只说说我趟的坑:</p>
<h6 id="一个诡异问题">一个诡异问题</h6>
<p>曾经遇到过一个问题,</p>
<pre><code>gt_argmax_overlaps = overlaps.argmax(axis=0) #G#找到每个位置上9个anchor中与gtbox,overlap最大的那个
gt_max_overlaps = overlaps[gt_argmax_overlaps,np.arange(overlaps.shape[1])]
gt_argmax_overlaps = np.where(overlaps == gt_max_overlaps)[0]
labels[gt_argmax_overlaps] = 1 # 每个位置上的9个anchor中overlap最大的认为是前景
</code></pre>
<p>这段代码我理解不了,觉得没用,就给注释了,原因是,我把gt_argmax_overlaps = np.where(overlaps == gt_max_overlaps)[0]得到的这个gt_argmax_overlaps对应的anchor画出来(紫色的),全屏幕都是了:</p>
<p><img src="/images/20190424/1556102436587.png" alt="" /></p>
<p>其实我是没想清楚的,当时,后来凭借实证,就觉着这个代码是祸害,就给注释了。后来和同事讨论了一上午,终于搞清楚了,这个是有用的,这个是有用的。</p>
<pre><code># 这句话是找到每个gt对应的最大的IoU的那个anchor的行号,一共有多少个个呢,gt的个数一样,也就是270多个
gt_argmax_overlaps = overlaps.argmax(axis=0)
# 然后,从overlaps中,把每个行,对应的gt的那列,的值,拿出来,是一个一维数组(这块有点绕,看下面的例子吧)
gt_max_overlaps = overlaps[gt_argmax_overlaps,np.arange(overlaps.shape[1])]
# gt_max_overlaps是长度为\|GT\|,值为overlaps中每个gt对应最大的ioU的值的数组,
# 那这个where后,就是把这个GT列对应的其他的和这个max最大IoU值一样的anchor行号,也找出来
gt_argmax_overlaps = np.where(overlaps == gt_max_overlaps)[0]
labels[gt_argmax_overlaps] = 1 #设置为前景
</code></pre>
<p>所以,这个就是说,把某个GT对应的最大的IoU的anchor挑出来,但是,对某个GT来说,还有别的anchor和他相交的IoU的值和这个max值一样的话,你也不应该漏掉呀,恩,合理,所以给挑出来。可是,为何挑出几乎所有的anchor了呢?满篇的紫框?!原因是,某个GT的最大的IoU值为0,这样的话,不得了了,因为每个anchor都有等于0的overlap中的值,所以每个anchor都成为备选了。那为何为0呢,按理说,GT最大的那个anchor,总是存在的,至少有一个anchor应该和GT相交吧,那IoU怎么也不是0呀?!我们怎么办呢?我们只好把这个问题anchor,也就是IoU=0的这个anchor画出来,也把他相交最大IoU的那个GT也画出来。</p>
<p><img src="/images/20190424/1556102524860.png" alt="" /></p>
<p>看到了吧,就是最右侧那个半拉子绿框。后来我俩一想,终于想明白了:</p>
<p>那就是你的anchor是按照feature map生成的,是16像素的整数倍数,可是你用feature map还原到原图的时候,那最右侧的,大于最后一个16整数倍像素的,但是又不到下一个16像素宽的边,这个之间的像素,是无法被anchor们覆盖掉的。可是,偏偏有个gt就在这里。那么这个gt无论和那个anchor算IoU都是0啊!这个就是问题所在了。</p>
<p>这个问题,未来的影响是,这种地方的文字可能检测不到了,恩,这是问题。
但是对其他的应该没啥影响,所以,我决定还是忽略掉。
这个问题,很隐蔽,我们的体会就是,一定要可视化,这样,很多问题就明显的显现出来了。</p>
<h5 id="关于预测的交叉熵">关于预测的交叉熵</h5>
<p>有一段时间,死活预测不出来,我只好又回去读论文:
1.读论文,某个GT框,跟他对着的最大IoU的那个anchor,自动就是样本了,我之前给忽略了,这样的样本,不知道是不是跟这个有关系,但是论文里明确说这样的得要:</p>
<p><img src="/images/20190424/1556102734104.png" alt="" /></p>
<p>啥意思?就是说,算回归的时候,除了那些是正例的框外,跟GT的IoU大于0.5的也可以参与回归计算。貌似我fork的这个text-detect-ctpn代码没有实现。如果实现的话,在算overlaps矩阵的时候,应该单独再存一下IoU>0.5的anchor们,他们也许达不到前景的目标$(0.7)$,但是,他们可以参与均方误差回归的。
恩,你看,他的前后景判断,和,他的回归用的anchor可能不是一样的、一批的,但是,我们的这个项目里面,是把这两者绑定到一起的,不过,在我看来,这样倒也无所谓。</p>
<p>一直有个疑问?为何要算背景的概率?你既然算了前景的概率,用1减去前景的概率,不就是背景概率了么?这不是个二分类么?!我看代码里面:</p>
<pre><code>cls_pred_shape = tf.shape(cls_pred)
cls_pred_reshape = tf.reshape(cls_pred, [cls_pred_shape[0], cls_pred_shape[1], -1, 2]) #2是指两个概率值,(1, H, WxA, 2)
rpn_cls_score = tf.reshape(cls_pred_reshape, [-1, 2]) #(HxWxA, d)
rpn_keep = tf.where(tf.not_equal(rpn_label, -1)) # rpn只剩下是非-1的那些元素的下标,注意!是位置下标!
rpn_cls_score = tf.gather(rpn_cls_score, rpn_keep) # 把对应的前景的概率取出来,rpn_cls_score是从cls_pred来的(具体自己读代码)
rpn_cross_entropy_n = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=rpn_label, logits=rpn_cls_score)
</code></pre>
<p>然后,我打印了一番:
做交叉熵:predict[[[0.000618884573 -0.00124687876]][[-0.002699879 -0.00737032201]]
卧槽!你看,不是0/1分布的(0,1分布应该是相加为1,概率分布嘛),这!这!这!</p>
<pre><code>tf.nn.sparse_softmax_cross_entropy_with_logits:函数输入的logits是非softmax的。
cls_prob = tf.reshape(tf.nn.softmax(tf.reshape(cls_pred_reshape, [-1, cls_pred_reshape_shape[3]])),
[-1,
cls_pred_reshape_shape[1],
cls_pred_reshape_shape[2],
cls_pred_reshape_shape[3]],
name="cls_prob")
rpn_cross_entropy_n = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=rpn_label, logits=rpn_cls_score)
</code></pre>
<p>后来搞清楚,tf.nn.sparse_softmax_cross_entropy_with_logits,要求你出入的logits,一定是非归一化的值。</p>
<h5 id="训练的trick">训练的trick</h5>
<p><img src="/images/20190516/1557987793260.png" alt="" /></p>
<p>这一次的训练到达了84%的F1,效果如何呢?</p>
<p><img src="/images/20190701/1561968701739.jpg" alt="" class="myimg40" /></p>
<h2 id="crnn">CRNN</h2>
<p>CRNN的难点在于CTC,其他的都好说。不过还有一些小的trick,在实现和训练过程中。</p>
<h3 id="代码库-1">代码库</h3>
<p>我的代码位于<a href="https://github.com/piginzoo/CRNN_Tensorflow">Github</a>,是基于一位百度的工程师的<a href="https://github.com/MaybeShewill-CV/CRNN_Tensorflow">实现</a>,我没有用其中的TFRecord方式,而是采用shuffle_batch的方式加载数据。</p>
<p>我的主要的修改包括:</p>
<ul>
<li>修改了字符集合,添加到了将近7000的字符集</li>
<li>修改了数据记载方式,采用了tensorflow推荐的shuffle_batch方式</li>
<li>自己实现了样本生成的代码</li>
<li>修改了加载数据的方式</li>
<li>增加了validate和早停</li>
</ul>
<h3 id="实现">实现</h3>
<h4 id="字符集和映射处理">字符集和映射处理</h4>
<p>最开始的代码里面只有很少的一部分字符集,我后来找了一个5000的,是包含了一级字库[3375个]和二级字库[3008个],即charset.txt,<a href="https://www.qqxiuzi.cn/zh/yijiziku-erjiziku.php">参考</a>,但是还是不够,后来,又加入了标点符号和一些生僻字,达到了6770个,也就是charset6k.txt。</p>
<p>字库文件的第一个为空格,作为保留,这个原因是因为,在转化labels里面文字对应的id,到稀硫张量的时候,id=0是一个无法使用的,因为稀硫张量会忽略所有的值为0的元素。另外,在load完词表文件后,又在最后的位置加入一个空格。这个空格原因是CTC_Loss函数需要的:</p>
<pre><code> The `inputs` Tensor's innermost dimension size, `num_classes`, represents
`num_labels + 1` classes, where num_labels is the number of true labels, and
the largest value `(num_classes - 1)` is reserved for the blank label.
For example, for a vocabulary containing 3 labels `[a, b, c]`,
`num_classes = 4` and the labels indexing is `{a: 0, b: 1, c: 2, blank: 3}`.
</code></pre>
<p>[摘自tensorflow ctc_ops.py]源码。</p>
<h4 id="样本生成">样本生成</h4>
<p>网上有很多样本集,不过,我还是造了自己的样本。</p>
<p>生成逻辑,实际上是借用了<a href="https://github.com/piginzoo/text-detection-ctpn">CTPN</a>中生成一个文本块的代码,主要完成不同背景、字体、字号、倾斜、噪音等多种处理。你可以用来生成自己的样本。</p>
<p>训练了一轮后,发现正确率只能到50%左右,还是不行。因此再进行了一轮的改进。</p>
<p>识别过程中的一些微小问题:</p>
<ul>
<li>小数点被识别成了逗号(发现是样本中小数点太少)</li>
<li>空格被认成负号,原因是缺少左右空格的样本(左右没有留白,但是实际上的切出来的图片都是有留白的)</li>
<li>英文效果不好(英文样本太少)</li>
<li>有些缺一角的识别不好(</li>
</ul>
<p>针对这些问题做了如下改进:</p>
<ul>
<li>发现了一个bug,数字都是整数,所以导致没有小数点</li>
<li>对所有数字,会左右加空格</li>
<li>专门有一部分做字母生成,字母和数字混合,字母和数字和汉字混合在校验的时候,把不认识的字都替换成了■,并且把OolIZS=>0011zs</li>
<li>用哼仔提供的程序切除的500万张里面挑了2万张来做验证集</li>
</ul>
<p>然后,又深入修改造样本的程序,并且,还让哼仔开发了一个打标注程序,请同事们帮着打了一些标注文件,一共4万张,是基于阿里的识别结果基础上做的再校验。</p>
<p>修改样本生成程序:</p>
<ul>
<li>修改了data_generator,支持多进程同时生成,提高效率</li>
<li>增加了image_enhance,实现了大于19种增强算法,替换了之前的3种</li>
<li>微调了image_enhance的各类参数,特别是kernel size</li>
<li>增加了sample_enhance,用来基于标注文件来生成更多的样本
其实是基于4万张样本,在基础上做了数据增强</li>
<li>微调了ctpn中的文字生成,增加了特殊字符的增强,空格的增强</li>
</ul>
<p>最终,是用4万张中的3.5万张标注样本增强生成了60万张图片,另外用生成程序,再造了270万张图片,然后一共用着330多万张图片,训练了3天3夜,最终达到了86%的正确率。</p>
<h4 id="加载数据">加载数据</h4>
<p>数据加载改成了用shuffle_batch的方式:</p>
<p>首先把图像文件名和标签文件名生成文件名队列</p>
<pre><code>input_queue = tf.train.slice_input_producer(
[image_file_names_tensor,labels_tensor],
num_epochs=config.cfg.TRAIN.EPOCHS,shuffle=True)
</code></pre>
<p>然后加载图像,并且,转成张量。对应的标签则转成“SparseTensor”。</p>
<p>最后使用shuffle_batch,生成批量的tensor</p>
<pre><code>images_tensor, labels_tensor,seq_len_tensor = tf.train.shuffle_batch(
tensors=[images, labels,seq_len],
batch_size=batch_size,
capacity=100 + 2 * batch_size,
min_after_dequeue=50,
num_threads=FLAGS.num_threads)
</code></pre>
<p>图像论文里面是100x32,我改成了256x32,让他宽一些。但是,不是标准大小的图像传入改如何处理呢?我觉得有四种方式:</p>
<ul>
<li>直接暴力resize成为256x32</li>
<li>在一个批次里,找最大的宽度或者中位数宽度,向他对齐</li>
<li>根本不需要考虑对齐,直接就使用dynamicall-lstm的sequence_length参数来解决</li>
<li>还有一种方法就是保持原图比例,然后加入padding</li>
</ul>
<p>我们最开始还使用的是第1种暴力方法,后来尝试了最后一种padding方法,padding白色背景,但是,我其实最喜欢的还是第三种方法,远航fork了一个版本,正在改成这种方式。</p>
<h4 id="网络设计">网络设计</h4>
<p>CRNN的网络结构就不多说了,我前一篇文章描述过了。</p>
<p>在最后的双向LSTM输出后,要做一个512维度->6K类别的全连接,这个是为了输出对应的字类别,别忘了。</p>
<pre><code>rnn_reshaped = tf.reshape(stack_lstm_layer, [-1, 2*self.__hidden_nums]) # [batch x width, 2*n_hidden]
w = tf.Variable(tf.truncated_normal([hidden_nums, self.__num_classes], stddev=0.1), name="w")
logits = tf.matmul(rnn_reshaped, w) # 全连接
logits = tf.reshape(logits,[ batch_s, -1, self.__num_classes])
</code></pre>
<p>这里输出的logits,会作为后续的CTC_loss的输入,这个是为经过归一化的(softmax)的值。</p>
<p>损失函数,用的是CTC_loss,CTC loss细节可以参考之前的文章。</p>
<h4 id="ctc_loss">CTC_loss</h4>
<pre><code>tf.nn.ctc_loss(labels=labels,inputs=net_out,sequence_length=batch_size)
</code></pre>
<p>labels是一个稀硫张量,啥是稀硫张量呢?<a href="http://ilovin.me/2017-04-23/tensorflow-lstm-ctc-input-output/">参考</a></p>
<pre><code>稀疏矩阵SparseTensor,由3项组成:
* indices: 二维int32的矩阵,代表非0的坐标点
* values: 二维tensor,代表indice位置的数据值
* dense_shape: 一维,代表稀疏矩阵的大小
比如有3幅图,分别是123,4567,123456789那么
indecs = [[0, 0], [0, 1], [0, 2],
[1, 0], [1, 1], [1, 2], [1, 3],
[3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8]]
values = [1, 2, 3
4, 5, 6, 7,
1, 2, 3, 4, 5, 6, 7, 8, 9]
dense_shape = [3, 9]
代表dense
tensor:
[[1, 2, 3, 0, 0, 0, 0, 0, 0]
[4, 5, 6, 7, 0, 0, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]]
</code></pre>
<p>input输入就是上面提到的网络输出logits,是一个未经过softmax归一化的raw结果。</p>
<p>然后是sequence_length,实际上就是图像的经过LSTM后的宽度,在我们这里是原始图像除以4以后的结果。</p>
<h4 id="ctc_beam_search">CTC_beam_search</h4>
<pre><code>decoded, log_prob = tf.nn.ctc_beam_search_decoder(
net_out,sequence_length=batch_size,merge_repeated=False)
</code></pre>
<p>在解析的时候,需要做一个beam search的解析,输入是还是logits,同时要告诉原始图像除以4以后的长度。</p>
<p>返回的是decode,是一个稀硫张量,所以你拿到后,按照上面的讲解,还要还原出对应位置的值,而log_prob则返回这个序列的似然概率(嗯,也可以说是这些字同时出现的联合概率)</p>
<h3 id="训练调优过程">训练&调优过程</h3>
<p>在整个过程中遇到了一些问题,有些细节需要记录下来,方便以后的回顾:</p>
<ul>
<li>修改了数据加载方式,不再是用基于tf.train.shuffle_batch,太难控制,远航修改了一个很直白的加载方式,就是多进程+队列,跟cptn的方式一样了</li>
<li>修改了训练的adam的leaning rate,从0.1变成了0.001,这个是adam默认的值,效果果然好很多,之前0.01的learning rate的死活不收敛的</li>
<li>不需要考虑lable的padding了,因为一个batch的labels长度不一,之前是做了一个对齐,缺的用0做padding,开始还担心0这个id会被占用,但是后来发现,转化成了SparseTensor时候0是不用考虑的</li>
<li>因为不用padding为0,所以词表的第一个不用空出来了</li>
<li>不能用不定长的图像宽度,本来dynamical-lstm支持动态time sequence的,也就是你在lstm中传入ts的,所以对一个batch中不同宽度的图片,本以为可以不用对齐,只要定义好sequence lenght就可以呢,结果后来一想,不行,因为图片再进入lstm之前,得过一个VGG,他要求是预定义统一宽度的,所以只好放弃不对齐的想法,老老实实做padding</li>
<li>因此,也决定只能resize成统一,所以加了一个resize为中位数的,尽量减少形变</li>
<li>修改了图片的预处理,支持强制resize成为(32,512),或者缩放到宽度为32,不够的部分补成白色(255),或者太长就截断到512</li>
<li>类似于ctpn,写了一个早停,自己实现了早停,开始用的负的编辑距离,后来改成了正确率</li>
<li>分别尝试在3770个一级字库和6880 二级字库上做训练,发现3770确实容易训练</li>
<li>判断正确率用的是标注的5000张图片</li>
<li>实现了一个validate batch,600张左右,用来计算编辑距离和正确率,大概需要30秒左右</li>
<li>正确率抛弃了繁琐的计算,规则简单粗暴,两个字符串一致才算正确,之前还想了一些复杂的方法,后来觉得都不适用</li>
<li>重构了validate,并且把训练和validate的scalar summary分开</li>
<li>ctc_beam_search实在是太慢了,即时把beam改成1,也需要3-4秒,才可以识别一个batch(batch=32和64都差不多),后来在ocr群里面有人建议用greedy,于是改成了ctc_greedy,我靠,太快了,1秒之内就完成。(可是beam=1就是greedy了呀,这点,一直没想明白)</li>
</ul>
<p>总结一下整个过程,</p>
<p>开始发现不收敛,后来发现是adam的步长的问题,从0.1->0.001就收敛了;然后是精度上不去,于是针对发现识别过程中的问题,进行改进,比如左右两边留白,中间插入空格,可以增大英文和标点符号、数字的概率;另外,放弃6880二级字库,直接专注于3770一级字库了;另外用标注样本混合自己造的样本共同训练,增加到300万+的样本量,并且用真实标注样本做测试集;终于最终达到了86%的识别率,在实际的测试过程中,感受也是差不多到达这个结果。</p>
<p><img src="/images/20190701/1561968522717.jpg" alt="" class="myimg40" /></p>
<h2 id="遗憾和问题">遗憾和问题</h2>
<p>项目进行了4个月,从不了解OCR,到开始接触OCR的算法,然后读论文,找复现代码,阅读每行代码,到后来大刀阔斧的修改代码,以及不断地趟坑训练,收获满满,但是收获之余,仍然有很多问题和遗憾。</p>
<p>如果让我再选,肯定会CTPN和EAST同时考虑,但是当初由于时间有限,只好先选择CTPN,就没有时间去研究EAST了,EAST据说效果要好很多,从理由上来说,毕竟是使用了多个feature map的FPN,肯定要比单独的一个VGG最后的feature map对细节的感知要敏感的多啊。不过,后续我肯定会再去尝试EAST的。</p>
<p>另外,没有使用attention OCR,CTC由于揉入了$\epsilon$的空格在词与词之间,再加上B算法,你根本就搞不清楚到底从最后的feature map中,从左往右,哪个像素开始到那个像素结束,是某个字。我开始还奢求ctc_beam_search可以告诉我哪个字识别概率低,后来发现,根本没戏,他只返回一个整个句子的似然联合概率,没啥意义。</p>
<p>这样,我就无法知道哪个字识别的概率低,从而反推回去到feature map,然后反推到原图中,找到对应的识别的差的部分,抠图出来,交给单字分类器再去识别了。</p>
<p>而这个方法,正是<a href="https://yq.aliyun.com/articles/603273">阿里</a>目前针对低频字的识别方法:</p>
<blockquote>
<p>生僻字的解决方法如上图所示,首先使用行识别,再进行了Attention单字识别方案解决了生僻字语料偏少的问题,Attention可以解决单字切字问题。通过上述方法,我们对2万多生僻字测试集进行了测试,精确度从21%提高到了99%,基本上解决了生僻字问题。</p>
</blockquote>
<p>另外,目前的web服务方式是gunicorn+flask,使用的是每个进程单独加载一个模型,在GPU服务器上一开多进程worker就肯定显存就崩了,所以还要改进成多个进程共享模型的方式。或者,进一步探索<a href="https://www.tensorflow.org/tfx/guide/serving">tensorflow serving</a>的方式。</p>
<h2 id="体会">体会</h2>
<p>这个项目,最大的体会就是,样本啊样本,样本比啥都重要,我很多时间都画在了样本制作上面,CTPN从自己造样本,到最后放弃直接用真实样本;CRNN最终是真是样本+混合样本。自己的感受就是,只要样本足够多和多样性,模型就一定可以跑出满意的结果来。</p>
收藏
2019-03-04T00:00:00+08:00
https://www.piginzoo.com/life/2019/03/04/collection
<pre><code>有些经典的,有用的,都积攒下来,不让他们随着时光被自己遗忘。
它们都强烈带着自己的偏好,不喜者勿怨,
有些地方过高,可能需要你自备梯子:)
(此贴持续更新中...)
</code></pre>
<h1 id="常去的网站">常去的网站</h1>
<ul>
<li><a href="http://www.dapenti.com">打喷嚏:10年如一日的贡献好内容</a></li>
<li>油管三剑客:<a href="">文昭</a>,<a href="">周侃侃</a>,<a href="">stone</a></li>
<li><a href="https://i.youku.com/i/UMjk0OTQ4ODIwMA==">看理想的优酷大本营</a>,很喜欢的一群,以及他们的<a href="https://www.vistopia.com.cn/">官方网站</a></li>
<li><a href="https://www.reddit.com/r/saraba1st">Reddit上的著名s1</a></li>
<li><a href="http://www.bjdvd.org/">bjdvd</a>,老流氓聚集区,需要梯子</li>
</ul>
<h1 id="优质博客公众号">优质博客&公众号</h1>
<ul>
<li><a href="https://www.youtube.com/channel/UCSs4A6HYKmHA2MG_0z-F0xw">永乐老师</a>,理科男典范,粉他</li>
<li><a href="https://www.youtube.com/channel/UCyzrw0hDTOkv53hvLtiQqhA">硅谷程序媛小姐姐</a>,让我了解了很多米国和硅谷</li>
<li><a href="https://medium.com/%E4%B8%80%E5%8F%AA%E9%B9%BF%E3%84%A6">一只鹿儿:台湾的时事评论博客</a></li>
<li><a href="http://blog.wenxuecity.com/myoverview/29808/">很喜欢的一个文学城的博客</a></li>
<li><a href="https://mp.weixin.qq.com/s?__biz=MzA4NTE1MDk5MA==&mid=208534579&idx=1&sn=3460ead096529016d84a55f652302fb3">很无意间发现的一个it读书人</a></li>
<li>caoz,口无遮拦的互联网老年人,从来不揣着明白装糊涂</li>
<li><a href="https://space.bilibili.com/258150656/">回形针</a>,科普大作战,比柴知道做的好</li>
<li><a href="https://space.bilibili.com/97177641/">混乱博物馆</a>,在我心目中中,比回形针要差些</li>
</ul>
<h1 id="不错的一些网站">不错的一些网站</h1>
<ul>
<li><a href="https://civicforum.github.io/2019/liren_library_list.html">立人乡村图书馆</a></li>
<li><a href="https://www.hundun.cn/">混沌大学</a>善友老师的大本营,讲述了很多创业思维</li>
</ul>
<h1 id="好玩的东东">好玩的东东</h1>
<ul>
<li>冷(兔,可以让我一直开心的公众号</li>
<li><a href="https://dig.chouti.com/all/hot/recent/1">抽屉新热榜</a>,有app,也有网页,主人叫徒丁,低调神秘</li>
<li><a href="https://bbs.saraba1st.com/2b/forum-75-1.html">著名的stage1</a>,动漫小众,我这种伪动漫迷也只能逛逛外野</li>
</ul>
(转)如果亚伦·斯沃茨出生在中国
2019-02-17T00:00:00+08:00
https://www.piginzoo.com/life/2019/02/17/aaron
<p>文章来自在于网络<a href="https://github.com/Pines-Cheng/blog/issues/2">是一个哥们github项目的评论</a>,<a href="http://shawnleezx.github.io">原作者的博客是</a>,不过貌似他已经删除了。</p>
<blockquote>
<p>该文章来自于电影<a href="https://movie.douban.com/subject/25785114/">互联网之子 The Internet’s Own Boy: The Story of Aaron Swartz (2014)</a>的豆瓣影评:<a href="https://movie.douban.com/review/6886889/">如果亚伦·斯沃茨出生在中国</a>,原文的地址应该在<a href="http://shawnleezx.github.io/blog/2014/09/06/ru-guo-ya-lun-si-wo-ci-chu-sheng-zai-zhong-guo/">Github上的blog</a>,已无法访问。
虽然是两年前的文章,但是对比电影及<a href="https://zh.wikipedia.org/wiki/%E4%BA%9A%E4%BC%A6%C2%B7%E6%96%AF%E6%B2%83%E8%8C%A8">Aaron Swartz</a>的身平,结合自身经历,这一切糅合在一起,依然是感慨良多。</p>
</blockquote>
<p>我在斯沃茨的经历中看见了我,但即使除去所努力的年限还没到斯沃茨的26年之外,我所做的事情完全还成不是和斯是一个数量级的。就像我所宣称的我从来不相信天赋一样——我见识过这个世界上最顶尖的人才,他们的才能在于有方法的持之以恒的努力加上对所追求事物的热情,天赋只是弱者给自己的借口,强者给弱者的谎言——我不觉得如果把我放在斯的位置上,我所完成的会更差。我敬佩斯在其所在领域内的努力,也希望自己以后有机会能够参与到这么一些让世界变得更好的运动中来,但在观看这部纪录片时我会不由自主地对比我和斯的境遇,然后把这个对比放在中国的大背景中,那么,开始吧。</p>
<p>在所有的一切之前,致敬,亚伦·斯沃茨。</p>
<p>本文从一个90后所在的大多数普通家庭的情况来对比“斯如果出生在中国”这一假想,如果这个中国家庭是高级知识分子、名牌大学教授又或者是经济实力雄厚的有文化的人士,那么这些对比也未必成立,也没有意义的。因为绝大多数的中国家庭不是这种情况。广义上来讲也是斯奋斗的领域——中国普通家庭并没有对
有质量的知识的获取途经,所以他们只能依靠高考这一条路。</p>
<p>斯3岁开始接触电脑,我也是类似的年纪,可能是4岁。就像影片里斯的兄弟所讲,他们都喜欢电脑,但是只有斯真正进入了这个领域。我是大学才真正开始成为一个计算机玩家,在此之前我都是一个电脑玩家。斯没有传记存在,我暂时也没有时间去调查斯的背景,但从一个电脑的玩家进入一个计算机的玩家,大概要
迈过两条坎:</p>
<ol>
<li>学会如何在互联网上搜索信息。</li>
<li>简单理解计算机是如何工作的,比如冯诺依曼模型。</li>
</ol>
<p>这两点结合在一起是如何找到高质量的相关信息,而这一条,如果斯出生在中国,
其能够获取的信息的质量不止会下降一个等级,待我慢慢道来。</p>
<h2 id="在普通家长的认知中电脑和网络是一个奢侈品加玩具">在普通家长的认知中电脑和网络是一个奢侈品加玩具</h2>
<p>首先90后出生的孩子一般情况下在比较小的时候都不会有一台电脑,这一点我不在此列。而即使家里有一台电脑,为了让孩子好好学习不沉迷游戏,家长一般情况下也不会让孩子上网——我在此列。相信许多同辈们都有这样的经历。</p>
<p>而这些判断已经是家长已经被信息时代遗弃的表现——他们根本不知道互联网是现在社会上最大的阶层资源间的multiplier(恕想不到翻译)。作为没有什么资源的普通民众,这就是你四两拨千斤的武功心法。</p>
<p>这又要谈到阶级了,我们从高考说起。高考简单来看是人才选拔,但高考的背后是中国稀缺的资源造成的一种畸形的用于留出上下阶层流通通道而保持社会稳定的资源分配方式(想象有多少家庭唯一的希望就是孩子上一个好大学):高考以残废绝大多数考生的学习兴趣为代价生产出这个社会运转需要的少部分人才,这
部分人才对上层统治阶级有相当的使用价值并可能被吸收成为其阶层的一员。</p>
<p>如果没有互联网,高考就只是唯一的通道了。但互联网使得知识,这一原本仅仅能够通过正规教育来传播的稀缺资源变得能够以极低的成本大规模传播,于是互联网成为了一个人改变自己最大的multiplier。在网上你可以获得所有你需要的知识,前提一旦你被引领入门。而家长们根本不知道有这么一扇门存在。在他们看来电脑和互联网只会让孩子对游戏、网络游戏上瘾。是的,游戏是能够让人上瘾的东西,根据神经学的理论,老鼠只要能够在大脑获得足够的刺激,它能够忽略进食直到死去。而游戏能够给予了人们这种刺激,这种在极短的时间内出现的虚拟的刺激还不能让人类演化出相应的天然分辨真假手段——因为他们本质是一样
的。但究其本因,还是家长们不能给孩子们展示这门后的东西,让他们看见计算机和互联网神奇的世界,这个世界会远远超过游戏的吸引力。即使是我的大学的一位信息科学院的教授也做不到——因为他也不明白,只是传统地做研究,并不是一个黑客。</p>
<p>所以,对于下层阶级的孩子们来说,一开始,他们便失去了如此宝贵的财富。</p>
<p>那么,为什么家长们不能呢?</p>
<h2 id="中国缺乏好的教科书和网络环境">中国缺乏好的教科书和网络环境</h2>
<p>现在有了知乎、豆瓣这些比较有质量的中文网站来获取一些有质量的信息。在这些网站没有存在之前,中文的网络环境可谓是一塌糊涂——绝大多数只是一些只会占沙发、点赞、灌水的用户。你如何期待他们创造出一个良好的网络环境?在一开始的时候我只是以为这是中国的网络环境差,但是慢慢我才意识到这其实是中
国的整个国家的公民素质有待提升。</p>
<p>同样的问题存在在中国的教材上,包括大学教材。有个叫童哲的巴黎高师学物理的孩子建立了一个叫万门大学的互联网大学,旨在教大 学 代 数?!这个世界疯了吧,大学里的教授是干什么吃的?</p>
<p>然而事实是,整个中国的大学教授基本没有什么人有心思在教学上,因为这根本和他们评职称没有关系。教材的写作多数情况下也是和出版社基于利益的合作,且许多情况下是挂着教授的名字让教授的学生来写。在出版界也多是如此——我接触的技术书籍以市场投机的心理出版为多,内容一塌糊涂,浪费纸张。当然,也
有好的著作,不会被我一棒子打死。比如《数学之美》、《程序员的自我修养》等等,都是倾注心力有情怀的好书。</p>
<p>因此,中国的资料质量很差。我相信即使是约翰纳什来看中国大学的线性代数课本也会失去对数学的兴趣的。</p>
<p>真正的学习需要直接去英文的环境里学习。这里面水比较深,举几个现在想到的例子:在网络环境上google group上一个严肃的有良好氛围的讨论平台,Quora的答案水平在很大程度上是超越知乎的,而绝大多数的MOOC课程都是英文的。</p>
<p>所以,我问这门一个简单的问题:有多少家长能够教孩子真正的英语?另外说一句,不要依靠学校的英语教育,只要不是全国范围内都称得上最好的学校,其他的学校的老师都不能算是会英语,包括大学。所以,没有人在一开始给你引路。</p>
<p>斯如果在中国长大,在20岁之前他都在准备高考。而相信以他的性格,他一定是个差生。</p>
<h2 id="没有社区">没有社区</h2>
<p>好了,即使假设我们学了英语,能够学习这些有质量的英文内容。我们仍然有一个难以逾越的鸿沟。中国没有一个社区来让人参与。</p>
<p>斯最初的成名战是参与RSS的设计和实现——一个家里的wiki并不是什么大事情,会一些网络基本编程的人都能够完成,难点在于让他成为世界的wikipedia,所以这里我并不把这视为斯的成名战,只能是练手的玩具。</p>
<p>斯能够在14岁参与一个被世界上所有人的使用的工具的建设,其基本要素大概如下:RSS不是一项复杂的技术,更多的是一项规范,所以斯能够贡献;美国有很多这样的社区,他们需要大量的人,所以斯能够加入。</p>
<p>而中国已经远远地落后在世界后边,而社区这种东西并没有在中国广泛形成,即使是现在。并且社区由于和自组织相似这么一种组织,其是被打击、压制的对象。所以,即使斯成为了一个学习了高等数学、矩阵代数、计算理论的少年天才,他的归宿一般也就是去清华、北大好好上个学。</p>
<p>在中国创业?还是Reddit这种充满争议的网站?想,都不要想。</p>
<h2 id="没有民主基础">没有民主基础</h2>
<p>最后,谈一谈斯用互联网的力量来阻止法案的通过。这一段看得真的是激动人心也唏嘘不已。这一伟大的创举的完成草率的分析大概也要这么一些条件:</p>
<ol>
<li>整个国家的公民已经适应民主并在民主体制下经过了长久的训练,这样他们关心法案,知道只有斗争才有权利,所以会去投票。</li>
<li>政府不会把投票的网站关掉。</li>
<li>政府会考虑公民的集体上书。</li>
<li>游行和公开发布演讲是被允许的。</li>
<li>活动组织者不会随时失联。</li>
</ol>
<blockquote>
<p>It is just not possible at all.</p>
</blockquote>
【OCR实践系列】文字识别学习笔记
2019-01-21T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/01/21/ocr
<p>最近开始着手单据扫描的事情,这篇博客主要记录自己的学习笔记。</p>
<h2 id="1综述">1.综述</h2>
<p>开胃菜:先读读这篇别的大神写的<a href="https://zhuanlan.zhihu.com/p/38655369">文字识别检测综述</a>和<a href="http://xiaofengshi.com/2019/01/05/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-OCR_Overview/">这篇</a>。</p>
<p>单据识别,其实就俩事,一个是识别字块,也就是<strong>文本检测</strong>,就是找到字所在的区域;一个是<strong>OCR</strong>,也就是把字块中的字一个个地识别出来。</p>
<p>A.字块识别(文本检测),比较流行的算法就3个,<strong>CTPN、<a href="https://arxiv.org/pdf/1704.03155">EAST</a>、<a href="https://arxiv.org/pdf/1703.06520">Seglink</a></strong>,这仨都是咱们国人搞出来的,小自豪一下。这篇<a href="https://www.cnblogs.com/skyfsm/p/9776611.html">小文</a>写的不错,可以参考读一下。</p>
<p>字块识别(文本检测)是发展于目标检测,目标检测本质就是找到包含物体的框,典型的算法有<strong><a href="https://arxiv.org/pdf/1506.02640">YOLO</a>,<a href="https://arxiv.org/pdf/1512.02325">SSD</a>,以及Faster-RCNN</strong>,而CTPN可就是从Faster-RCNN发展而来的。而Faster-RCNN,又是从<strong>RCNN,Fast-RCNN,Faster-RCNN</strong>一脉相承地发展而来。</p>
<p>B.再说说OCR的方法,我看到的也就是CRNN了,别的我也没看到有啥更牛逼的方法了。</p>
<p>不得不提一下,我对传统图像处理方法,一窍不通,所以这篇文章,讲的都是深度学习的方法。之前图像方法的巅峰之作,就是谷歌开源出来的tesseract了吧。</p>
<p>另外,不得不说一下,要不是之前各类<strong>VGG,CNN,ResNet</strong>等深度图像识别网络的大发展,哪有现在这些文本检测呀,这脉络是图像识别->目标识别->文本识别,文本识别里面最基层干活的还是这些基础网络,俗称backbone啊,一般都用VGG16,虽然不是最好的,但是简单易用,transfer迁移学习过来,妥妥的了。</p>
<p>我理解大致就这些,干活也是指望这点水儿,不断地挖掘理解,可能有片面之处,看官们还多海涵我的粗浅,希望探讨的可以点击<a href="/about.html">关于</a>,速速与我联络,共同探讨。顺道说,这文章没探讨太多细节,细节都在给的那些大神们写的各种参考文档里面,我就不太多班门弄斧了,这里我写的都是我觉得我的一些理解和补充的东西。其实….,其实这篇文档主要是写给自己,怕自己过段时间就把这些玩意忘光了,回头一看迅速可以回忆起来,哈哈。</p>
<p>欢迎转载,但是必须给我一个外链哈。</p>
<h2 id="2前戏先说说目标检测">2.前戏,先说说目标检测</h2>
<p>字块识别、文本检测、文字块检测,叫啥都成,就要得到包含文字的一个框。</p>
<p>说起这玩意,不得不提提,目标检测,也就是Faster-RCNN等那一坨模型。都有啥?主要是<strong>RCNN、Fast-RCNN、Faster-RCNN、SSD、YOLO、<a href="https://pjreddie.com/media/files/papers/YOLOv3.pdf">YOLO-v3</a></strong>。恩,我知道的有点名气的就这些。</p>
<p>其实牛逼点的就3:</p>
<ul>
<li>RCNN家族:RBG<a href="http://www.rossgirshick.info/#girshick2014rcnn">Ross B. Girshick</a>大神搞的,RCNN -> Fast-RCNN -> Faster-RCNN</li>
<li>YOLO:大神RBG又搞了,果然是大神啊,速度更快,V3是现在的主流</li>
<li>SSD:没啥人用了,中科院大神搞的</li>
</ul>
<p>一张脑图,可耻的盗过来,一目了然:<a href="http://shartoo.github.io/RCNN-series/">引自</a></p>
<p><img src="/images/20190220/1550635518022.png" alt="" width="80%" /></p>
<h4 id="rcnn">RCNN</h4>
<p><a href="https://blog.csdn.net/v1_vivian/article/details/78599229">中文论文</a>,<a href="https://dl.dropboxusercontent.com/s/293tu0hh9ww08co/r-cnn-cvpr.pdf?dl=0">英文论文</a></p>
<p>RCNN就是文本检测最早的一个特别糙的一个模型,就是大神<a href="http://www.rossgirshick.info/#girshick2014rcnn"><strong>Ross B. Girshick</strong></a>搞的,一口气完成这3个,开启了深度学习目标检测的大门。我等必须崇拜一下。</p>
<p>RCNN本质是啥,讲人话就是,用<strong>EdgeBoxs、SelectiveSearch</strong>,聚类之类的方法,得到一堆(大约2000个左右)的候选框,就是可能包含对象的框(也叫proposal),然后把这些子图归一化,然后交给一个VGG16抽取特征。最后,灌给一个分类器和一个回归器:<strong>Bbox回归器</strong>确定边界,<strong>SVM分类器</strong>确定是不是物体。速速点击<a href="https://blog.csdn.net/v_JULY_v/article/details/80170182">参考</a>一探究竟。(七月老师这篇写的很详细了)</p>
<p><strong>细节:</strong></p>
<p>SVM训练的图是提前切出来给你丫训练的,上面说SVM只是应用你训练好的模型应用而已;说白了,就是切无数的图,有的包含物体,有的不包含,然后喂给SVM分类器去训练这个SVM分类器。</p>
<p>那个BBox回归也是,回归的是(x,y,w,h),告诉你坐标在哪里,宽高调整多少。</p>
<pre><code>RCNN算法分为4个步骤
1) 一张图像生成1K~2K个候选区域 (图像分割算法例如 selective search)
2)对每个候选区域缩放到固定尺寸,使用深度网络提取特征 (CNN模型训练有两步组成:在 ImageNet上的预训练,在检测数据上的微调)
3) 特征送入每一类的SVM 分类器,判别是否属于该类
4) 使用回归器精细修正候选框位置
</code></pre>
<h4 id="fast-rcnn">Fast-RCNN</h4>
<p><a href="https://alvinzhu.xyz/2017/10/10/fast-r-cnn/">中文论文</a>,<a href="https://arxiv.org/pdf/1504.08083">英文论文</a></p>
<p>RCNN忒慢,识别一张需要40多秒,所以,<a href="http://www.rossgirshick.info/#girshick2014rcnn">RBG大神</a>继续努力,搞了一个Faster-RCNN。</p>
<p>RCNN慢在2000多个候选图片都要经过VGG16算一遍,<strong>SSPNet</strong>改进这点,咋改进?因为VGG16,也就是CNN之后,得到的<strong>feature map</strong>(顺道说,feature map就是指你卷积过N次后,得到的那张图,其实丫已经不是张图了,你还可以当图来理解)。之前的某个<strong>proposal</strong>(备选框),就会对应feature map中的一个区域,(怎么对应,我其实也想特别想清楚,反正池化后,确实是缩小了,肯定是一块比较小的区域了),这样的话,你做一次卷积前向运算就得了,不用2000块都分别做了,快了吧。</p>
<p>但是有个问题,就是大小不一啊,怎么办?他搞了一个下采样池化,说白了,就是把他采样成一样大(50 x 50)的模样了。</p>
<pre><code>Fast RCNN 的算法流程:
1)用selective search在一张图片中生成约2000个object proposal,即RoI。
2)把整幅图像输入到全卷积的网络中(这里也可以缩放图片的scale,得到图像金字塔,将多尺度图像送入卷积网络提取卷积特征)
3)在最后一个卷积层上对每个ROI求映射关系, 并用一个RoI pooling layer提取一个固定维度的特征向量。
(这里是借鉴了SPPNet中的 SPP网络层,比SPP网络层简单,只用一个尺度)
4)继续经过两个全连接层(FC)得到特征向量,RoI feature vector。
5)特征向量兵分两路,经由各自的全连接层(FC),得到两个输出向量:
第一个是分类,使用softmax,第二个是每一类的bounding box回归。
</code></pre>
<p>丫确实快多了,才0.4秒。</p>
<h4 id="faster-rcnn">Faster-RCNN</h4>
<p><a href="http://www.rossgirshick.info/#girshick2014rcnn">RBG大神</a>继续折腾。<a href="https://papers.nips.cc/paper/5638-faster-r-cnn-towards-real-time-object-detection-with-region-proposal-networks.pdf">论文</a></p>
<p><img src="/images/20190220/1550640781826.png" alt="" class="myimg" />
<img src="/images/20190220/1550640435474.png" alt="" class="myimg" /></p>
<p>深入了解Faster-RCNN,请认真阅读这两篇:<a href="https://zhuanlan.zhihu.com/p/31426458">1</a>和<a href="http:// http://shartoo.github.io/RCNN-series/">2</a></p>
<p>这次改进的是proposal,也就是候选框的备选的改进。把region proposal的步骤换成一个CNN网络(<strong>RPN</strong>)。</p>
<p>里面有个anchor的概念,就是一个可能的框,9个。大小套着,干嘛用的?就是可能是备选框。</p>
<p><strong>RPN(region proposal network)</strong></p>
<p>2步,VGG16的第五层conv5的featuremap一个区域一定对应原图,feature map中的一个点,给丫套一个9个<strong>anchor</strong>,anchor是啥?就是个不同形状的框,这些anchor都是未来可能的包含被检测对象的proposal呀。</p>
<p>因为是经过了CNN池化缩小了,所以这些anchor区域,对应原图的更大的区域。</p>
<p>另外,这个点怎么选?就是画格,然后选中心。这个格子怎么画,画多少个?这是个超参数。</p>
<p>anchor长这个样子:
<img src="/images/20190216/1550298324073.png" alt="" /></p>
<pre><code>Faster R-CNN
1.对整张图片输进CNN,得到feature map
2.卷积特征输入到RPN,得到候选框的特征信息
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置
</code></pre>
<p>Tensorflow里面的model zoo里面的object detective就是用的faster-rcnn模型。</p>
<p>Faster-RCNN很重要,但是我在这里不讨论太多,都放到了CTPN里面讨论,CTPN中使用了很多Faster-RCNN的算法,在那里面讲清楚,毕竟,我们这篇博客是为了研究CTPN,CTPN才是猪脚。</p>
<p>最赞的代码是Facebook的大神<a href="http://xinleic.xyz/">Chen Xin Lei</a>完成的,<a href="https://github.com/endernewton/tf-faster-rcnn">Github代码</a>,讲代码的文章中,这篇讲的最好,<a href="https://zhuanlan.zhihu.com/p/32230004">传送门</a>,其中的大图,太过赞叹,不得不贴出来:</p>
<p><img src="/images/20190220/f-rcnn.jpg" alt="" width="100%" /></p>
<h4 id="yolo">YOLO</h4>
<p>好吧,怎么都得提一句YOLO,毕竟也是<a href="http://www.rossgirshick.info/#girshick2014rcnn">大神RBG</a>之作,而且现在是目标检测主流,只不过咱们搞单据识别不用而已。</p>
<p>Faster-RCNN都NM faster了,还是比YOLO慢。SSD是中科院搞的,很快也,但是准确率差些,不过用的人不多。YOLO好,不过YOLO的问题是作者都是基于自己的duck啥的框架写的。现在V3很赞了。</p>
<h4 id="参考">参考</h4>
<ul>
<li>
<p><a href="https://blog.csdn.net/v_JULY_v/article/details/80170182">七月大神写的:一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD</a></p>
</li>
<li>
<p><a href="https://blog.csdn.net/u011974639/article/details/78053203">Object Detection–RCNN,SPPNet,Fast RCNN,FasterRCNN论文详解</a></p>
</li>
<li>
<p><a href="https://www.cnblogs.com/lillylin/p/6207119.html">目标检测方法系列——R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD</a></p>
</li>
<li>
<p>对了,我是看july七月寒小阳的深度学习《物体识别》那节课迅速入门的。别问我视频哪里搞来的,我买的,你信不?</p>
</li>
<li>
<p><a href="https://www.youtube.com/watch?v=4eIBisqx9_g">机器学习网红Siraj Raval的视频</a></p>
</li>
<li>
<p><a href="https://ai.yanxishe.com/page/TextTranslation/1304">老外写的饿,很细,翻译的,中英对照</a></p>
</li>
<li>
<p><a href="https://www.hhyz.me/2018/04/16/2018-04-16-FasterRCNN/">Faster R-CNN 目标检测(四),写的很好,很多细节交代的很清楚</a></p>
</li>
<li>
<p><a href="https://senitco.github.io/2017/09/02/faster-rcnn/">Faster R-CNN论文及源码解读,这篇文章里面的图超级详细,赞</a></p>
</li>
<li>
<p><a href="http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/">RCNN, Fast-RCNN, Faster-RCNN的一些事</a></p>
</li>
<li>
<p><a href="http://jermmy.xyz/2018/01/15/2018-1-15-paper-notes-fast-er-rcnn/">论文笔记:Fast(er) RCNN,RPN网络的细节讲的不错诶</a></p>
</li>
<li>
<p><a href="http://shartoo.github.io/RCNN-series/">RCNN,Fast RCNN,Faster RCNN 总结</a></p>
</li>
</ul>
<h2 id="3ctpn">3.CTPN</h2>
<p>前面讲啥呢?讲的都是目标检测,我们得用这些技术,来干嘛?找文字啊,文字就是我们要检测的目标啊。</p>
<p>我去!前戏太长了吧,好吧,猪脚终于登场。废话少说,直奔娘家:<a href="https://arxiv.org/pdf/1609.03605.pdf">论文</a></p>
<p>这小图,浓缩了CTPN:</p>
<p><img src="/images/20190216/1550302113321.png" alt="" class="myimg" /></p>
<pre><code>整个检测分六步:
第一,首先,使用VGG16作为base net提取特征,得到conv5_3的特征作为feature map,大小是W×H×C;
第二,然后在这个feature map上做滑窗,窗口大小是3×3。也就是每个窗口都能得到一个长度为3×3×C的特征向量。这个特征向量将用来预测和10个anchor之间的偏移距离,也就是说每一个窗口中心都会预测出10个text propsoal。
第三,将每一行的所有窗口对应的3*3*C的特征(W*3*3*C)输入到RNN(BLSTM)中,得到W*256的输出;
第四,将RNN的W*256输入到512维的fc层;
第五,fc层特征输入到三个分类或者回归层中。
第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符)。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息。2k vertical coordinate因为一个anchor用的是中心位置的高(y坐标)和矩形框的高度两个值表示的,所以一个用2k个输出。(注意这里输出的是相对anchor的偏移),k个side-refinement这部分主要是用来精修文本行的两个端点的,表示的是每个proposal的水平平移量。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16)。回归出来的box如Fig.1中那些红色的细长矩形,它们的宽度是一定的。
第六,这是会得到密集预测的text proposal,所以会使用一个标准的非极大值抑制算法来滤除多余的box。
第七,用简单的文本线构造算法,把分类得到的文字的proposal(图Fig.1(b)中的细长的矩形)合并成文本线。
</code></pre>
<hr />
<pre><code>1.输入为3*600(h)*900(w),首先vgg-16提取特征,到conv5-3时(VGG第5个block的第三个卷积层),大小为512*38*57。
2.im2col层 512*38*57 ->4608 * 38 * 57 其中4608为(512*9 (3*3卷积展开))
3.而后的lstm层,每个lstm层是128个隐层 57*38*4608 ->57*38*128 reverse-lstm同样得到的是57*38*128。(双向lstm没有去研 究,但我个人理解应该是左边的结果对右边会产生影响,同样右边也会对左边产生影响,有空再去看) merge后得到了最终lstm_output的结果 256* 38 * 57
4.fc层 就是一个256*512的矩阵参数 得到512*38*57 fc不再展开;
5.rpn_cls_score层得到置信度 512*38*57 ->20*38*57 其中20 = 10 * 2 其中10为10个尺度 同样为512*20的参数,kernel_size为1的卷积层;
6.rpn_bbox_pre层 得到偏移 512*38*57 ->20*38*57。同样是十个尺度 2 * 10 * 38 * 57
因为38*57每个点每个scale的固定位置我们是知道的。而它与真实位置的偏移只需两个值便可以得到。
假设固定位置中点( Cx,Cy) 。 高度Ch。实际位置中点(x,y) 高度h
则log(h/Ch)作为一个值
(y-Cy) / Ch作为一个值
20 * 38 * 57 便是10个尺度下得到的这两个值。有了这两个值,我们便能知道真实的文本框位置了。
</code></pre>
<p>而这张图则是整个CTPN的全貌,不过,之前的VGG16省了</p>
<p><img src="/images/20190213/1550040628269.png" alt="" width="300px" /></p>
<p>好,想搞清楚细节的,速速去看这篇,<a href="https://zhuanlan.zhihu.com/p/34757009">传输门</a>,我这里只是看图说话,粗粗说一下我理解的核心思路:</p>
<ul>
<li>还是老规矩,上VGG16,抽取图像特征,VGG抽取,其实图像的布局没变,CNN就是这个好处</li>
<li>出来的feature map,灌给双向<strong>Bi-LSTM</strong>,输出的最后的向量灌给全连接网络FC。您上面都VGG抽取了一圈了,干嘛又用LSTM又搞一圈,我理解是,要再一次抽取图像中的时序信息,毕竟我们的文字是一个序列啊。</li>
<li>学人家Faster-RCNN的RPN方法,学人家的anchor,不过我的<strong>anchor宽度固定</strong>,<strong>x位置固定</strong>,你丫9个,我10个。</li>
<li>然后对每个备选的anchor,左边分支用于bounding box regression做回归,右边分支用于Softmax做分类(二分类,你丫包含文字否)</li>
<li>完事了,把那些从anchor回归+分类后得到的text proposal串糖葫芦,成一个区域</li>
</ul>
<p>我说说我的理解(好!讲人话):</p>
<p>CTPN,就是,</p>
<p>用VGG做了5层的CNN后,<strong>感受野</strong>(感受野概念就是说你池化后的区域对应的之前的大区域,具体的,您自己个儿谷歌一下吧)的抽象,其实就是把图像的特征给抽取出来了,但是,注意!这个时候,图像的布局没变,还是按照原有的布局,一行行的。只不过由于感受野的缘故,其实更有内涵[段子:]。</p>
<p>这个时候,把Conv5=>B-LSTM后的一行行的特征体现,也就是FeatureMap的每一行,的每一个点,这个点上扩展出<strong>10个anchor</strong>,然后你问我:这每个anchor是不是包含文字呀,介是个分类问题(2分类呀);需要大小(只有高)位置(只有y)咋个调整啊,介就是个回归问题。</p>
<p>你丫得到了啥,得到了每一个anchor的是否有字,高度和y,对吧?一串哈,每个点扩展的10个anchor都是被这回归和分类搞了一把。搞成啥了?留下那些包含文字的,这些框框,就是我要的text proposal啊。</p>
<p>最后,我用<strong>文本线构造算法</strong>连接在一起,串成一串,就得到文本位置啦。</p>
<p>总结一下,CTPN的核心就在于,借鉴了faster-rcnn的anchor做法,做了一个剪裁,只回归y和高度。用VGG+B-LSTM抽象出来的feature map,产生这些anchor,相当于一行一行地扫描图像,找出最终包含文字的小框框来。</p>
<p>所以,</p>
<p>训练数据就是每一个小框框呀,</p>
<p><img src="/images/20190216/1550299518825.png" alt="" width="200px" /></p>
<p>对,就是每一个小红框。那,这标注可够变态的,是啊,所以,主要的样本,还是得靠生成,我看大部分小神们都是自己造样本的,好像还没好有看到有谁是花钱,去找人去标注的,这标注确实也太变态了吧。</p>
<pre><code>CTPN思路是先检测小文本框,检测完合并,“分治法”
F-CRNN的RPN中anchor机制是回归预测四个参数(x,y,w,h),但是CTPN回归两个参数(y,h),即anchor的纵向偏移以及该anchor的文本框的高度,因为每个候选框的宽度规定为16个像素。
CTPN也有一个很明显的缺点:对于非水平的文本的检测效果并不好。
</code></pre>
<h4 id="损失函数">损失函数</h4>
<p><img src="/images/20190219/1550565119568.png" alt="" class="myimg" /></p>
<p>是三个损失函数合起来的:</p>
<ol>
<li>$L_s^{cls}(s_i,s_i^*)$</li>
<li>$L_v^{reg}(v_i,v_i^*)$</li>
<li>$L_o^{reg}(o_i,o_i^*)$</li>
</ol>
<h5 id="边框回归bounding-box-regression">边框回归(Bounding Box Regression)</h5>
<p><a href="https://blog.csdn.net/zijin0802034/article/details/77685438">参考1</a>
,<a href="https://blog.csdn.net/v1_vivian/article/details/80292569">参考2</a></p>
<p>这个就是沿袭RCNN的概念,网上一堆的文章,感觉都没清清楚楚,拽了一堆公式,核心都没触及啊。</p>
<p><img src="/images/20190219/1550547422995.png" alt="" width="250px" /></p>
<p>这图引用一下,他说的也没啥问题,就是要算P(P在这里就是Anchor框$\color{red}{红色}$),G($\color{green}{绿色}$)是GroundTrue,就是标注真实的物体所在的地方,$\hat{G}$ ($\color{blue}{蓝色}$),我们就是要让我们的P经过变化后,得到的$\hat{G}$尽量接近G。</p>
<p>那怎么得到呢?</p>
<p>方法就是寻找一种映射f, 使得
$f(P_x, P_y, P_w, P_h) = (\hat{G_x}, \hat{G_y}, \hat{G_w}, \hat{G_h})$,使得:$(\hat{G_x}, \hat{G_y}, \hat{G_w}, \hat{G_h}) \approx (G_x, G_y, G_w, G_h)$</p>
<p>这个映射就是这样:</p>
<p>(<strong>映射公式</strong>)</p>
<p>$\hat G_x = P_w d_x(P) + P_x , \text(1)$</p>
<p>$\hat G_y= P_h d_y(P) + P_y , \text(2)$</p>
<p>$\hat G_w= P_w exp(d_w(P) ), \text(3)$</p>
<p>$\hat G_h= P_h exp(d_h(P) ) , \text(4)$</p>
<p>(<strong>反向映射公式</strong>)</p>
<p>$t_x = \frac{(G_x-P_x)}{P_w}$</p>
<p>$t_y = \frac{(G_y-P_y)}{P_h}$</p>
<p>$t_w =log\frac{G_w}{P_w}$</p>
<p>$t_h = log\frac{G_h}{P_h}$</p>
<p>为什么是这样呢?我们回头再说,先留个包袱。</p>
<p>网上流传最多的一篇讲<a href="https://blog.csdn.net/zijin0802034/article/details/77685438">边框回归 Bounding Box Regression</a>:</p>
<blockquote>
<p>$P=(P_x, P_y, P_w, P_h)$,这个P是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。</p>
</blockquote>
<p>其实给人狠多误导,特别是你结合到Faster-RCNN和CTPN中就更对不上了。</p>
<p>其实,在Faster-RCNN中,这个$f(x)$其实就是一个卷积层(神经网络),也就是36个3x3的卷积核,与VGG的输出的Feature Map卷积后,得到一个[W*H*36]的张量,也就是他们那些文章中常说的“4k coordinates”,k其实就是9/10(Faster-RCNN中是9,CTPN中是10)。</p>
<p>那这36个都是啥,其实是对应9个Anchor框的回归值,参考下图:</p>
<p><a href="https://www.hhyz.me/2018/04/16/2018-04-16-FasterRCNN/">引自</a></p>
<p><img src="/images/20190219/1550563590900.png" alt="" class="myimg" /></p>
<p>第一个anchor的$t_x,t_y,t_w,t_h$,是的,其实就是得到了前面公式中提到的$d_x(P),d_y(P),d_w(P),d_h(P)$,然后你带入公式,就可以得到对应的$\hat G_x,\hat G_y,\hat G_h,\hat G_w$,就得到了对应的真正的包含物体的框。</p>
<p>那么,如何进行训练呢?</p>
<p>你不是提供了标签(Ground Truth)了么?那么就用这个框的坐标,算一下$t_x,t_y,t_w,t_h$呗,怎么算?带入 <strong>反向映射公式</strong> 中,就可以算出来了。而$t^*$则是通过卷积的神经网络算出来的。这不,就有偏差了么?然后带入损失函数,反向梯度传导,就可以计算参数了呗。</p>
<p>里面有一些细节,</p>
<p>我在训练的时候,我算GT对应的$t$的时候,用的是那个$P_w,P_h$呢?$P_x,P_y$不用担心,因为9个Anchor都是一样的,但是他们的$P_w,P_h$是不一样的,我用哪一个呢?这个不用担心,可以通过计算和GT的IoU,大于0.7的,才用来做计算:</p>
<p><a href="https://zhuanlan.zhihu.com/p/32230004">参考</a></p>
<blockquote>
<p>通过对所有的anchor与所有的GT计算IOU,由此得到 rpn_labels, rpn_bbox_targets, rpn_bbox_inside_weights, rpn_bbox_outside_weights这4个比较重要的第一次目标label,通过消除在图像外部的 anchor,计算IOU >=0.7 为正样本,IOU <0.3为负样本,得到在理想情况下应该各自一半的256个正负样本(实际上正样本大多只有10-100个之间,相对负样本偏少)</p>
</blockquote>
<p>所以,只有正样本才会用来计算损失函数。</p>
<h5 id="说俩术语">说俩术语:</h5>
<p><a href="https://www.zhihu.com/question/22464082">Ground Truth</a>:</p>
<p>机器学习里经常出现ground truth这个词,在有监督学习中,数据是有标注的,以(x, t)的形式出现,其中x是输入数据,t是标注.正确的t标注是ground truth, 错误的标记则不是。</p>
<p><a href="https://blog.csdn.net/fendoubasaonian/article/details/78981636">IoU:Intersection over Union</a>:</p>
<p>两个矩形交集的面积/两个矩形的并集面积</p>
<h4 id="nms非极大值抑制算法-non-maximum-suppression">NMS(非极大值抑制算法 Non-maximum suppression)</h4>
<p>【参考】</p>
<ul>
<li><a href="https://www.jianshu.com/p/d2c7f6d9708f">https://www.jianshu.com/p/d2c7f6d9708f</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/37489043">https://zhuanlan.zhihu.com/p/37489043</a></li>
<li><a href="https://www.cnblogs.com/makefile/p/nms.html">https://www.cnblogs.com/makefile/p/nms.html</a></li>
</ul>
<p>在干嘛?</p>
<p><img src="/images/20190314/1552558455526.png" alt="" class="myimg" /></p>
<p>就是从这些框里面挑一个靠谱的,这些框都带着置信度,是不是前景的置信度(或者是某一类的置信度)。</p>
<p>非极大值抑制的流程如下:</p>
<ul>
<li>根据置信度得分进行排序</li>
<li>选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除</li>
<li>计算所有边界框的面积</li>
<li>计算置信度最高的边界框与其它候选框的IoU。</li>
<li>删除IoU大于阈值的边界框</li>
<li>重复上述过程,直至边界框列表为空。</li>
</ul>
<p>听着挺复杂,其实,大白话就是,你先找个置信度最高的框,剩下的和他相交面积比较大(我已经是最像的了,你们跟我类似的统统抛弃)的都删掉。</p>
<h4 id="代码">代码</h4>
<p>我fork<a href="https://github.com/eragonruan/text-detection-ctpn">小神的代码</a>后,研读,然后<a href="https://github.com/piginzoo/text-detection-ctpn">写注释版本</a></p>
<p><a href="https://www.cnblogs.com/skyfsm/p/10054386.html">还有一个讲代码的帖子</a>,写的很不错,mark一下也。</p>
<h5 id="colorblue如何训练">$\color{blue}{如何训练?}$</h5>
<p>训练数据如下:</p>
<pre><code>208,162,223,229
224,162,239,229
240,162,255,229
256,162,271,229
272,162,287,229
288,162,303,229
</code></pre>
<p>就是每一个小块(宽度为16)的小块,组成一个图像,所以是一堆的小块坐标,如图:</p>
<p><img src="/images/20190221/1550728296492.png" alt="" class="myimg" /></p>
<p>那你想了,我靠,我做标注不得标死。</p>
<h4 id="参考文档">参考文档</h4>
<ul>
<li>
<p><a href="https://zhuanlan.zhihu.com/p/34757009">这篇写好好详细,好详细,最好的一篇:场景文字检测—CTPN原理与实现,里面有CRNN的链接,荐</a></p>
<p><img src="/images/20190213/1550041476524.png" alt="" width="200px" /></p>
<pre><code> “关于最后一部分的RPN网络:
1.左边分支用于bounding box regression。由于fc feature map每个点配备了10个Anchor,同时只回归中心y坐标与高度2个值,所以rpn_bboxp_red有20个channels。
2.右边分支用于Softmax分类Anchor”
解释:
10个Anchor就是10个备选框,那么就得看这10个点对应的备选框是不是准确,这个就是我们要回归预测的,但是宽度不用了,另外x不用了,所以参数就变成了高度调整和y的坐标,2个参数了。训练呢?训练是你之前会切成各个的小框
"多说一句,我看还有人不停的问Anchor大小为什么对应原图尺度,而不是conv5/fc特征尺度。这是因为Anchor是目标的候选框,经过后续分类+位置修正获得目标在原图尺度的检测框。那么这就要求Anchor必须是对应原图尺度!除此之外,如果Anchor大小对应conv5/fc尺度,那就要求Bounding box regression把很小的框回归到很大,这已经超出Regression小范围修正框的设计目的。"
解释:
这块要注意,回顾的是原始图片中的框坐标和高度,标签数据也是这么给出的。
“获得Anchor后,与Faster R-CNN类似,CTPN会做如下处理:
1.Softmax判断Anchor中是否包含文本,即选出Softmax score大的正Anchor
2.Bounding box regression修正包含文本的Anchor的中心y坐标与高度。”
解释:
可以想象,每一行的anchor,还原回去就是一个框,他上下,包含的文本高度在哪里?标签中是有这些信息的,对吧?然后你就可以对应做出调整了。另外,输入的其实以工行一行输入的,是原有1/16了,而是有“感受野”,所以最后的feature map中其实还包含了一些周边的信息的,不仅仅是原始图片框那个子区域图像。
</code></pre>
</li>
<li>
<p><a href="https://www.cnblogs.com/skyfsm/p/10054386.html">小哥演示手撸代码:【OCR技术系列之六】文本检测CTPN的代码实现</a>,代码解释的很详细,很棒,适合深入代码的同学研读。他的<a href="https://github.com/AstarLight/Lets_OCR/tree/master/detector/ctpn">同性交友网站Github链接</a>,另外此小哥还写了一篇CTPN原理的帖子,写的也很好:<a href="https://www.cnblogs.com/skyfsm/p/9776611.html">【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)</a></p>
<pre><code> Faster-RCNN效果对文本检测不好:1.长宽比例不一致 2.边缘不闭合 3.文字间有间隔
CTPN思路是先检测小文本框,检测完合并,“分治法”
F-CRNN的RPN中anchor机制是回归预测四个参数(x,y,w,h),但是CTPN回归两个参数(y,h),即anchor的纵向偏移以及该anchor的文本框的高度,因为每个候选框的宽度规定为16个像素闪光点:
1.分治法,探测小,然后拼
2.B-LSTM捕捉连续特性
3.Side-refinement(边界优化)
CTPN也有一个很明显的缺点:对于非水平的文本的检测效果并不好
SegLink,CTPN小尺度候选框+SSD,文本检测state-of-art
回归,还提出了Segment和Linking两个重要概念
segment理解为文本行的一部分,可以是一个字符或文本行的任意一部分
Segment文本检测的跟CTPN很像,检测文本行的一部分,再把他们连接
跟ssd一样,他抽取了各个VGG层的feature map是为了,大小通吃“大的feature map擅长做小物体的检测,而小的feature map则擅长检测大物体”
把完整文本行先分割检测再合并的思路,有人提出质疑,觉得这种做法比较麻烦,把文本检测切割成多个阶段来进行,这无疑增大了文本检测精度的损失和时间的消耗,对于文本检测任务上中间处理越多可能效果越差。所以有篇CVPR2017的文章提出,我们有一种方法能优雅且简洁地完成多角度文本检测,这个算法叫做EAST.
一个文本检测算法被拆分成多个阶段没用,端到端才是正确之举,EAST的pipeline相当优雅,只分为FCN生成文本行参数阶段和局部感知NMS阶段.
总结,Seg-link稍微了看了一下,east没怎么看,只是大概知道干嘛的就成,主要是,我不需要大小检测,角度检测,CTPN对我来说就足够了。
</code></pre>
</li>
<li>
<p><a href="https://blog.csdn.net/qq_23225317/article/details/79567691">有干货,另带Faster-CRNN的链接:CTPN/CRNN的OCR自然场景文字识别理解(一)</a></p>
</li>
<li>
<p><a href="https://www.cnblogs.com/lillylin/p/6893500.html">小哥列的很全,论文,大神链接和训练数据,比较全:文字检测与识别资料整理(数据库,代码,博客)【持续更新】</a></p>
</li>
<li>
<p><a href="https://www.cnblogs.com/lillylin/p/6277061.html">没太多废话,篇幅不长,竟干货:论文阅读(Weilin Huang——【ECCV2016】Detecting Text in Natural Image with Connectionist Text Proposal Network)</a></p>
</li>
</ul>
<h2 id="4crnn">4.CRNN</h2>
<p>上面讲啥了?讲的是怎么找到字块,也就是把包含字的块从图像里面找出来。然后,你就得到一堆堆包含字的小块,然后呢?然后您就想个办法,把块里面的字识别出来吧。对!这就是OCR了。</p>
<p>好吧,男2号:CRNN上场。顺道吐槽一下,CRNN,RCNN,靠,真像啊,还都偏偏出现在文字识别领域,开始的时候,真让人崩溃。</p>
<p>奇怪的废话少说,学霸控先回娘家,<a href="https://arxiv.org/pdf/1507.05717.pdf">论文</a>,当然e文不好的又想充学霸的,可以看这个<a href="https://blog.csdn.net/Quincuntial/article/details/77679463">论文中文版</a>。</p>
<h4 id="crnn结构">CRNN结构</h4>
<p><strong>CRNN的网络架构由三部分组成,包括卷积层,循环层和转录层</strong>:</p>
<p><img src="/images/20190213/1550061752866.png" alt="" class="myimg" /></p>
<p>一图胜千言,CRNN就是三层:</p>
<ul>
<li>
<p>1) 卷积层CNN,从输入图像中提取特征序列;</p>
<p>在进入网络之前,所有的图像需要缩放到相同的高度。特征图的每列对应于原始图像的一个矩形区域(称为感受野),这些矩形区域与特征图上从左到右的相应列具有相同的顺序。特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述符。</p>
</li>
<li>
<p>2) 循环层RNN,预测每一帧的标签分布;(一帧是一个字符么?)</p>
<p>RNN可以将误差差值反向传播到其输入,即卷积层,从而允许我们在统一的网络中共同训练循环层和卷积层。(原来是两个网络一起训练的呀!)两个LSTM,一个向前和一个向后组合到一个双向LSTM中。我们创建一个称为“Map-to-Sequence”的自定义网络层,作为卷积层和循环层之间的桥梁。</p>
</li>
<li>
<p>3) 转录层,将每一帧的预测变为最终的标签序列。</p>
<p>转录是根据每帧预测找到具有最高概率的标签序列。
存在两种转录模式,即无词典转录和基于词典的转录。
我们采用Graves等人[15]提出的联接时间分类(CTC)层中定义的条件概率。按照每帧预测y=y1,…,yTy=y1,…,yT对标签序列ll定义概率,并忽略ll中每个标签所在的位置。因此,当我们使用这种概率的负对数似然作为训练网络的目标函数时,我们只需要图像及其相应的标签序列,避免了标注单个字符位置的劳动。(讲人话:1是似然 2是不需要单个字符,一堆字符的似然概率作为目标函数)</p>
</li>
</ul>
<h4 id="上面是摘录的下面是自己讲人话">上面是摘录的,下面是自己讲人话</h4>
<p>先说CNN,输入图像,都给丫拍成32像素高,统一就是好,就是好,就是好(石国鹏的包袱),长度不限,3通道(RGB啊)。那输出呢?都统一成(1,25,512),1您就忽略吧,25是什么鬼?是给后续RNN作为输入序列的长度的(就是RNN有25个时间片输入),就是25,规定(乌龟的腚)甭管您输入图像多长,都25。然后512呢?是RNN输入的一个时间片的X的维度,512维?!yes,对!</p>
<p>然后,你丫就用512维度的X,输入25次(就是25个时间片)给LSTM了。那输出呢?我们都知道,RNN输出先是h,然后h做一个softmax,变成概率分布。恩,就是这样,每一个1/25输出一个字母的概率分布,如果是英文就是26个字母+空格,27个。如果是中文,那就是汉字分布喽,4000来个嘛,卧槽,好大的一个概率分布。</p>
<pre><code>对于Recurrent Layers,如果使用常见的Softmax Loss,则每一列输出都需要对应一个字符元素。那么训练时候每张样本图片都需要标记出每个字符在图片中的位置,再通过CNN感受野对齐到Feature map的每一列获取该列输出对应的Label才能进行训练。在实际情况中,标记这种对齐样本非常困难,工作量非常大。另外,由于每张样本的字符数量不同,字体样式不同,字体大小不同,导致每列输出并不一定能与每个字符一一对应。当然这种问题同样存在于语音识别领域。例如有人说话快,有人说话慢,那么如何进行语音帧对齐,是一直以来困扰语音识别的巨大难题。
</code></pre>
<p>讲人话:一般RNN都是输出是某个汉字的概率,可是从图像到汉字的对齐不好对齐啊,标注也不好标注啊,有的宽有的窄啊,那咋办?有个叫CTC的方法,丫直接预测一嘟噜串。就用它!</p>
<pre><code>对于Recurrent Layers,如果使用常见的Softmax Loss,则每一列输出都需要对应一个字符元素。那么训练时候每张样本图片都需要标记出每个字符在图片中的位置,再通过CNN感受野对齐到Featuremap的每一列获取该列输出对应的Label才能进行训练。
在实际情况中,标记这种对齐样本非常困难,工作量非常大。另外,由于每张样本的字符数量不同,字体样式不同,字体大小不同,导致每列输出并不一定能与每个字符一一对应。
当然这种问题同样存在于语音识别领域。例如有人说话快,有人说话慢,那么如何进行语音帧对齐,是一直以来困扰语音识别的巨大难题。
</code></pre>
<p>解决办法就是CTC,这玩意本来是语音识别里面用来解决对齐的一个算法,被舶来用在了这里。</p>
<h4 id="ctc">CTC</h4>
<p>我以为,CTC才是CRNN的核心,飞机里的战斗机,也是最不好理解的一部分,来,咱们好好说说:</p>
<p>先上<a href="ftp://ftp.idsia.ch/pub/juergen/icml2006.pdf">论文</a>,其实我英文读起来也不顺畅,但是,硬着头皮读论文的好处就是不会有歧义,前因后果交代的很清楚,毕竟是严格审稿过的,特别是经典论文。看中文的一些资料,常直接粗暴告诉结论,断片儿的感觉,而且,一个无意的错误,可能还会让你迷惑半天。</p>
<p>两篇讲CTC的:号称吴恩达学生,写的很细,很多细节帮助理解CTC:
<a href="https://mp.weixin.qq.com/s/JYgXxHDH4TSerp9nq3NGbg">上</a>,<a href="https://mp.weixin.qq.com/s/KaAQczEoESQ__nBaagKg7w">下</a></p>
<p>在CRNN里面使用CTC,还是<a href="https://zhuanlan.zhihu.com/p/43534801">这篇</a>讲的最好,还有一篇<a href="https://cloud.tencent.com/developer/article/1122128">纯讲CTC</a>的,还有<a href="https://blog.csdn.net/luodongri/article/details/77005948">CSDN这篇</a>,讲的很好。</p>
<p><strong>说说我的理解</strong>:</p>
<p>就是LSTM算出来的字(words)的分布后,你要想寻找那些似然概率最大的组合,你的序列是30个,但是字母可能就5个,那么需要B变换,找到所有的可能的排列组合,使得他们出现的概率的和最大,通过这个最大化,可以学习出来LSTM的参数来。学习过程太复杂,所以借助前向和后向算法。得到这个LSTM模型后,在推测的时候,还要使用bean search方法来减少推断的计算量。</p>
<p><strong>先说个B变换</strong>,</p>
<h5 id="b变换">B变换</h5>
<p>就是,一个字符串state5个字符,如果是由一个12长度的序列组成,所有可能的排列组合:</p>
<p>$B(\pi_1)=B(–stta-t—e)=state$</p>
<p>$B(\pi_2)=B(sst-aaa-tee-)=state$</p>
<p>$B(\pi_3)=B(–sttaa-tee-)=state$</p>
<p>$B(\pi_4)=B(stt-aa-t—e)=state$</p>
<p>…..</p>
<h5 id="算似然概率">算似然概率</h5>
<p>然后,说说$l$,也就是”state”,这个串出现的概率为:</p>
<p>$p(l|x)=\sum_{\pi}p(\pi|x)$ , 其中$\pi\in B^{-1}(l)$</p>
<ul>
<li>$x$就是我们输入的图像的LSTM变换后的向量</li>
<li>$B^{-1}(l)$就是上面提到的所有的$\pi$的集合。</li>
</ul>
<p>对某一个$\pi$,类似于”–sttaa-tee-“,他的概率咋算?</p>
<p>$p(\pi|x)=\prod_{t=1}^T y_{\pi_t}^t$ , 其中$\forall \pi \in L’^{T}$</p>
<ul>
<li>T是序列的长度,也就是LSTM输出的序列长度,就如同上面例子中的12.</li>
<li>$y_{\pi_t}^t$,条件独立,把每个字母输出的概率相乘,比如”–sttaa-tee-“中的p(“-“),p(“-“),p(“s”),….</li>
</ul>
<p><img src="/images/20190214/1550124194167.png" alt="" width="400px" /></p>
<p>我呀,想要干嘛?</p>
<p>我想要$p(l|x)$最大啊,他是各个$p(\pi|x)$的和,对吧。然后,x可是由LSTM的参数$w$计算得到的,所以,我就可以计算梯度,梯度上升,从而可以得到LSTM的参数啦。对吧?</p>
<p>可是当T很大的时候,$\pi$的排列组合就可能非常多了,这个计算量可就大了去了。</p>
<p>咋办?</p>
<h5 id="前向算法">前向算法</h5>
<p>用前向算法,对,就是HMM中的前向算法。回忆一下,前向算法,就是用来算一个给定转移矩阵、初始概率前提下,出现可观察序列的概率,即$P(O|\lambda)$。我们用它来算概率,定义一个前向概率,一个后向概率。</p>
<p><img src="/images/20190214/1550128240906.png" alt="" width="200px" />
<img src="/images/20190214/1550128259149.png" alt="" width="200px" /></p>
<p>然后,整个$p(l|x)$就可以写成:</p>
<p><img src="/images/20190214/1550128348305.png" alt="" width="200px" /></p>
<p>中间推导,确实没搞太清楚,太过烧脑,放弃,感兴趣自己的自己去憋:<a href="https://zhuanlan.zhihu.com/p/43534801">参考</a>。</p>
<p><img src="/images/20190216/1550296152293.png" alt="" class="myimg" /></p>
<p>这图啥意思,列是时间,30个音节把,可以理解成;行是对应的要识别的字符,其实还有字表的其他的字符,只不过,和这个标签”nihao”,都不相关,所以都给删掉了。
你想啊,你识别,肯定是按照这个顺序走的,先识别n,可能这个n还拉长,你就持续5个(红色那个t=1..5),或者直接就切换到i去了,t=2的时候(绿色那个,t=2),对吧。</p>
<p><img src="/images/20190216/1550296200687.png" alt="" width="250px" /></p>
<p>这个是说,在某个时刻t,对应到某个$l_s^{‘}$,就代表穿过$l_s^{‘}$的对应的$\pi$的概率。都加到一起,也就是$\sum$一下,所有的这样的在t时刻穿过$l_s^{‘}$的$\pi$的概率,你可能要是说了,t时刻,还有穿过别的字母的$\pi$呢呀,你怎么只谈这个$l_s^{‘}$?别急,下面就是谈:</p>
<p><img src="/images/20190216/1550296253863.png" alt="" width="250px" /></p>
<p>接着上面的,t时刻,对,你没看错,用t时刻的$\alpha_t(s) \beta_t(s)$,怎么就得到了整个概率$p(l|x)$了呢??!
别忘了,$\alpha_t(s)$,是$y_1*y_2*y_3…y_t$,而是$y_{t+1},y_{t+2},…y_T$,所以人家凑到一起,就是对穿过s的一个整个的的概率嘛。</p>
<p>这个最重要,我就是要这个玩意,我要这玩意最大化啊,似然概率最大化呀!</p>
<p>然后,我才可以反向求导,对$p(l|x)$进行求导,找出那一堆的LSTM的w参数中,使我$p(l|x)$最大的参数呀。到此,你才恍然大悟吧,LSTM做Seq2Seq是靠分类的结果和你标签的差异,从而得到交叉熵,然后让这个交叉熵最小。我们可不是这么玩的!我们是求你算呀算,算出一个每个时间片的对词的概率分布,然后这个概率分布下,你得到最后的“helo”的概率最大。恩,似然概率最大的!</p>
<p>对,这个就是CTC最核心的本质。</p>
<p>那你问了又?干嘛要扯一个前向算法出来呀?</p>
<p>问得好!</p>
<p>因为,这个似然感觉不好算啊,你可以想想:
在T=30,音素为[n,i,h,a,o]的情况下,共有C529≈120000条路径可以被压缩为[n,i,h,a,o]。 路径数目的计算公式为C音素个数T−1,量级大约为(T−1)音素个数。一段30秒包含50个汉字的语音,其可能的路径数目可以高达108,显然这么大的路径数目是无法直接计算的。因此CTC方法中借用了HMM中的向前向后算法来计算。</p>
<p>所以,就想办法用前向和后向来搞。</p>
<p>我们搞前向和后向的目的是啥,就是为了凑出上面那个式子,恩,为了你理解,我再拷贝一遍:</p>
<p><img src="/images/20190216/1550296253863.png" alt="" width="250px" /></p>
<p>然后,你对这个式子进行求导,求导对象是谁呢?是$y_k^t$。</p>
<p><img src="/images/20190216/1550296676577.png" alt="" width="350px" /></p>
<p>你眼尖,可能看出来,这个里面有个上标t,$y_{l_k}^t$!对吧,总是觉得别扭,因为t表示在某个时间片,可是你要算的是整个$p(l|x)$,有个t算几个意思?</p>
<p>其实你多虑了,因为每一个时刻t,LSTM会算出来一个概率分布,是所有的字母的,LSTM跑完一遍后,1..T时刻的所有的概率出来后(LSTM算的),然后利用推算出所有的$\alpha$和$\beta$,然后每个时间t,都可以算出一个$p(l|x)$,我理解,都可以做一个反向梯度下降,使得当前t的似然概率最大化。我理解,一个LSTM结束后,可以做T个反向传播,来更新T次对参数的更新。</p>
<p><img src="/images/20190216/1550296744001.png" alt="" class="myimg" /></p>
<p>这图就是告诉我们咋个根据LSTM算出来的概率,把各个时间片中的$\alpha$给算出来,行是涉及到的几个字母,就是$l$,就是目标字符串。列是时间片,也就是时间T。</p>
<p>好,这个是训练,训练完了,我怎么用在这个模型呢?这就是Inference问题了:</p>
<h5 id="inference">Inference</h5>
<p>这个是inference问题,推测哪个序列可能性最高:
这个网上最清楚的是吴恩达徒弟,2014年突破性语音识别成果“Deep Speech”的作者,他的解释:
<a href="https://mp.weixin.qq.com/s/KaAQczEoESQ__nBaagKg7w">https://mp.weixin.qq.com/s/KaAQczEoESQ__nBaagKg7w</a>
实际上是通过bean search方法来完成的。</p>
<pre><code>“鉴于有限的计算,集束搜索并不能真正找到Y,但它至少能通过更多计算帮助我们更好地权衡路径性质,从而最大限度地接近最好的解。”他说了,这种方法也不一定是最优,只能说可以接近最优。
</code></pre>
<p>这种方法真心没理解,感兴趣的同学可以细细研究一下,我大致的理解就是,如果是连续的或者有空的那些序列,也要留着往下算,因为存在未来合并的可能性,然后最终合计一遍合并后一样的概率,大排序后,最大的一个就是我们要的序列$\pi$,最最后,$B(\pi)$得到最终合并序列。最终结果。</p>
<h4 id="代码-1">代码</h4>
<p>很蛋疼的把能找到的代码都搜了一遍:</p>
<ul>
<li>
<p><a href="https://github.com/MaybeShewill-CV/CRNN_Tensorflow">TF的 star 358,用的Synth 90k训练的(This dataset consists of 9 million images covering 90k English words),有模型可下载,但是e文的。</a></p>
</li>
<li>
<p><a href="https://github.com/Belval/CRNN">star 137,老外整的,直接忽略(中文支持他都没试过),5天前更新,</a></p>
</li>
<li>
<p><a href="https://github.com/solivr/tf-crnn">star 155,老外的,TF的,最近刚更新14天前</a></p>
</li>
<li>
<p><a href="https://github.com/bgshih/crnn">1140个star,原作者的,貌似是,最后更新2年前,使用PyTorch</a></p>
</li>
<li>
<p><a href="https://github.com/AimeeKing/crnn-tensorflow">52个star,国人的,TF的,不过貌似很简单,不靠谱,最后更新2年前</a></p>
</li>
<li>
<p><a href="https://github.com/AKSHAYUBHAT/DeepVideoAnalytics/tree/master/docs/experiments/ocr">2431个star,不过是video的,这个只是个子项目,不考虑了,10个月前更新,TF的</a></p>
</li>
<li>
<p><a href="https://github.com/bear63/sceneReco">698个star,好处是CTPN+CRNN,PyTorch的,2年前更的了,模型没有下载,给的链接失效了,博客
是https://blog.csdn.net/u013293750/article/details/73188934,数据是自己生成150万张,“自动生成差不多150万个样本,测试集1500张左右,测试集全对率62%左右。因为硬件限制,所以样本较少,感觉样本数量应该要几千万甚至上亿,模型才会比较稳定。150万个样本训练也没收敛,还有2.5左右的cost.” “中文识别利用crnn训练英文的网络来训练中文,字符个数5529左右,中文的顺序按照tesseract开源项目复制过来的。”</a></p>
</li>
<li>
<p><a href="https://github.com/meijieru/crnn.pytorch">721个star,老外,2年前更,pytorch的,预训练模型:https://pan.baidu.com/s/1pLbeCND,没啥用,忽略</a></p>
</li>
<li>
<p><a href="https://github.com/Sierkinhane/crnn_chinese_characters_rec">国人,很热心,star 162个,pyTorch的,4个月前更</a>,<a href="https://blog.csdn.net/Sierkinhane/article/details/82857572">https://blog.csdn.net/Sierkinhane/article/details/82857572</a>博客,360万中文数据集:<a href="https://pan.baidu.com/s/1ufYbnZAZ1q0AlK7yZ08cvQ">https://pan.baidu.com/s/1ufYbnZAZ1q0AlK7yZ08cvQ</a>。</p>
</li>
<li>
<p><a href="https://github.com/jiangxiluning/chinese-ocr">203个star,TF的,1年前更,“在VGG16模型的基础上,迁移训练0、90、180、270度的文字方向分类模型</a> ,训练图片100000张”模型可下载:<a href="https://pan.baidu.com/s/1nwEyxDZ">https://pan.baidu.com/s/1nwEyxDZ</a></p>
</li>
<li>
<p><a href="https://github.com/YCG09/chinese_ocr">789个star,包含了文本检测CTPN和文本识:DenseNet + CTC,注意不是CRNN,8月前更</a>,数据集:<a href="https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw">https://pan.baidu.com/s/1QkI7kjah8SPHwOQ40rS1Pw</a> (密码:lu7m),364万张图片,生成自己的样本可参考SynthText_Chinese_version,TextRecognitionDataGenerator和text_renderer</p>
</li>
<li>
<p><a href="https://github.com/xiaomaxiao/keras_ocr">240star,数据集链接: https://pan.baidu.com/s/1jJWfDmm 密码: vh8p (中英数300W+,语料不均衡,英文多),crnn:vgg + blstm + blstm + ctc;densenet-ocr :densent + ctc,Keras+TF的,8月前更,</a></p>
</li>
<li>
<p><a href="https://github.com/bai-shang/OCR_TF_CRNN_CTC">32 star,国人,就是知乎上那篇不错诶贴子的手撸版</a>,<a href="https://zhuanlan.zhihu.com/p/43534801">博文</a></p>
</li>
<li>
<p><a href="https://github.com/xiaofengShi/CHINESE-OCR">还有一个,483颗star,8月前更,tensorflow、keras/pytorch都支持</a></p>
</li>
<li>
<p><a href="https://github.com/AstarLight/CPS-OCR-Engine">又搜到额一个项目,428star,是中山大学研究生一枚,给学校做的发票识别。</a> ,<a href="https://www.cnblogs.com/skyfsm/">博客是</a></p>
</li>
</ul>
<p>结论:最后还是选择参考CRNN_Tensorflow,需要研读论文,并把其代码完全理解后,训练自己的模型,训练集使用360万那个,以及150万那个(不知道是不是同一个人写的),然后再看准确率。估计需要1周左右。</p>
<h4 id="参考文档-1">参考文档</h4>
<p><a href="https://blog.csdn.net/Sierkinhane/article/details/82857572">https://blog.csdn.net/Sierkinhane/article/details/82857572</a></p>
<p><a href="https://blog.csdn.net/u012135425/article/details/83375143">https://blog.csdn.net/u012135425/article/details/83375143</a></p>
<h4 id="趟雷过程">趟雷过程</h4>
<p>忠实记录一下自己趟雷过程,过于真实,不忍直视</p>
<pre><code>首先,搜到了一个哥们的帖子:https://blog.csdn.net/u013293750/article/details/73188934,他还搞了一个github项目(https://github.com/bear63/sceneReco),他的modelctpn文字检测模型,下载不了郁闷。然后,搜到有个哥们什么写了一个攻略:https://blog.csdn.net/u011956004/article/details/79073282,
不过,我都不太感冒,因为都是caffi的,我想搞个tensorflow的,毕竟这个才是主流:然后我就去谷歌了一把,突然搜到一个帖子说有tensorflow版本,
https://blog.csdn.net/weixin_41579863/article/details/79816830
“调研过文本定位的大多看过caffe版的https://github.com/tianzhi0549/CTPN,一直觉得这个效果比较好,偶然发现TensorFlow版本的ctpn,欣喜同时打算跑一跑,可以在这个基础上做迁移学习了。
https://github.com/eragonruan/text-detection-ctpn”
下来,跑,用的人家的model,
最关键的工资水单不行啊。
暂时,心里有点数了,好吧,现在开始搞CRNN。
看到了这篇:https://shimo.im/docs/oDFzLoOXmYsAypwR,讲的不错,也有代码,不过犹豫了一下,
谷歌了一下“crnn tensorflow”,发现了4个github,其中第一个最高,380 star,就他把。
CRNN也是很多版本,选中了这个:
https://github.com/MaybeShewill-CV/CRNN_Tensorflow.git
run.sh 测试一张图片:
python -m tools.demo_shadownet --image_path data/test_images/test_01.jpg --weights_path model/shadownet/shadownet_2017-10-17-11-47-46.ckpt-199999
报错:
NotFoundError (see above for traceback): Restoring from checkpoint failed. This is most likely due to a Variable name or other graph key that is missing from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint. Original error:
Key shadow/batch_normalization/beta not found in checkpoint
[[node save/RestoreV2 (defined at /Users/piginzoo/workspace/opensource/CRNN_Tensorflow/tools/demo_shadownet.py:99) = RestoreV2[dtypes=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_save/Const_0_0, save/RestoreV2/tensor_names, save/RestoreV2/shape_and_slices)]]
啥毛病呢,感觉是模型文件和代码中的模型不一致。
去看他的issue,这个帖子讨论了:https://github.com/MaybeShewill-CV/CRNN_Tensorflow/issues/186
感觉是tf版本的问题,于是重新搞了一个tensorflow的环境:用virtualenv,结果还报错:
安装的时候就警告过:
“tensorflow 1.10.0 has requirement numpy<=1.14.5,>=1.13.3, but you'll have numpy 1.13.1 which is incompatible.”
运行run.sh报错:
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
于是安装numpy==1.13.3,还是报错,如旧:
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
ImportError: numpy.core.multiarray failed to import
ImportError: numpy.core.umath failed to import
ImportError: numpy.core.umath failed to import
2019-01-22 15:39:44.323473: F tensorflow/python/lib/core/bfloat16.cc:675] Check failed: PyBfloat16_Type.tp_base != nullptr
run.sh: line 1: 12910 Abort trap: 6 python -m tools.demo_shadownet --image_path data/test_images/test_01.jpg --weights_path model/shadownet/shadownet_2017-10-17-11-47-46.ckpt-199999
靠,又报错是numpy的问题,升级版本后,发现还之前的问题相同,放弃环境的搞法。
然后再去看issue,帖子后面还有个办法,就是用其他branch
这个帖子讨论了:https://github.com/MaybeShewill-CV/CRNN_Tensorflow/issues/186
一个老外建议,用branch“@wdsd641417025 If you want to use the trained model provided by the author (in folder model/shadownet) you need to use the code provided in branch revert-138-patch-2 that is in TF version 1.3”
于是checkout其他branch: git checkout revert-138-patch-2
好了,
对英文没问题,
但是中文图片全都识别成了英文,
后来才发现,他的char_dict只有500多个,根本不是中文的,只是英文的。
看了他的issue发现,果然是大家都是自己train中文的:https://github.com/MaybeShewill-CV/CRNN_Tensorflow/issues/64
不过在这里面发现了一个,这个哥们的
https://github.com/Sierkinhane/crnn_chinese_characters_rec,以及他的csdn博文:https://blog.csdn.net/Sierkinhane/article/details/82857572
他用的是pytorch,靠,可是不想研究那玩意啊,
不过人家给整了一个360万张的训练集:360万中文数据集:https://pan.baidu.com/s/1ufYbnZAZ1q0AlK7yZ08cvQ,标签:https://pan.baidu.com/s/1jfAKQVjD-SMJSffOwGhh8A 密码:u7bo,
不过,他也没给模型!靠!得自己train了。
</code></pre>
<h2 id="5-一些文章的心得">5. 一些文章的心得</h2>
<p>中间读了一些文章,把其中的文摘摘录出来,以备自己日后参考。</p>
<p>其实,没啥用,都是初期,不靠谱的时候,自己东看西看的一些摘录,写下来了,又不舍得删,就放这里了,客官要是闲的蛋疼,可以看看。</p>
<h3 id="参考-1">参考</h3>
<p><a href="https://mp.weixin.qq.com/s/ULVRX-FpPRtTugrTHrs4lw">https://mp.weixin.qq.com/s/ULVRX-FpPRtTugrTHrs4lw</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/38655369">https://zhuanlan.zhihu.com/p/38655369</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/34584411">https://zhuanlan.zhihu.com/p/34584411</a></p>
<p><a href="https://cloud.tencent.com/developer/article/1030422">https://cloud.tencent.com/developer/article/1030422</a></p>
<p><a href="https://www.jishuwen.com/d/2JVF">https://www.jishuwen.com/d/2JVF</a></p>
<p><a href="http://www.mooc.ai/open/course/605">http://www.mooc.ai/open/course/605</a></p>
<p><a href="https://edu.csdn.net/course/play/10506">https://edu.csdn.net/course/play/10506</a></p>
<p><a href="https://mp.weixin.qq.com/s/jvHwFfcvQQdZYpwK3I1DQg">https://mp.weixin.qq.com/s/jvHwFfcvQQdZYpwK3I1DQg</a></p>
<p>其他:</p>
<p><a href="https://github.com/YCG09/chinese_ocr">https://github.com/YCG09/chinese_ocr</a></p>
<p>这两个不错:</p>
<p><a href="http://yangxian10.github.io/">http://yangxian10.github.io/</a></p>
<p><a href="https://mp.weixin.qq.com/s/Y7Xpe1DlhGR9XRB7GunGnA">https://mp.weixin.qq.com/s/Y7Xpe1DlhGR9XRB7GunGnA</a> 这个综述写的很好</p>
<h4 id="笔记1">笔记1</h4>
<p><a href="https://mp.weixin.qq.com/s/jvHwFfcvQQdZYpwK3I1DQg">https://mp.weixin.qq.com/s/jvHwFfcvQQdZYpwK3I1DQg</a></p>
<p>雷音(OCR技术),阿里云(证件、人脸识别技术),MTEE(实时决策引擎),PAI(模型训练、部署平台)。
很多传统方法可以实现特定模糊类型的检测,比如$\color{red}{Laplacian算子法}$,通过计算二阶微分,然后求方差,根据阈值可以确定图像是否模糊。</p>
<p>传统方法在特征提取及特征表现上存在局限性。</p>
<p>本文改进$\color{red}{MobileNetV2}$的网络结构,实现一种新的$\color{red}{模糊检测算法}$。模糊检测需要特别关注图像细节的差异,因此,先通过$\color{red}{随机切片及HSV颜色空间筛选}$的方法生成样本集合,然后基于OCR识别率指标划分正负样本。</p>
<p>原始MobileNetV2网络包含十七层Bottleneck,模型层数较深,并且每层还进行扩展,在实际训练中,不易收敛且模型较大。通过对原始网络进行裁剪和改进,新的结构仅包含两层卷积、两层池化、两层Bottleneck以及一层全连接,网络更浅更窄,模型参数更少。该模糊检测算法的准确率约93.4%,模型原始大小约2M,而使用原始MobileNetV2训练的模型大小约26M。</p>
<p>传统方法可以解决特定的简单的形变问题,比如对于简单的旋转形变,可以通过Hough Transform先检测直线,然后通过旋转角度进行复原。</p>
<p>基于深度学习的方法,如$\color{red}{FCN,STN,Unet}$等,也被尝试用来处理形变问题。本文结合深度学习语义分割领域的相关知识,针对已有方法的不足设计优化方案,提出一种新的形变复原算法。</p>
<p>本文基于$\color{red}{Dilated Convolution}$优化网络结构,并且通过调整损失函数、$\color{red}{平滑预测值等方法,提出一种新的形变复原算法,提升模型的效果。本文采用$\color{red}{MS-SSIM}$作为算法复原效果的评价指标。</p>
<p>存在至少一成的词识别错误,由于没有$\color{red}{针对领域进行优化和分词}$,无法直接阅读和无人化使用,将识别结果进行领域相关的纠错分词,势在必行。</p>
<p>通过数据合成(根据概率转移矩阵,对字符进行增、删、改等编辑操作),以及迁移优化,训练得到满足目标要
求的模型。目前,图片质量较好时,OCR识别结果与$\color{red}{Ground Truth}$的差错率(编辑距离)为15.91%(若忽略空格:2.91%);经过本文的纠错分词模型,差错率降到2.24%,词准确率提升到93.56%。</p>
<h4 id="笔记2">笔记2</h4>
<p><a href="https://zhuanlan.zhihu.com/p/38655369">https://zhuanlan.zhihu.com/p/38655369</a></p>
<p>最近流行的技术解决方案中,是用一个多目标网络直接训练出一个$\color{red}{端到端}$的模型。在训练阶段,该模型的输入是
训练图像及图中文本坐标、文本内容,模型优化目标是输出端$\color{red}{边框坐标预测误差与文本内容预测误差的加权和}$。在服务实施阶段,原始图片流过该模型直接输出预测文本信息。</p>
<p>模型基础:起源于图像分类、检测、语义分割等视觉处理任务的各个$\color{red}{基础网络(backbone network)}$。同时,起源于物体检测、语义分割任务的多个网络框架,也被改造后用于$\color{red}{提升}$图文识别任务中的准确率和执行速度。</p>
<h5 id="1基础网络">1.基础网络:</h5>
<p>图文识别任务中充当特征提取模块的基础网络,可以来源于$\color{red}{通用}$场景的图像分类模型。例如,VGGNet,ResNet、InceptionNet、DenseNet、Inside-Outside Net、Se-Net等。也可以来源于特定场景的$\color{red}{专用}$网络模型。例如,擅长提取图像细节特征的FCN网络,擅长做图形矫正的STN网络。</p>
<p><strong>FCN网络</strong></p>
<p>全卷积网络(FCN,fully convolutional network), 是$\color{red}{去除了全连接(fc)层}$的基础网络,最初是用于实现$\color{red}{语义分割}$任务。 FC的优势在于利用反卷积(deconvolution)、上池化(unpooling)等上采样(upsampling)操作,将$\color{red}{特征矩阵}$恢复到$\color{red}{接近原图尺寸,然后对$\color{red}{每一个}$位置上的$\color{red}{像素}$做$\color{red}{类别预测}$,从而能识别出更清晰的$\color{red}{物体边界}$。</p>
<p>基于FCN的检测网络,$\color{red}{不再}$经过候选区域$\color{red}{回归}$出物体边框, 而是根据高分辨率的特征图$\color{red}{直接预测物体边框}$。因为不需要像Faster-RCNN那样在训练前定义好候选框长宽比例,FCN在预测$\color{red}{不规则物体边界}$时更加鲁棒。</p>
<p>由于FCN网络最后一层特征图的像素分辨率较高,而图文识别任务中需要依赖清晰的文字笔画来区分不同字符(特别是汉字),所以FCN网络很适合用来$\color{red}{提取文本特征}$。当FCN被用于图文识别任务时,最后一层特征图中每个像素将被分成文字行($\color{red}{前景}$)和非文字行($\color{red}{背景}$)两个类别。</p>
<p><strong>STN网络</strong></p>
<p>空间变换网络(STN,Spatial Transformer Networks)的作用是对输入特征图进行$\color{red}{空间位置矫正}$得到输出$\color{red}{特征图}$,这个矫正过程是可以进行$\color{red}{梯度传导}$的,从而能够支持端到端的模型训练。</p>
<h5 id="2检测网络框架">2.检测网络框架</h5>
<p><strong>Faster RCNN</strong></p>
<p>作为一个检测网络框架,其目标是寻找紧凑包围被检测$\color{red}{对象的边框}$(BBOX,Bounding Box)。</p>
<p>它在Fast RCNN检测框架基础上引入$\color{red}{区域建议网络}$(RPN,Region Proposal Network),来快速产生与目标物体长宽比例接近的多个候选区域参考框(anchor);</p>
<p>它通过ROI(Region of Interest) Pooling层为多种尺寸参考框产生出归一化固定尺寸的$\color{red}{区域特征}$;</p>
<p>它利用共享的CNN卷积网络同时向上述RPN网络和ROI Pooling层输入特征映射(Feature Maps),从而减少卷积层参数量和计算量。训练过程中使用到了多目标损失函数,包括RPN网络、ROI Pooling层的边框分类loss和坐标回归loss。通过这些loss的梯度反向传播,能够调节候选框的坐标、并增大它与标注对象边框的重叠度/交并比(IOU,Intersection over Union)。RPN网格生成的候选框初始值有固定位置以及长宽比例。如果候选框初始长宽比例设置得与图像中物体形状差别很大,就很难通过回归找到一个紧凑包围它的边框。</p>
<p><strong>SSD(Single Shot MultiBox Detector)</strong></p>
<p>是2016年提出的一种$\color{red}{全卷积目标检测算法}$,截止到目前仍是$\color{red}{主要的目标检测框架}$之一,相比Faster RCNN有着明显的$\color{red}{速度}$优势。</p>
<p>SSD是一种$\color{red}{one stage算法}$,$\color{red}{直接预测}$被检测对象的$\color{red}{边框和得分}$。检测过程中,SSD算法利用多尺度思想进行检测,在不同尺度的特征图(feature maps)上产生与目标物体长宽比例接近的多个默认框(Default boxes),进行回归与分类。</p>
<h5 id="3文本检测模型">3.文本检测模型</h5>
<p>文本检测模型的目标是从图片中尽可能准确地找出文字所在区域。
视觉领域常规物体检测方法(SSD, YOLO, Faster-RCNN等)直接套用于文字检测任务效果并不理想,原因是:</p>
<ul>
<li>相比于常规物体,文字行长度、长宽比例变化范围很大。</li>
<li>文本行是有方向性的。常规物体边框BBox的四元组描述方式信息量不充足。</li>
<li>自然场景中某些物体局部图像与字母形状相似,如果不参考图像全局信息将有误报。</li>
<li>有些艺术字体使用了弯曲的文本行,而手写字体变化模式也很多。</li>
<li>由于丰富的背景图像干扰,手工设计特征在自然场景文本识别任务中不够鲁棒。</li>
</ul>
<p>近年来出现了各种基于深度学习的技术解决方案。它们从特征提取、区域建议网络(RPN)、多目标协同训练、Loss改进、非极大值抑制(NMS)、半监督学习等角度对常规物体检测方法进行改造,极大提升了自然场景图像中文本检测的准确率。</p>
<ul>
<li>CTPN方案中,用BLSTM模块提取字符所在图像上下文特征,以提高文本块识别精度。</li>
<li>RRPN等方案中,文本框标注采用BBOX +方向角度值的形式,模型中产生出可旋转的文字区域候选框,并在边框回归计算过程中找到待测文本行的倾斜角度。</li>
<li>DMPNet等方案中,使用四边形(非矩形)标注文本框,来更紧凑的包围文本区域。</li>
<li>SegLink 将单词切割为更易检测的小文字块,再预测邻近连接将小文字块连成词。</li>
<li>TextBoxes等方案中,调整了文字区域参考框的长宽比例,并将特征层卷积核调整为长方形,从而更适合检测出细长型的文本行。</li>
<li>FTSN方案中,作者使用Mask-NMS代替传统BBOX的NMS算法来过滤候选框。</li>
<li>WordSup方案中,采用半监督学习策略,用单词级标注数据来训练字符级文本检测模型。</li>
</ul>
<p><strong>CTPN模型</strong></p>
<p>CTPN是目前$\color{red}{流传最广、影响最大}$的开源文本检测模型,可以检测$\color{red}{水平或微斜}$的文本行。文本行可以被看成一个$\color{red}{字符sequence}$,而不是一般物体检测中$\color{red}{单个独立}$的目标。同一文本行上各个字符图像间可以互为$\color{red}{上下文}$,在训练阶段让$\color{red}{检测}$模型学习图像中蕴含的这种$\color{red}{上下文统计规律}$,可以使得预测阶段有效提升文本块预测准确率。CTPN模型的图像预测流程中,前端使用当时流行的VGG16做基础网络来提取各字符的$\color{red}{局部图像特征}$,中间使用$\color{red}{BLSTM层}$提取$\color{red}{字符序列上下文特征}$,然后通过FC全连接层,末端经过预测分支输出各个$\color{red}{文字块的坐标值}$和$\color{red}{分类结果概率值}$。在数据后处理阶段,将合并相邻的小文字块为文本行。</p>
<p><strong>RRPN模型</strong></p>
<p>基于旋转区域候选网络(RRPN, Rotation Region Proposal Networks)的方案,将$\color{red}{旋转因素}$并入经典区域候选网络(如Faster RCNN)。这种方案中,一个文本区域的ground truth被表示为具有5元组(x,y,h,w,$\color{red}{θ}$)的旋转边框, 坐标(x,y)表示边框的几何中心, 高度h设定为边框的短边,宽度w为长边,方向是长边的方向。训练时,首先生成含有文本方向角的倾斜候选框,然后在边框回归过程中学习文本方向角。</p>
<p><strong>FTSN模型</strong></p>
<p>FTSN(Fused Text Segmentation Networks)模型使用$\color{red}{分割网络}$支持倾斜文本检测。它使用$\color{red}{Resnet-101}$做基础网络,使用了多尺度融合的特征图。标注数据包括文本实例的像素掩码和边框,使用像素预测与边框检测多目标联合训练。</p>
<p><strong>DMPNet模型</strong></p>
<p>DMPNet(Deep Matching Prior Network)中,使用四边形($\color{red}{非矩形}$)来更紧凑地标注文本区域边界,其训练出的模型对$\color{red}{倾斜文本块}$检测效果更好。</p>
<p><strong>EAST模型</strong></p>
<p>EAST(Efficient and Accuracy Scene Text detection pipeline)模型中,首先使用$\color{red}{全卷积网络}$(FCN)生成多尺度融合的特征图,然后在此基础上直接进行$\color{red}{像素级的文本块}$预测。该模型中,支持旋转矩形框、任意四边形两种文本区域标注形式。对应于四边形标注,模型执行时会对特征图中每个像素预测其到四个顶点的坐标差值。对应于旋转矩形框标注,模型执行时会对特征图中每个像素预测其到矩形框四边的距离、以及矩形框的方向角。</p>
<p>该模型检测英文单词效果较好、检测中文长文本行效果欠佳,不过,省略了其他模型中常见的区域建议、单词分割、子块合并等步骤,因此该模型的执行速度很快。</p>
<p><strong>SegLink模型</strong>
SegLink模型的标注数据中,先将每个单词切割为更易检测的有方向的小文字块(segment),然后用$\color{red}{邻近连接}$(link )将各个小文字块连接成单词。这种方案方便于识别长度变化范围很大的、带方向的单词和文本行,它不会象Faster-RCNN等方案因为候选框长宽比例原因检测不出长文本行。相比于CTPN等文本检测模型,SegLink的图片处理速度快很多。</p>
<p><strong>PixelLink模型</strong></p>
<p>自然场景图像中一组文字块经常紧挨在一起,通过语义分割方法很难将它们识别开来,所以PixelLink模型尝试用$\color{red}{实例分割}$方法解决这个问题。该模型的特征提取部分,为$\color{red}{VGG16基础上构建的$\color{red}{FCN网络}$。模型执行流程如下图所示。首先,借助于CNN 模块执行两个像素级预测:一个$\color{red}{文本二分类}$预测,一个$\color{red}{链接二分类}$预测。接着,用正链接去连接邻居正文本像素,得到$\color{red}{文字块实例分割}$结果。然后,由分割结果直接就获得文字块边框, 而且允许生成倾斜边框。上述过程中,省掉了其他模型中常见的边框回归步骤,因此训练收敛速度更快些。训练阶段,使用了平衡策略,使得每个文字块在总LOSS中的权值相同。训练过程中,通过预处理增加了各种方向角度的文字块实例。</p>
<p><strong>Textboxes/Textboxes++模型</strong></p>
<p>Textboxes是$\color{red}{基于SSD框架}$的图文检测模型,训练方式是$\color{red}{端到端}$的,运行速度也较快。如下图所示,为了适应文字行细长型的特点,候选框的长宽比增加了1,2,3,5,7,10这样初始值。为了适应文本行细长型特点,特征层也用长条形卷积核代替了其他模型中常见的正方形卷积核。为了防止漏检文本行,还在垂直方向增加了候选框数量。为了检测大小不同的字符块,在多个尺度的特征图上并行预测文本框, 然后对预测结果做NMS过滤。</p>
<p>Textboxes++是Textboxes的$\color{red}{升级版}$本,目的是增加对倾斜文本的支持。为此,将标注数据改为了$\color{red}{旋转矩形框和不规则四边形}$的格式;对候选框的长宽比例、特征图层卷积核的形状都作了相应调整。</p>
<h5 id="4-文本识别模型">4. 文本识别模型</h5>
<p>文本识别模型的目标是从已$\color{red}{分割出的文字区域}$中$\color{red}{识别}$出$\color{red}{文本内容}$。</p>
<p><strong>CRNN模型</strong></p>
<p>CRNN(Convolutional Recurrent Neural Network)是目前较为流行的图文识别模型,可识别较长的文本序列。它包含CNN特征提取层和BLSTM序列特征提取层,能够进行端到端的联合训练。</p>
<p>它利用BLSTM和CTC部件学习字符图像中的上下文关系, 从而有效提升文本识别准确率,使得模型更加鲁棒。预测过程中,前端使用标准的CNN网络提取文本图像的特征,利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC rule)进行预测得到文本序列。</p>
<p><strong>RARE模型</strong></p>
<p>RARE(Robust text recognizer with Automatic Rectification)模型在识别变形的图像文本时效果很好。如下图所示,模型预测过程中,输入图像首先要被送到一个空间变换网络中做处理,矫正过的图像然后被送入序列识别网络中得到文本预测结果。</p>
<p>如下图所示,空间变换网络内部包含定位网络、网格生成器、采样器三个部件。经过训练后,它可以根据输入图像的特征图动态地产生空间变换网格,然后采样器根据变换网格核函数从原始图像中采样获得一个矩形的文本图像。RARE中支持一种称为TPS(thin-plate splines)的空间变换,从而能够比较准确地识别透视变换过的文本、以及弯曲的文本.</p>
<h5 id="5-端到端模型">5. 端到端模型</h5>
<p>端到端模型的目标是$\color{red}{一站式}$直接从图片中$\color{red}{定位和识别}$出所有文本内容来。</p>
<p><strong>FOTS Rotation-Sensitive Regression</strong></p>
<p>FOTS(Fast Oriented Text Spotting)是图像文本检测与识别同步训练、端到端可学习的网络模型。检测和识别任务共享卷积特征层,既节省了计算时间,也比两阶段训练方式学习到更多图像特征。引入了旋转感兴趣区域(RoIRotate),可以从卷积特征图中产生出定向的文本区域,从而支持倾斜文本的识别.</p>
<p><strong>STN-OCR模型</strong></p>
<p>STN-OCR是集成了了图文检测和识别功能的端到端可学习模型。在它的检测部分嵌入了一个空间变换网络(STN)来对原始输入图像进行仿射(affine)变换。利用这个空间变换网络,可以对检测到的多个文本块分别执行旋转、缩放和倾斜等图形矫正动作,从而在后续文本识别阶段得到更好的识别精度。在训练上STN-OCR属于半监督学习方法,只需要提供文本内容标注,而不要求文本定位信息。作者也提到,如果从头开始训练则网络收敛速度较慢,因此建议渐进地增加训练难度。STN-OCR已经开放了工程源代码和预训练模型。</p>
<h5 id="6-数据集">6. 数据集</h5>
<p><strong>Chinese Text in the Wild(CTW)</strong></p>
<p>该数据集包含32285张图像,1018402个中文字符(来自于腾讯街景), 包含平面文本,凸起文本,城市文本,农村文本,低亮度文本,远处文本,部分遮挡文本。图像大小2048*2048,数据集大小为31GB。以(8:1:1)的比例将数据集分为训练集(25887张图像,812872个汉字,测试集(3269张图像,103519个汉字),验证集(3129张图像,103519个汉字)。</p>
<p>文献链接:<a href="https://arxiv.org/pdf/1803.00085.pdf">https://arxiv.org/pdf/1803.00085.pdf</a></p>
<p>数据集下载地址:<a href="https://ctwdataset.github.io/">https://ctwdataset.github.io/</a></p>
<p><strong>Reading Chinese Text in the Wild(RCTW-17)</strong></p>
<p>该数据集包含12263张图像,训练集8034张,测试集4229张,共11.4GB。大部分图像由手机相机拍摄,含有少量的屏幕截图,图像中包含中文文本与少量英文文本。图像分辨率大小不等。</p>
<p>下载地址<a href="http://mclab.eic.hust.edu.cn/icdar2017chinese/dataset.html">http://mclab.eic.hust.edu.cn/icdar2017chinese/dataset.html</a></p>
<p>文献:<a href="http://arxiv.org/pdf/1708.09585v2">http://arxiv.org/pdf/1708.09585v2</a></p>
<p><strong>ICPR MWI 2018 挑战赛</strong></p>
<p>大赛提供20000张图像作为数据集,其中50%作为训练集,50%作为测试集。主要由合成图像,产品描述,网络广告构成。该数据集数据量充分,中英文混合,涵盖数十种字体,字体大小不一,多种版式,背景复杂。文件大小为2GB。</p>
<p>下载地址:<a href="https://tianchi.aliyun.com/competition/information.htm?raceId=231651&_is_login_redirect=true&accounttraceid=595a06c3-7530-4b8a-ad3d-40165e22dbfe">https://tianchi.aliyun.com/competition/information.htm?raceId=231651&_is_login_redirect=true&accounttraceid=595a06c3-7530-4b8a-ad3d-40165e22dbfe</a></p>
<p><strong>Total-Text</strong></p>
<p>该数据集共1555张图像,11459文本行,包含水平文本,倾斜文本,弯曲文本。文件大小441MB。大部分为英文文本,少量中文文本。训练集:1255张 测试集:300</p>
<p>下载地址:<a href="http://www.cs-chan.com/source/ICDAR2017/totaltext.zip">http://www.cs-chan.com/source/ICDAR2017/totaltext.zip</a></p>
<p>文献:<a href="http:// arxiv.org/pdf/1710.10400v">http:// arxiv.org/pdf/1710.10400v</a></p>
<p><strong>Google FSNS(谷歌街景文本数据集)</strong></p>
<p>该数据集是从谷歌法国街景图片上获得的一百多万张街道名字标志,每一张包含同一街道标志牌的不同视角,图像大小为600*150,训练集1044868张,验证集16150张,测试集20404张。</p>
<p>下载地址:<a href="http://rrc.cvc.uab.es/?ch=6&com=downloads">http://rrc.cvc.uab.es/?ch=6&com=downloads</a></p>
<p>文献:<a href="http:// arxiv.org/pdf/1702.03970v1">http:// arxiv.org/pdf/1702.03970v1</a></p>
<p><strong>COCO-TEXT</strong></p>
<p>该数据集,包括63686幅图像,173589个文本实例,包括手写版和打印版,清晰版和非清晰版。文件大小12.58GB,训练集:43686张,测试集:10000张,验证集:10000张</p>
<p>文献: <a href="http://arxiv.org/pdf/1601.07140v2">http://arxiv.org/pdf/1601.07140v2</a></p>
<p>下载地址:<a href="https://vision.cornell.edu/se3/coco-text-2/">https://vision.cornell.edu/se3/coco-text-2/</a></p>
<p><strong>Synthetic Data for Text Localisation</strong></p>
<p>在复杂背景下人工合成的自然场景文本数据。包含858750张图像,共7266866个单词实例,28971487个字符,文件大小为41GB。该合成算法,不需要人工标注就可知道文字的label信息和位置信息,可得到大量自然场景文本标注数据。</p>
<p>下载地址:<a href="http://www.robots.ox.ac.uk/~vgg/data/scenetext/">http://www.robots.ox.ac.uk/~vgg/data/scenetext/</a></p>
<p>文献:<a href="http://www.robots.ox.ac.uk/~ankush/textloc.pdf">http://www.robots.ox.ac.uk/~ankush/textloc.pdf</a></p>
<p>Code: <a href="https://github.com/ankush-me/SynthText">https://github.com/ankush-me/SynthText</a> 英文版</p>
<p>Code <a href="https://github.com/wang-tf/Chinese_OCR_synthetic_data">https://github.com/wang-tf/Chinese_OCR_synthetic_data</a> 中文版</p>
<p><strong>Synthetic Word Dataset</strong></p>
<p>合成文本识别数据集,包含9百万张图像,涵盖了9万个英语单词。文件大小为10GB</p>
<p>下载地址:<a href="http://www.robots.ox.ac.uk/~vgg/data/text/">http://www.robots.ox.ac.uk/~vgg/data/text/</a></p>
<p><strong>Caffe-ocr中文合成数据</strong></p>
<p>数据利用中文语料库,通过字体、大小、灰度、模糊、透视、拉伸等变化随机生成,共360万张图片,图像分辨率为280x32,涵盖了汉字、标点、英文、数字共5990个字符。文件大小约为8.6GB</p>
<p>下载地址:<a href="https://pan.baidu.com/s/1dFda6R3">https://pan.baidu.com/s/1dFda6R3</a></p>
<h4 id="笔记3">笔记3</h4>
<p><a href="https://zhuanlan.zhihu.com/p/34584411">https://zhuanlan.zhihu.com/p/34584411</a></p>
<p>在2013年之前,传统算法在OCR领域占主导地位,其标准流程包含文本检测、单字符分割、单字符识别、后处理等步骤。</p>
<p>传统方法中具有代表性的PhotoOCR[1]算法。PhotoOCR是谷歌公司提出的一套完整OCR识别系统,包含文字区域检测、文本行归并、过分割、基于Beam Search的分割区域的组合、基于HOG特征和全连接神经网络的单字符分类、基于ngram方法的识别结果校正。</p>
<p>基于CNN的识别算法,该方法由两部分构成,检测模块采用基于 region proposal 和滑动窗的方法切出词条,识别部分采用 7层CNN对整词分类。此方法另一大贡献是提供了大规模合成数据的方法。标注文字的成本远高于标注人脸、物体等数据,高标注成本限制了OCR数据集规模。因此,合成样本方法的出现,有效缓解了深度网络对于OCR真实标注数据的依赖,极大推动了OCR识别领域的深度算法的发展。CNN方法的出现,最大功能是在特征工程及单字符分类领域替代传统方法,但仍然未能避免传统思路中难度最大的二值化和字符分割问题。在复杂的自然场景、广告场景中,CNN分类方法仍难以满足需要。</p>
<h5 id="腾讯dppr团队场景文字识别技术">腾讯DPPR团队场景文字识别技术</h5>
<p>基于联结时序分类(Connectionist Temporal Classification, CTC)训练RNN的算法,在语音识别领域[4]显著超过传统语音识别算法。一些学者尝试把CTC损失函数借鉴到OCR识别中,CRNN [5]就是其中代表性算法。CRNN算法输入100*32归一化高度的词条图像,基于7层CNN提取特征图,把特征图按列切分(Map-to-Sequence),每一列的512维特征,输入到两层各256单元的双向LSTM进行分类。在训练过程中,通过CTC损失函数的指导,实现字符位置与类标的近似软对齐。</p>
<p>本团队也开始尝试把注意力机制引入到OCR识别模块。注意力机制能够聚焦词条图像特征向量的ROI,在当前时刻实现特征向量与原图字符区域的近似对齐,提升深度网络中的Encoder-Decoder模型的聚焦度与准确率。</p>
<h4 id="笔记4">笔记4</h4>
<p><a href="https://cloud.tencent.com/developer/article/1030422">https://cloud.tencent.com/developer/article/1030422</a></p>
<p><img src="https://ask.qcloudimg.com/http-save/yehe-1269631/adtgfusgum.jpeg?imageView2/2/w/1620" alt="" class="myimg" /></p>
<p>印刷体识别的主要流程大致分为以下几个部分:图像预处理;版面处理;图像切分;特征提取、匹配及模型训练、匹配;识别后处理。</p>
<p><strong>预处理</strong></p>
<p>一般包括灰度化、二值化,倾斜检测与校正,行、字切分,平滑,规范化等等。灰度化处理的主要目的就是滤除这些信息,灰度化的实质其实就是将原本由三维描述的像素点,映射为一维描述的像素点。经过灰度处理的彩色图像还需经过二值化处理将文字与背景进一步分离开,二值化效果的好坏,会直接影响灰度文本图像的识别率。二值化方法大致可以分为局部阈值二值化和整体阈值二值化。目前使用较多的日本学者大津提出的“大津法”</p>
<p><strong>倾斜校正</strong></p>
<p>文本图像的倾斜检测方法有许多种,主要可以划分为以下$\color{red}{五类}$:基于投影图的方法,基于Houhg变换的方法,基于交叉相关性的方法,基于Fourier变换的方法和基于最近邻聚类方法。</p>
<p>最简单的基于投影图的方法是将文本图像沿不同方向进行投影。当投影方向和文字行方向一致时,文字行在投影图上的峰值最大,并且投影图存在明显的峰谷,此时的投影方向就是倾斜角度。</p>
<p>Huogh变换也是一种$\color{red}{最常用}$的倾斜检测方法,它是利用Hough变换的特性,将图像中的前景像素映射到极坐标空间,通过统计极坐标空间各点的累加值得到文档图像的倾斜角度。</p>
<p>Fourier变换的方法是利用页面倾角对应于使Fourier空间密度最大的方向角的特性,将文档图像的所有像素点进行Fourier变换。这种方法的计算量非常大,目前很少采用。</p>
<p>基于最近邻聚类方法,取文本图像的某个子区域中字符连通域的中心点作为特征点,利用基线上的点的连续性,计算出对应的文本行的方向角,从而得到整个页面的倾斜角。</p>
<p><strong>规范化</strong></p>
<p>为了消除文字点阵位置上的偏差,需要把整个文字点阵图移动到规定的位置上,这个过程被称为位置规范化。</p>
<p>常用的位置规范化操作有两种,一种是基于质心的位置规范化,另一种是基于文字外边框的位置规范化。基于文字外边框的位置规范化需要首先计算文字的外边框,并找出中心,然后把文字中心移动到指定的位置上来。基于质心的位置规范化方法抗干扰能力比基于文字外边框的位置规范化方法要强。</p>
<p><strong>图像平滑</strong></p>
<p>文本图像经过平滑处理之后,能够去掉笔划上的孤立白点和笔划外部的孤立黑点,以及笔划边缘的凹凸点,使得笔划边缘变得平滑。</p>
<p><strong>版面分析</strong></p>
<p>将文本图像分割为不同部分,并标定各部分属性,如:文本、图像、表格。目前在版面分析方面的工作核心思想都是基于连通域分析法,后衍生出的基于神经网络的版面分析法等也都是以连通域为基础进行的。</p>
<p>连通域是指将图像经过二值化后转为的二值矩阵中任选一个像素点,若包围其的所有像素点中存在相同像素值的像素点则视为两点连通,以此类推,这样的像素点构成的一个集合在图像中所在的区域即一个连通域。根据连通域大小或像素点分布等特征可以将连通域的属性标记出来,用作进一步处理的依据。</p>
<p><strong>版面理解</strong></p>
<p>获取文章逻辑结构,包括各区域的逻辑属性、文章的层次关系和阅读顺序。根据版面分析时记载的连通域位置信息,确定连通域归属序列。</p>
<p><strong>图像切分</strong>
行(列)切分和字切分。经过切分处理后,才能方便对单个文字进行识别处理。</p>
<p>[行、列切分]</p>
<p>由于印刷体文字图像行列间距.、字间距大致相等,且几乎不存在粘连现象,所以可以采用投影法对图像进行切分,得到每列(行)在坐标轴的像素值投影曲线是一个不平滑的曲线,通过高斯平滑后的曲线在每个波谷位置间的区域即为要的一行(列)。</p>
<p>[字切分]</p>
<p>字切分对于不同的文种存在着比较明显的差异,通常意义下,字切分是指将整行或整列文字切分成独立的一个个文字,而实际上根据文种差异,可能还需需要将单个文字进行进一步切分。而因为文种不同,构词法或钩字法也有所不同,所以切分方法的难度差别也是天壤之别。例如将汉字“屋”切分开的难度和将英文“house”切分开的难度差别就很大,因此在识别模式上,也会根据文种特性,设计不同的识别方法。</p>
<p><strong>特征提取及匹配</strong></p>
<p>特征提取是从单个字符图像上提取统计特征或结构特征的过程。所提取的特征的稳定性及有效性,决定了识别的性能。对于统计特征的提取,可利用统计模式识别中的特征提取方法,而对结构特征的提取,应根据具体文字所确定的识别基元确定相应的特征提取方法。在相当长的文字识别的研究过程中,是利用人们的经验知识,指导文字特征的提取。例如边缘特征、变换特征、穿透特征、网格特征、特征点特征、方向线素特征等等。</p>
<p>特征匹配是从已有的特征库中找到与待识别文字相似度最高的文字的过程。当待识别文字提取完特征之后,不管使用的是统计特征,还是结构特征,都需要有一个特征库来进行比对,特征库中应包含欲识别字符集中所有文字的特征。特征匹配的方法有很多,比较常用的有:欧式空间的比对法、松弛比对法、动态程序比对法以及HMM(HiddneMarkovModel)法等等。在神经网络出现之前以及之后很长一段时间,在汉字OCR领域,一直采用的就是这种模板匹配的方法。</p>
深度增强学习-DRL
2019-01-10T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/01/10/DRL
<h1 id="前言">前言</h1>
<p>深度增强学习难么?难,也不难!</p>
<p>不难在,没有太多的数学公式,甚至比机器学习那些算法的数学推导都少很多。</p>
<p>难,难在整个体系,概念,忒TM多了。不信?!你就跳到参考资料章节的“概念”里,去看看那一坨概念就明白了。</p>
<p>我的体会是,要搞清深度增强学习,就得先搞清楚增强学习,而增强学习里,马尔科夫决策链,贝尔曼方程,模型和非模型,预测和控制,这些核心概念都得门清。</p>
<p>强化学习的分类:</p>
<p><img src="/images/20190114/1547438890285.png" alt="" class="myimg" /></p>
<h1 id="概述">概述</h1>
<p>增强学习<a href="#">reinforcement learning</a>最核心的是学一个策略 $\pi$,然后这个策略$\pi$对某一个环境的状态s,可以给出一个action a,然后a会导致状态发生迁移,并且这个时候,环境会给出一个奖励r。整个过程就是不断地寻找这个$\pi$,找个最好的或者相对好的,从而让奖励的期望值最大。所以,大家都说,增强学习实际上是一个决策算法,帮助你做出更好的决策。</p>
<h2 id="马尔科夫决策过程mdp">马尔科夫决策过程(MDP)</h2>
<p>马尔科夫决策过程(Markov decision process,MDP)。它是由⟨$S;A;P;R;\gamma$⟩ 构成的一个五元组,其中:</p>
<ul>
<li>S是一个有限状态集,就是你处于哪个状态啊</li>
<li>A是说采取啥动作</li>
<li>P 是状态转移概率矩阵:$P^a_{s->s′}$ ,就是你在s,采取a,那么你跳转到下一个状态的s’的转移概率</li>
<li>R 是一个奖励函数,$R_s^a = E[R_{t+1}|S_t = s,A_t=a]$,注意,是个期望哈,这个“期望”的概念很重要</li>
<li>$\gamma$是一个衰减因子: $\gamma\in$[0,1],这个是为了让整个收益收敛。</li>
</ul>
<p>可是,你要问了,为何会有转移概率,动作a是如何产生的? 对,好问题。动作a的产生,就是靠一个$\color{red}{策略\pi}$。有了$\pi$,他会告诉你,你当前在这个状态s,会选择哪个动作a,或者以多大概率选择动作a。</p>
<p>是的,总结一下,$P^a_{s->s’}$,$R^a_{s->s’}$,但是某个状态S的时候,应该采取哪个action:a,是由$a=\pi(S)$,也就是策略决定的。</p>
<p>$\color{blue}{画外音}$</p>
<p>咱强化学习,学啥啊?就是学这个策略$\pi$啊!!!你还可以把这事用个数学公式表达出来,你丫学的就$a=\pi(s)$,这个太粗暴,啥给个s就得到了个a啊,你可以温柔一点,写成 $\pi(a|s)$,这就变成了概率分布了,是s给定下的选择某个a的概率分布。恩,这个函数,或者这个概率分布,就是<strong>你学出来的$\pi$啊,这就是我们强化学习的终极目标啊</strong>。</p>
<h2 id="收益g_t">收益($G_t$)</h2>
<p>从某一个状态$S_t$开始采样直到终止状态时所有奖励的有衰减的之和:</p>
<p>$G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} … = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}$</p>
<p>恩,注意,$\color{red}{这个值是收敛的}$,这狠重要噢。一般来说,这个序列有完蛋的时候,所以这个数是个收敛的数,可是如果这个序列无限量呢?那么用个$\gamma$,就可以让他还是可以收敛的了。另外,这里还隐含了一个概念,是说,在t时刻,这家伙处于$S_t$状态呢。</p>
<p>$\color{blue}{画外音}$</p>
<p>干嘛攒出来这个收益,还要他收敛呢?是为了衡量咱们的策略$\pi$啊。你想啊,你总的有个量化指标来衡量你的策略牛逼么?为毛就比我的牛逼啊。那好,咱俩都用各自的策略,是骡子是马,来出来溜溜。出来比了,那总的拿个东西衡量吧,这个衡量,就靠这玩意$G_t$,到最后(终止状态),谁收益高,谁的策略$\pi$就牛逼呗。那个$\gamma$是为了让这个值收敛。</p>
<p>BUT,不过,但是,你注意到了么,他的视角不是游戏开头到游戏结束,他是基于某个状态的。我靠,你可能奇怪了,为毛呢?你干嘛从一个状态开始测算收益呢?恩,问的好!是因为,你丫在决策过程中的时候,你玩到半截了,你不是上帝视角,你深陷游戏当中,当局者正迷呢,“兄弟!求你就告诉我,我选a1好,还是选a2,还是选…”,好,我告诉你:你就选择,a之后,从a的那个状态开始,到最后的受益最大的那个a吧。冥冥之中,你就听到我的这个点拨,你就可以毅然决然地选择某个a,杀出重围,继续前行。其实,哪有什么冥冥,这个冥冥就是策略$\pi$啊,“理科男!信概率,别信命!”</p>
<p>不过,你注意到了么?这个是一次的得分噢,你玩吧,玩到哏屁,你的得分。你说“哥们,你这也太武断了把,我就玩一次,你分比我高,就说你的策略比我好,不服!”,对,你说的对,所以,咱们得取个期望,好!引出下面的“价值”,走着,继续看….</p>
<h2 id="价值value">价值(Value)</h2>
<p>对,上面胡喷的时候,有个细节你可能疏漏了。那个收益,只是从某个s开始到哏屁(死了)的一次收益,不行,太随机,所以,要!期!望!</p>
<p>恩,来了</p>
<p>$v(s)= E[G_t|S_t = s]$</p>
<p>马尔科夫奖励过程中状态收获$G_t$的期望,$G_t$是某个时刻在特定的$S_t$开始,往后一嘟噜决策的收益,对吧?那这玩意随机性很强啊,下次再从这个状态出发,收益可不一定一样啊,肯定是千奇百怪啊,怎么办?取期望啊!所以,就引来了$v(s)$,价值。</p>
<p>$\color{blue}{画外音}$</p>
<p>你玩吧,从某个状态s开始哈,玩到死,我给你算个分。然后,你再玩,再玩到死,又得一个分。然后你就不停的玩。玩出期望来。这个期望的分,就是你这个s的$v(s)$。玩无穷次,我靠,这不就是蒙特卡洛采样么?</p>
<p>注意,这个value用于是属于某个s的,来衡量你这个s牛逼不牛逼的。你说了,衡量s牛逼干嘛用呢?兄弟,你知道某个s牛逼了,你选动作a的时候,是不是应该挑选那个大招a’,让他奔着牛逼的s去啊。</p>
<h2 id="价值函数value-function">价值函数(Value Function)</h2>
<p>你说了,这个价值怎么算啊?你别告诉我用期望,一想到期望我就头大,得知道概率,得采样,balabala…,不玩了,我玩游戏去了,再见……</p>
<p>回来,兄弟,我有妙招,我给你个函数,你把s传进去,噗呲,这个value就出来了,妙不?</p>
<p>对,这个就是价值函数:</p>
<p>如果存在一个函数,给定一个状态能得到该状态对应的价值,那么该函数就被称为价值函数(value function)。价值函数建立了从状态到价值的映射。</p>
<p>啥意思呢?就是你告诉我一个状态$s$,然后我就告诉你这个期望值$v(s)$,这不就是一个函数么。恩,对,这个函数就是大名鼎鼎的价值函数。</p>
<p>如果状态s是离散的,可数的,你整一个表,来表示这个价值函数就可以。如果丫是连续的,无数个状态s,你咋整?就得用个函数了,甚至用个神经网络来表示了,呵呵,对吧,这里先不细讲,你体会到这个意思就成。</p>
<p>你又该说了,“哥们,你丫别一个劲地忽悠我,你说如果存在一个函数…,这个函数到底到底是啥?”</p>
<p>来,推导一下:</p>
\[\begin{align}
& v(s)=E(G_t|S_t=s) \tag{1}\\
& =E(R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} ... |S_t=s) \\
& =E(R_{t+1} + \gamma ( R_{t+2} + \gamma R_{t+3} ...) |S_t=s) \\
& =E(R_{t+1} + \gamma G_{t+1} |S_t=s) \\
& =E(R_{t+1} + \gamma v(s_{t+1}) |S_t=s) \\
\end{align}\]
<p>来看看最后这个结论:</p>
<p>$ v(s) = E(R_{t+1} + \gamma * v(s_{t+1}) |S_t=s) $</p>
<p>这个式子,说的是,你评估$v(s)$,需要你知道你的下一个可能的迁移过去的$s_{t+1}$的$v(s_{t+1})$,乘以衰减因子$\gamma$,然后再加上系统给你的一个你调到下一个状态时候给的奖励$R_{t+1}$,算出一个期望,才是你s的价值:$v(s)$。</p>
<p>看晕了把,讲人话,就是说,你想评估你当前这个s的价值,得需要你后续的那些$s_{t+1}$的v值们,然后一通骚操作的求个期望,才能评估出来。</p>
<p><img src="/images/20190113/1547369463952.png" alt="" class="myimg25" /></p>
<p>注意哈,这里有个细节,就是你评估当前状态的价值value,得用未来s的价值value,哈哈,对,就是这么变态,你问了,当前的值,我都不知道,未来的值我就更不知道了,你这不是逗我玩呢么?!对,我就是逗你玩呢,哈哈。好,不逗你你了,我想你保证,这事是可以干的,一会儿你就知道。</p>
<p>价值函数忒重要了,咱们啊,再换个角度看价值函数</p>
<h3 id="换个角度">换个角度</h3>
<p>(其实,不是为了换个啥角度,只是因为,我之前写了一大坨,不舍得删,所以,再让你“换个角度”,再看一遍。哈哈。不过,应该是有点用的,耐心,patient!)</p>
<h4 id="轨迹τ">轨迹(τ)</h4>
<p>这马尔可夫决策过程,可以类比打游戏。就是给定一个策略 $\pi(a|s)$,玩一个$\color{red}{轨迹(trajectory)}$,轨迹$τ$也就是你从当前状态开始玩,一直到你哏屁,这个过程叫$τ$,</p>
<p>$τ = s_0,a_0,s_1,r_1,a_1,··· ,s_{t−1},a_{t−1},s_t ,r_t$,我们来算算这个$τ$的概率:</p>
<h4 id="轨迹概率pτ">轨迹概率($p(τ)$)</h4>
\[p(τ) = p(s_0, a_0, s_1, a_1, · · · ) \\
= p(s_0) \prod_{t=0}^{T-1} \pi(a_t\|s_t) p(s_{t+1}\|s_t,a_t)\]
<p>最后一部分,$p(s_{t+1}|s_t,a_t)$,其实就是 $\color{red}{游戏本身}$ 呀,你仔细想想,对不对,就是你当前在$s_t$,然后你做了一个action:$a_t$,然后这个概率怎么跳,是你这个agent无法控制的呀。</p>
<h4 id="收益g_t-1">收益($G_t$)</h4>
<p>恩,在聊一遍$G_t$,跟之前的,上一节讲的,是一个东西。</p>
<p>对于一个$\tau$,也就是一个游戏从头到尾的一个回合来说,这个总的成绩回报是:</p>
<p>对于有限回合和无限回合两种:</p>
<p><img src="/images/20190114/1547442125883.png" alt="" width="140px" />
<img src="/images/20190114/1547442153378.png" alt="" width="100px" /></p>
<p>$\gamma$是折现因子,在[0,1]之间</p>
<p>我们上面知道了轨迹(从某状态到哏屁)概率,知道了收益(某状态开始到死的累计收敛收益),我们想干啥?我们该干啥了?</p>
<p>我们当然是想让这个总和回$G(\tau)$的期望最大啊:</p>
<p><img src="/images/20190114/1547442385121.png" alt="" width="250px" /></p>
<p>可是,为何说要求期望最大呢?因为不同的$\tau$这个值是变动的,你这么这么打,下次那么打,所以,用概率来求平均,就变成了期望。</p>
<h1 id="基于模型model-based的策略求解">基于模型[Model based]的策略求解</h1>
<h2 id="上帝视角">上帝视角</h2>
<p><a href="https://edu.csdn.net/course/play/10684">金山-高杨</a>老师讲的时候,讲到一个上帝视角,挺有启发性的。</p>
<p>看这张图,是游戏的决策,是一个树形结构,这里是极度简化了,这张图就是假设游戏从S1出发就2步游戏就结束。恩,你是上帝,你知道所有的游戏分支,那就好办了,你评估S1的得分问题,就变成了一个树搜索问题了:</p>
<p><img src="/images/20190114/1547442779016.png" alt="" class="myimg" /></p>
<p>本质上,算一个$G(\tau)$是一个树搜索问题,算$V(s1)$,就是算s1的时候,最多得分是s1a1s3a1这条路。</p>
<p>这个是插曲哈,是为了让你理解状态的层次的感觉,这段你可以去听高杨老师的讲座,很赞,很快就能帮助理解强化学习的本质。</p>
<h2 id="贝尔曼方程">贝尔曼方程</h2>
<p>好,开始说说贝尔曼方程了,</p>
<p>前面我们不是说了么,$v(s)$的计算:$ v(s) = E(R_{t+1} + \gamma * v(s_{t+1}) |S_t=s) $</p>
<p>好,我们把这个期望按照期望公式展开,即$\sum x*p(x)$:</p>
<p>$v(s) = R_s + \gamma * \sum\limits_{s’\in S} P_{ss’} * v(s’) $</p>
<p>恩,这玩意就是贝尔曼方程,看上去不好理解,其实就是个递归方程,要算的$V(S)$其实是对树往下的总得分的一个期望,他没法遍历树,就把$V(S)$表示成它的下一级S’的$V(S’)$的$\Sigma$求和。</p>
<p>它提示一个状态的价值 由该状态的奖励以及后续状态价值按概率分布求和按一定的衰减比例联合组成。</p>
<p>牢记:他是用来算一个状态价值的。是一个递归方式定义的。</p>
<p>$\color{blue}{看个例子}$</p>
<p>我给你,跳到某个状态的得分,就是R;再给你转移的概率,就是每条线上的那个概率值;你来算算圈里的值,也就是$v(s)$。</p>
<p><img src="/images/20190113/1547369316296.png" alt="" class="myimg" /></p>
<p>这玩意可以看成是一个方程,求解出来$v(s)$,可惜,这玩意求解计算复杂度很高(我也不知道为何?参见叶强的《强化学习》$p_10$页探讨这个问题),那咋办?没事,后续会讲别的办法来求解。</p>
<p>你现在可能有点晕,你朦胧着觉得,$v(s)$就是某个状态的好坏,可以算,用递归方式啥的,可是,你可能很想知道,到底这个值函数能干啥,好,我们来深入探讨一下他都能帮我们干啥:</p>
<h2 id="状态价值函数vs行为价值函数-q_pisa">状态价值函数$v(s)$、行为价值函数 $q_\pi(s,a)$</h2>
<p>前面咱们讨论了价值函数了,这里再深入讨论他,并且,还要引入一个新的函数行为价值函数,Q函数。</p>
<p>状态价值函数$v(s)$,他其实只描述了一个状态牛逼否,他没有提及动作,可是,我们就是想知道,在某个状态s,我采取某个动作a1,我还可以采取另外一个动作a2,要是能评估从这个s,选哪个动作,可以让我一直玩到哏屁,得分的期望高呢?这个时候,就引入一个新的概念,叫$\color{red}{行为价值函数,q_\pi(s,a)}$。</p>
<p>$q_\pi(s,a) = E(G_t | S_t = s, A_t = a)$</p>
<p>按照贝尔曼方程展开,</p>
<p>$q_\pi(s,a) = E(R_{t+1} + \gamma q_\pi(S_{t+1},A_{t+1}) | S_t = s, A_t = a)$</p>
<p>再展开,</p>
<p>$q_\pi(s,a) = R_{t+1} + \gamma \sum \limits_{s’\in S} P^a_{ss’} v_\pi(s’)$</p>
<p><img src="/images/20190421/1555850829715.png" alt="" class="myimg25" /></p>
<p>是按照期望展开,就是把所有可能采取的动作action,都按照概率p和对应过去的状态s’的价值,sum到一起,恩,就是期望的公式。对,仔细看,后面是$v(s’)$,$q(s,a)$就是“把后续的可能的$v(s’)$期望到了一起”!</p>
<p>看上图,看出来了吧,就一半。也就是$v(s)$由$q(s,a1)$和$q(s,a1)$组成,当然不是简单相加,而且按照概率求期望,所以,这就引出了$q(s,a1)$和$v(s)$的关系:</p>
<p>$v_\pi(s) = \sum \limits_{a\in A} \pi(a|s) q_\pi(s,a)$</p>
<p>然后,我把$q_\pi(s,a)$用上面的式子,带入,得到:</p>
<p>$v_\pi(s) = \sum \limits_{a\in A} \pi(a|s) \left( R_s^a + \gamma \sum\limits_{s’\in S} P^a_{ss’} v_\pi(s’) \right)$</p>
<p>同样的推导,$v(s)$带入到$q_\pi(s,a)$中,得到更详细的$q_\pi(s,a)$:</p>
<p>$q_\pi(s,a) = R_s^a + \gamma \sum \limits_{s\in S} P^a_{ss’} \sum\limits_{a’\in A} \pi(a’|s’) q_\pi(s’,a’)$</p>
<p>这一通骚操作,都晕了吧,没事,你感兴趣推导,就自己去看叶欣的《强化学习》$p_{12} - p_{13}$去,其实,这一通操作,就是想表达,价值函数和动作函数之间的是$\sum$期望的关系,你捋顺他们的关系,就容易懂了。</p>
<h2 id="值函数vs行为函数qsa的作用">值函数$v(s)$、行为函数$q(s,a)$的作用</h2>
<p>前面说了一堆,回顾一下,啥贝尔曼方程,啥状态价值,啥行为价值。贝尔曼方程,揭示了,当前状态的价值,可以由后续的状态价值递归退出来;从而进一步推导出来,状态价值可以由后续的状态价值求出,也可以由后续的所有的行为价值求出;同理,行为价值又由后续的行为价值求出,也可以由后续的所有的状态价值求出。</p>
<p>恩,然后呢,然后这些关系我搞清楚,我要用学到的这些本事干啥?</p>
<p>求策略啊!!!你丫千万别忘了,我们终极目标,是要找到一个牛逼的策略$\pi$啊。有了$\pi$,我们才可以$a=\pi(s)$,或者由联合概率$\pi(a|s)$,找到最好的动作action。是滴!行为action,不是石头缝是蹦出来的,而是$\pi$生出来的。</p>
<p>好来,来说说,如何用值函数$v(s)$来评估一个策略牛逼否?</p>
<p>即使假设状态空间 S 和动作空间 A 都是<strong>离散</strong>且<strong>有限</strong>,我们还有个帮助我们决定用哪个动作action的策略$\pi$,策略空间也为$|A|^{|S|}$,可能会很大。策略$\pi$在这种离散情况下,其实就是一个映射表,从某个s->a。所以策略空间是一个排列组合的关系。(别忘了,是离散+有限情况下)</p>
<p>值函数可以看作是$\color{red}{对策略π的评估}$。如果在状态s,有一个动作a使得$Q_π(s,a) > V_π(s)$,说明执行动作a比当前的策略$π(a|s)$要好,我们就可以调整参数使得策略 $π(a|s)$ 的$\color{red}{概率增加}$。</p>
<p>如果我一调整我的策略,让我某状态的状态价值函数$v(s)$变大了,那我就应该坚定不移的调整我的策略,让其达到最优。然后我让所有的状态,每个人,都达到他(状态)的最大状态价值,这时候,我一通骚操作后的策略,就是最优策略了啊!!!</p>
<h2 id="最优状态价值函数最优行为价值函数">最优状态价值函数、最优行为价值函数</h2>
<blockquote>
<p>解决强化学习问题意味着要寻找一个最优的策略让个体在与环境交互过程中获得始终比其 它策略都要多的收获,这个最优策略用 $\pi_<em>$表示。一旦找到这个最优策略$\pi_</em>$,那么就意味着该强 化学习问题得到了解决。寻找最优策略是一件比较困难的事情,但是可以通过比较两个不同策略 的优劣来确定一个较好的策略。</p>
</blockquote>
<p>所以,引出了“最优状态价值函数、最优行为价值函数”概念:</p>
<p>定义:<strong>最优状态价值函数[optimal value function]</strong>是所有策略下产生的众多状态价值函数 中的最大者:</p>
<p>$v_*(s) = \max\limits_\pi v_\pi(s)$</p>
<hr />
<p><em>我理解:就是对某一个状态$s$,他在某个这策略$\pi$下,$v(s)$都比别的策略$\p$最大。</em></p>
<p>定义:<strong>最优行为价值函数[optimal action-value function]</strong>是所有策略下产生的众多行为价 值函数中的最大者:</p>
<p>$q_*(s,a) = \max\limits_\pi q_\pi(s,a)$</p>
<p><em>我理解:还是对某一个给定状态$s$,恰好某个策略$\pi$使得,正在特定的动作$a$上得到的$q(s,a)$最大</em></p>
<hr />
<p>定义:<strong>策略$\pi$ 优于</strong> $\pi’(\pi\ge\pi’)$,如果对于有限状态集里的任意一个状态s,不等式:$v_{\pi(s)}\ge v_{\pi’}(s)$ 成立。注意!是在$\color{red}{每个状态S}$上,好策略比旧策略的价值函数值$\color{red}都$大!</p>
<p><em>我理解:啥叫我(策略$\pi$)比你$(\pi’)$好,是我对每个状态的$v_\pi(s)$,都比你给出的$v_\pi’(s)$大</em></p>
<hr />
<p>有个结论:(据说不好证明,只要知道结论就成了)</p>
<blockquote>
<p>对于任何马尔科夫决策过程,存在一个最优策略 $\pi_*$优于或至少不差于所有其它策略。一个马尔科夫决策过程可能存在不止一个最优策略,但最优策略下的状态价值函数均等同于最优状态价值函数:$v^\pi_* (s) = v_*(s)$;最优策略下的行为价值函数均等同于最优行为价值函数$q^\pi_* (s,a) = q_*(s,a)$。</p>
</blockquote>
<p>这话听着好绕口,说的是啥呢?</p>
<p>说的是,可能有多个最优策略,恩,可能有。但是,这些最优策略,最后施加到我们的游戏中,使得最后的每个s的最大状态价值$v_*(s)$,他们都是一样的。也就是$v_{\pi 1}(s)=v_{\pi 2}(s)=v_*(s)$</p>
<p>那,这话有啥用呢?</p>
<p>有用,有大用!就是你找到的最大的$v_*$的时候,那个时刻,对应的就是$v^\pi_*$,就能找到最好的$\pi$了呀。(*表示最大)
而$\pi$实际上是对应的$\color{red}{每一个s}$呀,每一个s的$V(s)$都是最大,而,每一个$V(s)$又应该是这个s下对应的所有的action:a,里面最好的那一个。 那么, 你每次只要去找每个状态s下,最好的那个action:a。每个s下都找到了最优的a,那整个最优策略$\pi$不就相当于找到么!大概就是这么一个思路。这叫啥?值迭代?</p>
<p>我靠,这句话太重要了<strong>$\color{red}{最优策略下的行为价值函数均等同于最优行为价值函数q^\pi_* (s,a) = q_*(s,a)}$</strong></p>
<p>这句话说完了,你丫应该敏锐的意识到,我要是能得到一个所有的最优行为价值函数,也就是每个s和a的$q_*(s,a)$,注意哈,这个最优行为价值函数$q_*(s,a)$是没有策略$\pi$啥事的,它是指所有的$\pi$中最大的$q(s,a)$值。然后,然后,来了哈,你就在某个s的时候,就选这个s对应$q_*(s,a)$的那个a,也就是$argmax q(s,a)$的那个a(为何?靠,这个就是$q_*(s,a)$的定义啊),你选这样的a。<strong>再重复一遍</strong>,你看到某个s,就选丫$q_*(s,a)$对应的a,对,换一个s,你再这么选a,对,如此这般,这尼玛就是一个策略$\pi$呀。而且这个策略就是最优策略$\pi_*$啊。</p>
<p>总结一下,前提是你有了所有的最优行为价值函数,然后看每个状态s,这个s对应的所有的他可能的a,都会有$q(s,a)$,每个$q(s,a)$都会找到一个$q_*(s,a)$,然你$(s)$看一下,那个a对应的$q_*(s,a)$最大,那么这个s,就对应选这个a,每个s都这么干一遍,得到的就是最优策略。这个就是最优策略获得方法。</p>
<p>再絮叨一下,这里的$q_(s,a)$求了2次最大,一次是先找到$q_*(s,a)$,第二次是确定策略a的时候,又被用了一次,找到最大的$q_*(s,a)$对应的a。</p>
<p>那,如何用数学表达这个最优策略$\pi_*$呢?</p>
\[\pi_*(a\|s) =
\left\{
\begin{align} \label{最优策略确定方法}
1 & \text{ 如果 } \arg\max\limits_{a \in A} q_\*(s,a) \\
0 & \text{ 其他情况}
\end{align}
\right.\]
<p>成嘞!</p>
<p>所以,找最优策略$\pi_*$这事,就变成了求解最优行为价值函数$q_*(s,a)$的问题了。</p>
<p>好,我们继续,那我们,如何求出最优行为价值函数$q_*(s,a)$呢?</p>
<p>我们先回顾一下贝尔曼方程:</p>
<p>$v_\pi(s) = \sum\limits_{a\in A} \pi(a|s) q_\pi(s,a)$</p>
<p>ok,那我把最优策略$\pi_*$,带入到这个方程中,得到贝尔曼最优方程(原来就是把最优策略$\pi_*$带入进去就得到了啊,我之前还发愁怎么推导贝尔曼最优方程呢)</p>
<p>$v_\pi^*(s) = \sum\limits_{a\in A} \pi^*(a|s) q_\pi^*(s,a)$</p>
<p>$q_\pi^*(s,a) = R_s^a + \gamma \sum\limits_{s\in S} P^a_{ss’} v_*(s’)$</p>
<p>由于,我们采用上述说的那个方法选择出最优策略的,所以,只有$q_*(s,a)$最大的那个a的概率是1,其他的都是0,所以上述式子就变成了:</p>
<p>$v_\pi^*(s) = \max\limits_a q_\pi^*(s,a)$ ===> 注意哈:这个前提是采用了上面的最优策略确定方法才可以推出</p>
<p>然后,就可以继续推导出:</p>
<p>$v_*(s) = \max \limits_a ( R_s^a + \gamma \sum\limits_{s\in S} P^a_{ss’} v_*(s’))$</p>
<p>$q_*(s,a) = R_s^a + \gamma \sum\limits_{s\in S} P^a_{ss’} \max\limits_{a’} q_*(s’,a’)$</p>
<blockquote>
<p>某状态的最优价值等同于该状态下所有的行为价值中最大者,某一行为的最优行 为价值可以由该行为可能进入的所有后续状态的最优状态价值来计算得到。</p>
</blockquote>
<blockquote>
<p>贝尔曼最优方程不是线性方程,无法直接求解,通常采用迭代法来求解,具体有价值迭代、 策略迭代、Q 学习、Sarsa 学习等多种迭代方法,后续几章将陆续介绍。</p>
</blockquote>
<p>对,我们就是要求 <strong>最优行为价值函数$q_*(s,a)$</strong> , 这是我们的目标,后续就会用各种方法来求它。</p>
<h2 id="策略迭代">策略迭代</h2>
<p>从任意一个状态价值函数开始,依据给定的策略,结合贝尔曼期望方程、状态转移概率和奖励同步迭代更新状态价值函数,直至其收敛,得到该策略下最 终的状态价值函数。理解该算法的关键在于在一个迭代周期内如何更新每一个状态的价值。</p>
<p>依据新的策略 $\pi’$会得到一个新的价值函数,并产生新的贪婪策略,如此重复循环迭代将最 终得到最优价值函数 $v_∗$ 和最优策略 $\pi_*$。</p>
<p>从一个初始策略$\pi$和初始价值函数$v(s)$开始,基于该策略进行完整的价值评估过程得到一个新的价值函数,随后依据新的价值函数得到新的贪心策略,随后计算新的贪婪策略下的价值函数,整个过程反复进行,在这个循环过程中$\color{red}{策略和价值函数均得到迭代更新}$,并最终收敛值最有价值函数和最优策略。除初始策略外,迭代中的策略均是依据价值函数的贪婪策略。</p>
<h3 id="例子">例子</h3>
<p>下图是一个叫Small Gridworld的例子,左上角和右下角是终点,$\gamma$=1,移动一步reward减少1,起始的random policy是朝每个能走的方向概率相同,先单独看左边一列,它表示在第k次迭代每个state上value function的值,这一列始终采用了random policy,这里的value function就是通过Bellman Expectation Equation得到的。而右边一列就是在当前的value function情况下通过greedy算法找到当前朝哪个方向走更好。</p>
<p><img src="/images/20190115/1547529398323.png" alt="" class="myimg" /></p>
<p>策略评估就是计算任意策略的状态值函数$V_π$,也就是对当前策略下计算出每个状态下的状态值,这就是策略预估,我们也把它称为预测问题。他的计算方式参考之前我们提到过得状态值函数。</p>
<p>$V_\pi(s) = E_\pi[G_t|S_t=s]$</p>
<p>$V_\pi(s) = E_\pi[R_{t+1}+\gamma G_{t+1}|S_t=s]$</p>
<p>$V_\pi(s) = E_\pi[R_{t+1}+\gamma V(S_{t+1})|S_t=s]$</p>
<p>$V_\pi(s) = \sum_a\pi(a|s)\sum_{s’}P(s’|s,a)(R(s,a,s′)+γV_\pi(s′))$</p>
<p>因为是策略迭代所以此处的π(a|s)即为在 s 状态下选取 a 动作的可能,所以策略迭代的公式应该为</p>
<p>$V_{k+1}(s) = \sum_a\pi(a|s)\sum_{s’,r}P(s’,r|s,a)(r+γV_k(s′))$</p>
<p>$\color{blue}{算一算v([1,1]),k=1}$</p>
<p>看这个,k=2,s=[1,2],就是那个“-1”是咋来的?</p>
<p><img src="/images/20190422/1555912941337.png" alt="" class="myimg30" /></p>
<p>参考这个公式:</p>
<p>$V_{k+1}(s) = \sum_a\pi(a|s)\sum_{s’,r}P(s’,r|s,a)(r+\gamma V_k(s′))$</p>
<p>在我们这个例子里,pi(a|s)是1/4=0.25,也就是往每个方向都是0.25的概率。P(s’,r|s,a)始终是1,因为我们这个例子中,一旦s,a给定了,他100%会跳到对应的状态上去;另外,$\gamma=1$。所以上式简化成:</p>
<p>$V_{k+1}(s) = \sum_a 0.25 (r+ V_k(s′))$</p>
<p>好,用这个式子,我们算k=1的[1,2]的$v(s)$把:</p>
<blockquote>
<p>每当个体采取了一个行为后,只要这个行为是 个体在非终止状态时执行的,不管个体随后到达哪一个状态,环境都将给予个体值为 −1 的奖励 值;</p>
</blockquote>
<p><em>无论是终态是不是终点,都给reward为-1,我之前以为,如果下一步是那2个终点就给奖励0呢,所以怎么算都算不对。</em></p>
<p>$v[1,1]= 0.25(-1+0) + 0.25(-1+0) + 0.25(-1+0) + 0.25(-1+0) = -1$</p>
<p>$\color{blue}{再算一算状态v([1,1]), k=2}$</p>
<p>k2=2时刻,第一行第二列的1.7怎么来的呢?</p>
<p>他的下个状态分别是坐标<1,1>,<1,3>,<2,2>,三个位置:</p>
<p><img src="/images/20190424/1556084195663.png" alt="" class="myimg30" /></p>
<p>还是参考这个公式:$V_{k+1}(s) = \sum_a 0.25 (r+ V_k(s′))$</p>
<p>$v[1,1]= 0.25(-1+0) + 0.25(-1-1) + 0.25(-1-1) + 0.25(-1-1) = -1.75$</p>
<p>好,我们会算$v(s)$了,我们接下来要干嘛,改进策略啊!</p>
<blockquote>
<p>个体处在任何一个状态 时,将比较所有后续可能的状态的价值,从中选择一个最大价值的状态,再选择能到达这一状态 的行为;</p>
</blockquote>
<p>对,就是,你都知道你旁边的4个或者3个的状态的价值了,你就选大的那个啊,“人往高处走,水往低处流”嘛~</p>
<p>这个例子很多都讲:</p>
<ul>
<li>叶强的《强化学习》$p_{33} ~ p_{34}$</li>
<li><a href="https://blog.csdn.net/trillion_power/article/details/78934608">强化学习(reinforcement learning)学习笔记(二)——值迭代与策略迭代</a></li>
<li><a href="https://blog.csdn.net/qq_30615903/article/details/80762758">【强化学习】值迭代与策略迭代</a></li>
</ul>
<p>$\color{red}{策略迭代算法}$ - 引自周志华老师的《西瓜书》和一个博客</p>
<p><img src="/images/20190424/1556085303727.png" alt="" class="myimg40" />
<img src="/images/20190424/1556088389313.png" alt="" class="myimg40" /></p>
<p>俩算法一样的,都列出来,没啥区别,对比着看。</p>
<p>几个细节要说明:</p>
<ul>
<li>算法分两部分,一个是评估,一个是迭代</li>
<li>评估的停止条件是收敛,周志华老师那个条件是$V=V’$,另外一个的终止条件是$\Delta<\theta$,其实意思都是收敛。所以,叶强的《强化学习》的第3.2节用k=2的图来说明策略改进是非常让人误导的,应该是这个$v(s)$所有的值收敛后,才可以做策略迭代。具体是多少,我也不知道,k=?的时候。</li>
<li>一旦基于当前这个策略$\pi$,你一遍遍的迭代着算,$v(s)$(注意,是对每个状态s)都稳定了,你才从这个稳定的转改值里面,用贪心策略,为每一个s,找一个最优的动作。</li>
<li>啥叫“最优”,又得用贝尔曼方程算一遍,就是里面说的$\pi’(s)=argmax_{a\in A} Q(s,a)$,就是算一下每个动作的$Q(s,a)$值,最大的那个,就是我要的动作a。</li>
<li>那如果有多个a的$Q(s,a)$值都一样,我理解,就都留着,只不过,每个人的概率均等,也就是$p(a|s)$为1/|备选a|。</li>
</ul>
<blockquote>
<p>当给定一个策略 $\pi$时,可以得到基于该策略的价值函数$v_\pi$,基于产生的价值函数可以得到一个贪婪策略$\pi′ = greedy(v_\pi$)。依据新的策略$\pi′$会得到一个新的价值函数,并产生新的贪婪策略,如此重复循环迭代将最 终得到最优价值函数 $v_∗$ 和最优策略 $\pi_*$。策略在循环迭代中得到更新改善的过程称为策略迭代$(policy iteration)$。</p>
</blockquote>
<p><strong>为什么会收敛,参考资料叶强的《 强化学习入门——从原理到实践》p36给出证明</strong></p>
<h2 id="价值迭代">价值迭代</h2>
<p>如果一个 策略不能在当前状态下产生一个最优行为,或者这个策略在针对当前状态的后续状态时不能产生一个最优行为,那么这个策略就不是最优策略。与价值函数对应起来,可以这样描述最优化原则:一个策略能够获得某状态s的最优价值当且仅当该策略也同时获得状态s所有可能的后续状态s′的最优价值。</p>
<p>Q-learning和策略迭代区别?</p>
<p>Q-learning是</p>
<h1 id="没有模型model-free情况下的策略学习">没有模型[Model Free]情况下的策略学习</h1>
<p>啥叫没有模型?模型是啥?</p>
<blockquote>
<p>模型就是你知道状态转移概率$P_{s->s’}$,以及跳到新状态环境给出的rewards(就是知道给分的规则,你丫从这个s,跳到那个s,会的多少分,或者按照啥概率给你多少分)。
那么有模型,就是你根本不知道这些,游戏对你来说,就是个黑盒子,你只能靠自己去误打误撞去体验。</p>
</blockquote>
<blockquote>
<p>环境已知和模型已知,不是一个概念吧?
答:错,两者就是一回事。参见叶强的RL p49页model-free的定义。环境已知就是status转移概率和reward已知。</p>
</blockquote>
<p>还记得,我们是要干啥来的么?对!我们是要寻找一个打游戏的最优策略,为了找到这个最优策略,我们就通过定义$G_t$,也就是从一个状态开始的累计rewards,从而进而计算$E(G_t)$,也就是算出$V(s)$呀。现在,我们没有上帝视角,我们就没法动态规划,我们就没法用策略迭代、价值迭代来求解了?怎么办?</p>
<p>有个办法,你采样!你就从一堆的玩的游戏记录里面,找到你感兴趣的那个状态s,然后,看从这个s开始,又玩了很多步,然后嗝屁的$\tau$,然后大量的找到这样的从s开始到嗝屁的,这个多了,平均一下,不就成了期望了么。有了期望,你的$v(s)$不就有了么,然后就可以继续啦。</p>
<h2 id="蒙特卡洛方法">蒙特卡洛方法</h2>
<p>再回想,不间断的回想,我们要干啥来着?我们要寻求一个策略,一个最优策略。为此,我们攥出来一个状态的价值函数$v(S)$,这玩意是一个期望值,玩到游戏哏屁的时候,你的累计reward $G_t$的期望$v(s) = E(G_t0)$。回忆起来了吧。之前,咱们有模型的时候,您呀可以通过状态转移概率、每步系统给你的Rewards规则,你可以通过动态规划啥的方法,来得到每个状态的$v(s)$,现在呢?玩了个菜,你两眼一抹黑,你在这个状态,周边都是黑压压,就跟dota里面,周边都是黑乎乎的未探索的境地,你不知道你动动鼠标会跳到啥状态,也不知道系统怎么给你分。这个时候咋办?</p>
<p>从一个状态$s_0$,我们就是要算$v(s_0)$,咋算?</p>
<p>那就采样呗,啥叫采样?就是你玩呗,玩无数局,每一局你都玩到哏屁,然后记下来每一局的得分,然后你取平均值,大数定律告诉我们,当你趋向于无穷次的时候,这个得分会趋向于他的期望值。</p>
<p>对,就是这么暴力,你说了,我玩不到无数局,没事,尽量多玩把,而且,我们还会修正的。</p>
<blockquote>
<p>蒙特卡罗强化学习有如下特点:不依赖状态转移概率,直接从经历过的完整的状态序列中学习,使用的思想就是用平均收获值代替价值。理论上完整的状态序列越多,结果越准确</p>
</blockquote>
<p>你玩的过程,每一局,我们叫他一个<strong>完整的状态序列 (complete episode)</strong>,有些书里用罗马字母$\tau$表示:
$s_1,a_1,r_2,s_2,a_2,r_3,….s_t,a_t,r_{t+1} —- \pi$</p>
<p>数学上再来表示一遍:</p>
<p>$G_t=r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + … + \gamma^{T-1}r_T$</p>
<p>$v(s)=E(G_t)$</p>
<p>注意哈,我们都是在一个策略$\pi$下讨论这事呢,别忘了,对,都是在算一个$\pi$下的价值函数,还没顾上找牛逼策略呢。</p>
<p>在大量暴力采样求平均值的过程中,我们有个计算方法:<strong>累计更新平均值(increase mean)</strong>:</p>
\[\begin{align}
&\mu_k = \frac{1}{k} \sum_{j=1}^k x_j \\
& = \frac{1}{k} (x_k + \sum_{j=1}^{k-1} x_j) \\
& = \frac{1}{k} (x_k + (k-1) \mu_{k-1}) \\
& = \mu_{k-1} + \frac{1}{k}(x_k - \mu_{k-1}) \\
\end{align}\]
<p>这个式子,看上去是炫技巧,其实很重要,因为后续的很多方法都跟这个式子有关。再仔细看看这个式子:</p>
<ul>
<li>新的均值(你也可以理解成为期望值),等于上一次迭代的均值,加上一个,新的值和上一次均值的差的1/k</li>
<li>注意,我们要求的就是均值,这个式子相当于不断的在修正这个均值,依据就是新的得到探索的值$x_k$,换句话,也就是说,你的每一次探索$x_k$,都是在帮你在修正均值。</li>
</ul>
<p>类比到我们的这个游戏强化学习的场景:</p>
\[\begin{align}
&v(s_t) = v(s_t) + \frac{1}{N(s_t)} (G_t - v(s_t)) \\
& = v(s_t) + \alpha (G_t - v(s_t)) \\
\end{align}\]
<p>$\alpha = \frac{1}{N(s_t)}$,这个是假设$N(s_t)$,这个$\alpha$就被认为是一个很小很小的常数了,我不知道,这么搞合理不,不过貌似都这么假设。</p>
<p>恩,这个就是蒙特卡洛,有了所有的状态的价值啦,可是,如何做策略的改进呢?答案是,改不了!靠!对!蒙特卡洛只是用来做价值评估的,不是用来做策略改进的,牢记。</p>
<p>好啦,蒙特卡洛我们搞清楚了,我们继续变态的前进,接下来,我们继续通过变态的,恩,其实也不算变态啦,也都是初中生都可以理解的推导,可以得到一个新的方法,就是“<strong>时序差分TD</strong>”</p>
<h2 id="时序差分强化学习">时序差分强化学习</h2>
<p>时序差分强化学习 (temporal-di erence reinforcement learning, TD 学习)</p>
<p>来,我们来推导一下:</p>
\[\begin{align}
& v(s_t) = v(s_t) + \alpha (G_t - v(s_t)) \\
& = v(s_t) + \alpha (r_{t+1} + v(s_{t+1}) - v(s_t)) \\
\end{align}\]
<p>看第二步,其实是我们假设了$G_t = r_{t+1} + v(s_{t+1})$,您说了,能这么假设么?说实话,我也不知道,后来查了一下Sutton的书$P_130 公式(6.3)$,里面有段这个,我觉得大概可以解释:</p>
\[\begin{align}
& v_\pi(s) = E_\pi( G_t \| S_t = s) \\
& = E_\pi[ \sum_{k=0}^\infty \gamma^k R_{t+k+1} \| S_t = s] \\
& = E_\pi[ R_{t+1} + \gamma \sum_{k=0}^\infty \gamma^k R_{t+k+2} \| S_t = s] \\
& = E_\pi[ R_{t+1} + \gamma v_\pi(S_{t+1}) \| S_t = s] \\
\end{align}\]
<p>看,这个式子可以看出,在计算$v(s)$,也就是$E_\pi(G_t|S_t=s)$的时候,$G_t$可以看做是$R_{t+1} + \gamma v_\pi(S_{t+1})$</p>
<p>所以,最终,我们得到了TD的公式:</p>
<p><strong>\(\color{blue}{V(S_t) \leftarrow V(S_t) + \alpha (R_{t+1} + \gamma V(S_{t+1}) - V(S_t))}\)</strong></p>
<p>说明一下这个式子:</p>
<ul>
<li>比蒙特卡洛方法好多了,那个是把整个$\tau$跑完一遍,得到一个$G_t$,然后再平均,去算某个状态的$v(s)$</li>
<li>而我TD可以每步得个分,就可以修正$v(s)$,对,是修正,不是平均,递归修正</li>
<li></li>
</ul>
<h2 id="不基于模型的策略改进">不基于模型的策略改进</h2>
<blockquote>
<p>个体在与环境进行交互时,其实际
交互的行为需要基于一个策略产生。在评估一个状态或行为的价值时,也需要基于一个策略,因
为不同的策略下同一个状态或状态行为对的价值是不同的。我们把用来指导个体产生与环境进
行实际交互行为的策略称为行为策略,把用来评价状态或行为价值的策略或者待优化的策略称
为目标策略。如果个体在学习过程中优化的策略与自己的行为策略是同一个策略时,这种学习方
式称为现时策略学习(on-policy learning),如果个体在学习过程中优化的策略与自己的行为策略
是不同的策略时,这种学习方式称为借鉴策略学习(off-policy learning)。
模型未知的、基于采样的蒙特卡洛或时序差分学习进行控制是解决中等规模问题的方法。
具体包括:不完全贪婪搜索策略、现时蒙特卡洛控制,现时时序差分学习、属于借鉴学习算法的Q 学习等。</p>
</blockquote>
<p>在基于模型的时候,我们可以通过贪心策略去寻找不断可以改进的策略:</p>
\[\pi'(s)= \arg\max\limits_{a\in A}(R_s^a + P^a_{ss'}V(s'))\]
<p>是的!回忆一下,就是$argmax Q(s,a)$,找到对应的a,这样的策略去改进。可是现在,不基于模型(model free)的情况下,我们没有状态迁移概率了啊,$P^a_{ss’}$母鸡啊。</p>
<p>那,咱们对这种不基于模型(model free),改进一下改进策略的方法吧:</p>
\[\pi(a\|s) =
\left\{
\begin{aligned}
& \frac{\epsilon}{m} + 1 - \epsilon & 如果 a^*= \arg\max\limits_{a\in A} Q(s,a) \\
& \frac{\epsilon}{m} & 其他情况\\
\end{aligned}
\right.\]
<h2 id="参考资料">参考资料</h2>
<h4 id="一些概念">一些概念</h4>
<p>概念实在是太多了,列出来:</p>
<ul>
<li>策略迭代(Policy Iteration)</li>
<li>值迭代 (Value Iteration)</li>
<li>策略梯度(Policy Gradient)</li>
<li>基于模型(Model based)</li>
<li>模型无关(Model free)</li>
<li>探索与开发(Exploreation-Exploitation)</li>
<li>马尔可夫过程(Markov Process):具备马尔科夫性质的序列$p(s_{t+1}|s_t, … , s_0) = p(s_{t+1}|s_t)$</li>
<li>马尔科夫决策过程(MDP - Markov Decision Process):在马尔可夫过程中 加入一个额外的变量:动作 a,$p(s_{t+1}|s_t, a_t, · · · , s_0, a_0) = p(s_{t+1}|s_t, a_t)$</li>
<li>确定性策略(Deterministic Policy):就是张确定的s->a的确定表,当前s,做了某个a,去哪个s’</li>
<li>随机性策略(Stochastic Policy):是个概率,s->a->s’,这个s’不是确定的,是个归一化概率</li>
<li>轨迹(Trajectory)</li>
<li>值函数(Value Function)</li>
<li>状态值函数(V(s)) - V函数</li>
<li>状态-动作值函数(Q(s,a))- Q函数</li>
<li>动态规划算法</li>
<li>策略评估(policy evaluation)</li>
<li>策略改进(policy improvement)</li>
<li>蒙特卡罗方法</li>
<li>同策略(on policy)</li>
<li>异策略(off policy)</li>
<li>时序差分学习(temporal-difference learning) - TD</li>
<li>贝尔曼方程</li>
<li>贝尔曼最优方程</li>
<li>ε-贪心法</li>
<li>SARSA算法(State Action Reward State Action,SARSA)</li>
<li>Q学习(Q-Learning)算法</li>
<li>深度Q网络(deep Q-networks,DQN)</li>
<li>经验回放(experience replay)</li>
<li>目标网络冻结(freezing target networks)</li>
<li>策略梯度(policy gradient)</li>
<li>REINFORCE算法</li>
<li>带基准线的 REINFORCE 算法</li>
<li>Actor-Critic 算法</li>
<li>A2C算法(Advantage Actor-Critic,A2C)</li>
<li>A3C算法(Asynchronous Advantage Actor-Critic,A3C)</li>
</ul>
<h4 id="书系列">书系列</h4>
<ul>
<li><a href="http://incompleteideas.net/book/RLbook2018trimmed.pdf">Sutton老先生的RL 2nd</a>,是RL&DRL的泰斗了, David Silver都是他的学生。经典之作,即时是e文的,也得啃啊。</li>
<li>周志华老师的西瓜书的第16章:p371 - 强化学习,无链接,买书去哈,这个正版必须支持。</li>
<li><a href="https://nndl.github.io/chap-%E6%B7%B1%E5%BA%A6%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0.pdf">邱锡鹏老师的DRL小书-邱老师是FudanNLP作者</a></li>
<li><a href="https://arxiv.org/abs/1810.06339">Li Yuxi的一篇综述</a></li>
<li><a href="https://pan.baidu.com/s/14Jxp3AGPJFgoFkHa4gXgxA#list/path=%2F">知乎网友 叶强自己总结的《 强化学习入门——从原理到实践》</a>,194页自己的学习笔记,良心之作</li>
</ul>
<h4 id="视频资料">视频资料</h4>
<ul>
<li>B站<a href="https://www.bilibili.com/video/av16974313?t=469&p=6">国防科技大的沈华伟老师</a>讲《高级人工智能》,就是RL,讲的太好了,遗憾的是第四课木有声音。还有他的<a href="https://www.bilibili.com/video/av38541121/">2018年10月份的版本</a></li>
<li>李宏毅老师讲的<a href="https://www.bilibili.com/video/av24667855?t=1524&p=3">2018深度增强学习</a>,一如既往的逗逼,不过有点散,可能是上传的人没传全的缘故</li>
<li><a href="https://www.bilibili.com/video/av19649554/?p=5">七月在线的两位老师的课</a>,中规中矩,该讲的都讲了,可以听下去</li>
<li><a href="https://www.youtube.com/watch?v=iOh7QUZGyiU&list=PLqYmG7hTraZDNJre23vqCGIVpfZ_K2RZs">DeepMind亲自出品的教程</a>,等听力过关了要去听一遍。</li>
<li><a href="https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ">DRL大神 David Silver的培训</a>,还是听力不过关,否则,直接跟着大牛学,多爽啊</li>
<li><a href="https://www.bilibili.com/video/av14768722?t=871">港科大博士生李思毅:深度强化学习</a>,这讲座假设你已经了解了,帮你串讲一遍的感觉</li>
<li><a href="https://www.bilibili.com/video/av16921335/?p=31">莫烦的DRL</a>,大家都知道莫老师的系列,初期看,还是很有帮助的</li>
<li><a href="https://www.wanmen.org/courses/593e086f206e46163b6dd5c8">万门大学的人工智能、大数据与复杂系统一月特训班</a>,里面有专门的DRL章节,当然要付费,不过某宝上可以找到,你懂得</li>
<li><a href="http://campus.swarma.org/catalog=37">集智学园的系列课程</a>,集智上的张江老师讲的DRL,还有史雪松、高飞讲的,估计都是张江老师的学生,反正一堆,可以慢慢看</li>
<li><a href="https://edu.csdn.net/course/play/10684">金山-高杨</a>,讲的挺好的,1小时,很浓缩</li>
</ul>
<h5 id="别人提供的资源">别人提供的资源</h5>
<p>这些都是别人提供的一些DRL的各类资源汇总:</p>
<ul>
<li><a href="https://medium.com/@yuxili/resources-for-deep-reinforcement-learning-a5fdf2dc730f">Resources for Deep Reinforcement Learning</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/20885568">Deep Reinforcement Learning 深度增强学习资源</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/25965585">深度增强学习(Deep Reinforcement Learning)资源</a></li>
<li><a href="https://blog.csdn.net/songrotek/article/details/50572935">
Deep Reinforcement Learning 深度增强学习资源</a></li>
<li><a href="https://blog.csdn.net/hai008007/article/details/80274530">Deep Reinforcement Learning 深度增强学习资源</a></li>
<li><a href="https://www.zhihu.com/question/277325426/answer/411907338">强化学习怎么入门好?</a></li>
</ul>
混沌大学课程推荐列表
2019-01-07T00:00:00+08:00
https://www.piginzoo.com/education/2019/01/07/hundun
<h4 id="推荐语">推荐语</h4>
<p>如果说,樊登读书会是中产阶级的安慰剂、营养餐和高级心灵鸡汤的话,那混沌大学的东西应该算是有点营养的营养品了,当然,要想真的丰富自己,还要沉下心来去系统化的学习和沉淀,这些东西,
都只会给你打开一扇窗户而已。</p>
<p>不过,有时候,有人给你打开一扇窗,也是不容易的一件事儿。</p>
<h4 id="推荐列表">推荐列表</h4>
<p>把我看过的,觉得有意义的混沌课程说一说,以饲朋友们高效快速地get到自己需要的课程,节省大家的时间。</p>
<p>我推荐的只有两个标准:推荐指数 ☆☆☆ 和 ☆☆☆☆☆,就是还凑活和不错,就不设其他标准了,省的你糊涂。其他我没有推荐的,要么是我没看,要么是我看了觉得没啥意义。至于我没看的,大部分都是我看标题或者看人,就提不起兴趣的。(大部分视频我是看过的)当然也不排除我漏掉或者比较新的,留待您自己去探索吧。</p>
<ul>
<li>
<p>寻找跨越经济周期的系统性机会 李丰</p>
<p>这个很不错,讲出了经济规律性的东西,之前都没听说过李丰,他讲的虽然是站在投资的角度,但是对之前几次经济危机的回顾,和中国的应对,以及各种政策在历史上的身影,都有借鉴意义。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>情绪沟通——改变看法与自我认知 黄执中</p>
<p>奇葩大会的选手,虽然看过这节目,但是也印象不深,但是看了这节课,对他印象深刻,如何解读情绪中的奥秘,掌控自我情绪等,讲的很不错,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>创业反思-成为更加优秀的自己 李建</p>
<p>讲的还可以,主要还是探讨第一性原理的,讲的还算通俗,而且结合自身的例子。推荐指数 ☆☆☆</p>
</li>
<li>
<p>创新思维:重塑你的思维,从这里开始 采铜</p>
<p>讲的一般吧,但是我喜欢这种讲思维逻辑的课,所以也推荐给你。推荐指数 ☆☆☆</p>
</li>
<li>
<p>领导力原则 俞敏洪</p>
<p>老俞的课还是讲的很有趣的,可以听出一些采来。推荐指数 ☆☆☆</p>
</li>
<li>
<p>可复制的领导力 樊登</p>
<p>樊登还是挺能讲的,听听无妨。推荐指数 ☆☆☆</p>
</li>
<li>
<p>模式创新:商业的本质的嬗变-从帝国到流沙 王强</p>
<p>王强我很喜欢,文艺创业者,哈哈。其实讲的啥我也记不住了,爱屋及乌,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>产品哲学:用第一性原理思考产品 黄晓杰</p>
<p>我就是听他讲的第一性原理,知道这个词的,讲的很不错,印象深刻,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>认知升级之第一性原理 李善友</p>
<p>善友老师的大课,当然推荐了。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>人生的十字路口,我爱憎分明 张颖</p>
<p>经纬还是很令人尊敬的投资机构,大佬的分享,很真诚,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>创新产品的灵感和方法论 王信文</p>
<p>王信文还是我很喜欢的一个创业者,讲话平和,但是透着理科男的理性和智慧,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>东西方文化溯源与东西方哲学 王东岳</p>
<p>此人算是李善友老师的老师,第一次听确实醍醐灌顶之感,不过还是那句话,领你入门,修行在己,推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>做一款好产品的六字法则 周鸿祎</p>
<p>红衣主教的课,还是值得听一下的。推荐指数 ☆☆☆</p>
</li>
<li>
<p>颠覆式创新 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>认知革命 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>批判性思维 李善友</p>
<p>善友老师的大课,一如既往推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>产品经理的必修课 梁宁</p>
<p>说实话我真的忘了我听过这门课,但是最近听梁宁产品30讲,被征服,所以推荐她。推荐指数 ☆☆☆</p>
</li>
<li>
<p>第一性原理与创业 张首晟</p>
<p>这个真心没听过,但是一个是冲着第一性原理,另外一个是冲着对死去张老师悼念,推荐一下,我也会找时间去听的,推荐指数 ☆☆☆</p>
</li>
<li>
<p>硅谷科技与中国应用结合的积木式创新 王昱全</p>
<p>王昱全老师是我特别喜欢的一个,很符合我这种理科男的口味,人也很赞,推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>大数据的道、术、势 王昱全</p>
<p>作为王昱全的死粉,继续无条件推荐。推荐指数 ☆☆☆☆☆</p>
</li>
<li>
<p>搜狗输入法的前世今生 王小川</p>
<p>小川是清华学霸,无论讲啥都值得听一下,他好像在混沌还有一门讲进化、复杂的,找不到了,你们遇到了,也一并听一下。推荐指数 ☆☆☆</p>
</li>
<li>
<p>人机大战 王小川</p>
<p>上面刚说完,就翻腾出来。推荐指数 ☆☆☆</p>
</li>
</ul>
<p>另外,混沌除了研习社的这些课之外,还有创新院,商学院,不像研习社的一般在1-2个小时左右,那些课的特点是是系列化,一般都比较长,分为1-2天的时长。但是,里面的课也相当不错,感兴趣的可以看一下,我其实看的也不多。</p>
<p>虽然这些内容都是给创业者看的,但是对一般人而言,也是很有帮助的。毕竟这些人的维度是远超我们的,抱着一颗谦虚的心态,去听一下他们对生活、商业、人生的一些感悟和总结,是很有裨益的。即便有些内容可能他们会刻意隐瞒,甚至歪曲,但是大部分时候,你是有机会一窥这些人的内心世界和精神状态、世界观和价值观的,这对于很少有机会听到这些内容的朋友来说,非常有帮助。</p>
<p>还是那句话,这些都只是帮你打开一扇门,真正的走进去,探索新奇的世界,还是要靠你自己,不断地学习和探索。</p>
<p>Stay hungry, Stay foolish!</p>
文本分类
2019-01-02T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2019/01/02/text_classify
<h2 id="背景">背景</h2>
<p>工作中要做一个某项业务的备注描述信息的文本分类,试图通过这个文本找到对应的分类。
分类大概有10来种,由于没人给打标注,我只好自己写了一个正则来搞定。
然后觉得,可以尝试用短文本分类再搞一遍,看看,是否可以提高泛化能力。</p>
<p>尝试几种方法:</p>
<h2 id="第一种方法-第三方词向量朴素贝叶斯">第一种方法 第三方词向量+朴素贝叶斯</h2>
<p>用别人的词向量,<a href="https://github.com/Embedding/Chinese-Word-Vectors">https://github.com/Embedding/Chinese-Word-Vectors</a>。</p>
<p>我的都是短文本,处理的时候也没啥特殊的,首先每句话,都分词,去掉乱七八糟的东西,然后得到每个词的词向量,<code>wordVector = w2v[word]</code>, 每个样本都是一个长度不等的词向量数组。长度不等,那怎么办训练啊?</p>
<p>截断和补pad。</p>
<p>截断是找一个平均长度,用</p>
<pre><code>cat result.csv|awk '{print NF}'|sort|uniq -c|sort
</code></pre>
<p>然后发现,最长的29个字,数量最多的3个字10333个,最少的1个29个字的,字数比较少的,一般都在1000+,长句的都是几百,大致这样一个分布。我拍脑袋给了一个15,作为长度的超参。</p>
<p>加载词向量的时候,出现了这个提示,我估计是词向量里面有重复的,不管了。。。</p>
<pre><code>2018-12-29 16:58:07,014 : WARNING : duplicate word '..................................................................................................' in word2vec/sgns.financial.word, ignoring all but first
2018-12-29 16:59:22,847 : INFO : duplicate words detected, shrinking matrix size from 467370 to 467322
2018-12-29 16:59:22,847 : INFO : loaded (467322, 300) matrix from word2vec/sgns.financial.word
</code></pre>
<p>然后试了一下,朴素贝叶斯,得用高斯朴素贝叶斯,为何?</p>
<pre><code>当特征是连续变量的时候,运用多项式模型就会导致很多$P\(xi\|yk\)=0$(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。
</code></pre>
<p>原因就是没法算某个属性的概率值,但是用了高斯,就可以先把这列的值做一个高斯模拟,比如身高这列,变成一个高斯分布,就可以算任一点的概率值了。</p>
<p>然后,我尝试了5.7万的result.csv,正确率下来了,72%。诡异哈。</p>
<pre><code>加工语料:耗时52.473868秒
2018-12-29 18:28:45,114 : INFO : 高斯朴素贝叶斯分类器(正确率): 0.720000%
2018-12-29 18:28:45,122 : INFO : 高斯朴素贝叶斯模型已经保存!
训练:耗时22.911388秒
2018-12-29 18:28:45,224 : ERROR : 一共有22388个词没有在word2vec表中找到!
</code></pre>
<p>对了,词表长度是467322,46万个,2.2万,大概于是5%不到的词找不到,那怎么办?忽略呗。</p>
<h2 id="第二种方法-自己训练的词向量朴素贝叶斯">第二种方法 自己训练的词向量+朴素贝叶斯</h2>
知识图谱
2018-12-25T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/25/knowlege_graph
<p><code>自己的一些零星的关于知识图谱的笔记,比较散,放到网上,备忘用。</code></p>
<h4 id="小象学院---王昊奋老师的知识图谱笔记">小象学院 - 王昊奋老师的《知识图谱》笔记</h4>
<p>第一课</p>
<pre><code>Palantir:神秘独角兽,提出了动态本体建模方式
Kensho:金融口的一个著名的知识图谱
自然语言理解系统:SHRDLU - 的作者Terry Winograd搞的一个比赛:
Winogard schema challenge:一个比SODUA专业的理解比赛:
纯NLP:50%,NLP+KB:60%+,及格线要达到90%,真人才满意。
图匹配,
NP hard
memex,
推理补全,
cyc:50w terms,700w Assertion
conceptNet: 三元组
先用pattern,直接抽取,抽取后在作为已知样本,再去学习,发现新的patterns,这种叫bootstrap方法。
描述逻辑:基于一阶查询重写的方案、产生式规则的算法、Datalog转化
</code></pre>
<p>第二课 知识表示和建模</p>
<pre><code>OWL:在RDFS基础上,支持复杂概念描述,和属性约束
OWL的词汇是否可以用来描述付钱拉业务?
医疗的用OWL EL,适合做概念多,实例少的场景
答:据我所知,没有用OWL来做工业知识图谱,基本都是RDF(s)+规则来完成实际的需求的。
不过在国外医学领域,会有OWL构建的本体,也是很轻量级的OWL语言。例如SNOMED-CT
通过本体推理,可以改写SparkQL,
通过规则来改写 SparkQL
问:像schema层的构建,那些上下位关系,,有自动化构建的方法么? 或者说节省人工成本的方法
答:schema层的上下位关系构建,有半自动的方法。全自动精度太差了,论文灌水可能还行。
答:规则可以看出是if then语法。规律看起来简单,不过当你管理上千条规则的时候,就不是一件容易的事情了。另外还要保证其推理的高效性。
SPARQL可以做跨知识库查询,而且很简单,参考老师的新药的查询。
PlantData是胡芳槐博士研发的知识图谱的平台,做得还是比较早的。文因互联重点在金融领域,领头人鲍捷确实很厉害,博后导师就是在MIT跟着Tim Berners-Lee做研究的。
Neo4j property graph
JoyJedi钟敬德21:48:09
schema层半自动化的构建方法,,老师有文章推荐么
直播答疑老师21:52:59
图谱构建的话,yago和BabelNet可以了解一下。不过可能对你行业需求用处不大。垂直领域,现在主要还是人工构建schema的方法居多。
问题:
业界的,不如明略的知识库用的是titan,他的难点在哪里?
问句映射成sparkql有啥好方法?
直播答疑老师20:24:55
知识图谱里用"属性"或者"关系"这样的术语比较多,"特征"这个术语在机器学习中用得较多,它们本质上没有区别。
对于一个团队来说:需要有人熟悉本体或者知识图谱的表示形式,这里表示形式不仅仅指的是三元组,而且抽象层面对概念与属性的刻画能力,即图谱的Schema。需要有人掌握图的存储,至少要掌握一门图数据库或者能有效存储三元组的关系型数据库例如neo4j或者AllegroGraph。对于数据是非结构化或者半结构化的情况,还需要有熟悉NLP技术的工程师对数据进行处理,抽取出结构化的数据,甚至需要对多个图谱进行融合。最后,基于图谱的推理,需要有人熟练掌握开源的规则推理工具例如Drools或者Jena。《知识图谱》这门课程都会对上述知识点以及相关的应用进行讲解,并附有一定的实践作业来帮助大家来理解,希望大家能够学以致用。实践出真知!
生成问题模板
DSM,孪生网络
LTP,依存分析,耗时大,online避免使用,
主要还是靠词向量,句法分析在线用的不多,离线才会用用。
neo4j的property graph
Datahub
</code></pre>
<p>第三课 知识抽取</p>
<pre><code>htlm5,macromark,
抽取什么:三元组,事件和时序信息
从现有知识库中通过图映射里面提到的“数据对齐”是什么概念?
从半结构化转知识,需要包装器,我理解就是一个爬虫和解析程序。
从文本抽取,难点在准确率和覆盖率?这两个概念需要进一步理解。。。
非结构化抽取一般都在特定领域,开放领域太难了
一般抽取分为几个子任务:
- 命名识别,实体检测,识别的时候就会涉及到分类,比如库克是一个人物,
- 术语抽取,从预料中获得相关术语
- 关系抽取,二元关系,实际上就是三元组,比如 王建林---<父子关系>---王思聪
事件抽取:
一般有个触发词,事件关系是个多元关系,事件的属性,有个特殊的词,叫slot,说白了就是事件的各种属性。???问题:这个slot是事先人为给定的么?
还有长句中,还要指代消解,比如前面提到特朗普,后面的他,就是指特朗普
美国有一对竞赛、组织来规定知识抽取都包含那些子任务:
MUC竞赛和数据集;ACE竞赛;KBP任务标准;SemEval;
MUC比较老了,ACE有5个任务,比MUC多
NER - 命名实体识别
CR - 共指消解
(以下是ACE的任务)
数值检测和识别
时间表达检测和识别
关系检测和识别
事件检测和识别
(以下是TAC的KBP任务)
实体发现和链接(链接就是要把实体链接到存在的知识库里的概念URI/ID)
槽填取 - 这个其实就是事件的各种属性的填充
信念和情感
老师说了一下他的知识抽取的任务分类,其实和米国这些人规定的差不多:
人名、组织机构、地理位置、时间日期、字符值、金额值
问题???就这些么?这个知识范畴是自动扩充么?
要找的话,老师说可以使用机器学习的序列标注,就是通过学习的方法,来可以区别出来哪个词是要抽取的内容,我的理解。用HMM、CRF、LSTM+CRF等机器学习方法,来生成lable序列,序列就是组织呀还是地点还是上面提到的属性,老师提到了IOB,IO标注体系。
实体链接,就是连接到知识库去,比如连接到schema.org上的rdf:type,确定概念后,还要去某个音乐KG中找到对应的这个歌曲的实例。
http://www.opencalais.com/opencalais-demo/ 这个可以直观感受一个商业实体识别的效果,calais是一个商业的实体识别的服务,被路透买了。其他的老师说的开源的都不怎么样。
关系抽取:
基于触发词的模板来抽取,这种只是词法分析。
基于依存的句法分析,分析出来动宾,主谓啥的,这样的模式可以识别出非连续的词之间的关系。往往以动词为起始点。
事件识别
都是使用各类分类或者深度学习的方法,使用pipeline方法 ,也就是分解成触发词识别->元素分类器->属性分类等一步步深化识别。深度学习提到了一个叫“动态多池化CNN”的方法。
-------------------------
关系数据库到知识库的映射,w3c有个标准叫r2rml,(relation to rdf)
表映射成类,列映射成属性,每行可以对应一个实体URL,外键映射成关联。
有个软件ontop,可以帮助把数据库映射成rdf,实际上他叫virtual rdf,也就是依存关系,这样一个sparql查询,就会通过这个映射,直接映射成SQL。
-------------------------
半结构化数据抽取,
对于百科类,一般都会有一个infobox(信息框),然后可以直接和百科类定义好的实体概念进行自动匹配关联上,直接拿过来用。
zhishi.org就是一个应用,他从百度百科、维基百科(中文)和互动百科上,抽取来的。
------------------------
纯网页的信息抽取,这个其实和爬虫中使用xpath来抽取,或者css选择器。
这xpath也可以通过机器学习和标注数据,
讲了一下webtable抽取,类似于数据库的抽取。
时间抽取,有意思,看看有啥好的实现么?
Schema.org 上有更多分类,700+,比一般的NER类别多多了。
AllegroGraph,RDF4J等可以使用 - RDF数据库
https://www.w3.org/wiki/LargeTripleStores
实体消岐 一般用graph mining的算法 比如pagerank等 这里推荐一篇中科院韩先培老师论文 可以看一下 Collective Entity Linking in Web Text:A Graph-Based Method
关于英文知识扩充中文知识 可以去看一下清华大学XLORE的工作http://www.xlore.org/
http://www.doc88.com/p-3714999282595.html ;一种准确高效的领域知识图谱构建方法 杨玉基 之前答疑老师给的这篇文章感觉不错
远程监督:
JoyJedi钟敬德21:42:30
上周看过一篇文章,就是结合GAN和远程监督做关系抽取,文章倒是说准确率蛮高的,还没时间复现试试
ontop工具
apache Tidy工具
</code></pre>
<p>第四课 知识抽取 2</p>
<pre><code>KBC,知识系统构建,
从一句话,抽取出mention,然后到entity的对应过程叫做entity linking
deepdive就是这样的一个KBC,构建工具,完成了很多牛逼的工作:文本预处理、统计推理和学习、特征抽取等等。
ddlog文件是deepdive的主要文件,里面有一种类dblog的语言来表达,
deepdive只关心关系的抽取,对于mention抽取,他依赖于斯坦福的nlp工具来做的实体的抽取,
斯坦福的nlp工具可以帮助抽取,ORG,Person,Location等等9种。
----------------------------------
用deepdive来抽取,整个过程分几步:
1. 先导入先验数据?为何呢?这个可是先验知识,就是已经明确了的关系啊,怎么用,下一步,留作问题?
2.把文章导入,对他进行分词,词性POS,词法分析,实体识别NER,把它分析完后的导入到postsql中,得到的实际上是一堆字符串。
3.抽取mention,mention的概念,我理解就是把实体更明确成mention的概念,就是对应的要分析的这个需求里明确的实体
4.候选实体“对”生成,其实就是找到一句话里出现的两个公司,为下一步做准备
5.下一步,就是抽关系了,输入就是刚才2-4中已经抽取的句子分析结果和实体对,输出就是特征
ddlib.span===》feature;用机器学习或者深度,来学出各种特征,比如前后的词的序列,这块其实没有完全理解,是找到哪个词是关系词么?是个位置确认的过程?
(老师说,是靠Distant supervision:远监督。弱监督也称为远监督,数据集的标签是不可靠的(这里的不可靠可以是标记不正确,多种标记,标记不充分,局部标记等),针对监督信息不完整或不明确对象的学习问题统称为弱监督学习。)
6. 样本打标,就是用之前1中的正确的打标的数据,来训练,不过我理解是训练判断是否是关系,2分类问题,并给每个类一个置信度,大白话就是“看看俩实体是否有关系”,不过这玩意是可训练的么?其实,我理解是不关心关系到底是什么,而是关系,他们俩(实体)间是否有关系。
就是确定/标注的数据+文章里的数据,一起训练,感觉远程监督就是这么一种训练。具体还是不明白。
7.因子图构建,查了,是概率图的一种模型,用于推导是否存在这样是不是一个交易
(哦,我理解错了,这个例子中,是判断是否有交易关系,也就是说,关系不需要确认是什么,已经确认了,就是“交易”)
为什么有用到gibbs采样了,晕了,这块完全没听懂。
------------------------
deepdive的实验
------------------------
做实验过程中:
* ddlog用的语言是datalog:http://blog.csdn.net/tao_sun/article/details/17610591
* 脚本中装postgersql不靠谱,我下了安装包直接装到mac上
db.url加上用户名:postgresql://postgres:chuang@localhost:5432/transaction
* sbt是一个scala的build工具,文档中的sbt/sbt其实是sbt目录下的sbt,就是这个工具
* 下一步去抽取mention,其实很简单,就是上一步的NER结果:ner_tags,从中找那么类型是ORG实体对应的字符串:
mention_text = "".join(map(lambda i: tokens[i], xrange(begin_index, end_index + 1)))
* 总是报“IOError: [Errno 2] No such file or directory: 'company_full_short.csv'”
怀疑是路径错误,不知道为何找不到,试了半天,最后没办法,直接放到他的运行目录里了解决的
CNdeepdive/transaction/run/process/ext_company_mention_by_map_company_mention/
后面才看到这句话“(PS:此处如果报路路径错误,请将transform.py中company_full_short.csv的相对路路径改为绝对路路径。)”,唉,坑啊,想哭。
* “实体抽取及候选实体对⽣生成”,这步才是对应出一行里的实体对,一对,有了这对,再判断这对是否有交易关系,别忘了我们想做啥,我们想找哪些机构之间有交易关系(关系是确定的,要牢记,这个是领域抽取和开放IE抽取的区别,老师专门强调过)
* 下一步是,抽象这些实体在文中的上下文feature,这个应该是比较复杂的,对我来说我完全是黑盒,大概是学出实体词前后左右的各种feature,是一个窗口的概念,这些feature可以为后续的判例做准备
* 下一步是,开始学习了,学习啥啊,就是是不是两方有交易:我们有两部分数据,一部分是第一步就搞来的国泰安的数据,相当于已经给了标签的样例数据;还有一部分是我们上上步找出来的transcation_candidate数据,就是我们自己剥离出来的一个个的实体对,而且都是ORG,我们认为他们之间可能是有关系的了
function supervise over函数是为了先根据一些明显标志打出一些样本来,我理解就是我们先过一圈,用规则的方法,筛出那些容易识别的正例。
这样,我们的数据就变成了3份,1份是国泰安的正例数据,1份是我通过规则可以确认的数据,1份是我们完全无法判断关系的数据
* 再往下,完全进入迷惑状态了,我!感觉是把这些数据变成一种变量,然后交给因子图去推测,因子图是一种概率图模型,我还是第一次听说这种算法,看这个例子,用因子图就可以完成关系推断了,faint
终于做完试验了,总结一下:
- 几个核心步骤是:用斯坦福工具抽取实体,抽取实体对在文章的上下相关features,最终使用因子图模型学出关系
- 还是模棱两可在理解上,但是收获是知道了整个关系抽取过程,斯坦福的工具如何使用,deepdive的大概工作流程,以及ddlog语言有了感性认识
- 未来如果
因子图,
查询实体引用表,这个方法是
--------------------------------------
传统领域IE,关系是确定的,但是开放IE,关系都不确定,需要你去查找,在上下文中去确认这个关系。
第一代OpenIE,textrunner,依赖句法,第二代,reverb、ollie,clauseie等,更细化从句、动词短语更细复杂颗粒度处理。
---------------------------------------
知识挖掘:
</code></pre>
<p>第七课</p>
<pre><code>RDFox现在还维护的不错,KNOA2基本上不维护了,但是都是同一个作者
推荐这个,是个半商用的,还开源的
ABox,关系抽取,都属于
TBox,人工建立的,
tbox的人工建立很难完备和可满足,所以是先根据领域知识借助推理机建立完备的Tbox,然后再用关系抽取的方法从大规模数据中抽取Abox,对吗
>推理机无法构建,可以用来做tbox
人工建立一个TBOx,基于这个Tbox来抽取,从上到下,
还有一种,bottom-up方式,自下而上,来构建abox,然后通过挖掘,来提取tbox。
如何保证tbox人工构建的质量?
需要专家,是否能满足需求。一定是需求驱动的,tbox的构建。
其实老师课件里的例子是零散简单的,那么对于实际工程,没有专家造一个好的Abox,光从大量数据中抽取那么大的Abox,那么这样利用率会很低吧
>从数据库直接转,或者,从百科来导入
Tbox一般不大,abox可能会很大,
我理解tbox就是owl的概念层,比如openkg的CNSCHEMA,有公司用它做bot呢
RDFOx老师再次推荐,
前向推理,一步步地来的,推理完的结果,可以存到数据库里,然后可以查询了就,
但是,这样推出的可能会很多条,另外,可能会有些变了abox,
解决办法,就是“查询重写”,属于后向推理,数据是不变的,
Ontop,就是干这个用的,
产生式规则,是一种前向推理,
working memory,就是abox的集合,
产生式规则,又叫production memory,PM
RDF4j,之前打算商用的额,但是后来做呲了
我22:19:26
感觉一个jena就够了,又有本体存储,又有推理
xzxsungd045122:19:51
这些推理方法 那种最有优势呢?
我22:19:55
打算不用别的了,就只用jena做我们的项目了,呵呵
>老师说,没错,可以,但是大规模数据还差点意思,没事,我数据不大
从百科的关系图谱中连接到新闻中的实体,再去做关系抽取,
用百科的实体库,省去了实体识别了,来做关系抽取。
天鹅pxf22:25:15
那关系是从哪里来呢
>关系是自己定义的!你自己标注,然后训练,或者用模板。
规则是不隐式蕴含在Tbox中的,所以才显示指定,对吗,是不是说专家既要定义Tbox又要定义推理规则,然后推理机根据“”Tbox + 规则 +土里算法“”推出来Abox中没有显示定义的东西
>OWL中的规则是schema层就定义出来了,他之间的关系其实就是规则了,
>当然你还可以再增加额外的rule规则
owl的规则推理是一套,和rete那种的规则引擎如drools的推理是不一样的,2种不太一样。
商业场景,推荐rdffox,既带owl推理,又带rule推理。
infobox还是能得到一些概念的。
问答一般得让人可信,所以都有有schema,无schema的。
</code></pre>
<p>王昊奋老师的课的笔记(某人写的),很不错=><a href="http://pelhans.com/tags/#Knowledge%20Graph">传输门</a></p>
<h4 id="jena实践中的坑">Jena实践中的坑</h4>
<p><a href="https://db-engines.com/en/system/Jena%3BVirtuoso
https://github.com/memect/kg-beijing/wiki/%E7%AC%AC%E4%B8%80%E6%9C%9Fw3%EF%BC%9A%E7%9F%A5%E8%AF%86%E5%AD%98%E5%82%A8">看了一个jena和virtuoso的对比</a>
不推荐用Virtuoso, Sesame,Jena这些。都是上一代的老产品,复杂不好用。</p>
<p>妈蛋的,每次停止fuseki-server后,再启动就报错:
按照这个说的,删除了prefix,但是在web里访问,数据还是出不来啊!!!崩溃啊。
<a href="https://zhuanlan.zhihu.com/p/33224431">https://zhuanlan.zhihu.com/p/33224431</a>
看了一些帖子,发现,不靠谱,果断放弃。没工夫在这上面耽误工夫。
<a href="https://github.com/memect/kg-beijing/wiki/%E7%AC%AC%E4%B8%80%E6%9C%9Fw3%EF%BC%9A%E7%9F%A5%E8%AF%86%E5%AD%98%E5%82%A8">https://github.com/memect/kg-beijing/wiki/%E7%AC%AC%E4%B8%80%E6%9C%9Fw3%EF%BC%9A%E7%9F%A5%E8%AF%86%E5%AD%98%E5%82%A8</a>
这篇帖子里面提到,我个人最喜欢的是OrientDB,我认为完美达到我需要的知识图谱数据库的基本功能要求</p>
<ul>
<li>1)用类SQL查询语法,降低学习成本</li>
<li>2)直接读写JSON,方便和Web API导入导出</li>
<li>3)支持图的遍历和gremlin查询</li>
<li>4) 支持blueprints标准</li>
<li>5)部署简单</li>
<li>6)还在积极维护</li>
</ul>
<p>一个栗子:</p>
<pre><code>PREFIX fql:<http://www.yixin.com/fuqianla>
SELECT ?mobile
WHERE {
fql:张三 fql:拥有电话 ?mobile.
}
查通话大于20分钟的人
PREFIX fql: <http://www.yixin.com/fuqianla#>
SELECT ?target_person ?call_length
WHERE {
fql:张三 fql:拥有电话 ?mobile.
?mobile fql:通话记录 ?call.
?call fql:通话记录 ?target_mobile.
?target_person fql:拥有电话 ?target_mobile.
?call fql:通话时长 ?call_length.
OPTIONAL{
Filter(?call_length > 10)
}
}
出不来,感觉是因为, ?target_person fql:拥有电话 ?target_mobile. 这种被查询出来的字段在前面是不行的,
除非是 ?target_person fql:拥有电话 ?target_mobile.
不对!
用事实证明了我的猜想是错的:
PREFIX fql: <http://www.yixin.com/fuqianla#>
SELECT ?person ?call_length
WHERE {
?person fql:拥有电话 ?mobile.
?mobile fql:通话记录 ?call.
?call fql:通话时长 ?call_length.
Filter(?call_length > 10)
}
</code></pre>
<h4 id="neo4j实践">Neo4j实践</h4>
<p>请教个问题,电话A———通话——— 电话B,</p>
<p>电话A\B是实体,通话是关系,现在想表达通话时长,就是想在关系“通话”上加一个时长,这种怎么用owl表达呢?哪位有这方面经验,不吝赐教。
貌似可以通过n-ary关系表达,<a href="https://www.w3.org/2001/sw/BestPractices/OEP/n-aryRelations-20040623/">https://www.w3.org/2001/sw/BestPractices/OEP/n-aryRelations-20040623/</a> ,不过总是觉得别扭,比如 电话(实体)——-拨打(关系)——通话记录(实体)——–拨打(关系)——-电话(实体),然后再建立 通话记录(实体)上的一个属性,通话时长。感觉有些冗余。有没有更好得思路?
类似于这个问题:<a href="http://wenda.chinahadoop.cn/question/10400">http://wenda.chinahadoop.cn/question/10400</a></p>
<p>neo4j可以解决这个问题:
-[role:acted_in {roles:[“neo”,”hadoop”]}]->
访问某一类关系下的某个属性的关系的数据</p>
<p>小象问答中的:
研发人员说用neo4j建知识图谱时,在不同节点设置不同结构,就是本体层了,不用再单独建本体层,对么?
<a href="http://chuansong.me/n/2450423751225">http://chuansong.me/n/2450423751225</a>
blank node 简单来说就是没有 IRI 和 literal 的资源,或者说匿名资源。关于其作用,有兴趣的读者可以参考 W3C 的文档,这里不再赘述。我个人认为 blank node的存在有点多余,不仅会给对 RDF 的理解带来额外的困难,并且在处理的时候也会引入一些问题。通常我更愿意用带有 IRI 的 node 来充当 blank node,行使其功能,有点类似 freebase 中 CVT(compound value type)的概念。</p>
<p>昊奋老师讲过freebase的cvt,就是干这个的,第二课P141页,Freebase的特性</p>
<p>不过,我看了貌似在owl里,只能靠一个空节点,或者x-ary方式插入一个中间实体来解决,其实我理解,CVT就是一个空节点或者中间实体了</p>
<p>这个讲RDF关系的,比如自反,唯一,对称啥的,不错:<a href="http://www.unconstraint.cn/blog/kg2">http://www.unconstraint.cn/blog/kg2</a>,<a href="https://www.cnblogs.com/bigdata-stone/p/9613800.html">https://www.cnblogs.com/bigdata-stone/p/9613800.html</a></p>
<p>我操,neo4j的关系是没有方向的:<a href="https://www.jianshu.com/p/a25a1907b926">https://www.jianshu.com/p/a25a1907b926</a>,在Neo4j中,遍历关系的任何一个方向所需的时间是相同的。进一步说,方向可以被完全忽略。因此,当单向的关系可以同时代表另一个方向的关系的时候,没有必要同时创建两个方向的关系。</p>
<p>看了之前的医疗的知识图谱,<a href="https://github.com/zhangziliang04/KGQA-Based-On-medicine">https://github.com/zhangziliang04/KGQA-Based-On-medicine</a>,没啥用,是neo4j的,反倒是王昊奋老师的那个小例子是基于本体数据库和rofe正则式的,</p>
<p><a href="https://www.bilibili.com/video/av12246870/">https://www.bilibili.com/video/av12246870/</a></p>
<pre><code>无模式,随时可以修改他的schema,
要干啥:
本体学习
* 术语抽取
* 同义关系抽取
* 概念
* 分类关系学习
* 非分类关系学习
* 公理和规则
实体层学习
* 实体学习
* 实体数据填充
* 实体对齐
信息从哪里来?
开放知识库、本题库,如KG.cn、wikidata
结构化数据,如公司的数据库
行业知识库,如一些公开的行业结构化数据
在线百科,如各类百科
公开网站,爬取非结构化数据
具体怎么做:
从百度百科中,有分类,可以直接拿来用
实体,都有对应的实体,摘要,可以提取
什么是对齐:
就是把外部知识和知识库中的概念做映射,比如又叫,别名,同义等,就是本体是一个
上下位关系学习?
就是子类、实例,比如刘创是人,或者灵长目是哺乳动物。
怎么学习?
从开放知识库中直接抽取,百科中的关系图,从语言模式中(X是Y的一种,X如Y,Z),CRF学习
概念的属性如何学习?
行业知识图谱构建:
通用是自下而上,行业往往是自上而下,啥意思呢?就是行业可以从高层次,抽象层次,整体性上构建,然后再细化,一个树形,从根往叶子。通用是反着,从一个个概念开始聚合,开放这么做也是没办法,世界太大了。
D2R,
行业数据源:结构化好的行业网站、外部数据库
文本抽取
我们的知识图谱构建:
* 一个在线知识编辑工具
* 思考好,需要构建哪些知识
</code></pre>
<p>太恶心了,neo4j是单个数据库的,你要是切换,得重启,只有一个数据库实例,类似于oracle。<a href="https://www.youtube.com/watch?v=W9Bon8cWrSE">https://www.youtube.com/watch?v=W9Bon8cWrSE</a></p>
<p>KBQA的查询本体用的SparQL如何构建和映射?是根据意图映射成固定模板SparQL,还是类似于做语法解析,把Query的语法依存树编译成SparQL语句?
Sequicity</p>
<p><a href="https://blog.csdn.net/BBZZ2/article/details/72832486">https://blog.csdn.net/BBZZ2/article/details/72832486</a></p>
<h4 id="贪心科技---知识图谱笔记">贪心科技 - 知识图谱笔记</h4>
<pre><code>知识图谱采用的场景:
* 可视化需求
* 比如公安、p2p、查看问题用户、嫌疑人关系
* 深度搜索需求,比如2度、3度,维度增加是线性的
* 实时性要求,在查询关系网络,多度查询的时候的性能要求
* 知识推理目前在实际业务中应用还是初级、很少
* 哪些数据源?如何获得?已经有哪些?缺哪些?
一般来说,图谱中的超级节点都是没啥用的,啥叫超级节点,就是谁都和他链接到一起,比如电话通话记录图谱中的10086,就是个超级节点,这种节点就没啥意义;比如把性别“男”作为一个实体时候,他会成为超级节点(因为任何人都有性别),所以它也没有意义,所以应该仅仅把他当做人的一个属性对待就好了。
没啥用的属性,尽量不要放到知识图谱的实体属性中,放到关系数据库里就好了嘛。
知识图谱没啥用的信息,就尽量放到数据库里,保持知识图谱的整洁和高效。
社区发现,标签传播算法,
图相似度算法,
超级节点,影响性能,从设计中取出,价值不大,
neo4j可以存储几亿以内的,再大就不合适了,而是是单节点的。如果要支持分布式,可以选择orientDB和JanusGraph。
GraphX+Spark,来做更大规模的图数据分析,GraphX?
</code></pre>
<h4 id="数据炼金---知识图谱笔记">数据炼金 - 知识图谱笔记</h4>
<pre><code>不同的访问方式总结如下:
1.直接访问
https://www.wikidata.org/wiki/Specail:EntityData/Q23114.rdf 这种可以直接获得wikidata的rdf数据,后缀可以改成pdf,那么就是pdf文件了。
2.php的web api访问
https://www.wikidata.org/w/api.php 直接api访问,但是没办法获取关联数据。
3.通过SPARQL访问
https://query.wikidata.org/ 通过SPARQL来访问的web接口。
4.使用python api访问
pip install Wikipedia
import wikipedia as w
w.set_lang(“zh”)
w.search(‘朝阳区’)
不过得翻墙才能看到!
5.访问谷歌的知识图谱
https://developers.google.com/knowledge-graph/
通过url访问api即可,需要翻墙:
https://kgsearch.googleapis.com/v1/entities:search?query=taylor+swift&key=AIzaSyAvlIZE-x58JmTa&limit=1&indent=True
6.
CN-DBpedia查询
http://kw.fudan.edu.cn/apis/cndbpedia/ 主页
一个例子:查询红楼梦:http://shuyantech.com/api/cndbpedia/ment2ent?q=%E7%BA%A2%E6%A5%BC%E6%A2%A6
<https://edu.csdn.net/huiyiCourse/detail/833知识图谱发展>
https://mp.weixin.qq.com/s?__biz=MzI1MDY1OTc0Ng==&mid=2247483925&idx=3&sn=b65331596cb9475fa5ee5212c17d085c
首先我们要提取的第一个信息就是问题词
第二个关键的信息,就是问题焦点
第三个我们需要的信息,就是这个问题的主题词,我们可以通过命名实体识别NER来确定主题词
第四个我们需要提取的特征,就是问题的中心动词
通过对问题提取 问题词qword,问题焦点qfocus,问题主题词qtopic和问题中心动词qverb这四个问题特征,我们可以将该问题的依存树转化为问题图(Question Graph)
从依存树到问题图的转换,实质是就是对问题进行信息抽取,提取出有利于寻找答案的问题特征,删减掉不重要的信息
之所以有知识图谱,就是对推理的反动。在2001-2012年之间,语义网的研究特别强调推理。但是推理的成本很高,所以在工业界的实践中,逐渐就把推理废弃了。
大部分的推理任务,是可以转化为图上的查询的。所以在实操中,不必要引入一套复杂的推理机机制。推理机是很强大,但是大多数工程师掌握不了。所以SPARQL rules或者neo4j的查询也就够用了。
一阶逻辑系统在实战中也比较难以驾驭,通常会用描述逻辑或者逻辑编程logic programming。基于过程语义的规则系统比较实用,如 RIF PRD。
如果是要解决问题,那就从问题出发,先不要考虑解决方案是不是知识图谱。大部分问题用搜索引擎和数据库就能解决了。即使用知识图谱,也只是在搜索引擎和数据库之上有一个增强。
所以,先不要从方法出发。先从最成熟的传统技术出发来解决问题。
不要为了构造知识图谱而构造知识图谱。
如果不是面对具体问题,构造一个图谱是毫无意义的。
</code></pre>
<h4 id="其他">其他</h4>
<p><a href="https://www.zhihu.com/question/52368821/answer/138745422">https://www.zhihu.com/question/52368821/answer/138745422</a></p>
<pre><code>知识图谱作为人工智能(AI)的一个分支,和AI的其他分支一样,它的成功运用,都是需要知道它的所长,更需要知道它的所短的。特别是AI各个学派林立,经验主义(机器学习)、连接主义(神经网络)、理性主义(知识工程)、行为主义(机器人)各个方法的优劣,倘若不能有纵览的理解,也难以做正确的技术选型,往往盲目相信或者排斥一种技术。AI是一个极端需要广阔视野的学科。
知识图谱涉及知识提取、表达、存储、检索一系列技术,即使想有小成,也需要几年的功夫探索。如下所列,应该是每个知识图谱从业者都应该了解的一些基本功:
知道Web的发展史,了解为什么互联和开放是知识结构形成最关键的一件事。(我把这个列第一条,是我的偏见——但我认为这是最重要的一个insights)
知道RDF,OWL,SPARQL这些W3C技术堆栈,知道它们的长处和局限。会使用RDF数据库和推理机。
了解一点描述逻辑基础,知道描述逻辑和一阶逻辑的关系。知道模型论,不然完全没法理解RDF和OWL。
了解图灵机和基本的算法复杂性。知道什么是决策问题、可判定性、完备性和一致性、P、NP、NExpTime。
最好再知道一点逻辑程序(Logic Programming),涉猎一点答集程序(Answer Set Programming),知道LP和ASP的一些小工具。这些东西是规则引擎的核心。如果不满足于正则表达式和if-then-else,最好学一点这些。
哦,当然要精通正则表达式。熟悉regex的各种工具。
从正则文法到自动机。不理解自动机很多高效的模式提取算法都理解不了。
熟悉常见的知识库,不必事事重新造轮子,如Freebase, Wikidata, Yago, DBPedia。
熟悉结构化数据建模的基本方法,如ER,面向对象,UML,脑图。
学会使用一些本体编辑器,如Protege。(Palantir就是个价值120亿美元的本体编辑器)
熟悉任何一种关系数据库。会使用存储过程写递归查询。明白什么叫物化视图、传递闭包、推理闭包。
熟悉任何一种图数据库。明白图的局部索引和关系的全局索引的理论和实践性能差异。
熟悉词法分析的基本工具,如分词、词性标注
熟悉句法分析的基本工具,如成分分析、依存文法分析、深层文法分析
熟悉TFIDF、主题模型和分布式表示的基本概念和工具。知道怎么计算两个词的相似度、词和句子的关联度。
知道怎么做命名实体识别。知道一些常用的词表。知道怎么用规则做关系提取。
为了上述的深化,要掌握一些机器学习的基本概念,识别、分类、聚类、预测、回归。掌握一些机器学习工具包的使用。
谨慎地使用一些深度学习方法,最好在是了解了神经网络的局限之后,先玩玩BP。主要是用用LSTM。
了解前人已经建好的各种Lexical数据库,如Wordnet, framenet, BabelNet, PropBank。熟悉一些常用的Corpus。
知道信息检索的基本原理。知道各种结构的索引的代价。
掌握Lucene或者Solr/Elasticsearch的使用。
学会混合使用多种数据库,把结构化数据和非结构化数据放在一起使用。体会数据建模和查询的成本。
学会一些概念原型工具,如Axure和Semantic Mediawiki。快速做MVP。
http://blog.memect.cn/?p=393
我们在传统的这种建模里面,为了表达三元组以上的东西,这个四元组、五元组的话,我们会用reification,这种奇技淫巧,这种东西会极大地降低我们的知识库的可维护性和可读性。
</code></pre>
<p><a href="https://zhuanlan.zhihu.com/knowledgegraph">https://zhuanlan.zhihu.com/knowledgegraph</a></p>
<pre><code>=========
笔记:
=========
数据类型属性(datatype properties):类实例与RDF文字或XML Schema数据类型间的关系。
对象属性(object properties):两个类的实例间的关系。
类应自然地对应于与某论域中的事物的出现集合
属性是个体之间的二元关系
函数属性(Functional Property)——通过这个属性只能连接一个个体
对象属性(Object Property)——连接两个个体
标注属性 (Annotation Property)——用来对类,属性,个体和本体添加信息(元数据)。
概念(concept)这个词有时被用来代替类,实际上,类是概念的一个具体表现
使用owl:disjointWith构造子可以表达一组类是不相交的。它保证了属于某一个类的个体不能同时又是另一个指定类的实例
资源描述框架(Resource Description Framework, RDF)是一种描述有关 Web 资源的格式化语句集合的模型。
Web Ontology Language (OWL)是一种 基于RDF的 应用程序,通常使用 RDF/XML 编码,它添加了一种丰富的词汇表,可以用来按照格式分类并分析 RDF 资源。
粗略地说,RDF局限于二元常谓词,RDFS局限于子类分层和属性分层(rdfs:subClassOf rdfs:subPropertyof),以及属性的定义域和值域限定(rdfs:domain rdfs:range).
owl本身是rdf的一个扩展,自然也满足rdf语法。
Web本体语言(OWL)中描述3者区别提到一句:OWL-构建在 RDF 的顶端之上,描述属性与类别之间的关系。
假如我们有两个语义网络A和B。在A中,熊是哺乳动物的一个实例。在B中,熊是哺乳动物的一个子类。前者是is-a关系,后者是subClassOf关系。这种情况常有发生,我们建模的角度不同,那么同一个事物的表示也可能不同。=====>有时候当做个体,有时候还是当做概念,确实是有这种情况。
每条知识表示为一个SPO三元组(Subject-Predicate-Object)
Subjet——(Predicate)——>Object
RDF(Resource Description Framework),即资源描述框架,是W3C制定的,用于描述实体/资源的标准数据模型。RDF图中一共有三种类型,International Resource Identifiers(IRIs),blank nodes 和 literals。
IRI我们可以看做是URI或者URL的泛化和推广,它在整个网络或者图中唯一定义了一个实体/资源,和我们的身份证号类似。
literal是字面量,我们可以把它看做是带有数据类型的纯文本,比如我们在第一个部分中提到的罗纳尔多原名可以表示为"Ronaldo Luís Nazário de Lima"^^xsd:string。
blank node简单来说就是没有IRI和literal的资源,或者说匿名资源。
RDF的表达能力有限,无法区分类和对象,也无法定义和描述类的关系/属性。
person:1 :nationality "巴西"^^string.
RDFS,即“Resource Description Framework Schema”,是最基础的模式语言。轻量级的模式语言。
我们这里只介绍RDFS几个比较重要,常用的词汇:
1. rdfs:Class. 用于定义类。
2. rdfs:domain. 用于表示该属性属于哪个类别。
3. rdfs:range. 用于描述该属性的取值类型。
4. rdfs:subClassOf. 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
5. rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。
Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。
人们发现RDFS的表达能力还是相当有限,因此提出了OWL。我们也可以把OWL当做是RDFS的一个扩展,其添加了额外的预定义词汇。
OWL,即“Web Ontology Language”,语义网技术栈的核心之一。OWL有两个主要的功能:
1. 提供快速、灵活的数据建模能力。
2. 高效的自动推理。
schema层的描述语言换为OWL后
描述属性特征的词汇
1. owl:TransitiveProperty. 表示该属性具有传递性质。例如,我们定义“位于”是具有传递性的属性,若A位于B,B位于C,那么A肯定位于C。
2. owl:SymmetricProperty. 表示该属性具有对称性。例如,我们定义“认识”是具有对称性的属性,若A认识B,那么B肯定认识A。
3. owl:FunctionalProperty. 表示该属性取值的唯一性。 例如,我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人。
4. owl:inverseOf. 定义某个属性的相反关系。例如,定义“父母”的相反关系是“子女”,若A是B的父母,那么B肯定是A的子女。
本体映射词汇(Ontology Mapping)
1. owl:equivalentClass. 表示某个类和另一个类是相同的。
2. owl:equivalentProperty. 表示某个属性和另一个属性是相同的。
3. owl:sameAs. 表示两个实体是同一个实体。
本体映射主要用在融合多个独立的Ontology(Schema)。举个例子,张三自己构建了一个本体结构,其中定义了Person这样一个类来表示人;李四则在自己构建的本体中定义Human这个类来表示人。当我们融合这两个本体的时候,就可以用到OWL的本体映射词汇。回想我们在第二篇文章中提到的Linked Open Data,如果没有OWL,我们将无法融合这些知识图谱。
OWL在推理方面的能力。知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。
一般的关系都靠"Object Properties"
换到"Object Properties"页面,我们在此界面创建类之间的关系,即,对象属性。
"domain"表示该属性是属于哪个类的,"range"表示该属性的取值范围。
"hasActedIn"表示某人参演了某电影,属性的"domain"是人,4号框定义"range”是电影
"Data properties",我们在该界面创建类的属性,即,数据属性。其定义方法和对象属性类似,除了没有这么丰富的描述属性特性的词汇。数据属性相当于树的叶子节点,只有入度,而没有出度。其实区分数据属性和对象属性还有一个很直观的方法,我们观察其"range",取值范围即可。对象属性的取值范围是类,而数据属性的取值范围则是字面量。
我理解,DataProperties就是个文本、数字属性值,而类之间关系都用ObjectProperties,后者更常用。
W3C的RDB2RDF工作小组制定的两个标准:
第一个标准是direct mapping,即直接映射。
1、数据库的表作为本体中的类(Class)。比如我们在mysql中保存的数据,一共有5张表。那么通过映射后,我们的本体就有5个类了,而不是我们自己定义的三个类。2. 表的列作为属性(Property)。3. 表的行作为实例/资源。。。
在实际应用中我们很少用到这种方法,Direct mapping的缺点很明显,不能把数据库的数据映射到我们自己定义的本体上。
第二个标准是RDB2RDF工作小组指定了另外一个标准——R2RML,可以让用户更灵活的编辑和设置映射规则。是个规范:W3C的文档(R2RML: RDB to RDF Mapping Language)。就是个工具,用的时候再查文档。其实就是一个映射文件,你映射好了,他就按照这个帮你从数据库生成本体数据。
有个工具叫D2RQ,你提供类R2RML映射,然后他通过这个类R2RML mapping文件,把对RDF的查询等操作翻译成SQL语句,最终在RDB上实现对应操作。就是给你数据库套上一个RDF的壳子。
D2RQ提供了自己的mapping language,其形式和R2RML类似。D2RQ发布了r2rml-kit以支持W3C制定的两个映射标准。D2RQ有一个比较方便的地方,可以根据你的数据库自动生成预定义的mapping文件,用户可以在这个文件上修改,把数据映射到自己的本体上。
使用下面的命令将我们的数据转为RDF:
.\dump-rdf.bat -o kg_demo_movie.nt .\kg_demo_movie_mapping.ttl
这样,就可以把数据库的数据导出到RDF文件中了。
在2008年,SPARQL 1.0;2013年发布了SPARQL 1.1;
两个部分组成:协议和查询语言。
1. 查询语言很好理解,就像SQL用于查询关系数据库中的数据,XQuery用于查询XML数据,SPARQL用于查询RDF数据。
2. 协议是指我们可以通过HTTP协议在客户端和SPARQL服务器(SPARQL endpoint)之间传输查询和结果,这也是和其他查询语言最大的区别。
一个SPARQL查询本质上是一个带有变量的RDF图。SPARQL查询是基于图匹配的思想。我们把上述的查询与RDF图进行匹配,找到符合该匹配模式的所有子图,最后得到变量的值。
SPARQL查询分为三个步骤:
1. 构建查询图模式,表现形式就是带有变量的RDF。
2. 匹配,匹配到符合指定图模式的子图。
3. 绑定,将结果绑定到查询图模式对应的变量上。
SELECT * WHERE {
?s ?p ?o
}
SPARQL的部分关键词:
* SELECT, 指定我们要查询的变量。在这里我们查询所有的变量,用*代替。
* WHERE,指定我们要查询的图模式。含义上和SQL的WHERE没有区别。
* FROM,指定查询的RDF数据集。我们这里只有一个图,因此省去了FROM关键词。
* PREFIX,用于IRI的缩写。
SELECT ?n WHERE {
?s rdf:type :Person.
?s :personName '周星驰'.
?s :hasActedIn ?o.
?o :movieTitle ?n
}
关于知识图谱,有一个非常重要的概念,即开放世界假定(Open-world assumption,OWA)。这个假定的意思是当前没有陈述的事情是未知的,或者说知识图谱没有包含的信息是未知的。怎么理解?首先我们要承认知识图谱无法包含所有完整的信息。以我们这个电影数据的例子而言,很明显,它的数据十分残缺。即使我们拥有一个十分完整的电影知识图谱,包含了当下所有的电影、演员等信息,在现实世界中,信息也是动态变化和增长的。即,我们要承认知识图谱的信息本身就是残缺的。
周星驰出演了上述查询结果中的电影。基于我们构建的电影知识图谱,提问:周星驰出演了《卧虎藏龙》吗?根据OWA,我们得到的答案是“不知道”,相反,如果是封闭世界假定(Closed-world assumption),我们得到的答案是“没有出演”。
</code></pre>
<p><a href="https://zhuanlan.zhihu.com/knowledgegraph">https://zhuanlan.zhihu.com/knowledgegraph</a></p>
<pre><code>知识图谱学习笔记
这个是学习知乎专栏:知识图谱-给AI装个大脑
作者是SimmerChan,感谢!
很凌乱,只保留干货,主要是自己看,看官如果觉得辣眼,见谅!
数据类型属性(datatype properties):类实例与RDF文字或XML Schema数据类型间的关系。
对象属性(object properties):两个类的实例间的关系。
类应自然地对应于与某论域中的事物的出现集合
属性是个体之间的二元关系
函数属性(Functional Property)——通过这个属性只能连接一个个体
对象属性(Object Property)——连接两个个体
标注属性 (Annotation Property)——用来对类,属性,个体和本体添加信息(元数据)。
概念(concept)这个词有时被用来代替类,实际上,类是概念的一个具体表现
使用owl:disjointWith构造子可以表达一组类是不相交的。它保证了属于某一个类的个体不能同时又是另一个指定类的实例
资源描述框架(Resource Description Framework, RDF)是一种描述有关 Web 资源的格式化语句集合的模型。
Web Ontology Language (OWL)是一种 基于RDF的 应用程序,通常使用 RDF/XML 编码,它添加了一种丰富的词汇表,可以用来按照格式分类并分析 RDF 资源。
粗略地说,RDF局限于二元常谓词,RDFS局限于子类分层和属性分层(rdfs:subClassOf rdfs:subPropertyof),以及属性的定义域和值域限定(rdfs:domain rdfs:range).
owl本身是rdf的一个扩展,自然也满足rdf语法。
Web本体语言(OWL)中描述3者区别提到一句:OWL-构建在 RDF 的顶端之上,描述属性与类别之间的关系。
假如我们有两个语义网络A和B。在A中,熊是哺乳动物的一个实例。在B中,熊是哺乳动物的一个子类。前者是is-a关系,后者是subClassOf关系。这种情况常有发生,我们建模的角度不同,那么同一个事物的表示也可能不同。=——–>有时候当做个体,有时候还是当做概念,确实是有这种情况。
每条知识表示为一个SPO三元组(Subject-Predicate-Object)
Subjet——(Predicate)——>Object
RDF(Resource Description Framework),即资源描述框架,是W3C制定的,用于描述实体/资源的标准数据模型。RDF图中一共有三种类型,International Resource Identifiers(IRIs),blank nodes 和 literals。
IRI我们可以看做是URI或者URL的泛化和推广,它在整个网络或者图中唯一定义了一个实体/资源,和我们的身份证号类似。
literal是字面量,我们可以把它看做是带有数据类型的纯文本,比如我们在第一个部分中提到的罗纳尔多原名可以表示为”Ronaldo Luís Nazário de Lima”^^xsd:string。
blank node简单来说就是没有IRI和literal的资源,或者说匿名资源。
RDF的表达能力有限,无法区分类和对象,也无法定义和描述类的关系/属性。
person:1 :nationality “巴西”^^string.
RDFS,即“Resource Description Framework Schema”,是最基础的模式语言。轻量级的模式语言。
我们这里只介绍RDFS几个比较重要,常用的词汇:
1. rdfs:Class. 用于定义类。
2. rdfs:domain. 用于表示该属性属于哪个类别。
3. rdfs:range. 用于描述该属性的取值类型。
4. rdfs:subClassOf. 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
5. rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。
Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。
人们发现RDFS的表达能力还是相当有限,因此提出了OWL。我们也可以把OWL当做是RDFS的一个扩展,其添加了额外的预定义词汇。
OWL,即“Web Ontology Language”,语义网技术栈的核心之一。OWL有两个主要的功能:
1. 提供快速、灵活的数据建模能力。
2. 高效的自动推理。
schema层的描述语言换为OWL后
描述属性特征的词汇
1. owl:TransitiveProperty. 表示该属性具有传递性质。例如,我们定义“位于”是具有传递性的属性,若A位于B,B位于C,那么A肯定位于C。
2. owl:SymmetricProperty. 表示该属性具有对称性。例如,我们定义“认识”是具有对称性的属性,若A认识B,那么B肯定认识A。
3. owl:FunctionalProperty. 表示该属性取值的唯一性。 例如,我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人。
4. owl:inverseOf. 定义某个属性的相反关系。例如,定义“父母”的相反关系是“子女”,若A是B的父母,那么B肯定是A的子女。
本体映射词汇(Ontology Mapping)
5. owl:equivalentClass. 表示某个类和另一个类是相同的。
6. owl:equivalentProperty. 表示某个属性和另一个属性是相同的。
7. owl:sameAs. 表示两个实体是同一个实体。
本体映射主要用在融合多个独立的Ontology(Schema)。举个例子,张三自己构建了一个本体结构,其中定义了Person这样一个类来表示人;李四则在自己构建的本体中定义Human这个类来表示人。当我们融合这两个本体的时候,就可以用到OWL的本体映射词汇。回想我们在第二篇文章中提到的Linked Open Data,如果没有OWL,我们将无法融合这些知识图谱。
OWL在推理方面的能力。知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。
一般的关系都靠”Object Properties”
换到”Object Properties”页面,我们在此界面创建类之间的关系,即,对象属性。
“domain”表示该属性是属于哪个类的,”range”表示该属性的取值范围。
“hasActedIn”表示某人参演了某电影,属性的”domain”是人,4号框定义”range”是电影
“Data properties”,我们在该界面创建类的属性,即,数据属性。其定义方法和对象属性类似,除了没有这么丰富的描述属性特性的词汇。数据属性相当于树的叶子节点,只有入度,而没有出度。其实区分数据属性和对象属性还有一个很直观的方法,我们观察其”range”,取值范围即可。对象属性的取值范围是类,而数据属性的取值范围则是字面量。
我理解,DataProperties就是个文本、数字属性值,而类之间关系都用ObjectProperties,后者更常用。
W3C的RDB2RDF工作小组制定的两个标准:
第一个标准是direct mapping,即直接映射。
1、数据库的表作为本体中的类(Class)。比如我们在mysql中保存的数据,一共有5张表。那么通过映射后,我们的本体就有5个类了,而不是我们自己定义的三个类。2. 表的列作为属性(Property)。3. 表的行作为实例/资源。。。
在实际应用中我们很少用到这种方法,Direct mapping的缺点很明显,不能把数据库的数据映射到我们自己定义的本体上。
第二个标准是RDB2RDF工作小组指定了另外一个标准——R2RML,可以让用户更灵活的编辑和设置映射规则。是个规范:W3C的文档(R2RML: RDB to RDF Mapping Language)。就是个工具,用的时候再查文档。其实就是一个映射文件,你映射好了,他就按照这个帮你从数据库生成本体数据。
有个工具叫D2RQ,你提供类R2RML映射,然后他通过这个类R2RML mapping文件,把对RDF的查询等操作翻译成SQL语句,最终在RDB上实现对应操作。就是给你数据库套上一个RDF的壳子。
D2RQ提供了自己的mapping language,其形式和R2RML类似。D2RQ发布了r2rml-kit以支持W3C制定的两个映射标准。D2RQ有一个比较方便的地方,可以根据你的数据库自动生成预定义的mapping文件,用户可以在这个文件上修改,把数据映射到自己的本体上。
使用下面的命令将我们的数据转为RDF:
.\dump-rdf.bat -o kg_demo_movie.nt .\kg_demo_movie_mapping.ttl
这样,就可以把数据库的数据导出到RDF文件中了。
在2008年,SPARQL 1.0;2013年发布了SPARQL 1.1;
两个部分组成:协议和查询语言。
1. 查询语言很好理解,就像SQL用于查询关系数据库中的数据,XQuery用于查询XML数据,SPARQL用于查询RDF数据。
2. 协议是指我们可以通过HTTP协议在客户端和SPARQL服务器(SPARQL endpoint)之间传输查询和结果,这也是和其他查询语言最大的区别。
一个SPARQL查询本质上是一个带有变量的RDF图。SPARQL查询是基于图匹配的思想。我们把上述的查询与RDF图进行匹配,找到符合该匹配模式的所有子图,最后得到变量的值。
SPARQL查询分为三个步骤:
3. 构建查询图模式,表现形式就是带有变量的RDF。
4. 匹配,匹配到符合指定图模式的子图。
5. 绑定,将结果绑定到查询图模式对应的变量上。
SELECT * WHERE {
?s ?p ?o
}
SPARQL的部分关键词:
* SELECT, 指定我们要查询的变量。在这里我们查询所有的变量,用*代替。
* WHERE,指定我们要查询的图模式。含义上和SQL的WHERE没有区别。
* FROM,指定查询的RDF数据集。我们这里只有一个图,因此省去了FROM关键词。
* PREFIX,用于IRI的缩写。
SELECT ?n WHERE {
?s rdf:type :Person.
?s :personName ‘周星驰’.
?s :hasActedIn ?o.
?o :movieTitle ?n
}
关于知识图谱,有一个非常重要的概念,即开放世界假定(Open-world assumption,OWA)。这个假定的意思是当前没有陈述的事情是未知的,或者说知识图谱没有包含的信息是未知的。怎么理解?首先我们要承认知识图谱无法包含所有完整的信息。以我们这个电影数据的例子而言,很明显,它的数据十分残缺。即使我们拥有一个十分完整的电影知识图谱,包含了当下所有的电影、演员等信息,在现实世界中,信息也是动态变化和增长的。即,我们要承认知识图谱的信息本身就是残缺的。
周星驰出演了上述查询结果中的电影。基于我们构建的电影知识图谱,提问:周星驰出演了《卧虎藏龙》吗?根据OWA,我们得到的答案是“不知道”,相反,如果是封闭世界假定(Closed-world assumption),我们得到的答案是“没有出演”。
{:class=”myimg”}
组件有:TDB、rule reasoner和Fuseki。
1. TDB是Jena用于存储RDF的组件,是属于存储层面的技术。在单机情况下,它能够提供非常高的RDF存储性能。目前TDB的最新版本是TDB2,且与TDB1不兼容。
2. Jena提供了RDFS、OWL和通用规则推理机。其实Jena的RDFS和OWL推理机也是通过Jena自身的通用规则推理机实现的。
3. Fuseki是Jena提供的SPARQL服务器,也就是SPARQL endpoint。其提供了四种运行模式:单机运行、作为系统的一个服务运行、作为web应用运行或者作为一个嵌入式服务器运行。
TDB提供元组保存;Jena自带推理机也支持OWL推理规则;Fuseki是个响应SPARQL的服务器;
使用“tdbloader.bat”将之前我们的RDF数据以TDB的方式存储。命令如下:
.\tdbloader.bat --loc="D:\apache jena\tdb" "D:\d2rq\kg_demo_movie.nt"
“–loc”:指定tdb存储的位置
kg_demo_movie.nt:我们之前的从数据库里导出的本体文件。
知识图谱课笔记
用依存分析,可以找到远点距离上的词的关系,而不是依赖一个窗口。
如果给utterance构造一个query,
要做一个entity linking,
S-MART:novel tree-based structured learning algorithms apllied to tweet entity linking in ACL 2015.
用Freebase或者dbPedia,来做实体的链接的对象。
CVT: component value type,freebase中用来定义多元关系的机制。
比如吧一个四元组转换成三元组的时候用。
???知识表示,用cvt,三元组
远程监督?distant supervision
一阶谓词逻辑,需要看一下概念
reference table,distant supervsion,的概念
消歧,第四课
什么叫做远程监督?它既不是单纯的传统意义上的监督语料,当然也不是无监督。它是一种用KB去对齐朴素文本的标注方法。
</code></pre>
<p><a href="https://blog.csdn.net/u011801161/article/details/78910988">https://blog.csdn.net/u011801161/article/details/78910988</a></p>
<p>这篇不错,讲protege建模的</p>
<p><a href="https://www.zhihu.com/question/26385031">https://www.zhihu.com/question/26385031</a></p>
<p>问答系统(KBQA)。除了图关系挖掘外,主要的通用的应用场景。方法精度上,Pattern » Machine Learning。语义分析“美人鱼的导演是谁” ,得到句法树,生成检索语句(与对应的存储方式对应:SparQL-Neo4j / MySQL-SQL),检索知识库得到结果 “周星驰”。</p>
<p><a href="http://www.vccoo.com/v/8b3im1_6">http://www.vccoo.com/v/8b3im1_6</a></p>
<p>问:感谢分享,使用自然语言进行友好查询的优化方法同样适用于 neo4j 吗?</p>
<p>答:同样适用于 neo4j,但是 neo4j 的 cypher 查询语言没有 SPARQL 那么标准。对于自然语言转化出来的结构化信息到 cypher 的转换的方法需要重新设计。NLU 这块的工作是相同的。</p>
<p>问:明略采用 RDF 的 entity 和 edge 的数量级是多少?有一些问题:为什么不考虑类似 neo4j,OrientDB,Titan 这类的图库,而要采用 SparQL,是因为数据量很大?</p>
<p>答:为了更好的支持智能化应用,在明略关于 RDF 的存储管理是处于探索阶段。目前我们实际的 SCOPA 系统是采用了自研的蜂巢知识图谱数据库,并对外提供的是 native 的 API。</p>
<p>neo4j和jena的比较:</p>
<p><a href="https://db-engines.com/en/system/Jena;Neo4j">https://db-engines.com/en/system/Jena;Neo4j</a></p>
<p><a href="http://skyhigh233.com/blog/2016/10/31/qa-insurance/">http://skyhigh233.com/blog/2016/10/31/qa-insurance/</a></p>
<p><a href="https://yunqi.aliyun.com/2017/hangzhou/videos?spm=a21cy.10467250.880280.811.ypKZOF&wh_ttid=pc#/video/243">知识图谱讲座:阿里飞天专场</a></p>
<p><a href="http://study.163.com/course/introduction.htm?courseId=1004964005”">阿尔法胖哥的知识图谱实战开发案例剖析</a></p>
<p><strong>文本相似度</strong></p>
<p><a href="https://zhuanlan.zhihu.com/p/35843798?group_id=970051171658919936">中文文本相似度计算工具集</a></p>
<p><a href="http://www.cnblogs.com/huilixieqi/p/6493089.html">文本相似度</a></p>
<p>这篇讲的很棒,很系统,抽空要认真学习一下</p>
事件抽取
2018-12-21T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/21/event-extract
<p><code>说说我的理解</code></p>
<p>事件抽取,还是NLP比较复杂的一个是,比POS、NER、关系抽取啥的都要复杂一些,主要是,他需要抽取的东西比较多,要抽取事件的触发词,还要抽取事件的各个要件,也叫arguments,白话就是事件涉及到的各种元素,这玩意特像chatbot中的slots,而chabot中的意图,可以类别成这边的事件类型。</p>
<ul>
<li>模板的就不说了,过时了,不过,实际过程中,几个正则最管用。</li>
<li>机器学习方法中,pipeline的说不好,俺也没实践过,就是说不断地pipeline,错误会方法。后来就不pipeline了,直接joint train,就是把事件trigger和arguments都一口气学出来,这个过程中要用到最大熵,我理解就是CRF,还有CRF那一堆前后词啥的特征工程。 再后来,又向前来了一步,不是学序列了,而是学一个依存结果出来。</li>
<li>最后呢,还是上大杀器,深度学习,不过还是pipeline和joint两种,pipeline里用DMCNN,joint用JRNN。</li>
</ul>
<p>语料不够咋办,俩办法:一个是用自己的判别器把那些置信度高的样本当做样本加进去、二是到知识图谱里,找那些结构化的事件来语料。这又诞生了好几篇论文来搞事情。</p>
<p>我想,是不是可以把BERT引入进来,直接当事件抽取的预训练,然后用在事件抽取里,效果应该很好吧,估计肯定会有人做。</p>
<p>说说体会:</p>
<ul>
<li>没语料,标注太费劲了,国外有一些,比如ACE的,不过量也不大,国内就少的可怜了,就CEC贡献了一千条</li>
<li>英文的那些对中文不适用,语序、语法啥的差异那么大,没法transfer过来啊,居然还有几个人专门研究e文事件抽取到中文的迁移</li>
<li>还是正则管用,不是复杂的场景,直接就正则把</li>
</ul>
<p>先列参考资料</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/27840591">聊聊“事件抽取” | 每周话题精选 #05</a></li>
<li><a href="https://github.com/shijiebei2009/CEC-Corpus">中文突发事件语料库</a></li>
<li><a href="http://www.zhuanzhi.ai/topic/2001324207116408/new">专知话题 - 事件抽取</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/27840591">知乎-“事件抽取”话题</a> 后面的论文列表有一些意义</li>
<li><a href="https://github.com/liuhuanyong/ComplexEventExtraction">中文复合事件的开源项目</a></li>
<li><a href="http://www.shuang0420.com/2018/10/15/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/">徐阿衡:知识抽取-事件抽取</a></li>
<li><a href="https://blog.csdn.net/muumian123/article/details/82356472">译:通过递归神经网络提取联合事件</a></li>
<li><a href="https://blog.csdn.net/juanjuan1314/article/details/80782352">老笨妞:译《Chinese Event Extraction With Inadequate Data》</a>
文章中有一个<a href="https://github.com/hendrydong/Chinese-Event-Extraction">demo代码</a>,可以参考</li>
<li><a href="http://www.zhuanzhi.ai/document/5ec4b0888ec2cd4f85499ff7f3496d04">上证信息/文因互联:知识提取上市公司信息披露</a></li>
</ul>
<h2 id="研究者">研究者</h2>
<p>列出我能找到的做事件相关的人:</p>
<ul>
<li><a href="http://www.shuang0420.com/">徐阿衡</a></li>
<li><a href="http://www.nlpr.ia.ac.cn/cip/yubochen/publications.html">中科院自动化所 陈玉博</a></li>
<li><a href="http://bestjimmy.com/">花京华</a></li>
</ul>
<h2 id="一些参考资料和笔记">一些参考资料和笔记</h2>
<ul>
<li><a href="https://pan.baidu.com/s/19YeWqvrw6Mqw0qUqzIBrwQ">事件抽取论文集</a> <strong>拷贝自徐阿衡的分享,感谢</strong></li>
<li><a href="http://www.shuang0420.com/2018/10/15/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/">徐阿衡:知识抽取-事件抽取</a></li>
</ul>
<p>徐阿衡的文章质量都很高,文末还有论文下载,推荐:</p>
<pre><code> 事件抽取同样需要从文本中抽取 predicate 和对应的 arguments,事件抽取的难点在于,有多个 arguments,而且不一定在一个句子里,而且,有些arguments不一定是必须的。
核`心概念:
* 事件描述(Event Mention)
描述事件的词组/句子/句群,包含一个 trigger 以及任意数量的 arguments
* 事件触发(Event Trigger)
事件描述中最能代表事件发生的词汇,决定事件类别的重要特征,一般是动词或者名词
* 事件元素(Event Argument)
事件的重要信息,或者说是实体描述(entity mention),主要由实体、属性值等表达完整语义的细粒度单位组成
* 元素角色(Argument Role)
事件元素在事件中扮演的角色,事件元素与事件的语义关系,可以理解为 slot
* 事件类型(Event Type)
事件抽取的任务可以理解成从文本中找到特定类别的事件,然后进行填表的过程。事件抽取大多是分阶段进行,通常由 trigger classifier 开始,如果有 trigger,把 trigger 以及它的上下文作为特征进行分类判断事件类型,再进行下一步的 argument classifier,对句子中的每个 entity mention 进行分类,判断是否是 argument,如果是,判定它的角色。
事件抽取任务最基础的部分包括:
* 识别事件触发词及事件类型
* 抽取事件元素(Event Argument)同时判断其角色(Argument Role)
* 抽出描述事件的词组或句子
在 ACE 的阶段,大多数系统都是基于监督学习了,但由于标注一致性的问题,系统的效果普遍较差,ACE 事件抽取只举行了一次,在 2005 年。
基于统计机器学习的事件抽取:建立在统计模型基础上,事件抽取方法可以分为 pipeline 和 joint model 两大类。
Pipeline:将事件抽取任务转化为多阶段的分类问题(管道抽取),需要顺序执行下面的分类器:
1.事件触发词分类器(Trigger Classifier)
判断词汇是否是事件触发词,以及事件类别
2.元素分类器(Argument Classifier)
词组是否是事件元素
3.元素角色分类器(Role Classifier)
判定元素的角色类别
4.属性分类器(Attribute Classifier)
判定事件属性
5.可报告性分类器(Reportable-Event Classifier)
判定是否存在值得报告的事件实例
</code></pre>
<p><a href="https://www.bilibili.com/video/av30198587">https://www.bilibili.com/video/av30198587</a></p>
<pre><code>事件,某类事件的属性是不同的,
事件框架:Event Frame(Script)他讲的事件是固定的格式的,
事件的触发词,
ACE评测,这个评测里定义了事件的常见属性,可以参考。
事件抽取抽这4个东西:
1.触发词
2.事件类型
3.识别参数(Aguments)
4.事件角色
Aguments被抽取出来后,还得判断他和事件的关系,比如离职事件,从宜信离职,那么宜信就是一个aguments,关系是组织机构。有多个aguments、关系。
美国的DAPRA和NIST机构来评测。
自动完成标注,然后自动训练出一个事件,
不同类型的事件,找到一种普世的定义。
特征表示:
传统是NLP,实体、短语、词性、句法关系、句法模板,不好,不好。
他们的改进是用CNN,
事件里,往往是多句话来完整表达一个事件,aguments可能再多句话里。
自动回标,就是从知识图谱里面对照事件,细节我没去听,如果用得到,再去看。
</code></pre>
<p><a href="http://www.yuzhinlp.com/keenage.html#part7.1">http://www.yuzhinlp.com/keenage.html#part7.1</a></p>
<p><a href="http://www.bestjimmy.com/?cat=5">http://www.bestjimmy.com/?cat=5</a></p>
<pre><code>NLP事件提取算法,一般采用序列标注等算法,如CRF,LSTM,CNN等。一般的套路是触发词+分类+信息抽取。deeplearning最新的paper对于事件提取也无非是加入各种attention(炼丹)。
对于垂直领域,针对金融领域的需求,可能抽取的事件包括:融资信息,公告信息,人事信息等;这些事件文本通常有较强规律,通过一些显而易见的规则,或者直接通过一些垂直网站进行抓取历史事件相关的事件论元和参数,再加上一些远程监督+multi-instance learning方法就可以对通用文本进行标注和训练模型了。
事件是绕不开实体的,任何事件类型的要素中都包含实体,涉及到的实体可能包括时间、地点、人物、机构、很少有“与实体无关的事件”。
现在深度学习遍地开花,但是nlp领域的这种老问题,实体识别效果提升并没有特别大。
事件就是实体与动作的串联。
</code></pre>
<p><a href="http://www.zhuanzhi.ai/document/d46c48549db3cef52f3def08723774e2">http://www.zhuanzhi.ai/document/d46c48549db3cef52f3def08723774e2</a></p>
<p>这篇是中科院自动化所陈玉博老师写的,很详细,很高的参考价值:</p>
<pre><code>事件抽取分两个步骤:第一步就是事件的发现和抽取,第二个是事件元素的抽取。
1.事件发现是你要让计算机知道读完这一句话,是哪一个词触发了这个类型的事件并且判断它触发什么类型。
2.然后是事件元素抽取,就是说你要让计算机判断出参与这个事件所有的元素是什么,并且它们在这个事件当中扮演一个什么角色,比如说美团和大众点评合并这样一个事件,其实它描述的就是一个公司合并事件。美团和大众点评在这里就是两个参与者了,10月8日就是合并事件发生的时间,这是我们希望计算机能自动从文本当中提取出来的。
3.另外一个就是事件关系抽取,事件关系给大家介绍四类:共指,时序,因果和子事件。
真实场景要求你从公告或者是一个研报这样篇章级别的文件中去抽取一个结构化的事件,通常由多个句子描述一个事件,一个事件的多个元素分布在不同的句子中,不确定性加大,难度加大。现在没有一份公开做这个任务的语料,人工标注数据耗时费力,成本高昂,金融领域缺乏大规模高质量的标注数据。
没有标注数据,自己做:自动生成标注数据,利用现有的一些结构化的事件信息,然后去公开文档当中自动生成标注数据。
事件是由篇章当中的不同句子去描述的,你需要从不同的句子当中抽取出来对应的元素,去构成一个这样的一个完整事件,那么你就要从多句话当中,识别出来哪个是主句,这个是用一个 CNN 分类的模型去做的。
</code></pre>
聊聊Word2Vec
2018-12-20T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/20/word2vec
<h1 id="理解word2vec">理解Word2Vec</h1>
<p>CNN更接近原生的数据,图像点阵,适合直接生学,
但是文字是人类抽象过的东西,所以,要交给机器学,必须要把它原始化,所以,需要一个数据化方式把它更原始化。</p>
<h2 id="tf-idf">TF-IDF</h2>
<p><img src="/images/20181220/1545282900519.png" alt="" /></p>
<p>tf:一个给定的词语在该文件中出现的频率
idf:总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到
有啥用?咋用?
(此处可以参考阮一峰的博客4片关于tfidf的文章:<a href="http://www.ruanyifeng.com/blog/2013/03/tf-idf.html">http://www.ruanyifeng.com/blog/2013/03/tf-idf.html</a>)
1.判断搜索关键词最相关的文档:在搜索中,你的搜索词,可以被算一个tfidf,看看这个词是否在文章中的值比较高,如果高, 说明这个词在这个文章中很重要,所以,这篇文档就应该是这个搜索词。
2.抽取一篇文章的关键词:tfidf高,就说明这个词在这个文章里面重要,这样就可以排序,找出这个文章的主题词。
3.找出相似文章:一个文章的每个非停止词的tfidf组成词向量,然后算两个文章的词向量的余弦距离,得到相似对比
4.形成摘要:找出关键词,看这些词的距离相近形成簇,簇所在句子就是摘要句子</p>
<h2 id="bi-gramn-gram">Bi-Gram/N-Gram</h2>
<p>纬度高,很稀疏,因为Bi-Gram,就是词词间两两组合,比如1000个词,那么空间就是1000词的2排列An2(1000),忒大了,这个向量空间。</p>
<h2 id="共现矩阵和svd降维">共现矩阵和SVD降维</h2>
<p>之前的1-hot编码其实是太割裂了,其实一个词实际上背后是在各个维度上都有一个表示、一个值,而不是单纯的一个词,这种有点隐含语义的意思,词背后,可能是受他的上线文影响的,不是单纯的一个1-hot可以解决,所以引出了用一个各个维度都有值的向量来表示他的方式。其中,最好理解的是共现矩阵导出的词向量,当然还有后面的NNLM以及后续的Word2Vec向量表示,都是这个目的。</p>
<p>用一个词附近的其他词,来表示这个词!(这个是现代NLP最创见的想法之一!!!)</p>
<p>共现矩阵:</p>
<p><img src="/images/20181220/1545282933068.png" alt="" /></p>
<p>就是我和你共现次数,比如i like的一起出现了2次,这个是一个对称矩阵。</p>
<p>这种方式,还是稀疏、空间占用大、高纬。</p>
<p>所以,怎么办?降维啊,SVD降维。</p>
<p><img src="/images/20181220/1545282966007.png" alt="" /></p>
<p>然后第一个U矩阵的,可以作为词的向量表示。(为何不用s或者v?需要再回顾下svd)</p>
<p>但是,svd计算量特别大,O(n^3),而且语料加入一些新词,就影响了共现,就得重新计算啊,靠。</p>
<hr />
<p>怎么办?这就引出了NNLM:</p>
<p><img src="/images/20181220/1545283007114.png" alt="" /></p>
<p>我的训练语料是文章,3个词,得到下一个词,然后滑动窗口,挪一个词,然后再滑动,又有3词,对应下一个词。<strong>滑动窗口宽度就是3</strong></p>
<p>输入是1-hot的编码?!1-hot不是最稀硫的么?输入是前几个词,预测紧接着下一个词。
这个几个词的,要和一个矩阵做乘法,这个矩阵是什么?</p>
<p>矩阵C=(w1,w2….wn),w1-wn是词表的词,每个词是300维的,300维怎么来的?我看完全是经验,拍脑袋的。比如10万个词,300维,这个矩阵是300x10万的矩阵,然后这个矩阵随机初始化。 300x10万 乘以 10万的1hot词,得到一个300x1的向量,</p>
<p><img src="/images/20181220/1545283048891.png" alt="" /></p>
<p>就是右面乘以左面的红框。这层叫“投影层”。
感觉就是降维了,从那么高的一个维度,10万维度,变成了300维度。</p>
<p><img src="/images/20181220/1545283072168.png" alt="" /></p>
<p>然后这3个300维度的concat拼接成900维度,然后和上面的500维度的隐含层做全连接。900x500,500怎么来的,老师说,又是拍脑袋来的。500维度啥意思,这个地方突然有些迷糊了,其实就是500个隐含层节点,每个节点和前面的900维度的那个向量做了全连接,注意我说的是向量,其实就是节点,这点上要深刻理解DNN,别糊涂。</p>
<p>最后,这个500维的隐含层结果,再跟做一个10万维度的结果做softmax。</p>
<p>300维度数据—10万x300维度—–300x1的结果—–拼接成900x1的向量—-900x500权重矩阵—-500向量—–500x10万的权重矩阵—–10万维度的softmax结果。</p>
<p>讲完了,我们通过交叉熵作为损失函数,反向BP算法,得到了矩阵C,矩阵C的每一列对应着每个词的词向量(也就是300x1的向量)。</p>
<p>这里提一句,交叉熵实际上是你最后得到的你的softmax分布,和最后第4个词(还记得么,3个词预测第四个词),两个不同分布的KL散度,可以这么理解。</p>
<hr />
<p>然后,我们就可以引出word2vec</p>
<p>上面NNLM计算量太大,来,简化它!</p>
<ol>
<li>去掉投影层呗</li>
<li>那10万1-hot编码,改成了直接用个300维的随机初始化向量来表示丫呢。</li>
<li>把预测位置和内容改变:
CBOW(连续词袋)模型:
把前几个预测下一个(3个预测第4个),改成预测中间一个词(比如预测中间的学习“我喜欢(学习)机器学习”)
Skip-Gram模型:
正好这CBOW反着,“我喜欢(学习)机器学习”,知道了中间的学习,预测“我喜欢”,“机器学习”这两边的词。</li>
<li>这4个词在NNLM是拼接在一起,那太高了维度,就1200维了,所以就不做拼接了,改成做求和,那还是300维,这样可以降低计算量。
5.把隐藏层也去掉了,靠,看,去掉了投影层,又去掉了隐含层,那不就是直接的10万维的softmax了么?!,那就是求300x10万维度的weight?(此处需要在回过头去看看softmax???)</li>
<li>也没有激活函数了,类似于NNLM中的tanh函数也省了
我靠,为何啊?老师说,这么省略,是为了计算快,把能省的都省了,就剩下线性的计算了。</li>
<li>目标函数是啥?就是把语料库滑动一遍,得到每个词的预测结果,预测的是这个词出现的概率,这样,把所有的预测概率加起来,得到一个式子,然后来优化这个式子,使其最大化。比如,预测中间的“学习”这个词出现的概率,得到这个概率,然后窗口滑动,再预测下一个“机器”的概率,然后这些结果log对数相加,得到目标函数,最大化它。</li>
<li>最后的softmax是10万维,老师说,引入huffman树的编码,搞了个层次softmax,干啥用,说是为了降维,这块没听明白???
老师说,是把softmax的300x10万的权重,变成了这个哈夫曼树上的权重,少了很多,从N–>Log2(N)了。叶子节点有10万个。判断过程变成了从树上不停的左走右走决定,每次决定是一个LR回归,这些LR回归连乘在一起,作为目标函数。
8.1 负例采样
8中说,10万向量通过哈夫曼树降维,为何要降维?计算量大嘛,300x10万,变成了300xLog2(10w),不过,还有另外一种方法。叫负例采样。我理解是,10万维里面只要一个是正例(就对应一词嘛),其他的都不对,那么那么多个9万9千9百99个都没预测对,那么没必要都用他们来做损失函数(你看,是做损失函数的计算依据),取499个就够了吧,这样用这499个负例,1个正例,灌入到损失函数中,然后计算weight,那么怎么挑选,就通过Mikolov 这个哥们发明的负例采样方法。</li>
</ol>
<p><img src="/images/20181220/1545283116143.png" alt="" /></p>
<pre><code>把0-1区间化成10^8等份,然后按照词频来划分这10^8份,这10万个词分别统计词频,然后这10万个词,瓜分了这10^8份,然后随机选,选中谁,就是哪个词,但是这个筛子,只是丢499次,最终和1个正样本,组成500个样本。
</code></pre>
<ol>
<li>word2vec的问题:
训练都是从一个上下文窗口(就是那5个大小的窗口)来训练,缺乏了整个语料的信息;还有对于多义词不好分辨,比如苹果,只有一个向量表示,但是吃的苹果和苹果公司的苹果,不是一个概念,这种就不好区别了。所以解决这些问题,相处了glove算法啥的,但是实际上大家还是爱用word2vec。</li>
<li>word2vec的用途
当做一个半成品,再吐给CRF,用于NER任务啥的。</li>
<li>怎么使用:用谷歌的word2vec,或者gesim另外一个开源的</li>
</ol>
<p>恩,好复杂,这个要一会再回来理解。
这个总结很好:</p>
<p><img src="/images/20181220/1545283141137.png" alt="" /></p>
<p>丫就是一个简化版的NNLM,所以,给他的语料不能太短,否则,这个滑动窗口根本就滑动不起来啊。</p>
<hr />
<p>这篇文章,按照这个思路撸了一遍,很赞那:
<a href="https://www.cnblogs.com/iloveai/p/word2vec.html">https://www.cnblogs.com/iloveai/p/word2vec.html</a></p>
<p>这篇文章,系统的再回顾一遍,里面提到了一些内容挺有用,摘抄一下
<a href="https://www.cnblogs.com/skykill/p/6785882.html">https://www.cnblogs.com/skykill/p/6785882.html</a></p>
<blockquote>
<p>中文分词方法中,近年来随着深度学习的应用,WordEmbedding + Bi-LSTM+CRF方法逐渐成为主流
传统做法(词袋one-hot编码)主要问题的文本表示是高纬度高稀疏的,特征表达能力很弱,而且神经网络很不擅长对此类数据的处理;此外需要人工进行特征工程,成本很高。而深度学习最初在之所以图像和语音取得巨大成功,一个很重要的原因是图像和语音原始数据是连续和稠密的,有局部相关性。应用深度学习解决大规模文本分类问题最重要的是解决文本表示,再利用CNN/RNN等网络结构自动获取特征表达能力,去掉繁杂的人工特征工程,端到端的解决问题。</p>
</blockquote>
<blockquote>
<p>分布式表示(Distributed Representation)其实Hinton 最早在1986年就提出了,基本思想是将每个词表达成 n 维稠密、连续的实数向量,与之相对的one-hot encoding向量空间只有一个维度是1,其余都是0。分布式表示最大的优点是具备非常powerful的特征表达能力。</p>
</blockquote>
<blockquote>
<p>实际上word2vec学习的向量和真正语义还有差距,更多学到的是具备相似上下文的词,比如“good”“bad”相似度也很高,反而是文本分类任务输入有监督的语义能够学到更好的语义表示(我理解是给了语义标注的有监督学习)</p>
</blockquote>
<blockquote>
<p>理论和实践之间的Gap往往差异巨大,学术paper更关注的是模型架构设计的新颖性等,更重要的是新的思路;而实践最重要的是在落地场景的效果,关注的点和方法都不一样。这部分简单梳理实际做项目过程中的一点经验教训。</p>
</blockquote>
<blockquote>
<p>模型显然并不是最重要的:不能否认,好的模型设计对拿到好结果的至关重要,也更是学术关注热点。但实际使用中,模型的工作量占的时间其实相对比较少。虽然再第二部分介绍了5种CNN/RNN及其变体的模型,实际中文本分类任务单纯用CNN已经足以取得很不错的结果了,我们的实验测试RCNN对准确率提升大约1%,并不是十分的显著。最佳实践是先用TextCNN模型把整体任务效果调试到最好,再尝试改进模型。</p>
</blockquote>
<blockquote>
<p>理解你的数据:虽然应用深度学习有一个很大的优势是不再需要繁琐低效的人工特征工程,然而如果你只是把他当做一个黑盒,难免会经常怀疑人生。一定要理解你的数据,记住无论传统方法还是深度学习方法,数据 sense 始终非常重要。要重视 badcase 分析,明白你的数据是否适合,为什么对为什么错。</p>
</blockquote>
<blockquote>
<p>关注迭代质量 - 记录和分析你的每次实验:迭代速度是决定算法项目成败的关键,学过概率的同学都很容易认同。而算法项目重要的不只是迭代速度,一定要关注迭代质量。如果你没有搭建一个快速实验分析的套路,迭代速度再快也只会替你公司心疼宝贵的计算资源。建议记录每次实验,实验分析至少回答这三个问题:为什么要实验?结论是什么?下一步怎么实验?</p>
</blockquote>
<blockquote>
<p>超参调节:超参调节是各位调参工程师的日常了,推荐一篇文本分类实践的论文 A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification,里面贴了一些超参的对比实验,如果你刚开始启动文本分析任务,不妨按文章的结果设置超参,怎么最快的得到超参调节其实是一个非常重要的问题,可以读读 萧瑟的这篇文章 深度学习网络调参技巧 - 知乎专栏。</p>
</blockquote>
<blockquote>
<p>一定要用 dropout:有两种情况可以不用:数据量特别小,或者你用了更好的正则方法,比如bn。实际中我们尝试了不同参数的dropout,最好的还是0.5,所以如果你的计算资源很有限,默认0.5是一个很好的选择。</p>
</blockquote>
<blockquote>
<p>Fine-tuning 是必选的:上文聊到了,如果只是使用word2vec训练的词向量作为特征表示,我赌你一定会损失很大的效果。</p>
</blockquote>
<blockquote>
<p>未必一定要 softmax loss: 这取决与你的数据,如果你的任务是多个类别间非互斥,可以试试着训练多个二分类器,也就是把问题定义为multi lable 而非 multi class,我们调整后准确率还是增加了>1%。</p>
</blockquote>
<blockquote>
<p>类目不均衡问题:基本是一个在很多场景都验证过的结论:如果你的loss被一部分类别dominate,对总体而言大多是负向的。建议可以尝试类似 booststrap 方法调整 loss 中样本权重方式解决。</p>
</blockquote>
<blockquote>
<p>避免训练震荡:默认一定要增加随机采样因素尽可能使得数据分布iid,默认shuffle机制能使得训练结果更稳定。如果训练模型仍然很震荡,可以考虑调整学习率或 mini_batch_size。</p>
</blockquote>
<blockquote>
<p>没有收敛前不要过早的下结论:玩到最后的才是玩的最好的,特别是一些新的角度的测试,不要轻易否定,至少要等到收敛吧。</p>
</blockquote>
理解Map Reduce
2018-12-20T00:00:00+08:00
https://www.piginzoo.com/tech/2018/12/20/map-reduce
<h1 id="孙剑的文章">孙剑的文章</h1>
<p>看了58同城的架构师孙剑的关于map-reduce的小文,写的很好,喜欢这种简短又能把核心点说清的文章,把核心点摘出来,以备自己快速回忆:</p>
<ul>
<li><a href="https://mp.weixin.qq.com/s/O-9msY6FpCseo7PgMPYEqg">https://mp.weixin.qq.com/s/O-9msY6FpCseo7PgMPYEqg</a></li>
<li><a href="https://mp.weixin.qq.com/s/D6dc3nX_3bQc0kFiH-7shA">https://mp.weixin.qq.com/s/D6dc3nX_3bQc0kFiH-7shA</a></li>
</ul>
<p>两篇小文很赞,一定耐心读一遍。</p>
<h2 id="一览图">一览图</h2>
<p><img src="/images/20190213/1550063275752.png" alt="" class="myimg" /></p>
<ul>
<li>首先是mapper把一个文件从这台机器上load起来,mapper中就会产生这个MR中最核心的“key”,比如按照字符统计的例子里,那些字符就是核心的key</li>
<li>mapper那台机器上,可能会运行个“合并函数”,用于把a的结果合并一下,没啥,就是为了提高效率</li>
<li>然后才是最重要的“分区函数”,这个分区函数运行在哪里?作者没提,我觉得应该还是在mapper的那台机器上,为什呢这么推测呢?因为,MR本质是要计算跟着数据走,能不传就不传输,那么,在没给这个计算结果找到对应的reducer之前,不能盲目的就把数据发出去,对吧?否则,发给谁,发往哪里,这个依据都没有。</li>
<li>那么就是“分区函数”,用户自己个儿写的,按照某种规则,原则啥的不说了,孙剑说的很清楚了,你不写也没事,MR会替你实现一个hash版本的</li>
<li>然后我认为,才开始传输数据,这个协调传输给那台reducer</li>
<li>一个key只会被一个reducer处理,这是一个细节,不同的reducer不可能处理同一个key</li>
<li>MR系统幂等性概念很重要,不管哪个负责map的worker执行的结果,一定是不变的,产出的R个本地输出文件内容也一定是不变的
几个点还需要强调:</li>
<li>会开始在资源池中就初始化一堆的mapper和reducer,应该是有策略的,比如那些机器跑起来mapper,一台机器上跑几个mappers,reducer亦然</li>
<li>这尼玛就是一个资源池,既然是个资源池,就需要有人调度他们,那调度这事,肯定是MR系统实现的了,比如mapper应该总是问他“哥们,我这里有很多key和对应聚合出来的结果,我该发给谁啊?”,那么调度者就会跳出来,“哦!你这个这个发给这台机器的reducer,那个那个发给那台机器的reducer”。</li>
</ul>
<p><img src="/images/20190213/1550063555521.png" alt="" class="myimg" /></p>
<ul>
<li>这图,我理解,就是发生在一台机器上的</li>
<li>开始在这个node上load起来文件,分给worker去mapper</li>
<li>mapper把中间结果存到磁盘上(落盘)</li>
<li>reducer再把结果合并到输出文件,等着master去进一步调度</li>
<li>这之后,肯定还会有跨机器的reducer,但是这张图,仅仅是为了讲清楚一台机器上发生的事情</li>
</ul>
<p>我的理解,不对的话,请留言指出。</p>
<h2 id="摘录">摘录</h2>
<p>摘录一下他的一些精华字眼,您自己个儿去体会,我为何要摘录这些:</p>
<pre><code>不妨假设,用户设置了M个map节点,R个reduce节点;例如:M=500,R=200
(1) 在集群中创建大量可执行实例副本(fork);
(2) 这些副本中有一个master,其他均为worker,任务的分配由master完成, M个map实例和R个reduce实例由worker完成;
(3) 将输入数据分成M份,然后被分配到map任务的worker,从其中一份读取输入数据,执行用户的map函数处理,并在本地内存生成临时数据;
(4) 本地内存临时数据,通过分区函数,被分成R份,周期性的写到本地磁盘,由master调度,传给被分配到reduce任务的worker;
(5) 负责reduce任务的worker,从远程读取多个map输出的数据,执行用户的reduce函数处理,处理结果写入输出文件;
</code></pre>
<p>疑问:3中说的数据,如果启动mapper worker不在数据所在的机器上怎么办?难道需要传输?我理解,应该是就这数据来生成mapper的实例更高效。不过,细想一下,也不尽然,毕竟开始任务之前,你不知道你的任务会涉及到哪些数据,看来,mapper阶段是不可避免是要传输数据的把?疑惑?</p>
<p>这事,我再开个脑洞,就是不传数据,而是把任务传过去,吧mapper程序传过去,传到数据所在的节点上,让此节点上的workder承接这个mapper。这里,肯定是可以通过HDFS,全局查到数据在哪里的,在哪个node上,哪个block里,然后,给这些节点把程序发过去不就得了。不知道,人家是不是这么实现的。</p>
<p>我前面理解中说过的“调度”,这里得到验证,就是他说的<code>副本中有一个master</code>,他就是任务调度节点嘛。</p>
<pre><code>(1) master:单点master会存储一些元数据,监控所有map与reduce的状态,记录哪个数据要给哪个map,哪个数据要给哪个reduce,掌控全局视野,做中控;
画外音:是不是和GFS的master非常像?
(2) worker:多个worker进行业务逻辑处理,具体一个worker是用来执行map还是reduce,是由master调度的;
画外音:是不是和工作线程池非常像?这里的worker是分布在多台机器上的而已。
</code></pre>
<p>worker就是个干活的,他既可以看mapper的事儿,也可以干reducer的事儿。</p>
<h1 id="赛赛的讲解">赛赛的讲解</h1>
<p>昨天,赛赛给我们又讲了讲,理解更深入了:</p>
<h2 id="mapper---reducer">mapper - reducer</h2>
<p><img src="/images/20191123/1574481512390.jpg" alt="" class="myimg" /></p>
<p>我们作为普通开发者,完成的只是mapping和reducing,最复杂的是shuffling过程(后面会讲)。</p>
<p>这个过程有4个参与方,如果非要细化的话:</p>
<ul>
<li>最开始的分发方:他其实设计原则就是要粗暴、不考虑啥业务,也不考虑什么key映射,就是粗暴的按照128M的一个桶,把数据分配出去。(为何是128M,赛赛说是为了和HDFS的桶大小保持一致而已),他其实最重要是按照mapper数量挨个分发</li>
<li>mapper方:他就是干活的人,他会按照key把这个数据发出去,可以看到,key的映射方式是框架负责的,你mapper无权决定,只要处理就好,干活就好。我问赛塞,为何不做个合并啊,把同样的key先合计一下,再emit?他回答,好问题。其实,是有这个机制的,但是是可选的。这玩意叫combinator,其本质就是个本地版的reducer而已,恩,说的好有道理。恒总说,一个词就直接吐出去,给reducer,这才是mapper的本真面目,说的也非常有道理。
<pre><code> map(string key,string value){
for echo word w in value:
emit(w,1)
}
</code></pre>
</li>
<li>shuffle方:这玩意最难,后面会讲,干的事也最多,他其实核心干的,就是帮着把mapper后的数据,挑一个合适的reducer,给他传过去,至于怎么传,我们后面说。</li>
<li>reducer方:这个就是合并了,把某些词,注意,是有些词,但是他不知道是哪些词,拿来算个合计。至于是哪些词分配给他来统计,是由map-reduce框架来做的。他跟mapper一样,只管统计就好,然后他统计好,再发出去,至于合并后的key对应的数在哪里,我想,应该是框架直接帮着落盘到HDFS里了吧。</li>
</ul>
<h2 id="shuffle的细节">shuffle的细节</h2>
<p><img src="/images/20191123/1574481555403.jpg" alt="" class="myimg" />
<img src="/images/20191123/1574481576193.jpg" alt="" class="myimg" /></p>
<p>两种图差不多,都是在讲shuffle的细节。</p>
<h3 id="shuffle是什么">shuffle是什么?</h3>
<p>shuffle是个概念,是由map-reduce框架干的,主要是帮着把mapper生成的数据分发给reducer去干活。</p>
<h3 id="shuffle发生在哪里">shuffle发生在哪里?</h3>
<p>shuffle发起,是由master节点发动的;但是,他会在mapper所在的working node上发生,也会在reducer的机器上发生。</p>
<h3 id="在mapper机器上的shuffle">在mapper机器上的shuffle</h3>
<p>在mapper机器上,每个mapper算玩每个key的数据,会被写到一个所谓的partition这种,每个partition对应一个reducer,理论上,一个任务对应的reducer多少个,就应该多少个partiton队列,为了提高速度,正在内存里有个缓存队列,到80%满的时候,就把队列落盘到文件中。注意!是本地文件。</p>
<p>这里恒总提出是hdfs中,我们否定了他的推测,原因是,性能开销太大,他的理由也对,可以选择靠近reducer的hdfs节点存,但是开销太大了,毕竟要存3份。</p>
<p>然后,这些小队列,还会再合并成一个大文件,这样做是为了减少磁盘io,提高效率。合并的时候,其实,是可选地,还可以做一次combinator的。</p>
<p>注意,这个mapper机器上的key不是很规律分的,所有的key他都有可能收到,但是当他往和reducer数量相当的partition的时候,可不是随便写的,而是根据key在做了一个hash,保证,某些key,是按照固定规则写到某个reducer对应的partition的,为何要这样?因为后续的reducer,是被挑选好,专门处理某一类key的呀。</p>
<h3 id="在reducer机器上的shuffle工作">在reducer机器上的shuffle工作</h3>
<p>好啦,reducer的机器开始拉取这些数据了。帅军说,这些mapper、reducer之间要保持联通,甚至无安全控制的,mapper提供一个http服务,让reducer们,点对点的去拉取mapper上的各个partition。</p>
<p>理论上,每个reducer服务器,都会去访问所有的mapper,因为mapper上可能保存在着所有的key们。对吧。</p>
<p>但是,reducer们,只会拉取自己感兴趣的key们,可是,他们怎么知道自己对哪些key感兴趣呢?别忘了,有大总管呢,大总管是谁?就是map-reducer框架,他是来分配在这些key们,该由哪些reducer负责归约的,对吧。</p>
<h2 id="其他">其他</h2>
<p>我们还讨论了一些问题:</p>
<ul>
<li>map-reduce是一种思想,分治的思想</li>
<li>map-reduce主要是为了解决,分布式计算的问题的,可以把各个计算任务拆分到很多机器上,但是就涉及到如何分配数据,如何归约数据,这个就是split和shuffle干的事了</li>
<li>mapper之后,是落到本地磁盘上的</li>
<li>reducer由大总管map-reduce框架指挥下去拉取指定的key们对应的数据</li>
<li>这是一个通用框架,google的map-reduce其实就是一个还不算太重的框架,可以考虑单独拿出来用</li>
<li>但是谷歌的map-reduce框架,是基于磁盘导致性能低下,以及只能解决离线计算,所以才会有基于内存的spark,和基于流式数据计算的storm、flink们诞生</li>
</ul>
<h2 id="ppt下载">ppt下载</h2>
<p><a href="/assets/mapreduce.pdf">赛赛的ppt</a></p>
EM算法的一些理解
2018-12-20T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/20/em
<h1 id="em算法的一些思考">EM算法的一些思考</h1>
<p>EM 算法是 Dempster,Laind,Rubin 于 1977 年提出的求参数极大似然估计的一种方法。EM算法其实更准确说是一个方法论,是一种计算的方法。卧槽,这个算法都41年了!学机器学习把,多复古,多有生命力啊,顺道吐槽一下。</p>
<p>EM用于啥情况啥问题的解决呢?他要解决啥呢?
他要解决的就是A.隐变量存在,未知、B.参数未知,我靠,俩都未知,咋办。
比如我判断3个高斯按照某种比例分布,但是比例多少不知道,3个高斯的参数均值和方差也未知。
再比如我有3骰子,我置了第一个骰子单双号再决定置第二个骰子,比如单号置剩余的A号骰子,双号置剩余的B号骰子,最终得到一个骰子序列,而这些骰子的某个面的概率不等,让你推断第一个决定单双号的骰子单双号的概率,和后面2个骰子各个面的概率。</p>
<p>真够变态的!这些玩法!</p>
<p>两种学习方法:</p>
<ul>
<li>欧拉方法</li>
<li>高斯方法:太严格,晦涩。</li>
</ul>
<p>EM算法和GMM:</p>
<ul>
<li>EM是算法,</li>
<li>GMM是模型,实打实可以用的东西,是算法推导的结果。</li>
</ul>
<p>唉,有时候,把问题说清楚、能提出合适的问题,本身就是一件难事。</p>
<p>EM的资料我学习过程中,使用了</p>
<ul>
<li>自然语言处理-序列模型-小象学院-史老师 CRF部分提到EM</li>
<li>李航老师的《统计学习方法》第9章</li>
<li>《PRML》的第9.4节</li>
<li><a href="https://www.bilibili.com/video/av12561021/?p=1">徐亦达|概率机器学习|高阶讲解</a></li>
<li><a href="https://www.bilibili.com/video/av22660033/?p=19">邹博的小象的课 EM</a></li>
<li><a href="https://www.bilibili.com/video/av24989947">一个老外讲的,很清晰</a></li>
<li>网上的不错的文章
<ul>
<li><a href="http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html">EM算法 The EM Algorithm</a></li>
<li><a href="http://www.hankcs.com/ml/em-algorithm-and-its-generalization.html">EM算法及其推广</a></li>
<li><a href="http://blog.csdn.net/xueyingxue001/article/details/52020673">EM算法再次总结</a></li>
<li><a href="http://blog.csdn.net/zouxy09/article/details/8537620">从最大似然到EM算法浅解</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/25273161">知乎:机器学习系列-EM算法</a></li>
</ul>
</li>
</ul>
<p>但是,还是稀里糊涂的,之前听过,想过,都半截放弃掉了,这次痛下决心,一定搞清楚。</p>
<p>先说说对EM的理解:</p>
<p>无论是李航的推导,还是AndrewNG的推导,都是在构建一个对数似然函数,来求$\theta$,但是有隐变量$Z$的存在,所以,就利用Jensen不等式,生生构建出一个函数来,这个函数是对数似然函数的下界,大白话就是总是比似然函数要低。</p>
<p>有了这个下届函数,导出Q函数,Q函数和下届函数等价,这个Q函数是包含了未知参数$\theta$的,然后假装这个$\theta$已知(上来胡蒙一个,之后就靠EM的M阶段推导出来了),然后得到一个关于一个$\mu$或者$\gamma$。$\mu$和$\gamma$的推导定义,参考李航书$P_{156}$和$P_{165}$</p>
<p>$\mu$或者$\gamma$都是期望值,啥叫期望值,是统计的概念,是$\sum$样本 * 概率分布的,所以每拨的样本就做一次期望计算,比如扔抛硬币那个例子里,抛了5次,其中第一次是5个上5个下,那么这次关于隐变量$\mu$期望值($\mu$)代表是隐含的A朝上的次数,再次提醒)就是</p>
<p><img src="/images/20181220/1545285549370.png" alt="" class="myimg" /></p>
<p>其实,我一直不太明白,这个$\mu$或者$\gamma$是怎么推出来的,上面说到的李航书里给出了,但是没有说为什么就是这个式子?!我觉得李航根本没给出这个东西的说明,而且邹博的讲解里也没给出,唯一见到的就是这篇文章中,说“因为他是伯努利分布….”,所以就balabala:</p>
<p><img src="/images/20181220/1545285588444.png" alt="" class="myimg" /></p>
<p>另外,在看看正太分布那个例子中的对于$\gamma$的概率计算,也是大概这个样子,</p>
<p><img src="/images/20181220/1545285613847.png" alt="" class="myimg" /></p>
<p>看到了把,分子是这次(第j个样本)的来自某个(第k个分布)的概率,或者第j个样本,来自A钱币朝上的概率。分母呢,是一个归一化的汇总,比如所有的来自各个分布概率的汇总,或者是来自A朝上和朝下的概率的汇总。挺像的吧,感觉就是个归一化似得,但是我是觉得,这个绝不是偶然,一定是某种推导的结果,但是没有找到任何文献或者文章描述这个细节???</p>
<h2 id="下届函数">下届函数</h2>
<p>这个函数,李航的推导的是$B(\theta,\theta^{(i)})$ ,还是AndrewNG的推导的$J(Q,\theta)$,</p>
<p><img src="/images/20181220/1545285638804.png" alt="" class="myimg" /></p>
<h2 id="q函数">Q函数</h2>
<p><code>Q函数的引入</code></p>
<p>李航老师的书中,然后,推导出,假设当前$\theta_i$已知,推导出让这个下界函数(B函数)取得最大值的时候,下一个$\theta_{i+1}$该取得值。推导过程中 ,就推出了Q函数,</p>
<p><img src="/images/20181220/1545285670663.png" alt="" class="myimg" /></p>
<blockquote>
<p>定义9.1:(Q函数)完全数据的对数似然函数$logP(Y,Z|\theta)$, 关于在给定的观测数据Y和当前参数$\theta^{(i)}$下,对未观测数据$Z$的条件概率分布$P(Z|Y,\theta^{(i)})$的<strong>期望</strong>,称为Q函数。
(《统计学习方法》$P_{158}$页)
这个定义狠诡异,是$logP(Y,Z|\theta)$</p>
</blockquote>
<p>AndrewNG的Q函数是生凑出来的,它表示Z在假设$\theta$给定后,Z的概率分布函数。(这个和李航老师的Z的分布的期望值的那个定义,还是有很大的差别的)</p>
<p><img src="/images/20181220/1545285709579.png" alt="" class="myimg" /></p>
<p>但是,殊途同归,最终都推导出<strong><code>Q函数</code></strong>,Q函数是EM算法的核心!</p>
<p>两者区别是,李航的Q函数是一个关于Z的期望,而AndrewNG的是一个概率分布。
不过无所谓,都可以用来推导后续的东西,为什么叫后续推导呢?因为针对不同的分布,推倒的方式就是不同的了。
比如Z的分布和Y的分布都是伯努利分布,那对应的这个文章中<a href="https://zhuanlan.zhihu.com/p/25273161">抛硬币的例子</a>,如果是Z是一个多项分布,Y是一个正态分布,那么就对应这个文章中的<a href="http://blog.csdn.net/xueyingxue001/article/details/52020673">男女生分布的例子</a>。</p>
<p><code>引自《PRML》</code></p>
<p><img src="/images/20181220/1545285731291.png" alt="" class="myimg" /></p>
<blockquote>
<p>更⼩的下届,它的值等于在旧处的对数似然函数值,⽤蓝⾊曲线表⽰。注意,下界与对数似然函数在旧处以切线的⽅式连接,因此两条曲线的梯度相同。这个界是⼀个凹函数,对于指数族分布的混合分布来说,有唯⼀的最⼤值。在M步骤中,下界被最⼤化,得到了新的值新,这个值给出了⽐旧处更⼤的对数似然函数值。接下来的<strong>E步骤构建了⼀个新的下界,它在新处与对数似然函数切线连接</strong>,⽤绿⾊曲线表⽰。</p>
</blockquote>
<p>这个绿线、蓝线就是李航老师讲的$B(\theta,\theta^{(i)})$函数(《统计学习方法》$P_{159}$页)</p>
<p><img src="/images/20181220/1545285756619.png" alt="" class="myimg" /></p>
<p>上面摘抄了2本书的这个逼近曲线,大致就是说,$L(\theta)$咱不是不好算么,那么我就用$Q(\theta,\theta_i)$逼近,先找个她们俩交界的时候的那个$\theta_i$(这个真心不理解?!为何在这个点,他就是个相交并且是下届呢?!),然后,这个时候,确定了这个Q函数,这个Q函数包含了$\theta$变量,是一个关于$\theta$的函数,然后,对这个函数求最大化,从而得到一个新的最大化Q时候的$\theta$的表达式,这个时候,恰好是可以通过样例数据可以算出来,从而,确定了一组新的$\theta$,然后交替进行,得到最逼近的$L(\theta)$的$\theta$。停止条件,就是$\theta$的这次和上次的距离尽量短。$|\theta_t - \theta_{t+1}|<\epsilon$,或者是Q两次具体某个阈值。</p>
<h2 id="再叨叨几句">再叨叨几句</h2>
<p>EM适合模型中,包含隐含变量Z,这样不太好用样本X去直接似然估计$\theta$的情况,这个时候就利用数学推导上的一个Q函数来逼近L($\theta$)的极值的时候的$\theta$。</p>
<p>具体做的时候,先胡乱初始化$\theta$,然后带入Q函数,得到一个关于隐变量Z的式子,然后对Q函数进行$\theta$的偏导求取,得到新的$\theta$,这个新$\theta$是关于隐变量Z概率分布函数的函数,这个时候,通过数据+上轮的$\theta$可以求出这个Z的概率分布值,有了这个Z概率分布值,就可以退出下一轮迭代用的$\theta$,周而复始。</p>
<p>直到达到某个阈值,停止,酱紫。</p>
<p>上面提到的$\theta$是隐变量的函数,是靠对Q函数求$\theta$偏导得到的式子,具体做某种EM算法推导的时候,具体问题具体写式子推导。</p>
从Word2Vec到BERT
2018-12-18T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/18/from-word2vec-to-bert
<h1 id="从word-embedding到bert模型">从Word Embedding到Bert模型</h1>
<p>这篇文档主要是受<a href="http://www.zhuanzhi.ai/document/908b7558689d219ea456210f9aedb9f3">从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史</a>启发,来梳理这条路线上涉及到的word2vec,glove,attention,transformer,elmo,gpt,birt等一系列概念。</p>
<p><strong>本人也是NLP小白,把自己的学习心得记录下来,方便自己回顾,如有错误之处,请下方留言告知,也欢迎讨论留言。</strong></p>
<p>这篇文章的一些摘要:</p>
<pre><code> Word Embedding矩阵Q其实就是网络Onehot层到embedding层映射的网络参数矩阵。所以你看到了,使用Word Embedding等价于什么?等价于把Onehot层到embedding层的网络用预训练好的参数矩阵Q初始化了。这跟前面讲的图像领域的低层预训练过程其实是一样的,区别无非Word Embedding只能初始化第一层网络参数,再高层的参数就无能为力了。下游NLP任务在使用Word Embedding的时候也类似图像有两种做法,一种是Frozen,就是Word Embedding那层网络参数固定不动;另外一种是Fine-Tuning,就是Word Embedding这层参数使用新的训练集合训练也需要跟着训练过程更新掉。
Word Embedding头上笼罩了好几年的乌云是什么?是多义词问题。word embedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。
对近义词,ELMO提供了一种简洁优雅的解决方案,ELMO是“Embedding from Language Models”,ELMO的本质思想是:我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。
https://www.jianshu.com/p/a6bc14323d77
Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,当然另外一点是语言模型的数据规模要比GPT大。
Bert本身在模型和方法角度有什么创新呢?就是论文中指出的Masked 语言模型和Next Sentence Prediction。Masked就是,随机扔掉15%的词让丫预测;NextSentence是让他预测后一句(随机找的)是不是真的是第一句的后续(因为有真实的后一句的对比)。
Bert的输入部分,也算是有些特色。它的输入部分是个线性序列,两个句子通过分隔符分割,最前面和最后增加两个标识符号。每个单词有三个embedding:位置信息embedding,这是因为NLP中单词顺序是很重要的特征,需要在这里对位置信息进行编码;单词embedding,这个就是我们之前一直提到的单词embedding;第三个是句子embedding,因为前面提到训练数据都是由两个句子构成的,那么每个句子有个句子整体的embedding项对应给每个单词。把单词对应的三个embedding叠加,就形成了Bert的输入。
</code></pre>
<p>$\color{red}{}$</p>
<h1 id="attention">Attention</h1>
<p>之前的就写过一篇关于word2vec的<a href="/machine-learning/2018/01/20/rnn-lstm-attention">文章</a>,提到过attention,这里需要在复习一二:</p>
<pre><code>Attentin机制的发家史
Attention机制最早是应用于图像领域的,九几年就被提出来的思想。随着谷歌大佬的一波研究鼓捣,2014年google mind团队发表的这篇论文《Recurrent Models of Visual Attention》让其开始火了起来,他们在RNN模型上使用了attention机制来进行图像分类,然后取得了很好的性能。然后就开始一发不可收拾了。。。随后Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。接着attention机制就被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中去了,效果看样子是真的好,仿佛谁不用谁就一点都不fashion一样。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。这篇论文引起了超大的反应,本身这篇paper写的也很赞,很是让人大开眼界。因而自注意力机制也自然而然的成为了大家近期的研究热点,并在各种NLP任务上进行探索,纷纷都取得了很好的性能。
</code></pre>
<p>[引]</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/35571412">Attentin机制</a></li>
<li><a href="https://arxiv.org/abs/1409.0473">《Neural Machine Translation by Jointly Learning to Align and Translate》</a></li>
<li><a href="https://arxiv.org/abs/1406.6247">《Recurrent Models of Visual Attention》</a></li>
<li><a href="https://arxiv.org/abs/1706.03762">《Attention is all you need》</a></li>
</ul>
<p>[]<img src="/images/20181218/1545111900623.png" alt="" class="myimg" /></p>
<p><code>这张图里,得说明几点</code></p>
<ul>
<li>就是attention是每一次(啥叫每一次,就是没预测一个新的$y_i$)都需要生成一次</li>
<li>怎么生成呢?
<ul>
<li>先是$s_{i-1}$和$h_j$搞一下,$s_{i-1}$是$y_{i-1}$的隐含层输出啊,$h_j$是encoder中的某个隐含层输出啊,呵呵,俩隐含层输出搅到一起</li>
<li>然后每个$h_j$都和这个$s_{i-1}$搞一下,然后归一化成softmax:$\alpha_{ij}$,注意一下,下标$i$ 是不变的,$i$是decoder的第几步</li>
<li>然后,用每个j的softmax值$\alpha_{ij}$,再乘以$h_j$,得到这个$\color{red}{注意力}$$c_i$</li>
<li>最后,把这个$c_i$ + $y_{i-1}$ + $s_{i-1}$,三个一搞,搞出最后的$y_i$,论文里面提到了还有一步,这里写出来,$s_i=f(s_{i-1},y_{i-1},ci)$</li>
<li>最最后,我们要的就是$y_i = p( y_i | y_1, … , y_{i-1} , s_i )$</li>
</ul>
</li>
</ul>
<p>总结一下,就是,decoder的每一步,都要全面扫描所有的输入(encoder)中的每个元素,来得到一个注意力值,参与最后的decoder结果判定。</p>
<p>这里要复习一下attention,主要是,接下去讨论的transformer中的attention,被作者做了一个变形,引入了K (( Key)) ,Q ((Query)),V((Value))的概念,很晕,这里把原有的attention,朴素的讲解过一遍,方便后面最对照。</p>
<h1 id="transformer">Transformer</h1>
<p>好,说transformer了,第一次是由谷歌6位大神在经典文章<a href="https://arxiv.org/abs/1706.03762">《Attention is all you need》</a>提出的概念。</p>
<p>下面还有些中文小文,供参考:</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/p/34781297">https://zhuanlan.zhihu.com/p/34781297</a></li>
<li><a href="https://www.jianshu.com/p/3f2d4bc126e6">https://www.jianshu.com/p/3f2d4bc126e6</a></li>
<li><a href="http://nlp.seas.harvard.edu/2018/04/03/attention.html">http://nlp.seas.harvard.edu/…/attention.html</a></li>
<li><a href="https://jalammar.github.io/illustrated-transformer/">https://jalammar.github.io/illustrated-transformer/</a></li>
<li><a href="https://www.jianshu.com/p/3f2d4bc126e6">https://www.jianshu.com/p/3f2d4bc126e6</a></li>
<li><a href="https://jalammar.github.io/illustrated-transformer/">https://jalammar.github.io/illustrated-transformer/</a> 陈楠推荐的一篇e文的</li>
<li><a href="http://xiaosheng.me/2018/01/13/article121/">http://xiaosheng.me/2018/01/13/article121/</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/47812375">https://zhuanlan.zhihu.com/p/47812375</a> 知乎小文,带代码实现
都不如这篇讲的最好:</li>
</ul>
<p><a href="https://kexue.fm/archives/4765">https://kexue.fm/archives/4765</a></p>
<p>卧槽!这篇讲的真好,讲出了很多insight:</p>
<ul>
<li>RNN无法很好地学习到全局的结构信息,因为它本质是一个马尔科夫决策过程。</li>
<li>所谓“多头”(Multi-Head),就是只多做几次同样的事情(参数不共享),然后把结果拼接。</li>
<li>如果做阅读理解的话,Q可以是篇章的词向量序列,取K=V为问题的词向量序列,那么输出就是所谓的Aligned Question Embedding。</li>
<li>在Google的论文中,大部分的Attention都是Self Attention,即“自注意力”,或者叫内部注意力。</li>
<li>所谓Self Attention,其实就是Attention(X,X,X)Attention(X,X,X),XX就是前面说的输入序列。也就是说,在序列内部做Attention,寻找序列内部的联系。</li>
<li>它表明了内部注意力在机器翻译(甚至是一般的Seq2Seq任务)的序列编码上是相当重要的,而之前关于Seq2Seq的研究基本都只是把注意力机制用在解码端</li>
<li>Self-Attention模型并不能捕捉序列的顺序!换句话说,如果将K,V按行打乱顺序(相当于句子中的词序打乱),那么Attention的结果还是一样的。这就表明了,到目前为止,Attention模型顶多是一个非常精妙的“词袋模型”而已。(什么叫打乱顺序??结果一样呢??没理解)</li>
<li>Google再祭出了一招——Position Embedding,也就是“位置向量”,将每个位置编号,然后每个编号对应一个向量,通过结合位置向量和词向量,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词了</li>
<li>结合位置向量和词向量有几个可选方案,可以把它们拼接起来作为一个新向量,也可以把位置向量定义为跟词向量一样大小,然后两者加起来。FaceBook的论文和Google论文中用的都是后者。直觉上相加会导致信息损失,似乎不可取,但Google的成果说明相加也是很好的方案。看来我理解还不够深刻。</li>
<li>无法对位置信息进行很好地建模,这是硬伤。尽管可以引入Position Embedding,但我认为这只是一个缓解方案,并没有根本解决问题。举个例子,用这种纯Attention机制训练一个文本分类模型或者是机器翻译模型,效果应该都还不错,但是用来训练一个序列标注模型(分词、实体识别等),效果就不怎么好了。那为什么在机器翻译任务上好?我觉得原因是机器翻译这个任务并不特别强调语序</li>
</ul>
<p>视频讲解的,好像国内还没有,只有油管上有个<a href="https://www.youtube.com/watch?v=iDulhoQ2pro">https://www.youtube.com/watch?v=iDulhoQ2pro</a>,B站上也是转的这个,你就不用遍大街再找了,不难,听一遍大致就明白了。</p>
<p><img src="/images/20181218/1545116998474.png" alt="" class="myimg" /></p>
<ul>
<li>典型的翻译场景里,原文(英文)是左面的输入(input embedding),而翻译出来的(中文)是右面(outputs embedding)的输入</li>
<li>左面input和右面output的Multihead-Attention都是self-attention,也就是K、V、Q都是一样的,而右面的output的第二个attention的输入的V就是第一个output输出的向量了</li>
<li>我理解,输入就不变了,就是开始整句英文的输入。而输出是每次输入(好别扭,就是右侧的输入),每次是变得,即每次都是翻译出来的中文的所有的词的向量。</li>
<li>细品一下,和上面的attention的不同处。每次decoder产生新的词的时候,输入的encoder的$c_i$,是一个固定的东西了;之前的attention,每次还是变的。我理解,原因是,encoder通过positonal encoding和multi-head来充分压榨出这个句子的表示了。positional不用说了,是位置,而multi-head,则是用多个向量来表达一句话,比如8维,就相当于以8个视角来看待这句话,每个视角是不一样的,充分的挖掘这个句子的含义。</li>
</ul>
<h4 id="变量说明">变量说明</h4>
<p>Attention公式:$Attention(q_t,K,V) = \sum_{s=1}^m \frac{1}{Z}\exp\left(\frac{\langle q_t, k_s\rangle}{\sqrt{d_k}}\right)v_s$</p>
<p>每个句子都对应的是一个矩阵$X=(x1,x2,…,xt)$,$x_i$都代表着第$i$个词的词向量(行向量),维度为$d$维,故 $X\in\mathbb{R}^{n×d}$</p>
<p>$\boldsymbol{Q}\in\mathbb{R}^{n\times d_k}, \boldsymbol{K}\in\mathbb{R}^{m\times d_k}, \boldsymbol{V}\in\mathbb{R}^{m\times d_v}$
$d_k$都是词向量的维度,而Q中的$n$和K、V中的$m$则是对应的词的数量,比如一句话的长度。而在self-attention的话,就是输入句子的词的数量。</p>
<p>所以,所以,Attention输出的是,Attention层,将$n×d_k$的序列Q编码成了一个新的$n×d_v$的序列。</p>
<p>K/V是一样长度($m$)的,而Q是另外一个长度($n$)的,K/V你可以理解为文章,Q你可以理解为问题(阅读理解场景),然后得到了和Q长度一样长$n$的一个$d_v$维度的向量数组,就是结果($nxd_v$)。</p>
<p>这里面丝毫没提及参数矩阵的事情,令人费解,看了原始论文,也没提。</p>
<p>不过,看多头(multi-head)的时候,倒是说到了参数:</p>
<p>多头Head公式:$head_i = Attention(\boldsymbol{Q}W_i^Q,\boldsymbol{K}W_i^K,\boldsymbol{V}W_i^V)$</p>
<p>你看,参数来了:$W_i^Q\in\mathbb{R}^{d_k\times \tilde{d_k}}, W_i^K\in\mathbb{R}^{d_k\times \tilde{d_k}}, W_i^V\in\mathbb{R}^{d_v\times \tilde{d_v}}$</p>
<p>然后,多头把每一个(h个)attention concat到一起:</p>
<p>$MultiHead(\boldsymbol{Q},\boldsymbol{K},\boldsymbol{V}) = Concat(head_1,…,head_h)$</p>
<p>然后contact后的这个$n ×(h×d_v)$的矩阵,还要乘以一个 $(h×d_v) x d_v$的$W$,最终得到一个$n x d_v$的向量。</p>
<p>所有,多头出来的结果是,最后得到一个$n ×(h×d_v)$的一个矩阵,n是Query的长度,$d_v$是Value的维度,h是多头的个数。
所以,这个时候,一个多头的参数个数是,$h \times d_k \times d_k + h \times d_k \times d_k + h \times d_v \times d_v + (h×d_v) x d_v$个参数。</p>
<p>加入$d_k=d_v=128,h=8$,一个attention的参数个数就是524288个参数。</p>
<h4 id="看这篇"><strong>看这篇</strong></h4>
<p>这里,attention变成了这个样子:</p>
<p>最左面是一个基础的attention,然后聚合起来就成了Multihead Attention了,然后这个 Multihead Attention才组成了Transformer。</p>
<p><img src="/images/20181218/1545118005270.png" alt="" width="100%" /></p>
<p>陈楠给的这篇讲Transformer的真好,虽然是e文的,讲的恨透:
<a href="https://jalammar.github.io/illustrated-transformer/" color="red">https://jalammar.github.io/illustrated-transformer/</a></p>
<p><br /></p>
<p><code>先整体看看:</code></p>
<p>文中的这两张图真的很帅,可耻地盗链了:</p>
<p><img src="https://jalammar.github.io/images/t/transformer_decoding_1.gif" alt="" width="100%" /></p>
<hr />
<p><img src="https://jalammar.github.io/images/t/transformer_decoding_2.gif" alt="" width="100%" /></p>
<p>一图,还TM的是动图,一言不合就上图,胜千言啊~~~</p>
<ul>
<li>看,貌似输入算一遍之后,就再也不用了,不像之前的attention,还要不断地使用$s_{i-1}$,[ <img src="/images/20181218/1545132114347.png" alt="" /> ],看,每次算注意力,还都要扯上decoder的内容。现在呢?一次算完encoder内容,形成K、V。然后就不用折腾了,以后的decoder都用这个K、V</li>
</ul>
<p><br /></p>
<p><code>接下来,详细地捋一遍整个过程,大量地盗版这篇文章的图了要,惭愧</code></p>
<p>1.先说清楚transformer的本质,就是一个堆叠的编码器和解码器</p>
<p><img src="https://jalammar.github.io/images/t/The_transformer_encoder_decoder_stack.png" alt="" class="myimg" /></p>
<p>2.在具体点,encoder里面是个self-attention结构+前向网络,decoder是self-attention结构 + encoder-decoder-attention前向网络。</p>
<p><img src="https://jalammar.github.io/images/t/Transformer_decoder.png" alt="" class="myimg" /></p>
<p>3.然后这个self-attention结构中,运算细节如下图。x1会对应三个矩阵$W^q,W^k,W^v$,相乘得到q,k,v。你看,q、k、v都是来自于x1,而x1则是单词的embeding表示。(这里我有个问题,这个单词的embeding表示可以直接用词向量么?还是需要自己通过这个网络进行训练)</p>
<p><img src="https://jalammar.github.io/images/t/self-attention-output.png" alt="" class="myimg" /></p>
<p>4.转成张量形式,就是如下图。这个时候,要批量输入了,因为一句话会有多个词嘛。(突然那种冒出batch,那如果是batch个句子怎么办?一个词是一个512维度向量,一个句子大概有10个词,那就是100x512,是一个二维的样子了。如果再加上多个句子,就是一个立方体了,哈。那也会遇到bucket的问题的呀???脑海中浮现出多个问题,不过这些是细节,有时间再烧脑)</p>
<p><img src="/images/20181219/1545200303657.png" alt="" /></p>
<p><img src="https://jalammar.github.io/images/t/self-attention-matrix-calculation.png" alt="" width="45%" />
<img src="https://jalammar.github.io/images/t/self-attention-matrix-calculation-2.png" alt="" width="50%" /></p>
<p>5.在回顾一下,从x输入,经过各自矩阵运算,得到k/q/v,然后k/q/v经过softmax运算后,再经过多头运算,形成8个$z_i$。最后,8个$z_i$concat,乘以一个$W^o$,最终得到一个向量z。就是这个self-transformer单元的输出。如下图:</p>
<p><img src="https://jalammar.github.io/images/t/transformer_multi-headed_self-attention-recap.png" alt="" width="80%" /></p>
<p>这张图片显示了不同的多头中的每一头,对输入encoder的时候,对encoder中某个字“it”的注意力情况:</p>
<p><img src="https://jalammar.github.io/images/t/transformer_self-attention_visualization_3.png" alt="" class="myimg" /></p>
<p>6.好,最后把encoder,decoder的堆叠形象的画出来,总览图看一下:</p>
<p><img src="https://jalammar.github.io/images/t/transformer_resideual_layer_norm_3.png" alt="" class="myimg" /></p>
<p>问题:beam search的时候,输入下一个的$y_i$应该用哪一个,是beam search出来的那个?还是概率最大的那个?</p>
<h4 id="再看篇中文的讲transformer的"><strong>再看篇中文的,讲transformer的</strong></h4>
<p>这篇讲的不错,可以再过一遍<a href="https://www.jianshu.com/p/ef41302edeef">https://www.jianshu.com/p/ef41302edeef</a></p>
<ul>
<li>论文里都是6个堆叠,也就说,6个encoder,6个decoder。</li>
</ul>
<pre><code>这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。 比如训练时, 第一个单词是不能参考第二个单词的生成结果的。 Masking就会把这个信息变成0, 用来保证预测位置 i 的信息只能基于比 i 小的输出。
</code></pre>
<ul>
<li>这个是说,那个特殊的“masked multi-head attention”,就是只能参考之前的位置的预测的结果。</li>
</ul>
<pre><code>举个例子, 比如 张量(tensor)a 是一个四维矩阵,维度是[3,4,5,6], 张量 b 也是一个四维矩阵, 维度是[5,4,6,3], 那么 dot(a,b) 的维度就是 [3,4,5,5,4,3].
</code></pre>
<ul>
<li>这个真心没明白,点乘不是个变标量,衡量相似度的操作么?那怎么从4层的张量变成了6层的张量了呢?不明白。。。</li>
</ul>
<p><img src="https://upload-images.jianshu.io/upload_images/12877808-21863a15ddfed30d.png!thumbnail?imageMogr2/auto-orient/strip%7CimageView2/2/w/884/format/webp" alt="" width="45%" />
<img src="https://upload-images.jianshu.io/upload_images/12877808-57105188ead3f2e6.png!thumbnail?imageMogr2/auto-orient/strip%7CimageView2/2/w/806/format/webp" alt="" width="45%" /></p>
<ul>
<li>这图有点意思,先说左面的,一目了然,各种attention的关注点。self-attention其实就是用自己和自己进行对焦,前面举的那个例子,“it”指代的就是自己所在这句话的哪个词,我理解,就是对这句话进行了深度解析。而encoder-decoder attention,最右侧很明显就是encoder得到的浓缩代表了输入句子的浓缩向量。</li>
<li>右图呢?是说,用CNN只能在扫到窗口内的词,而用attention可以照顾到全句,就是这个意思。
<pre><code>多头注意力机制很棒啊。 首先each head, 是可以并行计算的, 然后每个head 都有自己对应的weight, 实现不同的线性转换, 这样每个head 也就有了自己特别的表达信息。 所以Fig. 5 里的每个连接 是用彩色表示的
</code></pre>
</li>
<li>多头,可以并行算,这个很好,就喜欢并行的东西。这样,encoder的可以并行算,decoder也可以并行算,再也不用像rnn那样,必须等着前面的算完了,才能算下一个。不过,这里好像算下一个,还是得等前一个算完了才可以,我是说在decoder的时候(我的笑容戛然而止)
<img src="https://upload-images.jianshu.io/upload_images/12877808-2d01f4df4f996b8f.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/640/format/webp" alt="" width="80%" /></li>
<li>这图也太帅了把,一共6层,很明显,上面3层是3个encoder层,下面是3个decoder层</li>
<li>encoder过程中,第一层画的不好,感觉每个词的处理有先后顺序似得,其实是没有的,并行的,比如英译汉,”i love beijing”,3个词是同事灌给第一个encoder的</li>
<li>最终第三个(堆叠在最上面的)encoder输出一个 1 x 512 x 句子长度 x batch-size 的一个张量(妈蛋,真像吴恩达说的,搞清每个输出的维度真不是容易事)</li>
<li>然后decoder过程中,encoder就不工作了,每层decoder都用这个最上层encoder的输出了</li>
<li>decoder每次要吃之前decode出来的所有内容,还是英译汉,要翻译最后一个词“北京”,那decoder输入就是“我 爱”两个词(是概率分布,还是确定的词,可能还要搅和beam search,这块有点晕???)</li>
</ul>
<h1 id="sotastate-of-the-art预训练模型">SOTA(state-of-the-art)预训练模型</h1>
<p>ELMo、ULMFiT、GPT,三个过度模型,虽然是过度模型,但也都是SOTA啊,因为要迫不及待去研究BERT,回头再来补课…</p>
<p>参考:<a href="https://zhuanlan.zhihu.com/p/42618178">https://zhuanlan.zhihu.com/p/42618178</a></p>
<h1 id="bert">BERT</h1>
<p>参考</p>
<ul>
<li><a href="https://arxiv.org/abs/1810.04805v1">原始论文</a></li>
<li><a href="http://www.zhuanzhi.ai/document/e723926b9bc236ee6e636600eae5982a">谷歌BERT模型深度解析</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/46880276">最强NLP论文到底强在哪里?</a></li>
<li><a href="https://www.zhihu.com/question/298203515">如何评价 BERT 模型?</a></li>
<li><a href="http://www.52nlp.cn/bert-paper-%E8%AE%BA%E6%96%87-%E6%96%87%E7%AB%A0-%E4%BB%A3%E7%A0%81%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB">BERT相关论文、文章和代码资源汇总</a></li>
<li><a href="https://juejin.im/post/5becdc8cf265da615114501b">2018年最强自然语言模型 Google BERT 资源汇总</a></li>
<li><a href="https://www.imooc.com/article/263988">如何应用 BERT</a></li>
<li><a href="https://t.cj.sina.com.cn/articles/view/6080368657/16a6b101101900dge2">谷歌BERT模型fine-tune终极实践教程</a></li>
<li><a href="https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247493033&idx=1&sn=1ae1cd347126b10d6a857cd9bba7b601&chksm=96ea3a29a19db33f3c07723ed6e5ecbb8d2ff1b1617f1cf0d39cb3cc1e6e9c325cc29147d58d&scene=21#wechat_redirect">两行代码玩转 Google BERT 句向量词向量</a></li>
<li><a href="http://www.52nlp.cn/bert-paper-%E8%AE%BA%E6%96%87-%E6%96%87%E7%AB%A0-%E4%BB%A3%E7%A0%81%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB">一些基于BERT的实践</a></li>
</ul>
<h4 id="问题">问题:</h4>
<ul>
<li>在BERT使用attention来预测被扣掉的词,这个过程中的QKV是啥?</li>
</ul>
<h1 id="其他参考">其他参考</h1>
<ul>
<li><a href="https://mp.weixin.qq.com/s/83oOI0oJ_QN-o1LZ439UVQ">自然语言处理中的深度迁移学习——文本预训练</a></li>
</ul>
线性代数笔记
2018-12-17T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/12/17/linear-algebra
<h2 id="导言">导言</h2>
<p>线代大学时候就是噩梦,真的是学不明白,不知道行列式和矩阵,向量之间啥关系,感觉是3个独立的,又好像记得有联系。这个噩梦过去很多年后,突然发现,矩阵在机器学习里面很常用,比如PCA分析,黑森矩阵,协方差矩阵,正定啥的,一堆概念还得用线代的概念,不得不重新拾掇起来这些噩梦。</p>
<p>在B站上发现了下面的教程,好是赞噢,哥们讲的真是醍醐灌顶啊,几个小时的讲解完全秒杀几十个学时的大学时候的课程,难怪弹幕上的围观小伙伴纷纷表示,“我好像学了门假的线代”“幸好大学没有好好听线代(错过被老师虐死)”“膝盖都跪碎了”… … 。</p>
<p>把自己的心得写下来,留作自己阅读,看官如果看过这段视频,应该对以下内容很是会心;如果没有,看到也应该可以多少回忆起来一些线代噩梦;如果全无感,没关系,全都是我自己的喃喃自语。</p>
<p>B站线代神教学地址:<a href="http://www.bilibili.com/video/av6731067">http://www.bilibili.com/video/av6731067</a></p>
<h2 id="线性组合和矩阵线性变换">线性组合和矩阵、线性变换</h2>
<p>i,j都是长度为1,成为基向量,
俩个不共线的向量通过线性组合可以张成整个空间,
“线性相关”就是他可以被别人线性表达出来,一般共线(二维)或者共面(三维)的某个向量可以被其他向量线性表达出来,</p>
<p>向量空间的一组基:就是张成该空间的。</p>
<p>线性变化两个特点:</p>
<ul>
<li>1、原点不变</li>
<li>2原始网格按比例缩放保持直线不能弯曲。</li>
</ul>
<p>线性变化本质上就是把基向量i,j变化到到对应的新的点上,对应的整体坐标系发生变换。</p>
<p><img src="/images/20181217/1545024980095.png" alt="" /></p>
<p>a,c就是i(1,0)变换后的坐标,b,d就是j(0,1)变换后的坐标,
[x,y]就是原有的向量,[ax+by, cx+dy]就是变换后的向量
所以,矩阵本质是对一个变换的描述。</p>
<p><img src="/images/20181217/1545025040844.png" alt="" /></p>
<p>矩阵相乘,本质上就是复合变换,从右往左。</p>
<h2 id="行列式">行列式</h2>
<p><img src="/images/20181217/1545025092531.png" alt="" /></p>
<p>行列式本质是说,矩阵A表示的变换使得原来$i,j$围成的面积为1,变成了新变换后的基向量围成的面积是他的几倍。</p>
<p>当(二维)行列式为0时候,说明是讲整个平面压缩到了一个直线上,甚至一个点上。</p>
<p>行列式为负的时候,说明变换导致整个平面被反转了。</p>
<p>三维的时候,就是体积的缩放倍数,而正负表示$i,j,k$的顺序关系体现。</p>
<h2 id="逆秩核">逆、秩、核</h2>
<p>线性方程可以表示为,$AX=V$,其中$A$为系数,</p>
<p>这个方程的含义就是说,x向量通过$A$变换后,变成了$v$向量。</p>
<p><img src="/images/20181217/1545025120828.png" alt="" /></p>
<p>$A$变化后,在通过$A^{-1}$变换回去,就相当于又把基坐标变回了$i,j$</p>
<p>所以X求解就是$用A逆*V$:$ AX=V ==> A^-1*A*X = A^-1*X ==> I *X = A^-1*V X=A^-1 * V$</p>
<p>当然得看行列式 det(A):</p>
<p>行列式非零(就是面积不为0),有唯一向量X,通过A变换可以到V。</p>
<p>行列式非零(就是面积为0),2维空间被压缩成线,如果V在这条线上,那有无穷多解,否则无解。</p>
<p>“秩”表示变换后的维度,比如矩阵$A$把2维一不小心变换到了1维,那A的秩就是1,否则就是2。</p>
<p>核:当非满秩情况下,$A$变换压低了空间维度,一定会有一些向量被压缩到原点上,比如2维中的一条直线上的向量,或者3维上的一个平面上的向量,这些向量的总体集合称作这个矩阵A的“零空间”或者 “核”(<==???核函数跟这个有关么)</p>
<h2 id="非方阵矩阵">非方阵矩阵</h2>
<p>如果一个2维的向量,去乘以一个3行2列的矩阵,是什么含义?就是升维了,把这个2维向量转化到了3维空间,i变成了$(2,-1,2)^T$,就变成了$(0,1,1)^T$,但是,变到了3维,这些向量还是在由i/j变换后的2个基向量$[(2,-1,2),(0,1,1)]$组成的那个平面里。</p>
<p>反过来,1个3维向量乘以一个2行3列的矩阵,如何理解?那就是降维了,从3维变换到了2维空间里。</p>
<h2 id="点乘">点乘</h2>
<p><img src="/images/20181217/1545025417392.png" alt="" /></p>
<p>点乘(内积),就是一个向量在另外一个向量上的投影长度✖️另一个向量的长度,几何含义。投影到反方向延长线上,内积为负。当然也有0的时候,正交。</p>
<p>点乘看上去是两个向量之间的关系,但是可以换一个思路,就是把左面的向量看成一个变换矩阵了(不再是向量了),而右面的向量,按照变换,从给一个二维的向量,降维到第一个向量[1,-2]的对应的直线上,相当于做了一个降维。而内积就相当于,把[4,3]投影到了那个线段上后的一维向量。</p>
<p>高维的点乘,实际上还是把高维向量变换到一维空间上,比如$[2,3,-1,0] * [1,3,4,2],[2,3,-1,0]$就是告诉后面4维度的基向量中的4个值分别转化到一维上的值分别是$2,3,-1,0$。</p>
<h2 id="基变换相似">基变换、相似</h2>
<p>$A^{-1} * P * A * v = v’$</p>
<p>这个就是基变化的过程,理解为:</p>
<ul>
<li>v是jeniffer的世界里的向量,</li>
<li>A是把她的坐标变换成我们的世界的坐标,</li>
<li>P是在我们的世界做变换,</li>
</ul>
<p>$A^{-1}$是把我们的世界变换回Jeniffer的世界,</p>
<p>最终,我们得到在Jeniffer的世界里,变换后的向量坐标。</p>
<p>(这里,把A不看做是一个变换,而是一个另一个变化后的空间的基的坐标,所谓你的世界)</p>
<p>基变换的意义在于你可以在一个你不好玩得开的一个世界的变换,带回到我们熟知的世界里耍,耍好了再变换回去即可。</p>
<p>上面的式子中,设$A^{-1} * P * A = B$,也就是B矩阵就是在另外一个空间的变换,那么这种情况叫做 P ~ B,<strong>P相似与B</strong>。</p>
<h2 id="特征向量">特征向量</h2>
<p>特征向量就是做了变换后,并没有发生位移,只是在原始的方向上发生了伸缩的那些向量。伸缩的量就是特征值。</p>
<p>所以得出这个式子: $AV=\lambda *V$</p>
<p>$AV=\lambda*V$</p>
<p>$AV-\lambda*V=0$</p>
<p>$(A - \lambda*I) * V = 0$</p>
<p>把$A - \lambda*I$ 记做X的话,就变成 X*V = 0,</p>
<p>就是说V向量经过X变换后,成为了0向量,那么$|X|=0$,行列式为0啊,也就是说,X被变换成0向量了。</p>
<p>这个时候空间压缩会让行列式为0了,这样就导出计算$\lambda$值的方法,就是求行列式为零,</p>
<p>因为包含着$\lambda$为未知数,就得到了方程,解出$\lambda$就得到了特征值。</p>
<p>特征值得到后,带入。</p>
<p>特征向量可能会有多个,比如上面的例子,$\lambda$=2时候,特征向量会有无穷多个。</p>
<p>也可能不存在任何特征向量,比如就是单纯旋转,这个时候,没有哪个向量会呆着他伸缩的轨道上了。</p>
<p>在n维空间中,那单位n个单位向量能构成一个基.但,基不是唯一的,任何个数为n的线性无关向量组都能构成n维空间的一基.基向量不需要正交。</p>
<p>如果特征向量恰好可以作为一个向量空间的基,那么就可以用</p>
<p>上面中间的矩阵是一个变换,两边的矩阵A和A逆是这个夹在中间的这个矩阵的特征向量。</p>
<p>基向量逆 * 变换矩阵 * 基向量(同时也是特征向量) = 特征值的对角矩阵 , 这就是相似对角化!</p>
<p>矩阵本身的含义就是基向量变换后的坐标,</p>
<p>现在你把特征向量当做基向量,他在原空间(非特征向量为基的原来的那个空间)上的变换,这两个基就是简单地缩放(缩放比例为特征值)。</p>
<p>理解正定!!!!!!</p>
<h2 id="其他资料">其他资料</h2>
<p>下面的内容是其他学习材料中的资料,也保存下来,方便记忆和理解。</p>
<h3 id="矩阵">矩阵</h3>
<p>奇异矩阵:$|A|=0$,A为奇异矩阵</p>
<p>代数余子式:去掉指定元素所在i行,j列后的行列式的值,记做Mij</p>
<p>伴随矩阵:$A^*$,就是每个元素都是去掉这个元素所在i行,j列后的代数余子式:</p>
<p>$A_{ij}=(-1)^(i+j) *Mij$,</p>
<p>得到的这个矩阵还得转置一下,</p>
<p>$AxA*= A*xA=|A|xE$</p>
<p>初等矩阵:E经过1次变化得到的矩阵(三种,交换行;k乘以某行;k乘以某行然后加到另外一行)</p>
<p>$|A|=0$</p>
<p>矩阵行变换后,肯定有全0行,所以$|A|=0$</p>
<p>他作为齐次线性方程组组的系数矩阵的话,可以推出方程有N个非零解</p>
<p>秩$r(A)<n$, 直观上有全零行,非零行就是秩,所以不满秩</p>
<p>$|A|!=0$满秩,$r(A)=n$A可逆
叫做非奇异矩阵</p>
<p>A的各行、各列组成的向量组线性无关
$Ax=4$,只有零解 ????这个需要论证
$Ax=B$,有唯一解
A与E等价</p>
<ul>
<li>矩阵相似 $P^{-1}AP = B$ ,A和B相似,相似比等价强</li>
<li>矩阵等价 $PAQ=B$ ,P、Q都是可逆的,A、B等价意味着A=>B(A经过初等变化可以得到B)表示成</li>
<li>矩阵正定 $X^T*A*X>0$ ,A为正定阵,>=0, 半正定;正定阵特征值都是正,对称阵是正定阵</li>
<li>矩阵可逆 行列式$Det(A)=0$,就是可逆的。</li>
<li>矩阵合同 $P^TAP = B$ P可逆,A和B合同, 合同比等价强,合同和相似没有任何关系(除非这个矩阵是正交矩阵),正交合同和</li>
<li>正交矩阵 $PP^T=E$ ,$P^{-1}=P^T$,正交矩阵的逆等于他的转置</li>
</ul>
<h3 id="逆矩阵">逆矩阵</h3>
<p>求法:</p>
<ol>
<li>
<p>$A^{-1} = \frac{1}{|A|} x A^*$ 参考伴随矩阵的性质</p>
</li>
<li>
<p>做初等变化得到 $(A|E)=>(E| A^{-1} ) $, 原因是A可逆,A就是满秩的,满秩的就可以写成一系列初等矩阵的乘积(初等矩阵的性质)</p>
</li>
</ol>
<p>极大线性无关组不唯一,</p>
<h3 id="向量向量空间">向量&向量空间</h3>
<ul>
<li>n维向量组成组成m行矩阵,如果矩阵秩$r(A)<m$,向量组线性相关;$r(A)=m$,向量组线性无关.(跟矩阵的线性无关判定一样)</li>
<li>向量组线性无关,向量组每人维度+1,她们之间还是线性无关.</li>
<li>向量组的等价:俩向量组彼此可以线性表示.</li>
<li>极大线性无关组的向量个数叫向量组的秩.</li>
<li>基: 指这样一个向量组,它可以表示向量空间的所有的向量,并且他们之间线性无关.</li>
<li>也就是极大线性无关组,个数就是组成矩阵的秩.</li>
<li>如何求秩\基\极大线性无关组:
是把向量按照”列!”方式码放,然后做行变化,化成梯形阵,
或者按照”行!”方式码放,然后做列变化,化成梯形阵,
向量组的任意两个极大线性无关组包含向量个数相等.
等价向量组的秩相同.</li>
</ul>
<p>二次型,是由高中的二元二次方程,大学的三元二次方程(曲面),的推广到N元。
它可以拆成 X(T)<em>A</em>X的样子
A可以存在多个,但是对称的只有一个,这样二次型的矩阵就是指这个对称矩阵A,
这个矩阵是对称阵,
这个矩阵的秩就被叫做二次型的秩,
正定性: $f(x)=X^t * A * X >0$, 判定:all特征值>0
半正定: $f(x)=X(t) * A * X>=0$,判定:all特征值>=0</p>
<p>对角阵:对角线上元素不全为0,其他位置都是0
标准型:就是左上角是单位阵的矩阵,其余字块都是0的分块矩阵
行最简形矩阵:使用行变化化成最最简单的矩阵形式,(参见线性方程组第一讲)
对角化: 把一个矩阵化成一个对角阵,$P^{-1} * A * P= V$(特征值组成的对角阵), 条件是, A有N个特征值,对应特征向量线性无关
正交矩阵</p>
<h3 id="特征向量-1">特征向量</h3>
<p>$AX=lambda*X$</p>
<p>$\lambda$是特征值,$X$是特征向量,</p>
<p>一个矩阵和向量的结果,居然变成了一个常数乘以向量,感觉用一个数表示了A一样,所以$\lambda$是$A$的特征值.</p>
<p>$|A-\lambda*I|=0$,行列式为0,可以求出$\lambda$,
不同特征值对应的特征向量彼此线性无关,也就是彼此无法线性表出
求特征值和特征向量的方法:$|A - \lambda * E | = 0$,解出$\lambda$,然后$(A-\lambda E)X=0$,所有的X都是特征向量.</p>
<p>若A 与B 行等价,则A 与B 的行秩相等</p>
<p>实对称阵的一些性质:</p>
<p>1.实对称矩阵A的不同特征值对应的特征向量是正交的。</p>
<p>2.实对称矩阵A的特征值都是实数,特征向量都是实向量。</p>
<p>3.n阶实对称矩阵A必可对角化,且相似对角阵上的元素即为矩阵本身特征值。</p>
<p>矩阵A可逆 ==> 矩阵A的列向量是此空间的一组基,也就是她们之间线性无关</p>
<p>矩阵A是正交矩阵 ==> 矩阵A的列向量是此空间的一组标准正交基(注意是标准正交基,也就是Ri的模为1)。</p>
<p>线性方程组求解:</p>
<p>求法是把矩阵化成最简型,然后确定自由变量,然后分解出通解!</p>
<h3 id="相似对角化">相似对角化</h3>
<p><a href="https://zhuanlan.zhihu.com/p/138285148">参考1</a>,<a href="http://www2.edu-edu.com.cn/lesson_crs78/self/02198/resource/contents/ch_05/ch_05.html">参考2</a>,<a href="https://www.jianshu.com/p/a2ef1b585b03">参考3</a></p>
<p>相似对角化,目的是为了把一个矩阵变换成一个对角阵:</p>
<p>$Q^{-1} A Q = \Lambda $ , 其中 $\Lambda是一个对角阵,对角线上是特征是\lambda_i$。</p>
<p>这个Q怎么求呢?实际上,就是每个$\lambda_i$对应的特征向量们,合体成的矩阵Q。</p>
<p>不是所有的A都能这样对角化,得有n个特征值的A,才可以真么玩。</p>
<p>接下来的问题是:干嘛要对角化呢?有啥好处呢?</p>
<p>【<strong>实对称阵的相似对角化</strong>】</p>
<p>如果是实对称阵,那么,它肯定是正定的,他有个性质:</p>
<p>$Q^{-1} A Q = Q^T A Q = \Lambda$</p>
<p>这个时候,矩阵A与$Q^{-1} A Q$ 的关系,被叫做<strong>正交</strong>相似。</p>
<h3 id="施密特正交化">施密特正交化</h3>
<p>说白了就是根据一组线性无关的向量组,如何计算出一组正交的线性无关向量组。玩法如下:</p>
<p>就是先把其中一个向量当做第一个正交向量,</p>
<p>然后第二个正交向量求法是,用第二个向量减去第二个向量在第一个向量(也就是正交向量)的投影向量,即可。</p>
<p>但是求第三个时候,得用第三个向量减去它在前两个求出来的基向量上的投影向量,即可得出。</p>
<p>后面以此类推,每次越减越多,直到最后一个。</p>
<p>这样就得到了一组正交基,如果是标准正交基的话,再对她们进行单位化(分别除以自己的模)。</p>
<h3 id="pca">PCA</h3>
<p>PCA干嘛用的呢?</p>
<p>我的理解就是降维,当维度比较高的时候,就通过它把维度降下来。比如一个图像200x200,其实上是40000维度,但是通过PCA得到相关的维度可能只为100维度,大大降低数据维度。</p>
<p>总结一下PCA算法步骤:
设有m条n维数据。</p>
<ul>
<li>1)将原始数据按列组成n行m列矩阵X</li>
<li>2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值</li>
<li>3)求出协方差矩阵</li>
<li>4)求出协方差矩阵的特征值及对应的特征向量</li>
<li>5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P</li>
<li>6)Y=PX即为降维到k维后的数据</li>
</ul>
<p><strong>注意!!!</strong></p>
<ul>
<li>矩阵P是由C的特征向量组成的,而且是由比较大的特征值对应的向量组成的。</li>
<li>这个特征向量已经是完全和之前的特征值无关的了,之前是40000维度哈,现在呢,只是k了,这k可不是从40000里跳出来的,而是完全没关系的,只是通过特征值分解得到的了。</li>
<li>另外,特征值得出的所依赖的矩阵C,也不是原始的X,是X和他转置相乘的结果,是一个对称阵(对称阵才可以得到正定的特征值),而且X也不是原来的我,而是均值化的了,我早已不是我了</li>
<li>总而言之,整个数学变化,就是为了得到对应的特征向量</li>
</ul>
<h2 id="参考">参考</h2>
<p><a href="http://www.cnblogs.com/zhanjxcom/p/4119509.html">http://www.cnblogs.com/zhanjxcom/p/4119509.html</a></p>
<p><a href="http://blog.codinglabs.org/articles/pca-tutorial.html">http://blog.codinglabs.org/articles/pca-tutorial.html</a></p>
<p>涉及到概念:</p>
<p>实对称矩阵的对角化:<a href="http://www.chinahadoop.cn/course/591/learn#lesson/11744">小象的数学</a>《5.2实对称矩阵的对角化》</p>
<p><a href="http://www.chinahadoop.cn/course/811/learn#lesson/16342">SVD分解</a> 小象学院的《课时9 视频4 矩阵和线性代数》</p>
家书
2018-12-16T00:00:00+08:00
https://www.piginzoo.com/home/2018/12/16/home-letter
<p>这是每周要给儿子写的一封信,是他们学校要求的,每周和家长沟通手册中的内容,每周写的家书,都是和儿子的心与心的对话,保存下来,留给未来。</p>
<h2 id="202016">2020.1.6</h2>
<pre><code>昨晚你被我们狠狠批评了一下,周末就这么快的虚度了,周六一觉、周日一觉,即使不上英语课,又能多复习什么呢?我们不高兴的,不是说你复习的如何如何,我们不高兴的是,你对自己重要的事情的淡漠,你可能说,你在乎考试,你在乎成绩,可是你的身体是诚实的,你一次次的溜出来,伫立在外面玩上一把把游戏,或者趴在桌上东扣扣西摸摸,任时光流逝。从周五到周日,我至少3次提醒你,要做一个todo list,然后做完一个check一个。你没有做。你是真的在乎成绩么?至少,我和妈妈没有感觉到,说心里话,我们虽然没到失望的地步,也是非常不悦的。
早晨送你,临下车的时候,我说了一句”记住!自律才能自由“。其实,言外之意是,不自律就不自由。我回来的路上就在想,怎么让我儿子可以自律起来呢。后来,听着樊登讲的《我们曾经受过伤,却有了更好的人生》,突然就想通了。我们作为大人自律,是因为,我们对人生的未来感到悲观,我们逐渐接受了”人生是苦“的这个预设。如果,你反过来想,如果你的预设是,”人生是美好“的,一切都是爸爸妈妈安排好的,我为什么需要努力,为什么需要做一些需要反欲望的自律的事情,反正,我怎么样,都可以有一个还不错的生活。你就不会有太多焦虑和压力,去拼搏,去努力。即使外界,如爸爸妈妈、老师、学校,给你一些压力,你也不会觉得是个压力,也许只会是一个烦恼而已。正如樊登这里面讲的一些案例,反倒是一些很早就遭受到苦难的人,反倒成就了自己的一生。
也许,认为人生是苦的这个预设,在你看来是无论如何是理解不了的。所以,你不需要压抑自己的欲望,可以选择适度的放纵,没有一个声音,会处处提醒自己,要自律!要自律!也许,你的这种心态是挺好的,我想,大部分年轻人也都是这种状态,这个社会和世界,也给年轻人们预设了这种状态,就像游戏里、庆余年里、抖音上,我想告诉你的是,是,也不是。年轻人没有压力,选择肆无忌惮,无所顾忌,其实是好的,因为,你不知道自己的能力边界在哪里,这种适度的冒险和尝试,是一种很重要的精神,我们这些中年人已经彻底没有了这种精神。但是,反过来,如果在这个旗号下,去放纵自己、去跟随别人去狂欢,去随波逐流的获得快乐,在我看来,是一种愚蠢。”自由是摆脱社会的惯性“,像我说的这样做,恰恰是被强大而社会惯性裹挟,淹没和捕获而已。
想再次跟你说,我不在乎你的成绩,如果你是为了获得一个好成绩,可以获得老师的夸奖、同学的羡慕、爸爸妈妈的表扬,我宁愿你成绩中等,马马虎虎就可以。我在乎的是,你是不是知道自己想要什么?是不是愿意克制自己的欲望?是不是愿意摆脱社会的惯性?在我看来,学习好,目的是为了去更好的学校,认识更有意思的人和老师,给自己打开更宽广的世界,这个才是目的。如果你有自己的方法或者途径,可以达到同样的目标,成绩真心无所谓!
保持一份好奇心,保持对更宽广世界的了解的渴望,愿意去学习,努力接触自己不知道的世界,而不是充满恐惧,困在游戏和网络小说,构建的欲望的池塘里,自我怜爱。至于你学什么,看什么,玩什么,都不重要,重要的是这个原则。希望你能明白我说的这些,而不是在我和妈妈的一次训斥和阻挠后,就情绪低落,被别人影响甚至控制了情绪,我知道,成长不易,但是你需要和自己的贪婪、懒惰、欲望、畏惧做斗争,你需要自律,这样,才能自己把控自己,甚至是自己的人生。
</code></pre>
<h2 id="20191229">2019.12.29</h2>
<pre><code>这周一直在准备给全部门分享的技术讲座,我讲的是计算机最根本的东西,就是源程序怎么变成可以让计算机可以跑起来的东西。可是,要把这么一个其实是很复杂的话题讲清楚,可是不容易,这个时候,我突然想到了费曼学习法,回家路上,我还跟你提及过,记得么?所以,今天的家书,我就想给你介绍一下费曼学习法,并试图用它给你快速讲讲计算机的一些原理。
费曼是谁?你可能没听说过,但是你一定听说过日本广岛和长崎扔下的两颗原子弹,它们背后是美国一个著名的曼哈顿计划,是一群物理学家埋头苦干把它们造出来的,为首的就是美国著名的物理学家费曼。费曼是爱因斯坦之后最著名的物理学家了。
与他的物理学成就一样有名的,是费曼的学习方法,叫“费曼学习法”,我给你讲讲,当然我也是百度来的,我就试图用费曼的方法说一下费曼学习法到底是啥。
费曼学习法,在我看来,就是找一个不懂的人,试图用大白话,他能理解的语言和概念,给这个人把一个深奥的问题,讲明白。这过程,逼迫你自己要搞的非常清楚,反复学习,直到对方真的理解了这个问题。
费曼学习法有以下的步骤:
选择一个你想学习的概念;找一个菜鸟,甚至是孩子,试图解释清楚这个概念,让他完全听懂。如果你觉得自己解释不清楚了,就回去研究并找出答案,或者去读书、或者去找同学、老师、懂这个概念的人,把这个概念再研究一遍,直到你能够把这个概念流利地解释出来。
**真正学会一个概念,必然要会用更简洁的语言,用类比的技巧来完美解释这个概念。**
这就是闻名天下的「费曼技巧」。
所以,学习之余,应该多去帮助同学们,给他们解释他们不理解的概念,甚至主动去给别人讲解自己认为自己掌握的不是很牢固的概念,还可以走出去,去学校外面,去参加对外的分享、演讲,不是听别人讲,而是自己主动给被人分享噢。这样,既帮助了别人,又完善了自己,还会交到很多朋友,真的是一个一举多得的事情。
好啦,我就用这个技巧,给你讲讲计算机的一些原理吧。
在计算机里,程序员首先用跟我们写文章的方式写程序,可是他们的语法老师可严格多,语法格式非常严格,一点都不能错,他们写完后,形成的word文档,就叫做源程序。
这个源程序,是不能给计算机运行的,计算机需要的是0/1这两种数字组成的机器指令,为什么是0和1呢,因为0代表低电位,比如-5伏,1代表+5伏,这样才能驱动电路开关,实现一些动作,CPU就是靠这些01电信号驱动的,每秒可以开关10多亿次。这些开关的组合,就可以实现加减乘除之类的运算。这些加减乘除运算,就被定义成了一个CPU的指令,把他们放在一起,就是指令集。
那怎么从一个文字的word文档,变成0、1码,这个过程还是挺复杂的。首先得把你写的源代码的文字,变成一种像树一样的结构,就是有的词在树根,有的词在树叉,有的词在树叶上,一棵大树,在计算机眼里是一个很有结构和层次的东西,叫做“语法树”,有了这棵树,计算就就可以再进一步,把每个树叶和树杈的组合,变成一个个的可以操纵CPU开关的指令了,这些指令虽然还是一些文字,但是已经和CPU要求的0,1指令很接近了,最后一步就是彻底把这些文字指令变成0、1指令了。
从word文档变成指令了,还不行,因为,我写一个复杂的程序,可能会写好多个word文件,也就是源程序,还得把他们组合到一起,才能合体工作,否则,单打独斗是运行不起来的。把他们合体拼接到一起,这个过程就叫做“链接”。只有链接好的程序,才能真正的可以在电脑里跑起来。
链接的过程,可以提前做好,把需要的小伙伴提前合体,变成“大力神”;也可以在程序跑起来后,需要谁,再“神龙召唤”。提前合体成大力神的方式,叫“静态链接”,而运行起来后,再召唤依赖的小伙伴的方式叫“动态链接”。
还有个问题,就是程序跑起来之后,可能会占用很大地盘,可是计算机的内存,也就是他的脑容量很有限,那么多人都要来这里面跑动起来,地方不够,怎么办?解决办法,就是把程序的身体割成一份份的,如果程序运行的时候,需要用到某一份,就把他加载到内存里,否则,让他身体这部分继续在磁盘上。那如果内存慢了怎么办?那就把不太常用的挪出来,交换一下就成了。
计算机是可以跑多个程序的,所以就有了安全问题,我的程序不能访问你的程序,怎么保证呢?计算机就设计了一个叫“虚拟空间”的概念,相当于给每个人规定了一个跑道,你只能在这里跑,你不能越界,这个跑道里的距离都是从0开始,所以程序们都是从0开始计算自己的所需要的各种位置,互补干扰。然后有个大总管,来真正安排,这个虚拟跑道,怎么和真正的内存进行对应,以及控制越界行为,惩罚越界者。这个大总管,我们管他叫“操作系统”。
恩,差不多就讲这些,其实,这里面涉及到非常多的细节和概念,如果要搞清楚,至少得需要计算机本科学生一学期的学习时间,但是,大道至简,本质的东西,其实就是这些,理解了这个其中的“道”,再去深究细节,就可以拨云见日了,否则,依然还是拨云见雾,糊里糊涂的。
好啦,今天就讲这么多,要是想更多的了解费曼学习法,还是应该自己多去网上找来一些帖子深入看看,更重要,是要在自己的学习过程当中实践起来,相信,一定会给你带来不一样的学习体验的。
</code></pre>
<h2 id="20191221">2019.12.21</h2>
<pre><code>你说,你遥不可及重点班的那些,他们有专门的老师给补习,有很好的学习环境,你的语气里,透着羡慕、嫉妒和一丝不自信,我非常可以理解,我是上过初中高中,看过那些遥不可及的学霸们的,即使是现在,也有很多让你觉得高不可攀的人。
我是不是该高兴呢?这说明你,知道差距,会有努力追赶的动力的。我觉得,这个岁数,确实应该有好胜心,努力进取,这样,就可以满足爸爸妈妈的心愿,得到老师的喜爱,还有同学们的羡慕,毕竟学校里,学习是大家最关心的事情。可是,对,我是要说可是了,我在车里,跟你说过,我是希望,通过学习好,让自己知道自己是与众不同的,是优秀的,这种自我良好的感觉是很重要的,有了这种感觉,可以让你变得自信,对事情更执着,这个是我希望你超越这个层次,收获更多的东西。可是,再可是,这种自信和自我感觉是最重要的么?我就是喜欢刨根问底和不断的询问。在学校学习,考试,考大学.......做这些,都仿佛都是一个人要做,该做的事情。可是,真的是么?为什么?不做这些还能做什么?还是,大家都在做,爸爸妈妈让我去做,老师也逼着我们要做,我们就需要去做么?!
每个人,你开门的时候,你是知道自己要干嘛去,去哪里的。可是人生呢?99%的人,是不知道自己为什么往前走的,仿佛只是行驶在高速公路上而已。可能到临死前的一刻,才会后悔,自己该有很多事情要去做的,可是为何没有去做,或者没有做好。所以,人生不妨,以终为始。有一个简单的目标,执着于它,不也是一种幸福么?
现在的社会和世界,太诱惑了,太分散了,我之前已经无数次说过,他们试图攫和占有你的时间,通过短视频、网游、手游、网络小说、综艺节目、八卦趣事,背后,其实是他们经济利益的诉求而已,而大多数人,都深陷其中欲罢不能。而,真正的去做一件事,是需要抗拒这些的,抗拒碎片化的,需要沉浸下来,留给自己大段的时间,完全的投入自己的身心,去挖掘探索,而且,还不是一两次就可以达到,需要持续的大段的时间投入,才能做到很好,甚至极致,才能取得大的收获和成就,我们都知道这个道理,我们却不所为,这都不是所谓的知行不合一,王阳明说过,你行不至,不是你知而不行,而是你根本不知,在我看来,这是因为人们对做一件事的强烈愿望和使命感,还尚未达到一定的程度,否则,他一定会自律和克制,去克服这些浮躁,潜心于努力当中。他不会觉得这个过程苦,而是这个过程本身,就足以让他得到极大的满足。
所谓,自由,就是要摆脱社会的惯性。我一方面高兴,你可以对学习在意,愿意去学习,可以克服自己的惰性,开始努力,很高兴看到这点。我同时,更希望,你可以慢慢的开始思考,为何而学,这一生该做怎样的事、怎样的人。没关系,你还有很多时间去思考这件事情,不急。当然,在没有找到这些答案之前,随着惯性,努力学习,肯定不会有太多坏处的,而且,这个过程中,遇到更多优秀的人和老师,可能让自己更早地寻到这些。只是,始终不要忘记这件事就好。
</code></pre>
<h2 id="2019127">2019.12.7</h2>
<pre><code>鲁迅是座山,太高,挡住了其他的山,而张爱玲是条河。
我和妈妈终于看完了许子东的现代文学课,还是有点恋恋不舍的,12次课,每次2小时,带给我和妈妈很多很多的东西,很想和你分享分享。
鲁迅,不但但是我们小时候那个革命的前锋的左翼作家,老师讲了他的肥皂,讲了很多鲁迅不为人所知的一面和作品,他无法摆脱家里给的婚姻,但是要和许广平一起,纠结矛盾,是鲁迅先生的矛盾之处。了解他的留学经历、转变和回国的历程,让我们感觉鲁迅活生生的,亲切的很。
如果说鲁迅还是我们被灌输的差不多,郁达夫就是我们不熟悉的,许老师给我们呈现了一个性情和怪诞的郁达夫,沉沦不怕暴露自己的内心龌龊和卑鄙,敢暴露自己,其实是自信。后来,他去东南亚,被日本人杀害,很是让人唏嘘命运的变幻。
许老师最喜欢的是张爱玲,这个充满才情的女子,讲了她和妈妈的关系,父亲的关系,给了她敏感的作家的心,19岁的时候,就写出那句“人生就是一席美丽的旗袍,只是爬满虱子”。我和妈妈很八卦的去搜了张爱玲母亲的照片,果然比张爱玲要美丽,哈哈。这个奇女子,后来去了美国,最后孤苦的在洛杉矶死去。我百度了一下,也只是98年的时候,那个时候,我还在大学。她的作品,充满了对人、女人、人性的细微和深刻的雕刻,我印象最深的是,葛薇龙说完,自己和那些妓女没什么区别,开车的乔琪,烟头在黑暗中,闪了一下,又暗淡下去。是内心的良知的一闪,随后又沉沦下去。
老舍是我最同情的一个,一个不愿意选择站队,不愿意去融入当时时代洪流的想要维持自己内心的旁观者,被一次次的逼迫下,不得不向这个社会低头,不知就里的参加了一次运动,被打的头破血流,一晚的打击后,投湖到太平湖中,让人痛心。而骆驼祥子,就是他这个心理历程的写作,而祥子最后选择沉沦,就其实已经预示了老舍对自己命运的悲观。
还有沈从文、丁玲、巴金、郭沫若,许子东老师讲的也非常有意思,也很深刻,我和妈妈度过了非常有意义的一段时光。高晓松曾经说过,民国是大师辈出的年代,他的老师,曾因为缅怀这个年代和大师们,而落泪讲台。我和妈妈,听了许老师的讲述,更真切的感受到这些文学大家们,不再觉得和他们远远地距离感,想迫不及待的打开他们的文字,和他们跨时空的交流,感受他们在那个年代的思与想。
我和妈妈都希望,你有时间可以去听听许老师的课,不为了成绩和升学,而是纯粹的跟着许老师去体会文学和大师们的魅力。
</code></pre>
<h2 id="2019121">2019.12.1</h2>
<pre><code>居然忘记要给你写家书了,赶紧赶紧。
今天批评你了,早晨写作文,却不专心的去干别的,虽然恶狠狠,但是其实老爹我也很忐忑,怕说重了你,让你桑心。是啊,我们作为爸妈就是这么纠结,不知道该不该说,分寸间怕把握不好,伤了你。可是,又是担心,不在平时给你一些边界,养不成好习惯,倒是害了一生。虽然自己也觉得,好像没什么用,但是还是想说说,是啊,我们和你,就是在这样的矛盾中,一天天过去,其实,你依然是很美好的生长着,不是么?
经常,阿姨们会转一些让人焦虑的文章,600分都上不了好学校,700分的2/3都被海淀学霸霸占之类的,人们被这些比较性的文章搞的焦虑万分。使一个人焦虑,最好的方法就是让他和别人比较。就像现在这个社会,大部分人都被金钱和欲望笼罩着,本质上,和对孩子的成绩的焦虑,是一样的东西,这种焦虑背后,是对孩子未来进入这样的一个轮回过程中,拼命挣扎的一种焦虑。我虽然觉得没那么夸张,但是也没有修行到完全有定力,对这些无动于衷。我和妈妈说,我们要更在意,儿子是不是30、40岁以后,可以幸福安宁。这其实,正是我们这个岁数试图追求的东西。为什么不可以早早的告诉儿子呢。但是转念一想,又觉得其实没有必要。因为你不可能理解,你只有经历过灿烂和苦难,可能才会收获你对这个世界的认知,而你今后的20年、30年,会经历怎样的精彩亦或苦难,可能都是我们无法预知的,但是,我和妈妈,都是希望你可以保持对这个世界的一份热爱、好奇和尊重,而不是被这个世界压迫、困扰和摆布。 而,现在阿姨妈妈们焦虑的东西,其实一点也不重要,不过非要说有些意义的话,那就是,你可能去个好学校,可以遇到更有意思的同学,更让你受益良多的师长而已,而,他们都是辅助的,所有的认知,还是要靠自己去获取。
老爹这周突然对中国古代的哲学产生兴趣,也顺道跟你唠叨两句。美国现在两院,多少有古罗马元老院、古希腊民主的影子,他们是一种传承。我们呢?从春秋之后,我们就剩下了集权。而西方,还有300年激荡的启蒙运动、文艺复兴和工业革命,而我们呢?现代化的进程,准确的说,是从改革开放才开始。所以,中国人,中国的社会,中国的政体,会向何处演变,我们谁也不知道,但是,我们是可以从过去的历史和文化里,多少可以得到一些启发。中国现在的共产党一党主政,其实,有他的历史必然性,因为从秦开始的中央集权,横亘大约2000年,是西方国家不可比拟的。但是,先秦文化中的各种思想,却也是我们国人宝贵的精神财富,孔孟之道,已经在我们每个人血液里,但是,我们其实还有各种各样的思想,比如老子的道,充满玄妙的思想,是一个无穷的宝藏,特别是人到了一定年龄,才可以体会到老祖宗们的智慧。虽然你们现在学这些学的无趣,但是,我相信总有一天,你可能会泛出这些古文,反复品味的。
人的一生,形如流星,短暂、灿烂,但是“死亡、孤独、自由和意义”,这四个主题,会始终萦绕在你一生的追问中,我和妈妈到了这个岁数,依然没有答案,我希望我将来可以多一些了解和理解,可以分享给你,也希望你,成年后,可以认真的思考这些,那时候,你再回头你纠结的功课和学习,变得没那么重要,它们只是你生命经历的一点时光而已。
</code></pre>
<h2 id="20191123">2019.11.23</h2>
<pre><code>妈妈的生日里,给你写一封家书,应该有些意义吧。
在朋友圈里分享了鲁迅的《聪明人、傻子和奴才》,我留言道,”可以读懂鲁迅了“。鲁迅真的是伟大,小时候总是被按着灌他的文字,反胃的很。倒是到了我这个岁数,经历了一些人和事,就慢慢地开始理解他了,理解他的深刻之处了。难怪许子东说,鲁迅是一座山,后面的作家也是山,但是鲁迅这座山太高了,挡住了所有的山。这个社会,这些人,还有100前的那群人,骨子里其实都是一样的,铮铮的傻子太少了,满地的奴才和聪明人。关于文章,爸爸就不剧透了,你可以找来自己读读,非常短的一篇短篇。
我和妈妈很快就要看完许子东老师的现代文学课了,就剩下沈从文和我们都非常喜欢的张爱玲了。我们不为了名不为了利,不为了任何目的,就是想了解,单纯的想了解100年前,那群人,那群80后、90后,是怎么样影响像你们这群年纪的00后,这些年轻人,就是掀起新文化运动,带来影响一代人命运的那场革命战争,也正是他们,就在这文化的洗礼后的20年,就经历更残酷的民族解放、抗日战争的洗礼,新中国的洗礼、文革的洗礼。我和妈妈,渴望了解他们,不想他们只是我们小时候心目中书本里那群”革命、进步“作家,不想他们就是那个顺口溜“鲁郭茅、巴老曹”,我们更想知道,那些真实的他们,那些许子东老师口中讲出的,肩负家族生计忍辱负重但是又批判旧礼教的矛盾的鲁迅,那个貌似猥亵实则自信张扬才华四溢的郁达夫,那个生性浪漫但是被改造的温顺的郭沫若,那个从年轻一直到老年死去都心怀理想主义的巴金,那个深深爱着北京、个性单纯,却被这个世界无情抛弃的老舍....作家,是一群神奇的存在,有人年轻便是高峰,有人年老才更加醇厚,有人龌龊但又有崇高,有人看似伟大实则狭隘,我和妈妈,在他们故事里,他们的创造的故事里,在许子东老师的剖析和解释里,更深入的理解了整整一百年前的活生生的他们,也深深的体会到,眼前这个世界的和谐繁荣和统一下,其实,应该隐藏着我们察觉不到的的复杂、多样和矛盾,正是这些作家,为时代捕捉着这一切。
所以,我又找到了理想国出版社的青年作家的评审会,我渴望了解,我们这个充满故事和荒诞的时代,究竟谁在书写?我有幸知道了”金宇澄 双雪涛 张悦然 阿乙 沈大成 王占黑“这5位年轻作家,他们真是我们当代故事的书写者,虽然还没读过他们的书,但是在阎连科、唐诺、许子东、高晓松老师们的讲述下,我已经领略了他们带给这个时代的文字,是诚恳、尖锐和洞悉的。也让我更深入的理解,文学创作的艰难,但是又充满乐趣。
这个喧嚣的世界,是可以安静下来的,在每天接近午夜的时候,那盏台灯下,爸爸开始静静阅读,是一天里最沉醉的时刻,仿佛,我进入了大雨连绵的马孔多,进入了那个潮湿闷热的湄公河,我仿佛是在梦里,又保持一份清醒,作者试图在告诉我什么,我不知道,我知道他不愿意说的那么真切,而是静静的流淌着他的文字,把我带进去沉浸,就好。我不用关心,什么中心思想,结构脉络,我只需要陷入到他的情绪里,他的梦幻里,他的尖锐里,他的嘲讽里,会心的笑、痛苦的哭、悲哀的感叹。读完掩书一刻,跟他道别,把他告诉我的话,深藏在内心深处。
读书,我和妈妈,其实就是想对这个世界更理解,更包容,更诚恳。我希望,有朝一日,你也可以在书中,找到你的安宁。
</code></pre>
<h2 id="2019119">2019.11.9</h2>
<pre><code>快期中考试了,你在努力复习,加油,争取考一个好成绩。
昨天,看到了magi.com,一个神奇的网站,是3个年轻人做的,15年还大学的时候就开始干的一个项目,目标是做一个类似于wolframAlhpa类似的网址,可能会更超越他。他们的愿景是“Magi 系统背后的技术平台则承载着另一半重要的意义:让机器像人一样能理解并充分利用互联网中无穷无尽的知识。”,就是25、6的3个年轻人尝试打造一个梦幻项目。我知乎了一下创始人季逸超,他的自我签名是“自闭程序员,写过 Magi 和猛犸浏览器等等”,恩,是的,他就是92年的季逸超还在上高中的时候,开发出来的一款ios浏览器,你可以看去知乎和百科上去了解更详细的内容,但是我当年,也就是12年的时候,就下载使用过,很惊艳的感觉,当时就感叹,自苦英雄出少年,老爹我作为是一个资深老程序员,可能都写不出这么帅的软件来,可是他当时只是一个高中生啊。我看了一下,他后来去了北京信息科技大学,不是一个很牛逼的学校,是当年的信息工程学院,是一个二类大学。so what?!在世俗人们眼里,这样的一个大学居然横空出世了这么一个天才。可是,他们哪里知道小季在北大附的时候惊世骇俗的成果。也就是跟你差不多的北京孩子,干出了这几日刷屏、让百度李彦宏都汗颜和冒冷汗的magi,他不是一个简单的爬虫+搜索引擎,背后,是知识抽取、知识表示以及推理引擎,也许没那么牛逼,但是对3个本科生来说,孜孜不倦的干了3-4年,达到这样的一个科学和工程水平,都足以让it行业震惊了,知乎上评价这件事的大V们,都是NLP领域的博士们,哈哈,这些才有能力和资格评价这件事。
你是不是觉得这个季逸超很牛很牛了呀?我告诉你,他短期是无法超越wolframAhpha的,或者长期也不能,因为wolframAhpha已经横霸这个领域多年了,他甚至是siri背后的智能对话引擎。wolframAhpha的创始人wolfram,拿才更是惊为天人的大神,你可以读读阮一峰的介绍Stephen Wolfram的文章(阮一峰是谁?一个专门八卦的极客,哈哈),这位Wolfram大神,21岁就博士毕业,致力于世界复杂性的研究,后来创立了Mathematica,一个超牛的数学工具;后来创立了wolframAhpha,尝试对世界进行建模,可以理解世界的概念和关系,可以像人一样,回答你的问题,所以siri才会把它当做对话引擎。
你最近抱怨,学校学习有些沉闷,有的学科没啥意思,我是想告诉你,学习本身是非常有乐趣的一件事情,但是不要让“他们”定义,而你要给自己“定义”,找到自己的梦想,找到自己的乐趣,找到自己觉得可能一生要追求的东西,然后扎进去,为之终身奋斗和学习,这才是学习本应该承担的责任。倘若如此,我真心不在乎你考了啥成绩,考到了啥学校,排名多少,因为我知道,一旦你想,你可以瞬间爆发努力,考取你梦想的任何学校,即便他是mit还是普林斯顿,因为在你眼里,他们也只是,你为了实现梦想,最有效的“工具”和“途径”而已,心存志远,梦想远大。
我和妈妈当然已步中年,我们年少的时候,不曾有人给我们讲类似于wolfram、季逸超的故事,我们也不知道星空有多辽阔,没有任何给我们启蒙的引导,你非常幸运,除了我们愿意放手让你去追求,你还可以肆意的去广大的互联网、书籍里面去获取你梦想的养料,而唯一限制你的,是你的视野和勇气,你应该相信自己,你是一个可以成为任何人的年纪,唯一能够限制你的,就是你自己。但是,这种自信和狂野,也绝不是建立在狂妄和虚幻的妄人之上,而是脚踏实地、谦虚好学的基础上,既然你觉得有些学科无聊,就最高效的搞定它,然后把自己宝贵的时间,更高效的投入到你热爱的方向上呗,懒惰、迟疑、沉迷游戏,都是一种对生命的浪费。
成为你想成为的人,如果你还不知道想成为什么样的人,就保持好奇、努力学习,打开这个世界的神奇之门。
</code></pre>
<h2 id="2019112">2019.11.2</h2>
<pre><code>早晨看了文茜周刊,讲到了很多内容。
包括香港抗议引发的世界多地方抗议,加泰罗尼亚、印尼、智利、黎巴嫩,很多理由都很微小,比如智利就是仅仅因为地铁票涨价引起的,而且,这些抗议最后都演变成暴力,很多地方还死了一些人。这些事情,你们的政治课或者时事课,应该告诉你们。这背后,到底是年轻人的诉求是什么?到底什么是背后深层次的原因。是贫富的日益扩大的差距,是互联网带来的舆论扁平化,还是中产阶级日益强大的诉求...,可能不会有一个答案,但是,了解这一切非常有必要,因为他们就发生在你同一个时空里。
这是一个很好的节目,我强烈建议你有时间看一看,比起看湖南卫视那种傻乐的节目,你可以收获更多。比如这次,还降到了英国偷渡的事情,很多英国人去默默的给这些死去的偷渡客祈祷、献花,他们是出于人道同情,想想,可能死去的那些人,可能和他们同岁或者对生活的未来充满期待和希望,就这样消逝了,确实是让人伤感和同情的事情。
讲到了川普被弹劾的事情,这件事情在美国已经沸沸扬扬,一代美国大总统可能因为通乌门事件被赶下台,太搞了吧,可是,事实就是这样,川普通过对给乌克兰的军事援助为筹码,威胁新任乌克兰总统,调查他的下一届总统候选人拜登的儿子可能的腐败案,从而打压他的竞选对手,这件事情,不断地发酵,大家不能容忍一个有道德瑕疵的总统来统治这个国家,政治当然没那么简单,但是这简单的做人的道理和普世的价值,应该被尊重,犯这种错误的总统就应该被轰下台,这件事情,可能对我们,对你,都会有启示。
讲到了,美丽的尼泊尔,孩子们4、5岁就离开爸妈,去千里之外的地方去学习,这一别就是12年之久,为什么不去看看孩子,为什么不让孩子回家聚聚,我有同样的问题。但是,看了节目,我就明白,这大山的世界,8000米的地方,贫瘠的土地,一切都让我们认为普通的亲情,被无情的自然和贫穷阻隔10年,一张车票或者机票,对他们来说,是遥不可及的距离。12年后,3个孩子,返乡之旅,路途经历的无限的美景,洁白的雪山,令人炫目的湖泊,同时,对比看到的,这片土地的贫瘠、劳苦的人们的艰辛、还有令人恐惧的地震,都让这些在尼泊尔首都寄宿学校里的孩子,在这种对比和冲击下,深刻体会到10几年前,大人们把他们送出去的决心,以及背后隐含的艰辛和痛苦。这就是文茜,在节目最后推荐的今年的大奖纪录片。
这次的家书,就当给文茜的周末报道的广告贴了吧,哈哈。
</code></pre>
<h2 id="20191027">2019.10.27</h2>
<pre><code>昨天带着你去咨询了一下托福的课,可能你自己也感受到了压力,看着墙上的那些哥哥姐姐为了自己的梦想努力拼搏,不知道这种气氛是否感染了你。Avijit叔叔说,他儿子为了追求自己的音乐梦想,class12的时候拼命学习,终于去了英国去学音乐去了。是啊,要有自己的梦想,这样追逐梦想的过程,你不会觉着学习啥的是苦,而是明白这些都是自己追求梦想所要承受的东西。
昨天发给你的笑话说,“为什么人总是宁可受生活的苦,而不愿意受学习的苦。答案是,因为他们懒,学习的苦是自找的,而生活的苦,你躺着它就回来。”,听上去很搞笑,但是很残酷。
你可能会问我,我没有梦想怎么办?我的答案是,那就尽量去更大的世界去体验,然后寻找到它。更大的世界,在你的阶段,就是更好的学校。你们学校肯定就比团三要有更多有意思的人和事吧,而八十、人朝附应该有更多比你们学校更多的神奇的老师和同学吧,你应该同意吧。我抛开学习本身,我仅仅谈你所能认知和感知到的世界,那些学校的老师,同学,可能会给你带来更多的你不知道的世界,更多匪夷所思、神奇的世界吧,相信你在现在的学校,遇到的新的神奇同学,应该可以切身的理解我说的这个吧。比八十、人朝更神奇和宽广的世界,还有很多很多,等着你去探索。
但是,选择背后的代价,你应该很清楚,除了我们要在金钱上给你支持,这点,我们很愿意,你不用太担心。但,更大的一块代价,是你自己,对懒惰的克服、对自律的要求、对未知恐惧的克服,让自己具备开放的心态,愿意去探索的好奇心,不断地自我拓展和超越,优秀的你,才可能有机会去探索更宽广的世界。很多事情上,你要付出努力,不仅仅是在肉体上,更是在精神上,你要在自己已经开始逐渐形成的世界观和价值观上,不断地添砖加瓦,保持一个积极向上、不断进取的构建状态。你自己应该明白,这背后,你会获得怎样的自我满足感和成就感,这种feeling,是谁也给不了你的,也是谁也无法替你获得的,包括我们。
昨晚,你写作业的时候玩手机,写作文的时候发呆愣神,我们其实都很清楚,也能理解,毕竟我们也是人,有着一样的惰性,我们也做不到时时自律,也有想放松、放纵的时候。但是,我们必须学会要和“它们”抗争,我们会做todo-list,会做计划,会做规划,会想尽一切办法,约束自己,甚至动用外部的手段,去约束自己的惰。我们为什么愿意这样“自虐”呢?因为我们相信,自律一定会有收获,会让自己有充实感、成就感,我们坚信这点,坚信这点!所以,我和妈妈可以坚持锻炼,坚持背单词,坚持学习,坚持看书,“自律才能自由”,这已经成为我们的人生信条了。同样,对你,你不用太过自责,你无法约束住自己的懒惰和放纵,但是,你要有这种意识,优秀的人和他们可以掌控的人生,背后一定有他们自律的成分,你如果不想被别人控制和奴役,你至少要做到自律。而,自律,还可以带给你更多更多的附加值,这些你未来肯定可以体会得到。但是,至少是现在,我只要求你牢牢的记住、并反复的提醒自己“自律才能自由”。如果你想体会更深,你可以去看看采铜的《精进》和李笑来的《和时间做朋友》,可以从中读到类似的东西。
只有这个大前提下,我们才好去谈论,去读什么样的好书,去学什么样的有意思的东西,去追逐更卓越高层次的知识;有了这个大前提,我和妈妈,也不会去催促你去上什么班,报什么班,陪你去上什么课,这些,都应该是自律,自我实现,自己规划自己的人生,对自己的未来筹划的要走的一些步骤而已,我们也应该从空管员,变成一个教练,最后变成一个建议者,我们渴望这些角色的变换,我们也渴望你的蜕变。
和自己的欲望、贪婪、懒惰作战,是每个人一生的宿命,没办法,这个世界就是充满了这些东西,你现在沉溺在网络小说里,游戏里,你长大了还会有更多更新的诱惑,抵御住他们,你需要的是,更高层次的、更伟大的理想、梦想和价值观,这些大词,可能你觉得还离你太远太远,其实不是,他们其实都很朴素,就想埃隆马斯克发射spacex火箭一样,是他小时候登上火星的那个梦想。你现在的这个种子还没有开始发芽,但是我相信,我和妈妈已经给你播种了很多,只不过你还没有找到属于你自己的那颗,你要有耐心,我们也会有耐心。但是,要记住,你要让自己时时刻刻的努力,变得优秀,优秀地可以配的上这颗还没有被发现的种子,否则,等到那一天,你只能对着自己找到的梦想空悲切,感叹岁月蹉跎,自己无力圆梦了。
不要太在意成绩,在意排名,在意你们学校的情况,给自己更大的世界,这个权力就在你手里,但是,对不起,首先你必须先战胜欲望和懒惰!
</code></pre>
<h2 id="20191017">2019.10.17</h2>
<pre><code>这个是应老师的要求,写的一篇朝阳区教育征文活动,主题是“我的育子梦—家庭教育故事”
</code></pre>
<p><strong>《手机大作战》</strong></p>
<blockquote>
<p>家有儿女,不容易啊,我家就有一个青春期的初中二年级的宝贝儿子,就是传说中的“中二”年纪。陪着儿子成长的过程,各种酸甜苦辣,五味杂陈。</p>
<p>儿子一上初中,我们就给他买了一部新手机,我们觉得,他们这代人就是生活在移动互联网的原住民,手机是他们和世界的连接,所以很欣然地给他买了一部,他也很高兴,还信誓旦旦的承诺,主要用于学习,玩游戏也一定会克制的,为此,我们还一起录制了一个视频,儿子承诺若干,作为购买手机的“前提保证”。</p>
<p>可是,不久,我们就发现,我们“上当了”。因为儿子在同学们的带领下,很快学会了各种游戏,每天都“刻意练习”,不久便俨然成为游戏高手。写完作业,本来想让他休息一下,结果他捧起手机就玩一把游戏;出去玩,只要闲暇下来,就坐在休息的地方,来一把游戏。他逐渐学会了在各种场合,见缝插针的玩游戏。暑假来了,他独自在家,我们没办法在家“看”着他,于是乎,我们就开始各种的焦虑萦绕心头。“孩子会不会又在玩游戏?” “他是不是又去玩游戏了?”。我们也试图阻止他玩游戏,可是,他非常的抵触,常常因为玩游戏的事情,搞的他很生气,我们也很生气,双方常常谈不了几句就不欢而散。青春期的孩子,也往往控制不住自己的情绪,导致我们和他之间,常常因为这件事情陷入冷战。</p>
<p>于是,和“手机”的大作战开始了。我们不断地讨论、思考,还去读了一些青春期儿童教育的书籍,逐步勾勒出一个作战计划。</p>
<p>首先还是“攻心”,我们知道,强制他不玩游戏是不可能的,总有一天他会长大,我们无法再去管理他,那时候,他会更疯狂的放纵自己的。于是,我们只好跟他谈心,我们告诉他“游戏,本质上是一种即时快感,是一种放纵,做游戏的人,特别是手游的那些游戏开发者,他们就是在千方百计地,挖掘你们的欲望诉求,所以,不要被他们控制。”;我们给他讲“自律才能自由”,告诉他,要学会“延迟享受”,享受付出努力后的收获,而不是沉浸在游戏这里的即时享受里。</p>
<p>除了攻心,我们还要行动。因为儿子住校,只有周末回家,所以我们就从周末时光着手。除了周末的作业和学习,只要有时间,我们就会带着他出去,去图书馆、杂书馆、博物馆,或者,找一个环境优雅的咖啡厅,一起度过一个安静的读书的下午。还会带他去公园转悠,去电影院一起度过亲子时光。总之,我们用尽一切办法,我们的陪伴去“占据”他的时间,让他没时间去沉溺他的游戏和手机上了。</p>
<p>你以为这些就够了么?那是你太低估手机的诱惑力了。相信爸爸妈妈们都理解我说的这些。所以,我们还要第三招,立规矩。我们告诉他“我们不想控制你,你是一个独立的人,也不希望被被人控制,对吧?但是,在手机这件事上,你要自律。所以,我们一起来商量一些规矩,如果你觉得可以接受,就要遵守,可以么?”。最终,我们还儿子商定了一些规矩,比如手机只能在厅里,不能进卧室;每次必须写完作业才能玩,每次玩不能超过一局,而且一局时间不能超过半小时等等。一旦他违反,我们就会提醒他,如果他刻意违反或者多次违反,我们会按照协定,停止他使用手机一段时间。这样,我们慢慢和他形成了“契约精神”,因为不是强制,而是双方商讨的结果,他也愿意遵守,违反时候我们批评他,他也能够接受。而我们也逐渐对他玩游戏这件事情上,没有那么焦虑了。</p>
<p>现在,我们、儿子和手机之间,终于慢慢地可以和睦相处了。虽然我们还是不愿意他玩手机,但是,我们比起我们强制他不玩手机、控制他,我们更希望,他可以慢慢自己学会自律,自爱和遵守契约,这些远比我们强制控制下,得到一个“听话”的孩子重要的多。</p>
</blockquote>
<h2 id="20191015">2019.10.15</h2>
<pre><code>昨天你来电话说,不想参加周日的运动会,我和妈妈这个事纠结和讨论了一晚上。
我们为什么这件事情上这么纠结呢?因为我们看重一些东西,我们十分看重这背后的一些最基本的东西,一些涉及到价值观的东西,是的,我们十分在意。
我们能理解,周六你要上语文课、英语课,还要一堆作业要写;我们也能理解,你运动会上没有项目,很无聊的只能当啦啦队;我们也能理解,你因为班里大家体育都太好了,以至于你在运动上没有天赋,无法在这种竞技性活动中展露自己的失落感;是的,这些细微的东西,我和妈妈仔仔细细的替你想了,我们能够理解你,在这点上。我们其实也很想搞清楚,是不是还有什么别的原因,让你觉得一年一次的运动会没什么意思,不想参加。
妈妈一直说过,小单阿姨家的姐姐,很讨厌四中竞赛班的那些同学中,弥漫着的那种“精致的利己主义者”的气氛,她感觉不到这个班集体的团结、温暖和热情。我不想谈集体主义这些空洞的口号,我是想告诉你,人为什么需要一个集体,需要爱与被爱,需要沟通和交流。因为,人可以在这种奉献、给予、理解当中,找到自己的存在感,自己的价值感,一种可以被别人认可、喜欢和接纳的感觉,这种感觉,会让你感觉到充实和幸福。我不知道你听说过,马斯洛的人的需求层次么?他把人对外界的需求分为5层:生理、安全、社交、尊重、自我实现。其中社交是你摆脱安全需求后的下一个层次,也就是说,社交需求是人的需求之一,有了这样一个环境,你才有一种被尊重,被接纳的自我存在感,否则,你会感到孤独、挫败,找不到自我存在的意义。所以,你需要向这个集体输入爱,去和其中的每个人去交流,真心地为他们做一些事,她们就可以接纳你,把你视为她们中密不可分的一份子,在这个过程当中,你就逐渐会感觉到自己的价值,一种被别人承认和接纳的感受。
也许我和妈妈就这件事想的太多了,也许我们过于敏感了,我们确实在乎的不是给你和郝老师请个假的尴尬,或者,是我儿子周六很累没时间休息和学习这些,这些都是困难,但是相比我们对一些基本价值和观念的东西,我们更在意。我们为什么对这些东西在意呢?因为,这样我们的儿子才能够幸福,我们不觉得,你远离集体可以使你幸福和快乐。
做一个自恋者,还是做一个自爱者呢?自恋者抗拒或回避人际关系,要么彻底厌恶,要么在表面上妥协,假装融入人群;而自爱者在社交圈子里来去自如,被人尊重和喜欢,但是有保持内心的特立独行。我是希望你能成为后者。
</code></pre>
<h2 id="2019107">2019.10.7</h2>
<pre><code>这阵子事儿太多,太多要给你讲的,不过,还是讲讲最近身边的事儿吧。
周四晚上,老爹生日那天,据说是女老师带着4个女生去你们宿舍,引起骚乱,教官让你们楼下罚站40分钟,孩子们集体发嘘,差一些就酿成“群众事件”,最后还是副校长力挽狂澜,平息了这一切。这是我和妈妈以及和别的家长一起勾兑出来的信息,不知道完整与否,真实与否,客观与否。
虽然都过去有一段时间了,也很敏感,为什么想跟你唠叨唠叨这事儿呢?原因是我觉得,这件事情,可以让你理解和学习到很多很多东西。
首先,信息无法永远还原到真实,我们和其他家长第二天就知道你们在操场上罚站40分钟这件事,好几个家长都非常愤慨,我和妈妈的主张是,不要着急,事情已经发生了,已经无法改变,现在最重要的是,搞清楚事情的事实和真相,然后再讨论如何应对也不迟。我们几方家长分别晚上问了孩子们,然后拼凑出上述的事实,可是,我们真的就知道事情的真相了么?老师眼里的真相是什么?校长眼里的真实是什么?教官眼里的真实是什么?我想说,其实都不一样。因为背后,都有每个人的视角、利益甚至一些不愿意或者不想公开的细节。为什么呢?可能涉及到尊严、“面子”,甚至是苦衷。所以,尽可能的客观和多渠道的获得信息的片段,并且拼凑出尽可能多的信息,尽可能还原事件的本来面目就非常重要了。没有尽可能多的事实,就不可能有真正客观和公正的结论。不过,遗憾的是,家长们一直都是从彼此那里获得信息,而并没有获得从校方得到详尽地信息,学校是最掌握信息的源头的地方,可惜,没有任何的对事实的描述公布出来,这点不得不让我们感到遗憾。
其次,我想跟你说一下我和妈妈的对这件事情的看法,就如同我们跟你事后说的,事实很重要,如果事实都是如同我们拼凑出来以及你描述的那样,我们可以得到以下结论:
1、女老师是这件事最大的责任人,她无论如何也不应该在夜里10点多带着女生来男生宿舍,她应该知道,男孩们这个时间可能有人只穿着裤衩在楼道里晃荡洗漱,带几个异性的女生进来,必然会引起骚动的。可能是她一时疏忽,我们姑且这样善意的认为。但是,事后引起这么大的骚乱,她其实应该站出来,向校方检讨、向家长澄清、向孩子们道歉。
2、教官,我们了解到的是,教官并没有给出明确的理由,因为骚乱就选择让所有的(初二)的孩子们出去罚站,而且是40分钟,这件事情上十分不应该。首先如果觉得孩子们在楼道里不遵守纪律,大呼小叫起哄什么的,就应该按照宿舍管理条例,去惩戒犯错误的孩子,而不是简单粗暴的让所有的孩子,包括那些没有参与起哄的孩子们一起受罚。这对那些守纪律的孩子们是不公平的,是权力的滥用,侵犯了守纪律孩子们的权益。是不应该的。另外,在黑夜里让孩子们罚站40分钟,这种体罚是绝对错误的。一切应该是管理条例为准,而且,惩罚措施应该事先规定好,而不是根据个人的喜好决定。他是把军队的一套管理制度,直接施加到了孩子们身上,这点非常不应该。军队是一个特殊的团队,而孩子们不是。有机会,我再和你讲一讲军队的本质。
3、校长,校长最后强力呵斥大家回宿舍,我和妈妈觉得处理的挺好的。毕竟在深夜里,100多个血气方刚的青春期的孩子,而且已经开始情绪上失控了(集体嘘教官),如果不制止住,可能会引起更大的骚乱,这个在10.1前这个特殊时期,可能会引起更大的问题。
另外,我想说一下,后续学校的处理这块。后续,学校并没有就这件事情向家长澄清。我已经表示过遗憾。正确的负责任以及有自信的校方,应该是向家长说明整个事件的过程,那位女老师应该想孩子们道歉,以及可能受到一些学校的惩罚。而教官也应该因为他的做法的简单粗暴受到批评。另外,应该向全体孩子们进行事情的解释,告诉他们为什么要这样处理,以及对他们中比较激进的孩子进行批评,告诉他们这种事情的边界和正确做法,给他们上一节生动的人生之课。这些,才是我们认为作为拥有权力和威信,拥有最多信息和真相,以及拥有家长们信任的学校,应该给出的负责人的解决办法。不过,最后这件事情,悄无声息的收场了,我真的觉得挺遗憾的,本来是一件非常好的让孩子们学习和受教育的机会,就这样丧失掉了。不过,因为是10.1的70年大庆的前夕,可能校方也惧怕因为这件事情上,引起不必要的麻烦,可能也是其中重要的原因。但是,从我的角度来说,即时是这样,也是不应该的。
我们几个家长,曾经想联名去找郝老师一起了解事情的真相,以及想校方反应我们的诉求。但是,这样做,可能给郝老师带来不必要的麻烦,郝老师在这件事情上也很无奈,已经超出了他可以控制的范围。另外,我们评估,学校也不会因此就改变对这件事情的处理,所以也就作罢了。但是,我想告诉你的是,我们虽然没办法这样做,但是在正确的做法应该是什么,什么才是正确处理一件事情的方式。你可能觉得,我们这些家长懦弱或者胆怯,是的,我们确实是,我们担心“不必要的麻烦”,这个社会,远比你们理解的复杂和矛盾,充满了各种问题,但是,正因为如此,才需要你们这一代人,去努力,去改变,让他变得更美好,更公正,更透明。
这件事,不是小事,所以我写在家书里,让你记忆住它,多年以后,等你长大成熟,回过头来再细细品味你曾经经历过的这件事,相信可以体会到更多。
</code></pre>
<h2 id="2019922">2019.9.22</h2>
<pre><code>周五去参加你们的游学家长会,讲讲你们出去游学的注意事项。挺好的,我和妈妈对这种出游很支持,人需要读书,也需要出去走走,用脚步、眼睛、耳朵去丈量世界,这样,你感知和认知的这个世界才立体和全面。记得上周我们一起看过一个纪录片《他乡的童年》,是芬兰开放式教育的内容,看到孩子们一起去森林里,去体会味道、色彩和生命,就是对这种教育的诠释。那个纪录片里,我们看到了完全不一样的学校和老师,可以独立设计给孩子们的课程,在意每个个体的发展,不考试,避免竞争,尊重每一个孩子的个性,保护孩子们的个体的独立。哈,整个纪录片,看上去就像是一个童话,但确实真实的芬兰教育世界。我是拉着你和妈妈一起看的,我不知道你是什么感受,对我来说,确实是感受非常深刻。这样教育出来的孩子,怎么能不身心独立,人格完整呢。其中,一个老师说的话,让我尤其印象深刻“我们不鼓励竞争,我们社会的价值观也是多样性,任何职业或者人生方向,都是被社会认可的;社会不是以财富来衡量你成功与否,还有很多标准,比如艺术成就,学识,或者某项手艺”,是啊,本质上,我们的教育,是被这个社会所塑造出来的,我们的老师也是按照这个标准,反过来影响我们的每一个孩子。
和一个朋友聊起来这事,他说,那是因为像芬兰这种国家,已经基本上解决大多数人的温饱,社会福利非常好,才有资本这么做。我们国家,很多人还挣扎在生存线上,而且,与500万的芬兰人比,15亿人的情况会更复杂和多样化,很难设计和实施这种教育方式。我觉得他说的也非常有道理。我非常欣赏芬兰的教育,也觉得,发掘人性中的光彩,远胜过统一化的灌输,但是,我也能深深理解,中国现在的教育资源匮乏,也做不到一个个性化甚至公平的教育。对此,我有一些无奈。去吐槽,教育部,学校的教育制度设计,或者老师的一些做法,其实是没有意义的,能做的,就是尝试去改变,做一个抱怨者容易,但是做一个行动者就难多了。我有我的工作和专业,我很忙,我也没有精力去帮助改良教育,但是,我心中是有这份情怀,所以,我能做的,就是把这种教育至少可以在我的宝贝孩子身上付诸实践,影响一个健康的灵魂,然后有机会,传播我的一些经验,分享给其他的爸爸妈妈一些,这样,对我来说,也是一种行动吧。
教育一个人,不是一个简单的事,背后是独立完整的灵魂,你既不能放纵你,也不能控制你,你每时每刻都在学习和感知这个世界,每个时刻,都在观察,也有你自己的思考。你对自己的放纵、懒惰有时候无法克制,你也会被身边的一些卑劣的事情所影响,比如手游、网络小说,我们能做的,也只有告诉你这些东西的本质,告诫你适可而止,但是,我们没法控制你,阻止你,因为我们知道,我们总是有没法监控你、约束你的时候,而那个时候,你可能会更放纵、更沉溺,比如上大学以后。所以,我们更希望,你自己能体会到,这些快感即刻满足后的游戏背后的处于利益的真实的设计意图,特别是那些氪金类、虐杀类的,他们是如何调动你的贪婪、恐惧和放纵。我甚至萌生了,买台PS4,让你玩一些3A大作的想法,不过,被妈妈否定了,也是,毕竟还有很多更美好更充实的事情可以做,不一定把时间花在游戏上。
我们现在的社会是有问题的,当然,每个社会都会有问题,只不过,我们目前面对这个社会,很多问题很棘手。我很多朋友都选择了移民,但是我还是热爱这个土地,也不愿意去陌生的土地重新开始,所以,我们这种选择就要求我和妈妈必须面对这些问题。在国内教育,就不得不面对高考,因为你没有别的选择,出国读书费用太高,除非是你特别想去,否则,我和妈妈都想让你在国内完成大学教育,这样,你不得不要和所有人一样,走这条千篇一律的路,走这条,我们最不喜欢的,统一化的路。没关系,既然无法逃避,就得面对,我和妈妈会陪着你走好这条路,就像前阵子特别火的《小欢喜》里面的那些家庭,我们会3个人一起,把这个路走好走稳。但是,有一点,我想告诉你,我不希望走这条路的过程中,你变得麻木,变得对成绩那么在意,又或对成绩漠不关心选择逃避,或者对学习之外的事情漠不关心,我希望你考上大学就可以,如果能考上好一些的大学更好,这个要求放在北京,不算太高。而,这个过程中,我更希望你可以不畏惧,对事情专注,对课堂外的内容同样关心,努力寻找自己的兴趣,思考和寻找你自己觉得一生愿意努力的事情和方向。从初中,到大学,还有5年时间,你应该可以找到一件你觉得值得终身奋斗的目标。那个时候,如果你觉得国内教育给不了你,一定要出去,我和妈妈也会努力支持你的。
你现在的年纪,是一个可以成为任何人的年纪,所以,要让自己更开阔,更自由,更热情,远离那些让自己沉沦的东西,不仅仅是游戏,甚至包括成绩,我希望你有一个自由奔放的心,努力做自己,不被别人左右和影响,多思考,多学习,保持谦逊,不断进步。
</code></pre>
<h2 id="2019710">2019.7.10</h2>
<pre><code>期末考试成绩狠不错,真的需要祝贺一下,2个周末的努力终于有了一个好结果,祝贺一下~
所以,所谓“走了狗屎运”,都是胡说八道,自己努没努力,自己是最心知肚明的,这次的成绩,肯定让你明白,一份努力可能就会有一份收获。这份成绩,是属于你的,还有一部分是属于妈妈的,你肯定知道我啥意思,没有妈妈孜孜不倦的帮你复习,你可能也不会取得这样的一个好成绩,我是希望,未来妈妈的“努力”越少越好,越是靠自己的努力获得成绩,越是珍贵,不是么?
其实,我更想告诉你,一切都是可能。记得我问过你,你为什么不能去那两个重点班?你为什么未来不能考到八十?你说,那不可能,那些人都太聪明,那些班都有全校最好的老师。我其实不在乎你上不上那些班那些学校,我是在乎你否定自己的可能,虽然你可能佛性地对自己说,我为什么要和她们比,人生有各种各样的维度,但是,我知道你骨子里在乎,你在乎这份成绩,你在乎的是你努力后需要的一份认可,不是么?既然自己内心是这样,就应该,也应该,去拼一下,就像这次,去享受这份努力后的成绩,也为自己增加一份自信和信心,我知道,你需要。所以,也让自己明白,只要努力,一切皆可能。
可是,我还想跟你说,一切都可能:你努力了,也可能你的成绩,因为某几门课的考试失误就差强人意;也许下个学期,即使你努力了,成绩也下降一截;也可能你努力了,也去不了一个更好的班、更好的学校;你努力了,也不一定达到你内心中想要的目标和结果。我想说的是,是的!这很有可能。我不想说什么励志的话,说什么你只要努力过就无怨无悔了,那个鸡汤话我不说,我就是想告诉你,“一切皆可能”。失败也是常态,而成功才是少数的情况,所以,学会接受失败,so what,再努力呗。而整个过程中,学会体会过程中自己的努力,享受自己改变的过程,看着自己的变化,这种喜悦是别人无法感受到的,人生路非常长,品味自己每次的不可能后面的可能,才是最有乐趣的事情。
你说要保持低调,不用给别人说,甚至爷爷奶奶,我觉得挺好的,保持这份低调,从头继续努力,因为下次的成绩,可不是从这个成绩的基础上累计,所有的东西,重新归零,空杯心态,继续努力呗。暑假里,多看书,学会丰富的自己的内心世界,克制欲望,少放纵在游戏和网络小说里,过一个有意义的暑假吧。Enjoy your vocation...
</code></pre>
<h2 id="201975">2019.7.5</h2>
<pre><code>这周有什么乐子么?恩,看了回形针的B站视频,有个讲DHT算法的,DHT算法是啥?大神们发明的一个在互联网上彼此分享文件的算法,你肯定会想,彼此拷贝一下不就得了,可是如果这个文件要分享给千百万人呢?如果这个文件是个盗版文件呢,是政府、法律不让分享的呢?是的,这些大神就发明了这个算法,让你无法找到谁是中心节点,大家彼此都是中心节点,相互分享,直至下载完毕。
B站上还有一个460万人观看的《宇宙尽头》的视频,半个多小时,我居然看完了,每5秒就把时间提速十倍,来展现地球往后发展,然后毁灭,然后太阳熄灭,然后银河系毁灭,然后所有的恒星毁灭,然后进入黑洞时代,然后是黑洞陨灭,宇宙的膨胀,直到最后连时间也将失去意义,一且趋于死寂。如果还有平行宇宙,那么一个个的宇宙要么可以再生(也许是智能体重新创造宇宙),要么趋于死寂。无数的想“小朋友”一起观瞧吐槽,我沉重和迷茫的看着这个视频,同时欢乐的看着各中鲜活的弹幕,“我还活着”“我就是宇宙”“珍惜现在”......,没有人可以活到这部短片结束,在宇宙面前我们都渺小如尘埃,而那些困扰我们的烦恼在这部短片面前更不值一提。
恰好,我这周还听了郁喆隽老师讲的德里达的解构主义,其实算是虚无主义的一种吧,当然虚无主义还有一个代表人物是怀疑主义代表休谟,还有笛卡尔,他们都认为人的经验部分是很小很小的,这个世界还有广大的我们无法认知的东西,而德里达的解构主义也是一类,他觉得之前人类认为的上帝、柏拉图们认为的形而上的统一的东西,也没有意义,世界完全是每个人主观的解释。听上去有些抽象,可是,你听完我说的上面的视频,可能就会对他们说的这些有所感悟。
回到现世,那我们还是得问自己 ,我生活、存在的意义何在,我很坦白的告诉你,我活了42年,从我现在记忆里有所记忆和认知的8岁以后的生活和所在时间里,我一直也在问自己这个问题,而且大部分人也在问,谁都没有答案,就像余华《活着》那本书想传达的,活着就是意义。当然,也不是那么低的要求,可能是笛卡尔说的,我思故我在。
我们小时候,家长对我们的学习不是那么在意的,我也不知道为什么,你可以去问问爷爷奶奶们,调研一下。可是现在的家长,就像被赶着的鸭子,不停的催促着自己的孩子参加各种补习班,拼命的焦虑着,整个社会,一起推波助澜,把这个焦虑推向高潮,原因何在?我觉得,本质的原因,可能是随着这个社会财富的分配越来越悬殊,同时社会阶级越来越固化,人们对自己能不能呆在本阶级充满了恐惧,我们还算是中产阶级,但是我们的孩子,也就是你,如果不能考上一个985、211大学,就有可能变成普通工薪阶级,甚至变成二舅爷那个阶级,但是,如果努力学习,勤奋,也许有个好的机遇,就变成晓丽阿姨那个阶级。我靠,你看到了没有,这个恐惧源于比较,源于对身边的人比较,记得有个说法,人们不嫉妒马云,不嫉妒任正非,但是人们嫉妒自己的同学、同事,也就是身边的比自己优秀的人,这种嫉妒和贪婪,是人性的丑恶面。尤其是现在这个社会,是一个以金钱和物质至上,充满了各种物欲和享受的社会,就愈发的被各种营销放大了,才不断地提升了家长们对孩子们未来的焦虑感。
可是,我和妈妈为什么还是要逼着你学习呢?
我一直跟妈妈说,我对儿子教育的诉求,是更在意他30岁以后40岁以后,是不是幸福。而能不能考上好的高中、大学,只是其中一个手段,而不是目的,我们不能像很多家长一样,本末倒置了。可是,怎么才能让我儿子幸福呢,其实我也不知道,但是,学习是一个手段吧,至少我是这么认为的。就像龙应台在《亲爱的安德鲁》里写给安德鲁的“我让你学习,是为了让你有更多的选择的权利”。你可以通过学习,终生的学习,不断地摆脱无知、偏见、大众的狂热、群体的无知,不断的探索未知的世界,寻求心灵的安宁。这可能就是我认为的幸福吧。当然,有一个好的文凭、技能,可能也至少可以保证你在社会上有一份不菲的收入,保证你的物质生活了。我和妈妈其实希望,你可以长大以后可以成为一个三观正、善良、独立思考、有趣,有自己一个特殊谋生技能的人,就挺好的了,这个要求,在我看来,不是太难,我们也是一直试图往这个方向努力的。大学只是手段,所以,我说你能考上个爸爸的母校就成,当然能去更好的学校,遇到更多优秀的人更好,认识更多有趣、聪明人的,师从更睿智的教授,更好一些。
回到现在,我记得你说过,里奥爸爸不给里奥买手机,但是与此同时,你们班也有吃鸡高手,而,我看到网上的一些文章,提到很多IT科技大佬,也不给自己的孩子提供手机,甚至互联网,他们只会让孩子读书和社会实践,为什么呢?里奥家庭算是你们班阶级上比较高的一类,她妈妈的家庭背景我就不再说了。这些人,从来都是自诩自己要成为社会的精英阶级,是未来要管理这个社会的一群人,她们是这样自诩的,她们也可以做到。如何做到,她们有超乎你想象的权力和财富,举个例子,晓丽阿姨资产应该1个亿左右,什么概念?是我和妈妈这样的人,一生收入的10倍还要多,为什么她们可以得到这么多财富,是因为中国前些年的大发展过程中财富再分配制度给了她们机会,这个是另外一个话题,有机会再跟你说。同样,权力结构也是多年分配和构建完了。普通人再想进入这个权利和财富分配体系,是非常非常难的。所以,这些人就要求,自己的下一代,要继承这个体系,就要求他们的孩子,必须以更高的标准来训练他们,训练他们的意志力、理解力、洞悉力,更关注历史、文化、人性以及政治,这样她们未来成长起来,才可以担负继续维持她们权力和财富的家庭使命。
我们没有,我骨子里是一个自由主义者,你是知道的,我也深深厌恶这些,可是我为什么不愿意你玩手机、看网络小说呢?因为,那些东西都是熵增过程,而学习是逆熵过程。什么意思?熵是物理概念,衡量一个系统的混乱程度,热力学上有个概念,如果你不干涉一个系统,它总是趋向于熵增,也就是趋向越来越混乱。人其实也一样,游戏、网络文学,都是为了满足人的短期欲望、快感的东西,而学习反过来,它狠痛苦,但是你坚持下来,它会让你不断地自我觉知,宁静致远,不断地去探索,让自己不断的摆脱无知和束缚,无论是数学、物理、生物,还是文学、历史、哲学,都可以让你体会到对真理的追求过程中的那种喜悦,但是这种喜悦的代价就是要时间和身体的付出,是的,学习的过程就是痛苦的,我可以明确的告诉你,这也就是很多人不愿意学习的原因,她们更愿意享受即刻的快感,享受懒惰的放纵,去玩游戏、刷抖音、看八卦。学习的乐趣,绝不是你排名上又碾压了谁,绝不是你这次比大朴又高了多少分,而是,你突然了解到细胞核里面的DNA是这样ACGT神奇的排列,从极限一直学到微分理解了莱布尼茨和牛顿的伟大,理解他们说的周星驰为什么被称作解构主义导演的会心一笑,对人们所谓的AI恐慌报之轻蔑一笑,是的,这个时候,这个时刻,你就可以体会学习的乐趣。
你的人生才刚刚开始,千万别陷入社会上云云家长一样的焦虑中,千万别陷入这个教育体制安排的阶级阶梯晋升的队伍中,千万别小纠结在你们班你们学校的排名和成绩的一分两分上,你的人生才刚刚开始,是一个你可以成为任何的人的年纪,努力学习,克服懒惰,积累知识,去努力成为自己想成为的那个人。不为老师,不为爸妈,心存志远。
</code></pre>
<h2 id="2019622">2019.6.22</h2>
<pre><code>周五晚上,接完你回来,不经意搜到万门大学的童哲校长讲的课,讲的通俗易懂。万门大学是一个虚拟的大学,童哲是这个虚拟大学的创始人,很有意思的一个家伙。他讲的这个数学课,也非常通俗易懂。这哥们是巴黎高等师范学校(巴黎高师)毕业的,之前不知道,他介绍了之后,才知道这个学校这么牛X,13名诺贝尔奖获得者、14名菲尔兹奖获得者,菲尔普兹奖是数学领域的诺贝尔奖,平均每年就有一位巴黎高师的校友获得菲尔普兹奖。我还专门跑到知乎上去搜了一下,了解了一下这牛X哄哄的巴黎高师。不过,这哥们志不在学术,偏偏做起了高等教育的普及创业项目,“万门大学”。英文就是one man大学,就是说,一个人就是一个大学,是你自己的大学,这年头,像他这样理想主义者是少之又少了。我去谷歌上搜了一下这哥们的评价,大部分还是正面的评价的。我曾经给你说过,我有一个理想,就是教育平民化,也就是让每个人都有接受优质教育的机会,特别是那些高级教育资源,也可以很低的成本获得。后来,我发现,我的这个想法其实早有人开始实践了,国外的MOOC就是其中之一,MOOC是一个理念,就是让大家利用在线方式,降低高等教育的成本的形式,包括coursera、Udacity等,国内其实也有,各高校也开放出很多免费的高校的教学视频出来,童哲的万门大学其实也是这个大潮中的一员。
为什么要让教育平民化呢?那是因为,教育可以让一个人摆脱愚昧和奴役,教育可以让一个人从社会的底层阶级跃迁到中产甚至精英阶级,教育可以让民智开启,让人们更自我觉知,更了解这个世界,满足人们的好奇心。
可是,真的可以这样么?我后来渐渐明白,单纯的依靠教育,是改变不了这一切,达到上面说的这个理想境界的。为何呢?
因为,人性中的懒惰使得大家不可能自我驱动的去不断学习,学习本身就不是一个即时获得愉悦的活动,它是需要你做出努力,持之以恒,层层推进,才可以获得系统化的学习体验的。不像游戏的特点,让人获得即时快感,也不像各种娱乐活动如看电影看综艺节目,需要你保持专注、紧张的持续的脑力投入,需要不断地融汇过去的知识,在扎实地掌握已有的知识的基础上,才可以获得系统化的学科体系,绝不可能是一蹴而就的。
这就要求,你对学习有持之以恒的决心和毅力,而且,需要不断的思考,持续的投入时间和精力。那你肯定要问,这么痛苦还要学习干嘛呢?这是一个很好的问题。
因为学习可以让你领略到一个超越你现有的认知范围的愉悦体验,可以让你极大的满足好奇心。什么意思?我说说我这3年的机器学习感受,来说明这一点。我最开始就是听说alpha Go战胜了李世石,是靠人工智能算法,作为自诩自己为理科男的我,很好奇,到底是怎样的技术,完成了这个过程呢?真的是好奇心,非常强大好奇心,让我开始学习机器学习。后来,我开始从最基础的大学的数学课开始复习,一点点地开始深入,花了大半年时间,停滞不前的感觉,也感到非常的挫败,但是坚持了半年后,突然有了突破,后来又开始学习深度学习,再到1年后,我加入了现在公司,专职开始做这方面的工作,每天都很充实和开心,也每天都在这个领域不断的学习进步。
现在的教育,特别是中国的教育,你一定要明白,教育的目的最主要的是筛选孩子们,其次才是让你获得知识,在我看来是本末倒置了。所以才有中考、高考,只有一部分人可以进入更好的学校。所以,你一定要明白这点,不要让筛选的这种苛刻手段,剥夺了你学习的原始东西,“好奇心”。真的!好奇心对一个人太重要了,有了好奇心,你会不断地在知识的海洋里不断地深潜,去探究终极的世界。即使那些你知道的好高中、好大学,比如朝阳的八十、海淀的十一,清华、北大等,有些老师们讲的东西,也是一样的枯燥无趣,他们只是为了完成教学任务,缺乏对教育的热情,他们可能会损害到你的好奇心,你学习的热情,甚至对一个学科的兴趣。当然,也能遇到好的、优秀的、热情的、渊博的老师,那绝对是你人生的幸运,就像陈思老师那样的,一定要珍惜跟优秀老师学习的时光和机会。
所以,作为学习,一定要有好奇心,摒弃那些重复的,枯燥的演练,去探求知识背后的原因,多问自己“为什么”,多问老师“为什么”。一旦你真正掌握了知识背后最本质的东西,你就会觉得学习是一种游刃有余的快乐的掌控感。
我希望,学习可以成为你一生的事情,我就是这个信条,永远保持好奇心,永远保持谦逊,在渺小的世界面前,永远有一颗孩子般好奇的心。
1.基因传那张
2.细胞的奥秘
3.杜拉斯
4.童哲的万门大学和18人班的故事
5.希尔伯特空间
</code></pre>
<h2 id="2019613">2019.6.13</h2>
<pre><code>回家路上,我跟你说起了,香港的反对逃犯条例的事情,举办方说有103万人上街反对通过这个条例,官方是30万,anyway,这件事情对香港,对中国都是一件非常大的事情,据说香港17年上街游行的人数最多的一年。(我去维基百科了一下,2002年没发生啥啊)。我和刑阿姨、徐叔叔,因为香港的事情的看法,在我们的群里面,讨论到半夜。可见,我们大家对这件事情的关注。可是,香港到底发生了什么呢?
起因是一个台湾人在香港杀了人,但是香港和台湾之间没有引渡协议,所以无法将他绳之以法,于是,港府就发起一个法律提案,补充现有的引渡国家,增加大陆、台湾和澳门。其实挺好的修正啊,可以将坏人绳之以法,可是为什么香港人要这么多反对呢。原来是因为,香港人,特别是年轻一代,对我们大陆的法律没有信心,不信任我们大陆的法律可以保障他们的权利,一旦被引渡到大陆,他们觉得就有可能受到不公正的审判和对待。即使港府保证,必须是7年徒刑以上的、甚至需要特首批准,才会引渡等,都无法平息香港人的顾虑。
这件事情,加上最近的中美不断升级的贸易之战,已经成为中国历史进程的重要事件,甚至是转折点。可能会对你,你们这一代,都会产生深远的影响,所以,我是十分关注的,我想通过这件事情,告诉你一下我的一些感受和体会。
首先,一定要有自己的判断力,我们的法律是不是不公正,我不做判断,但是,那么多香港人不信任,是不是有什么原因?所以,如果是对判断力和对事情真实本源有探究精神的人,应该去深入了解能力,捋清楚这背后的来龙去脉。另外,应该多去听各方的声音,兼听则明,不仅仅是反对在这个条例的人的讲法,也要听支持这个条例的想法,听我们政府的看法,听大陆人的一些大V的看法,听香港本地人的看法,听台湾人的看法,听海外坏人反对和支持的看法,听国外政府对这件事情的看法,得到的信息越充分,越能对这件事情的真实的一面多一份了解。
其次,应该跟深入的了解,政体的差异,意识形态的差异,对社会的割裂,这个时候,应该跳出这个事件本身,看待香港人和我们政府在这件事情上的根本的差异性,香港人是在英国多年的殖民下,从小可能就被灌输我们称之为“西方自由民主、普世价值”的概念,而大陆这边是唯物主义等思想,对这种这种根深蒂固的差异性的理解,可能才可以理解这个事件的根本原因。那么,这种政体、意识形态究竟是什么呢?我们不仅仅要知道这些词,更要理解他的含义。这样,就可以引出你对政治哲学的深入了解。比如你可能会去了解我们大陆的政治哲学之父马克思的思想,列宁的思想,以及毛主席的思想;你同时也会去了解英国、美国政体、法制背后的洛克、孟德斯鸠等,甚至还会波及到霍布斯、马基雅维利、亚当斯密等。
最后,你再回到这个香港的事件上,你会发现,你有了自己独特的视角和判断力,你对各方的观点,以及背后的立足点,以及他们的目的和目标都会横亘于心,你也会觉得,你和这个世界是同步的,你和这个时代是同步的,而不是仅仅在学校里听到和学到的,你也会对你目前所学的内容充满兴趣,就像我看你的历史书一样津津有味的,这才是真正的学习,才会让你的学习生活变得更充实和有意义。
</code></pre>
<h2 id="201969">2019.6.9</h2>
<p><img src="/images/20190610/1560136499329.jpg" alt="" class="myimg25" /></p>
<pre><code>上周没写,这周继续。
我周末捧着你的历史书认真看了一遍,看到阿倍仲麻吕的故事,在导读里,我考你,你说这个在导读里,不需要背诵下来。我笑笑不语,我想,我应该给你讲讲他的故事,在家书里面。
19岁,阿倍仲麻吕就随着日本遣唐使来到中国,你知道为何日本要派遣大量的遣唐使来中国么?是因为,日本人有个特点,谁把他打趴下他就服谁。当年,唐高宗时代,中国军队以少胜多完败日寇的白江口之战,让日本人彻底服了,所以后来不断地派遣遣唐使来唐学习。阿倍就是这个历史背景下来大唐的。19岁来唐,然后不断地学习,因为隋代开启的科举制度以及大唐的开放,阿倍仲麻吕居然考中进士,成为学霸。后来不断地得到唐玄宗的赏识,做到了当时国立图书馆馆长和国家博物馆的馆长的高位。54岁那年,他思念家乡,从江都(扬州)坐船回日本,还曾遇到第6次东渡的鉴真和尚,两人还曾有一面之缘,可是人家鉴真这次终于渡海成功了,可阿倍却被风暴挂到了越南,全长安都以为他死了,还祭奠了他,他的好友李白也为此泪洒长安。可是,阿倍1年后,又“诈尸还魂”地回到了长安,太逗了。可是,他已经快60的人了,也不想再折腾了,就选择在中国养老了。可是,后来又偏偏赶上了安史之乱(755-763),直到773年,他73岁的时候,去世了。
你看,导读里的一句“在我国的西安市和日本的奈良市,各建有一座阿倍仲麻吕纪念碑。阿倍仲麻吕是唐朝时来华的日本人中的接触代表人物”,居然隐藏着这样的一段活生生的历史,教科书可能有时候看上去乏味枯燥,但是,你自己应该去发掘它背后的知识,这才是学习的乐趣所在。就像你再一次去看电影《妖猫传》,看到阿部宽饰演的阿倍仲麻吕的时候,对这个人物就会感觉立体的多,就会倍感亲切了,这可能就是学习有意思的地方吧。
我还读到了宋辽金,这段纠结的大国之间的恩怨,原来辽国真的是跟他的国名一样,幅员辽阔,一点不比北宋小,建国也不比北宋晚多少,更是在后唐的时候,就从石敬瑭手里拿下幽云十六州。我们从小就觉着辽国就跟个边陲蛮族一样,总是滋扰大宋,可是,历史总是让我们吃惊。更有意思的是,这样的一个大国,居然后来又被经过完灭,替换了辽的大金比辽更凶悍,才有了后来的岳飞抗金,从小就耳熟能详的爱国故事。当然,后来的铁木真开启的大元,才是真真的凶悍之极,几乎统一了欧亚大陆,当然这个也是后话了。
所以,我就觉得,真的别觉着咱中国如何如何地大物博,如何人才辈出,那个年代,其实是被“蛮族”们,不停的蹂躏的,从最开始的大宋,到后来的南宋,越活越抽抽,地盘越来越小。可是,你想过这个是为何么?还不是宋太祖赵匡胤,害怕他当年黄袍加身的古法,被牛逼的武将们重演,所以才“杯酒释兵权”,导致宋朝一直都是重文轻武,唉,原来,都是他老人家的错啊。。。
好啦,这礼拜就聊到这里,我看你的历史书,真的觉得很有意思,一边看,还一遍去查查百科,查查地图,为何呢?因为我真心的对历史感兴趣,我真心地想知道1000年前的人们到底经历过什么,发生过什么。我的人生可能也就是7、80年,了解了这2000年的历史,就对我的渺小深有体会,也更珍惜自己活着的当下,珍惜你,珍惜妈妈,珍惜经历的人和事,因为我知道,早晚,我们都会成为历史。
</code></pre>
<h2 id="2019524">2019.5.24</h2>
<pre><code>这个礼拜,老爹继续听徐贲老师的课,这节课讲的是帕斯卡尔。
这个帕斯卡尔,其实就是帕斯卡,初中就知道这位仁兄,学习他的关于液体压强的帕斯卡定律,可是,不曾想,他居然也是一位哲学家。为此,我专门去百度百科去查了一下,对他的思想和哲学一笔带过,但到时维基百科上,专门提到了他的哲学成就。
帕斯卡的哲学,充满悲观主义,但是也同时教给你一些积极地东西。挺奇怪的吧。悲观的是啥,就是赤裸裸的在揭示人性的丑陋面:被情绪左右、胆小、鲁莽、愚蠢、狂妄和虚荣。人在茫茫大众中,感觉到的是自己的渺小和卑微,无法把控的自我和情绪,对现实的无力感。积极地一面呢,就是人要相信心灵的力量,除了我们理性的逻辑的头脑,还要有心灵和精神的感悟,是人们自我救赎的办法。所以,最终,帕斯卡还是把这一切导向到了宗教,得到终极的宁静。
帕斯卡把人比作思想的芦苇,芦苇就是指人无法把控自我命运的可悲,而人唯一剩下的无法被剥夺的就是“思想”,所以,人文的修养,在帕斯卡这里倍受推崇。这个是不是完全颠覆,我们对他是一个科学家的认知。
这个礼拜,我给我的同事们讲了深度强化学习,我已经研究了2个月了,这次分享,其实刚给他们开了个头呢。这个理论是一套很庞大的理论,主要是为了解决时序决策的问题,讲人话,就是帮你做决定用的算法。你知道的AlphaGo就是用的这套算法做基础,打败了人类的。后来进化出来的算法,在dota的人机对战中团灭人类的顶级玩家,对,就是这么牛逼。我一直有个心愿,等我研究透了,带着你一起实现一个自己打游戏的flappy bird,不过,现在看我没啥问题,主要是你,这个大忙人,是不是有时间有兴趣,跟我一起搞一搞。其实,顺道又嘟囔一下,游戏本身只是满足欲望和人性丑陋面、快感的工具而已,所以,沉溺其中全无必要。我能理解你,这个年纪很难摆脱这种即时快感的诱惑,不过未来你一定会明白我的意思,毕竟我也是疯狂玩过2年游戏的玩家。
上周贸易大作战,没有丝毫的偃旗息鼓的意思。你听说过修昔底德陷阱么?就是古希腊历史学家也是大将军,修昔底德曾经说过,斯巴达和希腊,两强终有一战,换成我们中国话来讲,就是一山容不得二虎。但是,这件事对你们其实影响深远,想想日本因为广场协议失去了十年,中国呢,万一落败,看现在的形式,也是大概率落败,中国失去十年的话,就是你宝贵的青春岁月,你的学业、就业都会因为这场贸易战收到影响和波及,可能你不会再有机会去留学,要面对国内糟糕的就业失业,对未来充满悲观等等。甚至,发生局部战争、经济崩溃,谁说不可能,中国已经昂扬向上三十年了,上天会一直眷顾她么?万一,这个趋势掉头向下,我真心不希望赶上的是你们这一代。所以,你们同学如果有时间,也应该关注这些时事,其实,就是关心自己的命运。也许,1-2年内贸易战就会停下来,中美继续回到合作的道路上来,谁知道呢?未来从来是我们无法想象的,如果真的是那样,我倒是非常乐意看到的。
无论如何,目前还是岁月静好,看着你一天天的长大,变得顶天立地,老爹从心底由衷的高兴。
</code></pre>
<h2 id="2019514">2019.5.14</h2>
<pre><code>贸易战继续打,美国给2000亿的商品追击到25%的关税,而剩下的3500亿美元的商品的25%的关税,也在商讨中。这个对咱们国家会产生深远的影响,但是貌似大部分人都不关心,但是,这件事情实际上影响深远。我去查了一下中美的贸易情况,2018年美国与中国双边货物进出口额为6598.4亿美元,特朗普说的征收的关税,就是这部分。如果这些关税都施加上去,将会征收大约1200亿美金的税收。这对中国的出口是打击性的。我查了一下,2018中国的总出口额是2.4万亿,也就是美国大概占了25%(1/4)左右。一旦关税大范围开征,就会影响到中国的出口型企业,以及上下游的企业,比如给他们供应原材料的,初级加工的,以及做外贸生意的企业,从而带来更多的失业压力。同时,我们国家也会美国进行惩罚性和报复性的关税收取,也会导致,我们购买的美国的进口商品价格上升。比如大豆等农产品。这些也会体现各种各样的产品的价格上涨。唉,关于贸易战,其实你们学校应该给你们深入的讲讲,这才是对你们和你们的爸妈以及整个社会影响巨大的事情,才是你们政治课上应该给你们讲的东西,可以让你们了解到更多的关于这个真实世界的各种变化。
上周我继续听徐贲老师在看理想上讲的《现代的诞生:启蒙运动经典》,听得我津津有味。之前他讲过《自由的黎明:文艺复兴经典》,应该和你说过了,这次是他的第二季的讲解,主要面对近代的一些哲学,特别涉及到西方现代国家建立过程涉及到的一些思想。咱们学校里初高中阶段,还有理工科大学里,一般不会深入讲解《西方哲学》,可是希望哲学,特别是这次徐贲老师讲的现代国家建立所以来的一些立国的思想,是近现代300多年,美国、英国等西方现代资本主义国家强大的根源,同时,也是17、18世纪先哲们,在200-300年前,就对这个世界、社会、人生、人类的深入思考,怎么能不学习和了解呢!所以,如果有机会,你也可以深入了解一下。徐贲老师这次讲了霍布斯和洛克,这两位我们很少听说,我们只会讲解伏尔泰、卢梭、孟德斯鸠等,但是,对西方人来说,这两位其实和他们一样赫赫有名,因为正是他们开启了西方民主国家和现代制度。
霍布斯的理论挺有意思的,就是你作为老百姓,我假设你就是邪恶的,人性中的恶表现在,你一旦有能力,就有可能侵害别人,反之亦然。所以,这个社会就是丛林法则。那你不就该哭了么。没事,他想了一个招,给你一个“利维坦”,这是啥?在古希腊神话中是一个凶恶怪兽,无所谓了,你就是认为他很强大也狠邪恶。然后,你出卖自己的自由给他,他来保护你。他是被人格化,不再像过去马基雅维利的《君主论》中那个主子,而有可能是一个政党、一个组织,而且他是站在人民的角度上的。“孩子们,我都是为你们好,放弃自由把,我给你安全”,哈哈,听上去熟悉么?但是,致命的是,他并没有一个约束这个利维坦的办法,也就是权力没有关入笼中。可能你觉得挺二的一个理论,但是这个可是经过黑暗中世纪、王权以及科学理性都刚刚启蒙的17世纪啊,可以提出一套至少在今天“某些人”眼中,还是挺对还可以看到的体制,不得不说厉害啊。
洛克则对人性乐观的多,他认为人性是善的,虽然人也有邪恶的里面,但是人们可以通过自己的理性、反省,把人性中的恶消除掉,实在约束不住一些恶人,怎么办?那就有限度的牺牲自由,形成一个社会契约,建立一个叫国家的机构,来帮助约束这些坏人。但是,与霍布斯截然想法的是,他主张绝不能自己放弃所有的自由,完全交给“利维坦”,反倒是应该处处防范这个利维坦,防止他变成戕害人民的暴力机器,他完全是站在人民的角度,主张人民的自由权、财产权、生命权生命不可侵犯,前面提到的国家,如果去剥夺人们的这些权利,人民有权推翻它。他也没说这个帮助约束坏人的国家,非要是民主国家,也可以是君主、君主立宪、独裁甚至是中央集权,只要他保护人民的这些基本权利就可以。
恩,徐贲老师,暂时就讲到了这里,好期待他的更新,因为后面还有孟德斯鸠、卢梭、亚当斯密等等,真的是一场很有意思的思想之旅,爸爸听得如痴如醉。这个礼拜,咱们还一起去参观了高能物理研究所,遇到那位84岁的老科学家,儒雅厚重的老爷爷,也让你感觉到人文之外的理学大家的风采,相信都会给你留下深刻的印象。
我希望,能不断的给你讲解这些内容,给你提供这类参观学习的机会,让你既有理性思维,又有人文气息,摆脱游戏、网络小说这些让人追求即时快感的“快感快消品”,相信你是可以理解老爸的用心的。加油!
</code></pre>
<h2 id="2019422">2019.4.22</h2>
<pre><code>送你去学校回来,听梁文道长讲亨利四世,原来亨利四世是英国历史有名的明君,而且还是那种浪子回头型,其中,带坏他的人,就是我们都非常喜欢,陈思老师讲的亨利四世里面那个巨逗的“福斯塔夫”。据说,福斯塔夫的名气,一点不比哈姆雷特小,是莎翁戏剧里面仅次于哈姆雷特的角儿。虽然,福斯塔夫坏透了,但是还是非常招人喜欢,为什么呢?原来,他喊出了当年对那些贵族和有钱人的厌恶,这种态度在当年,也就是伊丽莎白一世的年代,是个难得的宣泄,下层人民需要福斯塔夫这种嬉笑怒骂的“恶棍”,讲出自己的心里话。
我去大语文那帮你听语文改革的讲座,是黄寺小区的苗老师讲的,她告诉我们这些家长,语文改革的方向就是从过去的重语轻文,而逐渐转向重文轻语,啥意思呢?就是说,过去那种考核你语言技巧、语法规则啥的这些内容为重点的方式要改变了,以后更强调文学方面的修养,比如可以看懂、理解,包括古文、外国文学、古代诗歌等等,需要你们去多读书,才可以达到一定的考核标准。我觉得,这个改革方向很好,和我和妈妈的理解一致,读书才是最重要的事情,而不必太拘泥于那些各种语法的奇淫技巧。读书多重要,已经跟你聊过很多了,就不多说了。所以,今后你要读更多的书,好在是我们培养你对书的亲近感,终于有个功利性的好处了,呵呵。
说到读书,我最近听了樊登读书会的樊登推荐的新书,《低风险创业》。讲的挺好的。财商对一个人很重要,我们这代人很少被教育如何赚钱,但是我们长大了,却发现,赚钱被社会认为是最重要的事情,没有之一。这样一来,又走到了另外一个极端,人们对金钱的崇拜和追逐,已经近乎病态。我的观点是,确实需要学会赚钱,至少可以让自己不太为赚钱而奔波和辛劳,这样才可以有自己的自由去追求自己喜欢的事物。赚钱这事确实有些难,充满不确定性,即使是这样,还是有些方面是可以找到一些规律的。樊登就讲到了一些,爸爸在自己的实践和体会当中,也感悟到一些内容,基本上和他说的相符。比如,要去发现并解决问题,而不是为了创业而创业,没有针对问题解决的创业,是无意义的。也没有必要卖房或者大笔投资,要控制风险。没有人愿意付费的需求,都是伪需求。等等。等你再大一些,我可以把这些内容分享给你。未来,我可能会要求你去尝试一些小范围的创业实验,比如去尝试卖给身边的人一些东西,在网上参与交易。甚至,极端些,都可以在大学期间休学1年去尝试做做生意,或者我来做你的天使投资人,尝试解决一些身边的问题,形成商业创意。赚钱的目的是,为了解放自己,free你的时间。你要明白,打工,其实就是把自己的时间和精力,贩卖给老板。老板绝对是靠剥削,或者说的隐晦一些,是榨取你的剩余价值过活的。不过,你也不用羡慕老板,他其实也承担一定的风险。而free了自己的时间,又回到老问题上,你到底想做一些怎样自己喜爱的事情,或者为这个世界、社会,甚至狭隘的只为自己,做一些怎样的事情,做一些值得你投入一生都愿意做的事情。这些内容,越早思考,越有意义。
今天早上听了梁文道长讲的小偷家族,我和妈妈看过这个电影,讲的是一群非亲非故的“坏人、小偷”组成的家庭,生活在一起,组成的临时家庭,却充满了人性的关怀。按理说,他们是社会的一群负面的人物,杀人、盗窃、欺骗等等,这些非常让人不齿的行为,但是,他们这群人却仍然充满了彼此的关爱关怀,还有对生活中美好的追求和向往,还有内心中怎么也无法泯灭的善良。爸爸妈妈,你当然也是,从小受到的教育,建立的是非观,都是人是非黑即白的,比如,曹操是奸诈的,刘备是正义的,毛主席是伟大的,蒋介石是龌龊的。。。太多的明确的画像,黑白和线条太过明显了,这当然不是坏事,让一个人建立一个正确的价值观,挺好的。但是,我想让你知道,其实,这个世界除了黑白界面分明外,还有这无数的灰色。再美好的人,内心也会有阴暗和龌龊的一角;再卑鄙无耻的人,内心也会有一点光明和善良尚存,不要用太犀利和武断的判断,去直接的做出判断,而是要有一颗柔软的心,细腻的心,甚至是关怀的心,去看待这个世界。尝试去理解他们,理解卑劣背后的缘由,同时,也不忘对那些看似善良和完美的人,也时刻保持一丝的警戒之心。
好吧,妈妈说,得按时,保持习惯,我其实已经写了大段了,但是,总是需要个收尾,才能发给你。我承认,妈妈说的对,可是我就是个懒散的人,恩,妈妈说的对,我应该写完这个结尾了,再写就是下一篇了,任何事情都应该有一个阶段,任何时光都会有成为过往。
</code></pre>
<h2 id="2019421">2019.4.21</h2>
<pre><code>我觉得,千万别把事堆到最后再做,很被动,所以,我决定,早点写家书,万事都尽早。
早上听了半天袁腾飞讲历史,那个逗逼啊,有时候我就想,为什么,学校不鼓励播放这些视频,在食堂里,宿舍里,公共场所的电视里,播放最优质的教育材料,让你们接触最优质的教学内容。不过后来想明白了,我不是今天才听到袁腾飞这些视频么?早干嘛去了。对,信息不对称造成了这些。所以,我现在已经形成了一个观点,一定有更牛X的东西存在,只是我不知道,于其我自己思考思索,不如去谷歌(百度就算了,实在是垃圾得很)一下,就立刻知道了。比我们小时候获取这些信息方便不知道多少倍,而且,北京找不到,找全国,全国找不到,找全球,恩,总可以找到better solution,yes,no best,but better always exists。不过,找到了最好的,是不是成为你的知识,融入的血液里,这个是另外一个话题了,有机会再说。
我发现我现在挺爱给你写信的,而且之前还纠结写啥,现在想通了,就把这玩意当做周记,让你知道老爹每周都在想啥做啥,思考啥。这样你就了解成年人的世界,窥视一下成年人的喜怒哀乐,于其给你语重心长的讲些大道理,不如把我的所思所想分享给你,让你知道30年后,你变成一个肥腻中年人的时候,生活会是什么样子。不过,那个时候,可能是完全另外一个样子,毕竟科技、社会在飞速发展,但是你面对的深层问题应该是不变的:你的身边朋友挣多少钱,又去哪里旅游了,开的是什么车?恩,这些油腻话题,对,无趣但是无法逃避,日日被包裹着。唯有夜深人静,或者,公交车上降噪耳机隔离开喧嚣,在清睿的声音里、淡淡的书香里,才可以找回灵魂中的我。
早上听了一会儿油管上的stone主播,讲马太福音,有点意思。根本不是宣扬宗教,而真的是当故事来讲的,我当初要是知道这么有意思,就读给你听,至少推荐给妈妈,让她讲给你听。让你从听故事的过程中,理解善与恶,福与报。人还是需要有信仰的。我们的社会,太需要信仰了。你可能要说,没有信仰会怎么样?没有信仰,人们对死后的世界缺乏敬畏,就会贪图当世的享乐,缺乏底线和畏惧,做出超越底线的事情。没有信仰,你还会怀疑自己存在的意义,对自己的终极归宿,充满了虚无感。stone也说了,他本人也不信仰基督教,但是,了解全世界数以亿计的人信仰的东西,从中还是可以汲取很多有意义的东西。而对于个人来说,信仰不一定是一个宗教,而是找到自己认为真善美,为之追求和捍卫一生的价值感,也确实是必要和幸福的。
你终于回家了,今天妈妈让我给你讲数学,恩,我是耐着心给你讲完了,恩,你也终于耐着心听完了。是的,你发现,这些题目其实都不难,以你的智商,是都可以搞定的,而且,做错,没有做出来,原因都是你缺乏耐心和细心。耐心和细心,是啥呢?是习惯。我其实小时候,也是个粗心的人,不耐心的人,我花了40年,慢慢地磨成了这样,特别是我当工程师的经历,更是对这些习惯的养成至关重要。而你,可能也需要很久、很长时间,才能慢慢地养成这些好习惯。习惯对一个人至关重要,你将来会越来越理解我这句话的。
这周分三次写的,碎叨,不用那么行云流水,更像是老爹,一个老人家的嘚啵嘚啵的聊天,我喜欢这种风格,希望你也能喜欢。其实,不指望你能仔细字字阅读,但我知道,总有一天,你会一个字一个字的再读这些文字的。想起了冯唐的那句话“用文字打败时间”,恩,不一定打败,但是这些文字产生出来,不会随着时间轻易消逝掉….
</code></pre>
<h2 id="2019414">2019.4.14</h2>
<pre><code>最近发生了很多事情,不是咱家,是这个社会、这个世界上,跟你唠唠。
一个是叫张扣扣的年轻人,杀了3个人,是22年前,暴打他目前致死的一家三口,张扣扣当时还是个小孩,看着母亲被打伤致死,心里的仇恨一直在成长,以至于22年后,他连续诛杀了这3个人,这一家人在村里也是乡里的干部。这一方面是一个畅快淋漓的为母报仇的故事,另一方面又是一个极为凶残的杀人故事,我看了一些报道,在知乎上,有人说,张扣扣是一个有情有义的人,君子报仇十年不晚。但是,理智网友,却也提出,任何人的生命都不应该被轻易剥夺,即时他罪大恶极。我其实,也被这些不同的观点带动着,冲撞着,纠结着。也许,很多事实并不清楚,你永远无法知道真相到底是什么,你看到的听到的,都是经过了情绪渲染的故事罢了。但是,我想说的是,即时是这样,我作为一个个人,还是可以给我带来很多思考。什么才是正义?22年前为何王氏三兄弟没有得到惩罚?基层的司法是否存在问题?整个社会制度为何不能保证大众认知意义上的正义和公正。也许,这些问题不存在的话,这个悲剧就不会发生。
看到一个姐姐,花了60多万,买了辆红色的奔驰,结果没开出多久就发动机漏油,等待15天,得到的答复是给维修换发动机。维权无果,只好去4S店去闹,然后把视频发到网上,就火了,才引发这么激烈的讨论。爸爸看到这个,感觉真的是一种悲哀。要知道,姐姐能买的起这样的车,已经是很有钱了,这样的人都无法维护自己的权益,还要委屈的坐在发动机盖上大哭。有钱人,也无法维护自己的权益。这是不是就说明,社会制度某些方面出了问题。为什么一个人按照程序去申诉自己的权益得不到解决,反倒是通过这种颇为泼赖的方式,却得到了解决。究竟制度层面,哪个环节出了问题,这点难道不值得所有人深思么?
最近经济环境不好,外企也都在陆续撤出中国。在oracle工作的乔叔叔,还有德国公司工作的徐叔叔都被裁掉了。很多国内公司开始曝光996的问题,就是早上9点工作到晚上9点,一周工作6天。恩,非常不人道。有人甚至做了一个叫996.icu的网站来曝光那些996的公司。可是,京东创始人刘强东、阿里巴巴的创始人马云,纷纷站出来,为996摇旗呐喊。我真的是无语了,这两位真的是会吸引大家的火力。不过后来一想,倒也合理,屁股决定脑袋,作为老板,当然是希望996了,尽可能的压榨员工,让自己的利益最大化,倒也无可厚非。只不过,你们偷偷赚钱就好,何必来为这违背大部分人福祉的行为歌功颂扬呢。作为工作,其实就是贩卖自己的劳动力,换取生活所需,有甚者,可以从中得到满足感,但是大部分人只是为了生活而不得已的交换,他们两个老板,不应该用自己的价值观去绑架别人,特别是他们有这样的社会地位和影响力的时候,更应该注意自己的言行。
我给你讲这些,不是想让你灌输啥社会负能量,而是想告诉你,社会其实是很复杂的,是的,人是复杂的动物,而他们组成的社会就更加负责,你们在学校里,真的如同温室一般,但是,你们应该知道外面的真实世界是怎样的。爸爸妈妈终有一天会老去,而你将逐渐地走上社会,了解他,生活在其中,无论是喜欢他还是厌恶他,你都要和他相处,所以,早一些了解他,对你是没有坏处的。而,只有你了解了他,深入的了解了他,你就会关心,他为何成为现在样子,他过去是什么样子,能够做什么可以让他变得更美好。你就会思考,会努力,你担当,会尽你的能力,帮助这个社会变得美好。而面对着这一切,你所需要的是学习、好奇心以及独立思考能力,要尽可能的收集信息,甄别信息,有一个坚定的正确的世界观和价值观,不固执,不偏执,但也不骑墙,做一个有自己思想和灵魂的担当的社会公民。
</code></pre>
<h2 id="201946">2019.4.6</h2>
<pre><code>最近又被道长颠覆了一通认知,不得不跟你唠唠。道长是谁?梁文道。这个操着不标准普通话的人,给我娓娓地一本书一本书的讲,就在“一千零一夜”,我跟你说,这个节目“有毒”,毒的我欲罢不能,爽到心彻。
比如那天你听到的那集,费马大定理那集,把数学比作诗,把数学家比作诗人,两者共同点都是,没啥用。你说,诗有啥用,诗词歌赋愉悦一下自己之外,能有什么真正的实效的东西?数学在近代的欧洲,也是很多人的思维乐趣,是一些贵族饭后自我消遣的小确幸。数学家也是和诗人一样,完全生活在自己的世界里,无法自拔的一群。而且,极尽传奇故事,拉贝尔、伽罗华、高斯、欧拉、拉马路金,当然,还有我们这个贵族先生,费马。
比如,源氏物语,我勒个去,原来日本人“你们是这样的人!”,恩,“哀物”,对物的崇拜,对世间所有事物幻灭和凋零,都认为是一种美,我真心理解不了,日本人的这种情愫。但是,不管我理解与否,他们就是这样的一群日本人。对物的崇拜,对凋零的美,这些概念的理解,都在源氏物语这个神奇的小说里体验出来。理解这些,你也可以理解,日本的菊与刀,理解小日本这个神奇的过度。
再比如,毁我三观的《想象的共同体》,神马国家、神马民族,神马爱国主义,神马民族情结,其实根本是近代的产物,是民族独立大运动后的产物,在我大一统的中国历史上,我们还能理解国家。可是,在欧洲,啥国家啊,神圣罗马帝国,2000多个小邦国;印度尼西亚,17000个岛,你跟他们说,咱们是hi一个国家,我勒个去,他们居然就信了。然后,然后他们就真的把这个大圈,圈到了自己的心里,想象我们的先祖是如何如何在这个大历史里一脉相承下来。别逗了,500年前,可能我们国家的先祖之间,可能还是相互砍杀,信仰完全不同,要把他们栓到一起,他们宁可去死的不同族群。国家的概念,其实来自于什么呢?作者安德森告诉我们,来自于城市,来自于工业革命后,资产阶级兴起,他们需要劳动力,农奴立刻土地,组成城市,然后逐渐形成自治体,形成国家。而欧洲国家概念形成后,旧贵族也屈服和附延于此,国家和民族的概念才强盛起来。最早的英国,贵族们连英语都不讲,是讲法语的,英语是央格鲁那些低等人讲的语言。然后,民族独立运动兴起后,亚洲、拉丁美洲、非洲,这些帝国压迫的地区,也嘟囔起来“凭什么你们这些帝国主义,天天日不落,法兰西的,我们也要独立”,这波澜壮阔的才有了国家、民族,才在人们心目中形成了如此崇高的地位。恩,这件事告诉我们,学好历史多重要。
还有,藏书数万册,知识多到爆炸,但是又有趣的老先生埃科,可能是世界上读书最多的人之一,据说电影和小说“达芬奇的密码”,就是从这本《玫瑰的名字》里面剽窃了太多的灵感。
噢,对,还有《风流赛义德》,伊斯兰世界的神奇故事,缔造者是阿拉伯世界最伟大的小说家萨利赫,讲述了,我们不熟知的伊斯兰世界,他们的人,他们的人性,这些对我们这些古拉经之外的人,终有机会一窥这个神秘的世界。
恩,我还会继续中毒下去,我们年初制定的读书单,我可能更新不了基本,专业的书籍太多,我还要去啃,不过,这个节目,却让我眼前一亮,极大和快速地拓宽了我的读书视野,恩,不得不跟你嘚瑟介绍一下。
好吧,这周不讲啥道理,只向你抖搂我的爽,酱紫,下周继续。
</code></pre>
<h2 id="2019324">2019.3.24</h2>
<pre><code>最近爸爸在听梁文道“道长”推荐的徐贲老师的《自由的黎明》,还准备听徐老师的下一季《现代的诞生》,听徐贲老师,娓娓道来,充满了人文精神的讲授,让我这理科男受益良多。
为什么要去学习这些东西,即使到了我这个年纪,还如饥似渴地去学习和深入了解这些人文经典呢?是因为,我渴望了解这个世界。你可能会说,什么?!你都40多岁了,还不了解这个世界。是的,不了解。我想知道,我的父辈、我的爷爷….我的太祖们,他们曾经诞生、成长的那个时间、那个世界,究竟发生了什么,才让我流转到现在的世界。那个时候,正是这些人文经典的大师们,和他们的作品,引领着这个时代,影响着无数的人们,一步步的构建着历史,才塑造了现在的世界和我们。所以,我十分渴望去了解,先于我,慧于我的种种大师们,循着他们的足迹,就是在寻找自己存在的终极理由和时空延续下来的根。
曾经有位智者说过,“我们都是活在思想家的思想通道里”,什么意思?就是说,你的所思所想,你的行为,其实都被先哲们,他们构建的思想体系,深深地影响着。我们的处事原则,我们理解世界的角度,我们思维的习惯等等等等,我们是逃不出他们构建的这个思想思维体系的。
这听着太抽象,举个例子,美国现在的样子,其实是文艺复兴后,英国革命,法国大革命,人文主义,大航海时代等等,一系列的结果;而我们的国家,人们彼此的处世哲学,也是和我们千年人治、儒家文化一脉相承下来的结果。深刻的理解这些,你就可以看透这个社会,这个世界,和身边的种种人和事。是一种开启“上帝视角”的智者的快乐。然后,你再看你的身边,你去看那些新闻,你看那些丑陋的表演,看那些看似强大实则丑恶的人和事,就对她们充满深深地鄙视和同情。你也会更热爱真善美,热爱一切美好的事物,学会识别她们,欣赏她们,赞美她们。一个人的审美也会建立在坚实的世界观和价值观之上了。
我们给你推荐的《苏菲的世界》,就是这么一本给你这个年纪的小朋友读的书,“从古希腊爱琴海里发源的自然派哲学光芒,到雅典的苏格拉底,柏拉图和亚里士多德三人在整个欧洲所燃起的燎原的千年智慧之火;从人性被献上神权祭坛的漫长中世纪,到人性复苏的文艺复兴时期笛卡尔,斯宾诺莎等人的理性主义和以洛克为代表的经验主义的碰撞;从启蒙运动里人权对于王权和神权的反抗,百科全书派对于自然和理性的推崇,到黑格尔三段式的辩证法以及作为一个哲学家的马克思对人类的终极理想;从基督徒康德革命性的人本主义到二十世纪无神论者萨特以人为中心的存在主义; ”,对,这其实是一本非常适合你了解世界哲学,准确的说欧洲哲学史的一本非常棒的书,你真的应该耐心的去读一读,相信会深深影响你的一生。
之前,希望你成为一个跟爸爸一样的理工男,沉着、冷静、理性;而现在,我却希望你同样可以热爱文学、历史、哲学,充满感性的人文精神,热爱这个世界,热爱她的多样性、复杂性和广阔性。很多东西没有终极答案,寻求这些终结答案的路上,风景就足可以让你流连一生了。
</code></pre>
<h2 id="201938">2019.3.8</h2>
<pre><code>这周我很忙,我在忙着搞的单据识别,就如同你的学习生活一样,工作就是我的生活的重要的一部分,是的,这就是一个中年人的大部分,你到了40岁,可能也会是这样的生活。
年轻的时候,我总是憧憬和幻想各种的生活,比如自己可以到处流浪,或者成为一个数学家之类,那个时候,思想是不受束缚的。后来呢?后来就经历了各种各样的人、事,遇到了妈妈,结婚,生了你。之后的事情你就都知道了。是的,人生其实很快的,一晃就过去了。然后,就变成中年老男人了。你可能要问我,曾经的那些幻想呢,那些憧憬呢?我告诉你,已经悄悄的珍藏到心底了。因为,太多的责任,太多的烦恼,太多的对自己的真实认知,让自己把很多东西都悄悄地收起来了,也许会在某一天,再拿出来,试一试,或者看一看,但是,可能性不大了。
是的,人的成长过程,就是一个不断地削足适履的过程,从小小的自己,不断地成长,成为青年、壮年,然后又各种的想法,有各种的热情,不相信这个世界可以束缚住自己。这样很好!人需要这样一个自我膨胀的过程,否则,就早已死气沉沉,暮气沉沉了。
然后,就开始行走江湖,看到各种的真善美和丑恶,在和一个个生命中遇到的人,不断地相处、交谈、理解、学习、憎恨、厌恶,体会这个社会、这个世界带给你的各种鼓励、赞赏、伤害、鄙视,然后,就像一面镜子,一把刻刀,让你看清自己,也削去你的热情和棱角,让你真切地体会到,把你放到这个几十亿的星球上、十几亿的国家、几千万的城市、几百人的公司、几十人的部门、几个人的亲密同事里面,你的渺小、你的无奈、你的年复一年日复一日的工作中了。
对,是,没错,“他们”就是这样安排你的!从你上小学,你中学了,你必须参加高考,你要工作,然后你要结婚,邀请所有的亲戚来,然后生一对双胞胎,换一个大房子,还20年代贷款。或者你走了狗屎运,开了一家公司,给他们发工资,买一辆宝马,下班后,可以亲亲你的宝贝。你偶尔旅旅游,去去国外,买一些理财产品,操心孩子上什么小学中学大学,帮助他完成他的轮回。然后你退休了,去广场上跳跳舞,住进一家养老院,偶尔你的儿女来看看你。最后,终了一生。我勒个去!人生就是这样嘛,我默默地替我,替你,流汗,冷汗。可是,人生就是这样,99.99%的人都是这样,你想跳出这正态分布的三个西格玛,不是件容易的事。
上周看了电影《狗十三》,那个可怜的姑娘,在你一样的十三岁的年龄里,经历着爸爸、姥爷、姥姥、后妈、老师等等一系列成年人的“帮助”,她快乐又痛苦地“长大了”,“懂事了”。也离那个自由、真诚、黑白分明的世界远去了。是不幸么?是成长的代价么?是大人们的事故么?没有绝对的答案。因为她渐渐明白,大人的世界,更多的是无奈、责任、烦恼,摆脱不掉的无助和无趣,抱有这个同情心、同理心了,她就可以理解大人们了,她也渐渐的“长大”了,也丢掉了一些宝贵的东西了。
所以,尝试理解大人,尝试和他们沟通,尝试同情他们,尝试学习他们的优点。同时,留住作为孩子们最宝贵的一些东西,你自己最宝贵的一些东西,慢慢的成长,呵护好你的梦想,给她不断地浇水。也许,你还没有发现她,或者,想起她,那就立刻开始,去发现她,然后慢慢的让她变得清晰、茁壮。
</code></pre>
<h2 id="201933">2019.3.3</h2>
<pre><code>寒假结束,家书继续。
开学了,回顾这一学期,对你来讲,人生改变很大。认识了新的同学,新的老师,他们带给你过去完全不一样的经历和思想,让你自己不断地成长成熟。新的学期,新的一年,应该有新的憧憬,对不?人总是这样,对未来不知道的东西,充满了惴惴,但是又充满了希望,就是这种矛盾中,纠结中,人生前行。
你主动要求报了数学补习班,还有妈妈给报的语文班,所以,在学习这块,我就不想多说啥了,认真学习,感受排名、位次带来的压力,未尝不是一件好事,毕竟人生还会面对很多次排名,被别人评价的事情,这件事情始终是无法逃避和面对的,直面和应对就好。而我,更想告诉你的是,看一些“无用”之书,学一些“无用”的知识。
比如,看一看17世纪的30年战争,看看新教和天主教之间的战争,如何演化成一场无聊的欧洲列强的大规模混战。比如,把之前的四轴飞行器的装配重新拾掇起来,去淘宝上买来配件,去搜教程,或者联系小吴老师,把属于自己的DIY无人机继续拾掇起来。比如,去研究一下,什么鱼竿更适合河吊,找到合适的鱼钩、鱼饵,让我们8次的无功而返的钓鱼记录别再被刷新。比如,组织你编程社的小伙伴们,搞一个python的人脸识别啥的,做一个实实在在在有用的小玩意,而不是用scratch那类小儿科的东西玩玩而已。比如,找一本你喜欢的高晓松的书,认认真真的读完,像自己喜欢的人学习生活和人生。比如,读一本老师的书单之外的《1984》了解一下乔治奥威尔的思想,或者换本轻松点的《古董局中局》,跟着马未都到古董的世界里走一遭。
总之,你要做一个有趣的人,有趣味的人,热爱生活的人。而不是一个只知道学习的人,只知道学习书的那些内容的人。世界如此之大,对他保持好奇心,敬畏心,但是,也不要束缚了手脚,不要人云亦云,好奇但是怀疑,对任何人所说的,都先记下来听进去,不自大。理解了,然后,再去质疑。你活在信息的社会,你可以翻墙,你英语不错,你可以找到这个世界上另自己最满意的答案,对任何事情,找到你认为的终极答案。你还要有一颗包容的心,即使对做自己不了解的,不喜欢的,不同意的人、事,也要保持尊重,因为,也许是你现在还理解不了的,也许是对方还没有足够的认知,但是,承认对方,是对方的一种尊重,只有尊重对方,才可以得到别人的尊重。
你还要继续克制,继续自律,不把自己宝贵的时间和生命,贡献给无趣的事情,比如打游戏,比如无意义的烦扰、低落情绪的操控。关于游戏,之前已经跟你说过了,适度可以,放纵就过分了。保持自律,自律才能自由,这句话你将来会体会越来越多。
好吧,絮叨一通,希望你新的学期、新的一年,又长一岁,不仅仅是身体,更是心灵和精神。
</code></pre>
<h2 id="2019113">2019.1.13</h2>
<pre><code> 很快就要考试,然后就要放假了,放假的时候,我想给你准备个大礼包,拿pygame撸个flappy bird吧。然后我就可以用它来做个增强学习的训练,让小鸟自己学会过关了,哈哈。
开玩笑啦,但是,确实是可以用深度学习来完成很多事情了,这代表了这几年最有前途的技术,人工智能。随着上一代技术,也就是移动互联的大幕徐徐落下,新的科技之旅又要开始,而AI技术是这里面最具前途的一项。
之前给你推荐过《未来简史》,尤瓦尔•赫拉利的神作,预言了2035年,奇点临近。算算,还有17年,那时候,你也只有30岁。30岁正是你美好实干的年龄,而奇点临近,会是什么样的景象呢?会是全部自动驾驶的车,是随处可以聊天的个人助理么?是眼镜上不断呈现各种真实、虚幻揉合在一起的景象么?那时候的工作,生活,娱乐会是什么样呢?听着20年后的事情,好像还很遥远似的,但是如果我告诉你,20年前,2000年的时候,我才拥有了跟个烤箱一样大的电脑,1G的硬盘,慢如牛的CPU。上网只是14.4k/s的拨号上网,而现在,我们用的都是100M光纤,是100x1024=102400k,是之前的快1万倍了。对!一万倍。没有手机,拥有手机是我2001年之后的事情。当我第一次用上笔记本,第一次用上M的ADSL,第一次拥有手机,第一次买了google phone,都让我不断地惊喜。所以,我信,我相信奇点正在临近,可能不是35年,可能是2040年,2050年。但是,它,不远了。
这也是我2016年年底,毅然地拾掇起来我的高数、线代、概率书,一步步地开始学习机器学习、深度学习,到现在,对AI的本质、能力边界,基本上了解了很多,也很高兴自己可以可以和这个科技时代同步了,而不是作为旁观者,跟着感叹。
我大学的时候,虽然也是认真学习这些数学,但是,直到今天,才真真切切的感觉到数学的奇妙和用途,而且,这个过程中,也逐渐明白,学习,不再是别人逼迫的事情,是自己主动、自发的需要,是一种想追赶上未来的,活在未来的一种迫切,驱使着自己不断的学习。学习,是为了活在未来,而你们,就是活在未来里的。
昨天看了一篇《你知道炼狱的一天是如何精准运作的吗?》,是写衡水一中高中生活的,孩子们真的真的很可怜,像牲口一样,像机器一样,只为成绩只为分数,学习之意义,在他们眼里,就是一场无意义的过程。我曾经看到一篇知乎上的帖子,说为什么即使在北大、清华这种学校,都大有人在,天天打游戏挂科。是因为,他们不再知道学习的意义,从这样一场无意义的无比压力的考试里解脱出来,而又找不到学习的意义,最好的解脱就是游戏里放纵。而有的人,就如同我前阵子看的《复杂》那本书里的科学家考夫曼,从小就崇拜爱因斯坦,当做自己的英雄。知道自己要成为这样的人,很早很小,就知道自己努力的方向。
未来就在那里,很多人可能还没有看见,而你应该是有能力看到的,所以,为了更好地迎接它,你应该为之做好一切的准备。学习、读书,是一个最好的丰富自己的过程。无论何时,都要保持清醒,时刻反问自己,为什么我要学习?我的愿景是什么?我每天的学习是为了什么?学的这些东西有意义么?是为了我的这个目标在前进么?做一个主动学习者,而不是对她们推着被动往前走的机器。
2035年来临的时候,多希望你可以其中的参与者,甚至是推动者,而不是一个旁观者,甚至是一个被动改变者呀。
</code></pre>
<h2 id="201916">2019.1.6</h2>
<pre><code> 前几天给你买了一本约翰-密尔的《论自由》 ,密尔是19世纪英国资产阶级哲学家,他在这本书深刻地论证了自由的含义。我和妈妈想起来给你买这本书,最主要的是想让你理解自由的真正含义。
人活在这个世界上,其实是很不自由的,被各种东西约束着,你可能已经感受到了,不再是小时候那么自由了,有爸爸妈妈管着,有学校老师管着,有小组长管着,有教官管着….,对,你越大会越发现你越不自由。
怎么办?唯有自律。自律,是让外界对你产生一种信任感,相信你可以和他达成某种约定,而无需监督你。正如我跟你说的,如果你不自律,就会有外部的人和事,来帮助你他律。
而更深刻的是,什么才是真正的自由。是无休止的玩游戏,无休止的看电视么?那不是自由,那是放纵。而真正的自由,是内心的自由,思想的自由,灵魂的自由。不被任何人约束,自己是自己的管理者。
以游戏为例,可能你觉得,你可以开心地、随心所欲的玩游戏,就是一种自由。诚然,这可以算是一种自由,但是这个自由背后,隐含着被操纵,是谁操纵呢?是游戏设计者、运营者,是哪些为了捕获人们的欲望,精心设计关卡,数值策划。这背后,是一个由美工、程序、特效、运营、产品、策划、运维、推广、销售、客服….一系列组成的一个游戏团队,他们都是藏在这精美游戏背后的人,我不想诋毁他们,但是你要明白,他们是一个商业团队,他们的最大目标,就是让玩家沉溺其中,提高ARUP(每用户平均收入)。为了达成这个完美的商业目标,他们仅仅策划团队,就要囊括系统策划、数值策划、关卡策划、剧情策划、任务策划、执行策划等等多个岗位,每天大量的讨论、论证,不停的去采集来自玩家的反馈,不断地调整策略,使你我这样的玩家深陷其中,不能自拔。
更高维度的自由,(你已经理解升维的概念),是控制自己的自由,我可以“肆意”地控制自己的意志,那种完全掌控自我的自由,才是更纯粹的自由。把自己放到一个更大世界、更好奇的心境,去体会浩瀚历史、宇宙中,最值得自己去追求和探索的东西,让自己身与心,可以自由地穿梭其中,不断地积累沉淀。即便是偶尔放纵,也是自我控制的放纵或者放松,到时间,我就可以戛然而止,收放自如。
自律和自由,总是相生相伴,我知道,做到自律很难。不仅是你,包括我,都时常陷入自我放纵、放松无法自律的境界。怎么办?唯有让自己有更高的眼界,更高的维度,更远大的志向,更崇高的追求,才可以克制住眼前的各种诱惑、彷徨和迷茫,朝着自己内心里那个美好的远方不断地前进。
最后一个问题,如何能让自己达到更高的维度呢?读书!读各种可以饲足你好奇的书,对各种问题、困惑,都尽可能的贪婪地去读书。学校推荐书,太窄、太浅、太面向普通学生,你要去寻找适合自己的书,自己学会为自己选书。抓紧时间,做好时间管理,尽快完成作业,挤出时间,去自己的自由的思想海洋里遨游。当然,读书这事是另外一个话题了,有时间再另开篇幅聊吧。
总结一下,多读书,站在更高维度上,向着自己的远大目标,自律着前行。
</code></pre>
<h2 id="20181217">2018.12.17</h2>
<pre><code>儿子,今天的家书,想说说中考的事情。为什么要谈这个,因为学习都是我们这一类中产阶级向上晋升的最有效的手段,而在中国这种教育环境下,中考、高考就是很明确的目标,虽然残酷,但是却也直白直接。
我是理科男老爸,喜欢列数字,给你一些信息,供你参考:
先说说今年,2018,可以供你参考。2018年朝阳区报名总人数:7841人,其中北京市户籍考生:4959人,应届生人数:7819人,往届生人数:22人,非京籍人数:2882人,借考人数:2469人,随迁考生:181人。2018年北京中考总报名人数为65366人,含九类人和随迁子女。朝阳/北京 = 8%。
2018,朝阳540分+的人数有,1561,占比19%;550分+的人数有979,占比12.5%。朝阳前4所(八十、人朝、陈经纶、清华附)招生990人,其中对外招生514。最低分数是547。第二梯队(530+)(工大附、日坛、和平街、对外经贸94)招生875,其中对外招生436。最低分数530,其中工大附是541。
说说你们学校,你们2018界学长们有130人,其中560+有12人,550+有29人,540+有23人,530+有24人,而你们这届260人,推演这届应该的相应分数段的人数大约为560+约24人,550+约58人,540+约46人,530+约48人。
对比来说,你们大约有80人有机会进入朝阳前4所学校,前128人可以进入工大附,前176人可以进入朝阳的二梯队学校,这个数字和比例,要心中有数。
所以,结论就是,如果你想升入朝阳优质的4所学校之一,就需要550+分,也就是前80名,稳妥的话,需要进入前50名,可能有机会去冲一下八十或者人朝。
所以,你应该可以理解我说的,不要盯着你们班,也不要盯着你们学校,你的任务是进入全区的前12.5%,甚至5%,中国的教育制度就是这样的制度,至少现在这个阶段,咱们无法摆脱掉,我们也觉得很残酷,但是没有办法,你尚且在朝阳的重点初中,想想普通初中的孩子们,是何等绝望的一种感觉。
其实人生有更广阔的天地,只不过,我们暂时摆脱不了,所以,我们还不得不沿着这个路走6年,未来的世界会非常精彩,i promise,但是,如果这6年走不好,后面的路多少会有一些泥泞,无论怎样,爸爸妈妈都会爱你帮助你,但是我们更希望你可以自己帮助自己,克服懒惰、急躁、欲望,把心专注在你这个年龄段最应该做的事情,“学习”上,真正地从现在就可以掌控自己的人生,而不是交给“他们”,你已经体会过“他们”的无情和规则的残酷,你所能做的就是控制住自己,break the rule。
</code></pre>
<h2 id="20181216">2018.12.16</h2>
<pre><code>老爹买了几本书,托马斯-潘恩《常识》,刘未鹏《暗时间》等,一部分是人文社科类的,一部分是理工科的。你知道的,老爹是一个理科男,我最近一直在读《复杂》,讲世界最伟大的一群科学家,考夫曼、赫兰德、阿瑟等,一起组建伟大的圣塔菲研究所,创立复杂科学这门全新的学科的过程,常常看到深夜,激动不已。那感觉就如同我18岁那年,在大学里捧着伽罗华传,感叹天妒英才,唏嘘不已的感觉一样,无论什么年纪,心中依然是此间少年。
虽然我对各种科学家、数学家和计算机大神们如数家珍,但是,一直遗憾的是,对人文方面,却一直缺乏涉猎,原因很多,可能是缺乏系统学习和领路之人吧。虽然后来的这些年里,也很努力地去读书,也很努力地尝试去找出一些人文类的学习方法和线索,但是,大都效果不好。比如专门循着一些书单、豆瓣读书推荐,或者去看许知远的书单,去听王东岳的哲学体系,跟一些朋友请教一些经典之书,但是,都还是隐约地感觉到,get不到sense。
你可能会问我,你为什么要读书?为什么要思考?不知道,我也说不清楚。我也喜欢游戏,看各类娱乐节目,那些东西可以让自己high,愉悦,但是,那种感觉总是短暂,以及完成后得到的失落。我曾经有一年玩游戏天天到11点,那种即时反馈的快感,我至今记忆尤深,所以,我对你们沉迷在各种游戏里是深有体会的。可是,愉悦的快感过后,是无尽的空唠唠的感觉。我小时候,爷爷不在北京,奶奶很晚下班,姑姑在老家,我总是一个人在家里呆着,反倒让我喜欢独处和安静。后来,我发现,长大了,一个人的时候,捧着一本书,安静地看着,偶尔停下来,思考一下,无论是什么类型的书,技术的、小说,总是可以让自己感觉很充实,是和游戏的那种快感是完全不同的感觉,一个是“快”感,一个是“慢”感。游戏,玩完一把的快感可以持续几个小时,而看完一本好书,那种快感,可以持续几个月,甚至几年。所以,这种精神层面的愉悦感,其实也很容易上瘾,你可能还是看书少,没有看到一本让自己怦然心动和激动不已的好书,也许,未来你遇到“她”,就可以理解我说的感觉。
另外,这种读书,不是你上学的读书,不是在别人要求下读书,而是自发的,按照自己的兴趣,随心所欲的读,当然也不是读你现在的那种网络小说(这种网络小说,还是跟游戏一个套路,是为了让你爽和获得快感)。我所谓的,读自己喜欢的书,仿佛是在和一个深邃的老者的对话,仿佛是和睿智的智者进行思辨,仿佛是在伟大的光华中沐浴,你是可以读出,他背后想表达的那种只有你和他才能心灵相通的洞悉,即时我读《深度学习》这类技术书籍的时候,也可以找到这种感觉。试想想,那背后,都是一位位顶级聪明、睿智的智者,是一个个活生生的人。
你还小,还小,还是一个小苗苗。也许,我跟妈妈,有时候对你的要求还是太苛刻,学校的统一管理和要求,可能对你来说,有些太严苛。不过,这些我觉得你都应付的来,我唯一担心的就是,你能不能控制住自己对人欲望的抗拒,可以放松,但是不放纵,而,更重要的是,你需要收敛住自己的懒堕和欲望,留出一些时间、空间,忘掉作业和爸爸妈妈老师的要求,真正以一种热爱、虔诚、谦逊、渴望的姿态,去学习无数贤者、先哲、科学家他们留下的宝贵财富,这些财富,很多都在一本本书中,在一行行的字里行间里。
愿我儿可以体会到我的话,一点点地进入我说的这个世界。
</code></pre>
<h2 id="20181225">2018.12.25</h2>
<pre><code>又一周,不经意翻腾出来小时候的视频,是万万没想到的孙悟空五指山的段子,很欢乐,那时候,还奶里奶气的四年级小正太呢,甚是可爱。能看到你可以每天都快乐地成长,是作为爸爸妈妈最开心的事情,又一周了,不知道,你在学校是不是过的同样的开心。
这周让你看了B站的新节目“故事王”,很欢乐和脑洞的节目,作为周末的放松,你可能看到李诞大魔王的牛逼才气,但是你不知道的是,李诞年轻的时候,也是博览群书的文艺青年,不过这个世界不是那么好相处,所以他选择了以一种他名字一样的方式,来对峙这个世界,通过貌似荒诞其实是很讨巧地方式,捕获了这社会上年轻人们,在他们眼里,这种方式是她们面对世界最好的方式之一,“不以为然,肆意调侃、戏弄”。B站给年轻人们一个逃避的舞台,各种Up主,在各类粉丝中,搭建了自己的舞台。她们是“成功”的。她们在他们20、30年的不可复制的生命体验中,达到了一个她们的新高度,而B站给他们搭建这个舞台的地基。不过,要看到,做到台上的,也就是那42个Up主,大部分尖叫的狂热的,还只是台下无数的普通人,各种迷弟迷妹们。
从李诞,到Up主,然后,回到你自己的世界,你的舞台。她们其实都是积淀了20-30年之后的绽放。而你,还是花骨朵鼓出来的阶段,一点点地养分给你,你正在野蛮的生长着。偶像是什么?是自我的幻想,是你想达到的一些东西,映射到她们身上,他们恰好可以做到达到(当然,你不用关心她们如何达到,也许后面有公司包装,经纪人包装)。而你,却要在你真实的世界里慢慢地生长,去完成你的20-30年,所以,你要明白那些,可以跟着欢乐,但是不要陷落,迷失。因为,你的真实世界,还是学校,是老师,是同学,是每天的作业,功课,每天的食堂,鸡蛋西红柿,以及晚上白的刺眼的白炽灯管和10点多的熄灯铃。是成绩,是每次考试的时候,让你们纠结焦虑的第几教室,是在榜上的那种狂喜和自我膨胀。
真实么?无趣么?可是,这些UP主们,都是这么经历过来的,我想说的是,在中国没人能够逃过这个历程。逃不过的原因,你如果读历史学哲学,你就理解,个体的渺小和历史的宿命,其实,无需这样,你可以放松甚至放纵,但是,你也需要严肃和拼命,因为,那都是生命中最真实的部分,因为只有你都经历这点点点滴滴,你才知道生活、学习、生命,就是一场不间断的经历,然后,时间和岁月才可能雕刻出来你,才可以雕刻出来这么多有才有趣有意思的UP主们。每个个体,都是经历过他丰富的人生,才造就他今天的模样,所以,任何你的经历,都去珍惜,都去努力,都去用心,尽力地做好每件事,总是没有错的。
就像陈思老师,是另外一个时光雕刻出来的有意思但是更有深度的人,我真心羡慕你从小就可以遇到这样的神奇老师,从小就可以跟他着去读莎士比亚,体会塔司塔夫的排山倒海,去领略文学世界的迷人。莎士比亚可是500多年前的伊丽莎白一世那个年代的作家,而伊丽莎白一世又是英格兰最伟大的女王,她在位期间曾经击败了西班牙的无敌舰队,她主张改革新教,促进宗教改革,而宗教改革也为未来的文艺复兴做了铺垫,文艺复兴之后的科学大爆炸,才把我们带到了现代科技,牛顿老先生的微积分,到现在还是机器学习的梯度下降算法的核心,天哪,你会发现,我们生活的这个世界,从来不是割裂的,不是无趣的,如果像陈思老师一样,可以去用心地去学习和体会这些人类留下的哲学、科学、理性思维、艺术瑰宝,你会体会到更大的一个庞大的真实的世界,虽然它已经过去百年、千年,他都是如此的真真切切地存在,你也同时把这种感觉,延展到10年,20年,甚至百年后的未来世界。
所以,娱乐节目确实狠有意思,但是更有意思的是,这个庞大的真实世界,还有我们可以无限丰富的内心的世界,努力读书,充满好奇心,保持理性,摒弃浮华,保留内心的愉悦和快乐,做一个充实的人。可以娱乐,但是不可以娱乐致死,可以玩游戏,但是不可以被游戏策划和营销噱头迷失了心智。保持自我,保持自律,本身就是一个最tough的任务,不是能有多少人做到,而你能做到,那种掌控自我的快感,是最好的奖励。
今天,恰恰看《故事王》,耽误了一些事情,写下这些,其实是想让你可以独立地思考和反思,妈妈为什么反应这么强烈,这件事,不应该值得你思考么?对,当你开始思考,你就已经开始成长,开始走在你的绽放之路上了。。。
</code></pre>
(转)孩子教育隨想
2018-12-16T00:00:00+08:00
https://www.piginzoo.com/education/2018/12/16/education-huhu
<p><em>文章源自于<a href="https://www.wenzhao.ca/2018/05/19/%E8%99%9E%E8%B6%85%E6%95%99%E8%82%B2%E9%9A%8F%E7%AC%94%EF%BC%883%EF%BC%9A%E9%AB%98%E8%B4%A8%E9%87%8F%E7%9A%84%E9%97%AE%E9%A2%98%E5%B8%A6%E6%9D%A5%E9%AB%98%E8%B4%A8%E9%87%8F%E7%9A%84%E7%AD%94%E6%A1%88/">虞超先生的教育随笔</a>,转载过来,仅供大家阅读,因为涉及到版权,请不要传播。之前听说虞超先生,是源于文昭的一次节目中推荐的,后来去虞超先生的facebook上,摘录此文,转于博客。</em></p>
<p>对于孩子,我觉得应该给他自由和尊重。</p>
<p>自由,是指自由地思想,自由地表达。我许诺虎虎,不会禁止他说什么或想什么。我和虎虎约定:声称自己正确的人,就得经得起质疑。质疑的人,尽量提出高质量的问题。我鼓励他,只要他能,尽量质疑我。一开始他不能问到点上的时候,我会帮助他把问题问得更加尖锐,而后我针对这个问题回答。</p>
<p>尊重,就是我许诺虎虎,我会象尊重成年人一样尊重他。前提是他努力象成年人那样自立。没有自立,也很难得到別人发自内心的尊重。在家里他负责洗碗、擦地,有时帮忙用洗衣机洗衣。去別人家做客吃饭,我要他饭后帮忙洗碗。我要他见人始终微笑,大人说话的时候,要面带微笑,专注聆听。</p>
<p>2013年来美后,虎虎在没有多少英语基础的情况下,直接进入英语教学的学校。并始终保持学习成绩第一名。虎虎在中国的学校中是全班倒数第二。有的同学欺负他,有的老师也瞧不起他。来美后,他被选入芝加哥大学的一个优才培训计划,当年整个芝加哥公立学校只有35人入选。他在2014年11月22日芝加哥数学联盟举办的竞赛中,获得“进阶几何竞赛”的个人第一和团体第三。其中团体赛是他一个人对其他学校一群人。因为他们学校只有他一个人参加。虎虎所在学校是芝加哥南部的一所黑人学校,周围有时发生枪击。虎虎同班同学就在距离学校很近的地方被枪击身亡。这所学校从来没有参加过芝加哥数学联盟的竞赛。也没有人被芝加哥大学的优才计划选中过。</p>
<p>他为自己的学习成绩踌躇满志的时候,我在下雨时指给他看划过东方大半个天空的闪电,要他多看看这种场景。我告诉他,人给不了他这样的场景,要多看天地自然,要知道你从人那里得到的东西,是十分有限的。</p>
<p>我对虎虎说,学习好,你多了些可能,比如未来上名校;上名校,也是多了些可能,比如未来多掌握些常人的资源;掌握了资源,你仍然是多了些可能。而人真正的价值,在于你把这些可能性转变成何种现实。有的人用这种可能性吃好、穿好,住大房子,尽可能满足欲望,以外在的一切证实自我的价值。你打算用这些可能性干些什么呢?虎虎还在思考。</p>
<p>很多人觉得我要这样做对你好,那样做对你好,这样才能建立好的关系。我觉得人与人之间,重要的不是做了什么,而是没做什么。我尽量不去伤害,就是非常难得的。因为人与人之间难免互相伤害。亲人之间更是如此。不仅是亲子关系,恋爱、婚姻都是如此。</p>
<p>我觉得,人生也没有公式。外在的一切,包括自己的儿子,都可能会离开自己。在有限的相聚中,真实地面对自己,以真面目示人,日后回忆起来,后悔最少。至於孩子未来能挣多大钱,当多大官,成为什么人物,即便真如此,我未必沾的上光。沾不上光,那就都是別人的事了。</p>
<p>1999年前后,我和太太路过清华北门的时候,太太指着一片正在盖的楼,告诉我里面有几幢楼是她单位的。我们未来可以搬进去。我们想着孩子可以上清华幼儿园、清华附小、清华附中、清华大学……但是后来的日子里,我在看守所的硬板、监狱的短床上弓着身子睡了将近10年,和虎虎只见过两面,其中一次只有20分钟。</p>
<h2 id="虎虎教育随笔前言">虎虎教育随笔(前言)</h2>
<p>不少朋友都问我,你家虎虎是如何在来美后三年半之间,从一个北京普通高中的成绩全班倒数第二的学生,变成获得明尼苏达大学、UIUC、普渡大学录取,未来两个月甚至可能得到哈佛、耶鲁录取的学生?有朋友的儿子面临MIT招生面试,辗转找到我,希望听听祕诀;有朋友甚至邀请我和太太、虎虎,去美国东部给他们讲讲经验。</p>
<p>更多的朋友对我说,“我们家孩子还小,等他们考大学的时候,可要向你请教啊!”我都回答:“能帮忙我一定尽量帮忙。”很多朋友都希望知道,虎虎以及我们全家,如何在修炼上精进最后得到了好的结果。</p>
<p>其实我个人修炼差得太远,而且,修炼精进和上哈佛之间,没有明确且必然的联系。如果一定要联系,结果十之八九是疑修炼。我不知从何说起,就把自己和虎虎的一些交谈,还有我的一些想法写出来,也许能有帮助。</p>
<h2 id="虎虎教育随笔一">虎虎教育随笔(一)</h2>
<p>我对儿子说,人生中死的机会太多了。所以平常要自省,你真正觉得值得为之去死的,机会来的时候別犹豫,你会有一个高质量的人生。不是那个机会,你就避开风险。重要的是,你知道自己愿意为什么而死吗?</p>
<p>通过自省,知道自己是谁,知道自己想要什么,十分重要。否则追逐一生都是空虚。不要寻求刺激,要自省。人生中的浮沉起伏,避开尚不可得,还用专门寻求吗?死亡和爱情有相似之处。高质量的死和高质量的爱,只有通过自省才能遇到。</p>
<h2 id="虎虎教育随笔二">虎虎教育随笔(二)</h2>
<p>我於2012年2月20日出狱。前后被关押九年八个月二十三天。虎虎几乎和我一样高了,很瘦。离开他的时候,他像个小肉团在地上跑。十年中我们只在狱中会见过两次,其中一次只有二十分钟。记得回家第一天,我因为多年不坐车,从天津一路坐车摇晃回北京,路上三次差点吐了。回家后双腿还软,走路发飘。</p>
<p>我对虎虎说:“过来。”</p>
<p>我们走到客厅。我俯身撑地,对他说:“给我数数。”</p>
<p>我做了一组四十个俯臥撑,对他说,“看见了吗?”</p>
<p>他说,“看见了。”</p>
<p>我说,“嗯,其实我还能再做几个。”</p>
<p>回到家后,发现虎虎状况糟糕。他沉迷电子游戏,手机里存了一个多G的网络小说,这是我几年之后从他的《大学申请自述》中知道的。上课完全听不懂,下课把卷子揉得乱七八糟,上面全是红叉。要求写的作业经常不写,自己已经丧失了信心,认为再也学不会了。课堂上被老师嘲弄,课下被同学欺负。数学、物理、化学、英语、语文,整体状况一塌糊涂,从小把他带大的外祖父忧心如焚。要求我和太太褚彤每天陪他写作业到夜里十二点。</p>
<p>我对他说,“我能帮你。我是学习机器、考试机器。你知道什么是考试机器吗?”。</p>
<p>他说,“不知道。”</p>
<p>我说,“在监狱里参加高等自学考试能挣点劳动改造分数。我在干活的间隙找了本大专微积分教材,翻了一个月。在撂下微积分十七年之后,高自考成绩是98.5。如果你每次考试成绩都是九十几分,你不过是个好学生而已。考试机器,是你考了98.5,但是心里很懊恼,因为你想不出自己怎么会丟了那1.5分。”</p>
<p>“有两种烦恼:一种就是你现在的烦恼,上课听不懂、下课躲著我们不敢让我和你妈知道今天你有什么作业、第二天硬著头皮去应付老师;另外一种,就是你为那1.5分而烦恼,你就是想不通自己怎么丟了这1.5分。你想要哪种烦恼?”</p>
<p>虎虎说,“后一种。”</p>
<p>我说,“那我帮你有后一种烦恼的可能。也可能到时你连后一种烦恼都没有。”</p>
<p>两年半以后,虎虎在芝加哥数学联盟举办的竞赛中,获得“进阶几何竞赛”的个人第一和团体第三。其中团体赛是他一个人对其他学校一群人。因为他们学校只有他一个人参加。再一年半后,虎虎在美国高中升大学的ACT考试中,数学满分。此前在他的高中,他已经不知拿了多少次数学满分了。但他有时还经历第二种烦恼。</p>
<p>我和虎虎谈了这么几个问题:中国的教育体制实质,他、老师在这个体制中的角色,中国教育的目的,中国考试的目的,在这种体制中,虎虎的目标应该是什么,手段又是什么。学习的实质是什么,数学、物理是什么;学习、受教育在人生中的角色是什么等等。我在随后的文章中想到哪写到哪。</p>
<h2 id="虎虎教育随笔三">虎虎教育随笔(三)</h2>
<p>出狱回家后,太太的姑妈对她说,“你爸和虎虎现在都爱说话了”。就在我们出狱前半年,太太的母亲由于长期忧郁,患肺癌去世,太太的父亲照顾她,顾不了虎虎。他所能做的,是在虎虎上学的丰台十二中旁边租了一套房子,减少虎虎上学回家路上的时间。虎虎在学校受到霸凌,考试成绩一塌糊涂,信心几乎被彻底摧毁。家里整天一片死寂,无人说话,一点声音也没有。我出狱后,虎虎很爱和我聊天。我说的话他此前从来没有听过,觉得非常新鲜。</p>
<p>他说:“爸爸给我打开了一扇通向新世界的门。”</p>
<p>同时,太太开始教他修炼气功。</p>
<p>我问虎虎:“你考试成绩为什么那么差呀?”</p>
<p>“因为我学习不好,那些题就都做不出来。”</p>
<p>“你怎么学习不好了?”</p>
<p>“我全班倒数第二,平常作业也不会做。这不就是学习不好吗?”</p>
<p>“我问你为什么成绩差,你说因为学习不好;我问你学习怎么不好,你说因为成绩差。你等于没有回答我呀。”</p>
<p>虎虎不知如何回答。</p>
<p>我说:“你从没问过自己‘为什么成绩差’。你以为‘成绩差’的答案是‘因为自己学习不好’。”</p>
<p>“你不知道自己并不知道答案,对吧?”</p>
<p>“嗯”。</p>
<p>“所以两件事极其重要:1.提出高质量问题2.知道自己不知道什么。以后我会反覆向你示范如何提出问题,什么是知道自己不知道。”</p>
<p>虎虎说“好”。</p>
<p>“现在我问你,你考试成绩为什么那么差呀?”</p>
<p>“我不知道。”</p>
<p>“恭喜你,你知道自己不知道了。我很高兴。你已经向一个更广阔的世界,迈出了一大步。”</p>
<p>我停顿一下,让虎虎有机会思考我的话。我再次强调说,“不知道答案关系不大;不知道自己不知道,才是最糟糕的。”</p>
<p>“你成绩差,是因为你经历的所有考试,是专门用来砍人的。砍的就是你这种人:</p>
<pre><code>1.想从学校老师和课本那里学到知识
2.只要考试成绩差,就觉得自己学习不好。
</code></pre>
<p>专门砍你这种人。因为你们是很好的底层奴隸的坯子。这些考试的目的,就是收割底层奴隸。”</p>
<p>“你以为你是个中学生,是吗?你以为自己去十二中上学,是为了学习知识,是吗?你以为那些考试,是为了检验你学习知识的情况,让你知道你会什么,不会什么,帮助你更好的学习,是吗?”</p>
<p>“是的”</p>
<p>“那你就全错了。都不是。”</p>
<p>“你觉得你是学生,对吗?”</p>
<p>“嗯”</p>
<p>“你知道在中国有童工吗?四五岁就得把细小的塑料珠子穿到髪卡上,做成珠花,在家庭作坊里一天干十几个小时。稍微做慢一点,就挨打。打他的人,就是他亲生父母。”</p>
<p>“你知道在中国有童农吗?七八岁就得干农活,大太阳底下在地里晒著。”</p>
<p>“你看到街上被城管追得到处跑的摊煎饼的小贩,拉扯著两个孩子,满面惊惶?他们的孩子早上三四点就得起来切葱花,準备面浆。他们是童商。”</p>
<p>“你知道在西非的塞拉利昂、利比里亚,十二岁的孩子就得端着AK47冲锋,用匕首割断村民的喉咙,他们是童兵。”</p>
<p>“而你,是童学。工、农、兵、学、商。你是童学。”虎虎几乎目瞪口呆。</p>
<p>我说,“我问你为什么成绩差,你说因为你学习不好。回答错误。”</p>
<p>“你成绩差,是因为你那些老师也是奴隸。你那些课本,是专门编出来教傻瓜的。你的学校、整个中国教育制度,就是为了培养、塑造奴隸。你考试成绩差,说明他们在把你变成奴隸的过程中,遇到很大的困难。”</p>
<p>我瞟了虎虎一眼,说,“以后会见美国总统的时候,別用那个词。”虎虎点了点头。</p>
<p>“我蹲了十年大牢,说话有点糙,別跟我学。”虎虎点了点头。</p>
<p>我说,“你过来”。虎虎跟我走到能看见丰台十二中的阳台,我指著那所学校,</p>
<p>“那是什么地方?”</p>
<p>“丰台十二中”。</p>
<p>我摇了摇头说,“那儿是个养鸡场。天天灯光照着你十八个小时,不停餵你饲料、逼著你咽下去,逼著你下蛋。下蛋少了就把你拎出去,带着羽毛就被机器碾成肉醬,成为高级奴隸的饲料。那儿没有老师,只有饲养员。”</p>
<p>“他们强逼你咽下去的饲料,就是你每天学的那些加减乘除,他们要你下的蛋,就是你的高分,学校总体上的升学率。他们靠升学率收取高费用。你是被关在狭窄鸡舍里的奴隸,一天工作十八个小时,伸著脖子啄饲料,脖子上的毛都磨秃了。”</p>
<p>“你和鸡也有区別。鸡的住宿、取暖、饮水、打疫苗,都是养鸡场掏钱。现在你的住宿、取暖、饮水、打疫苗,都是家里掏钱。”</p>
<p>“你知道你的老师为什么嘲弄你吗?”</p>
<p>“因为我学习不好。”</p>
<p>“因为你影响他的收入了。他的收入,和你的考试成绩是相关的。没人在乎你学习好不好。”(后面我会告诉虎虎,考试成绩高低与学习好不好,是两件事)</p>
<p>我问:“你考试成绩差,知道他们打算怎么对付你吗?”</p>
<p>“不知道。”</p>
<p>“他们会把你逐入社会最底层。你最终会被碾压成肉醬。此前你会勉强活着,不停地被人吸血和骨髓。你和你的老婆、孩子,会成为上级奴隸的食物。”</p>
<p>“那我该怎么办?”</p>
<p>我说,“我会教你考试技能。这是我要教你的东西中,最没用的一部分。能让你在集中营里幸存的时间长一些。”</p>
<h2 id="虎虎教育随笔四">虎虎教育随笔(四)</h2>
<p>我问虎虎,“你见过三个苹果吗?”</p>
<p>“见过。”</p>
<p>“三个梨呢?”</p>
<p>“见过”</p>
<p>“三张桌子、三把椅子?”</p>
<p>“都见过。”</p>
<p>“你见过三吗?”</p>
<p>“什么?”</p>
<p>“你见过三吗?什么尺寸?多重?颜色?气味?”</p>
<p>“嗯……没有。”</p>
<p>“自然界中有苹果、梨,人制造桌子、椅子,但是自然界和人造物中,都没有三。这个东西只存在于你的思维中。看不到、摸不著。”</p>
<p>“嗯”</p>
<p>“人生下来什么都不懂,是通过逐渐认识周边事物才慢慢形成思维。按理说,应该是用看得见、摸得到的东西,描述那些看不见、摸不到的东西。为什么会用一个看不见、摸不到的东西,来描述成千上万看得见、摸得到的东西呢?三个苹果、三个梨、三张桌子,你可以说出一千种不同的三个XX。”</p>
<p>虎虎想了很久,说“为什么呀?”</p>
<p>我说,“先不说为什么。你提出过上面的问题吗?”</p>
<p>“没有。”</p>
<p>“为什么没有提出过?这个问题,比前一个问题的答案更重要。”</p>
<p>我问虎虎,“你知道十吧?”</p>
<p>“什么十?”</p>
<p>“就是数字十,英文是ten,罗马数字是一个大X,可能其他文字中还有几十种表达。”</p>
<p>“知道。”</p>
<p>“当所有这些不同民族、不同语言的人,用他们的语言说出‘十’的时候,他们脑子里想的都是那个可以描述十个苹果、十个梨的,看不见、摸不到的思维中的那个概念。有了思维之后,用他们自己的语言表达出来。”</p>
<p>“嗯”</p>
<p>“那么这个思维是超越语言的、先于语言存在的。”</p>
<p>“嗯”</p>
<p>“那人是先有思维的,还是先有语言的?”</p>
<p>“……”</p>
<p>“在人描述世界的过程中,有没有先于思维的东西呢?”</p>
<p>“……”</p>
<p>我问虎虎,“中文里面有十,英文里面有ten,罗马数字里面有X,都表示10,是吧?”</p>
<p>“嗯”</p>
<p>“可是阿拉伯数字,就是印度人传给他们的那套计数办法,里面没有十,他们的十,是用1摆在0的左边。”</p>
<p>“嗯”</p>
<p>“这里面有两件事很奇怪。”</p>
<p>“第一件,他们的计数法里面有0。我们一般认为,数字用来描述世界上的东西,比如一个苹果,一个梨。这个0是用来描述什么?是用来描述无。”</p>
<p>“问题是,这个世界上存在无吗?任何一个你能提及的事物,都是有,这个世界哪里来的无啊?0到9,十个数,0佔了十分之一。这种计数法的发明者,他想到把十分之一的数字拿来表达无。而且放在第一个。这不是很奇怪的事情吗?”</p>
<p>“……”</p>
<p>“老子说,天下万物生于有,有生于无。老子还说,道生一,一生二,二生三,三生万物。我的问题是,有怎么会生于无呢?”</p>
<p>“……”</p>
<p>“第二件奇怪的事,是从印度传出来的计数法,把1摆在0旁边,表达10。它用位置表达一个数字的的weight,就是权重。而其他表达法,比如中文三百五十一,英文three hundred and fifty one,都是用具体的文字,表达他前一个数的权重。发明这个办法的人是怎么产生这个想法的?”</p>
<p>“……”</p>
<p>“不知道答案没关系。我也不知道答案。也许这些问题,本来就没有答案。但是,你从来没有问过这些问题,连想都没想过,对吗?”</p>
<p>“是的”</p>
<p>“为什么?”</p>
<p>“……”</p>
<p>“我来告诉你,好吗?”</p>
<p>“好的”</p>
<p>“你天天去学校,学那些加减乘除,做作业做到夜里十二点,每次被打满卷子红叉,不但是老师,连你自己都觉得自己愚蠢、无用、废物、想自杀——所有这一切,都是为了让你提不出上面的问题。”</p>
<p>“那为什么呢,他们这么做?”</p>
<p>“你如果保持了内心的灵性与智慧,他会慢慢发芽,你会慢慢觉醒,变成一个真正的人。而他们需要的,是会使用工具的奴隸,或者是会使用工具的丧尸。一旦你恢复灵性,看到自己被如此对待,他们怕你很可能会造反。”</p>
<p>“对他们来说更糟糕的是,你恢复了灵性,你会点燃其他人的灵性,就像现在我对你做的一样。”</p>
<p>“你知道我怎么看待学习、教育吗?”</p>
<p>“<strong>教育的核心,在于自我教育,所有外在的学校、课本、师长的教导,给你的是提醒、唤醒。所有那些最有价值的东西,是你通过读书、思考、反省、实践,自己得到的。学习是自我教育的手段。其根本在于,以高质量问题为引导,厘清知与不知的边界。这就是我理解的学习。</strong>”</p>
<p>“上面的问题,你从来没有问过,连想也没有想过。同时,你不知道自己不知道什么。”</p>
<p>“你一再说,自己考试成绩差、学习不好。这都是学校、老师,灌到你脑子里的说辞。”</p>
<p>“你成绩差,我知道了——你卷子上的低分,还有满卷子红叉,告诉了我。”</p>
<p>“你学习不好——我的问题是,你学习过吗?”</p>
<p>“<strong>永远要提出高质量的问题。它能带给你高质量的答案。</strong>”</p>
<p>我很少替虎虎解决作业上的问题。主要就是和他聊天。他也高兴,我也高兴。时光飞快。他对数学兴趣逐渐增大。他知道数学是一种有效描述世界的手段。他愿意用不同的方法认识这个世界,还有自己。在芝加哥,我接送他往来於数学联盟的兴趣小组。路上他总是兴奋地告诉我,今天他有什么独特的想法,解决了什么问题。我微笑着一边开车,一边有一搭没一搭地发表些自己的看法。他有时拿一些题考我,我一般能解出一个大概。</p>
<p>一次他给我一道几何题,我实在想不出来。我问,你说怎么解?他说出的解法让我目瞪口呆。我好像一下回到自己十五六岁,那时我在人大附中和那些国际奥林匹克金奖选手一起参加数学训练。他们的思路如此新鲜而不同,我觉得自己一辈子也想不到。没想到现在站在我身边的儿子,竟给我这种感觉。那天的惊奇和内心的安慰,到现在都记忆犹新。</p>
<h2 id="虎虎教育随笔五">虎虎教育随笔(五)</h2>
<p>虎虎问:“爸爸,我怎样才能做一个象你一样的人呢?”</p>
<p>我说,“一没必要,二没可能。”</p>
<p>“没有必要是因为,你看英女王伊丽莎白,她戎装检阅英军和盛装参加典礼的样子,真是威仪万千。可她的祖先,以及那些军事贵族,在外征战,归来剧饮,喝醉了出溜到桌子底下,还得仆人扶回去。你很难想象伊丽莎白女王会见美国总统的时候,做同样的事。对她来说,威仪万千就是最好的。不过,那些祖先的画像,还掛在女王宫殿的墙上,女王遇到难题的时候,可能还会站在画像前,看着祖先,想想他们当时如何做,他们如果在此刻会如何做。”</p>
<p>“没有可能是因为,我读柏拉图对话集,是在监狱借清扫办公楼的机会把书偷出来,夜里在昏暗的监舍灯光下看。你是在美国学校明亮的图书馆里读苏格拉底。心、周围的人和事,都不一样,领悟也就不一样。”</p>
<p>“人生在世,重要的是找到真正的自己。说起来,我和你说这些的时候,你没有恐惧,我很欣赏;你没有恨我,我挺感谢你。”</p>
<p>“为什么我会恨你?”</p>
<p>“苏格拉底怎么死的?”</p>
<p>“被雅典人审判后喝下毒堇汁。”</p>
<p>“耶稣基督怎么死的?”</p>
<p>“犹太人以暴动威胁,被彼拉多下令钉死在十字架。”</p>
<p>“那些人为什么杀他们?”</p>
<p>“……”</p>
<p>“很多他们想帮助的人,已经被剥夺、被控制得太久了,唯一能紧紧攥着的,是一些没有价值的残渣——那是奴役、剥夺他们的人,扔给他们的。有的人连残渣都没有,着对残渣的渴望,匍匐在尘土和泥泞里。</p>
<p>当你告诉他,那些东西没有价值,他可能非常恐惧,因为他整个人生,就是被对于残渣的渴望所支撑的。恐惧的同时,当他们意识到自己如此软弱,被剥夺的生命无法离开对残渣的渴望,也没有勇气追求那些真正珍贵的东西,他们会极度仇恨你。”</p>
<p>“而那些控制、奴役他们的人,因为你向被奴役者揭示真相,给他们以希望和自由,让他们找到内心的自己,从而再也无法奴役这些人,也会极度仇恨你。”</p>
<p>“不要成为我,要成为你自己。人生在世重要的,是独立的精神。你知道如何有独立的精神吗?”</p>
<p>“不知道”</p>
<p>“別犯法,经济独立,独立思考。”</p>
<p>“很多人认为找工作、挣钱重要。是挺重要的,因为它给你独立思考,精神独立以更多的空间。”</p>
<p>“不要让任何人从精神上、身体上控制你。包括你的父母,包括那些声称和你有同样信仰的人。”</p>
<p>“就我观察,在华人的亲密关系中,很少见到爱。多是以爱为名的精神操控和身体操控。亲子、婚姻、恋爱关系中多是如此。”</p>
<p>“操控-被操控场景中的人,一生都不曾想到要活出自己,都是以对他人的控制来定义自己。不要纠缠到这些人和关系中。经济独立是很重要的支撑。”</p>
<p>“有能力的话尽量帮助別人,但记住他们有可能伤害你。”</p>
<p>“不要试图操控他人,要自己获得自由,帮助他人自由。”</p>
<p>“死亡不期而至,因此要多聆听内心的声音,勇敢做你认为最重要的事。Apology,面对雅典人的申辩、Pheado,斐多两篇文章有空看看。死亡的功课早点做,別耽误了。”</p>
<h2 id="虎虎教育随笔六">虎虎教育随笔(六)</h2>
<p>我问虎虎:“你在学习数学、物理的过程中,有没有这种感觉:一道题你完全没有思路。別人告诉你这道题如何做,他们讲的每一步你似乎都明白了。但是所有步骤合在一起,你不知道他们是如何想出来的。合上作业本、卷子,让你重复一遍,你很难做到。再遇到同样的问题,你仍然是脑子一片空白。”</p>
<p>“对,总是这样。”</p>
<p>“你知道为什么吗?”</p>
<p>“不知道。”</p>
<p>“数学、物理,乃至历史、文学、音乐、艺术,其根本都是,他们在用自己的方式描述这个世界。在文学、音乐、美术、建筑等领域,很多时候人们描绘和展现自己的内心。人也是这世界的一部分,描述和展现人的内心,也是对世界的描述。”</p>
<p>“人们如何理解这个世界?一个重要的办法是:</p>
<ul>
<li><strong>将现实中实际存在的东西,用不同的概念描述,此刻,现实世界被抽象成为你思维中的概念;</strong></li>
<li><strong>找到概念之间的关系,使用逻辑分析归纳,从已知认识未知;</strong></li>
<li><strong>将你在思维中得到的结果,映射到现实中,看看结果是否行得通。</strong>”</li>
</ul>
<p>“这是一个从现实到思维,再从思维到现实的过程。当我说:‘这是长凳’四个字的时候,这句话里有三个东西:‘这’,‘是’,‘长凳’。第一东西,就是‘这’,指的是实际存在的那个长凳的实体,英文是entity;第三个东西,‘长凳’这个词,是用以描述实体的那个概念。”</p>
<p>“而实体,entity,其实是无法被完全描述的。因为它有无穷无尽的属性。不只是长宽高,重量,颜色等等。每一处细节,都是这个实体独特之处。你少描述一个地方,就没有完全描述这个实体。这是从属性的多少上谈。而且,你称它为长凳,只是你坐在上面休息的时候。如果你在上面铺上褥子,放上枕头、被子,支起蚊帐,它是一张窄床。在少林寺武僧手中,它是兵器。所以概念是无法完全描述实体的。概念是在一个特定场景中,思维对实体的抽象。”</p>
<p>“你注意到了吗?在这个过程中,那个实体、那个概念,都不是最重要的。最重要的,是那个场景。这个场景,赋予那个实体意义。有这个意义,你才能将那个实体抽象成一个概念。没有那个场景,这个实体就没有它的意义。人也是场景中的一部分。没有场景,没有人,也就没有人思维中的概念抽象它。”</p>
<p>“记得老子说‘天下万物生于有,有生于无’吗?刚才我说的,就是我对‘有生于无’的一个理解。实体是‘有’,那个场景,对于‘这是长凳’这个以思维将实体抽象为概念的过程来说,是无。因为场景根本没有出现。一般人注意实体,而大师注意场景。记得留心场景。”</p>
<p>“关于有和无,老子还说过,‘三十辐共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之以为用。’‘有’,是人看得见、摸得到的那些东西。而‘无’,是赋予‘有’意义的那些东西。这是扯远了一句。”</p>
<p>“回到眼前,你知道学习数学、物理,什么是最关键的吗?”</p>
<p>“是什么?”</p>
<p>“<strong>概念、定义、他们之间的关系,以及前提条件,也就是场景。</strong>”</p>
<p>“你理解定理、定律,或者某一道题的时候,首先要看叙述中的名词,每个名词,是否确切知道其中的含义。是否知道这个名词与何种定理相关,那个定理说的是什么,如果应用,需要什么样的前提条件,这些条件,在这道题里面,是否提供了。其次,要看叙述中的动词,这些动词,描述了概念之间的关系。那些加减乘除等号,就是用于抽象这些关系的。此前,你学过的定理、定律,描述的也是概念以及他们之间的关系,还有自己的前提条件。把握概念/定义、关系、前提条件,针对上述三件事,提出问题,精炼你的问题,以问题引导,区分知与不知。”</p>
<p>“区分知与不知很重要。在你学习的时候,一个大的不知道,是由多个小的不知道构成的。你厘清有哪些小的不知道,找到他们之间的关系。这种关系,有的时候你能找到,有的时候找不到。找不到的时候,你要猜。”</p>
<p>“猜?学习靠猜?”</p>
<p>“对。在一个场景中,这几个小不知道之间可能的关系一般也就三四个。你列出这些可能关系。”</p>
<p>“把每一小的不知道,再用上述办法,分解成更小的不知道,列出这些更小的不知道之间的关系。”</p>
<p>“从上面的三四个关系,到下面的每个小不知道的三四个关系,你现在有十几条路径,通向不同的可能的答案。有不少路径,里面存在著明显的错误或矛盾。此时,这个路径就被划掉,这个推论链条是错的。很快可选的答案,只有那么几个,也许只有一两个。此刻你几乎已经找到答案了。”</p>
<p>“概念定义、关系、前提条件也就是场景。针对这些提出问题,区分知与不知,加上一些想像力。那个未知,像是一块巨大的花岗岩。此前你的学习,你象钻头一样,钻一个花岗岩。你的力气是有限的,你钻红了,也变软了。现在,你像是树根,裹住花岗岩,上面的每条缝隙,就是你把大的未知变成小的未知的入手处。你的细小的根深入到那些缝隙中,再深入到更小的缝隙中,你一用力,別人看不出来你用力,整个花岗岩散成一地小石块。”</p>
<p>“如此,在学习中,你会无往不利。”</p>
<p>“人们都会说你聪明。但是你自己明白,你只是知道自己不知道什么。”</p>
<h2 id="教育随笔与年轻朋友交谈摘录">教育随笔【与年轻朋友交谈摘录】</h2>
<p>各位见过婴儿学说话,学走路吗?婴儿说的含混不清,大家觉得非常可爱,哈哈大笑。婴儿走路跌跌撞撞,一下摔个大跟头,人们会觉得可爱,心疼。在笑声和疼惜中,所有人都学会了说话,学会了走路。尽管摔过一头大包。我想问各位,你们在学校里,学不好的时候,有人觉得你们可爱吗?有人疼惜你们吗?连你们自己都觉得自己无用、废物、想自杀。</p>
<p>为什么两种学习差別如此之大?而且你们以后会发现(你们父母发现得更早)学校里学的东西,在走出学校后,几乎没有什么用。为什么?因为学校的主要功能不是教育,而是规训与惩罚、剥夺你认知自我和世界的能力、通过设计你必然失败的考试,让你自我否定,从而让你心甘情愿服从。</p>
<p>给你们看的青春剧,里面要么是男生女生谈恋爱,要么是灌篮高手飞身上篮——那都是给你们洗脑的。恋爱,灌篮高手,是让你们这些被规训,被惩罚,被剥夺自我认知的人,认为自己是唯一的可怜虫——“看人家,高富帅、白富美、灌篮高手,这才是青春哪!”——其实人人都是可怜虫。一天你没有主动认知自己和世界,一天你就被外物囚禁。在学校中最大的成就不在于你学到什么,而在于你还保留了什么。</p>
<p>很多华人家庭,其所谓的“教育”,就是父母基於如下三种优势控制孩子:</p>
<pre><code>1.体力优势
2.经济优势
3.社会经验的优势。
</code></pre>
<p>这三种优势,自孩子6岁以后,在12年内会消失殆尽。对于华人第一代新移民,这三种优势形成的控制,会受到更严峻挑战。因为你们的外语不行,融入异国的程度远不如自己的孩子。如果你们对世界和自我没有深入观察-思考-反省,很快会被孩子轻视。</p>
<p>以电子游戏为例,很多文章提到电子游戏如何有害,背后隐藏如何多的妖魔鬼怪,使用微信或常人工具,如何眼睛疼或是遇到常人中的麻烦等等。须知面对21世纪接受西方教育的孩子,使用封神榜式的说教,黄暦月份牌上“宜:动土;忌:远足”之类民俗大观园式的恐吓,会更快地疏远孩子。而气功在这种实践中,会被认为是一种带有东方异国情调的奇特气功。</p>
<p>虎虎曾沉迷电子游戏。家人非常焦急。我对家人说,虎虎沉迷电子游戏,说明对他来说,1.真实世界枯燥,不如电子游戏有意思2.真实世界中的挑战,他无法应对,故此在电子游戏中逃避。那么我:1.让有我在他身边的真实世界,比电子游戏有意思2.帮他应对真实世界的挑战。他自然离开电子游戏。</p>
<p>我想问各位父母,</p>
<pre><code>1.有你们在身边的真实世界,比电子游戏更有意思吗?如果不是,为什么?
2.你能帮自己的孩子,应对真实世界的挑战吗?无论是心理上,还是具体操作上。如果不能,为什么?
</code></pre>
<p>如果上面的1和2,你们都没有做到,你们声称的、让自己相信的,“我爱孩子”,是真实,还是幻觉?是爱,还是控制?而控制,也许源于你们内心对世俗世界的恐惧,对失去孩子的恐惧?生硬地使用气功中的话语,以“希望-恐惧”作为石头和棍棒驱策孩子。你们的做法是在赶走他们。</p>
<p>我也想对年轻人说,不读书、不思考、被吃穿住用琐事牵引;被考试分数、求职压力驱迫;你们会重复父母所有的困境,而且还不如他们——他们经历艰辛磨难,有意志,有牺牲——你们有什么?</p>
英格兰历史
2018-11-28T00:00:00+08:00
https://www.piginzoo.com/history/2018/11/28/history-england
<p>开个头,对英国历史很感兴趣,源于想了解西方文化政治,特别是近代的起源,英国肯定是最重要的一个国家,所以,想了解一下她的历史。为了防止自己犯懒,先开此贴,后续会不断更新。</p>
<p>目前正在读狄更斯的《<a href="https://item.jd.com/26348785245.html">英国简史</a>》,还有王晶送的这本《<a href="https://item.jd.com/12312200.html">英国 看得见的世界史</a>》。</p>
<hr />
<p>可以看一下“柴知道”关于英国的几个组成部分的视频:</p>
<p>苏格兰、英格兰、北爱尔兰、威尔士的关系:</p>
<iframe src="//player.bilibili.com/player.html?aid=5345746&cid=8689654&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" class="myvideo"> </iframe>
<hr />
<p>另外,还有一个关于欧洲为什么是近代科技、人文、艺术的主流发源地,也很有意思:</p>
<iframe src="//player.bilibili.com/player.html?aid=9362957&cid=15472885&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" class="myvideo"> </iframe>
谷歌Vocikit
2018-09-28T00:00:00+08:00
https://www.piginzoo.com/tech/2018/09/28/voice-kit
<h1 id="玩转voice-kit">玩转Voice Kit</h1>
<p>之前看过voicekit的神奇,很是羡慕,一直想找个时机,搞起来。家里的树莓派也落土一层了,必须动手利用起来,于是,某天,淘宝上果断下手,买之。</p>
<p>说明一下,voicekit是谷歌给爱玩的技术爱好者,开发的一个小板子,这个voicekit板子必须配合树莓派3B或者3B+,另外,现在voicekit最新固件是2.0,但是淘宝上卖的都是1.0的板子。</p>
<p><a href="https://aiyprojects.withgoogle.com/voice/">VoiceKit主页</a>在此,很详细,照着弄就可以了。</p>
<h2 id="步骤">步骤</h2>
<p>1.安装,硬件安装起来很简单,照着手册弄就可以了,把两个板子扣在一起,不用焊接,全都是直接插上。</p>
<p>2.刷固件!需要从voicekit主页上下载固件,然后用一个叫Etcher的软件将固件烧制到tf卡上。</p>
<p>3.开机,然后测试声音,麦克风啥的,顺利的话,都ok</p>
<p>4.然后就是去<a href="https://console.cloud.google.com">谷歌云</a> 去创建一个应用,这步也是主页教程的一部分,教程很赞,照着弄就可以,主要是为了生成appid啥的几个从你树莓派链接谷歌云应用所需要的那几个appkey,screte啥的.</p>
<p>5.然后,教程就没有,中国特色的,需要翻墙,安装shadowsocks+privoxy,把树莓派设置成可以翻墙连接到谷歌云上去.</p>
<p>6.都完事后,运行固件中带的demo程序,绿灯亮起,齐活.</p>
<h2 id="硬件准备">硬件准备</h2>
<p>需要买一个树莓派,一个voicekit,淘宝上都有,如果犯懒,在一家买就可以。不过,tf卡卖的比较贵,建议在京东上购买,可以便宜很多。另外,树莓派配套的电源别忘了买一个。</p>
<h2 id="各种坑">各种坑</h2>
<ol>
<li>我的板子是3B,不是3B+</li>
<li>我买的voicekit不是2.0,是1.0,上面写着2017,而不是2018</li>
<li>所以我只能用这个文档:https://aiyprojects.withgoogle.com/voice-v1/#users-guide-turn-on-the-google-assistant-api</li>
<li>照着来就可以,第一步是刷固件,要装一个单独的固件,下载,然后用Etcher烧制到tf卡上就可以</li>
<li>启动后,试试喇嘛和麦克,都ok</li>
<li>然后照着弄auth2的认证,生成一个key</li>
<li>然后去测试代码src/examples/voice/assistant_library_demo.py,发现不同,要翻墙</li>
<li>于是安装shdowsocks,启动之,结果发现是sock5,不行,还是在装个privoxy,把sock5转成proxy</li>
<li>修改配置的时候,把sock5写成了sock5t(照着网上写的,坑),结果死活不行,搞半天
10.最终通了,curl -x 127.0.0.1:8118 google.com
11.再运行assistant_library_demo.py,提示我访问一个地址,得到一个授权码,然后再把这个授权码拷贝到term里,终于启动起来了
12.最后为了让其自启动,把sslocal,privoxy,proxy甚至都放到自启动里</li>
</ol>
<h2 id="参考">参考</h2>
<p><a href="https://etcher.io/">Etcher主页</a></p>
<p><a href="https://aiyprojects.withgoogle.com/voice-v1/#users-guide-turn-on-the-google-assistant-api">VoiceKit v1.0</a></p>
<p><a href="http://www.wuliaole.com/post/raspberry_pi_and_shadowsocks/">树莓派折腾之:树莓派和ShadowSocks</a></p>
<p><a href="https://blog.lyz810.com/article/2016/09/shadowsocks-with-openssl-greater-than-110/">解决openssl升级到1.1.0后shadowsocks服务报错问题</a></p>
<p><a href="https://harttle.land/2018/01/29/aiy-voice-kit.html">AIY Voice Kit 初体验</a></p>
<h2 id="其他">其他</h2>
<p>之前遇到个ssl版本的问题,undefined symbol: EVP_CIPHER_CTX_cleanup,得给源码成cleanup->reset,具体看帖子
google.auth.exceptions.TransportError: (“bad handshake: SysCallError(104, ‘ECONNRESET’)”,) 这个往往是代理有问题</p>
小赵
2018-06-09T00:00:00+08:00
https://www.piginzoo.com/life/2018/06/09/xiaozhao
<p>小赵是我的理发师,就在爸妈楼下的这个小理发馆,已经认识好几年了。</p>
<p>已经忘记是什么时候开始,在这个小理发馆理发的了。理发馆不大,就是居民楼的两间屋子,有一个有些娘的主管,人很nice,情商也很高,总是和各种女客人攀谈聊天,其乐融融。还有一个小妹,帮助客人洗头,总是不语,不过一头黄色,包不住年轻人的张狂。而小赵,身材长相颇有几分我表弟的样子,胖乎乎的,很壮,戴副眼镜。第一次就是他给我剪的,还挺满意,后来让娘娘小哥剪过几次,都不甚满意,终究还是固定下来,每次都来找这个小“表弟”了。小赵话不多,总是宅在角落里,有客人就上,没客人就又归位,继续宅着去摆弄手机去了。</p>
<p>开始很多次,我都是他眼中沉默不多话的普通客人,每次剪完,一句谢谢就此别过。直到有一次,聊到了游戏,我告诉他,我有个弟弟也是游戏狂人,仿佛一下子就捅到了他的话匣子开关,那次剪发跟我喷了一路,讲述他的游戏心得和经验,从端游到页游,最后是手游,这兴奋劲,跟我那个游戏达人弟弟更有几分神似了,就更添几分亲切了。</p>
<p>熟悉了,就常常在剪发的时候闲聊,慢慢地知道了,他很小就随着爸妈来北京,在北京成长,从小学就厮混在这个地方,不过貌似学习不太好,也不是北京户口,我推测,应该是没有上大学,高中毕业就出来讨生活了。偶尔也会提一句老家,基本上和我对老家的感觉类似,遥远而陌生,也再也不可能回得去了。</p>
<p>日子过得很快,每个月我都会见他一次,剪发的时候,也会闲扯会儿各种游戏,我玩游戏不多,所以总是他说我听,偶尔问问。剪完,微笑着跟我道别,而我也礼貌地道别。</p>
<p>突然有一次,他一边剪,一边面无表情地跟我说,可能要回老家了,回去开个理发馆。我心里一惊,这意味着以后不能来着剪头发了,我忙问为何啊?他悠悠地说,北京难混,没啥意思,要跟爸妈回老家了,凭这个手艺,自己开个理发馆,在当地应该是可以过活的。我想,也是,自从蔡奇开始清理外地人口,北京对外地人越来越不友好,回去也好,也算是个归宿吧,人总是要有一个归宿的。</p>
<p>没想到过了一段时间,果然看不到小赵了,我也不得不再让蹩脚的娘娘小哥帮我剪起了头发,期间,我也会问小哥,小赵呢?是回老家了么?小哥点点头。我也觉得挺遗憾的,毕竟好几年了,突然不能给我剪头发了,还是有些怀念的。</p>
<p>又有一次,和娘娘小哥聊起了小赵,我说,北京再不好,也比老家机会多吧,干嘛非要回去呢。小哥跟我说过,哦,不是的,其实小赵是得了严重的肾病,可能是由于之前经常熬夜打游戏的缘故吧,觉得不舒服,去医院一查,很严重了,后来就去治病了,和小哥也没什么联系了。我这才恍然大悟,我说,为什么他要说回老家呢?“他可能不想让别人知道吧….”</p>
<p>不知道后来的小赵怎么样了?是不是能挺过人生这一关,他好像是90年的,正是该绽放的时候。他是我人生的一个过客,我经历过的很多很多人,不知道为什么,这个沉默的、善良的、热爱游戏的小赵,时常会让我想起。</p>
明治维新之后日本走向军国主义
2018-06-09T00:00:00+08:00
https://www.piginzoo.com/history/2018/06/09/japan-before-war
<p>因为看了大象公会的“从民主之光到战争策源地,日本只用了十年”,很感兴趣,就8了8这段历史,大致搞明白了,226事件那帮少壮派陆军军部的人,也不是什么好鸟,就是激进派想效忠天皇表忠心,结果人家天皇被狂热吓坏了,反倒剿灭了他们。</p>
<p>裕仁也不是啥好鸟,继承了爷爷的邪恶和爸爸的狡诈,让一点民主苗子彻底被扼杀,议会和内阁完全被他和军部两边夹击绞杀成为摆设,又利用东方人那种心知肚明的默契操纵着军部,而又无需为此背负责任,操纵的日本淫民一愣一楞的,然后,周边的牛鬼蛇神齐努力,把他送上万劫不复,可怜了日本人民,为野心家们的罪恶买单。</p>
<hr />
<p><a href="https://zhidao.baidu.com/question/514483250.html">二战时期日本军部和政府之间有什么矛盾?</a></p>
<pre><code>裕仁时期,裕仁是个样子傻傻,内心狡诈阴险的家伙,为了重新夺回内阁手中的权力,裕仁与军队的关系进入了白热化,日本国家的军队被叫做“皇军”。意味着军队的所有权逐渐在远离政府,靠近天皇,军队也越来越独立化。裕仁不断和军队中有激进思想、投机思想的少壮派军官接近,期望通过军队独立化来摆脱政府。同时裕仁也在不断塑造“天皇”至高无上的神话地位,麻痹人民群众。
日本在中国成立了关东军,理论上关东军属于特殊的单位,不隶属于内阁政府陆军部,直接隶属于天皇,成为天皇的私人部队。
整个二战时期,军部与内阁一直在进行权力博弈,而天皇就是军队最大的头子。实际上,9.18事变并非日本政府制造的,而是由关东军一些有野心的家伙揣摩了天皇的意图背着政府私自制造的。而政府是默认了事态的发展,也没有权力来管理关东军。后来,日本发生了两次兵变,终于将内阁的文官政治家彻底清理出了政治舞台,内阁彻底由军部来操纵,而军部的一些极端分子,如东条等人,虽然很坏,但是都是很狂热的忠君爱国分子,始终在忠心耿耿地执行着天皇的命令。
所以,有一种说法,天皇实际上是日本最大的战犯,不过美国因为种种原因饶恕了他。
日本战败后,在美国的主持下建立议会民主制。但为了顺应日本民意,允许天皇作为象征性的国家元首保留下来。1946年,美国迫使昭和天皇裕仁发表了“人间宣言”,承认天皇也与平民无异,只是受国民拥戴的国家象征。
</code></pre>
<p><a href="https://www.zhihu.com/question/267262306/answer/324394578">二战时日本内阁被推翻后,日本军部为什么不顺势架空天皇?</a></p>
<pre><code>日本内阁不是天皇的统治支柱,军队才是。日本军队与天皇是一种奇妙而独特的共生关系。既互相支撑、互相依赖、又互相背离、互相架空。军队既忠于天皇又不完全服从天皇的指挥,天皇依靠军队,但又不为军队的行为承担任何责任。
</code></pre>
<p><a href="https://baike.baidu.com/item/%E4%BA%8C%C2%B7%E4%BA%8C%E5%85%AD%E4%BA%8B%E4%BB%B6/2702650?fr=aladdin">二二六事件</a></p>
<pre><code>二二六事件,又名“帝都不祥事件”或“不祥事件”,是指1936年2月26日发生于日本帝国的一次失败兵变,日本帝国陆军的部分“皇道派”青年军官率领千余名士兵对政府及军方高级成员中的“统制派”意识形态对手与反对者进行刺杀,最终政变遭到扑灭,直接参与者多被处以死刑,间接相关人物亦被调离中央职务,皇道派因此在军中影响力削减,而同时增加了日本帝国军队主流派领导人对日本政府的政治影响力。二二六事件也是日本近代史上最大的一次叛乱行动,也是1930年代日本法西斯主义发展的重要事件。
讽刺的是,皇道派发动政变时所积极追求的目标,例如军部独裁、国家政权法西斯化,在政变失败后反而得以实现。这不仅是因为同属法西斯派别的统制派牢牢掌握了军部大权,而且内阁也被以新首相广田弘毅为首的文官法西斯集团所控制。
</code></pre>
<p><a href="https://mp.weixin.qq.com/s?__biz=MjM5NzQwNjcyMQ==&mid=2651014419&idx=1&sn=99c5fadcbb4d10aceddafdc9b4639975&chksm=bd2d947d8a5a1d6b72567139632cc7af008e9617fa9cb4c38015dbf82d430c5406568d4042ff&scene=21#wechat_redirect">「昭和男儿」是怎样养成的</a></p>
<pre><code>82 年前的日本,在震惊世界的二二六兵变中,1500 多名昭和男儿正是唱着此歌,果断「蹶起」,以「尊皇讨奸」为旗号,「天诛」了一批内阁成员和权贵重臣。
他们认为,当时日本的各种社会问题,都是这些奸臣蒙蔽天皇造成的,不杀不足以彰显「国体」,救民于水火。
在中国网民的调侃中,「昭和男儿」虽然是侵华战争的主力,但相比于如今日本散漫颓丧的「平成废物」,他们普遍勇武果决,对领袖忠诚,对民族自信,对英米鬼畜满怀仇恨。
从明治维新以来就倡导「文明开化」,积极拥抱西方文明的日本,为何会在昭和年间出现这么一批忠君爱国之辈?他们是怎样被培养出来的?
以 1945 年终战作为出生年份的分界线,「昭和男儿」可分为前期和后期,中文互联网调侃的主要是前者。两者的差异主要在于,是否对天皇绝对忠诚,以及是否热衷于凡事武力解决,「腰杆够硬」。这种前后差异,是战前日本政府精心培育的结果。
在很多明治开国元勋们看来,天皇制这一根本国体绝不能动摇。自由民权分子只能给国家添乱,削弱日本天皇制万世一系的制度优势。
1885 年,日本第一任文部大臣森有礼上任伊始,即提出:教育的最大任务之一是让臣民「辨本分、行伦理」,「亿兆一心,不忍离弃君上」,只有用忠君爱国的道德说教压制自由主义和个人主义,才能使国家富强。
森有礼同时认为,小学教育又是一切教育工作的重中之重,要在民众「性格形成时期,就养成誓死效忠国家的观念」,「大学的自由虽然不无危险,但是,如果在中小学阶段就灌注国家主义,这种危险将降低到最低程度」。
日本第一任文部大臣,「日本现代教育之父」森有礼,同时也是坚定的天皇制「国体」维护者。他认为,哪怕是对科学技术进步至关重要的怀疑和批判精神,也要严防死守,用儒家的忠孝观念加以冲抵,避免损伤国体。
</code></pre>
<p><a href="https://mp.weixin.qq.com/s/jmk4OTe5o8m_9togtQqU-A">从民主之光到战争策源地,日本只用了十年</a></p>
<pre><code>裕仁大婚,大赦天下,广施恩泽于日本国民,以收买人心。皇室教师杉浦重刚曾如此教导裕仁:法国思想家卢梭放纵任性,连工作都保不住,不值得尊重,他的理论「引导民众诅咒国家和政府」,罪大恶极;日本行「王道」,可免欧洲自由主义思想的余毒。
裕仁对政治的操弄也很有手腕。美国历史学家赫伯特·比克斯指出:通过幕后的积极活动,裕仁至少掣肘了三任总理大臣的权力,加速了政党内阁的崩溃。
军部在争取到裕仁支持的情况下,坚决回击,最终获得「独立于内阁,独自制定军令」的权力,并进一步明确了天皇的「统帅大权」是不受政府约束的,为军部势力的膨胀埋下了祸根。
至于后两个问题,在野「思想家」「国师」们也早已完成了理论建构,翘首期盼迷茫军人和底层民众们皈依。军部高层尝试回答了第一个问题。陆军大将荒木贞夫提出:日本军队是工人农民在天皇的领导下为保卫国家而组建的军队,所以必须坚持天皇对军队的绝对领导。这种「皇军」论得到全军上下的普遍认同。
从 20 年代末到 30 年代,日本各种极端思潮纷纷涌现并发展壮大,从忽悠军人民众、勾结上层权贵的法西斯分子,到努力迎合宫廷、梦想缔造国家宗教的日莲宗领袖,应有尽有。
</code></pre>
我儿的升学帖
2018-05-30T00:00:00+08:00
https://www.piginzoo.com/home/2018/05/30/son-enrolment
<h1 id="前言">前言</h1>
<p>这是为儿子升学做准备的帖子,主要是考察了朝阳的初中、高中情况,作为自己备忘,也作为未来选择学校的依据,如果对您也有所帮助,那略感欣慰了。</p>
<p>虽然此贴仅对北京-朝阳,但是您可以按此思路制作您自己的分析雷达,所有的资料都是网上公开的,需要的只有时间和耐心的整理。</p>
<p>估计这贴会持续更新,一直伴随我儿高中毕业…</p>
<h1 id="概述">概述</h1>
<p>为高中升学做准备,主要就是先更了解以下的信息:</p>
<ul>
<li>儿子这界的人数,成绩分布</li>
<li>朝阳高中的情况,招生人数,成绩要求</li>
</ul>
<p>直接说结论:</p>
<p>$\color{red}{儿子这届朝阳有5000京籍的孩子同台竞技,朝阳重点高中6小强招生1500人(占全区30\%),但刨除直升和校额到校,对外招800人(占全区16\%)。}$</p>
<h2 id="中考改变">中考改变</h2>
<p>2021年是新中考改革的第一届,他们是第一届$\color{red}{小白鼠}$,计入最终成绩的科目是8课,实际上是要考10课,从让大家不偏科的角度是好事,但是中国真的不是讲素质教育,而是应试教育,所以从这个角度,实际上大大加大了孩子们的学习压力。</p>
<table>
<tbody>
<tr>
<td>科目</td>
<td>分数</td>
<td> </td>
</tr>
<tr>
<td>语文</td>
<td>100</td>
<td> </td>
</tr>
<tr>
<td>数学</td>
<td>100</td>
<td> </td>
</tr>
<tr>
<td>英语</td>
<td>100</td>
<td>笔试分值60分,听力和口语考试分值40分</td>
</tr>
<tr>
<td>政治</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td>体育</td>
<td>40</td>
<td>现场考试分值30分,过程性考核分值10分</td>
</tr>
<tr>
<td>物理</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td>历史</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td>地理</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td>化学</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td>生物</td>
<td>80</td>
<td>笔试分值70分,实践活动分值10分</td>
</tr>
<tr>
<td><合计></合计></td>
<td>660</td>
<td><em>生物和化学二选一,历史和地理二选一</em></td>
</tr>
</tbody>
</table>
<p>从12门初中学业水平考试科目成绩中确定$\color{red}{8门}$,将原始成绩计入中招录取总成绩,$\color{red}{满分为660分}$,语文、数学、外语、体育与健康、道德与法治、物理$\color{red}{6门}$成绩必须计入,在历史和地理中择优确定1门、在化学和生物中择优确定1门计入。</p>
<p>语文、数学、外语3门科目分值均为100分,其中外语笔试分值60分,听力和口语考试分值40分。道德与法治、历史、地理、物理、化学、生物6门科目分值均为80分,其中笔试分值70分,实践活动分值10分。体育与健康分值40分,其中现场考试分值30分,过程性考核分值10分。</p>
<h2 id="总体感受">总体感受</h2>
<p>先对朝阳、北京市的教育资源分布有个定性的认识,总的来说就是,大部分优质资源都在海淀。</p>
<p><a href="https://mp.weixin.qq.com/s/RJIymXWaj3xOx-XlfOkH7w">2018北京中考招生计划发布:统招、校额到校、市级统筹和名额分配</a></p>
<p><a href="https://www.zhihu.com/question/39729044/answer/178992236">北京的较偏远区县(东西海三区之外)的中小学教育水平是怎样的?</a></p>
<p>看这个,2016年的清北数据,可以见一斑:</p>
<blockquote>
<p>2016年北大清华合计在北京招生676人:</p>
</blockquote>
<ul>
<li>人大附 114人 16.86%</li>
<li>海淀区 406人 60.06%</li>
<li>西城区 225人 33.28%</li>
<li>东城区 21人 3.11%</li>
<li>朝阳区 12人 1.78%</li>
<li>丰台区 4人 0.59%</li>
<li>石景山 1人 0.15%</li>
<li>郊 区 7人 1.04%</li>
</ul>
<p>人大附,果然是变态啊!朝阳,果然是渣。不过,还是要努力。</p>
<h2 id="朝阳中考分析">朝阳中考分析</h2>
<p>先分析一下<a href="http://www.phic.org.cn/tjsj/wssjzy/jkzb/201304/t20130425_255006.html">北京新生儿人口</a>变化,可以看出2003年最低44859,然后逐年递增,2006年就到了63498,然后到了后面就不忍直视了,都10万去了。</p>
<p><a href="http://www.xschu.com/xiaoshengchu/24/14724.html">北京新生儿人数</a>,可以看到,2006年出生孩子,也就是2021届,北京出生人口12.9万,其中北京户籍的是7.69万,2012年小学入学人数14.17万人,所以,直接面临竞争的就是这7.7万的孩子。</p>
<p>但是因此锁区,所以其他区的数据不太关心,那么,那么朝阳有多少孩子呢?朝阳区的中考的情况呢?没有2019年的数据,可以通过2018的数据参考一下:</p>
<p><img src="/images/20200503/1588479845781.jpg" alt="" class="myimg" /></p>
<p>2018年朝阳区报名总人数:7841人,咱们只关心京籍考生:$\color{red}{4959人}$,应届生人数:7819人,往届生人数:22人,非京籍人数:2882人,借考人数:2469人,随迁考生:181人。2018年北京中考总报名人数为65366人,含九类人和随迁子女。朝阳/北京 = 8%。</p>
<p>我按照这个<a href="https://www.bjeea.cn/html/zkzz/hidden/2018/0704/71360.html">数据</a>做了直方图,蓝线是540分的分界线,可以看到,540分数的孩子,占比是$\color{red}{19\%}$左右。$\color{red}{540分}$,基本上就是区重点高中(4小强,6小强)的最低分数线了,也就是说,你需要把70%的孩子成绩都要好,才能进入到这4-6所区里最好的学校。</p>
<p>这个数据里面只有$\color{red}{5228个}$孩子,和之前的7841人不一致,我推测是只计算了北京籍贯的孩子。</p>
<p>朝阳有多少所初中呢?朝阳区初中数:$\color{red}{54个学校}$,1498个班,每年级500个班,每个学校平均10个班。</p>
<p>那朝阳一共多少所高中呢?有$\color{red}{32所}$。</p>
<blockquote>
<p>2018年朝阳区中考报名7841人,应届生7819人,往届生22人。本市户籍考生4959人,非京籍考生2882人,借考考生2469人,随迁考生181人。1.普通高中32所,招生计划3761人,其中示范高中7所,招生计划1820人,一般高中25所,招生计划1941人。职业高中4所,招生计划720人,其中提前招生216人,统一招生504人。</p>
</blockquote>
<p>这个是2018年前的情况,我们可以看到最终高中是招了3761人,职高720人,合计是4481人,京籍考生是4959人,所以,这样来计算,外地籍贯的孩子基本上都被排除在外了,唉,这就是一个不公平的世界。</p>
<p>那么六小强最终找了多少人呢?</p>
<table>
<tbody>
<tr>
<td>学校</td>
<td>总人数</td>
<td>统招</td>
<td>备注</td>
</tr>
<tr>
<td>八十</td>
<td>471</td>
<td>166</td>
<td>总数里包含了国际学校、校额到校、特长</td>
</tr>
<tr>
<td>人朝</td>
<td>231</td>
<td>187</td>
<td> </td>
</tr>
<tr>
<td>清朝</td>
<td>182</td>
<td>130</td>
<td> </td>
</tr>
<tr>
<td>陈经纶</td>
<td>333</td>
<td>130</td>
<td>其他的是校额到校、特长、直升</td>
</tr>
<tr>
<td>工大附</td>
<td>260</td>
<td>150</td>
<td> </td>
</tr>
<tr>
<td>日坛</td>
<td>87</td>
<td>38</td>
<td> </td>
</tr>
<tr>
<td>合计</td>
<td>1564</td>
<td>801</td>
<td> </td>
</tr>
</tbody>
</table>
<p><em>网上数据不太一致,这个数据仅供参考。另外,我们仅关心“<strong>统招</strong>”那一列,是对外招生的数量。按照5000人的朝阳人数基数,大概有6小强就占了31%,可以考入的人数占全区的16%</em>。</p>
<p>详细数据:</p>
<ul>
<li>朝阳小强情况(本校直升、校额到校、考试录取、最低分数线)
目前仅有2018年数据:
<ul>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd385fd02a5.shtml">陈经纶</a>,普通72,科技班20,总157,<a href="http://bj.zhongkao.com/e/20180328/5abb09e08b272.shtml">分数</a>,547(语90数87英98)</li>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd389857f0a.shtml">八十</a>,普42,科技班30,总150,<a href="http://bj.zhongkao.com/e/20180328/5abb09da37f9f.shtml">分数</a>,555(语93数91英98)</li>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd370a7079c.shtml">人朝</a>,普(107),无直升,<a href="http://bj.zhongkao.com/e/20180328/5abb0a239cf5f.shtml">分数</a>,552(语94数88英97)</li>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd35f6703b0.shtml#">清朝</a>,普(50),无直升,<a href="http://bj.zhongkao.com/e/20180328/5abb0a453d5a3.shtml">分数</a>,547(语90数86英96)</li>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd38136d4a2.shtml">日坛</a>,普(38),总87,<a href="http://bj.zhongkao.com/e/20180328/5abb09e77ada6.shtml">分数</a>,539(语86数90英91)</li>
<li><a href="http://bj.zhongkao.com/e/20180517/5afd373d9146a.shtml">工大附</a>,普(39),总105,<a href="http://bj.zhongkao.com/e/20180328/5abb0a0369c3b.shtml">分数</a>,541(语92数85英94)</li>
</ul>
<p>其他外区:</p>
<ul>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb0998ea088.shtml">十一中学</a>,535(语93数82英95)</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09a879292.shtml">五十五中</a>,530(语86数91英94),0人</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09aecfe12.shtml">一七一</a>,555(语88数95英100),10人</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09b584f5b.shtml">汇文中学</a>,552(语93数89英98),22人</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09bbc5d36.shtml">四中</a>,565(语97数95英98),14人</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09ca48d23.shtml">三十五</a>,550(语92数96英94),4人</li>
<li><a href="http://bj.zhongkao.com/e/20180328/5abb09d197f4d.shtml">北师大附</a>,561(语93数93英98),6人</li>
</ul>
</li>
</ul>
<h3 id="2019年朝阳中考分析">2019年朝阳中考分析</h3>
<p>2019是最可以参考的年份,由于拿到了这篇文章<a href="https://mp.weixin.qq.com/s/P2Dck9toNQUtaNpg3rrwog">一模临近,你要考多少分才能进东西海朝优质高中?</a>,里面有2019年中考的很多信息,很值得参考,所以,单独做一节,来分析2019年朝阳中考。</p>
<blockquote>
<p><strong>各区比比</strong></p>
</blockquote>
<p>看550分以上的孩子的数量和比例:</p>
<table>
<tbody>
<tr>
<td>区</td>
<td>比例</td>
<td>孩子数</td>
<td>区人数</td>
</tr>
<tr>
<td>朝阳</td>
<td>8.7%</td>
<td>605</td>
<td>7000</td>
</tr>
<tr>
<td>西城</td>
<td>17.5%</td>
<td>1199</td>
<td>6850</td>
</tr>
<tr>
<td>东城</td>
<td>11.7%</td>
<td>644</td>
<td>5500</td>
</tr>
<tr>
<td>海淀</td>
<td>7%</td>
<td>899</td>
<td>12800</td>
</tr>
</tbody>
</table>
<p>看上表,我们得出“西城真牛,海淀人真多而且也没那么牛,朝阳好渣”的结论。</p>
<blockquote>
<p><strong>朝阳的数据</strong></p>
</blockquote>
<p>来,看我大朝阳的数据:</p>
<table>
<tbody>
<tr>
<td>分数段</td>
<td>人数</td>
<td>占比</td>
<td>累计人数</td>
<td>累计占比</td>
</tr>
<tr>
<td>570+</td>
<td>1</td>
<td>0.01%</td>
<td>1</td>
<td> </td>
</tr>
<tr>
<td>560-570</td>
<td>137</td>
<td>1.7%</td>
<td>138</td>
<td> </td>
</tr>
<tr>
<td>550-559</td>
<td>567</td>
<td>7%</td>
<td>705</td>
<td>8.7%</td>
</tr>
<tr>
<td>540-549</td>
<td>776</td>
<td>9.65%</td>
<td>1481</td>
<td>18.35%</td>
</tr>
<tr>
<td>530-539</td>
<td>805</td>
<td>10%</td>
<td>2286</td>
<td>28.35%</td>
</tr>
<tr>
<td>520-529</td>
<td>654</td>
<td>8.13%</td>
<td>2940</td>
<td>36.48%</td>
</tr>
<tr>
<td>510-519</td>
<td>531</td>
<td>6.6%</td>
<td>3471</td>
<td>43.08%</td>
</tr>
<tr>
<td>500-509</td>
<td>392</td>
<td>4.88%</td>
<td>3863</td>
<td>44.96%</td>
</tr>
</tbody>
</table>
<p>我们重点关注,我们大概率分数会在这个区间,530-540-550-560,这3个分数段的,大概人数是$\color{red}{2148人}$,占全区总人数7000人数的比例是$\color{red}{26.7\%}$。比这个分数高的孩子,全区只有138人,好吧,你们是神。</p>
<p>那么,这个分数段,可以上什么学校呢?</p>
<p>看看朝阳的“名校”的分数段:</p>
<p>好吧,就看8所把,其实可以分为4所(八、人、清、陈),或者6所(八、人、清、陈、工、日),最理想的是前4所,最差是东师了,呵呵。</p>
<table>
<tbody>
<tr>
<td>学校</td>
<td>最低分数</td>
<td>统招</td>
<td>实际统招</td>
<td>合计</td>
</tr>
<tr>
<td>八十</td>
<td>552</td>
<td>255</td>
<td>166</td>
<td> </td>
</tr>
<tr>
<td>人朝</td>
<td>547</td>
<td>187</td>
<td>150</td>
<td> </td>
</tr>
<tr>
<td>清朝</td>
<td>543</td>
<td>164</td>
<td>130</td>
<td> </td>
</tr>
<tr>
<td>陈伦</td>
<td>542</td>
<td>241</td>
<td>130</td>
<td>576</td>
</tr>
<tr>
<td>工附</td>
<td>538</td>
<td>219</td>
<td>150</td>
<td> </td>
</tr>
<tr>
<td>日坛</td>
<td>534</td>
<td>179</td>
<td>120</td>
<td>846</td>
</tr>
<tr>
<td>和平</td>
<td>528</td>
<td>255</td>
<td>200</td>
<td> </td>
</tr>
<tr>
<td>东师</td>
<td>520</td>
<td>127</td>
<td>100</td>
<td>1146</td>
</tr>
</tbody>
</table>
<p>实际统招人数,是我根据互联网信息,以及猜测(实际统招占比估计)估算出来,不是特别准,但是大概可以有个概念。</p>
<p>结论是,前4所学校,其实才对外招收$\color{red}{500人}$左右,前6所才$\color{red}{800人}$左右,前8所才1000人左右。</p>
<p>还记得前面的数据么?</p>
<table>
<tbody>
<tr>
<td>550-559</td>
<td>567</td>
<td>7%</td>
<td>705</td>
<td>8.7%</td>
</tr>
<tr>
<td>540-549</td>
<td>776</td>
<td>9.65%</td>
<td>1481</td>
<td>18.35%</td>
</tr>
</tbody>
</table>
<p>要进入前4所学校,要考到550分,700人, 刨去里面可能直升之类的200,差不多就是500人。</p>
<p>要进入前6所学校,要考到540分,1400人,刨去里面可能直升之类的300-400,差不多就是1000人。</p>
<p>所以,可以看出,540是必须的,$\color{red}{550分}$才能考到理想学校。</p>
<blockquote>
<p><strong>那么,怎样的成绩才能出线呢?</strong></p>
</blockquote>
<p>我们没有拿到儿子学校2019年的成绩,我们仅用2018年的中考成绩来分析:</p>
<pre><code>2019年133初中毕业生,560分及以上12人(9.02%),550分-559人29人(21.8%),540分-549分23人(17.3%),530分-539分24人(18.0%)。高分段人数明显增加,总分560分以上共12人,总分550分以上共41人。高分段(550分及以上)人数占比达到30.8%,540分以上人数47.3%。
</code></pre>
<p>2019年题目貌似偏难,姑且用这个分数来和2019年的比较,那就是550分+ 30%,540分+ 47%。</p>
<p>按照儿子这届240人计算,要到550分这个分数段,需要进入前$\color{red}{72名}$,考取4小强(八人清陈)希望就很大了。前110名,考取(工日)才有把握。如此看来,还是很有挑战的。</p>
<h3 id="2020年朝阳中考分析">2020年朝阳中考分析</h3>
<h4 id="重点高中招生人数变化">重点高中招生人数变化</h4>
<p><a href="https://mnews.tianyancha.com/ll_9msbv7p3rl.html">参考</a></p>
<table>
<tbody>
<tr>
<td>学校</td>
<td>合计</td>
<td>校额</td>
<td>特长</td>
<td>外区</td>
<td>国直</td>
<td>本区</td>
<td>扩招</td>
<td>排名</td>
<td>录分</td>
</tr>
<tr>
<td>八十</td>
<td>521</td>
<td>89</td>
<td>67</td>
<td>25</td>
<td>100</td>
<td>307</td>
<td>50</td>
<td>563</td>
<td>552</td>
</tr>
<tr>
<td>人朝</td>
<td>252</td>
<td>69</td>
<td>12</td>
<td>?</td>
<td>?</td>
<td>171</td>
<td>21</td>
<td>917</td>
<td>547</td>
</tr>
<tr>
<td>清朝</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td>1214</td>
<td>543</td>
</tr>
<tr>
<td>陈伦</td>
<td>423</td>
<td>78</td>
<td>50</td>
<td>10</td>
<td>45</td>
<td>222</td>
<td>50</td>
<td>1306</td>
<td>542</td>
</tr>
<tr>
<td>工附</td>
<td>263</td>
<td>61</td>
<td>25</td>
<td>10</td>
<td>40</td>
<td>198</td>
<td>?</td>
<td>1642</td>
<td>538</td>
</tr>
<tr>
<td>日坛</td>
<td>288</td>
<td>65</td>
<td>4</td>
<td>10</td>
<td>40</td>
<td>223</td>
<td>77</td>
<td>1972</td>
<td>534</td>
</tr>
<tr>
<td>和平</td>
<td>324</td>
<td>?</td>
<td>16</td>
<td>10</td>
<td>0</td>
<td>244</td>
<td>55</td>
<td>2420</td>
<td>528</td>
</tr>
<tr>
<td>东师</td>
<td>224</td>
<td>40</td>
<td>0</td>
<td>0</td>
<td>25</td>
<td>159</td>
<td>100</td>
<td>2900</td>
<td>520</td>
</tr>
</tbody>
</table>
<p><em>国直:国际、直升;录分:2019录取分数</em></p>
<p>合计,对外招生合计(清朝没有数据,按往年150人计算):</p>
<ul>
<li>四小强:850人</li>
<li>六小强:1263人</li>
<li>八小强:1666人</li>
</ul>
<p>据说是今年中考人数增加了,我<a href="http://edu.sina.com.cn/zhongkao/2019-02-28/doc-ihsxncvf8293611.shtml">查了一下</a>:</p>
<p>【2019年】</p>
<p>中考人数:<a href="https://toutiao.sanhao.com/news-detail-34417.html">参考</a></p>
<blockquote>
<p>2019年朝阳区中考报名8041人。应届生8004人,往届生37人;本市户籍考生5469人,非京籍考生2572人。</p>
</blockquote>
<p>招生:</p>
<blockquote>
<p>1.普通高中招生计划4207人,其中市级示范高中招生计划2045人,其他高中招生计划2162人。
2.职业高中3所,招生计划720人,其中提前招生216人,统一招生504人。
3.特殊学生招生计划</p>
</blockquote>
<p>这个信息里,可以看出,大概上普高的也只有一半的人,不过按照真实的参加中考人数大概是6500左右算的话(不知道剩下的孩子去哪里了?估计是外地户籍转走了),大概是70%的人上高中;如果算8小强,重点高中的人,才占35%。悲哉~</p>
<p>这里有一个<a href="https://news.koolearn.com/20190704/1181633.html">每一分,人数分布</a>的情况,挺有意思,放在这里供参考。可以看出高分段(540左右),基本上1分可以差90人。</p>
<p>【2020年】</p>
<p>北京市中考考生数大概是8.2万人:<a href="https://www.beidajiaoyu.org/4707.html">参考1</a>,<a href="http://www.zgkao.com/zk/201912/38242.html">参考2</a></p>
<blockquote>
<p>2020年中考英语听说考首考将在2019年12月21日进行,参加本次英语听说考的人数为8.2万人,比2019年多了近1.5万人。2020年中考人数英语听说考是北京中考的一部分,其成绩计入中考成绩,从英语听说考人数基本上能确定2020年北京中考人数也在8.2万人左右。</p>
</blockquote>
<p>朝阳大概是8180人。<a href="http://zhongkao.xdf.cn/202001/11026144.html">参考</a></p>
<p>这里有个<a href="http://www.zgkao.com/zk/202005/40155.html">2020界初三一模</a>,人数是6483人,比上面的8180少了1800人,感觉应该是很多外地孩子,已经转走了。</p>
<p>【2021年】</p>
<p>先分析一下人口情况:</p>
<p>2003出生人口59528(2018年中考),2004出生人口44859(2019年中考),2005出生人口52681(2020年中考),2006出生人口63498(2021年中考)。<a href="http://www.phic.org.cn/tjsj/wssjzy/jkzb/201304/t20130425_255006.html">参考</a>,人口是年年增啊,怪不得各学校都开始扩招了呢。</p>
<p>对照上述人口统计,看一下朝阳的情况:</p>
<p>2018朝阳中考人数7841/京籍4959,2019朝阳中考人数报名8041人/京籍5469,2020朝阳人数是8180人/估计6000京籍。</p>
<p>那么2021年呢,我推测,大概是9000人/6500京籍的孩子们。</p>
<h3 id="2021年朝阳中考分析">2021年朝阳中考分析</h3>
<p>【结论】</p>
<p>先说结论:这届学生一共7712人,全区是什么情况呢?575分以上,朝阳区共53人;570分以上共364人;560分以上共1385人;
如果要考上一类校(八十、人朝、陈伦、清朝),需要至少560分,也就是1385名以内,保险是563分,也就是大约1000名以内。</p>
<p>首先是2020年朝阳各重点高中的录取分数情况:</p>
<p>【参考】</p>
<ul>
<li><a href="http://www.jzb.com/bbs/thread-7800811-1-1.html">2020年朝阳区中招分数线</a></li>
<li><a href="http://zhongkao.xdf.cn/202007/11086154.html">2020北京朝阳中考各分数段人数统计</a></li>
</ul>
<table>
<tbody>
<tr>
<td>学校</td>
<td>排名</td>
<td>录分</td>
<td>备注</td>
</tr>
<tr>
<td>八十</td>
<td>762</td>
<td>566</td>
<td> </td>
</tr>
<tr>
<td>人朝</td>
<td>1071</td>
<td>563</td>
<td> </td>
</tr>
<tr>
<td>清朝</td>
<td>1071</td>
<td>563</td>
<td> </td>
</tr>
<tr>
<td>陈伦</td>
<td>1385</td>
<td>560</td>
<td> </td>
</tr>
<tr>
<td>工附</td>
<td>1991</td>
<td>554</td>
<td> </td>
</tr>
<tr>
<td>日坛</td>
<td>2520</td>
<td>548</td>
<td> </td>
</tr>
<tr>
<td>和平</td>
<td>3023</td>
<td>542</td>
<td> </td>
</tr>
<tr>
<td>东师</td>
<td>3348</td>
<td>538</td>
<td> </td>
</tr>
</tbody>
</table>
<p><em>注:很多学校都分好几个校区,成绩也有所不同,比如陈经纶就有另外一个校区为554,清朝另外一个小区561等,不做详细对比了,取最高分</em></p>
<p><a href="https://new.qq.com/omn/20200911/20200911A0FSLQ00.html">各分数段人数占比</a></p>
<p>(持续更新中…)</p>
<table>
<tbody>
<tr>
<td>学校</td>
<td>平均分</td>
<td>575+</td>
<td>570+</td>
<td>560+</td>
</tr>
<tr>
<td>八十</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>人大附朝阳</td>
<td>566</td>
<td> </td>
<td>42</td>
<td> </td>
</tr>
<tr>
<td>清朝</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>陈经纶中学教育集团</td>
<td> </td>
<td>8</td>
<td>59</td>
<td>255</td>
</tr>
<tr>
<td>陈经纶中学分校</td>
<td> </td>
<td>5</td>
<td>30</td>
<td>120</td>
</tr>
<tr>
<td>陈分实验</td>
<td>553</td>
<td>5</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>首都师范大学附属实验学校</td>
<td> </td>
<td>12</td>
<td> </td>
<td>44</td>
</tr>
<tr>
<td>景山学校朝阳分校</td>
<td>558</td>
<td>0</td>
<td>2</td>
<td>-</td>
</tr>
</tbody>
</table>
<p>【<a href="http://zkzx.txwluo.com/zk/202101/44085.html">2021年第一学期全区情况</a>】</p>
<p>总分720分,是按照9门排的,一共是9097人,相比于去年的<a href="http://zhongkao.xdf.cn/202007/11086154.html">7712</a>人,多了18%的考生,</p>
<table>
<tbody>
<tr>
<td>700以上</td>
<td>56</td>
</tr>
<tr>
<td>690</td>
<td>288</td>
</tr>
<tr>
<td>680</td>
<td>692</td>
</tr>
<tr>
<td>670</td>
<td>1238</td>
</tr>
<tr>
<td>660</td>
<td>1799</td>
</tr>
<tr>
<td>650</td>
<td>2414</td>
</tr>
</tbody>
</table>
<p>虽然说人数增加了,但是高中招生不会太增加,按照目前1800左右的排名,只能考入工大附,离陈经纶还是有不小的差距。</p>
<p>参考2020年的招生信息:</p>
<table>
<tbody>
<tr>
<td>学校</td>
<td>合计</td>
<td>校额</td>
<td>特长</td>
<td>外区</td>
<td>国直</td>
<td>本区</td>
<td>扩招</td>
<td>排名</td>
<td>录分</td>
<td>备注</td>
</tr>
<tr>
<td>陈伦</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td>1385</td>
<td>560</td>
<td> </td>
</tr>
<tr>
<td>工附</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td>1991</td>
<td>554</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="朝阳高中分析">朝阳高中分析</h2>
<p>名目上,朝阳只有一所市重点,就是老牌的八十,但是,这几年,朝阳发展其他优质高中,人朝附、清华附以及其他优质区重点的成绩也不差,我只能拿到2018的数据,我们看看最后一名的成绩,八十(555),人朝(552),清朝(547),陈经纶(547),工大附(541),日坛(539)。最大差16分。所以,生源差距不是特别大,特别是人朝,基本上和八十的生源是一样的了。</p>
<p>2018,朝阳540分+的人数有,1561人,占比19%;550分+的人数有979人,占比12.5%。
朝阳前4所(八十、人朝、陈经纶、清华附)招生990人,其中对外招生514人。最低分数是547分。
第二梯队(530分+)(工大附、日坛、和平街、对外经贸94)招生875人,其中对外招生436人。最低分数530分,其中工大附是541分。</p>
<h3 id="陈经纶">陈经纶</h3>
<p>2018年高中计划招生300人
-(1)统招157人,其中:本校直升班45人、体育特长10人、经纶科技人才班30人(朝阳20人含6人住宿、通州住宿5人、昌平住宿2人、怀柔住宿3人)、普通招生72人。
-(2)市级统筹23人
-(3)校额到校17人
-(4)名额分配103人</p>
<p>根据今年招生计划、前三年的分数线和学生成绩区排名来看,我们预计今年中考分数在550分以上,全区排位1000名以内报考我校,录取可能性较大。</p>
<h3 id="人朝">人朝</h3>
<p>人大附朝阳的中考情况:<a href="http://www.xschu.com/xiaoshengchu/07/28728.html">http://www.xschu.com/xiaoshengchu/07/28728.html</a></p>
<p>人朝自从首届中考以来,一年一个台阶,连续收获喜人成绩,2018年又创辉煌:朝阳区中考总分课分的前三名均为人朝学生(分别是577分、576分、575分);朝阳区中考高分段人数中人朝学生占近50%,全区570分以上(不含570分)共31人,人朝15人;全区570分人数共45人,人朝占22人;560分以上共有117人。总分平均分人朝547.2分,总分优秀率96.5%!总分及格率100%! 330人117人560+。</p>
<p>人大附中朝阳学校2018年中考毕业生去向如下,关注的2019小升初家长可查看。</p>
<p>人本:22人,四中:13人,十一:24人,人大附中、清华附中、北大附中、十一学校、首师大附中、101中学+北京四中、北京八中、北师大附属实验分校、三帆中学总数:65人,市级优质高中总数:约320人,初三毕业生总数:约330人。</p>
<h3 id="东北师大附中朝阳学校">东北师大附中朝阳学校</h3>
<p>该校12年开始招收第一批初一学生,是寄宿制学校。小班化教学,都是25-30人。2016中考成绩,它以总平均分527.3分(含体育)的优异成绩跻身朝阳区前10名。更喜人的是,学校发展迅速,连年进步明显,未来前景很好。2017学校参加中考人数为157人,550分以上16人,540-549分26人,530-539分28人,520-529分24人,500-519分37人,500分以上总计133人。总分优秀率91.2%,及格率100%。</p>
<h2 id="其他信息">其他信息</h2>
<p>新生儿:2005年 11.9万,2006年 12.9万,2012年小学入学人数14.17万人,这届学生数总计125938人,其中朝阳区 17871人。</p>
<p>朝阳初中数:54个学校,1498个班,每年级500个班,每个学校平均10个班</p>
<ul>
<li><a href="http://www.xschu.com/xiaoshengchu/31/21538.html">朝阳部分学校2017中高考成绩汇总</a></li>
<li><a href="http://www.xschu.com/xiaoshengchu/16/25882.html">2017-2018学年北京各区小学毕业生、在校学生数量</a></li>
<li><a href="http://www.xschu.com/xiaoshengchu/19/26006.html">2017-2018学年北京各区普通中学分区校数、班数</a></li>
<li><a href="http://www.xschu.com/xiaoshengchu/19/26008.html">2017-2018学年普通中学分区毕业生、在校学生数量</a></li>
<li><a href="http://www.eightedu.com/xiaoshengchu/13007.html">之前的2016年的小学生数量情况</a></li>
<li><a href="http://www.eightedu.com/xiaoshengchu/12999.html">由于看不到2015年的数据,只能看初中数据</a></li>
<li><a href="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c3c8627c-5d96-4d82-b0cd-ed92e0596382/untitled">可以看到2016年时刻</a>
-<a href="http://www.xschu.com/xiaoshengchu/31/21538.html">朝阳部分学校2017中高考成绩</a>
-<a href="http://www.xschu.com/xiaoshengchu/16/25882.html">2017-2018学年北京各区小学毕业生、在校学生数量</a>
-<a href="http://www.xschu.com/xiaoshengchu/19/26006.html">2017-2018学年北京各区普通中学分区校数、班数</a>
-<a href="https://mp.weixin.qq.com/s/3m8gE4D5aA43qUiJdDhDYw">2018 东城、西城、朝阳三区的中考数据</a>
-<a href="https://mp.weixin.qq.com/s/aMDicnUIcYk8neWxcZzKEQ">2019北京中考人数6.7万,附未来三年中考人数预测</a></li>
</ul>
<p>非京籍考生占中考总人数的20%左右,朝阳人数是1.2万人,这些孩子2016年五年级孩子的人数是是20710人,2018年他们上初一,数字是14319,走了5500左右的孩子,所以大概这届上初中的会有14000人上下,而要考上区里4所重点校,大概是需要排名在1200左右,所以在区里的排名在进到10%以内才可以,</p>
<p>如果考虑往年的招生人数、学生数量,还要考虑一下我儿所在校的生源情况和毕业生排名情况,大概可以推断出来,在一个什么名字次可以进到什么学校。</p>
<blockquote>
<p>2018年北京中考人数达到了历史最低值6.5万,非京籍考生占中考总人数的20%左右,朝阳2018年是7841(京籍4959,非京籍2882,借考2469)
借考:借考考生为外地户口的学生,最终需要回原籍升学上高中。</p>
</blockquote>
<h2 id="自我分析">自我分析</h2>
<p>参考我儿学校的历史数据,我们可以分析一下儿子的对应策略:</p>
<blockquote>
<p>2017学校参加中考人数为157人:550分以上16人,540-549分26人,530-539分28人,520-529分24人,500-519分37人,500分以上总计133人。总分优秀率91.2%,及格率100%。</p>
</blockquote>
<blockquote>
<p>2018年中考人数共133人:560分及以上12人(9.02%)550分-559人29人(21.8%)540分-549分23人(17.3%)530分-539分24人(18.0%)520分-529分18人(13.5%)500分-519分18人(13.5%)500分及以上共124人(93.2%)平均分:546.03分。</p>
</blockquote>
<p>如果要上6小强,成绩至少是540以上,最好是550以上,如果按照540分,540分以上的人数占比,(16+26)/157 = 34%,如果是550分,16/157=10%,这届儿子他们人数是240个人,所以要想考入6小强,至少要$\color{red}{80名}$,才有希望考入这些学校;但是如果要是保险的话,最好是能进入$\color{red}{25名}$。如果按照2018年的数据,要进入6小强,至少112名,保险是80名。</p>
<p>那么跟朝阳这几个学校的对比情况呢?</p>
<blockquote>
<p>八十中学2017本部中考成绩560分以上4人,550分以上9人,540分以上24人,530分以上39人。</p>
</blockquote>
<blockquote>
<p>2019人朝附:全区2019届毕业生中考成绩565分及以上学生共32人,该校15人,一校占比47%;全区560分及以上共138人,该校有56人,占比41%;全区前50名,该校有24人;全区前100名,该校有41人;555-559的学生55人;550-554的学生58人;550及以上的合计169人;548-549的学生20人</p>
</blockquote>
<blockquote>
<p>平均分:人朝分552,陈嘉铭东校区546,陈分实543,陈帝景543</p>
</blockquote>
<blockquote>
<p>北京八十中学枣营分校2017年中考喜报已经出炉了!总分平均分突破520分</p>
</blockquote>
<p>【2020界的情况分析】</p>
<p>2020界毕业成绩出来,貌似不太理想,我推测主要是疫情影响,最后一个学期,孩子们都在家复习,肯定会对他们有很大影响。</p>
<p>最终的成绩是:</p>
<p>574分以上2人,570分以上7人,560分以上37人,平均分542。这届孩子是6个班,具体人数不知道,按班数推测是180人左右。暂时先不考虑初三转走的外地户口的孩子们。</p>
<p>全区是什么情况呢?前面已经分析过了:</p>
<blockquote>
<p>这届学生一共7712人,全区是什么情况呢?575分以上,朝阳区共53人;570分以上共364人;560分以上共1385人;
如果要考上一类校(八十、人朝、陈伦、清朝),需要至少560分,也就是1385名以内,保险是563分,也就是大约1000名以内。</p>
</blockquote>
<p>如果按照这届人数,按照上届的成绩,再加上这届应该不会再赶上大范围在家学习了,所以,我们可以推测560分+的人数大致可以可以有50人。
这样的推测的话,只要可以进一考,是应该大概率可以考到四小强去的。即使不去四小强,留在本校的直升班,也是个不错的选择。</p>
<p>那么,说一说,这届的直升班:</p>
<p>直升班是整建制的,还是可以保持他们的这个班,这届直升30个孩子,平均分是556,相当于是工大附的普通班。
560分+的有14个孩子,占比一半;最高分567,最低分543;560-550分11人;550以下5人;</p>
<p>那560分以上的37人里,只有14个孩子留下了,也就是说37%的孩子留下了;剩下的23个孩子考取了其他学校,560的成绩至少陈经纶普通校这样的学校。</p>
<p>另外,这届直升了30个孩子,另外有34个孩子考入了本校,合计占比1/3。</p>
<p>好吧,我大致可以推测出这一界孩子的情况和归宿:</p>
<p><strong>大约会有50个孩子考取560分以上,其中这里面会有20个孩子左右进入直升班,另外30个孩子会考取其他学校;直升班目前看,可能只有一个班,其中另外10个孩子,来自于直升班560分以下的孩子,对她们来说是一个不错的归宿。目前两个直升班,约70个孩子,估计会有20个孩子考取到560分以下,他们最可能进入直升班。</strong></p>
<h2 id="关于教育">关于教育</h2>
<h3 id="优质视频">优质视频</h3>
<ul>
<li><a href="https://www.bilibili.com/video/av78766364">素质教育为何十年都没改革成?这才是高考制度的“内幕”</a></li>
</ul>
<h3 id="樊登读书会">樊登读书会</h3>
<p><a href="http://www.szdushu.com/Article/jiating/">樊登读书会-育儿书</a></p>
<pre><code>- 翻转式学习
- 非暴力沟通
- 关键对话
- 刻意联系
- 忙碌爸爸也能做好爸爸
- 你就是孩子最好的玩具
- 叛逆不是孩子的错
- 让孩子远离焦虑
- 如何培养孩子的社会能力
- 养育男孩
- 养育女孩
- 正面管教
- 自卑与超越
- 少有人走过的路
- 为未知而教,为未来而学
- 爸爸军团
- 反脆弱
- 心流
- 恰如其分的自尊
- 好妈妈胜过好老师
- 内向孩子的潜在优势
- 终身成长
- 如何说孩子才会听,如何听孩子才会说
</code></pre>
<p>樊登的这些书都很赞,有的听了好几遍,教育孩子不容易,要不断学习和总结。</p>
<p><a href="https://mp.weixin.qq.com/s/QLflb5zxRPwUOFG9Sl__sg">不要再做清单式的父母</a></p>
<p>之前就听过,很受益,管得越少越好,应该多去激发还自己的自主性。</p>
<p><a href="/education/2018/12/16/education-huhu">孩子教育隨想-虞超</a></p>
<p>虞超是个神人,怎么神,自行谷歌把,他的育儿内容确实很赞,他在文昭的节目里有一期<a href="https://www.youtube.com/watch?v=1l04n6TlN1g">分享</a>,可以听听</p>
宝贝的作文帖
2018-05-26T00:00:00+08:00
https://www.piginzoo.com/home/2018/05/26/son-article
<h2 id="宝贝的作文">宝贝的作文</h2>
<p>一篇篇,都是跟着诸葛学堂的陈思老师混出来的,必须崇拜,陈思老师,噢服了you~</p>
<p>必须帮儿子记录下来,记录努力的点滴,见证成长和进步!</p>
<h4 id="猎野猪">猎野猪</h4>
<pre><code>潮湿寒冷的清晨,我,李世宝来山上猎野猪,山中树木繁盛,动物多,微风拂过,芳草鲜美木浮动落英缤纷,生机盎然。为打猎隐蔽,走等到下风口,为把动物引来,李世宝吸几口大烟,吸引动物,之后我们便在棵巨大白桦树下等待,某未知动物前来。
时间挪移,以是一小时之后,忽听得李世宝叫我给猎枪上子弹,我忙照做,就在此时只听得草木的沙沙声,紧接着许多小动物都向这边跑,最后一阵巨大的野猪叫声朝这边移来,我顿时惊慌失措,急忙将猎枪上了弹。但刚要朝李世宝匆忙拦住我,对我小声所,射程不够远,在等会,我只好照办,乖乖的在原地等待,知道我忍不了,忽的站起身举起枪朝野猪开了一枪,随着巨大的后坐力一下子推到了我,将我推到在地下,我忙起身朝野猪看去,只见其毫发无损,我心里极慌,就在此时只见一只有力的大手将我向后拉去。
直到拉到一块巨石之后说:“你一会朝其面部开枪,如这畜生不死,我必开枪援助与你。”说罢便又拉着我出那巨大岩石,一出我便举枪瞄准野猪头部,用出汗手指扣动扳机,一声巨响后我连退数步,稳住重心,可只伤着野猪左眼,此举激怒了,朝这边冲来,我猛地向后跑去。
跑出只一米不到,便听得一声枪响,我蒙回头看去只见李世宝准确朝野猪的脸上打出了致命的一枪,那只先前生猛的野猪一头栽倒在了地下,立即便死于非命,于是遮阳我们杀死了一头巨大防弹的野猪,我这才敢细细欣赏这野猪,当然我非常无比的高兴,能杀死这只野猪,这样就有 一顿非常丰盛的晚餐。
</code></pre>
<h4 id="暴怒的语文老师">暴怒的语文老师</h4>
<pre><code>上课铃刚一打响就看见语文老师到这一股杀气走了进来,语文来世刚一进门就直接开始说我们了,我们在她眼中的各种问题一股脑的都说了出来,密集的话语,正如一挺不停发射子弹的机枪,而我的桌子变成了我唯一的一个掩体,我手中却,没有任何的武器,我全身发抖,身体僵硬,全身冷汗直冒。就在这时,一发从侧面射来,集中了毫无防备的我,可我惊奇的发现我并未有死掉,而且我还把那颗子弹接住了,突然子弹变成了一枚白色的粉笔头,我也渐渐的回到了现实当中。原来是老师在用粉笔头扔我的同桌,结果他躲开了,我却被击中了。
</code></pre>
<h4 id="嚼饼干的声音">嚼饼干的声音</h4>
<pre><code>嘎吱吱,嘎吱吱,从厨房传来了嚼饼干的声音,我闻声走了过去,我一眨眼,当我再睁开的时候,我依然走在一片金黄的森林里,地下也都铺满了金黄的落叶,我坐在上面发出了,嘎吱吱,嘎吱吱,的响声,阳光照射着这一切,我本想在多欣赏一会儿这个美景,但却被我的小表妹,拽到处厨房帮她够柜子上面的其他饼干了。
</code></pre>
<h4 id="狼叫">狼叫</h4>
<pre><code>我正在看一个关于狼的纪录片,听到了里面的狼叫,那一声声狼叫,都声音洪亮响彻云霄,自从拿第一声狼叫就不断有狼回应,我的脑海中渐渐浮现出来了古代打仗前主将训话的壮观场景,而下面的将士接二连三的回应,即刻准备好了要出征,正如我想的那样大军要开始出征了,唯一的不同是这出征不同的是,这不是狼要出征,而是在奶奶换台之后电视剧里面的人要出征了。
</code></pre>
<h4 id="鼻尖上的学校气息">鼻尖上的学校气息</h4>
<pre><code>学校是一个混杂着多种气味的地方,其中就包括了食物,笔墨,纸张,泥土的芬芳,和花的香气等等,而正是这些微不足道的气味构成了一种学校专有的独特的气味。
早晨我从微微寒冷的室外走近教学楼,走进楼道,一股浓浓的泥土味便随之扑面而来。土的气味里有夹杂着夹杂着许多气息,水的潮湿气息是最重的,同时也是最猛烈的,它和土的气味的气味一起进入到了鼻腔当中,但当它一进入到了鼻腔当中,就显出了它霸道的本性,水的潮湿拼命的向我的身体里涌动,如潮水一般汹涌,一直涌进了我的身体。
我径直穿过楼道走近了教室。在教室那小小的密闭空间里,飘散着一股浓郁的饭味,其中最先闻到的是来自,肥美多汁,而且冒着热气的刚刚出炉的猪肉三鲜包子的柔软鲜嫩的气息。那气息里仿佛还夹杂着,偷吃饼干同学嘴里发出的嘎吱吱声里飘散出来饼干的味道,让我的味蕾中有一种我将一块香甜松脆的饼干放入了我的嘴中,我细细咀嚼慢慢品尝香甜松脆的嚼饼干,并让饼干在我的味蕾中慢慢的扩散开来的感觉,但在这之外还夹杂着各种各样,五花八门的气味,但这些都少的可怜,也就不足挂齿了。
当下课来到了我的操场,就如同给我的鼻子打开了一扇新的大门,我走下教学楼的楼梯,数十种的不同花香瞬间都进入到了我鼻子的“视野”之内,当我每下一阶楼梯,我鼻子的“视野”之内就会更浓,而我眼前的景象也在渐渐的变化着,而最后我竟然到了一片美丽的花丛当中,芬芳的花香令我陶醉,于其中,花瓣上还沾着清晨晶莹剔透的露水,我用手指轻轻碰触,一股清凉意瞬间贯穿我的手指,而那粒露珠则从我的手指间落下,轻轻滴入了花下的一个小水谭,发出了叮咚一声,我猛然间回到的操场上。
学校里有着许多不一样的气息,而这些气息可能并不起眼,但正是这些不起眼的气息就成了一幅学校独有的美丽的图画。
</code></pre>
<h4 id="变形计">变形计</h4>
<pre><code>在明亮的屋子里,我写着作业,刚要拿出字典来查,突然从柜子上掉落下来了一个用纸作的破旧像素小人,但当我看到这个小人脸上带着皱皱巴巴一个京剧脸谱,我突然想起来这是学校PDC课上,用来制作定格动画用的。
我眼前突然一片漆黑,但当黑色退却之后,我回到了学校的PDC课上。
老师上次课说我们要做一个动画来宣传京剧,我们组就决定要拍定格动画,而我就负责定格动画的主人公的设计。我经过一晚上的制作,做出了一个纸作的像素小人,它有着一个大大的脑袋和小小的身体,我对我的这个作品满意极了,但为了更有有京剧的味道,我还给他戴上了一个京剧脸谱,就这样小人就成功的完成了它的变形计。
于是上课我就拿着凝结了我汗水的京剧小人来拍定格动画,一张,两张,三张…… 我们组一口气拍了两百多张,顺利地拍完了前半段定格动画。但当我课间到操场完玩完回班后,京剧小人竟然不见了,想到我之前的付出功亏一篑,我顿时心急如焚。
四处张望、神色慌张的我,不顾来往同学对我投来好奇的目光,和在我背后的窃窃私语,开始桌面、地面仔细地寻找。不放过任何一个不起眼的角落。我打开电脑桌,右手在电脑桌里胡乱的搜索着,突然感觉手指触摸到了粘粘的东西,抽回手指,发现自己的手指变黑了,天哪!不是小人,是润滑油。
我终于垃圾筐旁边的一个角落里找到了我的京剧小人,我左手捏住鼻子顶着垃圾筐的臭味,右手从角落中拿回了我的京剧小人,但现在他没了原来的意气风发、朝气磅礴,它现在已经破烂不堪,但我还是小心翼翼的把我的京剧小人用手捧走了。
经过我的不懈努力,再次让它回到了它原来的模样了。也就成功完成了后半段定格动画的拍摄。
突然我的手上一痛,我回到了现实中。原来是我的字典倒了,正好压到了我的手。我看着面前的小人,想到了它是如何从一张普普通通的纸,变成我们定格动画的重要功臣的,虽然经过了一番周折,但它成功了完成了从一张普通的白纸到威武京剧小人的变形。
</code></pre>
<h4 id="超市">超市</h4>
<h6 id="视--听--嗅--味--触">视 听 嗅 味 触</h6>
<pre><code>我走进了被灯照的灯火通明超市,无数的人影在我眼前飘动,犹如一条汹涌的大河在流动,声音嘈杂不堪,而这些嘈杂不堪的声音全部应声砸进了我的耳朵里,我向前走着突然一股淡淡的香气钻入到了我的鼻子里面,那气味香甜芬芳,还略带
一丝酸味,我寻着气味而去,走到了面包区我拿起一块试尝的面包来吃,面包刚一入后就如化了一样,把它那香甜可口美妙绝伦的味道扩散开了来,我毫不犹豫的拿起夹子夹了一块。拿夹子的时候一丝凉意从我的手心传来,我快速的夹完就去买其他的东西了。
</code></pre>
<h4 id="公交车上">公交车上</h4>
<h6 id="触--味--嗅--听--视">触 味 嗅 听 视</h6>
<pre><code>我上了公交车扶上了扶手,扶手奇凉无比,我用手捏上去感觉很硬。我一吸气,便有一股寒气进入到了我的身体里,先是进入到了我的嘴里然后,然后是嗓子,最后直沁我的肺腑,我不由得一哆嗦。渐渐的一股浓浓的包子味弥漫在整个车厢的空气之中,这队我还没吃饭的肚子来说是一个重大的考验,但好在是旁边一个人玩吃鸡游戏声音吸引了我的注意,我看见那个人手指在上点这着什么,不时发出游戏里的枪声。
</code></pre>
<h4 id="在班里">在班里</h4>
<h6 id="触--听--视--味--嗅">触 听 视 味 嗅</h6>
<pre><code>我突然感到有一股粘稠的物体在我的手上流动,我伸手一看竟发现是一团粘稠的鼻涕,我突然听到一个震耳欲聋的笑声从后方传来,我回头一看发现竟是我们班的鼻涕大王 弓长 立风 正朝着我大笑,鼻子上还挂着一丝鼻涕,显然是对自己的成果很满意,我气不打一出来擦完手上鼻涕就要冲上去,但突然闻到了一股淡淡的幽香,原来是宋amy来找我问作业来了,她伸手一拦,我这才罢手,放过了那个可恶的鼻涕大王 弓长 立风。
</code></pre>
<h4 id="从我的卧室想到的">从我的卧室想到的</h4>
<pre><code>宁静夜晚我正坐在我的卧室柔和的灯光下看着书,抬头向左右望去,我一抬眼就看到了我那张淡绿色的床,上面平整的铺着一张绘画着小熊卡通图案的床单,床头放着一个黄色的长方形枕头,床头边放的床头柜上放着我刚做好的几个乐高玩具,而在床头柜的前面就放着我的书柜,那只一个上面透明,而底下肉色的柜子,里面放着各种各样的书,在灯光的映照下反射出了耀眼的光芒,那些光芒五颜六色,亮的是那么的鲜嫩,那么的惹人喜爱,但我的目光开始回到了我的桌子上,我看着桌子愣起了神。
渐渐的家里的宁静消失,而取而代之的则是混乱嘈杂的噪音,我向四周望去,我那张熟悉的床,我的书柜,桌子全部都消失不见了,我坐在了一个温暖整齐,干净的小屋里。窗外射进来了几束金灿灿的阳光,那几束阳光在不断的挪移着,变换着姿态,而屋里的黑暗就像清晨的雾气被阳光所蒸融,而渐渐消散。像其他的地方看去,这是一个不规则的长方形屋子,里面的家具不是特别的多,从我所做的椅子向周围望去,在右边墙面上有两对成双的画作,一幅幅都很抽象,而且风格极像是梵高的画风,我向下看是一张黄色的双人床,平整干爽的床单,上放着两个柔软舒适的黄色枕头,下面铺着一条干净的红色毯子,整个床给人一种温馨舒适的感觉。床边放着两把椅子一都是黄色的。而在房间的一个角落里还放着一个木质的桌子。
从窗外射入的那几束阳光渐渐的变为了一束,而木制的桌子,也变成了我自己的桌子,窗外也变的十分宁静。我再次环顾了一下四周,这里是做自己的房间。
</code></pre>
<h4 id="灵感">灵感</h4>
<pre><code>早晨我躺在家里潮湿的褥子上,嘴里叼着一直旧羽毛笔,手里拿着诗稿,
准备要写诗,我想四周张望,环顾四周,三四方金黄色阳的光从窗户里直射了进来,他们好像长了脚似的,在阁楼里缓缓地移动,他渐渐地走到了我那唯一的洗脸盆边,那洗脸盆早已旧的生了一层锈,外面隐隐的它本来的棕黄颜色,就连里面的水也飘着一层淡淡的黄色锈迹。
我起身洗脸,一抬头就看见了旁边装水酒瓶,我面前的酒瓶里的水渐渐变成了红色,几乎要变成了一瓶诱人的红酒,“吧嗒”一滴水从伞上滑落打到了上书上,发出了声音,而我的目光也就随之聚焦到了我的书上。那堆书精装的书是我最大的财富,我翻开厚厚的封皮,我翻开书那一页页潮湿泛黄的纸上,上面写满了精神食粮,但书上的诗让我想到了我自己的那一摞摞诗,我走过去看到了我之前自暴自弃时烧掉的诗稿,当时因为后悔而留下来的那些只剩下一半的诗稿,但这些一半的诗稿依然是无法辨认,也就没用了,我就把这些没用的诗稿丢尽了壁炉里。
我有些冷,就把我那件老旧的皮衣拿了来,然后回到了床垫上继续我的创作,我抬头看到了雨伞的把,天渐渐的暗了下来,我仿佛是到了伊甸园里,景色美丽到处都铺满了黄金,我的眼前一条巨大的蟒蛇他正在和亚当和夏娃说,企图让他们,吃下善恶树上的禁果,最终亚当和夏娃还是受了骗,吃下了善恶树上的禁果,上帝大怒,将他们贬下了凡间,“吧嗒”一滴清晨的露水滴落到了我的头上,蟒蛇渐渐变成了雨伞把,我想到了,“我想到了!”我高兴地喊着。
</code></pre>
<h4 id="摩西幻想曲">摩西幻想曲</h4>
<pre><code>吃完饭我就慵懒往软绵绵沙发上一坐,开始听帕格尼尼的摩西幻想曲,那音乐逐渐进入到了我的脑海,我的眼前突然一片漆黑,然后感觉天旋地转,当这种感觉结束我缓慢的睁开眼睛,可是我看到了令我惊讶的景象。
一道阳光刺入到我的眼睛里,我努力的睁开了眼睛,我竟然发现我竟然已经穿越回了古埃,我站在被太阳直射的上沙子上。,摩西拿着一根木质的权杖,不一会儿我就看见了摩西,摩西拿着一根木质的权杖,那根权杖长而细,木头的那一道道纹理都清晰可见,上面一个粗大的头部,而这正是摩西手握的地方。他大步向这边做来。他是来要求埃及法老释放犹太人的。
不一会他走进到了法老的宫殿,进到了宫殿里先是明显感觉到很凉爽,然后环视四周宫殿里金砖碧瓦,灯火通明,摩西要求法老释放犹太人,可是法老说让他打败自己的巫师他才会同意。于是摩西和巫师就战在一处,巫师变出一条巨大的蟒蛇,那蟒蛇高有两个人那么高,宽也要两个大汉才能合抱,这一下子就吓住了在场的人。这是摩西也挥动魔杖变出了一条很小的蛇,但这条很小的蛇直接向大蛇冲了过去,冲的时候爆发出了金色的光芒,一击致命大蛇就应声倒地。可是法老反悔了,摩西就打开了红海让犹太人逃走了,在埃及士兵追过来的时候把红海关上了,淹死了追击的士兵。
渐渐的我的视线变得模糊起来后就到了,现实当中。
我听着听着突然进入到了一个剧场了,而前面正是帕格尼尼本人,我四周都是富商,和贵族,不过我忽然听到一声爆喝,这才缓过神来。
</code></pre>
<h4 id="品尝莫吉托">品尝莫吉托</h4>
<pre><code>我拿起一杯散发着淡淡寒气的莫吉托,从吸管里吸上来了一口清凉的莫吉托,顿时一股甘甜爽口的口感,传入到了我的味蕾,并渐渐地蔓延开来,但甜味里面还隐隐的散发淡淡的酸味,但这些酸味渐渐的占据了整个味蕾,从而让甘甜爽口的味道转变成了酸味,留在了舌根处,久久不能够消散。
我渐渐的感觉到,金黄的阳光洒在了我的后背上,而我抬起头,向前望去,看见了一个留着落花白腮胡的美国老人,在哪里动笔写这书,而他的脸上着洋溢着各色的表情,一会笑,一会又微微皱眉,思考片刻,就如同那莫吉托的味道一样,过了一会那位老人像是如释重负的一样合起了他正在写的那本书,向门外走去,我凑近这才看清楚那本书叫老人与海,我恍然大悟原来刚才发现那位老人竟然就是大名鼎鼎的海明威。
当我完全明白时我发现刚刚那个看见海明威的地方依然是不见了,我又回到了我的桌上,并意味深长的看着我手里这一杯莫吉托,我的心情久久不能平复。
</code></pre>
<h4 id="我用学到的数学知识解决的问题">我用学到的数学知识解决的问题</h4>
<pre><code>前段时间,我们家买了一个圆形的桌子,于是就要买桌垫,妈妈就然我来算下桌垫要买多大的,于是我就量了一下坐姿的半径,正好是一米,于是我就用: 1*1*3.14=3.14(平方米) 妈妈又问我,市场每平方米的桌垫买五元,但如果满十元就退两元,那要多收钱:3.14*5=15.7(元) 15.7-(2*2)=11.7(元),我很顺利的就算出来了,妈妈又说我们可以去看一场电影,但是妈妈只带了60元,所以我们就在中午的时候看了电影,因为这时候票最便宜,就这样我用我学到的数学知识解决了实际生活中的问题问题。
读后感
我认为这本书是一个很有趣的书,这让我可移动过有趣的实力来获得知识,这让我对知识性的书记有了新的认识
</code></pre>
<h4 id="夜晚读白居易的诗">夜晚读白居易的诗</h4>
<pre><code>冬夜里我悠闲的坐在家里,旁边杯子里的水,冒着热气,外面一轮明月,挂在天边。我拿着《唐诗三百首》,我起白居易的诗,品味着诗韵,渐渐地眼前一黑,只感觉天旋地转……
当我慢慢睁开眼睛,发现手里有,一杯乌梅汁,我环顾四周,发现前面,有一个房间,里面发出幽幽的灯光,我大吃一惊,“我在哪里?我在做什么?”。
我壮着胆子推开门,走了进去,发现一个面带忧虑的男人正襟危坐在榻上,望着窗外的鹅毛大雪,手里还拿着一杯酒。“书童,把乌梅汁给我吧”,于是我将那杯乌梅汁留下来,然后我出去了。刚走到门外,就听到白居易一声感叹:“啊!我白居易一心忠于朝廷,惩奸除恶,本想成就一番伟业,没想到却落得如此下场!”
白居易愤然起身,走到书桌旁,他拿起砚,往墨盒里磨起来,每一次都磨得很有节奏,渐渐地一股墨香就飘了出来。然后先生毅然提笔,一气呵成,在一张扬州纸上写下了著名的“问刘十九”这首诗,以此来表达他的忧伤之情。
我走进房间给先生倒水,刚刚那杯已经煮开了的酒已经冰凉,浊酒的上面漂着泛着白沫的一层,我想,先生此刻的心情,正如这杯已经凉的酒,是冰冷的。先生接过水,就把刚刚写完的那首诗放入了诗筒里。
就在这个时候,突然吧嗒一声,我吓了一跳。等我回过神来,发现自己已经回到了现实,原来是我的唐诗三百首掉落在地。刚才那杯冒着热气水,早已冰凉,原来我已经穿越到唐朝那么久了。我打开唐诗三百首,再次读起白居易的诗,终于明白先生那时候是多么凄凉和饱受煎熬, 我这才明白了白居易的不易。
</code></pre>
<h4 id="一个人走夜路">一个人走夜路</h4>
<pre><code>在一个漆黑的夜晚里我一个人走下了楼要去到奶奶家,在那冬夜里刺骨的寒风刮从我脸上划过,刮得我生疼,旁边的草丛里不时说出几声沙沙的摆动声,街道上漆黑一片,唯一的亮光就是像些想诗人的路灯发出的来幽暗的光亮诗集,小区的街道上人烟稀少,偶尔能看见一些行色匆匆的人正在赶路。
我一个人壮着胆子走出了楼,融入到了那漆黑幽暗的黑夜里,风刮在楼中间发出了呜呜的响声,我慢慢走着,不时紧张的快速回头看看有没有人在跟着我,但尽管我每次回头发现后面都是空空如也,我的内心中还是充满了恐惧,于是渐渐的我加快步伐快步向奶奶家走去。当我接近马路时各式各样,五颜六色的车在灯光的照耀下显得格外巨大,而这个不起眼的变化再次催生了我的恐惧,我在黑夜奔跑了起来,我不顾路人朝我投来迷茫和诧异的目光,径直向奶奶家快步奔去。
跑一会儿好到了路边,在路边我看见了繁华的街道,对面超市里面的餐厅闪烁着耀眼光芒,路边的小摊散发着烧烤的香气,在马路上川流不息,五颜六色的车辆,这些景色都让我安心了不少,我的,突然脚下没踩稳一个踉跄向旁边倒去,我好不容易站稳身子却发现自己身为一个由快递车辆组成的迷宫之中,街上的灯光都黯然失色,我只能看见那一轮明月闪烁着的点点灯光,四周都是快递车辆,我左冲右撞总算找到一条出路,可是我却发现这些是一条通往一个老旧小区,里面伸手不见五指,风吹到哪里就都奇迹般地消失了,但是我发现只有这一条路可以走,我非常紧张,但依然故作镇定的向里面走去。
里面地形错综复杂我壮着胆继续走着,但奇怪的是走着走着道路好像变得越来越熟悉当我在忙着一看发现自己已经到了奶奶小区旁边了我在回头看这才发现刚刚的那个老旧小区就是我每天上学的必经之路。
我快步走进了奶奶家所住的那栋楼。哈哈哈哈
</code></pre>
<h4 id="爱的味道">爱的味道</h4>
<pre><code>啊!伴随着一股浓郁的香气由老爸端出来了,一盘上面飘着袅袅蒸汽的蒜蓉扇贝,从厨房里拿了出来。
飘着袅袅蒸汽的蒜蓉扇贝,被放到了桌子上,那美味的香气渐渐流入到了我的鼻子里,又流到了胃里,顿时让我食欲大增。
我拿起扇贝壳,轻轻的倒入嘴中,顺滑的粉丝一下子划入了我的嘴中,带着海鲜的味道,我轻轻咽下那美味的粉条,而粉条则伴随着它那爽口,美味的口感一起进入到了我的肚子里面,而我的味蕾上则还留有粉条那爽口的浓郁海鲜味,久久不能消散,让我回味无穷。
我再次拿起了扇贝壳,见里面的扇贝肉放入到了我的嘴中,我细细品味,着慢慢咀嚼着,先是让我感受到了扇贝那鲜嫩多汁有富有弹性的美味肉质,紧接着是蒜末所散发着的香味,这两者结合在了一起,构成了美味的味觉,当扇贝肉渐渐进入了我的嗓子里,然后是胃,这一路上扇贝肉所所散发的诱惑一路经过了我的全身,让我顿时有了充足的满足感。而扇贝肉在我味蕾上留下的味道也在不停地变换着,先是浓郁的海鲜味,然后渐渐变成了由烤蒜末而产生的浓郁蒜香,中间还夹杂着,刚刚的海鲜味,令我吃完后流连忘返,回味无穷,并痴迷于其中,久久不能自拔。
我渐渐的感觉不到了来自冬天寒冷,而取而代之的竟是夏天的炎热,和不断出现的浪花声,我这才意识到我依然是到了一个海边,而我脚下传来因阳光长时间炙烤沙子而让沙子变热的感觉,我发现手里正握着,个条包好的巨大龙虾,和一串,新鲜出炉的,烤蒜,我先将巨大的龙虾放入嘴中,又将蒜放入嘴中。这是我突然回到了现实。
这次我品尝到了老爸做的美味蒜蓉扇贝。
</code></pre>
<h4 id="斯特拉特福德农场">斯特拉特福德农场</h4>
<p><img src="/images/20180526/sitela-farm.jpg" alt="" width="50%" /></p>
<pre><code>在一个阳光明媚,光线充足,空气清新的下午,一位爷爷带着两个孩子拿上了鱼杆来到了斯特拉特福德农场来钓鱼,年长一点孩子穿着一个白色的长袖外面套着一个灰色的衬衫,裤子是一条黄土色的西服裤子,脚上穿着一双小皮鞋。
他们坐到了一块枯死的山毛榉树干上,拿出鱼竿开始钓鱼,旁边的山毛榉树,枝条伸展,叶子仿佛被露水洗过一般,嫩绿嫩绿的,在阳光下闪耀着绿色的光芒。它锯齿形的树叶交错生长,形成了一个圆圆的大树冠,像把大伞一样,给他们遮住了阳光,使、他们可以尽情钓鱼,不一会远处飘来了几朵乌云,乌云时而分散时而聚拢飘逸不定,而远处的那个通体红色的马匹依然悠闲地吃着草,好像对乌云满不在乎的样子,不知何时有一条木质独木舟从远处飘来,那条独木舟老而旧,在水里晃晃悠悠的,好像一不留神就会掉下去,但上面的人却不以为然依然在上面高声谈笑,那个通体红色的马匹被他们大声的谈话吓得乱叫,河水和镜子一样,映照出了我和对岸上的山毛榉。
‘‘咚咚’’声引起了他们的注意原来是几条银色的小鱼上钩了,它们溅起的水花,引来了木质独木舟上面高声谈笑的人注意,一下子农场就安静了,只剩下橡树树叶哗啦啦的摆动声,和几条小鱼挣扎的声音,但这一切都在一声巨大的响声中结束了。原来年幼一点孩子从他的旁边拿起了一块石头,打到了鱼钩上让鱼跑了,而那年长一点孩子见势不妙急忙离开了枯死的树干,做到的旁边的一块石头上,还有几只被惊飞的紫翅椋腾空而起飞向天空,而这个美丽多彩瞬间被一个画家记录了下来。
突然一阵风吹过画意盎然,橡树的叶子被吹掉了,一位骑着马的绅士正好走过,天空的乌云渐渐变多向这边飘来,湖面水平如镜波光粼粼,不时有几条小鱼在水下面游动,木质独木舟上面原本高声谈笑的人们也下了船,在草地上享受那美好阳光,草地因为阳光照耀下便成了黄色,这一切的一切都是那么的和谐,美丽,自然,悠闲。
</code></pre>
<h4 id="龙">龙</h4>
<pre><code>在震耳欲聋的直升机爆炸声中,我和我的队友一起从直升机上跳了下去来,回头一看直升机,它正在被一条通体金黄的龙用火球攻击,队长突然叫了起来:“向降落伞顶部开枪”我没质疑队长的话,当即向伞顶开了一枪,下降速度加快一道电球从我和队长的头上擦过,但那个电球没有收到风的影响消失,而是直直的朝着剩下的队友飞去,在一道炫目的白光后,降落伞和他们的背包毫发无伤,而他们变成了灰白色的粉末飘散在空中,同时一股石膏味飘也散在空中。但当一条白龙飞过一切都消失了,它带走了所有的尘埃,只留下我和队长在空中呆呆的看着对方直到落地。
这一切的一切,都是因为那个愚蠢的命令:“据当地政府汇报他们已经确定那里只有一条龙了,这次你们的行动目标是活捉到那条龙!”再落到地面后,解开降落伞的时候我想。我从随身携带的背包里拿出了卫星定位系统,突然闻到了一种烧焦的味道,我拆开卫星定位系统外壳惊讶的发现,卫星定位系统都所有芯片都莫名其妙的被烧成了粉末状,队长只好从背包里拿出了纸质地图,经过我和队长的一番研究最终发现我们掉到了云南距离班卡乡(云南确有此地)51公里的森林里。
我们无奈只好踏上了去班卡乡的路上,一路上我们走得很快只用了3天就走到了离班卡乡10公里的地方,可就在那天早上我和队长走进了一片略带诡异的森林中。树叶踩在脚下,发出“咯吱咯吱”的声音,犹如野兽磨牙,又犹如踩在人骨上……,而且天气突然十分诡异的下起了暴风雪,在下午我和队长正走着突然发现一条白色的龙正朝我飞过来,我拼命地向前跑着,回头看到那条白色的龙又近了一些。“砰!砰!砰!砰!”我向后连打四枪,一股强烈的火药味扑鼻而来。子弹向白色的龙飞去,打到了一颗树上,打烂了一快石头,打到地上冒起土花,可惜没有打中那条龙,只见那只龙张开了它的嘴,吐出了个和3天之前一样的电球,朝我飞来,我看着那电球在我的视线里逐渐扩大,扩大,变亮我想我完了。 过了一会我微微睁开眼睛,看到无序排列的两排獠牙中间,一条滴着口水的舌头搭在我的脑袋前。随即,它从我的下巴自下往上划过,我的脸像是被沾了水的锉刀划过了一般,又粘又湿还生疼。那獠牙,极其靠近我的喉咙,马上就要切入我的脖子了,我望四周看了看才发现是队长救了我。
穿过了这片森林就到云南班卡乡,到了那里我们给总部通了电话,然后总部派直升机把我们接了。
</code></pre>
<h4 id="最佳损友">最佳损友</h4>
<pre><code>在一个寒冷的冬天我推开班门走进了温暖的教师里,然后坐到了座位上贪婪地吸着那温暖的空气,沐浴在那温暖的灯光下,但突然一个缓步向前的骨瘦如柴的黑色身影进入到了我水壶的反光面,那正是刘疯癫。
刘疯癫一直向前走,来到了我的桌前,他在我的桌子周围转来转去,他那黑色的身影在水壶弯曲的反光面上显得格外狰狞,“今天有升旗仪式,你居然没带红领巾,呵呵你完蛋了。”说完他就拖着他那黑色的身躯走了,只留下了他那尖锐的笑声。这如晴天霹雳一般让我直接崩溃头像桌子倒去,我的脑子里一片空白,因为我知道就算我是信息科代表间卫生委员也难逃此劫,可是唯一的方法就是花重金来从刘疯癫那里接一条红领巾,可是要知道他能看得上眼的几乎是15元以上的,我哪有带那么多钱呀!
其实他这个生意从三年级就有了,期间我们班的中队干部联合我们班的所有课代表,想向老师揭发,可是思前想后因为他妈是我们学校的老师,还是不好得罪的,最终只好放弃。
我想了十分多钟也没想出其他的办法,只好也能硬着头皮去找他换,刚一靠近他的座位就闻到一股食物的香气,他头都没抬就冷冰冰地问我“给什么?”我跟他说:“我跟查咱们班的卫生委员,说让他表扬你这样行吗?”他没有说话于是我又补了一句:“如果我没带咱们组可都要写检讨的,这其中也包括你呀!”“你这是在威胁我!”刘疯癫说“算是吧。”我又说,他抬起头来想了想,最终同意,但为了保险拿出笔来让我签了字,然后就把红领巾拿出来借给我了。
</code></pre>
<h4 id="一次足球比赛">一次足球比赛</h4>
<pre><code>还记得在五年级的时候有过一场惊心动魄的足球比赛,当时我们学校要组织足球比赛,所以就先让每班派出一支队伍,而我就在我们班的队伍里,而我在足球队里踢的是中场。
我们开局第一场是和四班踢的,当天阳光刺眼天气闷热,当我到了场上就突然有了一种莫名的恐惧感,不过好在我们队的队友一直在安慰我。
随着一声哨响比赛正式开始了,我们队的主帅黄远里奥率先发动了进攻,那一路丧失势如破竹,无人阻拦,可是没想到原来还弱不禁风的四班队,突然对我们发动了猛烈的攻击,我们的球瞬间就被对方抢走了,就这样局势一下子就翻了过来,我们被压制了过来,黄远里奥的脸色通红,奋力向那个抢到球的对方队员冲了过去,可这一切都是徒劳无用的对方球员已经冲到了禁区内,并一脚把球踢想了球门,几个后卫一起冲了过去,可是突然伴随着一声凄厉的惨叫,比赛暂时终止了,我们这才发现这一球不偏不正的提到了我们队守门员的肚子上,不过好在他是个胖子这才幸免于难,不过也下场检查了,就这样我们队的守门员换成了一个身材瘦小皮肤黝黑的小周,这是因为我们丢剩下的人里只有他练习过守门,好在没多长时竟中场哨响了,这让我们有时间可以讨论接下来的战术。
下半场开始我们队一直不占优势,但在最后五分钟的时候我们队找到了对方的一个破绽,当时我截下了一个球正在往前常带,可突然我发现左边没有人防,于是我决定放手一搏于是我就踢了出去,没想到最后还真进了,就这样我们赢得了这场比赛。
</code></pre>
<h4 id="思念">思念</h4>
<pre><code>一个宁静的夜晚在我写作业的时候,突然发出了一声巨大的响声,我回头一看就看见了掉在地上的玩具枪,那是一把绿色蓝色相间的玩具枪,那是回老家时太奶送给我的,突然时光倒退我好像一下子到了七年前,当时爸爸带我去老家我们坐在动车上,动车速度很快没过多长时间就到了我的老家,到了之后我和爸爸就到了太奶家,我的太奶年纪很大,眉毛,额头都是皱纹而且满头都是白发,但是太奶的精神和力气却特别好。
到了太奶家的第二天,太奶就带我去了哪里的集市,到了集市那里是人山人海,放眼望去整个一条街上都是黑漆漆的人头,太奶拉着我们也只能走在拥挤的人海里,我被挤的都喘不过气来不过还好边上的人还不是特别多,这样我才将将能站住了脚,但集市里有各种五花把门的东西,这里有卖日用品的,小食品的,蔬菜水果的,还有买玩具的,里面还有一些我没见过的东西。我对这些事务很好奇于是太奶就用她那充沛的精力带着我,我们边走边看都有卖什吗东西的,突然我看到了一把玩具小手枪,然后我就吵着要太奶卖买,太奶笑了笑最终同意给我买了那把玩具枪,拿到了那把玩具小手枪,拿到手枪之后我便欢天喜地的玩了起来,而太奶看到我玩的很高兴,便也欣慰地笑了,笑的时候额头的皱纹都还跟着动呢,就这样我得到了我的玩具小手枪。
但突然我的耳旁想起了一声爆喝:“赶紧写作业,写作业的时候别老玩玩具。”
我一下子从回忆中惊醒了过来。
</code></pre>
<h4 id="1930年的酒吧">1930年的酒吧</h4>
<pre><code>我和奎尼到了那家破烂不堪的酒吧,里面阴森森的,再加上丢酒吧老板那个高大的印第安人的恐惧,敲了门之后等了将近十分钟都没有来,我这才壮着胆子独开了拿扇吱呀呀的半拱形门。
里面一片漆黑只能借着一点从窗外射进来的阳光才能勉强看清路,就连往日了活泼的奎尼都已仍不吭,里面还夹杂了酒的味道,和潮湿的木头味,而且听说里面还死过人,想到这里我的全身都开始冒冷汗了。我模糊的看见在我的正前方放着一个用木头做的吧台,上面放着五颜六色的酒杯其中不少还散发着淡淡的酒味,在吧台后面的一个柜子上方了许多酒,上面有葡萄酒,鸡尾酒,朗姆酒,白酒,而且还有几瓶我要买的威士忌,在吧台的两边个放着一个长桌,屋顶上挂着几盏小灯,我又想了走了几步突然我的手碰到了什么东西,紧接着奎尼也叫了起来,我扭头一看突然看见了一双强有力的眼睛,再定睛一看,这才看出来是一个鹿头。
在此之后我又在酒吧了转了几圈,这才发现这里面跟本其实没有人,于是我的脑袋里突然萌生出了一个大胆的想法,那就是偷偷的拿一瓶威士忌走,可有一想这样有可能会被发现,但这样可以省下很多的钱,于是就这样道德在利益面前彻底的被打垮了。在决定以后就开始行动了,我对那个放威士忌的柜子进行了一番研究,突然发现柜子上有锁,于是我就用铁丝开始了撬锁的旅程,不一会就听咔嚓一声锁开,我拿到了里面的威士忌就想跑,可是那个扇吱呀呀的半拱形门突然渐渐地开了。
一个巨大的身影出现在门口我知道这是那个印第安人回来了我赶紧把酒放回到了柜子里面然后强装淡定地向门外走去。
</code></pre>
<h4 id="百变老师">百变老师</h4>
<pre><code>我有一位很神奇的钢琴张老师,他带着一副小小的眼镜,可是却有一个大大的眼睛里面闪烁着智慧的光芒,张老师的手指修长而且非常的灵活,身上总是穿着一件很正式的衣服和裤子,就连鞋子也都会穿一双黑色的皮鞋,皮鞋总是被擦得干干净净的甚至还能反光。
在上课的张老师时候总是很严厉,在他的课堂上课时,一定要专心听讲不能有半点走神,就算是平时的对话也是十分的精简,可令人百思不得其不解的是他在微信的对话里说话总是十分的风趣有意思。
又一次我上课迟到了,我正穿着粗气进来就突然发现了张老师那张冷酷的脸,就如深冬的寒风一般,刮着我的内心不出我所料张老师就十分严厉的批评了我,但糟糕的还在后面,我因为紧张一首曲子磕磕绊绊的没有弹好,张老师就更生气了,就听他深吸一口气,我感到大事不好就心头一紧,全身冒冷汗,可是出人意料的张老师既没有敲琴,也没有说我,而是呼出一口气继续帮我纠正问题。
在一天晚上我练琴突然遇到了问题就忙给张老师发微信请教,信息刚发出去不到半分钟我就收到了张老师的回复,信息上的文字再一次的把我逗乐了,但在笑的同时我也明白了接下来我要如何弹琴。
还有一次我来到教室上课的时候我迫不及待的要告诉张老师我的印记以一个跟高的分数考过了,这是当时我一件已以为傲的事情,但当我告诉了张老师,张老师并没有夸我而只是点点头表示表扬,但在晚上我看见张老师还特意发朋友圈来庆祝我音基高分考过呢!
而这就是张老师一个很严厉但又有时有些有趣的一位老师。
</code></pre>
<h4 id="春节的准备">春节的准备</h4>
<pre><code>马上要到春节了我们又开始了一年一度的大采购,我和爸爸妈妈到了我们门口的大超市来采购春节需要的东西。
超市门口挂着红色的门帘,脚下了几节楼梯上都铺上的被人们踩黑了的红色的地毯,沉重的门帘上贴上了大大的福字,两旁贴着新年的对联,一进门就看见春节促销活动几个醒目的大字,里面是黑漆漆一眼望不到边的人群,我们艰难的从人群中挤进超市,而且时不时的还被吵闹的人群踩上几脚,经过一番奋战我们好不容易找到了购物车,这才开始了购物。
首先我们兵分三路那我是负责采购饮料,所以我来到了二层的饮料区当我看到琳琅满目的饮料时我突然有一种抑制不住的兴奋,但当我正要伸手去拿的时候,我突然停住了,我突然不知道我要我该买哪些。而这是原本琳琅满目五颜六色的饮料,渐渐的被拉长被放大最终变成和我几乎一样大的人,他们每个人都争先恐后的要跳到我的购物车里,我尽可能的不让他们进到的车里,但还是漏了几个,不一会儿我的购物车里满了,于是我又要把他们拉出去,我一使劲就拉出来了一个人,有一使劲另一个人又出来了,但好景不长突然不管我如何拉,怎么其他的筐里的人就是不出来这样我突然对这饮料出现了极度的反感,这样喝一个也不想喝了,不知为什么这些饮料人一个接一个的义无反顾的从购物车走了出去。
突然背后一凉发现后面的冰柜又在运转了,一股寒意朝我袭来,嘈杂的人声再一次地进入了我的耳朵,我从容不迫的从柜子上拿了七八瓶饮料轻轻的放入了我的购物车中,倒此我的新年采购宣告结束。
</code></pre>
<h4 id="金星">金星</h4>
<pre><code>当我醒来发现我已经躺在金星地表面上了,表面很扎而且金星还表面上附着了一层的尘埃,那尘埃及其细小,并且还微微泛红,当我一起身地面上的灰尘被我激起,在原本空无一物的空中迅速扩散了起来,顿时尘埃如一个巨大的纱布将我完全所笼罩,我突然在我的脚下看到了一幅画,我再仔细一看,我在脚下竟然若隐若现的出现了一座城现代化的外星城市。
这里的楼房大多呈倒金字塔型,最下部的小针尖支撑起了整个一座楼房,这里的每一座都有着不同的颜色,楼顶的平台是巨大的停车场,上面停着各式各样的车,全部飞在空中的车,数量众多,如河流一般奔腾不息,令我大为吃惊。
城市里有几座楼房已经倒塌,街道混乱不堪,街上的行人,都是非常的矮小,他们的头长在了肚子上,眼睛长在了脸的两边,而鼻子却长在了头部,而更奇怪的是它们是用手走路脚拿东西,但皮肤成粉色,身上穿的东西是用一种特殊的布料做的裤子,走起路来会左右晃动。他们见到我显得十分慌张。
我的腿部突然一阵巨痒,我朝那里看去。几个外星人正从他们那巨大的裤子里拿出枪来打我。
过了一会从街道上是来了几辆水滴型的巨大车辆所有外星人都给那几辆车让路,我蹲下来仔细观察那几辆水滴,突然水滴从他的尖部射出了几的明亮的光束,紧接着我就感到了轻微的疼痛,这然我明白了这应该是他们的坦克。
我突然意识到这是一个科技高度发达的外星文明,单论科技是远超人类的,我知道我真正的冒险即将开始。
</code></pre>
<h4 id="冲破大雾的力量">冲破大雾的力量</h4>
<pre><code>曾经的我是一个容易放弃的人,也因此不敢尝试新的事物,就如每天活在大雾中间的一样,而一件事彻底的改变了我。
在一次偶遇,我有机会和同学一起去爬了凤凰岭,这对一个容易放弃的人来说可不是一件容易的事,但我还是同意要去了,我就和大家一样准备好了中午的饭和饮用水。第二天我如约来,到了凤凰岭的脚下,清新的空气直沁我的肺腑,可是我却得知了一个坏消息,那就是我最好的朋友病倒来不了,他最大的一个愿望就是让我在山顶上拍几张照片发给他,于是我就怀着这种心情和其他的五名同学一起开始了爬山。
在燥热的空气中,每吸一口气燥热的空气都会炙烤我的五脏六腑,就在这种环境里我开始了我的爬山之旅。我一步一步的走着,随着时间的推移我的体力渐渐的减少,而且燥热难耐,晶莹的汗珠在我的脸上缓慢地流向下巴,一路上留下了淡淡的水痕,我将其用纸擦掉,又会有新的涌上来。我忍住了劳累继续和大家一起往上爬,我的视线渐渐地开始模糊起来,眼前就像是有了一层迷雾一样。突然一个踉跄我险些摔倒,我再也坚持不住了,我真的想放弃了。
我只感觉天旋地转,而当这种感觉停止时我发现我竟然在一片巨大的沙漠里,巨大的太阳烘烤着我,我可得要命似乎只能等死了,但就在这时突然想到了我最好的朋友的一个小小的愿望,难道我连最好的朋友的一个小小的愿望都完不成吗?想到这里我顿时冲出了沙漠,而且似乎长久以来在我周围的大雾渐渐散去,我的斗志被点燃,我的视线也重新清晰了起来,我便继续向山顶进发。就这样,最后我成功地登上了山顶,体会到了古人的“会当凌绝顶,一览众山小”,并把山顶的美景通过几张照片发给我最好的朋友。
而正是这次偶然的机会让困扰我的大雾散去,让我从此勇于尝试,而且做一件事也更能坚持了。
</code></pre>
<h4 id="枫桥夜泊">枫桥夜泊</h4>
<pre><code>在一个的夜晚,那明亮又皎洁的月亮已经悄无声息的落下,一股风略带寒意的吹来轻抚着我的面颊,河面上一片寂静,悄无声息只有船的声音,我带着阴郁的心情来到了,这里避难乌鸦的啼叫让我想到了还在北方的亲人我的家人们还在战乱中没有逃出来,顿时我的心情低落思绪万千,这让我感到无比寒冷,当我看到跟我同船的一家子三世同堂就不由得很羡慕。
江边的枫树上的树叶随风摆动,还有一些被寒风吹落了下来,缓缓落到了平静的江面上,微风又将它们吹到了船边,我把手伸出窗外从水面上拿起了一片枫叶,枫叶上已经被冻上了一层霜,但当我突然看见枫树上有一根粗壮的枝条正在抽打着大树,而大树已经奄奄一息了,这令我一下子想到了危在旦夕的大唐王朝,但我相信但唐王朝总有一天会战胜安禄山,恢复大唐王朝的。
夜色里,我远远的看见了被灯火照亮,的姑苏城,我叫来服务员要来了一碗加热的米酒,然后边酒边想着要参军以武报国,就这样我决定等战乱一过就一笔从戎参军报国。时间把知不觉间已经到了午夜江上的寒意有更浓了几分,冻的我又穿上了几件衣服才止住寒冷,突然间远处的寒山寺,半夜的敲钟声传到了客船里,那一声声咚咚声,好像给我了很大的安慰我的心情顿时平复了起来。
</code></pre>
<h4 id="气球上的五分钟">气球上的五分钟</h4>
<pre><code>周围乌云密布,到处都能听见闷雷的响声,四周漆黑一片,而我们的脸也被风吹得没了知觉,整的人处在又饿又累的境况,而罗波特早已吓得哭了出来,而其他几个人也都是面如死灰一言不发的坐着,唯独博士还坚定地站着,操控着热气球。
我突然感觉热气球在下降,于是我们听从博士的命令,把热气球上的东西都扔了下去,而我也扔了很多东西,最后只剩下了一些钱,而这些钱本来也是要扔的,但最终还是因为吝惜财产,而在失了这样我们逃走了之后,这样到了地方还可以买东西给大家吃,想到这里我就决定不扔了。
这样一下气球一下子上升了许多,我们总算松了一口气,然而突然飞来了一只海鸟,让我突然想到我们的热气球为什吗会破洞,这还是归功于前天的一只海鸟,当时我们正在飞行的时候,突然来了一只小海鸥,我们出于怜悯之心给了它一个球形面包吃,但直至傻鸟在吃完面包后,认为热气球圆圆的也是面包就面包就咬了一口,所以我们的热气就开始漏气,这个时候,突然一声呐喊把我从回忆中惊醒了过来。
我们的热气球几乎要碰到海面上了,博士命令把身上的所有小部件都扔了,这让我像一了我身上还有很多钱,但我们几乎要追到海面了,在这生死攸关的时刻,我不容思考的直接补钱都扔了下去,但这只是杯水车薪的,热气球还是在往下坠。
在一声雷鸣中,博士下达了最后的一个命令:把吊篮扔了,扔了之后热气球往上飞了很高,而突然我们看到岛了,我们得救了,我们欢呼着!突然这何时一股大浪来袭,警把我们朝反方向刮去。
我觉得我们没有救了。
</code></pre>
<h4 id="我身边的一个人">我身边的一个人</h4>
<pre><code>一天我正在学校写作文,透过我那白色水壶的反光面看到胖子硕大身影,伴随着它的是一股着美食气味扑鼻而来。
胖子那硕大的身材在慢慢靠近而且还在逐渐变大变圆,他还不时发出那窃喜的笑声,我这才看清他那本身就不怎么大的眼睛,都已经笑成了一条线在跑过来的时候脸上的肉上下摆动,我心想准时有什么好事情,他不一会儿就跑到了我的身边,我这才突然发现他嘴里多了两个鹌鹑蛋,他那胖硕的脸上突然放松下来享受着嘴里的美食,他的大嘴不是的张开露出他那整齐的白牙来发出赞叹声。
我看到这样我的火就不打一处来,他的脸在我的水壶上面被拉长,被缩小,最终变成了一个鹌鹑蛋,一个会说话还会动的鹌鹑蛋,在我面前晃动令我坐立不安,更无法写作文,我终于忍无可忍于是喊了出来,他这才收敛了许多,他走的时候给我留下了一个诡异的笑容,突然他朝我回头从他那大嘴里散发出了一股巨大的气味,这是他的眼睛突然变大,不一会归于了平静。
我的内心接近崩溃,我已经无法写作了,我上前把这个肉球搬走,途中他那圆滚滚的肚子还左右晃动,嘴上的肥肉也随之晃动,有时候突然就推不动了这才发现前面有个椅子我的内心再一次的崩溃了我直接把他往旁边退就不管了。
这就是我们班里的胖子。
</code></pre>
<h4 id="去农庄">去农庄</h4>
<pre><code>我坐在一辆去往农庄的马车上,一路上充满了闷热的气息,封闭的马车里就如一个巨大的蒸炉一般闷热无比,我在马车里疯狂的出着汗,但这些汗水干了以后,就将我的皮肤和衣服紧紧的粘在了一起,皮肤和布料偶尔的摩擦让我感觉到非常的痒,变成了一件完美的紧身衣。我深深吸了一口空气,干燥的空气顺着我的嗓子进入到了我的肺中,让我顿时敢到了口渴之意,我拿出了水壶将里面将柔软细腻的水灌入到了口中,清凉的水顿时让我那原本已经要干裂的嗓子,在水的清凉之意中,瞬间神奇的治愈了。
在闷热的车厢当中我实在是无法忍受这样的闷热,就让车夫停车让我先下来凉快一会,我快步走下了马车,准备感受新鲜凉爽的空气,车门刚一打开凉爽的空气就涌了进来,我大口的呼吸着新鲜凉爽的空气,微风轻抚着我粘糊糊的身体。我走回车上用手抓着马车那粗糙的栏杆,像上面走去,踏着坚硬的梯子走到了上面,这是车内依然非常凉爽,但我的脸上却是油腻腻的,但我没有顾及这些就又开始了我的路程。
一路微风拂过,格外凉爽,和最开始的情景形成了鲜明的对比,我渐渐地有了一种漂浮的感觉,到我一眨眼就飞到了天空上,飞快的飞行着,但美好的时光总是要结束的,不一会我就到了农庄,也就下了马车。
</code></pre>
<h4 id="魔法师的实验">魔法师的实验</h4>
<pre><code>这是一节魔法实验课,上课的钟声敲响后我快速的跑回了宿舍,一把拽起了我的助手那只肥胖无比还每小时都会重生一次的愚笨凤凰诶米瑞,一把拽出他那肥硕且温暖的身躯,将他拉出那温暖同时充满着满是灰尘的鸟窝,向教室奔去。我一只手扶着冰冷地扶手,而另一只手则托着一个随时可能燃烧的“定时燃烧弹”,我一边拖着它飞奔它以便疯狂地流着汗,他那洪流般的热热的汗浇灌了这一路上面所有的盆栽,原样本枯萎的盆栽浇的生机盎然。
我一路急跑着,总算在关门的那一刹那滑进了教室,而就在这时诶米瑞一下子被我甩到了斯内普老师的头正上方就燃烧了起来开始了重生,一大团燃烧过的灰尘正飘落到斯内普的头上,就在这时这就听到有一个人小声念了一句咒语:“Locomotor dust !”移走了那一大团燃烧过的灰尘救了我一命,这急忙接住了诶米瑞,有干紧走到了座位上,这我才放下心来,但突然我感到手上火辣辣的很疼,这才发现我的手破了,急忙掏出了我随身带的一瓶麻瓜的液体创口贴抹上,这才总算是没事了。
这节课我们是做的是失忆水,配方是五杰子(计量单位:1杰子=5.2克)的澳大利亚白眼火龙的蛋壳,八杰子的火龙眼泪,一杰子的干毛毛虫粉,三杰子的大象小脑脑浆。然后老师发下来了一份简易说明书,我和诶米瑞就开始了制作,我先将澳大利亚白眼火龙的蛋壳,五杰子的火龙眼泪和三杰子的大象小脑脑浆放入了锅中熬制,又让诶米瑞放入一杰子的干毛毛虫粉,和剩下的三杰子的火龙眼泪,但突然锅里的东西开始剧烈的翻腾,一个巨大的气泡鼓了起来,热气直喷我的脸,突然间我发现我的面前仿佛有一只巨大的蜘蛛,他那滚烫的鼻息正喷想我的脸,它那个巨大的眼睛正虎视眈眈的盯着我,就在这时一声巨大的喊叫惊醒了我,原来是斯内普教授挽回了这一切,她怒气冲冲的说:“都是你那只智障凤凰搞得鬼,它的汗滴到锅里面引发了魔法反应! ”但还好总算是没出事,我这样想。
</code></pre>
<h4 id="我是这样学会骑车的">我是这样学会骑车的</h4>
<pre><code>我悠闲的打开阳台门的时候,看见那里正放着我那辆被时间所侵蚀的小自行车在那里放着,上面覆上了一层厚厚的尘土,这让我想到了五年前的那个炎热夏天。
当时妈妈给我买了一辆自行车说让我学骑自行车。自行车刚一来,我就迫不及待的要练车。我向上一跃坐上了车座,正当我得意洋洋的时候身子突然向身体的左边失去平衡,猛的晃了一下,差一点就摔下来,又试了一次在再次重重的摔了下来,第三次我终于找到了要领,一定要让车子动起来这样才能骑上去,就这样我成功的骑了上去。我开始是在客厅里骑过去然后骑回来在骑得过程中我享受那种在风中翱翔的感觉,风从我的脸前流过,身体逐渐感觉变得轻盈,景色也随之变得多了起来。我开始不局限于室内的这样一定环境,我想像鸟儿想玩自由冲出牢笼,在那蔚蓝的天空中自由的翱翔,我随即决定我要下楼骑车。我带着我的自行车风驰电掣地奔了下楼。
“咚咚。”的水声让我猛然惊醒,我看着眼前这辆历经风霜的小自行车闻到了淡淡的铁锈味,的车身上却突然有一块坑,我这才想起了后面的事情。
我骑上自行车在小区里骑了起来,那种在风中翱翔的感觉再次让我感受到了,周围的景物都向后退去,风再次从我的脸前流过,清新的空气夹杂着泥土的芬芳灌入到了我的鼻中,在我的耳边响起呼啸的风声,身体逐渐感觉变得更加轻盈,仿佛真的飞了一般,景色也随之变得多了起来,这一切都是那么的舒服爽快,令人心旷神怡。
我骑到一个平台上然后猛地向前加速从坡上冲了下去,我正体会着着前所未有的快感,便突然间意识到好景不长突然我想起来坡底下就是游乐场了,我想我完蛋了,但好在我离路的尽头末端还有一段距离,。想到这里我猛地捏闸,我但车子是却没有停下来,而是继续带着我往前冲冲了下去,眼前的花花草草飞快地向我身后奔去而且越冲越快,我心一横,就把车骑进了草丛,车骑到了草坪上,后面的土地被翻开,泥土在空中翻飞,然后慢慢地落下,周围悄无声息,我的车速渐渐的变慢了,我开始后悔刚刚我那个错误的决定,但为时已晚这个决定救了我一命,经过草坪的减速总算是停了下来,但还是被撞出了一个坑。
一股香味钻进了我的鼻子,原来是妈妈做好饭了。
</code></pre>
<h4 id="摩西幻想曲-1">摩西幻想曲</h4>
<pre><code>吃完饭我就慵懒往软绵绵沙发上一坐,开始听帕格尼尼的摩西幻想曲,那音乐逐渐进入到了我的脑海,我的眼前突然一片漆黑,然后感觉天旋地转,当这种感觉结束我缓慢的睁开眼睛,可是我看到了令我惊讶的景象。
一道阳光刺入到我的眼睛里,我努力的睁开了眼睛,我竟然发现我竟然已经穿越回了古埃,我站在被太阳直射的上沙子上。,摩西拿着一根木质的权杖,不一会儿我就看见了摩西,摩西拿着一根木质的权杖,那根权杖长而细,木头的那一道道纹理都清晰可见,上面一个粗大的头部,而这正是摩西手握的地方。他大步向这边做来。他是来要求埃及法老释放犹太人的。
不一会他走进到了法老的宫殿,进到了宫殿里先是明显感觉到很凉爽,然后环视四周宫殿里金砖碧瓦,灯火通明,摩西要求法老释放犹太人,可是法老说让他打败自己的巫师他才会同意。于是摩西和巫师就战在一处,巫师变出一条巨大的蟒蛇,那蟒蛇高有两个人那么高,宽也要两个大汉才能合抱,这一下子就吓住了在场的人。这是摩西也挥动魔杖变出了一条很小的蛇,但这条很小的蛇直接向大蛇冲了过去,冲的时候爆发出了金色的光芒,一击致命大蛇就应声倒地。可是法老反悔了,摩西就打开了红海让犹太人逃走了,在埃及士兵追过来的时候把红海关上了,淹死了追击的士兵。
渐渐的我的视线变得模糊起来后就到了,现实当中。
我听着听着突然进入到了一个剧场了,而前面正是帕格尼尼本人,我四周都是富商,和贵族,不过我忽然听到一声爆喝,这才缓过神来。
</code></pre>
如何高效学习
2018-05-26T00:00:00+08:00
https://www.piginzoo.com/education/2018/05/26/how-to-learn
<h1 id="学习学习再学习">学习学习再学习</h1>
<p>当初创立此贴的目的是为儿子,也为自己的终生学习,把一些资料和总结汇集起来。但是随着儿子的年岁增加,发现孩子们的学习负担越来越重,无力吐槽这个社会和教育制度,所以更觉学习方法、习惯、认知规律的深入掌握更有必要。自己也是终身学习者,这2年来的学习进步也让自己感觉到学习的重要性和方法的重要性。</p>
<p>同时,身边越来越多的朋友、同学,也常常和我探讨学习的方法,也为孩子的学习进步苦恼不已。因此,愈发感觉有必要更新一下此篇博客,把自己的收集的更多的学习方法和自己的一些关于学习的收获和认知更系统的总结出来,以便更好地指导自己、儿子和分享给更多的朋友。</p>
<p>虽然学习没有捷径,但是有很多技巧和方法的,了解它们、掌握它们并运用它们,让学习能事半功倍,帮助人生有更多的选择机会。</p>
<p>勤奋十分重要,这个不用说,但是,同样努力的孩子,为何有的成绩就是好,这里面肯定是有原因的,我觉得,可能就出在方法上,我相信,除了极少的高智商的人外,大部分的差距还是在方法上。因此,很有必要总结一下网上可以找到的文章、课程、和资源,以帮助孩子更好的更高效地学习。</p>
<h2 id="认知规律">认知规律</h2>
<h3 id="遗忘的规律">遗忘的规律</h3>
<p>艾宾诺斯遗忘曲线,是德国心理学家艾宾浩斯发现的记忆规律,虽然不用像<a href="https://www.zhihu.com/question/284458888">知乎上说的</a>这么变态,但是也揭示一个道理,就是我们要勤复习。</p>
<p><img src="/images/20201108/1604803487428.jpg" alt="" class="myimg" /></p>
<p>20分钟就忘掉了40%,1天以后就忘记了65%,天哪!</p>
<p>所以,对抗残酷的遗忘,最好的办法就是高频复习,高频回顾。</p>
<h3 id="工作记忆和长久记忆">工作记忆和长久记忆</h3>
<p>人类的记忆模块分成两类:工作记忆和长期记忆:</p>
<p><img src="/images/20201108/1604828466775.jpg" alt="" class="myimg" /></p>
<p>工作记忆就是你正在思考的事情,它有限,记不住太多,他可类比成当前的CPU和内存,它们都是当前正在狂计算的东西。工作记忆是暂时的、活跃的思维空间,它关注当下的事情,它从环境中获取的信息,它还可以从长期记忆中调取的过去的经验,它是思考的核心步骤。</p>
<p>而长期记忆,就像是个大仓库,一旦东西存储到里面就不容易被遗忘了。虽然是个狠牛逼的巨大仓库,但是它是需要被动触发的,需要大脑把长期记忆导入到工作记忆,它的内容才能发挥作用。</p>
<p><img src="/images/20201108/1604830731660.jpg" alt="" class="myimg" /></p>
<p>与此同时,工作记忆的内容要经过不断地重复,才能逐渐进入到长久记忆成为长期可以保存的记忆。</p>
<p>工作记忆需要集中思想,所以不能给他太多干扰,所以在专心学习的时候,要避免“干扰”和“任务切换”。</p>
<p>在学习的过程中,仅仅理解不够,还要反复练习,这样才可以逐渐将工作记忆的内容升级到长久记忆,才能建立比较深层次的大脑神经元。</p>
<p>在真正思考过程中,专家们往往具备非常多的长久记忆,直接调入到工作记忆,而不需要再运算和思考了。那些专业技能的运用,实际上是关闭思考的意识,不用再刻意去理解很多概念和逻辑思考,而是直接使用其结论,这样做,可以让思维流高速运转,不中断思维流,增加知识运用或者决策的能力。</p>
<h4 id="显性隐性记忆">显性、隐性记忆</h4>
<p>长久记忆又可以分成“显性”(explicit )和“隐性”(implicit) 记忆两大类。</p>
<p>显性记忆就是能用语言表达的,又分成 “陈述型记忆”和 “事件记忆”。陈述型记忆的内容主要是知识,比如你背诵的唐诗。事件记忆是经历,比如回忆前天你早饭吃的是什么。</p>
<p>隐性记忆则主要是“程序记忆(procedural memory)”,比如学会骑车、滑雪、跳舞这些连续动作,以及学会的顺口溜、外语 。隐性记忆一旦形成可以稳定终生,所以你在小时候学会骑车,即使日后多年不骑车,但一接触自行车还是马上能骑。</p>
<h4 id="学习新知识">学习新知识</h4>
<p>学习新东西,建立大脑链接之前,是有点困难和让人不舒服的,但是一旦掌握,你就会充满成就感,这个给我们的启示是,有时候你不喜欢做某事,是因为你还没有掌握它,所以要明白这个过程,最初的几步是困难的,所以耐心的享受这个过程,等待突破的结果到来。</p>
<p>将知识升级到长期记忆,建立对知识的深层理解,建立大脑神经元的深层链接,方法便是,精心的刻意练习。</p>
<h4 id="记忆和睡眠">记忆和睡眠</h4>
<p>睡眠对记忆非常重要!</p>
<p>白天里,脑内很多部分(比如海马体)就记满了,这个时候,就需要通过睡眠,擦除大部分无用的记忆而巩固有用的部分。夜间的睡眠中,海马体会不断地和大脑皮层共同活动,回放白天的记忆并记住其中一部分。睡眠的时候,记忆会从海马体传递到大脑皮质,大脑皮质是长期记忆的大本营,睡眠可以帮助建立新的突触连接,并且清空海马体,为新的学习腾出空间。</p>
<p>睡眠有几个循环,每个循环约90分钟,先是浅睡(术语叫睡眠一期和二期),几十分钟后进入深睡(三期)最后是梦境(快速动眼期),如此循环几次。这几个周期里,“三期睡眠”正是巩固记忆的“黄金睡眠”期。良好睡眠的重要性超过一切体育和脑力锻炼。</p>
<p>另外,运动可以促进新生神经元生长,运动时产生BDNF(脑源性神经营养因子)的化学物质,使你的新的神经元强壮健康,更容易产生链接,BDNF是海马体神经生长的肥料。</p>
<h4 id="爱上学习">爱上学习</h4>
<p>这部分来自于<a href="https://book.douban.com/subject/4864832/">《为什么学生不喜欢上学?》</a>。</p>
<p>学生们为什么不喜欢学习?</p>
<p>有以下原因:</p>
<ul>
<li>思考是缓慢的,任何思考过程都不是一蹴而就的,是需要一个过程,是消耗能量的。</li>
<li>思考是需要思想高度集中的、费力的,需要综合当前的信息,还要调动长久记忆中的内容。</li>
<li>思考是不可靠的,不是每次都可以获得答案,有时候往往是想半天也不一定可以获得答案,让孩子们充满挫败感。</li>
</ul>
<p>那么问题来了,如何让孩子们喜欢上学习?</p>
<p>1、要帮孩子积累各科的背景知识,解决任何问题,看到的是最后的答案,看不到的是答案背后的、冰山下的知识,你看到解决问题的方法,背后藏着无数隐含知识和背景知识,所以平时帮孩子多积累这些看似无用的基础知识。</p>
<p>2、刻意练习,可以把工作记忆转移到长久记忆中,防止遗忘,提高记忆的准确性和完整性;刻意练习还可以促进知识的迁移,把一种学习的方法,迁移到另外一种学习上。</p>
<h4 id="学习的算法">学习的算法</h4>
<p><img src="/images/20201108/1604830933812.jpg" alt="" class="myimg33" /></p>
<p>这张图是来自<a href="https://www.bilibili.com/video/BV1rE411s7Gt">核聚的掌握学习本质</a>,是一个不错的高效学习的训练营。</p>
<p>这张图的核心理念就是:<strong>回环回环回环!</strong></p>
<p>它描述的就是,知道如何学会→回顾、不忘、类推→学下一个,然后重复这个过程。这是一个闭环,周而复始。</p>
<p>这里核心就是,你要真的学会,而且,你不会忘掉前面的内容,怎么能学会呢?就是刻意练习。怎么能不忘呢?就是高频复习、回测。</p>
<p><strong>学会</strong>,要是真的学会,不是假装学会。所以,听懂了一个内容,不算是真的会了。如果是真的会了,是可以用这个知识去解决问题,去解题,去给别人讲让别人也明白,要真的有方法,可以验证自己会了,没有被验证的知识不算会!</p>
<p><strong>复习</strong>,要主动去回忆,“主动”是一种自发的回忆,没事就去回忆回忆老师讲了什么,想想自己看了什么。回忆的周期要尽量短,尽量勤,没事就去回忆一下,下了课就回忆,看完一页就回忆,看完笔记就回忆,时时刻刻、高频回忆,对抗容易遗忘的记忆。</p>
<h4 id="英语应用">英语应用</h4>
<p>让我们看看林语堂是如何学英语的:</p>
<blockquote>
<p>林语堂:学习英语<strong>唯一</strong>的正轨,不出<strong>仿效</strong>与熟诵;仿效即整句的仿效,熟诵则仿效之后必<strong>回环</strong>练习;需要把整个句子完整模仿,包括其中的语法语调。</p>
</blockquote>
<p>这里面就体现了“会”和“回环”,会是可以的模仿,你能模仿出来就说明你会了;然后就是不听的回环回环。</p>
<p>所以,我们可以制定一个好的英语学习方法:</p>
<ul>
<li>找优秀的文章背诵,不枯燥,经典的</li>
<li>拆成句子,复杂句变简单句</li>
<li>循环往复,循序渐进,背诵,默写</li>
<li>理解文章含义</li>
<li>背诵之前所有的</li>
<li>遇到卡顿错漏,重复背默</li>
<li>内化成身体的一部分,随时调用</li>
</ul>
<p>这里要说明的是,不是背完一篇,就不管了,去背诵下一篇,而是背诵下一遍的时候,要从第一篇开始背诵,一直被送到当前的这篇文章。背到滚瓜烂熟,让这些句式完全融入自己的血液,自己可以脱口而出,这样下来,英语可以提高很快。</p>
<h3 id="学习工具箱">学习工具箱</h3>
<h4 id="刻意练习">刻意练习</h4>
<p>1、
2、
3、走出舒适区,高阶练习</p>
<h4 id="曼昆学习法">曼昆学习法</h4>
<p>详细讲讲曼昆学习法</p>
<h3 id="孩子们的学习">孩子们的学习</h3>
<p>对孩子们来说,学习是具体的,枯燥的,却又是非常重要的。她们有时候想学习,但是无奈,这个教育制度的首要任务不是学习知识,而是筛选人,就像<a href="https://www.bilibili.com/video/BV1Uz4y1C7dY?t=513">颠覆三观的衡中</a>里说的那样,“我努力不是为了让自己更好,而是让对手更难”,这种想法真的是太可怕了,但是有些人还是可以不迷失在这种内卷中,就像<a href="https://www.himself65.com/quit-qhnu/">Himself65</a>的故事一样,努力在追寻自己梦想。无论中考、高考多么残酷,你都应该明白,那只是路上遇到的一些荆棘,你要做的是,努力的穿过去,在学习之路上不断的完善自己,追逐自己的好奇心,终身成长和学习,让自己可以不断地离彼岸更近。</p>
<p>但是,还是有很多具体的学习方法,是可以让孩子们立等可取,迅速习得,用到学习当中,会事半功倍,立刻提升学习效率和成绩的,为什么不把一些好的方法应用到这种应试过程中,使他们获得信心,度过这片荆棘。</p>
<h4 id="目标">目标</h4>
<p>首先一定要目标,明确的目标。只有目标明确了,才有行动的方向感和动力。要定一个相对有些难度,但是又是通过努力可以达到的目标,比如,要考进年级前30名,至少进入XXX高中。目标越早越清晰的定出来,越容易让孩子树立一个明确的愿景,并且有了实实在在的压力,学习上自然而然会产生压力。</p>
<h4 id="差距">差距</h4>
<p>有了目标,才可以确定目标的差距,所以,你要知道可以考入XXX高中的学生,都是什么样的水平,比如考入的总分最低是多少?各科最低分是多少?相对在区里的排名是多少?对应到当前孩子的初中里,对应的本校的排名大概是多少?这些信息,越多越好,越明确越好,这样,孩子对达到这个目标不再是一个朦胧的感觉,而是实实在在的可以衡量的指标。他可以明白,自己只要达到多少名,追上谁谁谁,就可以有机会考入自己理想的高中,他的动力也会因此更强。</p>
<p>计划
明确了目标和差距,你就需要指定一个来弥补和跨越这个差距的计划了。你要知道,初三学校会安排超多的练习和考试,留给你自己的时间并不很多。所以,你要更珍惜你自己的时间,你自己的时间规划,已经复习的策略就变得非常重要了。这个策略要逐层细化,比如你要明确还有多久中考(多少天、周、月),你中间还有多少次大考机会(检验进步的最好方法)。在指定计划前,要对自己做体检。</p>
<h4 id="体检">体检</h4>
<p>你要对你自己每科情况都了如指掌,哪门强哪门弱,每门里面的知识点哪里掌握的好哪里掌握的差,说白了,自己要给自己的学习状况做一次彻底的体检,只有你自己最了解自己,所以要对自己的情况非常彻底的摸底。如何摸底呢?就是要一章章的去过书和教材,找出自己的周、月考试卷,分析自己的大考试卷,然后很明确的写下来,自己在哪部分掌握的不好,可以考虑使用好中差或者更细的5分制来对每一个知识点进行评判。所以,这里又涉及到对知识点的系统性的掌握,这个时候要对所有科目的所有知识点都要全部整体性印在脑子里,如果这点做不到,则需要先来补全这个知识图谱。当然,你还会继续学一些新课,所以,这些新课也逐渐纳入到这个知识体系图谱里。</p>
<h4 id="掌握新知识">掌握新知识</h4>
<p>对于新知识,一定要掌握扎实,不能再花时间去回头去复习了。要一次性扎实掌握,给复习留下宝贵的时间给过去的知识。</p>
<p>这就要求,必须真实地提高上课的效率,如何提高?就是要课前一定要预习,预习的目的是培养自己的自学能力,然后对新知识有一个全面的审视,然后就是要就自己学习理解不了的问题,标注下来,提出问题,你知道,能提出问题和解决问题同样重要!带着问题,去听老师第二天的课,会效果非常好。预习时候,要把书看细看透,有的公式自己推导,有的知识点自己整理出来,然后看课后习题,看自己是否可以回答和验算,然后把问题整理出来,准备带到第二天的课堂上去问老师。</p>
<p>到了上课的时候,一定不能走神、说话!上课一定不能走神、说话!上课一定不能走神、说话!要全程保持投入状态,最好的办法就是接下茬,别人回答的时候自己也低声回答,跟老师进行眼神的互动。但是不要和同学讨论,容易错过老师的讲解。如果遇到老师讲的内容自己没反应上来或者没听懂,不要去想不要过度思考,而是迅速用简短的文字记录下来,不纠结,然后下课一定要臭不要脸的去问老师,当堂问题当堂一定要当天扫清。</p>
<p>笔记建议采用康奈尔笔记法,这个不细说,前面提到了。课上只需要用符号化、简短的字和公式来记录笔记就好,自己可以看懂就好,主要目的是,尽量减少因为记笔记而分神错过老师的关键讲解。而康奈尔笔记法是要求你课下去花时间去抽取和整理的,当天就要完成。</p>
<p>到了写作业环节,一定抽出10分钟来把今天的内容复习一遍,怎么复习?首先就是上面提到的整理自己的笔记,在康奈尔笔记本的左侧写下要点,盖住右侧复述,最终写下总结。然后,要对今天学习的内容,完善自己的真是体系框架,应该有一种全部知识的大图,把今天学习的部分,也补充到上面去,你可以回顾一下所有的知识,在这张大脑图上,你可以迅速建立起来刚刚学习的知识和已有知识的关联。</p>
<p>同时,需要细化当天的知识点,把知识点在白纸、笔记本上抄一遍,也可以,能背诵的就背诵下来,比如定理、公理,把上课老师的例题都自己重新做一遍,如果太浪费时间,自己取舍,但是最重要的是脑图或知识点整理,整理的时候,要注意和前面知识的关联,比如可以在知识点旁边,写上备注“此方法用到了第xx章的xxx公理”。</p>
<p>复习完了,终于可以写作业了。一定要认真写作业,尽量不要和别人商量,尽量快,尽量做到不回去翻书(之前复习就是这个目的),做完后,要想一想这道题到底是对应到了什么知识点,做完后,可以去看看或者问问同学或者去和同学讨论一下他们的其他做法,用这种办法可以让自己拓展思路。这里有个记忆规律:复习的目的就是避免遗忘,从short term memory逐渐转移到long term memory。</p>
<h4 id="反思自我">反思自我</h4>
<p>你要很诚恳的面对自己,真诚的剖析自己,知道自己在哪些方面是有问题的,坦诚面对真实的自己,不是要打击自己,而是认识到自己的不足,才能改进,否则,自我的反思变得非常重要。你要虚心,对自己不会的东西,不要碍于颜面去掩饰,暴露出来,主动的暴露出来,去问老师,去问学霸同学,不耻下问。</p>
<p>学霸,之所以成绩好,是因为他们都是“主动式学习”,也就是带着问题学。他们很喜欢思考,为什么要这样、为什么要那样。就是在不断地思考探索中,你才会了解事情的本质。有好奇心,刨根问底!</p>
<h3 id="刻意练习-1">刻意练习</h3>
<p>要理解刻意练习的做法,让自己的学习变成一场刻意练习的过程。我大概说说刻意练习的一些基本概念。首先是动机要清晰和明确,这个我觉得对你来说不是问题。
然后,就是要让自己的知识体系化,系统化,模式化。啥意思?就是你要在这个领域,深入进去,把整个知识体系穿起来,把解决问题的方法的模式总结出来,也就是种种的“套路”,对应到你的学习中,就是一个个解题的套路。所以,说白了,就是要对知识点超熟,要对解题的套路超熟,这样,来一道题,就基本上是生理和潜意识层面的反应,而不需要太多的思考时间,即使是难题,也可以分解成多个套路和模式,组合出来就好。当然做到这点,确实非常难,所以要刻意练习,怎么刻意练习?就需要你在平时做题的时候,要培养自己对题目的理解,搞清楚这套题里面藏着哪些知识点?一眼就看透它,看透出题老师的伎俩,看透他想考你什么,这样潜意识里,这个知识点可能出题方法和解题套路就都自然而然的涌现出来了,你就开始把这些套路组合起来,去尝试作用到这道题上,就像小偷撬锁一样,组合的工具越多,锁越容易在一瞬间吧嗒一声解开。做完每道题,都要尽量想想有没有别的思路,最好是能看看别人如何做的,当和自己不一样的时候,虚心求教别人的思路,然后自己反思自己为什么没有想到这个思路,是什么原因?知识掌握的不够,还是自己从来没有见识过这个“套路”,从而不断的去完善自己的套路库。这种不断总结,不断学习别人的套路,甚至去模仿做一遍,内化成自己的套路。很多时候,别人的思路听懂了,不代表你会了,听别人讲10遍,不如自己做一遍,做完后,再给别人的不会的人再讲一遍,将一个知识真正内化成自己的知识。</p>
<p>如果有错题,要非常高兴、兴奋,因为这个是自己找到问题的机会,如果是马虎,是什么原因导致的马虎,妈妈说过没有无缘无故的马虎,是字迹?是审题?是基本四则计算?还是自己记串了公式……,还是那句话,要反思,凡是厉害的人,都是爱反思的人。这种反思,其实就是刻意练习里面提到的元认知,是在不断地“反思”自己思考的方法和方式是否有问题。如果真的发现是知识点的漏洞,或者是典型的套路自己没有见识过,要定要记录到自己的错题本上,自己还要在错题本上写上“元认知”,就是自己为何错的原因和一些感受,这个本什么时候用呢?当自己不知道该复习啥的时候,就拿出错题本,再做一遍。还有就是考试前,快速的过一遍错题本,对自己的之前的错误都有一个回顾,以免在考试的时候重犯,而且也是对一些薄弱知识点的再回顾。其实,在你把错题抄到错题本的过程中,你其实已经把这些错题印到了心里。</p>
<p>网摘:</p>
<blockquote>
<p>只要题刷得多,思路理得清,思路熟悉了,那题刷得是嗖嗖地!找思路,学思路,模仿思路,练习思路,掌握思路。为啥思路那么重要?因为题型是固定的。做题要找突破点,要学会贪婪地搜集资料和题型。</p>
</blockquote>
<h4 id="时间管理">时间管理</h4>
<p>学校会布置大量的学习任务,留给自己的时间不多。对于学校布置的学习任务,按时或尽早完成,这里都涉及到一个重要的问题,就是时间的管理。
抓紧时间啥的,虽然你自己也明白,虽然爸妈也老提醒你,但是,你对时间流逝是无感的,即使是我们,也常常不知不觉就挥霍了光阴而不自知。所以,第一点就是,要对自己的时间有个自知,如何自知?一个好方法,就是记录下来,诚实的记录下来,比如以半小时或者更细的颗粒度,来记录自己做了什么,在家可以,在学校没有手表,可以通过一节课一节课的节奏来记录。记录的时候,一定要对自己诚实,发呆就是发呆,刷公众号就是刷公众号,写作业了就是写作业了,如实的记录。然后记录下来几天或者1-2周后(当然,这需要坚持),然后做下来,把这些时间统计一下,看看自己到底“挥霍”掉多少时间,按照分类,比如正常休息、走神、不自觉的娱乐、被别人感受、认真学习等等,统计出来,然后再坐下来一起看看,究竟这些时间里,多少是被充分利用,多少是被浪费掉了。当然,这个事情,只需要初期做就好,不用经常做,因为有了对时间的感知后,就懂的珍惜时间了。
时间节省出来了,就要高效的利用这些时间,千万不要做一个低水平勤奋的人,什么意思?就是要在学习的时候,保持专注力,进入流状态,大脑进入全速运转状态,而不是听到什么东西就被干扰,别人一句话就被干扰。
如何做到高效呢?一个就是要避免干扰,比如手机静音,听上轻音乐,手机远离卧室;在学校的话,尽量跟周边的同学打好招呼,学习期间不要搭理自己,对别人的举动和声音克制住不要关注,保持自己的入定的状态。还有就是要符合生理规律,比如学习时间不宜过长,建议按照学校的40-45分钟的节奏,到一段时间,就休息一下,出去喝水或者刷刷手机,到时间就立刻回来,绝不妥协迟疑,然后重复这个节奏,让自己的生理适应这个节奏。晚上睡觉也按时上床,绝对不开夜车,保持一个充足的睡眠状态,保持好心情,让情绪平和。</p>
<h4 id="极致心态">极致心态</h4>
<h4 id="善待自己">善待自己</h4>
<p>这个过程一定会有反复,学习就是反人性,但是学习却又是不断进步的手段,所以,你在这个过程中一定会经历焦虑、烦躁、失落,然后,度过这段焦虑期,产生自发约束自己的动力,然后会自我约束,不断努力,取得一些成绩。但是,随之而来的又是懈怠,然后又被打击,然后又循环往复的重复这个过程,但是,不知不觉,你会发现,自己就是在这个过程中不断成长、进步了。</p>
<p>所以,你一定要理解自己、善待自己,焦虑失落时候不放弃自己;洋洋得意的时候提醒自己不可放松。不断地给自己鼓劲,不断地严格要求自己,做到自律。而且,也不要惧怕任何对手,你最大的对手是自己,盯住自己,不断地超越自己,所以在成绩不好的时候,多反思,而无需和别人比较。和别人比较,反而容易干扰自己的心智,我不能靠别人的比较和眼光来塑造自己,而是要靠自己的不断努力和拓宽的认知来塑造自己。而反思,则是冷静可观地剖析自己,找到自己的不足,接受自己,找到原因,然后持续改进就好,这个过程避免情绪化,而是让把他变成一个解决问题的过程:找问题、解决问题、验证效果。</p>
<p>孟子很早就总结过:“必先苦其心志,劳其筋骨,行必乱其所为,然后动心忍性,增益其所不能”,真的是这样的一个过程,你逐渐会体会越来越深。</p>
<h3 id="更高维的思考">更高维的思考</h3>
<p>讲讲哲学和观念系统</p>
<p>https://www.bilibili.com/video/BV1z4411L7rL?t=561</p>
<h2 id="资源汇集">资源汇集</h2>
<h3 id="图书资源">图书资源</h3>
<p><a href="https://www.zhihu.com/pub/book/119556686">《如何学习》</a></p>
<p><a href="https://book.douban.com/subject/26761696/">《精进》</a></p>
<p><a href="https://book.douban.com/subject/25749845/">《把时间当作朋友》</a></p>
<p><a href="https://book.douban.com/subject/26649850/">《深度学习的艺术》</a></p>
<p><a href="https://book.douban.com/subject/26895993/">《刻意联系》</a></p>
<p><a href="https://book.douban.com/subject/1013208/">《如何阅读一本书》</a></p>
<p><a href="https://book.douban.com/subject/25783654/">《如何高效学习》</a></p>
<p><a href="https://read.douban.com/ebook/386670">《如何高效学习》</a></p>
<p><a href="https://book.douban.com/subject/2345548/">《学习之道》</a></p>
<p><a href="https://book.douban.com/subject/4864832/">《为什么学生不喜欢上学?》</a></p>
<h3 id="视频资源">视频资源</h3>
<ul>
<li>
<p><a href="http://vancexu.github.io/2015/01/08/learning-how-to-learn-part-one.html">Learning How to Learn</a>,著名的的Dr. Barbara Oakley 教授,著有课程同名书籍:《Learning How to Learn ——How to Succeed in School Without Spending All Your Time Studying; A Guide for Kids and Teens》 2018年8月出版,她也是《学习之道》一书的作者。
她小学到高中数理成绩一路垫底,因此热爱文学。职场生活,不得不学习大量新鲜知识,甚至是头疼的数学知识。放下工作,回到学校,竟然学成了工程学博士,后留任教授。在MOOC、Coursera上开创最受欢迎的学习课“learning how to learn”,数十万人报名。<a href="https://www.bilibili.com/video/BV1NW411C7d8?p=1">B站的链接</a>,有中文字幕,不过比较老。<a href="https://study.163.com/course/courseMain.htm?courseId=1005319012">网易公开课上的链接</a>,</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/BV1rE411s7Gt">掌握学习本质</a>,核聚的高效学习的训练营。</p>
</li>
<li>
<p>洪兰教授在混沌大学讲授的<a href="https://www.bilibili.com/video/BV1CK4y1t72p?p=1">认知心理学</a>,洪兰教授是台湾中央大学认知神经科学研究所所长,她讲述了很多关于脑科学和认知的知识,了解这些知识,也有利于我们更好地让我们的学习方法更符合认知规律。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/BV1cA411Y73k">学会如何学习</a>,B站的axtoliu UP主的分享,言简意赅的总结了Barbara Oakley 教授的学习之道内容。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av37126621">如何提高学习效率?</a></p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av88910392">费曼学习法</a>:学完,去讲给别人。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av77295377">费曼的超级阅读法</a>:从开始读直到能读下去</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/av70998909">为什么费曼学习法被称为终极学习法</a>:一个搞神经网络的大神,他的学习观系列超赞</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/BV1fC4y1W767">从学渣到博士:一个学习方法改变我的命运,自创2.0版费曼学习法</a>,他除了讲授费曼的要点外,还提到了费曼学习法在英语学习中的要点。</p>
</li>
<li>
<p><a href="https://space.bilibili.com/434346657/channel/detail?cid=113847">北大学霸讲高效学习</a>,请了18位北京大学的在读学霸们,分享他们的高考和学习经验。</p>
</li>
<li>
<p><a href="https://www.bilibili.com/video/BV1164y1T7VD/">如何成为一个很厉害的人?</a>,大致和第一性原理的概念差不多,克服惯性思维,转换思维模式。</p>
</li>
</ul>
<p>顺道感叹一下:B站是个大宝库,是00后的聚集地,里面不乏对学习有兴趣和思考和反思的人,也充满了大神,摘录一些他们的分享,提神醒脑。
特别是其中的各种方法和技巧,都不是奇淫技巧,而是经过科学研究、无数人证明过的方法,值得深入学习。但是,还是要强调,学习还是一个需要努力的事情,是对抗懒惰和欲望的一个反人性的活动,但是收获是无尽的满足和充实。</p>
<h3 id="文章资源">文章资源</h3>
<p><a href="https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzU1Nzc2ODkzMg==&scene=1&album_id=1509256450517286914&count=3&uin=&key=&devicetype=iMac+MacBookPro11%2C2+OSX+OSX+10.10.5+build(14F27)&version=12031f10&lang=zh_CN&nettype=WIFI&ascene=0&fontScale=100&winzoom=1.000000">二牛爸关于成绩专题的分享</a>,一个不错的关注孩子学习的公众号,这个是他讲述自己孩子学习成绩专题的系列文章。</p>
<p><a href="https://www.zhihu.com/question/58772932/answer/162494781">有没有一种让人很爽的学习方法?</a></p>
<p><a href="https://www.zhihu.com/question/28358499/answer/43002343">如何长时间高效学习?</a></p>
<p><a href="https://www.zhihu.com/question/30178891/answer/100118940">有哪些让人欲罢不能的学习方法?</a></p>
<p><a href="https://www.zhihu.com/question/35103080/answer/397870811">超强的学习能力是怎样练就的?</a></p>
<p><a href="http://mindhacks.cn/topics/learning-method/">刘未鹏学习方法专栏</a></p>
<p><a href="https://www.zhihu.com/question/25696371">怎么理解和训练元认知能力?</a></p>
<p><a href="https://www.zhihu.com/question/19591121">如何建立自己的知识体系?</a></p>
<p><a href="https://mp.weixin.qq.com/s/qiu_K3j6DqwVh69hmlX6mg">学习是一场惊心动魄的游戏</a></p>
<p><a href="https://tieba.baidu.com/p/5336031998">小升初过渡期你必须注意的事</a></p>
<h3 id="知乎话题">知乎话题</h3>
<p><a href="https://www.zhihu.com/topic/19580586/top-answers">高效学习</a></p>
<p><a href="https://www.zhihu.com/topic/19566266/top-answers">学习方法</a></p>
<p><a href="https://www.zhihu.com/topic/19674923/top-answers">初中数学</a></p>
<p><a href="https://www.zhihu.com/question/35103080/answer/450023561">超强的学习能力是怎样练就的?</a></p>
SVM
2018-04-16T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/04/16/svm
<h1 id="svm理解">SVM理解</h1>
<h2 id="废话几句">废话几句</h2>
<p>这小文,就是自己看的,写给1、2年后的自己,想起SVM的时候,常回来看看,迅速回忆起来,不至于再去搜一堆文章看来看去的。所以,给自己写,就不图行文流畅和思路清晰严谨,主要是讲人话。把大牛们不愿意讲的,羞于说的一些超基础的,或者,看似废话,但是对我自己而言,就是绕不过去的弯,或者那些总结性、本质性的话,写下来,让自己迅速可以还原当初觉得自己看的明明白白的思路。</p>
<h2 id="先说说点到直线的距离">先说说点到直线的距离</h2>
<p>写一下方程:</p>
<p>$ax+by+c=0$ ,我们一般的理解是$y=kx+b$,两种形式一样的,实际上是 $y=\frac{a}{b}x+\frac{c}{b}$。
一个点$(x_0,y_0)$到直线的距离D是怎样的呢?
是D=$\frac{|ax_0+by_0+c|}{\sqrt{a^2+b^2}}$,这个其实一般人都不讲,假设默认知道,其实,推导还挺复杂的,网上有<a href="https://wenku.baidu.com/view/7f68a89cad02de80d4d840eb.html">点到直线距离的7种推导</a>,茴香豆的7种写法,呵呵,不过感兴趣的同学可以去研究一下。</p>
<p>我们再来看看$ax+by+c=0$ , 我们可以写成$\left[a , b \right] * \left[ \begin{matrix} x \ y \end{matrix} \right] + c = 0$的样子,然后我们把$\left[ \begin{matrix} x \ y \end{matrix} \right]$看做是$X$,把$\left[a , b \right]$看做是$w$,把$c看做是b$我们可以把直线方程写成,$wX+b=0$的形式了。(注意,把c看做b是,现在是个新b了,就是原来的c,非要这么混乱的原因是为了满足一般书里的wx+b=0的形式)</p>
<blockquote>
<p>胡思乱想(可忽略)我脑袋里一致有个问题,不是ax+by+c=0么?那么$ax_0+by_0+c$不就也是0?!晕了吧,前者是指直线上的点,但是这个$x_0,y_0$可不是在直线上的。</p>
</blockquote>
<p>那么,我们在去看距离公式
D=$\frac{|ax_0+by_0+c|}{\sqrt{a^2+b^2}}$ = $\frac{|wX+b|}{|w|}$</p>
<p>其中w实际上就是直线$ax_0+by_0+c=0$的法向量,即(a,b),这个是初中知识,忘记的需要回去<a href="https://www.zybang.com/question/c0ab0f6d9c86eef2b18cc186a51e368f.html">复习一下</a>,法向量是一个垂直与直线的向量,他有无数个,只要垂直,都是直线的法向量。</p>
<p>$b$是个标量哈,$w$是向量,$x$是向量,别晕哈。</p>
<p>根据点到直线距离公式,$D=\frac{|wX+b|}{|w|}$,我们得到$r = \frac{|w * x_1+b|}{|w|} $,这张图里,我们“恰好”认为x1是一个支撑点,也就是x1“恰好”是wx+b=0这个直线两边最合适的支撑点之一。其实,你说为什么是x1,没有为什么,就是为了“凑”。</p>
<p><img src="/images/20180416/1522501629206.png" alt="" width="50%" /></p>
<p>我们故意花了一条很赞的线wx+b=0,恰好可以分开两边的红蓝(正、负)例,而且,支撑点$x_1,x_2$恰好是正例和负例的支撑点。</p>
<p>好,再说一遍,支撑点$x_1$到我们完美策划的直线,距离$r = \frac{|w * x_1+b|}{|w|} $。当然,$x_2$也是一样的,$r = \frac{|w * x_1+b|}{|w|}=\frac{|w * x_2+b|}{|w|} $。这里小说明一下。</p>
<p>现在重点来了,我让这个距离变成$r=\frac{1}{|w|}$,你一定惊呼,不是$r = \frac{|w * x_1+b|}{|w|}$么?!怎么这么强入啊!卑鄙啊。我说,我就是要这么任性,把距离叫做这个$r=\frac{1}{|w|}$,你突然明白过来,此时的w不再是刚才那个w了,而是个新$w’$了,对,真实面目是$r = \frac{|w * x_1+b|}{|w|}=\frac{1}{|w’|}$,那么,啥时候可以这样啊,那一定是分子$|w * x_1+b|=1$的时候啊,那时候会对应一个$w’$,$r = \frac{|w * x_1+b|}{|w|}$不就变成了对应的$r=\frac{1}{|w’|}$了么!</p>
<p>举个例子,原来分割线是 x+y-1=0,也就是,我有个点是(-1,-1),我们可以算出来他到直线的距离是$\frac{3}{\sqrt{2}}$
也就是说,$r = \frac{|w * x_1 + b|}{|w|}=\frac{3}{\sqrt{2}}$, 也就是,$|\left[1 ,1 \right] * \left[ \begin{matrix} -1 \ -1 \end{matrix} \right] + 1 |= \frac{3}{\sqrt{2}}$,那么重点来了。
<strong>敲黑板!!!</strong> 对于wx+b=0直线方程来说,等比例地缩放w和b,对应的方程直线是不变的,比如 x+y-1=0 ==> 2x+2y -2 = 0 ==>3x+3y-3=0,w=(1,1)/b=1 w=(2,2)/b=2,w和b的缩放并没有影响直线的表达,对吧。
那么我们就尝试缩放刚才那个 表达式中的w和b,使其从$r = \frac{|w * x_1 + b|}{|w|}=\frac{3}{\sqrt{2}}$变成$r =\frac{3}{\sqrt{2}}=\frac{1}{|w’|}$的样子,实现的方法就是上面说的,适当地缩放w和b,这个时候,就会对应出一个新的$w’, b’$,使得$\frac{3}{\sqrt{2}}=\frac{1}{|w’|}$,这个时候,b其实也要跟着缩放的。
对于上面的例子来说,当w从$(1,1)^T$变成$(\frac{1}{3},\frac{1}{3})^T$的时候,距离还是$\frac{3}{\sqrt{2}}$,当然这个时候,对应的b是$\frac{1}{3}$。</p>
<p>回过头来看,我们的点到线的距离,就可以变成了一个$\frac{1}{|w’|}$的样子,虽然看着简单,对应的b也是有约束的。</p>
<p>这个时候,思路有点散,我们回顾一下我们在做什么?我们在整出一个距离公式,这个公式有个特点,就是我们假设,我们对应的点是支撑点,也就是这个margin里面没有点了。这个正例点的距离和对面的负例点到分割线的距离是等距离的。当距离为$\frac{1}{|w’|}$时候,这个点满足等式$|w’x+b’|=1$,也就是那几个支撑点,都是满足这个要求的。并且,所有的正例呢都满足$w’x+b’>1$,所有的负例都满足$w’x+b’<-1$,这个是超平面的性质(<a href="https://zhidao.baidu.com/question/177858844453853244.html">参考</a>)。</p>
<p>所以,这些约束和性质,就推导出来最重要的SVM的基本等式和约束:</p>
<h3 id="svm基础目标函数i">SVM基础目标函数I</h3>
<p><img src="/images/20180416/1522552729114.png" alt="" class="myimg" /></p>
<p>再来看看周志华教授的西瓜书的图,再次回忆一下:</p>
<p><img src="/images/20180416/1522552685598.png" alt="" class="myimg" /></p>
<h3 id="svm拉格朗日函数">SVM拉格朗日函数</h3>
<p>要优化了,上拉格朗日函数吧,参考我的<a href="http://www.piginzoo.com/machine-learning/2018/04/06/convex-optimize">凸优化</a>, 由于这个是个凸优化,都不用上KKT神器,就可以玩的转:</p>
<p>把$max_{w,b} \frac{2}{||w||}$转化成$min_{w,b} \frac{1}{2} ||w|| ^2$
另外,约束函数要<=0,所以要把$y_i(w^T x_i+b) \geq 1 $变成$1 - y_i(w^T x_i+b) \leq 0$
写出拉格朗日函数来:
$L(w,b,\alpha)=\frac{1}{2} ||w|| ^2 + \sum_{i=1}^n \alpha_i (1 - y_i(w^t x_i + b))$
我们知道,这个拉格朗日函数的最大值,就是原函数的最小值,那么我们就是对这个函数求下界函数的最大值,就是原函数的最小值,对吧(绕过来了么?嘻嘻)。但是我们其实关心的不是最大最小值到底是多少,我们关心的是取得最大最小值的时候,那个w是多少,也你妈就是我要梦寐以求的分割平面的参数啊。
顺道吐槽一下,书里说的最大最小化,神神秘秘的,其实就是把人家的下界最大化,不讲清楚凸优化里的对偶函数强对偶条件,就说最大最小化之类的话,就是耍流氓。</p>
<p>然后,既然我们按照一般书里讲的,对拉格朗日函数对w和b进行求偏导,可是为什么要求偏导呢?而且偏偏只对w和b求导,而不对$\alpha$求导呢?</p>
<p>想了半天,原来是KKT条件引出来的,KKT条件是凸优化问题<strong>充分必要条件</strong>(此处心虚,忘了怎么证明的了),
回忆一下强对偶条件:</p>
<p>$d^* = g(\lambda^* ,\nu^* )$</p>
<p>$ \leq f_0(x^* ) + \sum \lambda_i^* f_i(x^*) + \sum \nu_i^* h_i( x^* ) $</p>
<p>$= f_0(x^* )+\sum \lambda_i^* f_i(x^* ) $</p>
<p>$\leq f_0(x^* )$</p>
<p>$=p^* $</p>
<p>在$x^*,\lambda^*,\nu^* $, $f_o(x^*)$取得最小值,$g(\lambda^ *,\nu^ *)$取得最大值,而且这两个值相等。就要求上面所有的$\leq$都要变成=,对与这个等式:
“$g(\lambda^*,\nu^*) = f_0(x^*)+\sum \lambda^*_i f_i(x^*) + \sum \nu^*_i h_i(x^*)$”,
感觉“乱上”了啊,啥叫乱上了,就是你丫$g(\lambda,\nu)$本来是后面拉格朗日函数$L(x,\lambda,\nu)$的x取值下的下确界函数啊,你g一直都是小于等于L的,只有在极值点上,你们才相等。
你一定会说,$x^* $不就是极值点么?我扇你丫一个大嘴巴,在$x^* $上是$f_o(x)$取得极小值,谁他妈说过在拉格朗日函数L上,也取得极小值了。
不过,我会扇完你嘴巴,再给你揉揉,其实,在$x’$点上,拉格朗日函数确实是极小值,因为,$g(\lambda^*,\nu^*)$虽然取得最大值,但是它同时又是拉格朗日函数$L(x,\lambda^*,\nu^*)$的最小值(仔细看,x没有*,他是个变量;$\lambda^* ,\nu^* $有*,他们俩是固定值),是最小值,那么这个值对应的x可就是驻点嘛,偏导为0嘛,
$\nabla_x L(x^{*} , \lambda^{*} , \mu^{*} )=0 $</p>
<blockquote>
<p>[参考]
说说g函数。我的理解是,他是一个关于$\lambda, \nu$的函数,啥意思,就是你取值某个$\lambda, \nu$,就会得到一个值,这叫函数呀。那这个值怎么来的呢?是拉格朗日函数的在x取值范围内的下确界,讲人话,就是你给定一个$\lambda_0, \nu_0$,我就去算整个拉格朗日L函数的下确界,就是最小值,这个值就是g的值;然后你再给定一个$\lambda_1, \nu_1$,我又去得到一个关于x作为自变量下拉格朗日L函数的最小值;。。。。;这样下来,就形成了一个$\lambda, \nu$到L最小值的映射关系,这个映射关系,就是g函数。</p>
</blockquote>
<p>总结一下还是,</p>
<p><img src="/images/20190222/1550820794135.png" alt="" /></p>
<p>你看这个式子,因为,$y_i * (w^T * x_i + b)-1>0$,为何>0,这个是约束:</p>
<p><img src="/images/20190222/1550821859093.png" alt="" /></p>
<p>所以,$L(w,b,\alpha)$的后面那项永远是大于0, 所以,$L(w,b,\alpha)$最大也就取到$\frac{1}{2}||w||^2$,对吧。你的本意是要$\frac{1}{2}||w||^2$最小化对吧,所以你要做的就是要让$L(w,b,\alpha)$之后的,找到对应的$\alpah$参数们,然后再去寻找最小化$L(w,b,\alpha)$值的$w,b$。</p>
<h3 id="然后是推导">然后是推导</h3>
<p>$L(w,b,\alpha)=\frac{1}{2} ||w|| ^2 + \sum_{i=1}^n \alpha_i (1 - y_i(w^T x_i + b))$
$L(w,b,\alpha)=\frac{1}{2} ||w|| ^2 - \sum_{i=1}^n \alpha_i y_i(w^T x_i + b) + \sum_{i=1}^n \alpha_i$</p>
<p>上面提到了,强对偶的时候,满足对w和b的偏导为0:$\nabla_w$和$\nabla_w$ = 0</p>
<p>$\nabla_wL(w,b,\alpha)=w - \sum_{i=1}^n \alpha_i y_i x_i = 0$
$\nabla_bL(w,b,\alpha)= - \sum_{i=1}^n \alpha_i y_i = 0 $</p>
<p>于是,得到</p>
<p>$ w = \sum_{i=1}^n \alpha_i y_i x_i $
$ 0 = \sum_{i=1}^n \alpha_i y_i $</p>
<p>于是,这个时候,把这2个式子带回到拉格朗日函数里面去,可以只包含$\alpha$的函数:</p>
<p>$L(w,b,\alpha)=-\frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_i y_i y_j x_i x_j + \sum_{i=1}^n \alpha_i$</p>
<p>停!我们得到了什么,得到了只包含$\alpha$的拉格朗日函数,这个函数是L,不是下确界函数$g(\alpha)$,但是这个函数的最大值,恰好应该是强对偶的时候那个d * (g函数的最大值)。</p>
<p><strong>那么好了,我们就对这个新得到的包含$\alpha$的函数求取最大值,得到的那一组$\alpha$后,我们用它再反推出w和b,从而得到我们的最佳分割超平面来。</strong></p>
<p>核心思路就是这些,我觉得。</p>
<h3 id="松弛因子">松弛因子</h3>
<p><img src=""/images/20180416/1523757691662.png"" alt="" width="50%" /></p>
<p>看这种图,最上面那个圆形点,是个异常点,如果你考虑了他,那么分出来的分离超平面的泛化能力就不强,我们凭直觉就感觉的到,虚线那个更好,泛化能力会更强,对不?</p>
<p>之前还记得吧,我们把点到直线的距离定义为
$y_i(w^T \cdot x_i + b) \geq 1$,对吧,总是大于等于1,我们归一化后。
现在,我们加入一个引子$\xi$,我们把这个约束改成:
$y_i(w^T \cdot x_i + b) \geq 1-\xi, \xi \geq 0$
所以,我们之前的SVM目标函数就变成了:
$\frac{1}{2} ||w|| ^2 + C\sum_{i=1}^n \xi_i$
约束s.t.为:
$y_i(w^T \cdot x_i + b) \geq 1-\xi, \xi \geq 0, i=1,2…n$</p>
<p>啥意思啊,这公式再加上这个$\xi$,就跟一坨屎一样。
其实就是说,我本来是这个距离,但是我每个距离都加上一个$\xi$,你的$\xi$和我的$\xi$不一样,要去训练和学习的,有了这一堆$\xi$,我们就可以调整我们每个人到分割平面的距离了。
比如你的$\xi$是0.5,那我就允许你的距离大于0.5,就是说,</p>
<p><img src="/images/20180416/1523758671593.png" alt="" class="myimg" /></p>
<p>比如上图中的x1的$\xi=0.5$,x2的$\xi=1.5$。</p>
<p>那公司里的“C”呢?</p>
<p>C是个超参数,相当于在算每个点算分割超平面的距离的时候,不再是用$\xi$了,而是$C\cdot \xi$,这里我想吐槽一下,可能是我真的没明白,我的理解,这里距离上用$C\cdot \xi$了,那约束上是不是也应该用$C\cdot \xi$,就像:
s.t.$y_i(w^T \cdot x_i + b) \geq 1- C \cdot \xi$,
这样我们就好理解多了,为何一个加C,一个不加C呢?</p>
<p>anyway,有了这个超参,我们就可以控制这个越界的个数了,尽量让。
????</p>
<blockquote>
<p>总结一下,松弛因子是在每个SVM支撑点的距离上加上一个$\xi_i$,注意,是每一个$\xi_i$,也就是会有多个。之前SVM优化的,就是让这些点到支撑平面的距离之和最大化,现在你还得加上一堆的松弛因子啦,然后,还是那套优化流程,最终你的到的是的那个最优化的超平面是考虑了让这些支撑点的松弛因子$\xi_i$也最小,的那个合计的到超平面距离最的,的那个超平面。</p>
</blockquote>
<p><img src="/images/20190222/1550823347729.png" alt="" /></p>
<p>这个是和田甜讨论完之后,总结的,说白了,要理解松弛因子是针对每一个支撑点施加的,是一种惩罚项,但是要力求让他们最小。加入松弛因子后,可以容忍一些点的距离是负的了。这样,他可以跑到另外一侧去了,他可能是少量的异常点。这样做后,就可以增加模型的泛化能力。直接的结果是,让学出来的$w,b$得到调整,从而改变支撑平面的位置。</p>
<h3 id="核函数">核函数</h3>
<p><a href="https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html">参考</a></p>
<p><strong>为什么要升维?</strong></p>
<blockquote>
<p>至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到的(为了更好地拟合)是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。(在《数据挖掘导论》Pang-Ning Tan等人著的《支持向量机》那一章有个很好的例子说明)</p>
</blockquote>
<p>说白了,就是升维后,在当前低纬度里面不可分的,到了高维就可以分了。
啥叫高维就可以分了么?就是可以线性划分了。就是可以找一个超平面了,在那个$\Phi(x_i)$变换了之后的空间,这个$\Phi(x_i)$实际上是个升维函数,比如我本来是X是$[x_1,x_2]$,二维的,我可以变成$[x_1x_2, x_2x_3,x_3x_1,x_1x_1,x_2x_2,x_3x_3]$,乖乖,妈蛋6维了。在六维空间里,很容易线性可分。(至于为什么高维空间就容易线性可分,据说是可以数学上证明的)
<a href="http://www.blogjava.net/zhenandaci/archive/2009/03/06/258288.html">参考</a></p>
<blockquote>
<p>原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的!因此这也形成了我们最初想解决线性不可分问题的基本思路——向高维空间转化,使其变得线性可分。
而转化最关键的部分就在于找到x到y的映射方法。遗憾的是,如何找到这个映射,没有系统性的方法(也就是说,纯靠猜和凑)。具体到我们的文本分类问题,文本被表示为上千维的向量,即使维数已经如此之高,也常常是线性不可分的,还要向更高的空间转化。其中的难度可想而知。</p>
</blockquote>
<p>但是高维有高维的苦恼呀:</p>
<p>核函数,是拍脑袋出来的,就是拍脑袋认为kernel函数是一个高斯核
核函数,是$\phi(x_i) * \phi(x_j)$,不需要知道$\phi$是什么,只知道两者相乘的结果</p>
<p>核函数很精巧,可是怎么找啊?怎么就知道一个函数恰好是是一个很赞很赞的核函数呢?怎么就知道丫恰好是2个升维函数相乘的结果啊?
<a href="http://www.blogjava.net/zhenandaci/archive/2009/03/06/258288.html">参考</a></p>
<blockquote>
<p>万幸的是,这样的K(w,x)确实存在(发现凡是我们人类能解决的问题,大都是巧得不能再巧,特殊得不能再特殊的问题,总是恰好有些能投机取巧的地方才能解决,由此感到人类的渺小),它被称作核函数(核,kernel),而且还不止一个,事实上,只要是满足了Mercer条件的函数,都可以作为核函数。核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。几个比较常用的核函数,俄,教课书里都列过,我就不敲了(懒!)。</p>
</blockquote>
<p>Mercer条件,噢,没能力再钻进去思考了,不学数学,我想也就到这步把,让学数学的同学们替我们保证好吧。</p>
<p>上面提到的参考中的博文写的真好,不由再赞一次!
我就喜欢提问并自己回答的博文,比那种洋洋洒洒地写一通,基本上就是把教科书上的东西流水账的记录下来的文章搬家过来的装逼文章,强多了。这种自问自答的文章实际上就是一个发散型的思考过程,这个文章就是这种好文章:</p>
<blockquote>
<p>明白了以上这些,会自然的问接下来两个问题:
1. 既然有很多的核函数,针对具体问题该怎么选择?
2. 如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?</p>
</blockquote>
<p>多好的问题呀!</p>
<p>在低维中计算高维数据的点积</p>
<p><a href="http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988406.html">参考</a></p>
<blockquote>
<p>注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用
$w^Tx+b$来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后,$w^Tx+b$就变成了$w^T\phi(x)+b$,是否先要找到$\phi(x)$,然后再预测?答案肯定不是了,找$\phi(x)$很麻烦,回想我们之前说过的.
<img src="https://images.cnblogs.com/cnblogs_com/jerrylead/201103/201103182034444670.png" alt="" /></p>
</blockquote>
<blockquote>
<p>只需将$<x^{(i)},x>$替换成$K<x^{(i)},x>$,然后值的判断同上。</p>
</blockquote>
<p>回答了之后,我们知道了很多know how:</p>
<blockquote>
<p>对核函数的选择,现在还缺乏指导原则!</p>
</blockquote>
<p>操,绝望!看来没啥好办法,就是用前人选好的把,咱也别纠结了,有事没事咱就选径向基函数(就是高斯核)吧,好吧,不纠结了。反正有交叉验证,看效果呗。</p>
<blockquote>
<p>对第二个问题的解决则引出了我们下一节的主题:松弛变量。</p>
</blockquote>
<p>这个咱上面讨论过欧了。</p>
<p>总结一下,</p>
<p>就是你在低维不可分,然后你就把x做一个映射,映射到高维去,就可以分了。可是,你映射过去后算内积特别费劲,恰好这个计算可以和某个低维x算内积的值一样,这样就好了,你就用低维x直接算出这个内积就好了。其实,你不用关心这个映射是啥,你只关心映射后的内积计算和低维的内积计算一样就成,你要的是高维内积的值。你要这个值干嘛?你要算</p>
<p><img src="/images/20190222/1550822880585.png" alt="" /></p>
<p>这个结果丫,>0就是正例,<0就是负例嘛。</p>
<h2 id="smo">SMO</h2>
<h2 id="写在最后">写在最后</h2>
<p>SVM驰骋机器学习界15年,不是盖的,那也是VapniK憋了N年的大招啊,从95年代初经典SVM的提出,到2010年前,都是最好的算法之一。而整个算法的形成,Vladimir N.Vapnik从1968年就提出来了,俄文写的,没人搭理,后来移民到了美国,才最终确立其在机器学习里的地位。这看上去一个算法很复杂,确实复杂,是包括Vapnik在内的无数智慧的结晶,是经过很多年的冥思苦想才得出的结论,你想一下子就搞明白,确实不容易。况且,数学上的积累和功底不够,很多地方其实自己觉得明白了,也只是自我迷幻的一种假象把。</p>
<p>机器学习算法用起来确实非常简单,import sklearn,用个grid search找到最优超参,然后看泛化能力,大抵如此。但是,即使如此,还是要学习,学习的目的还是让自己在用SVM的时候,心里能多一份自信、踏实,和对原理明确后的那份坦然,而不是,总是看到一个黑盒子那种莫名的恐慌。不过,即使自己觉得学明白了,又真的明白了么?对每个数学推导细节、对每一个引理公理都横亘于心么?不见得。还是上面那句话,只是自己对未知探求的满足而已,只是对自己掌控欲望的满足而已,仅此而已。</p>
<p>学SVM如此,学其他算法又何尝不是呢?</p>
<h2 id="参考">参考</h2>
<p><a href="https://blog.csdn.net/v_july_v/article/details/7624837">https://blog.csdn.net/v_july_v/article/details/7624837</a></p>
<h2 id="更新">更新</h2>
<p>【2019/2/22 更新】</p>
<p>田甜又给大家讲了一遍,捋了一遍从距离函数,引入约束的拉格朗日,到最大最小互换,到对偶,然后SMO。然后讨论到线性不可分,引出核函数。最后是,处理那些异常点的松弛因子引入提高泛化能力。</p>
<p>SVM就是这么一个思路,难点是距离的理解,本质是为了简化形式;然后是拉格朗日+对偶的折腾,最大最小换来换去,目的是处理好约束下的最优化;然后是SMO理解一下,目的是为了求解那一堆的$\alpha$;然后核函数,目的是为了减少内积计算;最后是松弛因子,目的是引入一个弹性因子来让距离可以变负,容忍一些节点的位置,从而让模型泛化能力更强。</p>
<p>其实,平时也没工夫研究SVM,研究它也就是蛋疼和面试之前,耐心点、细心点,把凸优化复习一遍,就可以按部就班的推导出来,再深一点的Mercer条件,甚至KKT条件,要深入,还是得再化额外的时间的,那就真考验数学功底了。对一般机器学习吃瓜群众来说,能推导一遍SVM就很牛B了,据说鹅厂面试就是手推SVM。再降低点要求,能把SVM的思路从头到尾的捋一遍,清清楚楚讲一遍,也是很赞了。真正用的时候,sklearn里SVC一调用,调调Gamma,做个GridSearch,也就酱紫了。</p>
<p>遗憾的一点是,大家还是没讨论到合页损失函数,找时间,我在补充上。</p>
凸优化
2018-04-06T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/04/06/convex-optimize
<h1 id="凸优化">凸优化</h1>
<blockquote>
<p>参考:数据炼金的机器学习数学基础,管老师</p>
</blockquote>
<h2 id="来上概念">来,上概念</h2>
<p>一些概念必须要清清楚楚:</p>
<ul>
<li>仿射集:超平面</li>
<li>凸集</li>
<li>凸函数</li>
<li>(凸函数的)上境图</li>
<li>(一堆点的)凸组合:重心</li>
<li>(集合的)凸包</li>
<li>(函数的)凸闭包:包住函数的函数,呵呵</li>
<li>下确界:凸集的支撑平面</li>
</ul>
<p>好,那,来吧:</p>
<p><strong>仿射集</strong>
两点的连线的$\color{red}{直线}$还在集合内,这样的集合叫仿射集。
直线上的动点 $x=\theta x_1 + (1-\theta) x_2 x1,x2 \in C, \forall \theta \in R$
典型的直线呀、平面、超平面($AX=B$,X是n维向量,线性的)
<em>所以大家老说,仿射函数就是线性函数的缘故</em></p>
<p><strong>凸集</strong>
其实跟仿射很像,只不过,两点的直线,变成了$\color{red}{线段}$啦,<br />
集合C中,任意两点的线段上的点,都在集合C中,那么这个集合叫凸集。</p>
<ul>
<li>
<p>上面的两点,其实还有个多点的版本。
$x=\sum_{i=1}^{k}\theta x_i,$ 条件是:$\sum_{i=1}^{k} \theta_i = 1 , x1,…,x_k \in C$
其实这个也是定义一个凸集出来。比如说,3个点,他们在这个约束下,会变成一个三角形,一个集合中任何3个点围成一个三角,然后这些三角不断地交集,最后搞成一个大凸集,就是这种感觉,这个数学定义真的是需要想象力的。</p>
</li>
<li>
<p>一些思考:
<strong>是仿射集一定是凸集, 凸集不一定是仿射集</strong>
这两段有点反直觉啊,你想啊,直线集合更大,线段是直线的子集,直线对仿射,线段对凸集,那么按理说,凸集应该是仿射的子集把。我靠!结论正好想法啊,难怪邹博都说错了。
不过,你再细想,其实凸集更自由,而仿射要求直线(也就是线性组合,其实约束更强了),其实,不用那么纠结,凸集就是个大锅,仿射就是个平面(高维就是个线性约束),你这么想就释然了。</p>
</li>
<li>
<p>凸集、凸集合:任意两点的连线的线段上的点还在凸集中
$\lambda x_1 + (1-\lambda) x2 \in \Omega$
$\forall x_1,x_2 \in \Omega, \lambda \in (0,1)$</p>
</li>
</ul>
<p><strong>凸函数:</strong>
$f$是定义域$\Omega$是一个凸集,任意两点,他们的线段上的点都有如下性质:
$f(\lambda x_1 + (1-\lambda) x2) <f(\lambda x_1) + f((1-\lambda) x2)$
$\forall x_1,x_2 \in \Omega, \lambda \in (0,1)$</p>
<p>不太严格地收,就是割线位于函数的上方。</p>
<p>直观上好理解凸函数,但是数学上有点拗口,直观上理解就是,中间的某个点的函数值,一定是在线段两端的点的函数值之间。</p>
<blockquote>
<p>上境图:${ (x,y) : y\geq f(x), \forall x \in \Omega}$,对应由(x,y)组成的点的集合区域,就是上镜图。</p>
</blockquote>
<p>说着吓人,说白了就是凸函数的上半部分(此处需要补个图)</p>
<p>凸集合和凸函数之间怎么联系起来呢?</p>
<blockquote>
<p>一个函数是凸函数,当且仅当, f函数的上境图是凸集合。</p>
</blockquote>
<p><strong>凸组合</strong>
$w_i\geq 0, \sum w_i=1,$那么,
$S = \sum_{i=1}^{n} w_i x_i$叫做一个凸组合,凸组合的含义是n个重点为$w_i$的点的整体重心。
重心一定在,由这些点组成的凸集合里面。<—-这个结论,<strong>Jensen不等式要用的吆</strong>
说白了,就是说,这样的一个组合就叫组凸组合。
凸组合是生成了一个重心点。</p>
<p>前面说这个凸组合的意义何在?老师说了一句话,点破,“调整几个点的凸组合的权值$w_i$,就可以覆盖住这几个点组成的凸形状里面的所有的点”,牛逼,这句话才是有用的,举个例子,</p>
<p><img src="/images/20180406/1522565628232.png" alt="" class="myimg" /></p>
<p>这个例子,里,这个三角形组成的点,每个点,都可以通过调整权值$w_i$获得。</p>
<p><strong>集合的凸包</strong>
集合里面的点组成的所有的所有的凸组合,合成了那个集合,叫做凸包。
说白了,就是把$\color{red}{这些点全都包住的最小的凸集合}$。
讲人话,就是把一堆点变成了包围住他们的最小的凸集合。</p>
<p><strong>函数的凸闭包</strong>,这个概念就是说,某个函数C’可以包住另外一个函数C,C’就是C的凸闭包函数。
有个推论,就是一个函数C的支撑函数,也一定是他的凸闭包函数的支撑平面。
$\color{red}{函数的凸闭包就是包住他的函数}$</p>
<p><img src="/images/20180406/1522556369526.png" alt="" class="myimg" /></p>
<p>g(x)是f(x)的凸闭包</p>
<p>有点晕,总结一下,就是,集合凸包包住所有点,函数凸闭包是用一个函数包住另外一个函数。</p>
<p><strong>下确界</strong>
就是函数的极小值,就是与y轴(2维为例子)垂直的支撑平面,对应的y值,就是下确界。</p>
<p><strong>一些性质,无关紧要,蛋疼地写在这里</strong>
还有些凸集合和凸函数的性质:</p>
<p><img src="/images/20180406/1522567685924.png" alt="" class="myimg" /></p>
<p>这个几个结论,大白话解释一下:</p>
<ul>
<li>任意多个函数的逐点上确界仍是凸函数,就是说俩函数</li>
</ul>
<p><img src="/images/20180406/1522567927909.png" alt="" class="myimg" /></p>
<p>,绿色那个曲线,是个凸函数。</p>
<ul>
<li>凸函数的sublevel set都是凸集合
这是个啥意思?</li>
</ul>
<p><img src="/images/20180406/1522568465759.png" alt="" class="myimg" /></p>
<p>如图,函数被一个值为$\alpha$的切面切出一个截面,投影到x,y坐标平面上,这个投影还是凸函数,就是说这个事,呵呵。</p>
<p>这些概念搞清楚了,引出有用的东西了:</p>
<h2 id="jensen不等式">Jensen不等式</h2>
<p><strong>Jensen不等式</strong>
函数的组合大于组合的函数。
$\sum_{i=1}^{n} w_i f(x_i) \geq f(\sum_{i=1}^{n} w_i x_i) $
这玩意看着很玄幻,怎么推理出来的呢?
我们知道上境图的定义是:${ (x,y) : y\geq f(x), \forall x \in \Omega}$,也就说,(x,y)这个点是在凸集里面的。
那么就可以吧jensen不等式理解成,($\sum_{i=1}^{n} w_i x_i, \sum_{i=1}^{n} w_i f(x_i) $ )这个点在上境图里,<strong>注意!</strong>,把这玩意看成是一个点了,他要是在凸集的上境图里的话,那他一定是满足这个jensen不等式了,对不对?对不对?
那爱思考的你问了,为什么丫就在凸集里面呢?
问的好,因为你可把($\sum_{i=1}^{n} w_i x_i, \sum_{i=1}^{n} w_i f(x_i) $ )看作是 ($\sum_{i=1}^{n} w_i (x_i, f(x_i)) $ ),这个就是条件里说的凸组合啊,凸组合的组成的这个点(重心),一定在这些点的凸包(凸包一定是凸集)里面,也就在上境图里,那么,就满足上境图的定义,就得出了结论了呀。</p>
<p>这里面,隐含着一个说明,这里面没说,就是$\sum w_i=1$,为何,因为这个是凸组合的定义里要求的,忘了?!回去看看。</p>
<p>Jenson不等式的几何含义,就是,</p>
<p><img src="/images/20180406/1522566957155.png" alt="" class="myimg" /></p>
<p>x是x1,x2的凸组合,那么x一定在函数的上境图里面,咳,其实就是说的这事,多直白啊,废话半天,就是这么一个直白的结论。</p>
<p>其实啊,Jensen不等式,EM算法采用呢,我们还会关心另外一个问题,就是臭名昭著,啊,不,是久负盛名的拉格朗日算子,专业解决凸优化问题,还有叫人想哭的KKT条件啥的,忍住你的眼泪,继续往下</p>
<h2 id="凸优化-1">凸优化</h2>
<p>凸优化的一般形式:</p>
<blockquote>
<p>最小化: $f_0(x)$
条件:$f_i(x)\leq b_i , i=1,…,m$</p>
</blockquote>
<p>$f_0, f_1, …, f_m$ 都得是凸函数,这样局部最优就是全局最优了。</p>
<p>有时候,非凸问题可以转化成凸问题,比如,先找到各个局部极小值点,然后把它们串成一个曲线,也就是用这些点去你和出一个函数,再求这个新函数的极小值点。</p>
<p><img src="/images/20180406/1522554133621.png" alt="" class="myimg" /></p>
<p>或者找到你这个问题的对偶问题,它恰恰是个凸问题,可求解。</p>
<p>任何一个优化问题,</p>
<blockquote>
<p>最小化: $f_0(x)$
条件:$f_i(x)\leq b_i , i=1,…,m$
都可以转换成一个对偶形式,这个对偶都可以搞成凸函数,就可以求极值点了。</p>
</blockquote>
<h3 id="共轭函数">共轭函数</h3>
<p><img src="/images/20180406/1522586306812.png" alt="" class="myimg" /></p>
<p>共轭函数干嘛用的?共轭函数,把原来的函数,变成了一个包含y的一个凸函数了,我理解是,就是把原来的非凸问题,转成了凸问题了。
这里的y是一个新引入的变量,可不是f(x)啊,别晕啊,就是引入个变量而已,跟f(x)也没啥关系,就是纯憋出来的一个变量。</p>
<p><img src="/images/20180406/1523007532333.png" alt="" class="myimg" /></p>
<p>最后这个共轭函数是自变量是y的函数而已。
但是,有意思的就是,他和原来的f(x)还有关系。</p>
<p>举个例子,y是有定义域和可行域的,比如y=1,那么这个时候,共轭函数$f^* $就变成了 $sup(yx-f(x))=>sup(x-f(x))$,就是上图里面左图,你要求啥来着?这个额函数$sup(x-f(x))$的上确界,也即是最大值,对吧?</p>
<p>怎么求啊,那肯定是x1这个点啊,你是找遍了x的定义域,终于在x1这个点发现,$x-f(x)$最大,就是那些文章里面说的切线啥的。客官,您可能说,x2(也就是红色距离)比x1(绿色)的大啊,是大,但是是负的!</p>
<p>别晕,我们得到了一个告诉我一个y,我给你一个值,你再给我一个y,我再给你一个值,这个就是个$R^n->R$的一个映射函数啊,变量就是y,这个就是对应于原来的那个函数的共轭函数。</p>
<p>讨论这样玩意干嘛呢?
首先他有个牛逼性质:共轭函数是个<strong>凸函数</strong>,这个我就不再证明了,大概意思就是一堆凸函数的上确界还是凸函数,线性函数(yx-f(x)可看做是y的线性函数)是凸函数。
其次,这玩意,对偶里面会用,别急,后面会说到,你先记着。</p>
<p>网上的一些参考,都说的不明不白,很失望,姑且留着:</p>
<p><a href="https://blog.csdn.net/xueyingxue001/article/details/51858074">参考1</a></p>
<p><a href="https://blog.csdn.net/shenxiaolu1984/article/details/78194053">参考2</a></p>
<h4 id="对偶问题">对偶问题</h4>
<p>为什么引入对偶?本来如果是纯凸函数优化,就一个$f_0$,你用牛顿法啥的总是可以寻找到最小值点,局部最小值就是全局最小值。但是一旦你加入限定条件,你那些这法那法都不起作用了,您就无法梯度下降出溜下去了。怎么办?引入拉格朗日,把要求的$f_0$和那些限制条件揉在一起,重新变成一个凸函数,这个新的凸函数就可以寻找到最值点了吧。然后这个新函数和旧的$f_0$的极值又有关系,比如新函数的上确界就是旧函数的下确界啥的,这样从而让原问题求解完成。</p>
<p><strong>优化问题</strong>
先提出优化问题,下面就是优化问题长这个样子:</p>
<p><img src="/images/20180406/1522586839081.png" alt="" class="myimg" /></p>
<p>先搞清楚可行域和定义域:
定义域:就是各个函数的自变量的定义域的交集
可行域:除了定义域之外,还包括每个等式、不等式对应的自变量的范围,举个例子吧:
$f(x)=x^2<1$,这个时候,x的取值实际上是被限制到了 -1<x<1,这个就是可行域。</p>
<p>这个最优化问题怎么解呢?恩,当当当当当!拉格朗日隆重登场….
<strong>拉格朗日对偶函数</strong>
拉格朗日大神,据说是为了解决力学问题,定义了这个朗格朗日算子$L(x,\lambda,\nu)$。不过,我们还定义了一个$g(\lambda,\nu)$,其中$g(\lambda,\nu)$是$L(x,\lambda,\nu)$的下确界。</p>
<p><img src="/images/20180406/lagelangri.png" alt="" class="myimg" /></p>
<p>$L(x,\lambda,\nu)=f_o(x)+\sum_{i=0}^{m} \lambda_i f_i(x) + \sum_{i=1}^{p} \nu_i h_i(x)$
$\lambda_i \geq 0$</p>
<p>$g(\lambda,\nu)=inf_{x \in D} L(x,\lambda,\nu) = $
$inf_{x \in D} ( f_o(x) + \sum_{i=0}^{m} \lambda_i f_i(x) + \sum_{i=1}^{p} \nu_i h_i(x))$
*$inf$是下确界
*$f_0, f_i$都是凸函数,$h_i$是仿射函数</p>
<p>得说搭说搭这个$g(\lambda,\nu)$,这个函数啥意思啊?你琢磨过么?我的理解就是,您x随便变,然后我对任意一对$\lambda, \nu$,都可以遍历所有的x,得到一个下确界,(其实也不是任意的$\lambda, \nu$啦,得是让下界存在的他们俩,他们俩要都在可行域里)</p>
<p>上面这段是我之前写的,自己都看不懂啥意思了,不舍得删,毕竟是自己的思考过程。我现在得再来说说g函数。我的理解是,他是一个关于$\lambda, \nu$的函数,啥意思,就是你取值某个$\lambda, \nu$,就会得到一个值,这叫函数呀。那这个值怎么来的呢?是拉格朗日函数的在x取值范围内的下确界,讲人话,就是你给定一个$\lambda_0, \nu_0$,我就去算整个拉格朗日L函数的下确界,就是最小值,这个值就是g的值;然后你再给定一个$\lambda_1, \nu_1$,我又去得到一个关于x作为自变量下拉格朗日L函数的最小值;。。。。;这样下来,就形成了一个$\lambda, \nu$到L最小值的映射关系,这个映射关系,就是g函数。</p>
<p>这个拉格朗日对偶函数有一个极其重要的性质,就是他可以为原问题提供一个<strong>下确界</strong>。</p>
<blockquote>
<p>$\lambda \geq 0 $, 则 $g(\lambda, \nu) \leq p^* $
$p^* $ 是原问题的最优化(最小)值</p>
</blockquote>
<p>听不懂啥意思吧,就说,$g(\lambda, \nu) $永远是小于等于,之前我们要求的$f_0$的极小值的。靠,说着真TMD绕,看看下面的证明,估计你就会豁然开朗。</p>
<p><img src="/images/20180406/1523009808000.png" alt="" class="myimg" /></p>
<p>你看,$g(\lambda, \nu) $<$L(x,\lambda,\nu)$(是L的下确界嘛)
在可行域里,$h_i=0$,
$\lambda_i>0, f_i \leq0$,俩相乘肯定是小于等于0,
所以,$g(\lambda, \nu) $最大最大,也就是$f_0(x)$嘛,
所以,说$g(\lambda, \nu) \leq p* $不过分吧(p* 是f(x)的最小值)</p>
<p>这啥意思啊?在回过头来说一下,你发现$g(\lambda, \nu) $里面没有x了,也就是说,在你x在可行域里,我取遍所有的x,对某一个x来说,这个x一点固定,那么原来的拉格朗日函数就变成了$\lambda,\nu$的函数了,对这个函数取下界,下界是啥,下界就是一个值啊,一定在某对$\lambda,\nu$的取值的时刻,达到这个最下界。如果你还不理解,你可以想象 z=f(x,y)的一个函数,现在我固定一个x=3,那么你发现z就变成一个二维函数了了z=f(3,y),就是y=>z的一个映射了,那么我们的g函数现在就是求这个f(3,y)的下界,就是最小值。</p>
<h4 id="对偶和共轭">对偶和共轭</h4>
<p>如果优化问题的限制条件是线性条件的时候,可以用共轭函数来简化求解过程。
终于,共轭和对偶发生关系了,前面算是没白讲。</p>
<blockquote>
<p>最小化:$f_0(x)$
不等式条件:$Ax \leq b$
等式条件:$Cx = d$</p>
</blockquote>
<p>$g(\lambda,\nu)= inf_x f_0(x) + \lambda * (Ax-b) + \nu (Cx-d)$
$=-b\lambda - d\nu + inf_x(f_o(x)+ (A\lambda + C \nu) x)$
$= -b\lambda - d\nu - f_0^* (-A\lambda - C\nu)$
这样,我们就可以把对偶转成共轭来计算了。</p>
<p>好,暂停一下,我们回顾下,我们得到一个新式子$g(\lambda, \nu) $,他永远比原问题的最小值(p* )还小,那么我就让丫呢最大不就得了,这样我就最可能地逼近原问题的最小值呀。</p>
<p>这个新的对偶问题,变成了关于$\lambda, \nu$为变量的函数了,它也有自己的可行域、定义域,当然是关于$\lambda, \nu$的。</p>
<p>(我有个问题,即使是最大了,那也不一定是原问题的最小值呀?可能很接近吧,也可能连接近都不接近吧???)
佩服自己,我理解的对,不一定相等的,也就是小于等于的是弱对偶,而相等的叫强对偶。</p>
<p>所以,尽量要想办法,那咱就想办法,让其达变成强对偶呗。</p>
<h4 id="slater条件">Slater条件</h4>
<p>对于一个凸优化问题:</p>
<blockquote>
<p>最小化:$f_o(x)$
不等式条件:$f_i(x)<0, i=1,..,m$
等式条件:$h_i(x)=0, i=1,…,p$</p>
</blockquote>
<p>如果存在一个可行域中的点x,使得$f_i(x)<0, i=1,..,m$,那么这个凸优化就满足强对偶性。</p>
<p>讲人话,就是,如果$f_0,f_i$都是凸函数,那么,大部分情况(就是存在一个$x_i$让$f(x_i)<0$)都是强对偶。</p>
<p>强对偶,就是:$ d^* = p^* $,也就是,拉格朗日函数$L(x,\lambda,\nu)$的下确界$ d^* $,和原函数$f_0$的最小值$ p^* $,是一样的。这样,我们就可以通过找对偶函数的最小值点,从而得到原问题的最小值点,然后反向解方程,解出最终的x是多少(我的理解,不知道对不对)</p>
<p>上面都是凸函数,那么如果不是凸函数怎么办?这就要引出KKT条件,</p>
<h4 id="kkt条件">KKT条件</h4>
<p>如果满足强对偶,$ d^* = p^* $,
条件是:</p>
<p>$f_i(x^* ) \leq 0$
$f_i(x^* ) \leq 0$
$h_i(x)=0 $
$ \lambda^* \leq 0$
那么我们假设满足的时候,对应的最优解是$x^* , \lambda^* , \mu^* $,也就是满足这个式子:
$d^* =g(\lambda^* , \mu^* )$,的时候,这仨分别对应的值。
$\leq f_o(x^* ) + \sum_{i=0}^{m} \lambda_i f_i(x^* ) + \sum_{i=1}^{p} \nu_i h_i(x^* )$
最后一项,肯定是0,因为$h_i(x)=0$嘛。
$=f_o(x^* ) + \sum_{i=0}^{m} \lambda_i f_i(x^* )$
$\lambda^* \geq 0$ 和 $f_i(x^* ) \leq 0$,所以两者相乘肯定是小于0,所以:
$\leq f_0(x^* )$
$=p^* $</p>
<p>所以,要让上面的$\leq$变成=,就得要求各个子项都是0,
也就是:
$ \sum_{i=0}^{m} \lambda_i f_i(x^* ) = 0 $</p>
<p>还有一点,
$g(\lambda^* ,\mu^* )=inf(L(x^* ,\lambda^* ,\mu^* ))$,这玩意叫下确界,也就是说,x随便取,取来取去,才得到了这个最小值,那么$L(x^* ,\lambda^* ,\mu^* )$对x求偏导,应该在$x^* $这个点上是驻点。
$\nabla_xL(x^* ,\lambda^* ,\mu^* )=0$,</p>
<p>合在一起:</p>
<p><img src="/images/20180406/1523023643486.png" alt="" class="myimg" /></p>
<p>得!终于可以一个非凸优化问题,变成了一个凸优化问题了,可解了。</p>
<h2 id="总结">总结</h2>
<p>太JB乱了,我必须出去吹吹风,冷静一下:</p>
<p>先是一堆概念,才把凸优化问题说清楚,</p>
<p>说凸优化干嘛,无非是丫有唯一的极值呗,</p>
<p>凸优化有凸集合、凸函数,两者有关系,所有有上境图啥的,总之,这些概念要绕清楚。</p>
<p>然后引出了装孙(Jensen)不等式,EM那边会用到,</p>
<p>然后引出了共轭函数,我看后来也就是线性拉格朗日对偶问题的时候用了一下,剩下的时候也没用到,</p>
<p>然后才引出猪脚:</p>
<ul>
<li>拉格朗日函数,就是$L(x,\lambda, \nu)$</li>
<li>拉格朗日对偶函数,就是$g(\lambda, \nu)$,他是个凹函数</li>
</ul>
<p>对偶函数有个性质:他(丫是L拉格朗日函数的下确界)永远小于原函数($f_o$)的最小值
也就是$p^* \leq d^* $,这玩意叫弱对偶,
我们当然不想弱对偶了,我们想要强对偶呀$p^* \leq d^* $,</p>
<p>那么就引出俩事:</p>
<ul>
<li>对于原问题是凸问题(就是原函数和约束函数都是凸函数),很容易就是强对偶,只要满足Slater条件(据说这个条件非常容易满足)</li>
<li>对于原问题不是凸问题的,这个就得满足KKT条件,就是那一大堆变态条件</li>
</ul>
给弟弟们的话
2018-01-22T00:00:00+08:00
https://www.piginzoo.com/life/2018/01/22/the-words-for-little-brothers
<p><strong>引子</strong></p>
<blockquote>
<p>上午和弟弟们在群里聊了很多,晚上回想,很多讲的极端了些,所以晚上又去嘚啵了一番,想把自己的一些感受说给他们,希望能对他们有所帮助。不知不觉地码了这么字,想来这些文字就会消失在聊天记录里,觉得可惜,搬到这里来,留个念想。
其实,这些文字不仅仅是写给他们的,也是写给自己的,人有时候就是这样,在给别人倾诉的时候,往往是自己在梳理自己的过程。</p>
</blockquote>
<p>其实,爸妈们一直都不明白一个道理,就是其实她们会带给还自己一辈子的影响,小时候很多父母无意识的“暴行”或者行为,会植入到孩子的潜意识里,对孩子产生极其深远的影响。比如我爸小时候常教训和体罚我 ,而且一直不在我身边,从我8岁就离开,18岁才回来,他的缺失对我影响极其深远,比如在自信、自律、社会价值认同、自尊水平各方面都影响极其深远,我其实花了很多时间和功夫,来克服我性格中的缺陷。</p>
<p>我爸小时候只有寒暑假才回北京,然后就是暴揍我一顿,找各种理由,他后来的解释是,如果不威慑我的话,我根本不会老老实实地学习,他不在身边,不给我威慑,根本镇不住我,我就可以可能学坏。我是我们周边孩子里(也就是他战友里)唯一一个考上大学的孩子,这一直是他的骄傲。在世俗的成功概念上,他是成功的,也确实给我带来不一样的人生,这点我是承认的。但是,给我造成的影响和伤害,也是非常深远的,只是,他可能永远不会意识到,我也不愿意和他去聊这些,估计直到他离开这个世界,我可能都不愿意去跟他聊这些。</p>
<p>你们其实内心深处都有我一样的困惑、迷茫和痛苦,还是李笑来那句话,“相信我,你并不孤独”。为什么父爱缺失就会形成成瘾性人格,为什么母爱缺失,孩子就会胆怯缺乏自信,这些其实都是心理学上早就被认知的道理,只是我们的爸妈,她们永远没有机会习得这些知识,这些心理学的知识,其实,100年前,佛洛依德、阿德勒、荣格,这些人就已经深刻地意识到并进行了系统的阐述,可以去翻翻她们的书,知乎上也一堆堆这方面的讨论,而且,樊登现在也开始兜售这些知识,给傻逼呵呵不愿意看书的中产阶级们。即使是这样,很多人还是认识不到,还是生活在心灵的黑暗森林里,不自知,不明了,继续戕害自己和孩子们。真的是挺可悲的一件事。</p>
<p>我上午用极其夸张的口气和态度,去评价我们的父辈,其实是不公平的,她们给了我们生命,我们血脉里就是要传承他们的基因,我们是有责任去继承她们的一切,并且延续下去的,你们去看一下《自私的基因》,就会深刻的明白,我们这些人,只是基因的载体而已,基因的延续,才是大自然让我们存在,甚至思考的原因。活着就是为了完成这个任务。我用这种口气,去批判他们,去贬低她们,为什么?因为,这样中二的你们可能才能听进去,才能表示认同。年轻其实真的很美好,但是也有妄大的一面,有面对这个世界的时候,所固有的年轻人才会有的狂妄,其实这种狂妄挺好的,但是,把控不好,就是很傻逼的自我,会吞噬一个人清醒的心灵,可怜的是,大部分人都会被这种情绪左右一段时间,否则,也不会有这个“中二”这个词。</p>
<p>我推荐你们去看一下,《少有人走过的路》,一本高级心灵鸡汤书,其实对你们这个年龄非常好,让人平和,让人感知,让人自省,让人坚强。我十分遗憾的是,我年轻的时候,没有这么一个老大哥能给我讲这些,我们家庭里缺少我这样的引路人,我现在才明白,人生其实长着呢,二十岁其实人生才刚刚开始,千万别陷在一种极端情绪里,给自己下个定义,给自己套个套子。</p>
<p>@浮 ,谁说你就是加油站里的一个普通工人,你对这个社会的善意和细腻其实让你与众不同。@晨 ,谁说你就走不出爸妈的笼罩,弥补不了小时候成长的阴影,你这些年背负的抱负该卸下来了,去走下一段人生了。@B,你是家庭最幸福,爸妈最和睦的家庭,被爱包裹的孩子,其实心智上是最成熟的,你最小,应该有最大的可能性的人生和最大的潜质,@TK,你其实一直在动漫这块有极其大的热爱和天赋。只不过,你们的爸妈,看不到,她们可能也不会去学习如何教育孩子,但是有一点,你们得相信,她们是深深爱着你们的,这点就足够了。你们越大,你们会越体会到这点的珍贵和重要性。</p>
<p>你们的阶级其实已经开始慢慢固化,中国已经完成了波澜壮阔的30年的发展史,慢慢地进入一个稳定期,如果你读历史,你会知道,中国就是 ,刚经历了20世纪20年代的美国,80年代的日本,后面就是超级稳定的社会阶级固化,或者日本一样的失去的十年,你们可能会经历中国历史上的一段经济低迷期,可能毕业就会失业,可能过几年就会失去现在饭碗,你如果看看90年代的中国那波下岗潮,几千万正当年的国企员工失业,铁饭碗都可能被砸烂,你就会明白我说的不是危言耸听,你们可以看看电影“钢的琴”,就会感受到那种绝望。你们觉得我厉害吧,计算机技术又好,心智又成熟,又超级能学习,又自己开过公司,但是我告诉你们,我其实已经在家待业一年了,找一个好工作真的很难。而我自己那个小公司 ,一直挣扎在倒闭的边缘,所以我才不愿意煎熬,去选择打工。我尚且如此,就业环境最好的北京尚且如此,想想如果中国经济掉头向下,得是多么可怕的景象。</p>
<p>我对政府、对集权有着极大的警惕,如果经济掉头向下,大范围下岗,社会开始动荡,他们会毫不犹豫地选择再搞一次大的运动,类似于WenGe,来转移社会矛盾。你以为我们的父辈傻,被毛爷爷这么洗脑,我告诉你们,在大浪潮里,人都会变得愚蠢和失去清醒。推荐你们去看部电影“浪潮”,你就能明白人是怎么被一步步洗脑的。其实,任何一个时代的人都不傻,只是野心政治家,实在是太善于利用群体的无意识,这点《乌合之众》这本书里早就讲透了。</p>
<p>你们能改变自己人生,上升一个或几个阶级的最有效的办法就是学习,你们同龄人很多已经丧失学习能力了,这辈子其实基本上已经定型了。我说的学习不是只单纯的看书读书,包括你去思考,去感知,去实践,去虚心请教,是一个广义的。你一定不要让自己的心智固化,要不断地打破自己的认知边界,不断地去挑战自己的心理舒适区,去尝试各种可能性,去试错(年轻真好,试错成本低,岁数越大试错成本越高)。但是一定要注意风险把控,不要!不要!不要!去尝试传销、黄毒黄、高利贷现金贷。小尝试,不要投入太大,风险一定控制的住,但是要不断地试。逼着自己不断地逃离自己现有的心理舒适区和认知范围。所以,你们在这里面,改变最大的可能性排序是,邢>牛>田>亚,不过亚也不用绝望,你是远远大于我的,哈哈。</p>
<p>但是!但是!但是!</p>
<p>你们去读读《少有人走过的路》,第一个条就是自律,你做不到自律,你的人生就真的完了个蛋了,操了个蛋了,所以,我才取名这个群,叫操蛋的人生。也就是这个书名,为什么叫少有人走过的路,因为,这第一条就无情地淘汰了大部分人。即使是我,都在自律方面做得狠痛苦,我现在还是在和自己的懒惰做斗争,我每天都尝试坚持锻炼30分钟,听一段英语听力,坚持看书,坚持不冲儿子嚷嚷,难啊,真的是很难,但是,这其实就是一种修炼,人生一辈子不就是这样么,否则,活着的意义究竟何在呢?就是这么在大众,在几十亿人里面,匆匆地走过这一生么,我不想这样,我想至少留下点什么,最最少,也是临死前,一种充实的回忆。</p>
<p>跟您们唠叨半天,能看这里的,都还是有自我救赎希望的,记住我说的,你们的人生才刚刚开始,我即使到现在,我都这个岁数了,还是心中充满希望。我为什么给你们讲这些,因为,你们是和我有同样基因的人,我们有着天然的相同的基因在身体里流动,让我们有了共同的感情和命运,你们的爸妈都是我除了我爸妈之外,最深爱的人,她们虽然有各种各样的缺点和问题,但是都是我最爱的人。正是有了这些,才让我在这个世界上不那么孤独,才有了各种各样的连接。唉,有时候,看着我爸都已经花白的头发,小时候的那些阴影都烟消云散,天高云淡了,什么他妈的结,就是自己的心魔而已,说到底。</p>
<p>你们还没有家庭,没有孩子,你们人生其实还残缺的狠,但是,同时又是我说的,才刚刚开始。抱着希望,充满自律,自信但是小心翼翼的上路吧。多年以后,你们想起我说的这些话,会有所体会的。</p>
从RNN到LSTM,到Attention
2018-01-20T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/01/20/rnn-lstm-attention
<p>#从RNN到LSTM,到Attention</p>
<h2 id="概述">概述</h2>
<blockquote>
<p>前言:看官看着可能会有点累,因为非常乱,恩,就是挺乱的,我主要的目的是给自己做个回忆笔记,我主要是在冲着自己嘚逼嘚逼呢,就是自己的一个自己冲自己的唠叨笔记,如果能帮上您,得嘞,就不用谢我了,要是觉得没啥用,就放开我,去网上寻找更多这类文章,有的写得确实不错,包你爽,我这里也都做了不少索引,可以顺着找找。</p>
</blockquote>
<p>突然对RNN开启的这套时序预测学习感兴趣,之前听过,忘的差不多了,回过头来,想沿着把这些知识捋一捋,这么个线索:</p>
<blockquote>
<p>RNN->LSTM->Attention->Tensorflow实践</p>
</blockquote>
<p>李宏毅老师的课是讲的最好的<a href="https://www.bilibili.com/video/av13333557/">https://www.bilibili.com/video/av13333557/</a>, 第六课《6-Neural Network with Memory 》,可以直接跳过去看,之前的不感兴趣可以直接跳,不影响理解。顺道吐槽下,这些讲课的老师里面,李宏毅老师是最有意思的,还有让我印象深刻的是七月在线的</p>
<p>讲LSTM的<a href="https://www.jianshu.com/p/9dc9f41f0b29">https://www.jianshu.com/p/9dc9f41f0b29</a>这片不错,貌似作者是个高产户,还翻译了一个开放文档《神经网络与深度学习》,可以关注下。不过,他翻译的也是2015的那篇经典的LSTM扫盲文<a href="http://colah.github.io/posts/2015-08-Understanding-LSTMs/">http://colah.github.io/posts/2015-08-Understanding-LSTMs/</a>。</p>
<p>还有这篇,讲的也非常好,必须mark一下
<a href="https://www.cnblogs.com/surfzjy/p/6715150.html">https://www.cnblogs.com/surfzjy/p/6715150.html</a>
<a href="https://zhuanlan.zhihu.com/p/28054589">https://zhuanlan.zhihu.com/p/28054589</a></p>
<p>突然脑洞开,感觉HMM和RNN结构上很像啊,都是处理序列的,于是百度一下,发现了这篇<a href="https://www.zhihu.com/question/57396443">https://www.zhihu.com/question/57396443</a></p>
<blockquote>
<p>马尔科夫网,那是无向图模型,概率图模型的两大类之一(另一大类是贝叶斯网,有向图模型)。HMM是一种特殊的马尔科夫网。神经网络可以看成特定的概率图模型。马尔科夫网和RNN根本不在一个概念层面上。</p>
</blockquote>
<p>RNN经典论文,虽然还是看着费劲,先mark一下,放在这里,以便日后阅读:
<a href="http://xueshu.baidu.com/s?wd=paperuri%3A%28cb1c00013984e949848a590d83fd5c06%29&filter=sc_long_sign&sc_ks_para=q%3DRecurrent%20neural%20network%20based%20language%20model&sc_us=11768397167875898323&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8">Recurrent neural network based language model</a> RNN用在语言模型上的开山之作.</p>
<h2 id="rnn">RNN</h2>
<p>好吧,闲言碎语不要讲,赶紧表一表我们的RNN了。</p>
<p>DNN不是挺好的嘛,干嘛还要RNN呢?处理时序问题!</p>
<p>李宏毅老师讲的这个例子,通俗到发指,建议去听一下。这是一个类似于加法进位的例子,看!需要记忆之前的输入了,也就是进位。每次的进位都是一个需要被记住的数,这个数如果不记住,那么这个network就train不出来:</p>
<p><img src="/images/20180120/1514855296892.png" alt="" width="50%" /><img src="/images/20180120/1514855348822.png" alt="" width="50%" /></p>
<p>DNN会对数据进行shuffle,说白了,我有x1,x2,x3…xn个数据,你灌谁输入都行,我期待的y也是独立的,但是,RNN不是,x1,x2,x3…xn之间就必须按照一个顺序来,不能颠倒,这样你预测出来的y序列也是有顺序的。注意x1-xn都是向量。
以翻译为例子可能比较好理解,每个中文,对应每个英文,每个中文词,其实都是一个独立的数据,对应为$x_i$,他本身就是个向量,比如使用word2vec词向量,这一对的词向量,就需要按照顺序对应,然后才能输出对应的一个英文的词向量输出,也就是翻译结果。
RNN是一个句子都输入完才是一个整个输入,也就是说,书的多个数据,必须打包在一起,按照严格的顺序,一起灌入。
<em>我过去曾经有错觉,以为整句话是一个输入数据呢,自己还意淫出一个“句向量”的概念。</em></p>
<p>那中间存放的Memory Cell里面存什么?</p>
<ul>
<li>是一个数,对应到多维就是一个向量</li>
<li>这个向量是变的,会被更新,之前的那个就被丢弃了</li>
<li>每次的y输出其实都要打包收集起来,最终这个y<strong>序列</strong>是最终的输出结果</li>
</ul>
<p>RNN的memory就是个向量。对,是向量!我还以为这个memory多大呢?!原来就是个向量,大失所望啊,呵呵。那么这个向量多少维度呢?好问题。</p>
<p>上图,剖析一下<strong>一个RNN神经元</strong>内部的构造:</p>
<p><img src="/images/20180120/1503970737514.png" alt="" width="50%" /></p>
<p>a1=$\sigma$(Wi<em>x+ Wh</em>m)</p>
<ul>
<li>Wi是一个隐藏层的权重矩阵,</li>
<li>Wh是memory向量对应的权重矩阵,</li>
<li>m是记忆向量</li>
</ul>
<p>y1=$softmax$(Wo*a1)</p>
<ul>
<li>Wo是上一个$softmax$的权重矩阵</li>
<li>a1要被copy到memory向量里面</li>
</ul>
<p>灌入过程前向计算的过程,就是输入x1,x2,x3….xn,然后得到y1,y2,y3,…yn的过程,
其中Wh,Wi,Wo在这一次次输入训练中是不变的,但是memory是变的,每输入一个Xi,就会导致memory向量对应的改变,直到这个向量序列结束(说的就是x1—xn,向量序列),对应产生y1—yn的向量序列。</p>
<p><img src="/images/20180120/1503973214567.png" alt="" width="50%" /></p>
<p><strong>输出是概率,输出是概率,输出是概率</strong>,说三遍。
输出是经过softmax之后的分类别的概率。其实是说给自己听的,怕自己忘记。</p>
<p><strong>[ 适用范围 ]</strong></p>
<p>RNN都解决哪些类的问题呢?</p>
<ul>
<li>比如N:N: 严格1对1,如POS词性标准、实体识别、信息提取</li>
<li>比如N:1,比如文章的情感识别,正面文章还是负面文章,就是1个判断结果</li>
<li>比如1:N,比如图片的看图说话,输入是一个图片的所有的像素组成的一个向量,输出是一堆的文字向量</li>
<li>比如M:N,如seq2seq,不再是经典RNN的每个字/词都要对着,而是M:N的关系,可多可少,不过没听懂他说何时断掉,因为他的那个例子“machine learning”-> “机器学习习惯好…”后面的序列可以一直产生下去呀(因为不是1对1嘛),李宏毅老师说,要给翻译结果一个中断符,不过怎么给,没听明白???</li>
</ul>
<p><img src="/images/20180120/1515120665422.png" alt="Alt text" width="100%" /></p>
<p>关于这个输出的1:N, M:N啥的映射,看这篇:<a href="https://zhuanlan.zhihu.com/p/28054589">https://zhuanlan.zhihu.com/p/28054589</a></p>
<p><strong>[ 损失函数 ]</strong></p>
<p>损失函数就是,对应的y-hat和y的cross entropy(交叉熵)。李宏毅老师讲课用的是均方误差,但是实际上生产中都用交叉熵。怎么个交叉熵法呢?[关于交叉熵,可以参考我的另一篇<a href="http://www.piginzoo.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2018/01/03/cross-entropy-kl">关于交叉熵的博文</a>,说白了就是对比输出的y序列和你用RNN计算后的序列$\hat y$这两个分布的差异性,$y$序列和$\hat y$实际上可以被看做是两个分布,</p>
<p><code>这个是李宏毅老师的损失函数(均方误差)</code></p>
<p><img src="/images/20180120/1503973399438.png" alt="" width="50%" /></p>
<p><code>这个是交叉熵的损失函数</code></p>
<blockquote>
<p>$L(y,\hat y) = \frac{1}{N} \sum_{n \in N} y_n log\hat y_n$</p>
</blockquote>
<p>这个地方,有个坑,需要解释一下,这个是原始论文里面摘录出来的,最后输出的$\hat y$
是通过一个softmax函数得到的,我们都知道,softmax是一个对多分类输出一个每个类别上概率分布的函数,为何要这么做呢?像李宏毅老师那样直接输出个线性的$\hat y$不好么?李宏毅老师那样写Cost function有问题么?脑中迸发出这一列问题。
自问自答一下,用softmax是因为,原始RNN论文是为了解决自然语言处理,在处理自然语言的时候,他每次输出的其实都是一个词表维度相同的N维概率向量,代表每个词可能是的概率。
比如翻译英文,我有样本数据(i love beijing tian an men->我爱北京天安门):</p>
<ul>
<li>第一个时刻$t1$,输入为“i”,预期(也就是样本输出数据提供的)是“我”,RNN模型根据这个信息计算出$s_1$,不过RNN最后还要softmax跑出来输出了一个词表向量,可能会在“我”这个维度上值稍微大一些,当然也可以小。这样,这个标签数据和输出数据就产生了差,这个差未来就可以用作反向调整所有的权值。
(样本输出数据为“我”,对应概率向量就是在“我”这个词的维度上为1,其余都是0)</li>
<li>第二个时刻$t2$,这个时候输入是“love”,对于RNN来说,这个时候,输出的softmax就依赖于两个输入啦,一个是新输入的“love”,还有是上一个时刻的输出的中间量$s_1$,两者共同作用,才得到了$s_2$</li>
</ul>
<p>(s是中间结果,做softmax之前,下面图有说明)</p>
<ul>
<li>然后是第三个“北京”,依赖于输入的“beijing”和上一个状态输出值$s_2$</li>
</ul>
<p><img src="/images/20180120/1515122449746.png" alt="" width="50%" /></p>
<p>扯的有点多了,那么最终再来看RNN的交叉熵损失函数,就是把各个样本的词表概率和RNN输出概率做交叉熵,但是我们知道,样本输出概率是一个one-hot编码,也就是对应的输出词上是1,所以,$y_n log\hat y_n$ 就变成了$log\hat y_n$ ,$y_n$ 是1嘛。最终,损失函数简化为了:</p>
<blockquote>
<p>$L(y,\hat y) = \frac{1}{N} \sum_{n \in N} log\hat y_n$</p>
</blockquote>
<p><strong>[ 训练过程&BPTT ]</strong></p>
<p>该训练了,训练过程还是使用梯度下降。
RNN的训练有点小麻烦,那就是你得考虑之前的所有的状态。</p>
<p>RNN训练和DNN的BP不同的是,他的W要反复被更新,这个是因为某个$y_i$需要依赖于$a_i$,$a_i$又依赖于前面的$a_{i-1}$,就依赖于之前的$w_{i-1}$,….,然后递归向前。
w其实只有一份,所以每次更新的时候(就是每一层),都会更新这个w,这也是就是大家常说的,RNN的参数w是共享的。
举个例子,$y_3$是由$a_3$决定的,而$a_3$是由$x_3$和$a_2$一起决定的,而$a_2$是由$x_2$和$a_1$一起决定的,最后,$a_1$是由$x_1$决定的,这样,一个$y_3$的结果,实际上是由$x_1,x_2,x_3$一起决定的,感受到了吧。
这种不停往前倒腾的方法,就被起了个名字叫BPTT(back propagation through time)</p>
<p><img src="/images/20180120/1504056732629.png" alt="" width="50%" /></p>
<p>还有一点,可以直观感受到,越往前的$x_i$对当前的y输出影响越小,当前的x输入影响是最大的。
这块常常晕,感觉每次RNN里面的东西是变的,仿佛权值w也是变得似得,不是的。w在整个input数据序列过程中是不变的,变的是memory,这点不能晕。</p>
<p><strong>BPTT</strong></p>
<p><img src="/images/20180120/1504056651034.png" alt="" width="50%" /><img src="/images/20180120/1515135265604.png" alt="" width="50%" /></p>
<p><a href="https://www.cnblogs.com/zhbzz2007/p/6339346.html">参考</a></p>
<p>我们看看这个过程:
首先是损失函数,不用L了,用E来表示:$E_{t}(y,\hat y) = -\sum_t log(\hat{y_{t}})$
然后对每一个w求偏导,然后得到偏导值 乘以 一个步长值,更新w,寻找极小值点。恩,还是之前那个套路。
但是,but,你把这个偏导求一求,展开一下就发现不是那么容易。
我们前面其实已经讨论过了,你求第t个的值,实际上是有1..t-1所有的输入和输出都要相关的,那么你要求这个t时刻的E的时候,就得循环把前面的都求出来。
比如:</p>
<blockquote>
<p>$E_t= log(\hat y_t)$</p>
</blockquote>
<blockquote>
<p>$\hat y_t=softmax(s_t)$</p>
</blockquote>
<blockquote>
<p>$s_t=\sigma(a_t)$</p>
</blockquote>
<blockquote>
<p>$a_t = w_i x_t + w_h s_{t-1}$</p>
</blockquote>
<p>说明:</p>
<ul>
<li>w_i是输入层的参数</li>
<li>w_h是隐层参数,也就是和上一时刻的$s_{t-1}$相乘的参数</li>
</ul>
<p>以$E_3$为例,链式法则,会让他一直倒腾到$s_0$,因为每个$s_t$都包含权值w:
$\frac{\partial E_{3}}{\partial W}=\frac{\partial E_{3}}{\partial \hat{y_{3}}} \frac{\partial \hat{y_{3}}}{\partial s_{3}} \frac{\partial s_{3}}{\partial s_{2}} \frac{\partial s_{2}}{\partial s_{1}} \frac{\partial s_{1}}{\partial s_{0}} \frac{\partial s_{0}}{\partial W}$</p>
<p>而,整个损失函数求导,是
$E=\sum_{t} E_t$,恩,每个$E_t$计算完了,都加到一起。越往后的E,计算约复杂,约需要把前面的相关的都求导一遍。就是后面的都是前面的一个嵌套,越往后约复杂,所以训练数据越长,计算量越大。
形象写一下,就是
$E = E_0 + E_1(s_0)+ E_2(s_0,s_1)+ E_3(s_0,s_1,s_2)+ ….+ E_t(s0,…,s_{t-1})$
没那么严谨啦,只是表示一下。</p>
<p>RNN的训练不好训练,狠困难,据说是“the error surface is rough”,就是他的cost函数不是平滑的凸函数,而是崎岖或者陡峭,不好训练。</p>
<p><img src="/images/20180120/1504057030330.png" alt="" width="50%" /></p>
<p>这么一个损失函数,有个很大问题,具体我也没去试验过,说是存在</p>
<p>RNN的Training没有特别好的方法,只能有一些最佳实践方法:
NAG,RMSProp,没有详细关注,未来用到再说。</p>
<p>LSTM有效地解决了RNN的gradient vanish问题???</p>
<h2 id="lstm">LSTM</h2>
<p>LSTM要解决RNN的啥问题?</p>
<p>主要是为了解决长依赖问题,RNN可以解决对之前上下文的依赖,但是,只能离的比较近的上下文,对于离的比较远的上下文,他就无能为力了。LSTM通过一个变态的3门结构,可以将一些前文中的重要信息,一直保留到她们后面被需要的地方。</p>
<p>门上的信息通不通过,靠的是sigmoid函数,它的输出是0-1的概率值,它跟把锁一样,让信息是否通过。</p>
<p><img src="/images/20180120/1514948382146.png" alt="" width="50%" /></p>
<p><strong>[ 三重门 ]</strong></p>
<p>LSTM,<code>3个gate(门)</code></p>
<ul>
<li>一个管是不是改把上次的输出输入到memory cell里:<code>输入门</code></li>
<li>一个管是不是把memory cell的值吐给下一次序列:<code>输出门</code></li>
<li>一个管是不是把memory cell里面的记忆之清空:<code>忘记门</code></li>
</ul>
<p>之前RNN提过,越往前的输入影响越弱,有了这3个门,我可以控制离我近的输入所产生的影响,比如我保留上上上次的输出,而选择忘记上次和上上次的输出,这样就可以让远处的输出保持比较强的影响力。</p>
<p>李宏毅老师为了简化,把3个门都简化了,而生产中的一般LSTM相对复杂一些,</p>
<p><code>李宏毅老师版本</code></p>
<table>
<tbody>
<tr>
<td><img src="/images/20180120/1514949034379.png" alt="" width="100%" /></td>
<td><img src="/images/20180120/1514949428603.png" alt="" width="100%" /></td>
</tr>
</tbody>
</table>
<p>这个是一个神经元内部结构,以及和输入连接的关系。
可以看到,各个门的输入,就是实际的输入数据$x_1,x_2….$,但是他画的有一点不好,给人错觉,这个图感觉是并行输入的似的,但是其实$x_1,x_2….$其实是顺序输入的。
这里他画了两个神经元,也可以是多个,多个的话,每个$x_i$都会灌入给每一个LSTM神经元的每一个门的。</p>
<p><code>LSTM一般版本</code></p>
<table>
<tbody>
<tr>
<td><img src="/images/20180120/1514949097459.png" alt="" width="100%" /></td>
<td><img src="/images/20180120/1514949918935.png" alt="" width="100%" /></td>
</tr>
</tbody>
</table>
<p>LSTM一般版本就复杂了一些,李宏毅老师提过,就是最终上图中的a,实际上在生产版本中,也会把上一层的输出$C_{t-1}, h_{t-1}$,合并到下一层的输入中,继续使用。啥叫合并,就是把输入$x_i$和$h_{t-1}$俩向量做一个并,变成更大维度的一个向量,灌入。</p>
<p>如上图所示。我觉得,上图第一个那个画的不好,感觉跟有3个神经元似得,其实不是,就一个,我下面用红线勾勒了一个我认为的样子,就是把这次得到的$C_t$接入到下一个的输入,$h_t$也是。</p>
<p>不过这里有个问题,你看宏毅老师的那个图,有个Cell的单元,缓存着这次的需要记住的Cell变量,但是LSTM这图里面,我没有看到,文章里也没提到缓存区的概念。因为$x_i$灌入的时候,是一个…吧嗒吧嗒…下一个,这样一个个按顺序输入的,要是没有缓存到某个地方,它怎么能顺利交接给下一个$x_{i+1}$进行运算呢。这个是问题,回头找明白人问问???</p>
<p><strong>[ 4个步骤 ]</strong></p>
<p><img src="/images/20180120/1515202155459.png" alt="" width="80%" /></p>
<ul>
<li>Step1
忘记门,你看它输出是一个是否忘记的概率,越接近0,越偏向于忘记。这个门是由什么决定的,上一次的输出$h_t$和本次的输入$x_t$,注意注意,是上次的输出$h_t$,而不是上次的$C_t-1$,诡异吧,论文就是这么设计的,不知道为何(不是我说的,July寒老师这么评论的)
[$h_{t-1},x_t$]是把两个向量做了拼接。
对了,忘记啥东西啊?这点忘说了。忘记的是,上一次的状态,是不是让上一次的状态就过来了,然后和这一次的状态一起做个线性组合,变成下一次的状态,喂给下下次。</li>
<li>Step2
准备新的信息,和信息通过的概率
$\bar C_t$就是生成新的信息,为何用tanh函数,据寒老师说,是为了BPTT的时候不至于梯度爆炸,不解?
$i_t$又是生成一个概率值,多大程度上接受这些新知识,所以,下一步就会看到 $\bar C_t$ * $i_t$ ,对了,这个式子很像忘记门啊,不过细看,不是一回事,对应的权值不一样,他是$W_f$,我是$W_i$,各玩各的,各为其主。</li>
<li>Step3
得到最新的“记忆”内容,也就是$C_t$,他实际上是上一个$C_{t-1}$和刚才挑选出来的新信息$\bar C_t$,$C_{t-1}$乘以忘记概率$f_t$,$\bar C_{t}$乘以接受概率$i_t$,得到最终的本次要记忆下来的内容。
寒老师说,这个加法,可以避免RNN反向求导的时候,由于连乘导致的梯度消失的问题,不解?</li>
<li>Step4
最后一步,输出的时候,再来一个概率判断$o_t$,才输出</li>
</ul>
<p>LSTM变种很多,不过效果都大同小异。</p>
<p>接下来,老规矩:损失函数、如何训练</p>
<p><strong>[ 损失函数 ]</strong></p>
<p><strong>[ 如何训练 ]</strong></p>
<p><strong>[ 一些变种 ]</strong></p>
<p>一个序列训练完就做BPTT么?还是整个都完成一批,才做一次?</p>
<h2 id="attention">Attention</h2>
<p>她们都是这么说的,过去的RNN、LSTM,都是把一个序列先灌给训练好的模型,我是说在预测过程中(不是训练),然后呢,等着这一个序列,比如8个英文单词,每个词向量都顺序灌入后,得到一个输出,这个输出了不得,了不得,据说隐藏着这个8个单词内的无穷信息,就是这么神奇,一个向量竟然藏着8个词的神魄,服了。然后用这个神魄,再交给网络,吐出后面的8个的词的翻译,这个翻译可能是4个汉字词组组成的。恩,这就完成了一个8英语单词—>4个汉字词语组成的翻译句子。
还是得看这篇<a href="https://zhuanlan.zhihu.com/p/28054589">https://zhuanlan.zhihu.com/p/28054589</a></p>
<p><img src="/images/20180120/1516430748957.png" alt="" width="50%" /></p>
<p>你知道吧,网上那些讲Attention的帖子,他们丫一讲LSTM,RNN不好的时候,就拿Seq2Seq的Encoder-Decoder模型说事,我也确实也不明白,也只好这么听着,将来我搞明白了更多的东西,再来反思她们说的对与否,留下这个文字给自己提醒。(其实RNN是N:N,严格对应,难道就没有M进行到一半或者1/3,就输出N的模型呢?不过也是哈,太随意这模型可怎么做呀?要么严格N:N,要么先把输入都灌进去-M,然后,一口气输出N,恩,也只有这么理解了)。</p>
<p>总之,就是,这个么个神魄,其实是敲错了,魂魄,妈蛋,懒得改了。就是上图中的黄色的$c$,她们觉得太压缩了,太浓缩了精华,不好,一定要在后期翻译的时候,也就是h1’,h2’,h3’,输出的时候,把原来的x1,x2,x3,x4都带着,</p>
<p><img src="/images/20180120/1516431265366.png" alt="" width="50%" /></p>
<p>瞧,就跟着给似得,其实完全可以啊,但是,注意,但是,她们又觉得,虽然在翻译阶段,你给了之前的输入,这些输入应该是重点的,比如</p>
<blockquote>
<p>i love beijing tian an men=>我爱北京天安门。</p>
</blockquote>
<p>翻译“爱”的时候,love这个词明显最重要嘛!所以,这个时候,我们要是把注意力Attention集中到love身上,这才符合正常人类的思维习惯嘛,所以,每次再把这x1,x2,x3,x4(上上图中)灌给输出阶段,也就是翻译阶段的时候,每次告诉这个网络,你丫应该关注哪个输入的词。
所以,我赶紧补刀一下,你看,Attention每次就是一个概率向量,维度就是你输入的那个x序列的个数,每个维度,标明这个x1,x2,x3,x4四个词,我应该重点关注哪个词,通过概率体现。</p>
<p>接下来把李宏毅老师的思路捋捋,</p>
<p><img src="/images/20180120/1516433571676.png" alt="" width="50%" /></p>
<p>先用某种方法(李老师说了3中,余弦相似度、神经网络、矩阵变换,就是那个match),将翻译过程中的隐层输出+一个$z$,得到一个$\alpha^1)$,z是啥?z是另外一个RNN的隐层,你听不懂吧?没关系,后面你就明白了。</p>
<p><img src="/images/20180120/1516433883824.png" alt="" width="50%" /></p>
<p>根据$h^1,h^2,h^3,h^4$,得到$\alpha^1,\alpha^2,\alpha^3,\alpha^4$,softmax她们,得到一个$c^0$,然后用$z^0+c^0$,通过一个RNN神经元(也可以是LSTM神经元,都行),得到一个新的隐层输出$z^1$,再经过$z^1$,输出一个结果,是个softmax的概率分布,这里再冲自己唠叨一下,y1=softmax(z1)</p>
<blockquote>
<p>知乎上的王赟大神说的:每个时刻的输入都是一个向量,它的长度是输入层神经元的个数。在你的问题中,这个向量就是embedding向量。它的长度与时间步的个数(即句子的长度)没有关系。
每个时刻的输出是一个概率分布向量,其中最大值的下标决定了输出哪个词。</p>
</blockquote>
<p><a href="https://www.zhihu.com/question/41949741?sort=created">跳过去</a></p>
<p><img src="/images/20180120/1516434571744.png" alt="" width="50%" /></p>
<p>你看!右边整个一个RNN啊,只不过,隐层变成了z,这个z每次还要在返回到左边的RNN上,去参与$alpha$的计算,你看,简直是在两个维度空间穿梭呀。</p>
<p>总结一下李宏毅老湿讲的内容吧:
就是先用你开始train的那个输入rnn的输出$h$加上一个另外一个输出rnn的隐层输出$z$,干出一个$\alpha$,挨个干每个输出得到一堆$\alpha_x$,softmax她们丫呢,得到一个概率向量$\hat{\alpha}$,维度是输入的个数,然后类似于求期望值,把$\sum \hat{\alpha}h^i$,得到$c$,用$c$和$z_{t}$通过一个RNN,得到下一个$z_{t+1}$,进而得到输出$y$。</p>
<p>真的是复杂死了,总之,就是,每次的结果,都是对输入进行“关注attention”后,得到重点(概率分布)后,得出结果。并且,这个隐层会帮助产生下一个“关注”。</p>
<p>Attention,实际上是两个RNN,输入的RNN,关注(Attention)+输出的RNN。</p>
<p>以下帖子,对我理解帮助很大,必须围观:</p>
<p><a href="https://zhuanlan.zhihu.com/p/22081325">https://zhuanlan.zhihu.com/p/22081325</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/28054589">https://zhuanlan.zhihu.com/p/28054589</a></p>
<p><a href="http://www.cosmosshadow.
com/ml/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/2016/03/08/Attention.html">http://www.cosmosshadow.com/ml/…/Attention.html</a></p>
<p><a href="http://blog.csdn.net/malefactor/article/details/50550211">http://blog.csdn.net/malefactor/article/details/50550211</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/27743442">https://zhuanlan.zhihu.com/p/27743442</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/31547842">https://zhuanlan.zhihu.com/p/31547842</a></p>
<p><a href="https://www.jianshu.com/p/8156c1d07a95">https://www.jianshu.com/p/8156c1d07a95</a></p>
熵、联合熵、条件熵、互信息、KL散度(相对熵)、交叉熵
2018-01-03T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/01/03/cross-entropy-kl
<p>为什么写这篇文章?</p>
<p>主要是这几个概念太重要了,对机器学习,但是又往往容易混淆,网上的文章散落,少有聚合到一起的,我自己学习过程中,有自己的一些理解。这些,都催生要写一篇把这些概念总结、澄清的文章,留作笔记,也分享给广大机学爱好者。</p>
<h2 id="信息量">信息量</h2>
<p>$I= log_2(\frac{1}{p(x)})=-log_2(p(x))$
就是对概率小的编码量就大,概率大的、使用频次高的信息编码大,这样,使得整个信息存储空间最小。所以,I通俗就是编码量,就是不确定性,混乱程度,都是一个意思。</p>
<h2 id="熵">熵</h2>
<p>$H(X)=-\sum_xp(x)log_2(p(x))$
信息量取期望,说白了就是衡量一下这个系统的平均混乱度。熵越大,混乱度越大,越不确定。那个曲线人人都知道,就不画了,熵在$p(x)$取x=0.5时候取得最大为1。</p>
<h2 id="联合熵">联合熵</h2>
<p>$H(X,Y)=-\sum_xp(x,y)log_2(p(x,y))$
这个没啥好说的,熵的两个随机变量的升级版,呵呵</p>
<h2 id="条件熵">条件熵</h2>
<p>$H(X|Y)=-\sum_{x\in X,y\in Y}p(x,y)log(p(x|y)$
为何前面是p(x,y),而不是条件概率呢?</p>
<blockquote>
<p>可以参考<a href="http://blog.csdn.net/xwd18280820053/article/details/70739368">http://blog.csdn.net/xwd18280820053/article/details/70739368</a>的推导</p>
</blockquote>
<p>这个条件熵,可以理解为:Y给定后,X的信息熵就被减少了,剩余的这个混乱程度就是这个条件熵。</p>
<h2 id="互信息">互信息</h2>
<p>$I(X;Y)=\sum_{x\in X,y \in Y}log\frac{p(x,y)}{p(x)p(y)}$
$I(X;Y)=H(X)-H(X|Y)$
互信息就是,Y这个变量引入后,X变量的熵的减少量。这很容易得出一个结论,如果X,Y是相互独立,那么互信息就是0。</p>
<p><code>熵、联合熵、条件熵、互信息的关系</code></p>
<p><img src="/images/entropy.png" alt="" /></p>
<hr />
<p>……………………我是分割线…………………..</p>
<pre><code>交叉熵和KL散度和上面的信息熵、互信息和条件熵完全不是一码事,它们都是在谈论1个或者几个随机变量,但是交叉熵和KL散度,谈的则是一个随机变量,但是有多个概率分布,这些概率分布之间的差异大小就是靠KL散度(相对熵)和交叉熵来描述的
</code></pre>
<p>关于交叉熵、KL散度参考:
<a href="http://blog.csdn.net/rtygbwwwerr/article/details/50778098">http://blog.csdn.net/rtygbwwwerr/article/details/50778098</a>
<a href="https://www.zhihu.com/question/65288314/answer/244557337">https://www.zhihu.com/question/65288314/answer/244557337</a>
<a href="http://blog.csdn.net/haolexiao/article/details/70142571">http://blog.csdn.net/haolexiao/article/details/70142571</a></p>
<h2 id="交叉熵">交叉熵</h2>
<p>$H(p,q)=-\sum_xp(x)logq(x)$ <code>看!看!只有一个随机变量x,而p,q则是关于x的两种分布</code>
$=\sum_xp(x)log\frac{1}{q(x)}$<code>看!看!这个是拿q来编码p,如果不理解,看最最上面关于信息量的解释</code></p>
<h2 id="kl散度相对熵">KL散度(相对熵)</h2>
<p>$D_{KL}(A||B)=\sum_ip(x_i)log( \frac{p(x_i)}{q(x_i)})$</p>
<p>大白话,就是两种分布的差异性。</p>
<p><code>信息熵、交叉熵、KL散度的关系</code></p>
<p>$D_{KL}(A||B)=\sum_ip(x_i)log( \frac{p(x_i)}{q(x_i)})$
$=\sum_ip(x_i)logp(x_i)-\sum_ip(x_i)logq(x_i)$
$=H(p)-H(p,q)$ <code>看!就是p的信息熵减去p、q的交叉熵呀</code></p>
<p><img src="/images/cross-entropy.png" alt="" /></p>
<blockquote>
<p>上面是q所含的信息量/平均编码长度H(p)
第二行是cross-entropy,即用q来编码p所含的信息量/平均编码长度|或者称之为q对p的cross-entropy
第三行是上面两者之间的差值即为q对p的KL距离</p>
</blockquote>
<p><code>这里有个问题:为什么机器学习中,都用交叉熵,而不用KL散度?</code></p>
<p>首先说说,在多分类问题中,往往多个分类中只有一个分类结果为1,其他都为0,(one hot向量的样子)这种结果可以认为是真实概率分布;而用机器学习算法推断出来,比如softmax,往往是一个每个分类上都有归一化的结果的(一个多维度都有值的向量,但是全部相加为1),这种标签结果和机器学出来的记过,可以认为是两种分布,那么就需要一种损失函数,让这两种分布尽量接近,天然的,就看两种分布的相似度,尼玛,这不就是KL最擅长的事么!</p>
<p>但是,为毛又大家都不用KL,反倒用了晦涩难懂的交叉熵呢?</p>
<p>这是因为,丫简单,就酱紫。黑线|||3条…
真不是开玩笑,这点很重要!但是,还是有一些其他原因的。</p>
<p><a href="https://www.zhihu.com/question/65288314/answer/244557337">https://www.zhihu.com/question/65288314/answer/244557337</a></p>
<blockquote>
<p>$D_{KL}(A||B) = -H(A)+H(A,B) $
如果 $H(A)$是一个常量,那么 $D_{KL}(A||B) = H(A,B)$ ,也就是说KL散度和交叉熵在特定条件下等价。这个发现是这篇回答的重点。
既然等价,那么我们优先选择更简单的公式,因此选择交叉熵。</p>
</blockquote>
反向传播算法的理解
2018-01-01T00:00:00+08:00
https://www.piginzoo.com/machine-learning/2018/01/01/neural-network-bp-algorithm
<p>关于BP的讲解,网上文章漫天遍野,我也不想贴那么多图,一步步说了,就说一下我的一些细节困惑和理解,详细的感兴趣的可以去读那些文章。</p>
<p>先说说我看到的几篇讲BP的不错的帖子:
<a href="https://www.jianshu.com/p/c5cda5a52ee4">https://www.jianshu.com/p/c5cda5a52ee4</a>
<a href="https://www.zhihu.com/question/24827633">https://www.zhihu.com/question/24827633</a>
还有就是周志华老师的西瓜书$P_{101}$页的关于BP的讲解。
对,还推荐下《Make Your Own Neural Network》这本电子书,e文的,但是可以看懂,作者就跟你肚子的蛔虫一样,你一不明白,丫立刻就感知到,跳出来给你讲。</p>
<p>最最开始之前,有必要先回忆一下<a href="http://blog.csdn.net/xiazdong/article/details/7950084">梯度下降</a>
这篇讲的不错,为什么要梯度下降,因为,可以通过一种迭代的方式去“探测”极小值点,怎么探测呢?就是沿着负梯度方向,往前拱一小点(就是说的步长),只要是负梯度方向,就一定是Y值下降最快的方向。至于为什么梯度方向是下降最快的方向,<a href="https://zhuanlan.zhihu.com/p/24913912">参考这篇</a>, 这里用二维的来想象,一维的导数体会不出来,容易被蛊惑晕掉,提醒一下。</p>
<p>那么,对于多维,就变成了,每个维度都通过“此维度的偏导”乘以一个“步长值”,得到这个维度的分量,这些分量组合起来,就是梯度方向,那么朝着这个方向走一步,就是下降最快的。也就说,别的文章里提到的$W_{i,j}=W_{i,j}+\Delta\frac{\partial f(W_{i,j})}{\partial W_{i,j}}$,</p>
<p>这样来更新了$W_i,j^* $,也就是这个维度上的新值。</p>
<p>对了,时刻牢记,我们是在梯度下降损失函数$E_k=\frac{1}{2} * \sum_{j=1}^l(\hat(y_j^k)-y_j^k)$,那些文章反复提到了,这个函数的变量是谁呢?是那些漫天遍野的权重$W_{i,j}$,每个$W_{i,j}$都要对丫进行梯度下降的更新,然后再往里头灌打标签的数据,再得到一轮的$W_{i,j}$更新,周而复始,直到梯度下降的<strong>收敛条件</strong>成立<a href="http://blog.csdn.net/hyg1985/article/details/42556847">参考这篇</a>):也就是到达一定迭代次数,或者,梯度的模达到一个值以下,</p>
<blockquote>
<p>计算梯度$g_k=g(x^k)$当$|g_k|<\epsilon$时,停止迭代”</p>
</blockquote>
<p>引自李航教授的《统计学习方法》附录A 梯度下降法”。</p>
<p>再次友情提醒,这是一次的训练,是一次的数据灌入得到误差,然后反向梯度下降更新各个$W_{i,j}$,这个过程一圈又一圈,一圈又一圈,直到达到刚刚说的收敛条件。
这里多说一句,如果是每个样本数据灌一次就做参数更新,这种是随机梯度下降,但是要凑一波样本数据都灌入后,把误差加一起用做反向传播更新的依据,这种叫批量梯度下降,现在往往用后者,收敛快,据说(我也没经验)。</p>
<p>好啦,终于前戏够了,进入正题,看看到底怎么反向传播法。</p>
<p>先说隐层到输出层之间的参数,我只是大自然的搬运工,只码公式不说话,参考西瓜书$P_{103}$ 页:</p>
<p><img src="/images/nn-bp1.jpg" alt="" class="myimg" /></p>
<ul>
<li>$E_k=\frac{1}{2}\sum_{j=1}^l(\hat{y_j^k}-y_j^k)^2$</li>
<li>$W_{hj}= W_{hj} + \Delta{W_{hj}}$</li>
<li>$\Delta W_{hj}= - \eta \frac{\partial E_k}{\partial W_{hj}}$</li>
<li>$\frac{\partial E_k}{\partial W_{hj}}=\frac{\partial E_k}{\partial \hat{y^k_j}}* \frac{\partial {\hat{y^k_j}}}{\partial \beta_j}*\frac{\partial \beta_j}{\partial W_{hj}}$</li>
<li>$\frac{\partial \beta_j} {\partial W_{hj}}=b_h$</li>
<li>$\frac{\partial E_k}{\partial \hat{y^k_j}}=\hat{y^k_j}-y^k_j$
Sigmod函数有个性质:$f’(x)=f(x)(1-f(x))$,所以</li>
<li>$\frac{\partial \hat{y^k_j}}{\partial \beta_j}=\hat{y^k_j}(1- \hat{y^k_j})$</li>
</ul>
<p>最后,都组合到一起,得到:</p>
<p>${\Delta}W_{hj}=-\eta* (\hat{y^k_j}-y^k_j)* \hat{y^k_j}* (1- \hat{y^k_j})* b_h$</p>
<hr />
<p>…………………………分割线………………………</p>
<p>好,输出层和隐层之间的权重$W_{hj}$我们得到了,下面该去算隐层和输入层之间的权重$v_{ih}$了,咋算呢,还是从根出发,根?就是最外头的损失函数,也就是$E_k$。这个可就复杂多喽,慢慢来,还是老规矩,一步步推:</p>
<p><img src="/images/nn-bp2.jpg" alt="" width="80%" /></p>
<p>$v_{ih}= v_{ih} + \Delta{v_{ih}}$
$\Delta{v_{ih}}=-\eta \frac{\partial E_k}{v_{ih}}$
看,这个是用最最后的损失$E_k$,来反向对隔着一层的$v_{ih}$,中间相隔了一堆东西呢:
$E_k->\hat{y}^k_j->\beta_j->b_h->\alpha_h->v_{ih}$,这么一条链,链式求导法则吧!
$\frac
{\partial E_k}
{\partial v_{ih}}=\frac{\partial E_k}
{\partial \hat{y^k_j}} * \frac{\partial {\hat{y^k_j}}}{\partial \beta_j}* \frac{\partial \beta_j}{\partial b_h}* \frac{\partial b_h}{\partial \alpha_h} * \frac{\partial \alpha_h}{\partial v_{ih}}$,真长啊,我勒个去,挨个求出来。</p>
<p>我们知道$E_k$是很多个$E_j$组成的,要对每个都要求偏导,然后加到一起,所以对
$\frac{\partial E_k}{\partial \hat{y^k_j}}实际上就是\sum^l_{j=1}\frac{\partial E_j}{\partial \hat{y^k_j}}$</p>
<ul>
<li>$\frac{\partial E_k}{\partial \hat{y^k_j}}=\sum^l_{j=1}\frac{\partial E_j}{\partial \hat{y^k_j}}=\sum^l_{j=1}(\hat{y^k_j}- y^k_j)$</li>
<li>$\frac{\partial \hat{y^k_j}}{\partial \beta_j}=\hat{y^k_j}(1- \hat{y^k_j})$</li>
<li>$\frac{\partial \beta_j}{\partial b_h}=W_{hj}$
(<em>注:这里有个trick,既然$\beta$是$b_n$的函数,$b_n$又有多个,为何$\frac{\partial \beta_j}{\partial b_h}$变成了只有一个$W_{hj}$了,其他的$b_n$呢?那是因为其他的$b_n$和要求的$v_{ih}$没啥关系,链式求导的时候,其他的$b_n$和它没关系,都被求导成0了</em>)</li>
<li>$\frac{\partial b_h}{\partial \alpha_h}=b_h * (1-b_h)$
(<em>注:这是个sigmod函数,所以才得这个</em>)</li>
<li>$\frac{\partial \alpha_h}{\partial v_{ih}}=x_i$</li>
</ul>
<p>好吧,我们最后放到一起:</p>
<p>$\Delta{v_{ih}}=-\eta \frac{\partial E_k}{v_{ih}}=-\eta * \frac{\partial E_k}{\partial \hat{y^k_j}} * \frac{\partial {\hat{y^k_j}}}{\partial \beta_j}* \frac{\partial \beta_j}{\partial b_h} * \frac{\partial b_h}{\partial \alpha_h} * \frac{\partial \alpha_h}{\partial v_{ih}} $</p>
<p>$=-\eta * b_h * (1-b_h) * x_i * \sum^l_{j=1}[(\hat{y^k_j}- y^k_j) * \hat{y^k_j} * (1- \hat{y^k_j}) * (W_{hj}) ]$</p>
<p>我靠,太复杂了!你晕了么?我自己推的,所以我还没有。</p>
<p>这个时候,需要静下来,思考思考了搞定了${\Delta}W_{hj}$,也搞定了$\Delta{v_{ih}}$,西瓜书里就一个隐层,那如果不是1个隐层,2个隐层,3个呢,….,N个呢?所以,我们在回过头来看$\Delta{v_{ih}}$,这个最重要。除了最后一层的权值${\Delta}W_{hj}$是特殊处理,其他的隐层应该是和$\Delta{v_{ih}}$类似的。</p>
<p>我们再来观察一下$\Delta{v_{ih}}$的核心部分,
$b_h * (1-b_h) * x_i * \sum^l_{j=1}[(\hat{y^k_j}- y^k_j) * \hat{y^k_j} * (1- \hat{y^k_j}) * (W_{hj}) ]$</p>
<ul>
<li>$(\hat{y^k_j}- y^k_j) * \hat{y^k_j} * (1- \hat{y^k_j})$ 是固定的,每次灌完数据就定下来了,每个隐层都可以用。西瓜书里把这玩意叫做$g_i$(还得加了个负号),其实他就是$\frac{\partial E_k}{\partial \hat{y^k_j}} * \frac{\partial {\hat{y^k_j}}}{\partial \beta_j}$部分,没转过来脑子吧,没事,多想一会儿。</li>
<li>那$b_n$是啥,$x_i$是啥,不就是这个隐层的节点的输入和输出么?啊!“我靠,还真是!”你感叹道。</li>
<li>得,就剩下$W_{hj}$了,这是啥?就是这个隐层和下一个隐层(也可以是输出层,反正一样)的那些权值啊。</li>
</ul>
<p>好!你再细想想,明白了吧,这个式子是通用的,通用的,通用的,有了这个式子,任何一个隐层和隐层之间、隐层和输入层之间的每个权值,通过求丫的偏导,然后进行梯度下降,这样一来,每个权值都按照步长减少一下,形成一个梯度,往最低点又进一步。</p>
<p>上面是之前写的,其实,再看一遍,自己心虚的狠,怎么就说“其他隐层是类似的、通用的…”,<a href="http://blog.csdn.net/qq_32611933/article/details/51612102">看这篇</a> ,里面提到:</p>
<blockquote>
<p>隐藏层神经元的反向传播公式:$\Delta w^l_{ji} = \eta \delta_k \cdot x_i \qquad \delta_j = \phi’(v^l_j)\sum ^m_{k=1}(\delta_k) w_kj$</p>
<p>其中δk为后一层的第k个神经元的局域梯度。
从而可以推导出,每一层隐藏层神经元的局域梯度,等于其后一层所有神经元的局域梯度与其对本层神经元连接边的权值的乘积之和,乘上本层神经元激活函数对局部诱导域的导数。
xi表示本层神经元的第i个输入值,η为学习率参数。</p>
<p>如此一来,无论隐藏层有多深,每层隐藏层的权值修改都可以通过前一层的信息推导而得,而这一信息最终来源于输出层,输出层的信息又来源于误差信号。这就好像误差信号在从输出层开始,沿着各层间的连接边往后传播一样。
反向传播[Back Propagation]的说法就是这么来的。</p>
</blockquote>
<p>其他,他也是很含糊地提了一句<code>从而可以推导出</code>这种敷衍的话,来搪塞这个推导,如果你仔细想想,这个推论不是那么好推出的,反正我没想明白???先放着,死记结论吧,未来,可以找个明白人问问。</p>
<p>我再废话几句,每个权值都会被 $w_h = w_h - \eta * \frac{\partial E_k}{\partial w_h}$,更新一下,都更新完了,形成梯度向量,就往$E_k$最小值方向迈进一步,然后,这个“然后”很重要,然后还是用这个样本数据,再来一次这个更新过程,注意!这时候还不用在灌新的标签数据进来,还是现在正在用的老的一批数据呢,这个细节要注意噢。直到!直到….梯度下降探测停止(停止条件什么来着,回忆一下,文章开头的地方有,</p>
<blockquote>
<p>计算梯度$g_k=g(x^{(k)})$当$|g_k|<\varepsilon$时,停止迭代”</p>
</blockquote>
<p>对,就是梯度的模小于某个$\varepsilon$ ,停止)。</p>
<p>这个时候貌似只是这批数据的最小值探测到了,那再来一批呢?那就用新的数据,再继续优化这些权值吧。其实,这里我有些迷惑,一批数据后,如果已经找到一组权值,可以让当前这批数据的损失函数最小化了,那再来一批数据,会不会让本来挺优化的权值,反倒没原来效果那么好了,也就是说,不断地训练是否可以不断地改进权值,这点我是有些疑惑的?</p>
机器学习 & 深度学习 [笔记]
2017-03-27T12:07:56+08:00
https://www.piginzoo.com/machine-learning/2017/03/27/machine-learning-deep-learning-memo
<p>把自己的一些学习笔记都写到这上面,记录下来方便复习和查找</p>
<h1 id="em">EM</h1>
<p>EM知道分类数量么?
这篇讲的很好:
http://blog.csdn.net/u012990623/article/details/42323661
为了解决这个你依赖我,我依赖你的循环依赖问题,总得有一方要先打破僵局,说,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化,然后如此迭代着不断互相推导,最终就会收敛到一个解。这就是EM算法的基本思想了。</p>
<h1 id="贝叶斯">贝叶斯</h1>
<p>灵活掌握贝叶斯公式,
贝叶斯网络:是个有向图,两个节点产生一个条件概率,节点是随机变量
p(a,b,c)=p(c|a,b)<em>p(b|a)</em>p(a)
a—–>b—->c
-———–^
P(b|a) ===> a<—-b
HMM,
比较诡异的是,x1,x2,…xn是不独立的!!!之前的回归,样本都是独立的!
比如语言有上下文,所以彼此词词间是不独立的.
共线
I(A,B)互信息 =
最小生成树,kruskal算法
这篇是GAN必看的论文之一</p>
<h1 id="贝叶斯实践">贝叶斯实践</h1>
<p>GaussianNB, 二项分布的NB,…的NB,各种分布都有NB的,他们之间是可以组合的.
NB—>朴素贝叶斯 Naive Beyes?
朴素贝叶斯的前提是,1:各个特征之间是条件独立的(条件独立性),特别是适合自然语言处理,2:特征同等重要
有时候不是条件独立,但是我们人为地让他独立,但是可以解决问题就可以.
“特征之间的共线性”? 老师提到的概念
文档单词组成的0/1向量是稀疏矩阵,但是维度一样.
如果一个词总在某个文档中出现,在其他文档中很少出现,那么这个文档中,这个词重要性就高,
逆文档频率
在确定概率的情况下,有没有蒙特卡洛模拟得出的结论是一样的?
蒙特卡洛,应用在树的搜索,不是用于建模的方法.
word2vec
K近邻 knightbour?</p>
<h1 id="lda">LDA</h1>
<p>beta分布, theta的值是(0,1),
共轭是没有数学基础的,是为了工程简单的
LDA和语言无关的,
50维是指的50个主题么? 主题咋来de?
高频词和LDA主题词关系和区别?
选择共轭的原因是,是可以循环递归来回做,直到收敛到某个值.
噢,dirichlet
机器学习得到主题,而主题的实际意义需要等后续业务人员来归纳分析吧</p>
<p>语料库:
http://mp.weixin.qq.com/s/0DkookBoiM4Db0VcbVRZhg</p>
<p>变分实现的Gensim开源的LDA,
LDA实现起来有点复杂,</p>
<h1 id="hmm">HMM</h1>
<p>用HMM做分词,甚至不需要词库,神奇…
马尔科夫链实际上是一个只考虑前一个状态的条件概率,在之前的都不考虑了,这样做只是为了简化模型
讲的最好的还是吴军的数学之美
网上的盒子+红黑球是个简单易懂的例子,邹博也用它:https://www.zhihu.com/question/20962240
HMM就是在马尔科夫上加了一个输出层(观察层),之前的状态变成了隐含层,
状态层的各个状态的转移矩阵是一个概率,一般状态机迁移可以用矩阵表示,邹博讲过
而那个所谓的”混淆矩阵”是隐含层状态<->输出层状态的转移概率.
pi是开始时候的状态.
邹博的两个例子很赞:一个是中文分词,一个是红黑球,不会了就回去听听
HMM有3种玩法,就</p>
<h1 id="svm">SVM</h1>
<p>Kernel函数, 正定矩阵相乘,
各个点的点乘函数,</p>
<h1 id="提升">提升</h1>
<p>提到了梯度下降的时候,步长值是可以通过回溯线性搜索试探出来的,
是他之前的”梯度下降与牛顿”的22/56页提到的,叫Armijo准则,</p>
<h1 id="决策树随机森林">决策树+随机森林</h1>
<p>DecisionTreeRegression可以做回归么?就是预测连续值
邹博的13提升课开头的例子12.4貌似就是,
m
随机森林比决策树要平滑,不是锯齿状那么明显
随机森林可以得到一个强分类器?</p>
二零一七是新的一年
2017-02-02T00:00:00+08:00
https://www.piginzoo.com/life/2017/02/02/new-year-coming
<p>活着活着就老了,哈,时间是一个静静地流过的小溪,没有太大的动静,就慢慢地过去了,然后,然后我们就老了。
这些年对世界的观察者,看着她一点点地变迁,参与在里面,有没有完全参与到热闹里的热情,这一点冷静是有一点尴尬的,规则就在那里,也理解,进去不甘不进去也不甘,纠结着糅杂着,时间就这样流淌过去了。</p>
<p>有些人挺有意思,喜欢表演,穿插着规则,舞弄形如小丑,不知道,夜深人静的时候,面对镜子自己的嘴脸是怎样的感受。有些人可怜又可悲,被奴役驱使着,浑然不知。有些人是巅峰的独狼,早就在孤风中看清了这一切,要么继续凝视看着他们,要么扭头悄悄地接近他的目标。</p>
<p>这世界这个时代还没有带来大范围的痛苦,这不科学,不相信这一代可以逃过着历史的宿命,为什么你们丫的有这个命,能逃过那疯狂的红宝书,能逃过流血的残酷战争的影子。与之对比是,这么两拨的美好,一个互联网一个iphone,欲望带着我们继续前进,可是有几个知道人工智能和机器学习的区别,未来技术带来的绝B是痛苦,只不过,大部分的我们还浑然不知,已经挂挡到痛苦赛道的时间机器。</p>
<p>三百年前就有了我们还在拼命学习的微积分,几乎所有的所有的数学都是17、18世纪就已经奠定,我们这个维度的世界早就被定义出来了,确实应该进化了,而更高纬度的世界,正向我们招手,只可惜,迈进的过程中,一定会有玩火的我们烫到自己的时候,比这个更可悲的是,我们这一代人,肯定是赶不上了,所以,想想在物欲的世界里狂欢也不妨是最好的放纵。</p>
<p>中年后就变得面目可憎,不是刻意而为,而是时光雕刻的结果,毕竟大部分人生活在这么的一个龌龊当中,渐渐地他们也放弃了抵抗,甚至还有对龌龊强暴的快感,即使有些他们认为的美好,也只是虚幻的意淫,然后,这么一个耷拉的下巴,凶狠的眼神,无趣的舌头,就诞生出来,本来的那清澈的眼睛不见了,不见了。</p>
<p>经济的规律,决定了微观的一个个企业,商业有它的规律,但是供给和需求,真的不是这么轻易就匹配上,这过程中,其实有很多机会,但是这些机会的获得,是要付出代价的,这个代价往往是一个普通心智的人承受不起的,大部的其实都是在熬,挺死别人,就成就了自己。特别是在这样的体制下,那么多你不懂的潜在规则,居然被他们理解为商业之道,结果就是结出的是畸形的瓜,奇大无比的瓜。</p>
<p>有时候觉着这个世界充满了荒诞和愚蠢,不过自己何尝不也是,人人何尝不是。自己作的茧,捆着自己,倒也没什么可抱怨的,但是,确实不能堕落和消沉,要明白自己存在的价值,也许明天就会死去,也许未来就会消亡,那么得做点什么,太多的美好的东西,没有时间去触摸,何况那些自己不知道的美好,她还在静静地躺在那里,等待去发现。没钱没时间,不要说这种无能的话,任何事情都要有代价,但是,不要忘记自己想要的东西就成了。</p>
<p>那天你躺着那里,你明白你就要离开这里,你有惆怅么,回忆是你唯一的东西,你想去了解这世界,可惜你已经离不开着病床,可悲么。可是,这个世界究竟是我们意向出来的一个虚幻,还是那山那水,那让人窒息的景观,还是一个个活生生的你感觉陌生又亲切的人生,还是一览几百甚至几千年的星空凝望,这样的浩瀚中,真的不能把这年华浪费在每天的琐碎里,总要走走看看学学,然后终老一生,安心地离去。</p>
第一次创业时该做好哪些心理准备的live笔记
2016-11-23T00:00:00+08:00
https://www.piginzoo.com/life/2016/11/23/zhihu-live-summary
<p>哈哈哈哈哈</p>
<p>参加了张潇雨的知乎live的<a href="https://www.zhihu.com/lives/772383687122640896">第一次创业时该做好哪些心理准备</a>,把其中的感受记录下来:</p>
<ul>
<li>创业基本上是7-8年的一个过程,从startup到IPO,是个长线的事。</li>
<li>创业是什么,startup==growth,创业就是增长;和生意的不同</li>
<li>边际成本递减,不断地调整产品,可能会抛弃最开始你的拥护者,</li>
<li>投资人逻辑:捕鲸活动,投独角兽,不投小回报,1-2个就是全部。所以他对你的期待就是不断地扩张。</li>
<li>创业是一个只知道起点和终点的过程,想清楚这2点,启程即可。</li>
<li>问题很多的时候,只考虑决定生死的问题。CEO找到最重要的问题,并解决。不要做完美,有问题很正常。</li>
<li>做决策给自己留有余地。留出安全边际。即使是关键决策做错了,也不会倒掉。</li>
<li>抑制住自己的“灭火”冲动。</li>
<li>“伟大的产品一开始都像玩具”</li>
<li>YC狠推崇的“创业公司的早期的产品是应该让100个人爱你,而不是让1万个喜欢你”。</li>
<li>“合伙人”是值得信任的人,可以是背靠背的,不用怀疑的人 。然后就是价值观。这样才能一起成长。</li>
<li>误解和不信任就是信息错位传达。</li>
<li>一个错的决定都比不做决定强,创业公司要快速做决定。</li>
<li>不在投资期内的时候不要见投资人,太耽误精力 和时间。</li>
<li>早期员工太重要了,要精挑细选,前10个决定了后100个,又决定了1000个。顶住当前工作进度的压力。</li>
<li>创业就是把开放问题变封闭问题的过程。产品要不停滴找新的用户和新需求点。</li>
<li>焦虑时候,问自己焦虑的是什么?真的发生了,最差的情况是什么?</li>
</ul>
我儿的杂货铺
2016-11-09T00:00:00+08:00
https://www.piginzoo.com/home/2016/11/09/son-pictures
<p>这个小车库里堆放着宝贝的各种杂货~</p>
<h4 id="ppt">PPT</h4>
<p><a href="/assets/ymjnhcr.pptx">杭州美食</a></p>
<p><a href="/assets/opera.pptx">京剧</a></p>
<p><a href="/assets/pinshe.pdf">品社</a></p>
<h4 id="环保视频">环保视频</h4>
<p><img src="http://pic.qiantucdn.com/58pic/13/20/62/82Q58PIC6NU_1024.jpg" alt="350x0" width="50%" /></p>
<div>
<embed src="http://player.youku.com/player.php/sid/XMTMxMjkxMDc1Ng==/v.swf" allowfullscreen="true" quality="high" width="480" height="400" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash" />
</div>
重建博客
2015-02-20T00:00:00+08:00
https://www.piginzoo.com/tech/2015/02/20/rebuild-my-website
<p>自从我的<strong>piginzoo.com</strong>域名和在国外的虚拟主机相继过期后,我就等着国际域名管理组织回收它,经过了长大九九八十一天+的等待,终于被回收了。我终于回到了被<em>阉割</em>的祖国,没办法,要备案!备案结束后,就迫不及待的重建它,终于这几天有时间了,赶紧摆弄起来。研究了一番后,决定还是用github的pages系统,使用jeklly方式,回头试试简书吧也,anyway,先折腾一番再说!</p>
<p>搭建自己的blog,<a href="http://www.cnblogs.com/purediy/archive/2013/03/07/2948892.html">参考</a> 明白了jekyll只是github上用的后台编译blog的模板系统,可以下载到本地用ruby去跑,但是只是用来预览,要按照他的格式提交到github上用他的pages系统才能真正生成,也就是说生成过程实在服务器端完成的。网上的文章上来就讲jekyll,生怕别人不明白这个高大上的东西,但是实际上在笔记本上不装jekyll就完全可以直接提及到github上靠github pages来在服务器生成。而在笔记本上装jekyll也只是为了预览或者本地生成html用。</p>
<p>另外,为了让github帮你生成html,必须要用给一个诡异的gh-pages分支来存kekyll的markdown的模板,是个约定,自己在笔记本上得一堆git命令才能搞定,简单的办法有么?有,就是直接在某个repository用auto page generator自动生成这个repository用的pages系统,然后你克隆下来,在此基础上改造成自己的博客。</p>
<p>我的做法是,先用这东西创建gh-pages分之,然后用jeklly-bootstrap直接生成我的网站博客框架,再改之,不过我还是装了jeklly,用于本地调试博客。</p>
<p>最后,吐槽一下,妈蛋,搞个博客还是得费点劲的,怪不得那么多程序员都用github pages来搞呢,用来装逼确实有范,但是,我只是想搞个自己的博客,唉,从了。最后,还是绑个cname,才能访问。我去!</p>
<pre><code>git clone https://github.com/plusjade/jekyll-bootstrap.git piginzoo.github.com
</code></pre>
<p>然后mv到我的blog目录下,嚯嚯</p>
<p>参考:<br />
<a href="">http://www.ruanyifeng.com/blog/2012/08/blogging_with_jekyll.html</a><br />
<a href="">http://site.douban.com/196781/widget/notes/12161495/note/264946576/</a></p>
淡一点,蛋一点
2013-09-14T15:04:45+08:00
https://www.piginzoo.com/life/2013/09/14/%e6%b7%a1%e4%b8%80%e7%82%b9%ef%bc%8c%e8%9b%8b%e4%b8%80%e7%82%b9
<p>看完“<a href="http://www.niubo.cc/article-1627-1.html">寒门难再出贵子,读书也改变不了命运?</a>“,颇想写点什么。</p>
<p>我算是那些穷孩子中的一员,克服自卑的心理,走的很确实太辛苦。后来发现,人人皆有,毕竟那个年代都是贫穷和稀少霸占着世界。而现在,这种自卑心理只变成部分孩子的心理状态了。文章看上去赤裸裸,貌似有所加工,无妨了,它道出了那些浮象下面的很多话,虽然谈不上醍醐灌顶,却也很多让人可以深深思考,让人还是感叹和唏嘘。这个岁数,已经不太相信什么狗屁励志了,这种赤裸反倒让人容易共鸣起来。</p>
<p>命,人一叩,认吧。充满了宿命论。人活着就是活在网里,活在一个小世界里。这个世界的宇宙中心,就是身边的最爱的亲人,引力最大,影响最大。当然,这种影响有好的,也有坏的,这个是客观的,你没的选的,这个是必须认命的。文章里说的,父母帮你帮你编织的网,网住你人生,兜着你飞的更高。嗯,确实,深有体会。相信,没有听爸妈的话,贸然地闯进社会的那些同学都深表认同。而听了父母的安排,享受着安逸的同学们更是开心自己当初的明智。挣扎后,生活富足的,功成名就的毕竟是小概率时间,不得不深深认可。特别是自己干后,更明白,关系和机会便是一切,别人给你机会,让你活下去,你才能活下去,赤裸的真理,绕不过去。所以,不用质疑,不用清高,顺从地被他们认为”对“的东西捋直,强暴,顺从,然后适应到享受,是一个必需的过程。这点上,冯唐是个聪明人,牛逼的人,所以很顺理成章地混入体制,混到局级,真真地是一个极品,佩服死了。</p>
<p>愚笨的我+勤奋的我,认知总是慢一些,也决心这样去做了,也认真去这样做了,却做的那么蹩脚。心里总是放不下,让人挂牵的那个小小的自我,那个不愿意被蜡封的孩子的心。做个铁盒子,牢固地那种,把它放进去,上一个锁,真的不敢丢失了他。还是想被顺从的同时,保持一丝地反抗,哪怕是个姿态也可以,死了就没了,gone。我知道,他永远都不会gone,那是一种至死都夺不走的东西。</p>
<p>物欲我喜欢,喜欢高档的餐厅,拉菲,和刺眼的金碧辉煌。喜欢银沙碧海,满眼的翘臀丰乳。和大家一起,谈论那些高尚的话题,畅谈时弊。我打心眼里喜欢这种生活,这种生活是幸福的,不会觉得腻,是必须的。现在、和未来也为能享受到这些,不断地努力。可是,同时呢,我也喜欢,突然从喧嚣中脱身,在安静的那个下午,独自捧着书墨,让各种思绪在字间流浪,跟自己灵魂对话,和书里活着的那个作者对话,深深吸气,或者心灵抽搐的感觉。和高潮的性爱相比,这同样让人刺激不已,真的。</p>
<p>看了这篇文章,我无力去反抗地批判,不住地点头,表示顺从,但是,也更坚定了保护那个盒子里的孩子的决心,活着就是这样,生活就是这样,你得明白,你为什么活着。</p>
<p> </p>
无题
2013-03-01T09:19:34+08:00
https://www.piginzoo.com/life/2013/03/01/%e6%97%a0%e9%a2%98
<div>
最近在为公司的事不停奔波忙碌,心中充满焦虑,如何才能赚到钱,如何能找到一个很好的方向,常常困扰着我。有时候,猛然抬头才意识到,年华的逝去。
</div>
<div>
</div>
<div>
<div>
工作这些年,还算努力,也经历过很多公司和企业,面对过无数各种形形色色的人,也不断地在经历各种的身边事和观察着件件社会的事,也算是逐渐理解人在生活在这个社会上的意义。其实,很多人都是充满着恐惧,对未来的恐惧,对自我定位的恐惧,本质上,我们仍然未摆脱一个孩子的心理,心中对未知充满好奇,同时又夹杂着恐惧。
</div>
<div>
</div>
<div>
对社会体系的理解也逐渐深刻,人确实是分为三六九等的,除了外因,其实还是取决于自己的心态和定位,别人永远是镜子,你会不停地去跟他们比较,映射自己的内人,把自己想象作某个人或者某类人或者某些人的集合,虽然自己不愿意承认,但是潜意识里就是这样。内心强大,足以驾驭自己扭曲别人的人毕竟还是少数。所以,不用刻意地因为这点而自我贬低,也很坦然地接受试图改变自己的种种尝试失败带来的挫败感。你我都是随波逐流的大多数,改变真的是太难了,除非天生就具备那个特质。
</div>
<div>
</div>
<div>
但是,我们其实有渴望改变,改变其实是有代价的,只不过我们在初期的理想化会蒙蔽我们对改变的成本的估计,而改变后你真正了解了改变的代价和成本时,又会因为不肯放弃沉没的成本,而变成行为和生活的惯性,而固执地坚持下去。可是,人生就是个赌局,这个过程中又会出现什么呢?什么都可能出现,这大概就是生活最迷人却又残酷的地方吧。
</div>
<div>
</div>
<div>
对于商业,逐渐加深了理解,光鲜亮丽的成功故事都是悲喜后的粉饰,谁不是经历过血淋淋的存活,基本的商业游戏规则要熟悉和运用,这当然是必须的。还要加上敏感、嗅觉、决心、灵感,这是什么,是智商和情商的综合。最后才是最重要的,是运气,是命。什么财务自由,穷爸爸富爸爸,这些让你曾经的鸡血,只演变成最初的带你进入黑森林的女巫,早已消逝地无影无踪。而,面对黑漆漆的这片森林,和一个个凶猛的强壮的丛林存活者,你只有坚持活下去或者选择放弃退出游戏。玩游戏,我们的心理却往往都是,退出是失败者,退出不甘心,男孩子的天性决定了我们不可能退出,至少这个退出的理由很难被自己找到和被自己说服。
</div>
<div>
</div>
<div>
昨天看着眼前那个吃饭的小东西,我看着他,冲着他笑,他抬起头,也冲着我笑,没有一丝的造作。他其实就是我们内心深处最纯洁的东西的真实的化身,我们被各种现实包裹地呼吸困难的时候,我们尝试寻找我们精神世界落脚地的时候,突然发现,那个最懵懂最无知最天真的甚至不理解你的现实的这个小东西,其实就是这上天给我们的最好的灵魂,未被玷污的灵魂。你就觉得,你存在价值,又多了一份,而且是最重要的一份,保护好这个小天使,给予他一个未来,物质上的,精神上的。
</div>
<div>
</div>
<div>
Anyway,吐槽无力但是很舒服,也分享一下自己的感受跟所有的认识我的不认识我的朋友们,一起共勉吧,前面无论是什么,都得努力勇敢地走下去。
</div>
</div>
The best free SEO tools list
2013-01-08T18:47:02+08:00
https://www.piginzoo.com/tech/2013/01/08/the-best-free-seo-tools-list
<div class="ennote" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div>
<em>【copyrigt – 版权说明】</em>
</div>
<div>
<em>I already get the authorization from the orignal writer “Matt”, who is a distinguished SEOer in UK, you can visit his website “http://www.matthewwoodward.co.uk” to learn more about him.The article is coming from his new blog “<a title="Permanent Link to The Best Free SEO Tools & Internet Marketing Software" href="http://www.matthewwoodward.co.uk/tips/the-best-free-seo-tools-internet-marketing-software/" rel="bookmark">The Best Free SEO http://www.matthewwoodward.co.uk/tips/the-best-free-seo-tools-internet-marketing-software/Tools & Internet Marketing Software</a>“. Below is a translation version for Chinese Seor fans, if you want to forward it, please help remain the links and original source.</em>
</div>
<div>
</div>
<div>
<em>此文为翻译稿,已经争得原作者的同意。欢迎转载此文,转载请保留此版权说明,并且保留原文中的链接。此文章由动物园的猪(<a href="http://www.piginzoo.com/">http://www.piginzoo.com</a>)编纂和翻译,转载时请注明此文章来处。转贴删作者,出门就撞车!</em>
</div>
<div>
</div>
<h2>
最好的免费SEO工具列表
</h2>
<div>
如果你是个SEOer新手,那很多国外优秀的SEO工具网络营销软件对你来说还是很贵的,毕竟是美刀啊。但是,如果你够聪明(小聪明)又想省钱的话,那么你可以利用许多免费的SEO工具和试用版,而不用花一分钱。通过注册一堆的免费电子邮件,来试用各种SEO软件,你可以得到一切。
</div>
<div>
<p>
所以,我决定编制一份最好的免费工具和试用版的列表,方便我查阅,也可以作为你的采纳靠!来吧,一起Enjoy这一大桌免费的盛宴吧:
</p>
<p>
如果你正在考虑购买SEO牛逼的软件,特别是那些免费试用的,那么省省吧。当然如果你不差钱,另说。你开始任何的试用版使用之前,建议花点时间来熟悉这些软件,可以去看YouTube上的教程或论坛讨论等。另外,你应该做好计划和安排,准备好所有的内容,你需要这样你可以充分地利用试用期间的这段时间,获得你想要的结果。
</p>
</div>
<div>
<p>
我已经强调我最喜欢的免费工具和试验,在此列表的顶部。我也将它们分割成不同的类别,以帮助你的查找。
</p>
</div>
<div>
<p>
【我个人的最爱】
</p>
<p>
使用免费的工具和试验下面你可以设置一个分层的链接建设活动,跟踪和监控。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOMoz" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SEOMoz (Full 30 Day Trial)</strong></a>SEOmoz的(完整的30天试用版) – SEOmoz的团队提供了一系列神奇的工具来监控您的网站和链接建设活动。所有这一切的排名跟踪页上的建议,你甚至可以用它来下载所有你的竞争对手的反向链接!
</div>
<div>
</div>
<div>
<strong style="color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SeNukeX" target="_blank" rel="nofollow">SENuke XCR (Full 14 Day Trial)</a> </strong>SENuke XCR(完整的14天试用版) – ,SENuke XCR是一个非常多元化的链接建设的工具,这个原子弹适合搞1级链接。就是价格太TMD贵了,但整整14天免费试用可以干不少事儿,你懂的。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/GSASearchEngineRanker" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">GSA Search Engine Ranker (Full 5 Day Trial)</strong></a> – 这是外链建设的瑞士军刀,可以帮你建立超过120个类型网站的外链,最适合你的2级和3级的外链建设。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/KontentMachine" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Kontent Machine (Full 7 Day Trial)</strong></a>曾经用过的最好的内容生成器,可以用于生成和导出2级和3级的外链描述。
</div>
<div>
</div>
<div>
<strong style="color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOPowerSuite" target="_blank" rel="nofollow">SEO Powersuite (Free Version)</a> </strong>免费版本可用Rank Tracker,网站审计, SEO链接助理等功能。每个工具都是圈里是数一数二的产品。
</div>
<div>
</div>
<div>
<h3 style="border: 0px; margin: 0px 0px 0.8em; padding: 0px; outline: none; color: #333333; font-size: 1.2em; font-family: Arial, Verdana, Helvetica, sans-serif;">
【内容创建】
</h3>
<p>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/TBS" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">TheBestSpinner (Full 7 Day Trial / $7)</strong></a>TheBestSpinner(试用7天) – 这真的是最好的伪原创工具,我过去这几年一直在用,谁用谁知道。 他提供的API被很多其他的链接建设的工具所采用。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SpinnerChief" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Spinner Chief (Free Version)</strong></a> – 接近对手TheBestSpinner,但给人的感觉比较笨重的。不过,他好歹提供完全免费版的软件,让您享受!
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/WordAiTrial" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">WordAI (3 Day Trial)</strong></a> 最近上市的一款,但算得上是能够自动生成内容,而且内容读取来还不是那么垃圾,值得一试。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/KontentMachine" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Kontent Machine (Full 7 Day Trial)</strong></a>我用过的最好的内容生成器。生成和导出2层和3层的内容,只是简单的点点就可以。
</div>
<div>
</div>
<div>
【电子邮件营销】
</div>
<div>
<strong style="color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/Aweber" target="_blank" rel="nofollow">Aweber (Full 30 Day Trial / $1)</a> </strong> – 我就在使用它,而且用了好多年了,它让电子邮件营销变得轻而易举,更容易和你的客户保持联系。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/GetResponse" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">GetResponse (Full 30 Day Trial)</strong></a>Aweber的对手,提供了类似的功能集。选哪个是个人喜好的问题!
</div>
<div>
<p>
【主机托管】
</p>
<p>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/Dreamhost" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Dreamhost (Full 14 Day Trial)</strong></a>– 如果你想快速托管,那么你尝试在14天的试用期内在Dreamhost创建个站点。他们提供了每月8.95$的服务。他们是我的第一个虚拟主机提供商。
</p>
</div>
<div>
【关键字研究】
</div>
<div>
<p>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/MarketSamurai" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Market Samurai (Full 14 Day Trial)</strong></a>市场武士 – 关键字的研究和SEO竞争分析这2块,市场武士是最牛逼的。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/KeywordResearcher" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Keyword Researcher (Free Trial)</strong></a> 他主要用于关键词联想,找出衍生关键词,特别是和Google Alert结合起来,威力无比。
</div>
<div>
<p>
【链接建设】
</p>
<p>
<strong style="color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/ArticleKevo" target="_blank" rel="nofollow">Article Kevo (Full 7 Day Trial)</a> </strong>Kevo在链接建设上,算是个新开发出来的软件,但是,他可以将你的文章提交到包括文章目录,Web 2.0平台,社会书签,维基,社交网络和论坛等一系列平台上。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/BLM" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Inspyder Backlink Monitor (Free Version)</strong></a> 监测你的反向链接的终极工具。非常易于使用。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/LWB" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Link Wheel Bandit (Full 7 Day Trial)</strong></a> 是个伟大的工具,用于帮你建设第2层连接。不知道为什么它被称为链接轮强盗,但因为它实际上并不是用来建设链轮,而是主要用于建设链接的金字塔。
</div>
<div>
</div>
<div>
<strong style="color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/LinkAssistant" target="_blank" rel="nofollow">Link Assistant (Free Version)</a> </strong>这是SEO PowerSuite中的工具集的一部分,而且是NB的链接建设工具。不过,我已经破解了一下,用它来自动化管理我的博客自动发贴。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/MagicSubmitter" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Magic Submitter (Full 30 Day Trial / $4.95)</strong></a> – 它算是SENuke XCR真正的一个对手,提供非常相似的功能。它可以发布很多东西,从视频内容到新闻稿,种类繁多。不过界面操作有点复杂,上手有点难。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/NoHandsSEO" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">NoHandsSEO (Full 7 Day Trial)</strong></a> – 他提供了一个完全自动化的解决方案,帮你自动建立源源不绝的外链,而且非常容易使用和安装,并支持几个不同的平台。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SeNukeX" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SENuke XCR (Full 14 Day Trial)</strong></a>– 你知道的,SENuke XCR啥都能干,帮你构建多元化的链接,用来搞第1级链接。不过,按月收费,价格也是相当的昂贵的,但整整14天免费试用,还是能帮你不少忙了。
</div>
<div>
</div>
<div>
<strong style="color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOSpyGlass" target="_blank" rel="nofollow">SEO SpyGlass (Free Version)</a> </strong> – 帮你侦查竞争对手的反向链接,并且帮你分析他们的关键指标,如锚文本的使用情况和分布等。也可以用它来监控自己的网站的反向链接状况。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SickSubmitter" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Sick Submitter (Full 3 Day Trial)</strong></a> – 跟SENuke XCR一样,这是一个非常不错的工具,可以把链接发布到各种类型的网站上去,有个用户论坛,上面提供的脚本可以发布更多的网站和平台!
</div>
<div>
<p>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SliQSubmitter" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SliQ Submitter (100 Submission Limit)</strong></a> – 一个我最喜欢的目录提交工具,真的很容易使用,可以帮你提交书签链接到一些高质量的目录网站。【网站SEO诊断】<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOMoz" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SEOMoz (Full 30 Day Trial)</strong></a> – 每周定期扫描你的网站,SEOmoz的仪表盘可以迅速识别网站SEO问题,并建议您如何纠正。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/WebsiteAuditor" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Website Auditor (Free Version)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span> SEO PowerSuite套件的工具之一,你可以使用它爬一下您的网站,并报告发现的任何问题。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.microsoft.com/web/seo/" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Microsoft SEO Toolkit (Free)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>微软搜索引擎优化工具包(免费滴),微软总算也出了个有用的产品,它帮你爬你的网站并报告的任何问题。
</div>
<div>
</div>
<div>
【排名跟踪】
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/RankTracker" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Rank Tracker (Free Version)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> –</span> 也是SEO PowerSuite套件的牛逼工具之一。我觉得是目前最好用的排名检查工具了。不像那帮基于网络的排名服务工具,他是个桌面版的,并且可以跟踪无限数量的关键字以及您的竞争对手。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOMoz" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SEOMoz (Full 30 Day Trial)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>SEOmoz的服务提供每周排名的更新,您也可以用它来监测你的竞争对手,和监控您的网站。
</div>
<div>
</div>
<div>
<p>
【SEO其他工具】
</p>
<p>
这些工具都具有广泛的功能,真的不适合在一个类别。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/MarketSamurai" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Market Samurai (Full 14 Day Trial)</strong></a> – 我的首选工具,主干关键字和竞争的研究,但它也包括排名跟踪,域名查找,内容查找,内容发布和链接查找等功能。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOPowerSuite" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SEO Powersuite (Free Version)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>免费版本就可以使用,RankTracker, Website Auditor, SEO Spyglass and Link Assistant四大牛逼工具,每个工具在业界都是口碑极好,我已经多年依靠这套工具。看看我的另外一篇专门讲述他的<a href="http://www.matthewwoodward.co.uk/reviews/seo-powersuite-review-essential-seo-tools/" rel="nofollow">文章</a>。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/SEOMoz" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SEOMoz (Full 30 Day Trial)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>SEOmoz的团队提供了一系列神奇的工具来监控您的网站和链接建设活动。包含了从排名跟踪到页面优化建议等一切的内容,相当全面。你甚至可以用它来下载所有你的竞争对手的反向链接!
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/IBP" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">Internet Business Promoter (Free Version)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>一块神奇的软件,提供了一系列功能,如关键字建议,链接建设和排名跟踪。最大的特点,通过和排名前10位的页面比较,告诉你如何应该优化你的网页。
</div>
<div>
</div>
<div>
【社会化媒体】
</div>
<div>
<p>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/BuzzBundle" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">BuzzBundle (Free Version)</strong></a> – 开发SEO PowerSuite套件的同一个团队做的,使得它更容易识别到底哪些用户是你的真正的网站的受众,我之前做了很多优化流量的方法,发现其实它都能帮我自动完成的,相见恨晚啊。
</p>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://hootsuite.com/" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">HootSuite (Free Version)</strong></a><span style="color: #404040; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;"> – </span>这是我管理Twitter,Facebook和Google+的首选工具。你可以用它来监视的社交网络来的搜索字词,以及你的一些社交网站的日程安排。
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/Synnd" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">SynnD (Free Version)</strong></a> – 如果你需要一个流量稳定的twetter following或者是facebook like或者是google+1或者是社会化书签或者是Reddit上的顶,那么用SynnD,没错!
</div>
<div>
</div>
<div>
<a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.tweetdeck.com/" target="_blank" rel="nofollow"><strong style="border: 0px; margin: 0px; padding: 0px; outline: none;">TweetDeck (Free Version)</strong></a> – 已经被Twitter收购了,它是个很赞的桌面程序,帮你管理你的Twitter帐户。
</div>
<div>
</div>
<div>
【WordPress】
</div>
<div>
<p>
<strong style="color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff; border: 0px; margin: 0px; padding: 0px; outline: none;"><a style="border: 0px; margin: 0px; padding: 0px; outline: none; color: #ef007c; text-decoration: initial; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 15.454545021057129px; line-height: 22.787879943847656px; background-color: #ffffff;" href="http://www.matthewwoodward.co.uk/WPRobot" target="_blank" rel="nofollow">WPRobot (Free Version)</a> </strong> – 这是最好的WordPress的自动收集并发布的牛逼工具。它可以从无数的地方抓取内容,并且自动发布上去,当然前提是你得设置正确,用来做第1层链接,赞。
</p>
</div>
<div>
<em>译后语:</em>
</div>
<div>
</div>
<div>
<em>总算把这个文章翻译完了,感谢matth,这篇文章不仅仅是总结了免费工具,也算是个工具参考大全,很多工具虽然收费,但是并不是很贵,如果条件允许,可以考虑购买,毕竟,商业上没有免费的午餐,收费总有收费的道理的。</em>
</div>
</div>
How to identify the fake ink cartridges
2012-12-20T09:27:11+08:00
https://www.piginzoo.com/tech/2012/12/20/how-to-identify-fake-ink-cartridges
<p>Recently, my printer already ran out its inks, So, I need to change my ink cartridges, when I visited the web-shop, I found the original ink cartridges is so expensive, So, I turn to compatible one. But, I found lot of negative comments about <a href="http://www.britanniainks.co.uk">compatible ink cartridges</a>, they said, ” ‘compatible’ is high cost-performance, but, you have to distinguish the real compatible ink cartridges, not fake one”.</p>
<p>Below is the content collected in the web, to talk about how to identify the fake cartridges. We need to understand the usual means of forgery. According to the investigation in the fraud market, counterfeit and shoddy cartridges generally can be divided into four categories:</p>
<p>1.Both the product and the package are fake. Such products are completely fake, generally easier to identify, and the trick is stupid.</p>
<p>2.Package and anti-fake watermark all are real. This means that the packaging and ink cartridges is real, but the inside ink is fake. Such products are more common in the market, the packaging is over stripping from genuine, and cartridges use the original cartridge recycling box body, injected into the inferior ink. Means of forgery of such products is very clever, very difficult to identify. Because the packaging and ink cartridges are really, many dealers then try to mix the true and fake to sell. Though the ink is fake, if it runs out, then they can not be found easily. If the fraud supplier perfuse good-quality fake ink, then, it is much harder to find. As a result, though the cost for them maybe rise, but they still can earn lots.</p>
<p>3.Packaging is fake, but the cartridges are real, while the ink is fake.The previous method will use the original packaging, which is very troublesome, so more profiteers just use the fake packing, you know, current counterfeiting technology is already very high, such counterfeit packaging often reach real ones, the customers are very difficult to identify. Even you show any doubts to them, they immediately open the package, when you see the ink cartridge, Oh! Really! Bought.</p>
<p>4.Packaging is fake, but ink & cartridges are real. It sounds incredible, right? In fact, very common. But where are those packaging gone? Remember the two above mentioned? Yeah, all used for packaging the fake cartridges & inks. Some profiteers are sly to use these real packaging to wrap the fake cartridge & inks. Once the customers suspect it, the profiteers immediately unpack to show you the real cartridges inside.</p>
Glossary Abbreviations about Market Samurai
2012-12-17T12:22:33+08:00
https://www.piginzoo.com/tech/2012/12/17/market-samurai-glossary-abbreviation
<p><strong>This is a good article to talk about Abbreviation about Market Samurai, The copyright belongs to the original author, here just for reference.</strong></p>
<p><span style="font-size: 13px;">作者: Amy</span></p>
<p>1.关键词研究</p>
<p>(1)生成关键词</p>
<p>Google Synonym Tool(谷歌内查找同义词的工具): 生成关键词的来源之一</p>
<p>Google Search Keywords(谷歌内查找关键词的工具): 生成关键词的来源之一</p>
<p>Phrase Length(词组长度):关键词组中能包含的最大及最小单词数量</p>
<p>Add Permutations(增加排列):添加种子关键词的所有单词排列组合形成一个关键词列表</p>
<p>例如,如果种子关键词组是“fishing for trout”, 点击“Add Permutations”后会发现以下组合添加到了列表中:</p>
<p>fishing for trout;</p>
<p>fishing trout for;</p>
<p>trout for fishing;</p>
<p>trout fishing for;</p>
<p>for fishing trout;</p>
<p>for trout fishing;</p>
<p>(2)自然SEO</p>
<p>1) Searches(Total Searches)(总搜索量):每日搜索某关键词的总人数</p>
<p>例如,如果你搜索关键词时反馈给你的数字是123,090,那就说明每天有123,090人搜索这个关键词。</p>
<p>2)SEOT(SEO Traffic)(SEO流量):就某个关键词排名第一的网站每天所能获得的潜在最高访问量。</p>
<p>SEOT说明关键词的潜在流量值。所获得SEOT数值直接与Searches数值成一定比例(通常是Searches数值的42%)。</p>
<p>3) PBR(Phrase-to-Broad Ratio)(词组的广泛度):指的是关键词的词组匹配搜索量占广泛匹配搜索量的百分比。</p>
<p>低值就说明某些其他顺序的关键词组的搜索量较大。这个数值直接体现的是词组匹配搜索与广泛搜索的比较。</p>
<p>例如,搜索“online lottery”和搜索“lottery online”有同样的Broad Searches value(广泛搜索量);但是,“online lottery”的PBR值是25%,而“lottery online”的PBR值是16%。也就是说,如果每天含有关键词“online”和“lottery”的搜索量达到5,425,每天“online lottery”的搜索量是1,332,而每天“lottery online”的搜索量是891。用PBR可以检测关键词组的最佳排列顺序以及关键词潜在价值。</p>
<p>4) Trends(趋势图):Trends是用来说明某特定关键词的月流量趋势。</p>
<p>Trends能说明关键词是否具有季节性波动,因此要重视Trends,将其纳入考虑范围之内。</p>
<p>这里有四个独立的例子,显示不同的趋势:</p>
<p>Village Cinemas(“Village Cinemas”Search Trends)(关键词“Village Cinemas”的流量趋势):关键词“Village Cinemas”具有季节性波动。它搜索量的基础数相对来说较稳定,峰值出现在学校放假期间。优化“Village Cinemas”会带来稳定的流量数,且流量数在学校放假期间会出现巨大的增长。</p>
<p>(3)Adwords (Google按点击付费广告)</p>
<p>1)AWT(Adwords Traffic)(Adwords流量):指的是就某关键词排名第一的谷歌广告商每天通过广告获得的总流量。</p>
<p>2)AWCTR(Adwords Click Through Rate)(Adwords广告的点击率):点击排名第一的谷歌广告的数量和这个关键词的总搜索量的百分比。这个数据来源于Searches数据和ATW数据。</p>
<p>例如,AWT/Searches=AWTCTR</p>
<p>3) AWCPC(Adwords Cost Per Click)(Adwords广告的每次点击费用):对于某关键词在Adwords广告内排名第一的每次点击,广告商所要支付的金额-指的是市场内每个访问者的市场价值。为了更好地理解关键词,要同时考虑AWCPC和SEOT值。同时运用AWCPC和SEOT得到SEOV值。SEOV=AWCPC×SEOT</p>
<p>(4)Competition(竞争度)</p>
<p>1)AWC(Adwords Competition)(Adwords竞争度):普遍使用的(定量的)基准指示器。表示全球投标某个关键词的广告商的数量,以及如何与其它关键词竞争。数字越高,竞争程度就越强;数字越低,竞争程度就越弱。</p>
<p>2)SEOC(SEO Competition)(SEO竞争度):以谷歌的指数为依据,包含同一词组顺序中的某个特定的关键术语的总网页数。数据来源于谷歌。</p>
<p>3)SEOTC(SEO Title Competition)(SEO标题竞争度):网页包含了标题中关键术语的所有单词的网页数。数据来源于谷歌。</p>
<p>4)SEOLC/SEOLTC:与SEOC、SEOTC意义类似。表明在项目设置中区域市场的竞争度。</p>
<p>5)SEOTCR(SEO Title Competition to SEO Competition Ratio):SEOCT比对SEOC。低值表明市场竞争度较弱。</p>
<p>(5)Search Types (搜索类型)</p>
<p>1)Broad Searches(广泛搜索):选择与“broad match”(广泛匹配)相匹配的类型,SEO流量数就与搜索含有“trout”与“fishing”的词组的人数有关,这类词组不限顺序或者含有其它附加词。然后点击访问搜索结果中排名第一的网站。</p>
<p>例如,如果关键词是“trout fishing”,SEOT值就会包括使用以下词组的人:trout fishing;trout fishing tips;fly fishing for trout;fishing for trout from a boat等许多变体。</p>
<p>2)Phrase Searches(词组搜索):选择与“phrase match”(词组匹配)相匹配的类型,SEO流量数就与搜索词组的人数有关,词组包含了关键词中的某些具有特定排列方式的单词。然后点击进入访问搜索结果中排名第一的网站。</p>
<p>例如,如果关键词是“trout fishing”,SEOT值就会包括使用以下词组的人:trout fishing;trout fishing tips;rods for trout fishing;New Zealand trout fishing vacations等许多变体。</p>
<p>3)Exact Searches(精确搜索):选择与“exact match”(精确匹配)相匹配的类型,SEO流量数就与输入精确术语搜索的人数有关。</p>
<p>例如,如果关键词是“trout fishing”,SEOT值表示输入精确词组“trout fishing”搜索且点击进入访问搜索结果中排名第一的网站的人数。</p>
<p>(6)Other(其他)</p>
<p>1)Positive Keywords(肯定关键词):positive keywords能广泛的过滤以目标关键词为基础生成的关键词列表。</p>
<p>例如,已有的词组是:trout fishing;extreme trout fishing;trout fly fishing;fly fishing;New Zealand trout fishing;river trout。如果你只想要包含了“trout”的关键词组,那就在“Positive Keywords”处输入“trout”,然后点击“Update”。在迅速浏览关键词列表之后,移除不包含“trout”的关键词组,只留下以下列表:trout fishing;extreme trout fishing;trout fly fishing;New Zealand trout fishing;river trout。</p>
<p>2)Negative Keywords(否定关键词):negative keywords能广泛的过滤以非目标关键词为基础生成的关键词列表。</p>
<p>例如,已有的词组是:trout fishing;extreme trout fishing;trout fly fishing;fly fishing;New Zealand trout fishing;river trout。如果你不想分析与“fly fishing”有关的词组,就在“Negative Keywords”处输入“fly fishing”,然后点击“Update”,列表就会被过滤,留下:trout fishing;extreme trout fishing;New Zealand trout fishing;river trout。</p>
<p>3)Import(输入,即将一个数据库转移到另一个数据库):输入规范的关键词列表。列表中的每个关键词或关键词组都要单独占一行。转移的文档可以试.txt(记事本的文本文档),.xls(微软公司的Excel文档),或者是.csv(Comma-Separated Value)。</p>
<p>4)Export(输出):将“Keyword Analysis”的信息输出到.csv格式的文档。</p>
<p>5).csv file(.csv文档):CSV文档是用来储存表制数据的文档类型。表格中的每项都是用逗号分开的。这类文档可以用Excel,Open Office以及其他许多程序打开。</p>
<p>2.SEO Competition(SEO竞争度):</p>
<p>(1)其他</p>
<p>1)DA(Domain Age)(域名使用年限):域名的使用年限,根据在WHOIS Records第一次注册登记的日期。</p>
<p>2)PR(PageRank):反应网页链接的整体质量与数量。(搜索引擎使用的一种网页重要性评估方式,pagerank的值决定了网页在搜索结果中的排名),通俗的说就是网页排名。</p>
<p>3)BLP(Page Backlinks):除本站内部链接外,外部指向这个网页的链接的总数目,俗称外部链接或返回链接。具体数字是根据你输入的URL来确定的。例如,URL是 www.timeanddate.com,其BLP值为162,000,表明域名之外存在162,000个指向URL www.timeanddate.com的链接。BLP可以通过三种方式表现出来,使用左边的下拉框,它能显示Internal backlinks(内部反向链接)(出现在同一域名下的反向链接),External backlinks(外部反向链接)(只出现在其他域名下的反向链接),或者是Total(内部和外部反向链接的结合)。</p>
<p>4)BLD(Domain Backlinks)(域名反向链接):本站外指向整个域名(全部网页)的链接的总数目。例如,URL是 www.timeanddate.com,其BLD值为1,710,000,比起BLP值高出很多。这些数字的差别取决于直接指向URL www.timeanddate.com的站外的链接,例如http://timeanddate.com/worldclock/meeting.htm。Domain Backlinks是整站返回链接数,Page Backlinks是某个网页的返回链接数。</p>
<p>5)BLEG(Government /Education Page Backlinks):站外指向Government(.gov)或Educational(.edu)资源的链接的总数目。这与Domain Backlinks类似,因为它包含了域名内的所有网页。</p>
<p>6)DMZ(DOMZ Listing):网站是否被列在Open Directory Project’s Directory(一个人工编辑管理的网址目录集合)。<a href="http://www.dmoz.org/about.html">http://www.dmoz.org/about.html</a></p>
<p>7)YAH(Yahoo! Listing):网站是否被列在Yahoo! Directory</p>
<p>8)Indexed Count:已经被Google等搜索引擎收入索引的域名的网页数</p>
<p>(2)On Page(在页面内的一些可以SEO的要素如下)</p>
<p>1)Title(Keyword in Title Tags):网页<title>处是否含有关键词</title></p>
<p>2)URL(Keyword in URL):网址URL是否含有关键词</p>
<p>3)Desc(Keyword in META Description):在<meta />“description”处是否出现关键词</p>
<p>4)Head(Keyword in Header Tags):在网页内容的<h1>,<h2>,<h3>处是否出现关键词</p>
<p>5)CA(Google Cache Age):自Google最后更新这个网页缓存的天数</p>
<ol>
<li>Rank Tracker</li>
</ol>
<p>(1)关键词</p>
<p>1)Last Checked:上次Rank Tracker运行的时间</p>
<p>2)Primary Domai:Rank Tracker中的主要域名</p>
<p>3)Keyword:ranks上正在被搜索的关键词</p>
<p>4)Broad Position:不在引号内的关键词</p>
<p>5)Phrase Position:在引号内的关键词</p>
<p>6)G(Google):谷歌上编入索引的网页数</p>
<p>7)Y(Yahoo):雅虎上编入索引的网页数</p>
<p>8)B(Bing):必应上编入索引的网页数</p>
<p>9)Ranking Page:域名上的网页或通过排名找到的URL</p>
<p>10)BL:网页上反向链接的数目</p>
<p>11)PR(PageRank):网页排名</p>
<p>(2)Domains(域名)</p>
<p>1)Domain:通过排名检测的域名</p>
<p>2)Indexed Pages:被某个搜索引擎编入索引的域名上的网页数</p>
<p>3)G:Google</p>
<p>4)Y:Yahoo</p>
<p>5)B:Bing</p>
<p>6)BL(Backlinks):反向链接的数目</p>
<p>7)PR(PageRank):反应网页链接的整体质量与数量,网页排名</p>
<p>(3)其他</p>
<p>1)Search Depth:</p>
<p>Lets you select how deeply you want Market Samurai to track a ranking. If you select a shallow search and your site is lower in ranking than the selected depth then it will register as a “-” value. Deeper searches take longer for Market Samurai to perform. (不太好翻。)</p>
<p>让你选择用Market Samurai来追踪排名的深度。</p>
<p>2)Export:将“Rank Tracker”的信息输出到.csv格式的文档。</p>
<p>3)Export History:将“Rank Tracker”的历史数据输出到.csv格式的文档。如果追踪的URL数据超过一天,那么以前的数据也可以被输出。</p>
<ol>
<li>Monetization</li>
</ol>
<p>(1)寻找产品</p>
<p>如下图:</p>
<p><a href="http://www.eachshares.com/wp-content/uploads/2011/04/Monetization-affiliate.png"><img title="Monetization affiliate" alt="" src="http://www.eachshares.com/wp-content/uploads/2011/04/Monetization-affiliate-300x202.png" width="300" height="202" /></a></p>
<blockquote>
<p>Amazon</p>
</blockquote>
<blockquote>
<p>Src (Source) – The source of the affiliate product</p>
</blockquote>
<blockquote>
<p>Department – Product department in Amazon that the product is listed in</p>
</blockquote>
<blockquote>
<p>Image – Image of the product</p>
</blockquote>
<blockquote>
<p>Item – Title, description and URL for the product</p>
</blockquote>
<blockquote>
<p>Price – The sale price of the item on Amazon.com. May vary due to special deals</p>
</blockquote>
<blockquote>
<p>Sales Rank – Sales Rank of this product among products from the same category</p>
<p>ClickBank</p>
</blockquote>
<blockquote>
<p>Src (Source) – The source of the affiliate product</p>
</blockquote>
<blockquote>
<p>Item – Title, description and URL for the product</p>
</blockquote>
<blockquote>
<p>EPS – Earned per sale: This is the average amount that an affiliate earns for each sale of this product</p>
</blockquote>
<blockquote>
<p>Commission – The percentage commission you would earn for sales of this product</p>
</blockquote>
<blockquote>
<p>Recurring – Whether this product has recurring payments</p>
</blockquote>
<blockquote>
<p>Gravity – A representation of the number of distinct affiliates who earned a commission via this product</p>
<p>Commission Junction</p>
</blockquote>
<blockquote>
<p>Src (Source) – The source of the affiliate product</p>
</blockquote>
<blockquote>
<p>Image – Image of the product</p>
</blockquote>
<blockquote>
<p>Item – Title, description and URL for the product</p>
</blockquote>
<blockquote>
<p>Price – Price of the product</p>
</blockquote>
<blockquote>
<p>Commission – The percentage commission you would earn for sales of this product</p>
</blockquote>
<blockquote>
<p>7-Day EPC – Average earnings per 100 clicks over a 7 day period for the advertiser</p>
</blockquote>
<blockquote>
<p>3-Month EPC – Average earnings per 100 clicks over a 3 month period for the advertiser</p>
<p>PayDotCom</p>
</blockquote>
<blockquote>
<p>Src (Source) – The source of the affiliate product</p>
</blockquote>
<blockquote>
<p>Item – Title, description and URL for the product</p>
</blockquote>
<blockquote>
<p>Price – Sale price of the product</p>
</blockquote>
<blockquote>
<p>EPM – Earnings per month</p>
</blockquote>
<blockquote>
<p>Commission – The percentage commission you would earn for sales of this product</p>
</blockquote>
<blockquote>
<p>Recurring – Whether this product has recurring payments</p>
</blockquote>
<blockquote>
<p>Gravity – A representation of the number of distinct affiliates who earned a commission via this product</p>
</blockquote>
<p>关于Amazon, Clickbank, Commission Junction(CJ), PayDotCom里的各种相应参数介绍,请参阅<a title="国内外优秀的网赚联盟介绍评论,分享成功经验体会。" href="http://www.eachshares.com/category/internet-marketing-union/" rel="nofollow">网赚联盟</a>介绍部分。</p>
<p>(5)Find Content (查找内容)</p>
<p>PC(Phrase Count):关键词出现在文章主体的次数</p>
<p>IC(Instances of Conten):文章在网上反复发表的次数(注意:Market Samurai搜索文中的文字板,以实现反复发表,因此它可能潜在选择一个常用的词组,并认为在网上反复发表的文章得到更多实例。运行“Find Content”可以检验IC数值是否正确。)</p>
<p>PR(PageRank):反应网页链接的整体质量与数量。其排名有Google的网页排名算法决定,原创的比较好,所以我们要创造有价值的内容给我们的读者。</p>
<p>BL(Backlinks):网页初次发表至今获得的外部链接数量</p>
<p>Age:文章初次发表的日期</p>
<ol>
<li>Promotion(推广)</li>
</ol>
<p>(1)Available Sources of Backlinks(反向链接的资源)</p>
<p>Squidoo:Squidoo是一个社区网站,允许用户创建感兴趣的主题网页。</p>
<p>Hubpages:Hubpages是为分享高质量、用户生成的内容而设计的网站。</p>
<p>Weebly:Weebly是个免费的创意网站,主要研究如何简化制作用户生成内容的网页。</p>
<p>Scribd:Scribd是个文档共享的网站,允许上传文档。</p>
<p>Yahoo Answers(O)-Open Questions:Yahoo!Answers是一个社区的问答的网站。</p>
<p>Google Blog:Google的博客平台,可以免费在上面注册账号,开博客。</p>
<p>WordPress:Wordpress是一个开源博客发布应用程序。</p>
<p>Follow Blog:Follow Blog是一种博客数据库,有Follow功能。</p>
<p>Backlink Magic:Backlink Magic is a database of blogs which have Follow enabled. This search targets pages found in this database</p>
<p>Google Forum Search:谷歌专门的搜索论坛内容的一个产品。</p>
<p>PhpBB:phpBB是一个用PHP脚本语言编写的受欢迎的互联网论坛。</p>
<p>VBulletin:vBulletin(vB)是一种商业互联网论坛软件。</p>
<p>Snitz:Snitz Forum2000是一个免费的,开源ASP论坛的包裹。</p>
<p>(2)Backlinks Factors(反向链接要素)</p>
<p>SRC(Source):网页的来源;最初使用的工具</p>
<p>Backlink(Backlink Source)</p>
<p>F(Follow):显示网页是否使用dofollow链接或是使用Nofollow链接</p>
<p>PB(Pingback):返回链接源是否支持pingbacks还是trackbacks。</p>
<p><a href="http://en.wikipedia.org/wiki/Linkback">Pingback and trackback</a> are methods by which a website’s author can keep track of who is linking or or referring to their articles or pages。</p>
<p>PR(PageRank):反应网页排名</p>
<p>BL(Backlinks):指向网页的反向链接的数量</p>
<p>(3)Pingback HTML Options(Pingback HTML选项)</p>
<p>No Follow:链接格式,是No Follow的标志,</p>
<p>New Window:在新窗口中打开链接</p>
<p>List:在列表中显示链接(如果“Table”也在内,链接就在表格中显示)</p>
<p>Table:表格中显示链接</p>
<p>Market Samurai(市场武士)首字母缩写术语表英文原版出处:<a href="http://www.noblesamurai.com/dojo/marketsamurai/8457-glossary-of-market-samurai-acronyms" target="_blank">http://www.noblesamurai.com/dojo/marketsamurai/8457-glossary-of-market-samurai-acronyms</a> 有兴趣的可以阅读原版。</p>
<p>注:此片文章出自 <a href="http://www.eachshares.com/2011/04/market-samurai%E5%B8%82%E5%9C%BA%E6%AD%A6%E5%A3%AB%E9%A6%96%E5%AD%97%E6%AF%8D%E7%BC%A9%E5%86%99%E6%9C%AF%E8%AF%AD%E8%A1%A8/" rel="nofollow">http://www.eachshares.com/2011/04/market-samurai%E5%B8%82%E5%9C%BA%E6%AD%A6%E5%A3%AB%E9%A6%96%E5%AD%97%E6%AF%8D%E7%BC%A9%E5%86%99%E6%9C%AF%E8%AF%AD%E8%A1%A8/</a></p>
The past time
2012-12-10T15:58:05+08:00
https://www.piginzoo.com/life/2012/12/10/the-past-time
<p>I collected old blogs from <a href="http://www.blogbus.com">blogbus</a>, and sina blog, just for memory of old past time.</p>
<p>blogbus blogs: <a href="http://piginzoo.blogbus.com">http://piginzoo.blogbus.com</a></p>
<p>Sina blogs: <a href="http://blog.sina.com/piginzoo">http://blog.sina.com/piginzoo</a></p>
<p> </p>
notes from reading dingdelaotou about SEO
2012-12-08T12:07:56+08:00
https://www.piginzoo.com/tech/2012/12/08/notes-from-reading-dingdelaotou-about-seo
<p>This blog just record the notes and understanding after reading <a href="http://www.dingdelaotou.com" title="dinglaotou">dingdelaotou</a> ‘s blog:</p>
<p>感谢丁老头,从他的博客上学到了很多东西,将学习的心得记录在此,作为备忘。</p>
<p>http://www.dingdelaotou.com/243.html</p>
<blockquote>
<p>用户从开始搜索到决定购买的三个阶段,而这三个阶段是以用户搜索的关键词来定位的:</p>
<p>1.类别搜索阶段</p>
</blockquote>
<blockquote>
<p>2.对比搜索阶段</p>
</blockquote>
<blockquote>
<p>3.购买搜索阶段</p>
<p>把上PPC广告的关键词锁定在第3阶段的目的性及转化率通常都比前2个阶段高,而且我们可以把pre-sale的工作留给其他网站和其他人,来到我们的landing page的都是购买意向已经很明确的准用户了</p>
</blockquote>
<p> </p>
<p>http://www.dingdelaotou.com/327.html</p>
<blockquote>
<p>Squeeze Page是电子邮件营销(Email Marketing)中的用语,打开这些书和软件的页面后呢,很多基本上都会出现一个收集访问者email的小框。这些小框中有文字、图片甚至是视频,再配以一些具有冲击力的call to action,让你冲动得把自己的名字和email填上去再点提交。然后对方的autoresponder程序会发一封邮件到你填写的邮箱,让你点击链接确认邮箱的有效性或者直接把许诺的免费报告、免费电子书或者试用版的软件发给你。作者在autoresponder中预先把销售信写好,再进行一系列的设置,包括信件发送的时间间隔,如1、2、5、8、14天,在你提交你的email的这些天数后都会收到作者预先写好的销售信,每封内容都不同,越来越深,越来越把你引向“buy now”的按钮。等这5封信发完也差不多进行5次的追踪了,作者可能不会再往你信箱再发同样的销售信了。。但如果以后作者再开发出一款joomla的自动采集插件,那他就可以用上次收集的你的email再对你进行类似推销,无穷无尽……达到了最大化利用,而不是只能用一次,这也是email marketing的厉害之处</p>
</blockquote>
<p>http://www.dingdelaotou.com/129.html</p>
<blockquote>
<p>我们在AdWords乃至其他搜索引擎的竞价系统上打广告的目的是什么?答案是带来高质量的目标流量并产生转化.这种竞价广告系统的出现的确改变了传统的广告模式,Google Adwords竞价广告系统的推出应该被载入世界广告史册.</p>
<p>SEO免费,但出效果慢;ppc广告收费,但15分钟内就可以将目标客户送到你选定的Landing Page。SEO关键词、页面内容相对固定,变化较小;ppc广告非常灵活,可以随时变化广告文案和登录页面,快速将目标用户送到指定页面,非常适合用于盈利性测试。</p>
<p>广告排名由2个因素决定:广告质量和最高点击出价,你可以出价最高,但却可能不是排名最好。广告排名得分(AD RANK)=质量得分×最高点击出价</p>
<p>QS由3个因素组成:关键词广告的点击率,关键词、广告文案和登陆页文案的相关性,一个用户体验良好的登陆页. 据推测CTR比重最高,可能有2/3,不过这些因素也都在不断变化中,随时可能降低或提高,引进新的因素等。其余2个因素也极端重要,大概占25%-30%之间,如果登陆页面及相关性做得不好是很难得到高质量分的,这个绝对要引起重视. 点击率是整个广告成败的核心,那核心中的核心就是:创建一个令搜索者无法拒绝的广告,不点开看看究竟他(她)会心痒。</p>
</blockquote>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
Setup your wordpress
2012-12-08T09:42:04+08:00
https://www.piginzoo.com/tech/2012/12/08/setup-your-wordpress
<p>We use WordPress as the scaffold for our website. It makes website setup to become so easy, just 10-20 minutes, a wonderful website comes out.</p>
<p>The process is quite simple. Either you use virtual host or VPS, setup process all are easy. The pre-condition is, your PHP & Mysql is ready. The below is the brief steps to make it run:</p>
<ol>
<li><span style="line-height: 19px;">upload the WP program package(PHP source zip package), and extract them in service side.</span></li>
<li><span style="line-height: 19px;">setup a database, including database name, username, password and previledges</span></li>
<li><span style="line-height: 19px;">at last, you just type the URL in your browser, the wizzard for setup is coming out, do it following the instruct, done!</span></li>
</ol>
<p>Sounds easy?! yeah, it is easy! but not finish yet, you still need to install some plugins:</p>
<p><strong>All in One SEO Pack</strong></p>
<table>
<tbody>
<tr>
<td>Out-of-the-box SEO for your WordPress blog. Version 1.6.15.2</td>
<td>By Michael Torbert</td>
</tr>
</tbody>
</table>
<p><strong>Automatic SEO Links</strong></p>
<p>Forget to put manually your links, just choose a word and a URL and this plugin will replace all matches in the posts of your blog. You can set the title of the link, target, rel and also you can know every moment how many times a word has been changed.</p>
<table>
<tbody>
<tr>
<td>Version 2.0.1</td>
<td>By Emilio</td>
</tr>
</tbody>
</table>
<p><strong>Baidu Tongji generator</strong></p>
<p>This pulgin generates Baidu Tongji script for WordPress Blog.</p>
<table>
<tbody>
<tr>
<td>Version 1.0.1</td>
<td>By Haoqisir</td>
</tr>
</tbody>
</table>
<p><strong>Disqus Comment System</strong></p>
<p>The Disqus comment system replaces your WordPress comment system with your comments hosted and powered by Disqus. Head over to the Comments admin page to set up your DISQUS Comment System.</p>
<table>
<tbody>
<tr>
<td>Version 2.73</td>
<td>By Disqus</td>
</tr>
</tbody>
</table>
<p><strong>Google Analytics for WordPress</strong></p>
<p>This plugin makes it simple to add Google Analytics to your WordPress blog, adding lots of features, eg. custom variables and automatic clickout and download tracking.</p>
<table>
<tbody>
<tr>
<td>Version 4.2.8</td>
<td>By Joost de Valk</td>
</tr>
</tbody>
</table>
<p><strong>Google XML Sitemaps v3 for qTranslate</strong></p>
<p>This plugin will generate a special XML sitemap which will help search engines like Google, Yahoo, Bing and Ask.com to better index your blog. With qTranslate support.</p>
<table>
<tbody>
<tr>
<td>Version 3.2.8.1</td>
<td>By DSmidgy, NeoEGM, Arne Brachhold</td>
<td>Visit plugin site</td>
<td>Settings</td>
<td>FAQ</td>
<td>Support</td>
<td>Donate</td>
</tr>
</tbody>
</table>
<p><strong>WordPress Database Backup</strong></p>
<p>On-demand backup of your WordPress database. Navigate to Tools → Backup to get started.</p>
<table>
<tbody>
<tr>
<td>Version 2.2.3</td>
<td>By Austin Matzko</td>
</tr>
</tbody>
</table>
<p>When all done, you can begin to write your first blog, and show the website to friends!</p>
Put everything to cloud
2012-12-07T22:43:11+08:00
https://www.piginzoo.com/tech/2012/12/07/put-everything-to-cloud
<p> </p>
<p><a href="http://www.piginzoo.com/wp-content/uploads/2012/12/u36738444111587755222fm23gp0.jpg"><img class="alignleft size-thumbnail wp-image-35" title="cloud" src="http://www.piginzoo.com/wp-content/uploads/2012/12/u36738444111587755222fm23gp0-150x150.jpg" alt="" width="150" height="150" /></a>I ever used ShengDa cloud server(VPS), but that’s for server. Recently, I began to use cloud in my desktop.</p>
<p>Now, every morning, I will open my evernote, write down the todo list in a new document, and give it a easy remembered title. I also write down my notes and my burst idea. Evernote is just what i wanted before. You can regard it as word, but it can help synchronize all content to cloud, without worry losing them when hard-disk crashed. When You want to read it in another computer, you just download the software, lgoin, then patiently wait it, after minutes, you can see all your archived document.</p>
<p>Another is cloud-disk, it already became the hot words long before, we all know dropbox, skydrive, google drive etc. But, in China, you have to consider to use the local product for the network block by government. You can find exact replicators in CHina, they are baidu-yun, 360 yun, kingsoft cloud disk etc. What i am using now is baidu cloud. I used 360 cloud first, but shortly afterwords, i found the 360 cloud had the upload quota, that annoy me very much, then i gave up it and turned to baidu-cloud. I even map my desktop directly to the cloud, when i put files to the folder in the desktop, it immediatedly synchronizes to internet in the background. I will never worry about losing them now.</p>
<p>What’s more, I found even in my mobile phone, which is HTC android system. It has a file explore software, i forgot the exact name, it already integrates the cloud file, which means, you can open a file from your cloud disk in the internet, yeah! really awesome!</p>
<p>but, for me, i still think these are not enough at all, what i dream is, everything can be put to internet cloud, but very nature, very smooth, it is best that it cannot make me realize whether i am using local resource or cloud resource, that time, maybe i can throw away my local disk, never worry my hardware fault anymore.</p>
How do I select cheap virtual host?
2012-12-07T16:43:15+08:00
https://www.piginzoo.com/tech/2012/12/07/how-do-i-select-cheap-virtual-host
<p>recently, I am using virtual host for SEO, but choosing virtual host is really a boring thing, I have tried many venders, but until now I cannot find a satisfied one.</p>
<p>Since i am living China, the shit government makes lots obstracle in the internet, so, I have to use VPN or proxy to access some foreign websit, what’more, the foreign company does not trust Chinese people’s credit, they often need to strictly validate our information …. all of this make my virtual host setup becomes trouble and frustrated.</p>
<p>I first select a virtual host in Taobao, which is the biggest C2C e-business website, I found a store running by a Chinese guy, their name is “LaoXueZhuJi( laoxuehost.com)”, it is really cheap, 5Yuan/mo, so, I bought 2 virtual host, after trying sometime, I found they are very slow unless you use VPN, and more bad thing is, they often down, the answer from their helpdesk, is , the physical server is attacted by DDOS, God!</p>
<p>I have to turn to other famous vender, some friend suggest me “hostgator.com”, it is not so expensive, so, i think, why not try? I applied for 1 month trial, spend 8$, but, nightmare came, then. My account is blocked after I used for 1 day. I talked to their online helpdesk, they ask me to verify my account, they said maybe i miss some information or wrong information. but you know, calling USA is quite expensive cost for Chinese, I tried to use skype, but failed(it’s another story, skype is trash, at least for me), so, I asked them to call me, then I get a call from hostgator. The girl asked me the account name, but I cannot give her the satisfied answer, because i do forget the exact information I input 2 days before, she insist that she cannot verify me. I was angry! I told her I cannot provide other information, and if she cannot help me to verify, i will use hostgator never. Fortunately, at last, she passed my verification.</p>
<p><a href="http://www.hostgator.com" title="HostGator"><img class="alignnone size-full wp-image-26" title="hostgator" src="http://www.piginzoo.com/wp-content/uploads/2012/12/images.jpg" alt="" width="161" height="114" /></a></p>
<p>Then, I tried bluehost, which is the most famous host. I have to say, it really deserves it, the register and purchasing process is very smooth, and at last, I bought whole year service. Without networkband, disk, and domain parking limitation, yeah! I am satisfied with it.</p>
<p><a href="http://www.bluehost.com" title="Bluehost"><img class="alignnone size-full wp-image-27" title="bluehost" src="http://www.piginzoo.com/wp-content/uploads/2012/12/logo.jpg" alt="" width="209" height="51" /></a></p>
<p>Still, I investigated some other vender, but not try, just compared their products and packages, most are not impressive, except ixwebhosting, their package can provide 15 dedicated IPs for us,cool, but I missed their promotion duration, so, i wanna to wait Christmas for their promotion coupon.</p>
<p><a href="http://www.ixwebhosting.com" title="ixwebhosting"><img class="alignnone size-full wp-image-25" title="ixwebhosting" src="http://www.piginzoo.com/wp-content/uploads/2012/12/images-1.jpg" alt="" width="269" height="188" /></a></p>
<p>That’s my virtual host selection experience, hope can help you!</p>
新浪的博客
2010-06-05T00:00:00+08:00
https://www.piginzoo.com/life/2010/06/05/sina-blog
<h2 id="序">序</h2>
<p><em>鉴于blogbus的关闭,甚至不给留个备份的机会,我赶紧把我新浪的博客迁移过来吧,省的某天某件事trigger着把新浪博客也给关了。</em></p>
<p><em>顺道吐槽一下blogbus,居然连备份的机会都不给,真的是十分垃圾。新浪也好不了哪里去,我的这个博客对应的账号,自2010年就被封掉了,一直没有恢复,导致我新浪的博客之旅结束了,我现在连后台都无法进入。</em></p>
<p><em>花了一下午,人肉整理了旧的博客,仿佛是一部时光机,让我想起了那些熟悉的面孔,也看到了自己这些年的思想变换和成长,十分感慨,尽管很多博文中表达出来的想法还很幼稚和天真,但是缺始终透露着真诚,真诚的面对这个世界,真诚的热爱这个世界,希望这种对世界的真诚,一直可以陪伴我,慢慢变老。</em></p>
<h2 id="2013-01-11">2013-01-11</h2>
<p>刚才央9播放了朱枫烈士的纪录片,她对革命的执着和舍身取义,让我深深感动。这几天,南周的事情,让我们看到了这个政党的龌龊,我在看纪录片的时候还在想,如果她上天之灵看到她为之献出生命的理想,最后会变成这样,会做何感想。看完这个记录片子,我渐渐明白了,其实,这个假设根本就没有任何意义,在那个特定的历史时期,在那个她对自己的信念抱着无比的坚定的时候,这个信仰其实就是她生命的一部分,甚至是全部。抛开宣传的那些,真的为这样一个能为自己的理想而献出生命的人,充满了敬意。而作为普通人,我们甚至连追求理想的勇气都没有了,或者更可怜的是,我们甚至寻不到应该去追求什么。没有了理想,没有心里神圣的东西,就没有了情怀,生活会变得索然无味。那么,物欲上刺激就理所应当地填充进来。</p>
<p>可是细细问来,我却不知道我的理想是什么,毕竟是个普通的人。什么都可以成为信仰,就像物质的东西,亦可以。比如像对苹果,对乔布斯的个人崇拜,其实崇拜也是一种信仰。</p>
<h2 id="2013-03-01">2013-03-01</h2>
<p>最近在为公司的事不停奔波忙碌,心中充满焦虑,如何才能赚到钱,如何能找到一个很好的方向,常常困扰着我。有时候,猛然抬头才意识到,年华的逝去。</p>
<p>工作这些年,还算努力,也经历过很多公司和企业,面对过无数各种形形色色的人,也不断地在经历各种的身边事和观察着件件社会的事,也算是逐渐理解人在生活在这个社会上的意义。其实,很多人都是充满着恐惧,对未来的恐惧,对自我定位的恐惧,本质上,我们仍然未摆脱一个孩子的心理,心中对未知充满好奇,同时又夹杂着恐惧。</p>
<p>对社会体系的理解也逐渐深刻,人确实是分为三六九等的,除了外因,其实还是取决于自己的心态和定位,别人永远是镜子,你会不停地去跟他们比较,映射自己的内人,把自己想象作某个人或者某类人或者某些人的集合,虽然自己不愿意承认,但是潜意识里就是这样。内心强大,足以驾驭自己扭曲别人的人毕竟还是少数。所以,不用刻意地因为这点而自我贬低,也很坦然地接受试图改变自己的种种尝试失败带来的挫败感。你我都是随波逐流的大多数,改变真的是太难了,除非天生就具备那个特质。</p>
<p>但是,我们其实有渴望改变,改变其实是有代价的,只不过我们在初期的理想化会蒙蔽我们对改变的成本的估计,而改变后你真正了解了改变的代价和成本时,又会因为不肯放弃沉没的成本,而变成行为和生活的惯性,而固执地坚持下去。可是,人生就是个赌局,这个过程中又会出现什么呢?什么都可能出现,这大概就是生活最迷人却又残酷的地方吧。</p>
<p>对于商业,逐渐加深了理解,光鲜亮丽的成功故事都是悲喜后的粉饰,谁不是经历过血淋淋的存活,基本的商业游戏规则要熟悉和运用,这当然是必须的。还要加上敏感、嗅觉、决心、灵感,这是什么,是智商和情商的综合。最后才是最重要的,是运气,是命。什么财务自由,穷爸爸富爸爸,这些让你曾经的鸡血,只演变成最初的带你进入黑森林的女巫,早已消逝地无影无踪。而,面对黑漆漆的这片森林,和一个个凶猛的强壮的丛林存活者,你只有坚持活下去或者选择放弃退出游戏。玩游戏,我们的心理却往往都是,退出是失败者,退出不甘心,男孩子的天性决定了我们不可能退出,至少这个退出的理由很难被自己找到和被自己说服。</p>
<p>昨天看着眼前那个吃饭的小东西,我看着他,冲着他笑,他抬起头,也冲着我笑,没有一丝的造作。他其实就是我们内心深处最纯洁的东西的真实的化身,我们被各种现实包裹地呼吸困难的时候,我们尝试寻找我们精神世界落脚地的时候,突然发现,那个最懵懂最无知最天真的甚至不理解你的现实的这个小东西,其实就是这上天给我们的最好的灵魂,未被玷污的灵魂。你就觉得,你存在价值,又多了一份,而且是最重要的一份,保护好这个小天使,给予他一个未来,物质上的,精神上的。</p>
<p>Anyway,吐槽无力但是很舒服,也分享一下自己的感受跟所有的认识我的不认识我的朋友们,一起共勉吧,前面无论是什么,都得努力勇敢地走下去。</p>
<h2 id="2013-09-14">2013-09-14</h2>
<p>看完<a href="http://www.niubo.cc/article-1627-1.html">寒门难再出贵子,读书也改变不了命运?</a>,颇想写点什么。</p>
<p>我算是那些穷孩子中的一员,克服自卑的心理,走的很确实太辛苦。后来发现,人人皆有,毕竟那个年代都是贫穷和稀少霸占着世界。而现在,这种自卑心理只变成部分孩子的心理状态了。文章看上去赤裸裸,貌似有所加工,无妨了,它道出了那些浮象下面的很多话,虽然谈不上醍醐灌顶,却也很多让人可以深深思考,让人还是感叹和唏嘘。这个岁数,已经不太相信什么狗屁励志了,这种赤裸反倒让人容易共鸣起来。</p>
<p>命,人一叩,认吧。充满了宿命论。人活着就是活在网里,活在一个小世界里。这个世界的宇宙中心,就是身边的最爱的亲人,引力最大,影响最大。当然,这种影响有好的,也有坏的,这个是客观的,你没的选的,这个是必须认命的。文章里说的,父母帮你帮你编织的网,网住你人生,兜着你飞的更高。嗯,确实,深有体会。相信,没有听爸妈的话,贸然地闯进社会的那些同学都深表认同。而听了父母的安排,享受着安逸的同学们更是开心自己当初的明智。挣扎后,生活富足的,功成名就的毕竟是小概率时间,不得不深深认可。特别是自己干后,更明白,关系和机会便是一切,别人给你机会,让你活下去,你才能活下去,赤裸的真理,绕不过去。所以,不用质疑,不用清高,顺从地被他们认为”对“的东西捋直,强暴,顺从,然后适应到享受,是一个必需的过程。这点上,冯唐是个聪明人,牛逼的人,所以很顺理成章地混入体制,混到局级,真真地是一个极品,佩服死了。</p>
<p>愚笨的我+勤奋的我,认知总是慢一些,也决心这样去做了,也认真去这样做了,却做的那么蹩脚。心里总是放不下,让人挂牵的那个小小的自我,那个不愿意被蜡封的孩子的心。做个铁盒子,牢固地那种,把它放进去,上一个锁,真的不敢丢失了他。还是想被顺从的同时,保持一丝地反抗,哪怕是个姿态也可以,死了就没了,gone。我知道,他永远都不会gone,那是一种至死都夺不走的东西。</p>
<p>物欲我喜欢,喜欢高档的餐厅,拉菲,和刺眼的金碧辉煌。喜欢银沙碧海,满眼的翘臀丰乳。和大家一起,谈论那些高尚的话题,畅谈时弊。我打心眼里喜欢这种生活,这种生活是幸福的,不会觉得腻,是必须的。现在、和未来也为能享受到这些,不断地努力。可是,同时呢,我也喜欢,突然从喧嚣中脱身,在安静的那个下午,独自捧着书墨,让各种思绪在字间流浪,跟自己灵魂对话,和书里活着的那个作者对话,深深吸气,或者心灵抽搐的感觉。和高潮的性爱相比,这同样让人刺激不已,真的。</p>
<p>看了这篇文章,我无力去反抗地批判,不住地点头,表示顺从,但是,也更坚定了保护那个盒子里的孩子的决心,活着就是这样,生活就是这样,你得明白,你为什么活着。</p>
<h2 id="2012-12-5">2012-12-5</h2>
<p>I am a naughty piggy living in the zoo, I love nature, love friends, love all happy & nice things.</p>
<p>我是动物园的猪,那只漫步自由的动物园的小猪,虽然我知道,自己身处在牢笼般的动物园当中,但是不影响我悠哉地溜达在鳄鱼馆旁凉爽的林荫道上,在我们这条街道上,有晚上爱熬夜的猫头鹰,她总是深藏着她真实的感情,还有变色龙、总是爱睡觉的大公鸡,熬夜熬到红眼的兔子,他们都过得很好。企鹅说,她想变成是一只天鹅,所以她一直在勤奋地努力。还有那只即使失恋,还是坚强地站着的火烈鸟。总是深沉思考的眼镜猴,那些可怜的已经被蛇盯上树蛙,那边,鬣狗在狮子和豹面前低下了头。八哥跟我时不时说说话,我也会跑去和河马聊聊天。我走着,我看着,我兴奋地大叫着。太阳下,懒洋洋的我,度过悠闲快乐的每一天……</p>
<h2 id="2010-6-15-引">2010-6-15 引</h2>
<p>“大多数人很少能够独立地思考:在大部分问题上,他们所接受的意见都是现成的意见;他们无论是生来具有还是受人哄骗而接受这套或那套信仰,都同样感到满意,这些都可能是真实的。在任何社会里,思想的自由可能只对很少的人才有直接的意义。但这并不是说,某些人有资格或者有权力选择一批专门享有这种思想的人,它决不证明,某些人有要求决定人民必须想什么或信仰什么的权利的这个假定是正当的。</p>
<p>使精神自由对知识进步起主要推动作用的根本之点,不在于每个人都可能有能力思考或写点什么,而在于任何人对任何事由或意见都可以争论。只要异议不受到禁止,就始终会有人对支配着他们同时代的人的意见有所疑问,并且提出新的意见来接受辩论和宣传的考验。</p>
<p>使思想获得生命的,是具有不同知识和不同见解的个人之间的相互作用。”</p>
<p>—- 哈耶克</p>
<h2 id="2010-05-30-关于美团">2010-05-30 关于美团</h2>
<p>今天吃了美团的蛋糕,和美座团的涮锅,就想,这东西,挺好,有人替我们找好了要团的东西,大多都是品牌的,很放心,很方便也很实惠的,享受到了优惠。不错。</p>
<p>不过,美国的GroupOn才是鼻祖,据说,他们的团购已经相当的细化,比如面向地域的,面向不同的生活方面的,细化的很,估计,国内以后也会向这些方面发展。</p>
<p>而我的一个想法,不知道是不是已经被实现了,就是,实现一个自助式的团购方式。这完全是由于当初装修的时候团购的经历。往往是某个网友自己发起,然后他去砍价,拿到折扣,分享给报名的人。为什么不能把这种模式拓展到这里呢。</p>
<p>跟进一步,网站类似于一个平台,提供一些信用保证、支付手段,让团购的人们可以自助式地发起一个团购,然后又可以方便的在线支付。</p>
<p>不过,再往后想,就不断地想到了淘宝。其实,淘宝已经具备了这个环境,现在,要做的就是再增加一个团购模式,让普通的人的议价能力再进一步提高,也使的店家的销售量得到大幅提升。</p>
<p>然后呢,做一个品牌的Portal,把一些优质的团购项目挑选出来,推荐出来,不用很多,但是一定要精品,就类似于每天美团的。不同的是,美团是自己较劲脑真地想出项目,而淘宝是可以根据人气,和一些消费引导理念,从中挑选出一些。淘宝的优势就在于,他们知道哪些项目是由确实的潜质,他们做的只是挖掘,而不是创造。</p>
<p>中国从现在开始到未来很长的时间,走入了一个消费主导的大时代,个人感觉,这些模式,很有价值。</p>
<h2 id="2010-05-30-我很">2010-05-30 我很</h2>
<p>我很老了。</p>
<p>我很怀旧了,很怀念那朦胧的小时候。很想一直在晚上的童年的梦里,很不想被清晨的喧闹吵醒。</p>
<p>我很麻木了,我能很快就能忘记一个个的让我很激动很愤恨很痛心的事件和事情,比如孙志刚,比如SARS,比如三聚氰胺,比如石首,比如通钢,甚至连王家岭都很快就要被忘记了。</p>
<p>我很适应现在的角色了,很害怕改变了,很怕失业,很怕被老板冷落,很怕公司倒闭,很怕自己要再一次和汹涌的每年上百万的年轻人们一起赛跑了。</p>
<p>我很会装逼了,很可以在饭馆里对服务员吆五喝六,很可以对小弟们评头论足,很会对儿子装模作样的批评,发火,很快就能模仿出我爹训我的那副模样。</p>
<p>我很少再跟狐朋狗友们一起不着六了,很少再去五毛一串,五块一瓶小二的小酒馆了。也很少和他们通电话了甚至,很多人都是开心上默默地踩踩脚印,很默默地祝福一下而已了。</p>
<p>很少再专心于技术了,很多时候,很在意股票的盈亏得失,很在意工资涨幅,很在意房子大小和车子的贵贱。很喜欢看各种八卦消息,小道艳色。很少读书,很少看报,很多时间都在各种链接上蹦来蹦去,很会消磨的时间和情绪。</p>
<p>我现在觉得时间过得很快,周一干开始上班,就很忙碌到了周五,周末还没很爽,就又开始了很忙碌的下周了。很快地,又转眼到了春节,一年年的,马勒戈壁地,过得很快。</p>
<p>总之,现在活得很傻逼。</p>
<h2 id="2010-05-30-无题">2010-05-30 无题</h2>
<p>阳光正午,白云在天上变换着各种神奇的形状,一个安静的下午又悄悄地开始了。</p>
<p>突然觉得自己的很小,在这由无数无数地鲜活地个体的海洋中,挣扎的一个,无论是在形体上,还是在心理上。</p>
<p>韩寒的《青春》,一反过去的嬉笑怒骂,平淡地写着他们的青春,挣扎的青葱岁月。任何的一个,都是从那里曾经一步步地走过来,那段生命中最珍贵的我们和他们,是多么地憧憬未来,充满了多少对未来美好的幻想,世界仿佛就在一个人的全部内心里面,多么地骄傲,多么的自由。</p>
<p>然而,我们都没有想到,我们的未来原来是这样的。一套房子成为了青春的终结符,被一个叫“成熟”的炮弹无情的击落而意外终止,从天上,梦想,到现实地硬着陆,让我们真的真的无法适应,可是,我们终于还是适应了。后来,如我们每个人都很清楚的那样,我们居然被现实强暴的居然产生了快感。症状便是,要在单位里装逼,对领导装逼,对不喜欢的人和事装逼。对自己的耸样很坦然地接受了。从早上早饭,拉屎,挤车,单位里忙碌那些让你头疼又或让你闲极无聊的事情,恭卑地请示领导,揣度他们,月底,他们给我们发薪水,很感激。然后每天晚上看电视,泡论坛,看八卦,追逐各种刺激地头条,跟随一条条地新闻,象征性地跟着感叹一番,然后,如同早晨的大便一样,在匆匆的岁月之水中,瞬间消失殆尽。</p>
<p>他们很聪明,用他们无形的手,紧紧地抓住条条框框,让我们无法从routing中挣脱。他们创造了完美地体系、理论,让我们纳入其中。跟随着每天拥挤地人群中,来了去了,规律地运作。丝毫不给你时间、精力、清醒去挣脱。除此之外,他们还给我们了很多空间,一个个的很享受无脑感觉的节目被创造出来,让你但凡有一点试图挣脱的情绪也被这些海绵深深地吸嗜进去。于是,我们就很工作狂,很娱乐秀,很八卦控,很开心,很物质美好,很精神亢奋。但是,他们唯独不把两样东西给我们,真实和独立思考。</p>
<p>“你想这些、知道这些有什么用?!我有房有车有女人过得很好。我操,你有病吧,我去玩我的iphone,我的尼康了。我每年分红10几万,我过得好就行,管不了别人。你改变的了什么么,牛逼你先混上经理。”是的,我们很小,很无助。我们在他们制定好的规则里等待施舍,任何的改变和尝试,让我们充满了各种风险,我们的勇气已经缴械,我们无法挣脱他们编织的网,但是我们至少要会获取那两样东西。真实和独立思考。如果丧失了,我们很变得很可怜。如同狗一样,被主人豢养着,摇着尾巴去迎合这一切,被管制着,满足着。主人可以给你,也可以瞬间夺取你的一切。现在的拥有,也许只是暂时,也许是建立在其他的人的贫苦之上,即使你有拥有,也要有份感激,珍惜,甚至愧疚。各种物欲带来的只是快感,表面的刺激。骄横和自我,只会让我们失去善。无法得到内心的强大和安宁。</p>
<p>要很清楚,你只是数千万中既得的利益者,或者,如同韩寒说的,有精力上网的一个。而,还有他们,数亿的他们,如此的淳朴,善良,上不了网,不懂得反抗的思考,顺从地绵羊般地只知道怨恨命运的恶。他们是一样的,人的尊严,人的权力,人的自由是一样的。所以,当权的你们,当局的你们,做局的你们,牛逼哄哄的你们,一掷千金的你们,机关算尽的你们,勾心斗角的你们,。。。。,请尊重每一个个体,每一个鲜活的生命,每一个真实的面孔。他们和你们一样,有一样美好幻想的青春,有爱心环绕的家人,给他们一些生路,一些活路,一些实现青春梦想的道路。</p>
<p>很能感觉到,那暗潮的涌动。一个个事件,一个个人物,一个个的鲜活生命,如星星火,在这片深爱的土地上,忽闪忽闪的,他们或者消失了,或者被消失了,但是,他们是如此地真实地存在过。他们编制在一起,在看似独立的逻辑下,暗暗地联系在一起,他们从来不是孤立的。这张交织的网,如同子宫一般,孕育着伟大的远大前程,总有一天,会孕育而出,造就一个全新的世界。</p>
<h2 id="2010-03-04-关于房价">2010-03-04 关于房价</h2>
<p>今天跟个哥们聊起了房价,突然想到原来的这个文章,翻出来,在修正修正。</p>
<p>120平米,在朝阳公园附近的一般的商品房,目前单价在22000/平米左右。假设你手头有可以首付的100万。</p>
<p>还得做另外一些假设:</p>
<p>今后的投资收益率维持相对不变,平均在3.6%和银行5年期定存利率一样;</p>
<p>公积金的贷款利率是3.87%;房价10年后和目前价格相仿。</p>
<p>租:
目前这个地段5000能租到了一个120平的商品房。按照目前的状况,租他个20年,我们算算。</p>
<p>房租合计是5000x12x30 = 180万</p>
<p>而你手头的100万,按照3.6%的投资回报率,经过20年,变成了202万:=FV(3.6%,20,0,100,0) = 203万。</p>
<p>20年内,由于买房付出的9854(见下面计算)的支出,可以是租的话,可以获得9854-5000=4854的机会成本获得,这个机会成本按照3.6%的投资回报率计算20年所得:FV==-FV(3.6%/12,20*12,4854,0,0) 是170万.</p>
<p>最后,你的终值是:203+170= 373万。</p>
<p>买:
目前房子均价22000,总价在265万,首付100万,贷款165万。公积金贷款利率是3.87%。</p>
<p>那么,月还款额PMT = PMT(3.87%/12,20*12,1650000,0,1) 为9854元</p>
<h2 id="2010-03-01-写给教育部的建议">2010-03-01 写给教育部的建议</h2>
<p><em>这几天,<a href="http://news.hexun.com/2010-02-28/122796871.html">国家中长期教育改革和发展规划纲要意见稿公布</a>,正在社会范围内征集意见,我便把之前关于教育平民化的一些点滴思路通过邮件发到了教育部的收集意见邮箱[ghgy@moe.edu.cn],也算是为教育做点自己微薄的贡献。</em></p>
<p>关于利用互联网构建价格低廉、免费的再教育平台的建议</p>
<p>新的《国家中长期教育改革和发展规划纲要》中提到了普通教育后的职业教育和再教育,也提到了利用现代的互联网等新技术手段降低教育成本等热点,引发了本人的一些思考,写下来,供教育部的同志们参考。
本人有一个想法,通俗的讲叫“教育资源平民化”,就是让教育资源通过现在的科技手段,比如互联网,移动平台,共享出来,以极低的费用提供给全民,从而提高人们受教育的机会,降低受教育的成本,让更多的知识通过互联网这种简便快捷的方式传播给大众。</p>
<p>众所都知,目前的教育成本越来越高,本人参加的中科院的在职研究生学习,花费达到4万元,虽然可以学习到很多东西,但是,多数人是为了一个硕士文凭去的,而真正那些不愿意追逐证书却真正想学习到知识的人来说,成本过高,但是他又找不到别的途径去系统地学习,这本身就是一个矛盾。本人不由的感叹,所谓“再教育”只是一个“再证书”的过程,原因就是在于趋利的再教育模式导致,心中不由诞生一个平民化低成本的再教育手段。</p>
<p>具体的操作面上,本人觉得就是放开大学的教育资源,主要是提供共享的课程视频,并且提供检索,归类,评价,视频是最好的分享知识的手段,直接听老师讲课,比自己看书快捷高效的多。让最好的老师把他们最好的知识,讲给大家听,而且利用互联网存储无限,传播方便等特点,使的优秀的教育资源,永远流传下去,使不同时空的人都受益。</p>
<p>这会损害学校的利益,解决办法是,以极低的费用提供给人们,比如1节课1块钱,甚至1毛钱,当数以千万记的人们不断的来访问的时候,收益也是可观的,然后把这个费用和学校、老师三方分成,就可以满足他们各自的利益。而且,这种教育重在教育普及,并不提供诸如学位证书等学校的认证功能,并不妨碍他们最“赚钱”的业务,还提供了额外的收益,而且,越是好学校,他们的收益越大。</p>
<p>当然,如果考虑到一些附加价值,例如发证、认证等,可以进一步拓展这种模式,这些都有待细化和考虑,但是这些都是建立在前面的基础之上。</p>
<p>当然,这件事情,个人或者私人公司做都达不到最大的效果,最好是国家信产部、教育部等来协调运营,甚者可以成立一个国有的教育视频公司,并且有政策上支持。毕竟,说服大学们来开放教育资源,凭个人、公司,是很难实现的。既然CCTV可以实现高清的视频互联网网站,为什么教育部不能搞出一个呢,我觉得技术和资源上都不是问题,关键还是在于理念上的创新和博大的教育者的胸怀。</p>
<p>而,这对于个人而言,却能得到真真切切的收益,将来的社会是学习型的社会,也应该让每个人的享受受教育的权利。</p>
<p>这是本人的一些建议,也是本人对中国教育强国的一个梦想,希望这些建议和头脑风暴的点滴思路可以得到教育部同志们的共鸣和参考。</p>
<p>一个热爱学习的普通公民</p>
<h2 id="2009-12-31-拜拜了您的2009">2009-12-31 拜拜了您的,2009</h2>
<p>网路上尽是向2009年道别的声音,人总是需要一个类似于符号、里程碑式的精神力量,来驱动做些事情,告别旧的一年就是一个契机,也给自己的文字足迹的书写的欲望找个很好的理由。究其根,人是懒惰的,需要某种外在的力量驱使。人又是不自由的,要被某种力量驱动着才做事情,缺少那种随性地自由。</p>
<p>这样一个氛围中,作为懒惰的不自由的,又有几分盲从的自己,不免也心生对逝去的一年的感叹。</p>
<p>现在,很喜欢泡各种八卦论坛,和不着六的感觉。这一年来,认识了很多新朋友,天天看树洞,日日泡爱枣,然后如饥似渴地对不明白的词语和概念刨根问底,然后让豁然的快感包围。</p>
<p>几天前跟哥们搓饭,跟他们说,自己已经摆脱了对生活的恐慌感。想当年,空想三十岁后的程序员生活是多么窘迫,一把岁数不做管理者,还被人吆五喝六的是何等的尴尬。现在恐慌症状已经基本消失了,总体感觉,恐慌的原因在于无知,对生活的无知,对自己的存在意义的迷惑,对未来的不信任。</p>
<p>这个改变的过程,基本上是一个求知的过程,包含一系列的活动。</p>
<p>对经济、金融的学习,了解了商品社会的本质,明白买不起房是货币现象是投资机遇而不是自己的无能,也明白每天的财经媒体的人造新闻里的隐含的真实。</p>
<p>对管理的学习,对企业的本质的认知,明白了公司里上上下下的人的定位和职责,尝试着理解他们的种种表演,对每天的受虐活动表现的顺从的多了,但是也绝不因此患上快感。</p>
<p>炒股,很有意思,除了之上所说的商品社会,也彻头彻尾地明白了郑智化唱的“欲望社会”,一个看自己欲望潮起潮落,看市场百态的欲望展现,看那些真真假假,扑朔迷离,肮脏龌龊的百态的窗口,不炒股,理解不了那么深刻。</p>
<p>树洞里,窥到了人间的百种,感谢和菜头,他也把自己的真诚暴露给所有的看客,不是为了感动什么,而是一个真实的还原。2009,多元和真实,是我最大收获。所以,不得不提爱枣,透着愤青的情绪,却也还原给我们一个个的故事,尽管里面可能有的不是那么真实,至少他们努力在还原真实,一条条一天天,活生生地把这世界呈现出来。还要感谢twitter,让我听到了很多以前从来不知道的声音。</p>
<p>关于2009年的种种事件、声音、匪夷所思、惊心动魄,我没有必要回顾,套用流行语“你知道的太多了”,你们知道的一点不比我少,感谢互联网吧,他们是封不住的。有朋友说,你怎么愤青了。也有朋友说,你太幼稚,知道的太少了。其实,都没有说到我心坎里,我只是努力想了解世界的本来真实面目,自己去洞悉身体之外的客观和他人的主观。那位朋友至少文字上我很认同,我知道的太少了,这也是我想了解更多的原因,了解了更多,实际上是为了让自己跟从容不迫的生活。</p>
<p>偶看到柴静对卢安克的采访,很是感触,生活其实追寻那种和平、平和,生活其实无须追寻什么。</p>
<p>“我自己有梦想的日子都已经过去了,是因为我的梦想都已经变成了真实的生活,都已经得到了实现。所以现在,我就不必再追求自己的梦想,而可以去管所谓的现实问题,就是自己养活自己。 ”</p>
<h2 id="2009-08-30-别装丫呢">2009-08-30 别装丫呢</h2>
<p>痞性是个好东西,他让你真实,给自己褪去虚伪找到一个很好的理由和方式。那是一种拽劲,掩盖了自己的懦弱,或者说是压制了它,让自己变得略微强大了些。</p>
<p>痞性又往往带有非理性,让强大的自信和自由吞噬了少许地理智,特别是与之抵触的矛盾激化的时候,往往让人变得歇斯底里,而从一种本意很真实的状态变成癫狂。</p>
<p>但是痞性总的来说是好的,比起那些装腔作势和城府的政治手腕,它显得真实的多,所以,他往往受到正统的规则的排挤和不屑,下场往往是孤芳自傲的自怜自艾,但是因为它强调的自我的力量,也就不会如此的消沉和一蹶不振。</p>
<p>所以,我们看到很多自由,都试图以痞性的方式存在,那是一种很自然和合理的存在方式,他适合自由的人们。我们看到韩寒、李承鹏、连岳、爱未未、王小峰、宋石男。。。,话语里透着那股子狠劲、尖酸和嘲讽,如同鞭苔一样狠狠地抽打着现实的丑陋的道道疤痕。</p>
<p>我们其实也欣赏那些真实和严肃的人们,这两个形容词真是他们的特点,他们忧国忧民,看到身边,也放眼到全局,有容乃大的包容心态都深深地镌刻上崇高二字。像同龄的许知远、金融圈子的谭姐、新闻里的柴静、闾丘。我们同样对他们尊敬和信服。</p>
<p>然后,我们就可以唾弃那些了,身披的圣甲的叫兽、小丑和幕僚,以及为他们自己摇旗的狗们,这个所谓“多元化”的局域网内,给他们提供了一个肆虐犬吠的地盘,让大部分善良的大众观众,和很多无知的围观群众,被胡来幻去地左右,癫狂和盲从。</p>
<p>他们这个“多元”的舞台,是多年河蟹共同努力搭建出来的,“来之不易”,所以更要珍惜。河蟹们剪裁了很多东西,包括阉割了人性、压抑了公正、消灭了声音、强暴了思想,真的是如此的来之不易。所以,那些声音沉默后,这种来之不易,就更显得弥足珍贵了。但是,没有声音也是不行的,那是一个死的了世界,这也是不被允许的,因此,那些牛鬼蛇神就需要跳出来,叫起来、唱起来、跳起来,一种新的娱乐的物质的糜烂的春哥哥永生般的交响乐演奏起来,充斥了我们的世界。</p>
<p>善良正直的我们,只有龟缩在自己的世界里,投入自己的每天的忘我的工作繁忙中,生活琐碎中、让自己沉醉于兴趣的小众里、转移精力投入到资本游戏中。。。或许忙碌、职位、尼康、iPhone、上证、或者天伦等等这些东西,才让自己麻醉于自我的幸福和满足中。偶尔,我们也透过那些人造的窗口,看那些灯红酒绿的表演,跟着苦涩地笑。</p>
<h2 id="2009-08-18-谁也别怪就怪自己">2009-08-18 谁也别怪,就怪自己</h2>
<p>2009.8.11号,那天,是多好的离场机会啊,没有走,怪不得别人,只怪自己的犹豫和侥幸心理。</p>
<p>MACD继续恶化,KDJ继续恶化,RSI继续恶化,30日支撑已经就在脚下,前期上升通道的支撑位也就要破了,而各种死叉都早在几天前就出现了,而均线死亡交叉也已经形成,还不跑,为何呢?人啊。总是充满不切实际的幻想。</p>
<p>那天还对自己说,你看J已经快未负了,地价见地量了,还不知死活地买入ETF50。因为当时是重仓,还是在多看多的心理在作祟,竟然无视各种指标的提醒。现在客观的比较这多的心理和空的指标,无需多言,都明白。</p>
<p>写下此文,在以后提醒自己,不要再犯这样的错误,这种大跌下的逃顶机会是太珍贵了,需要记住。</p>
<h2 id="2009-08-08-转饭否语录">2009-08-08 [转]饭否语录!</h2>
<p>来自豆瓣,谨以此纪念还未复活的饭否。当然不只是饭否用户油菜,咱中国网民个个都是菜花飘逸。 我想说这样牛逼的网民群体是不可战胜的!</p>
<p>1.我这人从不记仇,一般有仇当场我就报了。</p>
<p>2.别在我的坟前哭,脏了我轮回的路。</p>
<p>3.已经将整个青春都用来检讨青春,还要把整个生命都用来怀疑生命。</p>
<p>4.是这样的张总,妳在家里的电脑上按了CTRL+C,然后在公司的电脑上再按CTRL+V是肯定不行的。即使同一篇文章也不行。不不,多贵的电脑都不行。</p>
<p>5.你要是鲜花,以后牛都不敢拉粪了!</p>
<p>6.我以为你只是1和3中间的数,没想到你还是1和3俩数的组合。</p>
<p>7.在网易看到一条评论:我指着一盆花,淡淡地说:草。我指着天空,淡淡地说:日。</p>
<p>8.先是《中国不高兴》,然后是《中国为什么不高兴》,接下来是《中国凭什么不高兴》、《中国怎么那么不高兴》、《你说中国怎么那么不高兴》、《凭什么让我说中国怎么那么不高兴》、《凭什么不能让你说中国怎么那么不高兴》、《我他妈哪知道中国怎么那么不高兴》……</p>
<p>10.自己选择45°仰视别人,就休怪他人135°俯视着看你。</p>
<p>11.Ralph W. Sockman说:当我们是少数时,可以测试自己的勇气;当我们是多数时,可以测试自己的宽容。</p>
<p>12.牧羊,一辈子都在急;金牛,一辈子都在守;双子,一辈子都在徘徊;巨蟹,一辈子都在等;狮子,一辈子都在控制;处女,一辈子都在准备;天秤,一辈子都在权衡;天蝎,一辈子都在猜疑;射手,一辈子都在玩儿;摩羯,一辈子都在奋斗;水瓶,一辈子都在做梦;双鱼一 辈子都不知道自己在做什么。</p>
<p>13.在职场中就应该像柯南那样,有一种我走到哪就让别人死到哪的霸气。</p>
<p>14.一食人族上班,经理再三交代不能吃同事,答应。过几天忍不住,偷吃一个清洁工人,当即被发现。其感悟是:千万别吃真正做事的人。</p>
<p>15.李碧华说过: 什么叫多余?夏天的棉袄,冬天的蒲扇,还有等我已经心冷后你的殷勤。</p>
<p>16.永远年轻,永远装嫩,永远不知好歹,永远热泪盈眶。</p>
<p>17.很多时候你只是某个人的练爱对象而非恋爱对象。</p>
<p>18.钱钟书先生对杨绛女士有这样一段评价,后来被社会学家视为理想婚姻的典范: 1、在遇到她以前,我从未想过结婚的事。 2、和她在一起这么多年,从未后悔过娶她做妻子。 3、也从未想过娶别的女人。</p>
<p>19.你攒够四块五,我也攒够四块五,我们就可以去民政局结婚了。</p>
<p>20.个人感觉,在网络上要转向“慢”了,资讯越快,越是要等几天让事实浮现,第一时间人肉,第一时间谴责,第一时间落泪,都无太多必要。</p>
<p>21.我爸面对我发胖一事发表了看法:没有韩红的命,还得了韩红的病。</p>
<p>22.你来我信你不会走,你走我当你没来过。——我们该这样对待缘分与爱。</p>
<p>23.你觉得别人牛B,他不一定觉得你牛B,但你要觉得别人傻B,在他眼里你也是一傻B,所以我认为牛B像单恋,傻B则是两情相悦。</p>
<p>24.“上了年纪最大的好处就是:年轻时得不到的东西,现在你不想要了。”</p>
<p>25.世界上所有男人都是骗子。不管是漂亮还是不漂亮的女人都会被骗。有所不同的是,幸运的女人找到了一个大骗子,骗了她一辈子。 不幸的女人找到了一个小骗子,骗了她一阵子。</p>
<p>26.人最软弱的地方,是舍不得。舍不得一段不再精采的感情,舍不得一份虚荣,舍不得掌声。我们永远以为最好的日子是会很长很长的,不必那麽快离开。就在我们心软和缺乏勇气的时候,最好的日子毫不留情地逝去了。</p>
<p>27.曾以为我是那崖畔的一枝花,后来才知道,不过是人海一粒渣。</p>
<p>28.现在你骂我,是因为你还不了解我,等你以后了解了我,你一定会动手打我的。</p>
<p>29.一日不读书,无人看得出;一周不读书,开始会爆粗;一月不读书,智商输给猪。</p>
<p>30.当前我国女性成功大概有如下四种途径:第一,学好英语,嫁老外。第二,学好英语,出国读书,嫁老外。第三,学好英语,出国读书,学成归国,嫁老外。第四,学好英语,出国读书,学成归国,努力打拼,嫁老外。</p>
<p>31.有的人聪明得像天气,多变;有的人傻得像天气预报,变天它都看不出来。</p>
<p>32.马不停蹄的错过,轻而易举的辜负,不知不觉的陌路。</p>
<p>33.石头记告诉我们:凡是真心爱的最后都散了,凡是混搭的最后都团圆了。</p>
<p>34.如果你不是经常遇到挫折,这表明你做的事情没有很大的创新性-伍迪.艾伦</p>
<p>35.爱情生活里,比找不到安全感更可怕的是什么?是找不到安全套。
36.两个人在一起,更多的不是改变了对方,而是接受了,所以说包容呢,如果光想着改变,那不是生活,那是战争。</p>
<p>37.一切问题最终都是时间问题,一切烦恼其实都是自寻烦恼。</p>
<p>38.人永远不知道谁哪次不经意的跟你说了再见之后就真的再也不见了。</p>
<p>39.很多事都介于“不说憋屈“和“说了矫情“之间。</p>
<p>40.通往成功的路,总是在施工中。</p>
<p>41.【你喜欢我天使的脸孔,还是魔鬼的身材?】【我就喜欢你这种幽默感。】</p>
<p>42.下车时导游小姐说:“请带好您的贵重物品。”他拉着我的手说:“快走,贵重物品”。</p>
<p>43.我不下地狱,谁爱下谁下。</p>
<p>44.猜一句英文:「ABABBBAAAAAABBBABAAAABBBBAABBBAAAAA」?〈答案:Long time no C〉</p>
<p>45.自己选择的路,跪着也要走完</p>
<p>46.我也不是非你不可。你也不是非我不可。真是一场误会。</p>
<p>47.想你的眉目,想到模糊。——突然觉得,思念大都如此,越来越淡</p>
<p>48.广播体操现在开始:╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗╔囧╗╔囧╝╚囧╝╚囧╗</p>
<p>49.在经年后,感叹,那两个少年:一个惊艳了时光,一个温柔了岁月。</p>
<p>50.你永远也无法理解,为了让自己对生活发生兴趣,我们付出了多大的努力。</p>
<p>51.孔子曰,中午不睡,下午崩溃;孟子曰,孔子说的对。</p>
<p>52.9个橙子分给13个小朋友,怎么分才公平?-杀死4个小朋友。</p>
<p>53.如果她(他)对你说:“忘了我吧。”你告诉对方:“我一直没记住。”</p>
<p>54.20岁看体力;30岁看学历;40岁看经历;50岁看智力;60岁看病历;70岁看日历;80岁看黄历;90岁看舍利。</p>
<p>55.史上最神秘的部门:有关部门;史上最神秘的人:知情人士;史上最权威的人:砖家叫兽。</p>
<p>56.“恋”是个很强悍的字。它的上半部取自“变态”的“变”,下半部取自“变态”的“态”。</p>
<p>57.就算是一坨屎,也有遇见屎壳郎的那天。</p>
<h2 id="2009-06-19--转做人不能太高也">2009-06-19 [转]做人不能太高也</h2>
<p>我在十八日晚上,才知道有群众向执政府举报的事;很快便得到噩耗,说CCAV居然开枪,死伤至数百人,而Google君即在遇害者之列。但我对于这些传说, 竟至于颇为怀疑。我向来是不惮以最坏的恶意,来推测CCAV的,然而我还不料,也不信竟会下劣凶残到这地步。况且始终微笑着的和蔼的Google君,更何至于无端 在《焦点访谈》中喋血呢?</p>
<p>然而即日证明是事实了,作证的便是伪大的高也。还有一人,是高也的那个同学。而且又证明着这不但是杀害,简直是虐杀,因为Google身体上还有被诬蔑的伤痕。
但AV政府就有令,说他是“黄网”!</p>
<p>但接着就有流言,说Google是被人陷害的。</p>
<p>惨象,已使我目不忍视了;流言,尤使我耳不忍闻。我还有什么话可说呢?我懂得外来网站之所以默无声息忍气吞声的缘由了。沉默呵,沉默呵!不在沉默中爆发,就在沉默中灭亡。</p>
<h2 id="2009-06-01-61节快乐">2009-06-01 6.1节快乐</h2>
<p>儿子还小,这是懂点事后的第一个儿童节,本打算休息一天带他玩,可媳妇说,不如6.2,错过高峰期,恩,是个好主意。现在啥都是高峰期,上幼儿园赶上,上小学也错不过,以后还有小升初,上高中、大学,就连过这个节也得错过高峰期,否则,满街都是花朵。中国啊,人是最不缺的资源。现在的孩子们呀,也只有儿子这个岁数能过两个真正的节日了。</p>
<p>国家给这个长不大的股市也送了个儿童节礼物:成品油上涨。这就是给中石油最好的礼物,当然也是大盘,因为中石油占着20%多的权重,这礼物是给这吹起来的小牛市的最好火上浇油。</p>
<p>前阵子说,要IPO了,着实恐慌了一阵,这才几天,就消散殆尽了。市场就是这样的忘我地非理性。可我当时就觉得,总的出点啥政策对冲一下吧,果然,今早出台了基金专业理财1对1服务,当时还没啥感觉,看了空空的评论才恍然大悟:</p>
<p>大盘今天也可能欢腾,因为有一个新规定要实施了,被国内基金业视为”革命性变革”的”一对多”专户理财也将趁6.1正式开闸,夸张地说,基金跨越式发展的契机正在到来。君不见那么多的黑马广告,为啥?有钱蒙当然有市场,有市场就有钱赚,散户几经波折,但还是认为自己不行,总寄希望于专家,现在好了,原来门槛定格在5000万元,现在才100万,这进一步的落实了“激活民间资本投资意愿”,5000万的不多,100万对于富裕的中国那是相当的多,你说这条新规好不好?当然好,会给市场带来数千亿的新资金。</p>
<p>数千亿,好,正好来承接IPO吧,想来,政策的制定确实有其连贯性和辛辣性。</p>
<h2 id="2009-05-31-有意思的人和事儿">2009-05-31 有意思的人和事儿</h2>
<p>这世上最遥远的距离,是活在自己生活里的人,和患上斯德哥尔摩综合症的人的距离。</p>
<p>周曙光也是个神人,个人的网址楞是让电信给封了<www.zuola.com>,好在zuo.la还能访问,赶紧照着上面的说明配了一把tor,也认识了tor,很精巧和强大的东西,网络的开源和自由的完美结合:<http://tor.zuo.la/overview.html.zh-cn>:</www.zuola.com></p>
<blockquote>
<p>法律、政策和技术的当前趋势以前所未有的程度威胁着匿名,破坏着我们在线言论与阅读的自由。 这些趋势也使得个人、组织、公司、政府间的通信更易分析,削弱了国家和关键基础设施的安全。 每一个新的用户、每一台新的中继都会增加网络的多样性,Tor 由此更能帮助你把安全和隐私的控制权重新掌握在自己手中。</p>
</blockquote>
<p>对于善来说,愚蠢是比恶意更加危险的敌人,愚蠢是一种道德上的缺陷,而不是一种理智上的缺陷: <a href="http://www.douban.com/group/topic/4368084/">http://www.douban.com/group/topic/4368084/</a></p>
<p>GWF是什么?GFW是Great Fire Wall的缩写,是金盾工程。这个工程由若干个部分组成,实现不同功能。防火长城主要指中国政府监控和过滤互联网内容的软硬件系统,由服务器和路由器等设备,加上相关的应用程序所构成。<a href="http://joyloft.net/?p=174">http://joyloft.net/?p=174</a></p>
<p>这片读书的小文写的不错<a href="http://blog.youxu.info/2009/05/17/read/">http://blog.youxu.info/2009/05/17/read/</a>:</p>
<blockquote>
<p>当然, 也要防止陷入两种极端. 一种是拼命的陷入只读经典书的信息焦虑中, 觉得每天的脑袋都要不一样才行, 每天都要读经典改变自己才行. 其实世界上没那么多经典, 完全不要害怕自己还没读某某经典, 使得自己比起别人来变得笨了. 人的脑袋, 只要充分自恰就行了, 不需要面面俱到. 这种信息焦虑也不是好事, 它会让人频繁的处于搜索新知识的过程中, 而放弃了对已有知识的咀嚼和再认识. 大凡一本好书, 如果作者写得非常自恰, 那基本上是不需要立即按照去找相关的书看的. 一本书, 总是要读个几遍, 才能完全领会其中的精髓, 然后再去找类似的书看, 才事半功倍.</p>
</blockquote>
<h2 id="2009-05-27-一次奇妙的gc之旅">2009-05-27 一次奇妙的GC之旅</h2>
<p>说是奇妙,完全是自我嘲讽,这个GC问题搞了我好几天。但是问题的根源最后居然这么匪夷所思,大大让我跌了眼镜。</p>
<p>在客户那里测试时候,闲来无事,就打开了GC,结果输出吓死人:</p>
<pre><code>[Full GC [Tenured: 187813K->188443K(967936K), 5.6577547 secs]
210095K->188443K(1040512K), [Perm : 11666K->11666K(11776K)], 5.6614647 secs]
[Full GC [Tenured: 188443K->188462K(967936K), 5.3311002 secs]
199316K->188462K(1040512K), [Perm : 11667K->11667K(11776K)], 5.3331488 secs]
[Full GC [Tenured: 188462K->188475K(967936K), 5.3410243 secs]
199651K->188475K(1040512K), [Perm : 11667K->11667K(11776K)], 5.3451174 secs]
[Full GC [Tenured: 188475K->182292K(967936K), 9.1802339 secs]
199252K->182292K(1040512K), [Perm : 11667K->11657K(11776K)], 9.1835024 secs]
[Full GC [Tenured: 182292K->182309K(967936K), 5.6274710 secs]
193066K->182309K(1040512K), [Perm : 11657K->11657K(11776K)], 5.6320208 secs]
</code></pre>
<p>我靠,居然都5秒左右的Pause,我确实也在console上面感觉到了这5秒的delay。靠,这么玩,我们的实时性完全就是个屁话了。当时就汗了。</p>
<p>回来就开始查,先把GC的文章翻出来,温习一遍所谓的新生代,老年代,局部GC,全GC,以及各种的GC算法和选项,然后就开始思考问题所在。</p>
<p>加上GC选项,架上JConsole,Jprofiler,Jstat。。。一个遍,期盼能找出什么线索,结果还真找到一些线索,只不过这些线索都无法帮助找到问题所在:</p>
<ul>
<li>Survivor Space总是0,从来都是0</li>
<li>Eden Space不到50%就Full GC了</li>
<li>代码里面没有System.gc调用</li>
<li>Full GC周期大概在1分钟左右</li>
</ul>
<p>加了一坨参数:-server -Xms512m -Xmx512m -XX:NewRatio=1 -XX:+PrintHeapAtGC -XX:PermSize=64m -XX:MaxPermSize=64m 。。。也没搞出个端倪。</p>
<p>曾经怀疑过是Perm区满了,加大加大,无效果。曾经还以进入Survivor的次数是0,修改了-XX:MaxTenuringThreshold,也是那样。Google了相关的GC bug,也跟我们这个对不上。</p>
<p>可是,我们的旧版本就一点问题没有,JDK1.6上也没有这个问题,就JDK1.5,测试了2个JDK1.5的版本都这个德行,太诡异了。比较旧代码和新代码,改动太多了,也无从查起,一时间郁闷的很。</p>
<p>然后就急了,把所有的线程都注释掉了,就剩下主线程,然后把主线程也pause掉,依然依然,啊啊啊!彻底崩溃汗疯狂。</p>
<p>就在绝望之际,同事突然叫道,RIM! 网上说,<a href="http://www.webapper.com/blog/index.php/2006/06/08/20060606021131/">RMI可能导致垃圾回收</a>!:
When you”re using RMI, you may be holding references to memory on non-local machines, so RMI will schedule Full collections at some interval. By default for Java 1.5 and below, that interval is every minute, which can cause significant overhead. However, there is no way to eliminate RMI scheduled collections; even “-XX:+DisableExplicitGC” will not prevent these collections. You can change the interval of collections, but setting too long of an interval may create very long Full GC pauses when it finally does run. (Pauses in excess of 60 seconds are not rare with a one hour interval, if the old generation is large and close to full.)</p>
<p>还有一些线索:<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6200091">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6200091</a></p>
<p>我靠,果然是,基本上和我们的感觉一致,就是一分钟啊。我们确实用到了RMI,是在JMX的RmiConnector中,这个connector实在主线程中启动的,难怪我注释掉了其他的所有线程还是那样呢。</p>
<p>那为什么旧版本没问题,JDK1.6没问题呢?!</p>
<p>赶紧冲去会查代码,发现旧版本中JMX上的RmiConnector由于参数控制,并没有打开,难怪呢?那JDK1.6为什么没问题呢?同事又发现了一个显得<a href="http://wikis.sun.com/display/CommSuite/Convergence+Performance+Tuning#ConvergencePerformanceTuning-TuningtheJVMRMIGCIntervalParameters">线索</a>:Tuning the JVM RMI GC Interval Parameters:The default intervals are:Before JDK 1.6: 1 minute,JDK 1.6: 1 hour。难怪呢?改成1小时Full GC一次了。</p>
<p>成了,都搞清楚了,就得像workaround了,一个办法,就是不启动RmiConnector,屁招,但是最管用。另外一个办法,就是修改Rmi的FullGC周期:-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000 改成10分钟,这招好多了,但是得修改启动参数。第三招,就是等将来的JDK1.6了,呵呵。</p>
<p>总之,这个问题是解决了,真的是让人匪夷所思,RMI还有这么变态的一个”Feature”,靠!幸好在同事的帮助下,解决了,否则,这将来如何面对客户啊,总不能对人家说,“对不起,我们遇到一个解决不了的问题,请升级JDK1.6”!!!</p>
<p>下面是一些GC的概念,省得老找,把一些关键结论放上来,备忘:</p>
<ol>
<li>
<p>Scavenge GC
一般情况下,当新对象生成,并且在Eden申请空间失败时,就好触发Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。</p>
</li>
<li>
<p>Full GC
对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:</p>
</li>
</ol>
<p>· Tenured被写满</p>
<p>· Perm域被写满</p>
<p>· System.gc()被显示调用</p>
<p>· 上一次GC之后Heap的各域分配策略动态变化</p>
<p>收集器主要有三种:串行收集器、并行收集器、并发收集器</p>
<p>基本收集算法</p>
<ul>
<li>复制:将堆内分成两个相同空间,从根(ThreadLocal的对象,静态对象)开始访问每一个关联的活跃对象,将空间A的活跃对象全部复制到空间B,然后一次性回收整个空间A。
因为只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,所以遍历空间的成本较小,但需要巨大的复制成本和较多的内存。</li>
<li>标记清除(mark-sweep):收集器先从根开始访问所有活跃对象,标记为活跃对象。然后再遍历一次整个内存区域,把所有没有标记活跃的对象进行回收处理。该算法遍历整个空间的成本较大暂停时间随空间大小线性增大,而且整理后堆里的碎片很多。</li>
<li>标记整理(mark-sweep-compact):综合了上述两者的做法和优点,先标记活跃对象,然后将其合并成较大的内存块。
对于服务器应用,我们使用Concurrent Low Pause Collector,对年轻代,暂停时多线程并行复制收集;对年老代,收集器与应用程序并行标记–整理收集,以达到尽量短的垃圾收集时间。</li>
</ul>
<p>参考资料:</p>
<ul>
<li>Tuning Garbage Collection with the 5.0 Java Virtual Machine官方指南。</li>
<li>Hotspot memory management whitepaper官方白皮书。</li>
<li>Java Tuning White Paper官方文档。</li>
<li>FAQ about Garbage Collection in the Hotspot 官方FAQ,JVM1.4.2。</li>
<li>Java HotSpot 虚拟机中的垃圾收集 JavaOne2004上的中文ppt</li>
<li>A Collection of JVM Options JVM选项的超完整收集。</li>
<li><a href="http://www.slideshare.net/gengmao/inside-the-jvm-memory-management-and-troubleshooting">http://www.slideshare.net/gengmao/inside-the-jvm-memory-management-and-troubleshooting</a></li>
</ul>
<p>默认,Young占33%,其他是Old。</p>
<p>Eden默认2M,Survivor默认64K。</p>
<h2 id="2009-05-25-oms">2009-05-25 OMS</h2>
<p>中移动研究院开发了这款OMS,其实后面是一个叫<a href="http://www.borqs.com/">播思通讯的公司</a>在后面为其做深度开发,是<a href="http://www.mobileuncle.com/thread-468-1-1.html">移动的背后技术力量</a>,其投资方也是在通讯行业早有战绩。</p>
<pre><code>播思通讯的全称为播思通讯技术(北京)有限公司,注册资金为600万美元,其全资股东为播思微系统香港有限公司(下称播思微系统)。播思通讯的注册时间为2007年9月,而播思微系统的注册时间只不过比这早了不到两个月。
播思通讯的董事总经理为黄绍球,他同时也是播思微系统的CEO。播思通讯的董事名单中,还有加拿大籍华人李晓波。这两个人同时还是风险投资基金黄石资本的合伙人,在进入风险投资领域之前均在半导体、电信行业有多年高管任职经历,其中黄绍球是黄石资本的董事总经理。
金沙江创投也宣称在播思通讯有投资。在金沙江创投的网站上,播思通讯赫然位列其投资项目之列。金沙江创投的董事总经理丁健曾创办亚信科技(NASDAQ:ASIA),这是第一家在美国纳斯达克上市的中国高科技公司。由于播思通讯由播思微系统全资控股,据此推算,金沙江创投对播思通讯的投资应该是通过播思微系统。
播思通讯的董事长为加拿大籍人陈锡源。陈曾就职于UT斯达康,担任该公司的网络解决方案事业部高级副总裁和CTO。在陈锡源之前,UT斯达康的CTO是黄小庆。2006年底,黄小庆离职去了中移动,目前黄是中移动研究院院长。
播思通讯的CTO饶宏则曾就职于摩托罗拉。据业内人士介绍,饶宏曾被称为摩托罗拉培养起来的最优秀本土雇员之一,是摩托罗拉EzX手机平台(基于Linux)的创始人,该平台后来演化成摩托罗拉著名的手机操作系统Linux-Java(LJ)。
除了饶宏之外,播思通讯的开发人员中还有一批也是来自摩托罗拉。
</code></pre>
<p>现在看,移动是想控制终端的入口,从而控制下游的产业链,够狠。</p>
<p>不过,作为普通用户,虽然对其做法深表厌恶,但是无奈之中只能屈从,实在是不想换号了。只要是它不破坏andriod的兼容性,方便部署andriod的各种应用,而且可以随着andriod的升级而升级内核,就也就忍了。如果这些基本的都做不到,绝对弃之。</p>
<p>目前搭载的手机里面,联想的OPhone,还有HTC的Magic,都是备选,其他的就算了。或者再等等,等三星、摩托等其他厂家的机子吧。</p>
<p>将有一个自己的大玩具,还是止不住的兴奋。</p>
<h2 id="2009-05-18-房价cpi和收入">2009-05-18 房价、CPI和收入</h2>
<p>这是全国的CPI增幅:</p>
<pre><code>2000年 0.4 %
2001年 0.7 %
2002年 -0.8 %
2003年 1.2 %
2004年 3.9 %
2005年 1.8 %
2006年 1.5 %
2007年 4.8%
</code></pre>
<p>如果从2003年计算,全国CPI涨幅在19%左右。</p>
<p>这是北京市统计局发布的数据,</p>
<pre><code>年度 CPI 收入增加 房屋价格指数
2000 3.5 8.9 -0.5
2001 3.1 8.5 1.3
2002 -1.8 15.6 0.3
2003 0.2 11.2 0.3
2004 1.0 11.5 3.7
2005 1.5 11.2 6.9
2006 0.9 12.2 8.8
2007 2.4 11.2 11.4
2008 5.1 13.5 10(没有数据,推测)
</code></pre>
<p>2003年至今,CPI上涨11.1%,房屋上涨了41%</p>
<p>这是社科院《2008-2009北京社会发展报告》中的数据</p>
<pre><code> 年份 价格 涨幅 收入 涨幅
2004年 4747元 15638元
2005年 6721元 41.6% 17653元 12.9%
2006年 8050元 19.8% 19978元 13.1%
2007年 11454元 42.3% 21989元 11.0%
2008年 13000元 13.5% 26901元 12.4%
</code></pre>
<p>2004年至今,收入累计上涨72%,而房价累计上涨173%!</p>
<p>这些数字都说明一个道理,房价在远远地领涨于收入和CPI,我们都知道我们统计数据的混乱和不精确,从上面社科院和北京市统计局的数据差别巨大就可以略知一二。我们也仅仅善意地认为他们统一口径不一致罢了。罢了,我们也只能从中看看趋势吧。</p>
<ul>
<li>数据大部分来自于国家统计局和北京市统计局。</li>
</ul>
<h2 id="2009-05-14-纪念youtube君">2009-05-14 纪念youtube君</h2>
<p><a href="http://www.yihaolou.com/2009/04/11/2440">http://www.yihaolou.com/2009/04/11/2440</a></p>
<p>公元二零零九年三月十七日,就是中国亿万网民为当天被封的YouTube君开追悼会的那一天,我独在网络上徘徊,遇见网友,前来问我道,”先生可曾为 YouTube写了一点什么没有?”我说:”没有”。她就正告我,”先生还是写一点罢;先生很喜欢看YouTube上的视频的。”
。。。。。。</p>
<p>太强了,老人家在天之灵看到自己的文章被如此地传颂,是何感想。
BTW,牛博也在年初倒下了,这带三块表的螃蟹啊!</p>
<h2 id="2009-05-12-杂七杂八">2009-05-12 杂七杂八</h2>
<p>不做无脑的沙文主义。个人更喜欢个人主义,个人主义不是所谓的自私自利的损人利己,而是,本着“己所不欲勿施于人”的理念,尊重个体的利益。</p>
<p>洪峰,哥们是个作家,也在反抗着现实,今后继续关注他。</p>
<p>一篮子货币:<a href="http://wiki.mbalib.com/wiki/">http://wiki.mbalib.com/wiki/</a></p>
<p>一揽子货币:经国务院批准,自2005年7月21日起,我国开始实行以市场供求为基础,参考一篮子货币进行调节、有管理的浮动汇率制度。人民币从原本紧钉美元的汇率制度,改为参考一篮子货币。</p>
<p>美元指数:<a href="http://wiki.mbalib.com/wiki/美元指数">http://wiki.mbalib.com/wiki/美元指数</a></p>
<p>M1货币投放量</p>
<h2 id="2009-05-01-转家有小学生">2009-05-01 [转]家有小学生</h2>
<p>家有小学生</p>
<p>文/刀尔登</p>
<p>我家的三年级小学生下课回来,眉飞色舞地报告:“今天我们班选三好学生,有三个人选我哩。”</p>
<p>我心里想这样的傻瓜全国也不过四五个,居然有三个和你同班,也是一奇。但嘴里还是说:“好小子!这儿是四块钱,一块钱是给你的,三块钱是给他们的。”</p>
<p>恰好一个朋友在我家做客,看到这个情景,脸一下子就绿了。儿子又拿出一张考试卷,挣到两块钱。朋友的眼睛鼓了出来。然后儿子下楼去玩,走时带上垃圾袋,又赚了五角钱。这时,我的朋友已经快昏过去了。等小学生一离开,他喘出一口气,语无伦次地说:“你还不如把他送到孤儿院去。”</p>
<p>我们就这个问题讨论了一会儿。我承认我的教育方针未必得当,不过,我也不能接受他的办法。他的女儿是严格按照各种规范、守则、礼仪培养出来的,是远近闻名的小君子。有一次我到他家,小姑娘送上一盘水果,说:“先生吃大的,园园吃小的。”我心里说:“哦,这个小伪君子。”</p>
<p>我也研究过新版的《小学生日常行为规范》和《小学生守则》。那里面的内容真的很好,很全面。有些条目,如“不吸烟,不喝酒,不赌博,远离毒品”,我本来就没想起来,幸亏阅读了《规范》,才加到对儿子的教育内容中去。</p>
<p>有些条目我知道怎么实现,如“不逃学”,我可以用罚款的办法来促使他遵守;有些条目,会有别人用罚款的办法来促使他遵守,如“不在建筑物和文物古迹上涂抹刻画”。经过朋友的劝说,现在我承认罚款不是好办法,应该讲道理,如有一条是“在公共场所不拥挤,礼让他人”,对此我应该告诉他:“你想被踩死吗?”这是非常有说服力的。</p>
<p>但确实有些事我不知道该怎么办。如《小学生日常行为规范》里面的“关心父母身体健康”,合乎古训,我非常希望儿子能做到,可怎么实现呢?我给他看过《二十四孝图》,他对鲤鱼跃出的故事有些兴趣,却说别的人物“变态”,我该怎么讲解?我的妻子感冒了,吃早饭时连打了四个喷嚏,儿子顿时乐不可支,我该批评他吗?</p>
<p>而父母最大的难处,任何《守则》或《规范》里面都没写。我们,与许多父母一样,既希望孩子能是个好人,又希望他有好的前程。也就是说,既希望他是个正直的人,又希望他在社会中成功。而以现在的情形,或可以预见的将来看,这多少有些矛盾。</p>
<p>上个月,儿子要我们“买荔枝,多多的”。他一向不喜欢荔枝,我和妻子自然要问是怎么回事。原来,他的班主任要过生日,而几天前,她曾偶尔谈到最喜欢的水果是荔枝。我非常不喜欢让孩子做这种事,老师过生日而学生讨好,这种事让我厌恶。但我们应该怎么指导他?</p>
<p>与此相类的事,以后还会有很多。成年人懂得分寸,懂得哪些事需要固守,哪些事可以通融,既可不失原则,也能保持人际关系的润滑,而孩子不可能理解这些。他一直不喜欢这位班主任,但我们并不能因此就要他什么也不送,那样直则直矣,危亦在其中也。我只好建议:“估计你的班主任会收到大量的荔枝,所以,你也许该送点别的,比如……一盒庆大霉素?”这个主意没被采纳,最后他按照母亲的建议,送了一张卡片。</p>
<p>既不想让他长成个骗子,又不想让他成为与别人格格不入的“狷”者。《老子》里面讲的“方而不割,廉而不刿,直而不肆,光而不耀”,那是非常好的境界。不过但凡写进《老子》的,那肯定是做不到的事,何况对一个孩子!</p>
<p>我觉得他学到了好多虚伪的东西,却不知如何纠正。纠正而不趋于另一端,是很难的事。我不反对儿子学一点虚伪之术,不过我想,对此他将来也许会有非常多的机会。上小学三年级的时候,还是先学诚实比较好。</p>
<p>前几天我看到他写的作文,叫《国庆游记》,里面有大量的溢美之词,无论是对路旁的风光,还是对他自己的幸福感。而他描写的那个地方,我简直就没去过。他洋洋洒洒地写:“拐过去我就看见了大瀑布,真是‘飞流直下三千尺,疑是银河落九天’啊!”我也看见过那个所谓的“瀑布”,比我高一头,用来淋浴倒正好。而语文老师在这一行浓圈密点,批云:“贴切!”我还能说什么?随他“直下三千尺”去吧。</p>
<p>我承认我的一些教育办法也不怎么样,但我有时“反着干”的理由只是想让孩子知道,除了正规的教育,世界上还有各种见解、各种行为。也许这给三年级小学生出了太多的难题,所以我已经着手纠正自己,比如我不再给他“工资”和“奖金”。而对他已经积攒起来的过多的资金,也开始陆续清理:我和他打扑克,把他的钱一点点赢回来。</p>
<h2 id="2009-03-25-买房值还是租房值">2009-03-25 买房值还是租房值?</h2>
<p>突然想到这个话题,便以自己周边的房价算算来看:</p>
<p>120平米,在朝阳公园附近的一般的商品房,目前单价在14000/平米左右。假设你手头有60万。</p>
<p>还得做另外一些假设:今后的投资收益率维持相对不变,平均在3%;银行的利率相对维持在5%;房价30后目前价格相仿。</p>
<p>租:
目前这个地段3500能租到了一个120平的商品房。按照目前的状况,租他个30年,我们算算。</p>
<p>房租合计是3500x12x30 = 126万</p>
<p>而你手头的60万,按照3%的投资回报率,经过30年,变成了145万:=FV(3%,30,0,60,0) = 145万。</p>
<p>20年内,由于买房付出的7110(见下面计算)的支出,可以是租户获得7110-3500=3610的机会成本获得,这个机会成本按照3%的投资回报率计算20年所得:FV=FV(3%/12,240,3610,0,0) 是118万。 30年中的后10年,这笔钱继续按照3%的年利往后滚,变成了FV=FV(3%,10,0,1180000,0),变成158万。</p>
<p>最后,你的终值是:145+158= 303万。</p>
<p>买:
目前房子均价14000,总价在168万。首付60万,贷款110万。银行利率是5%。</p>
<p>那么,月还款额PMT = <code>PMT(5%/12,20\*12,1100000,0,1)</code> 为7110元/月。</p>
<p>20年后,房款还清,共付170万。除去110万本金,额外付给银行60万的利息。</p>
<p>剩下的10年,由于租房还得每月3500,这个机会成本就成了你的收益:FV=FV(3%/12,120,3500,0,0),为50万。</p>
<p>租房的物业和取暖是房东付的,所以每年要付出5000的物业费+取暖费,所以,还要除去5000*30=-15万。</p>
<p>房子最终出售,按照当前市价算168万。</p>
<p>最后,你的终值是:168 + 50 –15 = 203万。</p>
<p>结论:
可以看出,差别不是一星半点,居然差了100万。</p>
<p>当然,这个分析里面做了很多假设,这些假设具有很多不确定性,比如房价可能在30年后暴涨或者下跌。另外,银行利率可能会大涨和大跌。还有通货膨胀因素等。这些都会给带来不同的分析结果。但,除了房子的暴涨外,其他因素对计算结果的结论影响应该不大。</p>
<p>另外,作为中国人来说,房子就是家,有感情的因素,一个稳定的房子就是一个稳定的家,这种感情上的收获也是一种获利。同样,租房子,可能要承担房东不续租的可能性,东奔西走地搬家导致的心理上的动荡感,也是一种幸福感的损失。</p>
<p>从目前的高房价来看,买房绝对不值,租房子还是划算的。等到房子跌到一定的心理承受力内,并且,还要在自己的经济上的风险承担之内的时候,买房子来建立自己的幸福感,还是有一定必要的。</p>
<p>不过,几乎所有的人还是愿意有一套自己的房子,那是一个梦想。人就是这样,是感情的动物,永远成为不了经济学里面的“理性经济人”啊,感叹!</p>
<p>注:终值FV的计算,都是通过Excel的公式计算得出。</p>
<h2 id="2009-03-18-tcp和ip">2009-03-18 TCP和IP</h2>
<p>常常跟socket打交道,却一直对TCP/IP的很多细节不慎了解,今天花了点时间学习研究一下,算是补补大学的课吧。</p>
<p>安装了wireshark的windows版本,奇怪的是,当服务器和客户端都运行在本机,好像不走网卡,类似于127.0.0.1的回路相应一样,sinffer工具捕获不到。最后只好再找台机器做实验。</p>
<p>对于sniffer工具,必须要熟悉所谓网卡的工作模式:广播、直接、混杂等,具体可google之。简单的将,直接是只接受到本MAC的包,而混合则接受所有到达网卡的所有包。这样我们就明白,做sinffer,都要将网卡设置成为混合模式。</p>
<p>连接</p>
<p>三次握手,没啥好说的,主要复杂的是各种特例情况。主要是Syn(客), Ack(客)+Syn(服),Ack(服)。另外注意的就是Syn会让Seq No加1,而ACK不会。</p>
<p>传输</p>
<p>TCP的发送顺序控制,主要是靠Seq No,客户和服务两端都有自己的Seq No,在连接时候初始化好。客户端和服务器发送的每一个包,都要告诉对端Ack的Seq和发送的Seq。啥意思呢?这个Seq就表示,我这次发送的起始偏移是多少,你上次发过来后,你的偏移是多少了,彼此做个对照。有点乱,找本书看看就明白了,不难。</p>
<p>不过我自己的实验看到一个奇怪的现象,服务器只给我(我是客户端)直接回了第二个包的ACK,第一个包就没回,难道说,他省了?</p>
<p>似乎每个包,都可以顺道携带控制信息(ACK,SYN,FIN…)。</p>
<p>我从java代码中socket.getSendBufferSize(),这个应该是windos内部TCP实现的大小吧。</p>
<p>我造了一个3000byte的包,发过去的时候,居然被拆分了3个。分别是1460,1460和80,这三个数挺怪的,为什么和buffer size不匹配?后来想明白了,这是由于以太网协议的最大MTU决定的,值是1500,除去IP和TCP的包头40 bytes,剩下的正好是1460。</p>
<p>PUSH标记是发送端告诉接受端,你接收到此包后,请理解向你的上层应用层提交数据。别再攒着了。但是现在这个标记一般都由TCP实现者自行决定啥时候设置。我看了Java API,就不提供设置接口。</p>
<p>另外,java的setBOOInline方法,是用来发送</p>
<p>拥塞控制</p>
<p>关于滑动窗口,书里面都讲的挺繁琐。主要的意思就是说,对端告诉你他的buffer多大,你就能发多大。每次消息他都会告诉你,你老得更新你的窗口大小。我sinffer的滑窗大小却是17440和65535(发送和接受端不一样)。</p>
<p>发送、接受窗口解决的是发送和接受端快慢的问题,但是如果之间的通路发生了拥堵怎么办?作为发送方,他关心接收方的窗口大小,就是上面提到的,书中叫Receive Window(RW)。但是他还得检测发送的通路的快慢,因此在通用的TCP实现中,提出了一个拥塞窗口Congestion Windows(CW),他是根据网络发送情况动态调整的,比如发送超时和确认的对比情况。然后,真正的发送的缓冲大小控制,就由Min(RW,CW)来决定了。</p>
<p>拥塞控制除了窗口方法外,还有针对发送方发送小包的Nagel算法和针对接收方接受小包的Clark算法。</p>
<p>Java中的setNoDelay就是来disable Nagel算法的,set为true时候,就disable了,false时候,enable算法了。默认应该是enable的,我猜。</p>
<p>超时</p>
<p>怎么判断超时呢?这个很难,因为你得实际情况实际分析,有的网络好,你超时就得短点。有的差就得长点。因此TCP实现大部分采用了一种“高速动态算法”,根据每次发送的情况,不断地更新超时时间。其中还涉及到一些概率因子等。</p>
<p>有的TCP采用Kepp Alive来检查连接是否继续。不过keepalive不是TCP规范的一部分。厂家选择性实现而言。在Windows是2小时。除非改注册表。Java提供setKeepAlive(true/false)来开关一个socket的KA机制,但是不提供keepalive的interval更改,以及重试次数选项。不过我们一般都是自己实现自己的应用层的心跳,自己干事自己更放心,呵呵。</p>
<p>过去遇到过绑定一个地址+端口,然后关闭后,很快再来绑定这个地址+端口,但是由于短时间内,资源没有释放,导致绑定失败。必须要通过设置setSoLinger为0才可以。查API,通过setReuseAddress也是干这事儿的,但是就是不管用啊。郁闷死了。如果不设置,默认的超时是120秒,2分钟。网上搜了一圈,都只是说ServerSocket对这个re-bind有效果,测试了一下,果然,很快又能绑定上了。靠。如果Client Socket不管用,您留着这个API不是混淆视听么?真操蛋。</p>
<p>Java默认值</p>
<pre><code>Linger : –1
send buffer : 8192
recv buffer : 8192
TCP No Delay : false
Keep Alive : false
SO timeout : 0 数据read超时时间,0表示一直block在读上。
OOBInline : false
Reuse Addr : false
</code></pre>
<h2 id="2009-03-11-人间的四月天">2009-03-11 人间的四月天</h2>
<pre><code>我说你是人间的四月天,
笑音点亮了四面风;轻灵
在春的光艳中交舞着变。
你是四月早天里的云烟,
黄昏吹着风的软,星子在
无意中闪,细雨点洒在花前。
那轻,那聘婷,你是,鲜妍
百花的冠冕你戴着,你是
天真,庄严,你是夜夜的月圆。
雪化后那片鹅黄,你像 新鲜
初放芽的绿,你是 柔嫩喜悦
水光浮动着你梦中期待的白莲。
你是一树一树的花开,是燕
在梁间呢喃,——你是爱,是暖
是诗的一篇,你是人间的四月天!
</code></pre>
<h2 id="2009-02-01-说说09年吧">2009-02-01 说说09年吧</h2>
<p>总的来说,很不乐观。虽然,节前基本上是上升态势收关,但是仍掩饰不住尾盘的颓势。节后可能会有反弹,但是随着年报的临近,压力会越来越大。</p>
<p>谈谈实体吧,看宏观数据也能明白,四季度6.8%的降速是惊人的。但是也是可以接受的,基本上和预期差不多。那么09年的预期同样的糟糕。</p>
<p>出口,不用说了,基本上日本、美国、欧盟都是持续的预期低迷,09年就走出萧条目前看是不太可能。其他经济体,如非洲、亚洲,可能能带动一些出口,不过杯水车薪。</p>
<p>消费,也不用说了,没有完备的社保、医疗、养老体系,我们普通老百姓是不可能消费的,任凭高管和经济学家们如何忽悠,钱包毕竟是自己的,这个光景,谁都知道,看紧了没坏处。</p>
<p>投资这块,也不好说,为什么换个口气了呢?主要是4万亿,加上马上要出台的10大产业振兴计划,以及未来中央肯定要推出的各种宏观刺激政策,投资这块还是有庞大的人造的推动力的,我也从来不对我们政府的宏观调控能力的担心。可,问题是,投资的两个问题是:在过去这么多年基建后,今后的再投资所带来的边际效应,递减的几率是大的。二一个就是这些新投资带来的资源配置的往往是低效的,最近央企不断的注资计划,缺乏透明,而民营企业信贷继续收缩,破产倒闭,就能窥视一二,要知道,市场调节的资源分配,这只无形的手才是最有效率的。</p>
<p>再看看货币政策,降息、降低准备金等释放流动性是对的,而且,央行还有一定的降息空间,这比欧美的黔驴技穷要有一定的优势。但是从统计上看,M1相对M2仍然走低,这表明M1代表的流动性仍然在下滑,思考背后的原因也很容易想通:老百姓、企业在这种环境下,会越来越趋向于保守,储蓄和存款就成为首选,这就导致银行长期存款代表的M2走高,从而吸收了降息释放出来的流动性,而且这种势还强于M1,那么反转在何时就需要耐心的等待了。啥时候,我们觉得可以拿出点钱消费了,企业觉得可以扩张投资了,时候就到了。可是,没个1-2年,我个人觉得不太可能。到时候,前期释放的巨量流动性,可能又会带来新的通胀压力,当然,这是后话了。</p>
<p>房市肯定是要跌的,这点是100%可以预期的,原因很简单:政府不想让它涨了。过去涨,背后原因主要是土地转让是地方财政的主要收入,地方为什么要靠这个呢?原因是分税制改革后,地方税收分得太少,而中央财政预算给也也太少,大头在国库,管老子要钱总归不如自己弄钱。然后就跟地产商一唱一和,从老百姓身上弄俩钱花花。现在呢?一个是房价确实老百姓消费不起了,中央已经意识到这个问题的严重性了:不解决住房这个最大的民生问题,其他的消费带动不起来,而拉消费是今后几年的主旋律了。措施就是保障性住房的大兴土木,这一定会拉底房价,对周边商品房价格造成冲击。这也侧面反映出中央的一个态度。从民众的心理上而已,在下跌趋势下,惜购观望心理会更重,而形成市场行为,就是越降越没人买,直到信心恢复。个人觉得,乐观得到明年(10年)中期,房价才能起稳,跌幅应该在10%-20%之间,不可能太大,太大会危及金融系统,国家会拼了命的托市的。另外,随着消费的刺激,各种利于消费诸如减税等措施,也会使老百姓收入增加,从而避免楼市大跌。</p>
<p>注意看的话,国家在启动包括教育、医疗、社保,今天刚看到的消息就是事业单位养老金跟一般企业看齐,都是在为试图为老百姓坚决好后顾之忧,调节好收入分配机制在努力,总得来说,是朝着好的方向在努力,而且,由于过去的投入实在是少的可怜,这样,基本保障上的投入和改革,会在老百姓感觉上效果很好,让心理上有了很大的提升,从而刺激消费。当然,这个启动过程,乐观估计也需要2年的时间,同时还得国内和国外经济环境不再进一步大的恶化的前提下。</p>
<p>作为个人而言,第一是工作问题,随着欧美企业全线深寒,裁员是必然,特别是我们这样的外企,冲击最大。国内呢,民企是管不了那么多了,必然是保命裁员。最安全的是公务员和大国企了吧。09年对每个人来说都是艰苦的一年,做好思想上的准备总是没有坏处的。不过,也不用那么悲观,一个是作为1.5亿的所谓中产,我们大范围破产的可能性不会太大,如果那样,剩下的10几亿不都得快饿死了,政府会想尽一切办法来防止失业的。另外,中国相对于其他经济体,还是有更强的优势的。我们的金融系统目前还是比较稳定的(当然是拜那几万亿坏账的剥离,是咱们替他们消化过了,他们才能这么安生);二元经济下,农民还可以回家种地,不会对城市治安稳定冲击太大;政府现在对就业是第一重的大事来抓(主要是担心稳定);个人觉得,乐观的估计10年中期,中国可以走出这波阴影,1年半的时间,对大多数的我们还是能挺的过去的。房子前面已经说过了,跟着大家一起观望吧,等跌总是没有坏处的。股市如果不是很感兴趣的,纯粹是为了发财的人啊,就别玩了。您不是那短线高手。在大非没有出尽的09年,震荡是主旋律。没有通胀的压力,存在银行里至少不会大贬值,安全是首位了。</p>
<p>忍吧,10年世博会可能是个号角,希望那时候能走出泥潭吧。</p>
<h2 id="2009-01-14--测试一把">2009-01-14 测试一把</h2>
<p>用Live Writer写东西,这样就方便了。</p>
<p>最近看ZF在要求开发商降价了,诸如“政府不托市打破高房价的幻想 北京与高房价决裂 ”消息开始不绝于耳,北京市市长也出来说,开发商降降吧,尊尊教导让开发商们肝都颤了。然后我们老百姓感激泠涕地接受这房价有限下降的“恩赐”。可是,仔细想想推高房价的是他们,现在又让降房价的也是他们,我们敬爱的爱民的好政府啊!</p>
<h2 id="2008-09-28-过节了">2008-09-28 过节了</h2>
<p>明天就要放假了,10、1长假,可以在家好好休息休息了。</p>
<p>这段时间,国家和世界发生很多事情,于是就像记录一下,多少年后也有个想头。</p>
<p>看了袁剑的书,好像价值观发生了很大变化,总是爱用挑剔的、批判的眼光来看社会了,这样可能让自己能意识到很多问题,更洞察些,但是让自己也可能更消极些,总之,有利有弊吧。</p>
<p>这些日子,华尔街倒下了,可能多年以后,很多人还会对这次金融风暴记忆犹新,可能也是世界金融史上很重要的一笔吧。次贷引起的投行的风险暴露,现在好像要遍布到实体经济了,看美国犹犹豫豫的救市计划是否还赶得上治愈这场瘟疫,扩散开来,将是世界范围的经济大萧条。毕竟虚拟货币构建的庞大金融体系一旦崩塌,实体经济根本无法承受之轻。那时候我和老婆的工作必然受到影响,生机都可能成为问题。覆巢之下安有完卵,美国要是控制不住,世界都要跟着玩完。继续关注吧。</p>
<p>从6124点飞流直下到1800点的情景在此生此世恐怕不会再看到第二次。这是从水皮的博客上看到的,中国股市的大泡泡破灭了,多少人的财富灰飞烟灭。中国股市上演的这幕过山车,究竟是什么暗黑力量吞噬了股改的成果,这里面的头头道道,终于让我这样的股市新手深痛地领略到了。倒也没有必要再诅咒、骂怨这个世界了,规则是人家定的,你玩不过。其实想想,很多机会都可以抽逃,都是由于贪婪、胆怯、侥幸种种心理作祟。怪只怪自己。炒股,炒的是心智,经过大盘的洗礼,人的心智至少成熟了很多,这算是笔意外之财吧。</p>
<p>三鹿这种事,可能过去的我还是会对三鹿、蒙牛之类的企业不齿,鄙视,落井下石,如同现在的人们一样。但是看了《奇迹的黄昏》,就不得不往体制上去想了。全行业的作弊,拿人的生命做赌注的作弊,整体的长期的失语,这是结果,背后的一定是什么力量,那种无形的力量在作祟,才让这些企业敢这么玩,企业是逐利的,如果大家都这么赚钱,我当然也要了。把这些表象拨开,好好审视一下我们监管部门的缺失,反思一下这个社会基本的企业道德的沦丧,这些才是背后更可怕的东西。还是那个词“体制”,体制上不健全,就无法规范“他们”的行为、道德,更可怕的是体制背后的掌控者跟“他们”一起玩,玩弄着社会的规则,玩弄公正的规则。质监局大佬撤了,猛学农也撤了,撤得好啊,不过也撤得少啊,他们是替罪羊,社会机器不健全,无法开动起来,把系统内支支节节的各个环节的那些不作为或者胡作为,以及“他们”都挖掘出来。这团雾太庞大了,太朦胧了。</p>
<p>这一年里,赶上地震、奥运、金融风暴、股市崩盘,真是让人回味无穷的2008。</p>
<h2 id="2008-07-17-和北京的缘分">2008-07-17 和北京的缘分</h2>
<p>谈起和北京的缘,最早要到三十多年前了,我就是生在通州台湖,虽然我户籍上写着我来自山东,可是我的父母总是很自豪地跟我说,我确实是生在北京,我姥姥还曾经笑谈给我起个小名,叫“占京”,名曰占领北京。老一代人,对伟大祖国的首都,都是充满着无限的向往和憧憬。不过后来,我很快就离开了北京,这一别就是八年,八年后才又一次回到了北京,这一次出来,就再也没回到过那个小县城。把根扎在了这里。孩子小的时候,其实适应能力是很强的,据说刚来的时候,我连普通话都听不懂,而很快,一直到现在,就把北京作为了自己的城市。</p>
<p>小时候的北京,是玩的天堂,家和学校附近,有红领巾,团结湖公园,那时候还没有朝阳公园,出门就是农田,还有个硕大的变压器,而不远的北面就是无边的大野地,儿时的很多时光都奔跑在那片绿色中,捕获蜻蜓和喜悦。</p>
<p>上高中的时候,脚下的北京就开始变化,那时候骑车去劲松那边的垂杨柳,天天延三环走,直到一天,三环开始扩建。改走大望路,有时候从老北京啤酒门口穿过,记得门口有个扎啤房,还想过有朝一日可以去里面喝一顿,到了也没如愿,如今北京啤酒也早就没落,搬出了这里,把地卖给了房产开发商,这个心愿也一直没有满足。</p>
<p>从那以后,北京就好像撒开缰绳的野马,开始狂建。而我从刚开始的兴奋,也渐渐地对这样的速度感到了厌倦,甚至是恐惧。平安大道变了模样,我们家这里全被高楼覆盖,朝阳公园从一个超级水塘,变成了富人扎堆,垂杨柳也立起来富力城,这个城市变化地如此的快,都让人措手不及。逼迫着你跟着他的速度,不停的向前奔跑。</p>
<p>上大学混中关村,结婚后又混南城,这北京城也算是都转悠个遍,要说最喜欢的地界,还是朝阳公园这片,每个地界都那么熟悉,可能以后也会在这里呆到老了吧。而城里面,我是指二环里面,对我而言,还是相当地陌生。老婆后来常带我去东四的卤煮店,隆福寺的小吃街,对我而言,都是很陌生。对于后海,直到前两天组织同学们聚会,偶尔转悠转悠,才感受到那份老北京味道的休闲快哉。</p>
<p>对我而言,北京已然是我的城市,这点在出去的两年中慢慢地意识到,我依然还是记得身在异地的那种“热闹是他们的,我什么都没有”感受,人其实很需要一种归属感。不过,现在的北京又给我一种压迫感,每次地铁里迎面的人群涌来,看着行色匆匆的每个人,都有一种莫名的失落。很不喜欢那奔跑的姿态,反倒是那后海和老胡同里的悠哉才是让人向往的东西,不知道什么时候才能拥有那份心情。</p>
<p>不知道什么时候,北京能停下飞奔的步伐,轻松从容的前进。不过,无论如何,我都已和它结下了深深地缘分。</p>
<h2 id="2008-07-15-关于聚会">2008-07-15 关于聚会</h2>
<p>一、 关于聚会
亲爱的同学们,毕业都十年了,转瞬的青春,飞逝的时光,你是否还惦念记忆中的九四三班,多少情谊,多少言语,让我们都留在这热情的七月吧,就在七月二十号(周日),这个温情周末,我们大学十周年的再聚首。</p>
<p><img src="/images/20200614/1592115871578.jpg" alt="" class="myimg" /></p>
<p>出席的同学们:</p>
<p>娜,阳,培,戈;云;凯;杰;明;涛;娟,建,滔,奕,辰,勤,创,津;栋;薇;平,微;超(22人)确认参加。</p>
<p>岩;松;媛;艳(4人)有事情不能参加。</p>
<p>琳和京(2人)要视情况而定。</p>
<p>卫新、宜宾、兆鹏、建宇、怡(5人)或者联系不上或者身在国外,很遗憾地参加不了了。</p>
<p>费用:</p>
<p>初步估计费用在150元/人,由于场地无法刷卡,请大家携带现金。</p>
<p>费用包括午餐和酒水,如果有事不能赶过来午餐,只收取酒水费用。</p>
<p>地点:</p>
<p>在后海的一个叫“loca cafe”酒吧小院内,包括午餐和酒水,请参见下面的详细介绍。</p>
<p><img src="/images/20200614/1592116057607.jpg" alt="" class="myimg" /></p>
<p>时间安排:</p>
<p>2008.7.20,周日</p>
<p>上午10点左右到,愿意早来的也没有关系,10点半正式开始。</p>
<p>12点左右午餐。</p>
<p>午后一直到晚上6点,自由漫谈、神砍、畅想、追忆时光。</p>
<p>暂定6点钟散场,如果仍有兴致,可以私下后海畅游。</p>
<p>联系人:</p>
<p>关于地点及其他问题,可以询问我</p>
<p>参与组织和策划的人:</p>
<p>建、娟、奕、滔、津、创,还有大家在群里面积极的讨论和建议,才促成了这件事情,感谢你们。</p>
<p>二、 交通
大致位置:</p>
<p>在德胜门和鼓楼中间,二环里面,后海北面,具体地址是“鼓楼西大街后海夹道甲16号”,大致地方在鼓楼西大街的果子市,路南,旁边有一个庆丰包子铺,附近的著名建筑有珠穆拉马宾馆、宋庆龄故居、九门小吃,你们可以google它们,很快就能确人位置。</p>
<p>酒吧的名字叫“Loca Cafe”,在胡同里面20米处,门上有个大铁勺,很夸张。</p>
<p>如果乘坐公交车:</p>
<p>5路:在果子市下车</p>
<p>635路:在德内甘水桥下车</p>
<h2 id="2008-01-08-fans-of-new-tech">2008-01-08 Fans of new Tech</h2>
<p>有半个小时,要迅速的完成一篇blog,并下班之。</p>
<p>作为一个技术爱好者,没有太过的过人的技术水平,但是确是一个对技术充满热情的人。这段时间,新的技术理念又让我感到了无比的激动。
最近最热的莫过于Andriod平台,在伟大的google公司的倡导引领下,34家共同启定了这个超越平台的新平台,并将给我们的生活带来新的冲击,<a href="http://news.csdn.net/n/20080105/112451.html">http://news.csdn.net/n/20080105/112451.html</a>,今年,3G牌照下放,各种移动宽带业务开始运营,再加上新的强大的Intel移动多核芯片的推出,最终会在诸如Andriod的方便的移动平台上大放异彩,带我们进入互联网+移动+美好的用户感受,美妙的人机合一的境界,实在是让人期待啊。</p>
<p>当移动和互联网合一的时候,就是新的时代的开启,你准备好了么?
当然,这是平台厂商,运营商的世界,我们作为开发者,或者作为最终用户,我们能做什么呢?我的答案是做梦。我们可以做任何我们需要的梦,因为,他们都会在不久的将来就会实现。</p>
<p>想想,在地铁里,我们可以欣赏高清的youtube视频,再不用忍受flash视频的模糊和延迟,再也不用BT那些硕大的视频,霸占我们的硬盘;可以24小时的MSN在线,可以蹲在马桶上看新浪新闻,可以跟着GoogleMap找到我们的钟爱的饭馆。。。,那些一切你曾经猫在电脑前可以surf的东西,现在都可以在你的小小的手机上完成了。</p>
<p>而,这一切,居然就在不久的将来,甚至于今年,就可以变为现实,是何等的美妙啊。</p>
<p>最近也在考虑一个伟大的设想,我叫他“教育资源平民化”,就是让教育资源通过现在的科技手段,比如互联网,移动平台,共享出来,以极低的费用提供给全民,从而提高人们受教育的机会,降低受教育的成本,让更多的知识通过互联网这种简便快捷的方式传播给大众。</p>
<p>具体的操作面上,我觉得就是放开大学的教育资源,主要是提供共享的课程视频,并且提供检索,归类,评价,视频是最好的分享知识的手段,直接听老师讲课,比自己看书快捷高效的多。让最好的老师把他们最好的知识,讲给大家听,而且永远流传下去,是多美妙的事情啊。</p>
<p>你可能会说,这会损害学校的利益。我的想法是,以极低的费用提供给人们,比如1节课1块钱,甚至1毛钱,当数以千万记的人们不断的来访问的时候,收益也是可观的,然后把这个费用和学校、老师三方分成,就可以满足他们的利益。而且,这种教育重在教育普及,并不提供诸如学位证书等学校的认证功能,并不妨碍他们最“赚钱”的业务,还提供了额外的收益,而且,越是好学校,他们的收益越大。</p>
<p>当然,这件事情,个人或者私人公司做都达不到最大的效果,最好是国家信产部、教育部等来协调运营,甚者可以成立一个国有的教育视频公司,并且有政策上支持。毕竟,说服大学们来开放教育资源,凭个人、公司,是很难得。</p>
<p>而,这对于个人而言,却能得到真真切切的收益,将来的社会是学习型的社会,也应该让每个人的享受受教育的权利,可惜这是我的一个梦想,但是我坚信,早晚一天,这个梦想会实现的。</p>
<p>噢,六点了,回家咯。</p>
<h2 id="2007-03-29-智信仁勇严">2007-03-29 智信仁勇严</h2>
<p>作为将领,必须五德俱全:智信仁勇严:</p>
<p>所谓智,就是善于变通,善抓机遇,适时权宜。</p>
<p>所谓信:就是信赏必罚,也就是说该奖赏的一定要奖赏,该处罚的一定要处罚,让全军上下不疑惑。</p>
<p>所谓仁,就是爱惜士兵,爱惜民力,爱惜物力。这种将军才不至于滥用武力,保存实力。</p>
<p>所谓勇,就是战机到来,要当断即断,不犹豫不决,瞻前顾后。</p>
<p>所谓严,对内也严格要求,以军法整肃三军。</p>
<p>这是孙子兵法中,对为将者的要求,而作为现代社会的管理者,是否应该具备上述的特质,对管理者素质要求的先后顺序,以及是否这些特质足够勾勒出一个完整的优秀的管理者呢?是我们需要探讨的问题。</p>
<p>首先,这些特点应该是一个管理者都应该具备的素质,缺一不可,否则他总会因为某一方面的欠缺而招致失败或失误。我们这里不去解析缺少某一个因素会导致的恶果,只是想强调这些方面都需要具备,某些方面可以强些或者弱些,但是决不能有明显的缺陷。</p>
<p>这些点里面,如果非要排一个顺序,那么我给出的顺序是智、仁、信、勇、严,基本上和它本来的顺序一致。之所以把仁提前到第二位,主要是因为我个人更喜欢人性化的管理。特别是当今社会,一个组织内部的成员,除了卖力地为本组织服务外,他还是扮演着各种觉得,父亲、儿子、兄弟。。。,身处在一个多角色的社会里,做为一个个体他的压力很大了。作为领导者而言,他领导的大多数人都是这样的人,因此,只有一个仁义的领导,深刻地体谅着部下的各种难处,才能更好的获得人心,而人心所向,战无不胜。所谓,欲取之必先与之。</p>
<p>除了这些方面外,我还想补充几点,当然就用白话文直接表达好了。</p>
<p>一点就是领导者的自信,一个领导者,无论何时都应该充满自信,充满战胜敌人、对手、自我的勇气。所有人都动摇了,你却不能动摇。这点可能和勇有些雷同,但是我想强调的是一种自我的勇气,这需要领导有丰富的学识、对自我的充分把握以及充分的信息把握。</p>
<p>与自信相近,更引申一下的,是静。作为管理者,特别是在遇到突发事件、危急时刻的时候,要做到心境平和。这点很难,但是,往往这种时候,又确实需要理智和平静的心态去深入的思考对策。浮躁和鲁莽指挥招致更大的灾祸。</p>
<p>另外是细,这个细主要表现在心细,做事情的时候,要适当和敏锐的关注一些细节,在比如从大量信息中准确分辨出有用的信息,特别是那些有可能影响到决策的细节。这需要领导有强有力的洞察力。这种细致严谨的作风,也可以帮助自己少犯一些低级错误和不必要的失误。</p>
<p>当然,这些都是很泛泛地谈管理者的素质,其实,你也可以看得到,这些更多地是在谈管理者的内在素质。不同级别的管理者,不同行业的管理者,甚至不同年龄的管理者,对这些点的要求和侧重也是不同的,而我们这里仅仅是粗粗地就孙子的“智信仁勇严”概述了一下管理者特质的话题,还很片面和肤浅,主要还是可以促使我们在今后的生活工作中更深入地去思考这个问题。</p>
<h2 id="2007-03-19-行进中的项目">2007-03-19 行进中的项目</h2>
<p>最近陷入bug的海洋,整日疲于bugfixing,充满沮丧和挫折感。项目仍在行进中。。。做一个项目不难,要是把一个项目做好比较难。</p>
<p>一个项目团队,几个人凑到了一起,有一个人成为了项目经理,在一段时间内,为了共同的项目目标,他们将一起度过一段时间。人是很复杂的,有情绪,有思想,也有自我,他们在一种约束下,坐下来,被某种东西驱动着,朝着某个方向努力,究竟结果会怎样,很是让人难以捉摸。项目经理应该是一个强势的角色,它应该去掌控这些人的情绪,思想,自我,让他们完全为项目服务,至少是在工作的8小时内。可是,真的这样做到么?他坐在那里,想,小张在做什么,小李的进度拖后了多少,小王和小刘之间的接口定义了么?他使用各种的软件监控着进度,推进着,项目似乎在不断地进行着,看上去很美。</p>
<p>那,小张呢?小张,今天早上自行车丢了,心情糟糕的狠。小李在考虑自己该学习点什么东西,防止被淘汰。小刘呢,最近一直被薪水太低困扰着,暗地里准备着监理。项目的世界里,项目经理看到了一切,项目外面的世界里,他一无所知。他有时候觉得,我是个项目经理,我的职责是做好项目,部门经理应该管大家的情绪,前途,思想。可是,这些人,这些事情,这些项目,其实都活在一个有机体中,看上去没什么联系,其实又都是联系的,项目达到了目标,为公司赚取了利润,这是目标。可是,一群活生生的人,他们做成了这件事情,每个人都是要被尊重,被承认,被理解,项目、公司、领导、个人、部门经理、项目经理。。。,他们是一个有机体,一个生态系统,每个元素都和谐地运作,这样的一个组织才是让大家都感到满意的。项目结束了,作为项目经理,常常应该反思一下,项目过去之后,我为我的团队的人在这个过程中带来了什么,留下了什么,我是否从心底尊重了每个个体,理解过每个个体,并给每个个体提供他们自我实现的平台。</p>
<p>而作为团队的个人而言,很多时候,你做的工作很简单,很重复,但是,你确切的知道自己这些简单工作和重复工作在项目中的真正起到的作用么?你是埋头苦干,还是你是看着目的目标干。同样,你可以问问自己,我究竟要从这个项目中有哪些收获,而且重复问自己,这些真的可以称之为收获么?我是否对得起付出的8小时,我是否充分的体现了我的价值。多问自己做事情的目的何在,评估好自己的行为,所谓三思而后行,这样头让你去做的事情,你做得明白,做得从容,其实,很多时候,你的项目经理并不比你清楚,因为你考虑细节,他关注宏观,及时地帮助他纠正,是对组织负责,也是对自己负责的正确行为。</p>
<p>当项目经理真正体贴每个队员的时候,当每个队员真心的努力体现自己价值的时候,就是项目成功的时候。</p>
<h2 id="2007-01-31-自由走了">2007-01-31 自由走了</h2>
<p>本来想敲“子尤”,竟出现的是自由。</p>
<p>一个精灵般的孩子走了,<a href="http://blog.sina.com.cn/m/ziyou">http://blog.sina.com.cn/m/ziyou</a>。
记得半年前还常常看他的博客,常常感叹年轻的子尤的乐观和智慧,不想,刚才不经意去他的博客,竟发觉他已经走了,很愕然,真的不知道该说些什么好。生生死死,人生几何啊。</p>
<p>子尤,天堂走好。</p>
<h2 id="2007-01-31-掌控项目">2007-01-31 掌控项目</h2>
<p>做过很多项目,大部分都是失败的,经历过之后,也确实有不少收获。</p>
<p>项目成功与否,首先决定于态度,无论是甲方,还是乙方,要看看是否都有把项目做好的决心。有人说了,哪有人不想做好项目的啊。错了,有时候,很多项目对甲方而言可能只是个政治任务,或者,对乙方而言,只是想尽快拿到回款,而是否保证项目成功,有时候并不是最高的目标。
只有双方都主观上很强烈的想把项目做好,项目才能有一个很好的坚实的执行基础。</p>
<p>第二点就是,一定要搞清楚,项目的出发点。为什么要做这个项目,通过这个项目会在哪些方面带来增益。这点,要跟客户充分地沟通,很多时候,客户也不是很清楚,这个时候,就需要耐心细致地倾听和理解,并反复确认。甚至有时候,要think as client,设身处地的为客户想想,如此这般,就能对客户的目标更明确,找到了他作项目的本源,才能更好地把握项目中的决策和方向。这点说起来简单,但是需要充分的和客户沟通,还需要很丰富的客户所在行业的专业知识,往往替客户想出或者实现出关键的业务需求后,其他的旁杂甚至可以省略不做。</p>
<p>第三就是要协调好资源,资源对项目很重要。如果说前面两点是外部因素,这点就是内部因素了。这当然也就是项目经理应该foucs的地方。一个是要保证资源的可用性,比如某一段时间,要保证某些人或者技术资源必须到位。项目经理还要负责寻找团队目前不具备的资源,无论他通过什么途径和手段。有了资源,还要很好的协调,什么后开始,什么后开始,就像装修一样,木料啥时候进场,瓦工什么时候到位,什么时候是第一个milestone。而这个过程中,任何一个环节都可能出现意外,如何事先准备补救措施,以及如何快速应对突发的事故,都是项目经理要经受得考验。项目经理是对项目负责的人,啥叫责任?就是别人做错了可以逃避掉,而你不能只能硬头皮上。而整个过程还要保证一种和谐的频率,不能忽松忽紧,保证项目成员不会被突然的压力压垮。</p>
<p>最后才是各个关键点,这里才谈到了技术,技术很重要,但是是为项目服务的。项目需要的话,项目经理只要有能力寻找到相应的技术资源,或者绕过或规避了技术风险后,也可以保证项目的推进和成功。所谓的架构,平台,是对产品而言的,对一个项目而言,更强调的是如期交付和质量,特别是在中国,更是如此。说句不难听点的,只要能交付回款,谁还在于客户的死活。当然,如果是一个有远见的项目经理,会兼顾到整个架构和技术,他的目的往往是保证维护的成本,很有可能从客户这里接到二期、三期。。。。。。</p>
<p>做一个项目经理其实是很难的,做一个优秀的项目经理就难上加难了。要考虑上述各点外,还要注意项目的成本,注意项目内的各种人之间的矛盾的调和,注意观察和预先发现各种风险苗头并扼杀在摇篮中,还要不断地和老板沟通以贯彻更高一层的商业策略,另外也要保持和维系好有一定距离但又亲近的客户关系,保持项目节奏保持team内健康的风气和高昂至少不是低沉的士气。想来,能安静地写程序,其实才真的是一件安静汉幸福的事情,我还是继续安静的写程序好了。</p>
<h2 id="2007-01-29-别把自己当根葱">2007-01-29 别把自己当根葱</h2>
<p>要不都说需要阅历呢,这东西确实是得靠年岁来堆,奔三后迅速明白很多道理,其实这些道理也很简单,就是自己过去没细想过,或者不愿意明白,现在是岁数逼着自己都得明白过来了。</p>
<p>尝试多种工作和生活方式后,最后发现自己其实还是比较适应平庸。平庸是一种境界,主观上要能够安静下来,心平气和的承认自己的种种缺点、弱点,倍冷静的分析自己无能所在,有时还是特伤自尊地贬低一下自己,让自己在极度沮丧后,突然看到现实的自己还不是那么的一无是处,而倍感欣慰。</p>
<p>上大学的时候,一度,甚至现在也是对一个叫加罗华的年轻人崇拜有加。16岁创立群论,21岁为爱情决斗而死,死守30年才有人尝试理解他的理论。还曾经憧憬将来考个数学系的研究生深造。后来,不幸地发现自己大脑在思考中常常迷失缠绕如麻,评估自己的抽象和思考能力不足后彻底作罢,只买了一本数学家的故事,聊以慰藉一下而已。</p>
<p>由于属于晚熟慢热型,走出学校后满脑的稚嫩,让自己都不堪回首。那年花了半年时间看小说,本该大学做的事情,毕业后才开始,读了N本,领略到这世界的精彩,各种各样的映射的人和事,让自己常常唏嘘不止,原来人是如此丰富的,也真实地看到了很多人性的东西,过去从来没有人跟自己提及,光明的,黑暗的,隐晦的,高昂的,小说的世界,让我头一次领略到大千世界的多彩。直到现在,始终认为那半年是我这一生中目前为止,最丰富的一段。我甚至认为,停止看书后,我甚至停止了思考,也可能我从来就没有思考过。</p>
<p>如果说那时候还有憧憬,这两年是彻底的粉碎各种不安分和平庸化。无论是频繁地换动工作表达的一种无头苍蝇般的冲动,还是不断的自我怀疑而导致地轻微自我强迫症,都很清晰的表达出,这个人确实很适合平庸。最可笑的一点是,自己很晚才搞清楚何为平庸的尺度,一度技术妄想症严重弥漫身体,叫嚣很长时间之后,滥竽充数地装腔作势地东施效颦地技术了很有一段时间,那种快感原来可以这样的陶醉和麻痹,以至于它的后遗症到现在也隐隐发作。</p>
<p>这一年,拥挤在无数的人堆,看着夜色影射出镜子上的疲惫的脸,好好的看清自己。上一次,应该是6年前了吧。
这是怎样的一个大大的世界呢,自己的渺小,每天都很忙碌,早上消失在人群里,晚上充斥在人群里。太多太多的事情,很热闹的那些事情,都似乎和自己无关开了。干瘪的世界里,只剩下无力改变的一个个固定变化的场景,固定地每天重复在自己的周围,又无力和充满胆怯地无法改变。很多时候,要努力接受一些东西,就象Weather Man,心平气和的接受自己的平庸吧,可能会更好一些。</p>
<p>这热气腾腾的牛市,这疯狂的基金,这演绎中的财富故事,这高宅阔户的林立,这纵情狂欢的娱乐世界。。。。。。我低头走过。</p>
<h2 id="2007-01-01-2007年了">2007-01-01 2007年了</h2>
<p>不知不觉又一年,生活还是改变了很多。</p>
<p>小生命诞生了,是个终结符,终结年轻时代,中年人了。他可爱的茁壮成长中,让你感觉是生命的旺盛力,又不由感叹新的阶段,小小的他还可以带给多少的憧憬和美好,人好像就是这样的。</p>
<p>成人的世界里面没有什么是简单的。</p>
<p>简单是给他们预备的,我们要做的是把复杂变得简单。这就是责任。</p>
<p>2007年注定是更加忙碌的一年。</p>
<h2 id="2006-11-25-div">2006-11-25 DIV</h2>
<p>自从了DIV,开始分层了。</p>
<p>那好像是开始与1980px,但是我所感受到的是2000px之后。</p>
<p>2000px的地方据说会有一次重要的病毒,居然全世界都避免了。其实不然,中国中了。中国开始了千年的巨变。开始划分各个纬度,唯独变化的速度很快,成平面和立体,多方位多层次的扩张。迅速的变化,迅速的变化,DIV下,我们也被迅速的规划,分割。</p>
<p>小时候,玩过划格子。用小刀剟一刀,立定后,选择,很类似于二分的查找。这个时候,你得抉择,你进入哪个纬度。长大了,耍着年轻这把刀,我们继续游戏。这个时候,我们叫Choice。</p>
<p>生活在一个规则社会里,总有些不太地适应。问外国友人,说他们国家没有任何的管制,很是羡慕。至少是不用10K以内的下A,作网站不用担心被判无期。虽然他也说,人其实还是始终被各种各种限制,但是得到生理上解放,精神上的压抑至少可以放开一些。</p>
<p>于是,我要开始认真地学习规则,明白划分层次的奥妙。依照太极精神大玩相对定位,绝对的总是不好的,在中国的坐标系上你只会头破血流。过去的我们、他们其实都生活在层外,而现在我们进入了这个不断变化的纬度,就得好好的玩,学会享受层带给我们的变化和视觉的冲击。然后慢慢的熔化掉自己,成为层中最坚定的元素。</p>
<h2 id="2006-08-06-继续写博">2006-08-06 继续写博</h2>
<p>最近更新频率严重下降。</p>
<p>一不留神,MSN Space更新了,来,测试测试。</p>
<p>最近在跟客户打交道,为了解决一个bug,去给客户讲解决方案,客户很敏锐,属于那种很滑头,有很聪明,同时又很专业的。一讲完,立刻给我的solution下个定论:确实解决了这个问题,但是又引起了另外一个问题,因此是治标不治本的解决方案。而且,问题的根本原因是。。。。。</p>
<p>这么明白和敏锐的客户我见得不多。跟这种客户交流是一种享受。不过,回公司后,跟头谈及,头的原则是,不要和客户说太多的东西,要注意多忽悠,掩饰一些深层问题。修改,我们不知道修改啊,那得需要成本啊。赶紧点头称是。作为追求完美解决之道的程序员,对头的这番理论一定不懈。但是,站在公司的角度,基于成本的考虑,头这小子说的确实是大大的对。事情是复杂的,如果都能简单的下结论,世界都美好的多了。</p>
<p>当然那,暂不表着复杂的利益问题。今天偶然看到了老马的关于[客户亲和力][取悦你的客户],看了后,大为感慨。如果能打造如此和谐的客户关系,对双方都是大有好处。即使不能达到,也应该朝着这样的方向努力,毕竟应用软件,玩得就是业务,业务最熟的,就是客户啊。至于目前本公司的客户关系现状多由于历史原因造成,就不多评论了。</p>
<p>OSGi是个好东西,过去是玩J2EE,后来Rob造了Spring,都是别人写的框架。自己写呢?那得从头开始,自己要管理组件,管理这,管理那。唉,没那份精力,更准确的说,是没那份胆量和能力。其实,大可不必的苦恼。已经有了很多组件管理的基础设施,基于他们写,你也可以过把架构的瘾。JMX,OSGi,都是优秀的组件管理规范。前者有JBoss的成功典范,后者又Eclipse的惊世骇俗。</p>
<p>OSGi给我们提供了很多很多,关于组件的管理,比如如何安装,如果公开组件的服务,如何PlugIn的方式安装和卸载组件,如何进行权限管理,如何进行命名查找,如何进行序列化。。。。。等等。有了这些基础设施,高手们,玩玩架构把,别玩虚的了,是高手就跳出来,组个你们的架构出来吧。</p>
<p>最近Java社区集体[是时候大举进军rails了]忽悠Ruby,据说不仅仅是Java社区,PHPer、Pythoner们也加入忽悠大军,简直要让Ruby一统江湖千秋万代了。成熟的程序员当然不会被轻易忽悠,但是,既然无数人在夸他好,就不得不深入看看了,嗯,啥也甭说了,准备忘情一把。</p>
<p>上次谈到眼光,朋友留言跟我一样,都自觉没戏了。哈哈。没关系,这样就很好了,我们靠目前的技能和运气,就已经过的不错的生活了。记得一哥们说,要是咱们都失业了,中国还不得饿死1/3啊。有10来年的不懈努力,怎么天道得酬勤哈。</p>
<h2 id="2006-07-27-眼光">2006-07-27 眼光</h2>
<p>看了昆总说的,确实点头,缺的就是眼光。</p>
<p>这其实是最难提高的,别的容易,不会某项技能,花钱,花时间,花功夫,外加点恒心毅力,基本上都能学会,但是眼光太难,需要的东西太多。</p>
<p>一靠运气,运气来了,撞上了,就变得有眼光了。虽然牵强,但是确实如此。</p>
<p>二靠博学,你看得比别人多,知识面广,就容易捕捉到信息。否则,大好机会就在眼前,你就是浑然不觉,因为,你根本不知道不了解它。</p>
<p>三是靠勇气,眼光只有成功了,别人才承认你说,这是这小子的眼光,所以这需要个过程去验证,这个过程中,你得有勇气和毅力坚持下去。</p>
<p>说白了,挣钱也是这样,我总结总结吧:
1。要泛,啥都知道,啥都能忽悠,犄角格拉都知道,坚决鄙视专家型人才。
2。要不安分,脑袋里要不断地浮现创意,东闯闯西试试,相信条条大路通路马
3。要有点韧劲,鉴别是个机会后,要能持久下去,动摇之前,先要确认方向是否偏离,如果没问题,继续焖头。
4。要输的起,折腾失败了,是继续折腾还是找地儿打工,答案是继续折腾。</p>
<p>总之,都是性格,性格决定了命运,那就评估一下自己的性格,就能知道自己是否能发家致富了,我评估了一下,我没戏。</p>
<p>顺道说一句,做技术真是害人不浅啊</p>
<h2 id="2006-07-20-难以割舍的技术情结">2006-07-20 难以割舍的技术情结</h2>
<p>都知道要挣钱那得技术很高很高才可以,所以就泄气了,开始捉摸其他的赚钱方法,想投向管理方向,也让自己爱上了金融行业,但是缺乏真实的实践机会,一种憧憬很快就被现实鞭笞的无影无踪。</p>
<p>还好还有技术可以慰藉。</p>
<p>很多时候最重要的是那种成就感,其实不一定是要狠执着,非要如何如何,获得成就感可以有很多方式。获得快乐是一种,完成工作时一种,挣到更多的钱是另外一种,很多种中关键是要投入,然后小阶段的产出让自己感到充实。太过长久和宏伟的目标,或者,经常变幻着的目标,都让自己充满沮丧。</p>
<p>还好玩技术能让自己感觉到成就感。</p>
<p>还不错,最近感觉满充实,首先是深入MINA的代码,获得了很多NIO方面的经验,最近对OSGi的重新关注,让自己在经历过几个项目后,对架构又重新产生了浓厚的兴趣。虽然越来越pragmatic,但是,能够把一个重量的东西研究透,然后再敏捷起来,也是另外的一宗乐趣。</p>
<p>无论怎么样,还是有技术可以玩,这就是很好。同时努力挣钱也成为新的乐趣,这点成为今后若干年的目标。</p>
<h2 id="2006-06-25-nio的开发模式">2006-06-25 NIO的开发模式</h2>
<ul>
<li>select线程应该足够少,这样才真正可以发挥复用的威力。</li>
<li>真正的读和写都在select这个线程中做,因为是非阻塞的,应该是一瞬间完成,可以忽略时延,并且,可以避免setInterest和select()的同步问题</li>
<li>要一个线程池,目的是为了频繁的使用线程,而不要频繁创建他们[Lead/Follwer线程模式]</li>
<li>一个Worker线程不应专门为一个session服务而导致他大部分时间都idle</li>
<li>Worker线程应该是平时都在池中,在某个session有读后,和写前,猛然复活,然后处理读后和写前的数据预处理,然后悄然回池,他不应该负责读和写,这个应该由select的线程干</li>
<li>session的概念很好,必须要有</li>
<li>session上应该有个in queue和out queue</li>
<li>消息来了,即读出的时候有两种处理,两种方式其实大同小异:
<ul>
<li>生成一个事件,事件中包含数据,还有哪个session(MINA就是这样),然后交给Worder线程们处理</li>
<li>放到一个readySessions的队列中,然后交给Worder线程们处理</li>
</ul>
</li>
<li>要写消息,同接消息,也有两种方式
<ul>
<li>生成一个写事件,写事件中带着sesion,然后select线程在select之前/之后,写光session中的inqueue,session中有channel(可以看出session写和selector没关系</li>
<li>或者放到一个ready的队列中,然后交给select线程在select()之前/之后写了</li>
</ul>
</li>
<li>上面的内容可以看出,读的接受者是Worker线程,写的发起者是Worker线程</li>
<li>使用监听者模式设计一个SessionListener是一个隔离socket读写和后端处理业务的好方法</li>
<li>后端处理业务的工作交给了Worker线程做,select线程专心读写</li>
</ul>
<h2 id="2006-06-01-mina的几点疑问">2006-06-01 MINA的几点疑问</h2>
<p>花了两天吧MINA的大线看了一遍,基本上搞清楚了。</p>
<p>不过还是有些疑问:</p>
<ul>
<li>对Leader/Follower的线程模式还不是很清楚</li>
<li>对ProtocolFilter还不是很清楚</li>
<li>对VM的实现还不是很清楚</li>
</ul>
<p>不过倒是引出不少其他的话题需要深入:</p>
<ul>
<li>对Cindy的研究,最好捎上Netty2</li>
<li>对JDK1.5的线程包需要深入一下</li>
<li>构建一个自己的验证Prototype for better understanding of NIO framework</li>
<li>考虑OMSE如何参考这些framework进行改进</li>
</ul>
<p>可以考虑根xu和ann和wang讨论一下。</p>
<p>回头还要把MINA的体会PPT出来,share给团队,怕忘了这些,blog一下</p>
<h2 id="2006-05-26-最近">2006-05-26 最近</h2>
<p>最近过得很平常,没啥波澜不惊,挺好。</p>
<p>最近看了《高效人士7个习惯》,不错,比卡耐基的书层次高些,是一个稳定自己情绪的很好的书籍,这个岁数了不太需要励志书籍了,但是这本除了励志,还讲出了一些生活原则,还是让人有所收获。</p>
<p>最近也在考虑这辈子咋过得问题,看很多朋友自己做公司,赚大钱,有些羡慕,也真心为人家高兴,但是自己该如何呢,特别是有了家庭,有了宝宝之后,父母也老去之后。责任是要扛的,但是工作也不应该被所谓的责任完全吞噬乐趣,所以,感觉自己能够保持通过自身的专业优势,保证持续收入增加,不失业的基础上,保持自己对软件开发的乐趣和热情,就可以了。想想如果每年5%的收入的平均增长,一直到退休,那生活也算是富足的了。风光的成功后面可能有不为人知的辛苦,也只有每个人自知了。所以,保持心态的平和,保证收入持续增加和生活的乐趣,是最重要的。</p>
<p>最近也很想学习经济和金融方面,最开始是想通过掌握经济规律为自己赚钱服务,现在看来,想法过于天真。一方面,经济原理方面的东西很难让自己直接受益,另一方面只是通过书本的知识而缺乏实际操作也很难圆自己的发财梦。倒是这个过程中发现经济,金融等知识确实很有意思,自己心态平和后,发现这些知识确实充满了前人的无限智慧,不过现在确实没有时间和闲情逸致去耐心的继续读下去,暂时告别一下,等过两年在继续细细研读把。倒是买了这些书可以送给老爹读一读,他可真的是一个爱读书的老家伙。</p>
<p>最近读了unix编程艺术,对unix文化那是滔滔敬仰那,因此买了本unix高级编程开始啃,也希望能够用上一段时间,让自己一直遗憾的unix c开发有一个初步的认识和入门,也算是了却自己的一个遗憾。</p>
<p>最近大猪好像心情不好,希望这家伙赶紧走出低谷,人都会有情绪低落的时候,过去就好了,这家伙是制造快乐的人,看丫的blog是件乐事,所以,赶紧停止低沉,继续散布快乐。</p>
<p>最近我们家娃会翻身了,臭小子越来越帅了,NND,都要帅过老爹我了,取代我的全家最帅头衔了。</p>
<p>最近老妹的大三居终于到手了,居然是三户朝阳,名厨名卫,南北通透,而且楼层极佳的高板,啊,那可是我一生的梦想啊,真是让人羡慕噢。</p>
<p>最近很多兄弟姐妹要结婚或者已经结婚,阿王两口子,可爱的小芳,银狐大兄弟,虫子夫妇,小裴同志,还有我N多个同事,真是喜庆之年,当然重头戏还是我家的小妹。好啊,让我等也沾沾着一连串的喜事,过一个欢喜之年。</p>
<h2 id="2006-05-19-写程序">2006-05-19 写程序</h2>
<p>最近在维护别人的程序,头疼的要命,到处是if else,逻辑组织的很复杂,后来了解到是由于当初赶着实现导致的。</p>
<p>想象当年自己写程序时也大抵如此,堆砌代码,在其中炫耀各种复杂技巧,而现在写程序,尽量地写的简单易懂,即使需要进行一些设计,也要给出非常详细的注释,生怕后来维护的程序员看不懂。</p>
<p>除此之外,更注意内聚性,充分利用OO,尽可能地做到对修改封闭,对扩展开放,编写程序其实是很有乐趣的,写出优雅的程序,让自己感觉有美感,也让自己很有成就感。做事情其实就是追求这种成就感。</p>
<p>项目中最有意思的便是写程序,需求,业务,测试,上线等等都充满了你控制不住地因素,让你感觉被各种事情和问题缠绕着,唯独写程序,大部分的掌控在你的手中,有了这个权利,要好好的慎用,不要让自己写出难于维护,结构拙劣,性能低下的垃圾代码,玷污了程序员的称呼。</p>
<p>写程序如此,做人亦如此。</p>
<h2 id="2006-05-06--等额本息和等额本金的计算公式">2006-05-06 等额本息和等额本金的计算公式</h2>
<p>最近老妹要买房,她告诉我等额本金的方式更划算,而我们大多数人,包括我在内,都是等额本息的方式。</p>
<p>为了搞清楚,我去google了一下相关知识,所谓我们大多数人所采用的等额本息还款方式,就是每个月都要交给银行相同数额的还款,其中包含变动的本金和利息;而老妹说的等额本金的方式,则是每个月还给银行等分的本金,外加剩下本金的利息。</p>
<p>于是我想google一个每个月之后,累计的还款的额度,包括总共还了多少利息,多少本金等等信息,可是网上的计算都很简单,无法提供我想要的信息。</p>
<p>于是自己想写个程序来做,对于等额本金的方式很好计算,而对于等额本息的方式,琢磨了半天实在想不出一个算法来。偶然间发现Excel中带有计算等额本息的公式,大喜,立刻作了一个Excel的表格出来计算。</p>
<p>我做的这个计算公式主要是10年的还款期限,再长的年限没有做,如果你需要可以自己修改Excel中的宏,重新多生成N年,如果需要我也可以帮你修改。</p>
<p>希望这个小计算公式能让你对贷款做到心知肚明。</p>
<p><a href="http://piginzoo.googlepages.com/loan.xls">http://piginzoo.googlepages.com/loan.xls</a></p>
<h2 id="2006-04-28-无题">2006-04-28 无题</h2>
<p>前天宝贝百天了,老婆让我写了这天的宝贝日记。</p>
<p>爸妈过来照顾宝宝了,已经三年没有跟他们生活在一起了,重新生活在一起,是为了这个新的小生命。成家后,在一起生活的机会以后可能不会很多了,所以应该格外珍惜。</p>
<p>最近部门的三个同事都走掉了,都是很好的同事,工作努力,认真负责那种,离开有各自的原因,不过一起提出倒是很突然,也很壮观。职场就是我们表演的舞台,下台后,大家还是很好的朋友,都是在奔生活,一路走好。</p>
<p>前天晚上,和老婆的最好的朋友们一起High歌,一个朋友周六就要回悉尼,而且下次再回来,可能就是3、5年后了,用她的话,生几个baby后才能回来了。老婆在回家的路上对我说,有一种莫名的伤感。</p>
<h2 id="2006-04-11-my-fixing-bug-story">2006-04-11 My fixing bug story</h2>
<p>Liang assigned me a fix bug task, it is about IHTH.</p>
<p>I got the task, and I began to see the code immediately,but,unfortunately,I cannot understand the code design.</p>
<p>I had to ask for XuXin, with his patient explaination, I learned what IHTH is. I also understood the bug reason, and found the bug is very small,very simple, The left is to fix it.</p>
<p>But,I found fixing bug is very difficult,why? You maybe said, “you said bug is very samll & simple ,why you say fixing it is very difficult?! it’s contradiction!!!”</p>
<p>Mabye you are right, but it is for the guy who knows code very well, like XuXin,GuoChengJun or WangNan, but for me,I only have a poor code understanding before fixing it. The first thing,I should understand the code.</p>
<p>Understanding code means,I had to know lots of things, including: the requirement, the code context, the author’s design purpose. So, you can see, although a simple bug, I had to know lots of other thing first.</p>
<p>I discussed with XuXin, and decided to inherit a class from <PresHandler>, implment all abstract method, and copy code from <PresIHTH>,so I began to code.</PresIHTH></PresHandler></p>
<p>I read & learn & understand the <PresIHTH> code, dare not to omit any details,but,"detail is important while is boring", When I thought I understood most, I began to code my class <PresSHTH>.</PresSHTH></PresIHTH></p>
<p>I copied & pasted code into <PresSHTH>,then,I finished the code,I felt a little exiting.</PresSHTH></p>
<p>My custom after coding a class is to test it, I write a TestCase class for it,but, then, I found I cannot test it,the class is so difficult to test, my God! I hate a class which cannot be test.</p>
<p>I am so sad, really!</p>
<p>In that,I cannot test it, I think I should refactor the code. “Copy & Paste is source of the evil - «Refator»”. But I am little confident to my code. Without test case, refactoring a class is very danger,yes,I know the point,but for a professional programmer,I can not bear bad code!!!</p>
<p>So,I began my danger refactor journey.</p>
<p>My <wbr />fixing <wbr />bug <wbr />storyI read the <PresHandler> and its all children, read all abstract method it defined. then, I began to eliminate duplicated code:
I move markAscusClosed() to <PresHandler>,and delete all definition in subclass
openHostSessions() is same done
I create a parent to Pres1024C & Pres1024B , named Pres1024, to extract the duplicated code
I create a parent class to PresIHTH & my PresSHTH, named PresHTH,to extact duplicated code
after refactoring,the code became more clear, and my PresSHTH implemeation code is very simple & easy.:)</PresHandler></PresHandler></p>
<p>OK,up to now,let summary this job:</p>
<p>I cannot write test code,from this view,my code is very bad.
I am not confident to my code,I need XuXin help me to review & DuYu help me to test
I just eliminate duplicated code,not improve the design
at last, I hate to understand other guy’s code & fixing bugs:(
It’s my feeling of fixing bugs,I share my experience with you.Hope to conmmunicate with you,any idea,discuss with me:)</p>
<h2 id="2006-03-29-再国有化">2006-03-29 再国有化</h2>
<p>这两天看《瞭望东方》,谈到了再国有化,所谓再国有化,就是将一些基础设施,能源等相关的产业进行新一轮的国有整合,组成超级国有托拉斯,形成新一轮的垄断市场。</p>
<p>文章中指出的行业包括,电信,移动,煤炭,石油,电力等几大行业,最近国家出台了一系列的政策,来促进这种垄断的形成。包括对中小煤矿的整改、对石油产业准入的门槛的提高、对组建千万级电力全国网的建设等等。</p>
<p>政策的制定者告诉大众,他们的目的是为了组建更强有力的国有企业,更好的参与国际竞争,但是,起码得常识告诉我们,垄断不会给老百姓带来什么好处,只会给垄断集团带来丰厚的利润。</p>
<p>再国有化不知道是好是坏,但是相信不久就会给我们的生活带来一些变化,拭目以待。</p>
<h2 id="2006-03-29-新闻的独立性">2006-03-29 新闻的独立性</h2>
<p>早上看凤凰卫视,安南发电给凤凰卫视,庆贺建台10周年,安南说,一个媒体,独立于政府的媒体是非常重要的,可以经常性的通过媒体的力量,对政府和社会起到监督和警示的作用。</p>
<p>早上与岳母争执了半天,关于新闻是否放开,她举了6/4的时候,媒体的推波助澜。而,我觉得,那是因为媒体放开的不够,媒体那时候才刚刚摆脱被政治的束缚,就像一个孩子刚刚离开了目前的怀抱,缺乏自己的独立见解和观点,很容易被坏人带坏。而,正是由于经历过很多挫折和失败,甚至弯路,一个孩子才能成熟一样,媒体也需要一个成长的过程。因此,他需要独立的空间和自由的主张,这样才能形成自己的风格和思想,而凤凰卫视已经让我们看到了这些,看到了人文精神、民主意识、个性的张扬。。。中国的媒体的家长,应该放开手臂,让孩子自己走起来。</p>
<p>看看这片,我们还是能感觉到家长的管教:
<a href="http://lydon.yculblog.com/post.1169326.html">http://lydon.yculblog.com/post.1169326.html</a></p>
<h2 id="2006-03-24-希望生活能越来越好">2006-03-24 希望生活能越来越好</h2>
<p>新浪上一片文章<a href="http://news.sina.com.cn/s/2006-03-24/00278513824s.shtml">“前全国女子举重冠军生活拮据当搓澡工”</a>,下面有个评论,我投了票,作为是一种义务。“很悲哀。她有贡献,应该有更好的出路或待遇。” “中国的体育训练制度存在问题,她是个牺牲品。”,我选择了这两个。大部分也选择了这两个。</p>
<p>每每看到类似的报道,总是心里恶狠狠的骂一句,操!</p>
<p>同样一个版面里,还看到了这片<a href="http://news.sina.com.cn/c/2006-03-24/08108517242s.shtml">中央定调下大决心推进改革</a>,看了一下,还是没有新意的八股高调,不过,还是希望这些高调能被落实和执行,天真的希望统治者能够良心发现,把治天下为己任。</p>
<p>无论怎样,还是希望生活能越来越好,让人伤心的新闻能少点。</p>
<h2 id="2006-03-23-how-do-i-program">2006-03-23 How do I program?</h2>
<p>Since my first hello world,there had been almost 10 years.Though such a long time,I still dont think i am be a good programmer.Atfer 2003, i read «refactor». Until then, I found I just find how to program exactly.</p>
<p>In initial years after my graduation, I use VC++,VB and pb.I am apt to writing program with long comments.That time, I think good program just make other can understood more clear,that’s right in that situation. So, a large number of comments can make program more clear, aslo, I name my function and variable very long also for better understanding.</p>
<p>Before,2003,I have no idea for easy testing, better flexibility, and no concept for architecture. that time, I had almost expericenced 5 years after my graduation.What I knew is just those variable technology. HTML,Javascript,Java,C++,ASP,EJB,VB,PB…,even COBOL. I was lost in the language details.</p>
<p>2003,I read some books.Refactor,Agile software developement,TDD,POEA,…. They changed me,frankly, they brought me new view to look on program & programming.I began to study OO principle from very beginning.Also,I began to notice how OO give program so much magic.Now, I even dont like to chase new buzz words and new framework, but focus very detail program. I like to code line by line, enjoy how to inject my spirit into every line of the code.I entirely enjoy the whole process.</p>
<p>Now,I like to use a sandbox to write my code.That means,I first decompose the requirement into a list, sometimes i will write down it, sometime,i just keep it in my mind. Then,I will have a short thinking about how to realize it and how to integrate every parts.Then,I take myself into favorite phase: coding. I have a sandbox project in my eclipse,I will write each part in my sandbox project. Testify my idea,testify the new technology I want to use, and TDD them. When I draft all,I will integrate them.Sometimes in the sandbox project,sometimes I will migrate the draft into the real project and integrate them.At last,I will integrate it with the whole project,of course,all depends on TDD. Then,I will cherish my code and review it frequently, and refactor it. Keeping the process until the project over or I forgot the code.</p>
<p>Enjoy code, not to be chased by the new technology.That’s my current status.</p>
<h2 id="2006-03-23-写博看博">2006-03-23 写博看博</h2>
<p>我最后还是选择了sharpReader,banditrss虽然很炫,但是忒吃资源,一更新起来cup就100%长久不下了。sharpReader短小精悍,速度快的很。</p>
<p>现在看博成了每日例行,我知道厚厚的书里更蕴含丰富,无奈心已经无法下沉,就喜欢一屏看透了,简单明了,并伴随幽默机智,随意性很强的消遣。</p>
<p>大猪的这篇自传,让人久违了,又见到的时候,想起了很多大学故事:
<a href="http://spaces.msn.com/ownhere/Blog/cns!D8BB21D290D881CA!764.entry">http://spaces.msn.com/ownhere/Blog/cns!D8BB21D290D881CA!764.entry</a></p>
<p>可能病痛加速人的思考,子尤这孩子评韩含这孩子,透着对这个社会的反叛,一个可能就要离世的孩子,临走前,还是充满着社会失望,我们这些成人应该反思反思
<a href="http://blog.sina.com.cn/u/485cdf81010002ps">http://blog.sina.com.cn/u/485cdf81010002ps</a></p>
<p>说的真好,爱人间应该保持一种精神上的独立,虽然肉体可以结合,精神世界永远不可能完全熔合
<a href="http://blog.sina.com.cn/u/46e8f66a010002ep">http://blog.sina.com.cn/u/46e8f66a010002ep</a></p>
<p>就爱看这种倾轧小辈的文章,我们比80的老,但是我们比70的小,受够了70之上的气,就拿80的出出气,过瘾而已。
<a href="http://spaces.msn.com/tomjian/Blog/cns!D8FF345298961EF1!755.entry">http://spaces.msn.com/tomjian/Blog/cns!D8FF345298961EF1!755.entry</a></p>
<p>人一定要善于把握机会
<a href="http://blog.sina.com.cn/u/476bdd0a010001zo">http://blog.sina.com.cn/u/476bdd0a010001zo</a></p>
<p>我能想到最残酷的事情,就是和政府一起慢慢变老。
<a href="http://zhivago.bokee.com/4716753.html">http://zhivago.bokee.com/4716753.html</a></p>
<h2 id="2006-03-22-技术蜜月期">2006-03-22 技术蜜月期</h2>
<p>突然想感慨一下!</p>
<p>想起了过去呆过的一个公司,那时候,遇到了几个很好的同事,银狐,十度,七彩狼,杀手,。。。,那个时候,我们也都是刚刚认识,大家也对开发都充满着热情,学习struts,学习hibernate,学习工作流,学习分析模式,学习企业架构模式,学习重构,学习TDD,一起学习,一起讨论,一起实践。用ant做持续构建,坐在一起结对编程,用POJO实现组织架构的业务模型,玩Axis体会webservice,那真的是一段令人难忘的技术蜜月。后来还一起去参加bjug的各种活动,让自己的知识面更进一步扩大。</p>
<p>虽然只有不到半年时间,却让我体会到了很多很多。无论做什么行业,是否做技术,每个人都会有一段属于自己的最快乐和充实的工作时光,感谢你们,让我有过最快乐的技术时光,也希望在各自的岗位上能发展越来越好。</p>
<h2 id="2006-03-15-jmx的一些大白话">2006-03-15 JMX的一些大白话</h2>
<p>网上的JMX教程都讲的不清楚,总算搞清了一些东西,记下来。</p>
<p>JMX是个规范,目前是1.2,据说sun有个参考实现,不过,目前能拿到的是jdmk5.1,已经堕落成商业软件了。开元里面最好的是mx4j,tomcat里面就用的这个。</p>
<p>jdk1.5里面也实现了一个,这样,你就可以通过jmx偷窥jvm内部了。</p>
<p>Agent只是个概念而已,说白了,就是指的是启动mbean server,并且注册mbean,adapter, connector的进程而已。并没有什么现实存在的接口啥的。</p>
<p>adapter和connector,adapter主要是为了看的,而connector提供了一个管理协议,有了它,你不用考虑是用的啥协议,都可以访问mbean了。</p>
<p>mbean其实很简单,主要的对设备的操作都封装在mbean中了。你调不到mbean,只能通过相应的agent提供的接口。</p>
<p>mbean就是个代理,如果mbeanserver是个容器的话,那也只能叫做代理的容器。</p>
<h2 id="2006-03-14-彻底对国产rssreader失望">2006-03-14 彻底对国产RSSReader失望</h2>
<p>I am so disappointed with NetAnt , so few functions but so many bugs. I always found it cannot remmember which topics i had read.It even lost entire channel messages, you have to update again to query these messages.</p>
<p>I went to its website, and left the words “too much bugs, quickly fix pls,otherwise,you will lose lots users”.</p>
<p>Then,I began to try another domestic RSS reader sofeware “看天下-kantianxia”, my God, it even cannot import the opml file,without hesitating, i delete it.</p>
<p>I search google again, i cannot find better reader, i was so disappointed.</p>
<p>I have to search foreign rss reader. I had used for feedaemon, a commercial rss reader, I have to search its crack key, so boring,so I decided to find a free reader.</p>
<p>I find RSSReader, SharpReader,RssBandit. and downloaded all ,then installed them.</p>
<p>The best I think is RSSBandit, its a sourceforge OS project, you know, as a programmer, i naturely like the software located in sourceforge, indeed, the RSSBandit did not make me disappointed. A little regret, it did not have Chinese version, but it supports Chinese very well.</p>
<p>Now, i had turned to rssbandit! Damn! domestic rss reader!</p>
<h2 id="2006-03-09-第一个手机程">2006-03-09 第一个手机程</h2>
<p>标签: 杂谈
I still remembered the first java mobile phone, siemens 6688i. Since then,I want to make a mobile application on it.
Unfortunately,My sister hold it since I bought it, until, it was broken and discarded.</p>
<p>My wife bought the Nokia 7610, which is a popular type in Nokia series. And it support the j2me.
So,now i have a chance to finish my wish that create my first mobile application.</p>
<p>Just do it.</p>
<p>Since Tuesday,I begin to setup the developement environment,i found a useful article by google:
http://asmiling.blogdriver.com/asmiling/1108717.html</p>
<p>then, following the instruction, I downloaded eclipseme 1.2.7,and jwtk2.2,soon,the development environment was setuped.
before I began my first program, I browse the overall concept & architecture of j2me,
http://www.yesky.com/SoftChannel/72342371878043648/20011004/199797.shtml</p>
<p>I learned lots of basic & useful concept, and more clear with the mobile j2me application,
so,i began my first j2me helloworld.quickly, the programe ran ok,i saw the greeting words in my simulator.
the left problem is that i need to deploy the program in my wife’s Nokia 7610.
I consult from “pig” , who is a expert in j2me,he told me,i need download Nokia prototype toolkit.</p>
<p>So,I visited Nokia’s website,and fount the prototype toolkit, its version is 4.0.
Downloading it and installing it. Afte that,I read its User Guide, I found it provide a eclipse plugin.
So, I install it into eclipse’s plugin.</p>
<p>I came back to eclipse, and found the wizzard appeared “Nokia j2me plugin”.By it, i create a new j2me project,
and I read the Nokia 7610 handbook,found it belongs to S60,and CDLC1.0.I choose the correct type and run the program.
The Nokia S60 series simulator run ok. Then I saw my first helloworld program, everyting is ok.</p>
<p>So,The last step left: I need to deploy the program into Nokia 7610.</p>
<p>I run the 7610 provided “Application Installer”,but, the mobile prompt me,that the jar file i packed is invalid.
I have no idea, I only search help from google, fortunately, i found this artichl:
http://www.yesky.com/SoftChannel/72342371878043648/20011009/200123_3.shtml
it told me:
“
这些属性并不是全部都需要,可是,没有下面列出的这六个,应用程序管理器就会拒绝加载这个 JAR。</p>
<p> MIDlet-Name</p>
<p> MIDlet-Version</p>
<p> MIDlet-Vendor</p>
<p> MIDlet-</p>
<p> MicroEdition-Profile</p>
<p> MicroEdition-Configuration
“
I compared it with my manifest file, and found i lost “MIDlet-“ entry,so,I input the information of the midlet,and try again.</p>
<p>Wonderful! I saw the correct install prompt appeared in the screen of mobile,
at last, I saw the program run ok in the machine,”hello world” appeared. Yeah!</p>
<h2 id="2006-03-02-位卑不敢忘忧民">2006-03-02 位卑不敢忘忧民</h2>
<p>I read a blog(http://blog.sina.com.cn/m/liaozusheng) , the writer is a man who care for the problem of people’s livelihood.Those articles remind me not to forget what a real world i am living on.</p>
<p>I came from the country,I lived there for 8 years before I entered this Chinese central city.My relatives almost peasant.I know what life they are.</p>
<p>Everyday,I saw news, watch TV…,all media are showing us a vivid China.All peoples including me, are chasing much fortune.we talk about the house, talk about car, the gasline price, the stock trend…..That’s ok.But,we have to realize that the world is not a completed world,sometime is not a real world.Millions of people is working hard for theirl life, for their familiies,for the bread, for basic health assurance.</p>
<p>But, we cannot see that world. Though some media show us some vision of them, but very few, very surface. We cannot get the clear number,most of us had no concept of those poor man.</p>
<p>Fortunately, the government had reallize it.2006,one of the most important government taks is focus on “San Nong” —- agricultrue,peasent,country.I knew I can do nothing,but I can keep a mind on it, and remind me that the world is not like we see, dont look at the current life as certain.</p>
<h2 id="2006-03-02-商品社会">2006-03-02 商品社会</h2>
<p>This morning, I met my senior middle school classmate.He is on the way for applying commercial license. He had resigned and began his own business.</p>
<p>Yes,as you can see,the China had become a commercial society.Just like the song of ZhengZhiHua.”Commerciall society”. The most evaluable level is money. More money you earn, more successful you can prive yourself. Thougth you can disgust with money,but you cannot deny the use of it.At least, I must face on it serously.</p>
<p>Current China is becoming a super market, and is a new-developing market.That means, lots of chances exist.Just like one of friend said (http://blog.sina.com.cn/u/460f9891010001wt) “ we are within the period that China is experiencing great reform,it creates so many opportunities”. But not everyone can recongnise them.But at least, we should keep the acute scent of commerce.</p>
<p>So,Any good opportunity if you find, let me become one of your partners, and vice versa.</p>
<h2 id="2006-02-20-享受技术的乐趣">2006-02-20 享受技术的乐趣</h2>
<p>Recently, I touched lots of interesting tech. The most influnced me is blog.</p>
<p>In the past, I was a slave of tech. I dont remmeber from when I lost my initial interesting to tech.</p>
<p>When I graduated from the college, I learned so much new tech, including email, internet, and C++, java… …, even to the end of 2002, I enjoyed those new tech.</p>
<p>But,when the I began to think about my real life, began work for the money, I found I lost the pure interesting on tech. What I learn is just for prompting my level for more salary.</p>
<p>But now, today, when I lose the strong interest in tech and move my focus on other domains, I found the tech-interest suddenly came back. I began to enjoy weblog, enjoy the advantage it brings me, not itself.</p>
<p>I hope I can get more funny from the tech more and more.</p>
<h2 id="2006-02-20-头一篇email-blog">2006-02-20 头一篇email-blog</h2>
<p>Today, I opened the setting of email publish in MSN Space.</p>
<p>This blog is published by my email, Just like a common email. I wrote it and sent it easily. Then, when I turn to MSN space, I saw it. And All format can be applied without losing. What’s more, by the help of Outlook, I can get more correct help to correct my spelling & grammar mistakes.</p>
<p>It was said, the email publish is basing on the MetaWeblogAPI , which is a open API basing on XML-RPC technology. It is an old tech, but it brings us new feeling.</p>
<p>Begin your email blog, why now?</p>
<h2 id="2006-02-18-守规矩">2006-02-18 守规矩</h2>
<p>小时候,老师教育我们要遵守纪律,这样才是个好孩子,我们从了。这样子,我们养成了一个习惯,要守规矩。</p>
<p>长大了,那时候能挣钱了,也自己住了,就倍儿想造造。拼命想做点违反规则的事情。</p>
<p>一抬头,才发现。原来遵守纪律的习惯已经被唐僧老师和唐僧家长们,不断的教诲,不断的强化中,牢牢的强加在自己心里面。于是,才意识到,冒险和突破已经被阉割了。</p>
<p>这还不是最可怕的,最可怕的是,你发现,打破很多规则,一旦打破,就有冷冰冰的规则的惩罚扑上来,让你承受不起。</p>
<p>接了婚,你还敢在外面疯玩么?上了岁数,还敢跟单位口误遮拦么?新的机会面前,你敢炒掉老板么?。。。</p>
<p>你不敢,有敢的。你看到的大佬们,都是敢玩的,敢玩啥?敢玩规则,敢玩弄规则,大猪前两天说,永远玩不过定规则的人。补充一下,这个世界上,还有很多敢玩弄规则的人,敢颠覆规则的人。这其实才需要更多的智慧和勇气。你一定不敢轻易尝试。</p>
<p>我们拼命学习,拼命的奔命,我们却拾遗了勇气。</p>
<h2 id="2006-02-14-情人节的卖花女">2006-02-14 情人节的卖花女</h2>
<p>早晨起来的时候,响起来了,今天是情人节。还琢磨呢,遍大街都得是卖花的了。不过,一路上,啥都没看到,很失望。只有到了崇文门,看见了一个男的领着一个女的,女的手里拿了一朵。</p>
<p>中午阳光很好,吃饱了的我在东方广场上溜达。忽如一夜春风来,卖花女已经变不满大街了。三两步就一个,有的拿着几朵,有的拿着几束,相貌矜持的站着。稍有热情的,会主动的凑上来问你,先生,情人节买花么?不过,我还是喜欢那些矜持的卖花女,靠近在路灯旁边,仿佛那支柱可以作为自己逃避矜持的依赖,看上去很可爱的样子。感觉上,很多都是学生,趁着这节日,挣点零花钱。</p>
<p>于是,我走上前,“多少钱一朵”,“5块钱”,确实不贵。不过转脸那边,就叫到了8块一朵,看来这些卖花女们还没有形成统一的价格战线。</p>
<p>I remembered that today is valentine’ day this morning. So, I thought there must be lots of flower sellers in the street. Unfortunately, I did not saw so much, very disappointed. Unitl I arrived in ChongWenMen, I saw a boy with a girl, and flower in her hand.</p>
<p>t’s sunny noon. After meal, I strolled in East Oriental Square. The flower girls is full of the square.Some took only several, while some took bundles, standing there with missish face. Some girls are initiative, they will walk up you and bargain ‘Sir, do you need any flowers’. But I more prefer those missish girls, who stand beside the street lamp as if it can support her to avoid her missish feeling. So lovely. I think most of them are students and earn some pocket money by such a holiday.</p>
<p>I came up a girl and ask “How much for one?” “five Yuan”. Yes, actually, not expensive. But one is 8 Yuan beside her. Oh, it seems grils did not come to terms for same price.</p>
<h2 id="2006-02-09-看猪跑">2006-02-09 看猪跑</h2>
<p>基于终端的主机应用和我们过去作得应用区别还真不小,主机还需要负责发送屏幕控制信息,比如说,我这次发送的一个命令在终端的20,30位置,这样,主机就会在发送回来的信息中包含一个从那里起始数据的光标信息。</p>
<p>http://www.networksorcery.com/enp/rfc/rfc2351.txt</p>
<p>The airline community has been using a worldwide data network for over 40 years……..<br />
This is used typically for communication between an airline office or travel agency and a central computer system for seat reservations and ticket issuing. A dumb terminal or a PC accesses the central system (IBM or UNISYS) through a data network.</p>
<p>这是我现在需要打交道的一个协议,妈呀,都用了40年了。当然,其实这些东西没啥意思的,他们都属于专有系统(proprietary system),对个人发展而言没有什么好处,但是,由于遗留系统的现在还广泛存在,所以还得维护,过去遗留系统总是个名词而已,现在总算有些实际的认识了。</p>
<p>这下算是有机会稍微基础一下大机应用了,算是看到猪跑了。</p>
<p>很多时候,很多东西其实并不难,而难得在于你没有机会接触,你没有机会看猪跑。说实话,对于只有寻找到机会才能看猪跑的机会这点,我深深厌恶,可是,人生就是这样。</p>
<p>http://www.blogjava.net/calvin/archive/2005/12/17/24335.html</p>
<h2 id="2006-02-09-果然是极端">2006-02-09 果然是极端!</h2>
<p>XP就是玩极端,看看Kent beck把开发如何极端化:</p>
<p>1.If code reviews are good, we’ll review code all the time(pair Programming)
2.If testing is good, every body will test all the time(unit testing),even the
customer(functional testing)
3.If design is good, we’ll make it part of everybody’s daily business(refactoring)
4.If simplicity is good, we’ll always leave the system with the simplest design that
supports its current functionality(the simplest thing that could possibly work)
5.If architecture is import , everybody will work defining and refining the architecture
all the time(metaphor)
6.If integration testing is important , then we’ll integrate and test several
day(continuous integration).
7.If short iterations are good, we’ll make the iterations really, really short-seconds
munutes and hours, not weeks and months and years(the Planning Game)</p>
<p>Kent让应用开发领域重现了Hacker精神。</p>
<h2 id="2006-02-04-恢复包月">2006-02-04 恢复包月</h2>
<p>I cannot bear it. I cannot bear see the connect time when suddenly I realize I am not monthly payment for the connection. I dont like to see the whole time when I disconnect the connection.I dont like to check my bill each month that if I exceed the fixed fee of it.</p>
<p>Now, I can take it easy for it.</p>
<p>Yesterday, I went to the CNN office to change my ADSL to monthly. And pay the whole year fee.I will become a 24 hours online piggy from March 1.</p>
<p>After long time choosing & filtering, My family confirm the baby name “刘浩越”. This is the idea of my father —- baby’s grandfather. We all agree with it:
“皓月”当空, wish my baby like the bright moon,purificatory & bright, a clear mood.
浩,this word has a water in its left,my baby is short of water in his life basing on WuXingBaGua.
And,the name is from his grandfather, as the tradition,the name should be from his grandfather
The last one, We cannot make a satisfied name except my father ^_^
无法忍受突然间想起来,连着网呢,然后歪过头去看看连接时间;讨厌每次断网的时候总是下意识地看看连接时间是多少;也不愿意每个月付帐的时候,留意一下是否这个月又多交了多少上网费。无法忍受了。</p>
<p>所以,我采取了行动。昨天去网通营业厅把AD换成了包月,并且趸交了一年的上网费,恩,安心了。从三月一号,又可见24小时再现的猪了。</p>
<p>经过长时间的选择和筛选,终于给宝宝选定了名字--“刘浩越”,超越浩大,大气的名字,我喜欢,这是我老爹,孩他爷爷给起的:
皓月,取这个谐音,像月亮一样明亮,澄澈,表达着我们对宝贝将来心地清澈,纯洁的愿望。
浩,带着三点水,宝贝五行中缺水,所以正好补充。
这个名字是爷爷给起的,按老话,名字应该是爷爷赐给的
我们全家人一直憋不出更好的名字来,这才是关键,哈哈</p>
<h2 id="2006-01-31-扯">2006-01-31 扯</h2>
<p>刚看完反恐,又去看<a href="http://blog.sina.com.cn/m/laoluo">老罗的blog</a>,从紧张严肃的剧情度然堕入调侃骂街的博克中,过瘾啊。</p>
<p>我们的生活其实总是在类似的两条线上,一条是严肃正统,比如我们工作,需要严肃地跟领导谈话,另外一条是调侃的轻松,让自己在傻笑中彻底放松。而我们在其中寻找着平衡点,不至于让自己太过失落,也不至于太过于亢奋而忘己。</p>
<p>一切都像是电影,我们其实在场景中穿梭,我们是编剧,也是演员。有时候,下午三点,昏沉在办公司的软弱的座位上,我们往往忘记了自己。那时候,我们是演员。到了十二点,午夜的十二点,当四周极为安静,或者,极为嘈杂的音乐中,我们才恢复编剧的身份。</p>
<p>每个人在他的位置上,主要的目的是为了证明自己的存在,他们的言语,他们的行为,大多为此。于是,千万不能忽略这点,不能漠视他们的行为,以及行为里面的表达。所有的人都知道规则,每个人骨子里都想违反规则,他们知道代价,但是,挑衅充满着刺激,诱惑着。</p>
<p>总是需要释放一下,never lose my passion。这需要我们要好好学习,多多经历,掌握更多的规则,然后才能游刃有余的违法它。
I dont wanna just trnaslate it any more,but my rule is writing english blog after its chinese verion,I also wanna broke it.so, let me write a article in english as replacer.</p>
<p>In life, we learn lots, and try lots.No one tells us how to do. Yes,this is the point.</p>
<p>I need learn, need pratise, need to make errors. My feeling is 2 point: learn more, and learn to forgive me. The rule told us, man cannot make fault,one man should think over everything. Yes, they are right, and my father always reminds me. But, dont make it an obstruct in your life. dont lose the encouring making errors.</p>
<p>Just make your decision,thinking is necessary. But when you make it, dont change easily.I saw the series “FanKong 24 hours” just now.This make me impressed. The president cannot have a clear mind, but from my view,more frigging,the danger thing he cannot make decision immediately.So,remind me & my friends, making your decision without any hesitation.</p>
<h2 id="2006-01-29-真过瘾">2006-01-29 真过瘾</h2>
<p>好久没这么热闹了,全城轰鸣了,真TMD过瘾,兴奋极了。</p>
<p>久违的那股热闹劲又回来了,这才叫过年嘛,可怜小宝贝了,耳朵堵得严严实实的,无法享受这份轰鸣。</p>
<p>政策制定者看来不得不认真对待民意了,2006的这第一声轰鸣,过瘾,我喜欢。</p>
<p>There is a long time not to crazy, all city was crazy, so wonderful, I love it.</p>
<p>Those familiar noisy come back,which bring back the original atmosphere. It seems the authorities cannot omit the peoples’ willing. The boom from 2006,so hot,so loud, I love these noise.</p>
<p>My pity baby canot enjoy it, so, he had to block his ears tightly.</p>
<p><img src="/images/20200614/1592117660263.jpg" alt="" class="myimg" /></p>
<h2 id="1月27日-鸡年最后博一把">1月27日 鸡年最后博一把</h2>
<p>最后一天,明个放假,肯定不会上线,赶紧最后挣扎博一把~</p>
<p>刚才看了传说中的小强历险记,挺搞,把去年能刷的人能涮的事都涮了一把,不过和想象中的还有一定差距,没有当年看大史记那种强力的暴笑冲击。</p>
<p>最近看了几篇帖子,关于恢复放炮的,关于春晚的,关于汉芯涉嫌造假事件,《冰点》周刊被非法停刊的公开抗议 ,还有京报主编撤职事件。。。,都让人感觉我们的社会还是存在许许多多的问题。新闻频道的“讲述”也是个让人看到世间炎凉的好节目,他其中的很多题材都是来自网络上的报道。看来,网络带给我们的冲击月来越大,越来越深入。最近使用newsant,感觉很好,让自己获知各种讯息的途径更简便,更丰富。</p>
<p>很多事情其实本来就很丑恶,只是过去我们过去对真实世界认知的途径太少,就像小强历险记里面说的“回家看新闻联播,那上面有祖国大好形势;祖国大好形势只能从新闻联播上看到了。 ”。现在突然都来了,搞得我们一下子被各种惨状吓晕了,不过,日子流逝,见得多了看得多了,也就慢慢麻木了。</p>
<p>牢骚归牢骚,新年还是很多事情值得期待,坏小子茁壮成长,206北京大街满街跑,北京房市彻底崩盘,地铁赶紧通车,更多人博客灌水炫自己,对,还有老妹幸福出嫁,反正是,2006没道理啊不幸福!</p>
<p>最后一天,明个放假,肯定不会上线,赶紧最后挣扎博一把~</p>
<p>Today is the last day before vocation. I wont online tomorrow,so,blog one today~</p>
<p>I saw the movie of “legendary XiaoQiang’s story” just now, so funny, it involved so many peoples & news of the past year. But it is a little distance with my imagination, without the impaction of that “Da Shi Ji” serveral years before.</p>
<p>I read some posts recently,including resuming firing firecracker; Spring festival evening;the fake of Han chip;the event of the weekly -«Freezing ponit» stopping publication;editor in chief was dismissed….ect. These make us known that so many problems exist in our society. Program “Talk” in News Channel of CCTV is a good program, in which you can learn all kinds of things in the China. Some of topics come from the report from internet. It seems that the internet is impacting us more & more, deeper & deeper. That’ all thanks for newsant,which help me aggregate blogs into a information portal and make getting news more easily.</p>
<p>Many things actually are ugly essentially, only for we have few ways to cognize the real world. Just like the words in “XiaoQiang’s story”: “Go home to see the CCTV XinWenLiangBo, in which you can see the prosperous world;and the flourishing world can only be seen in XinWenLianBo!”. Now all come all together, we are all shocked by it. But with time lapsing, we will be used to it when we saw more & heard more.</p>
<p>complaint is complaint, new year also brings us many things to expect: my baby will be stronger, 206 will be full of BeiJing’s street, housing market will collapse,the subway will open,more guys begin their blog life, and more,my sister will marry happily. Anyway, it is no doubt we will be happier in 2006.</p>
<h2 id="2006-01-29-没有博克的人是可耻的">2006-01-29 没有博克的人是可耻的</h2>
<p>这是一个开放的社会,空气中充满着自由的味道,矜持的人是孤独的,未博的人是可耻的。</p>
<p>有一个词,叫,信息不对称。躲在屏幕后面的窥视,是每个人的潜在的欲望,看别人的一举一动,咀嚼他们的各种心情思路,充满了快感。更有极致者,发明了rss,将透窥行动推向了高潮。</p>
<p>感谢博客,给我们一个机会,让别人有机会读你,你是孤独的,所以你要博,你是热情的,所以你要博,你是自由的,所以你还要博。灯红酒绿中,高楼大厦里,喧嚣人群中,甚至是鼎沸的除夕鞭炮轰鸣中,都无法掩饰你内心的一份孤独。</p>
<p>博吧,是热情就奔放,让全世界的偷窥者与你共鸣。</p>
<p>This is a open society, full of free in the air.Only lonely guy feels restrained.So,those no blog are vile.</p>
<p>“Information asymmetry”. peeking behind the screen is the latent lust in everyone’s body. Seeing their each actions, and chewing their variable spirit & mood, you must be hot. RSS aggreviation makes it to climax.</p>
<p>Thanks God,Thanks Blog, give us a chance. Others can read you.you are lonely, so, you need blog;you are passional,so,you need blog;you are free,you need blog,too. In the scene of debauchery, in the crowed,even in the boom of firecraker of new year,you cannot hide your loneliness.</p>
<p>Blog yourself, let your fire blame fiecely,let all peeker of all the world resonate with you.</p>
<h2 id="2006-01-21-涝涝汗">2006-01-21 涝涝汗</h2>
<p>宝贝真行,刚生出来就成了外交家,接待了N波外宾,宝贝累了,宝贝涝涝汗。</p>
<p>可能是还没有适应,没啥当爹的感觉,就是觉得这小东西好玩的很,很会玩无辜,耍天真,特别是小嘴一裹一裹,哼哼唧唧的,煞是惹人。</p>
<p>昨天是回到家里第一日,宝贝倍好奇地左看右看,老婆说,他屁都看不到,他的视力还只能分辨红绿,可是这种精神还是很值得鼓励的。</p>
<p>继续贴图… …</p>
<p><img src="/images/20200614/1592117713001.jpg" alt="" class="myimg" /></p>
<h2 id="2006-01-17-1月16日-1700-宝宝平稳降落">2006-01-17 1月16日 17:00 宝宝平稳降落</h2>
<p>经过老婆不懈的努力,宝贝终于顺利降生了。</p>
<p>是个小子!来,先露一小脸~</p>
<p>名字还没起,好建议尽管贴上来</p>
<p><img src="/images/20200614/1592117787078.jpg" alt="" class="myimg" /></p>
<h2 id="2006-01-06--新闻蚂蚁">2006-01-06 新闻蚂蚁</h2>
<p>新闻蚂蚁:<a href="http://www.newsants.com/">http://www.newsants.com/</a></p>
<p>A good RSS reader,recommend!</p>
<p>I used Feedemon in the past, but it’s not free,I have to search its crack key,
Now there is our Chinese verion, and it’s shareware.</p>
<p>Ok,now you can read all blogs in one software,why not try it,so cool~</p>
<h2 id="2005-12-23-begin-my-wiki--life">2005-12-23 Begin my wiki life</h2>
<p>I ever saw a HTML page sent by “ColorWolf” , it is a snippet from his wiki - JSPWiki.</p>
<p>So,I begin to have a try.</p>
<p>I download it, and deploy it in my tomcat, from 2005/12/13, i began my wiki life.</p>
<p>I only looked it as my pesonal blog system & document achive.</p>
<p>JSPWiki is quite simple,but I think it is enough,some features are useful for me:
I use it as blog system, although it has actually a blog plugin, but I didn’t use it,I just use the common way to create blog: just create a new document. I think ,styles are not important, but ,item is.
JSPWiki supports image,link, and attachement, what’s more, it provides some text formatter,simple and easy use.
It does not need database,just plain text,you even can modify the item by edit the text directly.Also, tomcat does not ocuppy so much resource of my PC, I obeserve only 30M memory is used.Quite limited comparing with 1G memory of my PC.
Okay,now I had a private wiki system. Its functions is within the scope of my daily work & life, and mainly is work.And I know, item is more important than styles,so,hope you can find your document collection method fitting you best.</p>
<h2 id="take-care-yourself2005-12-19-guy">Take care yourself2005-12-19 ,guy</h2>
<p><a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=15871&threadID=30624&tstart=0">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=15871&threadID=30624&tstart=0</a></p>
<p>An warm-hearted & professional developer left us,although I am not familiar with him, I also mourned deeply.</p>
<p>Yesterday, I chatted with my wife. She told me her classmates earn little money.Her classmates all are doctors.In general, their month salary only reaches 2-4K,but they all are working hard. They often work through whole night without rest, and suffer huge working stress. She thought it is too unfair.</p>
<p>Yes,I had to approve her,maybe we are lucky,as all of us know, IT is a high-paid industry,but the same time,we suffer the same stress,too.</p>
<p>Overtime,overtime,overtime!</p>
<p>You can see the situation in almost all companies in Chinese IT company.And you also have to study & work hard.So many smart&diligent guys crowd into it.You have to.</p>
<p>Actually, not IT,medical system in such case,all peoples in Chinese are experiencing in the same way. We are fortunate and same time unfortunate, we get more freedom and right,more oppertunity to choose,but , we also pay for these. That’s the fate of our generation.</p>
<h2 id="2005-12-16-discussion">2005-12-16 Discussion</h2>
<p>Before going home, I talked with my colleagues about our system develpment & project.</p>
<p>We discussed lots, including:
How difficult to code cocurrent network programming, how to deal with timeout and some protocol problem.I recommended UT and some agile methods. But they all said,it’s difficult to practise,lots of reasons make us hardly to change.He also told me, one application’s source had reached serveral M bytes, including java/javascript/storeprocedure…..Acutally, the project had been ongoing for server years, and the teams also had serverl years history.</p>
<p>I learned lots for my colleagues,but I also realized something:
The team had formed some patterns,some are good, but some are not good,but,the teams seemed had no encouraging to change them, that’s the point.</p>
<p>I strongly want to help my team to improve & change bad situation, but , first of all,I knows,I should involve the team and study the rich experience accumulated by all colleaugues.I need more patient and passion to involve the team.</p>
<p>Whenever & However, I won’t forgot “Communiction,Encourge,Feedback,Simple”, and share the spirit to all members.</p>
<h2 id="2005-12-14-xp-practice">2005-12-14 XP practice</h2>
<p>Since i did not code for almost one year, I feel a little inexperienced for XP, recently i am tring to practise it.</p>
<p>First, i try to write UT-unit test, i write about 20 test case. my experience is it is actually improving my desgin and the quality of code. when i send the code to FrankLi, he sneer me test cases are too few, he said one feature is corresponsing a UT, yes, he is right, but i am just a beginner of it, i will write more and more UT in the future.</p>
<p>Today,I paire with my colleague, he is a good young guy, having rich experience in network programming, with his help, i begin to intergrate my code into our whole project, but found lots of problem.</p>
<p>The mose difficult is when i merge my code into project, i found i had to write lots of adapter code, the other side of merge force me to accept lots of concept and class i actually do not need.</p>
<p>for example, i just need a byte[] , which is income message. but it send me a class named “Msg”, which is considerable complex.</p>
<p>another example is,the project provide a architecture for programmer,it provide serveral interface, i implement them,but when i write detail implementation code, i still write my code fowlling another implementation written by other colleague, just looked that implementation as a template,why? becuase, there are lots tricks in the implementing code, you have to involved into them, i call them TRAP. dear! my ideal implementing is i just focus interface, it is a contract, i dont care others how to implement, i just implement mine.</p>
<p>also, during lunch time, i always discuss some XP concept and practice with my colleagues, hope i can be a missionary of XP, but first of all, i first should become a XPer:D</p>
<h2 id="2005-12-06--民工们">2005-12-06 民工们</h2>
<p>昨天看《东方瞭望》,看到一期讲述农民工的文章,很长,也很震撼。</p>
<p>数以亿计的农民进城务工,工作的辛苦超乎我们的想象,他们说,不怕累,不怕苦,也不怕城里人的歧视,最怕的就是老板克扣工资。</p>
<p>他们吃陈化粮,十几个人挤在没有暖气的屋子里面,春节为了一张火车票彻夜排队,不敢尴尬的走在灯红酒绿的街道和商场,几乎绝迹的性生活,困难的个人问题,被城里人歧视的一群。我们很少能看到他们的报道,了解他们的生活,但是,他们数以亿计。</p>
<p>你在意过身边擦肩的他们么,在工地上晃动着的身影,在茶馆里给你端茶倒水的一个个,在菜市场里瑟瑟地跟你买卖着。。。。。</p>
<p>我知道我什么也做不了,只是提醒自己,不要把自己的生活当作想当然。在面对他们的时候,多一份尊重和平等。</p>
<h2 id="2005-12-01--一个月">2005-12-01 一个月</h2>
<p>居然来了一个月了,快啊。
昨天把大学的网络书找出来,准备重新学习,已经尘封N年了,居然还用的上了。</p>
<h2 id="2005-11-30--很生气">2005-11-30 很生气</h2>
<p>今天很生气!</p>
<p>过去的单位在上海浦发给我们办了张卡,用来工资支付,我厌恶每年贡献10元手续费给它,决定销户。</p>
<p>首先在北京找网点,好不容易找到了一个十条的,去办理了销户,给我开了张单子,让我1周后再去任意一个网点,就生效了,到时候就可以把钱取出来了。</p>
<p>昨天欣然前往,等待N会,排到后,被告知,十条的单子把余额搞错了,少了3毛,让我等待,她去跟总行作个什么确认,等待N分钟后,被告知,需要明天再来。</p>
<p>今天又欣然前往,前面有个土财主一样的家伙在柜台上,把大笔的票子正往柜台放,于是乎被告知,需要等待半小时,服务台里就这一个窗口服务。急了!冲她们嚷嚷,我说我都被涮了2次了,小姑娘很干脆的回答,“我们没有涮你,你就得等,没办法”,靠,忍了。</p>
<p>终于等待了将近一小时,办理完了,彻底的取出了钱,并且很解气的正式地销户了。</p>
<p>已经快1点半了,还没有吃饭,于是乎,忍着饥饿,往总行投诉,控诉这个破银行,这个破服务,这个破质量。</p>
<h2 id="2005-11-28-关于学习">2005-11-28 关于学习</h2>
<p>今天很过瘾,从央视经济大讲堂,然后是名家论坛,最后是对话。</p>
<p>总有一种感觉,央视的经济大讲堂/世纪大讲堂,是学习山东教育电视台的名家论坛搞起来的,现在已经是一个全民学习的时代了,而媒体居然跟不上这个步伐,确实让人惋惜,好在很多媒体已经意识到这点,比如央视和山东教育电视台,逐渐形成了很多有特色的教育节目。而且,两者也不是竞争的,央视请的都是高官和大家,他更给我们带来宏观的知识,而山东教育关注的是个体的教育,教授的多是实用的知识,两者各有特点,但是都给我们带来很多知识。</p>
<p>我还算是个爱学习的人,对学习各种东西总是乐此不疲,但是,最大缺点就是学不不能致用,学过狠多东西,很少能用上,今后更应该注意多学习一写更实用的知识,所以很想学习一些关于微观、宏观经济、财务、营销、金融、管理、理财等方面的知识,倒不是一定要如何如何,只是这些知识和生活工作息息相关,让自己具备一些这方面的知识,工作生活更特心应手。</p>
<p>而对于做技术人员的本分,学习技术只要在工作中用心,只要常关注技术的发展趋势,更宏观的关注技术,更多地跟同事/朋友/网友/同学们交流,工作过程中更积极主动,想来足可以应对个人的职业发展了。</p>
<p>今天对话过程中,很多企业家都在谈创新,谈发展,谈学习,企业尚且需要学习,个人又何尝不是呢。多关注宏观,多注意变化,多剖析深层次的内涵,多学以致用,把学习当做乐趣,当作一辈子的习惯,我们就可以获得更自如。</p>
<p>谁说三十就老了,新一轮的学习才开始呢。</p>
<p>电子资源:
央视经济大讲堂,
央视百家论坛,
山东教育电视台名家论坛,
以及网上可以bt的各种视频教程(包括烂大街的鱼是为讲座,MBA教程,华尔街英语,财务讲座,还有目前卖的盗版的各种电视讲座的压缩视频等等,我爱盗版!)。</p>
<p>我的朋友们,如果你们有什么好的学习资料,学习方法,学习途径,多多跟我分享吧,我今后也陆续把我的一些经验和收获告诉大家,多交流。</p>
<h2 id="2005-11-26-更新">2005-11-26 更新</h2>
<p>猪今天还探出头来说,为什么不更新,为自己的懒惰深感惶恐。</p>
<p>新的地方总是让人感觉局促,陌生,陌生脸庞,陌生的声音,陌生的桌子,陌生的朝向,即便身跳无数,身经百战,仍然是不能这么短时间的安然处之,好在他们都是性情中人,到让自己感觉融入不是很难的事情。</p>
<p>可能是年岁到了,过去对新的憧憬,反倒成为了安逸满足的最大恐惧,努力调整吧,不要相信什么充满斗志的激昂话语,谁难受谁知道。猫着吧,等到忙碌起来就不会想什么了。可能是每天出入高档的写字楼,看身边的饮食男女,秀色可餐的,居然让自己也幻觉起来了,好像以为这种生活是属于自己的。</p>
<p>那天走在地下一层,两面玲琅满目的,突然让自己想起了5年前的场景了,也是这般的炫目、华丽,但是,当时的感觉却是,热闹是他们的,我什么也没有。做恍然大悟状的突然清醒,哦,原来如此。等挤车回到了丰台这个城乡结合地带,才真切体会到,华丽只是那里,只是一点。</p>
<p>突然想起了两个同学,一个不知道是否范中中举了,一个不知道私奔后是否幸福,都没有联系了,可能以后也不会联系了,他们都有一个共同的特点,就是执著,这年头,这种人真的不多了。</p>
<p>郑渊洁写的童话大王据说发行了7000万册,我们爱看,爱看童话里的世界,透着幻想的快感。那时候,我们是孩子,而今我们要有自己的孩子了,我们已经不敢再幻想了,我们应该教会我们的孩子幻想。</p>
<p>今天还突然看到了一个报道,关于寻找姐姐的,他叫杨德超。“无情与自私让我们变的越来越成功”,说得真好,我试图努力对自己说明这个论点的错误,可是,心底却不由得同意。我们也不用去唾弃什么,也不用去废脑筋的去思考,成功地种种途径和因素。因为,每个人的成功标准不一样,而学会为自己树立自己最满意的成功标准,这才是最重要的。这个标准本来就不应该是他妈的这个社会给我的。他说,“每天我们都在被无形的追赶着往前跑,我们究竟在追逐什么,我们得到了很多,但是同时我们发现,我们失去了更宝贵的东西”。
<a href="http://yangdechao.blogbus.com/index.html">http://yangdechao.blogbus.com/index.html</a></p>
<p>前两天看商道,认识了林尚沃,平和,淡然,知识渊博,自我控制,太完美的一个人了,其实,如果他不是做生意,他做其他的内容也同样会“出任头地”,这种人要么是天生的,要么就是活在电视剧里。任凭我们如何的修炼,我们也做不到了。倒是其中的很多行为方式,可以借鉴过来,完善一下我们自己,让自己活得更踏实。</p>
<p>无厘头的喷喷,感觉真好。</p>
<p>我们挣钱不少了,我们家庭也很圆满,我们父母健康,我们过得足够好了,应该让自己活得更明白些。</p>
<h2 id="2005-11-04-开始学习">2005-11-04 开始学习</h2>
<p>好久没有深入研究过技术了,下午捧着Java NIO看了一下午,晕菜中,今后想到要去维护和开发根底层协议相关的程序就头疼,而且有种想逃避的感觉。人就是这样,遇到困难总是想回避,看来这次是回避不掉了,迎着头皮上吧,看完NIO,看Socket,然后还有Thread,都弄完了,可能还得继续学,需要的是耐心,需要的是心态。这样也好,对自己的急性子是个很好的磨砺。回头过了这段路,再回头看这段文字,估计会很有心得。</p>
<p>看书过程中,两个同事在闲聊,大致是关于学习一些管理知识,如何按照老板的思路考虑事情之流的话题,偷听了只言片语,同事最后几句话让我感受很深“我的定位是一只虫,不想成为什么龙,多学知识,学管理,只是让自己活得更明白些”,是啊,有了这种心态,就去了少了很多烦恼。表面上的无为,是靠丰富的大智做铺垫的。</p>
<p>最近狼在看经济学方面的,等回头有了时间精力,也要多去看看经管方面的书籍,让自己更充实些。</p>
<h2 id="2005-11-03-不要陷入复杂的漩涡中">2005-11-03 不要陷入复杂的漩涡中</h2>
<p>今天网管过来帮我装jbuilder,装clearcase,装clearQuest,然后配置超复杂的一系列,完全眼花缭乱,服了。然后还给装了个大机用的仿真终端,说是以后用的到。明天还要配置weblogic,又是一堆配置,然后才能拉下source看看究竟,估计这周能跑个例子出来就不错了。难怪,旁边的同事说,他刚开始配的时候,包括版本控制、开发环境配置、部署运行环境配置、以及理解系统,整化了一个多星期,还没有开始上手,靠,复杂。</p>
<p>最近在看j2ee without ejb,作者一种勇于怀疑的态度真让人起敬,如果有简单的方法可以解决问题,难道这不是好的解决方案么?千万不要迷信复杂,复杂不一定好。简单,是为了让问题更明显,复杂,是让问题看上去不明显。不要相信任何权威,相信自己,相信证据。</p>
<p>今后就要进入这个旋涡了,不知道自己能不能还保持这种态度,留下文字,提醒自己,不要陷入复杂的漩涡中。</p>
<h2 id="2005-11-02--世界小">2005-11-02 世界小</h2>
<p>前天新东家上班去,中午一吃饭,居然发现的同事居然是大学同学,还是一个系的,ft,世界太小了,那时候还天天一起上大课呢!只是分别了七年,再聚首的时候,都不敢认了。这世界可真的是够小了。</p>
<p>想到过去呆过的2个公司,总是有类似的熟人,不是同事的同事,就是同学的同学,这回倒好,居然是痛系同学,不过想来也是,这个圈子本来就不大,混上几年,估计就都认全了。</p>
<h2 id="2005-10-31-blog">2005-10-31 blog</h2>
<p>没事就爱看别人的blog,时间长了,连电话沟通都觉得唐突,而看blog,就成了一种彼此可以交流的方式。每次看到别人上面出现了小星星,总是迫不及待的点开链接,国人都有一种窥视心理,大概自己也不例外,细细的阅读,把文中细腻的枝节和自己心目中的朋友串联起来,让人感觉他/她依旧是那样的亲切,这个时候,你也往往可以从涓涓文字中,了解到这个朋友不被你注意的另外的一面,你会发现,其实每个人都是那么感情丰富,每个人的生活都是丰富多彩,同时也是酸甜苦辣的,偶尔,你会共鸣,黯然神伤,偶尔,你会被他的机智幽默感染,畅怀大笑,总之,你会更加了解你这位朋友。无需推心置腹的交谈,你就渐渐得更深地了解了这个朋友。</p>
<p>在blog的朋友,希望看到你们更多的精彩,没有blog的朋友,为什么要掩饰自己,展现给大家,你会感觉更快乐和充实。</p>
<h2 id="2005-10-30--太庙">2005-10-30 太庙</h2>
<p>最近央视在放《故宫》,红砖琉璃瓦,蕴含着无尽的故事。那天去北京人才,因为在劳动人民文化宫内,所以顺道去了太庙看看,记得上次去太庙也是在来人才的时候转入档案的时候,不过那是2001年。四年,对一个人而言,算是挺长的时间了,但对于数百年的太庙而言,似乎感觉不到,依旧是那么空旷,依旧是那么沉寂,少有人来往,数百米外车水马龙的长安街,丝毫无法侵入这里的平静,让人感觉心里是那么踏实安宁。</p>
<p>哦,对了,如果想去太庙,就跟开门人说,我要去人才,然后就可以堂而皇之的进入了。</p>
<h2 id="2005-10-27-看反恐">2005-10-27 看反恐</h2>
<p>熬了2周,看完了反恐第二季,总的感觉没有第一季好,大概是已经熟悉了导演的讨论,比如梅森藏在飞机上代替鲍威尔完成了核弹引爆的情节,很容易就猜到了,但是总的来说还是不错的了。紧张刺激情节波折还是一如既往。</p>
<p>倒是其他的一些细节让自己体会到一些东西,怎样做一个上司,怎么做一个下属。感觉一点,邪恶的想法永远不要有,无论是在什么位置,都要有一个善良正直的心理,否则,无论做什么,都意味着失败,这种失败,不一定是表象的,也可能使自己良心的谴责,内心的煎熬。所以,无论什么时候,我们都要认真做事诚实做人。</p>
<p>下属对上司一定要认识清楚,明白自己的上司,是不是一个正直的人,是不是一个值得信赖和追随的人,就想我们对帕尔马总统和鲍威尔的认识一样,我们确信,我们跟对了人。然后呢,然后就是死心塌地的为他工作,处处为他的利益着想,老板也是人,他有很多难处往往更不能对下属说,这个时候,作为下属,就要努力体谅他,这样,老板自然会信任你,重用你。当然,这个前提,是投对明主,这需要每个人自己的智慧和判断力了。</p>
<p>说到底,跟着值得跟的人踏踏实实做事情,总归是会有好处的。</p>
<h2 id="2005-10-18--马拉松">2005-10-18 马拉松</h2>
<p>02年的时候,跟猪一起跑过10公里,3年来一直没再跑过了,摸着满身的囊肉,腰老是隐隐作痛,自叹身体不如从前。家人反复叮咛,不要逞能,慢慢跑,谨记在心地出发了。早晨的前门,万头攒动,阳光照耀下,热情弥漫。开跑了,看到前面一位白发的老爷爷,手举牌子,曰“迎接2008奥运”。另外一位,脱掉全日空赞助的白T-shirt,换上自己的上衣,印有“钓鱼岛是中国的”。新京报一个方阵,穿著整齐,步伐一致,喊着“1,2,3,4”,就如同高中军训的样子。到了复兴门,5公里的终点后,全身大汉淋漓,好痛快,浑身软软的舒畅,好久没有过了。只是,周一早晨,全身酸痛,才让自己知道了长久不锻炼的后果。</p>
<h2 id="2005-10-14-看见孕妇就亲">2005-10-14 看见孕妇就亲</h2>
<p>今天看到单位有个同事也穿着防辐射服,一看就是怀上了,立刻上前攀谈,嘿,现在看到大肚子的就感觉就感觉很亲切,因为眼睁睁看着老婆肚子一天天大起来,跟着体会到做女人孕育宝宝的辛苦,现在老婆的肚子已经鼓鼓的了,可老婆说,最后几个月还要再长,天哪,那样岂不要撑破了。现在,老婆每天不能躺着睡,必须侧卧,否则宝宝对内脏的压力太大,真是受了罪了。后来在书里面看到孕期肚子的结构图,宝宝居然占了那么大地盘,唉,真是辛苦老婆了。</p>
<p>这里说一句,老婆辛苦了,天下的妈妈辛苦了。</p>
<h2 id="2005-10-02--大长今">2005-10-02 大长今</h2>
<p>昨天晚上熬到2点,终于看完了全套的大长今,感动得一塌糊涂啊。好久没看这么长的电视剧啊,过瘾啊。</p>
<p>最佩服的就是编剧,可以纂出这么多曲折离奇的故事,而演员只能说是标准韩剧水平,算不上上乘,但是,但是,也足以让我们体验简单的感动了。</p>
<p>带着一颗谦逊的心来看电视剧,就像申主簿要求长今一样的那种谦虚,努力发现电视剧中让我们感动,学习,思考和积极的东西,因为很简单,让我们不用跟导演斗智,只是品尝一个个的美德和诚挚。过瘾。</p>
<p>坚韧,遇到任何困难都不放弃,从来不放弃任何的希望,她在被赶出宫后,经过痛苦的挣扎后,站起来,投入到医学学习中,在给娘娘,太后,皇上的治疗中,遇到各种的奸人的陷害都靠自己的坚韧和意志,度过了难关,战胜了敌人和自己,不断的升华自己。</p>
<p>像雪一样纯净的思想,没有任何邪念和贪婪,闵政号大人则是男人中的正直化身,虽然我们都知道没有这样的完人,但是,还是深深地被这种彻底的清澈的心灵所感动,不知不觉间,完成了我们自我心灵净化的过程。就像看到了韩国版的冉阿让。</p>
<p>长今就像一面镜子,折射出来的,是人世的沧桑,人的善,人的恶,一个个的活鲜鲜的角色,在这面镜子中,都被更显著的呈现出它的本性,其实他们才是真实的客观的,但是,他们在这面镜子面前,都展现出来他们的弱点缺点,也正是这种简单的反射,让我们更清晰地明白了导演想揭示的内容,导演仿佛在说,这些善的美的让我们效仿歌颂吧,这些恶的丑的让我们唾弃远离吧,简单的对比中,我们更自然的接受了,寓教于乐,嗯,好片子。</p>
<p>社会越来越复杂,如同宫廷一般,而我们继续守候我们心中的长今,小心的呵护她,发展她,无论什么时候,都在内心中,都不要丢失了这些最基本的真善美。</p>
<h2 id="2005-09-22-过怎样的生活">2005-09-22 过怎样的生活</h2>
<p>认真的学习技术,钻研,学习,渴望可以开发核心系统,祈求老板给自己机会,在别人面前炫耀技术,努力体会交流的乐趣,却很少想,这就是一辈子的生活状态,自己希望这样么,是自己的理想么,技术的精通满足了自己的空虚感觉了么,忌讳谈钱么?看到别人高高的工资,羡慕么,为什么羡慕。自我的满足感和充实感,究竟来自何方。</p>
<p>每个人都有自己的姿态,每个人都有自己的方式,停下来可能是件好事情,想不清楚这些问题,每天的忙碌没有什么意义。</p>
<p>可能还是受穷爸爸富爸爸的影响,常问自己,努力上进,目的何在,挣钱养家,难道非要背负沉重,挣扎在一线上,是否是宿命。不怕提出这些问题,不怕提出这种问题的深度之浅,怕,只怕自己不好意思向自己提问,不屑向自己提问,想当然的过活,不给自己思考的时间。</p>
<p>突然停下手中的工作,问自己,这真的是我想要的生活么?是么?真的是么?如果不是,应该是怎样,我怎么才能做到?</p>
<p>穷则思变。</p>
<h2 id="2005-09-19-学会理财">2005-09-19 学会理财</h2>
<p>这两天一口气看完了穷爸爸富爸爸,还是学到了很多东西。</p>
<p>对金钱的态度彻底发生变化,适度放纵自己对钱的欲望绝对是应该的,学会理财,学会让钱为我工作而不是为钱所累,学会投资,不要害怕失败。</p>
<p>尽管是讲述如何致富的书籍,但是,还是从中学习到很多与挣钱无关的内容,对自己充满信心,需要耐心和坚韧,思考工作的真正意义,以及用数字和理性而不是感性来作判断,总而言之,都是一本满不错的小册子,没有读过的朋友都可以读一读。</p>
<h2 id="2005-09-03--新闻">2005-09-03 新闻</h2>
<p>最近新闻很多,傅彪去世,超女诞生,一桩一桩的,但是,同学、朋友的消息却越来越少了,幸好还有这个blog,让我还能了解到朋友们、同学们的新闻。电话里,让我们生疏了很多,只有看到blog上的每天的生活的你,才让我知道,我没有变,你没有变,只是世界在变。希望常常看到你的新闻,真实的生活,真实的你。</p>
<h2 id="2005-08-27-生活的曲线">2005-08-27 生活的曲线</h2>
<p>看上一片是8/4号,很长时间,没心情写。
在家闲置了2周,面世了2次,再就业成功,但是没有喜悦,只是对又有了栖身之地的感叹。从需求又去做开发,从供应链转道银行业务,又让自己变身了,只是职位和薪水没有变化,开发是宿命么,不知道,新的开始的代价是无法在一个公司慢慢的熬并爬上去,毕竟自己还没有超人的实力一些在飞跃,所以,得从头开始做起来,来对自己信心、忍耐、热情的又一个轮回的考验。</p>
<p>作了半年多的erp方面的开发,准确地说是进销存方面的一些东西,到是满有收获,写下些一些学到的东西,算是做个总结。</p>
<p>业务系统的核心还是业务建模的,供应链,主要就是钱和物的流动,物就是空间,状态,数量的变化,在不涉及生产的物流中,物应该是守恒的,就像会计中的钱一样,从一个科目转移到另外一个科目中。
sap的业务蓝图,提供一个描述业务的手段,虽然没有认真研究,但是感觉业务需要一种能把流程,资源,功能,事件等串结起来的手段,给业务建模人员提供一种模版,这点还是很又借鉴意义,对了sap出了netweaver,有时间一定买来读读。进销存业务中,采购,库存,销售,大的流程其实还是比较简单的,复杂的就是细节,比如,采购申请按照什么原则合并成订单,订单转化成入库通知单,库存是否有货位容积管理,销售的定价策略如何指定,这些其实并不难,关键是把细节处理好,另外,在交互上,要求也很高,很多操作员每天录入上千张单子,如何让操作更方便快捷,也是需要考虑的问题。</p>
<p>也许生活的曲线的低谷已经降置最低,是该上扬的时候。</p>
<p>下个月有个两个同学生子,有两个同学结婚,九月应该是个收获的季节,还是相当期待的。</p>
<h2 id="2005-08-04-胡言乱语">2005-08-04 胡言乱语</h2>
<p>在工作中,期待着老板给我一个好机会,给我们了资源,让我们锻炼,让我们能力、经验增加,其实,这其中,往往忽略了我们自身的因素,我觉得是一种持久力,想想,每天8小时的为了某一个明确的目的而不同的思考工作,往往持续数周或者数月,只好认真去做,怎么会不成功呢。这其实,也让我们明白了一个道理,我们渴望获得某些能力,经验,是需要靠一点持久力的,这才是问题的关键,所以,做什么事情,要持久地去做,工作上我们持久地做工作上,而生活中,我们同样应该对自己的兴趣、理想啊,具备持久力,不在乎你多轰轰烈烈的投入,就需要点持久力,时间一长,你会给自己一个惊喜。</p>
<p>朋友告诉我,thoughtwork在招人,看广告说,google的研发成立了,不断地讯息告诉我们,更人性化的公司正在悄悄地进入中国,做一个心灵自由,心理开放,投入激情的开发者,不让自己举起倦怠,并且保持新鲜的竞争力,因为,it企业需要自由和创意的时候又回来了,你准备好了么?</p>
<h2 id="2005-08-02-居然oa这么炫">2005-08-02 居然oa这么炫</h2>
<p>这两天开始调研协同软件,<a href="http://myec.org/">http://myec.org/</a>,看到了无数的东西,居然这年头,OA还有这么强的生命力,居然OA有穿上了协同的马甲,反正是大家一起来炒概念,大家一起来忽悠,用户被忽悠晕了,用户就会来买单,说到底,用户有时候也不知道想要什么。噢,对了,用户也分为终端用户和高端用户,高端用户只会拍脑袋,终端用户才是软件的受益者或者受害者,可是他们却没有购买的发言权,真的应该做个开源的协同出来,让忽悠用户的商家都闭嘴吧。</p>
<h2 id="2005-07-25-关于工作生活和学习">2005-07-25 关于工作生活和学习</h2>
<p>最近半年心态发生了很大变化,比起过去平和了很多。
回头想想过去几年的工作学习和生活,如果以前,可能会觉得很多不尽人意的地方,而现在更感觉,那是一种经历,经历的事情,无法改变,也不具备评判对和错,好与坏的价值。
现在只想找一种平和的状态,不要太急功近利的做事情,看的开一些事情,看得淡一些事情,懂得去满足,去珍惜,去追求美好,其实,每天的工作生活学习,充实,有成就感,不要以往的计划,规划,约束自由的心灵。</p>
<p>想从头开始学习c,研究linxu.11的内核,想读银狐推荐的无字,想带着姥姥在北京逛逛,想开着自己的车去郊区游玩,想做一个自己主导的开源,想每周末跟老爹长谈到深夜,想给将要出世的宝宝起个好名字,想多陪老婆去公园,想有一个可以按时下班的公司,想工作中给客户带来真正的利益,想认识更多真诚的朋友,生活没有对错,没有好坏,是自己的心态使然。</p>
<p>不知道狼离开了那个猪狗不如的地方,在家里是否彻底的放松了,不知道王俊进到化疗室,病情能不能好转。</p>
<p>已经好久没有编码了,该是编点东西的时候了。</p>
<h2 id="2005-07-24-逛网">2005-07-24 逛网</h2>
<p>今天网上闲逛时,发现胖子6又更新了,
<a href="http://ozagile.blogdriver.com/ozagile/index.html">http://ozagile.blogdriver.com/ozagile/index.html</a></p>
<p>founder_chen居然他还是东软第一届java大赛得主
<a href="http://dreamhead.blogbus.com/logs/2005/03/1086771.html">http://dreamhead.blogbus.com/logs/2005/03/1086771.html</a></p>
<p>dreamhead的blog不错
<a href="http://dreamhead.blogbus.com">http://dreamhead.blogbus.com</a></p>
<p>很多东西都要去读一读
<a href="http://forum.javaeye.com/viewtopic.php?t=14814&highlight=">http://forum.javaeye.com/viewtopic.php?t=14814&highlight=</a></p>
<h2 id="2005-07-18-要出差了">2005-07-18 要出差了</h2>
<p>要出差了,过去忙活1、2周,然后赶紧回来,多陪陪老婆。</p>
<p>现在做项目很没劲,因为不熟悉delphi,很多东西都无法上手,只能做需求和数据库设计,跟朋友们说,朋友们说,作管理了,只有苦笑。</p>
<p>csdn上java10年,想来自己认识Java也6年了,一路走来,感情深厚。</p>
<p>网上搜索swt的文章,认识了cnfree,也认识了lumaQQ,很多朋友都在玩技术,而且都玩得那么不亦乐乎。</p>
<p><a href="http://lumaqq.linuxsir.org/article/friend_list_implementation.html">http://lumaqq.linuxsir.org/article/friend_list_implementation.html</a></p>
<p><a href="http://blog.csdwiki.org/play_view_sort_opensource.html">http://blog.csdwiki.org/play_view_sort_opensource.html</a></p>
<h2 id="2005-07-14-凶险的项目">2005-07-14 凶险的项目</h2>
<p>昨天姥姥来北京了,回去看看姥姥,精神气还不错。</p>
<p>一早来了公司,整理基础资料,发现了一个用户参数的文档,细看之,发现了很多新的需求,汗,项目的很多细节原来还没有被发掘出来,很恐怖。</p>
<p>team内讨论,大家的一致意见是早点去客户现场去开发,否则,%……—*(</p>
<p>目前的问题是,需求还有很多细节无法确定,这不是这个项目的问题,是所有项目的通病,无休止的需求变更,教条地让用户确认需求,过于教条也过于形式化,但是没有用户确认的落到文字上的需求点,项目就是一个无底洞,如何保证项目的成功,成功地尺度是什么,没有人能说出究竟。</p>
<p>我跟客户说,你们要向真正的保证成功,保证你们可以按照你们的想法实现出来,保证你们今后不依赖于我们,保证需求在发生变化的时候,可以快速的应对变化,你们就应该加入到开发中。这话听来确实过于理想化,但是想想,如果用户有这样的能力,如果客户能够以项目的真正的可用的负责态度来对待项目,这可能是最好的做法。否则,合同期到了,没有完成,罚我们钱,上头压,底下怨,痛苦着所有人,还有谁有心情关心这个项目的真正的用户。</p>
<p>还是那句话,做项目,不仅仅是在做项目,还是在做人。</p>
<h2 id="2005-07-13-向赵博士致敬">2005-07-13 向赵博士致敬</h2>
<p>http://www.oldlinux.org/cgi-bin/LB5000XP/topic.cgi?forum=1&topic=2&show=0</p>
<p>如果我上学的时候能幸运的遇到这样的老师,该是多大的幸福啊。</p>
<p>也让自己深刻的认识到,自由开放的心理终于一切,少些功利,多些执着,才能体会到真正的快乐。</p>
<p>有时间了,得好好读读,冲着赵老师辛辛苦苦写成,也要认真读一遍</p>
<h2 id="2005-07-09--小时候的事情">2005-07-09 小时候的事情</h2>
<p>北京的小孩,小时候都逮过蜻蜓,都玩过弹球,都拍过贴画,…..,你不得不佩服孩子的创造力,居然在贫瘠的年代可以发明出这么丰富的快乐方式,比起现在孩子应该是幸福的.</p>
<p>有时候,常爱回想一下朦胧的小时候,然后笑一笑,幸福的满足一下,想来都快30了,也要有自己的小孩子了,将来把自己小时候的生活方式讲给孩子听,带着他玩这些游戏,也是挺幸福的事情啊。</p>
<p>引用</p>
<blockquote>
<p>梦见蜻蜓</p>
</blockquote>
<blockquote>
<p>晚上梦见自己在草地上,看见身边飞过好多蜻蜓,这个着急啊,赶紧从手边抄起一个自己做的网,看准了一只大绿蜻蜓扑过去,正在挥杆捕捉之际,醒了。
很失落。</p>
</blockquote>
<h2 id="2005-06-21--燥热">2005-06-21 燥热</h2>
<p>TMD,又38度,赶上我提问了,热,热,热啊。</p>
<p>这两天日日加班,不过,忙里偷闲看看rcp,还有满有意思的,用到了jface,里面的cellEditor太弱,只有4种,text,checkbox,combo,还有dialog的,但是,checkbox的还是个fake实现,汗,只好自己写个。</p>
<p>业务这块,主要在整理需求,基础资料是根本,每个基础资料都可能控制某个流程、表单、校验、提交规则,流程是精神,有了业务流程,就相当于软件有了业务灵魂,业务流程串联着各个单据,让你清晰的感觉到业务的流是如何流动起来的。细节很重要,老宋说,虽然流程很重要,但是对于各个功能中的业务规则细则,同样重要,因为,这些决定了业务的正确性,流程是方向性,而细则时正确性,缺一不可,同样应该被重视。</p>
<p>不过,对于活动记录集的delphi的数据组织方式,总是不太适应,和数据库邦定的太紧,总让人感觉不太爽阿,何时能够操纵独立的业务层,那才是真的爽。</p>
<h2 id="2005-06-16--bjug周年了">2005-06-16 BJUG周年了</h2>
<p>快啊,都一年了,又老一岁啊。看着bjug一天天火起来,打心眼里高兴啊,我是个爱交流的人,99点的时候,自己吭哧win api不亦乐乎。后来也自己学了不少东西。直到后来,2000年的时候,看到了javaunion,在上面认识了很多朋友,到了2002年,常去参加一些活动,更是面对面结识了更多的朋友,像银狐999,liwei,hdp,chenguang,微雨等,还常参加一些活动。后来,慢慢的散娶,终归平静,耐不住寂寞,又找到了bjug,又有了讨论技术的地方。一年前,在避风唐的拥挤的小桌上认识了冰云,大头徐,nemo,。。。,一年过去了,自己和朋友们都经历了很多,也学习到了更多,bjug已经越来越壮大,而自由、交流、平等、开发等,仍是这里最基本的原则,希望bjug能成为越来越多java爱好者的天地。</p>
<h2 id="2005-06-14--无休止的加班">2005-06-14 无休止的加班</h2>
<p>厌恶加班,极其厌恶加班,加班是无能的表现,是对自己的不尊重,该八小时的事情,就要八小时完成,敏捷开发里让我印象最深刻的就是,永不加班!可是,放眼望去,加班已经成为各个it公司最“亮丽”的风景线,不加班的XP公司,你在哪里?</p>
<p>牢骚满腹,不过还是得做,需求没有细化,这确实是应该踏下心来做的事情,目前对核销,登帐,以及,各种原辅材料的入出库还不是门清,得细化,不能急躁。</p>
<p>最近天天在看delphi开发的产品,看不到领域模型,看到的只是数据建模,感觉得到,这个世界,仍然是数据建模盛行的世界,所谓的OO建模,看上去很美丽,但是只是在书里,在martin大叔的童话故事里,至少我没有看到。真的想,把这些业务按照自己的想法抽象,但是现实不允许,看到的满眼是delphi的代码和biz3.0无尽的API,什么是优雅的设计,这里,我看不到优雅。</p>
<p>老宋让我做计划,做3个月详细的计划,要可行的计划,噢,这真的很难啊,3个人做一个进销存,3个月做出来,2个人都不会编码,剩下的1个不熟悉biz3.0平台,还要熟悉充满bug的SCM代码,噢,感觉有点难度,噢,没关系,如果做了可行的计划,就可行了,作计划很重要,嗯,所以要做。想来想去,那就做吧,不过,需求确实需要细化,这才是更实在的东西,是应该自己认真做的,能做好的。确实有很多细节问题,还需要跟客户确认。</p>
<h2 id="2005-06-09--阴天">2005-06-09 阴天</h2>
<p>妈的,早晨跟议会室看着外面跟晚上8点一样,隐晦的天气,垃圾的天气,再看看南城,脏,愈发的脏。</p>
<p>右眼皮一直的跳,贴张白纸,白跳!</p>
<p>现在已经整天不再机器上了,天天在会议室度日,看着投影仪,爽啊,可惜不能看片。</p>
<p>今天教练跟我说了,让我明天下午去补一小时 ,然后周六路考,别说,内心还真有点紧张。</p>
<p>对了,建人应该开始玩SAP了,不知道怎样,这阵子对业务的了解,估计他早晚会被玩死。</p>
<p>说到了业务,终于真切的感觉到什么叫做细节,一个个要求,合理么?合理!存在就是合理的,好做么?估计会死。魔鬼创造了细节啊。</p>
<p>终于不再挣扎,被迫习惯这样的方式,忏悔是一种催眠,让我渐渐变麻痹,我学会快乐,因为我放弃,我学会痛苦,因为我在意,靠,政治化的歌最近总是挂嘴边,这不是什么好事情。</p>
<h2 id="2005-06-03--郁闷">2005-06-03 郁闷</h2>
<p>因为迟到扣钱郁闷,</p>
<p>因为不能去看martin偶像郁闷,</p>
<p>因为搞不清楚业务的脉络郁闷,</p>
<p>因为学车没时间郁闷,</p>
<p>因为没机会编码郁闷,</p>
<p>总之,郁闷。</p>
<h2 id="2005-06-01--支票">2005-06-01 支票</h2>
<p>支票有个签发日期,有一个生效日期,有一个有效期</p>
<p>签发日期:对方开这张支票的日期,比如1号开的</p>
<p>生效日期:比如支票上写的,5号之后开始生效,生效的意思就是可以从对方帐户上把钱拨出来了。</p>
<p>有效期:一般是一个月,如果签发日之后一个月你没有兑现,这张支票就作废了。</p>
<hr />
<p>2年前的6/1,我还和老婆还有她的狐朋狗友们在朝阳公园happy,那是一个礼拜六,很热,那里面的朋友们几乎都成了我们的邻居了,除了小魏同志,呵呵。</p>
<p>昨天下了雹子,下班的时候,喝了点小酒,路上和一个登人力三轮的哥们聊起来,一聊居然是老乡,一起叹息生活艰辛,骨子里面我还是那个从村子里跑大的屁孩,居然现在可以安逸于生活了,也是一种蜕变。昨天听诺贝尔经济学家讲,中午最后的一位,讲的是贫富差距的问题,又跟着感叹了一番。物质上十分想满足,但是欲望总是无限,只好把精力投向所谓的技术,工作,业务,聊以自慰,有点乐子总是可以分散点注意力的,既然骨子里是土地的血,也耻于彻底资化,就靠这些乐子平衡心理吧。其实背地里还得朝着中产努力,当然过去挂在口,现在藏于心,表露出来的,只是一片欣欣向荣的努力,这种状态挺好,过呗!</p>
<h2 id="2005-05-29--身在曹营心在汉">2005-05-29 身在曹营心在汉</h2>
<p>N年没有出差了,现在在江阴的一个镇子里---新桥,这里的企业做的很牛,感觉一个镇子就像一个城市一样,我所在的这个企业,建筑都是仿古罗马的建筑,华丽的大厦,恺撒的雕像,还有各种欧式建筑,另外,还有一座五星级的酒店。</p>
<p>2天来,整的一团麻,还没有一个整体的清晰思路出来,告诉自己不要陷入细节,但是往往不是自己控制的住。</p>
<p>这里的人都很友好,感觉很好相处,比我之前预想的情况要好的多,小周是理工大的,对北京很熟悉,常一起吃饭聊天。</p>
<p>还是想老婆了,可能是上了年纪,开始恋家了,讨厌出差,讨厌漂泊,渴望安定和平和。</p>
<h2 id="2005-05-18--冲啊">2005-05-18 冲啊</h2>
<p>很久没跟第一线的客户接触了,今天过去了,感觉客户不错,精明,但是又很讲道理,系统烂不怕,就怕人烂,还好,客户人不烂,行啦,有理有利有节,以后和客户,多沟通交流,本着做事做人的态度,相信不至于死掉,至少也会死得太难看。</p>
<p>今天听说马大叔要来中国乐,赶紧报了名,追星的事情,我绝对不能少了,就这么点乐子了。</p>
<h2 id="2005-05-13--不能确定的业务">2005-05-13 不能确定的业务</h2>
<p>今天有个哥们突然要走了,唉,突然让自己情绪又受到很大的影响。</p>
<p>在整理需求中,陷入细节并不让人烦,烦得是你不知道这些细节是不是客户想要的,你直接接触不到客户,还要在这里写繁琐的揣度客户需要的文档,这就是件很无聊的事情了。</p>
<p>看javaeye的一片贴子,<a href="http://forum.javaeye.com/viewtopic.php?t=10340&highlight=">http://forum.javaeye.com/viewtopic.php?t=10340&highlight=</a>,中提到,对客户需求的把握,第一点,是准确,你要明确知道真实的需求是什么,客户有时候对有些点可能也不知道,没关系,搞清楚他能确定的内容,很重要。第二点,要业务上有研究,如果一点都不懂,可能客户认为想当然的东西没有说,你又没有意识去挖掘出来,那到系统出来后,就抓瞎了。第三点,就是找出需求中最易变的东西,进行抽象,这个抽象的想法和结果最好和客户进行交流,让他们明白所做的扩展的目的是什么,也让他们评测一下必要性。</p>
<p>不过,该写的文档还是要去写,这就是工作,权当锻炼自己的忍耐力吧,继续干活去了… …</p>
<p>刚才跟郭方晓讨论了一下SBO的东西,他问我你做过业务软件的实施么?我摇摇头,他说,那就对了,软件出来后,你就是要逼着他们照软件来改改流程。。。我现在写需求,其实不用过分在意每个点,只是需要明确,业务表达的意思是这样的,明白业务的含义,屡的顺,行得通,有些东西是没有必要完全按照客户的意图去做。</p>
<p>突然有了一些感触:
人在生活中,总要注意说话的分寸,哪些该说哪些不该说,但是工作中,应该恰恰相反,凡是能说得尽量说,让别人理解你的想法,也了解别人的想法,做到尽可能的交流沟通,千万不能有,我不好意思问他,他很忙我还是不要问他了,他跟我不熟就不问他了,他是领导时间很宝贵别问他了,…,这样很不好,XP的原则:交流、反馈、勇气,应该被彻底贯彻。 同样,当你觉得别人有可能不理解,有可能需要帮助的时候,也要主动地提出来,询问,提醒,有一种主动和积极的交流态度,作这样的人,有谁,有哪个领导不喜欢呢?个性和隐私需要保护,但是决不是在工作上。</p>
<h2 id="2005-05-10--不小心跳进来了">2005-05-10 不小心跳进来了</h2>
<p>今天上午听钟胖子喷了一上午关于库存的设计,晚上回来瞅了瞅过去01年杭烟的需求,又瞅了瞅oracle的erp ppt,杭烟的需求中,各种具体的烟草特有的流程和工艺让人眼花缭乱,想象一下,做这么一个大系统,如何不让自己陷入细节,但是又能完全把握得住细节,让人叹为观止啊。业务系统的复杂性,让我越发的感觉到通用化的业务系统永远是个梦,抽象仿佛是徒劳,但是不抽象,又会被各种变化所吞噬,做系统,就是在两者之间走钢丝。</p>
<p>技术充满纯真,业务充满着现实,一头扎个猛子进来,要看得明白些,还得时刻提醒自己,我是来看的,不是来玩的,小心把自己玩进去</p>
<h2 id="2005-05-09-困">2005-05-09 困</h2>
<p>早晨起来真困,看反恐24小时看的,1点才睡,困啊。不过,今个真的挺冷的,困意被冲散了大半。</p>
<p>5/1歇爽了,吃饭,睡觉,看电视,还有学车是主题。</p>
<p>张一玲要走了,所以,现在狂看系统,了解需求,任务重时间紧,要抓紧。</p>
<p>blog就是记流水账,让自己某年某月回头时,看得到生活的轨迹。</p>
<p>下午律了一遍目前的系统,发现业务的很多的内容确实繁琐的很,什么入库出库,审批,太多的细节,让你感觉规律就在其中,但是时间任务进度又压迫着你,还有各种的生活琐事,现在感觉,自己没有前两年那种对知识的“执着热爱”感觉了,而只是把这些当作工作而言,积累是为了挣更得更多,买更大的房子,看来,心已经开始老了。</p>
<h2 id="2005-04-28--办证">2005-04-28 办证</h2>
<p>中午忙里偷闲,拉着小徐和老毕去首图办了证,然后一口气借了4本。没想到,里面的书还真的不少,看来以后要常去溜达溜达了,也省去了大笔的购书银子。</p>
<p>看业务很容易陷入细节,目前,对于进销存,还主要是从流程出发,搞清楚业务的含义,然后就是有一个从上俯瞰业务全局流程的视角,这样才不会迷失和急躁,5/1期间有的忙了。</p>
<p>好的业务软件,三点最重要:</p>
<p>一个灵活和抽象的业务模型,这个业务模型可以是分析模式的知识级的表示,可以是数据建模中的e-r图,可以是SAP业务蓝图中的epc图,无所谓,关键是抽象的表达出业务来,把变化的业务元素和流程表达出来。这种抽象,类似于OO中的接口的抽象,就是找到业务的共同含义,或者共同变化的趋势,然后给他个合理的名字,以及找到他和其他抽象的关联。</p>
<p>二一个就是好的管理理念,业务系统出了解决业务开展,更重要的是给管理层提供决策信息,如何把业务信息中蕴含的知识表现出来,就只能靠好的管理理念来实现了,财务信息中就可以根据某种数据的变化的抽取得到管理会计所需要的管理信息,业务系统应该具备这些管理能力。当然,管理理念是基于业务信息的,是可能不断的产生出新的管理理念的,这反过来就要求,我们开发的业务软件具备更好的灵活性,来满足新的管理理念对业务信息和功能的变化要求。</p>
<p>三、技术的基础架构也非常重要,如何让业务模型灵活的实现出来,如何让交互更容易自如,让报表更方便和灵活,让性能更稳定和伸缩,这都需要一个强大的技术基础架构的支持。</p>
<h2 id="2005-04-26---26日">2005-04-26 26日</h2>
<p>因为生日是26日,对这天总是很亲切。</p>
<p>晚上听老宋讲了对库存科目的抽象,很有意思,对待业务,自己确实有些陷入细节当中,其实,理解的大多是业务语义,而没有注意对业务的抽象,当然,这也是一对矛盾,只有对业务了解的更多,更深入,才能抽象的更好。</p>
<h2 id="2005-04-24--礼拜天啊">2005-04-24 礼拜天啊</h2>
<p>银狐推荐了不错的书,记下来http://www.bph.com.cn/chinese/one/0122/wuzi.htm</p>
<p>http://www.wfjbs.com.cn/award/maodun_index.asp</p>
<p>今天考杆过啦,嘿嘿,爽死了,一次通过,不过有个小插曲,我的卡搞错了,差点害得我白考,ft。</p>
<p>晚上看凤凰的支边教育,感动一番,自己虽然做不到,但是要关注,不能忘记这世界的真实性。</p>
<p>下周再憋一周,就长假了,有点兴奋</p>
<h2 id="2005-04-21--中午吃串">2005-04-21 中午吃串</h2>
<p>好吃的肉串和肉筋,自从胃镜发现自己的胃硬朗的很,吃东西就无所顾忌多了。</p>
<p>跳回公司,又赶上了妹夫做手术,奶奶的,怎么,一回公司,家里人就倒霉啊。</p>
<p>上午又有一阵泛困,看文档看的,3。0做得真庞大,不由得赞叹,但是要系统和全面的掌握,得费点劲,现在需要的是耐心,耐心的看。</p>
<p>明天就是周末了,感觉很好,当然这是个不好的迹象,什么时候,我的工作和我的生活没有区别的时候,就感觉爽多了。倒不是因为我工作狂,因为,什么样的工作决定什么样的人生,工作往往决定着人生,也影响着生活,刻意的强调两者的分离,没有必要。</p>
<p>想想,去年从金蝶出来,跳了5次,该落脚了,想想什么是自己的工作的价值所在,什么是自己每日工作的成就感觉,不能忘记啊,一旦困顿了,要努力修正和调整自己,离30岁还有1年半了。</p>
<h2 id="2005-04-20--20日继续刮风">2005-04-20 20日继续刮风</h2>
<p>刮,刮,刮个头啊,该死的春天</p>
<p>上午做了订单的例子,概念很简单,但是做起来超费劲,平台倒是满强大,继续熟悉之。</p>
<p>晚上继续去学习erp吧。</p>
<h2 id="2005-04-19--学习ing">2005-04-19 学习ing</h2>
<p>看了一天公司的biz3.0平台,了解了很多概念,感觉挺有意思。</p>
<p>明天继续准备做个订单的例子,来加深对平台的熟悉,</p>
<p>今天北京刮大风,5/6级,恶!</p>
<p>别的没啥事情了,对了,徐浩这家伙来这里上班了。</p>
<h2 id="2005-04-18--第一天上班去">2005-04-18 第一天上班去</h2>
<p>今天回去上班了,第一天</p>
<p><strong>faint,又一年了</strong></p>
<h2 id="2005-01-22">2005-01-22</h2>
<p>又一年了!faint,为什么要说个又字,感叹贝!</p>
<p>畅想好日子,自在然情时,天天卫视都在放,现在的日子过得不好不坏,满足中了。</p>
<p>又换了个单位,faint,又说了个“又”字,新公司里面却都是老面孔,老朋友,老瓶装的却又是新酒,几条枪,几个兄弟,几颗红心,有的是热情,有的是执著,重返erp战场,拼杀拼杀,别跟我说完美的过程,别跟我谈详细的文档,我要的是实效,是敏捷,兄弟几人,谁说不可以燎原,因为心中有火种,加油!当然,不能再说“又”了。</p>
<p>一看上篇,居然一个多月没更新了,罪过罪过。</p>
<p>写了有一年了blog了,这一年,奶奶的,过的那叫一个乱,在4家单位战斗过,结了婚,回了老家,住进了新房,。。。,经历的事情好多,从作erp,又回到了作erp,工作轮回着,还好,心情坦然了许多。</p>
<p>要买车,要生宝宝,还要执著于技术,要学习财务,业务知识,还有很多新概念理念需要接受和学习,今年还要学车呢,faint,忙啦,现在需要的是什么,嗯,两个字,效率,抓紧时间提高效率,今年太忙碌,不能浪费点滴的时间。</p>
<p>前两天人家问我职位,上个月有人关心我的薪水,呵呵,笑答程序员,也如实相告,做个程序员是要有勇气的,特别是到了30岁还依然,将程序员进行到底,这是个信念,一种自我,NND,就是担心过了30,记忆力和思维敏捷程度会不会减退,这是我担心的,兴趣,哈哈,不会减退的。</p>
<p>martin是一个标,走路还得我自己来,谈到财务,采购,销售。。。,我就兴奋,该深到业务去喽,跟小龙说,我很兴奋,嗯,所有的都在我愿意的喜欢的情形上发展,我能左右我自己,我感到幸运,兴奋油然而生也是自然。</p>
<p>最近时间抓的不紧,自责一下。接下去,一个是信念要坚定,一个是时间要抓紧,新的一年,我有理由,一万个期待。</p>
<p><strong>流水账</strong></p>
<p><strong>动物园的猪 发表于 2004-12-06</strong></p>
<p>今天周一,昨晚上没睡好,很困,迷瞪一上午。</p>
<p>跟文和老宋讨论了ui模型,因为一些技术点没有搞清楚,文回去细花了。我这块继续看SVG的组件技术,考虑将来实现起来,特别是影像树,还是有一定困难的。</p>
<p>坏坏还在医院里,妈妈陪着,说风大死活不让我过去,可是,我心里怎么能放得下心呢。</p>
<p>晚上继续看DDD,更新了读书笔记,很有心得。充实。</p>
<p><strong>今日感受</strong></p>
<h2 id="2004-12-02">2004-12-02</h2>
<p>今天跟老宋确定了UI这块的方案,感觉从老宋那里学到的技术不是很多,而更重要的是做事情的方法,中午和foxcrane聊了一下关于业务模型的重要性,也许将来某天自己会去做业务去,不过目前,深入到UI中,替公司规划好UI的方案,才是重点。做事情,有时候不能完全凭兴趣,有时候需要靠责任。</p>
<p>一个人在家里,孤单,想起了坏坏,温柔的坏坏,两个人厮守在一起,一种幸福。每天的工作,忙碌着,奔波着,原来心中的安详和内心的平静,都在自己深爱的家里。</p>
<p><strong>多一份感动,多一份行动</strong></p>
<h2 id="2004-11-15">2004-11-15</h2>
<p>无意中从校友录中发现了老同学的留言,感触颇深。我们每天都在忙碌,工作越来越多,陪父母的时间越来越少……</p>
<p>有一个女生,因为跟家里处得不好,所以很少回家,后来有一次回家,发现年老的母亲走路一跛一跛的,不经意的看了母亲的脚一眼,这才发现母亲的脚指甲太长而长到肉里面造成流血,流脓,这时,她认真的看者已经很久没有正眼看过的母亲,她才发现在她眼前的母亲已经年老,老到已经没有办法弯下身来自己剪指甲,所以 才会让双脚的指甲伤到肉,她哭了! 从此她变每个礼拜回家,用一盆温水先帮母亲泡脚再帮她剪指甲,泡温水是让脚指甲变软,才不会因为这样不好剪而伤到母亲的脚。 一直以为父母也应该跟我们一样能适应这个变化的世界,新的科技、新的资讯,新的理财观… 直到最近几年才知道他们追的蛮辛苦的,遥控器太多太复杂、听不懂的专业术语、完全陌生的理财工具… 直到最近几年才知道为了怕我们不耐烦,父母偶尔忍住了想说的话,想做的事,如果没有这次远游,迟钝的我也不会知道,一向热心打点照顾我们子女无微不至的父母,退休十几年的老爸,竟衰老得如此快速.我们五姊妹只凑足了三个,决定陪爸妈去新加坡玩。在去程的飞机上,老爸四小时都不愿如厕,任凭我们好说歹说,他依然老僧入定,不肯起身。在每一站观光区,他也是非到万不得已才进男厕。有次我观察到他小解很久才出来,看不到熟悉亲人身影,先是向东搜寻,继而向西眺望,即使在这节骨眼,他也不愿放声大喊大叫,让我们子女没有颜面,站在陌生人群中,一副茫然失魂的样子,安静、耐心等子女们的出现,我终于了解他出门在外不愿如厕的原因。以前不解事的小儿子常笑他八十几岁的外婆,连钮扣都不会扣,真慢!真笨!好简单的一件事,为什么老人家们就是做不好? 我们还未经历到,当然难以理解,年纪大了,有时候手脚会不由自主、不听使唤,我以为老爸和婆婆之间还有一大段差距,谁知他也不知不觉走到这个阶段了。往后行程我根本无心玩赏,只要看到老爸表情稍有异样,便好说歹说强行押解他到男厕,自己则只好守在男厕外头,起初老爸感到万分不自在,后来也就渐渐习惯了? 回程飞机上,我陪老爸去洗手间,他忽然低声对我说∶「其实我不会锁机上厕所的门。」我拍拍他肩膀,告诉他∶「没关系」心里却翻涌出一阵心酸。心里很想告诉同 行的妹妹,下次出游,把各自的老公也带来,也可以多尽一份心,也很想告诉没有同来的么妹,钱财日后都赚得回来,唯有父母健在安康,又能带着远游,这才是为人子最大的福份;想告诉老爸,如厕问题解决了,我们下次可以飞到更远的地方去旅行。一趟旅行带给了我许多感触,也让再度离开家、身在火车上的我不禁滴下眼 泪….或许是自己太多愁善感,也或许担心自己的父母状况,只是自己一直没发觉,才惊觉原来老爸老妈也变老了,变脆弱了,不再是以前那「强壮的臂膀」、「温暖的避风港」,原来一直帮我扛着头上那片天的巨人, 人也会变老….</p>
<p>后记∶ 《余光中的一段诗》 母难日,今生今世,我最忘情的哭声有两次, 一次在我生命的开始,一次在你生命的告终, 第一次我不会记得 是听你说的, 第二次你不会晓得 我说也没用, 但两次哭声的中间啊 ! 有无穷无尽的笑声, 一遍一遍又一遍,回荡了整整三十年, 你都晓得我都记得。</p>
<p><strong>凌晨一点</strong></p>
<h2 id="2004-10-31">2004-10-31</h2>
<p>已经一点了,该休息了。</p>
<p>本不应再这么熬夜了,但今天整理硬盘,看到了很多往事的影子,不免有些感怀,妻说,你老了,所以开始怀旧了。老了,不敢也不愿意承认,但是,开始怀念过去,倒是真的。</p>
<p>晚上的时候,把一些旧的文章贴到了blog上,最早的,都可以追溯到98年了,快啊,毕业都6年了。前两天和王维新、林凯、周可亲一起吃饭,就在西直门,离计算机学院不过数站地,但是已经跨越了数年的时光了。</p>
<p>6年耽误了很多,这两年,才让自己感觉到工作充实感,而结婚,更让自己明白了很多生活的真谛,庆幸自己有心爱的妻、有健康的父母。妹妹最近住院了,更让自己感觉,家庭的重要,亲情的重要。那天,从手术台上下来的时候,苍白的脸,紧闭的双眼,软软地身体,竟是平时活泼生动的小妹,爸爸、妈妈、我都含着泪水,病房里什么声音都没有,阳光洒进来,映射出亲人们眼中的晶莹。</p>
<p>这周,工作目标更明确,跟老宋定下的目标,需要落实,时间也很紧,不能有任何的放松,前阵子,因为目标不明确,和自己在UI这块的兴趣不大,导致工作不是很紧凑,需要检讨一下,调整好自己,迎接下个阶段的研发,把热情保持下去,是靠责任驱动的,而不是兴趣。</p>
<p>开始自己学习编译原理了,大学的时候被老赵拉走做项目,那时自己还庆幸,不用学习这门课,现在却需要自己学习,想起那句话:出来混,总有一天要换的。</p>
<p><strong>明天是马拉松的日子</strong></p>
<h2 id="2004-10-16">2004-10-16</h2>
<p>上午公司培训设计模式,虽然设计模式很多都了解,但是有机会和大家一起坐下来讨论心得,共同研究、探讨,确实是一件幸事,对于bridge模式,以前不了解,今天仔细一看,其实是如此的简单,只不过是抽象一个接口,然后几种实现罢了,所谓桥,就体现在这个接口上,而且多数要配合Factory模式使用。下次培训要深入其他模式了,可以更进一步深入了。</p>
<p>中午的时候,接到了蒋明的电话,好熟悉的声音啊,小子还是那样子~。挂了电话,吃着火锅,品着扎啤,又想起了曾经的兄弟们,善良的李东,帅气的江涛,憨厚的蒋明,聪明的王志朋,都在他国异乡,为了生活打拼,想起了大家一起在所里的时候,亲如兄弟的生活,后来虽然经历和很多团队,最充满感情的还是这个团队。只是,不知道什么时候,才有机会一起相聚在北京,开怀畅饮笑谈人生。。。</p>
<p>明天是北京马拉松的日子,想象两年前参加5公里,仿佛是昨天的事情,日子真快啊,要抓紧时间,不让生命如此飞快地流逝掉。</p>
<p><strong>最近的体会</strong></p>
<h2 id="2004-10-15">2004-10-15</h2>
<p>到新公司工作了一段时间了,收获还是蛮多的,首先,自己认识问题的层次提高了,现在做mvc框架的设计,需要考虑的东西很多,是对过去知识的一个系统总结,更是对其之上的更高的抽象,在这个抽象过程中,明显感觉自己欠缺,不能够把一些零散的信息,有效地组织起来,并且最终用形象的文字和图表表达出来,看来,今后这方面还需要加强。</p>
<p>最近在跟tapestry和xwork的源代码,对源代码阅读又多了一份体会,我的感觉是,一定要保持对代码的一个高度的警觉和嗅觉,而且一定要落实到纸面,这样你的体会才能被记载下来,否则就是走马观花,没有太多效果。</p>
<p>最近常跟十度和狼通信,他们一个在做金融方面,一个在做hr,业务性比较强,能够很好的学习时间martinFowler的分析模式和企业架构模式,很是羡慕,过去我也做过类似的东西,但是因为那时候没有意识到如何积累这方面的东西,时光都白白过去了。不过,现在既然要做平台性的东西,就应该把思想和精力集中到此,一定要深入进去,无论做什么,都需要这种精神,希望,半年后再来看自己的这篇blog,能有一个满意的回顾。</p>
<p>生活方面一如既往,十一回到了阔别15年的老家,亲人依旧,只是人是物非,已经辨别不出小时候常去的砖窑,菜地,老街道了,依稀地看到一些景物,还隐约可以勾起儿时的回忆。一个感觉,自己已经不属于这片土地了,曾经心底的那个美好的憧憬,已经渐渐的淡去,只变成一段尘封的回忆了,倒是故乡的亲人,让自己感觉到亲情的挚爱,永远不会随时光改变。</p>
<p><strong>新工作新开始</strong></p>
<h2 id="2004-09-21">2004-09-21</h2>
<p>faint!又换工作了,我也不想啊,形势所迫,跳呗!趁自己还有跳的心情。</p>
<p>新公司离家很近,走着上班也就半小时,对于天性懒惰的我来讲,那叫一个爽。</p>
<p>谈谈新工作的体会吧,总的来说感觉不错,是一个接近理想工作环境的地方,我指的是软件环境,硬件上感觉一般,15寸的显示器都好几年没用过了,居然现在日日面对。新同事感觉不错,因为都是做技术的,而且都不差,自然有很多共同语言。交流也没什么问题,来这3天,开了4次会了,就一个问题,展开充分的讨论,我能看得出,这是一个交流的团队。不过,感觉工作压力也比较大,因为,目前公司的项目还处在开始状态,很多东西啊,方案啊,技术选型啊,都在一个探索过程中,这就必然要求每个人都需要有充分的能力和积极性进行探索和学习,更重要的是,选择好适合自己的东西。你知道,当你担当评估和采纳某个技术的时候,你同样要承担选择带来的风险和后果,而且,这种选择往往很难决定。不过,还好,有一个团队作心理依靠,你始终是敢于踏出每一步的,其实,现在,更需要的是勇气,是坚定,是执著。我想,这也是对自己的一个锻炼和考验吧。</p>
<p>这阵子没有更新blog,但是心得确实不少。比如对于规则引擎了解了一些,对于组织机构也了解了一些,在网上也给朋友们交流过一次<a href="https://web.archive.org/web/20060710025242/http://www.writeonce.net/bbs/dispbbs.asp?boardID=8&ID=61">http://www.writeonce.net/bbs/dispbbs.asp?boardID=8&ID=61</a>,对于界面定义方面最近几天也有一些心得,还好,这段时光走过去,没有虚度。</p>
<p>倒是英语放了很长时间了,老婆在准备认证,不好拉她一起学习,偏偏自己又没有持之以恒的动力,苦恼中阿。</p>
<p>十一要回老家了,算来13年没有回去过了,很多感慨,尽在不言中。</p>