3. Training Deep Neural Networks

3.1. Introduction

1장에서 소개한 역전파 알고리즘을 더 상세하게 알아보자. 이는 초기에는 알려지지 않았다. 역전파가 처음 소개된 이후에도 데이터의 증가, 연산 능력 증가, 실험 시간의 감소로 인해서 신경망이 인기가 있어졌다. 역전파는 알고리즘의 초기화 등이 조금만 변화해도 매우 불안정해지므로 알고리즘을 잘 세팅해야 한다.

3.2. Backpropagation: The Gory Details

역전파를 자세히 알아보자.

3.2.1. Backpropagation with the Computational Graph Abstraction

신경망은 계산 단위가 뉴런인 계산 그래프이다. 다층 망은 각 노드에서 계산된 함수의 합성함수를 계산한다. 이의 도함수를 계산하려면 동적 계획법이 필요하다. 그리고 연쇄법칙을 다변수함수에 대해 적용하면 된다. 나이브한 알고리즘은 지수함수 시간이다.

3.2.2. Dynamic Programming to the Rescue

문제는 같은 도함수를 계속 구한다는 것이다. 동적 계획법을 쓰면 이를 피해 다항 시간에 풀 수 있다. 이것이 되는 이유는 계산 그래프가 비순환방향그래프이기 때문이다. 신경망도 똑같다.

3.2.3. Backpropagation with Post-Activation Variables

역전파는 전방 단계로 출력과 손실 함수를 구하고 후방 단계로 경사들을 계산한다. 실제 구현에서는 미니배치 단위로 경사가 계산되기도 한다.

3.2.4. Backpropagation with Pre-activation Variables

활성 함수를 적용하기 이전 변수에 대해서 나타낼 수도 있다. 이러면 활성 함수의 경사가 합 밖에 나타나게 된다는 차이점이 있다.

3.2.5. Examples of Updates for Various Activations

여러 활성 함수에 대해서 직접 역전파 공식을 구해보자.

3.2.5.1. The Special Case of Softmax

소프트맥스 같은 경우 함수가 여러 입력에 대해 계산되기 때문에 편도함수를 잘 계산해야 한다.

3.2.6. A Decoupled View of Vector-Centric Backpropagation

선형 변환과 활성 함수에 대해 역전파를 분리해서 보자. 그러면 합성함수의 미분을 적용하는 것과 똑같다.

3.2.7. Loss Functions on Multiple Output Nodes and Hidden Nodes

은닉 노드와 출력 노드가 여러 개인 경우 오는 노드로부터의 도함수를 다 합해야 한다.

3.2.8. Mini-Batch Stochastic Gradient Descent

학습 표본 하나가 아니라 여러 개를 배치로 묶어서 경사 업데이트를 진행하는 것을 미니배치 추계적 경사 하강법이라 한다. 배치 크기가 1이면 추계적 경사 하강법이 된다.

3.2.9. Backpropgation Tricks for Handling Shared Weights

가중치가 노드들에 공유되어도 달라지는 것은 없다. 각각 경사 변화량을 구한 뒤 업데이트할때 다 더해 주기만 하면 된다.

3.2.10. Checking the Correctness of Gradient Computation

구한 경사가 올바른지 체크하려면 \frac{\partial L}{\partial w} \simeq \frac{L(w + \epsilon) - L(w)}{\epsilon}인지 보이면 된다.

3.3. Setup and Initialization Issues

신경망은 초기화 시에 주의 깊은 고려가 필요하다.

3.3.1. Tuning Hyperparameters

신경망에는 초매개변수가 많다. 이는 학습율, 정규화 계수 등이다. 이는 대개 격자 탐색 등으로 찾을 수도 있지만, 초매개변수마다 무작위로 선택해 조합할 수도 있다. 초매개변수의 가능한 후보는 로그 스케일로 샘플링한다. 초매개변수를 고를 때는 알고리즘을 완전히 돌리지 않고 여러 스레드를 돌린 뒤 성능이 나쁠 것 같으면 중간에 중단한다.

3.3.2. Feature Preprocessing

신경망 학습의 특성 전처리 과정은 다른 기계학습 알고리즘과 크게 다르지 않다. 전처리 방법들은 음이 아니도록 전처리, 평균을 빼서 전처리, (0, 1) 구간으로 표준화 등이 있다.

Whitening

다른 전처리는 백화로, 분산을 1로 만드는 것이다. 주로 이를 위해서는 주성분 분석을 쓴다. 이는 데이터가 각 주성분으로부터 독립적 정규분포로부터 생성된다는 것을 가정한다. 백화를 통해 이 분포들이 표준정규분포임을 가정할 수 있고 특성간 동등한 비중을 매길 수 있다.

3.3.3. Initialization

