18 Jan

多任务学习漫谈(一):以损失之名

能提升模型性能的方法有很多,多任务学习(Multi-Task Learning)也是其中一种。简单来说,多任务学习是希望将多个相关的任务共同训练,希望不同任务之间能够相互补充和促进,从而获得单任务上更好的效果(准确率、鲁棒性等)。然而,多任务学习并不是所有任务堆起来就能生效那么简单,如何平衡每个任务的训练,使得各个任务都尽量获得有益的提升,依然是值得研究的课题。

最近,笔者机缘巧合之下,也进行了一些多任务学习的尝试,借机也学习了相关内容,在此挑部分结果与大家交流和讨论。

加权求和

从损失函数的层面看,多任务学习就是有多个损失函数$\mathcal{L}_1,\mathcal{L}_2,\cdots,\mathcal{L}_n$,一般情况下它们有大量的共享参数、少量的独立参数,而我们的目标是让每个损失函数都尽可能地小。为此,我们引入权重$\alpha_1,\alpha_2,\cdots,\alpha_n\geq 0$,通过加权求和的方式将它转化为如下损失函数的单任务学习
\begin{equation}\mathcal{L} = \sum_{i=1}^n \alpha_i \mathcal{L}_i\label{eq:w-loss}\end{equation}
在这个视角下,多任务学习的主要难点就是如何确定各个$\alpha_i$了。

点击阅读全文...

8 Feb

多任务学习漫谈(二):行梯度之事

《多任务学习漫谈(一):以损失之名》中,我们从损失函数的角度初步探讨了多任务学习问题,最终发现如果想要结果同时具有缩放不变性和平移不变性,那么用梯度的模长倒数作为任务的权重是一个比较简单的选择。我们继而分析了,该设计等价于将每个任务的梯度单独进行归一化后再相加,这意味着多任务的“战场”从损失函数转移到了梯度之上:看似在设计损失函数,实则在设计更好的梯度,所谓“以损失之名,行梯度之事”。

那么,更好的梯度有什么标准呢?如何设计出更好的梯度呢?本文我们就从梯度的视角来理解多任务学习,试图直接从设计梯度的思路出发构建多任务学习算法。

整体思路

我们知道,对于单任务学习,常用的优化方法就是梯度下降,那么它是怎么推导的呢?同样的思路能不能直接用于多任务学习呢?这便是这一节要回答的问题。

点击阅读全文...

14 Feb

多任务学习漫谈(三):分主次之序

多任务学习是一个很宽泛的命题,不同场景下多任务学习的目标不尽相同。在《多任务学习漫谈(一):以损失之名》《多任务学习漫谈(二):行梯度之事》中,我们将多任务学习的目标理解为“做好每一个任务”,具体表现是“尽量平等地处理每一个任务”,我们可以称之为“平行型多任务学习”。然而,并不是所有多任务学习的目标都是如此,在很多场景下,我们主要还是想学好某一个主任务,其余任务都只是辅助,希望通过增加其他任务的学习来提升主任务的效果罢了,此类场景我们可以称为“主次型多任务学习”。

在这个背景下,如果还是沿用平行型多任务学习的“做好每一个任务”的学习方案,那么就可能会明显降低主任务的效果了。所以本文继续沿着“行梯度之事”的想法,探索主次型多任务学习的训练方案。

目标形式

在这篇文章中,我们假设读者已经阅读并且基本理解《多任务学习漫谈(二):行梯度之事》里边的思想和方法,那么在梯度视角下,让某个损失函数保持下降的必要条件是更新量与其梯度夹角至少大于90度,这是贯穿全文的设计思想。

点击阅读全文...

23 Jan

【龟猫记】家里多了几只小动物

两只小乌龟

两只小乌龟

寒假到了,黄老师说今年回老家去看看,所以把他宿舍里的几只小动物都家养在我家里了。其中有两只小乌龟,一只小猫。(喵喵喵...)

这个假期可以好好地近距离接触和观察小动物了。

小动物们都挺听话的,很是可爱,只是希望在下学期回来之后,老师不会看到成功减肥的猫。(^_^)

不多说了,先上图,瞧瞧它们(乡下地方,很简陋,见笑了)——

点击阅读全文...

18 Aug

如何在科学空间输入数学公式?——LaTeX帮助

$$\pi=\frac{426880\sqrt{10005}}{\sum_{n=0}^{\infty} \frac{(6n)!(545140134n+13591409)}{(n!)^3(3n)!(-640320)^{3n}}}$$

首先得感谢ASCIIMath Image Fallback网站,是他们开发出这个强大的js,使得在任何网站的输入数学公式成为可能。然后感谢“数学研发论坛”,是他们的站长郭先强完善了这个js文件,使其达到前所未有的强大化。

科学空间是通过调用一个js来显示数学公式的,只要在需要显示数学公式的网站加入代码以下代码,就可以实现支持数学公式的功能。

点击阅读全文...

16 Aug

微积分学习(一):极限

本文不是微积分教程,而是发表自己学习中的一些看法,以及与同好们讨论相关问题。

拿起任何一本“微积分”教程,都可以看见那专业而严格的数学语言,因此很多人望而生畏。的确,由于牛顿和莱布尼茨创立的微积分是不严格的,因此引发了第二次数学危机。经过法国数学家柯西和德国数学家魏尔斯特拉斯的努力,使得微积分有了前所未有的严密化,克服了第二次数学危机。加之后来的第三次数学危机,数学就更加严密了。

但是对于初学者,严密化的微积分令人十分费解。因此,我们不妨按照微积分的创立顺序,即“不严密——严密”的顺序来学习。这样不仅能够让我们更高效率地学习,而且增加学习数学的兴趣。

点击阅读全文...

12 Sep

微积分学习(二):导数

自从上次写了关于微积分中的极限学习后,就很长的时间没有与大家探讨微积分的学习了(估计有20多天了吧)。启事,我自己也是从今年的9月下旬才开始系统地学习微积分的,到现在也就一个月的时间吧。学习的内容有:集合、函数、极限、导数、微分、积分。不过都是一元微积分,多元的微积分正在紧张地进修中......

现在不妨和大家探讨一下关于微积分中的最基本内容——“导数”的学习。

其实,用最简单的说法,如果存在函数$f(x)$,那么它的导数(一阶导数)为
$$\lim_{\Delta x->0} f'(x)=\frac{f(x+\Delta x)-f(x)}{\Delta x}$$

点击阅读全文...

7 Feb

你的CRF层的学习率可能不够大

CRF是做序列标注的经典方法,它理论优雅,实际也很有效,如果还不了解CRF的读者欢迎阅读旧作《简明条件随机场CRF介绍(附带纯Keras实现)》。在BERT模型出来之后,也有不少工作探索了BERT+CRF用于序列标注任务的做法。然而,很多实验结果显示(比如论文《BERT Meets Chinese Word Segmentation》)不管是中文分词还是实体识别任务,相比于简单的BERT+Softmax,BERT+CRF似乎并没有带来什么提升,这跟传统的BiLSTM+CRF或CNN+CRF的模型表现并不一样。

基于CRF的4标签分词模型示意图

基于CRF的4标签分词模型示意图

这两天给bert4keras增加了用CRF做中文分词的例子(task_sequence_labeling_cws_crf.py),在调试过程中发现了CRF层可能存在学习不充分的问题,进一步做了几个对比实验,结果显示这可能是CRF在BERT中没什么提升的主要原因,遂在此记录一下分析过程,与大家分享。

点击阅读全文...