Skip to main content

bidirectional-mamba

양방향 Mamba-2 SSD 블록에 SwiGLU FFN을 결합한 Vision-Mamba/VMamba 스타일 구현체입니다.
forward scan과 backward scan을 독립적으로 수행하고, 출력을 더한 뒤 gate와 out projection을 공유합니다.

zxbcdt    = in_proj(u)                  # [z | x | B | C | dt | dt_b], 하나의 projection
y_fw      = SSD(conv  (x),     A,   D,   dt,       dt_bias  )
y_bw      = SSD(conv_b(x_rev), A_b, D_b, dt_b_rev, dt_bias_b)_rev   # reversed
y         = y_fw + y_bw                 # sum merge
out       = out_proj(RMSNormGated(y, z))

블록 구조는 pre-norm 기반이며 (mixer residual) + (SwiGLU FFN residual)입니다.
스택 마지막에는 final RMSNorm이 붙습니다.

설치

CUDA + Triton 환경이 필요합니다 (mamba-ssm, causal-conv1d 필요). CPU-only는 지원하지 않습니다.

pip install torch einops matplotlib
pip install mamba-ssm causal-conv1d --no-build-isolation
pip install -e .

기본 사용법

import torch
from bidirectional_mamba import BiMambaStack

stack = BiMambaStack(d_model=768, n_layers=4, d_state=64, headdim=64,
                     chunk_size=49).cuda()

x = torch.randn(2, 196, 768, device="cuda")   # [B, L, D]
y = stack(x)                                  # [B, L, D]

주요 기능

1. 방향별 분리 (share_dt, share_bc)

기본적으로 forward/backward는 각자의 A, D, dt_bias, conv1d를 가집니다.
추가로 dt 투영과 B/C 투영도 방향별로 분리할 수 있습니다.

# dt 분리: backward scan이 자신만의 dt를 가짐
BiMambaStack(d_model=768, n_layers=4, share_dt=False)

# B/C 분리: backward scan이 자신만의 B, C를 가짐
BiMambaStack(d_model=768, n_layers=4, share_dt=False, share_bc=False)

2. Padding mask (valid_mask)

가변 길이 배치를 다룰 때 반드시 valid_mask를 전달하세요.
padding이 없으면 backward scan이 padding 영역에서 시작해 실제 토큰까지 영향을 미칩니다.

mask = torch.zeros(B, L, dtype=torch.bool, device="cuda")
mask[i, :lengths[i]] = True

y = stack(x, valid_mask=mask)

mask를 쓰면 padding 위치는 0을 출력하고 실제 토큰에는 영향을 주지 않습니다.

3. 학습 건강 지표 (return_stats)

BiMambaStack, BiMambaBlock, BiMambaMixer 모두 return_stats=True를 지원합니다.
loss 외에도 dt, A decay, B/C norm, forward/backward 기여도 등 Mamba 고유의 수치를 확인할 수 있습니다.

out, stats = stack(x, return_stats=True)

# stats 예시
# {
#   "layer0/mixer/dt/effective_mean": ...,
#   "layer0/mixer/A/decay_mean": ...,
#   "layer0/mixer/y_fw_bw_ratio": ...,
#   ...
# }

자세한 예제는 benchmarks/log_mamba_stats.py를 참고하세요.

5. 구현 검증

benchmarks/verify_bidirectional.py는 양방향 Mamba 구현이 제대로 되었는지 확인하는 독립 스크립트입니다.
flip equivariance, backward branch 사용 여부, explicit reference match, gradient flow, valid mask 등 8가지 기준을 검사합니다.

python benchmarks/verify_bidirectional.py

4. SSD token-mixing 행렬 (mixing_matrix)

Mamba의 암묵적인 token-mixing 행렬 L을 attention map처럼 시각화할 수 있습니다.
forward scan은 하삼각, backward scan은 상삼각을 채웁니다.

mixer = BiMambaMixer(d_model=192, d_state=32, headdim=32).cuda()
L = mixer.mixing_matrix(x)  # [B, L, L]

시각화 예제는 benchmarks/visualize_mixing_matrix.py를 참고하세요.

