AF3 AttentionPairBias类源码解读

server/2025/1/22 17:02:02/

AttentionPairBias 是 AlphaFold3 的一个注意力机制模块,设计用于实现全自注意力(Full Self-Attention)并结合成对表示的偏置(Pair Bias)。它在 AlphaFold3 的架构中发挥重要作用,特别是在处理蛋白质序列和空间对称性相关的任务时。

源代码:

class AttentionPairBias(nn.Module):"""Full self-attention with pair bias."""def __init__(self,dim: int,c_pair: int = 16,no_heads: int = 8,dropout: float = 0.0,input_gating: bool = True,residual: bool = True,inf: float = 1e8,):"""Initialize the AttentionPairBias module.Args:dim:Total dimension of the model.c_pair:The number of channels for the pair representation. Defaults to 16.no_heads:Number of parallel attention heads. Note that c_atom will be split across no_heads(i.e. each head will have dimension c_atom // no_heads).dropout:Dropout probability on attn_output_weights. Default: 0.0 (no dropout).residual:Whether the module is used as a residual block. Default: True. This affects the initializationof the final projection layer of the MHA attention.input_gating:Whether the single representation should be gated with another single-like representation usingadaptive layer normalization. Default: True."""super().__init__()self.dim = dimself.c_pair = c_pairself.num_heads = no_headsself.dropout = dropoutself.input_gating = input_gatingself.inf = inf# Perform check for dimensionalityassert dim % no_heads == 0, f"the model dimensionality ({dim}) should be divisible by the " \f"number of heads ({no_heads}) "# Projectionsself.input_proj = Noneself.output_proj_linear = Noneif input_gating:self.input_proj = AdaLN(dim)# Output projection from AdaLNself.output_proj_linear = Linear(dim, dim, init='gating')self.output_proj_linear.bias = nn.Parameter(torch.ones(dim) * -2.0)  # gate values will be ~0.11else:self.input_proj = LayerNorm(dim)# Attentionself.attention = Attention(c_q=dim,c_k=dim,c_v=dim,c_hidden=dim // no_heads,no_heads=no_heads,gating=True,residual=residual,proj_q_w_bias=True,)# Pair biasself.proj_pair_bias = nn.Sequential(LayerNorm(self.c_pair),LinearNoBias(self.c_pair, self.num_heads, init='normal'))def _prep_biases(self,single_repr: torch.Tensor,  # (*, S, N, c_s)pair_repr: torch.Tensor,  # (*, N, N, c_z)mask: Optional[torch.Tensor] = None,  # (*, N)):"""Prepares the mask and pair biases in the shapes expected by the DS4Science attention.Expected shapes for the DS4Science kernel:# Q, K, V: [Batch, N_seq, N_res, Head, Dim]# res_mask: [Batch, N_seq, 1, 1, N_res]# pair_bias: [Batch, 1, Head, N_res, N_res]"""# Compute the single maskn_seq, n_res, _ = single_repr.shape[-3:]if mask is None:# [*, N_seq, N_res]mask = single_repr.new_ones(single_repr.shape[:-3] + (n_seq, n_res),)else:# Expand mask by N_seq (or samples per trunk)new_shape = (mask.shape[:-1] + (n_seq, n_res))  # (*, N_seq, N_res)mask = mask.unsqueeze(-2).expand(new_shape)mask = mask.to(single_repr.dtype)# [*, N_seq, 1, 1, N_res]mask_bias = (self.inf * (mask - 1))[..., :, None, None, :]# Project pair biases per head from pair representationpair_bias = self.proj_pair_bias(pair_repr)  # (bs, n_tokens, n_tokens, n_heads)pair_bias = rearrange(pair_bias, 'b i j h -> b h i j')  # # (bs, h, n, n)pair_bias = pair_bias.unsqueeze(-4)return mask_bias, pair_biasdef forward(self,singl

http://www.ppmy.cn/server/160516.html

相关文章

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…

使用递归处理无限自关联表

无限自关联表 所谓的无限自关联表就是类似于下图&#xff0c;有parent_id的这种&#xff0c;需要分级显示 实体类 实体类需要添加一个属性--下级列表 List<SysMenu> children;这个属性中是我们该实体的孩子结点 工具类处理分级树 public class MenuHelper {public st…

Python绘制数据地图-MovingPandas

MovingPandas 是一个用于时空数据分析的 Python 库&#xff0c;它扩展了 Pandas 和 GeoPandas&#xff0c;使得处理和分析带有时间戳的地理数据变得更加方便。虽然 MovingPandas 本身不直接提供数据可视化功能&#xff0c;但你可以结合其他库如 matplotlib、folium 或 plotly 来…

Stable Diffusion 提示词编写技巧及示例

Stable Diffusion 提示词&#xff08;Prompt&#xff09;的编写技巧及示例是生成高质量图像的关键。以下将结合我搜索到的资料&#xff0c;详细说明提示词的编写规则、技巧和示例。 一、提示词的基本规则与格式 分隔符&#xff1a;提示词之间需用英文逗号&#xff08;,&#…

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下&#xff1a; 拼写错误或路径错误&#xff1a;确保你输入的目录名称正确。目录名称是区分大小写的&#xff0c;因此请确保使用正确的大小写。正确的目录名…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时&#xff0c;普通应用是无法使用的&#xff0c;需要在AndroidManifest中配置sharedUserId&#xff1a; AndroidManifest.xml中的android:sharedUserId“android.uid.system”&#xff0c;代表的意思是和系统相同的uid&a…

Chrome远程桌面无法连接怎么解决?

Chrome远程桌面连接已停止工作 Chrome远程桌面是一款极为便捷的浏览器插件&#xff0c;能够帮助用户将自己的计算机连接到其他设备&#xff0c;无论是手机、平板电脑还是其他电脑。然而&#xff0c;在实际使用中&#xff0c;许多用户可能会面临各种各样的问题&#xff0c;比如…