داستان از اینجا شروع شد که برای مینیم کردن خطای یک مدل نیاز داشتم گرادیان خطا نسبت به پارامترهای سیستم را حساب کنم و بعد هم با استفاده از یک روش بهینهسازی بر مبنای گرادیان نقطهی بهینه را پیدا کنم. وقتی کد حساب کردن تابع هدف و مشتقاش را نوشتم و به الگوریتم بهینهسازی دادم خیلی خوب کار کرد و مدل خیلی خوبی تحویلام داد. اما یک احساس درونی به من میگفت که باید بیشتر دقت کنم، برای همین تصمیم گرفتم که گرادیان را به روش عددی هم پیدا کنم و با خروجی برنامهام مقایسه کنم. واا! احساسم درست بود، مقادیر محاسبه شده کد غلط غلوط بود. ولی اگر غلطه پش چرا مدل بدست آمده خوب کار میکند؟ یک کمی که دیباگ کردم توانستم مشکل را پیدا و حل کنم. ولی چند روز گذشته ذهنم مشغول این نکته بود که چرا یک خروجی غلط باید به جواب درست منتهی بشود؟!؟ جوابی که بهش رسیدم (بدون اثبات ریاضی) این است که :
برای رسیدن به نقطهی بهینه توسط یک الگوریتم بهینهسازی بر مبنای گرادیان، چیزی که خیلی مهم است، علامت گرادیان است و این که کجاها مقدارش صفر میشود و وجود سایر خطاها فقط زمان رسیدن به نقطهی بهینه را طولانیتر میکنند.
در حال حاضر برای قضیهبالا یک اثبات ساده پیدا کردهام، البته برای حالتی که گرادیان واقعی تابع پیوسته باشد، از گامهای خیلی کوچک استفاده کنیم، الگوریتم بهینهسازی هم فقط به مشق اول نگاه کند و کاری به مشتقهای مرتبهی بالاتر کاری نداشته باشد.
بالاخره امروز موفق شدم که با رییس کوچک (شنگول) یک قرار ملاقات بگذارم. فکر کن یک هفته بدوی و ایمیل بزنی برای یک قرار ۱۰ دقیقهای!
از یک مدت پیش شروع کردم به خارج کردن کدهام از Matlab. برای خیلی از کارهای اسکریپتی، پایتون گزینهی خیلی خوبی بود. اما خوب وقتی بحث کارهای محاسباتی و حجم بالای داده میرسه، C++/C گزینهی بسیار جذابتری میشود. یکی از انگیزههای اصلی من در استفاده از Matlab پیادهسازی و استفادهی خوب و موثر از کتابخانههای توابع BLAS/LAPACK بوده. چون بدون آنها نوشتن کدها سریع تقریبا غیر ممکن است.

