<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2FWyk%C5%82ad_3</id>
	<title>Uczenie maszynowe i sztuczne sieci neuronowe/Wykład 3 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2FWyk%C5%82ad_3"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;action=history"/>
	<updated>2026-05-03T12:23:33Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=6440&amp;oldid=prev</id>
		<title>Jarekz o 16:32, 16 lut 2017</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=6440&amp;oldid=prev"/>
		<updated>2017-02-16T16:32:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 16:32, 16 lut 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Linia 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[Uczenie_maszynowe_i_sztuczne_sieci_neuronowe|powrót]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Nieliniowość=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Nieliniowość=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, było zastosowanie elementu nieliniowego. W perceptronie wyjście neuronu:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, było zastosowanie elementu nieliniowego. W perceptronie wyjście neuronu:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=605&amp;oldid=prev</id>
		<title>Jarekz: /* Perceptron Rosenblatta */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=605&amp;oldid=prev"/>
		<updated>2015-05-21T15:24:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Perceptron Rosenblatta&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 15:24, 21 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot; &gt;Linia 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\end{array}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\end{array}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\right\}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\right\}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;jeśli&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;jesli&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\left\{&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\left\{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\begin{array}{l}  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;\begin{array}{l}  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=603&amp;oldid=prev</id>
		<title>Jarekz o 15:22, 21 maj 2015</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=603&amp;oldid=prev"/>
		<updated>2015-05-21T15:22:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 15:22, 21 maj 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Linia 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[Kategoria: Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Nieliniowość=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Nieliniowość=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, było zastosowanie elementu nieliniowego. W perceptronie wyjście neuronu:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, było zastosowanie elementu nieliniowego. W perceptronie wyjście neuronu:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=595&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;Kategoria: Uczenie maszynowe i sztuczne sieci neuronowe =Nieliniowość= Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, był...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/Wyk%C5%82ad_3&amp;diff=595&amp;oldid=prev"/>
		<updated>2015-05-21T15:16:15Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;&lt;a href=&quot;/edu/index.php?title=Kategoria:Uczenie_maszynowe_i_sztuczne_sieci_neuronowe&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategoria:Uczenie maszynowe i sztuczne sieci neuronowe (strona nie istnieje)&quot;&gt;Kategoria: Uczenie maszynowe i sztuczne sieci neuronowe&lt;/a&gt; =Nieliniowość= Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, był...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategoria: Uczenie maszynowe i sztuczne sieci neuronowe]]&lt;br /&gt;
=Nieliniowość=&lt;br /&gt;
Nowością wprowadzoną przez Perceptron(Rosenblatt 1958) w stosunku do sieci MADALINE, było zastosowanie elementu nieliniowego. W perceptronie wyjście neuronu:&lt;br /&gt;
:&amp;lt;math&amp;gt; y = f(e)&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Sztuczny_neuron.png‎|250px|thumb|right|fig_neuron|&amp;lt;figure id=&amp;quot;fig:Neuron_nieliniowy&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;Model neuronu z nieliniowością]]&lt;br /&gt;
gdzie pobudzenie &lt;br /&gt;
:&amp;lt;math&amp;gt; e = \sum_{i=1}^n  w_ix_i + w_0 = \sum_{i=0}^n w_ix_i \quad \Leftarrow x_0 := 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pobudzenie neuronu w postaci ważonej sumy wejść nie jest jedynym możliwym, mogą to być np.: &lt;br /&gt;
:&amp;lt;math&amp;gt;e^{(j+1)} = e^{(j)} + \sum_{i=0}^n	w^{(j)}x^{(j)}&amp;lt;/math&amp;gt;&lt;br /&gt;
lub&lt;br /&gt;
:&amp;lt;math&amp;gt;e = \prod_{i=1}^n w_ix_i&amp;lt;/math&amp;gt;&lt;br /&gt;
Dla własności neuronu największe znaczenie ma jednak forma nieliniowości &amp;lt;math&amp;gt;f(.)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Perceptron Rosenblatta==&lt;br /&gt;
Najprostsza pojęciowo postać nieliniowości:&lt;br /&gt;
[[Plik:Perceptron_nieliniowosc.png|thumb|264px|right|&amp;lt;figure id=&amp;quot;fig:perceptron_nieliniowosc&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;&lt;br /&gt;
Nieliniowa funkcja aktywacji w perceptronie Rosenblatta]]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;y = \left\{&lt;br /&gt;
\begin{array}{lcl} &lt;br /&gt;
1 \quad &amp;amp; \text{dla} &amp;amp; e \ge 0\\&lt;br /&gt;
0 \quad &amp;amp; \text{dla} &amp;amp; e &amp;lt; 0&lt;br /&gt;
\end{array} \right. &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Interpretacja geometryczna: perceptron prosty działa jak dyskryminator liniowy.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt; x  \;jest\; klasy  &lt;br /&gt;
\left\{&lt;br /&gt;
\begin{array}{l}&lt;br /&gt;
1 \\&lt;br /&gt;
0&lt;br /&gt;
\end{array}&lt;br /&gt;
\right\}&lt;br /&gt;
jeśli&lt;br /&gt;
\left\{&lt;br /&gt;
\begin{array}{l} &lt;br /&gt;
y = 1, e \ge 0\\&lt;br /&gt;
y = 0, e &amp;lt; 0&lt;br /&gt;
\end{array}&lt;br /&gt;
\right\}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obszar, w którym perceptron zwraca 1 — ''podejmuje decyzję'' tak jest ograniczony tworem o równaniu:&lt;br /&gt;
:&amp;lt;math&amp;gt; \sum_{i=1}^n w_i x_i + w_0 = 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
Dla ''n'' = 2 jest to prosta, dla ''n'' = 3 płaszczyzna, w ogólności rozmaitość liniowa stopnia ''n'' − 1 hiperpłaszczyzna.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Rozważmy perceptron z trzema wagami &amp;lt;math&amp;gt;w = [-6, 2, 3]&amp;lt;/math&amp;gt; pobudzenie neuronu:&lt;br /&gt;
:&amp;lt;math&amp;gt;e = W X = [-6,2,3] &lt;br /&gt;
\left[&lt;br /&gt;
\begin{array}{l} &lt;br /&gt;
1\\&lt;br /&gt;
x_1 \\&lt;br /&gt;
x_2&lt;br /&gt;
\end{array}&lt;br /&gt;
\right]&lt;br /&gt;
= -6 + 2x_1 + 3x_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Perceptron_przyklad.png|thumb|400px|right|&amp;lt;figure id=&amp;quot;fig:perceptron_przyklad&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;&lt;br /&gt;
Podział przestrzeni wejść na podprzestrzenie odpowiadające klasyfikacji jako &amp;quot;0&amp;quot; bądź &amp;quot;1&amp;quot;]]&lt;br /&gt;
We ''właściwej przestrzeni wejść''(tzn. &amp;lt;math&amp;gt;[x_1,x_2]&amp;lt;/math&amp;gt;) hiperpowierzchnia podejmowania decyzji jest prostą o równaniu:&lt;br /&gt;
:&amp;lt;math&amp;gt;2x_1 + 3x_2 - 6 = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
Obcięty wektor wag &amp;lt;math&amp;gt;\tilde w = [2, 3]&amp;lt;/math&amp;gt; jest prostopadły do prostej podejmowania decyzji. Wektor wag jest skierowany w stronę, gdzie ''y'' = 1.&lt;br /&gt;
&lt;br /&gt;
===Dobieranie wag perceptronu prostego ===&lt;br /&gt;
Wagi perceptronu prostego można dobrać na dwa sposoby: &lt;br /&gt;
* możemy obliczyć wagi neuronów lub &lt;br /&gt;
* znaleźć je w procesie iteracyjnego uczenia.&lt;br /&gt;
;Obliczanie: &lt;br /&gt;
&lt;br /&gt;
Korzystamy z tego, że wektor ''w'' jest ortogonalny do hiperpłaszczyzny podejmowania decyzji, zatem musi spełniać równanie:&lt;br /&gt;
:&amp;lt;math&amp;gt;w x = 0 \rightarrow \sum_{i=1}^n w_i x_i + w_0 = 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
także &amp;quot;obcięty&amp;quot; wektor wag &amp;lt;math&amp;gt;\tilde w = [w_1,\dots, w_n]&amp;lt;/math&amp;gt; jest ortogonalny do &amp;quot;obciętych&amp;quot; wektorów wejściowych &amp;lt;math&amp;gt;\tilde x = [x_1,\dots,x_n]^T&amp;lt;/math&amp;gt; bo:&lt;br /&gt;
:&amp;lt;math&amp;gt;\forall_{ a,b}\quad  w x^{(a)} - w x^{(b)} = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
zatem &lt;br /&gt;
:&amp;lt;math&amp;gt;\forall_{ a,b}\quad (\tilde w \tilde x^{(a)} +w_0) - (\tilde w \tilde x^{(b)} +w_0) = \tilde w\tilde x^{(a)} - \tilde w \tilde x^{(b)} = 0&amp;lt;/math&amp;gt; &lt;br /&gt;
Aby powyższa równość zachodziła musi zachodzić:&lt;br /&gt;
:&amp;lt;math&amp;gt;\forall_{ a}\quad \tilde w \tilde x^{(a)} = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład: Bramka NAND====&lt;br /&gt;
Obliczmy wagi perceptronu realizującego funkcję logiczną NAND. Jej tabela wartości logicznych jest następująca:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; || 0 0 1 1&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; || 0 1 0 1&lt;br /&gt;
 |-&lt;br /&gt;
 ! &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; || 1 1 1 0&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
