[Ⅲ. Structuring Machine Learning Projects] Introduction to ML Strategy (1)
Structuring Machine Learning Projects
Introduction to ML Strategy
Why ML Strategy
머신러닝 프로젝트 구성법 일명 머신러닝 전략을 다뤄보겠습니다. 이를 통해 머신러닝 시스템을 더욱 빠르고 효율적으로 작동시킬 수 있으면 좋겠습니다. 그렇다면 머신러닝 전략이란 무엇일까요? 예시를 살펴보겠습니다.
고양이 비용 파일을 작업하는 중이라고 가정해보겠습니다. 얼마간 작업한 뒤 시스템 정확도가 90%가 되었는데요. 이 수치는 아직 충분치 않습니다. 그러면 시스템을 어떻게 개선할지에 대해 다양한 아이디어가 있을 수 있는데요.
예를 들어 훈련 데이터를 더 많이 수집해야 한다고 생각할 수 있습니다. 아니면 훈련 세트가 아직 충분히 다양하지 않기 때문에 더 다양한 포즈의 고양이 사진이나 더 다양한 부정 예시 세트를 수집해야 한다고 얘기할 수도 있습니다.
경사하강법을 이용해 알고리즘을 더 큰 네트워크나 더 작은 네트워크를 시도하거나 드롭아웃 또는 L2 정규화를 시도해 볼 수도 있습니다. 또는 활성화 함수나 숨은 유닛의 개수 등 네트워크 구조를 바꿀 수도 있습니다.
이렇게 딥러닝 시스템을 개선하려고 할 때 시도할 수 있는 것이 참 많은데요. 문제는 선택을 잘못하게되면 실제로 6개월 정도를 프로젝트 방향만 바꾸는데 소비할 수 있는데 그 뒤에야 방향을 바꾼 것이 아무런 도움이 안되었다는걸 깨달을 수도 있습니다.
Orthogonalization
머신러닝 시스템을 구축할 때 어려운 점 중 하나는 시도해 볼 수 있는 것도 바꿀 수 있는 것도 아주 많다는 것입니다. 예를 들어 튜닝할 수 있는 하이퍼 파라미터가 아주 많습니다. 머신러닝 업무를 가장 효과적으로 수행하시는 분들은 무엇을 튜닝할 것인지에 대한 아주 뚜렷한 안목을 가지고 있습니다. 하나의 효과를 얻어내기 위해서 말이죠. 이러한 절차를 직교화라고 부릅니다. 더 구체적으로 살펴보겠습니다.
오래된 학교 TV 사진입니다 조정을 통해 이미지를 바꿀 수 있는 여러 개의 손잡이가 있죠. 이런 오래된 TV세트는 아마 손잡이 한 개로 이미지 높이를, 다른 손잡이로 너비를 조절했을 것입니다. 또 다른 손잡이로는 사다리꼴 모양의 정도를 조절했을 수도 잇겠죠. 다른 손잡이로는 이미지를 얼마나 좌우로 움직일지 또 다른 손잡이로는 이미지의 회전율을 조절했을 수 있습니다.
TV 디자이너들은 많은 시간을 들여 전기회로망을 만들었는데요. 예전에는 주로 아날로그 전기회로망이었죠. 각각의 손잡이에 해석 가능한 기능을 부여하기 위한 것이죠.
예를 들면 한 손잡이는 이걸 조정하고 다른 손잡이는 저걸 조정하는 등입니다. 반대로 어떤 손잡이가 0.1 X 이미지 높이 +0.3 X 이미지 너비 -1.7 X 이미지의 사다리꼴 정도 +0.8 X 이미지의 가로축 위치 등을 조정한다고 해봅시다. 이런 손잡이를 조정하면 이미지의 높이, 너비 사다리꼴 정도, 이미지 위치 등 여러 변수들을 한번에 바꿀 수 있게 됩니다.
이런 손잡이가 있으면 이미지가 가운데로 오도록 TV를 조정하는 것이 거의 불가능할 것입니다. 이런 맥락에서 직교화는 TV디자이너들이 각각의 손잡이가 1가지의 기능만 갖도록 설계한 것을 의미합니다. 이 경우 TV를 조정하기 훨씬 쉬워집니다. 이미지가 가운데로 원하는 특정 위치에 오도록 말이죠. 직교화의 또 다른 예시를 말씀드리겠습니다.
운전을 배울 때를 생각해 보시면 자동차에는 대표 컨트롤이 세 개 있습니다. 얼마나 차가 좌우로 갈지 조정할 수 있는 운전대 엑셀과 브레이크입니다. 이런 3가지 컨트롤을 통해 또는 운전대 컨트롤 한 개 속도 컨트롤 두 개를 통해 상대적으로 해석이 쉬워져 서로 다른 컨트롤을 이용한 다른 액션을 통해 차가 어떻게 움직일지 알 수 있습니다.
그러면 이제 조이스틱 식으로 차를 설계한다고 생각해 보세요. 조이스틱의 한 축이 0.3 X 운전대 각도 -0.8 X 차 속도를 조정하는 식으로 말이죠. 그리고 2 X 운전대 각도 +0.9 X 차 속도를 조정하는 별개의 컨트롤이 있다고 생각해 봅시다.
이론적으로는 손잡이 두 개를 조정하게 되면 자동차를 특정 각도와 속도로 움직일 수 있겠죠. 하지만 운전대 각도 컨트롤 한 개 속도 조절 컨트롤 두 개를 따로 갖고 있을 때보다는 훨씬 더 어렵습니다.
즉 직교화 개념은 원하는 작업에서 한 차원을 운전대 각도 제어 다른 차원을 속도 제어로 본다면 손잡이 한 개는 운전대 각도에 가능한 한 많은 영향을 주는 것이어야 하며 다른 손잡이는 자동차의 경우 속도를 제어하는 액셀과 브레이크입니다. 그렇지만 두 기능을 섞어 놓은 컨트롤이 있다면 예를 들어 운전대 각도와 속도에 모두 영향을 주는 컨트롤 이 둘을 동시에 바꾸는 컨트롤이 있다면 원하는 운전대 각도와 속도를 한번에 맞추기가 훨씬 더 어려워집니다.
서로 직각으로 구성됨을 뜻하는 직교화 특성을 갖게 되면 실제로 제어하려는 부분에 이상적으로 맞추어진 직교화 컨트롤을 사용하면 손잡이 조절이 훨씬 더 쉬워집니다. 운전대 각도, 액셀과 브레이크를 조정해 자동차를 원하는 대로 움직이기 더 수월해집니다. 이런 것들이 어떻게 머신러닝과 연결될까요?
지도학습이 잘 운영되기 위해선 보통 시스템 손잡이를 조정하여 다음 네 가지가 잘 유지되도록 해야 합니다. 첫째, 적어도 훈련 세트에서는 좋은 성능이 나와야 합니다. 훈련 세트에서의 성능은 수용성 평가를 어느 정도 통과해야 합니다. 특정 응용 프로그램에서는 이것이 인간에 준하는 성능 수준을 뜻하기도 합니다만 이는 프로그램마다 다를 것입니다. 인간 수준 성능에 대한 비교는 다음에 더 자세히 이야기하도록 하겠습니다.
훈련 세트에서 좋은 성능이 난 뒤에는 이것이 개발 세트에서도 이어지고 나중에는 시험 세트에서도 좋은 성능이 나야 합니다. 마지막으로는 비용함수가 적용된 시험 세트에서 좋은 성과가 나와 시스템이 실제로도 잘 작동해야 합니다. 이런 좋은 시나리오가 해피 캣 픽쳐 앱 유저들에게 적용되길 바라야겠죠.
TV 조정과 관련해 다시 말씀드리면 TV 이미지가 너무 넓거나 좁은 경우 손잡이 한 개만 조정에 사용될 수 있도록 하는 것이 좋습니다. 손잡이 다섯 개를 조심스럽게 조정하고 싶지는 않을 것입니다. 다른 것에도 영향을 줄 테고요. 손잡이 한 개만 너비를 조정하도록 해야 합니다.
이와 유사하게, 알고리즘이 비용 함수에 잘 맞지 않는다면 손잡이가 한 개만 있어야 합니다. 아니면 훈련 세트에 잘 맞도록 알고리즘을 조정할 수 있는 특정 손잡이 세트를 사용할 수도 있습니다. 이 때 사용하는 손잡이는 더 큰 네트워크를 훈련시킬 때 사용할 수 있습니다. 아니면 더 나은 최적화 알고리즘으로 전환할 수도 있습니다. 아담 최적화 알고리즘과 같은 방법이죠.
반대로, 알고리즘이 개발 세트와 잘 안 맞는다고 생각되시면 또 별도의 손잡이 세트가 사용될 수 있습니다. 독특한 세트의 손잡이로 시도해 보는 게 좋잖아요. 예를 들어, 알고리즘이 개발 세트에서 제대로 작동하지 않고 교육 세트에서는 잘 작동하지만 개발 세트에서는 잘 작동하지 않는 경우 두번째 기준을 만족시키기 위해 정규화를 시도할 수 있는 손잡이 세트가 있습니다.
비유하자면, 이제 TV 세트의 너비를 조정했으니 이미지의 높이가 어색할 경우 다른 종류의 손잡이를 이용해 조정할 수 있다는 것입니다. 이 때 이미지 너비에 거의 영향을 주지 않고 조정해야 할 것입니다. 그리고 더 큰 훈련 세트는 또 다른 손잡이가 될 수 있습니다. 이는 학습 알고리즘이 개발 세트 일반화를 더 잘 할 수 있게 도울 수 있습니다.
이제 TV 이미지의 너비와 높이를 조정했는데요. 그럼 세 번째 기준을 충족하지 못하면 어떻게 될까요? 개발 세트에선 잘 하고, 시험 세트에선 잘 안 될 경우는 어떻게 할까요? 이 경우 조정하는 손잡이를 더 큰 개발 세트로 바꿔야 합니다. 개발 세트에서는 성능이 좋았지만 시험 세트에서 잘 안 되는 경우 개발 세트를 과하게 조정했을 확률이 커 다시 더 큰 개발 세트를 찾아야 합니다.
마지막으로 시험 세트에서는 결과가 좋았으나 해피 캣 픽쳐 앱에서는 그렇지 못한 경우 개발 세트나 비용함수를 바꿔야 합니다. 일부 비용함수에 기반해 시험 세트에서 좋은 결과를 내는 것이 현실에서의 알고리즘 성능으로 이어지지 않는다면 이는 개발 시험 세트 분포가 올바르게 설정되지 않았거나 비용함수가 올바른 대상을 측정하고 있지 않음을 의미합니다.
지금 예시를 굉장히 빠른 속도로 흝어보고 있는데요. 손잡이에 대한 자세한 내용은 다음에 더 다루도록 하겠습니다. 일단은 대략적으로 직교화 절차를 간략히 설명드리고 싶었습니다 이 네 가지 문제 중 어떤 문제를 해결하려고 하는지 명확히 해 두어야 합니다.
저는 신경망을 훈련시킬 때 일찍 멈추지 않습니다. 일찍 멈추는 것도 나쁜 기술은 아니고 많은 사람들이 이렇게 하고 있습니다. 하지만 이 작업은 훈련 세트의 적합도에 동시에 영향을 미치기 때문에 일찍 멈추면 훈련 세트의 적합도가 떨어집니다. 이는 또한 개발 세트 성능 향상을 위해 동시에 수행되는 경우가 많습니다. 이것은 직교성이 떨어지는 손잡이인데 두 가지에 동시에 영향을 미치기 때문입니다. TV 이미지의 너비와 높이에 동시에 영향을 주는 손잡이와 같습니다. 그렇다고 나쁜 건 아니고 쓰고 싶으면 쓰셔도 됩니다. 하지만 여기에 적어둔 다른 컨트롤과 같이 직교화된 컨트롤이 더 많으면 네트워크 조정이 훨씬 쉬워집니다.
오늘 내용이 직교화를 이해하는 데 도움이 되면 좋겠습니다. TV를 볼 때 이미지 너비가 너무 넓으니 이 손잡기를 돌려 바꿔 봐야지라거나 너무 높으니 손잡이로 조정해야지 혹은 너무 사다리꼴이니 조정해야겠다라고 얘기할 수 있으면 좋은 것과 같습니다.
머신러닝에서는 시스템을 보고 이 부분이 이상하다고 판단할 수 있으면 아주 좋죠. 훈련 세트에서는 잘 안 된다 개발 세트에서는 잘 안 된다 시험 세트에서 잘 안 된다 또는 시험 세트에서는 잘 되지만 현실에서는 잘 안 된다 등을 판단할 수 있으면 좋습니다.
하지만 정확히 어떤 부분이 문제인지 보고 그 문제 해결만을 위한 손잡이 한 개 혹은 특정 손잡이 세트를 만드는 것은 머신러닝 시스템의 성능을 제한합니다. 앞으로는 시스템 성능의 보틀넥이 무엇인지 어떤 손잡이 세트를 써야 시스템을 적절하게 조정하여 성능을 향상시킬 수 있는지 정확히 진단하는 법을 알아보겠습니다.
댓글남기기