본문 바로가기

Contact English

【알고리즘】 20강. 오토인코더

 

20강. 오토인코더(autoencoder)

 

추천글 : 【알고리즘】 알고리즘 목차 


1. 개요 [본문]

2. 종류 1. 변분 오토인코더 [본문]

3. 종류 2. 그래프 오토인코더 [본문]

4. 종류 3. matrix factorization [본문]

5. 종류 4. latent topic model [본문]

6. 종류 5. 생성적 적대 신경망 [본문]

7. 종류 6. flow model [본문]


 

1.  개요 [목차]

⑴ 정의 : 입력 데이터를 최대한 압축시킨 후, 압축된 데이터를 다시 본래의 형태로 복원시키는 신경망 

인코더(encoder) : 입력층에서부터 은닉층으로의 인공 신경망. 인지 네트워크라고도 함 

○ 인지 네트워크(recognition network) : 패턴을 감지하고 의미를 부여하는 특수화된 네트워크 

 디코더(decoder) : 은닉층에서부터 출력층으로의 인공 신경망. 생성 네트워크라고도 함 

○ 생성 네트워크(generative network) : 입력 데이터와 매우 유사한 새로운 데이터를 생성할 수 있는 네트워크

○ 오토인코더에서 디코더는 최대한 단순해야 함 : 그래서 디코어에서 GCN은 잘 쓰지 않음

인코더와 디코더가 함께 트레이닝 됨

 

출처 : 이미지 클릭

Figure. 1. 오토인코더의 구조

 

수식화

 

Z = Eθ(X), X̂ = Dϕ(Z)

 

 Z : latent variable

② Eθ : 인코더 네트워크 

: 재구성된 입력 

④ Dϕ : 디코더 네트워크 

⑶ 특징

① 비지도 학습 신경망

② 인코더는 차원 축소 역할을 수행 

③ 디코더는 생성 모델의 역할을 수행

④ 입력층의 노드 개수는 출력층의 노드 개수와 동일 

⑤ 은닉층의 노드 개수는 입력층의 노드 개수보다 작음 

차원 축소 알고리즘도 오토인코더의 한 예시라고 할 수 있음 

 효과

 효과 1. 데이터 압축 : 은닉층이 입력층보다 더 작은 개수의 노드를 가지면, 이 네트워크는 입력 데이터를 압축할 수 있음

 효과 2. 데이터 추상화 : 복잡한 데이터를 다차원 벡터으로 변환하여 입력 데이터 분류 혹은 재조합을 가능케 함

 이러한 다차원 벡터를 은닉층, 피처(feature)라고도 함

 재조합 알고리즘으로는 대표적으로 PCA 알고리즘이 있음

효과 3. 은닉 변수 추론 : 입력 데이터를 구성하는 prior를 latent variable로 두면, 오토인코더는 이를 추론하는 기능을 함

○ 디콘볼루션(deconvolution)이라고도 함 

 

 

2. 종류 1. 변분 오토인코더(VAE, variational autoencoder) [목차]

⑴ 개요

 알려진 확률분포를 도입하기 위해 잠재공간 및 변분추론을 사용함 

② 확률분포의 종류에 따라 ZINB 오토인코더(zero-inflated negative binomial autoencoder) 등이 있음

⑵ 구성

① 인코더 : 입력 데이터를 은닉층에서의 확률분포, 즉 parametrized distribution으로 맵핑함 

② 디코더 : parameterized distribution을 Bayesian inference에서의 prior로 보고 출력층을 맵핑함

○ 학습 : parametric posterior와 true posterior 간의 차이를 비용함수를 통해 최소화 

 오토인코더와의 차이 : 오토인코더는 결정론적인 데 반해, 변분 오토인코더는 확률론적 

latent 매칭을 자연스럽게 하는 것은 오토인코더보다 변분 오토인코드가 더 좋음 

⑶ 수식화 

 

Z ~ qθ(Z | X), X̂ = Dϕ(Z) 

 

 Z : latent variable

② qθ : 조건부 확률분포

③ X̂ : 재구성된 입력

AE, VAE 손실함수 비교 

응용 1. β-VAE : 각 임베딩 축이 나이, 성별, 인종 등과 각각 관련됨

 

 

3. 종류 2. 그래프 오토인코더(GAE, graph autoencoder) [목차]

그래프 이론 및 라플라스 행렬을 이용하여 오토인코더와 상당히 유사한 손실함수가 정의됨

 

 

⑵ 그래프 오토인코더가 변분추론과 결합한 경우를 그래프 변분 오토인코더(VGAE, variational graph autoencoder)라고 함

AE, GAE, VGAE 손실함수 비교 

 

 

4. 종류 3. matrix factorization [목차]

⑴ 정의 : 알고 있는 A 행렬을 W 행렬과 H 행렬의 곱으로 분해하는 알고리즘. A ~ W × H

 A 행렬 : 샘플-특성을 나타내는 행렬. 샘플로부터 알 수 있음

② H 행렬 : 변수-특성을 나타내는 행렬

