본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Hyena 연산자

~14 min · hyena, operator, icml-2023

Level 0관찰자
0 XP0/50 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

연산자는 합성곱과 게이트를 번갈아 써

Hyena(Poli et al., 2023.2, ICML 2023, arXiv:2302.10866)는 곱셈 게이트와 암시적 장거리 합성곱을 번갈아 적용해. N차 연산자라면 합성곱 N개와 게이트 N개가 교대로 들어가. 각 필터는 위치 부호화를 받는 작은 FFN이 암시적으로 만들어.

복잡도는 O(L · D · (log L + D))야. L은 시퀀스 길이, D는 모델 차원이고 log L은 FFT에서 나와. 짧은 시퀀스에서는 어텐션의 O(L² · D)와 비용이 비슷해. 차이는 길이가 늘면서 벌어져. 8K 토큰에서는 약 2배 빠르고 64K에서는 100배 빠르다고 보고됐어.

게이트가 비선형 표현력을 채워

합성곱만으로는 어텐션과 경쟁할 비선형 표현력이 부족해. 그래서 Hyena는 합성곱 사이에 곱셈 게이트를 넣어. x ← x * gate(v)이고 v는 토큰마다 학습되는 조절자야. GLU와 SwiGLU에서 보던 종류의 게이트를 Hyena 연산자 안에 넣은 셈이지. 언어 작업에서 경쟁할 표현력을 여기서 얻어.

시퀀스가 길어질수록 속도 차이가 제품 경쟁력이 돼

8K에서 2배 빠른 건 흥미롭지만 판을 뒤집지는 않아. FlashAttention도 단순한 어텐션보다 비슷한 속도 향상을 주거든. 64K에서 100배 차이가 나기 시작하면 배포 선택이 달라져. 메가베이스 규모의 유전체 시퀀스에서는 비교 자체가 사라져. Transformer는 그 길이를 실행하지 못하지만 Hyena는 돌릴 수 있어.

Code

Hyena operator 구조 (pseudocode)·python
def hyena_operator(x, order=3):
    # x: (batch, seq_len, d_model)
    L = x.shape[1]
    positions = positional_encoding(L)
    for i in range(order):
        # Position에서 implicit filter 생성 (작은 FFN, fixed param)
        h_i = filter_ffn(positions)         # (L,) or (L, d)
        # FFT 통해 적용 — filter 당 O(L log L)
        x = fft_conv(x, h_i)
        # per-token learned vector 사용한 multiplicative gate
        x = x * silu(linear_gate_i(x))
    return x

External links

Exercise

단일 차수 Hyena 연산자(암시적 필터 합성곱 하나 + 게이트 하나)를 구현하고, GPU 한 장에서 시퀀스 길이 1K, 8K, 32K, 128K로 torch.nn.MultiheadAttention과 비교해. 실제 지연 시간을 그래프로 그려 봐. 8K 안팎에서 Hyena와 어텐션의 선이 교차하고 32K에서는 Hyena가 분명히 앞서야 해. Hyena를 쓸 가치가 있는 구간을 가르는 실용적인 곡선이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.