Q. 학습을 잘 시키기 위해서 왜 Regularization이 필요한가요?

Q. 학습을 잘 시킨다는 것은 무엇을 의미하나요?



안녕하세요~ 이번에는 Deep Neural Network (DNN)을 학습 시키기 위해서 사용되는 regularization(규제화) 기법에 대해서 알아볼께요.


위키백과에서는 Regularization에 대한 개념정의를 아래와 같이 해놓았어요.


"Regularization is the process of adding information in order to solve an ill-posed problem or to prevent overfitting."


위의 정의를 알아보기 위해서 overfitting이라는 개념부터 알아보도록 할께요. 


아래 두 그림 처럼 O,X를 구분하는 DNN을 학습시킨다고 해볼께요. 두 그림 중 어느 DNN 모델이 더 학습을 잘 한것 같나요? 물론 대다수 분들이 오른쪽이라고 할 거에요. 왜냐하면 완벽히 O,X를 구분했으니까요. 그런데 딥러닝에서는 일반적으로 왼쪽 그림과 같은 경우가 학습이 잘 됐다고 하는 경우가 많아요. 왜일까요?


<사진1>



위와같이 왼쪽 그림이 더 학습이 잘됐다고 판단을 하는 이유는 크게 두 가지에요. 


첫 번째는 "우리가 학습하는 데이터에는 잘 못된 학습데이터들도 있을 것이다"라는 점이에요. 만약에 outlier 또는 noise(or 불순물)가 섞인 데이터가 포함되어 있다고 생각해봅시다. 위 그림을 예를들어보면 O에 깊숙히 침투해 있는 두 개의 X는 사실 불순물이 섞였을 가능성도 있는거에요. 이런 좋지 않은 데이터로 학습하면 학습결과가 좋지는 않겠죠?


두 번째는 "DNN 모델이 학습데이터에만 지나치게 편중하여 학습시키는 것이 좋지 않을 것이다"라는 점이에요. 예를 들어, 가위를 구별하려는 DNN 모델을 만든다고 가정해볼께요. 아래 가위를 학습데이터로 이용한다고 합시다. 아래 가위의 특징은 톱니모양, 검은색 및 동그란 손잡이 등등이 있겠네요. 


   

<사진2>



자 이제 학습된 DNN 모델로 아래 사진들의 가위들이 가위인지 아닌지 구별해보려고 합니다. 자! 그럼 실행시켜볼께요~ 엥? 위에 학습된 DNN 모델이 아래 그림들에 있는 사물들이 가위가 아니라고 결론을 지었네요.. 왜일까요? 

 


<사진3>


사람들은 대부분 위의 사물들이 가위라고 결론을 내리지만 학습된 DNN은 그렇지 않았어요. 그 이유는 학습된 DNN 모델이 지나치게 "사진2"에 있는 가위의 특징을 학습했기 때문이에요. 그러니까 "사진3"에 있는 사진들은 톱니모양도 없고, 손잡이도 검은색이 아닌경우도 있기 때문에 "가위"가 아니라고 결론을 내린거에요. 즉, '사진2'라는 데이터에 DNN 모델이 너무 편중되게 학습을 한 것인데 이러한 현상을 우리는 DNN모델이 학습 데이터에 overfitting 되었다라고 표현해요. 


DNN 입장에서 엄밀히 말하자면 "내가 학습했던 이미지에서의 가위랑은 달라!"가 되겠네요. 그래서 우리는 DNN이 학습시 주어지는 학습데이터에만 너무 치중(specific)하지 않도록 하여 일반적(general)으로 판단할 수 있게 해주는 "일반화(Generalization)"성능을 향상 시키는것이 학습시 더 중요하다고 판단을 내린거에요. 즉, overfitting을 피한다는 것은 DNN의 일반화성능을 높인다는 말과 일맥상통해요.



그렇다면 이러한 일반화 성능을 향상시키는 방법에는 무엇이 있을까요? 


다시 아래그림을 살펴볼께요. 오른쪽 그림은 학습데이터에 지나치게 편중된 모델이에요. 지나치게 편중되었다는 것은 DNN 입장에서 가중치값들이 지나치게 학습데이터에 편중되어 있다는 뜻과 같은 말이에요. 왜냐하면 DNN에서는 입력(학습데이터)는 항상 고정값이고 (이미지를 학습한다고 생각해보세요. 입력이미지값은 변하지 않아요!), 가중치를 업데이트해서 무엇가를 분류하기 때문이에요.

<사진4>


