Optimizing Reusable Knowledge for Continual Learning via Metalearning
Optimizing Reusable Knowledge for Continual Learning via Metalearning当网络的权重在新任务的训练过程中被覆盖,从而导致忘记旧信息时,就会发生灾难性遗忘。
为了解决这个问题,作者提出了MetA Reusable Knowledge: MARK, 它提高了权重的可重用性,而不是在学习新任务时被覆盖。
MARK在任务之间保留一组共享权重,将这些共享的权重设想为一个公共知识库(KB),它不仅用于学习新任务,而且在模型学习新任务时还会丰富新知识。
关键组成部分有两个方面:
1.元学习方法提供了用新知识逐步丰富知识库的关键机制,并促进了任务之间的权重可重用性。
2.一组可训练掩码提供了从知识库相关权重中有选择地选择来解决每个任务的关键机制。
以往预防灾难性遗忘(CF)的工作主要遵循两种策略:
1.避免修改对解决先前任务至关重要的参数。具体地说,当面对新的任务时,正则化项确保了关键参数的修改尽可能少。一般而言,该方法在任务较少的问题上表现出令人满意的性能,但是当任务数量增加时,诸如权值的累积漂移和它们之间的干扰等问题使得该方法 ...
39/40/46/47/77/78/90/60/93排列、组合、子集相关问题
39/40/46/47/77/78/90/60/93排列、组合、子集相关问题39 组合总和39. 组合总和思路分析:根据示例 1:输入: candidates = [2, 3, 6, 7],target = 7。
候选数组里有 2,如果找到了组合总和为 7 - 2 = 5 的所有组合,再在之前加上 2 ,就是 7 的所有组合;同理考虑 3,如果找到了组合总和为 7 - 3 = 4 的所有组合,再在之前加上 3 ,就是 7 的所有组合,依次这样找下去。
以 target = 7 为根节点,创建一个分支的时候做减法。
每一个箭头表示:从父亲节点的数值减去边上的数值,得到孩子节点的数值。边的值就是题目中给出的 candidate 数组的每个元素的值。
减到0或负数的时候停止,即:节点0和负数节点成为叶子节点。
所有从根节点到节点0的路径(只能从上往下,没有回路)就是题目要找的一个结果
这棵树有 4 个叶子结点的值 0,对应的路径列表是 [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]],而示例中给出的输出只有 [[7], [2, 2, 3]]。即:题目中要求每 ...
Large-scale Extensible User Intent Classification for Dialogue Systems with Meta Lifelong Learning
MeLL: Large-scale Extensible User Intent Classification for Dialogue Systems with Meta Lifelong Learning用户意图检测(UIC)对于理解他们在对话系统中的需求至关重要。(文本分类)
这是因为不同域中的用户输入可能具有不同的文本分布和目标意图集。随着底层应用程序的发展,新的UIC任务不断涌现。因此,为大规模可扩展UIC开发一个框架至关重要,该框架能够持续适应新任务,并以可接受的参数增长率避免灾难性遗忘。
作者引入Meta Lifelong Learning (MeLL) framework 解决此问题。
在MELL中,基于BERT的文本编码器被用来学习跨任务的健壮文本表示,其被缓慢更新以用于终身学习。
全局和局部记忆网络用来捕获不同类的跨任务原型表示,将其视为元学习者快速适应不同的任务。
此外,应用最近最少使用的替换策略来管理全局记忆,以使模型大小不会随时间爆炸。
最后,每个UIC任务都有自己的特定于任务的输出层,并仔细总结了各种特性。
INTRODUCTIONtask-wise UI ...
22-括号生成(回溯&深搜)
22-括号生成(回溯&深搜)22. 括号生成这一类问题是在一棵隐式的树上求解,可以用深度优先遍历,也可以用广度优先遍历。一般用深度优先遍历。原因是:
代码好写,使用递归的方法,直接借助系统栈完成状态的转移;
广度优先遍历得自己编写结点类和借助队列。
这里的「状态」是指程序执行到 隐式树 的某个结点的语言描述,在程序中用不同的 变量 加以区分。
深度优先遍历减法
画图以后,可以分析出的结论:
当前左右括号都有大于 0 个可以使用的时候,才产生分支;
产生左分支的时候,只看当前是否还有左括号可以使用;
产生右分支的时候,还受到左分支的限制,右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候,才可以产生分支;
在左边和右边剩余的括号数都等于 0 的时候结算。
1234567891011121314151617181920212223242526272829303132333435363738394041424344public class Solution { // 做减法 public List<String> generat ...
Efficient lifelong learning with A-GEM
Efficient lifelong learning with A-GEM从样本复杂度、计算和内存成本方面研究了当前终身学习方法的效率。
首先引入了一个新的、更现实的评估协议,学习者只观察每个例子一次,超参数选择是在一个小的、不相交的任务集上完成的,不用于实际的学习体验和评估 .
其次,引入了一个新的度量标准来衡量学习者获得一项新技能的速度。
第三,提出了 GEM 的改进版本,称为平均 GEM (A-GEM),它具有与 GEM 相同甚至更好的性能,同时在计算和内存效率方面几乎与 EWC 和其他基于正则化的方法一样。
最后,包括A-GEM在内的所有算法,如果提供指定所考虑的分类任务的任务描述符,则可以更快地学习。
Learning protocol一种新的学习范式,即学习者对一组与实际用于评估的任务集不相交的任务进行交叉验证。在这种情况下,学习者将必须学习并将在一个全新的任务序列上进行测试,并且它将仅在该数据流上执行一次。
以前关于终身学习的工作采用直接从监督学习中借用的学习范式。 有 T 个任务,每个任务由训练集、验证集和测试集组成。 在训练期间,学习者根据需要对每个任务的数据进行尽 ...
14-最长公共前缀(二分、分治)
14-最长公共前缀(二分、分治)14. 最长公共前缀法一:横向扫描用 $LCP(S_1,…,S_n)$ 表示字符串 $S_1,…,S_n$的最长公共前缀,可得
LCP(S_1,...,S_n) = LCP(LCP (LCP(S_1,S_2), S_3),...,S_n)基于该结论可得到一种查找字符串数组中的最长前缀的简单方法。依次遍历字符串中的每个字符串。对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。
如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历
1234567891011121314151617181920212223242526272829class Solution { public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length==0){ return ""; ...
凸优化一
凸优化一从一个可行解的集合中,寻找出最优的元素
任何一个优化问题都可以写成这个形式:
minimize
Gradient Episodic Memory for Continual Learning
Gradient Episodic Memory for Continual Learning人工智能的一个主要障碍是模型在不忘记先前获得的知识的情况下,更快地解决新问题的能力很差。
首先,提出了一套度量标准来评估在数据连续体上学习的模型。这些度量不仅通过它们的测试准确性来表征模型,而且还根据它们在任务之间传输知识的能力来表征模型。
其次,提出了一个持续学习的模型,称为梯度情节记忆(GEM),它可以减轻遗忘,同时允许知识有益地转移到以前的任务中。
Intro有监督学习的设置 $D{tr} = {(x_i,y_i)}{i=1}^n$ , 其中每个示例 $(x_i,y_i)$ 由特征向量 $x_i\in X$ 和目标向量 $y_i\in Y$组成。
大多数监督学习方法假设每个示例 $(x_i,y_i)$ 是来自描述单个学习任务的固定概率分布 $P$ 的独立同分布(IID)样本。目标是构造一个模型 $f:X \rightarrow Y$ ,用于预测目标向量 $y$ 与未见的特征向量 $x$ ,其中$(x,y) \sim P$
为了实现这一点,监督学习方法通常采用 经验风险最小化 (ERM) ...
12,13-整数互换罗马数字
12,13-整数互换罗马数字12. 整数转罗马数字123456789101112131415161718class Solution { public String intToRoman(int num) { int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] rom={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; StringBuilder sb=new StringBuilder(); for(int i=0;i<values.len ...
10-正则表达式
10-正则表达式10. 正则表达式匹配定义状态
定义动态数组$dp[m][n]$ (n为字符串p的长度+1,m为字符串s的长度+1)
为什么要加1
因为我们还要处理空字符串的情况,比如p为空,s为空,或者p为空,s不为空
$dp[m][n]$ 的含义:p的前$n-1$ 个字符能否匹配s的前$m-1$个字符
为什么是n-1和m-1?
因为动态数组里面加了一列和一行空字符的匹配情况,故需要-1才能对应相应字符串
因此创建好的dp数组如下图:
确定动态转移方程说明:为了区别dp数组与字符串索引的区别(因为相差1),我们设 $i=r-1,j=c-1$ (r为dp里面的行索引,c为dp里面的列索引)
有以下几种情况是需要我们处理的:
当 $s[i]=p[j] \ || \ p[j]==’.’$ (即正好能够匹配或者相对应的是一个 $.$)
那么我们只需要看一下前面 $dp[r-1][c-1]$的状态,$dp[r][c]$继续延续即可
即状态转移方程为 $dp[r][c]=dp[r-1][c-1]$
当 $p[j] ==’‘$ (即匹配到了万能字符 $$)
两种情况分别对 ...