본문 바로가기

Machine Learning/Math

Regularization (Weight Decay)

Tensorflow KR이나, 여러 논문에서 Regularization 혹은 weight decay기법이 자주 언급됩니다. 


Regularization은 Normalization이나 Generalization과 함께 한국어로 직역하면 뭔가 이름부터 헷갈리고, 혼동이 오더라구요. 이 글에서는 Regularization 개념을 확실하게 정립하기위해 Ian Goodfellow의 Deep Learning 5.2.2절 Regularization과 1992년도에 나온  'A Simple Weight Decay Can Improve Generalization' 논문을 참고하여 공부한 내용을 정리해보았습니다. 



Regularization은 Deep Learning 책에서 'Regularization is any modification we make to a learning algorithm that is intended to reduce its generalization error but not its training error' 학습에서 발생하는 에러말고, 평가를 위한 테스트상에서 발생하는 에러(generalization error)를 줄이기 위하여 학습 알고리즘을 수정하는 기법으로 표현하고 있습니다. 


제가 위에서 Regularization공부를 위해 참고한 논문이 A Simple Weight Decay Can Improve Generalization 이라고 말씀드렸는데요, 

Weight Decay는 Regularization의 가장 대표적인 기법이기 때문에, Regularization은 Generalization을 개선하기 위한 기법임을 논문 제목에서부터 유추해낼 수 있네요. 

그렇다면 Generalization에 ML 알고리즘들이 문제를 겪고 있다 라는 것으로 이어지겠죠. ML 알고리즘들이 Generalization하는데에 어떤 것때문에 어떤 문제가 생기는가 부터 살펴보겠습니다. 


ML 알고리즘은 만능이 아닙니다. 모든 데이터셋들과 모든 Task에 최적화된 ML 알고리즘을 찾는 것은 불가능합니다. 따라서 Deep Learning 책의 No Free Lunch Theorem에서는 'ML 알고리즘의 목표는 최고의 학습 알고리즘을 찾는 것이 아니라, 실세계에서 우리가 마주하는 각각 종류의 데이터에 어떤 ML 알고리즘들이 좋은 퍼포먼스를 보이는지와 AI agent가 경험하는 실세계와 연관된 종류의 분포들을 이해하는 것' 이라고 말하고 있습니다. 


이를 위해서 우리는 train을 위한 데이터를 마련하여 ML 알고리즘을 학습시키고,  train에 사용되지 않은 데이터를 활용하여 평가를 합니다. 학습에 사용되지 않은 데이터를 활용하여 평가를 하는 것을 test한다고 하고, 이를 Generalization 이라고 표현을 합니다. 


train에 사용된 데이터와 test에 사용된 데이터는 서로 교점이 되는 데이터들이 없기 때문에, test를 Generalization이라고 하고 test error를 generalization error라고 표현하는 것입니다.


ML이 train 데이터에 너무 완벽하게 맞춰짐으로써 training error가 0이 되었을때, 이때 Overfit 되었다고 말합니다. 

Overfit은 모델이 상당히 복잡하게 구성되어있는데, 학습데이터를 표현하는 정보가 적을때 즉 학습데이터가 단순할 때 발생합니다. 


이와 반대 현상은 Underfit이라고 하는데, 모델은 단순하고, 학습데이터를 표현하는 정보가 너무 많을때 단순한 모델이 많은 정보들을 학습할 수가 없어서 Underfit이 되는 것입니다. 


이렇게 모델의 Complexity와 데이터를 표현하는 정보의 규모가 서로 매칭되지 않을때 Underfit, Overfit이 일어나는 것을 Bad generalization이라고 논문에서 표현하고 있습니다. 


그러면 이제 Complexity가 높은데 단순한 데이터로 인해 Overfitting이 발생하는 상황으로 weight decay에 대해서 설명드리겠습니다.


데이터가 단순하고 모델이 복잡하면, 학습을 하면서 굉장히 작은 값이었던 weight들의 값이 점점 증가하게 되면서 Overfitting이 발생하게 됩니다. weight값이 커지게될 수록 학습데이터에 영향을 많이 받게 되고, 학습데이터에 딱 모델이 맞춰지게 되는 것이죠. 이를 'local noise의 영향을 크게 받아서, outlier들에 모델이 맞춰지는 현상' 이라고 표현합니다.


