درک شبکه های عصبی و یادگیری عمیق

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

شبکه عصبی چیست؟

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

لایه ها

بلوک های ساختمان یک شبکه عصبی از لایه ها تشکیل شده است:

1. لایه ورودی: این جایی است که شبکه ورودی خود را از دنیای خارجی دریافت می کند، شبیه به کودکی که به میوه نگاه می کند.

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

3. لایه خروجی: این جایی است که تصمیم یا پیش بینی نهایی انجام می شود، مانند کودک که می گوید: “این یک سیب است.

نورون ها: واحدهای پردازش

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

پرسپترون

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

پرسپترون

  1. زمینه تاریخی: پرسپترون یکی از اولین و ساده ترین انواع مدل های شبکه عصبی مصنوعی است. این توسط فرانک روزنبلات در دهه 1950 به عنوان مدلی برای وظایف طبقه بندی باینری توسعه یافت.
  2. ساختار: پرسپترون یک شبکه عصبی تک لایه است. این شامل مقادیر ورودی، وزن ها، یک سوگیری (یا آستانه) و یک تابع فعال سازی است. ورودی ها در وزن مربوطه ضرب می شوند، با هم جمع می شوند و سپس بایاس اضافه می شود. نتیجه از طریق یک تابع فعال سازی منتقل می شود، که در مورد Perceptron معمولاً یک تابع مرحله ای است. این تابع خروجی 1 می دهد اگر مجموع بالاتر از یک آستانه خاص باشد و 0 در غیر این صورت.
  3. یادگیری: Perceptron از طریق فرآیندی یاد می گیرد که در آن وزن ها را بر اساس خطای خروجی در مقایسه با نتیجه مورد انتظار تنظیم می کند. این فرآیند به طور مکرر در مجموعه داده آموزشی تکرار می شود تا زمانی که پارامترهای مدل (وزن ها) بهینه شوند.
  4. محدودیت ها: Perceptron فقط می تواند مسائل قابل جداسازی خطی را حل کند (که در آن یک خط می تواند کلاس ها را از هم جدا کند). نمی تواند مسائل غیر خطی را حل کند (مانند مسئله XOR)، که یک محدودیت قابل توجه است.
نورون (نرون مصنوعی)
  1. مبانی مفهومی: یک نورون مصنوعی یک تابع ریاضی است که به عنوان مدلی از نورون های بیولوژیکی تصور می شود. نورون های مصنوعی واحدهای اساسی در یک شبکه عصبی مصنوعی هستند.
  2. ساختار: مشابه پرسپترون، یک نورون مصنوعی ورودی ها را دریافت می کند، دارای وزن، سوگیری است و از یک تابع فعال سازی استفاده می کند. با این حال، انتخاب توابع فعال سازی متنوع تر است (به عنوان مثال، سیگموئید، tanh، ReLU) و به نورون اجازه می دهد تا روابط غیر خطی را مدل کند.
  3. بخشی از شبکه های بزرگتر: برخلاف پرسپترون، که معمولاً به یک شبکه تک لایه اشاره می کند، نورون های مصنوعی به عنوان بلوک های ساختمانی برای شبکه های چند لایه (همچنین به عنوان پرسپترون های چند لایه نیز شناخته می شوند، علیرغم اینکه از نورون ساخته شده اند، نه پرسپترون در شبکه) استفاده می شود. حس اصلی). این شبکه‌ها می‌توانند لایه‌های پنهانی بین لایه‌های ورودی و خروجی داشته باشند که به آنها اجازه می‌دهد الگوهای پیچیده را ثبت کنند و مسائل غیر خطی را حل کنند.
  4. یادگیری و پیچیدگی: در شبکه‌هایی که از نورون‌های مصنوعی تشکیل شده‌اند، الگوریتم‌های یادگیری (مانند انتشار پس‌باز همراه با نزول گرادیان) وزن‌ها و بایاس‌های نورون‌ها را در همه لایه‌ها تنظیم می‌کنند، نه فقط لایه خروجی، مانند مورد Perceptron. این مدل را قادر می سازد تا از مجموعه داده های بسیار پیچیده تری بیاموزد.

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

