ماتریس‌ها و مشتق: کرونکر در سرزمین ماتریس‌ها

توسط بهروز ودادیان در ۱ بهمن ۱۳۹۷math

گفته شد که وقتی مشتق نسبت به ماتریس‌ها را مشتق نسبت به وکتورایز شده‌ی آن‌ها در نظر بگیریم (همان عملگر vec) دیگر لازم نیست با تنسورها و کووکتر و کنتراوکتورها سر و کله بزنیم. در عین حال لازم است ضرب کرونکر را از آن دنیا به این دنیا بیاوریم. ضرب کرونکر در محاسبات تنسوری، یک تنسور با ابعادی برابر با مجموع ابعاد تنسورهای ورودی‌اش ایجاد می‌کند. مثلاً ضرب کرونکر دو بردار یک ماتریس است. اما در دنیای ماتریس‌ها ضرب کرونکر صورت ساده‌تری دارد.

اگر دو ماتریس A و B داشته باشیم، ضرب کرونکر آن‌ها بصورت زیر تعریف می‌شود:

AB=[A۱۱BA۱۲BA۱mBA۲۱BA۲۲BA۲mBAn۱BAn۲BAnmB]

به عنوان مثال:

[۳۴۵۶][۱۰۰۱]=[۳۰۴۰۰۳۰۴۵۰۶۰۰۵۰۶]

این ضرب خواص زیبایی دارد که در زمینه‌ی مشتق‌گیری نسبت به ماتریس، خاصیت زیر یکی از مهمترین‌هاست:

vec(AXB)=(BTA)vec(X)

برای مثالی از کاربرد این رابطه، فرض کنید می‌خواهیم از AXB نسبت به X مشتق بگیریم:

AXBX=vec(AXB)vec(X)=(BTA)vec(X)vec(X)=(BTA)

مشتق‌های زنجیره‌ای و مشتق ضرب توابع

در دنیای اسکالرها کلی رابطه برای مشتقات وجود داشت که کار راه‌انداز بودند. این روابط به شکل‌های مشابهی در دنیای ماتریس‌ها هم برقرارند. یکی از آن رابطه‌ها، رابطه‌ی ضرب اسکالر و جمع بود که در پُست پیشین به آن اشاره کردم.

بد نیست علت برقراری آن رابطه را ببینیم:

(αA+βB)Xij=vec(αA+βB)ivec(X)j=αvec(A)ivec(X)j+βvec(B)ivec(X)j=αvec(A)ivec(X)j+βvec(B)ivec(X)j=αvec(A)vec(X)ij+βvec(B)vec(X)ij

به همین ترتیب می‌توان مشاهده کرد که مشتق زنجیره‌ای از توابع بصورت زیر قابل محاسبه است:

f(g(X))Xij=kvec(f(g(X)))ivec(g(X))kvec(g(X))kvec(X)j=(f(g(X))g(X)g(X)X)ij

و بصورت عام‌تر:

h(f(X),g(X))Xij=k(vec(h(f(X),g(X)))ivec(f(X))kvec(f(X))kvec(X)j+vec(h(f(X),g(X)))ivec(g(X))kvec(g(X))kvec(X)j)=(h(f(X),g(X))f(X)f(X)X+h(f(X),g(X))g(X)g(X)X)ij

ظاهراً کسانی که قاعده‌ی ضرب ماتریس را بصورت ضرب سطر اولی در ستون دومی تعریف کرده‌اند، بنای درستی را نهاده‌اند! همه چیز با هم جور در می‌آید.

اما در مورد ضرب دو تابع روابط چگونه‌اند؟

f(X)g(X)X=?

اگر از بررسی عنصر به عنصر مشتق خسته شده‌اید، حق دارید؛ من هم خسته شدم. برای همین از استاد کرونکر کمک می‌گیریم تا این یکی را بیابیم. اول تابع h(X,Y)=XY را در نظر می‌گیریم. مشتق این تابع نسبت به X و Y با استفاده از رابطه‌ی کرونکر بصورت زیر قابل محاسبه است:

vec(XYI)=(IX)vec(Y)XYY=(IX)vec(IXY)=(YTI)vec(X)XYX=(YTI)

با این حساب مشتق h(f(X),g(X))=f(X)g(X) می‌شود:

f(X)g(X)X=(If(X))g(X)X+(g(X)TI)f(X)X

اینکه ماتریس‌های همانی مربوط به f و g را با یک نماد نوشتم، نباید باعث شود که فرض کنید هر دو ابعاد یکسانی دارند. ماتریس I که در f(x) ضرب کرونکر می‌شود ابعادی برابر g(X) دارد و بالعکس.

نکته‌ی کوچکی هست که صحبتش را بکنیم، پرونده‌ی این پُست را بسته‌ایم. ما در مورد عملگر vec صحبت کردیم، اما در مورد اثر ترانهاده بر این عملگر چیزی نگفتیم. مثلاً وقتی بخواهیم مشتق AT را نسبت به A محاسبه کنیم:

ATA=vec(AT)vec(A)

مقدار vec(AT) چه می‌شود؟ آیا رابطه‌ای با vec(A) دارد؟ خب معلوم است که سؤال هجو پرسیده‌ام و رابطه دارند اما چه رابطه‌ای؟

برای مثال یک ماتریس ۳ در ۳ را نگاه کنیم:

vec([۱۲۳۴۵۶۷۸۹])=[۱۴۷۲۵۸۳۶۹]vec([۱۲۳۴۵۶۷۸۹]T)=[۱۲۳۴۵۶۷۸۹]

رابطه‌ی این دو ماتریس را می‌شود اینطور نوشت:

[۱۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۱۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۱۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰۰۰۰۰۰۰۱][۱۲۳۴۵۶۷۸۹]=[۱۴۷۲۵۸۳۶۹]

ماتریس‌های متشکل از یک ۱ در هر سطر، ماتریس‌های بازترتیب(permutation) هستند. کارشان این است که سطرهای بردار (یا ماتریس)ی که در آن ضرب می‌شوند را در ترتیب دیگری قرار می‌دهند. ما در جبر ماتریسی به ماتریس بازترتیبی که vec(A) را به vec(AT) تبدیل کند، ماتریس T می‌گوییم. اما چیزی که باقی مانده بود؛ مشتق ضرب کرونکر. تحوه‌ی محاسبه‌ی این یکی را بیایید بی‌خیال شویم. فقط بدانیم که مشتق ضرب کرونکر نتیجه‌ای مثل زیر دارد:

ABA=(InTqmIp)(Imnvec(B))

این دفعه ابعاد ماتریس‌های همانی و T را نوشتم چون اگر ننویسیمشان احتمال قاطی شدن همه چیز با هم بالا میرود و قیمه‌ها درون ماست‌ها میریزد. عبارت بالا با فرض آن است که A ابعادش m×n و B ابعادش p×q است.

خب، پرونده کرونکر را هم بستیم، در پست بعدی به توابعی مثل معکوس و دترمینان ماتریس خواهیم پرداخت تا در آخرین پست، چند نمونه مسأله را با این ابزارهایی که صحبتشان شد، حل کنیم.