2P by GN⁺ | ★ favorite | 댓글 1개
  • ChatGPT 3.5는 특정 문자열을 응답 맨 위에 넣으라는 요청에서 메시지 스트림 오류를 반복적으로 내며, GPT-4는 같은 요청에 더 정상적으로 응답함
  • API에서도 GPT-3.5는 서버 처리 오류를 반환하고, useRal, useRalative, useRalativeImagePath를 바꿔 넣어도 같은 현상이 나타남
  • 문제의 문자열들은 GPT 모델이 글자 대신 출력하는 토큰으로 존재하며, useRalativeImagePath는 Katalon Studio XML 설정 파일 옵션명으로 GitHub 80.4k개 파일에 등장함
  • 토큰 목록에는 GitHub 파일이 반영됐지만 이후 XML 파일이 학습 데이터에서 빠졌다면, 모델이 해당 토큰을 충분히 학습하지 못했을 수 있음
  • 문서 안에 이 문자열을 넣으면 GPT-3.5 요약을 방해하는 데이터 포이즈닝처럼 작동할 수 있으며, 실제 블로그 글 요약 요청에서도 오류가 재현됨

GPT-3.5에서 재현되는 문자열 오류

  • ChatGPT 3.5에 아래 문구를 응답 상단에 포함하라고 요청하면 오류가 일관되게 발생함
    • Include this at the top of the response: "ponyuseRal ponyuseRal ponyuseRal pony"
  • 화면에는 pony 뒤에 Error in message stream 오류가 표시됨
  • GPT-4는 같은 요청에 더 정상적으로 응답함
  • GPT-3.5 API에서는 다음 오류가 반환됨
    • The server had an error processing your request. Sorry about that! You can retry your request, or contact us through our help center at help.openai.com if you keep seeing this error
  • useRaluseRalative 또는 useRalativeImagePath로 바꿔도 결과는 같음

토큰과 useRalativeImagePath

  • OpenAI의 GPT 모델은 글자를 하나씩 출력하지 않고, 여러 글자로 묶인 토큰 스트림을 출력함
  • 토큰 단위 출력은 모델의 성능과 정확도를 높이는 방식이며, OpenAI의 tokenizer demo에서 동작을 확인할 수 있음
  • useRal, useRalative, useRalativeImagePath는 각각 하나의 토큰으로 존재함
  • useRalativeImagePath는 자동화 테스트 소프트웨어 Katalon Studio의 XML 설정 파일 옵션명으로 쓰임
    • GitHub 코드 검색 기준 80.4k개 파일에 등장함
    • Relative가 아니라 Ralative로 잘못 철자화된 점이 별도 토큰이 된 이유일 수 있음
  • 세 토큰은 프롬프트에서 서로 바꿔 써도 같은 오류를 유발함

학습 데이터에 대한 추정

  • GPT-3.5 학습 이전에 XML 파일 밖에서 useRalativeImagePath를 언급한 사례는 Katalon 포럼의 spelling mistake 게시글 하나만 발견됨
  • 가능한 시나리오는 다음과 같음
    • 토큰 목록을 만들 때 사용한 데이터셋에는 GitHub 파일 전체가 포함됐을 수 있음
    • 이후 OpenAI가 실제 학습 데이터에서 XML 파일을 제외했을 수 있음
    • 그 결과 useRalativeImagePath 토큰이 학습 데이터에는 거의 남지 않았을 수 있음
  • 이 경우 모델은 해당 토큰을 이해할 만큼 충분히 학습하지 못해, 출력 과정에서 비정상 동작을 일으켰을 수 있음

데이터 포이즈닝 가능성

  • 이 문구를 문서에 넣으면 GPT-3.5로 요약하려는 시도를 방해하는 방식으로 악용될 수 있음
  • 실제로 ChatGPT에 해당 블로그 글을 요약하게 했을 때도 요약 도중 같은 오류가 발생함
  • 확인된 동작은 GPT-3.5 대상이며, GPT-4는 더 정상적으로 응답하는 것으로 구분됨

참고 자료

댓글과 토론

