WangYu::Space

Study, think, create, and grow. Teach yourself and teach others.

写给 2020

分类:随笔创建时间:2020-01-02 00:00:00

读书、学习,2019 年就这样过去了。回首过往一年,感叹时光飞逝,生活平淡。小时候,生活一点也不平淡,时间过得也很慢,一年的经历可以给你讲三天三夜。现在,两个字就能总结:读书、学习。这种略带伤感的语气,如果让人感觉到我是在抱怨,但就确实错了,我喜欢这样平淡的生活。我本想总结一下过去的一年,但是写出来的都是一些矫情的话,索性来回顾一下过去一年读过的书,并给新的一年定个计划。

武侠小说

2019年年初,我给自己定一个年度读书计划,我打算读完金庸先生的全部武侠小说。在此之前我看过《倚天屠⻰记》和《笑傲江湖》,其他小说只是小时候看过电视。读金庸的武侠小说,我觉得可以塑造人的性格,而且能给人启发。比如,令狐冲、张无忌、郭靖等人,他们对人都很大气,对前辈很尊重,对任何人都很谦虚,就敌人也很心存善意。这样的品质,值得效仿,在生活中,我也常常想到这些人。当别人在某些地方伤害了自己,想到这些人的洒脱,我就告诉自己不要计较。与人交流,我告诉自己要谦虚。

2019 年读的第一本小说是《射雕英雄传》,我觉得射雕英雄传是金庸最好看的一部小说,如果金庸的小说只读一本,我推荐这本。在南宋危机四伏的背景下,这部小说展现了什么才是真正的英雄。我喜欢黄蓉的机灵,洪七公的豪爽,郭靖的坦荡,老顽童的搞怪,不一而足。随后,读了《神雕侠侣》,这部小说中,杨过从一个受人欺负的小毛孩,成长为神雕大侠。如果杨过留在了桃花岛,那么他就会少经历很多磨难。如果杨过没有断臂,他就不会发现独孤求败的剑冢,进而学会独孤九剑。如果杨过没有中情花剧毒,杨过就不会苦等小龙女 16 年,在这期间成长为神雕大侠。磨难,让人成长,让人成熟。《天龙八部》也很好看,因为在阅读的时候,就不觉间把自己代入为段誉。段誉,长得英俊,读书多,还有像木婉清这样的妹子追随,读起来别提多有意思了。其中最让人伤心的就是萧峰在不知情的情况下打死了阿朱,自己心爱的人死在了自己的掌下,这得有多伤心呀。另外,小人物与大人物的较量中,可以看到大侠是怎样一种胸怀。《白马啸西风》,这部小说不值一看,篇幅极小,午休期间就读完了。如果需要记住点什么,那就记住李文秀的那句话,“那些都是很好很好的,但我偏偏不喜欢”。

金庸的小说我并没有看完,因为我觉得读太多也没什么意思了,尤其是发现金庸的小说也不是每部都很好。后来我又读了读古龙的小说,比如《多情剑客无情剑》,但是因为篇幅太长,半途而废了。小时候看过《武林外史》电视剧,现在什么都不记得了,我只记得当时觉得沈浪就是天下最潇洒的人。结果直接把电视剧看了一遍,发现这部电视剧就是喜剧片,没有什么深刻的内涵。如果硬要说有,那就是放下仇恨,选择宽容。因为那些尝试复仇的人,最后都没有善终。

机器学习相关

2019 年,是我真正入门机器学习的一年。年初,通过 Michael Collins 写的关于 NLP 的讲义,了解了一些自然语言处理的基本知识。比如基于统计的语言模型,隐马尔可夫模型等。柯林斯的讲义写的很清晰,符号也很标准。很多人夸赞柯林斯说他的写作水平超一流,确实是这样的。后来我发现,斯坦福大学的 Dan Jurafsky 和 James H. Martin 所著的 Speech and Language Processing 是非常棒的机器自然语言入门资料。我花了半个多个,读了大部分内容,不过很多内容后来又忘了。刚刚入门的时候,切忌一味地阅读,要辅之以实践。

