SFT는 모든 토큰을 배워야 할까, 수학 추론에서 덜어내는 학습이 말해주는 것

모든 토큰에 똑같은 손실을 주는 SFT의 관행을 logit gap 가중으로 다시 묻는 TrimSFT 논문을 해설합니다. 양쪽 끝을 덜어내고 중간에 집중하는 이유와 여섯 개 모델에서의 결과를 따라갑니다.

원문 논문 보기
'SFT는 모든 토큰을 배워야 할까, 수학 추론에서 덜어내는 학습이 말해주는 것' 기사 커버 이미지

오늘 다룰 논문은 arXiv에 공개된 Which Tokens Should SFT Actually Learn? A Token-Trimming Perspective on Mathematical Reasoning (2609.09707)입니다. 이 논문은 수학 추론에서 SFT가 모든 토큰에 같은 cross-entropy 손실을 주는 관행이 오히려 학습을 방해할 수 있다고 진단하고, 정답 토큰과 가장 강한 경쟁자 사이의 logit gap에 따라 손실 가중을 조절하는 TrimSFT를 제안합니다. 원문 링크는 제목 아래에 걸어두었습니다.

이미 외운 답을 또 외우게 하면 무슨 일이 생길까

안녕하세요, 패트릭입니다. 제가 이 논문을 처음 집어든 이유는 제목에 있는 질문이 평소에 저를 불편하게 했던 장면과 겹쳤기 때문입니다. 수학 풀이를 파인튜닝할 때 모델이 이미 잘 맞추는 조사나 기호에도 똑같은 크기의 손실이 걸리는 모습을 보면, 이게 정말 학습일까 하는 생각이 들곤 했죠. 여러분도 비슷한 장면을 보신 적이 있을 겁니다. 긴 증명 trace를 학습시키는데, loss는 거의 다 자명한 토큰에서 나오고 정작 분기점에서 모델이 헤매는 부분은 전체 손실에 묻혀버리는 장면 말입니다.

그렇다면 문제는 어디에 있을까요. 논문이 짚는 출발점은 단순합니다. 표준 SFT는 모든 target 토큰에 균일한 cross-entropy 손실을 적용하는데, 수학 추론에서 각 토큰이 주는 학습 신호는 전혀 균일하지 않다는 것입니다. 어떤 토큰은 모델이 이미 충분히 익힌 것이고, 어떤 토큰은 아직 갈피를 못 잡는 것이며, 어떤 토큰은 지금 배우기에 적절한 경계에 있다는 것입니다. 저는 이 구분이 마음에 들었습니다. 학습을 데이터 양의 문제가 아니라 주의 배분의 문제로 다시 썼기 때문입니다.

생각해보면 사람도 비슷하게 배웁니다. 시험공부를 할 때 이미 외운 단어를 열 번 더 쓰는 대신, 헷갈리는 유형 두세 개를 붙잡고 있는 편이 점수가 더 잘 오르죠. 그런데 우리의 SFT는 지금까지 외운 단어를 열 번 더 쓰게 만드는 쪽에 가까웠습니다. 이미 맞추는 토큰을 더 뾰족하게 만들고, 아직 흔들리는 토큰에는 과도한 압력을 넣으면서 말입니다. 이 논문은 그 관행을 정면으로 의심합니다. 그리고 그 의심이 숫자에서도 확인된다는 것이 오늘 이야기의 뼈대입니다.

SFT는 왜 모든 토큰을 똑같이 가르치려 할까

SFT의 기본 동작은 겉으로 보면 합리적입니다. 정답 시퀀스가 주어지면 각 위치에서 정답 토큰의 확률을 높이는 방향으로 기울기가 흐르고, 모든 위치를 똑같이 소중하게 다루죠. 그런데 수학 풀이처럼 긴 추론 trace에서는 이 공평함이 오히려 독이 됩니다. 풀이 안에는 서식용 토큰, 반복되는 접속어, 이미 굳어진 연산 패턴처럼 모델이 base 단계에서 이미 익힌 조각이 많기 때문입니다. 이런 토큰에까지 같은 강도로 가르치면 모델은 새로운 추론을 배우기보다 이미 아는 것을 더 과신하게 됩니다. 논문이 말하는 over-sharpening이 바로 그 현상입니다.