وزن: استحکام اتصالات

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

در ابتدا این وزن ها به صورت تصادفی تنظیم می شوند. از طریق فرآیند یادگیری، شبکه این وزن ها را بر اساس نتیجه پیش بینی های خود تنظیم می کند.

تعصب: تصمیم گیرنده

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

توابع فعال سازی: تصمیم گیری

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

آموزش: فرآیند یادگیری

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

  1. انتشار رو به جلو : داده ها از ورودی به لایه خروجی جریان می یابد و شبکه پیش بینی می کند.
  2. پس انتشار : شبکه پیش‌بینی خود را با نتیجه واقعی مقایسه می‌کند و وزن‌ها و سوگیری‌ها را تنظیم می‌کند تا پیش‌بینی دقیق‌تر شود.
توابع هزینه: سنجش موفقیت

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

یادگیری عمیق: عمیق تر رفتن

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

یک مثال واقعی دیگر

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

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

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

مثال ساده شبکه عصبی

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

مثال پایتون

TensorFlow و Keras ایجاد و آموزش شبکه های عصبی را کاملاً ساده می کنند. در زیر یک مثال ساده پایتون با استفاده از TensorFlow 2 و Keras برای ایجاد یک شبکه عصبی است که یاد می گیرد نقاط را به عنوان داخل یا خارج از یک دایره طبقه بندی کند – یک مشکل طبقه بندی باینری.

فرض کنید نقاطی در یک صفحه دوبعدی داریم، و می‌خواهیم شبکه‌مان یاد بگیرد که اگر نقطه‌ای در داخل دایره واحد با مرکز مبدأ (0,0) و 0اگر بیرون باشد، بازگردد.

ابتدا باید TensorFlow را نصب کنیم. شما می توانید این کار را با استفاده از pip:

pip install tensorflow

حالا، بیایید شبکه عصبی خود را ایجاد کنیم:

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD

# Generate random data points
np.random.seed(0)
points = np.random.normal(0, 1, (5000, 2))
labels = np.where(np.linalg.norm(points, axis=1) < 1, 1, 0)  # 1 inside the circle, 0 outside

# Define a simple Sequential model
model = Sequential([
    Dense(4, input_dim=2, activation='relu'),  # Input layer with 2 inputs, hidden layer with 4 neurons
    Dense(1, activation='sigmoid')  # Output layer with 1 neuron
])

# Compile the model - binary crossentropy is used since it's a binary classification problem
model.compile(loss='binary_crossentropy', optimizer=SGD(lr=0.1), metrics=['accuracy'])

# Train the model
model.fit(points, labels, epochs=10, batch_size=10)

# Evaluate the model
loss, accuracy = model.evaluate(points, labels)
print(f'Loss: {loss}, Accuracy: {accuracy}')

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

# Generate random data points
np.random.seed(0)
points = np.random.normal(0, 1, (5000, 2))
labels = np.where(np.linalg.norm(points, axis=1) < 1, 1, 0)  # 1 inside the circle, 0 outside
  • ما یک مدل متوالی با یک لایه پنهان حاوی 4 نورون و یک لایه خروجی با 1 نورون تعریف می کنیم.
# Define a simple Sequential model
model = Sequential([
    Dense(4, input_dim=2, activation='relu'),  # Input layer with 2 inputs, hidden layer with 4 neurons
    Dense(1, activation='sigmoid')  # Output layer with 1 neuron
])
  • تابع فعال سازی relu برای لایه پنهان استفاده می شود و سیگموئید برای لایه خروجی از زمانی که ما طبقه بندی باینری را انجام می دهیم استفاده می شود.
  • ما مدل را با یک تابع از دست دادن binary_crossentropy (مناسب برای طبقه بندی باینری) کامپایل می کنیم و از Stochastic Gradient Descent (SGD) به عنوان بهینه ساز ما استفاده می کنیم.
  • سپس مدل عادت شده بر روی داده های ما برای 10 دوره آموزش داده می شود.
  • در نهایت، مدل را ارزیابی می کنیم تا از دست دادن و دقت را ببینیم.

