BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题
By 苏剑林 | 2020-10-19 | 68967位读者 | 引用“盈亏问题”、“年龄问题”、“植树问题”、“牛吃草问题”、“利润问题”...,小学阶段你是否曾被各种花样的数学应用题折磨过呢?没关系,现在机器学习模型也可以帮助我们去解答应用题了,来看看它可以上几年级了?
本文将给出一个求解小学数学应用题(Math Word Problem)的baseline,基于ape210k数据集训练,直接用Seq2Seq模型生成可执行的数学表达式,最终Large版本的模型能达到75%的准确率,明显高于ape210k论文所报告的结果。所谓“硬刚”,指的是没有对表达式做特别的转换,也没有通过模板处理,就直接生成跟人类做法相近的可读表达式。
Transformer升级之路:1、Sinusoidal位置编码追根溯源
By 苏剑林 | 2021-03-08 | 137387位读者 | 引用最近笔者做了一些理解和改进Transformer的尝试,得到了一些似乎还有价值的经验和结论,遂开一个专题总结一下,命名为“Transformer升级之路”,既代表理解上的深入,也代表结果上的改进。
作为该专题的第一篇文章,笔者将会介绍自己对Google在《Attention is All You Need》中提出来的Sinusoidal位置编码
\begin{equation}\left\{\begin{aligned}&\boldsymbol{p}_{k,2i}=\sin\Big(k/10000^{2i/d}\Big)\\
&\boldsymbol{p}_{k, 2i+1}=\cos\Big(k/10000^{2i/d}\Big)
\end{aligned}\right.\label{eq:sin}\end{equation}
的新理解,其中$\boldsymbol{p}_{k,2i},\boldsymbol{p}_{k,2i+1}$分别是位置$k$的编码向量的第$2i,2i+1$个分量,$d$是向量维度。
作为位置编码的一个显式解,Google在原论文中对它的描述却寥寥无几,只是简单提及了它可以表达相对位置信息,后来知乎等平台上也出现了一些解读,它的一些特点也逐步为大家所知,但总体而言比较零散。特别是对于“它是怎么想出来的”、“非得要这个形式不可吗”等原理性问题,还没有比较好的答案。
因此,本文主要围绕这些问题展开思考,可能在思考过程中读者会有跟笔者一样的感觉,即越思考越觉得这个设计之精妙漂亮,让人叹服~
在bert4keras中使用混合精度和XLA加速训练
By 苏剑林 | 2022-04-28 | 27135位读者 | 引用之前笔者一直都是聚焦于模型的构思和实现,鲜有关注模型的训练加速,像混合精度和XLA这些技术,虽然也有听过,但没真正去实践过。这两天折腾了一番,成功在bert4keras中使用了混合精度和XLA来加速训练,在此做个简单的总结,供大家参考。
本文的多数经验结论并不只限于bert4keras中使用,之所以在标题中强调bert4keras,只不过bert4keras中的模型实现相对较为规整,因此启动这些加速技巧所要做的修改相对更少。
实验环境
本文的实验显卡为3090,使用的docker镜像为nvcr.io/nvidia/tensorflow:21.09-tf1-py3,其中自带的tensorflow版本为1.15.5。另外,实验所用的bert4keras版本为0.11.3。其他环境也可以参考着弄,要注意有折腾精神,不要指望着无脑调用。
顺便提一下,3090、A100等卡只能用cuda11,而tensorflow官网的1.15版本是不支持cuda11的,如果还想用tensorflow 1.x,那么只能用nvidia亲自维护的nvidia-tensorflow,或者用其构建的docker镜像。用nvidia而不是google维护的tensorflow,除了能让你在最新的显卡用上1.x版本外,还有nvidia专门做的一些额外优化,具体文档可以参考这里。
生活中的趣味数学:同一天生日概率有多大
By 苏剑林 | 2009-07-29 | 29396位读者 | 引用2009年5月22日,对于很多人来说并不是什么特别的日志,不过数学界这边又传来了一个“喜讯”:我们已经找到了第47个梅森素数,即$2^{42643801}-1$是一个素数!新的素数已于6月12日通过法国的Tony Reix的验证,这是目前的第二大素数,有12,837,064位数字!这是通过参加一个名为“因特网梅森素数大搜索”(GIMPS)的国际合作项目而发现的。让我们来共同回顾这一素数之旅!
素数/梅森素数
素数,现在课本上都已经成为“质数”了,不过目前很多数学家、爱好者都还是将其称为素数(也许这个名字好听)。这是指一些不可分解成两个比它本身小的两个整数相乘的形式的数,如2、3、5、7等。除了2外,所有的素数都是奇数。
本站域名Spaces.Ac.Cn的PR为2了
By 苏剑林 | 2009-11-01 | 24684位读者 | 引用你的CRF层的学习率可能不够大
By 苏剑林 | 2020-02-07 | 103582位读者 | 引用CRF是做序列标注的经典方法,它理论优雅,实际也很有效,如果还不了解CRF的读者欢迎阅读旧作《简明条件随机场CRF介绍(附带纯Keras实现)》。在BERT模型出来之后,也有不少工作探索了BERT+CRF用于序列标注任务的做法。然而,很多实验结果显示(比如论文《BERT Meets Chinese Word Segmentation》)不管是中文分词还是实体识别任务,相比于简单的BERT+Softmax,BERT+CRF似乎并没有带来什么提升,这跟传统的BiLSTM+CRF或CNN+CRF的模型表现并不一样。
这两天给bert4keras增加了用CRF做中文分词的例子(task_sequence_labeling_cws_crf.py),在调试过程中发现了CRF层可能存在学习不充分的问题,进一步做了几个对比实验,结果显示这可能是CRF在BERT中没什么提升的主要原因,遂在此记录一下分析过程,与大家分享。
也许不少同好已经在一些书籍上看到过这样的论述:
各向同性的薄球壳,其内部任意一点所受到来自球壳的引力为0。
这是一个很神奇的事情,因为这意味着这是一个均匀引力场,虽然我们在很多问题上都假设了引力场均匀,但是我们却很难知道如何构造一个真正的均匀引力场(而构造一个真正的均匀力场都分析某些问题是很有用的,例如推导一些比例系数),现在眼前就摆着一个均匀引力场了。并且利用它我们就可以计算均匀实心球内部一点所受到的引力(等于它与一个球体的引力)。而关于它的证明,当然也可以利用微积分的知识,可是我们在这里介绍一个初等的方法,相信它会使我们更加感受到物理的神奇和有趣。
最近评论