그렇다면 가중치가 업데이트 될 때, 학습데이터에 편중되지 않도록 해주면 되지 않을까요? 

이러한 물음에서나온 방법이 Regularization이에요! 좀더 풀이하자면 업데이트되는 가중치에 규제를 가해야 한다는 뜻이에요. 그럼 지금부터 Regularization의 종류들에 대해서 알아보도록 할께요


Regularization의 대표적인 종류는 L1, L2 regularization입니다. 우선 L1, L2를 나누는 이유는 regularization을 적용할 때 쓰이는 norm 때문이에요. 우선 L1 norm과 L2 norm에 대해서 짧게 설명드릴께요. 




<1.Norm>


Norm이란 벡터의 크기를 의미해요. 벡터의 정의와 크기를 구하는 공식은 아래의 영상을 보시면 될거에요. (첫번째 영상은 벡터의 정의를 다루었고, 두 번째 강의에서 크기가 언급될거에요)









요약하자면 하나의 벡터가 2차원이면 x=(x1, x2)라고 표현되고, 3차원이면 x=(x1,x2,x3)라고 표현될거에요. 그리고 영상에서 소개한 크기 공식을 일반화하면아래와 같이 표현할 수 있을거에요.



또한 norm과 관련된 식은 아래와 같이 나타나요. (L1 norm은 p=1만 대입해주면 L1 norm 식이되요)


그렇다면 본격적으로 L1, L2 regularization에 대해서 알아볼까요? 우선 L2 norm에 대해서 알아보고 L1 norm과 L2 norm을 비교하는 방향으로 알아볼거에요.



<2. L2 regularization (Ridge regression)>



아래수식은 2장에서 설명드린 가중치를 업데이트 하는 수식이에요. 



우리는 가중치가 크게 업데이트가 될 경우 이를 규제(억제)시키려고 해요. 그렇다면 위의 수식을 어떻게 변경시켜주면 될까요? 먼저 아래식들을 볼께요.


1번 수식은 MSE cost function이에요. 1/2이 MSE 수식앞에 붙은건 미분을 거친 후 계산을 편하기 하기 위해서에요 (미분을하면 제곱이 1/2과 곱해져서 1이 되겠죠?). 그리고 2번 수식을 잘 살펴볼 필요가 있어요. Regularization을 위해서 새로운 cost function을 만들어줬는데 식을 자세히 보내 (λ/2)||w||^2 를 더해주었네요? 더해진 식이 의미하는 바가 무었일까요? 


더해진식을 자세히 보면  λ X L2 norm이라는 것을 볼 수 있어요.  (1/2)이 곱해진 이유는 gradient descent로 학습시 적용되는 미분계산 이후의 과정을 편하게 하기 위함이고, 람다(λ)가 곱해진 이유는 regularization의 정도를 결정하기 위함이에요(보통0~1사이로 조절한다고해요). 중요한건 왜 L2 norm이 적용됐냐는 부분이에요.


큰 가중치값이 overfitting에 영향을 미치기 때문에, 그 벌(페널티)로써 큰 가중치 값이 업데이트 될 때에는 업데이트를 더 급격하게해주려는 의도에요. 예를 들어, 가중치값이 0.1 인 경우(w=0.1)와 3인 경우 (w=3)에는 w=3일 때 더 큰 값이 이전 가중치 값인 w(t)에 더 큰 변화를 줄 거에요 (즉, w(t+1)값과 w(t)값의 변화가 클거라는 말이에요). 다시말하자면, L2 norm이 적용돼었다는건 큰 가중치값을 가질수록 학습시 더 큰 페널티를 주겠다는거에요. 


그런데 왜 큰 가중치값이 overfitting에 영향을 미친다고 판단한걸까요? 우선 L2 norm에서는 항상 결과값이 음이아닌 정수이기 때문에 0에 가까운 값이 작은 값이 되고, 0에서 멀어질 수록 큰 값이됩니다. 이러한 개념이 weight에 적용되기 때문에 가중치값이 작다는 말은 바꿔말해 0에 수렴하는 것이라고 말할 수 있겠네요. 


앞서 신경망이 계산되는 원리를 설명드렸죠? Wx->activation->Wx-> .... ->Wx

결국 DNN 모델은 거대한 Wx 함수의 연속이라고 추상화시킬 수 있는데요. 만약에 Wx^2+Wx+1 이런식으로 표현된다고 했을 때, coefficient 값에 해당하는 W값이 커지게되면 그래프모양이 굉장히 sharp하게 그려질거에요 (sharp하다는 표현이 조금 애매하긴한데, noise가 섞인 데이터조차 표현하다보면 그래프가 완만해지기 보다는 sharp해지는 경우가 흔하기 때문에 이렇게 표현했어요).


