모든 이야기

softmax를 sigmoid로 바꾸면 학습 시스템도 바뀐다: SigLIP

이미지와 문장을 연결하는 모델의 손실함수에서 softmax를 sigmoid로 바꾼다. 얼핏 보면 함수 이름 하나를 교체한 사소한 변형처럼 보인다. SigLIP 논문은 그 교체가 배치의 의미와 분산 학습의 구현까지 바꿀 수 있다는 점을 보여 준다. 수학식에서 무엇을 한꺼번에 비교하는지가 시스템의 통신 구조로 이어지는 사례다.

이미지와 문장의 임베딩을 같은 공간에 놓는다는 큰 목표는 익숙하다. 중요한 변화는 정답 문장을 다른 문장들과 경쟁시키는 대신, 각각의 이미지 문장 쌍이 맞는 조합인지 독립적으로 판단하는 것이다.

정답 하나를 고르는 문제에서 쌍을 판정하는 문제로

일반적인 softmax 대조 학습은 이미지 하나에 대해 배치의 모든 문장 점수를 모아 정규화한다. 정답 점수를 키우더라도 다른 점수들이 함께 커지면 정답의 확률이 꼭 높아지는 것은 아니다. 한 후보의 점수와 나머지 후보의 점수가 분모에서 연결된다.

SigLIP은 각 쌍의 점수에 sigmoid 기반 손실을 적용한다. 원래 대응하는 쌍은 양성, 배치의 다른 조합은 음성으로 둔다. 해당 쌍의 유사도에 학습 가능한 스케일과 편향을 적용하고, 양성이면 큰 점수, 음성이면 작은 점수가 나오도록 학습한다. 원문의 Algorithm 1에서 이 차이를 확인할 수 있다.

독립적으로 판단한다는 말은 손실의 정규화에 다른 쌍의 점수가 필요 없다는 뜻이다. 임베딩과 모델 매개변수까지 서로 독립이라는 뜻은 아니다. 같은 이미지 벡터가 여러 문장과 비교되고, 같은 인코더가 모든 예시를 처리하므로 학습 신호는 여전히 공유된다.

작은 예시로 이미지 문장 쌍 네 개를 묶어 보자. 모든 조합을 만들면 16개이며, 원래 짝은 네 개, 나머지는 12개다. softmax는 이미지마다 문장 네 개 중 정답을 고르는 문제를 만든다. sigmoid는 16개의 쌍 각각이 대응 관계인지 묻는다. 이 숫자는 구조를 설명하기 위한 산술 예시다.

배치 크기를 키우는 이유를 다시 나눠 본다

대조 학습에서 큰 배치는 흔히 중요하게 여겨진다. 하지만 배치를 키우면 서로 다른 두 효과가 동시에 생긴다. 새 이미지와 문장이 더 많이 들어오고, 각 이미지가 비교할 부정 문장도 많아진다. 데이터 다양성과 부정 쌍의 수가 함께 바뀌는 셈이다.

쌍별 손실을 사용하면 이 효과를 좀 더 분리해 살필 수 있다. 어떤 쌍들을 포함할지, 양성에 비해 음성을 얼마나 사용할지 조절하기 편해진다. 논문은 배치의 예시 수, 쌍의 구성, 음성과 양성 비율을 실험한다. 큰 배치가 좋다는 관찰을 하나의 규칙으로 끝내지 않고, 그 이유를 쪼개는 접근이 인상적이다.

양성과 음성의 수가 다르다는 점은 편향 항의 역할도 설명해 준다. 배치가 커질수록 대응하지 않는 쌍이 훨씬 많아진다. 처음부터 모든 쌍이 대략 양성이라고 예측하면 손실과 그라디언트가 불균형해질 수 있다. 적절한 편향과 초기화는 이 상황에서 학습을 안정화하는 데 중요하다.

다만 음성이라고 이름 붙인 쌍이 의미적으로 반드시 틀린 것은 아니다. 비슷한 강아지 사진과 설명이 여러 개 있다면 원래 짝이 아니어도 잘 어울릴 수 있다. 손실함수를 바꿔도 웹 데이터의 대응 노이즈가 저절로 사라지지는 않는다. 어떤 음성을 고르는지가 여전히 중요한 설계 문제다.

메모리 효율의 정확한 의미

softmax 정규화는 후보 점수들의 묶음을 필요로 한다. SigLIP의 쌍별 손실은 점수들을 작은 덩어리로 나눠 계산하고 누적할 수 있다. 분산 학습에서도 전체 유사도 행렬을 한 장치에 모두 유지해야 한다는 요구를 줄이는 구현이 가능해진다.

