-
2018-05-10 18:24:55
Linux 是一个多用户、多任务的操作系统,我们应该了解单用户多任务和多用户多任务的概念。
单用户多任务:
比如我们以beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,所以又打开xmms 来点音乐;当然听点音乐还不行,MSN 还得打开,想知道几个弟兄现在正在做什么,这样一样,我在用beinan 用户登录时,执行了gedit 、xmms以及msn等,当然还有输入法fcitx ;这样说来就有点简单了,一个beinan用户,为了完成工作,执行了几个任务;当然beinan这个用户,其它的人还能以远程登录过来,也能做其它的工作。
多用户多任务:
有时可能是很多用户同时用同一个系统,但并不所有的用户都一定都要做同一件事,所以这就有多用户多任务之说。
举个例子,比如LinuxSir.Org 服务器,上面有FTP 用户、系统管理员、web 用户、常规普通用户等,在同一时刻,可能有的弟兄正在访问论坛;有的可能在上传软件包管理子站,比如luma 或Yuking 兄在管理他们的主页系统和FTP ;在与此同时,可能还会有系统管理员在维护系统;浏览主页的用的是nobody 用户,大家都用同一个,而上传软件包用的是FTP用户;管理员的对系统的维护或查看,可能用的是普通帐号或超级权限root帐号;不同用户所具有的权限也不同,要完成不同的任务得需要不同的用户,也可以说不同的用户,可能完成的工作也不一样。
值得注意的是:多用户多任务并不是大家同时挤到一接在一台机器的的键盘和显示器前来操作机器,多用户可能通过远程登录来进行,比如对服务器的远程控制,只要有用户权限任何人都是可以上去操作或访问的。
用户的角色区分:
用户在系统中是分角色的,在Linux 系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;
root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;
多用户操作系统的安全:
多用户系统从事实来说对系统管理更为方便。从安全角度来说,多用户管理的系统更为安全,比如beinan用户下的某个文件不想让其它用户看到,只是设置一下文件的权限,只有beinan一个用户可读可写可编辑就行了,这样一来只有beinan一个用户可以对其私有文件进行操作,Linux 在多用户下表现最佳,Linux能很好的保护每个用户的安全,但我们也得学会Linux 才是,再安全的系统,如果没有安全意识的管理员或管理技术,这样的系统也不是安全的。
从服务器角度来说,多用户的下的系统安全性也是最为重要的,我们常用的Windows 操作系统,它在系纺权限管理的能力只能说是一般般,根本没有没有办法和Linux或Unix 类系统相比;
用户(user)的概念:
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;
当然用户(user)的概念理解还不仅仅于此,在Linux系统中还有一些用户是用来完成特定任务的,比如nobody和ftp 等,我们访问LinuxSir.Org 的网页程序,就是nobody用户;我们匿名访问ftp 时,会用到用户ftp或nobody ;如果您想了解Linux系统的一些帐号,请查看 /etc/passwd ;
用户组(group)的概念:
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;
举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的;
用户和用户组的对应关系是: 一对一、多对一、一对多或多对多;
一对一:某个用户可以是某个组的唯一成员;
多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;
多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;
更多相关内容 -
java定时执行多任务和quartz定时执行多任务
2012-12-04 17:18:55java定时执行多任务和quartz定时执行多任务 -
深度学习中的多任务学习介绍
2021-03-27 15:11:22在2017年有一篇关于在深度神经网络中多任务学习概述的论文:《An Overview of Multi-Task Learning in Deep Neural Networks》,论文链接为:https://arxiv.org/pdf/1706.05098.pdf,它介绍了在深度学习中多任务学习...在2017年有一篇关于在深度神经网络中多任务学习概述的论文:《An Overview of Multi-Task Learning in Deep Neural Networks》,论文链接为:https://arxiv.org/pdf/1706.05098.pdf,它介绍了在深度学习中多任务学习(Multi-task Learning, MTL)的两种最常用的方法。以下截图均来自此论文。
传统的机器学习方法主要是基于单任务的学习(Single-task Learning)模式进行学习,对于复杂的学习任务也可将其分解为多个独立的单任务进行学习,然后对学习得到的解决进行组合,得到最终的结果。
多任务学习的关键就在于寻找任务之间的关系,如果任务之间的关系衡量恰当,那么不同任务之间就能相互提供额外的有用信息,利用这些额外信息,可以训练出表现更好、更鲁棒的模型。反之,如果关系衡量不恰当,不仅不会引入额外的信息,反而会给任务本身引来噪声,模型学习效果不升反降。当单个任务的训练数据集不充分的时候,此时多任务学习的效果能够有比较明显的提升,这主要是因为单个任务无法通过自身的训练数据集得到关于数据分布的足够信息。如果有多个任务联合学习,那么这些任务将能从相关联的任务中得到额外的信息,因此学习效果将有显著的提升。目前,多任务学习已经在多个领域得到广泛的应用,比如人脸属性的相关研究、人类疾病的研究、无人驾驶的研究等。
多任务学习是机器学习的一个重要组成部分,是迁移学习的一种。多任务学习作为迁移学习的一个分支有着其自己独特的学习背景和应用。在给定几个相关联任务的输入数据和输出数据的情况下,多任务学习能够发挥任务之问的关系,同时学习多个模型。与单任务学习相比,主要有以下几个方面的优势:A.多任务学习通过挖掘任务之间的关系,能够得到额外的有用信息,大部分情况下都要比单任务学习的效果要好。在有标签样本比较少的情况下,单任务学习模型往往不能够学习得到足够的信息,表现较差,多任务学习能克服当前任务样本较少的缺点,从其他任务里获取有用信息,学习得到效果更好、更鲁棒的机器学习模型。B.多任务学习有更好的模型泛化能力,通过同时学习多个相关的任务,得到的共享模型能够直接应用到将来的某个相关联的任务上。相比于单任务学习,上面的优点使得多任务学习在很多情况下都是更好的选择。现实生活中有很多适合多任务学习的场景,以下举例说明(1).自然语言处理相关的研究,比如把词性标注、句子句法成分划分、命名实体识别、语义角色标注等任务放在一起研究。(2).人脸识别中,人脸的属性的研究、人脸识别、人脸年龄预测等任务也可以通过多任务学习进行解决。(3).图像分类,不同光照下、拍摄角度、拍摄背景下等分类任务的研究,也可以在多任务研究的框架下完成。除了上述举例的三种不同应用之外,现实生活中还有很多类似的多任务学习的例子。
深度学习中的两种MTL方法:
(1).基于硬约束的多任务学习方法,如下图所示:表示的是不同任务通过分享一些底部的层学习一些共有的低层次的特征,为了保证任务的独特性,每个任务在顶部拥有自己独特的层学习高层次的特征。这种方法底层共享的参数是完全相同的。
多个任务之间共享网络的同几层隐藏层,只不过在网络的靠近输出层的网络开始分叉去做不同的任务。不同任务通过共享网络底部的几层隐藏层来学习一些共有的抽象层次低的特征,这种方法的底层共享的参数是完全相同的。同时针对各个任务的特点,各个任务都设计各自的任务特有层来学习抽象层次更高的特征。所有任务在保留任务特有的输出层的同时可以共享一些相关的隐藏层。这种多任务学习的方法通过平均噪声能有效地降低过拟合的风险。而且相关的任务越多,目标任务的过拟合风险越小。
(2).基于软约束的多任务学习方法,如下图所示:该方法不要求底部的参数完全一样,而是对不同任务底部的参数进行正则化。相对于硬参数约束的多任务深度学习模型,软约束的多任务学习模型的约束更加宽松,当任务关系不是特别紧密的时候,有可能学习得到更好的结果。多任务深度学习模型需要同时学习一个适合多个任务的网络构架,一般来说模型具有更好的鲁棒性,不容易过拟合。
软约束的多任务学习方法是隐藏层参数软共享,不同的任务使用不同的网络,但是不同任务的网络参数,采用正则化作为约束,与硬约束的多任务学习不同的是,底层的参数不一定完全一致,而是鼓励参数相似化。
为什么多任务学习有效:假定有两个相关的任务A和B,它们依赖共享隐藏层。
(1).隐式数据扩充(Implicit data augmentation):MTL有效地增加了我们用于训练模型的样本量。由于所有任务或多或少存在一些噪音,因此在针对某个任务A训练模型时,我们的目标是得到任务A的一个好的表示,忽略与数据相关的噪声。由于不同的任务具有不同的噪声模式,因此同时学习两个任务的模型可以得到一个更为泛化的表示。如果仅学习任务A要承担对任务A过拟合的风险,然而同时学习任务A和任务B则可以对噪声模式进行平均,可以使模型获得更好的表示。
(2).注意力机制(Attention focusing):如果一个任务非常嘈杂或数据量有限且维数很高,则模型很难区分相关和不相关特征。MTL可以帮助模型将注意力集中在重要的特征上,因为其他任务将为这些特征的相关性或不相关性提供更多证据。
(3).窃听(Eavesdropping):一些特征G很容易被任务B学习,但是对于其他任务A则很难学习。这可能是因为A以更复杂的方式与特征进行交互,或者是因为其他特征阻碍了模型学习G的能力。通过MTL,我们可以允许模型进行”窃听”,即通过任务B学习G。最简单的方法是通过”提示”,即直接训练模型来预测最重要的特征。
(4).表征偏置(Representation bias):MTL biases the model to prefer representations that other tasks also prefer。这也将有助于该模型将来泛化到新任务,因为在足够多的训练任务上表现良好的假设空间,只要它们来自相同环境,对于学习新任务也将表现良好。
(5).正则化(Regularization):MTL通过引入归纳偏置(inductive bias)作为正则化项。因此,它降低了过拟合的风险以及模型的Rademacher复杂度,即拟合随机噪声的能力。
深度学习中的MTL:
(1). Deep Relation Networks:如下图所示:计算机视觉中,MTL通常共享卷积层,同时用全连接层学习特定的任务。通过对任务层设定先验,使模型学习任务间的关系。
(2). Fully-Adaptive Feature Sharing:如下图所示:一种自下而上的方法,从瘦网络开始,贪心地动态加宽网络。贪心方法可能无法做到全局最优。
(3). Cross-stitch Networks:如下图所示:用软约束的方式将两个独立的网络连接起来,然后使用”cross-stitch units”允许模型通过线性组合学习前一层的输出。
(4). Low supervision:主要应用在自然语言处理(Natural Language Processing, NLP)中,如词性标注、命名体识别等。
(5). A Joint Many-Task Model:如下图所示:由多个NLP任务组成分层结构,然后将其作为多任务学习的联合模型。
(6). Weighting losses with uncertainty:如下图所示:不考虑学习共享结构,采用正交方法考虑每个任务的不确定性。通过基于具有任务相关不确定性的高斯似然性最大化得出多任务损失函数(loss function),来调整成本函数(cost function)中每个任务的相对权重。
(7). Tensor factorisation for MTL:对模型中的每层参数使用张量分解分为共享参数和特定于任务的参数。
(8). Sluice Networks:如下图所示:该模型概况了基于深度学习的MTL方法:hard parameter sharing + cross-stitch networks + block-sparse regularization + task hierarchy(NLP)
在迁移学习中,你的步骤是串行的,你从任务A中学到的,然后迁移到任务B。在多任务学习中,你是开始学习试图让一个神经网络同时做几件事情,然后希望这里的每个任务都能帮到其它所有任务。例如,在研发无人驾驶车辆,如下图,那么你的无人驾驶车可能需要同时检测不同的物体,比如检测行人、车辆、停车标志、交通灯等其它物体,输入图像x,输出将不是一个标签,而是四个标签,因为四个物体可能同时出现在一张图里。那么你现在可以做的是训练一个神经网络来预测这些y值。另外你也可以训练四个不同的神经网络,而不是训练一个神经网络做四件事,但神经网络一些早期特征在识别不同物体时都会用到,你会发现,训练一个神经网络做四件事会比训练四个完全独立的神经网络分别做四件事性能会更好,这就是多任务学习的力量。
多任务学习什么时候有意义:第一,如果你训练的一组任务,可以共用低层次特征;第二,每个任务的数据量很接近;第三,可以训练一个足够大的神经网络同时可以做好所有的工作。多任务学习的替代方法是为每个任务训练一个单独的神经网络。多任务学习会降低性能的唯一情况就是你的神经网络还不够大。
注:以上所有的内容的整理均来自网络,主要参考:
1. https://arxiv.org/pdf/1706.05098.pdf
2. 《多任务学习的研究》,2018,博论,中国科学技术大学
-
多任务进化优化算法(一)——多因子进化算法(MFEA)
2019-10-25 19:09:21最近看了很多关于多任务优化的文章,觉得这是一个蛮有意思的方向,想把里面最经典的两个方法介绍给大家,今天先介绍第一个MFEA,这个方向有一个平台,这里面有原作者的代码及最新的出版物,感兴...闲话:由于前段时间一直忙着写论文,所以很久没有更新了,之前的多目标优化系列我也不打算更新了,因为田野老师的PlatEMO真的很好用,代码也很规范,刚入门的同学们,我很建议你们去看看PlatEMO的源代码,会大有益处。最近看了很多关于多任务优化的文章,觉得这是一个蛮有意思的方向,想把里面最经典的两个方法介绍给大家,今天先介绍第一个MFEA,这个方向有一个平台,这里面有原作者的代码及最新的出版物,感兴趣的同学可以看看:http://www.bdsc.site/websites/MTO/index.html。
一、简介
多任务优化是研究同时解决多个优化问题(任务)从而独立的提高解决每个任务的性能。它的工作原理是假设在解决某个任务时存在一些共同的有用知识,那么在解决此任务的过程中获得的有用知识,可能有助于解决另一个与其有关联的任务。在实际应用中,相关的优化任务是普遍存在的。实际上,其充分利用了基于种群搜索的隐式并行性。
事实上,一个进化多目标优化(EMOO)问题只包含一个任务,该任务可以被求解生成一组Pareto最优解。与此相对,进化多任务优化(EMTO)问题包含多个任务(单目标或多目标),可以同时求解这些任务的最优解。EMTO的目标是利用基于种群的搜索的隐式并行性来挖掘多个任务之间潜在的遗传互补性,EMOO则试图有效地解决同一任务的竞争目标之间的冲突。
给定一个带有k个分量任务的MTO问题,在不失一般性的前提下,我们假设所有组件任务都是单目标、无约束的最小化问题。第j个子任务定义为 T j T_j Tj,其对应的目标函数为 f j : X j → R f_j:X_j\rightarrow R fj:Xj→R,这里 X j X_j Xj是一个 D j D_j Dj维的解空间, R R R代表实数域,*:*MTO的目标是为每个k分量任务找到全局最优值,即
x j o = a r g m i n x ∈ X j f j ( x ) , j = 1 , . . . , k x_j^o=argmin_{x\in X_j}f_j(x),j=1,...,k xjo=argminx∈Xjfj(x),j=1,...,k
注意,如果对其中特定任务的解空间施加了某些约束,则会将一些约束函数与该任务的目标函数一起考虑。此外,如果组件任务的目标函数是多目标的,MTO将解决多个多目标优化(MOO)问题。 为了说明多目标优化和多任务优化的区别,以下以一个例子说明二者的区别,考虑一个两因素的问题,如图1所示。
图1 两因素空间 在多目标优化中, { p 2 , p 3 , p 4 , p 5 } \left\{p_2,p_3,p_4,p_5\right\} {p2,p3,p4,p5}是第一等级的非支配前沿, { p 1 , p 6 } \left\{p_1,p_6\right\} {p1,p6}是第二等级的非支配前沿;而在多任务优化中, { p 1 , p 2 , p 5 , p 6 } > > { p 3 , p 4 } \left\{p_1,p_2,p_5,p_6\right\}>>\left\{p_3,p_4\right\} {p1,p2,p5,p6}>>{p3,p4},即在多任务优化中, { p 1 , p 2 , p 5 , p 6 } \left\{p_1,p_2,p_5,p_6\right\} {p1,p2,p5,p6}是不可比较的,因此在个体的评价上,EMOO和EMTO有很大的区别。
二、多因子进化算法(MFEA,MULTIFACTORIAL EVOLUTIONARY ALGORITHM)
2.1 定义
MFEA创造了一个多任务的环境,进化出一个单一的个体群体来同时解决多个任务,其中每个任务(有自己的目标)作为一个独特的文化因素来影响群体的进化。不同的任务可能具有不同的属性,因此可能导致个体的不同表示。因此,需要一种统一的表示方法,使所有任务的解空间可以方便地编码为相同的表示方法,以便搜索,并将其解码为唯一的表示方法,以便求值。MFEA提出了一种统一的表示方案,其中每个变量都由0和1之间的随机密钥编码,从而实现了对这种通用性的追求。
给出了一个由k个分量任务组成的MTO问题,MFEA产生n个个体的单个种群,即 p o p = { p i } i = 1 n pop=\left\{ p_i\right\}^n_{i=1} pop={pi}i=1n,其同时搜索每个k分量任务的全局最优解。
定义1(Factorial Cost):个体 p i p_i pi在任务 T j T_j Tj上的因子代价 Ψ i j \Psi_i^j Ψij定义为 Ψ i j = λ ⋅ δ i j + f i j \Psi_i^j=\lambda \cdot \delta^j_i+f_i^j Ψij=λ⋅δij+fij,这里 λ \lambda λ是一个惩罚因子,并且 δ i j \delta^j_i δij和 f i j f_i^j fij定义为个体 p i p_i pi在任务 T j T_j Tj上约束违反总数和目标函数值。
定义2(Factorial Rank):个体 p i p_i pi在任务 T j T_j Tj上的因子等级 r i j r_i^j rij定义为按照因子代价升序排序之后的种群列表里$p_i $的索引。当多个个体具有相同的因子代价时,采用random tie-breaking方法。
定义3(Scalar Fitness):个体 p i p_i pi的标量适应度 φ i \varphi _i φi定义为 φ i = 1 / m i n j ∈ { 1 , . . . , k } { r i j } \varphi _i=1/min_{j\in \left\{1,...,k\right\}}\left\{ r_i^j \right\} φi=1/minj∈{1,...,k}{rij}。
定义4(Skill Factor):个体 p i p_i pi的技能因素 τ i \tau_i τi定义为个人在所有任务中表现出最高能力的任务的索引,即 τ i = a r g m i n j ∈ { 1 , . . . , k } { r i j } \tau _i=argmin_{j\in \left\{1,...,k\right\}}\left\{ r_i^j \right\} τi=argminj∈{1,...,k}{rij}。
定义5(Multifactorial Optimality):当且仅当个体$p^o $是所有k个组件任务中的全局最优值。,那么称其是多因素最优的。
2.2 思想
MFEA利用群体成员的技能因素隐式地将群体划分为k个不重叠的任务组,每个组专注于一个特定的任务,该任务由所有相同技能因素的成员组成。在此基础上,通过两个算法模块实现了知识转移——选择性交配(assortative mating)和选择性模仿(selective imitation),它们协同运作从而允许知识转移到不同的任务组。具体来说,选择性交配允许两个具有不同技能因素的个体(因此属于不同的任务组)在一定的概率下(通过交叉操作)交配,该概率由算法参数 r m p rmp rmp控制,产生两个后代。然后,每一个产生的后代通过继承父母的技能因素来模仿父母中的任何一方,并仅仅对与继承的技能因素相对应的任务进行评估,这就是选择性模仿的作用。其次,每个继承技能因素的子代都与任务组的现有成员竞争以进入该任务组。通过利用这两个算法模块,MFEA可以从父母和后代两个方面控制跨任务的知识转移。MFEA的算法结构如下:
1.生成初始个体种群并将其存储在current-pop (P)中; 2.根据多任务环境中的每个优化任务对每个个体进行评估; 3.计算每个人的技能因素; 4.while (停止条件不满足) do a.在current-pop(P)上使用遗传算子生成offspring-pop(C),参见算法1; b.仅在选定的优化任务上评估offspring-pop(C)中的个体,参见算法2; c.合并P和C,组成一个新种群intermediate-pop(P∪C); d.更新P∪C中的每个个体的标量适应度( )和技能因素( ); e. 从P∪C中选择适应度最高的个体,组成下一个current-pop(P); 5.end while
其matlab代码如下:
% 本程序主要实现了进化多任务优化、优化函数为最小化函数、最大化函数需要转化为最小化函数 % 有任何问题可以联系我的邮箱: wangchao(Email: xiaofengxd@126.com) clc,clear tic %% 参数设置 global N gen N = 30; % 种群大小(设置为偶数) rmp = 0.3; % 随机交配池概率 pi_l = 1; % 个体学习的概率(BFGA quasi-Newton Algorithm) Pc = 1; % 模拟二进制交叉概率 mu = 10; % 模拟二进制交叉参数(可调) sigma = 0.02; % 高斯变异模型的标准差(可调) gen = 100; %迭代次数 selection_process = 'roulette wheel'; % 可供选择:elitist、roulette wheel、Tournament name = 'RastriginRastrigin'; % 测试任务选择有:RastriginAckley、SphereWeierstrass、RastriginAckleySphere、RastriginRastrigin、AckleyAckley options = optimoptions(@fminunc,'Display','off','Algorithm','quasi-newton','MaxIter',5); %调用matlab函数优化器(拟牛顿法)->设置预学习优化器 %% 初始化任务 Task = TASK(); Task = initTASK(Task,name); %% MFEA %%% 0.记录最优解的矩阵 EvBestFitness = zeros(gen+1,Task.M); %每代最好的适应度值 TotalEvaluations=zeros(gen+1,1); %每代每个个体评价次数 %%% 1.初始化种群 Population = INDIVIDUAL(); %生成初始种群 Population = initPOP(Population,N,Task.D_multitask,Task.M); %%% 2.根据多任务环境中的每个优化任务评估每个个体的因子代价 [Population,TotalEvaluations(1)] = evaluate(Population,Task,pi_l,options); %%% 3.计算初始化种群的因素等级以及技能因素 [Population,EvBestFitness(1,:),bestind] = Calfactor(Population); %%% 4.优化过程 for i = 1:gen %4.1 个体变异交叉 Offspring = GA(Population,rmp,Pc,mu,sigma); %4.2 计算因子代价 [Offspring,TotalEvaluations(i+1)] = evaluate(Offspring,Task,pi_l,options); TotalEvaluations(i+1) = TotalEvaluations(i+1) + TotalEvaluations(i); %4.3 种群合并 intpopulation = combpop(Population,Offspring); %4.4 更新标量适应度,技能因素,因素等级 [intpopulation,EvBestFitness(i+1,:),bestind] = Calfactor(intpopulation); %4.5 环境选择 Population = EnvironmentalSelection(intpopulation,selection_process,N,Task.M); disp(['MFEA Generation = ', num2str(i), ' EvBestFitness = ', num2str(EvBestFitness(i+1,:))]);%为了记录初始化的值所以次数+1 end %% 记录算法结果 data_MFEA.wall_clock_time=toc; data_MFEA.EvBestFitness=EvBestFitness; data_MFEA.bestInd_data=bestind; data_MFEA.TotalEvaluations=TotalEvaluations; save(['Data\','data.mat'],'data_MFEA'); %% 画图 for i=1:Task.M figure(i) hold on plot(EvBestFitness(:,i)); xlabel('GENERATIONS'); ylabel(['TASK ', num2str(i), ' OBJECTIVE']); saveas(gcf,['Data\figure_Task',num2str(i),'.jpg']); end
2.3 流程
2.3.1 种群初始化
假设同时执行K个优化任务,第j个任务的维数由 D j D_j Dj给出。因此,我们定义了一个具有维数的统一搜索空间( D m u l t i t a s k = m a x j D j D_{multitask}=max_jD_j Dmultitask=maxjDj)。在种群初始化步骤中,每个个体都被赋予了一个由 D m u l t i t a s k D_{multitask} Dmultitask随机变量组成的向量(每个变量都位于固定范围内 [ 0 , 1 ] [0,1] [0,1])。这个向量构成染色体(完整的遗传物质)。本质上,统一搜索空间的第i维由一个随机的key值 y i y_i yi表示并且固定范围代表了统一空间的box-constraint。当处理任务$T_j 时 , 我 们 简 单 的 引 用 染 色 体 的 第 一 个 时,我们简单的引用染色体的第一个 时,我们简单的引用染色体的第一个D_j $的随机key。这样设计的主要原因为
1)从实用的角度来看,当同时解决多个具有多维搜索空间的任务时,它有助于规避与维数诅咒相关的挑战。
2)从理论上讲,它被认为是一种有效的基于种群的搜索功能的访问方法。其以一种有效的方式发现和隐式地将有用的遗传物质从一项任务转移到另一项任务。此外,由于群体中的单个个体可能会继承多个优化任务对应的遗传构建块,因此将其与多因子遗传进行类比就更有意义了。
其matlab代码如下:classdef INDIVIDUAL %此类代表一个种群,由五个矩阵组成:染色体、因素代价、因素等级、标量适应度、技能因素,横—种群大小,纵—维度/任务数 %种群需要由initPOP初始化,评价种群个体时需要evaluate函数 properties rnvec; % (genotype)--> decode to find design variables --> (phenotype) factorial_costs;%因素代价 factorial_ranks;%因素等级 scalar_fitness;%标量适应度 skill_factor;%技能因素 end methods function object = initPOP(object,N,D,MM) object.rnvec = rand(N,D);%初始化个体编码 object.factorial_costs = inf*ones(N,MM);%初始化个体因素代价为0 object.factorial_ranks = zeros(N,MM);%初始化个体因素等级为0 object.scalar_fitness = zeros(N,1);%初始化个体标量适应度为0 object.skill_factor = zeros(N,1);%初始化个体的技能因子为0 end function [object,call] = evaluate(object,Task,pi_l,options)%适应度评价 object.factorial_costs(:)=inf; call = 0; for i = 1:Task.M [object.factorial_costs(:,i),object.rnvec,calls]=CalObj(Task,object.rnvec,pi_l,options,i,object.skill_factor); call = call + calls; end end end end
2.3.2 遗传机制
MFEA的一个关键特征是,两个随机选择的亲本候选人必须满足一定的条件才能进行交叉。遵循的原则是非随机或assortative mating,它表明个体更喜欢与那些相同的文化背景的交配。MFEA里技能因素( τ \tau τ)代表个体的文化偏见。因此,两个随机选择的父母候选人可以自由地进行交叉,如果他们拥有相同的技能因素。相反,如果他们的技能因素不同,在一个规定的随机交配概率( r m p rmp rmp)或其他突变方式进行交叉。此算法中使用参数 r m p rmp rmp来平衡搜索空间的开销和探索。接近0的 r m p rmp rmp值意味着只有在文化上相似的个体才允许跨界,而接近1的值则允许完全随机交配,实际上在rmp更大的值(接近1)下发生的跨文化交配增加了对整个搜索空间的探索,从而有助于逃离局部优化,因此 r m p rmp rmp是个至关重要的参数。算法2提供了根据这些规则创建后代的步骤。
1.考虑从current-pop中随机选择的两个父候选pa和pb; 2. 生成一个介于0和1之间的随机数rand; 3. if ( == ) or (rand < rmp) then a. 父母pa和pb交叉得到两个后代个体ca和cb。; 4.else a. 亲本pa发生了轻微的突变,从而产生了后代ca; b. 亲本pb发生了轻微的突变,产生了一个子代cb; 5.end if
其matlab代码如下:
function Offspring = GA(Parent,rmp,Pc,disC,sigma) % 此函数功能是通过模拟二进制交叉和高斯变异产生子代,并利用垂直文化传播进行技能因子的继承(两两组成的父代个体,必须进行交叉或者变异)。 % Input: Parent父代信息(染色体,技能因子)、rmp文化交流参数、Pc模拟二进制交叉概率、disC交叉参数、sigma高斯变异参数 % Output: Offspring子代信息(染色体,技能因子) % 第“1.”模式中,通过变异产生的两个后代可能具有相同的父母;第“2.”模式中,通过变异产生的两个后代父母一定不同 [N,~] = size(Parent.rnvec); select = randperm(N); rrnvec = Parent.rnvec(select,:);%打乱顺序 sskill_factor = Parent.skill_factor(select,:); Parent1 = rrnvec(1:floor(end/2),:); factor1 = sskill_factor(1:floor(end/2),:); Parent2 = rrnvec(floor(end/2)+1:floor(end/2)*2,:); factor2 = sskill_factor(floor(end/2)+1:floor(end/2)*2,:); Offspring = INDIVIDUAL(); %Offspring.skill_factor = zeros(N,1);%1.初始化子代的技能因子为0 Offspring.skill_factor = sskill_factor;%2.初始化子代的技能因子对应为父代的技能因子 factorb1 = repmat(1:N/2,1,2); factorb2 = repmat(N/2+1:N,1,2); temp = randi(2,1,N);%对于子代随机选择它是继承第一个父母还是第二个父母 offactor = zeros(1,N); offactor(temp == 1) = factorb1(temp == 1); offactor(temp == 2) = factorb2(temp == 2);%子代继承父母的编号 %Offspring.skill_factor = sskill_factor(offactor);%1.所有子代继承父代基因 [NN,D] = size(Parent1); % Simulated binary crossover beta = zeros(NN,D); mu = rand(NN,D); beta(mu<=0.5) = (2*mu(mu<=0.5)).^(1/(disC+1)); beta(mu>0.5) = (2-2*mu(mu>0.5)).^(-1/(disC+1)); % beta = beta.*(-1).^randi([0,1],N,D); % beta(rand(N,D)<0.5) = 1; beta(repmat(factor1 ~= factor2 & rand(NN,1)>=rmp,1,D)) = 1;%不同技能因子的个体只有满足rmp才能交叉 beta(repmat(rand(NN,1)>=Pc,1,D)) = 1; Offspring.rnvec = [(Parent1+Parent2)/2+beta.*(Parent1-Parent2)/2 (Parent1+Parent2)/2-beta.*(Parent1-Parent2)/2]; Offspring.skill_factor(repmat(beta(:,1) ~= 1,2,1)) = sskill_factor(offactor(repmat(beta(:,1) ~= 1,2,1)));%2.对于交叉的个体,其随机选择一个父代继承基因。 % mutation rvec=normrnd(0,sigma,[N,D]); % temp1 = Offspring.rnvec(offactor,:);1. % Offspring.rnvec(repmat(beta(:,1) == 1,2,D)) = temp1(repmat(beta(:,1) == 1,2,D)) + rvec(repmat(beta(:,1) == 1,2,D));%1.只对没有交叉的个体进行变异 Offspring.rnvec(repmat(beta(:,1) == 1,2,D)) = Offspring.rnvec(repmat(beta(:,1) == 1,2,D)) + rvec(repmat(beta(:,1) == 1,2,D));%2.只对没有交叉的个体进行变异 Offspring.rnvec(Offspring.rnvec>1)=1; Offspring.rnvec(Offspring.rnvec<0)=0; end
2.3.3 选择性评价
在评价第 i i i个个体的第 j j j个任务时,第一步是先将染色体的键值解码成有实际意义的输入。也就是说,随机键值表示作为一个统一的搜索空间,从这个空间可以推导出属于问题解的表示。对于连续优化而言,假设第 i i i维变量的 x i x_i xi的边界为 L i , U i L_i,U_i Li,Ui,此个体的键值为 y i y_i yi,那么 x i = L i + ( U i − L i ) ∗ y i x_i=L_i+(U_i-L_i)*y_i xi=Li+(Ui−Li)∗yi。在离散优化的情况下,染色体解码方案通常是依赖于问题本身。
如果对每个个体的每个任务都进行评估,显然计算量会很大,因此为了使MFO更实用,MFEA必须设计的高效。易知,一个个体很难在所有任务上都表现的出色,因此,理想情况下,可以只针对最有可能出色执行的任务对个人进行评估,算法3给出这一观点的具体实施措施,它允许后代模仿任何一个父母的技能因素(文化特征),这种方式大大减少了评估次数。
一个子代c要么有两个父代(pa和pb)要么只有一个父代(pa或pb)——参见算法1; 1. if (‘c’ 有两个父代) then a.生成一个介于0和1之间的随机数rand; b. if (rand<0.5) then “c”模仿pa,且子代只在任务 (pa的技能因素)上评估; c. else “c”模仿pb,且子代只在任务 (pb的技能因素)上评估; d. end if 2.else a. “c”模仿其唯一的父代,且子代只在其父代技能因素对应的任务上评估; 3.end if
2.3.4 遗传算子
为了确保算法收敛并且保留每代优秀的解,MFEA采用精英保留策略。交叉算子选择模拟二进制交叉(SBX),变异算子选择高斯变异。
在多任务算法中,从直觉上看随机产生的或经过基因改造的个体更有可能胜任至少一项任务。MFEA的机制建立在这一观察的基础上,它将人群有效地划分为不同的技能组,每个人都擅长于不同的任务。更好玩的是在一个特定群体中产生的遗传物质也可能对另一项任务有用。因此跨任务的遗传转移可能会潜在的导致很难找到全局最优。在MFEA中,通过偶尔的染色体交叉,允许不同的技能群体相互交流,从而促进遗传物质的转移。因此MFEA主要利用了群体的相互交流以及文化的垂直传播,即 r m p rmp rmp操作和后代模仿父母的技能因素。三、实验
在设计的实验中,每一个任务都是一个待解决的优化问题,通过数值实验说明了MFEA的有效性。
3.1 目标任务函数
1.Sphere函数
∑ i = 1 D x i 2 \sum_{i=1}^Dx^2_i i=1∑Dxi2
2.Ackley函数
20 + e − 20 e − 0.2 1 D ∑ i = 1 D z i 2 − e 1 D ∑ i = 1 D c o s ( 2 π z i ) ; z = M R × ( x − O A ) 20+e-20e^{-0.2\sqrt{\frac{1}{D}\sum_{i=1}^Dz_i^2}}-e^{\frac{1}{D}\sum_{i=1}^Dcos(2\pi z_i)};z=M_R\times(x-O_A) 20+e−20e−0.2D1∑i=1Dzi2−eD1∑i=1Dcos(2πzi);z=MR×(x−OA)
3.Rastrigin函数
∑ i = 1 D ( z i 2 − 10 c o s ( 2 π z i ) + 10 ) ; z = M R × ( x − O R ) \sum_{i=1}^D(z_i^2-10cos(2\pi z_i)+10);z=M_R\times(x-O_R) i=1∑D(zi2−10cos(2πzi)+10);z=MR×(x−OR)
这里 M A M_A MA和 M R M_R MR是随机生成的旋转矩阵。而且 O A O_A OA和 O R O_R OR是各自对应函数的全局最优。 Sphere函数的复杂性最低,而多模态的Rastrigin函数的优化具有较大的挑战性。
此次实验共分为两组,第一组包含三个两任务优化问题,一个单任务优化问题;第二组包含四个两任务优化问题,一个单任务优化问题。我们考虑20个和30个变量的函数,为了方便表示,这里将问题维数和函数名首写字母联合表示一个任务。具体如下所示:
F 1 : { ( 30 R , n o n e ) , ( 30 R , 30 S ) , ( 30 R , 30 A ) , ( 30 R , 20 S ) } F1:\left\{ (30R,none),(30R,30S),(30R,30A),(30R,20S) \right\} F1:{(30R,none),(30R,30S),(30R,30A),(30R,20S)}; F 2 : { ( 30 A , n o n e ) , ( 30 A , 30 S ) , ( 30 A , 30 R ) , ( 30 A , 20 S ) , ( 30 A , 20 R ) } F2:\left\{ (30A,none),(30A,30S),(30A,30R),(30A,20S),(30A,20R) \right\} F2:{(30A,none),(30A,30S),(30A,30R),(30A,20S),(30A,20R)}。
这里(:,:)代表一个多任务优化问题,如果是单任务优化问题,括号的后半部分设为 n o n e none none。
其matlab代码如下:function obj = Ackley(var,MM) %Ackley函数,MM为随机生成的旋转矩阵 dim = length(MM); var = var(:,1:dim); [NN,dim] = size(var); opt=0*ones(NN,dim); var = (MM*(var-opt)')'; obj = 20 + exp(1) - 20*exp(-0.2*sqrt((1/dim)*sum(var.^2,2))) - exp((1/dim)*sum(cos(2*pi*var),2)); end function obj = Rastrigin(var,MM) %Rastrigin函数,MM为随机旋转矩阵 dim = length(MM); var = var(:,1:dim); [NN,dim] = size(var); opt=0*ones(NN,dim); var = (MM*(var-opt)')'; obj = 10*dim + sum(var.^2-10*cos(2*pi*var),2); end function obj = Sphere(var,MM) %Sphere函数,MM为随机旋转矩阵 dim = length(MM); var = var(:,1:dim); [NN,dim] = size(var); opt=0*ones(NN,dim); var = (var - opt); obj=sum(var.^2,2); end
3.2 实验设置
为了确保确实存在一些有用的遗传物质,可以从一个问题转移到另一个问题,因此假设实验中所有搜索空间的每个维度范围为[-50,50]。本此实验给出的所有结果都是在一致的实验设置下,对每个问题集进行了5次独立运行。种群大小设置为30,最大运行代数设置为100。除此之外,为了获得高质量的解,每个个体都要进行预学习,对于连续问题而言,采用BFGS拟牛顿法进行个体学习。为了让文化交流更加充分, r m p rmp rmp设置为0.3。
3.3实验结果
根据3.3的实验设置,得到实验结果如图2所示。
(a)黄-(30R,30S),紫-(30R,30A),蓝-(30R,20S),橙-(30R,none)。 (b)蓝-(30A,30S),绿-(30A,30R),黄-(30A,20R),紫-(30A,20S),橙-(30A,none)。 图2 (a)是F1的收敛趋势,(b)是F2的收敛趋势 从图2(a)中可知,多任务处理的大多数实例都显著提高了收敛速度。因为Sphere函数在搜索过程中得到了瞬时的优化,从而产生了用于优化Rastrigin函数的精细遗传物质,(30R,30S)在前几代就已经收敛了。尽管Ackley的函数是多模态的,但由于其局部最优性较浅,优化难度较小。因此在实验(30R, 30A)中,Ackley的函数趋于较快的收敛,使得高质量的遗传物质可以转移到Rastrigin的函数中,从而快速收敛。最后,在问题(30R, 20S)中,Sphere函数时产生的遗传物质只占Rastrigin函数所需的$\frac{2}{3}$,因此收敛速度收到了限制,但依旧优于(30R, none)的整体性能。 图2(b)的收敛特征与图2(a)相似。由曲线(30A, none)和(30A, 30R)可以发现,Rastrigin函数也会导致Ackley函数的加速收敛。Rastrigin函数实际上更难优化,因此预计其会减慢收敛速度。但相反,在规定的基因交换中,MFEA却有助于两种任务的融合,从而使进化中的种群成功地同时利用了这两种函数,从而有效地绕过障碍,更快地收敛。
四、结论
本算法将多任务处理引入了优化领域,并取得了不错的效果。可以看出:该算法具有统一的染色体表示方案,是处理跨域多任务问题的关键;隐式遗传从简单任务转移到复杂任务,并且在遗传互补的存在下,可以使复杂优化任务快速收敛;两个复杂任务之间的遗传交换有利于同时探索这两个函数,从而有效地避开障碍,加快收敛;利用文化传播的自然现象,在多因素设置下,可以潜在地减少了优化算法的运行时间。
通过对跨域多任务处理中个体任务收敛特性的深入分析表明,虽然某些任务受到内隐遗传转移的正向影响,但也可能存在某些任务受到负向影响。然而,在大多数情况下,正迁移大于负迁移,因此当对所有任务的性能取平均时,将导致收敛趋势。
在现实生活中,一个复杂问题常常由几个相互依赖的子问题组成,MFO可以同时解决这些问题,但是当问题的优先级受到限制,这意味着某些任务必须利用某些其他任务的结果,那么MFO就不再适用了,因此设计新的处理MFO的算法有重要的意义。
五、参考文献
[1] A. Gupta, Y.-S. Ong, and L. Feng, “Multifactorial evolution: Toward evolutionary multitasking,” IEEE Trans. Evol. Comput., vol. 20, no. 3, pp.343–357, 2016.
算法的完整代码见进我CSDN主页即可下载,代码里面借鉴了很多原作者和田野老师platEMO平台上的算子操作,在此表示感谢。注:代码里的所有文件夹必须添加到matlab的路径中才可以运行哦! -
深度学习笔记(19) 多任务学习
2019-06-16 08:47:49多任务学习概念、物体检测的多任务学习、多任务学习的条件深度学习笔记(19) 多任务学习
1. 多任务学习概念
在迁移学习中,步骤是串行的,从任务A里学习只是然后迁移到任务B
在多任务学习中,步骤是同时开始学习的
试图让单个神经网络同时做几件事情
然后希望这里每个任务都能帮到其他所有任务
2. 物体检测的多任务学习
来看一个例子,假设在研发无人驾驶车辆
那么无人驾驶车可能需要同时检测不同的物体
比如检测行人、车辆、停车标志,还有交通灯等其他各种东西比如在下边边这个例子中,图像里有个停车标志,然后图像中有辆车,但没有行人,也没有交通灯
如果输入图像是x(i),那么这里不再是1个标签y(i),而是有4个标签
也许y^((i))的维数会更高,现在就先用4个
所以 y^((i))是个4×1向量如果从整体来看这个训练集标签和以前类似
将训练集的标签水平堆叠起来,像这样 y(1)一直到 y(m):
不过现在y(i)是4×1向量
所以这些都是竖向的列向量
所以这个矩阵Y现在变成4×m矩阵
而之前,当y是单实数时,这就是1×m矩阵那么现在可以做的是训练一个神经网络,来预测这些y值
输入x,现在输出是一个四维向量y
请注意,这里输出画了四个节点
第一个节点就是想预测图中有没有行人,第二个输出节点预测的是有没有车,这里预测有没有停车标志,这里预测有没有交通灯,所以这里^y是四维的
训练神经网络,需要定义神经网络的损失函数,对于一个输出^y,是个4维向量,对于整个训练集的平均损失:
∑4j=1 L L L(yj(i) ,yj(i))是单个预测的损失
所以这是对四个分量的求和,行人、车、停车标志、交通灯
这个标志 L L L 指的是 logistic损失:
这与softmax回归的主要区别在于, softmax是将单个标签分配给单个样本
然后发现,训练一个神经网络做四件事情会比训练四个完全独立的神经网络分别做四件事性能要更好
3. 多任务学习的条件
-
如果训练的一组任务,可以共用低层次特征
对于无人驾驶的例子,同时识别交通灯、汽车和行人是有道理的
这些物体有相似的特征 -
如果每个任务的数据量很接近(这个准则没有那么绝对,所以不一定是对的)
在多任务学习中,通常有更多任务而不仅仅是两个
但比如说要完成100个任务,而要做多任务学习
尝试同时识别100种不同类型的物体
可能会发现,每个任务大概有1000个样本
所以如果专注加强单个任务的性能
比如专注加强第100个任务的表现,用A100表示
如果试图单独去做这个最后的任务,只有1000个样本去训练这个任务
但这只是100项任务之一
而通过在其他99项任务的训练,加起来一共100k个样本,大幅提升算法性能
如果有对称性,其他99个任务
也许能提供一些数据或提供一些知识来帮到这100个任务中的每一个任务
所以第二点不是绝对正确的准则,但通常会看的是如果专注于单项任务
如果想要从多任务学习得到很大性能提升
那么其他任务加起来必须要有比单个任务大得多的数据量 -
当训练一个足够大的神经网络,同时做好所有的工作
所以多任务学习的替代方法是为每个任务训练一个单独的神经网络
所以不是训练单个神经网络同时处理行人、汽车、停车标志和交通灯检测
可以训练一个用于行人检测,一个用于汽车检测,一个用于停车标志检测和一个用于交通信号灯检测的神经网络
多任务学习会降低性能的唯一情况和训练单个神经网络相比性能更低的情况
就是神经网络还不够大
但如果可以训练一个足够大的神经网络
那么多任务学习肯定不会或者很少会降低性能
都希望它可以提升性能,比单独训练神经网络来单独完成各个任务性能要更好多任务学习能让训练一个神经网络来执行许多任务
这可以带来更高的性能,比单独完成各个任务更高的性能
但要注意,实际上迁移学习比多任务学习使用频率更高
参考:
相关推荐:
深度学习笔记(18) 迁移学习
深度学习笔记(17) 误差分析(二)
深度学习笔记(16) 误差分析(一)
深度学习笔记(15) 人的表现
深度学习笔记(14) 评估指标
谢谢!
-
-
多任务深度学习
2016-10-21 16:24:09首发于 深度学习大讲堂 关注专栏 登录 写文章 ...一箭N雕:多任务深度学习实战 ...1、多任务学习导引 ...多任务学习是机器学习中的一个分支,按1997年综述论文Multi-task Learn -
多任务学习(Multi-Task Learning)
2018-10-23 10:45:27多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解... -
正确理解Linux的“多用户、多任务、多线程”
2016-11-06 11:11:01Linux 系统同时可以支持多个用户,...就像手机开了助手一样,同时登陆多个 qq 账号,当硬件配置非常高时,每个用户还可以同时执行多个任务,多个线程同时工作,提高效率。多用户是 Linux 优于其他操作系统的一大特点。 -
多任务中 多线程和多进程的区别
2019-04-26 14:22:22多任务中 多线程和多线程的区别 -
多任务学习模型详解:Multi-gate Mixture-of-Experts(MMoE ,Google,KDD2018)
2019-08-11 10:38:44原文地址:多任务学习模型详解:Multi-gate Mixture-of-Experts(MMoE ,Google,KDD2018),首发微信公众号,现在转到CSDN上~ 欢迎关注我的公众号,微信搜algorithm_Tian或者扫下面的二维码~ 现在保持每周更新的... -
【论文笔记】多任务学习(Multi-Task Learning)
2018-01-08 19:02:00多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解... -
深度学习之----多任务学习
2018-10-17 13:56:18在机器学习(ML)中,通常的关注点是对特定度量进行优化,度量有很多种,例如特定基准或商业 KPI 的分数。为了做到这一点,我们通常训练一个模型或模型组合来执行目标任务。然后,我们微调这些模型,直到模型的结果... -
什么是多任务?什么叫做进程?什么是线程?
2017-01-24 09:27:571、什么叫做多任务? IT系统,同时完成多项任务处理,这个同时指的是同一段时间内,而不是同一瞬时。 多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多... -
多任务编程的相关概念
2021-07-29 01:11:161. 多任务的概念 多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。 多任务效果图: 2. 多任务的执行方式 并发 并行 并发: 在一段时间内交替... -
如何向下属布置工作任务,5个步骤,布置工作任务更清晰
2021-09-24 10:01:56刚做管理者,经常会感到团队工作效率不高,下属执行力不好,很大程度上是布置工作任务出现了问题。布置工作任务看起来简单,但并不容易做好。 如何向下属布置工作任务,不要低估这件事的重要程度和难度。一、要有一... -
工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)
2020-08-19 20:29:00针对这种情况可以给任务设置多个候选人,可以从候选人中选择参与者来完成任务。 1,第一种通过流程图设置(很少用) 如下; 可以看到Assignee(个人),CandidateUsers(候选人),CandidateGroup(后选组) 如果设置... -
Quartz任务定时器之多任务定时执行
2018-08-29 23:31:274.创建多任务applicationContext01.xml配置文件 < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = ... -
51单片机多任务机制的实现策略
2013-12-27 13:05:48而多任务恰恰是现在操作系统的突出特点,将多任务机制引入51单片机系统,可以大大提高先有单片机系统的工作效率,满足多任务要求。 1 多任务机制在51单片机上的实现原理 多任务要求在同一时间内执行多个任 -
多任务学习 Multi-task learning
2018-11-16 16:48:12利用历史数据中的有用信息来帮助分析未来数据的机器学习,通常需要大量有标签数据才能训练出一个优良的学习器。深度学习模型是一种典型的机器学习...在这些情况下,多任务学习(MTL)可以通过使用来自其它相关学习任... -
activity多实例任务加签
2020-06-26 17:50:48在一些特殊场景下,需要在某个多实例节点上面动态新增一个审批人员或任务时,就需使用到activity多实例任务加签的功能 加签思路1 根据一级流程实例查找二级流程执行实例 判断二级执行实例是否是多实例任务节点的... -
Linux是一个多用户多任务的操作系统
2016-04-24 15:25:01Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。 操作系统管理多个用户的请求和多... -
ABB之多任务623-1Multitask选项应用
2019-11-25 12:02:051. 提问 有什么方法能够让两个...多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。 3.进程的概念 一个正在运行的程序或者软件就是一个进程,它是操... -
工作任务管理表
2018-07-27 23:48:33一个高效的工作任务管理表 工作中有很多是事情需要处理,怎么把这些事情管理起来需要提高工作效率?这个表绝对能帮助到你。在我的资源中有下载 ... -
SpringBoot + Activiti 工作流引擎(二、流程&任务操作)
2021-01-10 19:10:481. SpringBoot + Activiti 工作流引擎(一、基本概念与环境搭建) 2.SpringBoot + Activiti 工作流引擎(二、流程&任务操作) 经过第一章的操作,我们已经完成了SpringBoot 与activi的整合环境搭建,本文将着重... -
activiti 多实例任务
2016-04-25 09:15:18我们在使用activiti 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们... -
springboot之多任务并行+线程池处理
2018-05-14 16:20:34最近项目中做到一个关于批量发短信的业务,如果用户量特别大的话,不能使用单线程去发短信,只能尝试着使用多任务来完成!我们的项目使用到了方式二,即Future的方案 Java 线程池 Java通过Executors提供四... -
多任务学习(Multi-task learning)
2016-10-24 14:45:29多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成... -
使用KEIL C51实现的简单合作式多任务操作系统内核
2017-12-22 23:12:25在51单片机上实现的合作式多任务系统内核。 实现非常简单,完全C语言实现,无需汇编。每个任务最少只需要15B内存。 -
多任务并发:如何判断线程池中的任务都已经执行完毕?
2018-12-14 21:57:50多线程并发,我们往往采用线程池来管理并发的线程。但是,我们往往有这样的需要:要求在线程池中的任务都完成后才能执行后续的任务,或者需要任务都完成后释放资源或向数据库写入状态。这些都需要我们判断线程池的... -
Apache DolphinScheduler 1.2.1发布,可视化工作流任务调度系统
2020-02-25 12:21:43Apache DolphinScheduler 1.2.1发布,可视化工作流任务调度系统 Apache DolphinScheduler 于2020年2月24日正式发布 1.2.1 版,发布内容如下: 新特性: [#1497] 通过 API 创建的工作流在前端展示时自动调整布局...