年终总结 2021

创建时间 2021-12-31
更新时间 2022-12-15

现在的时间是 2021-12-31 22:36:18,我坐在电脑前,面前是一杯清茶,耳机里是单曲循环了一天的 《傀儡謡_陽炎は黄泉に待たむと》,这首歌如下:

喜欢这首歌主要还是太鼓的节奏太好听了,放假有空我也想写写这种独特的切分节奏。但是小日本的阴间小二度,让人很不舒服。不过让我怀疑的是,是不是因为旋律和和声的阴间,导致节奏异常的积极,就像是一颗跳动的心脏,喷涌着的鲜血流进身体的每一丝毛细血管,让人来不及呼吸。

哦,抱歉,这是年终总结,不是音乐分析,这一年过得很丰满,也很匆忙,我应该是跳出了一个怪圈,也可能又跳入了一个怪圈。

关于计算机

一个 8 位二进制 CPU

从去年考完试,我就开始录视频了,成为了一个 B 站的 UP 主,一开始是考研群里,有个朋友想要知道 CPU 的运行方式,我觉得以前做的 CPU 是一个激动人心的事情,特别是数据传送指令完美的实现的那一刻,还有最后条件转移指令的实现。于是,我把自己的制作过程录了下来,并且在之前实现的基础上做了一些改进。尽可能让不同的人能够听懂,最后的结果如下:

做这个视频对我最大的挑战在于,需要向别人解释自己做的是什么,而且我还不知道对方是谁,虽然看起来好像很自然,但是我需要模拟出对方的知识背景,将可能不知道的概念术语完整的解释一遍。在此过程中我学到了很多重要的经验,包括了视频的录制,剪辑,说话声音的处理,之前虽然处理过 Vocal,但是说话和唱歌还是完全不同的两个概念。

这个 CPU 主要解决了我之前对寄存器这种底层硬件的理解,给了我一个心理的表征,也就是说当有人描述起 CPU 时,我心里不再假想出的一个石头疙瘩,而是活生生的在时钟信号的控制下,不停跳变的一个个触发器。

但是还是有一个问题没有解决,这个问题是操作系统的基础,那就是外中断,希望以后有机会也实现一下外中断吧,这里简单写一下外中断的实现思路吧:

  • 首先需要实现中断控制器,这是一个单独的芯片,需要接受外部硬件传递来的信号
  • 当中断控制器接收到信号之后,根据中断优先级仲裁,将 CPU INTR 管脚置为 1
  • CPU 在执行完一条指令后,进入中断流程:
    • 若 中断标志(IF) 为 0,则结束
    • 若 中断有效(INTR) 为 0,则结束
    • 否则 CPU 读取中断控制器中的寄存器,得到中断号
    • 然后调用中断号对应的中断处理程序

以上还有一些被忽略的细节,不过在后面实现完操作系统后,应该很容易补充。

在最初实现 CPU 时,主要是看了《编码》[1] 这本书,以及 《穿越计算机的迷雾》 [2],最后在 Build an 8-bit computer from scratch [3] 的启发下实现了整个 CPU,这里重要的区别在于,使用了 LogicCircuit 软件来模拟数字电路,使得有电脑的人就可以参与到其中,如果用硬件面包板来实现的话,那么应该会劝退很多人,即使内容一样简单,最大的问题还是我自己也没有相关的实验设备。


x86 汇编语言

实现完 CPU 的我,开始飘了,感觉无所不能,想干啥都能成,于是想着实现一个可以跑在实体机器上的操作系统,于是找了一些书籍,最后还是实现了操作系统,不过有一些比较恶心的 bug 没法解决,但总之最后是学会了 x86 汇编语言,于是录了用于实现操作系统的汇编语言基础,内容入下:

其中主要介绍了 PC 机的启动流程,以及 ELF 文件和 gcc 编译时 从 C 语言到汇编的一些细节。其中挖了不少的坑🕳,需要在操作系统的时候填上。

当然,在录这个视频的时候,也学到了不少东西,做一个东西的时候,可能不需要知道具体的实现和原理,但是要想将一个东西讲出来,而且还需要让对方听懂,是一件极不容易的事情,于是我经常模拟出另一个人,如果不会怎么办,有没有更简单的解释方法。还有就是这样会对概念的理解更加的深入,因为实现其实是不需要原理的,能跑就行,但是解释不仅需要能跑,还需要原理。所以学到了很对底层硬件的东西。是一个挺不容易的事情。


操作系统

自从 x86 汇编语言之后,我就开始上学了,空闲时间也不多,其中绝大多数时间在研究数学的推理和证明,我数学能力挺差的,所以很多时候都是在补基础。

于是操作系统具体的实现和分享就整体搁置了,不过在刚开始的那几天,我还是复现了《Linux内核完全注释》[4] 中 Linux 0.11 的整个代码,希望在年前能够实现吧。


机器学习

这是一个比较大的话题,学会了一些基础的神经网络的实现,分别用全连接网络和卷积神经网络,做了 Mnist 数据集的分类器,以及使用生成对抗网络 (Generative Adversarial Netowrk, GAN) 做了 Celeba 数据集的生成,我自己的电脑显卡比较垃圾,训练时间比较长,效果也不好,batch-size 只能设置为 1,就比较离谱。

以上内容主要来自于 《Pytorch 生成对抗神经网络》 [6] 这本书,如果你看到了这里,那么希望对你有用。

另外还学到了一些强化学习,知识表示的内容,还没有来得及实践。

最大的收获应该是上了沈华伟老师的课,除了计算机的算法以外,还启发了一些人生哲学。

