이번 포스팅에서는 딥러닝 학습 방법에 대해 알아보겠습니다. 특히 딥러닝의 맥락에서 모델(알고리즘)을 개발하는 데 있어 어떤 절차로 진행되는지 보겠습니다. 딥러닝은 학습 과정은 상호 연결된 노드(뉴런)의 레이어를 이용하여 수행됩니다. 그래서 batch size(배치 사이즈), Iteration(반복), epoch(에포크)와 같은 학습에 필요한 개념들을 이 글에서 정확히 이해하는 것이 중요합니다.
신경망 학습 방법(절차)
1.가중치 초기화
딥러닝 학습을 시작하면서 가중치와 편향을 초기화합니다. 일반적인 초기화 방법에는 무작위 초기화 또는 사전 학습된 가중치로 사용하기도 합니다. 가중치 계산하는 법에 대한 글을 참고하시기 바랍니다.
2.Feedforward Propagation
분석가들 사이에서 데이터를 먹이는(?) 과정이라 말합니다. 이 과정이 없으면 Back Propagation 할 때 비교 값이 없으므로 가장 먼저 진행되어야 할 과정입니다.
- 데이터 입력(입력층) → 가중치-편향 연산 & 활성화 함수 연산 반복 수행(은닉층)
- 1의 연산 결과(예측값) 출력(출력층)
3.Loss Function(손실함수)
전 단계에 의해 데이터를 먹이면 예측값이 도출됩니다. 그러면 손실함수를 이용해 예측값과 실제값의 차이를 계산합니다.
4.Back Propagation : 오차역전파
두번째 단계에서 손실함수 계산에 따라 이번에는 뒤쪽으로 가면서 가중치 갱신합니다. 이 과정이 그 유명한 오차역전파 과정입니다.
5.기준을 만족할 때까지 위 과정을 반복
위 과정을 신경망이 최적화될 때까지 반복해 진행합니다. 신경망에 사용되는 여러 가지 파라미터가 좋은 성능을 내는 지점을 찾는 과정이라고 생각하면 됩니다.
Batch size(배치 사이즈)
딥러닝 학습에서 자주 등장하는 단어가 '배치' 라는 단어입니다. 이것은 전체 데이터를 더 작은 단위로 나누어서 해당 단위로 학습하는 개념이 나오게 되었습니다. Batch Size단위로 위의 1 ~ 3번까지를 학습을 반복(Iteration)하는 것을 미니 배치(Mini Batch) 학습이라고 합니다.
Batch Size 크게 할 경우
- 장점 : 배치 단위로 분포를 추정하기 때문에 좀더 근사한 추정이 가능해서 noise를 감소시켜 모델에 수렴하는 것을 향상 시킴
- 단점 : 너무 크면 메모리 부족으로 학습속도가 느려질 수 있음
Batch Size 작게 할 경우 :
- 단점 : 샘플수가 적어 통계값이 부정확하게 계산되어 모델 수렴과정이 불안정함
- 장점 : noise가 많아지고 Regularization 효과 있음
Iteration(반복)
Iteration을 헷갈려하는 경우가 많은데요. 전체 데이터에 대해 총 Batch의 수를 의미합니다. 다른 말로 'Step'이라고 부르기도 합니다. 한 번의 에포크 내에서 이루어지는 매개변수인 가중치와 의 업데이트 횟수가 됩니다.
Epoch
Epoch는 '에포크'라고 읽고 전체 데이터셋을 학습한 횟수를 의미합니다. 위의 그림을 보면 전체 데이터가 배치 사이즈 500개짜리가 8개가 있습니다. 이 전체 데이터셋(Dataset) 4,000(500x8)건을 3번 반복 학습하면 Epoch 3이 됩니다.
왜 Batch 작업을 하는가?
그런데 왜 머신러닝에서는 Batch라는 개념이 없는데, 딥러닝에서 사용할까요? 이유는 대용량의 데이터를 한 번에 처리하지 못하기 때문입니다. 데이터를 batch size 단위로 나눠서 학습하는 방법을 사용하는 것이죠. 이 방법은 CPU, 메모리 등 리소스의 한계가 있기 때문에 적정한 단위의 batch처리는 학습속도를 향상시킬 수 있습니다.
머신러닝에서는 데이터와 연산의 량이 크지 않기 때문에 미니배치 학습을 하지 않습니다. 딥러닝과 머신러닝의 차이에 대한 글을 살펴보시면 이해하가 되실 겁니다. 또 데이터를 나눠서 학습할 경우 추가적으로 발생하는 문제도 있기 때문이죠. 그 문제점는 아래에 설며해 놓았습니다.
- 배치 크기는 보통 2의 제곱수를 사용 : 예를 들어, 2, 4, 8, 16, 32, 64... 그 이유는 CPU와 GPU의 메모리가 2의 배수이므로 배치크기가 2의 제곱수일 경우에 데이터 송수신의 효율을 높일 수 있습니다.
- GPU 사용 : 미니배치 단위로 병렬 학습이 가능하며 가중치는 계산값들의 평균값으로 Update 합니다. GPU를 이용하는 것이 훨씬 유리하죠.
Batch 작업의 문제점은 무엇인가?
Batch 작업은 여러 이점이 있지만 아래의 문제점도 있습니다. 그래서 보완하는 방법들도 나와있죠. 굳이 Batch 작업이 필요하진 머신러닝에서는 사용할 이유가 없다고 보입니다.
- Internal Covariant Shift : 학습 과정에서 계층 별로 입력의 데이터 분포가 달라지는 현상
- Batch 단위 간에 데이터 분포의 차이가 발생할 수 있음
이런 문제 개선을 위해 Batch Normalization이라는 기법을 적용하기도 합니다.
학습을 통해 무엇을 할 수 있나?
딥러닝 학습은 손실함수를 작아지는 방향으로 가중치 매개변수를 갱신하기 위해서입니다. 가중치 매개변수 갱신을 위해 가중치 매개변수의 기울기를 이용합니다. 기울기는 미분을 통해 구할 수 있죠. 일반화 성능을 평가하기 위해 별도의 테스트 데이터 세트에서 학습된 모델을 평가를 합니다. 결국 최적의 정확도를 가진 모델을 만드는 작업이라 할 수 있습니다.
'딥러닝' 카테고리의 다른 글
딥러닝 하이퍼파라미터 튜닝 및 설정 (0) | 2024.01.23 |
---|---|
딥러닝의 수치미분과 편미분: 꼭 알아야 할 미분 공식 (1) | 2024.01.22 |
딥러닝에서 크로스 엔트로피(Cross Entropy)를 사용하는 이유 (0) | 2024.01.18 |
딥러닝에서 손실함수를 사용하는 이유 (0) | 2024.01.17 |
소프트맥스 함수를 사용하는 이유? (0) | 2024.01.16 |