이번에는 DANN (Domain-Adversarial Training of Neural Networks) 의 학습방법에 대해 알아보겠습니다. DANN 은 언제 쓰이고 목적이 무엇일까요?
DANN 의 목적?
source domain 과 target domain 에서 공통된 무언가를 추출해서 domain shift를 줄여보려는 것이 DANN의 목적입니다.
DANN 은 어떻게 학습을 하길래?
[##_Image|kage@1A6lt/btrJhylCtRL/MECIIgh613T5yPzoVZvvqk/img.png|CDM|1.3|{“originWidth”:1743,”originHeight”:945,”style”:”alignCenter”,”alt”:”DANN 네트워크 구조”,”caption”:”DANN 네트워크 구조”}_##]
DANN의 구조를 보면 위와 같습니다. 각 블록에 대한 설명은 이 글(DANN 에 대한 간단한 설명 (Domain Adversarial Training of Neural Networks))을 보고 오시면 되겠습니다. 최적화 해야 하는 parameter는 $\theta_f, \theta_{c} , \theta_{st}$ 총 세가지가 있습니다. 이 parameter를 어떤식으로 학습해야 할까요? DANN의 목적을 생각해보면 답은 쉬워집니다.
loss를 줄여 말어?
위의 구조에서 확인할 수 있는 loss 로는 우리가 하고자 하는 task 와 관련된 $L_c$가 있고 $L_d$가 있습니다. $L_c$는 Task 와 관련있습니다. 우리의 목적은 Task의 정확도를 높히는 것이므로 $L_c$를 최소화 하는 방향으로 $\theta_f, \theta_c$를 학습하게 됩니다. 반면에 $L_d ( \theta_f , \theta_{st})$를 생각해 보겠습니다. Source domain 이냐 target domain 이냐를 classfy하는 것과 연관되어있는데요. 어떻게 학습해야 할까요? Feature representation의 역할을 생각해보면 source domain 와 target domain 의 공통된 성질을 추출하는 역할을 합니다. source domain 과 target domain 을 하나의 domain 에서 나온것처럼 변형을 해야겠죠. 그럴러면 어떻게 해야 할까요? Domain classifier가 먹통이 되게끔 학습을 해야 합니다. 그렇단 얘기는 domain classifier 의 loss $L_d$가 최대화 되는 방향으로 $\theta_f$를 업데이트 해야합니다. feature representation 에서 domain 에 상관없는 feature를 출력한다고 해도 domain classifier는 domain을 잘 classify 함으로써 feature representation 이 더 학습을 해야한다는것을 알려주는 역할을 한다고 볼수도 있겠죠. ( $L_d$가 최소화 되는 방향으로 $\theta_st$ 업데이트) Domain classifier 는 domain 을 구분하게끔 학습하고 Feature representation 을 domain 을 구분 못하게끔 (domain 이 변해도 공통된 성질을 추출) 학습하게 됩니다. 이렇듯 한쪽은 loss를 올리고 한쪽은 loss를 내리는 적대적인 관계에 있어서 Domain-Adversarial Training of Neural Networks이라 부르는 것 같습니다.
정리
$\theta_f$는 $L_c$를 최소화 시키도록 $L_d$를 최대화 시키도록
$\theta_c$는 $L_c$를 최소화 시키도록
$\theta_st$는 $L_d$를 최대화 시키도록 학습한다.