Ses Mantığı ve Monotonik Yapay Zeka Modelleri
Yayınlanan: 2022-03-11AI, görüntü tanıma, Go ve hatta poker gibi alanlarda insanüstü performans seviyelerine ulaşarak hızla inanılmaz bir varlık haline geliyor. Birçoğu yapay zekanın ve insanlığın geleceği konusunda heyecanlı. Aynı zamanda, AI'nın sinir bozucu bir kusurdan muzdarip olduğuna dair genel bir algı var: Mevcut durumunda AI, öngörülemez bir şekilde güvenilmez olabilir.
Klasik örnek, Jeopardy! IBM yapay zekası Watson'ın tahtayı kolaylıkla temizlediği IBM Challenge , yalnızca "Son Tehlike!" ABD Şehirleri kategorisinde yer alan soru : “En büyük havalimanına bir 2. Dünya Savaşı kahramanının adı verilmiş; Dünya Savaşı muharebesi için en büyük ikinci. ” Watson, "Toronto nedir?????" diye yanıtladı - şüphesini gösteren fazladan soru işaretleri (ve düşük bahis).
Bu nedenle, AI uzun süreler boyunca (aylar, yıllar, hatta on yıllar boyunca ) peri masalı benzeri performans kapasitesine sahip olsa da, her zaman birdenbire gizemli bir şekilde gaf yapacak bu rahatsız edici olasılık vardır.
Biz insanları ilgilendiren en önemli şey, yapay zekanın bir hata yapması değil, bu hatanın ne kadar "mantıksız" olacağıdır. Watson'ın durumunda, sorunun cevabını bilmeyen biri "mantıksal olarak" en azından büyük bir ABD şehrini tahmin etmeye çalışır. Kendi kendini süren arabaların henüz kamu tarafından benimsenmemesinin ana nedenlerinden birinin bu olduğuna inanıyorum: Kendi kendine giden arabalar istatistiksel olarak daha güvenli olsa bile, altta yatan yapay zekanın Watson'a benzer bir şekilde beklenmedik bir şekilde hata yapabileceğinden korkuyoruz. , ama çok daha ciddi yansımaları ile.
Bu beni meraklandırdı, doğru AI modeli bu sorunu çözebilir mi? Doğru yapay zeka, tüm yanıtlara sahip olmadığında bile kritik anlarda doğru kararlar verme yeteneğine sahip olabilir mi? Böyle bir yapay zeka, teknolojinin gidişatını değiştirebilir ve bize yapay zekanın peri masalı benzeri faydalarını sağlayabilir…
Bu soruların cevabının evet olduğuna inanıyorum. İlk prototipi monotonik makine öğrenimi modelleri olarak adlandırılan gelişmiş, mantıksal olarak daha kısıtlı modellerin kullanılmasıyla Watson'ınki gibi hataların önlenebileceğine inanıyorum. Henüz ayrıntılara girmeden, uygun monotonik AI modeliyle:
- Kendi kendini süren bir araba daha güvenli olurdu, çünkü en küçük miktarda insan sinyalinin bile algılanması, büyük miktarda başka sinyalin varlığında bile bir güvenlik protokolünü etkinleştirmek için her zaman yeterli olacaktır.
- Makine öğrenimi (ML) sistemleri, düşmanca saldırılara ve beklenmedik durumlara karşı daha sağlam olacaktır.
- Makine öğrenimi performansı daha mantıklı ve insanca anlaşılabilir olacaktır.
AI'nın hesaplama ve algoritmik gücünde büyük bir büyüme çağından AI'da incelik, etkinlik ve anlayış çağına geçtiğimize inanıyorum ve monotonik makine öğrenimi modelleri bu heyecan verici yolculuğun ilk adımıdır. Monotonik modeller, yapay zekayı daha "mantıklı" hale getirir.
Editörün notu: Makine öğreniminin temellerini anlamak için kendi ilk adımını atmak isteyen okuyucuların, Makine Öğrenimi ile ilgili giriş makalemizi okumaları önerilir.
Monotonik Yapay Zeka Modelleri Teorisi
Peki monoton model nedir? Basitçe söylemek gerekirse, monotonik bir model , artışı her zaman modelin çıktısını artırmasına yol açan bazı özelliklere ( monotonik özellikler ) sahip bir ML modelidir.
Teknik olarak...
...yukarıdaki tanımın kesin olmadığı iki yer var.
İlk olarak, buradaki özellikler monoton artandır . Ayrıca, artışı her zaman modelde bir azalmaya yol açan monoton azalan özelliklere de sahip olabiliriz. İkisi basitçe olumsuzlama ile (-1 ile çarpılarak) birbirine dönüştürülebilir.
İkinci olarak, çıktının arttığını söylediğimizde, kesin olarak arttığını kastetmiyoruz - azalmadığını kastediyoruz, çünkü çıktı aynı kalabilir.
Gerçek hayatta, birçok değişken çifti monoton ilişkiler sergiler. Örneğin:
- Bir yolculuk için gaz fiyatı, gidilen mesafede monoton bir şekilde artıyor.
- Daha iyi kredi ile kredi alma olasılığı daha yüksektir.
- Beklenen sürüş süresi trafik miktarı ile artar.
- Bir reklamın tıklanma oranıyla birlikte gelir artar.
Bu mantıksal ilişkiler yeterince açık olsa da, sınırlı veri kullanarak enterpolasyon yapan ve alan bilgisi olmayan bir ML modeli için olmayabilirler. Aslında, model onları yanlış enterpolasyon yaparak saçma ve tuhaf tahminlerle sonuçlanabilir. Bu tür bilgileri yakalayan makine öğrenimi modelleri, uygulamada daha iyi performans gösterir (fazla uydurmadan kaçınarak), hata ayıklaması daha kolaydır ve daha yorumlanabilir. Çoğu kullanım durumunda, monotonik model, bir öğrenci grubunun parçası olarak sıradan bir modelle birlikte kullanılmalıdır.
Monotonik AI modellerinin gerçekten parladığı yerlerden biri, düşmanca sağlamlıktır. Monotonik modeller, "sertleştirilmiş" makine öğrenimi modelleridir, yani düşman saldırılarına karşı dirençlidirler. Yalnızca monotonik olmayan özellikleri manipüle edebilen saldırganlar, monotonik AI modeline göre örneğin etiketini değiştiremedikleri için monotonik AI modelinden kaçamazlar.
Monotonik Yapay Zeka Modelleri için Kullanım Örnekleri
Şimdiye kadar, bu tartışma tamamen teorik olmuştur. Gerçek hayattaki bazı kullanım örneklerini tartışalım.
Örnek 1: Kötü Amaçlı Yazılım Algılama
Monotonik AI modelleri için en havalı kullanım durumlarından biri, kötü amaçlı yazılım tespitinde kullanımları olmalıdır. Windows Defender'ın bir parçası olarak uygulanan, her güncel Windows cihazında kullanıcıları kötü amaçlı yazılımlardan sessizce koruyan monoton bir model bulunur.
Bir senaryoda, kötü amaçlı yazılım yazarları, sertifika yetkililerini dolandırmak için meşru, kayıtlı işletmelerin kimliğine büründü ve kötü amaçlı yazılımlarını güvenilir sertifikalarla başarıyla dijital olarak kod imzaladı. Saf bir kötü amaçlı yazılım sınıflandırıcısı muhtemelen kod imzalamayı bir özellik olarak kullanır ve bu tür örneklerin zararsız olduğunu gösterir.
Ancak, monotonik özellikleri yalnızca kötü amaçlı yazılımı belirten özellikler olan Windows Defender'ın monotonik AI modelinde durum böyle değildir. Kötü amaçlı yazılım yazarları, kötü amaçlı yazılımlarına ne kadar "iyi huylu" içerik enjekte ederse etsin, Windows Defender'ın monotonik AI modeli, örneği yakalamaya ve kullanıcıları hasardan korumaya devam edecektir.
Red Team Hacker'lar için Machine Learning adlı kursumda, makine öğrenimi tabanlı kötü amaçlı yazılım sınıflandırıcılarından kaçınmak için çeşitli teknikler öğretiyorum. Tekniklerden biri, saf ML modellerinden kaçınmak için kötü niyetli bir örneği "iyi huylu" içerik/özelliklerle doldurmaktan ibarettir. Monotonik modeller bu saldırıya karşı dirençlidir ve kötü niyetli aktörleri, sınıflandırıcıdan kurtulma umutları varsa çok daha fazla çalışmaya zorlar.
Kullanım Örneği #2: İçerik Filtreleme
Bir ekibin okul kütüphaneleri için web'de gezinme içerik filtresi oluşturduğunu varsayalım. Monotonik bir yapay zeka modeli burada kullanmak için harika bir adaydır çünkü uygunsuz içerik barındıran bir forum aynı zamanda çok sayıda kabul edilebilir içerik içerebilir.
Saf bir sınıflandırıcı, "uygun" özelliklerin varlığını "uygun olmayan" özelliklerin varlığına karşı tartabilir. Ancak, içeriğin yalnızca küçük bir bölümünü oluştursa bile, çocuklarımızın uygunsuz içeriğe erişmesini istemediğimiz için bu olmaz.
Kullanım Örneği #3: Kendi Kendini Kullanan Araba Yapay Zekası
Kendi kendini süren bir araba algoritması oluşturduğunuzu hayal edin. Bir resme bakar ve yeşil bir ışık görür. Bir yaya da görür. Her birinin sinyalini birbirine karşı tartmalı mı? Kesinlikle hayır. Bir yayanın varlığı, arabayı durdurma kararı vermek için yeterlidir. Yayaların varlığı monoton bir özellik olarak görülmeli ve bu senaryoda monotonik bir AI modeli kullanılmalıdır.
Kullanım Örneği #4: Öneri Motorları
Öneri motorları, monotonik AI modelleri için harika bir kullanım durumudur. Genel olarak, her ürün hakkında birçok girdileri olabilir: yıldız derecelendirmesi, fiyat, inceleme sayısı vb. Yıldız derecelendirmeleri ve fiyat gibi diğer tüm girdiler eşit olduğunda, daha fazla sayıda incelemeye sahip ürünü tercih ederiz. Monotonik bir yapay zeka modeli kullanarak böyle bir mantığı uygulayabiliriz.
Örnek 5'i Kullanın: İstenmeyen Posta ve Kimlik Avı Filtreleme
Bu kullanım durumu, kötü amaçlı yazılım algılama kullanım durumuna benzer. Kötü niyetli kullanıcılar, spam filtrelerini kandırmak için spam veya kimlik avı e-postalarına iyi niyetli görünen terimler ekleyebilir. Monotonik bir AI modeli buna karşı bağışık olacaktır.
Uygulama ve Gösteri
Monotonik AI modellerinin ücretsiz olarak kullanılabilen uygulamaları söz konusu olduğunda, en iyi desteklenen üç tanesi öne çıkıyor: XGBoost, LightGBM ve TensorFlow Lattice.
Monotonic ML XGBoost Eğitimi
XGBoost, yıllarca süren deneysel araştırma ve rekabete dayalı olarak yapılandırılmış veriler üzerinde en iyi performans gösteren algoritmalardan biri olarak kabul edilir. Ayrıca XGBoost'ta monotonluk uygulanmıştır.
Monotonik ML modellerinin nasıl kullanılacağına ilişkin aşağıdaki gösterim XGBoost öğreticisi, beraberinde bir Python deposuna sahiptir.
Birkaç kitaplığı içe aktararak başlayın:
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)
Modelleyeceğimiz senaryo, bir içerik filtreleme veya kötü amaçlı yazılım veritabanıdır. Örneğin, "bilim", "tarih" ve "spor" ile ilgili içerik miktarını veya kötü amaçlı yazılım durumunda "kod imzalama" ve "tanınmış yazarlar" ile ilgili içerik miktarını benign_features
bazı iyi huylu özelliklerimiz olacaktır.
Ayrıca, örneğin, "şiddet" ve "uyuşturucular" ile ilgili içerik miktarını veya kötü amaçlı yazılım durumunda, "kripto kitaplıklarına yapılan çağrıların sayısı" ve "sayısal bir ölçüm" gibi modellenen malicious_features
sahip olacağız. bilinen bir kötü amaçlı yazılım ailesine benzerlik.”
Durumu üretici bir model aracılığıyla modelleyeceğiz. İşlevi kullanarak, rastgele, yarı iyi huylu ve yarı kötü amaçlı çok sayıda veri noktası oluşturuyoruz:
def flip(): """Simulates a coin flip.""" return 1 if random.random() < 0.5 else 0
Her veri noktası, özelliklerini rastgele oluşturacaktır. "İyi huylu" bir veri noktası, iyi huylu özellikler için daha yüksek bir önyargıya sahip olurken, "kötü amaçlı" bir veri noktası, kötü amaçlı özellikler için daha yüksek bir önyargıya sahip olacaktır.
Aşağıdaki gibi üçgen bir dağılım kullanacağız:
bins = [0.1 * i for i in range(12)] plt.hist([random.triangular(0, 1, 1) for i in range(50000)], bins)