比如,如果把人生比喻成某种寻找最优解的过程,假设这个过程是找到人生的最大值点,那么这个时候就可以利用梯度下降的方法来找到这个点,可是关于人生的函数可能不是线性的,意味着这是个抽象函数,很可能不可导,那么就有了粒子群算法,在自己周围找到比自己好的全局最优解,然后记录自己的最优解,然后就可以找到一个伪梯度,以此来进行人生的优化。所以,能够看到比自己优秀的人,很重要!

再比如,人生还是寻找某个最优解,只不过变成了 探索(Exploration)挖掘(Exploitation) 的过程,而最优解就是挖到尽可能多的矿,那么这个最优解会时探索和挖掘之间的 纳什均衡。人生是一片广阔的天地,需要自己根据理论探索矿藏,矿藏有可能是别人已经挖过的,那么自己找到可能还能跳到坑里再挖一挖,说不定就能挖出点什么,但是别人已经挖过的矿即使是有那么成色也大概率不会太好。就需要自己继续探索,如果放弃当前的矿坑,那么也有可能什么也探索不到,亦或是探索到了矿,但是自己没能力挖出来。但总之挖与不挖,这是个问题。一个比较好的算法是,初期尽可能的对全局进行探索,找到每一个矿坑,然后择优挖掘。但如果全局是个无穷大的区域,这时候也许就要用到某种局部搜索算法,以达到最优值,比如爬山法,或者模拟退火算法。


关于英语

也一直在用 words [5] 记单词,目前的单词量是 23864;这里是 2021 年记得部分单词 英语单词 2021 只是做了一下简单的记录,不过也不是所有单词都能运用自如,但总比不记要强吧,这是一个机械而单调的过程。

遇到了一个比较 Nice 的英语老师,给了我一些句子结构上的启发,习惯性将长句子拆分成短句子,而我自己的英语语法一塌糊涂,属于信息量为零,也是一个关键性的突破。

关于读书

读书是一个特别有效的知识获取的方式,于是这一年读了好多书,不过基本上处于读了就忘的境地,但是想起来总比什么都不干要强得多,所以还是读了一些书:

我的书单 2021

一个比较重要的就是读完了五大名著:

  • 《西游记》
  • 《三国演义》
  • 《红楼梦》
  • 《金瓶梅》
  • 《水浒传》

如果非要选一本最好的书的话,那就选 《四世同堂》。

关于音乐

五月份的时候,看了西游记,特别是女儿国那一集,惊叹于女王的美丽,翻唱了一下《女儿情》,音乐做的异常简单,直到七月份,想起来也算是自己的作品,就放到了网易云,内容如下:

悄悄问圣僧,女儿美不美。

到学校选修了《音乐基础修养》,音乐老师也很 Nice,颜值天花板,在视唱练耳方面给了我一些启发。使我意识到了自己之前的错误,然后自然的纠正了一些我自己以前不太规范的地方,于是我很容易的通过了 EarMaster Pro 对于 音程分辨节奏视唱 两部分的测试,基于强化学习对生活哲学的改变,相信不久的将来,和声听辨的部分,也可以顺利完成。

音乐老师在课上放了《昆曲六百年》的纪录片,我觉得里面的主题特别好听,于是就自己用钢琴和小提琴重新 remix 了一下。

除此以外,对于音乐的理解还有一些与众不同的地方,那就是对泛音的理解,泛音是整个音乐的基础,特别是和声学的基础。通过阅读 《Music, Cognition, and Computerized Sound》 [7],理解了一些概念,比如混响,共鸣,还有就是音色的理解,以及由于加上和弦听辨的理解,对于音乐整体的理解也多了更进了一步,其中一个典型的内容就是:

一些吹管乐器(如管风琴,单簧管)只能产生奇数倍基音的泛音;

除了音乐基础的理解外,对于计算机音乐的理解也好了一点,最关键的就是 MIDI 流的处理,现在可以自然的在不同的音乐软件之间使用 MIDI 流来通信,最关键的是借助了 LoopMIDI [8] 这个软件,具体的使用细节就不说了。

除此以外还发现了好几本书记录如下:

  • Victor Lazzarini - Computer Music Instruments: Foundations, Design and Development
  • Victor Lazzarini - Computer Music Instruments II
  • J. Peter Burkholder & Donald Jay Grout & Claude V. Palisca - A History of Western Music
  • [美] 布鲁斯·本沃德 & 芭芭拉·加维·杰克逊 & 布鲁斯·R·杰克逊 - 认识乐理
  • [美] 斯蒂凡·库斯特卡 & 多萝茜·佩恩 - 调性和声及20世纪音乐概述
  • [美] 罗杰·凯密恩 & Roger Kamien - 听音乐(全彩插图第11版)

希望有限的将来可以读完这些书吧。

另外,自 2019 年开始练习 《哈农》,现在已经练到了第 52 条。

I’m a slow learner, it’s true, but I learn.

展望 2022

先立一下 flag,希望能够:

  1. 完成操作系统;
  2. 练完 《哈农》;
  3. 学习 《信号与系统》;
  4. 学习 《抽象代数》;
  5. 其他的想到了再补…

参考文献

  1. https://book.douban.com/subject/4822685/
  2. https://book.douban.com/subject/5432475/
  3. https://eater.net/8bit
  4. https://book.douban.com/subject/1231236/
  5. https://github.com/StevenBaby/words
  6. https://book.douban.com/subject/35265195/
  7. https://book.douban.com/subject/1935213/
  8. http://www.tobias-erichsen.de/software/loopmidi.html