공부 기록장
PyTorch, Seq2Seq, 오토인코더, GAN, 하이퍼 파라미터 튜닝의 이해 본문
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)와 같은 기법을 사용해 적절한 에포크 수 설정
'카카오테크 부트캠프 > 강의' 카테고리의 다른 글
언어 모델의 종류와 평가, RAG 아키텍처 (0) | 2024.07.30 |
---|---|
LLM과 프롬프트 엔지니어링(Prompt Engineering) (0) | 2024.07.26 |
자연어 처리 이해하기 : NLP, RNN, LSTM, GRU의 원리와 활용 (3) | 2024.07.23 |
딥러닝의 기초 개념과 최적화 방법 : 경사하강법의 종류와 선택 기준 (0) | 2024.07.18 |
데이터의 중요성과 활용 : 정형, 비정형, 반정형 데이터 및 데이터 인사이트의 가치 (데이터 수집 방법과 크롤링, 스크래핑 도구 소개) (0) | 2024.07.17 |