본문 바로가기
Seminar Review

NCIA 교육센터 - 생성자 모델 이해 (10/28 ~ 10/30)

by caratomato 2024. 10. 30.
728x90

국가에서 제공하는 AI 교육을 들어보고 왔습니다.

해당 센터는 재직자 중심의 교육을 제공하는 센터인 것 같아요

위치는 양재역에 있고, AI 말고도 다른 교육들도 다양하게 있었어요.

https://edu.ncia.kr/ncia/aducation.schedule.php

 

NCIA 교육센터

대기업/중소기업 재직자를 위한 무료교육

edu.ncia.kr

 

외부 교육의 종류가 정말 어마어마하게 많은 것 같은데, NCIA 교육센터에 대한 후기가 많이 없는 것 같아 작성해보았습니다.

가장 궁금해하실만한 주차나 점심에 관한 얘기는 포스트 맨 끝에...★

 

# 10/28일 (1일차)

 

가벼운 vision 모델로 생성 모델을 시작합니다.

요즘은 vision 모델들도 pytorch를 많이 사용하는 것으로 알고 있는데 교육은 tensorflow와 keras 기반으로 이루어졌어요.

아무래도 사용하는 교재에 따라 그렇게 하는듯 합니다 (교재명: 만들면서 배우는 생성 AI 2판)

강사님이 교육 자료 및 코드는 다 제공해주시기 때문에 기존에 AI를 배우지 않았더라도 따라하시는데 무리는 없을 것 같아요.

(보통 오전 시간(9:00~12:00)에 이론, 오후 시간 (1:00~6:00)에 이론+실습을 합니다.) 

 

1일차 교육에서 저한테 가장 낯설었던 키워드는 AutoEncoder (AE) 그리고 Varational Auto Encoder (VAE)입니다.

아무래도 제가 생성모델을 NLP 분야에서 시작했다보니, transformer 이전 계열의 모델에 대해서는 조금 부족한 것 같아요.

 

AE는 비지도 학습의 일종으로, 입력 데이터를 효율적으로 인코딩하고, 이를 다시 디코딩하여 원래의 입력 데이터를 복원하는 신경망 모델입니다. 처음에는 이름이 인코더여서 디코더 모델이 포함이 안되어 있는 줄 알았어요. AE를 통해 입력 데이터의 중요한 특성을 학습하고, 잡음이나 불필요한 정보를 필터링할 수 있다고 합니다. 디코더 모델이 붙어있긴 하지만, 결국 입력 데이터를 보다 잘 이해하기 위한 역할을 수행하는 면에서 인코더의 기능과 닮아 이런 이름이 붙은게 아닐까 합니다.

 

AE는 이미 살짝 나이가 있는 모델이기 때문에 인터넷에 찾아보면 아주 정보가 후두두두둑 떨어져요.

그래서 제가 읽어봤을 때, 가장 이해가 쉬웠던 글을 제가 설명하는 대신 가져와봤습니다.

https://zeroact.tistory.com/6

 

Auto Encoder와 Variational Auto Encoder의 직관적 차이

VAE가 AE보다 좋다...? 학습도 이렇게.. 저렇게.. 하면 된다...? 정도만 알고 있었습니다. 누군가 둘이 뭐가 다르냐고 물어 봤을 때, "VAE가 AE 보다 좋아요" 라고만 말했던 기억이 있네요... 오늘은 이

zeroact.tistory.com

 

# 10/29일 (2일차)

 

2일차 교육은 어제에 이어 VAE로 시작합니다.

VAE는 사전에 모분포에 대해 가정합니다. 분포를 가정하고 있기 때문에, AE와 달리 training data에 없었다 하더라도 모델이 generation 할 수 있어요. 조금 더 범용적으로 사용할 수 있는 모델이라는 느낌이 납니다. 강의에서는 이를 정규 분포로 가정하고 있는데, 인터넷을 찾아보니 가우시안 분포나 베르누이 분포에 대한 얘기가 많더라구요. 일단, 결론적으로 정규 분포와 가우시안 분포는 같은 분포로 이해해도 될 것 같습니다. 분야마다 부르는 이름이 조금 달라졌을 뿐, 수학적 개념이 동일하다고 하네요.

 

오후 시간에는 생성적 적대 신경망인 GAN (Generative Adversarial Network)에 대해서 배웠습니다.

제가 개인적으로 GAN 모델은 조금 좋아하기 때문에 열심히 리뷰를 해볼게요.

책에서는 고품질 벽돌과 벽돌의 위조품을 만드는 걸로 GAN의 예제를 설명하고 있는데, 실상 가장 유명한 예제는 아래 그림이 아닐까 싶습니다. GAN은 말 그대로 생성자와 판별자를 두고, 그 둘을 경쟁시킴으로써, 최상의 결과물을 얻어내는 방법론이에요. 사람도 혼자 학습하는 것보다 뭔가 자극이 되는 경쟁자가 있으면 더 열심히 하는 것과 같은 이치가 아닐까 싶어요. 중요한건, 둘의 학습과정이 동시에 이뤄지는 것은아닙니다. 퐁!당!퐁!당! 번갈아가며 학습을 시키게 되는데 둘의 학습 수준을 비~슷하게 가져가는 것이 핵심입니다.

 

