본문 바로가기

Data Science/Deep Learning

[밑바닥부터 시작하는 딥러닝 1] Ch 4. 신경망 학습

이번 포스팅은 "신경망 학습"에 대한 내용을 다루도록 하겠다.

 

  • 학습
    • 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 의미함
    • 신경망이 학습할 수 있도록 해주는 지표가 바로 "손실 함수"
    • 손실 함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표이며, 이 때 "경사하강법"이 사용됨

기계학습에서는 사람의 개입을 최소화하고, 수집한 데이터로부터 패턴을 찾으려 시도한다.

 

신경망과 딥러닝은 기존 기계학습에서 사용하던 방법보다 사람의 개입을 더욱 배제할 수 있게 해주는 중요한 특성을 지녔다. 이와 같은 이유로 딥러닝"End-to-End 기계학습"이라고도 한다.

 

기계학습 문제는 데이터를 학습 데이터(train data)테스트 데이터(test data)로 나눠서 학습과 테스트를 수행하는 것이 일반적이다. (Overfitting을 방지하여 일반화 성능을 높이기 위함)

 

즉, 학습 데이터만을 사용하여 학습하면서 최적의 매개변수를 찾고, 그 다음 테스트 데이터를 사용하여 앞서 학습된 모델의 성능을 평가하는 것이다.

 

  • 손실 함수(Loss Function)
    • 신경망 성능의 "나쁨"을 나타내는 지표신경망 학습에서 사용
    • 손실 함수의 값이 작아지는 방향으로 가중치 매개변수를 갱신
    • 대표적인 손실 함수로는 "오차제곱합(SSE)""교차 엔트로피 오차(CEE)"가 있음

<주의>

  • "정확도"라는 지표 대신 "손실 함수"를 사용하는 이유미분 값이 대부분의 장소에서 "0"이 되어서 매개변수를 갱신할 수 없기 때문이다.

그러나 모든 데이터를 대상으로 손실 함수의 합을 구하려면 시간이 오래 걸린다.

 

때문에 데이터 일부(= 미니배치)를 추려서 전체의 "근사치"로 이용할 수 있는데, 이러한 방법을 "미니배치 학습"이라고 한다.

 

신경망 학습에서도 학습 데이터로부터 (무작위로) 일부만 골라 학습을 수행하는 "미니배치 학습"을 사용한다.

 

  • 수치 미분
    • 아주 작은 차분으로 미분하는 것을 의미함
    • 물론 "해석적 미분"과 "수치 미분" 사이에는 작은 오차가 존재하지만, 이는 매우 작은 값으로 거의 같은 값이라고 해도 무방
    • 따라서 수치 미분을 이용해서 가중치 매개변수의 기울기를 구할 수 있음
      • 수치 미분의 구현은 간단하지만 기울기를 구하는 속도가 느리기 때문에, 일반적으로 "오차역전법"을 사용함 (오차역전법의 개념에 대해서는 다음 포스팅에서 설명할 예정)
  • 경사하강법
    • 최적의 매개변수(가중치와 편향)을 학습하면서 찾아야 하는데, 이는 곧 손실 함수가 최솟값이 될 때의 매개변수 값을 의미함
    • 이러한 상황에서 기울기를 이용해서 함수의 최솟값(또는 가능한 한 작은 값)을 찾으려는 방법
    • 하지만 경사하강법을 통해 기울기가 "0"인 장소를 찾았다고 해서, 그 곳이 반드시 최솟값이라는 보장은 없음
    • 또한 "학습률(learning rate)"을 통해 매개변수 값을 얼마나 갱신할지를 정할 수 있음
      • 학습률이 너무 크면 큰 값으로 발산할 수 있음
      • 반면, 학습률이 너무 작으면 값이 거의 갱신되지 않은 채 끝나버릴 수 있음

앞서 말한 "미니배치 학습" 방법을 통해, 확률적으로 데이터를 무작위로 골라낸 후에 경사하강법을 적용하는 것"확률적 경사하강법(SGD)"라고 한다.

 

다음은 미니배치 학습에서 나오는 에폭(Epoch)이라는 개념에 대해 정리하겠다.

 

  • 에폭(Epoch)
    • 1 epoch 학습 과정에서 학습 데이터를 모두 소진했을 때의 횟수를 의미함
      • ex) 학습 데이터 10,000개를 100개의 미니배치로 학습할 경우, 확률적 경사하강법을 100회 반복하면 모든 학습 데이터를 "소진"하게 됨.
      • 즉, 이 경우에는 "1 epoch = 100회"가 됨
    • 에폭이 진행될수록(학습이 진행될수록) 학습 및 테스트 데이터에 대한 정확도가 좋아짐
      • 에폭을 크게 하면 정확도는 높아지나, 시간이 오래 걸린다는 단점이 있음

 

 

★ 참고 자료

- 밑바닥부터 시작하는 딥러닝 교재