배치 정규화
도입1
학습 데이터 $X = \left\{ \mathbf{x}_{1}, \cdots, \mathbf{x}_{N} \right\}$이 주어졌다고 하자. 이를 $B = \left\{ B_{1}, \dots, B_{m} \right\}$ $(|B_{i}| = n)$와 같이 미니배치로 나누고, $B_{i}$의 $k$번째 데이터를 $\mathbf{x}_{i,k}$라 쓰자. $i$번째 배치 $B_{i}$에 대해서, $f$를 신경망의 적당한 일부분, $H$를 그 층의 출력 차원이라 하고, $k$번째 데이터에 대한 그 층의 출력을 $\mathbf{a}^{k} := f(\mathbf{x}_{i,k}) \in \mathbb{R}^{H}$라 하자. 이들을 행으로 쌓은 행렬을 $\mathbf{A}$라 한다.
$$ \mathbf{A} = \begin{bmatrix} \left( \mathbf{a}^{1} \right)^{\mathsf{T}} \\ \left( \mathbf{a}^{2} \right)^{\mathsf{T}} \\ \vdots \\ \left( \mathbf{a}^{n} \right)^{\mathsf{T}} \end{bmatrix} = \begin{bmatrix} f(\mathbf{x}_{i,1})^{\mathsf{T}} \\ f(\mathbf{x}_{i,2})^{\mathsf{T}} \\ \vdots \\ f(\mathbf{x}_{i,n})^{\mathsf{T}} \end{bmatrix} \in \mathbb{R}^{n \times H} $$
곧 $\mathbf{A}$는 $k$번째 행이 $k$번째 데이터에 대한 출력 $\mathbf{a}^{k}$인 행렬이고, 그 $(k, j)$ 성분 $\left[ \mathbf{A} \right]_{kj} = \left[ \mathbf{a}^{k} \right]_{j}$는 $k$번째 데이터의 $j$번째 성분이다.
$\mathbf{1} \in \mathbb{R}^{n}$을 모든 성분이 $1$인 벡터라 하자. 성분 $j = 1, \dots, H$마다 배치 방향으로, 다시 말해 $\mathbf{A}$의 열마다 계산한 평균과 분산은 다음과 같다.
$$ \mu_{j}(\mathbf{A}) := \frac{1}{n} \sum_{k=1}^{n} \left[ \mathbf{A} \right]_{kj} , \qquad \sigma_{j}^{2}(\mathbf{A}) := \frac{1}{n} \sum_{k=1}^{n} \left( \left[ \mathbf{A} \right]_{kj} - \mu_{j}(\mathbf{A}) \right)^{2} $$
이들을 모은 벡터를 $\boldsymbol{\mu}(\mathbf{A})$, $\boldsymbol{\sigma}^{2}(\mathbf{A}) \in \mathbb{R}^{H}$라 쓰면, 평균은 $\mathbf{A}$의 열들의 평균이므로 행렬곱으로 간단히 표현된다.
$$ \boldsymbol{\mu}(\mathbf{A}) = \frac{1}{n} \mathbf{A}^{\mathsf{T}} \mathbf{1} = \begin{bmatrix} \mu_{1}(\mathbf{A}) \\ \vdots \\ \mu_{H}(\mathbf{A}) \end{bmatrix} $$
표준편차는 $\sigma_{j}(\mathbf{A}) := \sqrt{ \sigma_{j}^{2}(\mathbf{A}) }$로 쓴다.
정의
스케일scale $\boldsymbol{\gamma} \in \mathbb{R}^{H}$와 시프트shift $\boldsymbol{\beta} \in \mathbb{R}^{H}$에 대해서 다음과 같은 함수 $\operatorname{BN} : \mathbb{R}^{n \times H} \to \mathbb{R}^{n \times H}$를 배치 정규화batch normalization라 한다.
$$ \operatorname{BN}(\mathbf{A}) := \begin{bmatrix} \gamma_{1} \dfrac{ \left[ \mathbf{A} \right]_{11} - \mu_{1}(\mathbf{A}) }{ \sigma_{1}(\mathbf{A}) } + \beta_{1} & \cdots & \gamma_{H} \dfrac{ \left[ \mathbf{A} \right]_{1H} - \mu_{H}(\mathbf{A}) }{ \sigma_{H}(\mathbf{A}) } + \beta_{H} \\ \vdots & \ddots & \vdots \\ \gamma_{1} \dfrac{ \left[ \mathbf{A} \right]_{n1} - \mu_{1}(\mathbf{A}) }{ \sigma_{1}(\mathbf{A}) } + \beta_{1} & \cdots & \gamma_{H} \dfrac{ \left[ \mathbf{A} \right]_{nH} - \mu_{H}(\mathbf{A}) }{ \sigma_{H}(\mathbf{A}) } + \beta_{H} \end{bmatrix} $$
이는 $j$번째 열 전체를 그 열의 평균 $\mu_{j}(\mathbf{A})$와 표준편차 $\sigma_{j}(\mathbf{A})$로 표준화한 뒤, 열마다 $\gamma_{j}$배 하고 $\beta_{j}$를 더하는 것이다.
설명
$X$의 평균과 표준편차에 대한 $Z = \dfrac{X - \mu}{\sigma}$와 같은 변환은 통계학에서 표준화standardization라 불리는 것인데, 머신러닝 분야에서는 이를 정규화normalization라 부른다. 데이터에 가하는 일체의 변환을 구분없이 정규화라고 부르는 느낌이 강하다.
한편 대각행렬을 왼쪽에 곱하는 것이 대각성분을 상대 행렬의 각 행 전체에 곱하는 것과 같듯이, 대각행렬을 오른쪽에 곱하는 것은 대각성분을 상대 행렬의 각 열 전체에 곱하는 것과 같다. 그러므로 대각행렬 $\mathbf{D}(\mathbf{A}) \in \mathbb{R}^{H \times H}$를 다음과 같이 두면,
$$ \mathbf{D}(\mathbf{A}) := \diag \begin{bmatrix} \dfrac{\gamma_{1}}{\sigma_{1}(\mathbf{A})} & \cdots & \dfrac{\gamma_{H}}{\sigma_{H}(\mathbf{A})} \end{bmatrix} $$
위의 정의를 다음과 같이 표현할 수 있다.
$$ \operatorname{BN} (\mathbf{A}) = \left( \mathbf{A} - \mathbf{1} \boldsymbol{\mu}(\mathbf{A})^{\mathsf{T}} \right) \mathbf{D}(\mathbf{A}) + \mathbf{1} \boldsymbol{\beta}^{\mathsf{T}} $$
실제 구현에서는 $\sigma_{j}(\mathbf{A}) = 0$일 때 $0$으로 나누는 것을 막기 위해 분모에 작은 $\epsilon > 0$을 더한다. 곧 $\mathbf{D}(\mathbf{A})$ 대신 다음의 $\mathbf{D}_{\epsilon}(\mathbf{A})$를 쓴다.
$$ \mathbf{D}_{\epsilon}(\mathbf{A}) := \begin{bmatrix} \dfrac{\gamma_{1}}{\sqrt{\sigma_{1}^{2}(\mathbf{A}) + \epsilon}} & & \\ & \ddots & \\ & & \dfrac{\gamma_{H}}{\sqrt{\sigma_{H}^{2}(\mathbf{A}) + \epsilon}} \end{bmatrix} $$
$$ \operatorname{BN} (\mathbf{A}) = \left( \mathbf{A} - \mathbf{1} \boldsymbol{\mu}(\mathbf{A})^{\mathsf{T}} \right) \mathbf{D}_{\epsilon}(\mathbf{A}) + \mathbf{1} \boldsymbol{\beta}^{\mathsf{T}} $$
성분으로 풀어 쓰면 다음과 같다.
$$ \left[ \operatorname{BN} (\mathbf{A}) \right]_{kj} = \gamma_{j} \dfrac{ \left[ \mathbf{A} \right]_{kj} - \mu_{j}(\mathbf{A}) }{ \sqrt{ \sigma_{j}^{2}(\mathbf{A}) + \epsilon } } + \beta_{j} $$
$\boldsymbol{\gamma}$와 $\boldsymbol{\beta}$는 학습되는 파라미터이다. $\mathbf{D}(\mathbf{A})$와 $\boldsymbol{\mu}(\mathbf{A})$가 $\mathbf{A}$의 모든 행에 의존하므로, $\operatorname{BN}(\mathbf{A})$의 $k$번째 행은 $\mathbf{a}^{k}$만으로 결정되지 않는다.
추론시에는 다르게 작동한다. 입력 배치에 따라 출력이 달라지면 안되므로, 결정론적인deterministic 출력을 얻기 위해서 배치와 상관없이 고정된 평균과 분산이 필요하다. 이를 위해서 학습 시 미니배치들의 평균과 분산을 이동 평균으로 계산하여 추론 시에 사용한다.
제안된 논문에서는 학습이 진행되는 동안 각 층에 들어오는 입력의 분포가 계속 바뀌는 현상을 내부 공변량 변화internal covariate shift라 부르고, 배치 정규화가 이를 줄여 학습을 안정시킨다고 설명한다.
층 정규화와 비교하여 어떻게 작동하는지 시각적으로 나타내면 아래와 같다.

같이보기
Sergey Ioffe, and Christian Szegedy. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. Proceedings of the 32nd International Conference on Machine Learning (2015). https://arxiv.org/abs/1502.03167 ↩︎

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

