需要帮助了解Julia'中的nntopo宏吗;s注意机制Transformers.jl包

需要帮助了解Julia'中的nntopo宏吗;s注意机制Transformers.jl包,julia,Julia,我试图理解Julia in Transformers.jl包中的注意机制实现 包中的示例使用名为nntopo的宏来设置通量堆栈。我在宏实现文件(src/stacks/topology.jl)中看到以下注释。我不知道这是基于什么。我非常感谢您能帮助我确定这个宏背后的基本思想 #= examples x => b => c ==> b = m[1](x) ; c = m[2](b) x => 3 ==> x => a => a => a ==>

我试图理解Julia in Transformers.jl包中的注意机制实现

包中的示例使用名为nntopo的宏来设置通量堆栈。我在宏实现文件(src/stacks/topology.jl)中看到以下注释。我不知道这是基于什么。我非常感谢您能帮助我确定这个宏背后的基本思想

#=
examples
x => b => c  ==> b = m[1](x) ; c = m[2](b)
x => 3 ==> x => a => a => a ==> x = m[1](a); a = m[1](a); a = m[1](a)
(x, m) => a => b => c ==> a = m[1](x , m); b = m[2](b); c = m[3](b)
((x, m) => x) => 3 ==> (x = m[1](x, m)); (x = m[2](x, m)); (x = m[3](x, m))
(((x, m) => x:(x, m)) => 3) ==> (x = m[1](x,m)); (x = m[2](x,m)) ;(x = m[3](x,m))
=#

宏使用示例:

const decoder = gpu(Stack(
    @nntopo((e, m, mask):e → pe:(e, pe) → t → (t:(t, m, mask) → t:(t, m, mask)) → $N:t → c),
    PositionEmbedding(512),
    (e, pe) -> e .+ pe,
    Dropout(0.1),
    [TransformerDecoder(512, 8, 64, 2048) for i = 1:N]...,
    Positionwise(Dense(512, length(labels)), logsoftmax)
))