CIFAR-10 벤치마크 결과

공통 설정: patch_size=4, share_dt=False, share_bc=True, use_mlp=True, epochs=30, seed=0

Width scaling (n_layers=8 고정)

d_model n_layers headdim params(추정) test acc
768 8 64 ~67M 80.70%
1024 8 128 ~119M 81.76%
4096 4 128 ~944M 80.13%

Depth scaling (d_model=384 고정, LR per-depth scaling)

d_model n_layers headdim params(추정) test acc
384 4 32 ~8.5M 84.39%
384 8 32 ~17M 85.00%
384 12 32 ~25M 85.04%
384 16 32 ~34M 85.23%
384 20 32 ~42M 84.65%

d_model=384이 768/1024 width scaling보다 훨씬 적은 파라미터로 더 높은 성능을 냈습니다.
이는 현재 width scaling 설정(특히 4096)이 CIFAR-10에 비해 과도하게 크다는 것을 의미합니다.

공개 API

  • BiMambaMixer — 양방향 SSD mixer (shared in/out projection, 방향별 conv + A + D + dt + dt_bias).
  • BiMambaBlock — pre-norm block: mixer + SwiGLU FFN residual.
  • BiMambaStack — n개 block + final RMSNorm.
  • SwiGLUMLP — 독립형 SwiGLU FFN (expand=8/3 기본).

세 클래스 모두 share_dt, share_bc를 받고, forward는 valid_mask를 받습니다.
BiMambaMixer/Block/Stack은 추가로 return_stats=True를 받을 수 있습니다.

참고

  • A/A_b, D/D_b, dt_bias/dt_bias_b, 두 conv1d, 그리고 (share_dt=False일 때) 두 dt 투영은 모두 묶여 있지 않습니다.
  • in_proj, RMSNormGated (z로 gate), out_proj는 공유됩니다.
    출력을 더한 뒤 gate를 적용하는 것은 norm_before_gate=False이므로 방향별로 따로 gate하는 것과 동일합니다.
  • share_dt=True는 이전 동작으로 돌아가 forward dt를 reversed해서 backward가 재사용합니다.
    softplus가 단조증가이고 per-head bias만 분리되므로 두 방향이 "어떤 토큰이 중요한지"에 대해 강제로 동의해야 합니다.
  • autoregressive 디코딩용 step()은 없습니다. 양방향 scan은 전체 시퀀스가 필요합니다.
  • seq_idx 기반 세그먼트 경계는 아직 구현되지 않았습니다.

참고 문헌

  • Vision Mamba (Vim) — Zhu et al., Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model, 2024. arXiv:2401.09417
  • VMamba — Liu et al., VMamba: Visual State Space Model, 2024. arXiv:2401.10166
  • SwiGLU FFN — Shazeer, GLU Variants Improve Transformer, 2020. arXiv:2002.05202
  • Mamba-2 / SSD — Dao & Gu, Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality, 2024. arXiv:2405.21060

Metadata

Release files for bidirectional-mamba 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bidirectional-mamba 0.2.0
File Size Uploaded
bidirectional_mamba-0.2.0.tar.gz 12.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bidirectional-mamba 0.2.0
File Interpreter ABI Platform
bidirectional_mamba-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.9 kB

Release files / bidirectional_mamba-0.2.0.tar.gz

Download URL bidirectional_mamba-0.2.0.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c98a41a803b4ce91b05debcd13bb1efb703d50bb369514ff8a6decc6da9492e5
BLAKE2b-256 checksum
How to use checksums
fa97b41f7fd4eb24cdd10961e18023ec891191dcfa3f8f9e1d6dca169d7ac0a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / bidirectional_mamba-0.2.0-py3-none-any.whl

Download URL bidirectional_mamba-0.2.0-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9805cb418fd4140b58ac9b0ae8766266bcda11e9cac842eaf68f04d383c87b3d
BLAKE2b-256 checksum
How to use checksums
c61c5c0ee35584fcd6657d0f8383220e0808403f7a6e80b0914237aadfec55f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page