اما مشکل اصلی من چی بود؟ کتابخانههای BLAS/LAPACK فقط رابط برنامهنوسی با زبان C دارند و برای همین خیلی خوشدست نیستند (سرعت در مقابل راحتی). چند باری سعی کرده بودن از رابطهایی که برای کار با ++C طراحی شدهاند استفاده کنم، اما همچنان یا کار کردن باهاشون راحت نبود و یا سرعت محاسبات را به شدت کاهش میدادند. اخیرا کتابخانهی Armadillo را پیدا کردهام و با چند بار استفاده به این نتیجه رسیدهام که گزینهی خیلی خوبیه! هم راحت است و هم سریع.
کسی نظری نداره؟ کسی از کتابخانهی مشابهی استفاده کرده که راضی باشه؟ یا کسی مشکلی در استفاده از Armadillo دیده؟
امروز یادگرفتم که چطور میشود در متن latex ابر ارجاع (hyper refrence) اضافه کرد.
\usepackage[pdftitle={Nonnegative},colorlinks=false]{hyperref}
اگر اهل مقالهنویسی و کار با latex هستید, استفاده از hyperref میتواند مقالات شما زیباتر و خواناتر بکند. امتحان کنید
برای جلوگیری از اختراع مجدد چرخ، سعی کردهم از قسمتهایی از یک برنامهی کدباز که توسط یک همکار آکادمیک فراهم شده بود، را استفاده کنم، از یک طرف کارم سریعتر انجام میشود و از طرف دیگر، گرفتار ظریفکاریهای پیادهسازی ایده از روی مقاله نمیشوم، چون اصولا ایدهی مطرح شده در مقالات کلی جزئیات داره که هیچکس حوصلهی مستندسازی آنها را ندارد و موقع پیادهسازی جد و آباد آدم رو جلوی چشماش میآورد.
حالا نمیخواهم از بلایی که سرم آمد تا ورودی/خروجیهای این برنامه را به برنامهی خودم وصل کنم، را براتون بگم. کد را که را انداختم، دیدم که این داد بیداد این کد که جونش در میآد تا اجرا بشود (دست گل جناب معزز Matlab) و یعنی رسما ۲ ماه زمان CPU نیاز داشتم تا فقط یک بار اجرایش کنم!!!! و نه تنها deadline یک کنفرانس نازنین در هاوایی را از دست دادم، بلکه درست قبل از ایران رفتنم با استاد عزیز (شنگول) یک دعوای خونین هم کردم
.
خلاصه، ناامید و دست-از-پا-درازتر نشتم و الگوریتم مورد بحث را با ++C پیادهسازی کردم (۶۰۰ برابر افزایش سرعت) و حالا یک برنامهی خوشگل و سریع دارم که داره مثل بچهی آدمیزاد کار میکند. نتیجهی اخلاقی هم اینکه زور بازو نان خوردن بهتر ز مچل شدن با کد matlab داغون مردم است.
I just found an interesting introduction for Monte Carlo Methods and their implementation in R (Springer link).
I did not read the book yet and I think it can not be a suitable reference for building a strong theoretical background. However as I scanned it for a couple of minutes, I found out that it has plenty of practical examples, and can enable you to implement many of Monte Carlo algorithms from scratch.
For more information about the introduction take a look at the recent post by Xi'an's Og
تجربه به من نشون داده که زرنگی به من نیومده و بهتر است مثل بچه آدمیزاد ( بچهی خوب آدمیزاد) سرم به کار خودم باشه، آهسته بیایم و آهسته بروم.
چند وقت پیش تصمیم گرفتم استاد محترم را دور زده و تنهایی بازی کنم. اما ظاهرا دنیا کوچکتر از آنی ،که فکر میکردم و خبر زود به استاد عزیزتر از جان رسید. خلاصه استاد محترم که سالی یک بار هم یادی از ما نمیکند، صدایم زده و رفتم توی اتاقش، قاه فاه میخنده و میگه دنیا کوچک است و من هم اس-هولتر از اون چیزیام که تو فکر میکنی. من را میگی برق از چشمهام پریده و ۳-۴ روز گذشته مثل مرغ سر بریده دارم پر پر میزنم!
برای یک پوزیشن اپلای کردم و منتظر جواباش هستم.
برای چند نفر ایمیل فرستادم و منتظر جوابشون هستم.
۵ دقیقه یک بار دارم ایمیلم را چک میکنم ببینم چه جوابی برایم میآید. میترسم آخر و عاقبتام بشود مثل سارا گلدفارب فیلم مرثیهای برای یک رویا. کلا این روزها از آن روزهایی است که دلم برای خودم میسوزد، درست مثل ماریون توی آخرین سکانس، بعد از آن شب جهنمی.
این همه را گفتم ولی اصلا قصد گله و شکایت ندارم، روند کلی زندگیام بعد از یک دورهی سختی در حال بهتر شدن است و من هم سعی میکنم شاکر باشم.
اول از همه جناب پت خریت کرده و رفته یک درس گرفته. گویا استاد هم در ابتدای کار قصد کشتن گربه دم در حجله را کرده و در اولین اقداماش یک تکلیف مرد افکن را انداخته ور دل ما بدبخت بیچارهها. پت بدبخت هم ۳ روز و ۲ شب است مدام دارد روی این تکلیف کار میکند. امروز هم قرار است یک کتابچه ۲۵ صفحهای را تقدیم استاد کنیم، باشد که مقبول افتد. مت بانو هم که حکم جلب شوهر فراری را صادر کرده و خدا بدادم برسد اگر دستش به من برسه سرم را بیخ تا بیخ میبره.
بالاخره از قدیم گفتند که سالی که نکوست از بهارش پیداست. حالا سال ما هم از ژانویه شروع شده
راستی، من به شکل عجیبی با این شخصیت PhDComics احساس همزاد پنداری میکنم. حالا اگر گفتید من در کدام موقعیت هستم؟

قهوه کافی
من حساب سالهای زندگیام را هنوز بر اساس همان اول فرودین خودمان نگه میدارم. اما چه کنم که این بازهای از زمان که ۲۰۱۰ نام گرفته بود، برای هم خیلی عجیب گذشت. نمیخواهم لفظ سیاه را برایش به کار ببرم ولی سال شیرینی هم نبود. ۲۰۱۰ برای من به شیرینی آغاز شد ولی خیلی سریع شروع به ناسازگاری کرد. توی این بازه مجبور شدم با بیماری خودم و دو نفر از اطرافیانم کنار بیایم. در قسمت حرفهای زندگیام هم آدم موفقی نبودم. فکر کنید دانشجوی PhD که در طول یک سال حتی یک مقاله هم نداشته و .. و ... . ۲۰۱۰ اواخر عمرش دوباره با من سازگار شد و شروع کرد به راه آمدن.
وبلاگ هم که بد جوری داره خاک میخوره. ۴۲-۴۳ تا پست نوشتم که اکثرشان مربوط یک بازهی کوتاه بودند و بقیه هم پستهای کوتاه برای رفع تکلیف و جلوگیری از تختهشدن در وبلاگ.
حالا باید دید که در این بازهای که ۲۰۱۱ میخوانندش، چه گلی بر سر خدمان خواهیم زد