반면 아직 확신이 없는 low-confidence 토큰 쪽에서는 반대의 일이 벌어집니다. 모델이 정답과 전혀 다른 분포에 머물러 있는데 거기에 큰 손실을 그대로 얹으면, 기울기가 요동치면서 학습이 불안해질 수 있습니다. 그래서 균일한 SFT는 양쪽에서 손해를 본다는 것이 저자들의 진단입니다. 한쪽에서는 이미 익힌 것을 과하게 다듬고, 다른 한쪽에서는 아직 준비되지 않은 것에 과도한 압력을 넣는 셈입니다. 저는 이 진단을 읽으면서 고개를 끄덕였습니다. loss 곡선만 보면 학습이 잘되는 것처럼 보이는데, 막상 추론 능력을 뜯어보면 제자리인 경우가 많았기 때문입니다.

여기서 재미있는 질문이 생깁니다. 그렇다면 어떤 토큰에 힘을 주고 어떤 토큰은 쉬게 해야 할까요. 사람의 공부법으로 치면 답은 분명합니다. 너무 쉬운 것과 너무 어려운 것을 잠시 덜어내고, 손을 뻗으면 닿을 것 같은 중간 지대에 시간을 쓰는 것이죠. 논문은 이 직관을 토큰 단위로 옮깁니다. 그리고 그 기준선으로 logit gap을 꺼내 듭니다.

정답과 2등 사이의 간격이 말해주는 것

이 논문에서 제가 가장 흥미롭게 본 부분은 학습 신호를 확률이 아니라 간격으로 읽었다는 점입니다. 저자들은 각 위치에서 정답 토큰의 logit에서 가장 강한 경쟁자의 logit을 뺀 값을 봅니다. 이 logit gap이 크면 모델이 이미 정답을 경쟁자보다 분명히 앞세우고 있다는 뜻이고, 값이 작거나 음수면 아직 정답이 밀리거나 간신히 비기고 있다는 뜻이죠. 확률 하나로 뭉뚱그리는 대신, 누가 2등인지까지 함께 보는 셈입니다.

이 간격은 생각보다 많은 이야기를 담고 있습니다. 간격이 아주 크다는 것은 모델이 그 토큰을 이미 익혔다는 신호에 가깝습니다. 더 가르쳐봤자 과신만 키울 가능성이 크죠. 반대로 간격이 아주 작거나 음수라는 것은 모델이 아직 그 결정을 내릴 준비가 덜 됐다는 신호입니다. 지금 큰 기울기를 얹으면 방향이 엇나갈 수 있습니다. 그 사이에 있는 중간 구간은 다릅니다. 정답이 고개를 들고는 있는데 아직 굳지 않은 상태라서, 이때의 가르침이 가장 잘 스며든다는 것이죠. 저는 이 숫자보다 그 뒤의 구조가 더 중요하다고 봅니다. 토큰의 난이도를 고정된 속성이 아니라 모델의 현재 상태와의 관계로 정의했기 때문입니다.

물론 여기서 조금 조심해서 읽을 필요가 있습니다. logit gap이 작다고 해서 그 토큰이 항상 의미 있게 어려운 것은 아닙니다. 어휘 선택이 여러 개로 갈리는 지점에서는 2등이 바짝 붙는 것이 자연스럽기도 하니까요. 그럼에도 이 간격은 토큰마다 학습의 온도를 재는 꽤 쓸 만한 체온계처럼 보입니다. 전체 시퀀스에 같은 온도를 맞추던 기존 방식과 달리, 토큰마다 지금 가르칠 때인지를 묻는 방식으로 바뀌었기 때문입니다.

양쪽 끝을 덜어내는 법이 답이 될 수 있을까

논문이 제안하는 TrimSFT의 처방은 이름 그대로 덜어내는 데 있습니다. 양쪽 극단에서 감독 신호를 덜어내고, 중간 logit-gap 구간에 학습을 집중시키는 것이죠. 이미 익힌 토큰은 과신하지 않도록 힘을 빼고, 아직 너무 흔들리는 토큰은 불안정한 압력을 줄이며, 배울 준비가 된 중간 지대에 기울기의 예산을 몰아주는 방식입니다. 마치 정원 가지치기처럼요. 다 자란 가지는 굳이 만지지 않고, 아직 여린 싹은 건드리지 않으며, 지금 자라는 중간 가지를 돌보는 셈입니다.

