[13] Deep Learning - Gradient clipping
Gradient clipping
Gradient clipping 이란 , 경사 폭주 문제를 해결하는 한 가지 방법이다. Gradient clipping은 Backpropagation 과정에서 경사값이 특정 임계값을 넘으면 그 이상의 경사 값을 잘라내는 것을 의미한다. 대부분의 Network 구조에서는 배치 정규화 만을 사용해도 충분하지만 , Network의 구조에 따라 배치 정규화를 사용하기 어려운 경우들이 존재한다. 그런 경우 Gradient clipping을 통해 경사 폭주 문제를 해결할 수 있다.
[12] Deep Learning - Batch normalization
keras에서 Gradient clipping을 구현하는 방법은 다음과 같다.
#keras에서 Gradient clipping 사용하기
optimizer = keras.optimizers.SGD(clipvalue=1.0)
model.compile(loss="mse", optimizer=optimizer)
위처럼 optimizer 객체를 만들 때 , 안에 clipvalue 혹은 clipnorm을 통해서 Gradient clipping을 구현할 수 있다. 만약 clipnorm과 clipvalue가 함께 사용되었다면 , clipnorm이 먼저 적용된다. 위의 코드의 경우 clipvalue를 사용했고 값이 1.0 이므로 경사 벡터의 모든 원소를 -1.0 ~ 1.0으로 잘라낸다. 하지만 위와 같이 value를 사용하는 방식으로는 벡터의 방향을 바꿀 수 있다.
예를 들어 [0.1 , 100] 벡터의 방향은 100 쪽에 치우치게 표현될 것이다. [0.1 , 100] 벡터를 위의 코드처럼 Gradient clipping 한다면 [0.1 , 1] 벡터가 될 것이다. 이는 당연하게도 Gradient clipping 이전의 방향과 완전히 다른 방향일 것이다. 이처럼 clipvalue를 통해 경사를 깎아낸다면 벡터의 방향이 변할 수 있다. 이를 막으려면 clipnorm을 사용해 norm 기준으로 Gradient clipping을 진행해야 한다.
clipnorm의 경우 , 예를 들어 [0.1 , 100] 벡터를 clipnorm = 1.0 으로 Gradient clipping 한다면 , 방향은 유지한채 norm이 1이 되도록 경사를 깎는다. 따라서 0.1과 100 모두 값이 깎여 나갈 것이다. 여기서 이야기하는 norm은 유클리드 길이 즉 , L2norm을 의미하고 , 벡터의 길이가 1이 되도록 벡터 값을 변경하는 것을 의미한다. 즉 방향은 유지한채 벡터의 길이가 clipnorm 값이 되도록 Gradient clipping 하는 것이다.
ref. "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition"
'코딩 > 데이터 분석 이론 & 응용' 카테고리의 다른 글
[15] Deep Learning - Optimizer (0) | 2022.01.24 |
---|---|
[14] Deep Learning - Transfer Learning & Pre-training (0) | 2022.01.23 |
[12] Deep Learning - Batch normalization (0) | 2022.01.19 |
[11] Deep Learning - Initialization & Activation function (0) | 2022.01.18 |
[10] Deep Learning - Hyper Parameter Tuning (0) | 2022.01.17 |