K means clustering, PCA 알고리즘과 유사함 

④ 오토인코더는 non-linear transformation을 포함하므로 matrix factorization보다 넓은 개념

⑤ 다음 알고리즘들은 least square method에 기반을 두고 있지만, gradient descent method 등을 활용할 수도 있음 

⑵ 알고리즘 : R = UV, R ∈ ℝ5×4, U ∈ ℝ5×2, V ∈ ℝ2×4인 U, V를 탐색

 

import numpy as np
R = np.outer([3,1,4,2.,3],[1,1,0,1]) + np.outer([1,3,2,1,2],[1,1,4,1])
U=np.random.rand(5,2)
V=np.random.rand(2,4)
for i in range(3):
    V,_,_,_=np.linalg.lstsq(U, R, rcond=None)
    Ut,_,_,_=np.linalg.lstsq(V.T, R.T, rcond=None)
    U=Ut.T
U@V # it is similar to R!

 

3-1. NMF(non-negative matrix factorization)

 

import numpy as np
R = np.outer([3,1,4,2.,3],[1,1,0,1]) + np.outer([1,3,2,1,2],[1,1,4,1])
U=np.random.rand(5,2)
V=np.random.rand(2,4)
for i in range(20):
    V,_,_,_=np.linalg.lstsq(U, R, rcond=None)
    V = np.where(V >= 0, V, 0) #set negative entries equal zero
    Ut,_,_,_=np.linalg.lstsq(V.T, R.T, rcond=None)
    U=Ut.T
    U = np.where(U >= 0, U, 0) #set negative entries equal zero
U@V # it is similar to R!

 

3-2. matrix completion (Netflix 알고리즘) : 마스킹된 R에 대하여 matrix factorization을 진행하는 것

 

import numpy as np
R = np.outer([3,1,4,2.,3],[1,1,0,1]) + np.outer([1,3,2,1,2],[1,1,4,1])
mask=np.array([[1.,1,1,1],
               [1,0,0,0],
               [1,0,0,0],
               [1,0,0,0],
               [1,0,0,0]])
               
U=np.random.rand(5,2)
V=np.random.rand(2,4)
RR = U@V
RR = RR*(1-mask)+R*mask

for i in range(20):
    V,_,_,_=np.linalg.lstsq(U, R, rcond=None)
    V = np.where(V >= 0, V, 0)
    Ut,_,_,_=np.linalg.lstsq(V.T, R.T, rcond=None)
    U=Ut.T
    U = np.where(U >= 0, U, 0)
    RR = U@V
    RR = RR*(1-mask)+R*mask

RR*(1-mask)+R*mask # it is similar to R!

 

3-3. SVD(singular value decomposition)

응용 1. cell type classification

 조직으로부터 얻은 scRNA-seq로부터 cell type proportion을 얻기 위한 목적

② cell type heterogeneity에 의한 confounding effect를 줄이는 게 중요

1-1. constrained linear regression

1-2. reference-based approach

1-2-1. CIBERSORT(cell-type identification by estimating relative subsets of RNA transcript) : 샘플별로 cell type proportion, p value를 확인할 수 있음

응용 2. joint NMF : 멀티오믹스까지 확장하게 함 

응용 3. metagene 추출 

응용 4. Starfysh : 다음은 공간전사체에서 archetype을 추론하고, 각 archetype을 대표하는 anchor를 결정하는 알고리즘 

단계 1. 오토인코더 구성

 

 

○ X ∈ ℝS×G : 입력 데이터 (스팟 × 유전자)

D : archetype의 수 

B ∈ ℝD×S : 인코더. archetype을 추론하는 상황으로, 이때 각 archetype별로 전체 스팟에 대한 분포의 합은 1이어야 함

H = BX : latent variable

W ∈ ℝS×D : 디코더. 입력 데이터를 재구성하는 상황으로, 이때 각 스팟별로 전체 archetype 가중치의 합이 1이어야 함 

Y = WBX : 재구성된 입력 

단계 2. 최적화 알고리즘을 풀어 W, B를 계산 

 

 

단계 3. W 행렬에서 각 archetype에 대한 가중치가 가장 높은 스팟들이 anchor spot으로 선택됨

단계 4. granularity 조정 : archetype 간의 거리가 가까운 경우 이를 병합하거나, 그 거리를 조정하는 계층적 구조를 사용

단계 5. 각 anchor 별로 nearest spot을 탐색하여 archetypal community를 형성하고 마커 유전자를 탐색 

단계 6. signature gene set이 주어지는 경우, 기존의 gene set에 archetypal marker gene들을 추가하고 anchor를 다시 계산 

이때 stable marriage matching 알고리즘을 활용하여 각 archetype은 가장 유사한 signature와 대응됨

 

 

5. 종류 4. latent topic model [목차]

4-1. unigram

4-2. LSI (latent semantic indexing)

응용 1. probabilistic LSI 

 단점 1. 자연어로된 문서를 위한 생성형 모델로 적합하지 않음 : 학습에 사용되지 않은 문서를 적절히 확률적 모델링하기 여러움

