MMM 3

2019/03/25

学期回顾

本科的最后一学期正式结束。

MMM 的停更是意料之内的事情。但是第二篇就停更?

Really? Man of your talents?

— Orson Krennic

有机会的话,我可能会写一个本科回顾。不过本篇回顾专注这个学期。

这个学期我上了四节数学课:

  • Number Theory
  • Knot Theory
  • Topics in Data Science
  • Exploratory Data Analysis and Inference

剩下的工作,一个是和 Leon 的小研究,还有一个是 Litchi。

纯数学

纯数学的两节课是数论和纽结论。

前者涉及基础的代数数论:二次域、连分数,最后一周简单提了二次型。总的来说还算是有趣。教科书是 An Introduction to the Theory of Numbers.

二次域相关的结果:

  • 代数数与超越数。代数数是某个多项式的根,后者则是代数数之外的数。易见,前者只有可数无穷个。
  • 二次域。介绍了如何通过证明欧几里得性质证明 UFD。不过这个方法只对小 d 有用。
  • d > 0 时二次域里的可逆元。
  • UFD 下质数的分类。这和前一学期的二次剩余理论建立了联系。

连分数。这对我来说是完全新的概念,比较好玩。开始之前,书上先介绍了法里数列,并用此证明了 Hurwitz 定理。中途还用土办法(级数求和、泰勒展开)证明了 e 是超越数。

连分数的一些结果:

  • 基本转换。包括有限连分数与欧几里得算法,以及循环连分数。
  • 介绍了连分数的 convergents 的计算方法。
  • 佩尔方程的解。这个和二次域上的可逆元建立了联系。

最后一周简单提了二次型。介绍了类数,为一时对应的二次域是 UFD,但没有证明。

纽结论本来应该讲点集拓扑,可是上课的时候发现教授把话题给改了。这节课大部分时间在讲几个纽结不变量,最后简单提了一下曲面。蛮好玩的内容,就是感觉不太数学——虽然还是挺严谨的。教科书是教授自己的「knotes」。

这节课的研究方法是组合的,即把一个纽结的二维投影(纽结图)分解成若干可以自交的线段。判定纽结图等价的方式是 Reidemeister 移动:简单来说,只要你可以在三维空间里可以做的移动纽结的步骤,都可以分解成 Reidemeister 移动。

纽结不变量:

  • 交叉数和解结数。后者是解开某个结的最小需要修改的交叉的数目,且永远小于前者的一半。
  • 环绕数。我们不止研究结,还研究了多个结组成的链环。
  • 染色数。给纽结图的弧染色的总方法数。
  • Jones 多项式及其推广 HOMFLY 多项式。

至于曲面,先是讨论如何把三角形的边粘起来构成曲面。接着很多内容就跟两年前的代数拓扑课差不多了。我一直没法想象这些曲面,所以对这段内容不是很享受。可定向性、欧拉示性数、曲面分类定理,这些是属于比较基础的内容。还提了 Jordan 曲线定理的多边形版本,非常简单的一个证明。

应用数学

之前年幼无知,心里对上应用数学总有些抵触。可真到有所接触,才后悔没有早些学习。

上学期我曾试着重现 BERT 的 pre-training 部分。当时遇到了一个问题:模型预测的单词总是「the」。经一篇论文提醒,我查了一下词嵌入矩阵的二维投影,果不其然,整个矩阵基本退化成 rank-one 矩阵。那是我第一次接触 SVD,当时还没有弄懂。数据科学专题这节课的一个话题便是 SVD,也算是给了我系统学习的一个机会。

除了 SVD,这节课还讨论了两个话题:流数据的处理,与随机化的矩阵乘法。前者讨论了几个技巧,如何通过反复取样来降低随机变量的方差,或是通过计算流里的元素的哈希最小值来估计整个流中不同元素的个数。后者介绍如何通过随机加权抽列的方式估计矩阵乘法。不出意料的,这个方法只对秩低的矩阵有效。

其实这些话题并没有什么难的,这节课也很惭愧的成为了我在 UCSD 第一节 A+ 的数学课。自学对我来说不是问题,问题在于如何让自己去自学。上课是一个很贵但很有效的方法,可惜读研前已经没机会了。

这节课在最初还介绍了马尔可夫不等式、切比雪夫不等式和 Chernoff bound。这些应该都是概率 101 的内容,不过很尴尬,我并没有学过。

另一节数学课更多地集中在写报告与用 R 做数据分析上。不过我也恶补了一些有趣的统计学结果。比如说,有限总体的取样以及校正系数,我曾在第二个项目中手工学习了一遍推导。但最多的收获还是来自 R 上。

第一次接触 R 是在给徐教授写 fastplm 的时候。当时由于不熟悉,对这个奇怪的 Lisp 方言充满厌恶。但是随着了解的增多,我发现这个语言虽然类型系统很坑,但作为 DSL 还是可以接受的,相比之下 Python 反而更加束手束脚、更偏工程。R 里最有价值的东西,可能就是一组叫 tidyverse 的包。顾名思义,它让你的代码简洁许多。其中的一个包 dplyr 允许你以管道的思路处理数据:

  1. starwars %>%
  2. group_by(species) %>%
  3. summarise(
  4. n = n(),
  5. mass = mean(mass, na.rm = TRUE)
  6. ) %>%
  7. filter(n > 1)
  8. #> # A tibble: 9 x 3
  9. #> species n mass
  10. #> <chr> <int> <dbl>
  11. #> 1 <NA> 5 48
  12. #> 2 Droid 5 69.8
  13. #> 3 Gungan 3 74
  14. #> 4 Human 35 82.8
  15. #> 5 Kaminoan 2 88
  16. #> # … with 4 more rows

代码清晰,也鼓励人们使用不可变数据,避免错误。不过也有缺陷:

  • 重用性:这种写法会鼓励人们复制粘贴。不过问题不大,一方面 R 可以自定义函数,另一方面实践表明这种数据操控代码复制粘贴没有问题。

  • 组合性。R 作为 Lisp 方言,允许你引用一个列表里的域而无需写诸如 domain.field 的代码,比如上面的 species,就不用写成 starwars$species。但这样组合起来确实不方便。

  • 扩展性。dplyr 的很多实现比较黑科技,需要较高深的 R 知识。当我发现现有的库不满足我的需求时,我发现扩展还是很痛苦的。

总的来说利还是远大于弊。Litchi 想整合编程能力的话,类似的系统是首选。

另一个很有用的包是 ggplot,绘图用。它让你先指定数据,再指定图的类型,再往上加修饰,比如画 fitted line、修改坐标轴、设置样式。用完之后,我再也无法忍受 matplotlib

特意查了一下,这组包的主要作者是 Hadley Wickham,他也是 RStudio 的首席科学家,很优秀的男人。

Litchi 的报告日后专门写。Research 的话,目前也没什么好说。生活、社交上倒是有不少感触,毕竟好久没有做 group project 了,但我打算给网站加一个每日心情随笔,所以留给那边。就到这吧。

— 2019 年 3 月 25 日于二本营。

本页面全部图片版权归 Regents of the University of California 所有,并致谢 UC San Diego Publications。

The copyright of all images on this page belong to Regents of the University of California, with credit to UC San Diego Publications.