티스토리 뷰

Study/AI

[MLY] 요소별 오류 평가

생각많은 소심남 2018. 10. 15. 23:35

 복잡한 머신러닝 파이프라인을 활용하고 있고, 성능을 개선시키고자 한다. 파이프라인 중 어떤 부분이 성능을 개선하는데 효과가 있을까? 파이프라인 내 특정 부분에 대해 오류를 고려함으로써, 일의 우선 순위를 결정할 수 있다.

 앞에서 다뤘던 Siamese cat 분류기 예제를 살펴보자:

첫번째 부분인 고양이 감지기에선 고양이를 찾아서 이미지 상에서 해당 부분을 잘라준다. 두번째 부분인 고양이 종 분류기에서는 해당 고양이가 Siamese cat인지 여부를 결정한다. 이 파이프라인내 두가지 각각을 개선시키는데는 수년이 소요될 수 있다. 어떤 요소에 초점을 맞춰야 할까?

 각 요소별로 오류 평가를 수행함으로써, 파이프라인의 두 요소 중 하나가 알고리즘에서 문제가 발생했는지 여부를 찾을 수 있다. 예를 들어 지금 사용하고 있는 알고리즘이 현재 사진상에 siamese cat이 존재함에도(y=1), 고양이가 없다고 잘못 분류를 했다.(y=0)

알고리즘 상의 두 부분이 어떻게 동작했는지를 한번 살펴보자. 우선 Siamese cat 감지기는 다음과 같이 고양이를 감지해냈다.:

이렇게 되면 고양이 종 분류기는 다음의 이미지를 받게 된다.

그러면 고양이 분류기는 해당 이미지 상에서 Siamese cat이 없는 것으로 정확히 분류해낸다. 결국 고양이 종 분류기는 아무 잘못이 없다. 돌 무더기 이미지를 입력으로 받고, 합리적으로 라벨 y=0을 부여한 것이다. 실제로 사람이 해당 이미지를 분류해도 역시 y=0 이란 값을 얻을 것이다. 그렇기 때문에 해당 오류는 고양이 탐지기에서 발생한 것임을 명확히 할 수 있다.

만일 이와 반대로 고양이 분류기가 다음과 같이 박스 형태를 출력으로 보여줬다고 해보자.

그러면 고양이 감지기는 제 할일을 했고, 이때는 고양이 종 분류기에서 문제가 발생했음을 결론 내릴 수 있다.

 만약 100개의 잘못 분류된 개발 데이터 이미지가 있고, 90개의 오류가 고양이 감지기와 연관이 있고, 단순히 10개의 오류만 고양이 종 분류기에 관련이 있다고 치자. 그러면 명확하게 고양이 감지기를 개선시키는데 집중해야 한다는 결론을 내릴 수 있다. 더 나아가, 이제는 고양이 감지기에 의해서 잘못 박스가 쳐진 90개의 결과를 갖게 되었기 때문에 이 데이터를 사용해서 고양이 감지기에 사용했던 고차원의 오류 평가를 적용해서 성능 개선을 할 수도 있다. 

 사실 이 포스트 상에서 파이프라인의 특정 요소가 오류를 발생시키는지에 대한 설명은 조금 비정형화되어 있다. 각 요소별로 직접 출력을 살펴보고 어떤 부분에서 문제가 발생했는지를 살펴보았다. 이런 비정형화된 방법은 어쩌면 찾고자 하는 방법일 수도 있는데, 다음 포스트를 통해 조금 더 정형화된 방법에 대해서 알게 될 것이다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 53. Error analysis by parts를 번역한 내용입니다.>

댓글