따라서, hyperparameter(논문에서는 free parameter라고 표현)의 개수를 minimize 하고 알고리즘을 개발하여 학습 에러를 작게 유지하면서, hyperparameter개수의 감소로 모델의 복잡성을 감소시켰는데, 이러한 방법이 좋지않다고 논문에서 기술하고 있네요. 제 생각에는 대량의 데이터를 활용해서 ML 알고리즘을 학습시켜야하는 경우가 많은데 이때, 단순한 모델은 underfit되어버릴 가능성이 많아서 그런것이 아닌가 합니다. 


어쨋든 문제를 개선하기 위해서 논문에서 weight decay 기법을 제안합니다. 


weight decay는 weight들의 값이 증가하는 것을 제한함으로써, 모델의 복잡도를 감소시킴으로써 제한하는 기법, 즉 weight를 decay(부식시킨다라는 의미를 조금 감량시키는 의미로 생각하면 될 것 같습니다.)시켜서 Overfitting을 방지하는 기법으로 소개됩니다. 


weight decay기법은 다음과 같은 식으로 표현됩니다.


수식을 통해 다시한번 weight decay를 설명드리면, 기존의 cost function(위 수식의 E0가 되겠죠)에 항을 추가하여 큰 값을 가지는 weight들에 대해 페널티를 부여하여, weight들의 값이 필요이상으로 커지는 것을 방지하는 것입니다. 앞에 1/2가 붙는 이유는 미분하면서 2가 내려오기 때문에 그 값을 제거하여 계수를  regularization parameter인 람다   만 남겨두려고 한것 같은데, 사실 이 계수는 어떤 분은 1/2(논문의 경우)를 사용하고 어떤 분은 아예 사용하지 않고(deep learning책의 경우 아예 붙이지를 않았음), 스탠포드 강의에서는 1/N으로 표현합니다. 실험적으로 알아내어야 하는 값이기 때문에 첫 설계를 1/2로 하던, 1/N으로 하던, 아예 붙이지 않던 상관이 없는것 같습니다.


다시 수식으로 돌아와서, 우리는 설계를 컴퓨터가 이해할 수 있도록 해야하니까 W를 행렬로 표현하여 식을 다시 적어보겠습니다.


   

Deep Learning 교재에서는 더해준 항을 regularizer라고 지칭합니다. 이 regularizer는 위 수식에 더해준 항 말고도 다양한 다른 방법들이 있으며, 궁금하시다면 Deep Learning 교재 chapter 7을 살펴보시면 되고, 추후에 블로깅하도록 하겠습니다.


그런데 cost function에 값을 더해주는게 왜 가중치값의 증가에 패널티를 주는 것이고, 가중치의 증가를 억제하는 것일까요?


그 이유는 학습이 Gradient descent(기울기 강하)를 기반으로 이루어지기 때문입니다. 


다시 정리하자면, weight의 l2 norm은 가중치 파라메터의 크기(거리)를 의미하기 때문에, 에러 값 에 현재 가중치 크기의 일정 비율을 추가로 반영시킴으로써

갱신이 이루어질때, 현 시점의 가중치를 일정비율로 깎아내린 다음에 오차에서 계산된 기울기를 갱신을 해주는 것이라고 생각하시면 됩니다. 


Gradient descent는 현재 weight를 통해 구한 error의 기울기에 learning rate  : 만큼 곱한 값을 현재 weight에서 뺌으로써 weight값을 update하는 알고리즘입니다.  식으로 표현하면 다음과 같습니다.



이식 E(W)를 위에서 정리한 식으로 치환하면,



가 되고, 이 식을 통해서 기존의 weight를 일정 비율로 감소시킨다음 에러값의 미분한 값을 차감해주기 때문에, weight가 급격하게 증가하는 것을 막을 수 있습니다. 


이 weight decay에서 우리가 모델 학습시 설정해주어야 할 요소가 있는데 바로 lambda 값입니다. 학습을 고려할때 learning rate에 따라서 local minima에 빠질 수도 있고, global minima에 도달할 수도 있고 혹은 minima에 도달하지 못하고 주변만 맴돌 수도 있듯이, lambda를 어떤 값으로 설정해주냐에 따라서 ML 알고리즘이 Overfitting, Underfitting이 되거나 적절하게 fitting 될 수 있습니다.


아래 사진은 Deep Learning 책에서 표현한 lambda값에 따른 다중회귀 결과입니다.




Lambda는 hyperparameter이기 때문에, 선험적인 지식으로 적절하게 설정한 후, 실험결과를 파악하며 조절해주시면 됩니다. 


혹시 잘못된 부분이 있다면 피드백 주시면 감사하겠습니다. 



'Machine Learning > Math' 카테고리의 다른 글

Regularization (Random Erasing Data Augmentation)  (0) 2018.04.18
Linear Regression  (0) 2018.04.05