본문 바로가기
AI 수학/최적화

SGD에서 데이터를 무작위로 추출해야 하는 이유

by 세인트 워터멜론 2021. 1. 4.

배치(batch) 경사하강법은 학습 데이터 전체를 사용해서 손실함수(loss function)의 그래디언트(gradient)를 계산하고 신경망 파라미터를 업데이트한다. 반면에 확률적 경사하강법(SGD, stochastic gradient descent)은 전체 데이터에 비해 훨씬 적은 수의 데이터를 무작위로 추출하고 그 데이터만으로 손실함수의 그래디언트를 계산한 후 신경망 파라미터를 업데이트한다. 확률적(stochastic)이라는 용어는 데이터를 무작위로 추출한다는 뜻에서 나온 말이다.

그러면 왜 데이터를 무작위로 추출해야 할까.

 

 

대부분 신경망 학습 알고리즘은 손실함수를 정하는 것으로 시작한다. 손실함수를 \( \mathcal{L}(\mathbf{\theta} \ ; (\mathbf{x}^{(i )}, \mathbf{y}^{(i) })) \)로 표현하자. 여기서 \((\mathbf{x}^{(i) }, \mathbf{y}^{(i) }) \)는 학습 데이터셋(신경망 입력과 라벨 데이터)이고 \(\mathbf{\theta} \)는 신경망 파라미터다. 전체 누적 손실함수는 다음과 같다.

 

\[ J( \mathbf{\theta}) = \sum_{i=1}^N \mathcal{L}( \mathbf{\theta} \ ; (\mathbf{x}^{(i) }, \mathbf{y}^{(i) })) \]

 

여기서 \(N\)은 전체 데이터의 개수이다. 배치 경사하강법에 의하면 신경망 파라미터 \( \mathbf{\theta} \)는 다음식으로 업데이트된다.

 

\[ \mathbf{\theta} \gets \mathbf{\theta}- \alpha \nabla_{\mathbf{\theta}} \left[ \frac{1}{N} \sum_{i=1}^N \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{x}^{(i) }, \mathbf{y}^{(i) })) \right] \]

 

여기서 \( \nabla_{\mathbf{\theta}} [ \cdot ] \) 는 \( \mathbf{\theta} \) 에 대한 \( [ \cdot ] \) 의 그래디언트를 의미한다. 배치 경사하강법은 데이터 전체를 이용하여 파라미터를 한번 업데이트한다.

반면 SGD(확률적 경사하강법)은 전체 데이터 중에서 학습에 이용할 데이터를 \( M \)개씩 추출하여 파라미터를 업데이트한다.

 

\[ \begin{align} \mathbf{\theta} & \gets \mathbf{\theta}- \alpha \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=1}^M \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{x}^{(i) }, \mathbf{y}^{(i) })) \right] \\ \\ \mathbf{\theta} & \gets \mathbf{\theta}- \alpha \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{x}^{(i) }, \mathbf{y}^{(i) })) \right] \\ \\ & \cdots \end{align} \]

 

따라서 데이터 전체를 이용하는 동안 신경망 파라미터를 여러 번 업데이트할 수 있으므로 효율적이다.

SGD에서 사용하는 \(M\)개의 데이터는 전체 학습 데이터 \(N\)개를 대표하여 이용하는 것이므로 \(M\)개의 데이터는 전체 학습 데이터의 확률분포와 유사해야 한다. 그래야 훨씬 적은 계산으로 전체 학습 데이터로 계산한 그래디언트를 바이어스(bias)없이 추정할 수 있기 때문이다.

\(M\)개의 데이터가 전체 학습 데이터 \(N\)개와 유사한 확률 분포를 갖도록 하기 위해서는 \(M\)개의 데이터를 독립적이고 공평하게 무작위로 추출해야 한다. 즉, IID(independent and identically distributed) 샘플이어야 한다.

왜 그런지 수식으로 알아보자.

 

 

먼저 알아 두어야 할 것은 확률밀도함수(probability density function)가 \(p_X (x)\)인 모집단에서 \(N\)개의 샘플이 독립적이고 공평하게 추출됐다면 각 샘플이 추출될 확률은 \( \frac{1}{N} \)로 동일하게 주어지며, 디랙 델타(Dirac delta) 함수 \(\delta (x) \)를 이용하면 확률밀도함수 \(p_X (x) \)를 다음과 같이 근사화할 수 있다는 점이다.

 

\[ p_X (x) \approx \frac{1}{N} \sum_{i=1}^N \delta (x-x^{(i) } ) \]

 

이제 전체 학습 데이터셋을 어떤 확률분포 \(p_{XY} (x,y)\)를 갖는 모집단에서 추출된 \(N\)개의 IID 샘플이라고 간주하자.

 

 

