جستجو برای:
  • دوره‌های آموزشی
  • وبلاگ
  • آموزش‌های رایگان
    • آموزش پایتون رایگان
    • آموزش یادگیری ماشین رایگان
    • آموزش یادگیری عمیق رایگان
    • آموزش pytorch رایگان
    • آموزش رایگان matplotlib
    • آموزش گوگل کولب
  • نقشه راه AI
  • کلاس خصوصی
  • همکاری با ما💚
  • حساب کاربری
  • اساتید
  • درباره ما
     
    • 0902-546-9248
    • howsam.mail@gmail.com
    آکادمی هوش مصنوعی هوسم
    • دوره‌های آموزشی
    • آموزش‌های رایگان
      • آموزش پایتون
      • آموزش یادگیری ماشین رایگان
      • آموزش یادگیری عمیق رایگان
      • آموزش pytorch رایگان
      • آموزش گوگل کولب
    • نقشه راه AI
    • وبلاگ
    • درباره ما
      • اساتید
      • پشتیبانی
    0
    ورود / عضویت

    بلاگ

    آکادمی هوش مصنوعی هوسم وبلاگ یادگیری ماشین گرادیان کاهشی

    گرادیان کاهشی

    2021/02/06
    ارسال شده توسط سید سجاد اشرفی
    یادگیری ماشین
    14.36k بازدید
    https://dl.howsam.org/vlog/gradient-descent.mp4

    به‌نام خدا، سلام… در این پست می‌خواهم درباره الگوریتم گرادیان کاهشی (Gradient Descent) صحبت کنم. باتوجه به اهمیت زیاد این الگوریتم، در جلسه سوم از آموزش یادگیری ماشین رایگان می‌خواهم به تشریح گرادیان کاهشی بپردازم. این الگوریتم در جلسات بعدی بسیار کاربرد دارد. با هوسم همراه باشید…

    فهرست مطالب نمایش
    1. مقدمه‌ای بر الگوریتم گرادیان کاهشی
    2. الگوریتم گرادیان کاهشی
    2.1. مرحله 1: انتخاب یک مقدار رندوم برای x
    2.2. مرحله 2: محاسبه مقدار مشتق در این نقطه
    2.3. مرحله 3: بدست آوردن نقطه جدید با مشتق
    2.4. و حالا تکرار مرحله 2 و 3
    2.5. اما یک چالش در گرادیان کاهشی
    2.6. طول گام در گرادیان کاهشی
    3. گرادیان کاهشی در ابعاد بالاتر
    4. گرادیان کاهشی در یک نگاه

    مقدمه‌ای بر الگوریتم گرادیان کاهشی

    اغراق نیست اگر بگویم گرادیان کاهشی یکی از مهم‌ترین و کاربردی‌ترین الگوریتم‌ها در یادگیری ماشین است. اثر این الگوریتم در بسیاری از الگوریتم‌ها و مدل‌های یادگیری ماشین دیده می‌شود. به‌همین خاطر، لازم دیدم که در این دوره یادگیری ماشین، همین ابتدا این الگوریتم را به شما توضیح بدهم. مهم است که با اعماق وجود خود این الگوریتم را درک کنید!

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

    الگوریتم گرادیان کاهشی، یک الگوریتم بهینه‌سازی تکراری مرتبه-اول هست که مینیموم محلی در یک تابع مشتق‌پذیر را پیدا می‌کند.

    سخت بود؟ پر از کلمات عجیب و غریب؟ اجازه دهید ساده‌اش کنم:

    گرادیان کاهشی الگوریتمی است که مینیموم‌های محلی را در یک تابع پیدا می‌کند.

    یک‌سری از کلمات را حذف کردم. البته، این کلمات مهم بودند. بعدا درباره کلمات حذف‌شده توضیح می‌دهم. حتما می‌دانید که مینیموم محلی چیست؛ اما محض یادآوری به تصویر زیر نگاه کنید.

    شکل 1: مینیموم و ماکزیموم محلی و نقطه زینی (saddle point).

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

    الگوریتم گرادیان کاهشی

    می‌خواهم گرادیان کاهشی را طی یک مثال به شما توضیح بدهم. مثال زیر را درنظر بگیرید؛ بیایید با گرادیان کاهشی، مینیموم محلی آن را بیابیم.

    شکل 2: تابع برای یافتن مینیموم محلی با الگوریتم گرادیان کاهشی.

    قبل از اینکه توضیحات اصلی را شروع کنیم، بیایید چند نکته مقدماتی و لازم به شما بگویم.

    توجه حتما می‌دانید که در اینجا ما یک مینیموم داریم و آن هم یک مینیموم سراسری است. پس در اینجا با گرادیان کاهشی می‌توانیم به مینیموم سراسری برسیم.

    نکته یادتان باشد که یک تابع محدب (Convex) همواره یک اکسترمم دارد. اما یک تابع غیرمحدب (Non Convex) بیش از یک اکسترمم دارد. تفاوت یک تابع محدب و غیرمحدب چیست؟ معیار بررسی محدب/غیرمحدب بودن یک تابع، دو نقطه مانند A و B است! به شکل زیر نگاه کنید:

    • تابع محدب: هر دو نقطه‌ای روی منحنی انتخاب کنیم، به هیچ وجه خط واصل این دو نقطه، تابع را قطع نمی‌کند.
    • تابع غیرمحدب: دو نقطه‌ای وجود دارد که خط واصل آنها، تابع را قطع خواهد کرد. به دو علامت ضربدر در شکل سمت راست نگاه کنید که تابع را قطع کرده است.
    شکل 3: تفاوت تابع محدب و غیرمحدب

    اگر دنبال فرمول هستید، باید بگویم که مشتق دوم یک تابع محدب همواره مثبت یا منفی است. این‌طور نیست که تغییر علامت بدهد.

    نکته تابع درجه دوم همواره همواره همواره یک تابع محدب هست. چون یک اکسترمم دارد و بنابراین قطعا محدب است و تمام.

    بسیارخب، بعد از چند نکته، برویم مینیموم محلی تابع y=0.1x2 را با گرادیان کاهشی بدست بیاوریم. گرادیان کاهشی شامل چند مرحله ساده هست که در ادامه توضیح می‌دهم.

    مرحله 1: انتخاب یک مقدار رندوم برای x

    در اولین مرحله، به صورت رندوم یک مقدار برای x انتخاب می‌شود. به عنوان مثال، در شکل زیر نقطه x=2 به عنوان نقطه اولیه انتخاب شده است.

    شکل 4: نقطه اولیه (x=2) برای شروع الگوریتم گرادیان کاهشی.

    مرحله 2: محاسبه مقدار مشتق در این نقطه

    حال باید محاسبه کنیم که مقدار مشتق تابع y=0.1x2 در این نقطه چقدر است. چرا باید مقدار مشتق را حساب کنیم؟ ساده است، ما می‌دانیم که اکسترمم‌ها در نقاطی اتفاق می افتد که مقدار مشتق برابر با صفر هست. بنابراین، اینجا مقدار مشتق را حساب می‌کنیم تا ببینیم صفر هست یا نه. اتفاقا کلمه گرادیان در الگوریتم گرادیان کاهشی هم به همین مشتق اشاره دارد. خب، مشاهده می‌کنید که صفر نیست:

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

    شکل 5: شیب در نقطه x=2.

    شیب می‌تواند ما را به محل مینیموم نزدیک کند. چگونه؟ در مرحله سوم می‌بینید…

    مرحله 3: بدست آوردن نقطه جدید با مشتق

    اگر به شما بگویم که یک گام به سمت نقطه مینیموم بردارید، به سمت راست میروید یا چپ؟ قطعا چپ، یعنی همیشه به دنبال سراشیبی هستید. پس شیب می‌تواند به ما کمک کند؛ در اینجا شیب مثبت است و فلش زرد در شکل زیر هم شیب مثبت را نشان می‌دهد. اگر در جهت شیب (فلش زرد) حرکت کنیم، قطعا فی ضلالٍ مبین! درعوض کافی است، در جهت منفی شیب (فلش قرمز) حرکت کنیم، دراین‌صورت به هدف نزدیک می‌شویم.

    شکل 6: شیب مثبت و منفی در نقطه x=2.

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

    (*)

    بیایید نقطه جدید را در شکل هم ببینیم:

    شکل 7: بدست آوردن نقطه جدید با استفاده از رابطه (*).

    پس:

    برای رسیدن به نقطه مینیموم محلی، باید در جهت خلاف شیب (همان مشتق) حرکت کنیم.

    گفتم کلمه گرادیان به همان مشتق اشاره دارد. حالا باید بگویم که کلمه کاهشی هم اشاره به حرکت در خلاف جهت گرادیان اشاره دارد.

    و حالا تکرار مرحله 2 و 3

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

    • مرحله 1: یک نقطه رندوم انتخاب کن.
    • مرحله 2: مقدار مشتق در این نقطه را حساب کن.
    • مرحله 3: از رابطه (*) xnew=x – df/dx برای محاسبه مقدار جدید استفاده کن.
    • برگرد به مرحله 2

    این فرآیند آنقدر تکرار می‌شود تا ما به نقطه مینیموم محلی برسیم. بیایید انیمیشن حرکت گوی به سمت نقطه مینیموم را ببینیم.

    الگوریتم گرادیان کاهشی
    شکل 8: گرادیان کاهشی و حرکت گام به گام برای یافتن مینیموم محلی در سهمی

    ببینید چطور گام به گام حرکت می‌کند و به سمت مینیموم محلی می‌رود.

    ممکن است این سوال برای شما ایجاد شود که چرا رفته رفته آن فلش کوچک و کوچکتر شد؟ چون شیب رفته رفته کمتر شد. یعنی مشتق کوچکتر شد و بنابراین هربار مقدار کمتری هم به x اضافه شد.

    اما یک چالش در گرادیان کاهشی

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

    شکل 9: مشکلی وجود دارد! اثری از یک حرکت منظم به سمت مینیموم محلی دیده نمی‌شود!

    چه شد؟! چرا گوی ما دیوانه‌وار به درودیوار می‌خورد و یک جا آرام نمی‌گیرد! چرا مسیرش را پیدا نمی‌کند؟! دقت کنید، قدرت مشتق (شیب) زیاد است. همچون آب می‌تواند حیات ببخشد (ما را به مینیموم برساند) هم می‌تواند سیل شود و ویران کند (حرکت کاتوره‌ای). ما باید این جریان را کنترل کنیم. کافی است یک ضریب کنترل به‌نام طول گام (Step Size) برای مشتق قرار دهیم تا جلوی قدرت زیادش را بگیریم.

    طول گام در گرادیان کاهشی

    به رابطه زیر دقت کنید؛ یک پارامتر η اضافه کرده‌ام که به آن طول گام گفته می‌شود. معمولا مقدار آن بین 0 و 1 است. این پارامتر، می‌تواند از قدرت مشتق بکاهد و جلوی آن حرکت نامنظم را بگیرد:

    رابطه بالا، فرمول کامل گرادیان کاهشی است. حال، بیایید با طول گام 0.1 دوباره مینیموم تابع را بدست آوریم:

    شکل 10: گرادیان کاهشی با طول گام 0.1. ببینید چه بچه سربه‌زیری شد! 😃

    چه می‌کند این طول گام! حالا در انیمیشن‌های زیر، طول گام را با مقادیر مختلف ببینید:

    طول گام: 0.2
    طول گام: 0.4
    طول گام: 0.6
    طول گام: 0.8

    درمورد انیمیشن‌های بالا صحبت بسیار است. می‌خواهم آنها را کمی تحلیل کنم:

    • همه نمودارهای بالا با 25 گام کشیده شده است. یعنی 25 بار فرآیند گرادیان کاهشی را طبق رابطه (*) انجام داده‌ام.
    • در طول گام 0.2 و 0.4 اوضاع خوب است. به‌خوبی به سمت مینیموم محلی سرازیر می‌شویم. قبل از 25 گام به مینیموم می‌رسند. البته، 0.4 زودتر می‌رسد. یعنی، نسبت به 0.2 طول گام مناسب‌تری است.
    • در طول گام 0.6 سریع پیش رفتیم. اما درنهایت، بین دو نقطه نوسان کردیم و به مینیموم محلی نرسیدیم. ای کاش می‌توانستیم طول گام را آن نزدیکی‌های مینیموم کوچکتر کنیم. آن وقت مشکل حل می‌شد.
    • در طول گام 0.8 اوضاع بد هست. به‌نظر می‌رسد نوسان شدیدی داریم و احتمال کمی دارد که به مینیموم محلی برسیم.
    • نتایج بالا، نشان می‌دهد که برای این تابع طول گام 0.4 خوب است.

    بسیارخب، بیایید چند نکته درمورد طول گام بگویم.

    نکته طول گام یک پارامتر است که توسط ما مهندسان تنظیم می‌شود. این پارامتر باید به درستی انتخاب شود تا به نتیجه مطلوب برسیم.

    نکته معمولا در یادگیری ماشین به پارامتر η نرخ یادگیری گفته می‌شود.

    گرادیان کاهشی در ابعاد بالاتر

    همه مثال‌هایی که برای شما زدم، در فضای دوبعدی بود. تنها یک متغیر مستقل (x) داشتیم که می‌خواستیم مقداری برایش بدست آوریم که تابع f مینیموم شود. اما در یادگیری ماشین آنقدر ابعادمان زیاد است که نمی‌توانیم به تصویر بکشیم. یعنی، یک عالمه متغیر مستقل داریم. همچنین، یک عالمه نقطه مینیموم محلی داریم. درضمن، هر نقطه مینیموم محلی برایمان مطلوب نیست. بلکه به دنبال نقطه‌ای هستیم که مینیموم تر است! به تصویر زیر نگاه کنید؛ فضا سه بعدی است و دو متغیر مستقل [x1, x2]=x داریم.

    شکل 11: فضای سه بعدی برای gradient descent.

    دقت کنید؛ مثلا می‌خواهیم از نقطه A شروع کنیم و از چاله Local Minima نجات پیدا کنیم. سپس، Saddle Point را هم به سلامت رد کنیم. درنهایت بیفتیم در چاه Global Minima. کار سختی است! 😅 خب بیایید کمی سخت‌ترش کنیم. نظرتان درباره شکل پایینی چیست؟!

    شکل 12: پیچیدگی در یافتن مینیموم محلی.

    تازه همه اینها در سه بعد است که می‌توانیم به تصویر بکشیم. معمولا، در یادگیری ماشین ما با ابرفضا (Hyper-space) یا فضاهای بیش از سه بعد سروکار داریم.

    نکته گرادیان افزایشی (Gradient Ascent) هم داریم که در آن به سمت بالا (در جهت شیب) حرکت کنیم تا به ماکزیموم محلی برسیم. معمولا، در یادگیری ماشین از گرادیان کاهشی استفاده می‌شود.

    گرادیان کاهشی در یک نگاه

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

    شکل 13: بلوک دیاگرام گرادیان کاهشی Gradient Descent

    در بلوک دیاگرام بالا، چرا از ∂ برای نشان دادن مشتق استفاده کردم؟ چون دیدید که تابع ممکن است چندین متغیر مستقل داشته باشد که طبیعتا باید از همه متغیرهای مستقل مشتق بگیریم. یعنی x در تصویر بالا، یک برداری از متغیرهای مستقل به‌صورت [x1, x2, …, xn]=x است. به همین خاطر است که بجای کلمه مشتق از کلمه گرادیان استفاده می‌شود.

    در پایان بیایید یک بار دیگر آن تعریف سخت را مرور کنیم:

    الگوریتم گرادیان کاهشی، یک الگوریتم بهینه‌سازی تکراری مرتبه-اول هست که مینیموم محلی در یک تابع مشتق‌پذیر را پیدا می‌کند.

    اما تحلیل کلمات موجود در جمله بالا:

    • بهینه‌سازی: دیدیم که یک الگوریتم بهینه سازی است که به دنبال یافتن مینیموم محلی است.
    • تکراری: دیدیم که یک فرآیند سه مرحله‌ای آنقدر تکرار می‌شود تا به مینیموم محلی برسیم.
    • مرتبه-اول: در گرادیان کاهشی از مشتق اول استفاده می‌شود. مرتبه-اول هم به همین نکته اشاره دارد.
    • تابع مشتق‌پذیر: تابع باید مشتق‌پذیر باشد که بتوانیم مشتق بگیریم!

    خب خسته نباشید؛ این جلسه هم تمام شد، اما حرف ناگفته بسیار است. بهینه سازی در یادگیری ماشین بسیار پراهمیت هست. در جلسات بعدی یادگیری ماشین خواهید دید. همه آنچه که در اینجا گفتم، تنها شروعی ساده در بحث بهینه سازی در یادگیری ماشین است. مثلا، الگوریتم های SGD و ADAM و Mini-batch SGD بسیار مهم هستند. اما برای شروع کافی است. در جلسه بعدی می‌خواهم درباره رگرسیون خطی صحبت کنم. اتفاقا کاربرد گرادیان کاهشی در رگرسیون خطی را خواهید دید. خب، حالا شما بگویید، این جلسه چطور بود؟ برای ما کامنت کنید و با هوسم همراه باشید…

    اشتراک گذاری:

    مطالب زیر را حتما مطالعه کنید

    چرخه حیات یادگیری ماشین (ML Lifecycle)
    چرخه حیات یادگیری ماشین (ML Lifecycle) چیست؟ توسعه یک سیستم یادگیری ماشین در دنیای واقعی...
    یادگیری ماشین بدون ریاضی و کدنویسی
    آیا یاد گرفتن یادگیری ماشین بدون دانش ریاضی و مهارت کدنویسی امکان‌پذیر است؟ پاسخ کوتاهش...
    پیش‌نیازهای یادگیری ماشین
    آیا واقعا برای شروع یادگیری ماشین به سیستم‌های گران‌قیمت، دکتری ریاضی و ۱۰۰ ساعت آموزش...
    یادگیری ماشین چیست
    یادگیری ماشین (Machine Learning) چیست؟ به زبان ساده و به دور از فرمول‌های پیچیده، یادگیری...
    فرآیند کریسپ (CRISP)
    بسیاری از پروژه‌های علم داده نه به دلیل ضعف مدل، بلکه به دلیل تعریف نادرست...
    آموزش سایکیت لرن
    در این مقاله به آموزش سایکیت لرن، کتابخانه قدرتمند و محبوب یادگیری ماشین خواهم پرداخت....

    98 دیدگاه

    به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

    • ریحانه گفت:
      2026/05/12 در 1:41 ب.ظ

      بخوام تو یه جمله بگم
      بهتر از این نمیشه
      دست مریزاد

      پاسخ
    • حامد گفت:
      2026/04/23 در 1:08 ب.ظ

      بهترین اموزش در ایران در یک کلام

      پاسخ
    • ناهید گفت:
      2025/10/29 در 9:58 ق.ظ

      توضیحاتتون خیلی عالی بود.
      تشکر

      پاسخ
    • فاطمه گفت:
      2025/09/12 در 5:09 ب.ظ

      مفید و عالی
      فقط لرنینگ ریت از چه راهی به دست می‌آد؟

      پاسخ
      • هوسم گفت:
        2025/09/16 در 1:45 ب.ظ

        معمولا براساس یکسری لِم و تجربه به‌دست میاد. یکی از کارهای ساده و خوب این هست که لرنینگ ریت 0.1 0.01 0.001 0.0001 رو روی مدلتون برای یک مجموعه کوچکی از داده آموزشی و تعداد کمی ایپوک، تست کنید. لرنینگ ریتی رو انتخاب کنید که بیشترین کاهش لاس رو داشته.

        پاسخ
    • محمد مهدی گفت:
      2025/05/22 در 12:04 ب.ظ

      خیلی کمک کننده و عالی بود

      پاسخ
    • معصومه اسكندري گفت:
      2025/04/06 در 10:12 ب.ظ

      تشكر از توضيحاتتون

      پاسخ
    • Mohammad Hafezi گفت:
      2024/01/24 در 7:59 ب.ظ

      salam.
      tadris Aali va mabsoot va ba tamame rize kari ha bood.
      Tabrik migam. (beba
      (sorry for the Finglish)
      You have a great understanding of the domain plus a great skill to convey the knowledge. Thanks for sharing your brilliant talent.

      پاسخ
      • هوسم گفت:
        2024/02/01 در 3:11 ب.ظ

        ممنون محمد عزیز 🙏

        پاسخ
    • Hojjat Kazemi گفت:
      2023/11/27 در 6:05 ب.ظ

      بسیار عالی بود واقعا ممنون

      پاسخ
    • محمد رضا گفت:
      2023/10/03 در 1:18 ب.ظ

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

      پاسخ
    « دیدگاه‌های کهنه

    دیدگاهتان را بنویسید لغو پاسخ

    جستجو برای:
    فهرست مطالب دوره
    • آموزش یادگیری ماشین رایگان
    • جلسه 01: یادگیری ماشین چیست؟
    • جلسه 02: انواع یادگیری در یادگیری ماشین
    • جلسه 03: گرادیان کاهشی
    • جلسه 04: رگرسیون در یادگیری ماشین
    • جلسه 05: رگرسیون لجستیک
    • جلسه 06: الگوریتم k-means
    • جلسه 07: الگوریتم PCA
    • جلسه 08: درخت تصمیم
    • جلسه 09: الگوریتم KNN
    • جلسه 10: یادگیری گروهی
    • جلسه 11: ماشین بردار پشتیبان
    دوره‌های جامع هوسم
    • مسابقه Kaggle: تحلیل و پیش‌بینی رفتار با داده‌های چندحسگری سری زمانی
    • پیاده‌سازی ChatGPT از صفر با پایتورچ
    • آموزش OpenCV: از پردازش تا بینایی
    • دیپ کاتالیست: دوره افزایش مهارت
    • پایتون برای هوش مصنوعی 🤖
    • یادگیری ماشین جامع: از مفاهیم تا پیاده‌سازی🔥
    • یادگیری عمیق جامع: از مفاهیم تا پیاده‌سازی
    درباره هوسم

    آکادمی هوش مصنوعی هوسم با آموزش‌های تخصصی در حوزه هوش مصنوعی در خدمت شماست. روی کمک هوسم حساب کنید…

    • گیلان- شهرستان رودسر- شهرک انصاری- کوچه لاله 9
    • 09025469248
    • howsam.mail@gmail.com
    دسترسی سریع
    • صفحه اصلی
    • وبلاگ
    • حساب کاربری
    • سبد خرید
    شبکه‌های اجتماعی

     

    logo-samandehi
    تمامی حقوق برای آکادمی هوسم محفوظ است.
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      ورود
      استفاده از موبایل
      استفاده از آدرس ایمیل
      آیا هنوز عضو نیستید؟ اکنون عضو شوید
      بازنشانی رمز عبور
      استفاده از موبایل
      استفاده از آدرس ایمیل
      عضویت
      استفاده از موبایل
      استفاده از ایمیل
      قبلا عضو شدید؟ اکنون وارد شوید

      ورود

      رمز عبور را فراموش کرده اید؟

      هنوز عضو نشده اید؟ عضویت در سایت