|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
مقدمهای بر شبکههای عصبی: پرسپترون
پیشآزمون
یکی از اولین تلاشها برای پیادهسازی چیزی مشابه شبکههای عصبی مدرن توسط فرانک روزنبلات از آزمایشگاه هوانوردی کورنل در سال ۱۹۵۷ انجام شد. این یک پیادهسازی سختافزاری به نام "Mark-1" بود که برای شناسایی اشکال هندسی ابتدایی مانند مثلثها، مربعها و دایرهها طراحی شده بود.
![]() |
![]() |
تصاویر از ویکیپدیا
یک تصویر ورودی توسط آرایهای از ۲۰x۲۰ سلولهای نوری نمایش داده میشد، بنابراین شبکه عصبی دارای ۴۰۰ ورودی و یک خروجی دودویی بود. یک شبکه ساده شامل یک نورون بود که به آن واحد منطقی آستانهای نیز گفته میشود. وزنهای شبکه عصبی مانند پتانسیومتر عمل میکردند که در مرحله آموزش نیاز به تنظیم دستی داشتند.
✅ پتانسیومتر دستگاهی است که به کاربر اجازه میدهد مقاومت یک مدار را تنظیم کند.
نیویورک تایمز در آن زمان درباره پرسپترون نوشت: جنین یک کامپیوتر الکترونیکی که [نیروی دریایی] انتظار دارد بتواند راه برود، صحبت کند، ببیند، بنویسد، خود را تکثیر کند و از وجود خود آگاه باشد.
مدل پرسپترون
فرض کنید در مدل ما N ویژگی وجود دارد، که در این صورت بردار ورودی یک بردار به اندازه N خواهد بود. پرسپترون یک مدل دستهبندی دودویی است، یعنی میتواند بین دو کلاس داده ورودی تمایز قائل شود. فرض میکنیم که برای هر بردار ورودی x خروجی پرسپترون ما یا +۱ یا -۱ باشد، بسته به کلاس داده. خروجی با استفاده از فرمول زیر محاسبه میشود:
y(x) = f(wTx)
که در آن f یک تابع فعالسازی پلهای است.
آموزش پرسپترون
برای آموزش یک پرسپترون، باید بردار وزن w را پیدا کنیم که اکثر مقادیر را به درستی دستهبندی کند، یعنی منجر به کمترین خطا شود. این خطا E با استفاده از معیار پرسپترون به صورت زیر تعریف میشود:
E(w) = -∑wTxiti
که در آن:
- جمع بر روی نقاط داده آموزشی i که منجر به دستهبندی اشتباه میشوند، انجام میشود.
- xi داده ورودی است و ti برای مثالهای منفی و مثبت به ترتیب -۱ یا +۱ است.
این معیار به عنوان تابعی از وزنها w در نظر گرفته میشود و ما باید آن را کمینه کنیم. اغلب از روشی به نام گرادیان نزولی استفاده میشود، که در آن با وزنهای اولیه w(0) شروع میکنیم و سپس در هر مرحله وزنها را طبق فرمول زیر بهروزرسانی میکنیم:
w(t+1) = w(t) - η∇E(w)
در اینجا η نرخ یادگیری نامیده میشود و ∇E(w) گرادیان E را نشان میدهد. پس از محاسبه گرادیان، به فرمول زیر میرسیم:
w(t+1) = w(t) + ∑ηxiti
الگوریتم در زبان پایتون به این صورت است:
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
weights = [0,0,0] # Initialize weights (almost randomly :)
for i in range(num_iterations):
pos = random.choice(positive_examples)
neg = random.choice(negative_examples)
z = np.dot(pos, weights) # compute perceptron output
if z < 0: # positive example classified as negative
weights = weights + eta*weights.shape
z = np.dot(neg, weights)
if z >= 0: # negative example classified as positive
weights = weights - eta*weights.shape
return weights
نتیجهگیری
در این درس، شما درباره پرسپترون که یک مدل دستهبندی دودویی است، و نحوه آموزش آن با استفاده از بردار وزنها یاد گرفتید.
🚀 چالش
اگر دوست دارید پرسپترون خود را بسازید، این آزمایشگاه در Microsoft Learn را امتحان کنید که از طراح Azure ML استفاده میکند.
پسآزمون
مرور و مطالعه شخصی
برای مشاهده اینکه چگونه میتوانیم از پرسپترون برای حل یک مسئله ساده و همچنین مسائل واقعی استفاده کنیم و برای ادامه یادگیری، به دفترچه Perceptron مراجعه کنید.
همچنین یک مقاله جالب درباره پرسپترونها وجود دارد.
تکلیف
در این درس، ما یک پرسپترون را برای وظیفه دستهبندی دودویی پیادهسازی کردیم و از آن برای دستهبندی بین دو رقم دستنویس استفاده کردیم. در این آزمایشگاه، از شما خواسته میشود که مسئله دستهبندی ارقام را به طور کامل حل کنید، یعنی تعیین کنید کدام رقم به احتمال زیاد با یک تصویر داده شده مطابقت دارد.

