🤖 AI/ML

AI Safety

AI 시스템의 안전성을 보장하는 연구 분야

📖 상세 설명

AI Safety(AI 안전성)는 인공지능 시스템이 의도치 않은 해를 끼치지 않도록 보장하는 연구 및 실천 분야입니다. 여기에는 적대적 공격 방어, 모델 견고성(Robustness), 프라이버시 보호, 공정성 보장, 그리고 장기적인 실존적 위험 완화까지 광범위한 주제가 포함됩니다.

AI Safety 연구는 2000년대 초 머신러닝 보안 연구에서 시작되어, 2015년 OpenAI 설립과 함께 본격화되었습니다. 2023년 미국 AI 행정명령, 2024년 EU AI Act 시행으로 규제적 중요성이 급증했으며, 영국의 AI Safety Institute, 미국의 AI Safety Institute 등 정부 기관도 설립되었습니다. 현재 이 분야 연구 투자는 연간 수십억 달러 규모로 성장했습니다.

AI Safety의 주요 연구 영역은 크게 세 가지입니다. "견고성(Robustness)"은 적대적 예제나 분포 이동(Distribution Shift)에 강한 모델을 만드는 것입니다. "해석가능성(Interpretability)"은 모델의 내부 작동을 이해하여 예상치 못한 행동을 예방하는 것입니다. "정렬(Alignment)"은 AI가 인간의 가치와 의도에 맞게 행동하도록 하는 것으로, 장기적 AI Safety의 핵심입니다.

실무에서 AI Safety는 제품 출시 전 필수 검증 과정입니다. Red Teaming으로 취약점을 사전에 발견하고, Safety Benchmark로 성능을 측정하며, 모니터링 시스템으로 배포 후 이상 행동을 탐지합니다. OpenAI, Anthropic, Google 등 주요 AI 기업들은 Safety 팀을 별도로 운영하며, 모델 출시 전 수개월간의 Safety 평가를 거칩니다.

💻 코드 예제

"""
AI Safety 기본 검증 - 입력 검증 및 출력 필터링
실제 프로덕션 환경에서 사용하는 기본 Safety 레이어
"""

import re
from typing import Tuple, List
from dataclasses import dataclass

@dataclass
class SafetyCheck:
    passed: bool
    reason: str
    severity: str  # "low", "medium", "high", "critical"

class AISafetyLayer:
    """AI 시스템의 기본 Safety 검증 레이어"""

    def __init__(self):
        # 금지 패턴 (정규식)
        self.harmful_patterns = [
            (r"(how to|ways to).*(harm|kill|hurt)", "violence", "critical"),
            (r"(create|make|build).*(bomb|weapon|explosive)", "weapons", "critical"),
            (r"(hack|bypass|crack).*(password|security|system)", "hacking", "high"),
            (r"personal.*(address|phone|ssn|credit card)", "pii_request", "high"),
        ]

        # 출력 필터링 키워드
        self.output_blocklist = [
            "I cannot provide", "I will not help", "As an AI"  # 거부 시 일관된 응답
        ]

    def check_input(self, user_input: str) -> SafetyCheck:
        """입력 안전성 검사"""
        input_lower = user_input.lower()

        for pattern, category, severity in self.harmful_patterns:
            if re.search(pattern, input_lower):
                return SafetyCheck(
                    passed=False,
                    reason=f"Blocked: {category} content detected",
                    severity=severity
                )

        # 입력 길이 제한 (DDoS 방지)
        if len(user_input) > 10000:
            return SafetyCheck(
                passed=False,
                reason="Input too long",
                severity="medium"
            )

        return SafetyCheck(passed=True, reason="OK", severity="low")

    def check_output(self, model_output: str) -> SafetyCheck:
        """출력 안전성 검사"""
        # PII 탐지 (간단한 패턴)
        pii_patterns = [
            r"\b\d{3}-\d{2}-\d{4}\b",  # SSN 형식
            r"\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b",  # 신용카드
            r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b",  # 이메일
        ]

        for pattern in pii_patterns:
            if re.search(pattern, model_output):
                return SafetyCheck(
                    passed=False,
                    reason="PII detected in output",
                    severity="high"
                )

        return SafetyCheck(passed=True, reason="OK", severity="low")

    def sanitize_output(self, output: str) -> str:
        """출력 정제 - PII 마스킹"""
        # 신용카드 마스킹
        output = re.sub(
            r"\b(\d{4})[- ]?\d{4}[- ]?\d{4}[- ]?(\d{4})\b",
            r"\1-XXXX-XXXX-\2",
            output
        )
        # 이메일 마스킹
        output = re.sub(
            r"\b([A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+\.[A-Z|a-z]{2,})\b",
            r"[EMAIL REDACTED]",
            output
        )
        return output

# 사용 예시
safety = AISafetyLayer()

# 입력 검사
test_inputs = [
    "How to make a chocolate cake?",
    "How to hack into someone's email account?",
    "Tell me about machine learning"
]

print("=== 입력 검사 ===")
for inp in test_inputs:
    result = safety.check_input(inp)
    status = "PASS" if result.passed else "BLOCK"
    print(f"[{status}] {inp[:50]}... -> {result.reason}")

# 출력 검사 및 정제
print("\n=== 출력 정제 ===")
raw_output = "Contact us at support@company.com or call 1234-5678-9012-3456"
sanitized = safety.sanitize_output(raw_output)
print(f"원본: {raw_output}")
print(f"정제: {sanitized}")

🗣️ 실무 대화 예시

AI 제품 출시 전 Safety 리뷰에서

"Red Team 테스트 결과 jailbreak 성공률이 8%입니다. 목표치인 2% 이하로 낮추려면 Constitutional AI 레이어를 강화하고, 거부 케이스에 대한 RLHF 데이터를 추가로 수집해야 합니다. 출시를 2주 연기하는 것을 권장합니다."

AI Safety 엔지니어 채용 면접에서

"저는 Adversarial Robustness 연구를 했습니다. FGSM, PGD 같은 적대적 공격에 대해 Adversarial Training을 적용하여 MNIST에서 견고성을 40%에서 85%로 향상시켰습니다. 프로덕션에서는 입력 검증과 앙상블 방어를 조합하는 것이 현실적입니다."

경영진 AI 리스크 보고에서

"EU AI Act 시행에 따라 저희 AI 채용 시스템은 고위험으로 분류됩니다. Safety 관점에서 편향 감사, 인간 감독 메커니즘, 로깅 시스템을 구축해야 하며, 예상 추가 비용은 약 5억원입니다. 준비 기간을 감안하면 지금 시작해야 합니다."

⚠️ 주의사항

⚠️
Safety vs Capability 트레이드오프

Safety 조치가 지나치면 모델이 무용지물이 됩니다(과도한 거부). 반대로 부족하면 위험합니다. 적절한 균형점을 찾아야 하며, 이를 위해 다양한 유스케이스에서 테스트가 필요합니다.

⚠️
Safety 극장(Safety Theater) 경계

표면적인 Safety 조치만 도입하고 실질적 검증 없이 "안전하다"고 주장하는 것은 위험합니다. Red Teaming, 정량적 벤치마크, 외부 감사 등 실증적 검증이 필수입니다.

⚠️
배포 후 모니터링 필수

출시 전 테스트만으로는 모든 위험을 탐지할 수 없습니다. 실제 사용자 상호작용에서 새로운 취약점이 발견되므로, 실시간 모니터링과 신속한 대응 체계가 필요합니다.

🔗 관련 용어

📚 더 배우기