人人都能读懂的「以太坊2.0分片设计」

以太坊2.0开发之路上的小怪和终极大BOSS。


讨论:吴为龙、李画

撰文:李画

当我们在7-11买早餐的时候,如果只有一个收银员,就要排很长的队等待结帐;如果有两个收银员,立刻就会快一倍;假如有四个收银员,也许就不用排队了。这就是分片的基本逻辑,把一个人的工作分给多个人来完成以提升效率。

从以太坊分布式账本的角度来看就是:分片前只有主链这一个账本,每秒大约能处理12~45笔交易,当交易量大于这个数据时就需要排队,也就是网络会拥堵;分片就是把一个账本变成64个账本,让它们同时来处理交易,相当于7-11开了64个收银台来收银。

分片的逻辑很简单,但为什么如此难以实现?因为把一个账本分成64个账本记账,会面临很多新的问题,分片技术要做的正是解决掉它们。本文将从这些问题出发,来弄清以太坊2.0的分片到底是怎么一回事。

 01 

如何分片

1.把交易分配给分片

一个分片中包含交易和把交易打包进区块的验证者,完成分片的第一步就是要确定如何给某个分片分配交易和验证者。先来看分配交易。

让我们用三个村庄的故事来理解:有一个渔村、一个猎户村、一个农夫村,村庄内和村庄间常常有交易,但没有货币,大家记账。以前是用一个账本记三个村子的账,速度有点慢,现在改成三个账本记,那么由哪个账本来记哪些帐了?

有一个方法是,三个账本放在那儿,来了一笔交易后,看哪个账本前没人排队就记在哪个账本上;但这会带来一个问题就是,每个账本都必须有所有人的账户信息,不然我来你这里排队,而你没有我的账户。

正因为如此,该分片方式的一个主要问题就是不能减少单一账本上存储的数据量,而这种存储需求对于想参与记账的节点是很高的门槛;该方式还需要解决双花问题,因为一个人可以同时在不同的分片中花费同一笔钱。

另一个方法是,渔村有一本账,猎户村有一本账,农夫村有一本账,账本中都只有自己村庄的账户信息,也只记录自己村庄内的交易。如此一来三个账本就可以同时记账,记账效率高,存储需求少。这正是以太坊采用的分片方法:状态分片,每个分片存储且只存储属于自己分片的账户状态。在实现上,以太坊是由用户自己选择加入哪一个分片,而不是按自然村庄分片。

状态分片最大的问题是,如果渔村的人要和猎户村的人交易怎么办?渔村的账本里没有猎户村人的账户,猎户村的账本里也没有渔村人的账户。实际上,这正是分片技术面临的最大考验,跨分片通信。彻底解决这一问题的时候,就是以太坊2.0可以被使用的时候。本文将在第二部分讨论该问题的一些解决方法。

2.把验证者分配给分片

在把交易安排到不同的分片后,下一个要解决的问题是如何为某个分片分配记账的人,也就是分配验证者。

以太坊有64个分片,每个分片有128位验证者,如果分片的验证者是固定的或者可预知的,那攻击者控制分片,也就是收买128中的2/3是一件容易的事情,怎么办?以太坊的解决办法是随机从所有验证者中选出某个分片的验证者,并且每6.4 分钟(一个epoch的长度)更换一次验证者。如此一来,攻击者就只有万亿分之一不到的几率能控制一个分片中 2/3 的人(推理过程见参考资料1)。

信标链的主要工作之一就是为分片链分配验证者,该工作最需要关注的是随机性的实现。首先在于随机性的重要程度,如果不能随机分配验证者,就无法保证账本的安全;其次在于随机性的难度,在区块链上实现随机是一件异常困难的事,可以认为到目前为此还没有真正称得上是工程实现了的经受了验证的随机算法。

以太坊的方案是使用RANDAO+VDF提供随机数,以实现随机性。把RANDAO拆解成RAN(random)和DAO就很易理解,它是指一群人中的每个人都独自提出一个随机数,再把所有人的随机数合在一起生成最后被使用的那个随机数。因为任何人都难以知道其他人提供的数字,也就难以预知合起来的最终数字。

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值