رفتن به محتوا

فصل ۲۰: جمع‌بندی

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

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

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

رویکردهای مختلف به هوش مصنوعی

Section titled “رویکردهای مختلف به هوش مصنوعی”

نخست، یادگیری عمیق مترادف با هوش مصنوعی (AI) یا حتی مترادف با یادگیری ماشین (ML) نیست. این حوزه شامل چندین لایهٔ تودرتو است:

  • هوش مصنوعی (AI) یک حوزهٔ دیرینه و گسترده است که به طور کلی می‌تواند به عنوان «تمام تلاش‌ها برای خودکارسازی فرایندهای شناختی انسان» درک شود. این می‌تواند از چیزهای بسیار پایه‌ای مانند منطق شروط سخت‌کدشده و سیستم‌های نمادین، تا الگوریتم‌های پیچیده متغیر باشد.
  • یادگیری ماشین (ML) یک زیرحوزهٔ خاص از هوش مصنوعی است که هدف آن توسعهٔ خودکار برنامه‌ها (که مدل نامیده می‌شوند) صرفاً از طریق مواجهه با داده‌های آموزشی است. این فرایند تبدیل داده‌ها به برنامه‌ها، یادگیری نام دارد. یادگیری ماشین شامل شاخه‌های بسیاری مانند درخت‌های تصمیم، رگرسیون خطی، ماشین‌های بردار پشتیبان (SVM)، الگوریتم‌های ژنتیک و شبکه‌های عصبی است.
  • یادگیری عمیق (Deep learning) یکی از شاخه‌های پرشمار یادگیری ماشین است که در آن مدل‌ها زنجیره‌های طولانی از تبدیل‌های هندسی هستند که یکی پس از دیگری اعمال می‌شوند. این عملیات در لایه‌هایی ساختار می‌یابند و پارامترهای آن‌ها به طور مشترک و انتها‌به‌انتها از طریق پس‌انتشار و نزول گرادیان بهینه‌سازی می‌شوند.
  • هوش مصنوعی مولد (Generative AI) یک زیرمجموعهٔ خاص از یادگیری عمیق است که در آن مدل‌ها قادر به تولید متن، تصویر، ویدیو، یا صدا هستند. این مدل‌ها تمایل دارند بسیار بزرگ باشند—میلیاردها پارامتر—و معمولاً به عنوان «مدل‌های پایه» عمل می‌کنند که می‌توانند برای وظایف مختلف وفق داده شوند.

آنچه یادگیری عمیق را در حوزهٔ یادگیری ماشین متمایز می‌سازد

Section titled “آنچه یادگیری عمیق را در حوزهٔ یادگیری ماشین متمایز می‌سازد”

اگرچه یادگیری عمیق تنها یکی از رویکردهای پرشمار به یادگیری ماشین است، اما از نظر تأثیرگذاری در جایگاهی برابر با سایر رویکردها قرار ندارد. یادگیری عمیق رویکردی استثنایی است.

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

به دلیل موفقیت‌های فنی بی‌سابقهٔ خود، یادگیری عمیق به تنهایی سومین رونق بزرگ هوش مصنوعی (AI boom) را از سال ۲۰۱۲ رقم زده است، و در سال‌های اخیر با هوش مصنوعی مولد دوباره شتاب گرفته است.

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

چگونه دربارهٔ یادگیری عمیق بیندیشیم

Section titled “چگونه دربارهٔ یادگیری عمیق بیندیشیم”

شگفت‌انگیزترین چیز دربارهٔ یادگیری عمیق این است که چقدر ساده است. پانزده سال پیش، هیچ‌کس انتظار نداشت که بتوانیم به چنین نتایج خیره‌کننده‌ای تنها با مدل‌های پارامتری بزرگی دست یابیم که با نزول گرادیان روی مثال‌های کافی آموزش داده شده‌اند. همان‌طور که فاینمن یک‌بار دربارهٔ جهان گفت: «پیچیده نیست، فقط مقدارش خیلی زیاد است.»1

