تانسور چیست؟

در علم داده و یادگیری ماشین،‏ تانسور یک آرایهٔ چندبُعدی از عددهاست. تعداد ابعادش را مرتبه و هر بُعد را یک مُد می‌نامیم: بردار تانسور مرتبهٔ یک است،‏ ماتریس تانسور مرتبهٔ دو و یک ویدیوی سیاه‌وسفید با سه بُعد ارتفاع،‏ عرض و فریم،‏ تانسور مرتبهٔ سه. وقتی مستقیم با خود تانسور کار کنیم و آن را در یک بردار بلند صاف نکنیم،‏ ساختاری که مقدارهای همسایه را به هم وصل می‌کند سالم می‌ماند.

مرتبه و مُد

در ریاضی و فیزیک،‏ تانسور بار معنایی بیشتری دارد: علاوه بر عددها،‏ قاعدهٔ تغییرشان با عوض شدن دستگاه مختصات هم جزو تعریف است. در کار با داده می‌شود این بخش را کنار گذاشت و تانسور مرتبهٔ N را آرایه‌ای با N اندیس دانست. یک عدد تنها مرتبهٔ صفر دارد.

یک مثال ملموس: ویدیوی سی‌ثانیه‌ای سیاه‌وسفید با ۲۵ فریم در ثانیه و ابعاد ۷۶۸ در ۵۷۶ پیکسل،‏ تانسوری به ابعاد ۵۷۶×۷۶۸×۷۵۰ است. مُد اول ارتفاع است،‏ مُد دوم عرض و مُد سوم زمان،‏ و هرکدام از ۷۵۰ فریم ۴۴۲٬۳۶۸ عدد دارد. اگر کانال‌های رنگ را هم نگه داریم،‏ همین ویدیو تانسوری مرتبهٔ چهار می‌شود.

فیبر

اگر همهٔ اندیس‌ها جز یکی را ثابت نگه داریم،‏ یک فیبر به دست می‌آید که یک بردار است. تانسور مرتبهٔ سه،‏ سه نوع فیبر دارد: فیبر ستونی در راستای مُد اول،‏ فیبر سطری در راستای مُد دوم و فیبر تیوبی در راستای مُد سوم. در مثال ویدیو،‏ فیبر تیوبی یعنی یک پیکسل که در طول زمان دنبالش می‌کنیم؛‏ دقیقاً همان رابطه‌ای که برداری‌سازی از هم می‌پاشد.

اسلایس

اگر همهٔ اندیس‌ها جز دوتا را ثابت نگه داریم،‏ یک اسلایس داریم که یک ماتریس است. برای ویدیو،‏ اسلایس‌های روبه‌رو طبیعی‌ترین انتخاب‌اند،‏ چون هرکدام یک فریم است. اسلایس‌های افقی و جانبی همان بلوک داده را از دو جهت دیگر برش می‌زنند.

اسلایس‌های افقی یک تانسور مرتبهٔ سه   اسلایس‌های جانبی یک تانسور مرتبهٔ سه
اسلایس‌های افقی (راست) و جانبی (چپ) یک تانسور.

اسلایس جانبی بعدتر به کار می‌آید. وقتی در پایان‌نامه‌ام تصویرها را با t-SVD و tc-SVD طبقه‌بندی کردم،‏ هر تصویر یک اسلایس جانبی از تانسور داده بود؛‏ پس مُد دوم اندیس نمونه‌ها بود و هر تصویر شکل دوبُعدی‌اش را حفظ می‌کرد.

ماتریسی‌سازی

ماتریسی‌سازی،‏ یا باز کردن تانسور،‏ فیبرهای مُد n را به‌عنوان ستون‌های یک ماتریس کنار هم می‌چیند؛‏ این ماتریس را با ‎X(n)‎ نشان می‌دهیم. برای تانسوری با ابعاد I1×I2×I3،‏ ماتریس ‎X(1)‎ ابعاد I1×I2I3 دارد،‏ ‎X(2)‎ ابعاد I2×I1I3 و ‎X(3)‎ ابعاد I3×I1I2.

مثلاً تانسوری ۳×۴×۲ اگر در راستای مُد اول باز شود،‏ ماتریسی ۳×۸ می‌شود: دو اسلایس روبه‌رو کنار هم. در راستای مُد دوم ماتریسی ۴×۶ به دست می‌آید که از ترانهادهٔ اسلایس‌ها ساخته شده است. هیچ عددی دور ریخته نمی‌شود؛‏ هر ماتریسی‌سازی فقط نمای دیگری از همان داده است و راهی برای سپردن کار به ابزارهای ماتریسی آشنا،‏ مثل SVD. کتابخانه‌ها ستون‌ها را با ترتیب‌های متفاوتی می‌چینند،‏ پس پیش از مقایسهٔ خروجی دو کد،‏ قرارداد هرکدام را بررسی کنید.

