목표

  • 오토인코더의 구조를 배우고 생성형 AI기술과 적합성 검증
  • 오토인코더 직접 실습해 만들어보기
  • 오토인코더의 한계점을 확인, 변이형 오토인코더 학습
  • 변이형 오토인코더 직접 실습해 만들어보기

2013년 변이형 오토인코더라는신경망에 관한 논문이 게재되었다.

변이형 오토인코더는 생성형 AI에서 가장 기본적이고 널리 알려진 딥러닝이며, 생성형 AI의 시작점이라고 해도 무방하다.

그 전에 먼저 표준 오토인코더에 대해서 알아보자.

 

먼저 오토인코더가 해결하려는 문제부터 알아보자.

자취방에 옷 무덤을 떠올려보자. 니트,티셔츠,바지,속옷 등 갖가지 옷들이 생매장되어있다. 

따라서 이를 해결하기위해 무한한 높이의 옷장을 만들었다고 가정해보자. 자비스라는 AI에게 옷장의 특정 위치를 알려주기만 하면 그 위치에 해당하는 의류를 새로 만들어 줄 수 있을것이다. -> 비슷한 옷은 서로 가까이 배치해야하겠지?

 

이것이 오토인코더의 개념과 밀접하다는데 더 자세히 알아보자.

 

3.1 오토인코더

여기서 우리는 "인코더(Encoder)"의 역할을 수행해야 한다.

즉, 의류를 특정 위치로 이동시켜야 한다. 이 과정을 인코딩이라고 하며, 자비스는 "디코더(Decoder)" 역할을 맡아

옷장의 위치를 넘겨 받으면 그 위치에 해당하는 의류를 생성하려고 할 것이다. 이를 디코딩이라고 한다.

옷장의 각 위치는 두 개의 숫자값 (벡터)으로 표현된다.

인코더는 디코더가 정확하게 숫자값으로 이동할 수 있게 도와줘야 한다. 이 벡터 값 (디코더를 위한 정보)을 임베딩(Embedding)이라고도 한다.

 

결정적으로 좌표평면 (2D) 공간에 있는 모든 포인트를 디코딩하여 새로운 옷을 만들 수 있으므로 생성모델로 사용할 수 있는 것이다.

 

3.1.1 실습

fashion_mnist를 불러오고,

기존 이미지 값 -> (0~255) -> 255로 나누어서 0~1로 바꾸기

 

numpy메소드의 pad 함수 np.pad 의미

제로패딩 두 개의 픽셀로 채워넣었다는 의미이다. 

 

3.1.1 오토인코더의 구조

