FactorEngram이 n-gram 메모리를 기저 단위로 분해해 문맥별로 조절한다

FactorEngram: Factorized N-gram Memory with Basis-Level Gating for Language Models

HF Daily2609.35578

Bowen Yang, Jingbo Zhou, Qinghong Miao2026-09-28조회 2

무엇인가

룩업 기반 메모리는 반복적으로 등장하는 표현의 지식을 여러 층의 계산으로 매번 재구성하지 않고 테이블에서 바로 꺼내 쓰자는 아이디어다. Engram이 대표 구현으로 DeepSeek-V4.1-Flash에 채택될 만큼 실용성이 확인됐지만, 저자들은 Engram이 검색된 n-gram 임베딩을 하나의 덩어리로 취급한다는 점을 문제로 지적한다. 임베딩 하나가 독립된 해시 슬롯을 차지하고 스칼라 게이트 하나로만 조절되기 때문에, 'the bank'처럼 문맥에 따라 의미가 갈리는 패턴이 자기 메모리 안에서 문맥에 맞는 성분만 골라 읽어낼 수 없다. 또한 n-gram 조합 공간이 너무 커서 해싱에 의존하는 탓에 파라미터 공유가 해시 충돌에서만 일어나고, 그 충돌은 의미와 무관하다. 의미가 비슷한 패턴이 표현의 일부라도 공유할 장치가 없다는 뜻이다.

어떻게 동작하나

FactorEngram의 핵심은 메모리의 최소 단위를 n-gram 임베딩 벡터에서 공유 사전(dictionary) 위의 계수로 바꾼 것이다. 각 메모리 모듈은 s개의 기저 벡터로 이루어진 사전 D를 두고, 패턴별로는 해시 테이블에 계수만 저장한다. 유니그램·바이그램·트라이그램을 여러 룩업 헤드로 검색하는데, 유니그램은 직접 인덱싱, 2-gram 이상은 해시 함수로 주소를 정한다. 각 브랜치에서 꺼낸 계수 벡터를 고정된 순서로 이어 붙여 사전의 각 행과 좌표를 맞춘다. 서로 다른 패턴이 같은 기저 벡터를 다른 계수로 재사용하므로, 파라미터 공유가 해시 충돌이 아니라 의미 있는 성분 단위로 일어난다.

무엇과 다른가

문맥 조절은 같은 사전을 재사용해 기저 단위로 이뤄진다. 백본 은닉 상태를 쿼리로 투영해 RMSNorm을 걸고, 사전의 각 행과 내적한 뒤 시그모이드를 취해 기저별 게이트를 만든다. 이 게이트를 검색된 계수에 원소별로 곱한 다음, 사전과의 선형 결합으로 메모리 벡터를 복원하고 백본 폭으로 투영한다. 복원에 쓰는 벡터와 문맥 관련도를 재는 벡터가 정확히 같다는 점이 이 설계의 요점이다. 이후 짧은 depthwise causal convolution과 SiLU, 잔차 연결로 이웃 위치의 메모리 출력을 다듬어 잔차 스트림에 더한다. 백본의 어텐션과 FFN은 손대지 않는다. 학습은 다음 토큰 예측 손실에 계수에 대한 L1 페널티를 더해 백본과 메모리를 함께 최적화하며, 이 페널티가 각 패턴이 소수 기저에만 의존하도록 유도한다.

어떻게 쓰나

