Batch
이전 글에서 효율적인 행렬연산을 위해 여러 데이터를 붙이는 Vectorization을 얘기했었다.

좋은 방법이지만 만약 데이터의 수가 너무 많아지면 메모리가 부족해질 수 있다.
그래서 mini batch를 사용한다.
데이터의 일부만을 묶어서 사용하는 방법이다.

계산이 크게 달라지는 것 없이 그냥 mini batch를 전체 데이터라고 생각하면 된다.
예를 들어 500만 개의 데이터를 다룰 때 1000개씩 끊어서 이용한다면,
batch size는 1000,
mini batch 수는 5000이 된다.
한 세트를 처리하는 것을 1 iteration이라고 하고, 위 예시의 경우 5000번의 iteration을 수행하면 전체 데이터를 다 보게 되는데,
이를 1 epoch라고 한다.
미니배치 사이즈 정하기
미니배치가 무엇인지는 알았지만 이 크기를 어떻게 정할까라는 의문이 남는다.
극단적으로 생각해보면 배치 사이즈를 전체 데이터와 똑같이 한다면 처음에 얘기한 메모리 부족 등의 문제가 생길 것이다.
반대로 배치 사이즈를 1로 설정한다면 Vectorization의 이점을 사용할 수 없다.
적당한 크기의 배치사이즈를 정하는 것은 학습의 측면에서도 좋은 점이 있다.
아래와 같은 그림을 생각해보자.
각 타원은 등고선처럼 loss함수의 값이 같은 부분을 연결해 놓은 것이라고 생각하면 된다.

시작점에서 타원의 중심까지 일반 batch는 거의 최단거리로 잘 가는 모습을 볼 수 있다.
하지만 만약 가는 길에 local minimum을 만나게 되면 그 곳에 갇히게 된다.
그러나 mini batch는 이리저리 튀면서 움직이므로 local minimum을 만나더라도 튀어서 탈출할 수 있다.
Batch Normalizaiton
미니 배치 단위에서 신경망에 들어가는 데이터의 평균과 분산을 구한다.
먼저 이를 사용해 정규화한다.
이때 우리가 고등학교 때 통계에서 배운 것처럼 (0,1)의 분포를 만들기 위해 평균을 빼고 표준편차로 나눈다.
만약 분산이 0이라면 0으로 나누는 문제가 발생하므로 작은 값을 더해 나눈다.

이렇게 만든 (0,1)분포에서 특정 값($\gamma$)을 곱하고 특정 값을 더해 ($\beta$) 새로운 값을 만든다.
이 두가지 변수는 학습이 가능한 값이다.
이 값이 BN을 적용한 후의 최종 출력이다.

전체 흐름을 따지자면 아래와 같다.
1. $z = Wa + b$ 계산
2. $\to z_{norm}$ (0,1)로 정규화
3. $\gamma$와 $\beta$를 적용해 $\tilde{z}$ 생성
4. $\sigma(\tilde{z})$ : 시그모이드나 ReLU같은 activation function에 통과시킴
5. 다음층의 입력으로 전달
이때 최종적으로 학습되는 변수는 $W,b,\gamma,\beta$라고 생각할 수 있다.
하지만 조금 생각해보면 정규화 과정에서 평균을 빼는 과정이 들어가기 때문에 $+b$가 무의미해지는 것을 알 수 있다.
따라서 BN을 쓰는 층에서는 $b$를 학습하지 않는다.
이렇게 전체 데이터를 shift하는 역할은 $\beta$가 수행하게 된다.
마지막으로 train이 아닌 test때는 어떨지 생각해보자.
train시에는 mini batch로 여러개의 데이터를 다루기 때문에 평균, 분산이라는 값을 구할 수 있었다.
하지만 test시에는 하나의 데이터를 받아 계산하게 된다.
mini batch들을 통해 학습했을 때 구해졌던 평균과 분산들을 누적해서 총 데이터의 평균, 분산을 계산해놓는다.
이를 사용해서 test를 하게 된다.
이 BN이 왜 필요할까?
입력을 정규화하게 되면 입력이 급격하게 바뀌어도 안정적이고 학습이 빨라진다.
BN이 없을 경우 신경망의 층이 깊을 때는 앞부분의 변화가 점차 증폭되는 문제가 생길 수 있는데
BN을 사용하면 층이 깊어져도 더 안정적으로 유지할 수 있다.
예를 들어 학습이 다 검정 고양이로 이루어졌어도 BN을 적용하면 색상 변화에 강인해지므로 색이 있는 고양이도 잘 분류할 수 있게 된다.

'CS > 딥러닝' 카테고리의 다른 글
| [딥러닝] 6. 최적화 (0) | 2026.04.13 |
|---|---|
| [딥러닝] 4. Deep Neural Network (0) | 2026.03.30 |
| [딥러닝] 3. multi layer network에서의 gradient 계산과 차원 (0) | 2026.03.25 |
| [딥러닝] 2. Shallow Neural Network / Activation function (0) | 2026.03.19 |
| [딥러닝] 1. Logistic Regression (3) | 2026.03.11 |