科学空间:2010年3月重要天象
By 苏剑林 | 2010-02-28 | 23061位读者 | 引用3月份,大地回暖,春暖花开了,精彩的天象在等着我们。这个月天空的主角无疑是美丽的土星,火星和金星也是较好的观测对象。而且3月又正值梅西叶马拉松的好时节,许多有趣、朦胧的深空天体,无疑会极大地挑起我们对神秘的春夜星空的兴趣。这里有一本《梅西叶马拉松全年指导手册》电子书,新手不妨作为入门的参考书。
梅西叶马拉松是一个自我挑战性相对较强的活动,因为虽然一夜之间所有的梅西耶天体全都亮相,但是因为升起的时间相差很多,有些天体的角度就很低了,并不十分适宜观测,况且一夜之间观测103个天体,即使对星空和器材性能非常熟悉,也需要相当时间(当然啦,你如果有电动赤道仪和导星输入的话,就很简单拉),这会是一个非常辛苦的活动,需要充分准备。 爱好挑战困难者,上吧,探索我们的宇宙!
天体力学巨匠——拉普拉斯
By 苏剑林 | 2012-11-16 | 46938位读者 | 引用本文其实好几个月前就已经写好了,讲的是我最感兴趣的天体力学领域的故事,已经发表在2012年11月的《天文爱好者》上。
作为一本天文科普杂志,《天文爱好者》着眼于普及天文,内容偏向于有趣的天体物理等,比较少涉及到天体力学。事实上,在天文发展史中,天体力学——研究天体纯粹在万有引力作用下演化的科学——占据了相当重要的地位。过去,天文就被划分为天体力学、天体物理以及天体测量学三个大块。只是在近现代,由于电子计算机的飞速发展,天体力学的多数问题都交给了计算机数值计算解决,因此这一领域逐渐淡出了人们视野。不过,回味当初那段天体力学史,依然让我们觉得激动人心。
首先引入“天体力学(Celestial mechanics)”这一术语的是法国著名数学家、天文巨匠拉普拉斯。他的全名为皮埃尔?西蒙?拉普拉斯(Pierre?Simon marquis de Laplace),因研究太阳系稳定性的动力学问题被誉为法国的牛顿和天体力学之父。他和生活在同一时代的法国著名数学家拉格朗日以及勒让德(Adrien-Marie Legendre)并称为“三L”。
神秘的少年时期
由于1925年的一场大火,很多拉普拉斯的生活细节资料都丢失了。根据W. W. Rouse Ball的说法,他可能是一个普通农民或农场工人的儿子,1749年3月23日出生于诺曼底卡尔瓦多斯省的伯蒙特恩奥格。少年时期,拉普拉斯凭借着自己的才能和热情,在富人邻居的帮助下完成了学业。他父亲希望这能使他将来以宗教为业,16岁时,他被送往卡昂大学读神学。但他很快在数学上显露头角。
从费马大定理谈起(一):背景简介
By 苏剑林 | 2014-08-15 | 27718位读者 | 引用费马大定理,也叫做费马最后定理(Fermat Last Theorem),说的是
设$n$是大于2的正整数,则不定方程$x^n+y^n=z^n$没有全不为0的整数解。
稍微阅读过数学史的朋友应该知道,该定理首先于1637年由法国业余数学家费马(Pierre de Fermat)在阅读丢番图《算术》拉丁文译本时写在第11卷第8命题旁写道。他并附加道:“我发现了一个非常漂亮的证明,但这里没有足够的空间可容纳得下。”根据后世的考证,费马或许有办法证明n=3,4,5的情形,但不大可能给出一般性的证明,因为在20世纪90年代,怀尔斯用了130页的纸张,而且用到了复杂的现代理论,才完全证明了费马大定理。所以费马当时的这一断言,更可能只是一个归纳猜测。
用Pandas实现高效的Apriori算法
By 苏剑林 | 2015-07-02 | 144058位读者 | 引用最近在做数据挖掘相关的工作,阅读到了Apriori算法。平时由于没有涉及到相关领域,因此对Apriori算法并不了解,而如今工作上遇到了,就不得不认真学习一下了。Apriori算法是一个寻找关联规则的算法,也就是从一大批数据中找到可能的逻辑,比如“条件A+条件B”很有可能推出“条件C”(A+B-->C),这就是一个关联规则。具体来讲,比如客户买了A商品后,往往会买B商品(反之,买了B商品不一定会买A商品),或者更复杂的,买了A、B两种商品的客户,很有可能会再买C商品(反之也不一定)。有了这些信息,我们就可以把一些商品组合销售,以获得更高的收益。而寻求关联规则的算法,就是关联分析算法。
啤酒与尿布
关联算法的案例中,最为人老生常谈的应该是“啤酒与尿布”了。“啤酒与尿布”的故事产生于20世纪90年代的美国沃尔玛超市中,超市管理人员发现“啤酒与尿布两件看上去毫无关系的商品会经常出现在同一个购物篮中”。经过分析,原来在美国有婴儿的家庭中,一般是母亲在家中照看婴儿,年轻的父亲前去超市购买尿布。父亲在购买尿布的同时,往往会顺便为自己购买啤酒,这样就会出现啤酒与尿布这两件看上去不相干的商品经常会出现在同一个购物篮的现象。因此,沃尔玛尝试将啤酒与尿布摆放在相同的区域,让年轻的父亲可以同时找到这两件商品。事实是效果相当不错!
【不可思议的Word2Vec】 1.数学原理
By 苏剑林 | 2017-04-02 | 57479位读者 | 引用对于了解深度学习、自然语言处理NLP的读者来说,Word2Vec可以说是家喻户晓的工具,尽管不是每一个人都用到了它,但应该大家都会听说过它——Google出品的高效率的获取词向量的工具。
Word2Vec不可思议?
大多数人都是将Word2Vec作为词向量的等价名词,也就是说,纯粹作为一个用来获取词向量的工具,关心模型本身的读者并不多。可能是因为模型过于简化了,所以大家觉得这样简化的模型肯定很不准确,所以没法用,但它的副产品词向量的质量反而还不错。没错,如果是作为语言模型来说,Word2Vec实在是太粗糙了。
但是,为什么要将它作为语言模型来看呢?抛开语言模型的思维约束,只看模型本身,我们就会发现,Word2Vec的两个模型 —— CBOW和Skip-Gram —— 实际上大有用途,它们从不同角度来描述了周围词与当前词的关系,而很多基本的NLP任务,都是建立在这个关系之上,如关键词抽取、逻辑推理等。这几篇文章就是希望能够抛砖引玉,通过介绍Word2Vec模型本身,以及几个看上去“不可思议”的用法,来提供一些研究此类问题的新思路。
【不可思议的Word2Vec】5. Tensorflow版的Word2Vec
By 苏剑林 | 2017-05-27 | 111355位读者 | 引用本文封装了一个比较完整的Word2Vec,其模型部分使用tensorflow实现。本文的目的并非只是再造一次Word2Vec这个轮子,而是通过这个例子来熟悉tensorflow的写法,并且测试笔者设计的一种新的softmax loss的效果,为后面研究语言模型的工作做准备。
不同的地方
Word2Vec的基本的数学原理,请移步到《【不可思议的Word2Vec】 1.数学原理》一文查看。本文的主要模型还是CBOW或者Skip-Gram,但在loss设计上有所不同。本文还是使用了完整的softmax结构,而不是huffmax softmax或者负采样方案,但是在训练softmax时,使用了基于随机负采样的交叉熵作为loss。这种loss与已有的nce_loss和sampled_softmax_loss都不一样,这里姑且命名为random softmax loss。
另外,在softmax结构中,一般是$\text{softmax}(Wx+b)$这样的形式,考虑到$W$矩阵的形状事实上跟词向量矩阵的形状是一样的,因此本文考虑了softmax层与词向量层共享权重的模型(这时候直接让$b$为0),这种模型等效于原有的Word2Vec的负采样方案,也类似于glove词向量的词共现矩阵分解,但由于使用了交叉熵损失,理论上收敛更快,而且训练结果依然具有softmax的预测概率意义(相比之下,已有的Word2Vec负样本模型训练完之后,最后模型的输出值是没有意义的,只有词向量是有意义的。)。同时,由于共享了参数,因此词向量的更新更为充分,读者不妨多多测试这种方案。
【学习清单】最近比较重要的GAN进展论文
By 苏剑林 | 2018-12-26 | 66160位读者 | 引用这篇文章简单列举一下我认为最近这段时间中比较重要的GAN进展论文,这基本也是我在学习GAN的过程中主要去研究的论文清单。
生成模型之味
GAN是一个大坑,尤其像我这样的业余玩家,一头扎进去很久也很难有什么产出,尤其是各个大公司拼算力搞出来一个个大模型,个人几乎都没法玩了。但我总觉得,真的去碰了生成模型,才觉得自己碰到了真正的机器学习。这一点,不管在图像中还是文本中都是如此。所以,我还是愿意去关注生成模型。
当然,GAN不是生成模型的唯一选择,却是一个非常有趣的选择。在图像中至少有GAN、flow、pixelrnn/pixelcnn这几种选择,但要说潜力,我还是觉得GAN才是最具前景的,不单是因为效果,主要是因为它那对抗的思想。而在文本中,事实上seq2seq机制就是一个概率生成模型了,而pixelrnn这类模型,实际上就是模仿着seq2seq来做的,当然也有用GAN做文本生成的研究(不过基本上都涉及到了强化学习)。也就是说,其实在NLP中,生成模型也有很多成果,哪怕你主要是研究NLP的,也终将碰到生成模型。
好了,话不多说,还是赶紧把清单列一列,供大家参考,也作为自己的备忘。
Keras:Tensorflow的黄金标准
By 苏剑林 | 2019-11-06 | 76812位读者 | 引用这两周投入了比较多的精力去做bert4keras的开发,除了一些API的规范化工作外,其余的主要工作量是构建预训练部分的代码。在昨天,预训练代码基本构建完毕,并同时在TPU/多GPU环境下测试通过,从而有志(有算力)改进预训练模型的同学多了一个选择。——这可能是目前最为清晰易懂的bert及其预训练代码。
预训练代码链接: https://github.com/bojone/bert4keras/tree/master/pretraining
经过这两周的开发(填坑),笔者的最大感想就是:Keras已经成为了tensorflow的黄金标准了。只要你的代码按照Keras的标准规范写,那可以轻松迁移到tf.keras中去,继而可以非常轻松地在TPU或多GPU环境下训练,真正的几乎是一劳永逸。相反,如果你的写法过于灵活,包括像笔者之前介绍的很多“移花接木”式的Keras技巧,就可能会有不少问题,甚至可能出现的一种情况是:就算你已经在多GPU上跑通了,在TPU上你也死活调不通。
最近评论