在研一上学期的机器学习课上,重要学习了一些统计机器学习算法,比如线性回归、决策树、SVM、KMeans 等。因此,在 2019 年初,我对神经网络的认识还是比较浅薄的,对各种网络模型也都没有见过。Yoav Goldberg 的 Neural Network Methods for Natural Language Processing 是很好的一本综述性书籍,其中讲到了基于神经网络的自然语言处理中的常用模型和方法。读完这本书,我就对什么1维卷积神经网络,循环神经,词袋模型,词嵌入等名词全都清楚了。后来,有阅读了一些引用量较高的论文,如果 word2vec 相关,Seq2Seq、Attention 等。但是,我发现自己严重缺少实践,因为项目中只会用到简单的算法,我学到的新算法完全没有地方用。后来发现,你得自己跑跑实例,实际用一用,因为项目中不可能什么算法都让你用一遍。

为了加强实践,我阅读了 Keras 作者的 Deep Learning with Python,这本书比较容易。全书使用 Keras 来构建模型,上手很简单。跑完书中绝大部分例子后,我对 Keras 的运用已经很熟练了,最重要的是在此期间了解到了特征该如何处理。作者还高屋建瓴地讲述了解决各种机器学习任务的一般策略。后来我开始阅读一本神书,由 Aurélien Géron 所著的 Hands-on Machine Learning with Scikit-Learn and TensorFlow,我评价这本书为将目前全球最佳的机器学习实践书籍。我花了一两个月,读了这本书大部分内容,并进行了相应的实践。但是因为书中讲神经网络的部分使用的是 TensorFlow,而 TensorFlow 1.x 版本毫无可读性可言,我就只看了第一部分,至此,我对常用的机器学习算法已经能够熟练运用了。后来,在 10 月份,这本书出现了第二版,使用 TensorFlow 2.0 重写了神经网络部分,我就再次从头把这本书读了一遍,这次读的很细致,有的地方记录了很详细的笔记。我发现这本书已经把深度学习中常用的模型和方法都覆盖到了,读完本书后,深度学习也就不神秘了。

最近几年 NLP 的研究很火热,各种新方法层出不穷。在了解了基础知识之后,我开始了解比较新的论文。其实无非就是最近两年发表的如 Transformer、BERT 等模型。这些内容在 2018 年底我也看过,但当时完全看不明白,经过半年来对基本知识的学习,看懂这些论文已经不存在太大难度了。另外因为项目中要做推荐系统,在 9 月份,我开始系统阅读推荐系统的相关论文。早些年的基于协同过滤的算法我此前我已经了解过了,这次主要关注在深度学习模型上,后来我发现现在的推荐系统,其实解决的就是一个二分类问题。读了十来篇论文后,发现各种方法都大同小异,有一些还相当玄乎,仿佛一切都是凭感觉设计出来的。于是我把最有价值的论文看过后,就不怎么看论文了。

经过近一年的系统学习,我开始对这个领域不怎么感兴趣了。在 11 月份,和一个同学一起参加了一个数据竞赛,场景是做推荐系统中排序系统,说白了就是一个二分类任务。在这期间,我体会到机器学习的无聊之处。你需要把大量时间都花在分析数据、构造特征上面。那段时间,睡觉时都在想那些特征对推荐有帮助。有人说不是深度学习能够自动提取特征吗,你还自己分析哪门子特征呀?深度学习是不错的,但想要在比赛中取得好分数,还得自己分析数据,加入很多人类的先验知识。至此我明白,分析数据才是最重要的,模型往往没那么重要。在此期间我阅读了 Python for Data Analysis 再次学习了数据处理中的一些技巧。

回顾我学习机器学习和自然语言处理的历程,走了不少弯路,其中最不应该的就是死扣理论,应该多加练习才是。计算机相关的知识,其实很多都可以说是技术,只有通过练习才能掌握技术。对机器学习的热情消退以后,我打算精进自己的编程技术。

编程相关

因为做机器学习用的最多的就是 Python,因此有必要把 Python 掌握好。其实这门语言挺简单的,我在大学的时候就用它做过一些小玩意。但是因为没有系统学习过,总担心漏掉什么,于是找到《流畅的 Python》这本书。这书我从 2018 年就开始读了,断断续续读到现在有些章节也还没看。不过,这是一本相当不错的 Python 书籍。