신경망에서 초기화를 하는 것은 중요하다. 보통 평균 0, 표준편차 \sqrt{\frac{2}{r_{in}+r_{out}}}의 정규분포를 쓴다. 초기값에서 비대칭성을 가지는 것이 중요하다.

3.4. The Vanishing and Exploding Gradient Problems

심층 신경망에서는 학습시 경사의 소멸과 폭발 문제가 존재한다. 어떤 신경망에서는 자코비안의 가장 큰 고유값에 안정성 조건을 줄 수 있으나 항상 만족되는 것은 아니다. 신경망의 다른 부분에서의 매개변수에 대한 편도함수의 크기는 엄청나게 다를 수 있다.

3.4.1. Geometric Understanding of the Effect of Gradient Ratios

극히 예외적인 경우를 제외하고, 최급 경사 방향은 그 시점에만 최적의 방향이고 장기적으로는 최적의 방향이 아니다. 역전파에서 계산되는 합성함수의 도함수는 도함수값들의 곱이므로 작은 변화에 대해 매우 부안정해진다.

3.4.2. A Partial Fix with Activation Function Choice

sigmoid나 tanh 대신 ReLU나 hardtanh를 쓰는 것이 좋다. 경사 소멸 문제도 적고 경사를 구하기도 쉽다. 하지만 뉴런 죽음 문제가 있다.

3.4.3. Dying Neurons and “Brain Damage”

ReLU는 음의 값에서 도함수가 0이기 때문에 뉴런 죽음 문제가 있다. 그래서 누수 ReLU를 쓰기도 한다.

3.4.3.1. Leaky ReLU

누수 ReLU는 음의 값에서 \alpha x, 양의 값에서 x가 되는 함수이다. \alpha \in (0, 1)이다. 누수 ReLU를 쓴다고 항상 결과가 더 좋아지는 것은 아니다.

3.4.3.2. Maxout

가중치를 2개 쓰고 둘 중 최대값을 쓰는 맥스아웃 접근법도 있다. 이는 ReLU보다 성능이 좋지만, 매개변수가 2배가 된다는 것이 유일한 단점이다.

3.5. Gradient-Descent Strategies

신경망에서 매개변수를 학습하는 가장 흔한 방법은 최급 경사법이다. 이의 문제를 해결하는 법을 알아보자.

3.5.1. Learning Rate Decay

학습률은 시간에 따라 조절하는 것이 좋다. 이는 지수적으로 할 수도 있고 역함수적으로 할 수도 있다.

3.5.2. Momentum-Based Learning

모멘텀 기반 경사 하강법에서는 모멘텀 벡터를 둬서 지그재그 효과를 줄이며, \mathbf{v} = \beta \mathbf{v} - \alpha \frac{\partial L}{\partial \mathbf{w}}, \mathbf{w} = \mathbf{w} + \mathbf{v}로 업데이트한다.

3.5.2.1. Nesterov Momentum

네스테로프 모멘텀은 경사가 계산되는 시점을 조금 더 미뤄서 수렴 속도를 증가시킨다. 이는 충분한 배치 사이즈를 적용한 경사 하강법에서만 쓸모가 있다.

3.5.3. Parameter-Specific Learning Rates

모멘텀 방법의 기본 아이디어는 특정 매개변수의 경사 방향의 일관성을 이용해 업데이트의 속도를 가속시키는 것이다. 이는 매개변수마다 학습률을 다르게 하면 더 명시적으로 수행할 수 있다.

3.5.3.1. AdaGrad

AdaGrad에서는 각 편도함수값의 제곱의 합의 루트에 반비례해 학습률을 조절한다. 이는 너무 오래 된 값에 계속 의존하게 된다는 문제가 있다.

3.5.3.2. RMSProp

RMSProp은 AdaGrad와 비슷한 발상을 하지만 지수적인 평균을 매긴다. 하지만 초기값이 0이므로 A_{i}이 추정값이 초기의 반복에 크게 의존한다는 단점이 있다.

3.5.3.3. RMSProp with Nesterov Momentum

RMSProp은 네스테로프 모멘텀과 결합될 수 있다. 하지만 초기값에 대한 편향을 해결해 주지는 못한다.

3.5.3.4. AdaDelta

AdaDelta는 RMSProp과 비슷하지만 전역 학습 매개변수를 학습할 필요가 없다.

3.5.3.5. Adam

Adam은 RMSProp과 두 가지 차이점이 있는데 경사가 모멘텀을 포함하기 위해 지수적으로 다듬질된 값으로 대체된다. 또한, 학습률도 반복 인덱스에 의해 조정된다.

3.5.4. Cliffs and Higher-Order Instability

경사 하강법이 움직이는 매개변수 공간에서 절벽들은 큰 문제가 된다. 이를 해결하기 위해 일차 도함수뿐만 아니라 이차 도함수도 쓸 수 있다.