Yukarıdaki mantığı yakalamak için bu işlevi kullanacağız:
def generate(): """Samples from the triangular distribution.""" return random.triangular(0, 1, 1)
Ardından veri setimizi oluşturmaya devam edeceğiz:
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
, rastgele oluşturulmuş özelliklerin vektörlerini içerirken, y
etiketleri içerir. Bu sınıflandırma sorunu önemsiz değildir.
İyi huylu örneklerin genellikle ilk birkaç özellikte daha fazla ağırlığa sahip olduğunu, kötü niyetli örneklerin ise son birkaç özellikte genellikle daha fazla ağırlığa sahip olduğunu görebilirsiniz.
Veriler hazırken, basit bir eğitim-test ayrımı gerçekleştirelim:
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)
Verileri XGBoost öğreticimizle kullanıma hazırlamak için bir işlev kullanacağız:
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)
Şimdi, veriler üzerinde basit (monoton olmayan) bir XGBoost modelini eğitip test edelim. Daha sonra, doğru etiketlenmiş pozitif örneklerin, doğru etiketlenmiş olumsuz örneklerin, yanlış etiketlenmiş pozitif örneklerin ve yanlış etiketlenmiş olumsuz örneklerin sayısal bir dökümünü görmek için karışıklık matrisini yazdıracağız.
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)
Sonuçlara baktığımızda, önemli bir fazla uyum olmadığını görebiliriz. Bu sonuçları monotonik modellerin sonuçlarıyla karşılaştıracağız.
Bu amaçla, monotonik bir XGBoost modelini eğitip test edelim. Monoton kısıtlamalarda ilettiğimiz sözdizimi bir dizidir ( f 0 , f 1 , …, f N ), burada her bir f i , i özelliğinin monoton olmasını isteyip istemediğimize bağlı olarak -1, 0 veya 1'den biridir. sırasıyla azalan, sınırlandırılmamış veya monotonik olarak artan. Eldeki durumda, monoton artan kötü niyetli özellikleri belirtiyoruz.
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)
Monotonik modelin performansının kısıtsız modelin performansıyla aynı olduğu açıktır.
Şimdi, bir düşman veri seti oluşturacağız. Tüm kötü niyetli örnekleri alıp, hepsini 1'e ayarlayarak iyi özelliklerini “dolduracağız”. Ardından iki modelin yan yana nasıl performans gösterdiğini göreceğiz.
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
Bunları XGBoost tarafından alınacak bir forma dönüştürelim:
dadv = prepare_for_XGBoost(X_adversarial, y_adversarial)
XGBoost öğreticimizin son adımı için iki makine öğrenimi modeli türünü test edeceğiz:
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()
Gördüğünüz gibi, monotonik AI modeli, düşman saldırılarına karşı yaklaşık 2.500 kat daha sağlamdı.
LightGBM
LightGBM'de monotonik özellikleri kullanma sözdizimi benzerdir.
TensorFlow Kafesi
TensorFlow Lattice, monotonluk kısıtlamalarının üstesinden gelmek için başka bir çerçevedir ve önceden oluşturulmuş bir dizi TensorFlow Tahmincisi ve kendi kafes modellerinizi oluşturmak için TensorFlow operatörleridir. Kafesler, çok boyutlu enterpolasyonlu arama tablolarıdır, yani bunlar, bu noktalardaki fonksiyon değerleriyle birlikte uzayda (bir ızgara gibi) eşit olarak dağıtılmış noktalardır. Google AI Blog'a göre:
“…arama tablosu değerleri, eğitim örneklerindeki kaybı en aza indirmek için eğitilir, ancak ek olarak, arama tablosundaki bitişik değerler, girdi uzayının verilen yönleri boyunca artmak üzere sınırlandırılır, bu da model çıktılarının artmasını sağlar. bu yönler. Daha da önemlisi, arama tablosu değerleri arasında enterpolasyon yaptıkları için kafes modelleri düzgündür ve tahminler sınırlıdır, bu da test süresinde sahte büyük veya küçük tahminlerden kaçınmaya yardımcı olur."
TensorFlow Lattice'in nasıl kullanılacağına ilişkin öğreticiler burada bulunabilir.
Monotonik Yapay Zeka Modelleri ve Gelecek
Cihazları kötü niyetli saldırılara karşı savunmaktan mantıklı ve faydalı restoran önerileri sunmaya kadar, monotonik AI modellerinin toplum için büyük bir nimet ve ustalaşmak için harika bir araç olduğu kanıtlanmıştır. Monotonik modeller, bizi yapay zekada yeni bir güvenlik, incelik ve anlayış çağına sokmak için buradalar. Ben de diyorum ki, işte monotonik AI modelleri, işte ilerleme.