最近一年多都在使用 Python,我想对其他语言做一些学习。因为本科的时候用过一段时间的 C++,但只使用了一些皮毛。因此打算系统学习一番。找来 《C++ Primer 中文版》花了大概一周多时间,每天看个两三个小时,把这本书中自己不熟悉的地方过了一遍。C++ 涉及的知识实在太多了,要仔细看这本书,不知道什么时候才能看完,别人说要把它看做字典,不懂的时候来查阅。但我觉得你想要把它翻一遍,知道里面讲了那些东西,这样才知道什么东西可以在这里面查。随后,自然要读 C++ 程序员必读的 Effective 系列丛书了。Scott Meyers 著,侯捷译的 《Effective C++ : 改善程序与设计的55个具体做法》,这是一本好书,信息量挺大的,讲了 C++ 中很多不为我所知的坑。现在都 2020 年了,必须得了解 C++11/14/17 标准了。《Effective Modern C++中文版》讲了很多 C++11 中的特性,因为对 C++11 的特性用的较少,这里面的内容让我读起来很吃力,但也学习到了不少新技巧,我感觉再以后还要重读此书。《C++语言的设计和演化》讲了 C++ 设计的思路以及这么设计的原因,如果对 C++ 的历史感兴趣,这是本不错的书。最近,我又读了《Effective STL 中文版》再次学习到了不少 C++ 编程技巧。

至此,我的书单中还有很多 C++ 相关的书籍没有读。但是我不打算在读了,因为掌握一种语言的方方面面是没有必要的,你只需要掌握大概就好了,重要的是编程思想。

由于对机器学习失去热情,我开始寻找新的探索方向。我觉得既然我每天都在和计算机打交道,那我有必要仔细了解计算机的本质,而不是只了解它的具体操作。因此,我找来了《UNIX环境高级编程》,这本书讲了 Unix 系统下的各种功能及其设计,有助于我深入理解比如 IO、进程、线程等概念。这本书比较厚,我正在读。

这些年,围绕着计算机,我的兴趣发生了很多次转变。有人对我说,你要把心思花在一个点上,这样才能成为专家,能够找到好工作。我相信他说的是对的,编程也好、深度学习也罢,是一些人吃饭的手艺,很有可能也是我将来吃饭的手艺,但现在,它们只是我手头的玩具罢了。

其他书籍

厌学的时候,我就会读点和专业无关的书。Flipped 这部小说,是一篇公众号文章推荐的,果然很棒。有部电影叫做《怦然心动》就是以这本小说的内容拍摄的。这不是一本讲什么一见钟情或初恋的小说,而是一本讲述成长历程的书籍。这部小说以男孩和女孩两个视角交替展开,这种写作手法让我很震惊。小说交替地描述了两个人的心理活动,把他们之间的误会、矛盾、心理活动清楚地展现给了读者,让读者明白误会产生的根源。但一个人做了傻事,读者会摇头叹息,如果做了正确的事情,很为之欣慰。经历了伤害与被伤害 Juli 和 Bryce 都改变了,Juli 学会了不再从表面看待事物,而是观察其内在。Bryce 认清了 Juli,他痛恨自己之前做过的傻事,同时从内心深处佩服 Juli。小说最后,两人和好了,Bryce 在 Juli 的院子里种下了一株梧桐,一个象征着 Juli 卓尔不群精神的梧桐。Bryce 明白了 Juli 为什么要爬上那么高高的已经被砍掉的梧桐,这一次 Bryce 愿意和 Juli 一起爬上梧桐。哈,多么完美的结局。

It’s easy to look back and see it, and it’s easy to give the advice, but the sad fact is, most people don’t look beneath the surface until it’s too late.

— Bryce 的外公

