사운드 로직 및 모노토닉 AI 모델

게시 됨: 2022-03-11

AI는 이미지 인식, 바둑, 포커와 같은 영역에서 초인적인 수준의 성능을 달성하면서 빠르게 놀라운 자산이 되었습니다. 많은 사람들이 AI와 인류의 미래에 대해 흥분하고 있습니다. 동시에 AI에는 한 가지 성가신 결함이 있다는 일반적인 인식이 있습니다. 현재 상태의 AI는 예측할 수 없을 정도로 신뢰할 수 없다는 것입니다.

고전적인 예는 Jeopardy입니다! IBM 챌린지 , IBM AI인 Watson이 보드를 쉽게 청소했지만 "Final Jeopardy!"를 놓쳤습니다. 미국 도시 범주에 속하는 질문: “가장 큰 공항은 2차 세계 대전 영웅의 이름을 따서 명명되었습니다. 제2차 세계 대전 전투에서 두 번째로 큰 규모입니다.” Watson은 "Toronto란 무엇입니까?????"라고 대답했습니다. 추가 물음표(및 낮은 내기는)는 의심을 나타냅니다.

따라서 AI가 오랜 기간(몇 개월, 몇 년, 수십 년) 동안 동화 같은 성능을 발휘할 수 있다고 해도 갑자기 갑자기 실수할 가능성이 항상 있습니다.

우리 인간에게 가장 우려되는 것은 AI가 실수를 할 것이 아니라 실수가 얼마나 "비논리적"일 것인가입니다. Watson의 경우 질문에 대한 답을 모르는 사람은 "논리적으로" 최소한 미국의 주요 도시를 추측하려고 합니다. 이것이 우리가 아직 자율 주행 자동차를 대중에게 채택하지 않은 주된 이유 중 하나라고 생각합니다. 자율 주행 자동차가 통계적으로 더 안전하더라도 기본 AI가 Watson과 유사한 의미에서 예기치 않게 실수를 하지 않을까 우려됩니다. , 그러나 훨씬 더 심각한 영향을 미칩니다.

올바른 AI 모델이 이 문제를 해결할 수 있을까? 올바른 AI가 모든 답을 가지고 있지 않더라도 중요한 순간에 건전한 결정을 내릴 수 있는 능력을 가질 수 있을까요? 그러한 AI는 기술의 발전 과정을 변화시키고 AI의 동화 같은 이점을 가능하게 할 것입니다.

나는 이 질문들에 대한 대답이 '예'라고 믿습니다. 저는 Watson과 같은 실수가 개선되고 논리적으로 제한된 모델을 사용하면 피할 수 있다고 생각합니다. 초기 프로토타입은 단조로운 기계 학습 모델 이라고 합니다. 적절한 단조로운 AI 모델을 사용하면 아직 세부 사항에 대해 설명하지 않습니다.

  • 자율주행차는 아주 작은 양의 인간 신호라도 감지하면 많은 양의 다른 신호가 있는 경우에도 항상 안전 프로토콜을 활성화하기에 충분하기 때문에 더 안전할 것입니다.
  • 머신 러닝(ML) 시스템은 적대적 공격과 예상치 못한 상황에 더 강력합니다.
  • ML 성능은 더 논리적이고 인간이 이해할 수 있습니다.

저는 우리가 AI의 계산 및 알고리즘 능력이 크게 성장하는 시대에서 AI의 기교, 효율성 및 이해의 시대로 이동하고 있다고 믿습니다. 단조로운 기계 학습 모델은 이 흥미진진한 여정의 첫 번째 단계입니다. 단조로운 모델은 AI를 보다 "논리적"으로 만듭니다.

편집자 주: ML 기본 사항을 이해하는 데 첫 걸음을 내딛고자 하는 독자는 ML에 대한 소개 기사를 읽는 것이 좋습니다.

Monotonic AI 모델 이론

그렇다면 단조 모델이란 무엇입니까? 느슨하게 말해서, 단조 모델 은 증가하면 항상 모델이 출력을 증가시키는 일부 기능 세트( 단조 기능 )가 있는 ML 모델입니다.

기술적으로...

...위의 정의가 정확하지 않은 두 곳이 있습니다.

첫째, 여기의 특징은 단조 증가 입니다. 또한 증가하면 항상 모델이 감소하는 단조 감소하는 특성을 가질 수도 있습니다. 둘은 단순히 부정(-1을 곱함)으로 서로 변환될 수 있습니다.

둘째, 출력이 증가한다고 해서 엄격하게 증가한다는 의미는 아닙니다. 출력이 동일하게 유지될 수 있기 때문에 감소하지 않는다는 의미입니다.

