[Andrew Ng 교수님의 머신러닝 전략 시리즈]
2022.01.23 - [데이터과학] - [머신러닝] 프로젝트 전략 (1): Orthogonalization
2022.01.24 - [데이터과학] - [머신러닝] 프로젝트 전략 (2): Evaluation Metric
2022.02.09 - [데이터과학] - [머신러닝] 프로젝트 전략 (3): Train / Dev / Test set
본 포스팅은 Coursera에 있는 Deep Learning Specialization 강의 중 세번째 섹션인 Structuring Machine Learning Projects의 내용을 정리한 글이다. 해당 섹션은 스탠포드 대학교의 교수이자 중국 바이두의 부사장인 앤드류 응(Andrew Ng) 교수님의 딥러닝 프로젝트 노하우를 담고 있는 중요한 강의라 꼭 블로그로 정리해보고 싶었다. 교수님은 어떻게하면 딥러닝 모델을 효율적으로 최적화할 수 있는지 다양한 방법을 알려주신다. 하나씩 정리하도록 하겠다!
Orthogonalization (직교화)
딥러닝 모델을 최적화하기 위해 튜닝해야 할 하이퍼파라미터의 조합은 무수히 많을 수 있다. 레이어의 수, 학습률(Learning Rate), 정규화 파라미터, Dropout 비율 등! 모든 가능한 조합을 다 시도해면 제일 좋겠지만 이는 현실적으로 불가능하다. 한 번 학습하는데만도 수십 시간, 며칠 혹은 그 이상이 걸릴 수도 있는 모델도 많이 있기 때문이다. 그렇다면 어쩔 수 없이 우리는 일부의 하이퍼파라미터 조합만 가지고 실험해야 할 것이다. 이 때 여러 하이퍼파라미터를 한번에 조정하여 테스트 하는것은 좋지 않다. 왜냐하면 여러개를 동시에 조정했을 경우 어떤 하이퍼파라미터가 결과에 어떻게 작용했는지 알기 어렵기 때문이다! 따라서, 앤드류 교수님은 효율적으로 모델을 튜닝을 하려면 명확한 하나의 효과를 얻기 위해 특정 하나의 파라미터를 튜닝해야 한다고 한다. 그리고 이러한 절차를 Orthogonalization(직교화)라고 부른다. 무슨 말인지 이해하기 어렵다. 예시를 보자.
TV 화면을 조정해보자
예를 들어, 오래된 TV의 화면을 조정한다고 생각해보자. 5가지의 손잡이가 있어서 아래 그림처럼 5가지의 서로 다른 부분을 조정할 수 있다. 일반적으로 우리는 가장 위에 있는 너비를 먼저 조정하고, 그 다음에 높이를 조정하고, 그 다음에 사다리꼴.. 좌우 조정.. 회전 등 하나씩 차례대로 조정할 것이다.
그런데 만약 이 다섯 가지를 한번에 조정하는 손잡이가 있다고 하자. 이 마법의 손잡이는 한번 돌리면 동시에 너비를 0.1, 높이를 0.3, 사다리꼴을 -1.7, 좌우를 0.8, 회전을 오른쪽으로 1도 돌릴 수 있다. 우리가 이 손잡이를 가지고 화면을 조정한다고 하면 과연 얼마나 잘 튜닝할 수 있을까? 너비와 높이만 조금 조정하면 되는데 원하지 않게 좌우와 회전까지 되어 최적의 결과에 도달하지 못할수도 있다. 이처럼 한번에 하나씩 조정하는 것이 한번에 여러개를 동시에 조정하는 것보다 훨씬 쉽고 효율적이다. 즉, Orthogonalization은 여러 하이퍼파라미터 튜닝을 서로 독립적으로 하나씩 하는 것을 의미한다.
머신러닝에서 직교화하는 법
TV 예시를 보면 너무 심플하고 당연해 보인다. 하지만 머신러닝 프로젝트를 하다보면 그게 맘처럼 쉽지가 않다. TV의 경우 첫번째 손잡이가 너비를 조정한다는 것을 잘 알고 있기 때문에 우리가 하는 행동이 정확히 어떤 결과를 가져올지 쉽게 예상할 수 있다. 마찬가지로 머신러닝에서도 내가 조정하는 하이퍼파라미터가 어떤 효과를 가져올지 명확히 알고 튜닝을 해야한다. 그러나 공부가 잘 되어 있지 않은 상태에서 모델링을 하다보면 어떤 결과가 나올지 모르고 이거 바꿔볼까? 저거 바꿔볼까? 하면서 더 미궁에 빠지는 경우가 많다. 그래서 앤드류 응 교수님의 강의가 더 소중한 것이다! 이렇게 친절하게 알려주시다니... 딥러닝을 공부하고 있다면 이 강의를 정말 강추한다. 교수님이 정리해준 전략에 따르면 크게 4단계로 나누어 모델 튜닝을 진행한다.
첫번째는 학습 데이터(Traning Set)만 가지고 결과가 잘 나오는 것이다. 학습 데이터에서도 성능이 좋지 못하면 그 모델이 Validation이나 Test 데이터, 그리고 현실에서도 잘 작동할 것이라고 생각하기는 어렵다. 내 모델이 학습셋에 성능이 좋지 않다면 할 수 있는 튜닝은 무엇일까? 네트워크를 더 키우거나 (Bigger Network), 더 나은 최적화 방법(Adam 등)을 선택하는 것이다. 더 다양한 방법들이 있겠지만 추후 포스팅들을 통해서 자세히 알아보도록 하겠다. 일단 학습 데이터에서 성능이 잘 나오면 그 다음 단계로 넘어가도 좋다. "성능이 잘 나온다"는 것은 어떤 문제를 해결하는지에 따라 다르겠지만, 어떤 경우에는 인간과 유사한 수준(Human Performance)을 의미하기도 한다.
두번째는 Validation Set에서도 성능이 잘 나오도록 하는 것이다. 학습 셋에서 결과가 잘 나오더라도 과적합(Overfitting)되면 Validation set의 성능이 낮을 수 있다. 따라서 과적합을 방지하는 정규화(Regularization)를 해주는 것이 좋다. 또는 학습데이터가 충분하지 않아 모델이 General한 분포를 잘 학습하지 못했을 수도 있다. 따라서 학습 데이터 사이즈를 키워서 다시 학습시키는 것(Bigger Training Set)도 또 다른 튜닝 방법이 될 수 있다.
그런데 만약 Validation Set에서는 잘했는데, Test Set에서는 못한다면? 마찬가지로 Validation Set의 사이즈를 키워서(Bigger Validation Set) 다시 학습하는 방법이 있다. 모델이 Validation Set에 과적합 되어 있을 수 있기 때문이다. 마지막으로 다 잘 되는데 현실 데이터에서는 성능이 잘 나오지 않는다면, Validation set 또는 비용함수를 변경해야 한다. Validation set이 현실 데이터와 다른 분포를 가지고 있거나 비용함수 자체가 현실 문제를 푸는데 적절하지 않을 수 있기 때문이다.
지금까지 머신러닝 프로젝트를 수행함에 있어서 효과적인 튜닝 절차에 대해서 공부해봤다. 앞으로 세부적인 전략들에 대해서 정리할 예정이다. 이런 고퀄리티의 강의를 온라인으로 들을 수 있게 해준 코세라와 앤드류 응 교수님께 정말 감사할 따름이다. 👍👍
References
[1] https://www.coursera.org/specializations/deep-learning
'데이터과학' 카테고리의 다른 글
[머신러닝] 프로젝트 전략 (3): Train / Dev / Test set (0) | 2022.02.09 |
---|---|
[머신러닝] 프로젝트 전략 (2): Evaluation Metric (0) | 2022.01.24 |
[추천시스템] Multi-Armed Bandit (2) | 2021.10.18 |
[추천시스템] Alternating Least Square (ALS)를 활용한 Matrix Factorization (6) | 2021.09.28 |
[추천 시스템] Matrix Factorization (SGD) (4) | 2021.09.08 |
댓글