[책] 케라스 창시자에게 배우는 딥러닝

지토·2022년 3월 29일
0

DeepLearning

목록 보기
2/2

신경망의 구조

신경망 훈련에는 다음 요소들이 관련되어 있다.

  • 네트워크 (또는 모델) 을 구성하는
  • 입력 데이터와 그에 상응하는 타깃
  • 학습에 사용할 피드백 신호를 정의하는 손실 함수
  • 학습 진행 방식을 결정하는 옵티마이저

연속된 층으로 구성된 네트워크가 입력 데이터를 예측으로 매핑한다.
손실 함수는 예측과 타깃을 비교하여 네트워크의 예측이 기댓값에 얼마나 잘 맞는지를 측정하는 손실 값을 만든다.
옵티마이저는 손실 값을 사용하여 네트워크 가중치를 업데이트한다.

층 : 딥러닝의 구성 단위

신경망의 핵심적인 데이터 구조는 이다.
층은 하나 이상의 텐서를 입력으로 받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈이다.

어떤 종류의 층은 상태가 없지만 대부분의 경우 가중치라는 층의 상태를 가진다. 가중치는 확률적 경사 하강법에 의해 학습되는 하나 이상의 텐서이며 여기에 네트워크가 학습한 지식이 담겨 있다.

층마다 적절한 텐서 포맷과 데이터 처리 방식이 다르다.

예를 들어 (samples, features) 크기의 2D 텐서가 저장된 간단한 벡터 데이터는 Fully Connected layer 나 Dense Layer 이라고도 불리는 Densely Connected Layer 에 의해 처리되는 경우가 많다.

(samples, timesteps,features) 크기의 3D 텐서로 저장된 시퀀스 데이터는 보통 LSTM 같은 recurrent layer 에 의해 처리된다.

4D 텐서로 저장되어 있는 이미지 데이터는 일반적으로 2D convolution later 에 의해 처리된다.

모델 : 층의 네트워크

앞으로 공부하다 보면 아주 다양한 네트워크 구조를 보게 될 것이다. 자주 등장하는 것들은 다음과 같다.

  • 가지가 2개인 네트워크
  • 출력이 여러 개인 네트워크
  • 인셉션 블록

네트워크 구조는 가설 공간을 정의한다. 1장에서 머신 러닝을
'가능성 있는 공간을 사전에 정의하고 피드백 신호의 도움을 받아 입력 데이터에 대한 유용한 변환을 찾는 것' 으로 정의했다.

네트워크 구조를 선택함으로써 가능성 있는 공간을 입력 데이터에서 출력 데이터로 매핑하는 일련의 특정 텐서 연산으로 제한하게 된다.

우리가 찾아야 할 것은 이런 텐서 연산에 포함된 가중치 텐서의 좋은 값이다.

손실 함수와 옵티마이저 : 학습 과정을 조절하는 열쇠

네트워크 구조를 정의하고 나면 두 가지를 더 선택해야 한다.

  • loss function (objective function) : 훈련하는 동안 최소화될 값이다. 주어진 문제에 대한 성공 지표가 된다.
  • optimizer : 손실 함수를 기반으로 네트워크가 어떻게 업데이트 될 지 결정한다. 특정 종류의 확률적 경사 하강법을 구현한다.

여러 개의 출력을 내는 신경망은 여러 개의 손실 함수를 가질 수 있다. (출력당 하나씩) 하지만 경사 하강법 과정은 하나의 스칼라 손실 값을 기준으로 한다. 따라서 손실이 여러 개인 네트워크에서는 모든 손실이 (평균을 내서) 하나의 스칼라 양으로 합쳐진다.

분류, 회귀와 시퀀스 예측 같은 일반적인 문제에서는 올바른 손실 함수를 선택하는 간단한 지침이 있다. 예를 들어 2개의 클래스가 있는 분류 문제에는 이진 크로스엔트로피, 여러 개의 클래스가 있는 분류 문제에는 범주형 크로스엔트로피, 회귀 문제에는 평균 제곱 오차, 시퀀스 학습 분제에는 CTC (Connection Temporal Classification) 등을 사용한다.

Logistic Regression

로지스틱 회귀란 무엇인가

회귀와 로지스틱 회귀 알고리즘을 혼동하면 안 된다. 로지스틱 회귀는 회귀 알고리즘이 아니라 분류 알고리즘이다.

로지스틱 회귀는 회귀를 사용하여 데이터가 어떤 범주에 속할 확률을 0 에서 1 사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도 학습 알고리즘이다.