در یادگیری عمیق، همه‌چیز یک بردار است؛ یعنی همه‌چیز یک نقطه در یک فضای هندسی است. مدل‌ها تبدیل‌های هندسی پیچیده‌ای هستند که داده‌های ورودی را از یک فضای هندسی به فضای هندسی دیگری می‌پیچانند و تغییر شکل می‌دهند.

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

این جادوی یادگیری عمیق است—تبدیل معنا به بردارها، به فضاهای هندسی، و سپس تبدیل تدریجی این فضاها به گونه‌ای که الگوهای پیچیده به سادگی قابل تفکیک و پیش‌بینی شوند.

کل این ماجرا بر دو ایدهٔ اساسی استوار است: اینکه معنا از روابط دوتایی بین مفاهیم مشتق می‌شود، و اینکه هر تبدیلی را می‌توان با زنجیره‌ای از توابع پیوسته و مشتق‌پذیر تقریب زد که با استفاده از نزول گرادیان قابل بهینه‌سازی هستند.

فناوری‌های کلیدی توانمندساز

Section titled “فناوری‌های کلیدی توانمندساز”

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

  • نوآوری‌های الگوریتمی تدریجی، که ابتدا در طول دو دهه گسترش یافت (با شروع از پس‌انتشار) و سپس با سرازیر شدن تلاش‌های پژوهشی بیشتر به یادگیری عمیق، شتاب بیشتری گرفت.
  • در دسترس بودن مقادیر عظیمی از داده‌های تصویر، ویدیو، و متن، که پیش‌شرطی برای درک این واقعیت است که مدل‌های به اندازهٔ کافی بزرگ آموزش‌دیده روی داده‌های به اندازهٔ کافی بزرگ، تمام چیزی هستند که نیاز داریم. این پدیده به عنوان «درس تلخ» (bitter lesson) هوش مصنوعی شناخته می‌شود.
  • در دسترس بودن سخت‌افزارهای محاسباتی سریع و موازی با قیمت مناسب، به ویژه پردازنده‌های گرافیکی ساخت شرکت NVIDIA—ابتدا GPUهای بازی و سپس تراشه‌هایی که از پایه برای یادگیری عمیق طراحی شدند.
  • پشتهٔ نرم‌افزاری پیشرفته‌ای که این قدرت محاسباتی را در دسترس انسان‌ها قرار داد: زبان CUDA، و چارچوب‌هایی مانند TensorFlow، JAX، و PyTorch که مشتق‌گیری خودکار را انجام می‌دهند، به همراه Keras که یادگیری عمیق را برای همگان در دسترس و قابل استفاده ساخت.

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

جریان کاری جامع یادگیری ماشین

Section titled “جریان کاری جامع یادگیری ماشین”

دسترسی به ابزاری بسیار قدرتمند برای ساخت مدل‌هایی که هر فضای ورودی را به هر فضای هدفی نگاشت می‌کنند عالی است، اما فرایند ساخت مدل تنها بخش کوچکی از جریان کاری یک پروژهٔ موفق یادگیری ماشین است. به یاد بیاورید که جریان کاری جامع یادگیری ماشین که در فصل ۶ بررسی کردیم، از هفت گام تشکیل شده است:

  • مسئله را تعریف کنید. چه داده‌هایی در دسترس است، و سعی در پیش‌بینی چه چیزی دارید؟ آیا نیاز به جمع‌آوری داده‌های بیشتری دارید یا باید افرادی را برای برچسب‌گذاری دستی استخدام کنید؟
  • راهی برای اندازه‌گیری قابل اعتماد پیشرفت خود بیابید. یک معیار موفقیت انتخاب کنید که با اهداف واقعی شما همسو باشد.
  • راهبرد اعتبارسنجی خود را آماده کنید. یک پروتکل ارزیابی مستحکم (مانند نگهداشت ساده، یا اعتبارسنجی متقاطع K-fold) انتخاب کنید تا بتوانید تعمیم واقعی را بسنجید.
  • داده‌های خود را برداری‌سازی کنید. داده‌های خود را پیش‌پردازش کنید، آن‌ها را به تانسورها تبدیل نمایید و در دامنه‌ای مناسب نرمال‌سازی کنید.
  • یک خط مبنای عقل سلیم را شکست دهید. یک مدل بسیار ساده بسازید تا نشان دهید داده‌های شما واقعاً قدرت پیش‌بینی دارند.
  • مقیاس را افزایش دهید: مدلی توسعه دهید که بتواند بیش‌برازش کند. قدرت مدل را افزایش دهید تا مطمئن شوید ظرفیت کافی برای یادگیری ساختار داده‌ها را دارد.
  • مدل خود را منظم‌سازی کنید و ابرپارامترها را تنظیم نمایید. بیش‌برازش را با تکنیک‌هایی مانند Dropout، کاهش وزن (L2)، و تنظیم ابرپارامترها کاهش دهید تا به بهترین عملکرد تعمیم دست یابید.