그러나 계산할 쌍의 수가 자동으로 줄어드는 것은 아니다. 모든 조합을 사용하면 N개의 예시에서 여전히 N × N개의 점수가 생긴다. 메모리에 한꺼번에 담을 필요가 줄었다는 사실과 총 연산이 선형이라는 주장은 다르다. 임베딩 교환과 인코더 실행에 필요한 통신도 남는다.

이를 책상에 빗대면, 시험지 전부를 한 번에 펼칠 필요 없이 몇 장씩 채점할 수 있게 된 상황이다. 책상이 작아도 작업할 수 있지만 채점해야 할 문제 수가 사라진 것은 아니다. 시스템 최적화에서는 이런 구분이 실제 처리시간을 예측하는 데 중요하다.

내 해석으로는 이 논문의 가치가 여기에서 더 크게 보인다. 손실의 국소성이 메모리와 통신 전략의 선택지를 늘린다. 모델 표현의 품질만큼, 그 품질을 어떤 하드웨어 예산에서 얻을 수 있는지도 연구 문제로 삼는다.

모든 좋은 숫자가 같은 실험은 아니다

논문은 작은 배치에서의 성능과 큰 배치로의 확장을 모두 다룬다. 아주 큰 배치까지 밀어 본 실험에서는 배치를 계속 키울 때 이득이 빠르게 줄어드는 모습을 보고한다. 따라서 무조건 가장 큰 배치를 쓰는 것이 목표라고 읽을 이유는 없다.

또 하나 구분할 부분은 SigLIP과 SigLiT다. SigLiT는 Locked-image Tuning과 결합해 사전 학습된 이미지 인코더를 고정하는 설정이다. 논문에서 적은 장치로 좋은 결과를 얻었다는 사례를 이미지 인코더까지 처음부터 학습한 모든 설정의 비용으로 받아들이면 비교가 잘못된다. 무엇을 이미 배운 상태로 가져왔는지 확인해야 한다.

같은 이유로 모델 크기, 데이터, 해상도, 훈련 기간이 다른 결과들을 손실함수 하나의 효과로 묶어서는 안 된다. 논문 안의 통제된 비교를 먼저 보고, 전체 최고 결과는 시스템의 조합으로 읽는 편이 정확하다.

학습 손실이 이진 판정 형태라고 해서 배포 때의 sigmoid 값이 실제 세계의 정답 확률로 자동 보정되는 것도 아니다. 학습에서 만든 음성 비율과 서비스의 후보 분포는 다를 수 있다. 어떤 임계값을 적용할지는 별도 평가로 정해야 한다.

도입한다면 먼저 비교할 것

실무에서 손실을 바꾸는 실험을 한다면 같은 데이터, 같은 모델, 같은 업데이트 예산에서 시작하는 편이 좋다. 배치 크기만 맞추는 것으로 충분하지 않을 수 있다. 실제 비교에 사용한 쌍의 수와 음성 구성까지 기록해야 손실 변화의 효과를 해석할 수 있다.

또한 최고 배치에서만 평가하지 말고, 자신이 사용할 작은 장치 구성에서도 품질과 메모리, 처리량을 측정하면 좋다. 유사도 행렬을 덩어리로 나누는 구현이 메모리는 줄였지만 통신 대기시간을 늘릴 수도 있다. 논문 아이디어를 가져오는 일과 실제 코드의 병목을 해결하는 일은 연결돼 있지만 동일하지 않다.

배포 후에는 분류와 검색을 따로 확인할 만하다. 임베딩 순위가 좋은 모델이라도 특정 점수의 임계값으로 매칭 여부를 결정할 때는 다른 오류 양상이 나올 수 있다. 나의 적용 제안은 모델을 바꾸기 전에 어떤 방식으로 점수를 사용할지 명확히 적어 두는 것이다.

SigLIP은 유명한 목표를 완전히 새로운 모델로만 풀 필요는 없다는 사례다. 이미지를 언어와 정렬한다는 목표를 유지하면서, 경쟁의 단위를 바꾸고 계산을 배분하는 방법을 바꾼다. 손실함수는 학습의 취향 정도가 아니라 어떤 시스템을 만들 수 있는지 결정하는 인터페이스라는 생각이 남는다.

논문 정보: Xiaohua Zhai, Basil Mustafa, Alexander Kolesnikov, Lucas Beyer, Sigmoid Loss for Language Image Pre-Training, 2023, ICCV. 논문 원문 · 공식 코드와 모델

Dne Cna

컴퓨터공학 잘 하고 싶다

블로그 보기