그러면 랜덤변수 \( \mathbf{X}, \mathbf{Y} \)의 함수인 랜덤 손실함수 \( \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \)의 그래디언트의 기댓값은 다음과 같다.

 

\[ \mathbb{E} \left[ \nabla_{\mathbb{\theta}} \left[ \mathcal{L} ( \mathbb{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \right] \right] = \nabla_{\mathbf{\theta}} \left[ \mathbb{E} \left[ \mathcal{L} ( \mathbf{\theta} \ ;( \mathbf{X}, \mathbf{Y} ) ) \right] \right] \]

 

여기서 기댓값은 다음과 같이 근사화 되므로,

 

\[ \begin{align} \mathbb{E} \left[ \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \right] & = \int_{(\mathbf{x}, \mathbf{y})} \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{x}, \mathbf{y})) \ p_{\mathbf{XY}} (\mathbf{x}, \mathbf{y}) \ d\mathbf{x} d \mathbf{y} \\ \\ & \approx \int_{(\mathbf{x}, \mathbf{y})} \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{x}, \mathbf{y})) \sum_{i=1}^N \frac{1}{N} \delta \left( \begin{bmatrix} \mathbf{x} \\ \mathbf{y} \end{bmatrix} - \begin{bmatrix} \mathbf{x}^{(i)} \\ \mathbf{y}^{(i)} \end{bmatrix} \right) d \mathbf{x} d\mathbf{y} \\ \\ & = \frac{1}{N} \sum_{i=1}^N \mathcal{L} (\mathbf{\theta} \ ;(\mathbf{x}^{(i) }, \mathbf{y}^{(i) } )) \end{align} \]

 

그래디언트의 기댓값은 다음과 같이 근사적으로 계산된다.

 

\[ \mathbb{E} \left[ \nabla_{\mathbf{\theta}} \left[ \mathcal{L} (\mathbf{\theta} \ ; ( \mathbf{X}, \mathbf{Y})) \right] \right] \approx \nabla_{\mathbf{\theta}} \left[ \frac{1}{N} \sum_{i=1}^N \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{x}^{(i) }, \mathbf{y}^{(i) } )) \right] \]

 

결국 배치 경사하강법에서 사용하는 그래디언트는 랜덤 손실함수 \( \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \)의 그래디언트의 기댓값임을 알 수 있다.

이제 SGD에서 사용하는 \(M\)개의 데이터에 대한 손실함수의 기댓값을 계산해 보자. 여기서는 편의상 두번째 업데이트 식을 이용한다.

전체 모집단 \(N\)개에서 \(i\) 번째 데이터가 추출되는 사건을 나타내는 랜덤변수를 \( (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } ) \)라고 하면,

 

\[ \mathbb{E} \left[ \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } )) \right] \right] = \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathbb{E} \left[ \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } )) \right] \right] \]

 

이다. 만약에 데이터가 모집단에서 독립적이고 공평하게 추출된다면 랜덤변수 \( (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } ) \)는 모두 동일한 확률분포 \(p_{\mathbf{XY}} (\mathbf{x}, \mathbf{y}) \)를 갖는다.

 

 

그러면 위 식은 다음과 같이 된다.

 

\[ \begin{align} \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathbb{E} \left[ \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } )) \right] \right] &= \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathbb{E} \left[ \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \right] \right] \\ \\ &= \mathbb{E} \left[ \nabla_{\mathbf{\theta}} \left[ \mathcal{L} (\mathbf{\theta} \ ; (\mathbf{X}, \mathbf{Y})) \right] \right] \end{align} \]

 

즉, 배치 경사하강법에서 사용하는 그래디언트의 기댓값과 동일하다.

하지만 데이터가 모집단에서 독립적이고 공평하게 추출되지 않았다면 위 식은 성립하지 않는다. 극단적으로 \(M\)개의 데이터가 미리 정해져 있다면, 즉 확정적이라면 두번째 업데이트 식은 확정적인 값을 가지며 다음과 같이 된다.

 

\[ \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=M+1}^{2M} \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } )) \right] = g_2 \]

 

첫번째 업데이트 식도 다음과 같이 계산될 것이다.

 

\[ \nabla_{\mathbf{\theta}} \left[ \frac{1}{M} \sum_{i=1}^{M} \mathcal{L} ( \mathbf{\theta} \ ; (\mathbf{X}^{(i) }, \mathbf{Y}^{(i) } )) \right] = g_1 \]

 

이제 \(g_1\)과 \(g_2\)는 정해진 값으로 같은 값임을 보장할 수 없으며, SGD의 그래디언트는 바이어스를 갖는다.

 

 

댓글