多任务多目标CTR预估技术

简介: 多目标(Multi Objective Learning)是MTL中的一种。在业务场景中,经常面临既要又要的多目标问题。而多个目标常常会有冲突。如何使多个目标同时得到提升,是多任务多目标在真实业务场景中存在的意义。

image.png

作者 | 志阳、文静
来源 | 阿里技术公众号

一 背景

1 多任务多目标学习

多任务(Multi Task Learning)是深度学习时代非常普遍的建模方式。在NLP、CV、CTR诸多领域有非常广泛的应用。

多目标(Multi Objective Learning)是MTL中的一种。在业务场景中,经常面临既要又要的多目标问题。而多个目标常常会有冲突。如何使多个目标同时得到提升,是多任务多目标在真实业务场景中存在的意义。如下图,视频推荐任务,既要点击率又要完播率;电商排序,既要点击率又要转化率。如今,CTR预估领域采用多任务多目标是非常主流的建模方式。值得我们深入研究。

image.png

首先来厘清一些名词概念。如下图,解释了Multi-Task 与 Multi-Label等相关概念的关系。

Multi-Task learning:多任务学习建模多个任务之间的关联关系,任务输入可以是不同的feature/sample,如BERT的MLM预训练任务与NSP任务,两个任务先后训练,输入是不同的feature和sample。这是Multi-Input & Multi-Output (MIMO) 的类型,常用的训练模式是pre-train+finetuning 和 多任务co-train交替训练。

Multi-Label learning:还有一种是Single-Input & Multi-Output (SIMO) ,就是非常常见的Multi-Label Learning,建模相同feature、相同Sample上多个label之间的关系。也常称之为多目标Multi-Objective。如CV领域中,对同一image,可以同时对semantic classification,depth regression,instance regression等诸多经典任务目标共同学习。CTR领域,对同一输入样本同时预估点击率、转化率多个目标。常用的训练模式是Joint-train的模式,形式化地表达如下:

image.png

其中\theta^{sh}是多任务共享参数,\theta^{t}是任务t 的独享参数,Joint-train的总Loss是各个子任务对应Loss的带权求和。本文后面称的多任务多目标学习,默认是这种建模方式。

image.png

2 优势&挑战

多目标共同学习的结果,有4种状态,如下示意图。“well done”: 最好的状态,所有share任务实现共同提升。“还不错”:其次的状态,所有任务不降低,至少一个任务提升。如果是主任务 + 辅助任务的搭配,能够实现牺牲辅助任务达到主任务提升的效果,也是well done。“不理想”:跷跷板现象,任务有涨有跌。“无法接受”:负迁移现象,所有任务都不如从前。

多任务多目标学习的优势:有潜力做到“还不错”和“well done”。

多任务多目标学习的挑战:

(1)如何把“无法接受”和“不理想”两个状态往“还不错”和“well done”迁移;

(2)最大限度激发“还不错”和“well done”的效果;

image.png

共享参数!1 + 1 > 2 【还不错/well done】

共享参数在效果 + 性能层面带来很多优势。效果层面,多任务的优势通过隐式数据增强达到。多个相关任务共同学习,参数共享,相互借鉴,缓解某些任务的样本稀疏带来的过拟合现象,获得更好的泛化性能。在性能层面,多任务较N个单任务网络参数量总和显著降低,在实时预测场景下MTL模型效率也更高。

共享参数! 1 + 1 < 1 【无法接受/不理想】

多任务多目标为了实现 1+1>2,在任务参数空间上设置了假设,例如:任务参数应该彼此靠近,w.r.t.一些距离度量,共享一个共同的概率先验,或驻留在一个低维子空间或流形。当所有任务都是相关的时候,这些假设可以很好地工作,但是如果在不相关的任务之间发生信息共享,则大概率导致效果下降,出现跷跷板、负迁移现象。

因此,引出了领域研究的核心问题:如何能够利用好“共享参数”,让多个任务和谐共存、相辅相成、相得益彰?

二 多任务多目标方案概览

研究上述核心问题,有两个方向,一个是Architectures,一个是Optimization Strategy,如下图所示。

Architectures从网络结构设计方向思考哪些参数共享,在什么位置,如何共享。