3.5.5. Gradient Clipping

경사 클리핑은 다른 방향간 편도함수 크기 차이가 클 때 이것을 해결하기 위한 방법이다. 값 기반으로 클리핑될 수도 있고 경사 벡터 크기 기반으로 클리핑할 수도 있다. 이 효과는 제한적이지만 순환 신경망에서 경사 폭발 문제를 해결하는 데에는 효과가 있다.

3.5.6. Second-Order Derivatives

손실 함수의 곡률을 대처하기 위해서는 이계도함수를 쓸 수도 있다. 헤시안의 역행렬을 곱하면 최급 경사 방향을 올바르게 교정하는 효과가 있다. 하지만 헤시안이나 그 역행렬을 직접 계산하는 것은 연산량이 너무 많이 드므로 대안이 필요하다.

3.5.6.1. Conjugate Gradients and Hessian-Free Optimization

켤레 경사법은 이차 손실 함수의 최적해를 도달하는 데 d단계면 충분하다. 이를 변형한 것이 헤시안 없는 최적화이다. 핵심 아이디어는 이동 방향을 다른 것과 연관지어 이전에 했던 작업들이 취소되지 않게 하는 것이다. d차원일 경우 각 방향마다 최적의 방향을 선 탐색으로 찾아 진행하므로 d단계를 거치게 된다. 헤시안을 고유값 분해하면 각 변환된 변수들을 직교하게 할 수 있으므로 독립적으로 최적화시킬 수 있다. 헤시안의 고유벡터를 직접 구하기는 힘들지만, 상호 켤레 벡터들을 이용하면 비슷한 성질을 흉내낼 수 있다. 점에 대해 이차 근사를 수행한 뒤 헤시안과 함께 몇 번에 걸쳐 풀어야 하나? 아니면 매번 헤시안을 바꿔야 하나? 이는 각각 선형 켤레 경사법, 뒤는 비선형 켤레 경사법이라 불린다. 이는 이차 손실 함수에서는 동일하지만 신경망에서는 그렇지 않다. 선형 켤레 경사법이 더 좋은데, 상호 켤레 벡터들의 상호 켤레성은 시간이 지나가면서 흐려지기 때문이다.

3.5.6.2. Quasi-Newton Methods and BFGS

BFGS 법은 뉴턴법의 근사이다. 이는 헤시안의 역행렬을 근사하는 행렬 G_{t}를 이용해 업데이트를 하는데, 이는 매번 저랭크 업데이트된다. 나이브하게 구현하면 메모리 O(d^{2})를 소모하지만 O(d)로도 충분하다.

3.5.6.3. Problems with Second-Order Methods: Saddle Points

이차 방법은 말안장점에 취약하다. 신경망 손실 함수는 말안장점이 꽤 많기 때문에 이차 도함수 방법이 일차 도함수 방법보다 항상 좋은 건 아니다. 이차 도함수 방법은 손실 함수이 복잡한 곡률을 갖거나 절벽이 많을 때에만 쓸모가 있다. 말안장점이 많으면 일차 도함수가 더 낫다. Adam 같은 일차 도함수 알고리즘은 이미 이차 도함수 방법의 이점을 차용한다.

3.5.7. Polyak Averaging

지금껏 매개변수의 모든 가중평균을 매개변수로 삼는 방법도 있다. 이 때 지금까지 계산한 모든 매개변수를 들고 있는 일을 없게 하기 위해 감쇠율과 점화식을 쓴다.

3.5.8. Local and Spurious Minima

국소적 최소값은 사실 큰 문제가 되진 않는다. 신경망에서 국소적 최소값은 대부분 전역 최소값과 별 차이가 나지 않는다. 국소적 최소값은 데이터 수가 적을 때 생성된 국소적 최소값이 전체 분포의 최소값으로 일반화되지 않는다는 점이 문제인 것이다.

3.6. Batch Normalization

배치 표준화는 경사 폭발/증발을 대처하기 위한 방법이다. 신경망을 학습하기 위한 다른 중요한 문제는 내부 공변 변환인데, 배치 표준화는 이를 감소하는 효과가 있다. 이는 활성 함수 이전 값에 적용될 수도 있고 이후 값에 적용될 수도 있다. 이전 값에 적용되려면 선형 변환 한 직후에 적용되어야 한다. 후자가 더 낫다. 배치 표준화는 평균을 빼고 표준편차로 나눈다. 학습 시에는 어떻게 하나? 전체에 대해 평균/표준편차를 구할 수도 있고 지수적 가중평균을 쓸 수도 있다. 추론 시에는 단순한 선형 변환이 된다. 배치 표준화는 정규화의 효과도 있다.

3.7. Practical Tricks for Acceleration and Compression