그런데 이 아이디어를 듣고 곧바로 떠오르는 반론이 있습니다. 어려운 토큰을 덜어내면 모델이 어려운 추론을 회피하는 것 아닐까요. 저도 처음에는 여기서 멈칫했습니다. 하지만 논문의 그림을 따라가 보면 덜어낸다는 말이 버린다는 뜻은 아닙니다. 가중을 0으로 만드는 하드 필터가 아니라, 중간을 중심으로 부드럽게 낮아지는 가중 곡선을 얹는 방식이기 때문입니다. 어려운 토큰에도 아주 작은 가중은 남고, 쉬운 토큰에도 아주 작은 가중은 남죠. 완전히 끄는 것이 아니라 볼륨을 줄이는 것에 가깝습니다. 이 차이는 생각보다 중요합니다. 학습 분포를 왜곡하지 않으면서도 기울기의 주도권을 중간 지대에 넘길 수 있기 때문입니다.

또 하나 짚고 넘어갈 점은 이 방법이 추론 trace의 구조를 바꾸지 않는다는 것입니다. 데이터를 고르거나 순서를 바꾸는 대신, 같은 데이터 안에서 토큰마다 조명을 다르게 비추는 방식입니다. 그래서 기존 SFT 파이프라인에 얹기 쉽습니다. 데이터를 다시 모으거나 라벨을 다시 달 필요가 없다는 점은 현장에서 꽤 크게 다가옵니다.

가우시안 하나로 끝나는 가벼운 처방

구현 이야기로 들어가 보겠습니다. TrimSFT는 margin m을 중심으로 한 가우시안 가중을 SFT 손실에 곱합니다. 각 토큰의 logit gap이 m에 가까울수록 가중이 1에 가까워지고, m에서 멀어질수록 가중이 부드럽게 떨어지는 구조죠. 가우시안의 폭을 정하는 bandwidth tau가 그 경사의 완급을 조절합니다. tau가 작으면 중간 구간에만 날카롭게 집중하고, tau가 크면 넓은 구간에 너그럽게 가중을 줍니다. 저는 이 단순함이 이 논문의 매력이라고 봅니다. 새로운 모델이나 별도의 forward pass 없이, 이미 계산한 logit에서 바로 가중을 뽑아내기 때문입니다.

실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. reference 모델이 필요할까요. 답은 필요 없다는 것입니다. 요즘 선호 학습이나 가중 SFT 변형들 가운데는 reference 모델을 하나 더 얹거나 추가 forward를 요구하는 경우가 많은데, TrimSFT는 그런 짐이 없습니다. 학습 중인 모델의 logit만으로 가중을 계산하니 메모리와 연산 부담이 거의 늘지 않죠. 저희가 새로운 파인튜닝 기법을 볼 때도 숫자만 보지는 않습니다. 실제로 무엇이 바뀌었고, 그 변화가 학습 시스템에서 어떤 비용 구조를 만드는지를 함께 보는데, 이 방법은 그 기준에서 꽤 가볍습니다.

물론 가벼움이 곧 효력을 보장하지는 않습니다. 가우시안이라는 형태 자체는 강한 가정이기 때문에, 왜 하필 종 모양이어야 하는지부터 묻게 되는데요. 그런데 논문 안에는 비대칭 분포가 더 낫지는 않은지에 대한 이론적 답이 충분히 있지 않습니다. 그럼에도 저는 출발점으로서는 합리적이라고 봅니다. 이런 선택은 중간에 집중하고 양쪽을 덜어낸다는 직관을 m과 tau 두 개의 손잡이만으로 표현했기 때문입니다. 이렇게 손잡이가 두 개뿐이라 실험의 판을 빠르게 돌릴 수 있다는 점은 연구자와 실무자 모두에게 반가운 일인데, 가벼운 처방이 정답인지는 결국 bandwidth 실험에서 가려야 하지 않을까요?

숫자보다 구조가 먼저 눈에 들어온 이유

