Neuronové sítě: Úvod (1. část)

[bibshow]
Tímto článkem bych chtěl zahájit seriál o umělé inteligenci a zpracování přirozeného jazyka.
Nejdříve se zastavíme u základů neuronových sítí (co je to neuronová síť, z čeho se skládá a jak funguje) a postupně bych se rád propracoval až k Deep Learning a pokročilým metodám strojového učení.

NeuralNetwork
Neuronová síť [bibcite key=Ng2014]

[wp_ad_camp_1]

Úvod

BrainAuditoryCortex

Auditory Cortex [bibcite key=Ng2014]

Dříve se předpokládalo, že mozek je rozdělen na jednotlivé části, které jsou vysoce specializované (např: zrak, sluch, apod.). Ale výzkumy provedené počátkem 90-tých let prokázaly pravý opak. Na testovaných subjektech vědci přerušily spoj mezi sluchem a části mozku zodpovědnou za jeho zpracování a poté tuto část spojili se zrakem. Část mozku původně zodpovědná za sluch se sama naučila rozpoznávat obraz a testovaný subjekt viděl. Je tedy zřejmé, že mozek je zcela univerzální zařízení. Vytvořit takto univerzální umělou inteligenci je i zlatým grálem umělé inteligence a možnou cestou jak toho dosáhnout jsou i neuronové sítě.
Neuronové sítě se těšily velikému zájmu vědecké komunity zejména v 80-tých a 90-tých letech 20-tého století, poté zájem o ně opadl. Vše se změnilo příchodem Deep Learning (rok 2012) a neuronové sítě se opět staly jednou z nejdynamičtěji se rozvíjejících oblastí umělé inteligence.

[wp_ad_camp_1]

Neuron

Na obrázku níže vidíme schéma skutečného neuron, skutečnými neurony jsou inspirovány i neurony používané v umělé inteligenci. Pro naše potřeby je zásadní, že neuron (skutečný i ten umělý) má několik vstupů ale jen jeden výstup který může být vstupem jiného neuronu.
RealNeuronSchema

Schéma skutečného neuronu [bibcite key=Ng2014]

Neurony se navzájem propojují pomocí synapsí, ty přenášejí informaci z jednoho neuronu do dalšího.
TwoNeurons

Propojení neuronů v mozku [bibcite key=Ng2014]

Analogicky fungují i „umělé“ neurony. Neuron může mít „i“ vstupů, ale jen jeden výstup.
Vstupy jsou označeny $latex x_0$ až $latex x_i$, každý spoj (synapse) má svoji váhu (význam) označenou $latex \theta_{10}^{(1)} $ až $latex \theta_{1i}^{(1)}$
Výjimečné postavení mezi vstupy má vstup $latex x_0 $ „bias unit“, která má hodnotu 1.

neuron

Neuron [bibcite key=Ng2014]

Výstup neuronu můžeme vypočítat
$latex a_1^{(2)} = g(\theta_{10}^{(1)} x_0 + \theta_{11}^{(1)} x_1 + \theta_{12}^{(1)} x_2 + … + \theta_{1i}^{(1)} x_i) $

Kde:
$latex a_1^{(2)} $ – hodnota výstupu
$latex x_0 $ – bias hodnota = 1
$latex x_1 … x_i $ – hodnota vstupní proměnné
$latex \theta_{10}^{(1)} … \theta_{1i}^{(1)} $ – váha spoje (synapse)

[wp_ad_camp_1]

Příklad

Zadání

Chceme vytvořit neuron s logickou operací AND

Řešení

neural_network_02

Nastavení hodnot
$latex \theta_{10}^{(1)} = -30 $
$latex \theta_{11}^{(1)} = 20 $
$latex \theta_{12}^{(1)} = 20 $
$latex x_0 = 1 $
$latex x_1, x_2 $ – vstupní hodnoty

Výpočet
Pro každou kombinaci vstupů vypočítáme výsledek pomocí vzorce
$latex h_{\theta}(x) = a_1^{(2)} = g(z_1^{(2)}) = g(\theta_{10}^{(1)} x_0 + \theta_{11}^{(1)} x_1 + \theta_{12}^{(1)} x_2 ) $

Výsledky výrazně větší jako 0 jsou logická 1 a výsledky výrazně nižší jak 0 jsou logická 0. Více si o převádění numerických hodnot na logické povíme příště, kdy budeme hovořit o Logistické (sigmoid) funkci.
Zatím nám bude stačit, že
$latex h_{\theta}(x) = a_1^{(2)} = g(z_1^{(2)})$
$latex z_1^{(2)}$ … výsledek před aplikací funkce sigmoid
$latex a_1^{(2)}$ … výsledek po aplikací funkce sigmoid

Výsledná tabulka

$latex x_1 $ $latex x_2 $ $latex z_1^{(2)} = \theta_{10}^{(1)} x_0 + \theta_{11}^{(1)} x_1 + \theta_{12}^{(1)} x_2 $ Logická hodnota $latex a_1^{(2)}$
0 0 $latex ((-30 \times 1) + (20 \times 0) + (20 \times 0)) = -30 $ 0
0 1 $latex ((-30 \times 1) + (20 \times 0) + (20 \times 1)) = -10 $ 0
1 0 $latex ((-30 \times 1) + (20 \times 1) + (20 \times 0)) = -10 $ 0
1 1 $latex ((-30 \times 1) + (20 \times 1) + (20 \times 1)) = 10 $ 1

Neuronová síť

neural_network_01

Neuronová síť[bibcite key=Ng2014]

Při pohledu na obrázek neuronové sítě, si všimněte, že neurony tvoří sloupce. První sloupec tvoří takzvanou vstupní vrstvu (input layer), poslední sloupec tvoří výstupní vrstvu (output layer). Všechny ostatní sloupce tvoří skrytou vrstvu (hidden layer).

Vrstvy neuronové sítě
– Vstupní vrstva (input layer)
– Skrytá vrstva (hidden layer)
– Výstupní vrstva (output layer)

Výpočet neuronové sítě

V předchozím příkladu jsme si ukázali, jak můžeme spočítat hodnotu jednoho neuronu. Stejný postup můžeme aplikovat i na celou neuronovou síť.
Při výpočtu použijeme postup s názvem „Forward propagation“, nejdříve spočítáme hodnoty výstupu všech neuronů ve vrstvě „2“ (vrstva „1“ jsou vstupy). Výsledky neuronů „2“ vrstvy slouží jako vstupy do „3“ vrstvy, a tak dále až se dostaneme k výstupní vrstvě.

Výpočet hodnot ve vrstvě číslo 2
$latex a_1^{(2)} = g(\theta_{10}^{(1)} x_0 + \theta_{11}^{(1)} x_1 + \theta_{12}^{(1)} x_2) $
$latex a_2^{(2)} = g(\theta_{20}^{(1)} x_0 + \theta_{21}^{(1)} x_1 + \theta_{22}^{(1)} x_2) $
$latex a_3^{(2)} = g(\theta_{30}^{(1)} x_0 + \theta_{31}^{(1)} x_1 + \theta_{32}^{(1)} x_2) $

Výpočet hodnot ve vrstvě číslo 3
$latex h_{\theta}(x) = a_1^{(3)} = g(\theta_{10}^{(2)} a_0^{(2)} + \theta_{11}^{(2)} a_1^{(2)} + \theta_{12}^{(2)} a_2^{(2)}) $

Bibliography

[/bibshow]

[wp_ad_camp_1]

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *