본문 바로가기

논문 리뷰/GAN

Rewriting a Deep Generative Model 논문 리뷰

사전 훈련된 심층 모델에서 특정 하위 집합만 변형되도록 네트워크 규칙 변경

 

Github

Arxiv

 

 

 

Abstract

GAN과 같은 심층 생성 모델에서 네트워크가 인코딩 되는 규칙을 조작할 수 있는 방법을 소개한다.

해당 논문의 방법으로 GAN에서 특정 부분, 특정 하위 집합만을 조작할 수 있다.

 

 

 

Introduction

심층 네트워크의 의미 및 물리적 규칙을 추가, 제거 및 변경하는 것을 목표로 하는 모델 재작성 작업을 제시한다.

 

모델 내에서 특정한 의미 관계를 찾고 변경하기 위해 선형 연관 메모리의 개념을 심층 생성기의 비선형 컨볼루션 레이어로 일반화하는 방법을 보여준다. 각 레이어는 숨겨진 feature에 대한 키-값 관계 세트로 잠재 규칙을 저장한다.

 

본 논문의 제한된 최적화는 모델의 기존 의미 관계를 가능한 한 많이 유지하면서 연관 메모리 내에서 하나의 특정 규칙을 추가하거나 편집하는 것을 목표로 한다.

 

 

 

Method

Objective: Changing a Rule with Minimal Collateral Damage

가중치가 θ0인 사전 훈련 생성기 G(z; θ0)가 주어지면 잠재코드 zi를 통해 이미지 xi = G(zi; θ0)를 생성할 수 있다.

 

목표는 원하는 변경을 수동으로 생성한 x*i에 대해 이와 일치하도록 계산 규칙을 변경하는 업데이트된 가중치 θ1을 찾는 것이다.

 

이에 대한 전통적인 해결책은 아래와 같이 새로운 가중치 θ에 대해 원본 모델 가중치와의 지각 손실(l)과 목표 이미지와의 지각 손실을 동시에 최소화하는 것이다.

 

여기서 두 가지 수정으로 더욱 효과적으로 만들 수 있다.

  • 모든 가중치를 수정하는 대신 한 레이어의 가중치 W만 수정하여 자유도를 줄임
  • 지각 손실을 사용하지 않고 직접 최적화

 

생성기 연산 G(z; θ)를 특정 레이어 L에 대해 L-1 레이어의 출력을 k로 하고 해당 레이어의 가중치를 W0로 하여 단일 레이어 연산 f(k; W0)로 바꾼다. 그러면 최종 출력 x*i에 근사하는 문제를 해당 레이어의 출력 v*i에 근사하는 문제로 변경할 수 있다.

 

Viewing a Convolutional Layer as an Associative Memory

행렬 W는 {(ki, vi)} key-value 세트를 저장하는 일종의 연관 메모리로 사용할 수 있다.

 

위의 그림에서 (c)와 같이 동일한 키가 여러 이미지에서 의미적으로 유사한 위치를 가진다.

행렬 W는 단순히 key와 value를 매핑하는 역할을 한다.

 

고전적인 작업에서 Kohohen(무려 1973년 논문;)은 W0를 다음과 같이 정의했다.

 

key-value 쌍을 유한 집합으로 가정하고 i번째 열이 i번째 key 또는 value인 행렬 K와 V로 키와 값을 수집한다.

 

위의 최소화는 정규식으로 풀 수 있다.

Updating W to Insert a New Value

W0에 새로운 값 k* → v*를 할당하고 싶다면 새로운 행렬 W1은 다음을 충족해야 한다.

(V-WK를 여전히 최소화 하면서 새로운 값을 할당)

 

이것은 풀 수 있는 제약 선형 최소 제곱 문제이다.

(Λ는 제약 조건으로 작용하는 벡터, v* = W1k*에 의해 결정됨. 자세한 건 부록 B)

 

W0가 정규식을 만족하므로 다음과 같이 단순화

Λ와 (C-1k*)T는 벡터이므로 Λ(C-1k*)T는 각 열이 벡터 (C-1k*)T의 배수인 rank 1 행렬이다. 

 

최종 식은 두 가지 특징이 있다.

  • 새로운 매핑 k* → v*을 적용하면 특정 직선 (C-1k*)T 방향으로 가중치가 업데이트된다.
  • 업데이트 방향은 오로지 새로운 입력 키 k*에 의해 결정된다.

 

 

Generalize to a Nonlinear Neural Layer

업데이트 방향 d 정의

 

특정 비선형 레이어 f(k; W0), 새로운 입력 매핑 k* → v*, 방향 d에 대해 다음과 같이 Λ1 도출

 

Λ1를 계산하면 W1 = W0 + Λ1dT로 가중치를 업데이트한다.

 

한 번에 하나 이상인 S개의 키 변경을 원하거나 원하는 대상 출력이 단일 컨볼루션 커널보다 큰 feature map 패치를 포함하는 경우에는 ΛS를 계산하고

 

 

계산한 ΛS를 통해 WS = W0 + ΛSDST로 가중치를 업데이트한다.

 

여러 개의 키를 사용할 경우 DS의 rank를 줄임으로써 더 구체적으로 만들 수 있다. (부록 D)

 

 

 

Results

다른 방법과 비교

 

워터마크 지우기에서 GAN Dissection과 비교

 

창을 추가하면 반사가 감소되고, 창을 없애면 반사가 증가하도록 규칙 변경