이 글은 아래 사이트의 내용을 정리한 글입니다.
https://www.jeremyjordan.me/autoencoders/
1. AutoEncoder란?
- AutoEncoder(오토인코더)란 representation learning 작업에 신경망을 활용하는 비지도 학습 방법입니다. 오토인코더에서의 핵심은 원래의 입력데이터의 압축된 지식표현(knowledge representation)을 만들도록 네트워크에 병목(bottleneck)을 두는 신경망을 만든다는 것입니다.
- 만약 입력 데이터의 특성들이 서로 독립적이라면 압축(compression)과 재건(subsequent reconstruction)은 아주 어려운 일이 될겁니다. 하지만 만약 입력 특성간 상관관계가 있다면, 이것은 학습되어져서 네트워크의 병목현상(bottle neck)을 통해 입력될때 활용될 수 있습니다. 즉, 병목 현상(bottleneck)은 전체 네트워크를 통과 할 수있는 정보의 양을 제한하여 입력 데이터의 학습된 압축을 이끌어 내는 역할을 합니다.
- 그림으로 한번 살펴보면, 오토인코더는 왼쪽 그림과 같이 레이블이 없는(unlabeled) 데이터셋인 입력데이터 x를 가지고 입력데이터를 재건한 출력 값(x^)를 만드는 지도학습을 할 것입니다.
- 이때 네트워크는 재건 오류(reconstruction error), L(x,x^), 원래 입력데이터와 재건 결과물의 차이를 최소화하도록 학습합니다.
- bottleneck은 네트워크 디자인에 핵심적인 요소입니다. bottleneck이 없다면, 네트워크는 오른쪽 그림처럼 입력값을 네트워크를 따라 전달함으로써 간단하게 암기할 것입니다.
<쉬운 이야기로 예시>
- 예를들어 2차원(x1, x2)를 전달해야하는데, 용량이 부족하다고 합시다. 그런데 점을 찍어보니, x2는 거의 x1의 2배에 근사하는 것을 알 수있습니다.
- 이 관측을 바탕으로 우리는 x1 데이터만 전송한 후, 전송받은 곳에서 2배를 해서 x2 값을 계산할 수 있습니다. 비록 연산과 약간의 정보손실이 있지만, 네트워크 트레픽은 50%나 감소헀습니다!
- 이번 경우는 시각화를 통해서 가능했지만, 더 고차원의 데이터에서는 어떻게 체계적으로 할 수 있을까요? 3가지 단계를 기억하면됩니다. (Encoding, Sending, Decoding)
2. Autoencoder의 손실함수
- 손실함수의 식은 아래와 같이 정리할 수 있습니다. z(i)는 기존 데이터 x(i)의 압축된 데이터, bottle neck이라고 할 수있고, ~x(i)는 재건된, 근사된 데이터라고 할 수 있습니다.
- 만약 x가 2차원 데이터였다면 시각화를 통해서 W1, b1, W2, b2를 찾을 수 있었을 겁니다(위에서 그랬듯이). 하지만 대부분의 경우 고차원 데이터로 시각화가 어렵기 때문에 우리는 경사하강법을 통해 해결해야합니다.
3. Linear/Nonlinear autonencoder
1) Linear autoencoder
: 왼쪽 그림과 같이 은닉층의 활성화함수는 선형이며, 데이터가 linear surface에 존재할 때 사용합니다.
2) Nonlinear autoencoder
: 오른쪽 그림과 같이 활성화함수는 비선형이며, 데이터가 nonlinear surface에 존재할때 사용합니다.
: 데이터가 심하게 비선형(non linear)한 경우에는 네트워크에 더 많은 은닉층을 쌓아서 'deep autoencoder'를 만들 수 있습니다. 즉, 한번에 압축이 안될경우, 단계적으로 줄여나가기 위하여 은닉층을 더 추가하는 것이지요.
※ W1와 W2
- 압축과 재건에 쓰이는 각 파라미터 w1와 w2는
(i) 서로 아예 다른 값을 부여하여 표현력(representation power)을 높이기도 하지만,
(ii) 오버피팅을 방지하기 위하여 'Weight Sharing'을 하기도 하며,
(iii) bias는 고정(constant metrix) 하되, w와 w(T)만으로 두고 학습하기도 합니다(실제로 GAN에서 쓰이는 방법)
"Unsupervised? Self supervised?" : 오토인코더는 비지도 학습의 일종으로, 지도학습과 다르게 레이블된 데이터가 필요하지 않습니다. : 자기자신의 값을 정답으로 쓰기 때문에 자기지도학습(Self-supervised learning)이라고도 합니다. *자기지도학습(Self supervised learning) : 데이터는 시대가 흘러가며 점점 늘어나고, annotation(또는 레이블링) 기술이 발달할수 있겠지만, 레이블이 필요하지 않은 경우가 비용 측면에서 더 좋고 또 접근가능한 데이터의 수도 크게 증가할 것입니다. 이러한 점에서 레이블링 문제를 해결하기 위해 'Self supervised learning)은 중요한 기법중의 하나입니다. |
Autoencoder의 핵심
1. 재건을 정확하게 하기에 충분하도록 입력값에 민감하다.
2. 모델이 단순히 트레이닝 데이터를 암기하거나 오버피팅하지 않도록 입력값에 둔감하다.
- 이 두가지 트레이드오프에 따라서 모델이 더 입력값에 민감하도록 loss function 항을 만들고, 암기와 오버피팅을 방지하도록 정규화(regularizer) 항을 만듭니다.
'AI > 딥러닝 기초(Deep learning)' 카테고리의 다른 글
[딥러닝][기초] 가중치 초기화(Weight Initializers) (0) | 2021.10.06 |
---|---|
[NLP] Transformer(트랜스포머)_② Deep dive (0) | 2021.05.24 |
[딥러닝][퀴즈] RNN(Recurrent Neural Network) (0) | 2021.05.20 |
[딥러닝][퀴즈] CNN(Convolutional Neural Network) (0) | 2021.05.20 |
[NLP] Transformer(트랜스포머)_1) Warm up (0) | 2021.05.17 |
댓글