728x90
반응형
15강. 오토인코더
< Keyword >
AutoEncodoer :
비지도로 입력 데이터의 효율적인 표현인 coding을 학습할 수 있는 신경망이다. 간단하게 생각해보면 입력을 출력으로 복사하는 것 뿐이다.
- Encoder : 입력을 내부 표현으로 바꿔준다.
( recognition network ) - Decoder : 내부 표현을 출력으로 바꿔준다.
( generative network )
출력과 입력의 개수는 동일해야한다.
재구성 (Reconstruction) 손실 :
오토인코더가 입력을 재구성하기 때문에 출력을 종종 재구성이라고 한다. 비용 함수는 재구성(출력)이 입력과 다를 때 모델에 패널티를 부과하는 ‘재구성 손실’을 포함한다.
# Outputs = 출력 / X = 입력
# MSE / Cross-Entropy를 사용할 수도 있다.
reconstruction_loss = tf.reduce_mean(tf.square(outputs - X))
과소완전 (Undercomplete) :
내부 표현이 입력 데이터보다 저차원일 때를 말함.
ex) 입력 데이터(3) > 내부 표현(2)
오토인코더의 형태 :
- 잡음제거 오토인코더 :
입력에 잡음을 추가하고, 노이즈가 없는 원본 입력을 복원하도록 훈련시키는 것. 노이즈가 있으므로 단순히 입력을 출력으로 복사하는 것이 아니라 데이터에 있는 패턴을 찾아야한다. 가우시안 잡음이거나 드롭아웃으로 잡음을 발생시킬 수 있다.
# Gaussian Noise
X = tf.placeholder(tf.float32,shape=[None,28*28])
X_noise = X + 1.0 + tf.random.normal(tf.shape(X))
# Dropout
dropout_rate = 0.3
training = tf.placeholder_with_default(False,shape=(),name='training')
X = tf.placeholder(tf.float32,shape=[None,28*28])
X_drop = tf.layers.dense(X,dropout_rate,training=training)
- 희소 오토인코더 :
비용 함수에 적절한 항을 추가하여 오토인코더가 코딩층에서 활성화되는 뉴런 수를 감소시키도록 만든다.
먼저 코딩층의 실제 희소 정도를 측정해야 한다. 이를 위해 전체 훈련 배치에 대해 코딩층의 평균적인 활성화를 계산한다.
예를 들어 한 뉴련의 평균 활성화가 0.3이고 목표 희소 정도가 0.1이라면 이 뉴런은 덜 활성화되도록 규제되어야 한다. 간단하게는 비용함수에(0.3−0.1)2 을 추가하는 것이다.
하지만 MSE보다 KL-Divergence가 더 강한 그레디언트를 갖기에 이를 사용한다.
여기서는 코딩층에서 뉴런이 활성화될 목표 확률
식의 왼쪽은 활성화 된 경우, 오른쪽은 활성화되지 않은 경우를 계산한다.
sparsity_loss = tf.reduce_sum(kl_divergence(target,real))
VAE (Variational AutoEncoder) :
확률적 오토인코더, 생성 오토인코더이다.
주어진 입력에 대해 바로 코딩을 바로 만드는 대신, 가우시안 분포에서 샘플링한
비용 함수는 이전의 재구성 손실과, latent loss가 존재한다.
latent_loss = 0.5 * tf.reduce_sum(tf.square(sigma) +
tf.square(mu) - 1 - tf.log(eps + tf.square(sigma))
다른 오토인코더들 :
- 수축 오토인코더 (CAE) :
학습하는 동안 입력에 대한 코딩의 변화율이 작도록 제약을 받음. - 적대적 생성 네트워크 (GAN) :
판별자와 생성자간의 minimax game. GAN 리뷰 참고!
728x90
반응형