이미지·영상 생성 모델을 크게 학습시키는 데 드는 것을 여덟 대목으로 훑는 40분짜리 강의. 생성이 픽셀 위가 아니라 따로 학습시킨 압축기가 만든 좁은 자리에서 일어나고, 텐서가 두 자릿수까지 줄어드는 것이 가능 여부를 정한다는 것부터 짚음. 노이즈를 걷는 한 걸음이 왜 조금씩만 가야 하는지, 가이던스가 스텝마다 모델을 두 번 부르는 대신 무엇을 사 주는지, 증류가 모델을 줄이는 것이 아니라 걸음 수를 줄이는 일이라는 것까지 이어짐. 데이터를 어떻게 고르는지는 비밀이라 말하지 않겠다고 밝힌다.
한줄 코멘트. 제품 발표가 아니라 강의라 값이 아니라 구조가 남는다. 그중 하나가 크다. 생성은 픽셀 위에서 일어나지 않는다. 따로 학습시킨 압축기가 만든 좁은 자리에서 돌고, 그 자리가 두 자릿수 작아지는 것이 되느냐 아예 못 하느냐가 여기서 갈린다. 그런데 발표자가 가장 중요하다고 말한 대목은 정작 비워 둔다. 데이터를 어떻게 고르는지가 모델 품질의 비밀이라 말하지 않겠다는 것이다.
구글 딥마인드에서 10년 넘게 일한 연구자이고 생성 미디어 팀에서 영상과 이미지 모델을 만든다고 소개한다. 이 자리는 그런 모델을 크게 학습시키는 데 들어가는 것 전부를 뒤에서 보여 주는 이야기다.
*디퓨전에 초점을 두는 이유를 먼저 댄다. 요즘 소리와 그림을 만드는 데 사람들이 쓰는 방식이 이것이기 때문이다. 언어 모델 쪽이 주로 *자기회귀에 기대는 것과 다르다.
여덟 대목을 다룬다. 데이터 고르기, 표현, 모델링, 아키텍처, 크게 학습시키기, 샘플링, 증류, 제어다. 모델링과 샘플링 쪽에 할 말이 더 많다고 미리 말한다.
첫 대목에서 바로 문을 닫는다. 데이터를 고르는 일이 결과를 정하는 데 대단히 중요하다고 강조하면서, 자기 박사 시절에는 데이터를 들여다보는 것이 권장되지 않았다고 말한다. 남들과 견주려면 정해진 데이터셋을 써야 했기 때문이다. 데이터를 손보는 데 쓰는 시간이 모델을 만지는 시간보다 나은 투자일 때가 있다고 하면서도, 자세한 것은 공개된 것이 적고 모델을 좋게 만드는 비밀에 해당해 말하지 않겠다고 밝힌다.
픽셀에서 만들지 않는다
그림의 흔한 디지털 표현은 픽셀 격자다. 이미지는 2차원, 영상은 3차원이다. 디퓨전 초기에는 이것을 그대로 모델에 밀어 넣었고 놀랄 만큼 잘 됐다고 말한다.
해상도와 길이를 키우면 그 방식이 무너진다. 1080p 영상 30초를 초당 30장으로 잡으면 학습 예제 하나가 몇 기가바이트다. 그러니 안 된다.
기존 영상 코덱이나 JPEG 같은 압축을 쓰지 않는 이유도 짚는다. 그쪽은 작게 만드는 데 집중하느라 데이터의 구조를 가리고, 그러면 생성 모델링이 아주 어려워진다는 것이다.
그래서 압축기를 따로 학습시킨다. *오토인코더가 그 방법인데, 입력을 좁은 목으로 통과시켜 그대로 되살리게 시키면 그 목에서 압축된 표현이 만들어진다. 그다음 단계에서 그 표현을 뽑아 놓고 그 위에 생성 모델을 학습시킨다. 자기회귀여도 되고 디퓨전이어도 되는데, 소리와 그림에서는 같은 파라미터 예산으로 좋은 결과를 내는 데 디퓨전이 앞선다고 말한다. 만들어진 것은 압축된 상태라 미리 학습해 둔 디코더로 픽셀로 되돌린다.
크기를 예로 든다. 256×256 컬러 이미지가 32×32 격자가 되고, 줄어든 만큼을 채널 몇 개로 메운다. 이렇게 두 자릿수까지 줄일 수 있고, 그것이 메모리에 들어가느냐 아무것도 못 하느냐가 여기서 갈린다.
이 압축이 요즘 코덱보다 오히려 원시적인데 그것이 의도라고 말한다. 신경망 구조가 픽셀의 위치 관계를 상당히 기대기 때문에 그 얼개를 남겨 둬야 한다는 것이다. 한 논문의 그림을 빌려, 압축된 값을 색으로 되비쳐 보면 어떤 동물인지 여전히 알아볼 수 있다고 짚는다. 뜻을 지운 것이 아니라 국소 질감과 미세한 구조만 줄인 것이다.
한 걸음이 도는 자리
디퓨전은 먼저 망가뜨리는 과정을 정한다. 노이즈를 조금씩 더해 정보를 지운다. 그리고 그 노이즈를 걷어 내는 모델을 학습시킨다.
조금 더하면 세부가 먼저 사라진다. 토끼 수염은 안 보여도 실루엣은 남는다. 더 더하면 그 실루엣까지 사라진다.
여기서 중요한 성질이 나온다. 노이즈 낀 그림을 보고 원본이 무엇이었냐고 묻는 것은 답이 하나가 아닌 물음이다. 정보가 이미 지워졌으니 여러 그림이 그 노이즈를 낳을 수 있다. 모델은 하나만 내놓아야 하니 그 여럿의 평균을 낸다. 한 걸음에 끝내면 흐릿한 그림이 나오는 이유가 이것이다.
그래서 예측한 방향으로 조금만 간 뒤 다시 묻는다. 많은 알고리즘은 그 작은 걸음 뒤에 노이즈를 조금 도로 더하는데, 오차가 쌓이는 것을 막기 위해서다.
여기에 관찰 하나를 얹는다. 이미지 몇 장의 주파수 스펙트럼을 로그로 그리면 직선이 나온다. 거듭제곱 관계가 있다는 뜻이다. 반면 가우시안 노이즈는 모든 주파수를 고르게 담아 평평하다. 그래서 노이즈를 걷어 내는 일은 낮은 주파수에서 높은 주파수로, 거친 것에서 세밀한 것으로 만들어 가는 일과 같아진다. 발표자는 이것을 스스로 「디퓨전은 결국 스펙트럴 자기회귀」라고 정리했다고 말한다.
디노이징 모델의 구조는 처음에 U-Net이었다. 영상 분할 같은 데 쓰려고 만든 합성곱 신경망이다. 이후 트랜스포머도 된다는 것이 밝혀졌는데, 언어 모델과 달리 앞만 보게 가리지 않는다. 여기서는 양쪽을 다 봐도 괜찮기 때문이다.
영상 쪽은 갈래가 셋이다. 전부 자기회귀로 펴서 토큰 하나씩 만드는 방식, 3차원 덩어리 전체를 한꺼번에 노이즈 씌우고 걷어 내는 방식, 그리고 시간 축은 자기회귀로 가되 각 프레임은 디퓨전으로 만드는 중간 방식이다. 요즘 영상 모델 대부분이 둘째이고, 셋째의 예로 한 모델을 든다.
크게 학습시키는 쪽은 나눠 맡기는 이야기다. 어느 규모까지는 배치를 여러 칩에 갈라 주면 되는데 어느 지점부터는 모델 자체를 갈라야 한다. JAX로 만드는데 칩 사이 통신을 알아서 줄여 주는 도구가 좋다고 말한다.
발표에 나온 값
| 값 | 무엇 |
|---|---|
| 몇 기가바이트 | 1080p 30초 영상 하나를 픽셀로 담을 때 |
| 256×256 → 32×32 | 압축기가 줄이는 격자 크기 |
| 두 자릿수 | 그렇게 줄어드는 텐서 크기의 규모 |
| 스텝당 2회 | 가이던스를 쓸 때 모델을 부르는 횟수 |
| 50번쯤 | 원래 샘플링이 밟던 걸음 수 |
| 3걸음 | 증류로 절충해 노리는 걸음 수 |
샘플링 알고리즘은 노이즈를 도로 더하는 쪽과 안 더하는 쪽이 있고 서로 내는 값이 다르다고 말한다. 결정론적인 쪽은 처음 노이즈와 결과가 일대일로 붙어 있어 증류할 때 쓸모가 있다.
*가이던스는 이 발표에서 가장 값이 큰 대목이다. 조건 없이 낸 예측과 조건을 준 예측의 차이를 델타라 부르고 그 방향을 키워 새 방향으로 삼는다. 이 값을 올리면 다양성은 크게 줄지만 품질이 크게 오른다. 모델이 제 체급 위를 친다는 표현을 쓴다. 대신 스텝마다 모델을 두 번 불러야 한다. 2021년 논문 하나를 들며 가이던스를 쓴 것과 안 쓴 것을 견준 마지막 축에 드는 자료라고 말하고, 그 뒤로는 다들 늘 쓴다고 한다.
*증류는 언어 모델 쪽과 뜻이 다르다고 못 박는다. 모델을 작게 만드는 것이 아니라 샘플링에 드는 걸음 수를 줄이는 일이다. 경로의 접선을 예측하는 대신 끝점을 바로 예측하도록 학습시킨 것이 컨시스턴시 모델이고, 디퓨전 모델을 그렇게 증류할 수 있다. 다만 한 걸음에 끝내려 하면 대개 잘 안 된다. 50번에 나눠 하던 일을 한 번에 하라는 요구이기 때문이다. 그래서 경로의 일부 구간에만 이 방식을 써서 세 걸음쯤으로 줄이는 절충을 쓴다.
글로 시키는 것 말고도 조건을 주는 자리가 늘고 있다고 말한다. 자기 사진이나 짧은 영상을 주고 그 사람이 들어간 영상을 만들게 하는 식이다.
영상에서는 더 나아간다. 카메라가 어떻게 움직이는지, 사건이 얼마나 빠르게 언제 일어나는지 같은 것은 글로 욱여넣을 것이 아니라고 말한다.
문제는 사전학습 데이터 대부분에 그런 조건 정보가 없다는 것이다. 그래서 글 프롬프트만으로 먼저 학습시키고 나중 단계에서 조건 신호를 더하는 편이 쓸모 있다고 말한다. 그 단계에서 사람 평가를 바탕으로 선호를 맞추는 일도 한다. 강화학습이나 선호 최적화를 쓴다.
가장 크게 비어 있는 자리를 발표자가 먼저 말한다. 데이터를 어떻게 고르는지다. 결과를 정하는 데 가장 중요하다고 말하고서 비밀이라 말하지 않겠다고 한다. 그러면 뒤에 나오는 모든 구조 이야기가 어느 정도까지 결과를 설명하는지도 함께 흐려진다.
값이 거의 없다. 나온 숫자는 텐서 크기와 걸음 수뿐이고 성적이나 비용은 없다. 가이던스를 쓰면 품질이 크게 오른다고 말하면서 무엇으로 얼마나 잰 것인지 대지 않는다. 스텝마다 모델을 두 번 부르는 값이 얼마인지도 없다.
증류 쪽도 마찬가지다. 50번을 세 번으로 줄인다는 것은 걸음 수이고, 그때 품질이 얼마나 떨어지는지는 「한 걸음은 잘 안 된다」와 「세 걸음이면 나을 것」 사이에 있다. 잰 값이 붙지 않는다.
영상 아키텍처 셋도 갈래만 있다. 요즘 대부분이 둘째를 쓴다고 하면서 왜 그쪽이 이겼는지, 셋을 같은 조건에서 견준 결과가 있는지는 나오지 않는다.
조종 쪽은 방향만 있다. 카메라 움직임 같은 신호를 나중 단계에서 더한다고 했는데, 그 신호를 어디서 구하는지가 앞의 데이터 문제와 같은 자리인데도 다루지 않는다.
용어