Optimization Strategy多目标优化策略从loss、Gradient的视角去思考任务与任务之间的关系。平衡loss体量(Magnitude),调节loss更新速度(velocity),优化Gradient更新方向(direction)。在微观层面缓解梯度冲突,参数撕扯,在宏观层面达到多任务的balance。

image.png

1 多任务多目标网络结构设计

Architectures从网络结构设计方向思考哪些参数共享,在什么位置,如何共享。合理的共享网络结构设计对于效果提升有举足轻重的作用。至今,多任务的研究焦点依然在于如何结合任务来设计共享结构。本文主要介绍CTR领域的多任务结构。如上图,较为常见的结构有Share-Bottom【hard】,无需赘述。2018年google提出MMOE,将hard的参数共享变成多个expert,通过门控来控制不同loss对每个expert的影响,2019年google提出SNR,借助简单的 NAS(Neural Architecture Search),对 Sub-Network 进行组合,为不同目标学习各自的网络结构。2020年tencent提出PLE,在MMOE的基础上增加了各任务独有的Expert。

如下图,是Share Bottom、MMoE、PLE的网络结构和简单说明,细节不展开。

  • Shared Bottom->MMoE:MMoE将shared bottom分解成多个Expert,然后通过门控网络自动控制不同任务对这些Expert的梯度贡献。
  • MMoE->PLE:PLE在MMoE的基础上又为每个任务增加了自有的Expert,仅由本任务对其梯度更新。

image.png

演进是朝着一个更加灵活的参数共享方向,思考为什么这样的演进可以带来效果的提升?我们常看到效果提升对解释是:不同的expert负责学习不同的信息内容,然后通过gate来组合这些信息,通过不同任务gate的softmax的热力分布差异,来表明expert对不同的目标各司其责,从而提升了效果。如果将视角从宏观切换到微观,从“更加灵活的参数共享”这个角度来看,MMoE对参数使用了“化整为零”的策略,PLE则是“化整为零+各有所得”。

如下图,更加形象地理解,在Share Bottom的结构上,整个共享参数矩阵如同质量较大的物体,在梯度更新的环节,两个loss反向计算的梯度向量分别是g1和g2,是这个物体收到的两个不同方向不同大小的力,这两个力同时来挪动这个物体的位置,如果在多次更新中两个力大概率方向一致,那么就能轻松达到和谐共存、相辅相成。反之,多个力可能出现彼此消耗、相互抵消,那么任务效果就会大打折扣。在这样的背景下,使得“如何选取设计多个任务,考虑任务之间相关性”成为Share-Bottom MTL能够取得成功的关键因素。

MMoE做了一个聪明的事情,“化整为零”。把一个共享参数矩阵化成多个结合gate的共享Expert,这样不同的loss在存在相互冲突的时候,在不同的expert上,不同loss可以有相对强弱的表达,那么出现相互抵消的情况就可能减少,呈现出部分experts受某task影响较大,部分experts受其他task主导,这种“各有所得”的状态。但是MMoE并不保证“各有所得”,PLE增加了spcific experts,保障“各有所得”,能够在“共享参数”的撕扯争夺上,有了最基础的保障。

image.png

在我们自己的数据集上,做了一个简单对比。3个预估目标,CTR、CVR、R3。Share-Bottom出现了翘翘板现象,但是PLE能够实现多目标的共赢现象,下表展示了模对于single task的相对提升。

image.png

未来,CTR领域多任务多目标的升级,我认为依然会朝着“更加灵活的参数共享”来提升效果。“化整为零”的方式更加灵活(例如,根据任务任务之间的相似性来动态决定共享参数的多和少,相似的任务多share一些,不太相似的任务少share一些),“个有所得”的途径更加多样(例如,从expert视角来动态确定当前时刻受哪个task主导)。

2 多任务多目标优化策略

Optimization Strategy多目标优化策略从loss、Gradient的视角去思考任务与任务之间的关系。在微观层面缓解梯度冲突,参数撕扯,在宏观层面达到多任务的balance。如下表列出了目前常见的方法【后文会详细介绍其中几种方法的原理和推导】。

image.png

我们对相关文献的调研总结后,认为多任务多目标优化策略主要focus在三个问题:

Magnitude(Loss量级):Loss值有大有小,出现取值大的Loss主导的现象,怎么办?

image.png

image.png

Velocity (Loss学习速度): 任务有难有易,Loss学习速度有快有慢,怎么办?

image.png

