大规模分布式强化学习架构
第一层时间轮整个时间轮所表示时间范围是 0-12 秒,第二层时间轮每格能表示的时间范围是整个第一层时间轮所表示的范围也就是 12 秒,所以整个第二层时间轮能表示的时间范围即 12*12=144 秒,依次类推第三层时间轮能表示的范围是 1728 秒,第四层为 20736 秒等等。 比如现在我们需要添加一个延时为 200 秒的延迟消息,我们发现其已经超过了第一层时间轮能表示的时间范围,我们就需要继续往上层时间轮看,将其添加在第二层时间轮 200/12 = 17 的位置,然后我们发现 17 也超过了第二次时间轮的表示范围,那么我们就需要继续往上层看,将其添加在第三层时间轮的 17/12 = 2 的位置。
Kafka 中时间轮算法添加延迟任务以及推动时间轮滚动的核心流程如下,其中 Bucket 即时间轮中的延迟任务队列,并且 Kafka 引入的 DelayQueue 解决了多数 Bucket 为空导致的时间轮滚动效率低下的问题: 多层时间轮到现在为止一切都非常棒,但是细心的同学可能发现了,上面的时间轮的大小是固定的,只有 12 秒。如果此时我们有一个需要延迟 200 秒的任务,我们应该怎么处理呢?直接扩充整个时间轮的大小吗?这显然不可取,因为这样做的话我们就需要维护一个非常非常大的时间轮,内存是不可接受的,而且底层数组大了之后寻址效率也会降低,影响性能。
为此,Kafka 引入了多层时间轮的概念。其实多层时间轮的概念和我们的机械表上时针、分针、秒针的概念非常类似,当仅使用秒针无法表示当前时间时,就使用分针结合秒针一起表示。同样的,当任务的到期时间超过了当前时间轮所表示的时间范围时,就会尝试添加到上层时间轮中,如下图所示: 如上图所示,时间轮是一个存储延迟消息的环形队列,其底层采用数组实现,可以高效循环遍历。这个环形队列中的每个元素对应一个延迟任务列表,这个列表是一个双向环形链表,链表中每一项都代表一个需要执行的延迟任务。 时间轮会有表盘指针,表示时间轮当前所指时间,随着时间推移,该指针会不断前进,并处理对应位置上的延迟任务列表。 添加延迟任务
由于时间轮的大小固定,并且时间轮中每个元素都是一个双向环形链表,我们可以在
如下图,例如我们有一个这样的时间轮,在表盘指针指向当前时间为 2 时,我们需要新添加一个延迟 3 秒的任务,我们可以快速计算出延迟任务在时间轮中所对应的位置为 5,并添加到位置 5 上任务列表尾部。 PeerNet 是标准 CNN 中基于图的正则化层,可聚合来自多个图像的相似像素,从而降低对对抗性扰动的敏感性。(图源 [12]) 潜图学习的其它应用 潜图学习还有许多其他有趣的应用。 第一是少样本学习:利用基于图的方法从少量样本中进行归纳(重点:只需要少量带有标注的样本)。在计算机视觉中,数据标注量从几千到上万不等,成本很高,因此少样本学习变得越来越重要。 第二是生物学领域:人们经常通过实验观察生物分子如蛋白质的表达水平,并试图重建它们的相互作用和信号网络。 第三是对物理系统的分析:其中图可以描述多个对象之间的交互作用。尤其是处理复杂粒子相互作用的物理学家,最近对基于图的方法表现出了浓厚的兴趣。 第四是 NLP 问题:在 NLP 领域中,图神经网络可以看作是 transformer 架构的泛化。所提到的许多问题也提出了在图结构中加入先验知识,这一结构在很大程度上仍然是开放的:例如,人们可能希望强迫图遵守某些构造规则或与某些统计模型兼容。
潜图学习,虽然不是全新的领域,但它为旧问题提供了新的视角。对于图机器学习问题而言,这无疑是一个有趣的设置,为 GNN 研究人员提供了新的方向。 (编辑:鞍山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |