OCR - od teorii do praktyki

OCR , ICR .   OCR w mojej głowie?   Budowa neuron biologicznego   Modele sztucznego neuronu
Sztuczna sieć neuronowa   Architektura sieci   Praktyczny mini-projekt OCR   Bibliografia , przydatne linki AI

OCR . ICR ...?

Najprostsze tłumaczenie terminu OCR z języka angielskiego brzmi : Optyczne Rozpoznawanie Znaków (ang. Optical Character Recognition) i Inteligentne Rozpoznawanie Znaków (ang. ICR = Intelligent Character Recognition)
Czy wyjaśnienie takie jest wystarczające ? Dla kogoś kto pierwszy raz spotkał się z tym terminem lub widział ten skrót przy okazji lektury np. reklamówki do skanera wyjaśnienie takie może być niewystarczające.
Czym naprawdę jest ten tajemniczy OCR ? Może programem , który przeczyta a może nawet zrozumie wszystkie dokumenty które mu dostarczymy skanując obraz za pomocą skanera , cyfrowego aparatu fotograficznego lub kamery połączonej z kartą PC tzw. frame grabberem.
Gdyby tak było , tłumaczom, sekretarkom i wielu osobom , których praca polega głównie na przetwarzaniu tekstu , groziłoby bezrobocie w niedalekiej perspektywie. Historia OCR liczy sobie już ponad 30 lat Pierwsze prace nad systemami rozpoznawania pisma drukowanego zainicjowała firma XEROX (znana z kserokopiarek) w okolicach 1975 roku. Początkowo był to stosunkowo prosty, sprzętowy (optyczny) mechanizm polegający na porównywaniu ściśle wydzielonych obrazów pojedynczych liter z ich odpowiednikami na liście wzorców. (W połowie lat sześćdziesiątych ) Wprowadzone zostały w tym celu dwa znormalizowane zestawy znaków: OCR-A i OCR-B. Jeszcze dzisiaj tego typu czcionki są stosowane w polach kodowych np. czeków bankowych.
Od tego czasu dokonał się duży postęp w dziedzinie systemów OCR , szczególnie od czasu szerszego zastosowania sieci neuronowych , które zresztą okazały się bardzo przydatne a niekiedy niezastąpione w oprogramowaniu wkraczającym w obszary sztucznej inteligencji (termin angielski AI - Artifical Intelligence). Oprogramowanie syntetyzujące i rozpoznające mowę , niektóre systemy rekonstrukcji dźwięku np. z nagrań archiwalnych , oprogramowanie diagnostyczne w kardiologii i neurologii nie mogły by się obyć bez programowych realizacji sieci neuronowych. We współczesnych systemach ICR architektura sieci neuronowej do rozpoznawania pisma często wzorowana jest na strukturze połączeń występujących w części mózgu (człowieka), odpowiedzialnej za przetwarzanie informacji wizualnej (Visual Cortex). Sieć nie tylko klasyfikuje cechy, ale także sama je wykrywa - specjalnie połączone warstwy neuronów (tzw. połączenia funkcjonalne) są w stanie, w trakcie uczenia, "wyłuskać" z pikselowego obrazu znaku cechy odróżniające go od innych liter. Ważnym zadaniem jest też detekcja i wydzielenie obszarów grafiki i tekstu na przetwarzanym dokumencie , a także korekta – w granicach możliwości algorytmu – zniekształceń tekstu powstałych np. podczas skanowania. Większość programów ICR , nawet tych najlepszych , ma pewne wartości krytyczne np. skosu linii (ang. skew) , powyżej których przetworzony dokument będzie już praktycznie nieczytelny.

Czy program zawierający w sobie cyfrową symulację sieci neuronowej to już sztuczna inteligencja czy też bardziej skomplikowany automat znany elektronikom z teorii układów logicznych ? Ta druga odpowiedź wydaje się być znacznie bliższa prawdy. Automaty logiczne , znane w historii techniki cyfrowej jako bramki NAND czy NOR to nic innego jak najprostsze mini-modele sieci neuronowej z funkcja progową zamiast łagodnej charakterystyki typu sigmoidy.

Postęp jaki dokonał się w dziedzinie sprzętu komputerowego , nawet tego popularnego , może przyprawiać o zawrót głowy. Typowy procesor instalowany we współczesnych komputerach domowych zawiera ponad 5..50 mln. tranzystorów i ma moc obliczeniową przewyższająca superkomputery z lat 70-tych. Miniaturyzacja ścieżek i tranzystorów na krzemowym 'waflu' procesora zeszła już do fizycznych granic możliwości (0.15 mm ==1.5*10-7) W dziedzinie oprogramowania nie nastąpiła jednak rewolucja o porównywalnej skali.
Element , który daje życie i "duszę" komputerom - czyli oprogramowanie - tworzy człowiek - programista.

25 lat lawinowego rozwoju elektroniki komputerowej mieści się wewnątrz jednego pokolenia
- to za mało czasu dla gruntownej zmiany koncepcji i logiki oprogramowania. Ponadto coraz doskonalsza elektronika rozleniwia - po co optymalizować algorytmy skoro za chwilę będzie można dysponować setkami gigabajtów twardego dysku czy pamięci operacyjnej ?

OCR .w mojej głowie..?

Wzorcem pierwotnym dla sztucznych sieci sieci neuronowych jest centralny system nerwowy żywego organizmu - czyli mózg.W historii ewolucji mózg okazał się najskuteczniejszą bronią w walce o przetrwanie...Zalążki mózgu pojawiły się już u takich kręgowców jak ryby. Na szczycie piramidy rozwoju znalazł się obecnie człowiek. Nasz mózg jest nie tylko jednym z największych (masa do 1,5 kg) ale i najbardziej wyrafinowanym organem nerwowym wyprodukowanym przez ewolucję. Liczbę neuronów szacuje się na 1010 czyli 10 miliardów zaś liczbę aktywnych połączeń na 1015 .Dająca się pomierzyć częstotliwość impulsów nerwowych (EEG) obserwowana jest w zakresie 0.5 -100 Hz (100 drgań na sekundę) typowym czasie trwania 2 ms, napięciu 100 mV i szybkości propagacji do 100 m/s . Gęstość przetwarzanych przez mózg informacji można szacować na 1017 ..1018 operacji na sekundę (sygnał analogowy - co dopowiadałoby operacjom zmiennoprzecinkowym). Taka moc obliczeniowa jest nadal nieosiągalna nawet dla współczesnych superkomputerów. Ponadto większość procesów w mózgu odpowiada przetwarzaniu procesów współbieżnych w czasie rzeczywistym - co zbliża prawdziwy model działania mózgu do superkomputera kwantowego.  Nie zdajemy sobie z tego sprawy , ale w szczególnych przypadkach nawet pojedynczy foton który wpadnie do naszego oka potrafi wywołać bodziec wzrokowy - pomimo iż człowiek ma dużo gorszy wzrok od wielu zwierząt. Oszacowanie rzeczywistego wykorzystania komórek mózgu na kilka procent nie powinno dziwić - zapas 'mocy obliczeniowej' jest ogromny nawet gdy intensywnie przetwarzamy informację wzrokową. Człowiek rozróżnia około 3 milionów odcieni kolorów (głównie zielonego) co oznacza słabszą rozdzielczość niż w standarcie RGB-24 dającym 16 milionów kolorów. 

W istocie więc wszystkie obecnie znane modele neuronu są bardzo daleko idącym uproszczeniem. Ciekawostką jest fakt , że konstruktorzy prostych robotów .najbardziej cenią sobie emulatory neuronów oparte o najzwyczajniejsze pracujące analogowo układy tranzystorowe.Producentem specjalizowanych procesorów neuronowych jest m.in. firma Intel.

Rys. 1 Przykładowa realizacja tranzystorowa (układ typu wzmacniacza różnicowego) pojedynczego neuronu.

Liczba neuronów emulowanych przez taki procesor może sięgać kilkuset tysięcy. Największą trudność stanowi zaprogramowanie i weryfikacja wyników działania tego typu procesora - wymaga to wąsko specjalizowanego oprogramowania , ponadto zjawiska występujące w takim procesorze mogą wykazywać trudny do wyobrażenia stopień komplikacji. W przypadku 'tradycyjnych' procesorów dostępny zestaw assemblerowych rozkazów jest ściśle ograniczony, również możliwość wykonywania kilku czynności (zadań) jednocześnie w czasie rzeczywistym jest z reguły ograniczona do 2..3. W skrajnym przypadku w jednym cyklu rozkazów pojedynczy neuron może wykonywać zadanie odpowiadające całemu podprogramowi zwykłego procesora. Adekwatne więc byłoby porównanie sieci neuronowej do sieci złożonej z milionów 'klasycznych' procesorów. Z drugiej strony w 'zwykłych' obliczeniach numerycznych współczesne komputery nawet te domowe z jednym procesorem są nieporównywalnie szybsze i dokładniejsze w obliczeniach niż człowiek. Zastosowania sztucznych sieci neuronowych mają więc największy sens do zadań wkraczających w obszar sztucznej inteligencji (ang. AI).

Budowa neuronu biologicznego.

Rys. 2. Uproszczony wygląd neuronu
- ciało komórki nazywane somą o średnicy od 5 do 100 mm (10-6 m)
- wypustki (2 rodzaje) otaczające ciało kkomórki :
- wypustki wprowadzające informację do neeuronu, tzw. dendryty
- wypustka wyprowadzająca informację z neeuronu, tzw. akson.

Każdy neuron ma dokładnie jeden akson, który może wysyłać impulsy do wielu innych neuronów. Pojedynczy neuron przyjmuje natomiast pobudzenia od ogromnej liczby neuronów dochodzącej do tysiąca.
Jak już wspomniano , w mózgu człowieka jest około 1010 neuronów, które oddziałują na siebie poprzez około 1015 połączeń. Jeden neuron przekazuje pobudzenie innym neuronom przez złącza nerwowe nazwane synapsami. Synapsy pełnią rolę przekaźników, w wyniku działania których pobudzenie może być wzmocnione lub osłabione. W efekcie do neuronu dochodzą sygnały, z których część wywiera wpływ pobudzający, a część hamujący. Neuron sumuje impulsy pobudzające i hamujące. Jeżeli ich suma algebraiczna przekracza pewną wartość progową, to sygnał na wyjściu neuronu jest przesyłany - poprzez akson do innych neuronów.

Modele sztucznego neuronu

W praktyce więc każdy neuron pobiera sygnały od wszystkich połączonych do swojego wejścia neuronów, przemnaża przez odpowiednie wagi (synaptyczne) i w oparciu o bilans (sumę) wartości hamujących i pobudzających wytwarza lub nie sygnał wyjściowy. W przypadku sztucznego neuronu funkcja która odpowiada za końcowy sygnał może być funkcją liniową lub skokową, która wartościom poniżej pewnego progu przydziela 0, a pozostałym 1. Innymi często używanymi funkcjami są funkcje sigmoidalne, oraz tangensoidalne. Wybór funkcji należy do projektanta sieci - głównym kryterium jest przedział argumentów sygnału pobudzającego. Jeżeli sygnału pobudzający jest binarny(0,1) najczęściej stosowana jest sigmoida , w pozostałych przypadkach o doborze funkcji decyduje zadanie , które sieć ma rozwiązywać.

Rys. 3. Model sztucznego neuronu

Najczęściej wykorzystywane funkcje aktywacji neuronu to m.in.:

Sztuczna sieć neuronowa.

Podstawową jednostką budowy biologicznego układu nerwowego jest neuron. Neurony te są połączone ze sobą, tworząc skomplikowaną strukturę, w której propagują się impulsy elektryczne o częstotliwościach na ogół z dolnego zakresu akustycznego (20-100 Hz) . Biologiczna komórka nerwowa składa się z jądra, wielu dendrytów, których celem jest pobieranie impulsów z innych neuronów i jednego aksonu, wyprowadzającego impulsy na zewnątrz.
Sztuczne neurony są raczej przybliżonymi emulatorami oryginalnych neuronów, niż ich dokładnymi funkcjonalnymi odpowiednikami,, natomiast sieć zbudowana z takich emulatorów może zupełnie nieźle radzić sobie z zadaniami wykonywanymi przez biologiczne oryginały.
Jeżeli potraktujemy neuron jako przetwornik, to będzie to "czarna skrzynka" który pobiera informacje ze wszystkich swoich wejść i na ich podstawie emituje sygnał wyjściowy. W biologicznych układach nerwowych charakterystyka połączeń między neuronami jest zależna dodatkowo od wielu nie do końca jeszcze poznanych czynników, m.in od hormonów czy zwykłej równowagi jonowej elektrolitów. Z tego powodu większość zjawisk w sieciach biologicznych (np..EEG) jest słabo powtarzalna w badaniach.. W modelu sztucznego neuronu, każdemu połączeniu między neuronami przypisuje się wagę , o 'sztywnej" stabilności numerycznej - daje to całkowitą powtarzalność działania. Dwie sztuczne sieci neuronowe o jednakowej architekturze i jednakowych macierzach wag (np. skopiowanych po procesie uczenia) będą dawały identyczne odpowiedzi na sygnały wejściowe.

Architektura sieci.

W przypadku sztucznych sieci najczęściej stosuje się sieci warstwowe (perceptrony) - neurony pogrupowane są w warstwy. Wejście każdego neuronu w warstwie jest połączone z wyjściami wszystkich neuronów z warstwy poprzedniej. Z reguły ilość wejść powinna odpowiadać ilości neuronów (== ilości wyjść gdyż neuron ma tylko 1 wyjście) warstwy poprzedniej. Przyjęto warstwę pobierającą sygnał określać jako warstwę wejściową , ostatnią , z której otrzymujemy odpowiedź sieci, wyjściową, a wszystkie pomiędzy nimi umownie nazywane są warstwami ukrytymi. W praktyce wystarczająca jest jedna warstwa ukryta. - doborowi podlega tylko ilość neuronów w tej warstwie - zwiększanie (do pewnego progu) może spowodować zwiększenie efektywności sieci. Oprócz sieci warstwowych jednokierunkowych stosowane są sieci rekurencyjne - ze sprzężeniem zwrotnym między warstwą wyjściową a warstwą wejściową. Sygnały wejściowe w takiej sieci zależą zarówno od aktualnego stanu wejścia jak i od sygnałów wyjściowych w poprzednim cyklu. Do bardzo specjalizowanych zadań stosowane są sieci o połączeniach specjalnych bez grupowania w warstwy.- neurony posiadają połączenia np. tylko z najbliższymi sąsiadami -> zobacz projekt CAM-Brain.

Praktyczny mini-projekt OCR

Projekt i test sieci neuronowej realizującej rozpoznawanie znaków można wykonać korzystając z któregoś dostępnego w Internecie emulatora. Dużą popularnością cieszą się m.in. takie pakiety jak NeuroSolutions , easyNN czy JavaNNs.
Do potrzeb artykułu skorzystałem z programu NeuroSolutions ver.4,13 ,pobranej z Internetu , która została również zamieszczona na CD-romie bieżącego numeru Software,

Najbardziej popularne w zastosowaniach do analizy  obrazów są sieci wielowarstwowe ze sprzężeniem zwrotnym nazywane również Madaline (od Multi-layer) lub perceptronem wielowarstwowym. 

Rys. 7. Schemat poglądowy sieci neuronowej wielowarstwowej użytej do projektu.