不同任务因为样本的稀疏性、学习的难度,在学习过程中,存在学习速度不一样的情况。不加以调整,可能会出现某个任务接近收敛甚至过拟合的时候,其他任务还是欠拟合的状态。

Direction(Loss梯度冲突):多个Loss的反向梯度,更新方向冲突,出现翘翘板、负迁移现象,怎么办?

image.png

不同Loss对共享参数W_{sh}进行更新, 梯度有大小、方向,相同参数被多个梯度同时更新的时候,可能会出现冲突,导致相互消耗抵消。就会出现跷跷板、甚至负迁移现象。

image.png

后文,将分别从网络结构和优化策略两个方向,抽一些文章来分享一下。

三 多任务多目标网络结构

MMoE:Google KDD 2018,提出后就成为了CTR领域MTL的标配。

这个文章中,有一个非常有意思的做法:人工控制两个任务的相似度,然后观测不同网络结构在不同任务相似度的表现效果。得出一个结论:MMoE在多任务之间的的相关性( relatedness )比较低的时候,效果也能很不错。

如下图,首先OMoE 和 MMoE的效果都是明显好于Baseline,表明化整为零的Experts对效果提升有非常重要的作用。近一步,如果任务相关度非常高(Correlation = 1.0),则OMoE和MMoE的效果近似,但是如果任务相关度很低(Correlation = 0.5),则OMoE的效果相对于MMoE明显下降,说明MMoE中的Multi-gate的结构对于任务差异带来的冲突有一定的缓解作用。

image.png

SNR:Google AAAI 2019,对MMoE的改进,但没有找到官方开源,目前follow的相关工作不多。

这个文章的思路与网络自动搜索(NAS)接近。多任务各自采用哪些sub-network,动态学习出来。可见的收益主要寄希望于能够自动学习出来相似任务能够共享多一些。

image.png

PLE :Tencent RecSys 2020, 对MMoE的改进,结构简洁,效果显著。

在MMoE的基础上,为每个任务增加了自己的specific expert,上文中已经解释了为什么specific expert为什么有效。看下图右上角的子图,PLE是唯一做到多任务共赢“well done”。MMoE是唯一做到“还不错”【一平一涨】。其余方法是跷跷板现象。Hard Sharing是负迁移。观察在不同相似度的多任务上,PLE都表现优秀。

image.png

四 多任务多目标优化策略

1 UncertaintyWeight

文章:《Multi-task learning using uncertainty to weigh losses for scene geometry and semantics》
这个文章估计是多目标Loss优化策略中,最常被提及的方法。但是目前在我们的任务上,没有取得明显的效果【ps. 据大多数使用过的同学反馈,都是没啥效果的】。
文章希望直接建模单个任务中的uncertainty,然后通过uncertainty来指导权重的调节。

image.png

image.png

经验tips:loss大->uncertainty多->权重小,loss小->uncertainty少->权重大。这个在我们自己的实验中也得到了验证,甚至会出现loss小的那个任务的权重是其他loss大的任务的权重的几十倍情况(如CTR、CVR、Pay目标建模的时候,Pay的loss量级最小,这个方法给了Pay目标非常大的权重,导致很快出现过拟合。)而且因为后面log项的存在,会使总的loss可能出现为负的情况。如果你的多任务设计,需要使用这个属性:loss大->uncertainty多->权重小,loss小->uncertainty少->权重大,那么这个方法可以尝试套用一下(我们也尝试过分类 + 回归的多任务,回归任务Loss大,UncertaintyWeight给予小权重,整体效果正向)。

2 GradNorm

image.png

3 DWA

文章:《End-to-End Multi-Task Learning with Attention》

定义了一个指标来衡量任务学习的快慢,然后来指导调节任务的权重。

image.png

用这一轮loss除以上一轮loss,这样可以得到这个任务loss的下降情况用来衡量任务的学习速度,然后直接进行归一化得到任务的权重。当一个任务loss比其他任务下降的慢时,这个任务的权重就会增加,下降的快时权重就会减小。是只考虑了任务下降速度的简化版的Gradient normalization,简单直接。

经验tips:对最终能够达到的收敛状态,没有啥影响。

4 PE-LTR

文章:《A Pareto-Efficient Algorithm for Multiple Objective Optimization in E-Commerce Recommendation》