<사진5>


또 다른 측면에서 보면 입력값에 해당하는 X의 차원이 높으면 높을 수록 overfitting이 일어나는 경우가 있어요. 그래서 X입력값과 결합되는 가중치 W의 값이 0에 가까울 수록 X입력값의 차원이 줄어드는 것 처럼 보일 수도 있겠네요. (이부분은 이해가 안되시면 넘어가도 좋아요. 추후에 Curse of Dimension (차원의 저주) 라는 개념에 대해서 다시 설명하도록할께요)


아무튼 결론적으로 요약하자면 가중치 값이 크면 overfitting을 일으킬 확률이 크다고 보기 때문에, 큰 가중치에 대해서는 L2 norm이라는 식을 적용하여 가중치 업데이트시 페널티를 주고 있어요. 그리고 이러한 행위를 Weight decay (regularization) 라고 부르기도 해요.


하지만 필자는 이런의문이 들어요. "정말 큰 가중치가 overfitting을 일으킬까? 학습데이터에 따라서 큰 가중치값이 더 좋을 수 있지 않을까? 오히려 overfitting을 일어나다는 것은 오차값(E=d-y(x;w))이 적다는 뜻이므로 오차값을 크게 만드는데 관여하는 w에 대해서 페널티를 주는식을 만드는것이 더 효율적이진 않을까?"


물론 딥러닝이라는것이 기계학습의 일부로 확률적 모델을 기반으로 하기 때문에 어떤 개념을 명확하게 설명하는게 힘들긴 하겠지만, 위와 같은 질문을 통해 regularization을 적용할 시 L2 norm이 아닌 다른 방식을 써보는건 어떨까라는 생각을 해봤어요.  




<3. L1, L2 regularization 비교>


L1 regularization (Lasso regression)은 따로 설명을 하진 않았지만 L2 regularization을 보셨다면 쉽게 이해 되실거에요. 앞선 "<1.Norm> 파트에 언급된 수식에 p=1만 집어 넣고, L2 regularization 수식에 적용된 L2 norm 부분은 L1 norm으로 바꿔주기만 하면되요.



L1 reguralization은 L1 norm을 적용하기 때문에 가중치 크기에 상관없이 일정한 상수값으로 매번 페널티를 부여받아요. 가중치의 부호에 따라 +λ or -λ 의 상수값이 되겠네요.


그렇다면 이렇게 가중치와 상관없이 '일정한 상수값'이 페널티로 부여되면 어떤일이 발생할까요?


  VS 



결과론적으로 말씀드리자면 상수값 때문에 L2보다는 L1에서 낮은 가중치값에 해당하는 coefficient가 0이 될 확률이 높다고 설명해놨습니다. 사실 이부분이 이해가 잘 안되서 외국분들에게 질문했는데요. 답변해주신 내용을 통해 아래와 같은 해석을 할 수 있었습니다.