خانواده‌های معماری شبکه‌ای که پس از خواندن این کتاب باید به خوبی با آن‌ها آشنا باشید عبارتند از شبکه‌های متصل متراکم (densely connected)، شبکه‌های کانولوشنی (ConvNets)، شبکه‌های عصبی بازگشتی (RNNs)، و ترنسفورمرها (Transformers). جدول ۲۰.۱ انواع مدل‌های توصیه‌شده را برای انواع مختلف داده‌ها خلاصه می‌کند.

جدول ۲۰.۱: معماری‌های مدل برای انواع مختلف داده‌ها

ورودیخروجیمدل
داده‌های برداریاحتمال کلاس، مقدار رگرسیونشبکه با اتصال متراکم (Densely connected network)
داده‌های سری زمانیاحتمال کلاس، مقدار رگرسیونشبکهٔ عصبی بازگشتی (RNN)، ترنسفورمر
تصاویراحتمال کلاس، مقدار رگرسیونشبکهٔ کانولوشنی (ConvNet)
متناحتمال کلاس، مقدار رگرسیونترنسفورمر
متن، تصاویرمتنترنسفورمر
متن، تصاویرتصاویرخودرمزگذار متغیر (VAE)، مدل نفوذ

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

اکنون بیایید به سرعت ویژگی‌های خاص هر معماری شبکه را مرور کنیم.

شبکه‌های با اتصال متراکم

Section titled “شبکه‌های با اتصال متراکم”

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

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

به یاد داشته باشید، برای انجام طبقه‌بندی دودویی (binary classification)، پشتهٔ لایه‌های خود را با یک لایهٔ Dense(1, activation="sigmoid") به پایان برسانید و از تابع زیان binary_crossentropy استفاده کنید. اهداف شما باید ۰ یا ۱ باشند:

import keras
from keras import layers
inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

برای انجام طبقه‌بندی چندکلاسهٔ تک‌برچسبی (که در آن هر نمونه دقیقاً به یک کلاس تعلق دارد)، پشتهٔ لایه‌های خود را با Dense(num_classes, activation="softmax") به پایان برسانید. اگر اهداف شما one-hot هستند از categorical_crossentropy، و اگر اهداف عدد صحیح هستند از sparse_categorical_crossentropy استفاده کنید:

inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_classes, activation="softmax")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

برای انجام طبقه‌بندی چندکلاسهٔ چندبرچسبی (که در آن هر نمونه می‌تواند چندین کلاس داشته باشد)، پشتهٔ لایه‌های خود را با Dense(num_classes, activation="sigmoid") به پایان برسانید و از binary_crossentropy استفاده کنید. اهداف شما باید به صورت k-hot کدگذاری شوند:

inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_classes, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

برای انجام رگرسیون به سمت برداری از مقادیر پیوسته، پشتهٔ لایه‌های خود را با یک لایهٔ Dense بدون هیچ تابع فعال‌سازی (خطی) با تعداد واحدهای برابر با ابعاد خروجی به پایان برسانید. معمولاً از تابع زیان mean_squared_error (MSE) استفاده می‌شود:

inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_values)(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="mse")

شبکه‌های کانولوشنی (ConvNets)

Section titled “شبکه‌های کانولوشنی (ConvNets)”

لایه‌های کانولوشن با اعمال تبدیل هندسی یکسان به پنجره‌های کوچک در سراسر ورودی، به الگوهای محلی مکانی نگاه می‌کنند. این امر باعث می‌شود بازنمایی‌های آن‌ها ناوردا نسبت به انتقال (translation invariant) و از نظر پارامترها بسیار کارآمد باشند.

شبکه‌های کانولوشنی، یا ConvNetها، از پشته‌هایی از لایه‌های کانولوشن و ادغام بیشینه (max pooling) تشکیل شده‌اند. لایه‌های ادغام ویژگی‌ها را در ابعاد مکانی کاهش می‌دهند تا لایه‌های بعدی بتوانند پنجره‌های بزرگ‌تری از ورودی اولیه را پوشش دهند. این شبکه‌ها ابزار ایده‌آلی برای هر نوع دادهٔ تصویر، ویدیو، یا نقشهٔ دوبعدی هستند.

در اینجا یک شبکهٔ نمونه برای طبقه‌بندی تصویر (طبقه‌بندی چندکلاسه) با استفاده از لایه‌های کارآمد SeparableConv2D آورده شده است:

inputs = keras.Input(shape=(height, width, channels))
x = layers.SeparableConv2D(32, 3, activation="relu")(inputs)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.MaxPooling2D(2)(x)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.SeparableConv2D(128, 3, activation="relu")(x)
x = layers.MaxPooling2D(2)(x)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.SeparableConv2D(128, 3, activation="relu")(x)
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_classes, activation="softmax")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

هنگام ساخت یک ConvNet بسیار عمیق، معمول است که لایه‌های نرمال‌سازی دسته‌ای (BatchNormalization) و همچنین اتصال‌های باقیمانده (Residual connections) اضافه شوند تا گرادیان‌ها بتوانند به نرمی در طول شبکه جریان یابند.

یک ترنسفورمر به مجموعه‌ای از بردارها (مانند بردارهای کلمات) نگاه می‌کند و از توجه عصبی (neural attention) برای تبدیل هر بردار به یک بازنمایی متأثر از بافت سایر بردارهای موجود در مجموعه استفاده می‌نماید. این لایه هیچ ترتیبی را به صورت پیش‌فرض فرض نمی‌کند، بنابراین ما باید جاسازی‌های مکانی (positional embeddings) اضافه کنیم تا ترتیب توالی را درک کند.

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

یک ترنسفورمر دنباله‌به‌دنباله (sequence-to-sequence) از دو بخش تشکیل شده است:

  • یک TransformerEncoder که یک توالی بردار ورودی را به یک توالی بردار خروجی آگاه از بافت و آگاه از ترتیب تبدیل می‌کند
  • یک TransformerDecoder که خروجی رمزگذار و توالی هدف تولیدشده تا این لحظه را دریافت کرده و پیش‌بینی توکن بعدی را در توالی هدف انجام می‌دهد

اگر تنها در حال پردازش یک توالی (یا مجموعه) منفرد از بردارها هستید، تنها از TransformerEncoder استفاده خواهید کرد.

در ادامه یک ترنسفورمر دنباله‌به‌دنباله برای نگاشت یک توالی مبدأ به یک توالی مقصد آورده شده است (برای مثال، این ساختار می‌تواند برای ترجمهٔ ماشینی یا پاسخ‌گویی به سؤالات استفاده شود):

