AI 기본 지식

What is Domain Generalization & Inductive Bias?

study_love 2025. 11. 28. 00:19

 이번 게시물에서는 Domain Generalization이라는 task에 대해서 알아보고, Inductive Bias를 Model에게 심어서 Domain Generalization problem을 address하는 방법을 알아보도록 하자. 

 딥러닝 모델을 한 줄로 표현하면 그냥 근사함수이다. train data를 보고 train data와 가장 fit한 근사함수를 찾아낼 뿐인 것이다. 따라서 test time에 만약 train때 모델이 보지 못했던 데이터가 input으로 들어오면 모델은 좋은 prediction을 하기 힘들다. 밑의 그림에서 x = 30000이 input으로 들어왔다고 해보자. y값은 -1000000정도가 나올 것이고, 이것은 우리가 원하는 answer가 아니다. test time에 train때 모델이 보지 못했던 데이터가 input으로 들어오는 대표적인 경우가 train data와 test data의 domain이 다를 때이다. concrete example로 설명해보자면, 카메라가 달린 로봇이 앞에 놓인 사과를 잡으려고 하는 로봇 학습의 경우 현실에서 gt를 만들기에 너무 많은 시간과 비용이 들기 때문에, nvidia issac sim같은 simulation환경에서 학습을 시키곤 한다. 그러면 학습할 때 모델은 시뮬레이션 환경 상의 visual input을 이용해서 학습을 하게 되는데, 사실 real world에서 inference를 할때에는 input이 real world의 visual input일 것이다. 따라서 train data와 test data가 차이가 나게 되고, inference시에 성능이 크게 저하되는 문제가 생긴다. 이런 상황을 domain gap이 발생했다고 하고, 이 domain gap을 해결하는 모든 알고리즘들을 domain generalization algorithm이라고 한다. 

 

<딥러닝은 근사함수다>

 

 domain gap이 발생하는 문제를 어떻게 해결할 수 있을까? 

딥러닝이 동작하는 원리를 생각해보면, 사람이 근사함수의 개형을 정해주고, 딥러닝은 그저 그 근사함수의 개형 하에서 가장 train data에 fit한 함수를 만든다. 그렇다면 우리가 할 수 있는 것은 두 가지가 있다. 함수 개형을 건드려서 train data가 없는 부분에도 test stage에서 잘 예측할 수 있도록 만들거나, 데이터를 수정해서 train data가 없는 부분에도 test stage에서 잘 예측할 수 있도록 만드는 것이다. (로봇 학습 예시를 생각해보면 그냥 무지성으로 데이터를 늘리기만 하는건 의미가 없다. test time에 등장하는 데이터들과 가까운 데이터들이 아니라 원래 데이터의 근처에 있는 데이터들만 늘어날 것이다.) 

개형 바꾸기 데이터 수정하기
<개형 바꾸기>

 

 위에서 언급한 로봇학습 concrete example과 함께 각 방법의 예시들을 설명해보도록 하겠다. 먼저 개형을 바꾸는 방법부터 설명하도록 하겠다. 가상환경의 visual input과 현실세계의 visual input은 보통 shape는 비슷한데, texture가 많이 차이가 난다. 따라서 model이 texture보다 shape를 output을 생성할 때 많이 고려하도록 개형을 수정해주면 좋을 것이다. 구체적인 방법에 대해서 알아보도록 하자. 

 우리가 아까의 visual input을 처리하는 알고리즘으로 CNN을 선택했다고 해보자. 우리가 하고 싶은 것은 CNN내에서 texture를 많이 반영하는 부분과 shape를 반영하는 부분들을 알아내고, texture를 반영하는 부분은 모델에서 삭제해버리는 것이다. 자동차 이미지 한장을 준비하고, GAN을 이용해서 여러 texture를 입힌 자동차 이미지 100장을 만들어낸다. 그 이후에 CNN모델에게 classification task를 풀도록 하면, CNN모델의 activation map에서 100장의 input에서 모두 비슷한 값을 가지는 부분이 있고, 다른 값을 가지는 부분이 있을 것이다. 그러면, 다른 값들이 나온 부분이 texture에 민감한 부분일 것이므로, 그 부분을 그냥 block해버리는 것이다. 즉 texture와 관련된 feature는 없애고, shape와 관련한 feature만 남긴다고 생각하면 된다.(오늘은 concept만 설명하는 글이므로 구체적인 구현은 설명하지 않겠다.) 이러한 분석을 통해서 모델 구조(개형) 자체를 수정해버리면서 domain gap문제를 완화하는 방법이 있다. 

 두 번째로는 데이터를 수정하는 것이다. 위의 방법과 거의 비슷한데, shape위주로 모델을 보게하고 싶기 때문에 그냥 texture를 randomized시켜버린 후 모델 input으로 넣으면 모델이 알아서 texture보다는 shape에 집중해서 훈련될 것이라는 논리이다. 

 

 위의 그림들을 이용해서 조금 더 쉽게 설명하면, 훈련 데이터에 없는 x = 30000 정도일때의 y값 예측을 잘 수행하기 위해서 data의 linear increasing하는 feature가 중요하다고 개형을 수정해서 알려주든, 모델이 더 잘 알아들을 수 있도록 데이터를 수정하든 하는 것이다.  (x = 30000인 데이터를 얻을 순 없지만 원본 의 x range보다 range를 늘려줘서 모델에게 linear increasing하는 feature가 있다고 알려주는 셈)  

 

 이렇게 개형을 수정하든, 데이터를 조작하든 모델에게 우리의 사전지식을 주입하는 것을 모델에게 inductive bias를 부여한다고 말한다. 결국 domain gap 문제는 train data distribution에 과적합될 수 밖에 없는 상황의 한계에서 비롯되기 때문에, 모델 구조 혹은 데이터 생성 방식에 우리의 사전지식을 주입하여 모델이 domain-invariant한 feature에 집중하게 만들어서 train data에 존재하지 않던 새로운 domain의 입력에 대해서도 좋은 예측을 낼 수 있도록 근사함수를 만들게 강제하는 것이다.