تصویر بالا یک نمایش شماتیک از معماری شبکه عصبی است که توسط تابع plut_model از Keras تولید شده است. ساختار و جریان لایه به لایه مدل را ترسیم میکند. در اینجا چیزی است که هر بخش از شماتیک نشان می دهد:

dense_input (InputLayer):
  • ورودی: این شکل ورودی مورد انتظار برای مدل را نشان می دهد، به استثنای اندازه دسته ای. ([None، 2]) به این معنی است که مدل انتظار دارد داده های ورودی با 2 ویژگی (مانند مختصات x و y یک نقطه).
  • خروجی: شکل خروجی لایه ورودی همان ورودی است زیرا این لایه دادهها را تغییر نمیدهد. فقط ورودی را به لایه بعدی منتقل میکند.
dense (Dense):
  • ورودی: شکل ورودی دریافت شده از لایه قبلی، که 2 ویژگی است که توسط لایه ورودی مشخص شده است.
  • خروجی: این لایه دارای 4 نورون است، همانطور که توسط out نشان داده شده است. The None یک نگهدارنده برای اندازه دسته ای است که می تواند هر تعداد نمونه باشد. هر نورون یک مقدار را خروجی می دهد، بنابراین با 4 نورون، ما یک شکل (None، 4).
dense_1 (Dense):
  • ورودی: شکل ورودی در اینجا از خروجی لایه متراکم قبلی است که 4 (خروجی از 4 نورون) است.
  • خروجی: این لایه خروجی شبکه با یک نورون واحد است، بنابراین شکل خروجی (None، 1). از آنجا که این یک مدل طبقه بندی باینری است، این نورون تنها یک مقدار بین 0 و 1 را خروجی می دهد، که نشان دهنده احتمال وجود یک نقطه داده در داخل دایره واحد است.
In summary, the model consists of:
  • یک لایه ورودی است که ورودی 2 بعدی را می گیرد.
  • یک لایه پنهان با 4 نورون (به طور کامل به لایه ورودی متصل می شود).
  • یک لایه خروجی با 1 نورون (به طور کامل به لایه پنهان متصل می شود) که برای پیش بینی نتیجه باینری استفاده می شود.

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

راه اندازی یک نمونه مثال:

  • Inputs: The point (0.5, 0.5).
  • Weights: Let’s assume the four neurons in the hidden layer have the following weights:
  • Neuron 1 weights: [0.2, -0.4] with a bias of 0.1
  • Neuron 2 weights: [0.7, 0.3] with a bias of -0.1
  • Neuron 3 weights: [-0.6, 0.6] with a bias of 0.2
  • Neuron 4 weights: [-0.3, 0.8] with a bias of 0.05
  • Output Neuron Weight and Bias: Let’s assume the output neuron has weights [0.5, -0.5, 0.3, -0.2] with a bias of -0.4

محاسبه گام به گام:

اولین محاسبات لایه پنهان:

  • Neuron 1 calculates: (0.5×0.2)+(0.5×−0.4)+0.1=−0.1(0.5×0.2)+(0.5×−0.4)+0.1=−0.1
  • Neuron 2 calculates: (0.5×0.7)+(0.5×0.3)−0.1=0.45(0.5×0.7)+(0.5×0.3)−0.1=0.45
  • Neuron 3 calculates: (0.5×−0.6)+(0.5×0.6)+0.2=0.2(0.5×−0.6)+(0.5×0.6)+0.2=0.2
  • Neuron 4 calculates: (0.5×−0.3)+(0.5×0.8)+0.05=0.35(0.5×−0.3)+(0.5×0.8)+0.05=0.35