Spójrzmy na reprezentację graficzną:&lt;br /&gt;
[[Plik:NAND.png|thumb|217px|right|&amp;lt;figure id=&amp;quot;fig:NAND&amp;quot;&amp;gt;&amp;lt;/figure&amp;gt;&lt;br /&gt;
Reprezentacja graficzna funkcji NAND]]&lt;br /&gt;
Można zaproponować następującą prostą podejmowania decyzji:&lt;br /&gt;
:&amp;lt;math&amp;gt; x_1 + x_2 - 1.5 = 0 &amp;lt;/math&amp;gt; &lt;br /&gt;
wektor wag &amp;lt;math&amp;gt;[w_1 , w_2 ]&amp;lt;/math&amp;gt; jest prostopadły do tej prostej i skierowany w stronę gdzie &amp;lt;math&amp;gt;y = 1&amp;lt;/math&amp;gt;, więc:&lt;br /&gt;
:&amp;lt;math&amp;gt; [w_1 , w_2 ] = [-1, -1]&amp;lt;/math&amp;gt; &lt;br /&gt;
i wybieramy &lt;br /&gt;
:&amp;lt;math&amp;gt;w_0 = 1.5&amp;lt;/math&amp;gt;. &lt;br /&gt;
Ostatecznie &amp;lt;math&amp;gt;w = [1.5, -1, -1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uczenie perceptronu===&lt;br /&gt;
Algorytm uczenia perceptronu jest formalnie bardzo podobny do algorytmu spadku gradientowego. Mamy ciąg uczący:&lt;br /&gt;
:&amp;lt;math&amp;gt; \left\{ X^{(j)}, z^{(j)} \right\}_{j=1,\dots,M}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Uczenie_perceptronu.png‎|thumb|341px|right|Ilustracja zmiany wag perceptronu zgodnie z regułą &amp;quot;delta&amp;quot;]]&lt;br /&gt;
i regułę zmiany wag po zaprezentowaniu ''j''-tego przykładu (reguła ta nazywana jest &amp;quot;regułą delta&amp;quot;):&lt;br /&gt;
:&amp;lt;math&amp;gt;W^{(j+1)} = W^{(j)} + \eta\delta^{(j)}X^{(j)}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\delta^{(j)}&amp;lt;/math&amp;gt; jest błędem perceptronu dla ''j''-tego przykładu:&lt;br /&gt;
:&amp;lt;math&amp;gt;\delta^{(j)} = z^{(j)} - y^{(j)}&amp;lt;/math&amp;gt; &lt;br /&gt;
Istotną różnicę stanowi fakt, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; y = \{0,1\}&amp;lt;/math&amp;gt;, &lt;br /&gt;
a co za tym idzie błąd może przyjmować tylko wartości dyskretne:&lt;br /&gt;
:&amp;lt;math&amp;gt;\delta = \{-1,0,+1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
====Dlaczego ten algorytm działa?====&lt;br /&gt;
Ponieważ wejścia i wyjścia mogą przyjmować tylko kilka wartości możemy prześledzić wszystkie przypadki. Są tylko 4 możliwości zmiany wag:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;z^{(j)}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;	y^{(j)}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;\delta^{(j)}&amp;lt;/math&amp;gt;||&amp;lt;math&amp;gt;\Delta W^{(j)}&amp;lt;/math&amp;gt;||wkład do pobudzenia od i-tej współrzędnej po korekcie wag &lt;br /&gt;
 |-&lt;br /&gt;
 |0||0||0 (dobrze)|| 0 || bez zmian&lt;br /&gt;
 |-&lt;br /&gt;
 |1||1||0 (dobrze)|| 0 || bez zmian&lt;br /&gt;
 |-&lt;br /&gt;
 |0||1|| -1 (odpowiedź za duża) || &amp;lt;math&amp;gt;-\eta X^{(j)}&amp;lt;/math&amp;gt;|| &amp;lt;math&amp;gt;(w_i - \eta x_i) x_i = w_i x_i - \eta x_i^2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |1||0|| 1 (odpowiedź za mała) || &amp;lt;math&amp;gt; \eta X^{(j)}&amp;lt;/math&amp;gt;|| &amp;lt;math&amp;gt;(w_i + \eta x_i) x_i = w_i x_i + \eta x_i^2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
Widać, że zawsze zmiana wagi (o ile &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt; nie jest zbyt duża) prowadzi w taką stronę aby po ponownym podaniu tego samego przykładu odpowiedź była bliższa pożądanej.&lt;br /&gt;
&lt;br /&gt;
{{hidden begin|title=Kod symulujący przykładowy perceptron prosty}}&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import matplotlib.animation as animation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Perceptron(object):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Perceptron Rosenblatta&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, w, w0):&lt;br /&gt;
        self.w = np.array(w)&lt;br /&gt;
        self.w0 = np.array(w0)&lt;br /&gt;
	self.first_plot = True&lt;br /&gt;
