역전파 알고리즘에서는 그레디언트를 사용해 알고리즘이 진행된다.
역전파 알고리즘은 출력층에서 입력층으로 오차 그레디언트를 전파하며 진행된다. 알고리즘이 하위층으로 점점 진행될수록 그레디언트가 점점 작아지는 경우가 많다. 이를 그레디언트 소실이라고 한다. 반대의 상황은 그레디언트 폭주라고 한다. 이는 순환 신경망에서 자주 나탄난다. 아래에서 이를 완화할 수 있는 방안들을 탐색해보자.
위 문제를 해결하는 방안 중 글로럿 초기화가 있다(또는 세이비어 초기화). 이는 각 층의 연결 가중치를 무작위로 초기화하는 것이다. 또한 ReLU 활성화 함수에 대한 초기화 전략을 He 초기화라고 부른다.
활성화 함수를 잘못 선택하면 그레디언트 소실이나 폭주로 이어질 수 있다. 이전의 상황을 간단하게 보자면 sigmoid함수를 중첩하여 사용하는 등으로 학습이 잘 이루어지지 않았었다. 이 이후 ReLU가 등장해 이러한 문제가 완화되었다. 하지만 ReLU 또한 완벽하지는 못하였고 이 이후 여러 개선된 활성화 함수가 등장하였다.
개선된 함수는 예로 LeakyReLU, RReLU, PReLU 등이 있다. 더하여 근래에는 Swish, Mish, GeLU등의 바운더리를 ReLU 함수에 추가한 것 같이 생긴 활성화 함수들이 등장하였다. 그림으로 간단하게 알아보자.


Batch Normalization은 2015년에 제안된 방안이다. 이는 각 층에서 활성화 함수를 통과하기 전이나 후에 모델에 연산을 하나 추가하는 것이다(일반적으로 활성화 함수 전에 많이 사용한다). 수식을 통해 확인해보자.
$$ \mu_B=\frac{1}{m_B}\sum^{m_B}_{i=1}x^i $$
$$ \sigma_b^2=\frac{1}{m_B}\sum^{m_B}_{i=1}(x^i-\mu_B)^2 $$
$$ \hat x^i=\frac{x^i-\mu_B}{\sqrt{\sigma_B^2+\xi}} $$
$$ z^i=r\otimes \hat x^i+\beta $$
식이 복잡해 보이지만 결국 결론은 평균을 빼주고, 표준편차로 나누는 정규화 과정을 거친다는 것이 결론이다. 이 때 $\xi$는 0으로 수를 나누어 무한이 되지 않도록 하기위해 아주 작은 수를 더하여 주는 것이다. 이는 성능의 향상까지 이어질 수 있기에 적절하게 사용하는 것이 도움이 된다. 다음 코드를 참고하자.