Programowanie Układów Logicznych kod kursu: ETD6203 IoT, sieci neuronowe W9 24.04.2019 mgr inż. Maciej Rudek opracował: dr inż. Daniel Kopiec
Plan wykładu IoT internet rzeczy Sieci neuronowe - wprowadzenie Odwzorowanie neuronu w logice programowalnej Przykłady Podsumowanie przykładowe pytania 2
IoT Internet of Things - internet rzeczy IoT koncepcja zapoczątkowana przez Kevina Ashtona w 1999 Jeżeli mielibyśmy komputery, które wiedziałyby wszystko na temat przedmiotów i sposobów ich użycia na podstawie danych zbieranych bez żadnego wysiłku ze strony użytkownika, bylibyśmy w stanie monitorować i liczyć niemal każde zachowanie, co pozwoliłoby na redukcję strat, odpadów i kosztów. Wiedzielibyśmy kiedy przedmioty lub ich części potrzebowałyby wymiany, naprawy lub naszej uwagi. IoE Internet of Everything M2m Machine to Machine 4
IoT Internet of Things Internet przedmiotów - IoT, internet rzeczy Główne założenia: o każdym czasie, w każdym miejscu, każda rzecz Koncepcja IoT wyznacza kierunek rozwoju Internetu i będzie stanowiła olbrzymi przeskok społeczno-technologiczny 5
6 IoT Internet of Things - sieć czujników
7 IoT Internet of Things - sieć zależności
IoT Film prezentowany podczas wykładu do obejrzenia na stronie: https://ec.europa.eu/digitalagenda/en/internet-things 8 Internet rzeczy w Polsce: http://iab.org.pl/wp-content/uploads/2015/09/raport-internet-rzeczy-w-polsce.pdf
IoT Internet of Things - światowa tendencja W 2003 liczba urządzeń podłączonych do internetu nie przewyższała liczby ludności Do roku 2020 liczba urządzeń IoT wzrośnie do 100 mld Ogólna tendencja mówi, że do 2020 roku będziemy w posiadaniu ok. 100 mld urządzeń połączonych w sieć w oparciu o dwukierunkową komunikację. 9
10 IoT FPGA -> SoC - System on Chip
W ramach powtórzenia - atrybuty sygnału 11 Każdy na pewno zna: event (clk event) -- zmiana wartości signal x: std_logic_vector (15 downto 0) x left = 15, x right = 0; -- zwraca granicę zakresu x high(=15), x low (=0); -- zwraca granicę zakresu x range (=15 downto 0); -- zwraca zakres typu x length (=16); -- zwraca długość wektora Przykład użycia: x(x high) <= 1 ; x (x low+3 downto x low) <= x c ; x <= (x high => 1, x low => 1, others => 0 );
Rekord zbiór elementów identyfikator mojego rekordu (op_t) type op_t is record rs : std_logic; data : std_logic_vector(7 downto 0); delay_h : integer range 0 to MAX_DELAY; delay_l : integer range 0 to MAX_DELAY; end record op_t; Rekord jest zbiorem identyfikowalnych elementów, z których każdy może być innego typu. constant default : op_t := (rs => '1', data => X"00", delay_h => DEL_H, delay_l => DEL_L); constant select_1 : op_t := (rs => '0', data => X"80", delay_h => DEL_H, delay_l => DEL_L); constant select_2 : op_t := (rs => '0', data => X"C0", delay_h => DEL_H, delay_l => DEL_L); signal this_op : op_t;... this_op <= default; lcd_rs <= this_op.rs; przykład deklaracji obiektu aby odczytać wartość pola rs tego rekordu, należy odwołać się do niego po jego nazwie 13 Rekord jest zbiorem identyfikowalnych elementów, z których każdy może być innego typu.
Neurony odwzorowanie przyrody Ludzki mózg: - około 100 miliardów neuronów (10 11 ), - 10 15 połączeń między komórkami przy przeciętnym dystansie 0,01 mm do 1m, - szybkość pracy mózgu 10 18 operacji/s, - impulsy 1 100 Hz, czas trwania 1-2 ms 14 Cechy: 1. Ogromna moc obliczeniowa 2. Duża wydajność 3. Odporność na uszkodzenia, 4. Odporność na szumy 5. Zdolność uczenia i adaptacji 6. Zdolność przetwarzania informacji niepełnej i obarczonej błędami
Budowa neuronu dendryt jądro ciało komórkowe akson Jądro centrum obliczeniowe neuronu, kluczowe procesy zachodzące dla neuronu Akson wyjście neuronu. Za jego pośrednictwem neuron przekazuje swoje reakcje na dane wejściowe. Neuron posiada tylko jeden akson. Dendryt wejście neuronu. Dendryty przekazują sygnały do jądra. Dendrytów może być wiele biologiczne neurony mają ich tysiące. Synapsa miejsce komunikacji aksonu z błoną komórkową, dendrytem 15 synapsa dendryt
Neuron Model sztucznego neuronu y = f n i=1 w i x i x 1,...,x n sygnały wejściowe danego neuronu w 1,...,w n wagi synaptyczne y sygnał wyjściowy 16 wybór funkcji aktywacji (przejścia) należy do projektanta i zależy od problemu, który neuron (sieć) ma rozwiązywać, wagi decydują o zachowaniu neuronu i całej sieci
Realizacja neuronu 17 Realizacja neuronu: równoległa, równoległo-sekwencyjna, sekwencyjna. Rodzaje sieci: jednokierunkowe, jednowarstwowe, wielowarstwowe, rekurencyjne ze sprzężeniem zwrotnym.
18 Neuron - odwzorowanie w układzie analogowym
Funkcja aktywacji Zachowanie neuronu jest silnie uzależnione od rodzaju funkcji aktywacji Typy funkcji aktywacji: nieciągłe progowa (unipolarna), signum (bipolarna) 19 ciągłe liniowa, sigmoidalna (unipolarna ciągła), tangensoidalna (bipolarna ciągła), gaussa. inne.
Przykładowe funkcje aktywacji n i i i n i i i i x w x w gdy gdy u f y 1 1,, 0 1 ) ( x i u f y exp 1 1 ) ( progowa (skokowa) funkcja aktywacji stosowana w sieciach liniowych (podstawowa postać) (perceptron Rosenblatta) funkcja sigmoidalna 0 gdzie: - wartość progowa 20
Sztuczna sieć neuronowa 21 Sztuczna sieć neuronowa (SSN) to wysoce równoległy rozporoszony system złożony z prostych elementów obliczeniowych mających naturalną skłonność zapamiętywania podawanych informacji. Przypomina system połączeń w mózgu. Wiedza jest zdobywana przez sieć ze środowiska w procesie uczenia. Wagi połączeń między neuronami używane są do zapamiętywania uzyskanej wiedzy. Działanie sieci zależy od: przyjętego modelu neuronu, topologii (struktury) sieci, wartości parametrów neuronu ustalonych w wyniku uczenia
Schemat sztucznej sieci neuronowej - sieć wielowarstwowa 22 warstwa wejściowa sieć jednokierunkowa jednowarstwowa warstwa wyjściowa warstwy ukryte sieć jednokierunkowa wielowarstwowa W strukturze sieci istotny jest fakt, że każdy neuron warstwy wcześniejszej nie komunikuje się z każdym neuronem warstwy następnej natomiast neurony w warstwach nie komunikują się między sobą.
Schemat sztucznej sieci neuronowej - sieć rekurencyjna Sieć rekurencyjna charakteryzuje się: dwukierunkowym przepływem informacji, Najczęściej spotykane sieci rekurencyjne to: Sieć Hopfielda, Maszyna Boltzmana, Sieć BAM (Bidirectional Associative Memory) Sieci ART (Adaptive Resonance Theory) 23
Uczenie sieci neuronowej Uczenie sieci polega na automatycznym (zgodnie z algorytmem) dobraniu takich wartości wag, przy których sieć będzie możliwie najlepiej rozwiązywała zadanie Rozróżnia się dwa rodzaje uczenia: - nadzorowane (z nauczycielem), - nienadzorowane (bez nauczyciela). 24 Wagi stanowią całą wiedzę posiadaną przez neuron lub sieć neuronową, Ogólna zasada uczenia neuronu głosi, że: - wektor wag w rośnie proporcjonalnie do iloczynu sygnału wejściowego x i uczącego r.
25 Uczenie sieci neuronowej
Uczenie sieci neuronowej Uczenie nadzorowane stosuje się tylko wówczas, gdy istnieje możliwość zweryfikowania poprawności odpowiedzi udzielanych przez sieć; oznacza to, że: dla każdego wektora wejściowego musi być znana dokładna postać wektora wyjściowego. 26 Uczenie nienadzorowane stosuje się wówczas gdy nie znamy oczekiwanych odpowiedzi na zadany wzorzec, ale wtedy: sygnały muszą się dać sklasyfikować, neuronów musi być zdecydowanie więcej, sieć musi być dostatecznie mądra, różnorodne preferencje początkowe neuronów.
Uczenie sieci neuronowej - kiedy sieć sobie nie radzi Aby zabezpieczyć się przed sytuacjami wyjątkowymi, podczas których SSN nie będzie mogła znaleźć poprawnego rozwiązania wprowadza się mechanizmy kontrolujące szybkość i jakość uczenia. Są to współczynniki uczenia oraz momentum, które: wpływają na stromość funkcji aktywacji, regulują szybkość wpływu zmiany wag na proces uczenia. 27
Ważniejsze metody uczenia sieci - jednokierunkowych wielowarstwowych Wstecznej propagacji błędów, Szybkiej propagacji błędów, Gradientów sprzężonych, Metodą zmiennej metryki, Metoda paraboidalnych modeli funkcji błędów 28
Uczenie sieci neuronowej - uczenie z nadzorem - kroki 1. Przygotowanie dwóch ciągów: uczącego i weryfikującego. W skład ciągu uczącego wchodzi wektor wejściowy oraz wektor wyjściowy. 2. Ustanowienie początkowych wartości wag (wartości przypadkowe). 3. Po przetworzeniu wektora wejściowego nauczyciel porównuje wartości otrzymane z wartościami oczekiwanymi informując sieć o błędzie odpowiedzi. 4. Jeżeli wartość na wyjściu neuronu nie zgadza się z wartością oczekiwaną, następuje korekcja wag, tak aby błąd odpowiedzi uzyskany przy powtórnym przetworzeniu wektora wejściowego był mniejszy od poprzedniego. 29 5. Czynności 1-4 powtarza się aż do uzyskania błędu mniejszego niż zamierzony.
Zastosowania sieci neuronowych rozpoznawanie cech, rozpoznawanie obrazów, rozpoznawanie mowy, diagnostyka medyczna, prognozowanie w ekonomii, sterowanie ruchami robota, symulowanie zachowań struktur biologicznych neuronów. 30 Siła sieci neuronowych tkwi w połączeniach Sieci składające się z wielu neuronów będą miały o wiele więcej zastosowań.
Sprzętowa implementacja neuronu Sposób implementacji neuronu w strukturze programowalnej 31
Sprzętowa implementacja neuronu - sieci neuronowych Główne utrudnienia w sprzętowej implementacji sieci neuronowej to: reprezentacja danych, stopień zrównoleglenia operacji, cyfrowe mnożenie, duża liczba połączeń pomiędzy neuronami, dobór oraz implementacja funkcji aktywacji. 32
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; entity neuron is generic( r : integer :=3; b : integer :=4); wejścia neuronu Port (x1 : in signed (b-1 downto 0); x2 : in signed (b-1 downto 0); x3 : in signed (b-1 downto 0); w : in signed (b-1 downto 0); clk : in std_logic; y : out signed (2*b-1 downto 0)); end neuron; architecture Behavioral of neuron is type weights is array (1 to r) of signed (b-1 downto 0); type inputs is array (1 to r) of signed (b-1 downto 0); begin process (clk, w, x1, x2, x3) variable weight : weights; variable input : inputs; variable prod, acc : signed (2*b-1 downto 0); begin if (clk'event and clk='1') then weight := w & weight (1 to r-1); end if; input(1) := x1; input(2) := x2; input(3) := x3; acc := (others => '0'); l1: for j in 1 to r loop prod :=input(j)*weight(j); acc := acc + prod; end loop l1; y <= acc; end process; end Behavioral wyjście liniowe rejestr przesuwny wagowy mnożenie dodawanie 33 IEEE.STD_LOGIC_ARITH.ALL; signed - typ obejmujący liczby ze znakiem
Operacje na liczbach ze znakiem IEEE.STD_LOGIC_ARITH.ALL; signal count: unsigned (3 downto 0) count może przechowywać zmienną w zakresie (od 0 do 15) signal count: signed (3 downto 0); count może przechowywać zmienną w zakresie (od -8 do +7) porównywanie danych unsigned, signed wymaga użycia funkcji konwersji 34
Kodowanie ZM - przypomnienie Liczba ZM składa się z dwóch części - bitu znaku oraz bitów wartości liczby (modułu) Moduł liczby ZM jest zapisany w naturalnym kodzie dwójkowym NBC, zatem w celu obliczenia jej wartości moduł mnożymy przez 1, gdy bit znaku wynosi 0 lub przez -1, gdy bit znaku wynosi 1. L ZM = (-1) bit znaku moduł liczby b n-1 - bit znaku liczby b n-2... b 0 - bity modułu liczby 35 10110111 (ZM) = (-1) 1 (2 5 + 2 4 + 2 2 + 2 1 + 2 0 ) 10110111 (ZM) = - (32 + 16 + 4 + 2 + 1) 10110111 (ZM) = - 55 (10)
Kodowanie U2 Kod uzupełnień do podstawy 2 lub w skrócie U2 (ang. 2C - Two's Complement) Liczba jest dodatnia, gdy bit znaku ma wartość 0 - suma pozostałych wag tworzy zawsze liczbę dodatnią lub zero. Jeśli bit znaku przyjmie wartość 1, to liczba jest ujemna. b n-1 b n-2 b n-3...b 2 b 1 b 0 (U2) = b n-1 (-2 n-1 ) + b n-2 2 n-2 + b n-3 2 n-3 +... + b 2 2 2 + b 1 2 1 + b 0 2 0 36 01101011 (U2) = 64+32+8+2+1=107 (10) 11101011 (U2) = (-2 7 )+64+32+8+2+1=-128+107=(-21) (10)
Kodowanie liczb
Sprzętowa implementacja neuronu - testbench w<="0000"; x1<="0011"; x2<="0100"; x3<="0101"; wait for 10 ns; ns; x1<="0110"; x2<="1000"; x3<="0010"; wektor wejściowy neuronu w<="0111"; wait for 20 ns; w<="1000"; wait for 20 ns; w<="1001"; wait for 20 wagi w<="0111"; wait for 20 ns; w<="1000"; wait for 20 ns; w<="1001"; wait for 20 ns; x1<="0011"; x2<="0100"; x3<="0101"; w<="0111"; wait for 20 ns; w<="1000"; wait for 20 ns; w<="1001"; wait for 20 ns; assert false severity failure; 38
Sprzętowa implementacja neuronu - testbench Przykład realizacji neuronu liniowa funkcja aktywacji A wyjście neuronu po trzech cyklach zegarowych B C y = x 1 w 1 + x 2 w 2 + x 3 w 3 = (3)(-7) + (4)(-8) + (5)(7)= -18 256 18 = 238 39
Odwzorowanie technologiczne wyjście wejścia 40 Odwzorowanie technologiczne neuronu w strukturze programowalnej FPGA, - odwzorowanie nie zawiera funkcji aktywacji
Funkcja aktywacji - funkcja progowa bipolarna library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_SIGNED.ALL; pakiet dla funkcji progowej package hardlims_fun1 is function hardlims (signal n : signed) return signed; end hardlims_fun1; y i f ( u) 1, 1, gdy gdy n i1 n i1 w w i i x x i i package body hardlims_fun1 is function hardlims (signal n : signed) return signed is variable y: signed (7 downto 0); variable temp: integer range -8 to 7; begin temp := conv_integer (n); if (temp >= 1)then temp :=1; else temp := -1; end if; y := conv_signed (temp,8); return y; end hardlims; end hardlims_fun1; 41 wyjście neuronu 8-bit ze znakiem
Odwzorowanie technologiczne wyjście wejścia 42 Odwzorowanie technologiczne neuronu w strukturze programowalnej FPGA, - odwzorowanie zawiera progową funkcję aktywacji
Zadanie domowe library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_SIGNED.ALL; package hardlims_fun1 is function hardlims (signal n : signed) return signed; end hardlims_fun1; Przeanalizuj test bench package body hardlims_fun1 is function hardlims (signal n : signed) return signed is variable y: signed (7 downto 0); variable temp: integer range -8 to 7; begin temp := conv_integer (n); if (temp >= 1)then temp :=1; else temp := -1; end if; y := conv_signed (temp,8); return y; end hardlims; end hardlims_fun1; 43
Przykładowe pytania 1. Atrybuty sygnałów sposoby wykorzystania 2. Tworzenie rekordów w VHDL 3. Tworzenie tablic w VHDL 4. Zdefiniuj pojęcie neuronu 5. Sieć neuronowa typy, rodzaje 6. Odwzorowanie technologiczne neuronu 7. Zastosowanie sieci neuronowych 8. Zasoby wykorzystywane przez neurony w FPGA 45