&lt;br /&gt;
    def ucz(self, X, Z, eta):&lt;br /&gt;
        delta = Z - self.licz(X)&lt;br /&gt;
        self.w += eta*delta*X&lt;br /&gt;
        self.w0 += eta*delta&lt;br /&gt;
        return delta&lt;br /&gt;
    &lt;br /&gt;
    def licz(self, X):&lt;br /&gt;
        e = np.sum(self.w*X) + self.w0&lt;br /&gt;
        if e &amp;gt;= 0:&lt;br /&gt;
            y = 1&lt;br /&gt;
        else:&lt;br /&gt;
            y=0&lt;br /&gt;
        return y&lt;br /&gt;
    &lt;br /&gt;
def rysuj(data):&lt;br /&gt;
    linia.set_ydata(data)&lt;br /&gt;
    return linia,    &lt;br /&gt;
    &lt;br /&gt;
def licz_wynik():&lt;br /&gt;
    global p, x, X, Z&lt;br /&gt;
    delta=1&lt;br /&gt;
    y = np.zeros(len(x))&lt;br /&gt;
    #while delta &amp;gt; 0:&lt;br /&gt;
    delta = 0&lt;br /&gt;
    for j  in range(len(X)):&lt;br /&gt;
        d = p.ucz( X[j,:], Z[j], eta) # uczymy neuron j-tego elementu w ciagu uczacym&lt;br /&gt;
        delta += np.abs(d)         # sumujemy wartosci bezwzgledne bladow&lt;br /&gt;
	y[0] = (-p.w[0]*x[0] - p.w0) / p.w[1]&lt;br /&gt;
	y[1] = (-p.w[0]*x[1] - p.w0) / p.w[1]&lt;br /&gt;
    print 'zla klasyfikacja ' +str(delta) +' na '+ str(len(Z)) + ' punktow '&lt;br /&gt;
    yield y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    	  &lt;br /&gt;
	    &lt;br /&gt;