실험은 340M과 1B Transformer 백본을 FineWeb-Edu의 30B·120B 토큰으로 처음부터 학습해 진행했다. 컨텍스트 길이 8192, 어휘 32K이고, 340M 설정은 룩업 테이블 파라미터 1B(바이그램·트라이그램 각 250K 엔트리), 1B 설정은 2B(바이그램 250K, 트라이그램 750K)를 쓴다. 메모리 모듈은 10·12층 어텐션 앞에 넣고 희소성 강도 10⁻³을 기본값으로 삼았다. 340M에서 WikiText 퍼플렉서티가 23.19에서 21.29로, LAMBADA가 24.90에서 21.69로 낮아졌고 평균 다운스트림 정확도는 순수 Transformer보다 1.76%p 올랐다. Engram보다 모든 지표에서 앞섰고 어려운 검색 과제에서 격차가 컸는데, NIAH-2에서 41.5%p, NIAH-3에서 43.3%p다. 1B로 키워도 대부분 지표에서 개선이 유지됐지만 WikiText는 Transformer와 비슷한 수준이었고 다운스트림 정확도는 Engram보다 조금 낮았다. 다만 검색 이득은 9.3~27.6%p로 여전히 컸다.

전제와 한계

구성 요소별 기여도는 340M에서 확인했다. 기저 단위 게이팅을 스칼라 게이팅으로 바꾸면 평균 다운스트림 정확도가 49.82에서 48.15로, NIAH-3가 58.3에서 9.4로 떨어졌다. 복원된 메모리 벡터를 통째로 키우는 방식으로는 문맥 적응이 거의 되지 않는다는 뜻이다. 유니그램 검색을 빼면 모든 지표가 나빠졌고, Engram에 유니그램을 더하면 NIAH 세 종류가 모두 좋아지지만 퍼플렉서티와 평균 정확도는 소폭 나빠졌다. 희소성 강도는 0, 10⁻⁴, 10⁻³, 10⁻²를 비교했는데 10⁻³이 WikiText를 뺀 모든 지표에서 최선이었고 WikiText는 10⁻⁴가 가장 낮았다. 10⁻²는 규제를 전혀 하지 않은 모델보다도 나빠져, 중간 강도가 적절하다는 결론이다.

메모리를 어디에 넣을지도 훑었다. 24층 340M 백본에서 단일 모듈을 옮겨 보면 이른 층보다 중간 층이 낫고, 12층이 다운스트림과 NIAH를 균형 있게 잡으면서 NIAH-2가 가장 높았다. 12층을 고정하고 두 번째 모듈 위치를 바꾸면 NIAH 점수 변동이 컸고, 10·12층 조합이 NIAH-3가 가장 높았다. 층 안에서는 어텐션 앞, FFN 앞, SwiGLU FFN 내부를 비교했는데 어텐션 앞이 모든 정확도 지표와 LAMBADA에서 최선이었다. FFN 앞은 WikiText는 비슷했지만 NIAH-3가 18.8에 그쳤고 FFN 내부는 전 지표에서 최악이었다.

실무 관점에서 이 논문이 주는 신호는 두 가지다. 첫째, n-gram 룩업 메모리를 붙일 때 임베딩을 통째로 저장하고 스칼라 게이트로 조절하는 방식은 문맥 적응력에서 한계가 있다는 것. 기저 사전과 계수로 분해하면 같은 파라미터 예산에서 더 나은 결과를 얻을 수 있다. 둘째, 메모리 브랜치의 위치가 성능을 크게 가른다는 것. 특히 긴 문맥 검색이 중요한 서비스라면 어텐션 앞 중간 층 삽입을 먼저 시도해 볼 만하다. 다만 이득이 가장 큰 곳이 NIAH 계열 검색 과제라는 점은 기억해 둘 필요가 있다. 일반 언어 모델링 개선폭은 상대적으로 작고, 1B에서는 다운스트림 정확도가 Engram보다 낮았다.

저자들이 밝힌 한계는 평가 규모다. 340M과 1B 두 규모에서만 검증했고, 1B 모델이 엣지 컴퓨팅이나 온디바이스 배포에는 여전히 쓸모 있다고 덧붙이면서도 더 큰 규모에서 이 이득이 유지되는지는 향후 과제로 남겼다. 또한 기저 벡터에 의미 라벨을 미리 정하지 않고 다음 토큰 예측과 L1 페널티로만 학습한다는 점, 계수 테이블·사전·투영·컨볼루션이 백본과 함께 학습된다는 점도 전제로 깔려 있다.