ضرب مُد n

ضرب مُد n همهٔ فیبرهای مُد n یک تانسور را در یک ماتریس ثابت ضرب می‌کند. اگر X ابعاد I1×…×IN داشته باشد و U ماتریسی J×In باشد،‏ حاصل همان ابعاد X را دارد،‏ با این تفاوت که In جایش را به J می‌دهد. در شکل ماتریسی‌شده،‏ این فقط یک ضرب ماتریسی است:

Y = X ×n U   ⇔   Y(n) = U X(n)

اگر J از In کوچک‌تر باشد،‏ مُد n کوچک می‌شود و بقیهٔ مُدها دست‌نخورده می‌مانند؛‏ در پایان‌نامه این را با کاهش مُد دوم یک تانسور از ۸ به ۲ نشان داده‌ام. اگر سطرهای U متعامد یکه باشند،‏ هر فیبر مُد n روی J جهت تصویر می‌شود؛‏ یعنی همتای تانسوری تصویر کردن داده روی مؤلفه‌های اصلی در PCA. تجزیهٔ تاکر و HOSVD از همین یک عملیات ساخته شده‌اند.

چرا داده را صاف نکنیم؟

صاف کردن تانسور در قالب بردار دو هزینهٔ جدا دارد.

  • ساختار از دست می‌رود. دو پیکسل کنار هم در تصویر ممکن است در بردار صدها خانه از هم فاصله بگیرند و یک پیکسل در دو فریم پشت‌سرهم از این هم دورتر بیفتد. مدل باید رابطه‌هایی را از نو یاد بگیرد که آرایه از اول مجانی در اختیارش گذاشته بود.
  • برای هر بُعد هزینه می‌دهیم. بردار بلند یعنی فضای ویژگی بزرگ. اگر تعداد نمونه‌های آموزشی ثابت بماند،‏ از جایی به بعد اضافه کردن ویژگی پیش‌بینی را بدتر می‌کند؛‏ این همان پدیدهٔ هیوز (۱۹۶۸) است و یکی از چهره‌های چیزی که بلمن «نفرین ابعاد» نامید. هزینهٔ محاسبه هم پشت سرش می‌آید: آموزش SVM کرنلی برای m نمونه تقریباً ‎O(m³)‎ زمان و ‎O(m²)‎ حافظه می‌گیرد و PCA یا رگرسیون خطی برای n ویژگی حدود ‎O(mn² + n³)‎.

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

قدم بعدی

در مقایسهٔ CP،‏ تاکر و t-SVD می‌بینید هر تجزیه با این قطعه‌ها چه می‌کند و راهنمای t-SVD تجزیه‌ای را توضیح می‌دهد که پایان‌نامه‌ام روی آن بنا شد. اگر توضیح مفصل‌تری با همان مثال ویدیو و کد NumPy برای ماتریسی‌سازی و ضرب مُد n می‌خواهید،‏ قسمت اول یادداشت‌های تانسوری را بخوانید.

پرسش‌های رایج

آیا تانسور همان آرایهٔ چندبُعدی است؟

در علم داده و یادگیری ماشین بله: تانسور آرایه‌ای با N اندیس است و N مرتبهٔ آن است. در ریاضی و فیزیک،‏ تانسور قاعدهٔ تغییرش با عوض شدن دستگاه مختصات را هم با خودش دارد.

فرق فیبر و اسلایس چیست؟

فیبر همهٔ اندیس‌ها جز یکی را ثابت نگه می‌دارد و یک بردار است،‏ مثل یک پیکسل در طول همهٔ فریم‌های ویدیو. اسلایس همهٔ اندیس‌ها جز دوتا را ثابت نگه می‌دارد و یک ماتریس است،‏ مثل یک فریم.

ماتریسی‌سازی تانسور یعنی چه؟

ماتریسی‌سازی فیبرهای مُد n را به‌عنوان ستون‌های یک ماتریس کنار هم می‌چیند. هیچ مقداری از دست نمی‌رود و نتیجه را می‌شود به ابزارهای ماتریسی مثل SVD سپرد.

ضرب مُد n به چه کاری می‌آید؟

ضرب مُد n همهٔ فیبرهای مُد n را در یک ماتریس ثابت ضرب می‌کند و فقط اندازهٔ همان مُد را تغییر می‌دهد. این عملیات سنگ‌بنای تجزیهٔ تاکر و HOSVD است.

چرا تصویر یا ویدیو را به بردار تبدیل نکنیم؟

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

در همین بخش

راهنمای تانسور