Docstoc

Dodatek 2 – úvod do práce s Neural Network Toolboxem_ MATLAB_ verse 5

Document Sample
Dodatek 2 – úvod do práce s Neural Network Toolboxem_ MATLAB_ verse 5 Powered By Docstoc
					Úvod do práce s Neural Network Toolboxem, MATLAB, v. .

    Podporou pro řešení úloh pomocí umělých neuronových sítí je NN-Toolbox Matlabu.
Současné verze umožňují práci s jednoduchými modely, které tvoří základ práce s UNS, ale
také s mnoha novými metodami, které byly vyvinuty v posledních letech. Pomocí
demonstračních úloh je možné se seznámit s jednotlivými fázemi návrhu sítě, jejího trénování
a zpracování výsledků. Toolbox také obsahuje aplikační úlohy. Jeho úspěšné používání
předpokládá základní znalosti z programování a z teorie neuronových sítí. V práci uživateli
pomáhá Help, který obsahuje všechny potřebné informace. Přesto na tomto místě uvádím
alespoň základní pojmy. Podrobnější seznámení s NN-Toolboxem zůstává na uživateli. Pouze
experimentování s neuronovými sítěmi umožní porozumět teorii a přispěje k úspěšným
aplikacím.
    Uvedu zde přehled funkcí, které se v této variantě NN-Toolboxu vyskytují, abych
umožnila snazší orientaci při využívání helpu. S názvy většiny z nich jste se setkali
v jednotlivých kapitolách skripta. Na tomto místě uvedu jen názvy hlavních kategorií, pouze u
několika z nich přidám více podrobností.

   Pro rozdělení funkcí podle typu UNS voláme“Function and network Type“:

   assoclr            associativní učení
   backprop           učení zpětného šíření gradientu chyby
   elman              učení Elmanovy rekurentní sítě
   hopfield            Hopfieldovo učení pro rekurentní síť
   linnet             učení lineárního neuronu
   lvq                lineární vektorová kvantizace
   percept           učení Perceptronu
   radbasis          učení sítě s RBF funkcemi
   selforg           samoorganizace

   Pro rozdělení funkcí podle tříd volíme „Analysis Function, Distance Function,
Graphical interface Function, Layer Initialization Functions, Learning Functions, Line
Search Functions, Net Input Derivative Function, Net Input Function, Network
Initialization functions, Network Use Functions, New Network Function, Performance
Derivative Functions, Performance Function, Plotting Functions, Pre and Post
Processing Functions, Simulink Support Function, Topology Functions, Utility Function,
Vector Function, Weight and Bias Initialization Functions, Weight Derivative Function,
Weight Functions “.

   Do této kategorie patří podrobněji uvedené funkce označující trénování a přenosové
funkce.

   Training Functions:

  trainb
  trainbr             Bayesovská regularizace
  trainc
  trainr
  trains
  trainbfg
  traincgb
  traincgf
  traincgp
  traingd
  traingda           varianty metody zpětného šíření gradientu chyby
  traingdm
  traingdx
  trainlm
  trainoss
  trainrp
  trainscg

  Transfer Functions:

   compet          aktivační funkce pro soutěžní učení (kompetitivní) – pro samoorganizaci
   hardlim          skoková aktivační funkce (nabývá hodnot 0,+1) – pro klasifikaci
   hardlims        symetrická aktivační funkce (nabývá hodnot -1,+1) – pro klasifikaci
   logsig          sigmoida (nabývá hodnot mezi 0,+1) – nelineární funkce
   poslin          pozitivní lineární funkce (nabývá hodnot mezi 0,+ )
   purelin         lineární funkce (nabývá hodnot mezi -,+ ) – vhodná ve výstupní
                   vrstvě
   radbas           radiální basická aktivační funkce
   satlin          saturovaná lineární funkce (nabývá hodnot mezi 0,+1)
   satlins          symetrická saturovaná lineární funkce (nabývá hodnot mezi -1,+1)
   softmax
   tansig          hyperbolická tangenta (nabývá hodnot mezi -1,+1) – nelineární funkce
   tribas          trojúhelníková aktivační funkce

Derivace těchto funkcí, pokud existují (pro compet a softmax nejsou definovány) jsou v této
variantě NN-Toolboxu MATLABu označeny přidáním „d‟ před název aktivační funkce, např.
dlogsig. Ty se nazývají “Transfer Derivative Functions”. Experimentování s aktivačními
funkcemi je možné pomocí demonstrační verze nnd2n1. Příklad vykreslení skokové aktivační
funkce:
        n = -5: 0.1: 5;
        plot(n, hardlim(n), „C+:);

    Pro snadnější orientaci v NN-Toolboxu je v tabulce D2 uveden rozdíl mezi značením
