DL With Tensorflow 4. Regularization

Temmie Chang (포인세티아)·2022년 8월 18일
0

딥러닝이 목표는 일반화 능력입니다.

엄청나게 많은 데이터를 통해서 학습을 진행한 후

고양이와 강아지 사진을 10만개 정도 보고 어떤 것이 고양이인지, 어떤 것이 강아지인지 학습함 (귀가 어떻게 생겼는지, 수염이 어떻게 생겼는지 등등)

새로운 데이터를 제시

한 번도 못 본 새로운 고양이 혹은 강아지 사진을 보여 줌

기존에 학습한 데이터를 토대로 새로운 사진을 분류

이 사진은 고양이 입니다!

그렇지만 이 과정에서 많은 데이터를 학습하게 되고, 이 과정에서 학습데이터는 잘 알아맞추는데, 새로운 데이터는 잘 맞추지 못하는
과적합(overfitting)이라는 문제가 발생하게 됩니다.

정확한 예시는 아니지만, 극단적으로 학습시킨 데이터가 모두 점박이 고양이인 경우 -> 새로운 데이터로 치즈태비 고양이를 보여주는 경우 잘 못맞추게 됩니다.
(다른 변수는 거의 고려하지않고) 점박이 무늬가 있으면 고양이이고 없으면 강아지이다 이런식으로 학습이 진행되는 거죠
다시말해 트레이닝 데이터로 계속 학습하다보면, 트레이닝 데이터만 가지는 특별한 패턴에 대해 학습이 일어나면서, 정상적 학습이 방해되는거죠

Regularization(정칙화)은 이런 과적합을 막는 역할로 컴퓨터가 특정한 feature에 의존한 판단을 내리는 것을 막아주는 역할을 합니다

무늬가 점박이인가에 집착하지 않고, 귀가 뾰족하다, 동공이 세로이다 이런 종합적인 특성을 다 확인해서 고양이/ 강아지를 판단하는 거죠

반면, 한국어로 똑같이 해석되는(일반화) Normalization(정규화)은 통계파트에서 배운대로 각 변수들의 영향력을 통일해주는 역할을 합니다.

사람의 키를 예측하는데 손톱의 길이 0.1cm와 다리의 길이 100cm를 같은 변수로 사용한다면, 수학적으로 손톱의 길이보다 다리의 길이가 1000배 더 큰 영향력을 주겠죠?
때문에 평균 0 분산을 1로 하는 scaling을 통해 모든 변수의 영향력을 통일시켜 주는 과정이 Normalization입니다.

다시 정리하자면 Regularization은 컴퓨터가 과도한 일반화를 하게 되는 것을 ‘방해’해서 적당한 일반화 능력을 가지도록 돕습니다.

이과정에서 L1, L2, Dropout, Batch Normalization과 같은 방식을 사용하는데요

수학적인 개념을 설명하자면 복잡하고 이해하기 힘드니 최대한 예시를 들어 설명 드릴께요

사진을 보고 '고양이와 강아지를 분류’하는 문제를 다시 생각해볼께요

아마도 사람은 털의 색깔, 털이 얼마나 긴지, 귀의 크기, 코의 색깔, 수염의 모양 등을 통해서 쉽게 고양이나 강아지를 분류할 겁니다.
하지만 딥러닝은 정말 많은 종류의 특성들을 뽑아내고 그 값을 통해 고양이/강아지를 분류합니다.
쉽게 설명하자면, 단순 털1번의 색깔, 털2번의 색깔……. 털 2000번의 색깔을 모두 특성으로 확인해서
모든 털의 색깔을 확인해서 고양이인지 강아지인지 구별을 하고자 할꺼에요.

이 과정에서 정규화가 사용됩니다.
373번 털이 특이한 고양이가 '고양이가 아니다'로 학습되는 걸 막는거죠

L1 정규화의 경우 정리하면 이렇게 생각하시면 편해요

털1번색만 보면 어차피 모든 털 색깔이 거의 유사하기 때문에 털 1번색에 1의 가중치를 주고, 나머지 털 색에 0의 가중치를 주는 방식으로 feature들을 정리합니다.

이로부터 특정 색이 좀 특이하더라도 고양이로 판단할 수 있는 일반화 능력을 얻게 됩니다. (차원도 모든 털들의 색깔 -> 하나의 털 색으로 줄게 되구요)

L2 정규화의 경우,

털1번색, 털2번색, 털3번색에 모두 동일한 가중치를 부여해서 평균적인 털 색깔로 feature를 정리합니다

강아지가 가지는 평균적인 털색깔과 고양이가 가지는 평균적인 털색깔을 학습한다고 생각하면 되겠죠?

좀 더 심화하자면 L1은 단순한 모델(가중치가 낮은 변수들을 배제하므로)
혹은 각 feature간의 연관성이 큰 경우 사용하고
L2는 이상치가 많거나 노이즈가 많은 데이터를 사용할 때 사용합니다.

Dropout은 일부러 파라미터의 일부분을 버리는 방식입니다.

사람은 꼬리만 보고도 얘가 고양이인지 강아지인지 알 수 있잖아요.
일부러 고양이와 강아지 사진에서 얼굴을 없애버리고 학습을 시키다보면 컴퓨터도 꼬리만 보고도 고양이인지 강아지인지 구별할 수 있게됩니다.

실제로는 데이터를 삭제하는 것은 아니고 가중치들을 일부러 버리는 개념입니다.
(데이터를 삭제하는 것은 Data Augmentation이라고 나중에 보게 되실꺼에요)

비약들이 좀 있지만 쉽게 예시를 들자면 이런 느낌입니다.

Batch Normalization은

많은 데이터를 학습할 때, 모든 데이터를 토대로 기울기를 업데이트하는 것은
너무 비효율적이라, batch 단위로 나누어서 학습을 진행하게 되는데,

이 배치마다 출력값을 평균이 0 분산 1을 가지도록 (Min-Max Scaling) 조정해주어, 기울기가 발산하거나, 사라지는 문제를 방지해줍니다.

이 과정에서, 마찬가지로 특정한 가중치가 학습하는 과정에서 너무 높아지거나 0이되는 상황을 방지해주는 Regularization 효과도 가지며, 성능 향상에 여러모로 도움이 된다. 이 정도로만 이해하고 넘어가셔도 괜찮습니다.

0개의 댓글