تابع فعال سازی RELU:

  • Neuron 1’s output after ReLU:

max⁡(0,−0.1)=0

max(0,−0.1)=0 (since ReLU outputs zero for negative inputs)

  • Neuron 2’s output after ReLU: max⁡(0,0.45)=0.45max(0,0.45)=0.45
  • Neuron 3’s output after ReLU: max⁡(0,0.2)=0.2max(0,0.2)=0.2
  • Neuron 4’s output after ReLU: max⁡(0,0.35)=0.35max(0,0.35)=0.35

محاسبه لایه خروجی:

The inputs to the output neuron are the outputs from the hidden layer after applying the ReLU activation function.

  • The output neuron calculates: (0×0.5)+(0.45×−0.5)+(0.2×0.3)+(0.35×−0.2)−0.4(0×0.5)+(0.45×−0.5)+(0.2×0.3)+(0.35×−0.2)−0.4

تابع فعال سازی Sigmoid:

بیایید ابتدا مقدار وزنی برای نورون خروجی را محاسبه کنیم:

  • Weighted sum = 0−0.225+0.06−0.07−0.4=−0.6350−0.225+0.06−0.07−0.4=−0.635
  • The sigmoid function is applied to this sum:

اکنون، ما فعال سازی سیگموئید را برای دریافت خروجی نهایی محاسبه می کنیم:

import numpy as np

# Calculating the sigmoid activation for the output neuron
weighted_sum = -0.635
output = 1 / (1 + np.exp(-weighted_sum))
output

بیایید این کد را اجرا کنیم تا مقدار خروجی نهایی را پیدا کنیم.

