공부 기록장

PyTorch, Seq2Seq, 오토인코더, GAN, 하이퍼 파라미터 튜닝의 이해 본문

카카오테크 부트캠프/강의

PyTorch, Seq2Seq, 오토인코더, GAN, 하이퍼 파라미터 튜닝의 이해

빛나무 2024. 7. 24. 16:19

PyTorch

Facebook AI Research(FAIR)에서 개발한 오픈 소스 머신러닝 라이브러리

동적 계산 그래프, 간단한 디버깅, 파이써닉한 코드 스타일이 특징

 

텐서(Tensor)

  • PyTorch에서 사용되는 연산 대부분의 `기본 데이터 구조`
  • 다차원 배열, 행렬과 유사
  • GPU를 활용한 고성능 연산이 가능함

 

Seq2Seq 모델

  • 입력 시퀀스를 출력 시퀀스로 변환하는 데 사용되는 딥러닝 모델
  • 기계 번역, 텍스트 요약, 대화 시스템 등에 사용
  • 인코더(Encoder)와 디코더(Decoder)로 구성

인코더(Encoder)

- 입력 시퀀스를 고정된 길이의 벡터로 변환

- 보통 RNN, LSTM, GRU와 같은 순환 신경망으로 구성됨

- 마지막 은닉 상태를 고정된 길이의 컨텍스트 벡터로 출력

 

디코더(Decoder)

- 인코더에서 생성된 고정된 길이의 벡터를 입력으로 받아 출력 시퀀스 생성

- RNN, LSTM, GRU와 같은 순환 신경망으로 구성됨

- 시작 토큰을 입력 받아 다음 토큰 예측

 

 

교사강요(Teacher Forcing)

- 디코더의 이전 시간 단계 출력 사용하지 않고, 실제 목표 시퀀스 요소를 다음 입력으로 사용하는 방법

- 모델의 더 빠르고 안정적인 수렴 보조(강요)

 

Seq2Seq 장점

- 입출력 시퀀스의 길이 다른 문제를 유연하게 해결 가능

- 자연어 처리에 특화

- 기계 번역, 텍스트 요약, 대화 시스템, 음성 인식 등 응용 분야가 넓음

 

Seq2Seq 단점

- 마지막 은닉 상태를 고정된 길이 벡터로 사용해, 긴 시퀀스 처리시 중요 정보 손실 가능

- 학습에 많은 데이터와 계산 자원 필요

- 데이터 순차 처리로 인한 병렬화 어려움

- 이전 출력에 의존하는 출력 방식으로, 초기 단계의 오류가 이후 단계로 전파

 

 

오토인코더

차원 축소, 데이터 재구성 등 데이터의 효율적인 표현을 학습하는 비지도 학습 인공신경망 모델

입력 데이터를 압축하여 잠재 공간(latent space) 표현으로 변환한 후, 다시 원래 데이터로 복원하는 과정을 통해 학습

 

오토인코더의 구조

인코더 : 입력 데이터를 저차원 잠재 공간 벡터로 변환

디코더 : 잠재 공간 벡터를 원래 데이터로 복원

입력층에서 잠재 공간 표현, 잠재 공간 표현에서 출력층까지는 여러 층의 신경망으로 구성

오토인코더의 유형

- 기본 오토인코더(Basic Autoencoder) : 인코더 디코더로 구성된 가장 기본적인 형태의 오토인코더

- 딥 오토인코더(Deep Autoencoder) : 인코더와 디코더가 여러 개의 은닉층을 가지는 심층 신경망 구조로 구성

- 희소 오토인코더(Sparse Autoencoder) : 잠재 공간 벡터 z의 많은 요소가 0이 되도록 제약을 가하여, 희소한 표현 학습

    → 데이터의 중요한 특징을 더 잘 잡아냄