스팸 메일 분류기 같은 예시를 생각하면 쉽다. 어떤 메일을 받았을 떄 그것이 스팸일 확률이 0.5 이상이면 스팸으로 분류하고, 확률이 0.5보다 작은 경우 일반 메일로 분류하는 것이다. 이렇게 데이터가 2개의 범주 중 하나에 속하도록 결정하는 것을 2진 분류라고 한다.

sigmoid function

로지스틱 회귀에서는 확률을 0 에서 1 사이로 커브 모양으로 나타내야 하는데, 이를 담당하는 것이 바로 sigmoid 함수이다.

보편적인 머신러닝 작업 흐름

1. 문제 정의와 데이터셋 수집

  • 입력 데이터는 무엇인가?
  • 어떤 것을 예측하려고 하나?
  • 당면한 문제가 어떤 종류인가? 이진 분류 / 다중 분류 / 스칼라 회귀 / 벡터 회귀 / 다중 레이블 다중 분류 또는 군집, 생성, 또는 강화 학습같은 다른 문제인가?

2. 성공 지표 선택

어떤 것을 제어하려면 관측할 수 있어야 한다. 성공하기 위해서는 성공은 무엇인가를 정의해야 한다.

성공의 지표가 모델이 최적화할 손실 함수를 선택하는 기준이 된다.

클래스 분포가 균일한 분류 문제에서는 정확도와 ROC AUC 가 일반적인 지표이다.
클래스 분포가 균일하지 않은 문제에서는 정밀도와 재현율을 사용할 수 있다.
랭킹 문제나 다중 레이블 문제에는 평균 정밀도를 사용할 수 있다.

성공을 측정하기 위해 자신만의 지표를 정의하는 것은 일반적이지 않다. 머신 러닝의 다양한 성공 지표가 여러가지 종류의 문제에 어떻게 관련되어 있는지 알고 싶다면 캐글의 데이터 과학 경연 대회를 살펴보는 것이 도움이 된다.

3. 평가 방법 선택.

목표를 정했다면 현재의 진척 상황을 평가할 방법을 정해야 한다. 잘 알려진 세 가지의 평가 방식은 다음과 같다.

  • 홀드아웃 검증 세트 분리 : 데이터가 풍부할 때 사용
  • K-겹 교차 검증 : 홀드아웃 검증을 사용하기에 샘플의 수가 너무 적을 때 사용
  • 반복 K-겹 교차 검증 : 데이터가 적고 매우 정확한 모델 평가가 필요할 때 사용

4. 데이터 준비

머신 러닝 모델이 심층 신경망일 때:

  • 데이터는 텐서로 구성된다.
  • 이 텐서에 있는 값은 일반적으로 작은 값으로 스케일 조정되어 있다. [-1,1] 이나 [0,1] 범위이다.
  • 특성마다 범위가 다르면 (여러 종류의 값으로 이루어진 데이터라면) 정규화해야 한다.

5. 기본보다 나은 모델 훈련하기

이 단계의 목표는 statistical power 을 달성하는 것이다.
즉 아주 단순한 모델보다 나은 수준의 작은 모델을 개발한다.

일이 잘 진행된다고 가정하면 첫 번째 모델을 만들기 위해 세 가지 중요한 선택을 해야 한다.

  • 마지막 층의 활성화 함수: 네트워크의 출력에 필요한 제한을 가한다.
  • 손실 함수
  • 최적화 설정: 어떤 옵티마이저를 사용하는가? 학습률은 얼마인가?

6. 과대적합 모델 구축

과소적합과 과대적합 사이, 즉 과소 용량과 과대 용량의 경계에 적절히 위치한 모델이 이상적이다. 이 경계가 어디에 위치하는지 찾기 위해서는 먼저 지나쳐 보아야 한다.

  1. 층을 추가한다.
  2. 층의 크기를 키운다.
  3. 더 많은 에포크 동안 훈련한다.

7. 모델 규제와 하이퍼파라미터 튜닝

반복적으로 모델을 수정하고 훈련하고 검증 데이터에서 평가한다. (이때 테스트 데이터를 사용하지 않는다.) 그리고 다시 수정하고 가능한 좋은 모델을 얻을 때 까지 반복한다. 적용해 볼 것들은 다음과 같다.

  • 드롭아웃을 추가
  • 층을 추가하거나 제거해서 다른 구조를 시도
  • L1 이나 L2 또는 두 가지 모두를 추가한다.
  • 층의 유닛 수나 옵티마이저의 학습률 등을 바꾸어 시도해 본다.

0개의 댓글