Categories
读书有感

重温概率论和线性代数

年底的节奏比较舒缓,就有更多的时间来重新拾起一些东西。先是百无聊赖的浪费了一些时间看剧打游戏看小说,基本就是一种不动脑子的打发时间的模式。后面觉得着实无聊了,开始想有什么可以看的。不知怎么的,就动了重温数学的念头。搜了一下网上的各种公开课,发现MIT的线性代数(Gilbert Strang)和Harvard的概率论基础(Joe Blitzstein)评价比较高,就打开youtube开始跟课。

线性代数我其实偷了个懒,没有去跟那个完整版的,而是简单地看了一下Strang教授今年发布的2020版。一共只有五部分,每一部分大概一刻钟,我看之前还在想这个是怎么做到的。看完了,就明白这75分钟的高屋建瓴之处了。大一的时候学线性代数,虽然分数不错,但是其实学了一堆计算却不知所云。后面学到高等计量开始频繁地用到线性代数,才多少有了一些事后的感悟。现在再去看线性代数,觉得这东西真的挺美的,一点一点地串联起多少问题。

话说到这里,多少有点“我吃了七个烧饼发现饱了,是不是直接去吃第七个就好了的”味道。我需要略带羞耻地承认,我大学以后的数学基本都是靠学经济学才学会的(学会指的是有一些理解而不仅仅是记忆公式和定理)。大一一上来的微积分,动不动各种极限和证明,直接懵掉了。概率论学了什么完全不记得了,印象中好像只有一本很薄的小册子,各种证明,然后考试一片茫然。线性代数也是,死记硬背了一堆证明却不知所云。

类似的,我对计量经济学也有差不多的体验。其实第一次学(初级)计量经济学的时候也是一脸懵,第二次学(中级计量)稍微好了一点,后面一遍又一遍地学计量(或者广义地说,线性模型),我才逐渐开始理解回归模型。回头看,这实在是一个成本巨大而痛苦的过程。可是代价如此之高是因为老师教得不好呢,还是因为这些东西本来就难?我现在已经没法回到原点去体会另外一条路径了。只是重温这些基础课程的时候,更容易跟着这些大家公认优秀的教师的思路,来站在更高的层面欣赏数学本身的美,而不仅仅是当作工具。

数学这种学科,学懂了和没学懂差别太大了。学懂了,再厚的教科书都觉得如若无物,要用的时候信手拈来(英文我习惯用internalize来描述这种状态)。没学懂的话,基本就是记住了一堆程序化的操作流程(procedure)却忘记了他们的来龙去脉。这种差别会深刻地影响日后的学习或研究。这两年面试了上百人,我所在意的其实不是一个面试者记住多少公式和模型(比如我允许他们随时google),而是他们是不是真正理解他们用到的模型本身。把统计模型学成了一堆procedure其实是一件非常危险的事情。

概率论这门课我是老老实实地跟完全程的。毕竟是一个学期的内容,34节课,每节课接近一个小时,加起来就有三十多个小时。我并没有快进或者跳跃(主要是在电视上放起来快进比较麻烦),所以陆陆续续花了四五天的时间才把全程跟完。如果是第一次学这门课,这种节奏几乎是不可能的,因为新的信息量其实可能很大。只是我对于这些内容多少熟悉,所以实践起来更像是复习直觉而不是学习知识。这也是让我可以有机会去由衷地感慨原来概率论可以如此简单明了。我开始以为我会经常走神,尤其是已经非常熟悉的内容。结果很多时候,我居然全神贯注地又听了一遍那些熟悉的定理和公式。Blitzstein确实把这门课讲得很深入浅出。印象最深的是他在推导正态分布的时候,明明是那么无趣的定积分和极坐标变换问题,居然可以讲得那么好玩。又一次验证了高斯发现正态分布时候那种“天赐”的感觉。数学的美往往就在这种时刻。凭什么,一切繁琐的符号最终化为这么简洁优雅的记号?

正好在2020年的最后一天和新年交界的时点,看完了这门30多个小时的课程。让我忍不住记录一下,这种别致的、超级满足的跨年方式。

Categories
读书有感

Bootstrap + subsample: simple, efficient, then elegant?

继续昨天。早晨一起来,看到施老师的一句简短评论,瞬间人就清醒了。然后跟做错了事的小孩子似的,惴惴不安的跑到office里面,翻墙,开始下paper。

现在的节奏基本上是白天开会写代码,晚上回家看paper,哎,不看心里总觉得好惶恐。还好中间等车等了蛮久的,顺便就借着六七点昏黄的路灯把这篇不算太长的paper看完了。有趣的是等车的时候碰到一位同事,然后我俩就开始呱唧呱唧的聊起来统计推断了...不知道当时旁边的路人是不是一道黑线,幸好当时把ebay的牌牌藏在了衣服里面...

这篇不算长的paper是:Bootstrapping Big Data,UC Berkeley 计算机系一群人鼓捣出来的。idea很简单(符合第一标准,simple),就是在大数据上(无放回的随机抽样)取一些subsamples,然后在这些subsamples上面做bootstrap,然后把结果取平均数。

这样的好处显而易见,天生的分布式算法,把数据随机分布到各个计算节点就可以了。然后bootstrap也不用占那么大的内存了,空间时间都省掉了,所以符合第二标准:efficient。

最后,就是还是比较effective的,有着良好的渐进收敛性质。和直接的bootstrap相比,它不仅保持渐进一致,而且有着更高的收敛速度,还是天生并行的...过年回济南的时候joke童鞋(高中同学)去火车站接我,然后我们就兴致昂扬的聊起来大数据和算法并行问题了...是不是有点天雷滚滚?哇咔咔,大过年的...好久没见竟然是如斯叙旧,汗。

此外,还可以结合binning的思路做一些weighted calculation,这样又进一步节省了时间。

不知道这样是不是就足够的elegant了...我看了一眼converging rate 还是比较好看的。伪代码思路也是简单得很。还可以用在各种现成的线形非线性、参数非参数模型上,真是瞬间变身并行高富帅。貌似和前段时间看到的rmr2包里面做OLS并行的思路有点像,待我细细研究一下。

algorithm

唯一的concern就是这东西更适合hadoop而不适合teradata,哎。我没法在TD上控制节点的分配,这个比较讨厌。Hadoop可以直接写并行map reduce,就会方便很多了。

 

先看了这一篇简介,后面慢慢地研究一些理论证明什么的,有点too good to believe...还是先找点数据测试玩玩吧^_^
efficiency