W opisywanym projekcie dysponujemy wzorcami znaków ASCII w postaci matryc pikselowych o rozmiarach 8x8 . Pojedynczy wzorzec znaku to kwadrat o boku 8 pikseli. Dla uzyskania dobrej czytelności przykładu  wzorce zostały przetworzone do postaci tekstowej. '1' oznacza tło , zaś '0' widoczny punkt matrycy w konwencji stosowanej w programie NeroSolutions. Wejście każdego neuronu warstwy wejściowej jest połączone z binarnymi (0,1) danymi obrazu 8x8 pikseli na wejściu. - każdy neuron połączony jest więc z pojedynczym pikslem obrazu wejściowego. Ilość neuronów warstwy wejściowej odpowiada ilości piksli matrycy znaku - w tym przypadku 64. Ilość warstw warstwy ukrytej rozsądnie jest w tym przypadku ustalić na 1 , ilość neuronów w warstwie ukrytej też nie powinna być zbyt wygórowana 15 do 25, można ją ustalić doświadczalnie. Ilość neuronów warstwy ukrytej jest identyczna z  ilością matryc znakowych. Dla zakresu od '!' do 'Z' będzie to 58. Po podaniu na wejście danych pojedynczej matrycy znaku ,obliczane są wartości wyjściowe na wszystkich neuronach warstwy wyjściowej i błąd w stosunku do wartości oczekiwanej. Teoretycznie tylko jeden neuron wyjściowy powinien być w pełni aktywny - reprezentujący znak na wejściu. Błąd wartości wyjściowych w stosunku do wartości oczekiwanej (0 lub 1) na poszczególnych neuronach jest propagowany w odwrotnej kolejności - od warstwy wyjściowej do wejściowej. Następuje korekcja wartości wag neuronów w poszczególnych warstwach. Proces przetworzenia całego ciągu uczącego - w tym przypadku matryc 58 znaków nazywa się epoką. Istotne dla procesu uczenia i wyników końcowych są wartości współczynników , przez które będą przemnażane wartości błędów w procesie propagacji wstecznej. W przypadku projektu NeroSolutions używany jest tzw. momentum , jego wartość przyjmowana jest w zakresie 0.5 -1. Możliwa jest również zmiana stromości krzywej funkcji aktywacji neuronu. 

Budowa prototypowej sieci rozpoznającej znaki Ascii od '!' do 'Z' z matrycy 8x8 pikseli

1. Uruchamiamy program NeroSolutions.
2. Uaktywniamy dodatkowe belki narzędziowe z menu Tools->Customize
Zalecam zdjęcie ptaszka z opcji 'Cool look' i 'Large Buttons' aby zwiększyć użyteczną powierzchnię ekranu projektowego. Z belek narzędziowych będziemy potrzebowali Dialog , Input i Probe components.
3. Z Menu Tools uruchamiamy program narzędziowy NeuralBuilder który zautomatyzuje kreację projektu sieci neuronowej.


Pierwszy ekran daje nam zaznaczony domyślny typ sieci neuronowej jako "multilayer perceptron" który jest najwłaściwszy do zadania rozpoznawania wzorców , przechodzimy więc do następnego etapu klawiszem ">>".

