3-2. 주요 변수를 독립적으로 검증하자

by TUGU

앞서 3-1 에서 말하였듯이, ML Modeling에서 성능을 끌어올리기 위한 방법론들이 너무 많다. 이 중에 어떠한 방법을 사용하여 끌어올릴지는 쉬운 문제가 아니다. 이번 시간에는 이렇게 여러가지 방법론들이 존재할 때, 어떻게 하면 가장 효과적으로 이들을 사용할 수 있는지에 대하여 살펴 보도록 하겠다.



그림에서 보듯이 80-90년대에나 볼 수 있을법한 저러한 CRT TV가 있다고 하자. (사실 어렸을 때 나도 저런 TV를 집에서 틀어본적이 있다. 만약 여러분도 그런 경험이 있다면 최소 30대 이상??)

해 본 사람은 알겠지만 이런 TV에서 단순히 전원과 소리, 채널 조절만 하는 기능이 있는 것은 아니다. 일종의 미세 조정이라고 해서 화면을 상하,좌우로 늘리거나 혹은 움직이거나 사다리꼴 형태로 바꾸거가, 화면을 회전 시키거나 하는 의외로 굉장히 많은 기능? 이 있다. 채널을 돌릴 때마다 어떤 채널은 가운데에 잘 정렬된 상태로 화면이 안 잘리고 나오지만, 어떤 채널은 위로 취우치커나, 화면을 작게 나오거나 뒤틀려 있거나 한다. 아마 당시 채널 송출방식이 방송사 별로 표준화되어 있지 않아서 그런가 보다.

아무튼 이런 TV를 볼 때는 화면에 센터링이 맞이 않으면 TV에 달린 여러가지 원형 조그 셔틀??(앤드류 응은 이것을 Knob이라고 명칭했다) 을 움직이면서 최적의 상태를 찾아야 한다. 그런데 만약 이렇게 생각해 보자. 어떠한 특정 Knob이 있어서 이 각각의 기능에 그림과 같이 0.1배, 0.3배, -1.7배, 0.8배, +... 의 가중치를 주고 동시에 기능한다고 하자. 이렇게 되면 과연 여러 분들이 최적의 TV화면을 맞출 수 나 있을까? 아마 불가능할 것이다. 그래서 각각의 Knob은 서로 독립된 상태로, 하나를 돌리더라도 다른 기능 들에는 전혀 영향을 미치지 않은채로 독립적으로 움직인다. 여기서 Orthogonalization 이란, 각각의 기능이 서로 독립된 채로 기능함을 의미한다.


다른 예로 자동차를 예로 들어보겠다. 자동차를 움직이는데는 스티어링 휠(운전대), 엑셀,브레이크 크게 이렇게 세 가지가 있다. 여러분들도 잘 알다시피 각각의 기능은 서로 독립적으로 작용한다. 그런데 만약에 운전대를 현재보다 좌로 0.3배 더 돌리면 스피드가 0.8배 감소, 우로 2배 돌리면 스피드가 0.9배 증가 하는 식이라고 해 보자. 그러면 우리는 과연 차를 제대로 운전할 수 있을까?


이렇듯 TV고 자동차이고 간에, 제대로 운영하기 위해서는 각각의 기능들이 서로 최대한 독립적으로 작용해야 한다. 이를 앤드류 응 교수는 Orthogonalization 이라고 명칭하고 있다. 아래 그림처럼 자동차의 속도와 운전대 앵글이 서로 직교화 상태로 독립 변수로 작용해야지, 그렇지 않고 서로 종속된다면 그 사이 각도로 서로 영향을 주면서 움직이게 되므로 이는 Orthogonal 하지 않은 상태이다.


변수들간의 Orthgonalization




그러면 이게 우리가 공부하고자 하는 머신 러닝과 무슨 상관이 있는 걸까?

머신러닝/딥러닝에 사용되는 데이터 set은 크게 Trainig set, Development(Validation) set, Test set으로 이루어져있음은 여러분도 잘 알 것이다. 그렇다면 머신러닝의 성능을 끌어올리기 위해서는 순차적으로 각각의 단계에서 검증이 이루어져야 한다.


1) Fit Training set well on cost function

가장 먼저 학습용 데이터 셋으로 cost function이 최저인 상태를 찾아야 할 것이다. 이 과정에서 Bigger Network를 사용해 본다던지, Adam Optimizer를 활용해 본다던지 하는 방법이 있다. 이것이 첫 번째 독립적인 Knob이 된다.


2) Fit dev set well on cost function

그 다음에는 dev(validation) 데이터 셋으로 cost function이 최저인 상태를 찾아야 할 것이다. 이 과정에서 Regularization, 혹은 Bigger Training set을 사용 한다던지 하는 방법론이 있을 것이다. 이것이 두 번째 독립적인 Knob이된다.


3) Fit test set well on cost function

그 다음으로 테스트 셋으로 cost function이 최저인 상태를 찾아가 보자. 이 과정에서는 dev set을 더 많이 사용한다던지의 방법론이 있을 수 있다. 이것이 세 번째 독립적인 Knob이 된다.


4)Performs well in real world

마지막으로 실제 일반화 된 성능을 나타내는지를 보아야 할 것이다. 이 과정에서 사용되는 방법론이 dev set을 바꿔 보는 것이다. 이것이 네 번째 독립적인 knob이 된다.



이렇듯 머신 러닝의 과정 중 각 단계에서부터 Chain of Assumption으로 각각의 Knob을 순차적으로 튜닝하는 과정을 거친다. 이러한 관점에서 앤드류 응 교수는 Early stopping 을 잘 사용하지 않는다고 한다. Early stopping은 오버 피팅을 방지하기 위하여 학습을 조기에 종료 시키는 것이다. 문제는 이 Early Stopping이 Traing set과 Dev set을 학습하는데 모두 영향을 준다는 사실 때문이다. 이렇게 되면 애초에 강조했던 Orthogonalization이 불가능해 진다. (그렇다고 꼭 절대적으로 'Early stopping을 사용하지 말라'는 의미는 아니다. 아직 ML/DL에서는 절대적인 최적의 방법론이란 존재하지 않는다)




내용이 좀 길었으나, 결론은 이렇다.


머신러닝에서 성능을 최적화 시키기 위한 여러가지 방법들이 있는데, 각각의 방법들간에 서로 독립적인 관계가 유지되는 방법을 사용해서 순차적으로 검증해 나아가야 한다!


이것이 바로 앤드류 응 교수가 전하는 메시지이다.



참조

Orthogonalization (C3W1L02 ) 강의 영상

https://www.youtube.com/watch?v=sofffBNhVSo&list=PLkDaE6sCZn6E7jZ9sN_xHwSHOdjUxUW_b&index=3

keyword
매거진의 이전글3-1. ML 모델의 최적화 방법론