오토인코더는 두 부분으로 구성된 신경망이다.

  • 인코더: 네트워크는 이미지같은 고차원 입력 데이터를 저차원 임베딩 벡터로 압축
  • 디코더: 네트워크는 임베딩 벡터를 원본 도메인으로 압축 해제 (ex 이미지로 되돌립니다.

오토인코더는 인코더로 들어가서 디코더로 나오면서 이미지를 재구성하도록 훈련한다.

아니 그럼 왜 원본이미지를 냅두고 굳이 이 지롤을 하는것일까?

 

이 이유는 앞서 설명했듯이 임베딩 공간(잠재공간)과 관려되어 있다고 볼 수 있다. 이 공간에서 샘플링하여 새로운 이미지를 생성할 수 있기 때문이라고 한다.

임베딩(z) = 원본 이미지를 저차원 잠재 공간으로 압축하는 것

잠재 공간에서 임의의 포인트를 선택해 디코더에 통과시키면 새로운 이미지를 생성할 수 있다. 디코더는 잠재 공간의 포인트를 유효한 이미지로 변환하는 방법을 학습했기 때문!

 

3.1.2 인코더

오토인코더에서 인코더의 역할은 입력을 이미지로 받아 잠재 공간 안의 임베딩 벡터에 매핑하는 것.

직접 실습해보자.

3.1.3 디코더

디코더는 인코더와 반대이다. (미분이 뭐야? 적분의 반대. 적분이 뭐야? 미분의 반대.)

 

합성곱 오토인코더 = 인코딩 -> 합성곱 사용 / 디코딩 -> 전치 합성곱 사용

참고

https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS4816849548&cate_cd=001

 

말하는 대로 그려 주는 기술의 비밀: 합성곱 오토인코더, 생성적 적대 신경망

이미지 생성 모델은 최근 몇 년 동안 발전하여, 사람들이 생각하는 것보다 더욱 세밀하고 현실적인 이미지를 생성할 수 있게 되었습니다. 혁신적인 알고리즘을 구축하고, 대규모 데이터로 학습

m.hanbit.co.kr

디코더에서는 전치 합성곱 층을 사용

 

디코더는 합성곱 층 대신 전치 합성곱이라는 층을 사용한다.

전치 합성곱(Transposed convolution) 연산과 deconvolutionl 연산은 다르다. deconvolutionl은 convolution 역 연산이므로 input 데이터를 다시 출력한다. Transposed convolution은 input을 원래대로 되돌리는 역할을 하고, output의 차원의 크기도 동일하다는 점에서 deconvolution과 유사하지만 연산 수행 방식이 다르다.

참고

https://yeong-jin-data-blog.tistory.com/entry/Autoencoder

 

오토인코더(Autoencoder), 합성곱 오토인코더(Convolutional Autoencoder)

📚 오토인코더 (Autoencoder) 오토인코더는 비지도학습 모델로, 입력 데이터의 패턴을 학습해서 최대한 유사한 데이터를 새롭게 생성한다. 데이터가 입력되면 encoder를 통해서 저차원의 벡터로 변

yeong-jin-data-blog.tistory.com

 

전치 합성곱층을 사용한 디코딩을 실습해보자.

3.1.4 인코딩 <-> 디코딩 연결하기

인코더와 디코더를 연결시키려면 이미지가 인코더를 통과해 디코더로 나오는 모델을 정의해야한다.

다행히도, 케라스의 Model 클래스를 이용해서 쉽게 연결시킬 수 있다.

 

이제 모델 정의가 끝났으므로, 손실함수&옵티마이저를 정하여 모델 컴파일을 진행해보자.(RMSE/이진 크로스엔트로피)

 

손실함수 관련 참고

 

언제 MSE, MAE, RMSE를 사용하는가?

제목에 열거한 RMSE, MSE, MAE는 딥러닝 모델을 최적화 하는 데 가장 인기있게 사용되는 오차 함수들이다. 이번 포스팅에서는 (1) 이들의 특징을 알아보고, (2) 이 3 가지 손실 함수를 비교 분석해본다

jysden.medium.com

MSE/RMSE의 가장 큰 차이점은 "이상치에 민감하냐"의 여부이다.

MSE의 경우 루트가 안쓰이기 때문에 이상치에 더 민감하다고 볼 수 있다. (학습과정이 불안정할 수 있음.)

RMSE의 경우, "큰 오류값 차이에 대해서 크게 패널티를 주는 이점"이 있다고 볼 수 있다.

 

오토인코더 훈련

이미지 재구성하기

위 그림을 보다시피, 디코딩된 이미지는 원본 이미지와 똑같지 않다!

이는 인코딩 할 때, 원본 이미지를 두 개의 숫자값으로 축소 시켜놨기 때문에 정보가 소실되기 때문이다.

이제 인코더가 잠재공간에서 어떻게 이미지를 표현하는지 알아보자.

잠재 공간 시각화

 테스트 세트를 인코더에 통과시켜 만들어진 임베딩을 시각화

그림 & 좌표 숫자를 잘 보고 분석해보자.

데이터 포인터들이 서로 구분지어 멀리 떨어져 있지 않고, 뒤섞여서 붙어 있다!

위와 같은 부분들 때문에 실제로 잠재 공간에서의 샘플링 작업은 힘들 수 있다.

문제 = 일반 오토인코더는 잠재 공간이 연속적으로 할 것인지에 대해 강제하지 않기 때문임

 -> 변이형 오토인코더로 해결할 수 있다!

 

3.2 변이형 오토인코더

 처음 설명 했던 무한한 높이의 옷장을 다시 떠올려보자.

처음 (일반 오토인코더)의 경우 옷을 정확한 위치에 할당한다고 했다면, 지금 (변이형 오토인코더)은 가능성이 높은 지역을 할당한다고 해보자.(범위) -> 불연속성 문제를 해결할 수 있지 않을까?

+규칙을 새로 만들자! 데이터의 중앙 -> 좌표 중앙에 배치한 후, 편차 또한 일정 범위로 제한!!

 

3.2.1 인코더

오토인코더와 변이형 오토인코더의 차이

2차원 한 점에 할당  vs  잠재 공간의 다변량 정규 분포에 할당

 

다변량 정규 분포란?

표준 정규 분포 = 평균0, 분산이 1인 정규 분포

 

다변량 정규 분포란

평균이 뮤, 분산이 시그마인 정규 분포에서 샘플링하여 구하는 것

이게 뭔 개소리노

 

변이형 오토인코더는 데이터를 평균&분산 벡터에 각각 매핑하기만 하면 되고, 차원간 공분산을 신경 쓸 필요가없다고 한다. (잠재공간에서는 차원간에 상관관계가 없다고 가정)

+분산값은 항상 양수여야 하므로 분산의 로그에 매핑 (로그 함수를 생각)

 

요약하면 인코더는 원본 이미지 -> 잠재 공간의 다변량 정규분포를 구성하는 분포의 평균, 분산의 로그 값 두 개의 벡터로 인코딩 한다.

위 방법을 통해서 z 샘플링 -> 디코딩하는 과정

 

'딥 러닝 > 생성형 AI' 카테고리의 다른 글

05. 확산 모델 (Diffusion model)  (0) 2024.05.31
04. 적대적 생성 신경망(GAN)  (0) 2024.04.06
02. 딥러닝  (1) 2024.03.17
01. 생성 모델  (2) 2024.03.11

+ Recent posts