가중치 값이 낮은 경우 L1 norm이 더 0으로 빠르게 수렴하게 영향을 미치는지 살펴볼께요. 먼저, 낮은 가중치(0~0.01)가 있다고 가정해봅시다. L1 norm, L2 norm 둘다 가중치를 업데이트하는데 영향을 미칠거에요. 그러다보면 값이 0.01 값보다 점점 더 작아질거에요 (물론 람다(0~1)의 부호에 따라서 설명이 달라지겠지만 여기서는 가중치가 양의 값을 갖는 0~1사이에 값이라고 가정할께요. 이에 따라 업데이트 되는 가중치의 변화는 0.1->... ->0.001 이런흐름으로 작아질거에요. 하지만 지속적으로 업데이트 하다보면 가중치 w는 0에 가까운 값을 갖게되고 그렇게 되면 L2 regularization에서 사용되는 미분된 L2 norm은 아래수식과 같이 0에 수렴하게될거에요. 



요약하자면, L2 regularization에서는 학습을 하다 결국 w가 0에 가까운 값을 갖게되는 시점부터는 가중치 업데이트할때 E(x)만 관여하게 되는거에요 (위의 수식참고). 결국 어느 순간부터는 수식이 아래와 같이 바뀌겠네요. 이렇게 보면 L1이 regularization에 좀더 공격적이라고 표현할 수 있겠어요. (그런데 이 설명이 완벽하진 않아요. 왜냐하면 작은 가중치에 대한 εΔE(w) 값이 가지는 범위에 따라서 해석이 달라질 수 있거든요. 그래서 가끔 느끼는거지만 딥러닝을 설명하는데 있어서 명확하게 설명되는 부분이 종종 있다고 느껴져요. 그냥 확률적으로 그렇다고 설명하고 넘어가는 부분들이 종종있어서..) 


  VS 


아무튼 중요한 점은 가중치값이 작아질 수록 0에 수렴하게 하는 regularization 기법에는 L1이 더 적극적일 확률이 높다는거에요!

(아래링크는 제가 질문하고 답변을 받은 내용들이에요)

https://datascience.stackexchange.com/questions/65828/how-does-l1-regularization-make-low-value-features-more-zero-than-l2



그렇다면 이제 위의 개념을 기반으로 다른설명들을 해볼께요. 


먼저, 아래식을 먼저 볼께요. 위에서 설명한대로라면 x2, x4, x5 앞에 붙은 가중치 값들이 0이 될 확률이 높아요! 그렇게 된다면, x1, x3, x6 만으로도 충분히 Deep Neural Network를 나타내는 식을 만들어 낼 수 있어요. 즉, 입력차원을 줄일 수 있어서 모델의 complexity를 줄여준다는 건데, 이렇게 입력차원을 낮아주게 만들어 나타나는 효과는 다음장 curse of dimension에서 다룰거에요.



다시설명하자면, 가중치값이 굉장히 낮은 부분은 0에 수렴한다고 보기 때문에 오히려 없애주어 얻는 효과가 DNN 성능향상에 미치는 영향이 크다고 보는 거에요.


아래 그림은 실제 regularization식을 적용해보고 학습을 시켜본 결과입니다. 329번 학습을 시켰을 때, 학습이전 낮은 값을 갖고 있던 가중치값들이 중 몇몇이 L2보다 L1 regularization에서 더 많은 zero값을 갖게 된 것을 볼 수 있죠?


     

<사진6>


또하나 주의할 점은 L1 regularization에 적용되는 L1 norm은 절대값이 포함되어있기 때문에 미분이 안되는지점이 발생할 수 있다는 점입니다.  


<사진7>



(간혹 딥러닝 공부하시다보면 smooth L1 norm이라는 개념이 튀어나오는데, 이 개념은 보통 loss function에서 많이 다루어요. 추후에 Convolutional Neural Network (CNN)이라는 개념을 다룰 건데 여기서 smooth L1 loss를 사용해요~ 물론 다른곳에서도 많이 사용하겠지만요;;ㅎㅎ 한가지 힌트를 드리자면 당연히 n1 norm의 단점이라고 할 수 있는 학습 시 미분불가능한 부분을 개선했겠죠?? )



지금까지 내용을 요약하자면 아래와 같아요.

1. 가중치가 큰 값은 overfitting을 일으킬 요인이 크기 때문에 학습시 페널티를 주어야한다는 관점에서 나온것이 weight decay regularization이에요. 

2. Weight decay regularization 종류에는 L1-regularization, L2-regularization이 있어요. 

3. 가중치가 큰 정도를 판단하기 위해 가중치를 하나의 벡터라고 가정했고, 그 벡터의 크기를 가중치의 크기로 보고자 L1-norm, L2-norm이라는 개념을 도입해 L1-regularization, L2-regularization을 고안해냈습니다.

4. L1-regularization은 L2-regularization 보다 낮은 가중치 값을 0으로 만들어줘 입력차원을 줄여주는 경향이 있고, 이것은 입력차원을 낮춰주는 효과가 있어요.

5. 보통은 weight decay regularization에서는 L2-regularization이 사용되고 있어요.  




이번장에서는 overfitting을 이유로 들어 왜 regularization이 DNN을 학습시킬 때 필요한지 알아보았어요. 하지만 조금 깔끔하지 못했던 것이 중간에 'curse of dimension', '입력차원'이라는 용어를 설명없이 기술해놓았기 때문이에요. 그래서 다음장에는 curse of dimension이라는 개념을 설명해보려고합니다!




[사진 래퍼런스]

사진1, 사진4

https://www.youtube.com/watch?v=dBLZg-RqoLg

사진2

https://ko.wikipedia.org/wiki/%EA%B0%80%EC%9C%84

사진3

https://m.blog.naver.com/PostView.nhn?blogId=kkss0234&logNo=220141976191&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진6

https://developers.google.com/machine-learning/crash-course/regularization-for-sparsity/l1-regularization?hl=ko

사진7

https://donaldaq.github.io/articles/2018-09/Art-of-ML

+ Recent posts