신경망 구현을 가속시키는 몇 가지 방법이 있다. GPU 가속, 병렬화 구현, 모델 배포 시의 알고리즘 트릭을 이용한 모델 압축.

3.7.1. GPU Acceleration

GPU는 단순 작업 반복과 행렬 곱, 병렬화 등에 강점이 있다. GPU 스레드는 워프라는 작은 단위로 그룹화되어 있고, 이는 각 사이클 내 같은 코드를 공유하므로 스레드의 동시성 실행을 가능케 한다. GPU는 병렬화 정도와 메모리 대역폭이 CPU에 비해 높다. GPU 프로그래밍은 어렵고 네트워크/하드웨어 아키텍쳐에 의존적이기 때문에 NVIDIA는 이를 추상화하는 CUDA를 지원하고 이는 많이 쓰인다.

3.7.2 Parallel and Distributed Implementations

병렬화를 통해 학습을 더 가속시킬 수 있다.

Hyperparameter Parallelism

가장 간단한 방법은 서로 다른 초매개변수 세팅을 서로 다른 프로세서에서 돌리는 것이다.

Model Parallelism

단일 모델이 GPU에 들어가기 힘들 때에는 은닉층을 여러 GPU로 쪼개 병렬화할 수 있다. 이는 아주 큰 망에 대해서만 쓰여야 한다.

Data Parallelism

모델이 GPU에 들어갈만 하지만 학습 데이터의 양이 클 때는 데이터 병렬화를 쓴다. 이 때 경사 업데이트는 비동기로 이루어진다.

Exploiting the Trade-Offs for Hybrid Parallelism

이를 혼합해 병렬화하는 방법도 있다.

3.7.3. Algorithmic Tricks for Model Compression

모바일 환경 등을 위해 모델을 압축하는 알고리즘 트릭도 있다.

Sparsifying Weights in Training

가중치를 희박하게 만드는 방법도 있고 양자화하는 방법이 있다. 양자화가 많이 쓰인다.

Leveraging Redundancies in Weights

신경망의 가중치 중 많은 부분은 불필요하다. 이를 이용해 필요한 부분만 남기는 방법도 있다. 명심해야 할 점은 일단 학습을 한 후에 가중치를 가지치기해야 한다는 점이다.

Hash-Based Compression

해시 기반으로 가중치를 공유시킬 수도 있다. 이러면 모델의 표현력은 떨어지지 않는다.

Leveraging Mimic Models

학습 데이터에서 더 쉬운 학습 데이터를 만들어 이로부터 더 쉬운 모델을 만들 수도 있다. 원래의 교사 모델이 있을 때 라벨되지 않은 데이터를 이로부터 통과시켜 새 학습 데이터를 만들고 학생 모델을 이를 통해 학습시킨다. 이는 불필요한 복잡성을 제거시키면서 성능은 유지시킨다. 정규화 효과로 볼 수도 있다.

3.8. Summary

이 장에서는 심층 신경망을 학습시킬 때의 문제에 대해 알아보았다. 역전파 알고리즘을 상세하게 알아보았고 그 난점들을 알아보았다. 경사 소멸과 폭발 문제들이 소개되었으며 이와 함께 서로 다른 최적화 변수에 대해 손실 함수의 민감성 변화에 대한 난점도 알아보았다. ReLU같이 특정한 형태의 활성 함수는 이 문제에 대해 덜 민감하다. 하지만, ReLU는 학습률을 주의 깊게 조정하지 않으면 뉴런 죽음의 문제도 일으킬 수 있다. 학습을 가속시키기 위해 쓰이는 경사 하강법의 유형은 더 효율적인 실행을 위해 중요하다. 수정된 추계적 경사 하강법은 네스테로프 모멘텀, AdaGrad, AdaDelta, RMSProp, Adam 등을 포함한다. 이 모든 방법들은 경사 기반 학습 과정을 가속시킨다. 절벽을 다루기 위해 이차 최적화 방법도 알아보았다. 구체적으로, 헤시안 없는 최적화는 기반 최적화 문제들의 다수를 다루는 효과적인 방법이다. 학습률을 개선하는 방법 중 하나는 배치 표준화이다. 배치 표준화는 데이터를 레이어별로 변환해 다른 변수간 스케일링이 최적의 방법으로 되도록 보장한다. 배치 표준화의 사용은 서로 다른 심층 신경망 간 매우 흔해졌다. 신경망 알고리즘을 가속시키고 압축시키는 여러 방법들이 제안되었다. 가속은 하드웨어 개선을 통해 이루어지고, 압축은 알고리즘 트릭을 통해 이루어진다.

3.9. Bibliogrpahic Notes

역전파에 대해서는 여러 참조 문헌이 존재한다.

3.9.1. Software Resources

여러 관련 소프트웨어 리소스가 존재한다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중