| یادگیری ماشین وداده‌کاوی |
| --- |
|  |
| موضوع‌ها
* طبقه‌بندی آماری
* خوشه‌بندی
* تحلیل رگرسیون
* روش تشخیص ناهنجاری
* یادگیری قانون وابستگی
* یادگیری تقویتی
* پیش بینی ساختاریافته
* مهندسی ویژگی
* یادگیری ویژگی
* یادگیری ماشین برخط
* یادگیری نیمه‌نظارتی
* یادگیری بی‌نظارت
* Learning to rank
* Grammar induction

 |
| یادگیری با نظارت(**طبقه‌بندی آماری** •  **تحلیل رگرسیون**)
* یادگیری درخت تصمیم
* Ensembles (تکنیک بگینگ, بوستینگ، جنگل تصادفی)
* *k*-NN
* رگرسیون خطی
* دسته‌بندی کننده بیز ساده
* شبکه‌های عصبی مصنوعی
* رگرسیون لجستیک
* پرسپترون
* ماشین بردار مرتبط (RVM)
* ماشین بردار پشتیبانی

 |
| خوشه‌بندی
* کاهش و خوشه‌بندی ترازمند و بازکردی با بهره‌گیری از رده‌بندی
* خوشه‌بندی سلسله‌مراتبی
* خوشه‌بندی کی-میانگین
* الگوریتم امید ریاضی–بیشینه کردن
* DBSCAN
* OPTICS
* انتقال میانگین

 |
| کاهش ابعاد
* تحلیل عاملی
* CCA
* تحلیل مؤلفه‌های مستقل
* آنالیز افتراقی خطی
* فاکتورگیری نامنفی ماتریس
* تحلیل مؤلفه‌های اصلی
* t-SNE

 |
| پیش‌بینی ساختاریافته
* مدل‌های گرافیکی (شبکه‌های بیزی، میدان تصادفی شرطی، مدل پنهان مارکف)

 |
| روش تشخیص ناهنجاری
* الگوریتم کی-نزدیکترین همسایه
* فاکتور پرتی محلی

 |
| شبکه عصبی مصنوعی
* خودرمزگذار
* یادگیری عمیق
* پرسپترون چندلایه
* RNN
* ماشین بولتزمن محدود شده
* ترانسفورمر بینایی
* SOM
* شبکه عصبی پیچشی

 |
| یادگیری تقویتی
* کیو-یادگیری
* SARSA
* یادگیری تفاوت زمانی

 |
| نظریه
* Bias-variance dilemma
* نظریه یادگیری محاسباتی
* Empirical risk minimization
* Occam learning
* یادگیری احتمالا تقریبا صحیح
* Statistical learning
* VC theory

 |
| حوزه‌های یادگیری ماشین
* NIPS
* ICML
* ML
* JMLR
* ArXiv:cs.LG

 |
| * ن
* ب
* و
 |

**پرسپترون** (به انگلیسی: perceptron) کوته‌نوشت **نورون ادراکی** یک الگوریتم یادگیری ماشین است که در دسته یادگیری با نظارت قرار می‌گیرد. الگوریتم پرسپترون یک الگوریتم دسته‌بندی دودویی (نوعی از دسته‌بندی که می‌تواند با توجه به بردار ورودی تصمیم بگیرد که این ورودی متعلق به یک کلاس هست یا خیر) است. این الگوریتم یک دسته‌بند خطی است، به‌این معنا که پیش‌بینی‌هایش را باتوجه به ترکیب خطی وزن دار ورودی الگوریتم انجام می‌دهد. همچنین این الگوریتم به دلیل اینکه ورودی‌هایش را به صورت تک تک در زمان بررسی می‌کند، یک الگوریتم برخط می‌باشد. الگوریتم پرسپترون در سال ۱۹۵۷ در لابراتوار کرنل آرونوتیکال به وسیلهٔ فرانک روزنبلت ابداع شد. در واقع این الگوریتم جزء اولین شبکه‌های عصبی مصنوعی است که به‌کار گرفته شده‌است.

تاریخچه
-------

الگوریتم *پرسپترون* در سال ۱۹۵۷ در لابراتوار کرنل آرونوتیکال توسط فرانک روزنبلت
با سرمایه‌گذاری دفتر تحقیقات دریانوردی ایالات متحده
ابداع شد. پرسپترون بیشتر به عنوان یک دستگاه مد نظر بوده‌است تا یک برنامه؛ و با این‌که اولین پیاده‌سازی آن به صورت یک نرم‌افزار برای
آی بی ام ۷۰۴ بود؛ پس از آن به صورت سخت‌افزار اختصاصی "پرسپترون مارک ۱" پیاده‌سازی شد. این دستگاه برای تشخیص تصویر طراحی شده بود: مجموعه‌ای از ۴۰۰
حسگر نور، که به صورت تصادفی به "نورون"‌ها متصل شده‌اند. وزن‌ها در پتانسیومترها کدگذاری شده بودند، و بروزرسانی وزن‌ها در طول یادگیری با موتورهای الکتریکی صورت می‌گرفت.

