서울시립대학교 인공지능학과 고상기 교수님의 신뢰할 수 있는 인공지능 수업을 정리임을 미리 알립니다.
신경망이 특정 조건을 만족하는지 어떻게 검증하는가를 다룬다. 아래 두 가지 방법으로 다루게 된다.
Testing과 Verification을 구분하라.
1. Testing and testing coverage # Neuron coverage
• Why is testing coverage important?
• Popular structural coverage metrics
• Evaluation of structural coverage metrics
• Is coverage enough?
2. Formal verification
• What is formal verification?
• Property verification of deep neural networks
• Soundness and completeness of the verification
• Trade-off in practice
cf. Maximum Safe Radius (MSR) 문제란 원본 입력 x로부터 가장 가까운 적대적 예제 x′까지의 최소 거리를 계산하는 문제다.
즉, 모델의 예측이 바뀌는 최초 지점까지 얼마나 멀리 안전한가를 재는 수치. 이게 클 수록 안전하다.
1. Testing and testing coverage # Testing: 입력을 계속 넣어보는 것 # Coverage: 얼마나 많은 코드 영역을 실행하는가
- Why is testing coverage important? ((1-1))
1) 테스트 데이터 구성의 한계
현실 데이터 수집 & 라벨링은 번거롭고 충분하지 않음, 시뮬레이션으로 합성 데이터를 생성하더라도 현실 분포와 다를 수 있음
-> Random testing, Symbolic-execution-based testing, Mutation testing를 진행하여 경우의 수를 넓게 테스트 시도
-> 하지만 어떠한 방법도 현실 입력 공간의 극히 일부만 커버할 수 있다는 Main challenge 발생
2) 그래서 Test Coverage가 왜 중요하다고?
딥러닝 모델 평가는 일반적으로 Test Acc 기준으로 평가된다. 하지만 테스트 세트에서의 정확도만으로는 모델 품질을 충분히 측정할 수 없다.
테스트가 신경망의 특정 경로만 사용한다면 신경망 내부의 일부 경로들은 충분히 커버되지 않았을 수 있기 때문이다.
-> 얼마나 다양하고 충분한 입력을 포함했는지 test-suite adequacy가 Test의 효과의 결과의 신뢰성을 결정한다.
- Popular structural coverage metrics ((1-2))
테스트 데이터들을 집어넣었을 때 신경망의 어디까지 커버가 되는지 볼 것이다. 이를 계산할 수 있는 Metric들에 대해 알아보자.
1) Neuron coverage # 특정 뉴런이 활성화되었는지 여부로 측정 # Statement Coverage
ReLU 기준 뉴런의 활성값이 0보다 크면 해당 뉴런은 커버되었다고 간주한다.
적어도 하나의 테스트 입력에 대해서 활성화 되면 된다. -> 활성화된 뉴런 / 전체 뉴런 = Neuron Coverage
해당 메트릭의 문제점은 테스트 계속 넣어서 한 번이라도 달성되면 커버된거라고 간주하기에... 조금만 테스트해도 너무 쉽게 100% 커버가 달성된다는 것이다.
2) Modified condition/decision coverage MC/DC for DNNs
결정에 미치는게 무엇인지 본다. 결정에 영향을 주는 모든 조건에 대해 T/F 경우의 수를 만들고, 각 원소의 영향을 본다.
ex) 1, 4 번째 Test case를 사용하면 C의 영향을 알 수 있다. 이렇게 하나만 다른 한 쌍을 써서 그 원소의 영향을 검사한다.
이걸 신경망에 적용하면 어떤 뉴런이 활성화 되는 것 자체 뿐 아니라, 단순한 뉴런이 더 복잡한 뉴런에 미치는 영향도 독립적으로 테스트 할 수 있게 된다.
3) Evaluation of structural coverage metrics
4) Is coverage enough?
높은 정확도 ≠ 안전한 모델 -> 커버리지는 모델의 내부 다양성/안전성을 평가하는 데 꼭 필요하다.
2. Formal verification
1) What is formal verification?
소프트웨어가 정확하게 동작함을 수학적으로 증명하는 접근 방식. 기존 테스트와 달리 모든 가능한 경우를 포괄적으로 검증할 수 있다. 오류 발생 시 치명적인 시스템에 사용된다.
왜 그냥 테스트하면되지 verification할까? 테스트는 전수검사를 하지 않으면 놓칠 수 있는 경우가 존재한다는 한계가 명확하기 때문이다. 그렇기에 formal verification이 필요하다.
소프트웨어에 적용하는 방법은 다음과 같다.
1. 먼저 시스템의 수학적 모델을 만든다. 부정확한 모델은 오히려 오류를 감추거나 새로운 버그를 발생시킬 수 있다.
2. 시스템이 가져야할 속성을 수학적으로 명세한다.
3. 그 모델이 해당 속성을 항상 만족함을 증명한다.
해당 과정은 모든 입력을 포함하기에 어떠한 테스트 방법보다 강력하고, 최근 이러한 검증을 자동화하고 확장성도 향상되고 있다.
2) Property verification of deep neural networks
전통적인 소프트웨어 공학 기법은 AI 모델에 바로 적용되기 어렵다. if문 등 명시적인 분기가 없기에 커버리지 등의 개념 적용 불가능
-> 어떻게 하면 AI 시스템에도 Formal Verification을 적용할 수 있을까?
3) Soundness and completeness of the verification ***
어떻게 AI 시스템에 Verification을 적용할 건지 알아볼 것이다.
Soundness: 말하는게 괜찮다.. 틀리는 걸 맞다고 하지 않는다. 즉 개소리를 안하는거지
Completeness: 완벽하게 맞는건 맞다고 말한다..
-> 둘 다 챙기려면 계산량이 너무 많아진다. 그렇기에 확장성과 실행 속도를 위해 완전성은 종종 포기하게 된다.
# Formal verification의 관점에서 soundness와 completeness 이해
직관적으로, 검증 결과가 ‘참’이면 → 모델이 항상 해당 속성을 지킬 수 있다고 믿을 수 있다.
반대로, 결과가 '거짓'이라면 → 모델이 속성을 지키지 못했다는 확실한 증거
-> Sound와 Complete가 없으면, 결과와 실제가 어긋날 수 있음
Sound한 검증은 "증명할 수 있는 건 전부 진짜 참이다"를 보장함.
Complete하다는 건 "참인 것이라면 전부 증명할 수 있어야 함"
ex) 우리가 막고 싶은 나쁜 행동 X가 있을 때, Sound하다면, X가 실제로 발생했을 때 절대 이를 허용하지 않음. Complete하다면, X가 발생하지 않는 입력은 무조건 받아줘야 함
Desirability analysis: 좋은 걸 잘 받아들이는가? 정상 입력이 들어왔을 때 이걸 정확히 통과시키는지 보고 싶다.
Violation analysis: 위험을 잘 탐지하는가? 위험한 입력이 주어졌을 때 이걸 확실히 거부하는지 보고싶다.
Soundness VS completeness
건전한[Sound] 검증은 위반 사항을 놓치는 일[False Negatives]이 없도록 보장하지만, 실제로는 위반이 발생하지 않았음에도 검증기가 거부[Reject]하는 경우, 거짓 경고[False Positives, 즉 False Alarms]는 감수할 수 있습니다.
쉽게 말해, 검증기는 시스템이 실제로는 안전한데도 위반이 있을 수 있다고 잘못 판단해 안전하지 않다고 보고할 수도 있습니다.
완전한[Complete] 검증은 거짓 경고[False Positives]를 방지하지만, 대신 위반 사항을 놓칠 수[False Negatives 있음] 있습니다. 즉, 일부 위반이 존재하지만 검증기가 이를 탐지하지 못하고,
시스템이 안전하다고 잘못 판단할 수도 있습니다.
Sound하고 Complete한 검증은 완벽한 예측을 의미하며, 이는 오직 올바른 동작만을 받아들이고[True Positives], 위반을 정확히 잡아내는[True Negatives] 상태입니다.
4) Trade-off in practice
딥 뉴럴 네트워크의 정확성을 검증하는 것은 NP-hard한 문제이다. 그렇기에 Soundness, Completeness, Termination을 동시에 만족시키는 건 매우 어렵다. -> 완전성보다는 건전성Soundness와 확장성 을 우선시한다.
cf. 조금 틀려도 되니까 위험은 절대 놓치지 말자.
-> 완전한 검증은 최악의 경우 계산 시간이 지수적으로 증가 vs 불완전한 검증은 확장성이 좋은 대신 과도한 근사로 정확도 감소
-> 정확도 손실은 레이어를 거칠수록 누적되기 때문에, 빠르게 종료되는 검증기라도, 최악의 경우에는 신경망이 견고하다는 걸 입증하지 못할 수도 있다.
'학부 수업 > Reliable AI' 카테고리의 다른 글
Correctness Properties and Their Representations (0) | 2025.04.23 |
---|