晚上好,我是雷少,好久不见,哦不对,是又见面了。最近有点累呀,不管是课程,还是作业,还是一些其他杂七杂八的事,我几乎没有时间好好写一写随笔了。不过,立下的规矩不能说倒就倒,我还是决定熬夜,一口气写完这篇随笔。
看到今天的标题,你可能会有些头疼:这次不但有论文,连专业知识都上来了。如果你不是学计算机/电子通信方向的,你可以直接划到Part 3,在那里我会和大家聊聊研究生的心态问题。事实上,作为一名研究生,我还是希望能多分享一些做科研的同行真正需要的干货的,哪怕浅显一些,主观一些,甚至有些见解不对,都是很有趣的体验,当然如果真有不对还是希望你能帮忙指出来。总之,希望你能阅读愉快!
隐马尔可夫模型
Hidden Markov Model
说到隐马尔可夫模型我们不得不先说一下马尔可夫链(Markov chain)。这几乎是一个所有信号类学科都逃不开的话题。马尔可夫链是什么?我们有一个天气系统,这个天气系统只有晴天、阴天和雨天三种情况。这个天气系统很有意思,我们只要知道今天是什么天气,明天是什么的天气概率立马就能知道了,而与昨天、前天的天气状况没有关系。这样一个系统就是一个最简单的马尔可夫链。什么,你说这还不够直观?我们上一个具体案例:
图中第一列代表今天的天气状况,第一行代表明天的天气状况。比如,今天是晴天,那么明天是晴天、阴天和雨天的概率就是0.4,0.5和0.1。有了这张表,理论上我们只要知道第一天的天气的概率分布,之后任何一天的天气概率分布情况都是唯一确定的了。这个事例里,你需要两个工具:第一天的概率分布p0和这张表(转移概率矩阵P),你就可以掌控一切。在这里我不想放复杂晦涩的公式,你只需用直觉去想一想,是不是这么回事就行。
那么隐马尔可夫到底是怎么回事呢?试想你的女朋友跟你异地。她每天的活动无外乎从这些里选一种:去商店购物,去公园散步,在家收拾东西。这些活动是与天气相关联的,也就是说各种天气做什么事的概率是固定的。她会告诉你今天做啥了,但你并不知道天气情况,对于你来讲,天气是一个隐变量,活动是一个显变量。这就是一个隐马尔可夫模型。
隐马尔可夫模型[1]
你需要研究这些问题:
1. 比较简单的:女朋友告诉我了这三天分别是散步、购物和在家,我已经知道了当地的天气概率分布,计算女朋友做出这样的活动的概率。
2. 中等难度的:女朋友同样告诉了我三天做了什么,我也知道天气模型,计算这三天最有可能的天气分布。
3. 惨绝人寰的:女朋友只告诉了我三天做了什么,其他我一概不知,要我给出一个天气模型。
这个时候你一定会骂我了:你为什么不去看你对象当地的天气情况?那就没意思了朋友们,统计之美在于不确定性。幸运的是,优秀的科学家们已经给我们找到了解决问题的方法。
为了简化问题,我们只考虑晴天和雨天两种天气状况。
对于第一题,相信你的第一感觉就是,我把所有的2^3=8种天气分布都罗列出来,一个一个计算发生的概率,再叠加起来不就完事了?这的确是一种方法,但是问题也是显而易见的,计算复杂度太高!对于一个长度为T的序列,我们要计算N^T种情况,这要是序列一长我们恐怕要当场去世!
那为什么不计算每一个时间点的概率呢?比如对于第一天散步的概率,我们可以这样分析:这一天散步有可能在晴天发生,也有可能在雨天发生。而这一事件发生的概率即为第一天的天气情况和散步概率的相乘再求和,但是,我们在这里做一个拆解,只考虑相同天气下的事件分布情况。所以P(第一天散步,第一天晴天)=0.4*0.6=0.24,P(第一天散步,第一天雨天)=0.6*0.1=0.06。
对于第二天购物,这一事件有了四种可能:一晴二晴,一雨二晴,一晴二雨,一雨二雨。我们依然把最后一天的天气状况分开讨论,所以P(第一天散步,第二天购物,第二天晴天)=P(一散一晴二购二晴)+ P(一散一雨二购二晴)= 0.6*0.4*0.6*0.3 + 0.6*0.1*0.3*0.3 = [0.24*0.6 + 0.06*0.3]*0.3=0.0486,
P(第一天散步,第二天购物,第二天雨天)= P(一散一晴二购二雨)+ P(一散一雨二购二雨)= 0.4*0.6*0.4*0.4 + 0.6*0.1*0.7*0.4 = [0.24*0.4 + 0.06*0.7]*0.4 = 0.0552。
一通咔咔计算后,发现了有趣的事情吗?我们可以通过第一天求得的结果:0.24和0.06放入第二天情况的计算,也就是说,对于每一天的情况我们都可以将前一天计算的情况按照权重进行一次“汇总”。虽然这样做相当于分离出了一个变量(对于本例就是最后一天的天气)不如第一种方法直观,但我们的复杂度大大降低:从O(N^T)降到了O(T*N^2)。用一张图可以表示成这样:
这就是大名鼎鼎的前向算法。做人工智能的朋友们一定不会陌生,不过那里是求梯度,和这里的前向算法略有不同。
当然你开心的话,也可以从最后一天向前推导,这种方法叫做后向算法。在这里我就不展开说了,它俩除了顺序不同,其他性质几乎一样。
我们终于来到了第二个问题。有了前向算法的理论支撑,想说明第二个问题就简单得多。我们回顾一下问题:知道做了什么,也知道天气模型,求最有可能的天气分布。要是没有之前一问的铺垫,你一定会想把每种天气下做各种事情的概率计算出来,选出概率最高的天气分布就行。这依旧是最复杂的一种方法,需要考虑的情形最多,达到了N^T种。
但是如果我们分时间进行考虑呢?对于第一天,我们有40%的可能晴天和60%的可能雨天,散步的可能分别为0.4*0.6=0.24和0.6*0.1=0.06,似乎是晴天的概率高一些,不过不要着急。到了第二天,如果是晴天,符合条件的路径有两条,概率分别是0.4*0.6*0.6*0.3 = 0.0432和0.6*0.1*0.3*0.3 = 0.0054,显然,对于之后的路径选择,两者不会有任何的区别,所以此时概率较低的路径一定不会是最佳路径,我们要排除它。对于雨天的情形也是同理,我们只保留一条最有可能的路径。示意图就像这样(感谢知乎网友@路生)[2]:
每层每个节点都需要来自上一层节点的数据,所以复杂度是O(T*N^2)。这个方法被命名为Viterbi算法。它所做的只是把本应在最终处理的概率分散在每一层进行,个人感觉与前向算法有异曲同工之妙。这一问题也被称为隐马尔可夫的解码问题。如果你在书上看到了,不要觉得困惑。
至于第三个问题,这道题我只是知道应该用Baum-Welch算法,具体原理已经超出了《模式分类》课本的范围,感兴趣的可以自行研究。
所以,我为什么要花这么大的篇幅和你聊隐马尔可夫模型?原因有三:首先,隐马尔可夫模型是模式识别参数估计问题的集大成者,学懂了HMM就学懂了贝叶斯估计与极大似然估计;其次,在解决隐马尔可夫问题中使用的前向后向算法和Viterbi算法都蕴含了递归的思想,而递归是自然科学里最重要的算法之一,特别是在计算机领域用处巨大;最后也是最现实的,现阶段HMM和LSTM一样,是少数仍在论文中经常出现的传统方法,特别是HMM的时序特性对于语言处理问题依旧有实用价值。
论文推荐
paper recommendations
这次论文推荐还是会在文末【阅读原文】分享链接,大家可以打包下载~
1.Learning Efficient Convolutional Networks through Network Slimming
评语:什么,都0202年了,你还不知道模型可以剪枝?在AI界,模型压缩绝对不陌生,主要是因为模型体量越来越大,计算成本越来越高,已经不适合常规机器了。本篇论文给对抗这种趋势提供了一个很好的思路,通过引入卷积层权重因子极大地降低了模型的复杂度,比如对于VGGNet,这种算法就压缩为原来的5%。虽然精度有所下降(降幅也不大),但缩小的模型让人看到了更多轻量机器被部署的可能。
2.PF-Net: Point Fractal Network for 3D Point Cloud Completion
评语:点云学习是一个比较新的名词,目前在3D测绘方向有一些应用。这篇获选CVPR2020的论文讲述了一个点云补全的概念,我比较感兴趣的是基于金字塔网络(FPN)的特征提取结构能较好地弥补缺失部分的细节信息。同时只生成待补充部分的点云提高了网络局部感知能力。需要注意的是,目前相关数据集还比较少,能够在这种条件下取得检测质量的突破,个人觉得很有意思。
从大连研究生事件学到的
One Story, OneLesson
刚刚过去的一个月,对搞学术搞科研的朋友来说,挺沉重的。
10月13日,一位大连理工大学的研三师兄在实验室结束了他的生命。在生命结束前,他在社交平台发了一篇长文,讲述了自己在读研期间的种种遭遇。简单总结来说,就是科研不顺,感觉自己没有科研潜力。让人颇感意外的是,他并没有表达对导师、对学校、对制度的不满,遗书的字里行间甚至流露着对现实戏谑的口吻,他只是一味地将所有问题的造成、所有失败的责任归咎于自己。因为做不好科研,可能无法顺利毕业,他感到自责与内疚,决定一死了之。难以想象,一个热爱生活、性格开朗的同学,居然选择这样的方式离开了世界。
真是一个亚撒西(温柔)的小伙子啊。
这件事引发了大家对研究生现状的讨论。事情发生第二天,毕导在公众号发文《大连理工的悲剧发生后,读博又休学的我有些话想说》讨论此事,我的微信有100多个朋友读过。很多人为他的离去唏嘘不已。因为,像大连理工师兄这样性格的同学,在高校实在是再常见不过了。
这件事对我的触动也是挺大的。虽然入学前早有心理准备,不过看到的种种迹象反复提醒着我要认清现实:做科研看似高大上,实际上是一条不归路。在接触了一些项目之后我已经实实在在地感受到,相比本科学习时的目标明确,研究生阶段很难快速把握方向;即使研究方向找到了,距离真正做出东西来也非常遥远。而研究生,特别是博士,做不出成果,就会影响毕业,一旦延毕,各种社会上的压力只会更加让人焦虑,无心科研。
在研究生的世界里,并不存在越努力就越幸运。
努力的久美子在社团落选了
前两天和一个B站的朋友聊天,他大我四级,在慕尼黑读博士,做运筹方向。我说现在做AI挺“卷”的呀,压力大,专业书吃不透。他告诉我,哪怕前面是千军万马,只要找到足够的不同点,依旧是可以闪光的。怎么找不同点呢?私以为还是多读论文,多写写代码。AI会出现泡沫吗?会,现在入场的都是高手,场地有些拥挤;AI会死吗?不会,只有弱者才觉得死了,因为他们永远无法开辟新的赛道,自己被自己吓死了。
所以,读研真的没什么了不起,不如看淡结果,把这个过程看作一次对自己学习、创新、抗压能力的全方位考验,也许一个人真的没有办法在三五年做出一些贡献,那请不要忘记你周围的老师、同学……放平心态,做一些有用的工作。大不了,为毕业后安排一下也是可以的,现在考公务员也不需要硕博简历吧(笑)?
可能上面那句要改一下了。在研究生的世界里,活得越明白的人越幸运。
这期文章拖了太久,因为前面一段时间没时间更新,在这里说声抱歉。以后还是会尽量保证月更,我们下期再见~
参考链接
[1]https://www.zhihu.com/question/20962240/answer/33438846
[2]https://www.zhihu.com/question/20136144/answer/763021768
“阅读原文”提取码:6nxg
你“在看”我吗?