Skip to content

Latest commit

 

History

History
45 lines (28 loc) · 4.31 KB

53_Error_analysis_by_parts.md

File metadata and controls

45 lines (28 loc) · 4.31 KB

53 Error analysis by parts

개발된 시스템이 복잡한 기계학습 파이프라인을 사용해서 만들어 졌는데, 이 시스템의 성능을 좀더 향상시키고 싶다면 어떻게 해야 하는가? 파이프라인의 어떤 부분에 대해서 향상을 시도해야 할까? 에러를 파이프라인의 특정 부분에서 발생하였다고 특정지을 수 있다면, 향상을 위해 작업할 내용의 우선순위를 결정할 수 있을 것이다.

앞서 아룬 샴 고양이 분류의 예를 사용해서 설명해 보겠다:

고양이 감지 파이프라인의 첫번째 부분은 고양이를 감지하고, 그 부분만을 전체 이미지에서 잘라낸다. 고양이의 종을 분류하는 두번째 부분은 잘려나온 고양이의 이미지가 샴고양이 인지를 결정하게 된다. 이 두가지 파이프라인의 컴포넌트 모두의 성능을 향상시키기 위해서 수년이 걸리는 작업을 할 수도 있겠다. 하지만, 이 두 컴포넌트 중 어디에 초점을 맞출지 어떻게 결정할 수 있을까?

부분들에 대한 에러분석을 수행함으로써, 알고리즘이 만들어내는 각 실수들이 파이프라인의 어느 부분에 의해 발생했는지를 특정지을 수 있다. 예를 들어보자. 실제 올바른 레이블 값이 y=1인데도 불구하고, 알고리즘은 이미지에 샴고양이가 없다고 (y=0) 잘못 분류를 하였다.

알고리즘이 각 두 컴포넌트에 대해서 무엇을 수행했는지, 수동적으로 분석해 보자. 샴 고양이 감지를 하는 전체 알고리즘이 다음과 같이 고양이를 감지하였다:

이 결과는 고양이 종 분류를 담당하는 컴포넌트에게 다음과 같은 이미지가 주어졌다는 것을 의미한다:

고양이 종 분류를 담당하는 컴포넌트는 올바르게 해당 이미지에는 샴 고양이가 없다고 분류하였다. 따라서, 고양이 종 분류 알고리즘은 잘못이 없다: 여러 돌맹이로 이루어진 사진이 주어졌고, 결과적으로 매우 합리적인 레이블인 y=0을 출력하였다. 사람 또한 위의 동일 이미지를 분류한다면 y=0이라고 예측할 것이다. 이렇게 이 에러가 고양이를 감지하는 컴포넌트에게 종속된다는 것을 확실히 할 수 있게 된다.

반면에, 고양이를 감지하는 컴포넌트가 다음과 같은 사각형을 출력하였다면 어떠한가:

이 경우에는 고양이를 감지하는 컴포넌트는 훌륭히 역할을 수행하였고, 고양이 종 분류를 담당하는 컴포넌트에 문제가 있다는 결과를 도출할 수 있게된다

개발 데이터셋에서 모든 잘못 분류된 100개의 이미지를 분석하였는데, 그 중 90개가 고양이 감지 컴포넌트에 의한 것이고, 10개만이 고양이 종 분류 컴포넌트에 의한 것이었다는 것이 확인 되었다고 가정해보자. 전체 알고리즘의 성능을 향상시키기 위해서, 고양이 감지 컴포넌트에 좀더 초점을 맞춰야함을 안정적으로 결론지을 수 있을 것이다.

더욱이, 고양이 감지 컴포넌트가 잘못된 사각형의 결과를 출력한 90개의 예제 데이터를 편리하게 가지고 있게 된다. 이 90개의 예제 데이터를 사용하면, 성능향상을 위하여 고양이 감지 컴포넌트에 대한 좀 더 깊은 수준의 에러 분석을 수행할 수 있다.

여기서 설명되는, 어떻게 특정 에러가 파이프라인의 특정 부분에 종속되는지에 대한 설명은 지금까지 비공식적인 것이었다: 각 컴포넌트별로 출력 결과를 관찰하고, 어느 컴포넌트가 실수를 저질렀는지를 결정해야 했다. 이러한 비공식적인 방법이 개발에 필요한 모든 것일지도 모른다. 하지만, 다음 챕터에서는 좀더 공식적인 방법을 소개하고자 한다.