پس از محاسبه فعال سازی سیگموئید برای نورون خروجی، خروجی نهایی تقریباً 0.346 است. این مقدار نشان دهنده احتمال وجود نقطه (0.5 ، 0.5) در داخل دایره با توجه به مدل شبکه عصبی ما است. از آنجا که مقدار کمتر از 0.5 است، مدل این نقطه را به عنوان خارج از دایره طبقه بندی می کند.
لطفا توجه داشته باشید که این یک مثال ساده است و در عمل، شما می توانید داده های خود را به مجموعه های آموزش و اعتبار سنجی تقسیم کنید و احتمالا در یک مجموعه داده جداگانه آزمایش کنید. علاوه بر این، شما ممکن است از تکنیک های مختلف برای بهبود مدل خود مانند اضافه کردن لایه های بیشتر، نورون ها یا استفاده از توابع فعال سازی مختلف استفاده کنید.
انتخاب مدل:
برای وظیفه طبقه بندی نقاط در رابطه با یک دایره، ما با یک مسئله طبقه بندی باینری سر و کار داریم (یک نقطه یا داخل دایره است یا نه). یک شبکه عصبی ساده (همچنین به عنوان یک پرسپترون چند لایه شناخته می شود) قادر به یادگیری این کار طبقه بندی است.
تعداد نورون ها و لایه های پنهان:
انتخاب تعداد نورون ها و لایه های پنهان بیشتر از علم هنر است و اغلب به آزمون و خطا می رسد. با این حال، دستورالعمل های زیر می تواند کمک کند:
• نورون های ورودی: تعداد نورون های ورودی به طور معمول توسط شکل داده های ورودی شما تعیین می شود. در مورد ما، هر نقطه دارای دو مختصات (x, y) است، بنابراین ما دو نورون ورودی داریم.
• نورون های خروجی: از آنجا که این یک مشکل طبقه بندی باینری است، ما از یک نورون خروجی واحد استفاده می کنیم. یک مقدار نزدیک به 1 نشان دهنده داخل دایره است و یک مقدار نزدیک به 0 نشان دهنده خارج است.
• لایه های پنهان و نورون ها: هیچ قانون سختگیرانه ای برای تعداد لایه های پنهان یا نورون ها برای استفاده وجود ندارد. برای مشکلات ساده، یک یا دو لایه پنهان کافی است. تعداد نورونها در یک لایه پنهان اغلب بین اندازه لایه ورودی و لایه خروجی است. تعداد کمی از نورون ها می توانند منجر به کمبود شوند، در حالی که تعداد زیادی از آنها می توانند منجر به بیش برازش شوند. برای این مثال، من از یک لایه مخفی با چهار نورون به عنوان نقطه شروع استفاده کردم.
تابع فعال سازی:
ReLU (واحد خطی اصلاح شده):
• استفاده از تابع فعال سازی ReLU برای لایه های پنهان یک روش معمول است زیرا از نظر محاسباتی کارآمد است و احتمال ناپدید شدن گرادیان ها را در مقایسه با توابع سیگموئید یا تان کاهش می دهد.
• Sigmoid: برای مشکلات طبقه بندی باینری، تابع sigmoid یک انتخاب طبیعی برای لایه خروجی است، زیرا خروجی بین 0 تا 1 را می کشد که می تواند به عنوان یک احتمال تفسیر شود.
آموزش مدل:
  1. مقداردهی اولیه: وزنها به صورت تصادفی نزدیک به صفر مقداردهی اولیه میشوند و بایاس میتواند مقداردهی اولیه به صفر یا مقدار مثبت کوچک شود.
  2. انتشار رو به جلو: داده های ورودی از طریق شبکه منتقل می شوند. هر نورون یک جمع وزنی از ورودی های خود را محاسبه می کند، تعصب را اضافه می کند و تابع فعال سازی را اعمال می کند. برای لایه پنهان با ReLU، این بدان معنی است که اگر جمع وزنی منفی باشد، صفر خروجی خواهد داشت؛ در غیر این صورت، مجموع وزنی خود را خروجی میدهد. لایه خروجی با عملکرد سیگموئید مقداری بین 0 تا 1 خروجی خواهد داد.
  3. محاسبه زیان: تابع از دست دادن binary_crossentropy اندازه گیری می کند که مقادیر پیش بینی شده از برچسب های باینری واقعی چقدر است. این یک انتخاب رایج برای مسائل طبقه بندی باینری است.
  4. پسپرش: شبکه وزنها و بایاسها را در جهت مخالف شیبهای تابع زیان با توجه به وزنها و بایاسها تنظیم میکند. این کار با استفاده از الگوریتم بهینهسازی انجام میشود که در این حالت SGD است.
  5. Epochs: فرایند انتشار رو به جلو، محاسبه تلفات و انتشار برگشتی برای تعداد ثابتی از تکرارها تکرار میشود که به عنوان دورهای شناخته میشوند. پس از هر دوره، مدل باید بهطور ایدهآل وزنها و بایاسهای بهتری را یاد بگیرد تا تلفات به حداقل برسد.
  6. نرخ یادگیری: اندازه گام را در هر تکرار تعیین میکند در حالی که به سمت حداقل تابع زیان حرکت میکند. نرخ یادگیری بیش از حد بالا ممکن است حداقل را بیش از حد نشان دهد، در حالی که نرخ یادگیری بسیار پایین باعث می شود روند یادگیری کندتر شود و احتمالا در حداقل محلی گیر کند.
ساختار و چارچوب های داده های یادگیری عمیق

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

تنسورها(Tensors)

در یادگیری عمیق، از تانسورها برای نشان دادن داده هایی استفاده می شود که به شبکه های عصبی تغذیه می شوند, و عملیاتی که شبکههای عصبی بر روی این تانسورها انجام میدهند مانند توابع ریاضی هستند که تانسورها را به تانسورهای جدید تبدیل میکنند. شکل و اندازه این تانسورها میتواند بسیار بزرگ باشد، به ویژه هنگام برخورد با مجموعه دادههای پیچیده مانند تصاویر با وضوح بالا یا مدلهای زبانی بزرگ.

 

0 پاسخ

پاسخ دهید

میخواهید به بحث بپیوندید؟
مشارکت رایگان.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *