Neuron Coverage
DeepXplore: Automated Whitebox Testing of Deep Learning Systems (https://arxiv.org/abs/1705.06640) 논문에서 제안한 개념으로 DNN 의 개발 프로세스는 기존 소프트웨어 개발 프로세스와 근본적으로 다르기 때문에 DNN 을 테스팅할 수 있는 새로운 개념이 필요하다고 주장합니다.
기존 소프트웨어는 개발자가 직접 시스템의 로직(Decision Logic)을 개발하였지만, DNN 은 데이터에서 자동으로 규칙(기존 소프트웨어의 Decision Logic)을 학습하기 때문에 대부분의 개발자도 DNN 의 규칙을 알 수 없습니다. 그림 2 는 학습 데이터, 기능, 모델의 아키텍처 세부 사항(예: 레이어 수)을 수정하여 DNN이 학습한 규칙에 "간접적"으로 영향을 줄 수 있음을 보여줍니다.
위와 같은 이유로 기존의 소프트웨어 테스팅 방법을 이용해서 DNN 을 테스팅할 수 없고, DNN 을 테스팅할 수 있는 방법으로 Neuron Coverage 를 제안합니다. Neuron Coverage 는 입력에 의해 활성화된(즉, 출력 값이 임계값보다 높은) 뉴런의 수를 기반으로 테스트 입력에 의해 실행되는 DNN 로직 부분을 측정합니다.
높은 수준에서 Neuron Coverage 는 기존 소프트웨어에서 입력에 의해 실행되는 코드의 양을 측정하기 위한 표준 경험적 지표인 기존 시스템의 코드 커버리지와 유사합니다. 그러나 DNN 대부분의 규칙은 기존 소프트웨어와 달리 개발자가 수동으로 작성하는 것이 아니라 학습 데이터에서 학습하기 때문에 코드 커버리지 자체는 DNN 의 커버리지를 추정하는 데 좋은 지표가 아닙니다. Inference 를 하기 위한 코드는 100% 를 달성하기 쉽습니다. DNN 내부를 살펴보면 그림 3 과 같이 Neuron 으로 구성되어져 있는 것을 알 수 있습니다. 입력 데이터를 받았을 때 Neuron 이 활성화/비활성화되는 것을 측정함으로 커버리지를 측정합니다.
이를 수식으로 표현하면 아래와 같습니다.
- N: all neurons of DNN
- T: all test inputs
- out(n, x): a function that returns the output value of neuron n in the DNN for a given test input x.
- t: the threshold for considering a neuron to be activated.
중간 레이어의 출력이 최종 레이어의 출력과 다른 범위의 값을 생성하는 DNN의 경우, 뉴런 출력을 [0,1] 이내가 되도록 스케일링하기 위해 아래와 같이 계산합니다(뉴런 출력을 [0, 1] 로 스케일링해야 threshold 로 activation 여부를 체크할 수 있음).
$$ \frac{(out-min(out))}{(max(out)-min(out))} $$
여기서 out은 주어진 레이어의 모든 뉴런의 출력을 나타내는 벡터입니다.
'개발 > 테스팅' 카테고리의 다른 글
Concolic 테스팅 (0) | 2023.09.03 |
---|---|
Symbolic Execution (심볼릭 실행) (0) | 2023.09.02 |
KLEE 사용법 (0) | 2023.09.02 |