- 변이형 오토인코더(Variational Autoencoder, VAE) : 잠재 공간을 확률 분포로 모델링해, 데이터의 잠재 구조 더 잘 파악

    → 생성 모델로 사용되어 새로운 데이터 샘플링

- 잡음 제거 오토인코더(Denoising Autoencoder) : 입력 데이터에 노이즈를 추가한 후, 원래 데이터로 복원하도록 학습

    → 데이터 노이즈 제거와 더 강인한 특징 학습

 

오토인코더의 장점

- 레이블(태그)이 없는 데이터로 학습 가능

- 데이터 압축, 노이즈 제거, 이상 탐지 등 여러 응용 분야에서 활용

- 학습된 잠재 공간 벡터의 분석을 통해 데이터의 중요한 특징 파악 가능

 

오토인코더의 단점

- 복원 데이터가 원본 데이터와 불일치할 수 있음

- 매우 복잡한 데이터에 대해서는 처리가 어려운 성능 제한 가능성

- 적절한 정규화 없으면 과적합 발생 가능성

 

 

생성적 적대 신경망(GAN)

생성적 적대 신경망 (Generative Adversarial Networks, GAN) 이란?

두 개의 신경망, `생성자(Generator)와 판별자(Discriminator)가 경쟁적으로 학습`하는 방식으로,

현실과 유사한 데이터를 생성하는 모델

 

GAN 구성 요소

생성자(Generator)

- 임의의 노이즈 벡터를 통해 현실감 있는 데이터 생성하는 역할

- 입력 노이즈 벡터를 고차원 데이터로 변환하는 신경망

- 생성된 데이터를 실제 데이터처럼 보이게 만드는 것이 목표

 

판별자(Discriminator)

- 입력된 데이터가 실제 데이터인지 생성된 데이터인지 구분하는 역할

- 입력된 데이터를 분류하는 신경망

- 실제 데이터와 생성된 데이터를 정확하게 구분하는 것이 목표

 

학습 절차

- 생성자가 노이즈 벡터를 통해 가짜 데이터 생성

- 판별자는 실제 데이터와 생성된 데이터를 입력받아 구분

- 판별자의 손실을 최소화하는 방향으로 판별자의 가중치 업데이트

- 생성자의 손실을 최소화하는 방향으로 생성자의 가중치 업데이트

 

GAN 변형 모델

DCGAN(Deep Convolutional GAN)

- 합성곱 신경망(CNN)을 사용해 이미지 생성

- 보다 높은 해상도의 이미지 생성 가능

 

CycleGAN

- 두 가지 도메인 간의 이미지 변환 수행

- 여름을 겨울로, 말 이미지를 얼룩말 이미지로 변환

 

StyleGAN

- 고해상도 이미지 생성하며, 이미지의 스타일 조절 가능

- 이미지의 특정 스타일 요소 제어

 

⇒ GAN은 이미지/비디어 생성, 데이터 증강, 텍스트 생성, 이미지 변환 등 다양한 분야에서 응용된다

 

GAN 장점

- 현실과 유사한 데이터 생성을 통한 다양한 활용 가능

- GAN의 여러 변형 모델을 통해, 특정 문제에 더 잘 맞는 모델 개발 및 선택 가능

- 학습된 GAN 모델은 무한히 새로운 데이터 생성 가능

 

GAN 단점

- 학습 과정이 매우 불안정할 수 있음

- 생성자와 판별자가 균형을 이루지 못하면 학습 실패 가능

- 생성자가 제한된 종류의 데이터만 생성하게 될 수도 있음

- 학습에 많은 계산 자원 및 학습 시간 필요

 

 

딥러닝 모델 최적화

최적화를 위한 하이퍼 파라미터

 

더보기

cf. 하이퍼 파라미터란?

모델의 학습 과정에서 직접적으로 최적화되지 않는 파라미터를 말한다.

하이퍼 파라미터는 모델의 성능에 큰 영향을 미치기 때문에, 신중하게 선택하고 조정해야 한다.