여기서 잠시 숫자를 떠나 구조를 보겠습니다. TrimSFT가 건드리는 것은 손실의 크기만이 아닙니다. 기울기가 어떤 토큰에서 주로 생기는지, 그 분포의 무게중심을 옮기는 일이죠. 균일 SFT에서는 자명한 토큰이 개수로는 압도적이라 전체 기울기를 잠식합니다. 긴 풀이에서 Let이나 therefore 같은 반복 토큰, 이미 굳어진 계산 패턴이 매 스텝마다 작은 기울기를 보태면서 전체 방향을 끌고 가는 셈입니다. 반면 진짜 분기점인 수식 변형이나 보조선 설정 같은 토큰은 개수가 적어 목소리가 작습니다. TrimSFT는 이 다수결 구조를 뒤집습니다. 개수는 적지만 지금 배울 만한 토큰의 목소리를 키우는 방식으로 말입니다.

이걸 수업 장면에 비유하면 이해가 빠릅니다. 전교 1등에게 같은 숙제를 열 번 더 풀게 하고, 아직 분수를 못 뗀 학생에게 미적분 문제를 던지는 수업은 좋은 수업이 아닙니다. 잘하는 학생에게는 다음 단계 문제를, 아직 준비 중인 학생에게는 발판을 주는 것이 맞죠. TrimSFT는 토큰마다 지금 어느 반에 앉아 있는지를 logit gap으로 가늠하고, 중간반에 선생님의 시간을 몰아주는 셈입니다. (참고로 여기서 중간반이란 고정된 어휘 집합이 아니라 학습이 진행되면서 계속 바뀌는 동적인 구간입니다. 오늘의 중간이 내일의 쉬움이 되기도 하죠.)

저는 이 구조적 전환이 단순한 트릭 이상이라고 봅니다. SFT를 정답 모방에서 상태 의존적 가르침으로 옮겼기 때문입니다. 같은 정답 시퀀스라도 모델의 상태에 따라 가르치는 강도가 달라진다는 것은, 학습을 데이터 중심에서 모델 상태 중심으로 옮기는 작은 철학적 이동이기도 합니다.

여섯 개 모델과 다섯 개 벤치마크에서 벌어진 일

이제 실험으로 들어가 보겠습니다. 저자들은 Llama와 Qwen, DeepMath 계열을 아우르는 여섯 개 base 모델에서 다섯 개 수학 추론 벤치마크로 평가했습니다. 설정 자체가 한두 개 모델에 맞춘 요행이 아니라 여러 계열에 걸친 일반화를 보려는 의도로 읽혔습니다. 결과는 꽤 분명했습니다. 여섯 개 가운데 다섯 개 모델에서 TrimSFT가 평균 성능 1등을 차지했고, MATH500에서는 SFT 대비 최대 26.9점까지 앞섰다는 것이죠. 일반 파일에만 남겼을 때와 SOUL.md에 옮겨 적었을 때처럼, 조건이 바뀌면 숫자가 통째로 달라지는 경우를 많이 봐왔기에 저는 이런 폭의 차이를 그냥 넘기지 못했습니다. 26.9점이라는 간격은 오차로 치부하기에는 너무 크기 때문입니다.

그런데 이 숫자는 그대로 믿기 전에 조건을 봐야 합니다. MATH500에서의 큰 폭은 base 모델의 출발점이 낮을수록 더 크게 벌어지는 경향이 있기 때문입니다. 다시 말해 원래 SFT가 많이 헤매던 구간에서 TrimSFT의 이득이 두드러진다는 것입니다. 이는 장점이자 한계입니다. 밑바닥을 끌어올리는 데는 탁월하지만, 이미 높은 수준에 오른 모델에서는 이득의 폭이 줄어들 수 있습니다. 논문이 여섯 개 가운데 다섯 개에서 1등이라고 밝힌 대목도 같은 맥락에서 읽어야 합니다. 하나에서는 1등을 놓쳤다는 뜻인데, 그 모델이 어떤 계열이고 어떤 구간에서 삐끗했는지를 보면 방법의 경계가 드러나기 때문입니다.

그렇다면 이 흐름은 어디에서 더 검증되어야 할까요. 제 생각에는 수학을 넘어 코드나 논리적 글쓰기처럼 긴 추론이 필요한 과제에서 같은 패턴이 반복되는지가 다음 관문입니다. 수학 trace 특유의 반복 구조 때문에 중간 구간 집중이 특히 잘 먹었을 가능성도 있으니까요. 그 이야기는 마지막에 다시 다루겠습니다.