funkcí a proměnných mezi teoretickými úvahami ve skriptu (korespondují s velkou většinou
literárních pramenů týkajících se umělých neuronových sítí a jejich aplikací ve světě) a
značením v toolboxu.


          Název - UNS           Značení - UNS          Značení - MATLAB
         vstupy do neuronu      xi, i = 1,…,n          pi, i = 1,…,R
         obvodové funkce        u                      n
         výstup z neuronu       y                      a
         aktivační funkce       f                      f

Tabulka D2: Značení funkcí a proměnných ve skriptu a NN-Toolboxu v MATLABu.
   V následujících řádcích si ukážeme, jak pracovat s toolboxem. Pro jednoduchý neuron
platí:
           vstup (input) je označen „p„ (obecně je to vektor o R-elementech)
           váha (weight) je označena „w„ (obecně matice vah W); je-li použita matice vah,
              představují řádky rozložení neuronů ve vrstvě, sloupce určují připojené vstupy;
              např. w1,2 určuje, že signál je šířen ze vstupu 2 do neuronu 1)
           aktivační (přenosová) funkce (transfer function) je označena „f‟
           výstupní hodnota (output) je označen „a‟
           práh (bias) je označen „b‟.

   Pro vrstevnatou UNS platí, že vstupem je buď vektor p s R-vstupy, resp. matice vstupů s
Q-vektory; pak je dimenze vstupní matice (R,Q). Matice vah W1 má hodnost (S1,R), kde S1 je
počet neuronů v první skryté vrstvě a R je počet vstupů.

                     w1,1      w1, 2       ...   w1, R
                     w2,1      w2 , 2      ...   w2 , R
             W=
                      ...       ...        ...    ...
                     wS ,1     wS , 2      ...   wS , R


Matice vah W2 má hodnost (S2, S1), kde S1 je počet neuronů v první skryté vrstvě a S2 je počet
neuronů ve druhé skryté vrstvě, resp. ve výstupní vrstvě. Z každé vrstvy vystupují vektory a a
pro jednotlivé neurony vrstvy jsou definovány prahy b, které tvoří vektor b, oba mají Si-
elementů. V následujících řádcích ukážeme způsob zápisu vektorů a matic.

             W = [1 2]                      net.IW{1,1} = [1,2];
             b = [0]                        net.b{1} = 0;
Vstupní vektory

          p1 = [1 2]T        p2 = [2 1]T         p3 = [2 3]T   p4 = [3 1]T

         P = [p1, p2, p3, p4] = [1 2 2 3; 2 1 3 1];

Výstup z neuronové sítě bude zapsán jako

           a = sim (net, P)
           a=
               5 4 8 5

   Vstupní váhy se v této verzi NN-Toolboxu označují jako input weights – např. IW1,2 (ze
vstupu 2 do neuronu1). V této verzi MATLABu platí

             IW1,2                      net.IW{1,2}

Pro váhy ve vrstvě je zavedeno označení layer weights – LW.
  Pro potenciál neuronu lze např. psát:

        n{1} = net.IW{1,2}*p + net.b{1}
      Příklad zápisu pro 3-vrstvé (podle značení MATLABu) UNS:
               pro výstupy z jednotlivých vrstev

            a1 = f1 (IW1,1 p + b1)
            a2 = f2 (IW2,1 p + b2)
            a3 = f3 (IW3,1 p + b3)

               pro výstup z celé sítě

            a3 = f3 (IW3,2 f2 (LW2,1 f1(IW1,1 p + b1) + b2) + b3)

   Počet vstupů je R1, počet neuronů v první (skryté) vrstvě je S1, počet neuronů v druhé
(skryté) vrstvě je S2 atd. Tedy např. 3-vrstvá UNS má 1 výstup (layer 3) a 2 skryté vrstvy
(layer 1 a layer 2). Vstupy se nepovažují za vrstvu.1

   Rozlišují se dva základní typy vstupních vektorů, a to vektory vstupující do sítě v jednom
čase – concurrent inputs (nezáleží na pořadí vektorů) a vektory vstupující do sítě sekvenčně –
sequential inputs (pořadí vektorů je rozhodující).

Vykreslení aktivačních funkcí

