- 논문에서 Introduction - Contribution 부분을 학생들은 많이 본다.
- 사실 이건 필요가 없다. 저자가 주장하는 것일 뿐.
- 그런데 교수님은 Experiments를 먼저 보신다.
- 이걸 구현하기 위해서 어떤 실험을 해야 하는가?
- 이 모델의 입력과 출력을 먼저 파악하는 게 우선이다.
- Abstract나 Intro는 논문을 소개하고 파는 느낌…
Experiments
- Images
- 입력이 128, 128, 3 이미지
- 출력이 압축된 32, 32, 1를 32, 32, 1로 reconstruction하는 것
- 다뤄야 할 데이터를 파악할 수 있다.
그림
- 이 논문에서 핵심 기술이 무엇인지 파악할 수 있다.
- 거기서 생긴 의문을 먼저 해결하는 것이 우선이다.
- 논문에서 그 부분을 설명한 것을 찾자.
- 예를 들면 gradient 부분… straight-through estimator
- 그리고 코드로 구현해본다고 생각하자. 알겠나? 모르겠으면 더 찾아보고, 알겠으면 ok 넘어가자.
- Model function은 Encoder, Decoder, 그리고 중간의 Gradient를 넘겨 주는 부분으로 이루어질 것이다. Model Function은 Encoder - Cumtom function - Decoder를 묶어서 하나의 모델로 만들어야 한다.
- gradient를 그냥 넘겨주는 부분은 custom function을 정의해서 forward, backward를 구현하면 된다. backward는 근데 함수를 미분한 부분을 넣지 말고 그냥 입력 값을 그대로 return하도록 하면 된다.
- custom function에서 ctx는 forward에서 나온 값을 저장해두는 것이다. 꼭 backward에서도 ctx를 입력받아야 한다.
- 근데 익숙하지 않은 기호가 너무 많다? 그림 옆에 이게 뭔지 한번 써두자.
- 근데 그럼 Loss가 뭘까? 그건 그림에 나와 있다. 그리고 수식을 보면 안다.
- 수식을 이해하는 것 물론 좋다. 근데 수식을 구성하는 요소를 먼저 파악해야 한다.

- 파란색 화살표는 모두 forward이다.
- 세번째 항은 embedding에 stop을 걸었다. 이게 ze를 학습시키기 위함임.
- 두번째 항은 dictionary learging
- 그림에서는 화살표 두 개가 있는데, 왼쪽 화살표는 embedding에 stop을 걸고 온거고, 오른쪽 화살표는 embedding에 stop을 안 걸고 온거다.
- 그래서 forward를 두 번 한 거다. 같은 메모리에 있으면서 embedding에 하나는 detach(sg)를 건 거고, 하나는 안 걸게 되는 건데, 그럼 결국 건 상태로 끝나서 두 번째 항이 제대로 작동하지 않을 것이다.
모델의 성능 확인
- bits/dim은 뭐지?
- 밴치마크 성능 측정을 위한 metric이 뭔지 파악해야 한다.
- 이건 VAE 논문에 나온다.
- LOG-LIKELIHOOD와 같다. 다만 상수(dim)으로 나눠준다는 차이가 있다.
- 그리고 4페이지 밑에 loss가 나온다. log-likelihood 관련한 식이 있다.
- 뭐를 forward를 해줘야 하냐? 그게 중요하다.