실생활에서 많은 변수 쌍이 단조로운 관계를 나타냅니다. 예를 들어:

  • 여행의 휘발유 가격은 주행 거리에서 단조롭게 증가합니다.
  • 신용이 좋을수록 대출을 받을 가능성이 커집니다.
  • 예상 운전 시간은 교통량에 따라 늘어납니다.
  • 광고 클릭률에 따라 수익이 증가합니다.

이러한 논리적 관계는 충분히 명확하지만 제한된 데이터를 사용하고 도메인 지식 없이 보간하는 ML 모델의 경우 그렇지 않을 수 있습니다. 사실, 모델은 그것들을 잘못 보간하여 터무니없고 엉뚱한 예측을 초래할 수 있습니다. 그러한 지식을 포착하는 기계 학습 모델 실제로 (과적합을 방지함으로써) 더 잘 수행되고 디버그하기 쉽고 해석하기 쉽습니다. 대부분의 사용 사례에서 단조 모델은 학습자 앙상블의 일부로 일반 모델과 함께 사용해야 합니다.

단조로운 AI 모델이 실제로 빛나는 한 곳은 적대적 견고성에 있습니다. Monotonic 모델은 "강화된" 머신 러닝 모델로, 적대적 공격에 저항합니다. 단조롭지 않은 기능만 조작할 수 있는 공격자는 단조로운 AI 모델에 대한 예제의 레이블을 변경할 수 없기 때문에 단조로운 AI 모델을 회피할 수 없습니다.

Monotonic AI 모델의 사용 사례

지금까지 이 논의는 전적으로 이론적이었습니다. 실제 사용 사례에 대해 논의해 보겠습니다.

사용 사례 #1: 맬웨어 감지

단조로운 AI 모델의 가장 멋진 사용 사례 중 하나는 맬웨어 감지에 사용해야 합니다. Windows Defender의 일부로 구현된 단조로운 모델은 모든 최신 Windows 장치에 존재하여 맬웨어로부터 사용자를 조용히 보호합니다.

한 시나리오에서 맬웨어 작성자는 인증 기관을 속이기 위해 합법적이고 등록된 비즈니스를 가장하여 신뢰할 수 있는 인증서로 맬웨어에 디지털 코드 서명을 성공적으로 수행했습니다. 순진한 맬웨어 분류기는 코드 서명을 기능으로 사용할 가능성이 높으며 이러한 샘플이 양성임을 나타냅니다.

그러나 Windows Defender의 단조로운 AI 모델의 경우에는 그렇지 않습니다. 단조로운 기능은 맬웨어를 나타내는 기능일 뿐입니다. 맬웨어 작성자가 자신의 맬웨어에 얼마나 많은 "양호한" 콘텐츠를 삽입하더라도 Windows Defender의 단조로운 AI 모델은 계속해서 샘플을 포착하고 사용자를 피해로부터 보호합니다.

Red Team Hackers를 위한 머신 러닝 과정에서 ML 기반 멀웨어 분류기를 피하기 위한 몇 가지 기술을 가르칩니다. 기술 중 하나는 순진한 ML 모델을 피하기 위해 악성 샘플에 "양호한" 콘텐츠/기능을 채우는 것입니다. Monotonic 모델은 이 공격에 저항하며 악의적인 행위자가 분류기를 회피할 수 있는 희망이 있는 경우 훨씬 더 열심히 일하도록 합니다.

사용 사례 #2: 콘텐츠 필터링

팀이 학교 도서관을 위한 웹 서핑 콘텐츠 필터를 구성하고 있다고 가정합니다. 부적절한 콘텐츠가 포함된 포럼에는 수용 가능한 콘텐츠가 많이 포함될 수 있으므로 단조로운 AI 모델은 여기에서 사용하기에 좋은 후보입니다.

순진한 분류기는 "부적절한" 기능의 존재에 대해 "적절한" 기능의 존재 여부를 평가할 수 있습니다. 그러나 우리는 부적절한 콘텐츠가 콘텐츠의 아주 작은 부분을 차지하더라도 우리 아이들이 부적절한 콘텐츠에 접근하는 것을 원하지 않기 때문에 그렇게 하지 않을 것입니다.

사용 사례 #3: 자율 주행 자동차 AI

자율주행차 알고리즘을 구축한다고 상상해보십시오. 그것은 이미지를보고 녹색 빛을 봅니다. 보행자도 보입니다. 서로의 신호를 비교해야 합니까? 절대적으로하지. 보행자의 존재는 차를 정지시키기로 결정하기에 충분합니다. 보행자의 존재는 단조로운 특징으로 보아야 하며 이 시나리오에서는 단조로운 AI 모델을 사용해야 합니다.

