Source-linked AI summary

On Testing Machine Learning Programs

Houssem Ben Braiek, Foutse Khomh

arXiv:1812.02257v1cs.SE

TL;DR

ML 프로그램 테스트는 귀납적 개발 패러다임으로 인해 테스트 공간이 더 넓어지고 데이터, 코드, 환경, 프레임워크 전반에서 결함이 발생할 수 있어 어렵다. 이 논문은 테스트 관행을 조사하고 적용 맥락과 예상 결과를 설명하며 문헌의 공백과 향후 연구 방향을 제시한다. 모델 수준과 구현 수준 모두에서 결함을 탐지하는 테스트 기법을 종합한다.

  • 문제

    ML 프로그램 테스트는 귀납적 개발 패러다임으로 인해 테스트 공간이 확장되고 데이터, 코드, 환경, 프레임워크 전반에서 결함이 발생하기 때문에 여전히 어렵다.

  • 방법

    이 논문은 생성 파이프라인 전반의 ML 프로그램 테스트 관행을 조사하고, 그 적용 맥락과 예상 결과 및 확인된 연구 공백을 설명한다.

  • 결과

    이 리뷰는 모델 수준과 구현 수준 모두에서 결함을 탐지하는 기법을 종합하고 향후 연구 방향을 제시한다.

  • 시사점 및 한계

    이 논문은 연구자와 ML 개발자를 위해 테스트 기법과 그 맥락을 종합적으로 정리한다.

  • 시사점 및 한계

    블랙박스 테스트 기법은 대표성이 떨어지는 적대적 예제를 생성할 수 있으며 일부 잘못된 모델 동작을 발견하지 못할 수 있다.

Abstract

from arXiv · show

Nowadays, we are witnessing a wide adoption of Machine learning (ML) models in many safety-critical systems, thanks to recent breakthroughs in deep learning and reinforcement learning. Many people are now interacting with systems based on ML every day, e.g., voice recognition systems used by virtual personal assistants like Amazon Alexa or Google Home. As the field of ML continues to grow, we are likely to witness transformative advances in a wide range of areas, from finance, energy, to health and transportation. Given this growing importance of ML-based systems in our daily life, it is becoming utterly important to ensure their reliability. Recently, software researchers have started adapting concepts from the software testing domain (e.g., code coverage, mutation testing, or property-based testing) to help ML engineers detect and correct faults in ML programs. This paper reviews current existing testing practices for ML programs. First, we identify and explain challenges that should be addressed when testing ML programs. Next, we report existing solutions found in the literature for testing ML programs. Finally, we identify gaps in the literature related to the testing of ML programs and make recommendations of future research directions for the scientific community. We hope that this comprehensive review of software testing practices will help ML engineers identify the right approach to improve the reliability of their ML-based systems. We also hope that the research community will act on our proposed research directions to advance the state of the art of testing for ML programs.

1. 서론

이 논문은 ML 프로그램이 중요한 영역에서 작동하고 전통적인 소프트웨어보다 잠재적 테스트 공간이 훨씬 넓기 때문에 ML testing이 점점 중요해지는 동시에 어렵다고 설명한다. 기존 testing 관행을 조사하고, 과제와 적용 가능성을 설명하며, 문헌의 공백을 식별하고, 향후 연구 방향을 제안한다.

  • ML은 대규모 시스템과 중요한 시스템에 점점 더 배포되고 있지만, 결함을 탐지하고 수정하는 일은 여전히 어렵다.현재 ML 애플리케이션은 금융, 에너지, 보건, 교통 및 일상생활의 다른 중요한 영역에 영향을 미친다.
  • ML 프로그램은 전통적인 소프트웨어보다 잠재적 테스트 공간이 넓으며, 데이터, 코드, 실행 환경 또는 third-party framework에서 결함이 발생할 수 있다.이 논문은 기존 software-development 기법을 이러한 더 넓은 현실에 맞게 재검토하고 조정해야 한다고 주장한다.
  • 이 논문은 ML 프로그램에 대한 현재 software-testing 관행을 조사하고, 각 관행이 적용되는 맥락과 예상 결과를 설명한다.특히 differentiable model을 사용하는 ML 프로그램 testing의 과제를 다룬다.
  • 이 논문은 ML 프로그램 testing 연구의 공백을 식별하고 과학계의 향후 연구 방향을 제안한다.저자들은 이 연구를 ML 프로그램 testing 관행에 대한 가장 포괄적인 검토라고 설명한다.

2. 머신러닝 모델 배경