단점 2. 파라미터의 개수가 학습에 사용된 문서의 개수에 선형 비례함 

4-3. LDA (latent Dirichlet allocation)

① 개요

○ 정의 : document × word proportion이 주어져 있고 이를 document × topic, topic × word proportion으로 구분하는 것 

○ LDA 모델에서의 latent multinomial variable을 topic이라고 함 

NMF와 비슷하게 sparse matrix를 생성시킴 

② 수식화 : 문서 d의 topic 분포 θd, topic k의 단어 분포 βk에 대하여

 

 

응용 1. 실제 LDA 모델 

○ 전제 : 파라미터 α, β, topic mixture의 결합 분포 θ, N개의 topic의 집합 z, N개의 단어의 집합 w

○ 목표 : θ, z를 구하기 위해 베이즈 정리(Bayes theorem)를 이용 

 

 

○ 결합확률분포 

 

 

○ θ, z를 구하기 위해 variational EM(expectation maximization)을 사용  

응용 2. two-level model : hidden topic variable z에 대하여

 

 

응용 3. ProdLDA (Github)

단어의 생성확률을 기존 LDA는 mixture of multinomials로 모델링하는 반면 ProdLDA는 product of experts로 모델링함

 

 

장점 1. LDA는 θd ~ Dirichlet(α)와 같이 확률분포의 샘플링을 직접 모델링하여 변분추론, Gibbs 샘플링과 같은 MCMC 기반 추론을 사용하여 느린 반면, ProdLDA는 PyTorch 또는 Tensorflow 등 딥러닝 프레임워크 안에서 훨씬 빠르게 실행할 수 있음

장점 2. LDA는 topic-word 분포를 mixture 모델로 구현하는 반면 ProdLDA는 여러 topic의 곱셈 형태로 구현하여 word distribution이 매우 뚜렷하게 나옴 ( 하나라도 0이 섞여 있으면 그것의 곱은 0일 것이기 때문)

장점 3. ProdLDA는 가우시안 분포를 따르는 z로부터 합이 1이고 non-zero entry를 가지는 p를 생성하는데 (cf. p = Softmax(z)), 이 때문에 임베딩 공간에 있는 pre-trained embedding, graph feature 등을 함께 활용할 수 있음 

⑥ Python 프로그래밍 : sklearn.decomposition.LatentDirichletAllocation 

 

from sklearn.decomposition import LatentDirichletAllocation
lda = LatentDirichletAllocation(n_components=10, random_state=0)

spotwise_celltype_probability.shape
# (10000, 14)

theta = lda.fit_transform(spotwise_celltype_probability)
print(theta.shape) 
# (10000, 10)

beta = lda.components_
print(beta.shape)
# (10, 14)

 

4-4. CountClust (Dey et al., 2017)

4-5. FastTopics (Carbonetto et al., 2023)

 

 

6. 종류 5. 생성적 적대 신경망(GAN, generative adversarial network) [목차]

⑴ 개요 

① 서로 경쟁하는 두 개의 신경망을 구현

② 경쟁 관계자 : 생성자(generator), 감별자(적대자, discriminator, adversary)

③ 학습 과정 : 생성자는 점점 실제 같은 이미지를 생성하고, 감별자는 진짜와 가짜를 점점 잘 구별

④ 비지도 학습

 

출처: 서울 사이버 대학

Figure. 2. GAN 모식도

 

⑵ 생성자(G) 모델 

① 역할 : 임의의 n차원 데이터(잡음)를 입력받아 이미지 생성

○ 예 : 28 × 28 × 1 흑백 이미지

② 옵티마이저 : 감별자 옵티마이저와 공통으로 사용하지 않도록 별도 생성

③ 손실함수 

○ 목표 : 가짜 이미지를 만들었는데, 판별자(D)가 그걸 진짜(1) 라고 판단하게 만들기

BCE(binary cross entropy)를 이용해 모든 값이 1인 행렬과 감별자의 결과 행렬과 손실 계산

○ LG = BCE(1, D(G(z)))

⑶ 감별자(D) 모델 

① 역할 : 생성자가 생성한 이미지를 입력받아 진짜와 가짜를 이분법으로 분류

: sigmoid 확률

② 옵티마이저 : 생성자 옵티마이저와 공통으로 사용하지 않도록 별도 생성

③ 손실 함수 : 두 개의 손실함수의 합

○ 목표 : 진짜 이미지는 진짜(1) 로 맞히고 생성자가 만든 가짜 이미지는 가짜(0) 로 맞히기

○ 진짜 이미지에 대한 손실 LD,real = BCE(1, D(x))

○ 가짜 이미지에 대한 손실 LD,fake = BCE(0, D(G(z)))

○ 최종 D 손실함수 LD = LD,real + LD,fake

 

 

7. 종류 6. flow mdel [목차]

⑴ XVFI : optical flow 일종

⑵ FILM(Frame Interpolation for Large Motion) : 인코더 + U-Net like decoder

 

입력: 2023.06.27 00:55

수정: 2025.06.22 18:49