한쪽만 덜어내면 왜 아쉬운 결과가 남을까

논문에서 개인적으로 인상 깊었던 대목은 절반만 덜어낸 변형 실험입니다. 양쪽을 다 덜어내는 대신 한쪽만 덜어내는 half-trim 변형을 돌려봤는데, 어느 쪽만 덜어내든 온전한 TrimSFT보다 아쉬운 trade-off가 남았다는 것입니다. 쉬운 토큰만 덜어내면 과신은 줄지만 불안정한 어려운 토큰의 압력이 그대로 남고, 어려운 토큰만 덜어내면 안정성은 좋아지지만 쉬운 토큰의 과신이 그대로 남기 때문입니다. 두 문제를 따로 보면 각각 절반의 이야기라서, 둘을 함께 다뤄야 전체 그림이 맞는다는 것이 저자들의 해석입니다.

여기서 bandwidth tau에 대한 관찰도 함께 나옵니다. margin m의 정확한 위치보다 tau의 폭이 결과에 더 크게 작용했다는 것이죠. 저는 이 대목이 실무적으로 가장 쓸 만하다고 봅니다. m을 소수점 단위로 튜닝하느라 시간을 쓰기보다, 어느 정도의 넓이로 중간을 볼 것인지를 먼저 정하는 편이 이득이라는 뜻이기 때문입니다. tau가 너무 작으면 가르칠 토큰이 너무 좁아져 학습이 더디고, tau가 너무 크면 다시 균일 SFT에 가까워져 덜어내는 의미가 옅어집니다. 적당한 넓이를 찾는 일이 이 방법의 운을 가른다는 것이죠.

이 결과는 생각보다 많은 것을 말해줍니다. 토큰 학습의 문제는 쉬운 쪽이나 어려운 쪽 어느 한쪽의 문제가 아니라 양쪽 극단이 동시에 만드는 문제라는 것입니다. 한쪽만 손보면 다른 쪽이 여전히 기울기를 갉아먹기 때문이죠. 그래서 양쪽을 함께 덜어내는 대칭적 처방이 설득력을 얻습니다. 물론 완벽한 대칭이 항상 정답은 아니겠지만, 적어도 출발점으로는 양쪽을 함께 보는 것이 맞다는 것이 이번 실험의 교훈입니다.

그래서 현장에서는 어떻게 써먹을까

좋은데, 이걸 실제로 어떻게 학습 라인에 올릴까요. TrimSFT의 답은 의외로 담백합니다. 기존 SFT 루프 안에서 토큰별 가중 한 줄만 얹으면 되기 때문입니다. 데이터를 다시 만들 필요도 없고, reference 모델을 띄울 GPU도 따로 필요 없으며, 추가 forward도 없습니다. 매 스텝에서 이미 구한 logit으로 gap을 재고, 가우시안 가중을 곱한 뒤 평소처럼 backward를 돌리면 됩니다. 밤사이 돌리는 파인튜닝 작업에 손을 대기 부담스러운 팀에게도 이 정도의 변경은 시도해볼 만합니다.

운영 측면에서 보면 이 차이는 상당히 큽니다. 선호 학습 계열처럼 두 개 모델을 메모리에 올리거나, 별도의 보상 모델을 서빙해야 하는 방식과 달리, 이 방법은 학습 파이프라인의 모양을 바꾸지 않기 때문입니다. 배치 구성이나 체크포인트 전략, 평가 루틴을 그대로 두면서 손실 가중만 바꿀 수 있습니다. 실패했을 때 롤백하기도 쉽습니다. 가중을 끄면 원래 SFT로 돌아가니까요. 저는 그래서 이 방법을 연구실 점수 이상으로 평가했습니다. 도입 비용이 낮아서 작은 팀도 바로 시험해볼 수 있기 때문입니다.

다만 현장에서 바로 주의할 점도 있습니다. m과 tau는 모델과 데이터 분포에 따라 다시 찾아야 합니다. 논문의 값이 우리 데이터에 그대로 맞는다는 보장은 없기 때문입니다. 특히 base 모델의 실력이 많이 다르면 logit gap의 분포 자체가 달라져서 같은 m이 전혀 다른 구간을 가리킬 수 있습니다. 그래서 처음에는 tau를 넉넉하게 잡고 가중 분포를 로깅하면서, 중간 구간이 실제로 분기점 토큰을 담고 있는지를 눈으로 확인하는 과정이 필요합니다. 숫자가 오르기 전에 분포가 먼저 말이 되는지 보는 것이죠.

