Filter by دسته‌ها
chatGTP
ابزارهای هوش مصنوعی
اخبار
گزارش
تیتر یک
چندرسانه ای
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
دانش روز
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
رویدادها
جیتکس
کاربردهای هوش مصنوعی
کتابخانه
اشخاص
شرکت‌های هوش مصنوعی
محصولات و مدل‌های هوش مصنوعی
مفاهیم
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
مقاله
 ROCKET ؛ دسته‌بندی سریع و دقیق سری‌های زمانی

ROCKET ؛ دسته‌بندی سریع و دقیق سری‌های زمانی

زمان مطالعه: 3 دقیقه

اکثر روش‌های دسته‌بندی سری‌های زمانی که با دقتی در سطح دقت آخرین پیشرفت‌های علمی (یا به عبارتی SOTA) ایجاد شده‌اند، سطح محاسباتی بسیار پیچیده و مقیاس‌پذیری پایینی دارند. به عبارت دیگر فرآیند آموزش آنها روی دیتاست‌های کوچک کُند است و در دیتاست‌های بزرگ کاملاً بلااستفاده‌ هستند. روش ROCKET (که مخفف RandOM Convolutional KErnal Transform است) می‌تواند همین عملیات را در کسری از ثانیه با دقتی برابر با دقت الگوریتم‌‌های محاسباتی  SOTA از جمله شبکه‌های عصبی کانولوشن انجام دهد. معیار ارزیابی این الگوریتم‌ها دیتاستِ استاندارد موجود در آرشیو UCR است.

رویکرد ROCKET ابتدا دیتاست سری‌زمانی را با کمک کرنل‌های تصادفی کانولوشن، از جمله مواردی که در شبکه‌های عصبی کانولوشن مورد استفاده قرار می‌گیرند، تغییر شکل می‌دهد و سپس با استفاده از این ویژگی‌ها، یک دسته‌بند خطی را آموزش می‌دهد.

سرعت ROCKET چقدر است؟ آموزش و در پی آن تستِ ROCKET با استانداردهای 85 دیتاست، یک ساعت و چهل دقیقه زمان می‌برد. دومین الگوریتم سریع SOTA (یعنی cBOSS) همین مسئله را ظرف 19 ساعت و 33 دقیقه انجام می‌دهد.

مقاله حاضر در ادامه به موضوعات زیر می‌پردازد:

  • دسته‌بندهای سری‌های زمانی جایگزین
  • نحوه‌ی عملکرد ROCKET
  • نمونه کدهای پایتون

دسته‌بندهای جایگزین کدامند؟

دیگر روش‌های دسته‌بندی سری‌های زمانی معمولاً سری را با کمک بازنمایی‌های معین دیگری همانند شکل، فراوانی، یا واریانس آن طبقه بندی می‌کنند. در مکانیسمی منفرد که امکان ضبط کردن ویژگی‌های مشابه بسیاری را فراهم می‌آورد، کرنل‌‌های کانولوشن ROCKET جایگزین استخراج ویژگی مهندسی شده می‌شوند.

بررسی دسته‌بندی سری‌های زمانی

یکی از ایده‌های بنیادی دسته‌بندی سری‌های زمانی، تغییر شکل آنها است. بسیاری از الگوریتم‌های معین سری‌های زمانی ترکیبی از سری‌زمانی تغییر شکل یافته و الگوریتم‌های دسته‌بندی متعارف هستند، مثل موارد موجود در sciki-learn.

روش‌های رقابتی SOTA

