테크레시피

GPT-4o는 어떻게 이미지 인코딩‧토큰 분해할까

AI 채팅 서비스 챗GPT 모델 중 하나인 GPT-4o는 인간으로부터 받은 텍스트를 먼저 토큰으로 처리한 뒤 AI가 다루기 쉬운 수치 벡터로 변환해 계산을 수행한다. 이미지에서도 유사한 처리를 하지만 이때 어떤 처리를 할까.

GPT-4o가 고해상도 이미지를 처리할 때는 이미지를 512×512픽셀 타일로 나눠 처리하며 1개 타일당 토큰 170개를 소비한다. 이 170 토큰이라는 숫자에 주목해 오픈AI가 사용하는 숫자치고는 너무 중간반반하다고 지적하며 왜 170이라는 숫자가 나오는지 조사했다.

가설로 각 타일이 170개 특징 벡터로 변환되어 연속적으로 배열되어 있다는 게 고려된다. GPT-4o 같은 딥러닝 모델이 이미지를 다룰 때는 이미지 픽셀 정보를 직접 처리하는 것보다 고차원 벡터 공간에 매핑한 뒤 처리하는 게 더 효율적이기 때문이다.

이미지를 벡터 공간에 맵핑하는 간단한 방법으로 먼저 512×512 이미지를 64개 미니 타일로 분할하는 방법이 있다. 각 미니 타일은 64×64 픽셀이며 각각 RGB 3개 컬러 채널을 가진다. 이 픽셀을 평평하게 나열하면 64×64×3 1만 2,288차원으로 변환된다. 이 상태는 512×512 이미지가 64개 연속된 1만 2,288차원 벡터로 변환된 것으로 표현할 수 있다. 이를 처리하는 데는 64개 토큰으로 충분하다.

하지만 위 처리 방법은 비효율적이다. 또 GPT-4o가 처리하는 차원 수도 1만 2,288이라고 가정하고 있지만 위 방법으로는 미니 타일이 64개 나열되므로 170개를 나열해 처리해야 할 GPT-4o와도 일치하지 않는다. 근사값을 내는 처리 방법으로 합성곱 신경망 아키텍처 한 종류인 YOLO를 소개하고 있다.

YOLO는 픽셀을 평평하게 나열하는 대신 최소 13×13 그리드로 나열해 처리를 마치는 게 특징이다. 13×13은 169다. 하지만 YOLO 아키텍처를 기반으로 실험한 결과 GPT-4o는 5×5 이하에서는 완벽한 성능을 보이지만 그 이상에서는 성능이 떨어지기 시작하며 13×13에서는 거의 임베딩 벡터를 처리할 수 없다는 것을 알아냈다.

GPT-4o가 실제로 어떤 처리를 하고 있는지 가설을 하나 세웠다. 가설은 GPT-4o가 이미지를 여러 그리드로 나눠 처리한다는 것이다. 먼저 이미지 전체를 1회 처리하고 다음에 이미지를 3×3으로 분할해 처리하고 이번에는 5×5로 분할해 처리하는 식이다. 이를 수식으로 표현하면 1+3^2+5^2+7^2+9^2=1+9+25+49+81=165가 되어 전제한 170에 근접한다. 여기에 2×2 그리드와 또 다른 1을 추가하면 170이 되어 전제와 일치한다는 주장이다.

GPT-4o가 5×5 그리드까지만 완벽하게 처리할 수 있다는 점을 고려하면 최대 5×5 그리드로 분할해 처리할 가능성도 고려된다. 이 경우 타일마다 토큰 3개, 분할 처리마다 토큰 1개를 소비한다고 가정하면 3×(1^2+2^2+3^2+4^2+5^2)+5=170이 되어 일치한다.

그러나 이는 수치적으로 충분히 만족스럽지 않다고 지적하며 GPT-4o가 OCR을 잘 수행하는 이유도 설명할 수 없다고 말한다.

마지막으로 임베딩 벡터로 맵핑에는 YOLO 같은 아키텍처와 유사한 접근 방식이 있는 것 같다. 170 토큰이라는 것은 이미지를 처리하는 데 필요한 계산량 근사값이 아니라 정확히 계산된 뒤 산출된 것 같지만 진실은 불분명하다. 관련 내용은 이곳에서 확인할 수 있다.

추천기사