淘系主搜2019年的文章。首先需要白话一下问题建模。多任务的loss公式是可以建模为了多目标优化的,也就是优化可能冲突的目标的集合。

image.png

image.png

满足这些条件的solution,被称之为一个 Pareto Stationary Point【所有帕累托最优都是Pareto Stationary Point,但反之不一定成立】。上述优化问题,可以转化成为

image.png

转化后的解释就是,找到一组w,能够尽量平衡各任务在共享参数部分的梯度。如果优化到0,就满足了KKT条件,没有优化到0,也能找到一个方向是降低全局所有任务的总Loss。

image.png

image.png

新优化目标仍然是一个难解的二次规划问题。论文提出一个两步求解算法来解这个问题。1、只考虑等式约束来放松问题,然后通过解析解来获得松弛后问题的解。但是此时得出的解可能是不满足不等式约束。2、投影步,从第一步获得可行解中获得一个满足所有约束条件的有效解。

经验tips:目前源码demo是开源的,但目前并非开箱即用的状态,我们优化适配到自己场景中,在每一轮迭代中,各个任务的w取值,颇为稳定,但目前还没有在我们的场景中取得理想的效果。

这个方法是探索任务级别的平衡关系,求解w。WWW 2021年微信文章《Personalized Approximate Pareto-Efficient Recommendation》提出来在视频推荐任务中不同用户在意侧重的目标(视频点击率 vs 视频完播率)是不一样的,求解的w不应该是在任务维度,而是每个用户样本,都应当有自己的一组w。这个出发点是有价值的,但在我们的业务中,更有价值的可能是按照人群group来得到自己的一组w,如新用户更加注重引导点击,老用户更家注重引导交易,如消费品行业更加注重交易,非消行业着重引导询盘,实现多目标共同增长。国家/行业/用户分层等群体目标差异的优化,也是一个有意思有价值的点。

5 PCGrad & GradVac

文章:PCGrad -《Gradient Surgery for Multi-Task Learning》,GradVac - 《Gradient Vaccine: Investigating and Improving Multi-task Optimization in Massively Multilingual Models》

这两篇文章是Google近期的研究,PCGrad投ICLR 2020被拒后,投中NIPS 2020。这个文章首次直面gradient冲突源头。采用简单、直接的方式做gradient调整。ICLR 2021 GradVac是PCGrad的改进,应用在多语种机器翻译任务上。

PCGrad指出MTL多目标优化存在3个问题:1. 方向不一致,导致撕扯,需要解决;2. 量级不一致,导致大gradients主导,需要解决;3. 大曲率,导致容易过拟合,需要解决。本文以方向不一致作为切入点,打破这个问题。怎样打破的? 白话一下首先通过cosine相似度来定义两个任务在共享参数上是否是冲突的,如下图,conflicting是夹角大于90度,non-conflicting是小于90度。如果两个两个梯度向量存在冲突,则把 gi 向量中与 gj 冲突的分量给减去。剩下的则是没有冲突的部分。这就是核心。

image.png

GradVac应用在机器翻译领域,给出了3个非常有意思的观察:

1.梯度的相似性 vs language相似性 => close tasks enjoy similar loss geometries, Gradient Similarities reflect language proximities

a.任务是翻译任务,不同的翻译语料共享一个大模型。如上图热力图,每一个格子的得分含义是:Baltic翻译成en的任务对应的gradient,与 Turkic翻译成en任务对应的gradient 之间的cosine similarity
b.语言越相近,gradient的cosine similarity也越相似。

image.png

2.梯度的相似性与模型效果正相关

a.回答一个问题:相似性越高的任务进行joint trainnig,是否能够带来更好的效果?

i.答案是肯定的! 相似度越高的任务进行MTL的训练,效果是更好的。
ii.有研究表明en-x相对于x-en是更加困难的,从下面的gradient similarity也可以观察到,x-en的梯度相似性更高。
iii.以en-fr pair作为锚点,分别加入相似性更高的/更低的任务去联合训练得到不同的模型。然后都在相同的测试集合en-fr上进行评估【以en-fr为主人物,其他语种对为辅助任务】,去对比gradient similarity更高的pair 和 更低的pair,观察他们在BLEU指标上的效果,添加相似性更高的语种作为辅助人物会有更好的效果。

image.png

3.梯度相似性随着训练步骤和网络层级(transformer的layer)在不断的演变