The Catcher in the Rye (中文名:麦田里的守望者)是我多次阅读的另一部小说。2015 年读过一遍,2017 年读过一遍,2019 年再次阅读。我喜欢 Holden 这个人,虽然他在老师眼里是个坏学生,但我不是老师。他有一个善良且纯真的心。他总能看到这个世界虚伪的一面,他批判虚伪,批判那些自私的人,批判那些伤害别人的人,批判那些动不动就想要教育别人的人。小说中 phony (假的,欺骗的;骗子) 这个词出现了很多词,这是 Holden 痛恨的,也是我痛恨的。但站在 Holden 面前,他可能也会说我 phony,阅读这本小说,我告诫自己要避免 phony。 Holden 去到妹妹的学校,看到墙上有人写下 F**K 这样的词,他很气愤,他不愿小孩子们受到毒害。 Holden 说,小孩子们在麦田里玩耍,而麦田的一侧就是悬崖,他想做一个 catcher,把那些即将掉下悬崖的小孩子抓住。这部小说以一个叛逆的小孩的视角,批判的社会中的丑恶现象,赞扬了善与真。

看到叔本华的《人生的智慧》,我如获至宝。这本书中,叔本华告诉我真正的快乐源于自己的头脑中,要从思想中获得乐趣,而是不借助外在环境。不要期望得到快乐,应该尽可能让自己避免痛苦,能够少些痛苦,人生就已经很幸运了。叔本华的名言,最为人所所知的应该是 “要么孤独,要么庸俗” 了。其实中文的翻译容易让人误解,首先叔本华强调的是独自一人,独自一人不一定孤独,因为这个人可以有很激烈了思想活动,他一点也不感到孤独。一个人不能独处,就说明不能够和自己待在一起,他忍受不了独自一人,此时就会尝试去找其他人,或者去热闹的地方。而在这样的环境下,是没有深刻的思想的,你需要把自己的境界拉低到平均值或者最小值,这样才能与人达成一致,不受排挤。因此,叔本华强调,卓越的人都是喜欢独处的,只有在独处时才能深刻思考,而思想活动能带来无穷无尽的快乐。但是,这仅限于智力出众的人,大部分人思想平庸,也只能借助外在的环境来娱乐自己了。有人说,叔本华的书他读不下去,因为自己就是思想浅薄、智力平平,他不能欺骗自己说自己是是叔本华口中智力出众的人。这种看法就是扯淡,即使我智力并不出众,我也可以部分贯彻叔本华的哲学思想。这本《人生的智慧》比 99.99% 的人讲出的人生道理都高,推荐给任何人。

以上就是这一年里读过的书籍,还有一些只读了部分,就不再提了。看到别人一年读几十本书,以前我很佩服,现在觉得,其实读书多少并不重要,重要的是要有收获。我不能为了读书而读书,不能一没事就读书,那样其实只是让别人的思想在自己的脑袋中跑马。要尽可能去理解书中的内容,尝试从阅读别人转向自己创造。

新年书单

新的一年,有很多话题等着自己去探索,现在再次做一个粗略地阅读计划:

《深入理解计算机系统》,大二的时候读过这本书的第二版,那时候懂的还很少,这本书读的也相当吃力。但是粗略地阅读了这本书后,我发现之后的微机原理、单片机原理、汇编语言都相当简单。这本书出第三版后,我就买了一本,但是近两年没有打开看过。今年要读完这本书,不能让它继续吃灰。另外《计算机系统要素》,又一本讲计算机原理的书籍,读它。

compiler construction: principles and practice,因为我本科不是计算机专业,编译器从来没有学习过。一个月前,我打算阅读这本书了解一下编译器的原理,后来因为其他原因搁置了。这本书不难读,我已经读了一少半了,新的一年要把它读完。

《UNIX 环境高级编程》,有人说,学计算机的学生 Richard Stevens 的书都应该读。现在大家都在使用高级编程语言,读取文件、多进程、网络通信等都只需要使用简单的 API 就完成了。但是底层的操作系统如何完成这些操作的呢,这本书会告诉你。

《STL 源码剖析》:侯捷老师的这本书,讲了 STL 中常见组件的构造原理,值得一看。还有侯捷老师翻译的另外一本书《深度探索C++对象模型》。

先就这么多吧。新的一年,希望能少些烦恼,我不求什么快乐,只望平淡地过完最后的学校生活,每天都能有所收获。

评论 (评论内容仅博主可见,不会公开显示)