همه روش‌های زیر به دنبال بهبود سرعت و دقت الگوریتم‌های تعریف شده در پژوهش فوق هستند.

  • Proximity Forest اثر کلی گروهی از درخت‌های تصمیم است که با یک معیار فاصله اقلیدسی انعطاف پذیر تقسیم می‌شود.
  • TS-CHIEF با کمک معیارهای تقسیم مبتنی بر دیکشنری و مبتنی بر فواصل از روش Proximity Forest فراتر رفته است.
  • InceptionTime اثر کلی پنج شبکه عصبی کانولوشن (CNN) عمیق مبتنی بر معماری Inception است.
  • Mr-SEQL دسته‌بند خطی را برای ویژگی‌هایی اجرا می‌کند که از طریق بازنمایی نمادین سری‌های زمانی استخراج شده‌اند (SAX، SFA).
  • cBOSS، کوتاه شده‌ی عبارت contractable BOSS، نوعی دسته‌بند مبتنی بر دیکشنری است که بر مبنای تغییر شکل SAF عمل می‌کند.
  • catch22 مجموعه‌ای متشکل از 22 مبدل از پیش تعیین شده سری‌زمانی است که می‌توان آنها را به یک دسته‌بند منتقل نمود.

ROCKET چگونه اجرا می‌شود؟

ROCKET ابتدا با استفاده از کرنل‌‌های کانولوشن، سری‌زمانی را تغییر داده و سپس داده‌های تغییر یافته را به یک دسته‌بند خطی منتقل می‌کند.

کرنل کانولوشن

مقداردهی اولیه کرنل‌های کانولوشن، همانند کرنل‌های شبکه‌های عصبی کانولوشن، با طول، وزن‌، انحراف، انبساط، و لایه گذاری‌های تصادفی صورت می‌گیرد. این پارامترها بخشی از ROCKET هستند و دیگر نیازی نیست نمونه گیری تنظیم شود. این فرآیند یک مرحله‌ای است و ROCKET  مبدلهای غیرخطی، مثل ReLU، را بر روی ویژگی‌های نهایی پیاده نمی کند.

تعدادِ کرنل‌های مورد استفاده  در ROCKET بسیار زیاد است. به طور پیش‌فرض 10000 کرنل وجود دارد. هزینه‌ بسیار اندک محاسبات کانولوشن امکان استفاده از کرنل‌های فراوان در ROCKET را فراهم آورده است و این هزینه‌های اندک ناشی از دو  دلیل عمده هستند: اول اینکه نمی‌توان وزن کرنل‌ها را به مدل “آموزش داد” و دوم اینکه این روش تنها شامل یک لایه کانولوشن می‌شود.

ROCKET، برعکس شبکه عصبی کانولوشن معمولی، می‌تواند انواع مختلف کرنل را مورد استفاده قرار ‌دهد. طول، انبساط، لایه گذاری، وزن‌، و انحراف‌های تصادفی این امکان را برای ROCKET فراهم می‌آورد تا اطلاعات وسیعی استخراج کند. به طور خاص، تنوع انبساط کرنل امکانِ ثبت الگو در تناوب‌ها و مقیاس‌های مختلف را برای ROCKET فراهم می‌آورد.

یک کرنل تصادفی کانولوشن به تنهایی در ثبت ویژگی‌های کاربردی برگرفته از سری‌زمانی ضعیف عمل می‌کند لیکن کرنل ‌های تصادفی در کنار هم می‌توانند ویژگی‌های مرتبط با طبقه بندی سری زمانی را استخراج کنند.

تغییر شکلِ کرنل  کانولوشن

هر یک از کرنل‌ها بر روی تمام سری‌های زمانی اعمال می‌شود تا یک نگاشت ویژگی ایجاد گردد. مجموع نگاشت‌های ویژگی کرنل، دو ویژگی در آن ایجاد می‌کند؛ این دو ویژگی عبارتند از: مقدار بیشینه و نسبت مقادیر مثبت.

ویژگی مقدار بیشینه مشابه حداکثر تجمع مطلق است.

نسبت مقادیر مثبت نیز حاکی از نحوه وزن دهی به انتشار یک الگو است که توسط کرنل استخراج شده است. نسبت مقادیر مثبت به دلیل داشتن سهم بسزایی در دقت بالای ROCKET، حساس‌ترین مولفه آن محسوب می‌شود.

rocket

zi برابر است با خروجی عملیات کانولوشن.

دسته‌بند خطی

