게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
시간을 거꾸로 돌리는 방법과 AI 그림 이야기
게시물ID : science_68767짧은주소 복사하기
작성자 : Rekiel
추천 : 4
조회수 : 2728회
댓글수 : 1개
등록시간 : 2023/09/26 22:04:39
옵션
  • 창작글

오랜만에 놀러왔다가 이런 게시판이 있었지 재밌어서 또 적는 글. 장문주의. 수학주의.

 

 

시간에 대한 미분방정식 (ordinary differential equation, ODE)

스크린샷 2023-09-26 174310.png

의 의미는 사실 적분꼴로만 정의됩니다. 일반적으로 t=0 에서 출발한다고 치면,

스크린샷 2023-09-26 174316.png

이렇게 표현이 되지요. 그런데 이러한 정적분은 t가 0보다 작더라도 잘 정의되며, 또한 꼭 0에서 출발할 필요도 없습니다. 예를들어서

스크린샷 2023-09-26 174324.png

이렇게 쓸 수도 있지요. 우리는 이것을 x(T) 에서 출발해서, 시간을 거꾸로 돌려서 t까지 돌아간 것이라고 이해할 수 있습니다.

 

그런데 여기에 약간의 랜덤성을 가미하면 어떻게 될까요? 주식차트처럼 말이죠. 랜덤 노이즈(Brownian motion) 항을 포함한 미분방정식을 확률미분방정식, 영어로 stochastic differential equation (SDE) 라고 합니다.

스크린샷 2023-09-26 174329.png

이렇게 표현합니다. 잘 보면 왠지 양변을 dt로 나눠주고 싶어지는데, 그러면 처음 ODE에 dW 라는 항이 추가된 꼴입니다.

스크린샷 2023-09-26 174334.png

물론 이렇게 표현할 수도 있긴 합니다만, W(t) 가 Brownian motion 일 경우 미분불가능하죠 그래서 SDE 역시 적분꼴로 이해해야 합니다.

스크린샷 2023-09-26 174340.png

새로 추가된 항은 Ito stochastic integral 인데 자세한 이해는 넘어가기로 하고, 중요한 것은 이걸 써먹으려면 x(t)는 미래를 보고와선 안됩니다. 오직 과거의 정보만을 가지고 있어야 하지요.

그러다보니 SDE 는 ODE처럼 시간을 거꾸로 돌리기가 매우 곤란해집니다.

스크린샷 2023-09-26 174346.png

이렇게 써버리면 x(t) 가 미래 (t부터 T까지) 를 보고와버리거든요. 자칫하면 시공간의 모든 질서가 무너져버리게 됩니다!!

 

이를 해결하고 SDE 모델의 시간을 거꾸로 돌리는 방법에는 2가지가 있습니다. 하나는 BSDE 라고 하는 방법인데 생략하고, 다른 하나가 이 글에서 소개할 time-reversal 이라는 개념입니다. 아주 단순한 SDE 하나를 봅시다:

스크린샷 2023-09-26 174351.png

f(x) = -bx 이고 시그마는 그냥 상수인 경우입니다. 이 확률과정을 Ornstein-Uhlenbeck process, 줄여서 오-유 프로세스 라고 합니다. 앗 이 사이트의 이름이.. 암튼 이때 X(t) 의 확률밀도함수를 p_t 라 합시다. 

이제 새로운 프로세스 Y를 Y(t) = X(T-t) 로 정의합시다. 이 말인즉슨, Y(0) = X(T) 에서 출발해서 Y(T) = X(0) 까지 시간을 돌려 거꾸로 쫒아가겠다는 거죠. 이 Y는 다음과 같은 식을 따라간다는 것이 알려져있습니다:

스크린샷 2023-09-26 174356.png

여기서 dW를 time-reversal of Brownian motion이라고 합니다. W(T)-W(T-t)에 해당하는데, 이녀석의 확률분포는 Brownian motion과 똑같습니다. 즉 X(T) 가 주어진 상태에서, 시간을 거슬러올라가 X(t)의 샘플을 얻으려면 그냥 W를 보통의 B.M. 이라고 생각하고 역방향으로 돌릴 수 있습니다.

 

이 오-유 프로세스는 아주 유용한 특징을 가지고 있습니다. T가 충분히 크고 적당한 가정을 하면 p_0에 관계없이 p_T 는 정규분포로 수렴합니다. 정규분포? 우리가 가장 잘 이해하고 있는 확률분포인데다가 샘플링하기도 쉽죠. 그렇다면 이런 논리를 생각해볼 수 있습니다.

1. 우리는 p_0 에서 샘플을 하나 뽑고싶다.

2. 그런데 p_0 는 뭔지 잘 모르겠지만 p_T는 정규분포에 매우 가깝다.

3. 정규분포에서 Y(0) 를 뽑은다음, 역방향으로 돌리면 Y(T) 는 (유사) p_0 에서 뽑은 샘플이다!

 

오 괜찮군요! 그런데 Y를 굴리려고보니 ∇log(p_(T-t)) 라는 함수가 우릴 가로막습니다. 어.. 이건 어떻게 하죠 선생님? 이럴 땐 데이터가 필요합니다. 상황을 이렇게 수정합시다.

1. 우리는 p_0 에서 뽑은 샘플이 잔뜩 있는데, 하나 더 뽑고 싶다. 그런데 지금 있는 샘플중에 하나 고르긴 싫다.

2. 샘플들을 X(0) 에 넣고 정방향으로 잔뜩 돌린다.

3. 돌린 데이터를 사용하여 ∇log(p_(T-t)) 를 근사한다.

4. 정규분포에서 Y(0) 를 뽑은다음, 역방향으로 돌리면 Y(T) 는 p_0 에서 뽑은 샘플이지만, 기존 샘플이랑은 다른 녀석이다!

 

최근에는 다른 방식들이 또 등장하고 있습니다만, 이것이 기본적으로 AI야 동탄해줘(?) 의 기본적인 원리가 됩니다. 수많은 그래픽 데이터는 사실 각 픽셀에 RGB 값이 저장된 숫자 벡터입니다. 우리가 만약에 대충 아무 숫자나 들어간 벡터 하나를 뽑아서 그림으로 출력하면 99.999% 는 그냥 이상한 노이즈처럼 보일거에요.

"말이 되는 그림" 에 해당하는 벡터는 극소수일겁니다. 위의 모델을 이용하면 수많은 그림들을 넣고 "정방향" 으로 돌리면서 그림을 노이즈로 만들어버리고, 그 데이터를 사용하여 역방향 dynamics 를 학습하죠. 그리고 거꾸로 아무 노이즈에서나 출발해서 "역방향" 을 돌리면 그림이 하나 튀어나오는 겁니다.

 

 

몇 년 전엔 GAN 이라는 모델이 핫했지요. 딥페이크 영상이란게 화제가 되기 시작했을 때인데, 위의 방법 (정방향-노이즈로 만들며 역방향 학습-역방향으로 샘플 생성)이 등장하고 싹 들어가 버렸습니다. 이 방식을 Score generative model 혹은 diffusion model 이라고 부릅니다.  다만 요새의 트렌드는 또 다른 방식을 쓴다고 하네요. 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호