본문 바로가기
Machine Learning

49. 머신러닝 시스템 예제 : Ceiling analysis

by 대소니 2016. 9. 12.


머신러닝 시스템을 구축하는데 있어서 가장 중요한 리소스는 개발 시간입니다.

많은 사람들이 이 시스템을 개발하면서 감이나 운에 의거해서 task를 선택하고 성능 개선을 위해서 여러가지 시도를 하고 있습니다. 하지만 때로는 이렇게 보내는 많은 시간들이 실제적으로 시스템의 성능 개선에 미치지 못하는 경우가 있어 안타깝기도 합니다.

이러한 시간 낭비가 되는 것을 방지하기 위해서 지금까지 여러가지 분석 방안에 대해서 이야기 했습니다. 이번에는 앞에서 다룬 예제와 pipeline을 통해서 Ceiling analysis에 대해서 알아보겠습니다.


아래와 같이 Photo OCR의 pipeline이 3가지의 모듈로 구성이 되어 있습니다. 이 각각의 모듈은 작은 팀으로 구성되어 업무를 수행하고 있을 것입니다. 혹은 한사람이 전체를 다룰 수도 있겠지요.

전체적인 시스템의 성능을 Accuracy라고 하고 여기서는 72%의 정확도를 보인다고 가정해보겠습니다. 우리는 이 정확도를 높이기 위해서 무언가를 하려고 합니다. 어떻게 어느부분을 집중해서 개선을 하였을때 보다 좋은 성능 결과를 낼 수 있을까요?


가장 중요한 것은 어떤 모듈을 개선했을때 전체적인 시스템의 성능 개선으로 나타나는지를 파악하는 것입니다. 이를 위해서 각 모듈별로 사람이 직접 test set을 이용해서 100% 결과를 만들어주는 것입니다. 


먼저 첫번째 모듈인 Text detection을 보겠습니다. test set의 데이터를 기준으로 사람이 직접 이미지에서 text가 어디 있는지를 확인하고 이것을 알고리즘에 적용시켜 줍니다. 이로서 text detection의 정확도가 100%로 완벽하게 만들어지게 됩니다. 이렇게 되었을때의 전체적인 시스템 성능을 확인합니다. 약 89%로 17% 개선되는 효과를 보이네요. 


그 다음 두번째 모듈도 동일한 방식으로 해줍니다. 사람이 직접 Character seqmentation을 해서 100% 정확도로 적용시켜 줍니다. 이렇게 개선된 전체적인 시스템의 정확도가 90%로 약 1% 정도 개선되는 것을 보인다는 것을 알수 있습니다. 1% 개선의 효과라는 것은 이 모듈 개선이 전체적인 시스템에 미치는 영향도가 작다는 의미가 되므로 우리는 이 모듈에 우리의 resource를 투입하는 것이 비효율적이라는 것을 알 수 있습니다.


마지막 모듈도 동일하게 하여 100% 정확도로 개선이 되었습니다. 약 10% 정도 전체적인 시스템의 성능이 개선 되는 것을 확인 할 수 있게 되었습니다.


이를 통해서 우리는 성능 개선을 위해서 Text detection에 우리의 resource를 투입해서 개선을 하였을때 가장 좋은 효과를 볼 수 있다는 것을 알 수 있습니다. 혹은 마지막 모듈의 작업이 더 쉽고 빠를 수 있다면 마지막 모듈을 먼저 개선하고 첫번째 모듈에 투입하는 것이 보다 효과적일 수도 있을 겁니다.


이처럼 Ceiling analysis는 각각의 모듈이 전체적인 성능에 미치는 영향도를 파악할 수 있어 우리가 어떤 순서로 개선 노력을 들이는 것이 보다 효과적인지 판단하는 기준을 제공해줄 수 있습니다.


이번에는 얼굴 인식(Face recognition) 분야에서의 pipeline을 살펴보겠습니다.

아래의 그림과 같이 먼저 선처리로 이미지의 배경을 제거합니다. 그리고 얼굴을 인식하는데 이때 눈과 코와 입을 구분하고 이 결과를 종합적으로 판단하여 사람의 얼굴임을 판단하려고 합니다.


이러한 pipeline의 머신러닝 시스템의 전체적인 성능이 85%로 나타난다고 하겠습니다.
우리는 Ceiling analysis를 통해서 아래 그림과 같이 개선이 되는 것을 알 수 있습니다. 즉, 이 시스템의 성능 개선에 가장 큰 영향을 미치고 있는 face detection을 개선하는 것이 효과적일 것이며, 반면에 prepocess에 노력을 들이는 것은 가장 비효율적인 방법이라는 것을 판단할 수 있게 됩니다.

만약에 이런 Ceiling analysis 없이 순서대로 개선을 해보자고 시도를 한다고 가정을 해보겠습니다. 3명으로 구성된 팀에서 순차적으로 preprocess 모듈부터 개선을 위해서 많은 시도를 하다보니 약 3개월의 시간이 흘러갔습니다. 그럼에도 불구하고 전체적인 성능 개선이 1% 뿐이 되지 않겠지요. 그들은 아마 자신들이 개선을 잘못한건지 아니면 의미가 없는 것이였는지에 대한 판단도 하기가 어려울 것입니다. 

만약 그들이 Ceiling analysis를 알고 있었다면 3개월 * 3명의 시간이 헛되이 소모될 것이라는 것을 미리 알수 있었을 것입니다. 

댓글