در دیتاست‌های کوچک‌تر به دلیل انجام سریع اعتبار سنجی متقابلِ پارامتر منظم‌ساز و عدم دخالت هایپرپارامترهای دیگر، دسته‌بند رگرسیون ستیغی پیشنهاد می‌گردد.

زمانی که تعداد ویژگی‌ها، بیشتر از تعداد نمونه‌های آموزشی باشد، تنظیم کردن بسیار مهم خواهد بود. این امر اغلب در دیتاست‌های کوچک به چشم می‌خورد. (به طور پیش‌فرض در ROCKET 10000 کرنل و در ازای هر کرنل دو ویژگی وجود دارد، که در مجموع 20000 وِیژگی می‌شود.)

در دیتاست‌های بزرگ به دلیل مقیاس‌پذیری، رگرسیون لجستیک با گرادیان کاهشی تصادفی پیشنهاد می‌گردد.

در دیتاستهای بزرگ تعداد نمونه‌های آموزشی بسیار بیشتر از تعداد ویژگی‌های استخراج شده است.

چگونگی استفاده از ROCKET در پایتون

مبدل ROCKET در بسته پایتون sktime قابل اجرا است.

Sktime: کتابخانه‌ای یکپارچه برای سری‌های زمانی مرتبط با یادگیری ماشین

چرا؟ ابزارهای موجود به خوبی در مسائل سری‌ زمانی تعبیه نشده‌اند و به راحتی با یکدیگر ادغام نمی‌شوندروش‌های  …

نمونه کد زیر از روی نمونه کار مبدل ROCKET موجود در sktime نوشته شده است.

ابتدا بسته مورد نظر را بارگذاری کنید:

import numpy as np
from sklearn.linear_model import RidgeClassifierCV
from sktime.datasets import load_arrow_head  # univariate dataset
from sktime.transformers.series_as_features.rocket import Rocket

سپس داده آموزشی و تست را راه‌اندازی نمایید. در این نمونه، سری‌زمانی تک متغیری ArrowHead مورد استفاده قرار گرفت زیرا در دسترس بود. مبدل ROCKET بر روی داده‌های چند متغیری نیز قابل اجرا است.

X_train, y_train = load_arrow_head(split="test", return_X_y=True)
X_test, y_test = load_arrow_head(split="train", return_X_y=True)
print(X_train.shape, X_test.shape) 
>> (175, 1) (36, 1)

2

با استفاده از مبدل ROCKET داده‌های آموزشی را تغییر شکل دهید. ROCKET به طور پیش‌فرض از 10،000 کرنل استفاده می‌کند. به طور کلی، افزایش تعداد کرنلها منجر به افزایش دقت طبقه بندی می‌شود؛ با این حال افزایش دقت به قیمت افزایش زمان محاسباتی است. ROCKET حتی با وجود داشتن کرنلهای زیاد، سرعت بالایی دارد.

rocket = Rocket(num_kernels=10000, random_state=111) 
rocket.fit(X_train)
X_train_transform = rocket.transform(X_train)
X_train_transform.shape
>> (175, 20000)

یک دسته‌بند خطی sktime-learn را مقداردهی کرده و آموزش دهید . برنامه نویسان sktime‌ پیشنهاد می‌کنند برای دیتاست‌های کوچک‌تر (نمونه‌های آموزشی کمتر از 20 هزار) RidgeClassifierCV  و برای دیتاست‌های بزرگ رگرسیون لجستیک را مورد استفاده قرار دهید که با گرادیان کاهشی تصادفی SGDClassifier(loss=’log’) آموزش دیده است.

classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 10), normalize=True)
classifier.fit(X_train_transform, y_train)

در پایان، به منظور امتیاز دهی به مدل آموزش دیده و تولید پیش‌بینی‌، داده‌های تست را با کمک ROCKET تغییرشکل داده و مدل آموزش دیده را فراخوانی کنید.

X_test_transform = rocket.transform(X_test)
classifier.score(X_test_transform, y_test)
>> 0.9167

 

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]