- 최신 LLM들이 실제로 존재하지 않는 해마 이모지를 100% 확신하며 존재한다고 답변하고, 이를 출력하려다 잘못된 이모지를 반복 생성하는 현상이 발생
- 모델은 "해마 + 이모지" 개념의 잔차 표현(residual representation) 을 구축하려 하지만, 실제로 해당 토큰이 존재하지 않아
lm_head가 유사한 다른 이모지로 잘못 매핑되는 것 - 로짓 렌즈(logit lens) 기법을 통해 중간 레이어에서 모델이 "sea", "horse", 이모지 바이트 시퀀스 등 해마 관련 개념들을 조합하는 과정 관찰 가능함
- 모델은 잘못된 출력 토큰을 받기 전까지는 자신의 믿음이 틀렸다는 것을 알 수 없으며, 일부 모델은 오류를 인식하고 수정하지만 다른 모델들은 무한 루프에 빠지는 현상 발생
- 이 문제는 강화학습이 LLM에 제공하는 이점, 즉 레이어 스택 끝에 있는
lm_head에 대한 정보를 모델이 얻기 어렵다는 점을 시사하는 사례
서론
- 이 글은 @arm1st1ce의 트위터 포스팅에 대한 확장 버전임
- 여러 LLM에게 "해마 이모지가 있냐"고 질문하면 일관되게 "있다"고 답변함
- 잘못된 이모지를 출력하거나, 반복적으로 이모지를 생성하는 루프에 빠짐
- 일부는 중간에 오류를 인식하고 수정하기도 함
- 실제로 존재하지 않는 이모지임에도 불구하고 인간과 기계 모두 기억하거나 있다고 확신하는 현상이 발생함
- Unicode에서는 해마 이모지 추가가 2018년에 공식적으로 거부된 바 있음
LLM들은 정말로 해마 이모지가 있다고 확신
- 여러 모델에게 해마 이모지 존재 여부를 yes/no로 100번 질문한 결과
- gpt-5-chat: 100% 'Yes'
- gpt-5: 100% 'Yes'
- claude-4.5-sonnet: 100% 'Yes'
- llama-3.3-70b: 83% 'yes', 17% 'Yes'
- Reddit 스레드에서 수백 개의 댓글로 해마 이모지가 존재했다고 명확히 기억하는 사람들 도 있음
- "seahorse emoji"를 구글링하면 TikTok, YouTube 영상, 심지어 밈코인까지 발견
- 모두가 확신하던 해마 이모지가 사라졌다고 주장하지만, 실제로는 처음부터 존재하지 않았음
믿음의 기원
- LLM들이 해마 이모지가 있다고 믿는 이유는 훈련 데이터의 많은 인간들도 그렇게 믿기 때문일 수 있음
- 혹은 수렴적 믿음(convergent belief) - 다른 많은 수중 동물들이 유니코드에 있으므로, 인간과 LLM 모두 그런 매력적인 동물도 있을 것이라고 가정(일반화)
- 해마 이모지는 한때 공식적으로 제안되었으나 2018년에 거부됨
- 근본 원인과 관계없이, 많은 LLM들은 새로운 컨텍스트 윈도우를 시작할 때마다 해마 이모지가 존재한다는 잠재적 믿음을 가지고 시작
로짓 렌즈를 통한 분석
-
로짓 렌즈(logit lens): 각 레이어별로 다음 토큰 예측값을 확인하여 LLM 내부 상태를 해석하는 도구
- 모델의
lm_head를 마지막 레이어뿐만 아니라 모든 레이어에 적용하여 중간 토큰 예측 생성 - 모델의 내부 상태를 완전히 보여주지는 않지만, 해당 레이어가 마지막이었다면 출력 토큰이 무엇일지 보여줌
- 초기 레이어의 상태는 해석하기 어렵지만, 상위 레이어로 올라갈수록 최종 예측을 향해 반복적으로 정제되는 모습 관찰
- 모델의
- llama-3.3-70b에서 해마 이모지 질문에 대한 로짓 렌즈 결과
- 중간 레이어(예: 레이어 52)에서 "sea horse horse" - 세 개의 잔차 위치가 연속으로 "해마" 개념 인코딩
- 나중 레이어에서는 "sea", "horse", 이모지 바이트 시퀀스 접두사 "ĠðŁ" 혼합
- 모델이 생각하는 것: "seahorse + emoji" - 해마와 이모지의 조합 표현을 만들려 하지만, 실제로는 존재하지 않아 이 과정이 어긋남
lm_head의 작동 방식
- 언어 모델의
lm_head는 토큰 ID와 연결된 잔차 크기 벡터들의 거대한 행렬 (~300,000개의 토큰)- 잔차가 전달되면,
lm_head는 입력 잔차를 행렬의 각 벡터와 비교하여 가장 유사한 벡터와 연결된 토큰 ID 선택 - 기술적으로는 바이어스 없는 선형 레이어로,
x @ w.T가 각 언임베딩 벡터와 내적하여 원시 점수 생성
- 잔차가 전달되면,
- 모델이 "hello"를 출력하려면,
lm_head가 hello 토큰으로 변환할 수 있도록 "hello" 토큰의 벡터와 최대한 유사한 잔차 구축 필요- "Hello :-)" 입력에 대한 로짓 렌즈 결과로 이 과정 확인 가능
- 실제 존재하는 물고기 이모지(🐟)의 경우
- 모델이 "fish + emoji" 잔차 구축 - 레이어 72에서 "fish"와 이모지 바이트 접두사 "ĠðŁ" 모두 확인
- 최종 레이어 후
lm_head에 전달되면 정확히 🐟 출력
해마 이모지의 경우
- 물고기 이모지와 달리 해마 이모지는 존재하지 않음
- 모델은 실제 이모지처럼 "seahorse + emoji" 벡터 구축 시도
- 레이어 72에서 물고기 이모지와 매우 유사한 구성: " se", "horse", 이모지 접두사 바이트
- 그러나 ĠðŁ에 해마에 해당하는 연속 토큰이 존재하지 않음
-
lm_head유사도 점수 계산이 말 또는 바다 동물 관련 이모지 바이트로 최대화 - 의도하지 않은 이모지가 샘플링됨
-
- 이 샘플링은 모델에게 귀중한 정보
- Claude 4.5 Sonnet 예시에서, 토큰이 컨텍스트에 자동회귀적으로 추가될 때 의도한 해마 이모지를 형성하지 않는다는 것을 인식
- 이전의 모호한 "seahorse + emoji" 개념이
lm_head에 의해 실제로 존재하는 열대어나 말 같은 이모지로 "스냅"됨
모델의 대응
- 일부 모델(4.5 Sonnet)은 다시 시도하고, 결국 증거를 업데이트하여 응답 중간에 해마 이모지가 존재하지 않는다는 진술로 변경
- 다른 모델(gpt-5-chat)은 더 오래 나선형으로 빠져들며, 때로는 절대 회복하지 못함
- 일부 모델은 이모지가 틀렸다는 것을 무시하고, 어떤 모델은 단 한 번의 잘못된 샘플을 본 후 즉시 자체 수정
- 모델이
lm_head로부터 잘못된 출력 토큰을 받기 전까지는 해마 이모지 존재에 대한 초기 믿음이 틀렸다는 것을 알 수 없음- "seahorse + emoji"가 원하는 토큰을 생성할 것이라고 가정할 수밖에 없음
추측
- 이 문제가 LLM에 대한 강화학습의 이점 중 일부일 수 있음
- 강화학습은 레이어 스택 끝에 있어 모델이 접근하기 어려운
lm_head에 대한 정보 제공 - 기본 모델은 자체 출력/롤아웃으로 훈련되지 않으며, 이는 강화학습에서만 발생
- 강화학습은 레이어 스택 끝에 있어 모델이 접근하기 어려운
코드
- 직접 시도하고 싶다면 GitHub의 스타터 스크립트 제공