출처: 동아사이언스.

 

1) DCGAN (Deep Convolution GAN)

- Fully connected layerd와 pooling layer를 배제하고 stried convolution과 transposed convolution으로 네트워크 구조를 구성.

(매개변수가 너무 줄어들어 모델이 이미지의 위치 정보를 손실하는 것을 방지)

- generator와 discriminator에 batch normalization을 사용.

(학습이 안정적으로 이뤄지는데 기여)

- 생성자의 모든 layer에 ReLU activation을 사용, 마지막 layer에 Tanh를 사용.

- 판별자의 모든 layer에 LeakyReLU를 사용.

 

아이디어는 좋지만, GAN은 하나 하나의 parameter에 지나치게 영향을 많이 받기 때문에 학습이 어렵다는 문제가 있습니다. 뭔가 강화학습 같네요.

더보기

일반적인 모델 학습과 다른 점은 너무 빠르게 학습하지 않아야 한다는 것 같아요.

둘 중 하나가 지나치게 빠르게 똑똑해지면, 결국은 모델 자체가 붕괴 (mode collapse)되기 때문이죠.

그래서 학습 결과를 보면, loss 값이 빠르게 줄어들면서 수렴하지 않는 느낌이네요.

근데... 결과가.. 이게 학습이 되고 있는게 맞죠? (운석 수집가가 된 것 같은 느낌적인 느낌)

Training 과정 중 Evaluation

 

2) WGAN (Wasserstein GAN)

- DCGAN의 손실함수가 잘 작동하지 않는 것을 해결하기 위해 제시된 방법

- DCGAN의 판별자에 있던 sigmoid 함수를 제거하여 손실 함수 값이 0~1 사이가 아닌 -∞~∞. (1, 0으로 판별하지 않고, 점수를 주기 때문에 비평자라고 부름)

- <WGAN-GP> 손실이 계속 커지는 것을 막기 위해 립시츠 제약을 추가함 → 그레디언트 패널티 부과 (립시츠 제약을 약식으로 재현한 방법)

- DCGAN처럼 균형을 맞추지 않아도, 비평자가 안정적으로 학습하여 해당 loss 값을 활용하여 학습을 시킬 수 있음.

- 생성자와 비평자를 1:1이 아닌, 생성자 한 번에 비평자를 약 5번 정도 학습 시킴. 

 

DCGAN이 뭔가 두 사람의 경쟁체제였다면, WGAN은 둘 사이에 뭔가 질서가 생긴 느낌이에요. 비평자가 윗사람, 생성자가 아랫사람처럼 비평자가 피드백을 잘 줘야 생성자가 더 잘 학습할 수 있다는 아이디어를 구현한 것 같습니다.

 

3) CGAN (Conditional GAN)

- 조건을 줘서 내가 원하는 이미지를 만들기 위한 모델.

- 이전 모델은 정답이 없이 학습을 했다면, CGAN은 label을 통해 정답이 있이 학습을 함 → 레이블 정보를 concat 형식으로 모델에 넣어줌.

(레이블 정보가 많아지면, 연산량이 너무 늘어나는게 아닌지 궁금하네요.)

 

DCGAN과 WGAN까지는 뭔가 그럴듯한 이미지 만들어내기 였다면, CGAN은 내가 원하는 이미지 만들기에 가까운 것 같아요. 모델 내용만 들어보면 CGAN이 뭔가 훨씬 쓰임새가 많을 것 같지만, 학습 데이터에 label이 매핑된 이미지가 있었야 한다는 거니깐 또 그만큼은 번거스러움이 따라오는 거겠죠?


 

오후 시간의 마지막 수업은 자기회귀모델입니다. NLP 분야의 모델이죠.

주제가 완전히 바꼈기 때문에 구분해서 정리할게요!

시작은 고전적인 자연어 처리 모델로 합니다.

 

강의 시간에는 RNN, LSTM, GRU가 너무 간결하게 표현되어 있어서 추가적으로 읽으면 좋을만한 자료를 찾아봤습니다.

Transformer 모델 개발 이후에, 이전 모델들은 거의 사용이 안 되고 있지만, 어떤 발전 과정을 거쳤는지 알면 도움이 될 것 같아요.

https://aiml.com/compare-the-different-sequence-models-rnn-lstm-gru-and-transformers/ 

 

Compare the different Sequence models (RNN, LSTM, GRU, and Transformers)

While RNNs, LSTMs, and GRUs operate on the principle of recurrence, Transformers introduce a new paradigm focusing on attention mechanisms

aiml.com

 

언어 모델이 너무 급속도로 성장해서 그런지 항상 NLP 수업을 들으면 최근 기술과 너무 거리감이 있어 그런점이 좀 아쉬운 것 같아요.

