<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های آرش خوئینی</title>
        <link>https://virgool.io/feed/@arashkhoeini</link>
        <description>محقق یادگیری ماشین</description>
        <language>fa</language>
        <pubDate>2026-06-22 05:15:23</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3468/avatar/37fauI.png?height=120&amp;width=120</url>
            <title>آرش خوئینی</title>
            <link>https://virgool.io/@arashkhoeini</link>
        </image>

                    <item>
                <title>من چطوری تافل ۱۱۱ گرفتم</title>
                <link>https://virgool.io/@arashkhoeini/%D9%85%D9%86-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%D8%AA%D8%A7%D9%81%D9%84-%DB%B1%DB%B1%DB%B1-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-v1y1ktrghcgm</link>
                <description>این مطلب برای اولین بار در وبلاگ شخصیم منتشر شد.تا الان چندین بار شده که تجربه خودم رو از تافل برای دوستام شفاهی توضیح دادم و مدتهاست که می‌خوام این تجربه رو اینجا کتبی بنویسم اما فرصت نمیشد. الان سعیم بر اینه که به طور نسبتا خلاصه، تجربه شخصیم از انگلیسی خوندن و امتحان تافل دادن رو اینجا بنویسم. لطفا توجه داشته باشید این‌ها تجربیات منه و روشیه که برای من کار کرد و نه معتقدم که به درد همه می‌خوره و نه ادعا دارم روش من بهترین روشه. نمره نهایی من ۱۱۱ بود. (Reading 30 – Listening 28 – Speaking 27 – Writing 26)اولین و آخرین باری که به طور جدی شروع به کلاس زبان رفتن کردم سال اول یا دوم کارشناسی بود. البته من از خیلی وقت پیش به یادگرفتن زبان انگلیسی علاقمند بودم و یه بار هم چند ماه کلاسهای «کیش» رو رفتم که تقریبا زود ولش کردم. توی دوران دبیرستان هم یکی از تفریحاتم این بود که برم میدون انقلاب تا کتابهای داستان انگلیسی سطج پایین رو بخرم و تلاش کنم که بخونمشون. یا اینکه برم دم دکه روزنامه فروشی و یه شماره تهران تایمز رو بخرم و به کلماتش نگاه کنم و مطلقا چیزی نفهمم.همه این تجربیات پراکنده و از روی علاقه بودند. تا اینکه حدودهای سال ۹۰ خودم رو ملزم کردم که برم کلاس زبان. یک سال و نیم رفتم کلاس زبان ایران-استرالیا تو میدون ولیعصر تهران که خب تجربه خوبی بود. راستش مطمئن نیستم که چیزی از اون کلاسها یاد گرفتم یا نه. ولی احتمالا تو افزایش اعتماد به نفسم و مرور گرامری که قبلا تو مدرسه یادگرفته بودیم تاثیر گذار بود. بعد از حدود یک سال نیم و وقتی همش دو ترم مونده بود تا کتاب آخر هم تموم بشه حس کردم دیگه چیزی از این کلاس‌ها یاد نمیگیرم و ادامه دادنش هدر دادن پول و وقته. همین شد که رهاش کردم.از بعد از اون تقریبا هیچوقت انگلیسی رو منظم نخوندم، اما تقریبا همیشه باهاش درگیر بودم. برای مثال تمام سعیم رو میکردم تا کتابهای رشته خودم (کامپیوتر) رو به انگلیسی بخونم، چون معتقد بودم که اینجوری بهتر یاد میگیرم. یا حتما سریالها (به خصوص سریال Friends) رو با زیرنویس انگلیسی می‌دیدم چون معتقد بودم اینجوری شوخی‌ها رو بهتر و بیشتر درک می‌کنم و بیشتر می‌خندم. در مجموع سعی می‌کردم یادگرفتن زبان رو تبدیل به یه اتفاق مستمر، ولی پراکنده، و روزمره بکنم. دلیلم هم این بود که اولا عاشق یادگرفتنش بودم، دوما تو چشم اندازی که برای آینده خودم داشتم باید به این زبان مسلط می‌شدم، و سوما می‌دونستم که بدون انگلیسی از خوندن و فهمیدن کلی محتوای خوب محروم میشم.دوران کارشناسی تموم شد و به دوران ارشد رسیدم. این دوران برای دانش زبان انگلیسی من دوران مهمی بود. در واقع دورانی بود که تو جاهای مختلف مجبور شدم که از این زبان استفاده کنم فهمیدم تلاش‌های سالهای گذشته نتیجه داده. ضمنا این اجبار باعث شد که هر روز بهتر و بهتر بشم. خیلی نمی‌خوام وارد جزییات بشم، اما کلیاتش اینه که تو این دوران بود که چندتا سفر بک‌پکی به خارج از ایران داشتم و مجبور شدم که تو هاستل‌ها با آدمهای از کشورهای مختلف معاشرت کنم و ارتباط برقرار کنم، تو این دوران بود که یه رابطه عاطفی به زبون انگلیسی داشتم و باز تو این دوران بود که دو تا مقاله به انگلیسی نوشتم. در کل این دوران کمک کرد تمام چیزهایی که بلدم رو جمع‌بندی کنم و ازشون تو موقعیت‌های مختلف استفاده کنم.تا اینکه رسیدم به نزدیک‌های اپلای و بعد از اینکه به این نتیجه رسیدم که می‌خوام برای دانشگاه‌های کانادا اپلای کنم، لازم شد که امتحان زبان بدم. تافل رو انتخاب کردم چون دوستای دیگه‌ام اکثرا تافل داده بودند و اینجوری می‌شد از اونا برای منابع راهنمایی بگیرم و چون به نظرم اومد که امتحان سرراست‌تریه. اینجوری شد که برای پنج هفته بعد تو سنتر سنجش ثبت نام کردم و تنها پنج هفته فرصت داشتم که بخونم. خیلی استرس زاست نه؟با اینکه می‌دونستم سطح زبانم بد نیستم اما استرس داشتم. اون زمان تازه دلار شده بود ۱۴ تومن و تازه امتحان تافل رسیده بود به بیشتر از ۳ میلیون تومن و  این قیمت برام هیچ جای خطایی باقی نمی‌ذاشت. باید بار اول نمره‌ای که می‌خواستم رو میاوردم. برای خودم هدف نمره ۱۱۲ رو گذاشته بودم به این ترتیب که از ریدینگ و لیسنینگ ۲۹، و از اسپیکینگ و رایتینگ ۲۶ بیارم. اولش رفتم انقلاب و دو سه تا کتابی که شنیده بودم خوبه رو خریدم. آوردم خونه و تا خود روز امتحان لاشون رو باز نکردم.من تافل رو تنها با نرم‌افزاری به اسم TPO کار کردم. زحمت این نرم‌افزار رو برادران چینی کشیدن. اینطوری که یه تعدادی آزمون تافل رو سرقت کردن و سوالاش رو در قالب این نرم‌افزار در دسترس جهانیان قرار دادن. زمانی که من از این نرم افزار استفاده کردم ۵۳ تا آزمون داشت. اما خب این تعداد دائما بیشتر میشه و ظاهرا الان به ۵۵ رسیده. در ادامه برای هر بخش تافل جداگانه روش خوندنم رو توضیح می‌دم. فقط توجه داشته باشید که این توضیحات به درد کسی می‌خوره که با ساختار امتحان آشنا باشه و تسک‌هاش رو بشناسه. برای آشنایی با این ساختار هم بهترین روش اینه که یکی از امتحان‌های نرم‌افزار TPO رو بزنید.ریدینگتقریبا می‌تونم بگم که این قوی‌ترین اسکیل من بود و خب نتیجه نهایی آزمون هم همین رو نشون داد. همونطوری که گفتم چندین سال بود که سعی می‌کردم به روش‌های مختلف با خوندن مطالب انگلیسی درگیری باشم. کتابهای درسی رو انگلیسی، کتاب‌های داستان (مثلا قبل تافل یک جلد هری پاتر رو به انگلیسی خوندم) و وبلاگ‌های انگلیسی مربوط به برنامه‌نویسی رو می‌خوندم.برای این بخش من فقط تی‌پی‌او زدم. از شماره ۲۰ تا ۵۱. اولش کل متن رو می‌خوندم و بعد به تمام سوالها جواب می‌دادم. این روش واقعا اشتباه بود و باعث میشد در مجموع سه تا ریدینگ، بین ۷ تا ۹ تا غلط داشته باشم و خیلی وقتها حتی زمان کم بیارم. بعد از چند تا TPO زدن این روش رو عوض کردم و پاراگراف به پاراگراف پیش رفتم. اینجوری که یک پاراگراف رو کامل می‌خوندم و بعد به سوالاتش جواب می‌دادم و به همین ترتیب جلو می‌رفتم. اینجوری غلط‌هام کم شد به حدود ۴ تا ۵ تا رسید.کار دیگه‌ای که من کردم و به بقیه هم توصیه می‌کنم این بود که تمام گزینه‌های سوال رو می‌خوندم، حتی اگر مطمئن بودم جواب درست چیه. دلیل کارم هم این بود که گاهی وقت‌ها بعضی جواب‌ها درست‌ترن. ضمنا گاهی وقت‌ها هم میشه با رد گزینه به جواب درست رسید. خلاصه که همیشه همه گزینه‌های این بخش رو بخونید.یه مشکل من توی این بخش سوال آخر هر ریدینگ بود. تقریبا تا هفته آخر قبل امتحان سوال آخر رو همیشه اشتباه جواب می‌دادم. کاری که هفته آخر کردم و این مشکل رو تا حدی حل کرد این بود که رد گزینه می‌کردم. یعنی یه موقع‌ها سه تا گزینه غلط رو پیدا می‌کردم و سه تای دیگه رو انتخاب!ضمنا من یه دفترچه داشتم که بعد از هر TPO تمام کلمات جدید تا جملات سخت رو توش می‌نوشتم. خیلی هم خودم رو مقید کرده بودم که حتما این دفترچه رو هفته قبل از امتحان چندین بار مرور کنم. جالب این بود که تی‌پی‌اوهای اول برای هر ریدینگ یکی دو صفحه لغت جدید پیدا می‌کردم و تو تی‌پی‌اوهای آخری رسیده بود به نصف صفحه. که هم نشون میده لغت‌ها دیگه برام جدید نبودند و هم نشون می‌ده که من دیگه از نوشتن خسته شده بودم!لیسنینگلیسنینگ من نسبتا خوبه. همونطور که اولش گفتم مدتهاست که تا جایی که ممکنه سریال‌ها و فیلم‌ها رو بدون زیرنویس یا با زیرنویس انگلیسی می‌بینم. یادمه وقتی که برای بار اول ده تا فصل سریال فرندز رو با زیرنویس انگلیسی دیدم، به خودم اومدم و دیدم که زبانم چقدر بهتر شده! در واقع بعد از دیدن این سریال بود که تونستم بدون اینکه به جمله بندی فکر کنم حرف بزنم. همین باعث شده که علاقمند بشم و فیلم‌ها و سریال‌های بیشتری رو با زیرنویس انگلیسی ببینم. از همون موقع‌ها هم پادکست انگلیسی زیاد گوش میدادم. ضمنا تو یوتیوب فیلم‌های آموزشی و درسی انگلیسی هم خیلی می‌دیدم که اینا همشون واقعا کمک‌کننده بودند.من وقتی از تی‌پی‌او ۲۰ شروع کردم مطلقا نوت برداری نمی‌کردم و هیچوقت بیشتر از ۳ تا غلط نداشتم. من تو نوت برداری ضعیفم و وقتیمی‌نویسم دیگه نمی‌تونم گوش بدم. حتی تو دانشگاه هم هیچوقت جزوه ننوشتم و ترجیح ‌می‌دادم جای نوشتن گوش بدم. اما وقتی بهتی‌پی‌اوهای ۴۰ به بعد رسیدم، دیدم خیلی سخت شده. جزییات زیاد بود و من تقریبا همیشه سوالاهایی که باید چند تا گزینه انتخاب کنی رواشتباه میزدم. برای همین شروع کردم به نت برداری خیلی محدود. در واقع سعی می‌کردم چیزهایی رو بنویسم که احتمال میدادم ازشون از اونسوالای چندتایی بیاد! البته همین قلم به دست گرفتن هم تمرکزم رو زیاد کرد و باعث شد کمتر ذهنم حاشیه بره. تو این بخش تمرکز واقعا مهمهو چند ثانیه غفلت ممکنه به قیمت یکی دو نمره تموم شه!تو این بخش زیاد پیش میومد که از جواب یه گزینه مطمئن نباشم. تو اینجور وقتها رد گزینه میکردم و تقریبا ۹۰ درصد اوقات درست جوابمیدادم. وقتی مطمئن نبودم کدوم گزینه درسته، اونایی که مطمئن بودم گوینده نگفته رو به ترتیب رد میکردم. معمولا دو تا گزینه میموند که ازبین اونا سعی میکردم اونی که منطقی تره رو انتخاب کنم. یعنی مثلا پیش خودم میگفتم گوینده که تو چند تا جمله قبلی گفته بود فلان، الاناحتمالا نمیگه بهمان! و اینجوری یه گزینه رو انتخاب میکردم‌. راستش اوایل واقعا تعجب کردم که چطوری این روش اینقدر داره خوب کار می‌کنه واولش فکر کردم شانسیه. ولی چند تا تی‌پی‌او که گذشت دیدم نه واقعا انگار روش خوبیه و همینجوری ادامه دادم!اسپیکینگامان از اسپیکینگ! من اولش فکر میکردم تو اسپیکینگ خیلی خوب باشم! سفر زیاد رفتم و زیاد پیش اومده که تو هاستل‌ها دائما انگلیسی حرفزدم. اما وقتی شروع به خوندن برای تافل کردم دیدم اون اسپیکینگ با این اسپیکینگ واقعا فرق داره و بیشترین نگرانی من بری امتحان شداسپیکینگ. بذارید به ترتیب تسک توضیح بدم:تسک یک و دو: من برام این دو تا تسک راحت بود. یعنی اول خیلی سخت بود که دلیل پیدا کنم، اما وقتی راحت‌ شد که Notefull (یک مجموعه ویدیو‌ آموزشی که تو یوتیوب هست) رو دیدم، و دیدم که میگه نیازی نیست دلایلی که میارید خیلی درست باشه و بهشون اعتقاد داشته باشید.اینجوری شد که من برای خودم سریع دو تا دلیل می‌ساختم و دو تا مثال دروغ ‌میبافتم! من این دو تا تسک رو جز از روی تی‌پی‌اوها تمرین نکردم. تمرینم هم به این شیوه بود که صدای خودم رو رکورد می‌کردم و گوش می‌دادم تا ایراداتم رو پیدا کنم. در نهایت هم نمرم good نشد و fair شدم.تسک سه: عین تمپلیت‌های Notefull رو می‌گفتم.تسک چهار: امان از این تسک. من نه میرسیدم نوت بردارم و نه می‌رسیدم کامل توضیح بدم. همیشه بین نوت‌ هام گم میشدم و همیشه حدود۱۵ ثانیه کم میاوردم!‌ چیزی که اینجا بهم خیلی کمک کرد دو تا نکته بود: یکی اینکه استراکچر نوت برداریم رو دقیقا عین Notefull کردم و کلماتاضافه رو تو وقت فکر کردن خط زدم و دوم اینکه موقع نوت‌برداری فقط کلمه مینوشتم نه جمله. این نکته دوم خیلی مهم بود چون وقتیجمله‌های نصفه و نیمه رو نوت‌برداری می‌کردم مجبور می‌شدم همونجوری و عین نوت‌هام حرف بزنم و این باعث میشد دست و پام رو گم کنم.اما وقتی کلمه می‌نوشتم این باعث می‌شد ذهنم آزاد باشه تا هرجوری که دلش می‌خواد جمله بسازه و روون‌تر حرف بزنم! الان که دارم توضیحشمی‌دم به نظرم عجیب میرسه اما خب حقیقت داره!تسک پنج: این تسک رو عین Notefull گفتم و به نظرم تسک راحتیه. تنها تغییری که دادم این بود که گفتم : If I were about to recommend one solution to the woman/man, I would definitly go with the second/first solution .تسک شش: این هم که واقعا سخت بود. اما در نهایت تونستم با همون نکته دومی که تو تسک چهار توضیح دادم این رو برای خودم راحتتر کنم.رایتینگتسک اول: عین Notefull!‌ حدود ۳۵۰ کلمه نوشتم.تسک دوم: عین TOEFL Resources! من بیست تا از چهل تا مثال تافل ریسورسز رو پرینت گرفتم و هر کدوم رو شاید حدود ده بار با دقتخوندم. سعی میکردم مثل نویسنده این متن‌ها فکر کنم و دقت کنم که چطوری نوشته رو توسعه می‌ده و دلیل میاره. حقیفتا من برای این بخش یدونه کلمه سخت هم حفظ نکردم و کاملا ساده نوشتم.در واقع بسیار ساده نوشتم و خیلی خوب و روون توسعه دادم. برای پاراگراف اول body یه مثال شخصی زدم و برای پاراگراف دوم همون مثال رو بیشتر توضیح دادم. در کل مهمه که اگر مثال شخصی می‌زنید جزییات رو همبنویسید که واقعی جلوه کنه. من حدود ۵۶۰ کلمه برای این تسک نوشتم که این هم نکته جالبی بود. هیچوقت قبلا بیشتر از ۴۵۰ کلمه نمیشدبنویسم. اما سر امتحان ۵۶۰ کلمه نوشتم و ۴ دقیقه هم وقت برای ریویوو داشتم. به نظرم این نشون میده که ترشح آدرنالین سر جلسه واقعاجدیه. راستی برای تمرین این بخش من از نسخه پرمیوم گرامرلی استفاده می‌کردم که مقداری کمک کننده بود.یه نکته مهم رو راجع به این تسک بگم که صرفا نظر شخصی منه. اصلا اصرار نداشته باشید که کلمات سخت و گرامر‌های پیچیده رو استفادهکنید!‌ برای من واقعا عجیبه وقتی یه نفر میاد میگه منبع برای کلمات سخت معرفی کن. به نظر من چیزی که خیلی مهمه اینه که بتونیم همونکلماتی که بلدیم و همون گرامرهای روتین رو تو جای درست و به شیوه درست استفاده کنیم. که این هم فقط با خوندن رایتینگ‌های خوبی مثلتافل ریسورسز ممکنه. اینکه یه متن رو راحت بفهمیم به معنی به درد نخور بودنش نیست. سوال اصلی اینه که آیا ما میتونیم یه چیزی شبیههمون متن رو بنویسیم؟ مثلا خیلی از کلمه ها رو ما فقط به عنوان اسم استفاده میکنیم. اما وقتی نوشته یه native رو میخونی می‌بینی اون رو بهجای فعل استفاده کرده و جملش هم قشنگ‌تر شده و هم کوتاه‌تر. به نظر من چیزهایی که باید یاد گرفت از این دست چیزهان.با اینکه نمی‌خواستم خیلی طولانی بشه، اما ظاهرا این نوشته حدود ۲۴۰۰ کلمه شد. اگر تمام این ۲۴۰۰ کلمه رو خوندید و باز هم بعضی چیزها براتون نامفهومه، تو کامنت‌ها بپرسید تا جواب بدم.</description>
                <category>آرش خوئینی</category>
                <author>آرش خوئینی</author>
                <pubDate>Sat, 25 May 2019 15:13:00 +0430</pubDate>
            </item>
                    <item>
                <title>یادگیری عمیق چیزی جز ریاضی نیست</title>
                <link>https://virgool.io/@arashkhoeini/machine-learning-is-nothing-but-mathematics-nyuzeqsr9bzp</link>
                <description>آدرس رو غلط نرید، یادگیری ماشینی هیچ چیزی جز ریاضی نیست. وقتی که میگم ریاضی منظورم ترکیبیه از  حسابان و معادلات دیفرانسیل و آمار. تمام الگوریتم‌هایی که می‌بینید جادو می‌کنند و یاد می‌گیرند و دستاورد کارشون این روزها تو صدر اخبار می‌شینه، در واقع همون فرمول‌های ریاضی هستند که با کمک کامپیوتر‌ها و با کمک ماتریس‌های بزرگی از ورودی و خروجی‌های دلحواه ما (همون چیزی که بهشون میگیم دیتا) حل شده‌اند و به جواب رسیدند. این چیزیه که خیلی ‌از ماها وقتی برای اولین بار با این الگوریتم‌ها آشنا میشیم نمی‌بینیم. یک مثلا ساده‌ از حرفم درخت تصمیمه که فقط و فقط با کم کردن Cross Entropy ساخته میشه. هر چند که مثال‌هایی از این دست زیاده، اما من میخوام تو این نوشته در مورد جذاب‌ترین و پرکاربرد روش یادگیری ماشین صحبت کنم. یعنی شبکه‌های عصبی.شبکه‌های عصبی رو احتمالا میشناسیم. نرون‌هایی که با ارتباطات وزن داری با هم متصل شدند. این ارتباطات از نرون ورودی یک عدد میگیرند، در وزنشون ضرب میکنند و میدن به نرون خروجی. نرون خروجی تمام ورودی‌های دریافتی رو با هم جمع میکنه، از تو یه تابع فعال‌سازی در می‌کنه و خودش تبدیل میشه به نرون ورودی برای اتصال بعدی.وقتی که تازه با این شبکه‌های عصبی آشنا میشیم، این اتصالات و این نرون‌های گرافیگی چیزیه که تو همه کتابها و مقاله‌ها و ویدیو‌های آموزشی می‌بینیم. اما این نمایش گرافیکی علیرغم قابل فهم بودن و قشنگ بودن، یه حقیقت مهمی رو از چشم ما مخفی میکنه. اون حقیقت اینه که این نرون‌ها واقعی نیستند و در واقع شبکه عصبی هیچ چیزی نیست جز یه تابع پیچیده و به شدت غیر خطی که ما سعی میکنم پارامتر‌هاش رو با استفاده از رفتاری که از تابع توقع داریم انجام بده (دیتا) تخمین می‌زنیم. یک شبکه‌ی feedforward ساده رو در نظر بگیرید. اگر این شبکه سه لایه باشه در واقع این شبکه چیزی نیست جز رگرسیون غیر خطی با هایپرتز y=g(W’f(WX+b)+b’) که W وزنهای لایه اول، Wپریم وزن‌های لایه دوم، تابع f تابع فعالسازی لایه پنهان و g تابع فعال‌سازی تابع خروجیه. هدف ما از آموزش این شبکه عصبی صرفا یادگیری پارامترهای این تابعه و تمام feedforwardها و back propagateها برای همینه.اما چیزی که بالا گفتم یه جنبه از شبکه‌های عصبی بود. این شبکه‌ها رو جور دیگه‌ای هم میشه نگاه کرد. نگاه دوم که نگاه مورد علاقه منه نگاه آماریه. وقتی که این تابع پارامتر‌های خودش رو یاد میگیره، در واقع داره یاد میگیره که وزن‌های این شبکه عصبی رو چطوری تنظیم کنه که بتونی با ورودی، خروجی رو بسازه. وقتی که پارامتر‌های تعیین شدند، برای هر ورودی یک یا چند نمایش (representaion)‌ به دست می‌آره که نشون دهنده اطلاعات آماری پنهان توی اون ورودی‌اند! برای مثال سه شبکه سه لایه‌‌ای که پاراگراف قبل توضیح دادم، وقتی شبکه آموزش داده شد، شبکه به ازای هر ورودی یه بردار f میسازه که خروجی نرون‌های لایه دومه. این بردار بعد از اینکه تو ماتریس Wپریم ضرب شه خروجی رو میسازه، پس این بردار نمایشی از ورودیه و بسته به اینکه ورودی و خروجی این شبکه عصبی چی هستند این نمایش میتونه ویژگی‌های منحصر به فردی داشته باشه. مثلا اگه ورودی پیکسل‌های خام عکس باشه و خروجی این باشه که این عکس هات داگه یا نه (سریال سیلیکون ولی رو دیدید؟)، این بردار f یا همون خروجی نرون‌های لایه پنهان ویژگی‌های استخراج شده‌ای از عکس هستند که طبق آمار موجود در دیتای آموزش، میتونن به تشخیص هات داگ بودن یا نبودن عکس کمک کنند. ویژگی‌های مثل رنگ و فرم و چیزهای دیگه. البته که میدونیم یه شبکه عصبی سه لایه اونقدری قدرت یادگیری نداره که بتونه همچین مسئله سنگینی رو یاد بگیره و برای حل این مسئله نیاز به شبکه‌هایی با لایه‌های بیشتر داریم و بعضا معماری متفاوت داریم. یک شبکه با لایه‌های بیشتر در واقع چیزی نیست جز یه تابع که بیشتر غیرخطیه و میتونه انعطاف‌پذیری بیشتر از خودش تو فضای با ابعاد خیلی زیاد نشون بده.نمیدونم چقدر تونستم با یه نوشته کوتاه مفهومی که تو ذهنم بود رو منتقل کنم. خلاصه تمام این حرف‌ها این بود که گول نخورید، یادگیری ماشین و به طور کلی علوم کامپیوتر هیچ‌ چیزی جز ریاضیات نیست و چوب جادوی پشت تمام این معجزات، چیزی جز همون فرمول‌های پیچیده ریاضی نیستند.این مطلب اولین بار در اینجا نوشته شد.</description>
                <category>آرش خوئینی</category>
                <author>آرش خوئینی</author>
                <pubDate>Wed, 25 Jul 2018 01:35:02 +0430</pubDate>
            </item>
                    <item>
                <title>ریکامندر سیستم‌ها چطوری کار می‌کنند؟ (قسمت دوم)</title>
                <link>https://virgool.io/@arashkhoeini/how-recommender-systems-work-part2-aegyrdoclizx</link>
                <description>در نوشته قبلی لزوم استفاده از ریکامندر سیستم‌ها رو توضیح دادم و نوشتم که چرا بهشون نیاز داریم. همینطور گفتم که دو رویکرد پالایش مشارکتی و محتوا محور دو رویکرد اصلی‌ای هستند که در ریکامندر سیستم‌ها استفاده‌ می‌شوند.  همینطور رویکرد پالایش مشارکتی و روش زیر مجموعه این رویکرد، یعنی تجزیه ماتریسی رو توضیح دادم. این مطلب ادامه مطلب قبلیه که اگر نخوندید بهتره اول اون رو بخونید.در تجزیه ماتریسی کاری که می‌کنیم اینه که از ماتریس امتیازها ویژگی‌های کاربر و محصول‌ها رو استخراج می‌کنیم. پس برای به دست آوردن ویژگی‌های قابل اتکا، به شدت وابسته به این هستیم که در ماتریس امتیازها، امتیازهای بیشتری وجود داشته باشد. این به این معناست که برای مثال، هر چه کاربرها فیلم‌های بیشتری را امتیاز داده باشند، ما هم ویژگی‌های بامعنی‌تری برای آن کاربرها و آن فیلم‌ها استخراج می‌کنیم.اما وقتی یک فیلم جدید ساخته می‌شه چطور؟ هنوز هیچ کاربری به این قیلم رای نداده، پس هیچ اطلاعاتی در مورد این فیلم نداریم و نمی‌تونیم بردار ویژگی‌های این فیلم رو بسازیم. واضحه که در این صورت نمیشه از تجزیه ماتریسی و به طور کلی پالایش مشارکتی استفاده کرد.رویکرد محتوا محوردر رویکرد محتوا محور از محتوای موجود در مورد محصولات و یا کاربرها استفاده میشه. یک مثال معروف در این زمینه ریکامندر سیستم اسپاتیفایه. اسپاتیفای سیگنال موسیقی رو پردازش میکنه و ویژگی‌های سیگنالی متعددی ازش استخراج می‌کنه. حالا این ویژگی‌های استخراج شده رو به یک شبکه Convolutional Neural Network میده و این شبکه آموزش می‌بینه تا عمل توصیه رو انجام دهد. این روش در این مقاله معرفی شد و نویسنده اصلی مقاله یعنی آقای Sander Dieleman بعد از انتشار سریعا به استخدام اسپاتیفای در اومد. البته الان در گوگل مشغول به کاره؛ مثل باقی شوالیه‌های حوزه ماشین لرنینگ.پردازش زبان طبیعی یا NLP دوشادوش رویکرد محتوا محور می‌تونه نتایج خیلی جالبی به دست بیاره. مثلا انواع روش‌های مدل‌سازی موضوع یا Topic Modeling می‌تونند برای توصیه مطالب و نوشته‌های وبلاگی به کار برن. این روش‌ها به این شیوه عمل میکنند که بعد از تعریف چندین موضوع مختلف، به هر مطلب یک عدد متناظر با هر موضوع اختصاص میدن که بیانگر ارتباط اون نوشته با اون موضوعه. سپس با توجه به شناختی که از قبل از کاربر به دست آورده‌ایم، نوشته‌ها رو به کاربرهای مناسب پیشنهاد بدیم.مثال بالا یک مثال کاملا متنی بود و غافلگیر کننده نیست که پردازش زبان طبیعی در یک سیستم‌ توصیه‌گر که محتوای متنی (نوشته‌های وبلاگی) رو توصیه می‌کنه به کار بره. اما جالب اینجاست که کاربرد پردازش زبان طبیعی محدود به این نمیشه. یکی از کارهای جالبی که در حوزه سیستم‌های توصیه‌گر انجام میشه اینه که میشه با محتوای غیر متنی هم مانند محتوای متنی برخورد کرد. اجازه بدید یک مثال بزنم:ما در NLP روش‌هایی داریم که به هر کلمه یک بردار اختصاص میدن. برای ساده شدن ماجرا تصور کنید این یک بردار دو بعدیه. وقتی کلمات وارد این فضای دو بعدی شدند، میشه با روش‌های ساده‌ای مثل فاصله اقلیدسی، فواصل این کلمات رو در این فضای دو بعدی حساب کرد. نکته شگفت آور اینه که هر چی دو کلمه از نظر معنایی به هم شبیه‌تر باشند، فاصله نزدیک‌تری دارند. مثلا در این فضای دوبعدی کلمات پاریس و تهران به هم نزدیک هستند چون هر دو پایتخت محسوب می‌شوند.حالا محصولی مثل فوراسکوئر رو تصور کنید. من اگر بیام تمام جاهایی که کاربر “آرش” رفته رو پشت سر هم بنویسم، یعنی بنویسم “آرش لمیز پیتزاسیب کافه‌کرگدن سوپراستار پیتزاادبرت” ، یک جمله ساختم. حالا اگر برای تمام کاربرها این کار رو انجام بدم چندین جمله دارم که نشون میده کدوم کاربر کجاها رفته. حالا با استفاده از روش‌های بالا هر کدام این کلمات رو به فضای چند بعدی جدید ببریم و تو این فضا فواصل رو حساب کنم. حالا می‌تونم بگم مکان‌هایی که در این فضا به آرش نزدیک‌تر هستند مکان‌هایی هستند که احتمالا آرش دوستشون داره. پس بیام ببینم کدومشون رو هنوز نرفته و بهش پیشنهاد بدم. هیجان انگیز نیست؟ این روش برای اولین بار در این مقاله استفاده شد. البته این روش خیلی محتوا محور نیست. اما فکر کردم خوبه حالا که حرف NLP شد بهش اشاره‌ای کنم.کارهای جالب دیگه‌ای هم میشه با محتوا کرد. مثلا یکی از محتواهای باارزشی که معمولا داریم نظرات کاربرها در مورد محصولاته. این نظرات از این جهت باارزشند که معمولا در بطن خودشون ویژگی‌های محصول رو دارند. پس من میتونم یک محصول رو با استفاده از تمام نظراتی که در موردشون نوشته شده مدل کنم. کاربر رو هم میشه به همین ترتیب با استفاده از نظراتی که نوشته مدل کرد. ساختن این مدل‌های آماری کاربر و محصول نیاز داره تا از ترکیب انواع روش‌های پردازش زبان طبیعی و پالایش مشارکتی استفاده کرد. به این ترتیب که با استفاده از روش‌های پردازش زبان طبیعی تمام نظرات رو وارد فضای برداری جدید کرد و در این فضا با استفاده از مدل‌هایی مثل شبکه عصبی استخراج ویژگی انجام داد. ویژگی‌هایی که میتونند به ما در انجام عمل توصیه کمک کنند.در این نوشته و نوشته قبلی، لزوم استفاده از ریکامندر سیستم‌ها و انواع روش‌های اونها رو توضیح دادم. امیدوارم این دو مطلب کمی به شفاف شدن موضوع کمک کرده باشند. در نوشته‌های بعدی دوست دارم که کمی بیشتر در مورد پردازش زبان طبیعی و به خصوص نمایش کلمات در یک فضای برداری صحبت کنم. از نگاه خودم این یک موضوع خیلی جذابه که کارهای جالب زیاده میشه باهاش کرد و متاسفانه در زبان فارسی هنوز کار زیادی انجام نشده.</description>
                <category>آرش خوئینی</category>
                <author>آرش خوئینی</author>
                <pubDate>Tue, 23 Jan 2018 23:50:51 +0330</pubDate>
            </item>
                    <item>
                <title>ریکامندرسیستم‌ها چطوری کار میکنند؟ (قسمت اول)</title>
                <link>https://virgool.io/@arashkhoeini/how-recommender-systems-work-part1-djasqbffq15s</link>
                <description>من این مطلب رو قبلا تو وبلاگ خودم نوشته بودم. اما چون فعلا چیز بهتری برای نوشتن نداشتم تصمیم گرفتم همین مطلب رو اینجا هم بذارم.این روزها احتمالا اسم ریکامندر سیستم و یا سیستم توصیه‌گر رو بیشتر از قبل می‌شنویم. از اونجایی که الان بیشتر از یک‌ساله که روی این سیستم‌ها کار می‌کنم، به نظرم اومد بد نباشه در یک مطلب این سیستم‌ها رو خلاصه توضیح بدم و کمی از انواع روش‌هایی که این سیستم‌ها استفاده می‌کنند بگم.در سال‌های اخیر تعداد محصولات و کالاهایی که فروشنده‌ها و سرویس‌دهنده‌های اینترنتی ارائه می‌کنند حسابی افزایش یافته. شرکت‌ها محصولات بیشتری تولید می‌کنند تا نیازهای بیشتری از مشتری‌ها رو برطرف کنند. این اتفاق از طرفی باعث می‌شه حق انتخاب کاربر بالا بره و از طرفی حق انتخاب رو برای کاربر خیلی سخت می‌کنهریکامندر سیستم‌ها یا سیستم‌های توصیه‌گر، تکنولوژی‌های به سرعت رو به توسعه‌ای هستند که به کاربرها و مشتری‌ها کمک می‌کنند تا محصولاتی که براشون جالبه یا بهش نیاز دارند رو به راحتی پیدا کنند. این سیستم‌ها در فروشگاه‌های اینترنتی کاربرد زیادی دارند، چون این فروشگاه‌ها حق انتخاب زیادی به کاربر میدن و انتخاب رو براش سخت می‌کنند. در حقیقت این سیستم‌ها هم برای کاربر و هم برای فروشنده ارزش افزوده دارند؛ به کاربر کمک می‌کنند تا محصول مورد نیازش رو پیدا کنه و به فروشنده کمک می‌کنند تا تبلیغات بهتری داشته باشد و به طور هدفمندتر محصولش رو به مشتری‌ها توصیه کنه. معمولا یک سیستم‌ توصیه‌گر محصولات را به وسیله تخمین امتیاز یا ساخت لیست مرتب شده از محصولات برای هر کاربر توصیه می کند.رویکردهای مورد استفاده در سیستم‌های توصیه‌گر به دو دسته کلی تقسیم می‌شوند:۱. پالایش مشارکتی Collaborative Filtering۲. محتوا محور  Content Baseدر زیر هر کدام از رویکرد‌های زیر را به اختصار توضیح می‌دم.سیستم‌ توصیه‌گر با استفاده از پالایش مشارکتیرویکرد پالایش مشارکتی، رویکردی مشهور و شناخته‌ شده است و بسیاری از سیستم‌های توصیه‌گر بر مبنای این روش کار می‌کنند. پالایش مشارکتی از قانون بسیار ساده‌ای زندگی می‌کند: کاربرها تمایل دارند محصولاتی را بخرند که کاربرهای با سلیقه مشابه‌ آنها خریده‌اند. برای مثال در جدول زیر کاربر U1 احتمالا تمایل دارد تا محصول I2 را بخرد، زیرا کاربرهای U1 و U4 محصول I1 را می‌پسندند و کاربر U4 امتیاز بالایی به محصول I2 داده است.پالایش مشارکتی روش‌های مختلفی دارد که دو روش اصلی آن یعنی روش همسایه محور و تجزیه ماتریسی را در ادامه توضیح میدم.روش همسایه‌محورروش‌های همسایه محور ارتباط بین محصولات و یا کاربرها را محاسبه می‌کنند. این روش خودش میتونه دو حالت داشته باشه:  در حالت محصول محور، امتیاز تخمینی یک کاربر به یک محصول، براساس امتیازهای همان کاربر به محصولات مشابه (همسایه) آن محصول تخمین زده میشه. در حالت کاربرمحور، در تخمین امتیاز یک کاربر به یک محصول، به کاربرهایی با علایق مشابه آن کاربر رجوع می‌شود و از امتیازهای داده شده توسط آنها به آن محصول برای تخمین امتیاز کاربر مورد نظر استفاده می‌شود.روش همسایه‌محور دو مرحله اصلی دارد: محاسبه شباهت و سپس تخمین. گفتم که در هر دو حالت کاربر محور و محصول محور، ما نیاز به محاسبه شباهت داریم؛ یا بین کاربرها و یا بین محصولات. این محاسبه شباهت به روش‌های مختلفی میتونه انجام شه. روش‌هایی مثلهمبستگی پیرسون یا شباهت کسینوسی معروف‌ترین این روش‌ها هستند.در روش پالایش مشارکتی همسایه محور، برای اینکه عمل توصیه انجام شود یا رتبه‌ی کاربر u به محصولی تخمین زده شود، از شباهت‌های به دست آمده برای ساخت مجموعه‌ای از کاربرها که به کاربر u شبیه هستند استفاده می‌شود. سپس تخمین رتبه کاربر u را می‌توان با استفاده از امتیازهای داده شده توسط این مجموعه از کاربرهای مشابه به دست آورد.روش همسایه محور مزیت‌های زیر را دارد:از آنجایی که صرفا لازم است شباهت‌ها محاسبه شود، پیاده‌سازی آن راحت‌ است.این روش‌ها به روی داده‌های با حجم بالا مقیاس پذیر هستند.این روش‌ها روش‌های آنلاین هستند. چرا که داده جدید را میتوان به راحتی هندل کرد.میتوان به سادگی برای کاربر توضیح داد که چرا این محصول به شما توصیه می‌شود.از آنجایی که این روش به شدت به داده‌ی مشترک بین کاربرها وابسته است، زمانی که داده‌ها پراکنده هستند و داده مشترک زیادی بین کاربرها وجود ندارد، گاهی شباهت‌های محاسبه شده و توصیه حاصل از این روش‌ها قابل اعتماد نخواهد بود.روش‌های تجزیه ماتریسیروش‌های تجزیه ماتریسی روش‌های دیگری از رویکرد پالایش مشارکتی هستند که در عمل بهترینند. من سعی می‌کنم به بهترین حالتی که می‌تونم این روش رو توضیح بدم.ما معمولا در سیستم‌های توصیه‌گر مجموعه‌ای از کاربرها و مجموعه‌ای از محصولات داریم. هر کدام از این کاربرها ممکن است به یک یا چند محصول امتیاز داده باشند. مثلا سایت IMDB رو فرض کنید. این سایت احتمالا میلیون‌ها کاربر و هزاران فیلم داره و هر کدام از این کاربرها به چند فیلم امتیاز داده‌اند. میتونیم این امتیازها رو با یک ماتریس نشون بدیم. به این ترتیب که هر سطر بیانگر یک کاربر و هر ستون بیانگر یک فیلم باشه. حالا سطر i و ستون j بیانگر امتیاز کاربر iام به فیلم jام است.حالا برای لحظه‌ای ماتریس بالا رو فراموش کنید. تصور کنید که من یک سایت شبیه به IMDB دارم و میخوام حدس بزنم هر کاربر ممکنه چه فیلم‌هایی رو دوست داشته باشه. یکی از اولین روش‌هایی که به ذهن میرسه چیه؟ من بیام برای هر فیلم چند ویژگی در نظر بگیرم. مثلا ژانر، سال تولید، کارگردان، بازیگرا، زبان فیلم، کشور ساخت فیلم و غیره. حالا بیام از هر کاربر هم بپرسم که نظرت در مورد این ویژگی‌ها چیه؟ مثلا بپرسم علی تو چه ژانر فیلمی دوست داری؟ کارگردان محبوبت چیه؟ فیلمایی که می‌بینی معمولا به چه زبانیه و همینجوری نظرش رو در مورد همه این ویژگی‌ها بفهمم. حالا خیلی ساده بیام بر مبنای اطلاعاتی که از علی و از همه فیلم‌ها دارم، بگم علی احتمالا چه فیلمی رو دوست داره و اون رو بهش پیشنهاد بدم.در عمل همچین کاری غیر دقیق، سخت و بسیار هزینه بره. پس چیکار کنیم؟خب، حالا دوباره بریم سراغ ماتریس امتیازها که تو دو تا پاراگراف قبل تعریفش کردیم. من با این ماتریس یه کار جالب می‌کنم؛ ویژگی‌هایی که نمیدونم چی هستند رو ازشون استخراج می‌کنم و نظر هر کاربر رو بدون اینکه ازش سوالی بپرسم در مورد این ویژگی‌ها می‌فهمم! برای مثال میگم که خب، من حدس میزنم محصولات من ۱۰۰ ویژگی داشته باشند. اسم این ویژگی‌ها رو میذارم latent factor یا عامل‌های نهان (نهان هستند برای اینکه نمی‌دونیم چی هستند!) حالا باید هر محصول رو تبدیل کنم به یک بردار ۱۰۰بعدی که هر بعد نشان‌گر مقداری است که آن محصول آن ویژگی را شامل می‌شود. به همین ترتیب کاربرها را هم به بردارهای صد بعدی تعریف می‌کنیم که هر بعد نشان‌گر این است که این کاربر چقدر به ویژگی متناظر با این بعد علاقه دارد. حالا اگر بیایم این دو بردار رو ضرب داخلی کنیم؛ یعنی المان های نظیر رو با هم ضرب کنیم و حاصل رو جمع کنیم، در واقع امتیاز اون کاربر به اون محصول را تخمین زدیم! هیجان انگیز نیست؟برای رسیدن به بردارهای ویژگی، باید ماتریس امتیاز رو به دو ماتریس رتبه پایین تجزیه کنیم. برای این کار از روشی مشابه SVD استفاده می‌کنیم. برای اونهایی که ریاضی و یادگیری ماشین رو دوست دارند کمی وارد جزئیات می‌شم:ما دو تا بردار داریم، به اسم های p و q که به ترتیب متعلق به کاربر و محصول هستند. می‌خوایم این دو بردار رو طوری بسازیم که ضرب داخلیشون تا حد ممکن شبیه به امتیازی بشه که کاربر صاحب بردار p یعنی u به محصول صاحب بردار q یعنی i داده. برای اینکار کافیه معادله زیر رو کمینه کنیم:در این معادله r امتیاز کاربر u به i است و لاندا پارامتر رگولاریزیشن است. با کمینه کردن این معادله حاصل‌ضرب pq تا حد ممکن به r نزدیک می‌شود و این چیزی است که به دنبال آن هستیم. بعد از اینکه این معادله رو به الگوریتم‌هایی مثل Gradient Descent کمینه کردیم، برای هر کاربر و محصول به یک بردار می‌رسیم. حالا برای تخمین امتیاز یک کاربر به یک محصول، تنها کافیه که بردارهای متتاظر با اونها رو در هم ضرب داخلی کنیم. البته معمولا معادله به این سادگی نیست و پارامترهای بایاس و یا داده‌های غیر مستقیم هم وارد آن می‌شوند. من برای اینکه این نوشته از فرم پست وبلاگی خارج نشه خیلی وارد جزییات بیشتر ریاضی نمی‌شم. اگر خواستید در مورد این روش بیشتر و دقیق‌تر بخونید میتونید به مقالات این حوزه مثل این یک نگاهی بندازید.برای اینکه این مطلب طولانی‌تر از این نشه وارد سیستم‌های توصیه‌گر محتوا محور نمیشم. اگر از این نوشته استقبال شد و علاقه‌مند بودید، میتونید تو کامنتها بگید تا در این زمینه بیشتر و دقیق‌تر بنویسم.</description>
                <category>آرش خوئینی</category>
                <author>آرش خوئینی</author>
                <pubDate>Tue, 23 Jan 2018 21:34:55 +0330</pubDate>
            </item>
            </channel>
</rss>