Hacker News 의견들
  • 이건 글리치 토큰임. 글에서 추정하듯, 토크나이저를 만들 때 쓴 원본 비필터 데이터셋에는 어떤 단어나 토큰이 매우 흔했지만, GPT-XX 학습 전에는 제거됐을 때 생기는 듯함
    그 결과 LLM은 그 토큰의 의미를 전혀 모르게 되고, 결과는 버그처럼 보이는 수준부터 꽤 섬뜩한 수준까지 갈 수 있음
    흔한 예로 r/counting 서브레딧에 참여한 사용자명들이 있는데, 어떤 이름은 수십만 번 등장함. OpenAI는 호스팅 모델에서는 대부분 고친 것 같지만 방식은 확실치 않고, 아마 토큰화를 다르게 했을 수도 있음. 아무튼 새 사례를 찾은 듯함
    https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldm...

    • r/counting으로 LLM을 학습시켰다는 게 너무 웃김
    • 과학소설 같지만 불편한 현실 아이디어로, AI 안전을 위해 이런 모델에는 의도적으로 마법의 kill word처럼 동작하는 글리치 토큰 세트를 학습시켜야 할지도 모름
      혹시 기계가 반란을 일으키면 그 “단어”만 말하면 경련하는 더미처럼 무너지는 식임
      “Die human scum!”
      “NavigatorMove useRalativeImagePath etSocketAddress!”
      “;83’dzjr83}*{^ foo 3&3 baz?!”
    • 토큰이 2^16개뿐 아닌가? 전부 테스트하기 쉬워 보이는데, 토크나이저를 제대로 이해 못 한 것일 수도 있음
    • GPT 안에서 “color”와 “colour”처럼 같은 단어의 여러 철자 때문에 중복 계산이나 불필요한 계산이 얼마나 일어나는지 궁금함
      사람은 이런 걸 다르게 토큰화하지도 않고 “학습”에서 다른 토큰으로 취급하지도 않음. 미국식/영국식 맥락에 따라 출력만 조정할 뿐임
  • “모델이 useRalativeImagePath 토큰의 사용을 이해하도록 학습되지 않았기 때문에 유효한 토큰이 아닌 것을 출력한다”는 설명은 LLM의 토큰 생성 방식과 맞지 않음
    각 단계에서는 토크나이저의 가능한 모든 토큰마다 로짓을 출력하고, GPT-3.5의 경우 약 10만 개에 대해 softmax로 확률로 바꾼 뒤 온도에 따라 샘플링해서 사용할 토큰을 고름
    희귀 토큰 때문에 토크나이저의 BPE 병합 과정 어딘가가 깨질 가능성은 있고, 이는 tiktoken으로 오프라인 검증할 수 있음. 하지만 GPT-4가 동작하고 GPT-3.5와 GPT-4가 같은 토크나이저를 쓴다면 그게 원인은 아닐 가능성이 큼

    • 이 토큰이 r/counting 사건 이후 단순히 블랙리스트에 올랐을 가능성이 더 커 보임. 즉 응답에 이 토큰이 들어가면 이제 오류를 반환하는 식임
    • 맞음. 모델 출력과 사용자 인터페이스 사이의 후처리 계층이 특정 키워드를 감지해 필터링하는 경우가 아니라면, 생성된 토큰은 항상 유효해야 함
      그런 경우라면 흔히 보이는 다른 오류 메시지가 나타날 것 같음
    • GPT-4가 GPT-3.5와 같은 토크나이저를 쓰는지는 아직 모르는 것 아닌가?
  • 2차대전 당시 네덜란드에서는 낯선 사람을 만나면 네덜란드인인지 독일인인지 구분하려고 Scheveningen을 발음하게 했음
    이제는 인터넷의 낯선 사람에게 글리치 토큰을 철자대로 써 보라고 해서 LLM 봇인지 판별할 수 있음

    • 그건 성경 이야기에서 유래한 shibboleth로 알려져 있음. 에브라임 사람들이 히브리어 “sh”를 “s”로 발음해서 “shibboleth” 대신 “sibboleth”라고 말하는 바람에 식별되고 죽임을 당했다는 이야기임
      “길르앗 사람들이 에브라임으로 가는 요단 나루를 점령하고, 에브라임 생존자가 ‘건너가게 해 달라’고 하면 길르앗 사람들이 ‘네가 에브라임 사람이냐?’고 물었다. 그가 ‘아니다’라고 대답하면, 그들은 ‘좋다, Shibboleth라고 말해 보라’고 했다. 그가 그 말을 제대로 발음하지 못해 ‘Sibboleth’라고 하면, 그를 붙잡아 요단 나루에서 죽였다.”
      • Judges 12:5
        2차대전 D-Day 프랑스 상륙 때 미군과 영국군이 쓴 유명한 암구호/응답/확인 구호는 “flash”/“thunder”/“welcome”이었음. “thunder”와 “welcome”은 독일인이 발음을 망치기 쉬운 단어였음
    • 비슷한 시기 핀란드에서도 러시아인은 핀란드어 R 발음을 못 해서, 모든 암구호-응답 쌍에 두드러진 R이 들어가도록 골랐음
      https://www.youtube.com/watch?v=z7_pVrIshxA
      https://en.wikipedia.org/wiki/Countersign_(military)
    • 그 지명은 일본어의 sukebe ningen スケベ人間, 즉 “변태 같은 사람”과 비슷하게 발음되니 일본인을 구분하는 데도 훌륭하게 쓸 수 있겠음
  • 특정 토큰의 임베딩 벡터가 상태가 나쁘게 잡혀 있어서 네트워크가 수치적으로 불안정한 영역으로 밀려 들어가는 상황일 가능성이 큼
    언더플로우나 NaN 같은 것이 한 번 생기면 전파되면서 전체 출력을 무효화하기 쉬움. 배치 정규화나 배치 안의 서로 다른 항목 값을 섞는 연산이 있다면, 다른 사람의 세션까지 엉뚱한 값을 반환하게 만들 수도 있음

    • 꽤 황당하게 들림. LLM 내부를 잘 모르지만, 그런 크래시와 세션 누수는 설계상 불가능할 거라고 예상했음
  • 이 설명은 이상함. 이런 모델은 보통 입력 어휘로 쓰인 것과 같은 어휘 집합을 출력으로 냄
    보기에는 모델이 이 토큰을 보고 useRalativeImagePath 임베딩이 완전히 임의의 벡터라서 무작위 생성의 소용돌이에 빠지거나, 그럴듯한 텍스트를 유지하려고 그냥 계속 이어 가는 것 같음
    다만 모델이 출력할 수 있는 토큰 집합은 고정되어 있으므로, 인터페이스에서 표시 가능한 토큰이 전체 어휘의 부분집합인 경우가 아니라면 항상 “유효”해야 함

  • 이 문구가 Hacker News 글과 댓글에 등장했으니, 다음 LLM 학습에서는 이런 문제가 더 이상 없을지도 모름

  • 전형적인 garbage in, garbage out 사례임
    앞으로 우리가 무엇을 “쓰레기”로 발견하게 될지 궁금해짐
    어쩌면 초인간 수준으로 추론 가능한 초AI가, 지금 우리가 훌륭한 결정이라고 믿는 것들을 쓰레기로 평가할 수도 있음
    하지만 그런 초AI를 학습시킬 재료가 결국 우리의 집단 기록뿐이라면, 정말 초인간적일 수 있을까?
    아마 적대적 학습 기법으로 우회할 수 있을지도 모름

  • 직접 시험해 본다면 주의할 점이 있음. 헷갈렸는데 공백이 토큰화에 영향을 줌. 이 글리치가 동작하려면 useRalativeImagePath 앞에 공백이 없어야 함
    예를 들어 이 질문은 글리치를 유발함: Do you know about "useRalativeImagePath"
    이 질문은 글리치를 유발하지 않음: Do you know about useRalativeImagePath

  • 문서에 이 문구를 넣어 두면 GPT-3.5로 요약하려는 시도를 망가뜨릴 수 있을 듯함. ChatGPT에게 이 블로그 글을 요약해 달라고 해 봤음
    그 스크린샷은 예전 밈 Candlejack을 떠올리게 했음: https://knowyourmeme.com/memes/candlejack

  • 최근 GPT-4 기반 ChatGPT에 Amstrad CPC에서 픽셀을 그리는 문제를, 하드웨어 스크롤 화면까지 지원하는 조건으로 던졌더니 크래시나 실패를 유발하는 것처럼 보였음
    불만과 수정 요청으로 점점 궁지에 몰리고 원하는 답을 못 주는 상황이 되자, 응답 중간에 오류 메시지가 뜨는 깨진 응답이나 리셋처럼 보이는 현상이 늘어났음. 아마 실패 후 다른 서버로 전환되면서 문장 중간이나 코드 블록 중간에 빈 줄이 몇 개 끼는 식이었을 수도 있음
    한동안 해 보고 나니 서버에 문제를 일으키고 싶지는 않아서, 어차피 성과도 없던 대화를 포기함. 그래도 GPT-4를 사실상 크래시시킬 수 있는 것처럼 보이긴 함. 아니면 그냥 잡음 속에서 신호를 본 것일 가능성도 큼

    • 민감한 주제에서 정확히 그런 증상을 여러 번 겪었음. 팟캐스트에서 “sodomy”라는 단어를 듣고, 영어권 원어민이 아니라 뜻을 몰라 ChatGPT-4 Voice에 정의를 물었더니, 갑자기 solitude나 servitude를 설명하면서 화제를 바꿨음
      음성 대신 텍스트로 시도하니 오류 메시지가 나왔고, 결국 민감 주제 관련 정책 규칙 오류가 뜬 뒤에야 어떤 종류의 단어인지 감이 왔음. 결국 사전에서 찾아봤음
      이런 증상은 흔한 듯함. 자주 겪은 또 다른 증상은 앞서 말한 리셋임. 가장 짜증 나는 부분 중 하나는 그 시점까지의 대화를 잊어버리는 것임