ML 프로그램은 전처리 파이프라인과 반복적 통계 학습 모델을 통해 이질적이고 대개 잡음이 있는 데이터를 변환하여 관측되지 않은 사례를 예측한다. 데이터, 모델, 구현, 수학적 복잡성, 서드파티 라이브러리 사용 전반에서 결함이 발생할 수 있으므로 테스트가 어렵다.

  • 데이터: ML 프로그램은 데이터베이스, 센서, IoT 기기, 소프트웨어 시스템 등의 소스에서 이질적인 구조화 또는 비구조화 데이터를 수집하며, 데이터는 배치 또는 실시간으로 전달된다.
  • 데이터: 데이터 준비 단계에서는 모델링 전에 feature를 정제하고 선택하며 인코딩한다. 잡음이 있거나 관련성이 낮은 입력은 학습의 신뢰성을 떨어뜨리고 예측 성능을 저하시킬 수 있기 때문이다.
  • 구현 이슈: 데이터 파이프라인은 변환, 검증, 보강, 요약을 모듈화하지만, 복잡하게 얽힌 파이프라인과 사용되지 않는 실험용 코드 경로는 결함을 유발하고 동작을 불분명하게 하며 디버깅을 복잡하게 만들 수 있다.
  • 통계 학습 모델: ML 모델은 예측 오류를 최소화하고 학습 데이터에 숨겨진 패턴을 관측되지 않은 데이터에 일반화하기 위해 parameter를 반복적으로 적합하며, regularization은 overfitting 방지에 기여한다.
  • 테스트 과제: ML 프로그램은 상당한 수학 전문성을 요구하고, 데이터·모델·코드 구현 선택 전반에서 결함이 증폭되므로 테스트가 어렵다.
  • 구현 이슈: 최적화된 서드파티 라이브러리와 분산 하드웨어에 의존하면 중요한 ML 계산에서 오용이 발생할 가능성이 추가로 생긴다.

3. ML 애플리케이션 테스트 연구 동향

이 리뷰는 분석적 정제, 합성 및 adversarial testing, coverage-guided 방법, 구현 중심 테스트 전략을 아우르며, 데이터 품질 문제와 ML 모델의 정확성을 중심으로 ML 애플리케이션 테스트 기법을 체계화한다. 또한 고차원 데이터, 대표성이 부족한 adversarial example, 취약한 coverage 기준, 확률성, 부재한 oracle, mutation 비용 등의 한계를 강조한다.

  • 연구 구성: ML testing 연구는 데이터의 개념적 오류 또는 구현 오류를 탐지하는 기법과 ML models의 올바른 개념화 및 구현을 보장하는 기법으로 나뉜다.이 리뷰는 각 범주 내 기법을 사용되는 개념에 따라 다시 분류한다.
  • 데이터 테스트: 분석 기반 data cleaning이 일반적이지만, 집계 질의는 이점을 줄일 수 있고 작은 표본으로도 충분할 수 있으며, anomaly detection은 고차원 feature 공간에서 빠르게 성능이 저하된다.Boosting은 효과적인 복구 시퀀스 탐색을 앙상블 문제로 정식화하고, 정제된 feature로 학습한 개선된 모델을 선택한다.
  • 모델 테스트: Adversarial example은 state-of-the-art DNN 이미지 classifier의 약점을 드러냈으며, 사람이 지각할 수 없는 perturbation이 적용된 합성 이미지에서 성능이 저조했다 [13].그 유용성은 대표성이 의심스럽다는 점에서 제한된다. 미세한 perturbation이 이상한 왜곡이나 단순화된 합성 표현을 만들 수 있기 때문이다.
  • 모델 테스트: DeepXplore는 neuron coverage를 사용해 neural-network 로직을 탐색하고 수동 labeling 없이 오류 행동을 식별하며, combinatorial testing은 deep-learning 테스트 공간을 축소한다.Concolic testing은 concrete execution과 symbolic analysis를 결합해 blind test generation이 놓칠 수 있는 DNN 경로를 탐색한다 [28].
  • 구현 테스트: Property-based testing은 추론된 invariant에서 반복적인 사례를 생성하고, mutation operator는 data-engineering 및 DNN 구현 fault를 겨냥한다. 그러나 mutation된 모델의 학습은 시간이 많이 걸린다.반면 gradient checking은 절대 또는 상대 수치 오차가 사전 정의된 threshold 이하로 유지되는지를 테스트하며, deep network에는 상대 threshold가 권장된다.

4. 결론 및 향후 연구

이 논문은 ML 프로그램을 추론하기 어려운 이유를 설명하고, 프로그램 생성 과정과 결함 원인을 체계화하며, 이러한 결함을 탐지하기 위한 테스트 기법을 검토한다.

  • 결론 및 향후 연구: ML 프로그램은 귀납적이므로 그 동작을 추론하기 어렵다. 따라서 이 논문은 데이터 준비부터 운영 배포까지의 개발 과정을 체계화하고, 주요 결함 원인을 식별하며, 이를 탐지하기 위한 테스트 기법을 검토한다.이 리뷰는 일반적인 ML 프로그램 생성 과정과 개발자가 결함을 탐지하고 디버깅하는 데 도움을 주도록 제안된 테스트 방법을 다룬다.
Loading 1812.02257v1…