본문 바로가기

데이터 다루기/신경망

[신경망] 8. 오토인코더 (AutoEncoder) (2)

728x90
반응형

안녕하세요, 저번 포스팅에서 오토인코더를 왜 쓰는지에 대해서 배웠습니다.

이번 포스팅에서는 오토인코더의 종류에 대해서 배워보도록 하겠습니다.

저희가 배워볼 오토인코더는 Sparse AutoEncoder, Stacked AutoEncoder, Denoising AutoEncoder입니다.

1. Sparse AutoEncoder

https://www.slideshare.net/NaverEngineering/ss-96581209

 

Sparse AutoEncoder는 저희가 배웠던 AutoEncoder 와는 반대로 Hidden layer 내의 Node의 수가 더 많아집니다. 그렇다면 Sparse AutoEncoder는 왜 쓸까요?? 그 이유는 바로 overfitting 문제를 줄이는 효과가 있기 때문입니다. 실제로 AutoEncoder의 문제점중 하나로 Feature를 압축하다보면, 다른 데이터가 들어와도 training set과 비슷하게 만들어버리는 overfitting 문제가 있습니다. 이를 방지하기 위해 Sparse AutoEncoder를 통해 sparse (0이 많은)한 노드들을 만들고, 그 중에서 0과 가까운 값들은 전부 0으로 보내버리고 0이 아닌 값들만 사용하여 네트워크를 학습시킵니다. 이로써 기존의 AutoEncoder의 overfitting 문제도 줄이고, 차원 축소 효과도 얻을 수 있다고합니다.

2. Stacked AutoEncoder

Stacked AutoEncoder는 말그대로 AutoEncoder를 층으로 쌓아서 사용하는 방법입니다.

Stacked AutoEncoder는 주로 네트워크를 Pretraining할 때, initial weight를 초기화하는 방법으로 사용됩니다.

예를들어서 다음과 같은 네트워크가 있다고 해봅시다.

꽤나 Deep한 네트워크라고 할 수 있습니다. 이 때 weight를 학습하는 데 있어서 오토인코더를 사용합니다.

 

Sparse AutoEncoder를 사용하여 W1을 먼저 학습합니다. 그러면 W1이 정해지겠죠?

그 W1을 기존 네트워크의 W1으로 사용하는 것입니다. 참고로 이 때, W1` 은 W1의 transpose한 matrix입니다.

다음으로 W2를 학습 시키기 위해서 W1은 이전에 구한 Weight로 고정시키기 위해서 Learning rate를 0으로 설정 (변화되지 않음) 하고 같은 방법으로 AutoEncoder를 통해 W2를 학습합니다.

위와 같은 방법을 반복해나가면서 얻은 W1, W2, W3를 Fine-tuning에서의 초기 Weight값으로 설정합니다.

3.Denoising AutoEncoder

https://excelsior-cjh.tistory.com/187

 

Denoising AutoEncoder는 입력층에서 Hidden layer로 갈 때, Noise를 추가한 것입니다.

이 때 Noise는 기존의 입력 데이터를 변화 시키는데, 사람의 인식하에서 같은 데이터라고 느낄 정도의 수준만 허용합니다.

따라서 데이터는 실제로 달라지지만, 인식하는데에는 지장을 주지 않게 됩니다.

이러한 노이즈를 추가하였을 때 실제로 성능에 있어서 더 좋아진다고 합니다.

반응형