Word2Vec 방식을 이해하기 위해 CBOW (Continous Bag of Words)와 Skip-gram 방식을 소개하지만, 요즘 embedding 방법은 단어 보다는   context에 대한 이해를 기반으로 하고 있기 때문에 주변 단어나 중심 단어로 예측을 하는 방법에는 한계가 있는 것 같아요. (그래서 자세히 다루지 않을게요.)

 

그 중에서 신기했던 시각화 툴은

https://projector.tensorflow.org/

 

Embedding projector - visualization of high-dimensional data

Visualize high dimensional data.

projector.tensorflow.org

임베딩 결과를 시각화해서 보여주는 툴인데, PCA, T-SNE 등 기본적인 차원축소 기법을 제공하고 있어서 별도의 코드 작성 없이 구현해 볼 수 있는 것 같습니다.

 

# 10/30일 (3일차)

 

벌써 수업의 마지막 날이네요.

오늘은 생성 모델의 꽃(?)인 언어 모델을 다루는 시간입니다.

 

코드 실습이 이뤄지는데, 한국어 예제가 아닌 영어 예제로 진행되는건 조금 아쉬운 점인 것 같아요.

실습은 LSTM, GPT 이런 순으로 이뤄지는데 평소에 쓰던 pytorch가 아닌 keras 기반으로 이뤄져서 조금 생소한듯? 신기했습니다.

 

마지막에 마지막은 Diffusion Model (확산 모델)입니다.

저한테 가장 생소했던 모델이기 때문에 이번에 이 내용을 조금 자세히 다뤄볼게요!

언어 모델이 transformer 구조를 앞세워 눈부신 성장을 할 때, 이미지 분야에서는 diffusion 모델이 많은 주목을 받았다고 합니다.

 

아래 그림을 퍼온 블로그에서 diffusion 모델의 정의와 수학적 개념을 정말 잘 설명해놨기 때문에 참고해보시면 좋을 것 같습니다. (링크)

출처: https://xoft.tistory.com/32

 

원본 이미지에 점진적으로 noise를 추가했다가 다시 복원하는 과정을 학습하는 모델이에요.

이러한 과정을 통해 원본과 같이 자연스러운 이미지를 생성하는 능력을 갖추게 되는 거죠. (이해를 돕기 위한 것일뿐 실제 input과 output 이미지가 완전 동일한 것은 아니라고 합니다.)

그림 속 UNet의 역할은 이미지에 추가된 잡음을 예측하는 역할을 합니다.

구조가 굉장히 복잡한데 (제가 이래서 자연어를 좋아했을까요..?) 직접 구현하지 않아도 참고할 수 있는 모델이 많다고 하니 처음부터 모델을 쌓는다고 고생하지 않아도 될 것 같아요.

 

학습 결과가 궁금하다면 ▼

더보기

학습을 시키는데... epoch 3까지는 지지직거리는 TV화면이길래 이게 되나? 의심했거든요.

epoch 3 training 결과

 

근데...!!!

epoch 10 training 완료

 

이렇게 깔끔하게 noise를 제거하고 꽃 사진 복원이 됐어요.

Colab T4 기준으로 학습을 30분? 정도 밖에 안 시킨 것 같은데.. task가 쉬운건지 성능이 너무 놀랍네요.

마지막 모델로 Stable diffusion은 text to image 모델입니다.

VLM (Vision Language Model)의 향기가 나는 모델이네요.

Stable diffusion 모델은 직접 학습을 시키진 않고, Keras에 있는 모델을 불러와서 실험해봤어요.

간단한 코드 몇 줄 만으로도 API 호출하듯 stable diffusion 모델을 Keras를 통해 불러올 수 있네요.

(하지만, T4 기준으로 inference만 하는데도 시간이 꽤나 소요됐습니다.)

아직, 한글은 잘 인식하지 못하는 것 같아요.

 

piggy carrot과 just tomato를 주문했는데.. 음 느낌은 알겠어요

 

마지막으로 Finish!!! 를 넣어봤는데 너무 holloween 느낌이라 차마 못 가지고 왔어요.

그럼 이상 끝!

 

 

+ 추가 정보

- 주차: 주차는 교육센터에서 별도로 지원을 해주지는 않습니다. 주변 한전아트센터에 주차할 경우, 일 30,000원 (15분 3,000원)입니다.

- 중식: 점심은 한전아트센터에서 사용 가능한 식사 쿠폰을 제공해줍니다. 맛은.. ChatGPT는 맛있다네요. (너가 뭘 알아?) (정확하게 12시에 내방객에게 오픈을 하는데, 줄이 길기 때문에 미리 미리 가서 줄 서 계시는 것을 추천해요!) 

- 실습 환경: 강의실 내에 기본적으로 데스크탑이 설치되어 있어 개인 노트북을 지참하지 않아도 수업을 들을 수 있습니다. NVIDIA GeForce RTX 3070이 깔려 있더라고요. 하지만, 강의는 Google Colab을 기반으로 이뤄지기 때문에 강의실 내 GPU는 딱히 활용하지 않을 가능성이 높습니다.

 

728x90