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

shabake-mag.jpg

دانشمند داده و مهندس یادگیری ماشین

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

مهندس یادگیری ماشین کیست؟

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

  • گروه اول و بیشتر آن‌ها افراد با تحصیلات عالی (ارشد و چند مورد دکترا)  بودند که در علوم رایانه، هوش مصنوعی، آمار و مهندسی نرم‌افزار تحصیل کرده بودند، اما در این حوزه تازه‌وارد بودند و تقریبا ۱ تا ۳ سال به شکل تمام وقت در این حوزه کار کرده بودند تا بتوانند به عنوان مهندس یادگیری ماشین جذب شرکت‌ها بشوند. (خبر خوب این‌که بازار کار مهندسان یادگیری ماشین نه تنها اشباع نشده، بلکه تازه در ایران رواج پیدا کرده است!)
  • گروه دوم توسعه‌دهنده‌های مجرب (فارغ‌التحصیلان مهندسی نرم‌افزار) و فارغ‌التحصیلان رشته‌های مرتبط با فناوری اطلاعات بودند که تجربه عملی زیادی در طراحی برنامه‌های کاربردی و به ویژه کار با بانک‌های اطلاعاتی داشتند، اما در حوزه هوش مصنوعی تازه وارد بودند.

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

اگر مطالب مربوط به حوزه هوش مصنوعی را دنبال کرده باشید، حتما به یاد می‌آورید هنگامی که علم داده‌ها (Data Scientists) تازه به دنیای فناوری اطلاعات وارد شده بود با استقبال کم نظیر افراد با تحصیلات عالی همراه شد و زمانی که این علم فراگیر شد، سایر مردم به سراغ علم داده‌ها رفتند و به همین دلیل است که امروز می‌توانید بدون نیاز به مدرک دکترا یک دانشمند علم داده‌های عالی شوید. این موضوع در ارتباط با مهندسی یادگیری ماشین هم صادق است یا خیر؟ مطمئن نیستم، اما امیدوارم با بلوغ این رشته و برطرف شدن موانع راه برای علاقه‌مندان هموار شود. قبل از شروع به یادگیری ماشین یا هر تخصص دیگری به یک اصل مهم دقت کنید؛ در اولین گام، اکوسیستم آن فناوری را بررسی کنید و ببنید از چه بخش‌هایی تشکیل شده است. این‌کار به شما کمک می‌کند دقیقا بدانید باید روی چه مباحثی تمرکز کنید. 

یک مهندس یادگیری ماشین به چه مهارت‌هایی نیاز دارد؟ 

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

تسلط بر مفاهیم مرتبط با علم داده‌ها

  • پایتون: این زبان‌ برنامه‌نویسی در همه جا دیده می‌شود و به اندازه‌ای ترکیب نحوی روان و ساده‌ای دارد که تقریبا همه با آن آشنا هستند. اگه پایتون را یاد بگیرید در عمل این شانس را دارید تا به سراغ حوزه‌های دیگر هم بروید، البته به شرطی که تجربه کار با کتابخانه‌ها و چهارچوب‌های آن حوزه‌ها را کسب کرده باشید. در کنار پایتون پیشنهاد می‌کنم مفاهیم اولیه زبان R را فراموش نکنید. تجربه شخصی من نشان می‌دهد که زبان آر در بحث علم داده‌ها خیلی کمک کننده است. 
  • ریاضیات و آمار: این موضوع دیگر جای هیچ بحث و چانه‌زنی ندارد. یادگیری آمار و جبر اجتناب‌ناپذیر است. یادگیری مباحث مهم ریاضی کمک می‌کند تا فرمول‌ها را درک کنید و خودتان هم برای حل مسائل فرمول‌های مربوطه را بنویسید. تسلط بر جبر خطی، معادلات و دیفرانسیل باید به اندازه‌ای باشد که قادر به درک معادلات باشید. 
  • یادگیری عمیق: زمانی که تجربه و مهارت‌تان در حوزه یادگیری ماشین زیاد شد، خواسته یا ناخواسته دوست دارید که پیشرفت کنید و به سراغ یادگیری عمیق بروید. البته یادگیری عمیق در ایران خیلی فراگیر نیست و به دلایل مختلف بیشتر شرکت‌ها نیازی به آن ندارند، اما در ارتباط با یادگیری عمیق باید به فکر یادگیری تانسورفلو و پای‌تورچ باشید. 
  • چهارچوب‌های یادگیری ماشین: چهارچوب‌های خیلی خوب و قدرتمندی در این زمینه وجود دارد که sci-kit یکی از آن‌ها است. در کنار این چهارچوب‌ها باید روی پردازش زبان طبیعی، بینایی ماشین و تحلیل‌های سری زمانی کار کنید. علاوه بر این باید در مورد بهینه‌سازی مدل نیز دانش کافی داشته باشید. دلیل این‌که پایتون را به جای R یا هر زبان دیگری به عنوان زبان اول پیشنهاد دادم، این است که روند ساخت و تولید مدل‌ها را تسریع می‌بخشد. مهندسان یادگیری ماشین کارهای زیادی با R انجام می‌دهند، اما در بیشتر موارد عملکرد پایتون بهتر است. در زمان ساخت مدل باید به جنبه زمانی داستان هم دقت کنید. در بیشتر موارد کدنویسی با پایتون سریع‌تر از R است.

مهندسی نرم‌افزار

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

  • درک کلی از ابر و رایانش ابری.
  • محاسبات توزیع شده.
  • طراحی سیستم و معماری نرم‌افزار.
  • ساختارها و الگوریتم‌های داده.
  • پایگاه داده‌ها و زبان‌های پیاده‌سازی محاوره‌ها.
  • کانتینرها (به عنوان مثال Docker ، KubeFlow)
  • مفاهیم برنامه‌نویسی کاربردی.
  • الگوهای طراحی.
  • بزرگ‌داده‌ها.
  • توسعه واسط‌های برنامه‌نویسی کاربردی (API).
  • کنترل نسخه پروژه مثل گیت.
  • واحد آزمایش (یکی از مباحث مرتبط با مهندسی نرم‌افزار).
  • مدیریت پروژه (شما نمی‌توانید به تنهایی یک پروژه هوش مصنوعی را کامل کنید و باید در قالب تیم کار کنید).
  • ادغام مستمر و توزیع مستمر (CI / CD) این مورد در ارتباط با دوآپس است.
  • MLOps گرایش جدیدی است که باید روی یادگیری آن تمرکز کنید. 

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

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

  1. Free and open-source software (FOSS)
  2.  Keboola
  3. Stitch
  4.  Segment
  5.  Fivetran
  6.  Xplenty
  7. Etleap

کلام آخر

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

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

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

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