사용 사례 #4: 추천 엔진

추천 엔진은 단조로운 AI 모델의 훌륭한 사용 사례입니다. 일반적으로 별표 평점, 가격, 리뷰 수 등 각 제품에 대해 많은 입력이 있을 수 있습니다. 별점 및 가격과 같은 다른 모든 입력이 동일하면 리뷰 수가 더 많은 제품을 선호합니다. 우리는 단조로운 AI 모델을 사용하여 그러한 논리를 시행할 수 있습니다.

사용 사례 #5: 스팸 및 피싱 필터링

이 사용 사례는 맬웨어 감지 사용 사례와 유사합니다. 악의적인 사용자는 스팸 필터를 속이기 위해 스팸 또는 피싱 이메일에 무해해 보이는 용어를 삽입할 수 있습니다. 단조로운 AI 모델은 이에 영향을 받지 않습니다.

구현 및 시연

무료로 사용할 수 있는 단조로운 AI 모델 구현과 관련하여 XGBoost, LightGBM 및 TensorFlow Lattice의 세 가지가 가장 잘 지원됩니다.

Monotonic ML XGBoost 자습서

XGBoost는 수년간의 경험적 연구와 경쟁을 기반으로 구조화된 데이터에서 가장 성능이 좋은 알고리즘 중 하나로 간주됩니다. 또한 XGBoost에서 단조성을 구현했습니다.

단조로운 ML 모델을 사용하는 방법에 대한 다음 데모 XGBoost 자습서에는 Python 리포지토리가 포함되어 있습니다.

몇 가지 라이브러리를 가져와 시작합니다.

 import random import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.metrics import confusion_matrix import seaborn as sns sns.set(font_scale=1.4)

우리가 모델링할 시나리오는 콘텐츠 필터링 또는 맬웨어 데이터베이스입니다. 예를 들어 "과학", "역사" 및 "스포츠" 또는 악성 코드의 경우 "코드 서명" 및 "공인된 작성자"와 관련된 콘텐츠의 양을 모델링하는 benign_features 가 있습니다.

또한 "폭력" 및 "마약"과 관련된 콘텐츠의 양 또는 malicious_features 의 경우 "암호화 라이브러리에 대한 호출 횟수" 및 "수치 측정 알려진 맬웨어 계열과 유사합니다."

생성 모델을 통해 상황을 모델링합니다. 우리는 다음 기능을 사용하여 약 절반은 양성이고 절반은 악성인 많은 데이터 포인트를 무작위로 생성합니다.

 def flip(): """Simulates a coin flip.""" return 1 if random.random() < 0.5 else 0

각 데이터 포인트는 해당 기능을 무작위로 생성합니다. "양성" 데이터 포인트는 양성 기능에 대해 더 높은 편향을 갖는 반면 "악성" 데이터 포인트는 악성 기능에 대해 더 높은 편향을 갖습니다.

다음과 같이 삼각 분포를 사용합니다.

 bins = [0.1 * i for i in range(12)] plt.hist([random.triangular(0, 1, 1) for i in range(50000)], bins) 

계단을 닮은 데이터 포인트 분포 그래프. 0.1 ~ 0.2, 0.2 ~ 0.3 등 대부분의 버킷에는 왼쪽에 있는 것보다 약 1,000개 더 많은 데이터 포인트가 있습니다. 0에서 0.1 사이의 첫 번째는 약 500인 것으로 보입니다.

이 함수를 사용하여 위의 논리를 캡처합니다.

 def generate(): """Samples from the triangular distribution.""" return random.triangular(0, 1, 1)

그런 다음 데이터세트 생성을 진행합니다.

 m = 100000 benign_features = 5 malicious_features = 5 n = benign_features + malicious_features benign = 0 malicious = 1 X = np.zeros((m, n)) y = np.zeros((m)) for i in range(m): vec = np.zeros((n)) y[i] = flip() if y[i] == benign: for j in range(benign_features): vec[j] = generate() for j in range(malicious_features): vec[j + benign_features] = 1 - generate() else: for j in range(benign_features): vec[j] = 1 - generate() for j in range(malicious_features): vec[j + benign_features] = generate() X[i, :] = vec

X 는 무작위로 생성된 특징의 벡터를 포함하고 y 는 레이블을 포함합니다. 이 분류 문제는 사소한 것이 아닙니다.