하이퍼 파라미터 튜닝은 이 파라미터를 최적화하여 모델의 성능을 최대화하는 과정을 말한다.

 

① 학습률(Learning Rate)

: 경사 하강법에서 가중치가 업데이트 되는 크기를 조정하는 하이퍼 파라미터

  • 높은 학습률 : 학습 속도 ↑, but 손실함수가 최솟값에 도달하지 못하고 발산할 수 있음
  • 낮은 학습률 : 학습 속도 ↓, but 손실함수가 더 안정적으로 최솟값에 도달할 수 있음

설정 방법

- 실험적으로 설정 후, 모델의 성능에 따라 조정

- 일반적으로 0.001 or 0.01부터 시작

- '학습률 스케줄링 기법' 활용 가능 (추가 공부 필요)

 

 

② 배치 크기(Batch Size)

: 한 번의 업데이트에 사용되는 훈련 샘플의 수

  • 작은 배치 크기 : 더 빈번한 가중치 업데이트로 학습 속도 ↑, but 노이즈 증가 위험 존재
  • 큰 배치 크기 : 더 안정적인 가중치 업데이트 가능, but 학습 속도 ↓

설정 방법

- 일반적으로 2의 제곱수로 설정 (ex. 32, 64, 128, 256)

- 메모리 사용량, 학습 속도 고려한 적절한 배치 크기 선택

 

 

③ 드롭아웃 비율(Dropout Rate)

: 학습 중, 각 학습 단계에서 무작위로 비활성화할 뉴런의 비율

  • 높은 드롭아웃 비율 : 과적합 방지, but 학습 속도 느려지고 모델 성능 저하
  • 낮은 드롭아웃 비율 : 모델의 과적합 가능성 증가

 

설정 방법

- 일반적으로 0.2 ~ 0.5 사이 값 사용

- 실험적으로 설정 후, 모델의 성능에 따라 조정

 

 

④ 정규화 방법(L1, L2)

: 손실 함수에 정규화 항을 추가해 모델의 복잡성 제어하고 과적합 방지하는 방법

 

L1 정규화

- 가중치의 절댓값 합을 최소화하는 방식

- 일부 가중치 0으로 만듦

 

L2 정규화

- 가중치의 제곱합을 최소화하는 방식

 

설정 방법

- λ 값을 실험적으로 설정한 후, 모델의 성능 기준으로 조정

- 일반적으로 L2 정규화가 더 자주 사용됨

 

 

⑤ 네트워크 깊이와 폭

: 네트워크 깊이는 신경망 층(layer)의 수이고, 네트워크 폭은 각 층의 뉴런 수이다

 

  • 깊은 네트워크 : 더 복잡한 패턴 학습, but 기울기 소실/폭발 문제와 과적합 위험성
  • 넓은 네트워크 : 더 많은 특징을 학습, but 많은 계산 자원 요구

설정 방법

- 문제의 복잡성과 데이터셋 크기에 따라 적절한 깊이와 폭 선택

- 과적합 방지를 위한 드롭아웃, 정규화 기법 함께 사용

 

 

⑥ 에포크 (Epoch)

: 모델이 전체 데이터셋을 한 번 완전히 학습하는 주기를 의미 (N번의 학습 주기 → N 에포크)

 

에포크 수가 증가할수록 모델은 데이터셋에 있는 모든 샘플을 여러 번 학습

⇒ 모델의 가중치가 점진적으로 조정되고, 최적의 가중치를 찾는 과정이 이루어짐

 

적절한 에포크 선택의 중요성

과소적합 : 에포크 수가 너무 적으면 학습이 충분하지 못해 학습이 덜 된 상태가 됨

과적합 : 에포크 수가 너무 많으면 모델이 데이터셋을 과도하게 학습해 과적합 상태가 됨

적절한 에포크 수 : 조기 종료(Early Stopping)와 같은 기법을 사용해 적절한 에포크 수 설정