تعریف
-----

پرسپترون یک نوع دسته‌بند دودودیی است که ورودی خود {\displaystyle x} (یک بردار متشکل اعداد حقیقی) را به مقدار خروجی {\displaystyle f(x)} (یک اسکالر با مقادیر باینری) که به صورت زیر حساب می‌شود، متناظر می‌کند:

{\displaystyle f(x)={\begin{cases}1&{\text{if }}w\cdot x+b>0\\0&{\text{otherwise}}\end{cases}}}

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

پرسپترون
{\displaystyle w} یک بردار از وزن‌هایی با مقادیر حقیقی است و {\displaystyle w\cdot x=\sum \_{i=1}^{m}w\_{i}x\_{i}} ضرب داخلی بردار وزن و بردار ورودی است، که در آن {\displaystyle m} تعداد ورودی‌های پرسپترون است. در رابطه بالا {\displaystyle b} نشان‌دهنده بایاس است که وظیفه آن جابجا کردن مرز تصمیم‌گیری از مبدأ است و مقدار آن به ورودی‌ها بستگی ندارد.

در مسئله دسته‌بندی دودودیی مقدار {\displaystyle f(x)} برای دسته‌بندی {\displaystyle x} بین دو کلاس {\displaystyle +} و {\displaystyle -} استفاده می‌شود. اگر {\displaystyle b} عددی منفی باشد، جمع وزن‌دار ورودی‌ها باید عدد مثبتی بزرگتر از {\displaystyle |b|} باشد تا خروجی پرسپترون {\displaystyle 1} شود. به عبارت دیگر دسته‌بند پرسپترون مانند یک ابرصفحه است که فضای {\displaystyle m} بعدی را به دو قسمت تقسیم می‌کند، در این صورت {\displaystyle w} نشان‌دهنده بردار عمود برصفحه و {\displaystyle b} نشان‌دهنده عرض از مبدأ صفحه جداکننده است. به ازای نقاط داده شده به همراه برچسب آن‌ها
{\displaystyle ((x\_{1},y\_{1}),...(x\_{n},y\_{n})} الگوریتم پرسپترون مقادیر {\displaystyle w} و {\displaystyle b} را به گونه‌ای می‌یابد که تمام نمونه‌ها توسط تابع {\displaystyle f} به‌درستی برچسب گذاری شوند یعنی

{\displaystyle \forall i\in \{1,...n\}:f(x\_{i})=y\_{i}.}

اگر داده‌های مثبت و منفی قابلیت جداشدن توسط یک ابرصفحه را نداشته باشند الگوریتم پرسپترون متوقف نمی‌شود اما اگر داده‌ها خطی تفکیک‌پذیر باشند الگوریتم پرسپترون در تعداد متناهی مرحله پایان می‌یابد. معروف‌ترین تابعی که الگوریتم پرسپترون قادر به یادگیری آن نیست؛ تابع یا مانع الجمع است.

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

الگوریتم یادگیری
----------------

نحوه کار الگوریتم پرسپترون
الگوریتم پرسپترون یک الگوریتم تکرار شونده است، به این صورت که در ابتدا بردار وزن {\displaystyle w} و بایاس {\displaystyle b} به نحوی مقداردهی می‌شوند و سپس در هر مرحله، الگوریتم با توجه به نقاطی که درست دسته‌بندی نشده‌اند مقادیر وزن {\displaystyle w} و بایاس {\displaystyle b} را تغییر می‌دهد تا این نقاط به درستی دسته‌بندی شوند. اگر نقاط داده‌شده به صورت خطی تفکیک‌پذیر نباشند الگوریتم پرسپترون پایان نمی‌یابد اما در صورتی که نقاط خطی تفکیک‌پذیر باشند الگوریتم در تعداد متناهی مرحله پایان می‌یابد.

### تعریف مسئله

متغیرهای زیر را تعریف می‌کنیم:
داده‌های آموزشی به صورت
{\displaystyle D=\{(x^{(1)},y^{(1)}),...(x^{(n)},y^{(n)})\}}
است که {\displaystyle y\in \{-1,1\}} و {\displaystyle x} بردار ورودی تغییریافته‌است (برای سادگی الگوریتم {\displaystyle y} را عضو مجموعه {\displaystyle \{-1,1\}} در نظرگرفته‌ایم، که {\displaystyle +1} نشان‌دهنده نمونه‌های مثبت و {\displaystyle -1} نشان‌دهنده نمونه‌های منفی است).
{\displaystyle x^{(i)}} و {\displaystyle y^{(i)}}نشان‌دهنده بردار ورودی و مقدار خروجی مدنظر برای {\displaystyle i} امین نمونه آموزشی است. {\displaystyle x\_{j}^{(i)}} نشان‌دهنده {\displaystyle j} امین مؤلفه بردار {\displaystyle x^{(i)}} است. برای اینکه پارامترهای بایاس {\displaystyle b} و بردار وزن را به صورت یک بردار واحد در نظر بگیریم بردارهای ورودی {\displaystyle x} و بردار وزن {\displaystyle w} را به‌گونه‌ای تغییر می‌دهیم که
{\displaystyle x\_{0}=1} و {\displaystyle w\_{0}=b} در این‌صورت

{\displaystyle w\cdot x=w\_{0}x\_{0}+\sum \_{i=1}^{m}w\_{i}x\_{i}=b+\sum \_{i=1}^{m}w\_{i}x\_{i}}

تابع پرسپترون را نیز به صورت زیر تغییر می‌دهیم

{\displaystyle f(x)={\begin{cases}1&{\text{if }}w\cdot x>0\\-1&{\text{otherwise}}\end{cases}}}

هدف پیدا کردن بردار وزن {\displaystyle w} به‌گونه‌ای است که برای نقاط داده‌شده {\displaystyle \{(x^{(1)},y^{(1)}),...(x^{(n)},y^{(n)}\}} داشته باشیم

{\displaystyle \forall i\in \{1,...n\}:f(x^{(i)})=y^{(i)}}

### مراحل الگوریتم

الگوریتم در هر مرحله باتوجه به نقاطی که اشتباه دسته‌بندی شده‌اند بردار وزن را تغییر می‌دهد تا نقاط بیشتری را به درستی دسته‌بندی کند. الگوریتم در هر مرحله بردار وزن جدیدی را به‌دست می‌آورد. در ابتدا بردار وزن را برابر با صفر قرار می‌دهیم. بردار وزن را در مرحله {\displaystyle t} ام با {\displaystyle w^{(t)}} نشان می‌دهیم. اگر الگوریتم پس از {\displaystyle T} مرحله متوقف‌شود (تمام نقاط به درستی دسته‌بندی شوند)، {\displaystyle w^{(T)}} بردار وزن مورد نظر است. شبه‌کد الگوریتم پرسپترون در زیر نوشته‌شده‌است.

```
**input**: A training set {\displaystyle D}
**initialize**: {\displaystyle w^{(1)}=(0,...0)}
 **for** t = 1,2 ,...
 if({\displaystyle \exists i\;\;\;s.t\;\;\;y^{(i)}\times (w^{(t)}\cdot x^{(i)})\leq 0})
   {\displaystyle w^{(t+1)}=w^{(t)}+y^{(i)}x^{(i)}}
 else
   {\displaystyle w^{(t+1)}=w^{(t)}}
```

اگر {\displaystyle y^{(i)}\times (w^{(t)}\cdot x^{(i)})\leq 0} می‌توان گفت که تابع پرسپترون با بردار وزن {\displaystyle w^{(t)}} ورودی {\displaystyle x^{(i)}} را به اشتباه دسته‌بندی می‌کند. در این صورت بردار وزن به گونه‌ای تغییر می‌کند خطای کمتری روی {\displaystyle x^{(i)}} مرتکب شود و آن را به درستی دسته‌بندی کند. الگوریتم هنگامی پایان می‌یابد که برای تمامی نقاط داشته باشیم

{\displaystyle \forall i\in \{1,...n\}\rightarrow y^{(i)}\times (w^{(T)}\cdot x^{(i)})>0.}

و در این‌صورت خواهیم داشت

{\displaystyle \forall i\in \{1,...n\}\rightarrow f(x^{(i)})=y^{(i)}.}

بنابراین {\displaystyle w^{(T)}} بردار وزن موردنظر است.

### همگرایی الگوریتم

#### اثبات

جستارهای وابسته
---------------

* ماشین بردار پشتیبانی
* رگرسیون لجستیک

منابع
-----

1. ↑  Rosenblatt, Frank (1957), The Perceptron--a perceiving and recognizing automaton. Report 85-460-1, Cornell Aeronautical Laboratory.
2. ↑  Mikel Olazaran (1996). "A Sociological Study of the Official History of the Perceptrons Controversy". *Social Studies of Science*. **26** (3): 611–659. doi:10.1177/030631296026003005. JSTOR 285702.
3. ↑  Bishop, Christopher M. (2006). *Pattern Recognition and Machine Learning*. Springer.
4. ↑  Liou, D. -R.; Liou, J. -W.; Liou, C. -Y. (2013). *Learning Behaviors of Perceptron*. iConcept Press. ISBN 978-1-4775-5473-9.
5. ↑  Shwartz, Shai (2014). *Understanding Machine Learning*. p. 92.