본문 바로가기
딥러닝 with Python

[딥러닝 with 파이썬] 배치(Batch)란? / 배치정규화(Batch Normalization)

by CodeCrafter 2023. 10. 29.
반응형

 

 이번에 알아볼 것은 딥러닝 학습 간 많이 활용되는 배치(Batch), 그리고 이 배치를 정규화하는 배치정규화(Batch Normalization)에 대해서 알아보겠습니다.

 

1. 배치(Batch)란?

- 배치(Batch)는 "일괄적으로 처리되는 집단" 또는 "한 회분"을 나타내는 단어입니다.

- 해당 단어가 기계학습 및 딥러닝 분야에서는, 데이터를 처리하는 기본 단위를 의미합니다.

 * 즉, 전체 데이터 세트에서 일부분을 하나의 배치(Batch) 라고 표현합니다.

 * 위 그림처럼 전체 데이터셋의 일부를 Batch로 표현합니다.

 

- 이렇게 전체 데이터를 배치로 나누어서 처리하는 이유는 무엇일까요?

 * 그것은 바로, 데이터의 크기가 큰 경우 전체 데이터를 하번에 처리할 수 없기 때문입니다. 그래서, 이렇게 배치 단위로 나누게 된다면, 동일한 모델이 전체 데이터 셋의 일부인 배치들을 병렬로 처리할 수 있게 되고 이를 통해 계산을 더 효율적으로 할 수 있으며 모델 훈련 또한 효율적으로 진행되는 효과를 누릴 수 있는 것입니다.

 

- 배치(Batch)의 구성요소는 다음과 같습니다

 

 1) 배치 크기(Batch size) : 배치 크기는 한 배치에 포함된 데이터 샘플의 수를 일컫습니다. 배치 크기는 훈련 속도와 메모리 사용량에 영향을 미치게 되는데요. 배치의 크기가 크다면 하나의 배치를 처리하기 위해 더 많은 메모리를 사용하지만, 나뉘어진 배치의 숫자가 적기 때문에 더 빠른 훈련 속도를 제공합니다. 배치의 크기가 작다면 하나의 배치를 처리하기 위해 더 적은 메모리를 사용하지만, 나뉘어진 배치의 숫자가 많기 때문에 보다 느린 훈련속도가 나오기도 합니다.

 

 2)  배치 처리(Batch Processing) : 배치 처리는 전체 데이터셋을 작은 배치들로 나누고, 각 배치를 독립적으로 처리하는 것을 말합니다. 이렇게 큰 데이터를 배치 단위로 처리하는 것은 특히 큰 데이터 셋을 다룰 때 유용합니다.

 

- 데이터를 배치 단위로 처리하게 되면

 a) 메모리를 효율적으로 사용(전체 데이터셋을 한번에 로드할 필요가 없고 작은 배치들을 순차적으로 로드 및 처리), b) 병렬 처리가 가능(나뉘어진 배치는 GPU와 같은 병렬처리 프로세싱 유닛을 통해 동시에 처리 가능), c) 안정적인 경사하강(각 배치의 평균 그래디언트를 사용하기 때문에 개별 데이터 포인트의 노이즈 감소) 하다는 장점이 있습니다

 

 하지만,  a) 많은 메모리를 요구한다는 점과 b) 배치별로 서로 상이한 결과값이 나온다면 이를 최적화하기위한 별도의 처리가 필요하다는 단점이 존재하기도 합니다. 

 

 일반적으로 배치 처리는 모델의 성능향상 및 연산 속도 향상에 도움을 주기 때문에 대부분 사용되는 편입니다.

 

 

2. 배치 정규화(Batch Normalization)이란?

- 먼저, 정규화(Normalization)이란, 데이터의 범위를 변경하거나 데이터의 분포를 조절하는 과정을 말합니다. 대표적으로 데이터의 최소값을 0, 최대값을 1로 변환하는 Min-Max 정규화와 데이터의 평균을 0, 표준편차를 1로 변환하는 Z-score 정규화(표준화)가 있습니다. 

 

- 배치 정규화(Batch Normalization)은 딥러닝 모델을 훈련할 때 주로 사용되는 기법으로, 각 레이어의 입력을 정규화하여 학습 과정을 안정화하고 가속화하는 도움을 주는 방법입니다. 이는 2015년 Sergey loffe와 Christian Szegedy가 저술한 "Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift"에 의해 등장한 방법입니다. 

 

- 배치 정규화는 아래 그림을 통해 더 직관적으로 이해할 수 있는데요

* 학습 간 배치 단위로 데이터가 모델이 입력값이 된다면, 위 그림처럼 첫번째 배치는 빨간색의 분포를, 두번째 데이터는 초록색의 분포를, 세번째 데이터는 코발트색의 분포를 가지게 될 수도 있습니다. 이 데이터들을 그대로 다음 층의 입력값으로 넣게 된다면, 각 배치별 분포가 더 극심하게 나뉠수도 있게 되는데요. 이로 인해 학습이 불안정해져 결과가 수렴하지 못하거나 또는 적절한 결과값이 나오지 못하는 경우가 발생하게 됩니다. 

 

* 그래서, 위에서 처럼 하나의 활성화 층을 거친 각 배치들의 결과값을 바탕으로 큰 집합을 구성하고, 여기에서 정규화를 진행하게 된다면 각 데이터들의 분포가 극단적으로 나뉘는 것이 줄어들게 되어 학습에 안정성을 더해주게 됩니다.

 

- 배치 정규화에서 사용되는 정규화는 앞서 설명한 방식과는 조금은 다른데요

1) 각 배치의 평균 및 분산을 계산

2) 데이터를 정규화(각 개별 데이터에서 전체 평균을 빼고, 표준편차로 나누어주는 Z-Score 방식 활용)

3) 정규화된 데이터를 스케일링 및 시프트 (γ와 β를 곱하고 더합니다)
 * 여기서 γ(스케일)와 β(시프트)는 학습 가능한 파라미터로, 네트워크가 학습 과정에서 최적의 값으로 조정합니다.

 * 이 두 파라미터 덕분에 배치 정규화는 네트워크가 필요에 따라 평균과 분산을 조정할 수 있게 해줍니다.

 

 

반응형

댓글