일반적인 샘플: 양성 대 악성. 각 그래프는 0에서 1까지의 값으로 10개의 기능(0에서 9까지)을 보여줍니다. 양성 그래프에서 대부분의 기능은 0.5 미만입니다. 기능 6과 7은 0.6 이상입니다. 기능 2는 거의 0.8입니다. 기능 3은 거의 1.0입니다. 악성 그래프에서는 5, 6, 7, 8을 포함하여 10개의 기능 중 7개의 기능이 0.5 이상입니다.

양성 샘플은 일반적으로 처음 몇 가지 기능에서 더 큰 가중치를 갖는 반면 악성 샘플은 일반적으로 마지막 몇 가지 기능에서 더 큰 가중치를 갖는다는 것을 알 수 있습니다.

데이터가 준비되면 간단한 훈련-테스트 분할을 수행해 보겠습니다.

 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

함수를 사용하여 XGBoost 자습서에서 사용할 데이터를 준비합니다.

 import xgboost as xgb def prepare_for_XGBoost(X, y): """Converts a numpy X and y dataset into a DMatrix for XGBoost.""" return xgb.DMatrix(X, label=y) dtrain = prepare_for_XGBoost(X_train, y_train) dtest = prepare_for_XGBoost(X_test, y_test) dall = prepare_for_XGBoost(X, y)

이제 데이터에 대한 간단한(비단조) XGBoost 모델을 훈련하고 테스트해 보겠습니다. 그런 다음 올바르게 레이블이 지정된 긍정적인 예, 올바르게 레이블이 지정된 부정적인 예제, 잘못 레이블이 지정된 긍정적인 예제 및 잘못 레이블이 지정된 부정적인 예제의 숫자 분석을 보기 위해 혼동 행렬을 인쇄합니다.

 params = {"n_jobs": -1, "tree_method": "hist"} model_no_constraints = xgb.train(params=params, dtrain=dtrain) CM = predict_with_XGBoost_and_return_confusion_matrix( model_no_constraints, dtrain, y_train ) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Unconstrained model's training confusion matrix") plt.show() print() CM = predict_with_XGBoost_and_return_confusion_matrix( model_no_constraints, dtest, y_test ) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Unconstrained model's testing confusion matrix") plt.show() model_no_constraints = xgb.train(params=params, dtrain=dall) 

비제약 모델의 훈련 혼동 행렬, 2x2 바둑판. Y축을 "True Label"이라고 하며 상단이 0이고 하단이 1입니다. X축은 "예측 레이블"이라고 하며 왼쪽은 0이고 오른쪽은 1입니다. 색상 스케일은 0의 흰색에서 0.5의 진한 파란색으로 바뀝니다. 왼쪽 위 및 오른쪽 아래 사각형은 진한 파란색으로 각각 49.29%와 48.89%입니다. 다른 두 사각형은 모두 0.91%로 흰색에 가깝습니다. 오른쪽은 매우 유사한 차트이지만 학습이 아닌 테스트를 위한 것으로, 읽기 순서로 49.33%, 1.25%, 1.20%, 48.23%입니다.

결과를 보면 유의미한 과적합이 없음을 알 수 있습니다. 우리는 이 결과를 단조 모델의 결과와 비교할 것입니다.