Z następnego ekranu wybieramy do projektu przygotowany uprzednio plik z danymi wzorców (klawisz 'browse") - w najprostszej postaci jest to zwykły plik tekstowy o rozszerzeniu *.asc , gdzie aktywne piksele oznaczane są jako '0' zaś tło w tej konwencji to '1'. Dane poszczególnych pikseli rozdzielone są spacjami , zaś koniec linii wyznacza kombinacja powrót karetki/nowa linia (\r\n). Zalecany typ nagłówka w przypadku matrycy 8x8 to 8 kolumn np. x0 , x1 ...x7. Jest to dodatkowa linia - gdyby jej było brak w pliku źródłowym , program doda nagłówek domyślny. Pola 'prediction' i GA nie będą używane - nie zamierzamy korzystać z algorytmów genetycznych.

Podobnie jest z nagłówkiem w pliku danych wyjściowych. Przykładowy plik wejściowy dołączony do artykułu to ega8x8.asc.Z następnego ekranu (Training Data) przechodzimy do następnego etapu klawiszem ">>" bez żadnych zmian (nie zamierzamy używać algorytmów genetycznych).
Na ekranie "Desired Response" analogicznie pobieramy plik ega8x8ou.asc z wartościami oczekiwanej odpowiedzi sieci (0 lub 1) na poszczególne matryce znaków na wejściu.

Przez następny ekran "Cross Val. & Test Data" też przechodzimy dalej (klawisz ">>") bez modyfikacji. Przedwczesne zakończenie cyklu uczenia w przypadku błędnego projektu może utrudnić lokalizację błędu.


.Kolejny ekran "Multilayer Perceptron" ma tylko 1 opcję - ilość warstw ukrytych, której też nie zzmieniamy - domyślnie 1 warstwa ukryta.



Na kolejnym ekranie "Hidden Layer #1" (warstwa ukryta) wykonujemy korektę upraszczającą (skracającą) etap testowy - zmniejszany liczbę neuronów w warstwie ukrytej do 15..20 a także pole rodzaju funkcji "transfer" z TanhAxon na SigmoidAxon - argumenty matrycy wejściowej to wartości '0' i '1' a nie '-1' i '1' jak w przypadku TanhAxon. 


Następny ekran "Output Layer" (warstwa wyjściowa) ekran ma już ustawione wszystkie wartości domyślne, których nie ma potrzeby modyfikować. 

Na przedostatnim ekranie "Supervised Learning Control" jest kilka opcji , które mają istotny
wpływ na jakość wyników osiąganych przez sieć , należy więc brać pod uwagę możliwość cofnięcia do tego ekranu w przypadku błędnych lub niewystarczających efektów.
Opcję "Weight update" dobrze jest ustawić na "On-line" aby łatwiej zaobserwować ewentualne nieregularności w procesie uczenia.Jeżeli oczekujemy że globalnie dobre efekty uczenia są możliwe dopiero po dużej (1000-1500) ilości epok
należy zdjąć opcję "MSE" terminacji procesu jak i wpisać odpowiednią ilość epok (Maximum epochs). Przed zdjęciem "MSE" można zmniejszyć próg tolerancji obliczeń w procesie uczenia (Threshold) np. do 0.005 jak w załączonym przykładzie - przyśpieszy to proces dochodzenia do dobrych wyników.


Na ostatnim etapie "Probe Configuration" wybieramy najlepszą konfigurację wizualizacji wyników.
W naszym przypadku najlepsze wizualne porównanie da nam opcja "bar chart" (wykres słupkowy) dla danych oczekiwanych (Desired) i wyjściowych rzeczywistych (output). Dane wejściowe (matryca pikselowa 8x8) rozsądnie jest przedstawić jako powiększoną bitmapę.
Klawisz "build" konstruuje sieć neuronową którą można uruchamiać , modyfikować i testować pod kontrolą programu NeuroSolutions. 

Komunikaty błędów podczas budowania sieci rozsądnie jest zanotować - nie wszystkie parametry są ustalane prawidłowo w trybie półautomatycznym.

W konkretnym przypadku konieczna będzie 'ręczna' korekta ilości kolumn i wierszy przypisanych (8 wierszy x 8 kolumn) do wejściowych matryc znaków - domyślna ilość kolumn to 1 - należy zmienić na 8 gdyż matryca znaku wejściowego ma rozmiar 8 wierszy na 8 kolumn. W tym celu należy kliknąć na symbolu Aksonu wejściowego i wywołać prawym klawiszem myszy menu z pozycją 'properties' - następnie ją wybrać.


Również pełna i wygodna wizualizacja modelu sieci wymaga ręcznego ustawienia niektórych parametrów okien "probe". Po zakończonym procesie budowania projektu - jego schemat blokowy pokazuje się na roboczej powierzchni ekranu - należy zaznaczyć opcję "Auto-Window"

Roboczy plik zawierający projekt sieci (typu NeuroSolutions breadBoard *.nsb) rozsądnie jest zapisać jak i sporządzać jego kopie zapasowe przed kolejnymi modyfikacjami. Do gotowego projektu dobrze jest też dodać przycisk sprzężony z makro pozwalającym na pracę krokową. W celu dostawienia takiego przycisku do projektu należy kliknąć na symbol przycisku na belce z narzędziami (obok przycisku tekstowego "ab"). Jeżeli po przeciągnięciu myszą nad oknem projektu kursor zmieni się w symbol stempla , opcja jest aktywna i wystarczy kliknąć w odpowiednim miejscu aby postawić przycisk. Aby zmienić domyślny napis "button" na właściwy , wchodzimy w tryb edycji napisu przez dwóklik myszą. Następnie należy po uaktywnieniu przycisku prawym klawiszem skojarzyć go z odpowiednim makrem (stepExemplar z podfolderu ..macro) , wybierając odpowiednią opcję z tabliczki 'properties'.



Po skompletowaniu odpowiednich opcji wizualizacyjnych możemy wystartować projekt zielonym przyciskiem typu 'strzałka' . Najpierw jednak powinniśmy zapisać nasz projekt do pliku. W załączonym przykładzie nadano mu nazwę OcrSamp4 (rozszerzenie *.nsb).

W każdej chwili możliwe jest zatrzymanie (klawisz "||" czerwone") na chwilę proces nauczania w celu  sprawdzenia prawidłowości i dokładności rozpoznawania znaków przez sieć w trybie pracy krokowej. Rozsądnie jest wykonywać takie sprawdzenie po przebiegu większej ilości epok (np. 100..200). Może to trwać kilka - kilkanaście minut w zależności od prędkości komputera i złożoności (ilość warstw i neuronów) testowanej sieci. Na wykresie "Active Cost" sygnał o wystarczającym poduczeniu sieci będzie widoczny w postaci spadku "kosztu" poniżej wartości 0.003..0.002.

Kolory słupków dla sygnałów - oczekiwanego i rzeczywistego na wyjściu sieci są jednakowe, test poprawności wyników jest więc łatwy. Na powyższym zdjęciu ekranu widać .że jakość wyników naszej sieci jest dobra już po 700 epokach nauczania/.Niebieski słupek reprezentujący odpowiedź sieci na pobudzenie w postaci matrycy pikselowej cyfry '8' zajmuje całą szerokość wykresu - jest to wartość bliska 1. Wartości odpowiedzi rzędu 0.9-0.99 dla matrycy wzorcowej dają gwarancję poprawnej (>0.5) odpowiedzi również dla matrycy zniekształconej lub zaszumionej. Jeżeli wyniki działania sieci są już zadowalające - można wyeksportować nasz projekt w postaci bibliotecznego pliku DLL który można dołączyć jako komponent innej , szerszej aplikacji .napisanej w VisualC czy VisualNET. Aby opcja ta była dostępna - konieczne jest wykupienie licencji na program NeuroSolutions i pełna jego aktywacja. Przykładowy projekt opisany powyżej - do pobrania w postaci ZIP: ocrsamp4 lub samorozpakowującego się EXE: ocrsampE

Podsumowanie

Na rynku oprogramowania dostępnych jest obecnie wiele pakietów pozwaląjących na szybkie i wygodne zaprojektowanie i przetestowanie sieci neuronowej wykonującej konkretne zadanie. Sieci neuronowe potrafią przetwarzać niemal każdą nadającą się do obróbki informację, cechuje je szczególnie duża efektywność tam , gdzie wystarczającym rozwiązaniem problemu jest nawet wartość przybliżona czyli rozmyta. W praktyce najwyższą efektywność osiąga się stosując techniki hybrydowe - połączenie tradycyjnych metod obliczeniowych , statystyki (korelacje) i tak popularnych ostatnio sieci neuronowych. Polecam zapoznanie się z przykładami "demo" dołączonymi do pakietu NeuroSolutions - można wśród nich znaleźć m.in "Principial Component Analysis Hybrid Network" służący do analizy pisma odręcznego (kody pocztowe).

Autor: Jarosław Sadło

Bibliografia , przydatne linki AI

linki:

NeuroSolutions   easyNN   bogaty zbiór linków OCR   CAM-Brain

Bibliografia:

  1. "Wstęp do teorii obliczeń neuronowych"
    John Hertz, Anders Krogh, Richard G. Palmer
    Wydawnictwa Naukowo-Techniczne 1995 ;
  2. "Sieci neuronowe w praktyce"
    Timothy Masters
    Wydawnictwa Naukowo-Techniczne 1996
  3. "Sieci neuronowe w ujęciu algorytmicznym"
    Stanisław Osowski
    Wydawnictwa Naukowo-Techniczne 1996
  4. "Sztuczne sieci neuronowe"
    J. Żurada, M.Barski, W.Jędruch
    Wydawnictwo Naukowe PWN 1996
1