뉴런 커버리지
더 많은 작업
뉴런 커버리지(Neuron Coverage)는 테스트 입력 집합이 심층 신경망의 뉴런 가운데 얼마만큼을 정해진 임계값 이상으로 활성화했는지를 비율로 나타내어, 딥러닝 모델 테스트가 모델 내부 동작을 얼마나 고르게 시험했는지 재는 구조 기반 테스트 충분성 척도이다.
일반 소프트웨어의 화이트박스 테스트는 코드의 문장·분기가 몇 퍼센트 실행되었는지로 테스트가 충분한지 판단한다. 그런데 딥 러닝 모델의 동작은 사람이 쓴 분기문이 아니라 학습으로 정해진 가중치와 뉴런의 활성값에 담겨 있다. 같은 코드 줄이 모든 입력에서 똑같이 실행되므로, 코드 커버리지는 거의 언제나 100%가 되어 모델의 다양한 동작을 시험했는지 알려 주지 못한다.
2017년 페이(Kexin Pei) 등은 딥러닝 시스템용 화이트박스 테스트 도구 DeepXplore 를 발표하면서, 테스트 입력이 딥러닝 시스템의 어느 부분을 실행시켰는지를 체계적으로 재는 척도로 뉴런 커버리지를 처음 제안했다.[1] 커버리지를 코드 줄이 아니라 뉴런에 대해 세는 것이 핵심이다.
뉴런 커버리지는 다음과 같이 계산한다.
뉴런 커버리지 = (테스트 입력 중 하나라도 활성값이 임계값 t 를 넘긴 뉴런의 수) / (전체 뉴런의 수)
- 임계값 t 는 시험하는 쪽이 정한다(예: 0, 0.25, 0.75). 같은 입력 집합이라도 t 가 높을수록 커버리지는 낮아진다
- 활성값은 층마다 크기가 달라 보통 층 안에서 정규화한 뒤 비교한다
- 활성화되지 않은 뉴런이 남으면, 그 뉴런을 활성화하는 입력을 찾아 테스트 집합에 더한다. DeepXplore 는 여러 모델의 판정이 서로 달라지면서 동시에 커버리지도 높아지는 입력을 기울기 기반 탐색으로 만들어 냈다[1]
2018년 마(Lei Ma) 등의 DeepGauge 는 단순 뉴런 커버리지가 너무 거칠다고 보고 여러 단위의 척도를 제안했다.[2]
- k-다중 구간 뉴런 커버리지 - 학습 데이터에서 관찰한 뉴런 활성값 범위를 k 개 구간으로 나누고, 테스트 입력이 몇 개 구간을 채웠는지 센다
- 경계 뉴런 커버리지 - 학습 때 관찰한 범위의 위·아래 바깥(코너 케이스)에 들어간 뉴런의 비율을 센다
- 상위 k 뉴런 커버리지 - 층마다 가장 크게 활성화된 k 개 뉴런에 한 번이라도 든 뉴런의 비율을 센다
DeepGauge 는 앞의 두 척도(k-다중 구간, 경계)를 뉴런 수준(neuron-level) 척도로, 상위 k 뉴런 커버리지와 상위 k 뉴런 패턴을 층 수준(layer-level) 척도로 나눈다. 층 수준 척도는 개별 뉴런이 아니라 한 층에서 어떤 뉴런들이 함께 두드러지게 활성화되는지를 본다.[2]
| 척도 | 제안 | 단위 |
|---|---|---|
| 뉴런 커버리지 | DeepXplore(2017) | 임계값을 넘긴 뉴런 |
| k-다중 구간·경계 뉴런 커버리지 | DeepGauge(2018) | 뉴런 활성값 구간(뉴런 수준) |
| 상위 k 뉴런 커버리지·패턴 | DeepGauge(2018) | 층(층 수준) |
| 부호-부호 등 MC/DC 계열 | DeepCover(2018) | 인접 층의 뉴런 쌍 |
'컴포넌트 커버리지' 같은 척도는 신경망 테스트 기준으로 제안된 것이 없다. 신경망의 구조 단위는 뉴런과 층이다.
- 커버리지가 낮은 영역을 찾아 테스트 입력을 보강하는 테스트 생성의 길잡이로 쓴다
- 뉴런 커버리지가 높다고 모델이 옳다는 뜻은 아니다. 판정은 여전히 테스트 오라클이나 다른 기법이 해야 한다
- 적은 수의 입력만으로도 쉽게 높은 값이 나오는 경우가 있어, 높은 커버리지와 결함 검출력의 상관이 약하다는 후속 연구도 있다
| 기법 | 무엇을 보는가 | 판정 근거 |
|---|---|---|
| 뉴런 커버리지 테스트 | 테스트 입력이 활성화한 뉴런의 비율 | 활성화되지 않은 뉴런이 남았는가 |
| 메타모픽 테스트 | 입력을 바꾼 전후 출력 사이의 관계 | 메타모픽 관계가 깨졌는가. 개별 정답이 없어도 된다 |
| 안전 반경(강건 반경) 평가 | 입력 주변에서 출력이 바뀌지 않는 최대 거리 | 정확한 경계를 몰라도 출력이 유지되리라 기대하는 범위가 있는가 → 인공지능 강건성 |
| 적대적 공격(적대적 테스트) | 사람 눈에 띄지 않는 교란을 넣은 입력 | 의도적으로 넣은 노이즈에 모델이 오판하는가 |
| 코드 커버리지(소프트웨어 테스트 커버리지) | 실행된 문장·분기 비율 | 일반 프로그램의 구조. 신경망 내부 동작은 반영하지 못한다 |
'입력 변화와 출력 변화의 관계'는 메타모픽 테스트, '활성화되지 않은 뉴런에 대해 데이터를 추가'는 뉴런 커버리지, '노이즈로 잘못된 동작을 유도'는 적대적 공격의 설명이다. '타당한 값을 얻을 수 있는 예상 범위가 있다'는 생각은 커버리지가 아니라 강건성 평가의 안전 반경 쪽이다.
- ↑ 1.0 1.1 Kexin Pei 외, 「DeepXplore: Automated Whitebox Testing of Deep Learning Systems」, SOSP 2017, arXiv, https://arxiv.org/abs/1705.06640, 확인일: 2026-11-04.
- ↑ 2.0 2.1 Lei Ma 외, 「DeepGauge: Multi-Granularity Testing Criteria for Deep Learning Systems」, ASE 2018, arXiv, https://arxiv.org/abs/1803.07519, 확인일: 2026-11-04.
- ↑ Youcheng Sun, Xiaowei Huang, Daniel Kroening, 「Testing Deep Neural Networks」, arXiv, 2018, https://arxiv.org/abs/1803.04792, 확인일: 2026-11-04.