از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه یک مدل هوش مصنوعی قابل تفسیر بسازیم – نمونه کد ساده پایتون
سرفصلهای مطلب
این روزها از هوش مصنوعی در همه جا استفاده می شود. و بسیاری از برنامه های کاربردی پیشگامانه از یادگیری ماشینی، زیر شاخه ای از هوش مصنوعی، می آیند.
در یادگیری ماشین، زمینه ای به نام یادگیری عمیق یکی از حوزه های اصلی تحقیق را نشان می دهد. بیشتر سیستمهای هوش مصنوعی جدید و واقعاً مؤثر از یادگیری عمیق زاده میشوند.
اما به طور معمول، سیستمهای هوش مصنوعی که از یادگیری عمیق به وجود میآیند، سیستمهایی کاملاً محدود و متمرکز هستند. آنها می توانند در یک منطقه بسیار خاص که برای آن ساخته شده اند از انسان ها بهتر عمل کنند.
به همین دلیل، بسیاری از پیشرفتهای جدید در هوش مصنوعی ناشی از سیستمهای تخصصی یا ترکیبی از سیستمهایی است که با هم کار میکنند.
یکی از مشکلات بزرگتر در زمینه مدلهای یادگیری عمیق، عدم تفسیرپذیری آنها است. تفسیرپذیری به معنای درک چگونگی تصمیم گیری است.
این یک مشکل بزرگ است که زمینه خاص خود را دارد که به آن هوش مصنوعی قابل توضیح میگویند. این حوزه ای است که در هوش مصنوعی متمرکز است روی تصمیمات یک مدل هوش مصنوعی را به راحتی قابل درک می کند.
در اینجا چیزی است که در این مقاله به آن خواهیم پرداخت:
- هوش مصنوعی و ظهور یادگیری عمیق
- یک مشکل بزرگ در یادگیری عمیق: عدم تفسیرپذیری
- راه حلی برای تفسیرپذیری: مدل های جعبه شیشه ای
- مثال کد: حل مشکل با هوش مصنوعی توضیح پذیر
- نتیجهگیری: KAN (شبکههای کلموگروف–آرنولد)
این مقاله روشهای ترک تحصیل یا سایر تکنیکهای منظمسازی، بهینهسازی هایپرپارامتر، معماریهای پیچیده مانند CNN، یا تفاوتهای جزئی در انواع نزول گرادیان را پوشش نمیدهد.
ما فقط در مورد اصول یادگیری عمیق، مشکل عدم تفسیرپذیری و یک مثال کد بحث خواهیم کرد.
هوش مصنوعی و ظهور یادگیری عمیق
یادگیری عمیق در هوش مصنوعی چیست؟
یادگیری عمیق زیر شاخه هوش مصنوعی است. از شبکه های عصبی استفاده می کند process الگوهای پیچیده، درست مانند استراتژی هایی که یک تیم ورزشی برای برنده شدن در یک مسابقه استفاده می کند.
هرچه شبکه عصبی بزرگتر باشد، توانایی بیشتری برای انجام کارهای عالی دارد – برای مثال ChatGPT که از پردازش زبان طبیعی برای پاسخ به سؤالات و تعامل با کاربران استفاده می کند.
برای درک واقعی اصول اولیه شبکه های عصبی – وجه اشتراک هر مدل هوش مصنوعی که آن را قادر به کار می کند – باید لایه های فعال سازی را درک کنیم.
یادگیری عمیق = آموزش شبکه های عصبی
هسته اصلی یادگیری عمیق، آموزش شبکه های عصبی است.
این بدان معناست که اساساً از داده ها برای بدست آوردن مقادیر مناسب هر نورون استفاده می کنیم تا بتوانیم آنچه را که می خواهیم پیش بینی کنیم.
شبکه های عصبی از نورون هایی تشکیل شده اند که در لایه ها سازماندهی شده اند. هر لایه ویژگی های منحصر به فردی را از داده ها استخراج می کند.
این ساختار لایه ای به مدل های یادگیری عمیق اجازه می دهد تا داده های پیچیده را تجزیه و تحلیل و تفسیر کنند.
مشکل بزرگ در یادگیری عمیق: فقدان قابلیت تفسیر
یادگیری عمیق با دستیابی به نتایج عالی در کارهای بسیار پیچیده، بسیاری از زمینه ها را متحول کرده است.
با این حال، یک مشکل بزرگ وجود دارد: عدم تفسیرپذیری
در حالی که درست است که شبکههای عصبی میتوانند عملکرد خوبی داشته باشند، اما در داخل نمیدانیم که چگونه شبکههای عصبی میتوانند به نتایج عالی دست یابند.
به عبارت دیگر، ما می دانیم که آنها با وظایفی که به آنها می دهیم خیلی خوب عمل می کنند، اما نه اینکه چگونه آنها را با جزئیات انجام می دهند.
این مهم است که بدانیم مدل در زمینه هایی مانند مراقبت های بهداشتی و رانندگی خودمختار چگونه فکر می کند.
با درک اینکه یک مدل چگونه فکر میکند، میتوانیم به قابلیت اطمینان آن در بخشهای حیاتی خاص اطمینان بیشتری داشته باشیم.
بنابراین مدلهایی که در زمینههایی با مقررات سختگیرانه کار میکنند نسبت به قانون شفافتر هستند و وقتی قابل تفسیر هستند اعتماد بیشتری ایجاد میکنند.
مدل هایی که امکان تفسیر را فراهم می کنند نامیده می شوند مدل های جعبه شیشه ای. از طرفی مدل هایی که این قابلیت را ندارند (یعنی اکثرا) نامیده می شوند مدل های جعبه سیاه
راه حلی برای تفسیرپذیری: مدل های جعبه شیشه ای
مدل های جعبه شیشه ای
مدلهای جعبه شیشهای، مدلهای یادگیری ماشینی هستند که برای درک آسان برای انسان طراحی شدهاند.
مدل های جعبه شیشه ای بینش روشنی در مورد روش تصمیم گیری آنها ارائه می دهد.
این شفافیت در تصمیم گیری process برای اعتماد، انطباق و بهبود مهم است.
در زیر نمونه کد یک مدل هوش مصنوعی را خواهیم دید که بر اساس آن است روی یک مجموعه داده برای پیش بینی سرطان سینه، به دقت 97٪ دست می یابد.
ما همچنین پیدا خواهیم کرد، بر اساس روی ویژگی های داده ها که در پیش بینی سرطان اهمیت بیشتری داشتند.
مدل های جعبه سیاه
علاوه بر مدل های جعبه شیشه ای، مدل های جعبه سیاه نیز وجود دارد.
این مدلها اساساً معماریهای شبکه عصبی متفاوتی هستند که در مجموعه دادههای مختلف استفاده میشوند. چند نمونه عبارتند از:
- CNN (شبکه های عصبی کانولوشنال): به طور خاص برای طبقه بندی و تفسیر تصاویر طراحی شده است.
- RNN (شبکه های عصبی مکرر) و LSTM (حافظه کوتاه مدت بلندمدت): عمدتاً برای داده های متوالی – متن و داده های سری زمانی استفاده می شود. در سال 2017، معماری شبکه عصبی به نام ترانسفورماتور در مقاله ای به نام Attention is all you Need از آنها پیشی گرفت.
- معماری های مبتنی بر ترانسفورماتور: در سال 2017 هوش مصنوعی را به دلیل توانایی آنها در مدیریت کارآمدتر داده های متوالی متحول کرد. RNN و LSTM در این زمینه قابلیت های محدودی دارند.
امروزه اکثر مدل ها که process متن مدل های مبتنی بر ترانسفورماتور هستند.
به عنوان مثال، در ChatGPT، GPT مخفف ترانسفورماتور از پیش آموزش دیده مولد، یک معماری شبکه عصبی ترانسفورماتور را نشان می دهد که متن را تولید می کند.
همه این مدلها – CNN، RNN، LSTM و Transformers – نمونههایی از هوش مصنوعی باریک (AI) هستند.
به نظر من، دستیابی به هوش عمومی شامل ترکیب بسیاری از این مدلهای باریک هوش مصنوعی برای تقلید از رفتار انسان است.
مثال کد: حل مسئله با هوش مصنوعی قابل توضیح
در این مثال کد، یک مدل هوش مصنوعی قابل تفسیر بر اساس ایجاد خواهیم کرد روی 30 ویژگی
همچنین می آموزیم که بر اساس 5 ویژگی که در تشخیص سرطان سینه اهمیت بیشتری دارند، چیست روی این مجموعه داده
ما از یک مدل جعبه شیشه ای یادگیری ماشینی به نام ماشین تقویت کننده توضیحی استفاده خواهیم کرد
این کد زیر است که در زیر بلوک به بلوک را مشاهده خواهیم کرد:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from interpret.glassbox import ExplainableBoostingClassifier
import matplotlib.pyplot as plt
import numpy as np
# Load a sample dataset
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)
# Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train an EBM model
ebm = ExplainableBoostingClassifier()
ebm.fit(X_train, y_train)
# Make predictions
y_pred = ebm.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
# Interpret the model
ebm_global = ebm.explain_global(name="EBM")
# Extract feature importances
feature_names = ebm_global.data()['names']
importances = ebm_global.data()['scores']
# Sort features by importance
sorted_idx = np.argsort(importances)
sorted_feature_names = np.array(feature_names)[sorted_idx]
sorted_importances = np.array(importances)[sorted_idx]
# Increase spacing between the feature names
y_positions = np.arange(len(sorted_feature_names)) * 1.5 # Increase multiplier for more space
# Plot feature importances
plt.figure(figsize=(12, 14)) # Increase figure height if necessary
plt.barh(y_positions, sorted_importances, color="skyblue", align='center')
plt.yticks(y_positions, sorted_feature_names)
plt.xlabel('Importance')
plt.title('Feature Importances from Explainable Boosting Classifier')
plt.gca().invert_yaxis()
# Adjust spacing
plt.subplots_adjust(left=0.3, right=0.95, top=0.95, bottom=0.08) # Fine-tune the margins if needed
plt.show()
خوب، حالا بیایید آن را تجزیه کنیم.
واردات کتابخانه ها
اول، ما import کتابخانه هایی که برای نمونه خود به آن نیاز داریم. با کد زیر می توانید این کار را انجام دهید:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from interpret.glassbox import ExplainableBoostingClassifier
import matplotlib.pyplot as plt
import numpy as np
اینها کتابخانه هایی هستند که قرار است از آنها استفاده کنیم:
- پانداها: این یک کتابخانه پایتون است که برای دستکاری و تجزیه و تحلیل داده ها استفاده می شود.
- sklearn: کتابخانه scikit-learn برای پیاده سازی الگوریتم های یادگیری ماشین استفاده می شود. ما آن را برای پیش پردازش داده ها و ارزیابی مدل وارد می کنیم.
- تفسیر: کتابخانه interpretAI Python چیزی است که ما از آن استفاده خواهیم کرد import مدلی که استفاده خواهیم کرد
- Matplotlib: یک کتابخانه پایتون که برای ایجاد نمودار در پایتون استفاده می شود.
- Numpy: برای محاسبات عددی بسیار سریع استفاده می شود.
بارگذاری، آماده سازی مجموعه داده و تقسیم داده ها
# Load a sample dataset
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target)
# Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
ابتدا یک مجموعه داده نمونه را بارگذاری می کنیم: ما import مجموعه داده سرطان پستان با استفاده از کتابخانه Interpret.
بعد، داده ها را آماده می کنیم: ویژگی ها (نقاط داده) از مجموعه داده در قالب جدولی سازماندهی می شوند که در آن هر ستون با نام ویژگی خاص برچسب گذاری می شود. نتایج هدف (برچسب ها) از مجموعه داده به طور جداگانه ذخیره می شوند.
سپس داده ها را به مجموعه های آموزشی و آزمایشی تقسیم می کنیم: داده ها به دو قسمت تقسیم می شوند: یکی برای آموزش مدل و دیگری برای تست مدل. 80٪ از داده ها برای آموزش استفاده می شود، در حالی که 20٪ برای تست ذخیره می شود.
یک دانه تصادفی خاص تنظیم شده است تا اطمینان حاصل شود که تقسیم داده ها هر بار که کد اجرا می شود سازگار است.
نکته سریع: در زندگی واقعی، مجموعه داده با تکنیک های دستکاری داده ها از قبل پردازش می شود تا مدل هوش مصنوعی سریعتر و کوچکتر شود.
آموزش مدل، پیش بینی و ارزیابی مدل
# Train an EBM model
ebm = ExplainableBoostingClassifier()
ebm.fit(X_train, y_train)
# Make predictions
y_pred = ebm.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
ابتدا یک مدل EBM را آموزش می دهیم: ما یک مدل ماشین تقویت قابل توضیح را مقداردهی اولیه می کنیم و سپس با استفاده از داده های آموزشی آن را آموزش می دهیم. در این مرحله با داده هایی که داریم مدل را ایجاد می کنیم.
به این ترتیب، با یک خط کد، مدل AI را بر اساس ایجاد می کنیم روی مجموعه داده ای که سرطان سینه را پیش بینی می کند.
سپس ما پیش بینی های خود را انجام می دهیم: از مدل EBM آموزش دیده برای پیش بینی استفاده می شود روی داده های تست بعد، محاسبه می کنیم و print دقت پیش بینی های مدل
تفسیر مدل، استخراج، و مرتب سازی اهمیت ویژگی
# Interpret the model
ebm_global = ebm.explain_global(name="EBM")
# Extract feature importances
feature_names = ebm_global.data()['names']
importances = ebm_global.data()['scores']
# Sort features by importance
sorted_idx = np.argsort(importances)
sorted_feature_names = np.array(feature_names)[sorted_idx]
sorted_importances = np.array(importances)[sorted_idx]
در این مرحله باید مدل را تفسیر کنیم: توضیح جهانی مدل آموزشدیده ماشین تقویتکننده توضیحپذیر (EBM) بدست میآید که نمای کلی از روش تصمیمگیری مدل ارائه میکند.
در این مدل، نتیجه میگیریم که دقت تقریباً 0.9736842105263158 است که به این معنی است که مدل در 97٪ مواقع دقیق است.
البته، این فقط در مورد دادههای مربوط به سرطان سینه صدق میکند این مجموعه داده – نه برای هر مورد تشخیص سرطان سینه. از آنجایی که این یک نمونه است، مجموعه داده، جمعیت کامل افرادی را که به دنبال تشخیص سرطان سینه هستند، نشان نمی دهد.
نکته سریع: در دنیای واقعی، برای طبقه بندی، از این استفاده می کنیم امتیاز F1 به جای دقت برای پیشبینی میزان دقت یک مدل به دلیل در نظر گرفتن هر دو دقت، درستی و به خاطر آوردن.
بعد، ما اهمیت ویژگی ها را استخراج می کنیم: نام و امتیازهای اهمیت مربوط به ویژگی های مورد استفاده توسط مدل را از توضیحات کلی استخراج می کنیم.
سپس ویژگی ها را بر اساس اهمیت مرتب می کنیم: ویژگی ها بر اساس مرتب شده اند روی امتیازهای اهمیت آنها، که منجر به فهرستی از نام ویژگی ها و امتیازهای اهمیت مربوطه آنها می شود که از کمترین به مهم ترین مرتب شده اند.
رسم اهمیت ویژگی
# Increase spacing between the feature names
y_positions = np.arange(len(sorted_feature_names)) * 1.5 # Increase multiplier for more space
# Plot feature importances
plt.figure(figsize=(12, 14)) # Increase figure height if necessary
plt.barh(y_positions, sorted_importances, color="skyblue", align='center')
plt.yticks(y_positions, sorted_feature_names)
plt.xlabel('Importance')
plt.title('Feature Importances from Explainable Boosting Classifier')
plt.gca().invert_yaxis()
# Adjust spacing
plt.subplots_adjust(left=0.3, right=0.95, top=0.95, bottom=0.08) # Fine-tune the margins if needed
plt.show()
اکنون باید فاصله بین نام ویژگی ها را افزایش دهیم: موقعیت نام ویژگی ها روی محور y برای افزایش فاصله بین آنها تنظیم می شود.
سپس اهمیت ویژگی ها را ترسیم می کنیم: یک نمودار نوار افقی برای تجسم اهمیت ویژگی ایجاد می شود. اندازه طرح برای اطمینان از واضح و خوانا بودن آن تنظیم شده است.
میله ها امتیازهای اهمیت ویژگی ها را نشان می دهند و نام ویژگی ها در امتداد محور y نمایش داده می شوند.
محور x طرح “اهمیت” نامگذاری شده و عنوان “اهمیت های ویژگی از طبقه بندی کننده تقویت کننده قابل توضیح” اضافه شده است. محور y معکوس شده است تا مهمترین ویژگی ها را در بالا داشته باشد.
سپس فاصله را تنظیم می کنیم: حاشیه های اطراف طرح به منظور اطمینان از فاصله مناسب و ظاهری منظم به خوبی تنظیم شده است.
در نهایت lot را نمایش می دهیم: طرح نمایش داده می شود تا اهمیت ویژگی را به طور موثر تجسم کند.
نتیجه نهایی باید به این صورت باشد:
به این ترتیب، از یک مدل هوش مصنوعی که قابل تفسیر است و دقت 97 درصدی دارد، میتوان نتیجه گرفت که پنج عامل مهم در تشخیص تومورهای سینه عبارتند از:
- بدترین نقاط مقعر
- بدترین بافت
- بدترین منطقه
- میانگین نقاط مقعر
- خطای ناحیه و بدترین تقعر
باز هم، این مطابق با مجموعه داده ارائه شده است.
بنابراین با توجه به جمعیتی که این مجموعه داده نمونه نشان میدهد، میتوان نتیجه گرفت a روش داده محور که این عوامل شاخص های کلیدی برای تشخیص تومور سرطان سینه هستند.
به این ترتیب، میتوانیم از یک مدل هوش مصنوعی، که روشها مدل را تفسیر میکنند، نتیجه بگیریم که بینشهای روشنی در مورد ویژگیهای مهم برای پیشبینی ارائه میدهد.
نتیجهگیری: KAN (شبکههای کلموگروف–آرنولد)
به لطف هوش مصنوعی قابل توضیح، میتوانیم جمعیتها را با استفاده از روشهای جدید مبتنی بر داده مطالعه کنیم.
به جای استفاده از آمار سنتی، نظرسنجیها و تجزیه و تحلیل دستی دادهها، میتوانیم با استفاده از یک کتابخانه برنامهنویسی هوش مصنوعی و یک پایگاه داده یا فایل اکسل نتیجهگیری کنیم.
اما این تنها راه برای ساخت مدل هایی با هوش مصنوعی قابل توضیح نیست.
در آوریل 1403، مقاله ای به نام KAN: Kolmogorov–Arnold Networks منتشر شد که ممکن است این حوزه را بیشتر تکان دهد.
شبکههای کولموگروف–آرنولد (KAN) قول میدهند که نسبت به مدلهای سنتی دقیقتر و قابل درکتر باشند و عملکرد بهتری داشته باشند.
همچنین تجسم و تعامل با آنها آسان تر است. بنابراین خواهیم دید که چه اتفاقی برای آنها می افتد.
شما می توانید کد کامل را در اینجا پیدا کنید:
منتشر شده در 1403-07-24 11:23:07