a.随着训练step的改变:gradient similarity会逐渐收敛到一个水位
b.随着layer的改变:x-en【越靠近输出位置的layer,越相似】,en-x 【越低level相似】,因为都是从en出发的,这个容易解释,也make sense。

我觉得这些观察非常重要,GradVac本身怎样做,甚至都显得没那么重要了。白话一下GradVac的做法

  1. PCGrad只是设置了一个下界。让两个任务的cosine相似度至少是大于等于0的,不能出现负数。这个下界非常容易达到。
  2. 基于上文提及的观察3,两个任务的真实相似度,其实是会逐渐收敛到一个水位。这个值可以认为是两个任务的真实相似度。
  3. 两个任务的Gradinet相似度,应当去靠近这个相似度,而不是只满足PCGrad设置的下界。

image.png

经验tips:改造代码,尝试中,目前没有可分享的经验。有后续再追加。

五 小结

多任务多目标出现跷跷板、负迁移现象,微观的梯度冲突是本质。不论是从Architecture 还是 Optimization strategy两个维度来优化升级,殊途同归,都是要缓解冲突,减少多任务间的内耗。

总结一下,从实践角度来看,要做一个共赢的多任务多目标模型,技术层面几点经验tips:

(1)网络结构backbone,目前优选PLE;

(2)多任务的设计和构造,要考虑任务间的相似性;如主 + 辅任务,辅助任务和主任务的关系需要考虑;

  • 目前还没有一种权威的方法或者指标来度量任务与任务之间的相似性,那么实操中,怎么办?【PS. 多任务间的相似性度量,应该也是一个有意思的研究点】
  • 多任务两个Loss,只训练其中一个Loss,另一个Loss也在缓慢下降! => 任务相关(get)

    • 三个loss,ctr/cvr/contra loss, 仅仅 training ctr/cvr主任务loss,观察另一个辅助contra loss也会跟随下降。实验表明引入这个辅助loss一起train会带来很好的离线效果提升。

image.png

  • 多任务两个Loss,只训练其中一个Loss,另一个Loss没有变化甚至波动增加! => 如果不是刻意而为之,慎重联合

(3)优化策略方面,留意多个Loss的量级,如果差异很大,注意约束和控制;上图contra loss 与 ctr cvr的loss,差了一个量级。

(4)梯度冲突的解决,一种技能是pareto,另一种是以pcgrad为代表的直接对梯度进行调整的方法,可选用。

多任务多目标的优化,有两种典型的方式:

  1. 主任务 + 主任务:解决业务场景既要又要的诉求;多个任务都要涨;
  2. 主任务 + 辅任务:辅助任务为主任务提供一些知识信息的增强,帮助主任务提升;

不同的业务诉求下,会有任务目标不同的侧重、关联、取舍。多任务多目标,有非常多的组合盲盒,等待打开。

Reference

