چگونه یک مدل هوش مصنوعی قابل تفسیر بسازیم – نمونه کد ساده پایتون

این روزها از هوش مصنوعی در همه جا استفاده می شود. و بسیاری از برنامه های کاربردی پیشگامانه از یادگیری ماشینی، زیر شاخه ای از هوش مصنوعی، می آیند.
در یادگیری ماشین، زمینه ای به نام یادگیری عمیق یکی از حوزه های اصلی تحقیق را نشان می دهد. بیشتر سیستمهای هوش مصنوعی جدید و واقعاً مؤثر از یادگیری عمیق زاده میشوند.
اما به طور معمول، سیستمهای هوش مصنوعی که از یادگیری عمیق به وجود میآیند، سیستمهایی کاملاً محدود و متمرکز هستند. آنها می توانند در یک منطقه بسیار خاص که برای آن ساخته شده اند از انسان ها بهتر عمل کنند.
به همین دلیل، بسیاری از پیشرفتهای جدید در هوش مصنوعی ناشی از سیستمهای تخصصی یا ترکیبی از سیستمهایی است که با هم کار میکنند.
یکی از مشکلات بزرگتر در زمینه مدلهای یادگیری عمیق، عدم تفسیرپذیری آنها است. تفسیرپذیری به معنای درک چگونگی تصمیم گیری است.
این یک مشکل بزرگ است که زمینه خاص خود را دارد که به آن هوش مصنوعی قابل توضیح میگویند. این حوزه ای در هوش مصنوعی است که بر درک آسان تر تصمیمات یک مدل هوش مصنوعی تمرکز دارد.
در اینجا چیزی است که در این مقاله به آن خواهیم پرداخت:
هوش مصنوعی و ظهور یادگیری عمیق
یک مشکل بزرگ در یادگیری عمیق: عدم تفسیرپذیری
راه حلی برای تفسیرپذیری: مدل های جعبه شیشه ای
مثال کد: حل مشکل با هوش مصنوعی توضیح پذیر
نتیجهگیری: KAN (شبکههای کلموگروف–آرنولد)
این مقاله روشهای ترک تحصیل یا سایر تکنیکهای منظمسازی، بهینهسازی هایپرپارامتر، معماریهای پیچیده مانند CNN، یا تفاوتهای جزئی در انواع نزول گرادیان را پوشش نمیدهد.
ما فقط در مورد اصول یادگیری عمیق، مشکل عدم تفسیرپذیری و یک مثال کد بحث خواهیم کرد.
هوش مصنوعی و ظهور یادگیری عمیق

یادگیری عمیق در هوش مصنوعی چیست؟
یادگیری عمیق زیر شاخه هوش مصنوعی است. از شبکه های عصبی برای پردازش الگوهای پیچیده استفاده می کند، درست مانند استراتژی هایی که یک تیم ورزشی برای برنده شدن در یک مسابقه استفاده می کند.
هرچه شبکه عصبی بزرگتر باشد، توانایی بیشتری برای انجام کارهای عالی دارد - برای مثال ChatGPT که از پردازش زبان طبیعی برای پاسخ به سؤالات و تعامل با کاربران استفاده می کند.
برای درک واقعی اصول اولیه شبکه های عصبی – وجه اشتراک هر مدل هوش مصنوعی که آن را قادر به کار می کند – باید لایه های فعال سازی را درک کنیم.
یادگیری عمیق = آموزش شبکه های عصبی

هسته اصلی یادگیری عمیق، آموزش شبکه های عصبی است.
این بدان معناست که اساساً از داده ها برای بدست آوردن مقادیر مناسب هر نورون استفاده می کنیم تا بتوانیم آنچه را که قصد داریم پیش بینی کنیم.
شبکه های عصبی از نورون هایی تشکیل شده اند که در لایه ها سازماندهی شده اند. هر لایه ویژگی های منحصر به فردی را از داده ها استخراج می کند.
این ساختار لایه ای به مدل های یادگیری عمیق اجازه می دهد تا داده های پیچیده را تجزیه و تحلیل و تفسیر کنند.
مشکل بزرگ در یادگیری عمیق: فقدان قابلیت تفسیر

یادگیری عمیق با دستیابی به نتایج عالی در کارهای بسیار پیچیده، بسیاری از زمینه ها را متحول کرده است.
با این حال، یک مشکل بزرگ وجود دارد: عدم تفسیرپذیری
در حالی که درست است که شبکههای عصبی میتوانند عملکرد خوبی داشته باشند، اما در داخل نمیدانیم که چگونه شبکههای عصبی میتوانند به نتایج عالی دست یابند.
به عبارت دیگر، ما می دانیم که آنها با وظایفی که به آنها می دهیم خیلی خوب عمل می کنند، اما نه اینکه چگونه آنها را با جزئیات انجام می دهند.
این مهم است که بدانیم مدل در زمینه هایی مانند مراقبت های بهداشتی و رانندگی خودمختار چگونه فکر می کند.
با درک اینکه یک مدل چگونه فکر میکند، میتوانیم به قابلیت اطمینان آن در بخشهای حیاتی خاص اطمینان بیشتری داشته باشیم.
پس مدلهایی که در زمینههایی با مقررات سختگیرانه کار میکنند نسبت به قانون شفافتر هستند و وقتی قابل تفسیر هستند اعتماد بیشتری ایجاد میکنند.
مدل هایی که امکان تفسیر را فراهم می کنند، مدل های جعبه شیشه ای نامیده می شوند. از طرفی به مدل هایی که این قابلیت را ندارند (یعنی اکثرا) مدل جعبه سیاه می گویند.
راه حلی برای تفسیرپذیری: مدل های جعبه شیشه ای
مدل های جعبه شیشه ای

