پیشگفتار
سونامی یادگیری ماشین
در سال ۲۰۰۶، جفری هینتون و همکارانش مقالهای منتشر کردند که نشان میداد چگونه میتوان یک شبکهٔ عصبی عمیق را آموزش داد تا ارقام دستنویس را با دقتی در سطح بهترین روشهای آن زمان، یعنی بیش از ۹۸ درصد، تشخیص دهد.۱ آنان این شیوه را «یادگیری عمیق (Deep Learning)» نامیدند. شبکهٔ عصبی عمیق مدلی بسیار سادهشده از قشر مغز انسان است که از پشتهای از لایههای نورونهای مصنوعی تشکیل میشود. در آن زمان، آموزش یک شبکهٔ عصبی عمیق عموماً ناممکن تلقی میشد۲ و بیشتر پژوهشگران از اواخر دههٔ ۱۹۹۰ این ایده را کنار گذاشته بودند. این مقاله دوباره علاقهٔ جامعهٔ علمی را زنده کرد و طولی نکشید که مقالات فراوانی نشان دادند یادگیری عمیق نهتنها ممکن است، بلکه با کمک توان پردازشی عظیم و حجم بسیار زیاد داده، میتواند به دستاوردهایی برسد که هیچ روش دیگر یادگیری ماشین امیدی به برابری با آن ندارد. این اشتیاق خیلی زود به بسیاری از حوزههای دیگر یادگیری ماشین نیز گسترش یافت.
یک دهه بعد، یادگیری ماشین صنعت را تسخیر کرده بود و امروز در قلب بخش بزرگی از قابلیتهای چشمگیر محصولات پیشرفته قرار دارد: رتبهبندی نتایج جستوجوی وب، توانبخشی به تشخیص گفتار تلفن هوشمند، پیشنهاد ویدئو و شاید حتی رانندگی خودرو.
یادگیری ماشین در پروژههای شما
طبیعی است که از یادگیری ماشین هیجانزده باشید و بخواهید وارد این حوزه شوید. شاید دوست داشته باشید برای ربات دستسازتان مغزی مستقل بسازید، کاری کنید چهرهها را تشخیص دهد یا یاد بگیرد راه برود.
یا شاید شرکت شما حجم عظیمی از داده در اختیار داشته باشد؛ مانند گزارشهای کاربران، دادههای مالی، دادههای تولید، دادههای حسگرهای ماشینآلات، آمار مرکز تماس، گزارشهای منابع انسانی و موارد دیگر. احتمال زیادی وجود دارد که اگر بدانید کجا را جستوجو کنید، بتوانید اطلاعات ارزشمندی از میان آنها بیرون بکشید. با یادگیری ماشین میتوانید کارهای زیر و بسیار بیشتر از آنها را انجام دهید:
- مشتریان را بخشبندی کنید و برای هر گروه مناسبترین راهبرد بازاریابی را بیابید.
- براساس خرید مشتریان مشابه، برای هر مشتری محصول پیشنهاد کنید.
- تراکنشهایی را که احتمال تقلبیبودنشان زیاد است شناسایی کنید.
- درآمد سال آینده را پیشبینی کنید.
دلیل شما هرچه باشد، تصمیم گرفتهاید یادگیری ماشین را بیاموزید و آن را در پروژههایتان بهکار بگیرید؛ تصمیم بسیار خوبی است.
هدف و رویکرد
این کتاب فرض میکند تقریباً هیچ دانشی دربارهٔ یادگیری ماشین ندارید. هدف آن ارائهٔ مفاهیم، ابزارها و درک شهودی لازم برای پیادهسازی برنامههایی است که بتوانند از داده یاد بگیرند.
دامنهٔ بزرگی از روشها را بررسی خواهیم کرد؛ از سادهترین و پرکاربردترین روشها، مانند رگرسیون خطی، تا برخی روشهای یادگیری عمیق که بهطور منظم در رقابتها برنده میشوند. برای این کار از چارچوبهای آمادهٔ محیط عملیاتی در Python استفاده خواهیم کرد:
- Scikit-Learn استفادهٔ بسیار سادهای دارد، اما در عین حال بسیاری از الگوریتمهای یادگیری ماشین را بهشکل کارآمد پیادهسازی کرده است؛ بنابراین نقطهٔ شروع بسیار مناسبی برای یادگیری این حوزه است. این کتابخانه در سال ۲۰۰۷ بهوسیلهٔ David Cournapeau ایجاد شد و اکنون گروهی از پژوهشگران مؤسسهٔ ملی پژوهش در علوم و فناوری دیجیتال فرانسه (Inria) آن را هدایت میکنند.
- TensorFlow کتابخانهای پیچیدهتر برای محاسبات عددی توزیعشده است. این کتابخانه امکان آموزش و اجرای کارآمد شبکههای عصبی بسیار بزرگ را با توزیع محاسبات میان صدها سرور چندپردازندهٔ گرافیکی فراهم میکند. TensorFlow که به اختصار TF نیز نامیده میشود، در Google ایجاد شد و بسیاری از کاربردهای بزرگمقیاس یادگیری ماشین این شرکت را پشتیبانی میکند. این پروژه در نوامبر ۲۰۱۵ متنباز شد و نسخهٔ ۲٫۰ آن در سپتامبر ۲۰۱۹ انتشار یافت.
- Keras یک رابط برنامهنویسی سطحبالا برای یادگیری عمیق است که آموزش و اجرای شبکههای عصبی را بسیار ساده میکند. Keras همراه TensorFlow عرضه میشود و برای محاسبات سنگین خود بر TensorFlow تکیه دارد.
این کتاب رویکردی عملی را ترجیح میدهد و تلاش میکند با مثالهای واقعی و قابل اجرا و تنها مقدار اندکی نظریه، درکی شهودی از یادگیری ماشین ایجاد کند.
مثالهای کد
تمام مثالهای کد این کتاب متنباز هستند و بهصورت دفترچههای Jupyter در نشانی https://github.com/ageron/handson-ml3 در دسترساند. دفترچههای Jupyter اسناد تعاملیای هستند که متن، تصویر و قطعهکدهای اجرایی را در خود جای میدهند؛ در این کتاب کدها با Python نوشته شدهاند. سادهترین و سریعترین راه برای شروع، اجرای این دفترچهها با Google Colab است. این خدمت رایگان اجازه میدهد هر دفترچهٔ Jupyter را مستقیماً بهصورت برخط و بدون نصب چیزی روی رایانه اجرا کنید. تنها چیزی که لازم دارید یک مرورگر وب و حساب Google است.
این کتاب برای کمک به انجام کار شما نوشته شده است. اگر میخواهید فراتر از مثالهای کد از محتوای دیگری استفاده کنید و آن استفاده خارج از محدودهٔ استفادهٔ منصفانه باشد، برای نمونه فروش یا توزیع محتوای کتابهای O’Reilly یا واردکردن بخش قابلتوجهی از کتاب در مستندات محصول خود، برای دریافت مجوز با نشانی permissions@oreilly.com تماس بگیرید.
ذکر منبع مورد قدردانی است، هرچند الزامی نیست. یک ارجاع معمولاً عنوان، نویسنده، ناشر و ISBN را شامل میشود؛ برای نمونه: Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow by Aurélien Géron. Copyright 2023 Aurélien Géron, 978-1-098-12597-4.
پیشنیازها
کتاب فرض میکند مقداری تجربهٔ برنامهنویسی با Python دارید. اگر هنوز Python نمیدانید، https://learnpython.org نقطهٔ شروع خوبی است و آموزش رسمی موجود در Python.org نیز کیفیت مناسبی دارد.
همچنین فرض میشود با کتابخانههای علمی اصلی Python، بهویژه NumPy، Pandas و Matplotlib آشنا هستید. اگر تاکنون از این کتابخانهها استفاده نکردهاید، نگران نباشید؛ یادگیری آنها دشوار نیست و نویسنده برای هرکدام یک آموزش تهیه کرده است که در https://homl.info/tutorials در دسترس است.
اگر میخواهید نهفقط روش استفاده، بلکه سازوکار الگوریتمهای یادگیری ماشین را نیز بهطور کامل درک کنید، باید دستکم آشنایی مقدماتی با چند مفهوم ریاضی، بهویژه جبر خطی، داشته باشید. مشخصاً باید بدانید بردار و ماتریس چیست و چگونه عملیات سادهای مانند جمع بردارها، ترانهادن ماتریسها و ضرب ماتریسی انجام میشود. برای مرور سریع جبر خطی میتوانید از آموزش موجود در https://homl.info/tutorials استفاده کنید. در همان مجموعه، آموزشی دربارهٔ حساب دیفرانسیل نیز وجود دارد که برای فهم روش آموزش شبکههای عصبی مفید است، هرچند برای درک مفاهیم اصلی کاملاً ضروری نیست. کتاب گاهی از مفاهیم دیگری مانند توابع نمایی و لگاریتم، مقداری نظریهٔ احتمال و آمار مقدماتی نیز استفاده میکند، اما هیچکدام بسیار پیشرفته نیستند. برای کمک بیشتر میتوانید به https://khanacademy.org مراجعه کنید که دورههای رایگان و باکیفیت ریاضی ارائه میدهد.
نقشهٔ راه
کتاب در دو بخش سازماندهی شده است. بخش اول، «مبانی یادگیری ماشین»، موضوعات زیر را پوشش میدهد:
- یادگیری ماشین چیست، چه مسئلههایی را حل میکند و ردهها و مفاهیم بنیادی سامانههای آن کداماند.
- مراحل یک پروژهٔ معمول یادگیری ماشین.
- یادگیری با برازش یک مدل روی داده.
- بهینهسازی تابع هزینه.
- مدیریت، پاکسازی و آمادهسازی داده.
- انتخاب و مهندسی ویژگیها.
- انتخاب مدل و تنظیم فراپارامترها با اعتبارسنجی متقابل (Cross-Validation).
- چالشهای یادگیری ماشین، بهویژه کمبرازش و بیشبرازش و موازنهٔ سوگیری/واریانس.
- پرکاربردترین الگوریتمهای یادگیری: رگرسیون خطی و چندجملهای، رگرسیون لجستیک، k نزدیکترین همسایه، ماشین بردار پشتیبان، درخت تصمیم، جنگل تصادفی و روشهای تجمیعی.
- کاهش ابعاد دادهٔ آموزشی برای مقابله با «نفرین ابعاد».
- دیگر روشهای یادگیری بدون نظارت، از جمله خوشهبندی، برآورد چگالی و تشخیص ناهنجاری.
بخش دوم، «شبکههای عصبی و یادگیری عمیق»، موضوعات زیر را بررسی میکند:
- شبکههای عصبی چه هستند و برای چه کارهایی مناسباند.
- ساخت و آموزش شبکههای عصبی با TensorFlow و Keras.
- معماریهای مهم شبکهٔ عصبی: شبکههای پیشخور برای دادههای جدولی، شبکههای کانولوشنی برای بینایی رایانهای، شبکههای بازگشتی و شبکههای حافظهٔ بلندمدت-کوتاهمدت (LSTM) برای پردازش دنباله، رمزگذار-رمزگشا و Transformer برای پردازش زبان طبیعی، و نیز خودرمزگذارها، شبکههای مولد تخاصمی (GAN) و مدلهای انتشار برای یادگیری مولد.
- روشهای آموزش شبکههای عصبی عمیق.
- چگونگی ساخت یک عامل، مانند ربات یک بازی، که با آزمون و خطا و از طریق یادگیری تقویتی راهبردهای مناسب را بیاموزد.
- بارگذاری و پیشپردازش کارآمد حجمهای بزرگ داده.
- آموزش و استقرار مدلهای TensorFlow در مقیاس بزرگ.
بخش اول عمدتاً بر Scikit-Learn تکیه دارد و بخش دوم از TensorFlow و Keras استفاده میکند.
تغییرات میان ویرایش اول و دوم
اگر ویرایش اول را خواندهاید، مهمترین تغییرات ویرایش دوم چنین بودهاند:
- تمام کدها از TensorFlow 1.x به TensorFlow 2.x منتقل شدند و بخش بزرگی از کدهای سطحپایین TensorFlow مانند گرافها، نشستها، ستونهای ویژگی و برآوردگرها با کد سادهتر Keras جایگزین شد.
- ویرایش دوم رابط Data API را برای بارگذاری و پیشپردازش مجموعهدادههای بزرگ، رابط راهبردهای توزیع برای آموزش و استقرار مدلهای TF در مقیاس، TF Serving و Google Cloud AI Platform برای عملیاتیکردن مدلها و نیز بهاختصار TF Transform، TFLite، TF Addons/Seq2Seq، TensorFlow.js و TF Agents را معرفی کرد.
- موضوعات بیشتری به یادگیری ماشین افزوده شد، از جمله فصل جدیدی دربارهٔ یادگیری بدون نظارت، روشهای بینایی رایانهای برای تشخیص شیء و بخشبندی معنایی، پردازش دنبالهها با شبکههای عصبی کانولوشنی، پردازش زبان طبیعی با شبکههای عصبی بازگشتی، CNN، Transformer و GAN.
جزئیات بیشتر در https://homl.info/changes2 آمده است.
تغییرات میان ویرایش دوم و سوم
اگر ویرایش دوم را خواندهاید، مهمترین تغییرات ویرایش سوم عبارتاند از:
- تمام کدها برای نسخههای جدید کتابخانهها بهروزرسانی شدهاند. این ویرایش قابلیتهای تازهٔ Scikit-Learn مانند ردیابی نام ویژگیها، تقویت گرادیانی مبتنی بر هیستوگرام و انتشار برچسب را معرفی میکند. همچنین کتابخانهٔ Keras Tuner برای تنظیم فراپارامترها، کتابخانهٔ Transformers از Hugging Face برای پردازش زبان طبیعی و لایههای جدید پیشپردازش و افزایش داده در Keras اضافه شدهاند.
- چند مدل بینایی از جمله ResNeXt، DenseNet، MobileNet، CSPNet و EfficientNet و راهنمای انتخاب مدل مناسب افزوده شدهاند.
- فصل ۱۵ بهجای سری زمانی ساختگی، دادههای استفاده از اتوبوس و قطار شیکاگو را تحلیل میکند و مدل ARMA و گونههای آن را معرفی میکند.
- فصل ۱۶ دربارهٔ پردازش زبان طبیعی اکنون یک مدل ترجمهٔ انگلیسی به اسپانیایی میسازد؛ ابتدا با شبکهٔ بازگشتی رمزگذار-رمزگشا و سپس با مدل Transformer. این فصل مدلهای زبانی Switch Transformers، DistilBERT، T5 و PaLM را نیز بررسی میکند و به اعلان زنجیرهٔ استدلال اشاره دارد. علاوه بر این، Transformerهای بینایی (ViT) معرفی میشوند و مروری بر مدلهای تصویری مبتنی بر Transformer مانند DeiT، Perceiver و DINO و نیز چند مدل چندوجهی بزرگ مانند CLIP، DALL·E، Flamingo و GATO ارائه میشود.
- فصل ۱۷ دربارهٔ یادگیری مولد، مدلهای انتشار را معرفی میکند و نشان میدهد چگونه یک مدل انتشار احتمالی نویززدایی (DDPM) از پایه پیادهسازی شود.
- فصل ۱۹ از Google Cloud AI Platform به Google Vertex AI منتقل شده و برای جستوجوی فراپارامتر در مقیاس بزرگ از Keras Tuner توزیعشده استفاده میکند. این فصل کد TensorFlow.js قابل آزمایش برخط را نیز شامل میشود و روشهای بیشتر آموزش توزیعشده مانند PipeDream و Pathways را معرفی میکند.
- برای جا دادن محتوای تازه، برخی بخشها به فضای برخط منتقل شدهاند؛ از جمله دستورالعمل نصب، تحلیل مؤلفههای اصلی هستهای (PCA)، جزئیات ریاضی آمیختههای گاوسی بیزی، TF Agents و ضمیمههای پیشین A دربارهٔ پاسخ تمرینها، C دربارهٔ ریاضیات ماشین بردار پشتیبان و E دربارهٔ معماریهای تکمیلی شبکهٔ عصبی.
جزئیات بیشتر در https://homl.info/changes3 موجود است.
منابع دیگر
منابع بسیار خوبی برای یادگیری ماشین وجود دارد. برای نمونه، دورهٔ یادگیری ماشین Andrew Ng در Coursera بسیار ارزشمند است، هرچند زمان قابلتوجهی میطلبد. وبسایتهای مفید دیگری نیز وجود دارند؛ از جمله راهنمای کاربر Scikit-Learn. Dataquest آموزشهای تعاملی خوبی ارائه میکند و وبلاگهای یادگیری ماشین فهرستشده در Quora نیز میتوانند جالب باشند.
کتابهای مقدماتی متعددی نیز دربارهٔ یادگیری ماشین منتشر شدهاند، از جمله:
- Data Science from Scratch, 2nd edition نوشتهٔ Joel Grus از O’Reilly که مبانی یادگیری ماشین را توضیح میدهد و برخی الگوریتمهای اصلی را از پایه با Python پیادهسازی میکند.
- Machine Learning: An Algorithmic Perspective, 2nd edition نوشتهٔ Stephen Marsland از Chapman & Hall که مقدمهای عمیق بر دامنهای گسترده از موضوعات همراه با مثالهای Python و NumPy است.
- Python Machine Learning, 3rd edition نوشتهٔ Sebastian Raschka از Packt Publishing که از کتابخانههای متنباز Python مانند Pylearn 2 و Theano استفاده میکند.
- Deep Learning with Python, 2nd edition نوشتهٔ François Chollet از Manning؛ کتابی عملی، روشن و فشرده از نویسندهٔ کتابخانهٔ Keras که مثالهای کد را بر نظریهٔ ریاضی ترجیح میدهد.
- The Hundred-Page Machine Learning Book نوشتهٔ Andriy Burkov که با وجود حجم کم، موضوعات بسیاری را بهصورت قابلفهم و بدون پرهیز از معادلات ریاضی پوشش میدهد.
- Learning from Data نوشتهٔ Yaser S. Abu-Mostafa، Malik Magdon-Ismail و Hsuan-Tien Lin که رویکردی نظریتر دارد و بهویژه دربارهٔ موازنهٔ سوگیری/واریانس بینش عمیقی ارائه میدهد.
- Artificial Intelligence: A Modern Approach, 4th edition نوشتهٔ Stuart Russell و Peter Norvig از Pearson؛ کتابی بسیار گسترده که موضوعات فراوانی از جمله یادگیری ماشین را پوشش میدهد و جایگاه این حوزه را در هوش مصنوعی روشن میکند.
- Deep Learning for Coders with fastai and PyTorch نوشتهٔ Jeremy Howard و Sylvain Gugger از O’Reilly که مقدمهای بسیار روشن و عملی بر یادگیری عمیق با کتابخانههای fastai و PyTorch ارائه میکند.
در نهایت، پیوستن به وبسایتهای رقابت یادگیری ماشین مانند Kaggle.com به شما اجازه میدهد مهارتهای خود را روی مسائل واقعی تمرین کنید و از کمک و تجربهٔ برخی از بهترین متخصصان این حوزه بهره ببرید.
قراردادهای نگارشی این کتاب
- حروف ایتالیک
- برای اصطلاحات جدید، URLها، نشانیهای ایمیل، نام فایلها و پسوند فایلها.
فونت با عرض ثابت- برای فهرست کدها و همچنین ارجاع در متن به عناصر برنامه مانند نام متغیر یا تابع، پایگاه داده، نوع داده، متغیر محیطی، دستور و کلیدواژه.
عرض ثابت پررنگ- برای فرمانها یا متنهایی که کاربر باید دقیقاً همانگونه وارد کند.
عرض ثابت ایتالیک- برای متنی که باید با مقدار کاربر یا مقداری تعیینشده توسط بافت جایگزین شود.
- نشانهگذاری
- برای جلوگیری از ابهام، در سراسر کتاب نشانههای سجاوندی بیرون از علامت نقلقول قرار گرفتهاند؛ نویسنده از طرفداران سختگیر این قاعده عذرخواهی میکند.
یادگیری برخط O’Reilly
O’Reilly Media بیش از ۴۰ سال است آموزش، دانش و بینش در حوزهٔ فناوری و کسبوکار ارائه میکند تا به موفقیت شرکتها کمک کند. شبکهٔ ویژهٔ کارشناسان و نوآوران این مجموعه، دانش و تجربهٔ خود را از طریق کتابها، مقالهها و سکوی یادگیری برخط O’Reilly به اشتراک میگذارند. این سکو دسترسی درخواستی به دورههای زنده، مسیرهای آموزشی عمیق، محیطهای تعاملی کدنویسی و مجموعهٔ بزرگی از محتوای متنی و ویدئویی O’Reilly و بیش از ۲۰۰ ناشر دیگر فراهم میکند. اطلاعات بیشتر در https://oreilly.com آمده است.
راههای تماس
نظرها و پرسشهای مربوط به کتاب را میتوانید برای ناشر ارسال کنید:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
صفحهای برای این کتاب وجود دارد که اصلاحیهها، مثالها و اطلاعات تکمیلی در آن درج میشود: https://homl.info/oreilly3. برای نظر یا پرسش فنی دربارهٔ کتاب میتوانید به bookquestions@oreilly.com پیام بفرستید. اخبار کتابها و دورهها در https://oreilly.com منتشر میشود. نشانی LinkedIn: https://linkedin.com/company/oreilly-media، Twitter: https://twitter.com/oreillymedia و YouTube: https://youtube.com/oreillymedia.