티스토리 뷰

Study/AI

[MLY] 오류 탐지의 일반적인 경우

생각많은 소심남 2018. 10. 16. 09:29

  오류를 탐지(attribution)하는데 있어 몇가지 일반적인 과정이 있다. 만약 사용하고 있는 파이프라인이 3개의 단계 A, B, C로 구성되어 있고, A는 B에 직접적으로 물려있고, B는 C에 직접적으로 물려있는 경우라고 가정해보자.

 개발 데이터를 통해서 생길 수 있는 문제에 대해서 처리를 하기 위해서는:

 1. A의 출력이 "완벽한" 출력이 되도록 수정해본다.(예를 들어 앞에서 소개한 고양이 이미지에 대한 "완벽한" 박스 이미지) 그리고 해당 출력을 이용해서 파이프라인의 B와 C에서 테스트를 해본다. 만약 알고리즘이 정상적인 결과를 출력한다면 이 말은 A가 좋은 출력을 내보낼 경우, 전체 알고리즘 출력은 정상적으로 나온다는 것을 의미한다. 그렇기 때문에 해당 오류는 A에서 발생한 것이고 탐지할 수 있다. 그렇지 않다면 두번째 단계를 살펴본다.

 2. B의 출력이 "완벽한" 출력이 되도록 수정해본다. 만약 알고리즘이 정상적인 출력을 내보낸다면, 해당 오류는 B에서 탐지된 것이다. 그렇지 않다면 세번째 단계를 살펴본다.

 3. 결국 오류는 C에서 발생한 것이다.

조금 더 복잡한 예를 살펴보자.

 자율 주행 차에서 위와 같은 파이프라인을 사용하고 있다. 각 요소 중 어디에 초점을 맞출지 요소별로 오류 검증은 어떻게 할까?

 우선 3가지 요소를 ABC에 각각 맵핑해볼 수 있다.

 A : Detect cars
 B : Detect pedestrians
 C : Plan path for car

위에 설명한 과정을 따라가보면서, 차를 폐쇄된 코스에서 테스트를 하고, 사람과 다르게 회전이 잘 못되는 상황을 찾는다고 가정해보자. 자율 주행 업계에서는 이런 테스트 케이스를 시나리오라고 표현한다. 이럴때는 다음과 같이 해볼 수 있다.

 1. A(Detect cars)의 출력을 "완벽한" 출력이 되도록 수정해본다.(예를 들어 차량에 탑승해 다른차가 어디에 있는지 가르쳐준다.) 그리고 이전과 동일하게 파이프라인 B와 C에서 테스트를 하되, C(plan path for car)에서는 A에서 나온 완벽한 출력을 사용하도록 한다. 만약 알고리즘이 더 좋은 길을 찾아낸다면, 이 말은 A가 더 좋은 출력을 보였을 때 전체적인 알고리즘 출력도 좋아지는 것을 의미한다. 그렇기 때문에 해당 오류는 A에서 발생한 오류라고 알아낼 수 있다. 그렇지 않다면 두번째 단계를 살펴본다.

 2. B(detect pedestrian)의 출력을 "완벽한" 출력이 되도록 수정해본다. 만일 알고리즘이 정상적인 출력을 보여준다면, 오류는 B에서 발생한 오류임을 알 수 있다. 그렇지 않다면 세번째 단계를 살펴본다.

 3. 결국 오류는 C에서 발생한 오류이다.

 머신러닝의 파이프라인의 요소들은 직접 방향성 비순환식 그래프(Directed Acyclic Graph - DAG) 에 따라서 나열되어야 한다. 이 말은 전체 연산이 왼쪽에서 오른쪽으로 가는 방향(left-to-right order)으로 연산이 되어야 하며, 후순위의 요소는 반드시 이전 요소의 출력에 의해서만 영향을 받아야 한다는 것이다. A->B->C 순으로 설정된게 DAG 순서를 따르는 한 오류 평가는 정상적으로 수행될 것이다. 만약 A와 B를 바꿔보면 조금 다른 결과를 얻을 수도 있다.

 A : Detect pedestrians ( 이전에는 detect cars 였음 )
 B : Detect cars (이전에는 detect pedestrians 이었음)
 C : Plan path for car

그래도 결과는 여전히 유효하며, 어떤 부분에 초점을 맞춰야 할지에 대해서 좋은 가이드를 제시할 것이다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 55. General case of error attribution를 번역한 내용입니다.>

댓글