이를 위해 단조로운 XGBoost 모델을 훈련하고 테스트해 보겠습니다. 단조로운 제약 조건을 전달하는 구문은 시퀀스( f 0 , f 1 , 각각 감소, 비제약 또는 단조 증가. 현재 상황에서 우리는 악성 기능을 단조 증가하도록 지정합니다.

 params_constrained = params.copy() monotone_constraints = ( "(" + ",".join([str(0) for m in range(benign_features)]) + "," + ",".join([str(1) for m in range(malicious_features)]) + ")" ) print("Monotone constraints enforced are:") print(monotone_constraints) params_constrained["monotone_constraints"] = monotone_constraints model_monotonic = xgb.train(params=params_constrained, dtrain=dtrain) CM = predict_with_XGBoost_and_return_confusion_matrix(model_monotonic, dtrain, y_train) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Monotonic model's training confusion matrix") plt.show() print() CM = predict_with_XGBoost_and_return_confusion_matrix(model_monotonic, dtest, y_test) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Monotonic model's testing confusion matrix") plt.show() model_monotonic = xgb.train(params=params_constrained, dtrain=dall) 

Monotonic AI 모델의 훈련 혼동 행렬, 2x2 바둑판. Y축을 "True Label"이라고 하며 상단이 0이고 하단이 1입니다. X축은 "예측 레이블"이라고 하며 왼쪽은 0이고 오른쪽은 1입니다. 색상 스케일은 0의 흰색에서 0.5의 진한 파란색으로 바뀝니다. 왼쪽 위 및 오른쪽 아래 사각형은 진한 파란색으로 각각 49.20%와 48.82%입니다. 오른쪽 위 및 왼쪽 아래 사각형은 각각 0.99% 및 0.98%로 흰색에 가깝습니다. 오른쪽에는 읽기 순서로 49.32%, 1.26%, 1.22% 및 48.20%로 훈련보다는 테스트에 대한 매우 유사한 차트가 있습니다.

monotonic 모델의 성능은 unconstrained 모델과 동일한 것이 분명합니다.

이제 적대적 데이터 세트를 생성할 것입니다. 악성 샘플을 모두 1로 설정하여 양성 기능을 "채울" 것입니다. 그런 다음 두 모델이 나란히 어떻게 작동하는지 볼 것입니다.

 X_adversarial = X[y == malicious] y_adversarial = len(X_adversarial) * [malicious] for i in range(len(X_adversarial)): vec = X_adversarial[i, :] for j in range(benign_features): vec[j] = 1 X_adversarial[i, :] = vec

이것을 XGBoost가 수집할 수 있는 형식으로 변환해 보겠습니다.

 dadv = prepare_for_XGBoost(X_adversarial, y_adversarial)

XGBoost 자습서의 마지막 단계에서는 두 가지 기계 학습 모델 유형을 테스트합니다.

 CM = predict_with_XGBoost_and_return_confusion_matrix( model_no_constraints, dadv, y_adversarial ) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Unconstrained model's confusion matrix on adversarial dataset") plt.show()
 CM = predict_with_XGBoost_and_return_confusion_matrix( model_monotonic, dadv, y_adversarial ) plt.figure(figsize=(12, 10)) sns.heatmap(CM / np.sum(CM), annot=True, fmt=".2%", cmap="Blues") plt.ylabel("True Label") plt.xlabel("Predicted Label") plt.title("Monotonic model's confusion matrix on adversarial dataset") plt.show() 

동일한 적대적 데이터 세트에 대한 비제약 대 단조 AI 모델의 훈련 혼동 행렬. 각각은 2x2 바둑판입니다. Y축을 "True Label"이라고 하며 상단이 0이고 하단이 1입니다. X축은 "예측 레이블"이라고 하며 왼쪽은 0이고 오른쪽은 1입니다. 색상 스케일은 0의 흰색에서 1.0의 진한 파란색으로 바뀝니다. 두 행렬의 맨 위 행에는 0.00%만 포함됩니다. 왼쪽(비제약) 행렬의 맨 아래 행은 99.99%와 0.01%를 읽는 반면, 오른쪽(단조) 행렬의 맨 아래 행은 75.81%와 24.19%를 읽습니다.

보시다시피, 단조로운 AI 모델은 적대적 공격에 대해 약 2,500배 더 강력했습니다.

라이트GBM

LightGBM에서 단조 기능을 사용하는 구문은 유사합니다.

텐서플로우 격자

TensorFlow Lattice는 단조성 제약을 해결하기 위한 또 다른 프레임워크이며 미리 빌드된 TensorFlow Estimator와 TensorFlow 연산자의 집합으로 자체 격자 모델을 빌드합니다. 격자는 다차원 보간 조회 테이블입니다. 즉, 격자와 같이 공간에 균등하게 분포된 점과 이 점의 함수 값을 의미합니다. Google AI 블로그에 따르면:

"... 룩업 테이블 값은 훈련 예제에서 손실을 최소화하도록 훈련되지만, 또한 룩업 테이블의 인접한 값은 입력 공간의 주어진 방향을 따라 증가하도록 제한되어 있으므로 모델 출력이 다음과 같이 증가합니다. 그 지시. 중요하게도, 룩업 테이블 값 사이를 보간하기 때문에 격자 모델이 매끄럽고 예측이 제한되어 테스트 시간에 거짓 크거나 작은 예측을 피하는 데 도움이 됩니다."

TensorFlow Lattice 사용 방법에 대한 자습서는 여기에서 찾을 수 있습니다.

Monotonic AI 모델과 미래

악의적인 공격으로부터 장치를 보호하는 것부터 논리적이고 유용한 레스토랑 추천 제공에 이르기까지 단조로운 AI 모델은 사회에 큰 도움이 되며 마스터하기에 훌륭한 도구임이 입증되었습니다. Monotonic 모델은 AI의 안전, 기교 및 이해의 새로운 시대로 우리를 안내합니다. 그래서 저는 단조로운 AI 모델에 대해 말하고 있습니다. 여기에는 발전이 있습니다.