p = Perceptron(w = [0.1, 0.6], w0 = -0.4 )&lt;br /&gt;
eta=0.1&lt;br /&gt;
X=np.array([[1, 1], [3, 3],[4,1],[2, 3], [3, 4], [1.2, 3.2]])&lt;br /&gt;
Z=np.array([1, 1,1, 0, 0, 0, ])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
xmin=-5&lt;br /&gt;
xmax=5&lt;br /&gt;
red  = np.where( Z&amp;gt;0 )&lt;br /&gt;
blue = np.where( Z&amp;lt;=0)&lt;br /&gt;
fig1 = py.figure(1)	&lt;br /&gt;
py.plot(X[blue,0], X[blue,1],'bo' , X[red, 0], X[red,1] ,'ro')&lt;br /&gt;
py.xlim([xmin-2, xmax+2])&lt;br /&gt;
py.ylim([0-2,5+2])&lt;br /&gt;
x = np.array([xmin, xmax])&lt;br /&gt;
y = (-p.w[0]*x - p.w0) / p.w[1]&lt;br /&gt;
linia, = py.plot(x,y)&lt;br /&gt;
&lt;br /&gt;
line_ani = animation.FuncAnimation(fig1, rysuj, licz_wynik,   interval=100)#, blit=True,repeat=False)	&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{hidden end}}&lt;br /&gt;
&lt;br /&gt;
=== Ograniczenia perceptronu prostego===&lt;br /&gt;
Ograniczeniem perceptronu prostego jest fakt, że za jego pomocą można rozwiązać tylko problemy separowalne liniowo. Co to oznacza zobaczmy na poniższym przykładzie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Liniowa_separowalnosc.png‎|thumb|736px|center|Ilustracja problemu, który jest (AND) i nie jest (XOR) separowalny liniowo]]&lt;br /&gt;
&lt;br /&gt;
===Nowe możliwości: wielowarstwowe sieci perceptronów prostych===&lt;br /&gt;
Co dwie warstwy neuronów nieliniowych to nie jedna :-)&lt;br /&gt;
Jedna warstwa perceptronów prostych na swoim wyjściu prezentuje zestaw podziałów przestrzeni hiperpłaszczyznami - każdy neuron jeden podział.&lt;br /&gt;
* Co się stanie jeśli wyjście tej warstwy wpuścimy na wejście następnej warstwy?&lt;br /&gt;
[[Plik:Perceptron_wielowarstwowy.png‎|thumb|center|647px|Przykładowe rozwiązanie problemu XOR przez dwie warstwy perceptronów prostych]]&lt;br /&gt;
&lt;br /&gt;
Problem znalezienia wag w ogólności nie jest tu prosty. Dla XOR można go zapisać następująco:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
f \left([v_1\; v_2] \cdot f\left(&lt;br /&gt;
\left[&lt;br /&gt;
\begin{array}{cc}&lt;br /&gt;
w_{11} &amp;amp; w_{12} \\&lt;br /&gt;
w_{21} &amp;amp; w_{22}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right]&lt;br /&gt;
\cdot&lt;br /&gt;
\left[&lt;br /&gt;
\begin{array}{cccc}&lt;br /&gt;
0&amp;amp;1&amp;amp;0&amp;amp;1  \\&lt;br /&gt;
0&amp;amp;0&amp;amp;1&amp;amp;1&lt;br /&gt;
\end{array}&lt;br /&gt;
\right]&lt;br /&gt;
+&lt;br /&gt;
\left[&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
w_{10}\\&lt;br /&gt;
w_{20}&lt;br /&gt;
\end{array}&lt;br /&gt;
\right]&lt;br /&gt;
+&lt;br /&gt;
v_3&lt;br /&gt;
 \right) \right) = [0 \;1\; 1\; 0]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>