daniel7481의 개발일지

20221007 3주차 금요일 본문

AI Tech 4기/Level1

20221007 3주차 금요일

daniel7481 2022. 10. 7. 20:05
반응형

피어세션

오늘은 내가 모더레이터였다. 한 주를 마무리하는만큼 상의해야 할 내용이 많았는데, 논문 리뷰에 대한 내용이었다. 우리 모두 논문 리뷰를 하고 싶었지만, 적당한 시기를 찾고 있었다. 무슨 논문을 리뷰할지 어떻게 할지를 정하는 시간이었다. 다음 주 멘토링 시간에 멘토님이 논문 리스트를 주고, 우리가 읽어보기로 하였다. 또 곧 있으면 다가올 Level 2 단계를 위한 팀을 찾는 과정도 시작되었다. 각자가 하고 싶은 프로젝트를 구상해보고, 의견을 모아보기로 하였다. 오늘은 내가 심화 과제를 리뷰해보았고, 완벽하게는 아니지만 느낌 정도는 알 수 있었던 것 같다.

공부 회고

이번에는 Adversarial Autoencoder(이하 AAE)를 구현하는 것이 심화과제였다. 내가 설명해야하는만큼 더 많이 찾아보고 공부하였다.

AAE는 VAE와 GAN의 개념을 합친 모델이다. VAE는 Decoder를 학습시키는 모델이지만, AAE는 Encoder, Decoder 모두 학습을 시킨다. 모델을 가장 잘 나타내는 그림은 아래와 같다

먼저 Adversarial과 Autoencoder를 나눠야 할 것 같은데, Adversarial은 적대적인이라는 뜻이다. GAN에서 A와 같다. GAN에서 Generator와 Discriminator처럼 적대적인 관계로 모델을 짰다는 뜻이다. 다음 Autoencoder는 비지도 학습으로 훈련된 인공 신경망으로, 데이터에 인코딩된 표현을 학습한 다음, 학습된 표현에서 입력 데이터를 최대한 가깝게 생성하는 것을 목표로 한다. 쉽게 이해하자면 입력으로 들어온 분포와 최대한 비슷한 분포를 생성하는 과정을 학습하는 것이다.

위에 있는 p(z)는 prior distribution으로, 진짜 데이터이다. 이러한 데이터를 정규 분포를 따르게 샘플을 추출해오는데, 정규 분포로 추출해오는 이유는 전체 Distribution을 어떤 이미지에 대하여 같은 이미지인데 화소가 증가하거나 조정이 되면 같은 이미지로 인식 못하는 경우가 있어서라고 한다.

class Encoder(nn.Module):
    def __init__(self):
        super(Encoder, self).__init__()

        self.model = nn.Sequential(
            ### Decoder의 reverse라고 생각하면 편합니다
            nn.Linear(1024, 512),
            nn.Dropout(p=0.2),                      #TODO 1: dropout layer을 넣어주세요
            nn.ReLU(),                        #TODO 2: relu layer을 넣어주세요
            nn.Linear(512, 512),               #TODO 3: linear layer을 넣어주세요 
        )

        self.mu = nn.Linear(512, latent_dim)
        self.logvar = nn.Linear(512, latent_dim)

    def forward(self, img):
        img_flat = img.view(img.shape[0], -1)
        x = self.model(img_flat)
        mu = self.mu(x)
        logvar = self.logvar(x)

        z = reparameterization(mu, logvar)
        return z

위는 Encoder 부분의 코드이다. 보면 Sequential로 모든 레이어를 통과하고 나오면 mu와 logvar이 나오는 것을 알 수 있다. 어떤 분포를 알기 위해서는 mu와 var이 필요하므로, 분포를 나타내는 값인 것 같다. 마지막에는 z에 넣어줘서 정규분포로 가져오는 것을 볼 수 있다. 

AAE에는 3가지 패러미터가 있는데, encoder, decoder, discriminator이다. encoder는 분포의 피처를 잘 나타내기 위해 학습을 하고, discriminator는 prior distribution z와 encoder에서 나온 fake 데이터와의 Binary Cross Entropy로 손실값을 구하고, 그 값을 기반으로 학습을 하게 된다.

반응형

'AI Tech 4기 > Level1' 카테고리의 다른 글

20221012 4주차 수요일 회고  (0) 2022.10.12
20221011 4주차 화요일 회고  (0) 2022.10.12
20221006 3주차 목요일  (3) 2022.10.06
20221005 3주차 수요일 회고  (0) 2022.10.06
20221004 3주차 화요일 회고  (1) 2022.10.04