# 들어가며

듀얼리티duality란 무엇일까요? 우리는 보통 머신러닝을 통해 특정 도메인의 데이터 $X$ 를 받아서, 다른 도메인의 데이터 $Y$ 로 맵핑하는 함수를 근사하는 법을 학습합니다. 따라서 대부분의 머신러닝에 쓰이는 데이터셋은 두 도메인 사이의 데이터로 구성되기 마련입니다.

![듀얼리티의 예](https://2195376183-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFzjkZt6ljMBd4YGVCn%2F-LjEvDhMBqM0fPnx0BgI%2F-LX4NFFOjT8F9IP8C39n%2F13-01-01.png?generation=1562561549177924\&alt=media)

다음과 같이 두 도메인 사이의 데이터 관계를 배우는 방향에 따라 음성 인식이 되기도 하고, 음성 합성이 되기도 합니다. 이러한 두 도메인 사이의 관계를 듀얼리티라고 정의합니다. 대부분의 머신러닝 문제는 이처럼 듀얼리티 속성을 가지는데, 특히 기계번역은 각 도메인의 데이터 사이에 정보량의 차이가 거의 없다는 점이 가장 큰 특징이자 장점입니다. 따라서 듀얼리티를 적극적으로 활용하면 기계번역을 고도화할 수 있습니다.

| $D\_1$ 도메인 | $D\_1 \rightarrow D\_2$ | $D\_1 \leftarrow D\_2$ | $D\_2$ 도메인 |
| ---------- | ----------------------- | ---------------------- | ---------- |
| 문장         | 기계번역                    | 기계번역                   | 문장         |
| 음성 신호      | 음성 인식                   | 음성 합성                  | 문장         |
| 이미지        | 이미지 분류                  | 이미지 합성                 | 클래스        |
| 문서         | 요약                      | 본문 생성                  | 문장         |
| 문장         | 텍스트 분류                  | 문장 생성                  | 클래스        |

> 데이터에 따른 듀얼리티 사례

## CycleGAN

번역 이외의 분야에도 듀얼리티를 활용할 수 있습니다. 듀얼리티를 활용하는 또 다른 예로, 영상 처리computer vision에 관한 논문\[63]에서 소개한 CycleGAN에 대해 이야기해볼까 합니다.

CycleGAN이란 다음과 같이 짝지어지지 않은 두 도메인의 이미지들이 있을 때, $X$ 도메인의 이미지를 $Y$ 도메인의 이미지로 변환하는 방법입니다. 사진의 전체 구조는 유지하되 유명한 화가인 모네의 그림 풍으로 바꾸어주기도 하고, 말을 얼룩말 또는 민무늬로 바꾸어 주기도 합니다. 물론 겨울 풍경을 여름 풍경으로 바꿀 수도 있습니다.

![CycleGAN이 성공적으로 적용된 예제](https://2195376183-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFzjkZt6ljMBd4YGVCn%2F-LX4NCwvtTXyg_vzXhF0%2F-LX4NFFQdw2isGglnsrS%2F13-01-02.jpg?generation=1548425964857334\&alt=media)

> [https://junyanz.github.io/CycleGAN/](https://junyanz.github.io/CycleGAN/)

$X\rightarrow{Y}$ 와 $Y\rightarrow{X}$ 모두 각각 생성자 $G, F$ 와 판별자 $D\_x, D\_y$ 를 가지고 있어서 최소/최대화 게임 을 수행합니다.

$G$ 는 $x$ 를 입력으로 받아 $\hat{y}$ 으로 변환합니다. 그리고 $D\_Y$ 는 $\hat{y}$ 또는 $y$ 를 입력으로 받아 합성한 이미지인지 원래 $Y$ 도메인의 이미지인지 예측합니다. 마찬가지로 $F$ 는 $y$ 를 입력으로 받아 $\hat{x}$ 으로 변환합니다. 그리고 $D\_x$ 는 $\hat{x}$ 또는 $x$ 를 입력으로 받아 합성 유부를 판단합니다.

![CycleGAN의 동작 개요\[63\]](https://2195376183-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFzjkZt6ljMBd4YGVCn%2F-LX4NCwvtTXyg_vzXhF0%2F-LX4NFFSijc0ohuBOYtL%2F13-01-03.png?generation=1548425963954528\&alt=media)

이 방식의 핵심은 $\hat{x}$ 나 $\hat{y}$ 를 합성할 때 기존의 도메인 $X, Y$ 에 실제로 속하는 이미지처럼 만들어 내야 한다는 것입니다. 그리고 각각의 $\hat{x}$ 와 $\hat{y}$ 로부터 원래 데이터로 돌아올 수 있어야 한다는 것입니다. 이것을 기계번역에 적용하면 어떻게 될까요?
