الگوریتم نامه

دنیای برنامه نویسی و هوش مصنوعی، بررسی الگوریتم های موجود، همفکری

الگوریتم نامه

دنیای برنامه نویسی و هوش مصنوعی، بررسی الگوریتم های موجود، همفکری

شبکه های عصبی چگونه کار می کنند

يكشنبه, ۲۸ آبان ۱۳۹۶، ۰۲:۱۸ ق.ظ


این مقاله الهام گرفته از ویدیوی آقای (Brandon Rohrer)، محقق در علوم داده ها است. اصل ویدیو در این آدرس
How Deep Neural Networks Work قابل دسترسی است. قصد دارم از ترجمه کلمه به کلمه مقداری فاصله بگیرم وبا مثال های بیشتر، مطلب رو قابل فهم تر کنم.


(ادامه دارد)




  • سیداحمد موسوی

اسم تکنیک: Linear Regression یا  رگرسیون خطی.


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


اول بیایم مفاهیم زیر رو در نظر بگیریم.


داده ی گسسته و پیوسته:

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

ازطرف دیگه، داده ی پیوسته با بازه سر و کار داره و بین دو نمونه داده یِ پیوسته میشه بینهایت حالت تعریف کرد. مثلا قیمت یک کالا یا دمای هوا. اساسا" داده های پیوسته عددی هستند.


رابطه ی خطی:

به زبان ساده،



  • سیداحمد موسوی

اسم الگوریتم: KNN یا ( K تا ) نزدیک ترین همسایه.


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


این الگوریتم به چه دردی خواهد خورد؟

طبقه بندی کردن کلا" برای ما مهم بوده و هست. ما غالبا" در حال طبقه بندی و مقایسه ی پدیده های دور و بر خودمون هستیم. غذای خوب، غذای شرقی، آدم حساس، فیلم تاثیر گذار..

معمولا" هروقت ما نیاز داریم یک چیزی رو طبقه بندی کنیم و ایده ای نداریم، سعی میکنیم ازمقایسه اون موضوع با داده های قبلیمون به نتیجه برسیم. منطقی به نظر میاد نه؟ موسیقی میتونه یک مثال ملموس باشه. شما با شنیدن یک آهنگی که قبلا" نشنیدید، با توجه به داده های قبلی ذهنتون سعی میکنید اونو توی یک گروه بگنجونید. میگید سنتی، یا کلاسیک یا پاپ. این که شما یک چراغ راهنمایی با شکل و شمایل کاملا" جدید رو توی یک کشور دیگه میبینید و میشناسید، دلیلش اینه که شما چراغ راهنما زیاد دیدید. بینشون به یکسری جمع بندی و نتیجه رسیدید که آها، اسمش، شکلش، جایی که معمولا" میشه اونو دید، کاربردش و غیره.


برگردیم به الگوریتم KNN و ببینیم چطور میتونه مارو کمک کنه توی طبقه بندی کردن. فرض کنید یک جعبه داریم پراز فیلم با ژانر و محتوای مختلف و از قبل مشخص شده. من به شما یک نمونه فیلم که تا به حال ندید میدم و از شما میخوام 6 تا از شبیه ترین فیلم های موجود رو برای من رو پیدا کنید. بعد توی اون 6 تا ببینید اکثرا" توی چه ژانری هستند. با این کار،من میتونم بهترین طبقه بندی رو با توجه به طبقه بندی های قبلی برای فیلمم انجام بدم.

توی این مثال، K همون 6 هست و همسایه ها، همون شبیه ترین فیلم ها.


سوال اینجاست که توی این الگوریتم، چطور فیلم جدید من با فیلم های قبلی مقایسه شد؟ روی چه حسابی 6 تا فیلم به عنوان شبیه ترین ها انتخاب شدند؟ سوال خوبیه. برای توضیح به این سوال باید یکمی برگردیم به هندسه اما نگران نباشید اگر چیزی یادتون نمیومد از فرمول ها. من خودم هم چیزی یادم نمیامد اوایل، بعد سعی کردم ازنو یاد بگیرم. طبق تعریفی که توی ویکیپیدیا اومده:


فاصلهٔ دو نقطهٔ p و q اندازهٔ پاره‌خطی‌ست که آنها را به هم متصل می‌کند (pq vector). در مختصات دکارتی اگر:


p = (p۱p۲... pn)
q = (q۱q۲,...qn)


دو نقطه در فضای اقلیدسی n بعدی باشند، آنگاه فاصلهٔ بین آنها به صورت زیر تعریف می‌شود:

فاصله اقلیدسی


برای توضیح رابطه ی بالا، بهتره برگردیم به مثال فیلم. به نظر شما چه خصوصیاتی از یک فیلم رو میشه با دیگری مقایسه کرد؟


خصوصیت

مثال

زبان

فرانسوی

کارگردان

خانوم x

نویسنده

آقای y

سال تولید

1990

مدت

90 دقیقه

تعداد هنرپیشه ستاره

4

تعداد جایزه بین المللی

7

تعداد صحنه های احساسی

2

تعداد صحنه های اکشن

10

..

 



حالا ما میتونیم همه خصوصیت های یک فیلم رو کنار هم به شکل یک بردار ببینیم و تعداد اونها فضای n بعدی ما رو تشکیل میده. یک مثال برای فضای دو بعدی میتونه به شکل زیر باشه:



p = (تعداد صحنه های احساسیتعداد صحنه های اکشن) = (1, 7)
q = (تعداد صحنه های احساسیتعداد صحنه های اکشن) = (5, 2)




دستگاه مختصات دکارت


در نتیجه طبق تعریف، اندازه پاره خط pq vector خواهد بود:


((۷-۲)2 + (۱-۵)2)1/2 = ۶.۷ cm


درواقع ما با تبدیل کردن خصوصیات فیلم به بردار، می تونیم ازریاضیات بهره ببریم و فاصله فیلم خودمون رو از فیلم های موجود توی یک دستگاه دکارتی چند بعدی (توی مثال فیلم، 9 بعدی) بدست بیاریم. 

  • سیداحمد موسوی

استشمامِ ساختار نرم افزار و سورس کد.

جمعه, ۲۰ ارديبهشت ۱۳۹۲، ۰۲:۳۱ ب.ظ

افزودن تصویر از طریق آدرس


حذف لینک

سلام به همه دوستان.

در این مقاله قصد دارم به یکی از دغدغه های اصلی برنامه نویس ها، مدیران و حتی کاربر های نرم افزار بپردازم.


مقدمه

توی صنعت نرم افزار، کیفیت کد همیشه یکی از نگرانی های اصلی بوده و هست. یکی از عوامل موثر برکیفیت کد، میزان استفاده از
استاندارد هاست. بد نیست اینجا از آقای Steven C. McConnell یاد کنم که به گفته مجله Software Development Magazine یکی از 3 نفریست که بیشترین تاثیر رو
روی صنعت نرم افزار داشته. این آقا کتابی داره با عنوان Code Complete که توی اون به خیلی از تمرین های خوب برنامه نویسی اشاره کرده. به علاوه، در مورد اشتباهات کلاسیک و محتمل هشدار های بجایی داده.
برگردم به بحث، مثالهایی از این استاندارد ها میتونه همین تمرین های خوب یا (Best Practices) ، الگوهای طراحی(Design patterns)، سبک های
معماری نرم افزار (Architectural styles) و غیره باشه.

  • سیداحمد موسوی

اولین پست

پنجشنبه, ۳ اسفند ۱۳۹۱، ۰۱:۲۴ ب.ظ
سلام.
امیدوارم بیشتر از اونکه یک دفترچه خاطرات سرّی درست کرده باشم، یک محیطی رو ایجاد کنم تا علاقه مندان به کامپیوتر و علوم رایانه بتونند مطالب سودمندی رو پیداکرده و مطالعه کنند و یا اینکه سر نخی برای تحقیقات بعدیشون بدست بیارند.

یادمه سال 87 من دبیرستانی بودم و سال سومی. اون سالها تدریس Quick Basic برای رشته ریاضی اجباری بود. جالبه بدونید من این درسو سه بار افتادم، طوریکه همه فارغ التحصیل شدن الا من. اما خوشبختانه، این باعث نشد که علاقم به کامپیوتر از بین بره.

مطالب زیادی تو ذهنمه که دوست دارم عنوان کنم. اما از آشفتگی وبلاگ در آینده نزدیک هم میترسم. موضوعاتی که مایلم با اونها کار رو شروع کنم، استاندارد های برنامه نویسی و قرارداد های کد نویسیه تمیز و با ساختاره. بعد میپردازیم به ویژوال استودیو، بررسی محیط برنامه نویسیش. بعد هم ببینیم چی پیش خواهد آمد.

موفق و موید باشید.
موسوی
12/2/2013



  • سیداحمد موسوی