مدلهای جعبه شیشهای، مدلهای یادگیری ماشینی هستند که برای درک آسان برای انسان طراحی شدهاند.
مدل های جعبه شیشه ای بینش روشنی در مورد نحوه تصمیم گیری آنها ارائه می دهد.
این شفافیت در فرآیند تصمیم گیری برای اعتماد، انطباق و بهبود مهم است.
در زیر نمونه کد یک مدل هوش مصنوعی را خواهیم دید که بر اساس مجموعه داده ای برای پیش بینی سرطان سینه، دقت 97 درصد را به دست می آورد.
همچنین بر اساس آپشن های دادهها، خواهیم یافت که در پیشبینی سرطان اهمیت بیشتری داشتند.
مدل های جعبه سیاه
علاوه بر مدل های جعبه شیشه ای، مدل های جعبه سیاه نیز وجود دارد.
این مدلها اساساً معماریهای شبکه عصبی متفاوتی هستند که در مجموعه دادههای مختلف استفاده میشوند. چند نمونه عبارتند از:
CNN (شبکه های عصبی کانولوشنال) : به طور خاص برای طبقه بندی و تفسیر تصاویر طراحی شده است.
RNN (شبکههای عصبی مکرر) و LSTM (حافظه کوتاهمدت بلند مدت) : عمدتاً برای دادههای متوالی - متن و دادههای سری زمانی استفاده میشود. در سال 2017، معماری شبکه عصبی به نام ترانسفورماتور در مقاله ای به نام Attention is all you Need از آنها پیشی گرفت.
معماریهای مبتنی بر ترانسفورماتور : هوش مصنوعی را در سال 2017 به دلیل توانایی آنها در مدیریت کارآمدتر دادههای متوالی، انقلابی کرد. RNN و LSTM در این زمینه قابلیت های محدودی دارند.
امروزه بیشتر مدل هایی که متن را پردازش می کنند مدل های مبتنی بر ترانسفورماتور هستند.
به عنوان مثال، در ChatGPT، GPT مخفف Generative Pre-trained Transformer است که یک معماری شبکه عصبی ترانسفورماتور را نشان می دهد که متن را تولید می کند.
همه این مدلها - 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 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

اینها کتابخانه هایی هستند که قرار است از آنها استفاده کنیم:
Pandas : این یک کتابخانه پایتون است که برای دستکاری و تجزیه و تحلیل داده ها استفاده می شود.
sklearn : کتابخانه scikit-learn برای پیاده سازی الگوریتم های یادگیری ماشین استفاده می شود. ما آن را برای پیش پردازش داده ها و ارزیابی مدل وارد می کنیم.
تفسیر : کتابخانه InterpretAI Python چیزی است که برای وارد کردن مدلی که استفاده خواهیم کرد استفاده می کنیم.
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)

ابتدا یک مجموعه داده نمونه را بارگذاری می کنیم : یک مجموعه داده سرطان پستان را با استفاده از کتابخانه 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 را آموزش میدهیم : یک مدل ماشین تقویتکننده قابل توضیح را راهاندازی میکنیم و سپس آن را با استفاده از دادههای آموزشی آموزش میدهیم. در این مرحله با داده هایی که داریم مدل را ایجاد می کنیم.
به این ترتیب، با یک خط کد، مدل هوش مصنوعی را بر اساس مجموعه داده ای ایجاد می کنیم که سرطان سینه را پیش بینی می کند.
سپس پیشبینیهای خود را انجام میدهیم : مدل EBM آموزشدیده برای پیشبینی دادههای آزمون استفاده میشود. سپس دقت پیش بینی های مدل را محاسبه و چاپ می کنیم.
تفسیر مدل، استخراج و مرتب سازی اهمیت ویژگی
# 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 درصدی دارد، میتوان نتیجه گرفت که پنج عامل مهم در تشخیص تومورهای سینه عبارتند از:
بدترین نقاط مقعر
بدترین بافت
بدترین منطقه
میانگین نقاط مقعر
خطای ناحیه و بدترین تقعر
باز هم، این مطابق با مجموعه داده ارائه شده است.
پس با توجه به جمعیتی که این مجموعه داده نمونه نشان می دهد، می توانیم به روشی مبتنی بر داده نتیجه بگیریم که این عوامل شاخص های کلیدی برای تشخیص تومور سرطان سینه هستند.
به این ترتیب، میتوانیم از یک مدل هوش مصنوعی، که روشها مدل را تفسیر میکنند، نتیجه بگیریم که بینشهای روشنی در مورد آپشن های مهم برای پیشبینی ارائه میدهد.
نتیجهگیری: KAN (شبکههای کلموگروف–آرنولد)
به لطف هوش مصنوعی قابل توضیح، میتوانیم جمعیتها را با استفاده از روشهای جدید مبتنی بر داده مطالعه کنیم.
به جای استفاده از آمار سنتی، نظرسنجیها و تجزیه و تحلیل دستی دادهها، میتوانیم با استفاده از یک کتابخانه برنامهنویسی هوش مصنوعی و یک پایگاه داده یا فایل اکسل نتیجهگیری کنیم.
اما این تنها راه برای ساخت مدل هایی با هوش مصنوعی قابل توضیح نیست.
در آوریل 2024، مقاله ای به نام KAN: Kolmogorov–Arnold Networks منتشر شد که ممکن است عرصه را بیش از پیش تکان دهد.
شبکههای کولموگروف–آرنولد (KAN) قول میدهند که نسبت به مدلهای سنتی دقیقتر و قابل درکتر باشند و عملکرد بهتری داشته باشند.
همچنین تجسم و تعامل با آنها آسان تر است. پس خواهیم دید که چه اتفاقی برای آنها می افتد.
شما می توانید کد کامل را در اینجا پیدا کنید:
ارسال نظر