from keras_hub.layers import TokenAndPositionEmbedding
from keras_hub.layers import TransformerDecoder, TransformerEncoder
# Source sequence
encoder_inputs = keras.Input(shape=(src_seq_length,), dtype="int64")
x = TokenAndPositionEmbedding(vocab_size, src_seq_length, embed_dim)(
encoder_inputs
)
encoder_outputs = TransformerEncoder(intermediate_dim=256, num_heads=8)(x)
# Target sequence so far
decoder_inputs = keras.Input(shape=(dst_seq_length,), dtype="int64")
x = TokenAndPositionEmbedding(vocab_size, dst_seq_length, embed_dim)(
decoder_inputs
)
x = TransformerDecoder(intermediate_dim=256, num_heads=8)(x, encoder_outputs)
# Predictions for target sequence one step in the future
decoder_outputs = layers.Dense(vocab_size, activation="softmax")(x)
transformer = keras.Model([encoder_inputs, decoder_inputs], decoder_outputs)
transformer.compile(optimizer="adamw", loss="categorical_crossentropy")

و در ادامه یک TransformerEncoder منفرد برای طبقه‌بندی دودویی توالی‌های اعداد صحیح آورده شده است:

inputs = keras.Input(shape=(seq_length,), dtype="int64")
x = TokenAndPositionEmbedding(vocab_size, seq_length, embed_dim)(inputs)
x = TransformerEncoder(intermediate_dim=256, num_heads=8)(x)
x = layers.GlobalMaxPooling1D()(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="adamw", loss="binary_crossentropy")

شبکه‌های عصبی بازگشتی (RNNs)

Section titled “شبکه‌های عصبی بازگشتی (RNNs)”

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

سه لایهٔ RNN در کراس در دسترس است: SimpleRNN، GRU، و LSTM. برای اکثر کاربردهای عملی، GRU یا LSTM به دلیل توانایی در مدیریت وابستگی‌های بلندمدت به SimpleRNN ترجیح داده می‌شوند.

برای روی هم چیدن چندین لایهٔ RNN روی یکدیگر، هر لایه پیش از لایهٔ آخر باید خروجی‌های تمام گام‌های زمانی را برگرداند، که با تنظیم return_sequences=True انجام می‌شود.

کد زیر یک لایهٔ RNN منفرد را برای طبقه‌بندی دودویی توالی‌های برداری نشان می‌دهد:

inputs = keras.Input(shape=(num_timesteps, num_features))
x = layers.LSTM(32)(inputs)
outputs = layers.Dense(num_classes, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

و این یک لایهٔ پشته‌ای از RNNها برای طبقه‌بندی دودویی توالی‌های برداری است:

inputs = keras.Input(shape=(num_timesteps, num_features))
x = layers.LSTM(32, return_sequences=True)(inputs)
x = layers.LSTM(32, return_sequences=True)(x)
x = layers.LSTM(32)(x)
outputs = layers.Dense(num_classes, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

محدودیت‌های یادگیری عمیق

Section titled “محدودیت‌های یادگیری عمیق”

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

با این حال، نکتهٔ کلیدی این است که این نگاشت اغلب به گونه‌ای قابل یادگیری نیست که تعمیم‌پذیر باشد. یادگیری عمیق در معرض چند محدودیت بنیادین قرار دارد:

  • آن‌ها اساساً در سازگاری با موقعیت‌های بدیع دچار مشکل هستند. از آنجا که پارامترهای آن‌ها پس از آموزش ثابت می‌شوند، آن‌ها تنها می‌توانند الگوهای مشابه با داده‌های آموزشی خود را بازیابی یا بازتولید کنند. در مواجهه با شرایط کاملاً جدید، آن‌ها قادر به استدلال در لحظه نیستند.
  • آن‌ها نسبت به نحوهٔ بیان و سایر عوامل حواس‌پرتی بسیار حساس هستند. مدل‌های یادگیری عمیق حساسیت بالایی نسبت به تغییرات سطحی در ارائهٔ ورودی نشان می‌دهند، مانند تغییرات جزئی در عبارت‌بندی یک اعلان، یا نویزهای متخاصم نامحسوس روی تصاویر.
  • آن‌ها اغلب نمی‌توانند الگوریتم‌های تعمیم‌پذیر را یاد بگیرند. ماهیت پیوسته و هندسی مدل‌های یادگیری عمیق آن‌ها را اساساً برای یادگیری برنامه‌های گسسته، دقیق و گام‌به‌گام (مانند جمع حسابی یا مرتب‌سازی) نامناسب می‌سازد.

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

آنچه ممکن است در پیش رو باشد

Section titled “آنچه ممکن است در پیش رو باشد”

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

تا سال ۲۰۲۴، این آگاهی باعث گذار به سمت سازگاری در زمان آزمون (TTA) شد، جایی که مدل‌ها با استفاده از استدلال پویا، جستجو، یا آموزش تطبیقی در حین حل مسئله عمل می‌کنند، نه اینکه صرفاً خروجی منجمد یک شبکهٔ ایستا را ارائه دهند.

دستیابی به هوش سیال در سطح انسان (و حل آزمون‌هایی مانند ARC-AGI-2) مستلزم فراتر رفتن از محدودیت‌های ذاتی سیستم‌های صرفاً مشتق‌پذیر است.

پیشرفت‌های کلیدی آینده احتمالاً شامل موارد زیر خواهد بود:

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

در نهایت، توسعهٔ هوش مصنوعی که هوش سیال انسان‌مانند را منعکس کند مستلزم در هم آمیختن شهود هندسی پیوسته (سیستم ۱) با استدلال نمادین گسسته (سیستم ۲) خواهد بود.

به‌روز ماندن در حوزه‌ای با تحولات پرشتاب

Section titled “به‌روز ماندن در حوزه‌ای با تحولات پرشتاب”

به عنوان کلام پایانی، می‌خواهم چند راهنمایی دربارهٔ نحوهٔ ادامهٔ یادگیری و به‌روز نگه‌داشتن مهارت‌هایتان در این دنیای پویا به شما ارائه دهم.

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

تمرین روی مسائل دنیای واقعی با استفاده از Kaggle

Section titled “تمرین روی مسائل دنیای واقعی با استفاده از Kaggle”

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

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

مطالعه دربارهٔ جدیدترین پیشرفت‌ها در arXiv

Section titled “مطالعه دربارهٔ جدیدترین پیشرفت‌ها در arXiv”

پژوهش‌های یادگیری عمیق، برخلاف برخی دیگر از حوزه‌های علمی، کاملاً در فضای باز صورت می‌گیرد: تقریباً تمام مقالات پیش از انتشار رسمی در ژورنال‌ها، روی سرور پیش‌چاپ arXiv.org قرار می‌گیرند. این به شما امکان می‌دهد در همان روزی که یک پیشرفت جدید کشف می‌شود، از آن مطلع شوید!

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

با بیش از ۲.۵ میلیون کاربر تا اوایل سال ۲۰۲۵ و رشدی مداوم، کراس دارای اکوسیستم عظیمی از آموزش‌ها، افزونه‌ها و کتابخانه‌ها است:

این پایان کتاب یادگیری عمیق با پایتون است! امیدوارم چیزهای مفیدی دربارهٔ یادگیری ماشین، یادگیری عمیق، کراس، و شاید حتی شناخت به طور کلی آموخته باشید. یادگیری یک سفر مادام‌العمر است، به ویژه در حوزهٔ هوش مصنوعی، جایی که مجهولات ما بسیار بیشتر از قطعیت‌هایمان است. بنابراین لطفاً به یادگیری، پرسشگری و پژوهش ادامه دهید. هرگز متوقف نشوید. زیرا حتی با وجود تمام پیشرفت‌های حاصل‌شده تا به امروز، بیشتر سؤالات بنیادین در هوش مصنوعی هنوز بی‌پاسخ مانده‌اند. بسیاری از آن‌ها حتی هنوز به درستی مطرح نشده‌اند.


حق نشر متن اصلی: ©۲۰۲۵ Manning Publications، François Chollet و Matthew Watson. این صفحه ترجمه‌ی فارسی است؛ متن اصلی را در deeplearningwithpython.io بخوانید یا نسخه‌ی چاپی را از Manning بخرید.

  1. ریچارد فاینمن، مصاحبه، The World from Another Point of View، تلویزیون یورکشایر، ۱۹۷۲. ↩

مقدمه‌ای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.