本文中提及到的参考文献如下

  1. Kendall A, Gal Y, Cipolla R. Multi-task learning using uncertainty to weigh losses for scene geometry and semantics[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7482-7491.
  2. Rosenbaum C, Cases I, Riemer M, et al. Routing networks and the challenges of modular and compositional computation[J]. arXiv preprint arXiv:1904.12774, 2019.
  3. Tang H, Liu J, Zhao M, et al. Progressive layered extraction (ple): A novel multi-task learning (mtl) model for personalized recommendations[C]//Fourteenth ACM Conference on Recommender Systems. 2020: 269-278.
  4. Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1930-1939.
  5. Chen Z, Badrinarayanan V, Lee C Y, et al. Gradnorm: Gradient normalization for adaptive loss balancing in deep multitask networks[C]//International Conference on Machine Learning. PMLR, 2018: 794-803.
  6. Liu S, Johns E, Davison A J. End-to-end multi-task learning with attention[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 1871-1880.
  7. Lin X, Chen H, Pei C, et al. A pareto-efficient algorithm for multiple objective optimization in e-commerce recommendation[C]//Proceedings of the 13th ACM Conference on recommender systems. 2019: 20-28.
  8. Xie R, Liu Y, Zhang S, et al. Personalized Approximate Pareto-Efficient Recommendation[C]//Proceedings of the Web Conference 2021. 2021: 3839-3849.
  9. Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020.
  10. Wang Z, Tsvetkov Y, Firat O, et al. Gradient vaccine: Investigating and improving multi-task optimization in massively multilingual models[J]. arXiv preprint arXiv:2010.05874, 2020.
  11. Sener O, Koltun V. Multi-task learning as multi-objective optimization[J]. arXiv preprint arXiv:1810.04650, 2018.
  12. Ruder S. An overview of multi-task learning in deep neural networks[J]. arXiv preprint arXiv:1706.05098, 2017.
  13. Vandenhende S, Georgoulis S, Van Gansbeke W, et al. Multi-task learning for dense prediction tasks: A survey[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2021.

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?

如今数据作为重要的生产要素&#xff0c;成为数字经济高速发展的关键驱动力之一。越来越多开发者和企业认识到数据保护的重要性&#xff0c;关注数据保护发展趋势&#xff0c;以通过相关的技术解决方案来制定应对策略。 为帮助企业捋请思路&#xff0c;加快数字化转型步伐&…

blazeds调用java_Flex使用Blazeds与Java交互及自定义对象转换详解(转)

一、建立Flex与Java交互的工程。本文中讲到的交互是利用Blazeds的&#xff0c;因为这个是免费的&#xff0c;呵呵&#xff0c;我是穷人。首先就是去下载Blazeds的压缩包&#xff0c;这个可以从官网或者CSDN、JavaEye上下到。解压缩这个包&#xff0c;将里面的Blazeds.war解压&a…

从行业应用到智慧城市,升哲科技Alpha协议如何保障物理世界的数据传输

随着国家《“十四五”信息通信行业发展规划》和《物联网新型基础设施建设三年行动计划&#xff08;2021-2023年&#xff09;》的政策出台&#xff0c;物联网的产业发展迎来了新一波浪潮。在农业、制造业、生态环境、智慧消防等场景下&#xff0c;以数字化转型、智能化升级为动力…

Serverless 工程实践 | 零基础上手 Knative 应用

简介&#xff1a; Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。 Knative 介绍 Knative 通过整合容器构建&#xff08;或者函数&#xff09;、工作负载管理&#xff08;动态扩缩&#xff09;以及事件模型这三者实现…

DataWorks功能实践速览 05——循环与遍历

简介&#xff1a; DataWorks功能实践系列&#xff0c;帮助您解析业务实现过程中的痛点&#xff0c;提高业务功能使用效率&#xff01;通过往期的介绍&#xff0c;您已经了解到在DataWorks上进行任务运行的最关键的几个知识点&#xff0c;其中上期参数透传中为您介绍了可以将上游…

阿里安全开源顶尖技术“猎豹” 计算更快数据更安全

两家公司想开展合作&#xff0c;发挥各自优势联合开发一款产品&#xff0c;如何以“隐私计算”的形式&#xff0c;在保护隐私的情况下&#xff0c;高效地实现两方联合计算&#xff0c;便成为解决这一问题的关键。 最近&#xff0c;阿里安全最新研发的Cheetah&#xff08;猎豹&…

PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力

简介&#xff1a; 飞桨深度学习框架采用基于编程逻辑的组网范式&#xff0c;对于普通开发者而言更容易上手&#xff0c;同时支持声明式和命令式编程&#xff0c;兼具开发的灵活性和高性能。 飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础&#xff0c;是中…

云原生体系下 Serverless 弹性探索与实践

简介&#xff1a; SAE 通过对弹性组件和应用全生命周期的不断优化以达到秒级弹性&#xff0c;并在弹性能力&#xff0c;场景丰富度&#xff0c;稳定性上具备核心竞争力&#xff0c;是传统应用 0 改造上 Serverless 的最佳选择。 作者&#xff1a;竞霄 Serverless 时代的来临 …

java jndi使用_Java项目中使用JNDI连接数据库

因为写的大作业经常用到数据库连接 所以自己写了个数据库连接的类 package DB_Link_info;/* * 数据库链接信息 */public class DB_link_Info {public static final String driverName "com.microsoft.sqlserver.jdbc.SQLServerDriver";public static开发环境为Java,…

Joint Consensus两阶段成员变更的单步实现

简介&#xff1a; Raft提出的两阶段成员变更Joint Consensus是业界主流的成员变更方法&#xff0c;极大的推动了成员变更的工程应用。但Joint Consensus成员变更采用两阶段&#xff0c;一次变更需要提议两条日志&#xff0c; 在一些系统中直接使用时有些不便。那么Joint Consen…

真香!8 行代码搞定最大子数组和问题

作者 | 码农的荒岛求生来源 | 码农的荒岛求生今天给大家带来一道极其经典的题目&#xff0c;叫做最大和子数组&#xff0c;给定一个数组&#xff0c;找到其中的一个连续子数组&#xff0c;其和最大。示例&#xff1a;输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 子数组…

深度干货|云原生分布式数据库 PolarDB-X 的技术演进

简介&#xff1a; 深入解读PolarDB-X的产品架构&#xff0c;以及分布式事务、透明分布式、水平扩展等技术内幕。 一、PolarDB-X是什么 PolarDB-X最早起源于阿里集团2009年提出用分布式架构替代传统商业数据库&#xff0c;阿里研发了TDDL分库分表中间件。2014年阿里集团开始全…

OpenStack 如何跨版本升级

作者 | 孙琦来源 | 万博智云OpenStack是中国私有云的事实标准根据三方统计报告&#xff0c;2020年&#xff0c;中国私有云市场规模达到951.8亿元&#xff0c;同比增长42.1%&#xff0c;私有云在国内IaaS市场占比约45%。私有云提供商有望在云计算市场持续高速发展进程中持续受益…

流计算引擎数据一致性的本质

简介&#xff1a; 本篇文章从流计算的本质出发&#xff0c;重点分析流计算领域中数据处理的一致性问题&#xff0c;同时对一致性问题进行简单的形式化定义&#xff0c;提供一个一窥当下流计算引擎发展脉络的视角&#xff0c;让大家对流计算引擎的认识更为深入&#xff0c;为可能…

java 的io流需要学吗_Java的IO流之字节流,必须要学得内容,你会嘛?

原标题&#xff1a;Java的IO流之字节流&#xff0c;必须要学得内容&#xff0c;你会嘛&#xff1f;伙伴们~端午节过的如何呀~有没有很开心呀~假期已过咱们继续开动了IO流先来认识一下IO流&#xff1a;IO流用来处理设备之间的数据传输&#xff0c;Java对数据的操作是通过流的方式…

为什么大家都在抵制用定时任务实现「关闭超时订单」功能?

作者 | 阿Q来源 | 阿Q说代码前几天领导突然宣布几年前停用的电商项目又重新启动了&#xff0c;让我把代码重构下进行升级。让我最深恶痛觉的就是里边竟然用定时任务实现了“关闭超时订单”的功能&#xff0c;现在想来&#xff0c;哭笑不得。我们先分析一波为什么大家都在抵制用…

面对疾风吧,如何搭建高协同的精准告警体系?

简介&#xff1a; 想要实现AiOps&#xff0c;智能告警少不了。Arms 告警运维中心让面向告警的组织协同更加便捷高效&#xff01; 作者&#xff5c;九辩 世上没有一个系统是百分之百尽善尽美的。如果想要保证可用性&#xff0c;那么技术团队就得对服务的各种状态了如指掌&…

KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点

简介&#xff1a; 10 月 16 日上海&#xff0c;OAM/KubeVela、OpenKruise、OCM 三大开源项目的社区负责人、核心贡献者和企业用户将齐聚 KubeMeet&#xff0c;和现场 100 名开发者聊聊新的技术环境和企业需求下&#xff0c;有关“云原生应用管理”的那些事儿。 随着云原生关注…

Redis 究竟适不适合当队列来用?

‍作者 | Magic Kaito来源 | 水滴与银弹我经常听到很多人讨论&#xff0c;关于「把 Redis 当作队列来用是否合适」的问题。有些人表示赞成&#xff0c;他们认为 Redis 很轻量&#xff0c;用作队列很方便。也些人则反对&#xff0c;认为 Redis 会「丢」数据&#xff0c;最好还是…

EDA 事件驱动架构与 EventBridge 二三事

简介&#xff1a; 事件驱动型架构 (EDA) 方兴未艾&#xff0c;作为一种 Serverless 化的应用概念对云原生架构具有着深远影响。当我们讨论到一个具体架构时&#xff0c;首当其冲的是它的发展是否具有技术先进性。这里从我们熟悉的 MVC 架构&#xff0c;SOA 架构谈起&#xff0c…