n = -5: 0.1:5;              n = -5: 0.1:5;         n = -5: 0.1:5;    n = -5: 0.1:5;
a = purelin(n);             a = satlin(n);         a = satlins(n);   a = tansig(n);
plot (n, a)                 plot (n, a)            plot (n, a)       plot (n, a)

n = -5: 0.1:5;              n = -5: 0.1:5;         n = -5: 0.1:5;
a = hardlim(n);             a = radbas(n);         a = logsig(n);
plot (n, a)                 plot (n, a)            plot (n, a)


Perceptron

Všechny funkce vztahující se k Perceptronu lze vyvolat příkazem help percept. Aktivační
funkce pouze hardlim.

Návrh sítě se uskuteční příkazem

            net = newp (PR,S),

kde PR je (R x 2)-matice minimálních a maximálních hodnot, kterých mohou nabývat vstupy,
S je počet neuronů v dané vrstvě. Např. zápis net = newp ([0 2], 1); znamená, že vstupy do
sítě budou mezi hodnotami 0, 2 a síť bude mít 1 výstup, ‚středník„ za příkazem potlačuje jeho
zobrazení na obrazovce.

K inicializaci vah a prahů slouží příkazy

             net.IW{1,1} = [3, 4]; to znamená, že váhy se nastaví na hodnoty z intervalu [3, 4]
             net.b {1} = 5; to znamená, že prahy se nastaví na stejnou hodnotu 5

1
    Rozdílné značení vrstev v MATLABu od skript.
               net = init (net); to znamená, že váhy se nastaví na stejnou hodnotu 0
               w = [1 -0.8]; net.IW{1,1} = w; to znamená nastavení vah implicitně (na předem
                                                 dané hodnoty)

Příklad: Chceme trénovat během 1 epochy2 neuronovou síť typu Perceptron. Matice vstupů
bude tvořena 4 vektory, každý bude tvořen 2 elementy. Výstupem bude 1 vektor o 4
elementech.
Řešení: Inicializujeme váhy hodnotami z intervalu [-2, 2] pro oba vstupy.
         net = newp ([-2 2; -2 2], 1);
         net.trainParam.epochs = 1;

             P = [ [2; 2] [1; -2] [-2; 2] [-1; 1] ]
             t = [ 0 1 0 1]

             net = train (net, P, t);
             a = sim (net, P)
             a=
                 [0] [0] [1] [1]

Tento výstup neodpovídá cílovým hodnotám (viz vector „t‟). Je třeba přidat další epochy a síť
znovu natrénovat. Pokud nebyly uloženy inicializační hodnoty vah, dostaneme hodnoty
vstupních vektorů P mírně odlišné. Je to způsobené generátorem náhodných čísel, který z
definovaného intervalu načítá hodnoty.

Lineární sítě

 Všechny funkce vztahující se k lineární síti lze vyvolat příkazem help linnet. Používá se
aktivační funkce purelin.

Návrh sítě se uskuteční příkazem

             net = newlin ( [ -1 1; -1 1], 1);

Tato síť má 2 skalární vstupy v rozmezí hodnot z intervalu [-1, 1]. Inicializace vah a prahů je
následující:

             W = net.IW{1,1} = [2 3];
             W = net.IW{1,1}
             W=
                   2 3
             net.b{1} = [-4];
             b = net.b{1}
             b=
                  -4

Simulace sítě pro vstupní vektor:

             a = sim (net, P)

2
    Název „epocha‟ odpovídá „iteraci‟.
         a=
              24

LMS pravidlo

Je to Widrow-Hoffův zákon pro učení s učitelem a znamená, že se vypočítá střední
kvadratická chyba mezi výstupem ze sítě a cílovou hodnotou. Tato chyba se minimalizuje.

                       Q                Q
                   1                1
                        e k          t k   ak 
                              2                              2
         mse 
                   Q   k 1         Q   k 1


Pro její výpočet slouží funkce learnwh. Pro vyjasnění základních vlastností jsou určeny
demonstrační úlohy demolin1 (návrh a nakreslení zadání), demolin2 (trénink lineárního
neuronu, nakreslení váhových trajektorií, výpočet chyb během trénování), demolin4 (
minimalizace chyby pomocí LMS pravidla), demolin5 (nedostatečně určená úloha),
demolin6 (lineárně závislé neurony), demolin7 (příliš velká rychlost učení) a nnd101c
(demonstruje klasickou úlohu klasifikace zašuměných dat).

				
DOCUMENT INFO