自从学了『工程优化』这门课程,也意识到优化是一潭很深的水。只是简单的将几个目标线性加权优化,或优化完一个目标在优化另一个目标是很愚蠢的做法,亲身试验后的确发现这是最差的解法,解会出现不收敛、随机性、震荡等各种情况。如果在神经网络中恰好遇到了多任务学习的问题,且两个问题相互制约,那么可以考虑将多任务学习转换为多目标优化,融合成最终的一个loss函数,这会比线性加权好上很多。本论文发表在2018年的NIPS上,个人认为具有借鉴意义和开创性工作,所以记录于此。
论文地址:https://papers.nips.cc/paper/2018/file/432aca3a1e345e339f35a30c8f65edce-Paper.pdf
代码地址:https://github.com/intel-isl/MultiObjectiveOptimization
摘要
在这篇论文中,明确的将神经网络的多任务学习转换为多目标优化问题。将文章提出的方法用到多任务的深度学习场景中,如图像分类,语义分割、实体分割识别等、多标签分类等。和其他多任务学习或单任务逐步训练的方法相比,能获得性能更好的模型。
在多任务学习中,通常情况是在约束情况下分别解决每一个任务企图获取每个任务的优化解,但这很大程度上并不可行,因为多任务学习本质是一个多目标问题。多目标优化问题中,需要权衡多个目标之间可能存在的冲突。对每个优化目标进行线性加权得到一个代理目标,最小化每个目标的加权后的损失这种方案仅仅适用于目标之间不冲突的情况,目标之间相互冲突时就超出了线性组合的范畴。
多任务学习MTL(multi-task learning)的潜在优势是,即使是看起来毫不相关的任务,也由于共享输入数据而具有很强的依赖性。在神经网络学习时,将多个任务视为归纳偏见(inductive bias)成为了一种解决问题可行的方案。个人理解归纳偏见的意思就是:将各个任务中数据信息所包含的偏差去除,得到所有任务的最优解。
一种这样的方法是多梯度下降算法(MGDA,multi-gradient descent algorithm),该算法基于梯度下降的方法,通过更新每个任务的梯度并解决优化问题,并可证明可以收敛到优化解。所以MGDA非常适合在神经网络进行多任务学习。但是,有两个因素限制了MGDA在大规模任务中的应用:
- 该算法需要计算每个任务的梯度,从而导致反向传播时也需要多次计算,即每个任务对应一次反向传播,训练期间非常耗时。
- 在多目标优化中,传统的梯度下降算法不能直接应用到大量任务的学习中,因为随着任务数量和梯度维度的增加,模型的扩展性很差。
在文章中提出了一种基于Frank-Wolfe的优化方法,能适应大规模问题。此外,文章为优化目标提供了一个上限,通过优化上限可以通过单次反向传播来更新梯度,而无需单独更新特定任务的梯度,减小了MGDA的计算开销。文章也证明了在现实条件的假设下,算法可以使得神经网络找到多目标优化任务的Pareto最优解。
方法介绍
设数据的输入空间为$X$,任务的集合为$Y_t,t\in [T]$,$T$是任务数量,$N$表示数据集的数量,$y_i^t$表示第$t$个任务的第$i$个数据的标签,数据集可以写为$[x_i,y_i^1,\cdots,y_i^T]$。对每一个任务,可以用参数表示为:$f^t(x;\theta^{sh},\theta^t):X\to Y^t$。$\theta^{sh}$是所有任务共享的参数,$\theta^t$是每个任务独有的参数,每一个任务的损失值为$L^t$。通常的论文会将损失函数设计为:
\begin{equation}
\min_{\theta^{sh},\theta^1\cdots\theta^T}=\sum_{i=1}^Tc^tL^t
\end{equation}
$c^t$表示每个任务的权重。公式很直观,当网络层数和任务逐步增多时,它通常需要在成比例缩放的空间中进行搜索,要么使用启发式算法,要么很难在多任务学习中找到最优解。但是对于两个参数$\theta,\bar{\theta}$,很可能会有 $L^1(\theta^{sh},\theta^{t_1})<L^2(\bar{\theta}^{sh},\bar{\theta}^{t_1})$,此时$\theta$在任务$t_1$中更好;
但 $L^2(\theta^{sh},\theta^{t_2})>L^2(\bar{\theta}^{sh},\bar{\theta}^{t_2})$ 也可能发生,$\bar{\theta}$在任务$t_2$中更好。如果不知道两个任务的重要性,那么就无法比较$\theta$和$\bar{\theta}$哪个更好。
因此将多任务学习写成多目标优化问题,选用的方式是使用一个向量$L$来表示多目标的损失:
\begin{equation}
\min_{\theta^{sh},\theta^1\cdots\theta^T}L(\theta^{sh},\theta^1\cdots\theta^T)=\min_{\theta^{sh},\theta^1\cdots\theta^T}\Bigl(L^1(\theta^{sh},\theta^1),\cdots,L^T(\theta^{sh},\theta^T)\Bigr)
\end{equation}
同样,本文使用梯度下降法来优化多目标任务,对于多目标优化问题的最优解,有以下两个定义:
- 对于所有的任务$t$,如果$L^T(\theta^{sh},\theta^T)<L^T(\bar\theta^{sh},\bar\theta^T)$,那么$\theta$优于$\bar\theta$。
- 如果没有$\theta$优于$\theta^{\star}$,那么称$\theta^{\star}$是最优解。
多梯度下降算法
文章提出的方法在multiple gradient descent algorithm (MGDA)的基础上,假设对于每一个任务,有KKT(Karush-Huhn-Tucker,是非线性规划最优解的必要条件)条件成立:
- 存在$\alpha_1\cdots,\alpha_T\geq 0$存在,使得$\sum_{i=1}^T\alpha_i=1$,$\sum_{i=1}^T\alpha_i\nabla_{\theta^{sh}}L^i(\theta^{sh},\theta^i)=0$,公式的含义是:在共享层,没有可行的下降方向,即处于全局最优点,达到了所有任务的最优解。
优化课程应该都讲过这些 - 对于任意任务$t$,$\nabla_{\theta^t}L^t(\theta^{sh},\theta^t)=0$
任意解满足以上条件就是Pareto平稳点,每一个优化解都是平稳点,反之不成立。优化问题改写为:
\begin{equation}
\min_{\alpha_1\cdots,\alpha_T}\Bigl( \Bigl| \sum_{i=1}^T\alpha^i\nabla_{\theta^{sh}}L^t(\theta^{sh},\theta^i) \Bigr|^2 \Bigl| \sum_{i=1}^T\alpha_i=1,\alpha_i\geq0 \forall i\Bigr)
\label{KKT}
\end{equation}
这个优化问题已经被证明任何一个优化解取值都是0且结果满足KKT条件;或者当前解能提供一个下降的方向来优化所有的任务。于是MTL算法将计算式\eqref{KKT}得到每一个任务的梯度,并使用$\sum_{i=1}^T\alpha^i\nabla_{\theta^{sh}}$来更新共享参数的梯度。
算法应用到大规模任务中
\eqref{KKT}中定义的优化问题等价于在输入空间的凸组合中找到最小范数。因此使用基于凸优化的一种方法来求解。
在处理一般情况之前,先处理只有两个优化目标的一般情况。此时的优化目标是一个一元二次函数:$min_{\alpha\in [0,1]}||\alpha\nabla_{\theta^{sh}} L^1+(1-\alpha)\nabla_{\theta^{sh}}L^2||_2^2$,$\alpha$的解为:
\begin{equation}
\hat\alpha=\biggl( \frac{\nabla_{\theta^{sh}}L^2-\nabla_{\theta^{sh}}L^1}{||\nabla_{\theta^{sh}}L^1-\nabla_{\theta^{sh}}L^2||^2}\nabla_{\theta^{sh}}L^2 \biggr)_+
\label{two}
\end{equation}
$[a]_+$表示$\max(\min(a,1),0)$。以\eqref{two}作为优化求解的示例,在算法2中给出了Frank-Wolfe求解大规模问题的一般化算法(见算法2):
在Encoder和Decoder结构中优化
算法2可以应用到任何基于梯度下降的优化问题中。但是对于每一个任务$t$,都需要计算$\nabla_{\theta^{sh}}L^t(\theta^{sh},\theta^t)$,而参数$\theta^{sh}$在反向传播阶段恰好是多任务共享的参数,所以在反向传播阶段需要计算$T$次。
为降低计算复杂度,提出了一种有效的方法来确定优化目标的上界,且此时的模型只需要一次反向传播。将模型的结构分为:共享的表示层函数与特定任务的决策函数。此类架构涵盖了大多数现有的MTL模型,定义为:
\begin{equation}
f^t(x;\theta^{sh},\theta^t)=f^t(g(x;\theta^{sh});\theta^t)
\end{equation}
$g$是共享的多任务表示层函数,$f^t$是第$t$个任务的决策函数,且输入为$g$的输出。如果表示层的函数输出为$[z_1,z_2,\cdots,z_n]$,$z_i=g(x_i;\theta^{sh})$,则优化问题的上界为:
\begin{equation}
\Bigl| \sum_{i=1}^T\alpha_i\nabla_{\theta^{sh}}L^t \Bigr|^2 \leq \Bigl| \frac{\partial Z}{\partial \theta^{sh}} \Bigl|^2 \Bigl| \sum_{i=1}^T\alpha_i\nabla_{Z}L^t \Bigr|_2^2
\end{equation}
$\nabla_{Z}L^t$能够在单向反向传播中计算得出,$\frac{\partial Z}{\partial \theta^{sh}}$与$\alpha$无关,不会影响到优化过程,所以在优化过程中会被移除。因此使用上界来代替优化目标:
\begin{equation}
\min_{\alpha_1,\cdots,\alpha^T}\biggl( \Big| \sum_{i=1}^T\alpha^i\nabla_{Z}L^t(\theta^{sh},\theta^i) \Big|^2 \Big| \sum_{i=1}^T\alpha_i=1,\alpha_i\geq0 \forall i \biggr)
\end{equation}
改进的模型称为MGDA-UB:Multiple Gradient Descent Algorithm – Upper Bound。使用共享表示层来代替共享参数后,模型计算复杂度将大大降低。虽然MGDA-UB是原始优化问题的一个估计,文末给出了仍然能产生Pareto最优解的证明。此时网络结构为:
能将网络结构和公式推导结合到一起,这个想法是真的可以。还是说:先想出了网络结构,而后给出了数学公式的推导和证明。
结语
这篇文章依靠数学证明等公式推导,给出了一种如何将神经网络的多任务学习转换为多目标优化的方案,读起来赏心悦目。
知识使人睿智,工程使人成长。 无论是遗传算法等启发式算法,还是牛顿迭代法、变尺度法等靠数学证明推导而来的公式,都只是求解问题的工具,但需要结合具体问题来判断哪种工具更为合适。但无论如何,知识会让人有更多的选择方案,而不是没有任何理论依据的胡乱求解,这更像是打开了新世界的大门。但想要更好的掌握优化这门学科,还需要不断的学习和阅读文献,同时必须要注重实际工程的练习,否则无法领会优化的作用与奥妙。这段很突兀的原因是,我这是直接从课程报告里面摘出来的。