아직 묻지 못한 질문들이 더 흥미롭다

앞에서 미뤄뒀던 질문으로 돌아올 차례입니다. 이 방법은 수학을 넘어 어디까지 갈 수 있을까요. 저는 여기서 조금 의심했습니다. 수학 풀이는 정답 trace 안에서도 반복과 정형성이 강해서, 중간 구간이라는 렌즈가 특히 잘 들어맞았을 수 있기 때문입니다. 코드 생성처럼 실행 결과가 뒤늦게 오는 과제나, 열린 답이 많은 글쓰기에서는 logit gap의 의미가 달라질 수 있죠. 간격이 좁다는 것이 학습 적기라는 뜻인지, 아니면 답이 여럿인 자연스러운 분기라는 뜻인지가 헷갈리기 때문입니다.

또 하나 궁금한 것은 학습 후반부의 모습입니다. 학습이 진행되면 어제의 중간이 오늘의 쉬움이 되면서 gap 분포 전체가 오른쪽으로 이동할 텐데, 고정된 m이 그 이동을 끝까지 따라갈 수 있을까요. 어쩌면 m을 스케줄링하거나 분포의 분위수에 맞춰 자동으로 옮기는 장치가 필요할지도 모릅니다. 논문은 고정된 m으로도 충분히 이득을 봤다고 말하지만, 긴 학습에서는 적응형 margin이 더 자연스러워 보입니다. 이 부분은 후속 연구에서 꼭 보고 싶습니다.

그렇다면 사람의 역할은 무엇일까요. 토큰마다 가르칠 때를 재는 일이 자동화될수록, 무엇을 가르칠지를 정하는 일은 더 중요해집니다. 어떤 trace를 정답으로 둘 것인지, 어떤 풀이 스타일을 표준으로 삼을 것인지, 어떤 실수는 관대하게 보고 어떤 실수는 엄격하게 볼 것인지 같은 선택 말이죠. TrimSFT는 어떻게 가르칠지에 대한 답을 줬지만, 무엇을 가르칠지에 대한 답은 여전히 우리의 몫입니다. 저는 그 남은 몫이 오히려 더 크다고 봅니다.

덜어내기가 가르치기다

처음에는 다소 도발적으로 들렸던 질문이 이제는 꽤 실용적으로 느껴집니다. SFT가 정말 모든 토큰을 배워야 할까. 이 논문의 답은 아니오에 가깝습니다. 이미 익힌 토큰은 과신을 키우지 않도록, 아직 흔들리는 토큰은 불안정을 키우지 않도록 덜어내고, 지금 손이 닿는 중간 지대에 가르침을 모으라는 것이죠. 여섯 개 모델 가운데 다섯 개에서 평균 1등을 하고 MATH500에서 최대 26.9점을 앞선 결과는 그 답에 힘을 싣습니다. 한쪽만 덜어낸 변형이 아쉬웠고 bandwidth의 폭이 margin 위치보다 중요했다는 관찰까지 더하면, 이야기는 단순한 트릭을 넘어 학습의 배치 철학에 가까워집니다.

저는 이 논문을 덮으면서 오래된 공부법을 떠올렸습니다. 잘 외운 페이지는 빨리 넘기고, 손이 떨리는 페이지는 잠시 덮어두며, 아는 듯 모르는 듯한 페이지를 붙잡고 늘어지는 법 말이죠. TrimSFT는 그 요령을 토큰 단위로 옮긴 셈입니다. 물론 수학을 넘어선 일반화나 장기 스케줄링 같은 숙제는 남았습니다. 하지만 적어도 수학 추론의 SFT에서는 덜어내기가 더 배우는 길이라는 점을 이 논문은 분명히 보여줬습니다. 다음에 학습 loss를 볼 때 저는 총합 숫자보다 그 안에서 누가 목소리를 내고 있는지를 먼저 묻게 될 것 같습니다.

참고 자료

  1. Which Tokens Should SFT Actually Learn? A Token-Trimming Perspective on Mathematical Reasoning · arxiv.org

    리뷰 원문