PyTorch로 시작하는 딥러닝 - CH4 머신 러닝 입문

4장에서는 다음과 같은 주제에 대해 알아본다.

  • 분류와 회귀 이외의 머신 러닝 문제 유형
  • 모델 평가, 과대적합과 과소적합 및 문제 해결 기법
  • 딥러닝을 위한 데이터 전처리

 

 

 

머신 러닝의 세 가지 유형

2장, 3장에서 다룬 예제는 머신 러닝 유형 중 지도학습에 해당한다.
일반적으로 머신 러닝은 다음과 같이 세 가지로 분류된다.

  • 지도학습
  • 비지도학습
  • 강화학습

 

지도학습

  • 딥러닝과 머신 러닝에서 성공한 유명한 사례의 대부분은 지도학습이다.
  • 지도학습의 대표적인 예
    • 분류 문제: 개와 고양이 이미지 분류
    • 회귀 문제: 주가 예측, 크리켓 경기 점수 예측 등
    • 이미지 분할: 픽셀 단위 분류. 자율 주행 자동차에서 카메라로 촬영한 사진에서 각 픽셀이 어디에 포함되어 있는지를 구분하는 것은 중요하다. 특정 픽셀은 자동차, 보행자, 나무, 버스 등에 포함된 것으로 분할될 수 있다.
    • 음성 인식: 구글, 알렉사 및 시리와 같은 음성 인식 서비스
    • 언어 번역: 특정 언어의 음성을 다른 언어로 번역하는 것

 

비지도학습

  • 데이터에 레이블 또는 목적 변수가 없으면, 비지도학습을 이용해 데이터를 시각화하고 압축함으로써 데이터를 이해하는데 유용하다.
  • 비지도학습에서는 일반적으로 다음과 같은 두 가지 기법이 자주 사용된다.
    • 클러스터링: 모든 유사한 데이터를 함께 그룹화하는 데 유용한 기법
    • 차원 축소: 데이터의 차원 수를 줄이는 머신 러닝 기법. 차원 축소를 이용해 고차원 데이터를 시각화하고, 데이터의 숨겨진 패턴을 찾을 수 있다.

 

강화학습

  • 가장 주목받고 있는 머신 러닝 분야
  • 아직 성공한 실제 사례를 찾기 어렵지만, 최근 빠르게 발전하고 있다.
  • 알파고 시스템은 구글 딥마인드 팀이 강화학습을 기반으로 개발한 시스템이다.

 

이 책에서는 지도학습에 대해 중점적으로 살펴보고, GAN과 같은 몇 가지 비지도학습에 대해서도 알아본다.
*GAN: 특정 스타일의 이미지를 생성하는 딥러닝 기술

 

 

 

머신 러닝 용어

 

머신 러닝 모델 평가

학습, 검증 및 테스트 분할

단순 홀드아웃 검증

 

 

K-겹 검증

 

데이터 혼합이 적용된 K-겹 검증

데이터 표현력

시간 민감도

데이터 중복

 

데이터 전처리와 특성 공학

벡터화

수치 정규화

누락 데이터 처리

특성 공학

 

과대적합과 과소적합

더 많은 데이터 확보

네트워크 크기 줄이기

class Architecture1(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(Architecture1, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size) 
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)
        self.relu = nn.ReLU()
        self.fc3 = nn.Linear(hidden_size, num_classes)      
    
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        out = self.relu(out)
        out = self.fc3(out)
        return out
class Architecture2(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(Architecture2, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size) 
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)  
    
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

 

가중치 규제 적용

드롭아웃

 

nn.dropout(x, training=True)

 

과소적합

 

머신 러닝 프로젝트 워크플로

문제 정의와 데이터셋 만들기

모델 평가 기준

평가 프로토콜

데이터 준비

기준 모델

문제 유형 활성화 함수 오차 함수
이진 분류 시그모이드 nn.CrossEntropyLoss()
다중 클래스 분류 소프트맥스 nn.CrossEntropyLoss()
다중 레이블 분류 시그모이드 nn.CrossEntropyLoss()
회귀 없음 MSE
벡터 회귀 없음 MSE

 

과대적합될 정도의 모델

가중치 규제 적용

학습률 선정 전략

 

요약