Konfiguracja sprzętu i oprogramowania

Jak programować sieci neuronowe. Dostrajanie, stwórz sieć neuronową


Wiele terminów w sieciach neuronowych jest związanych z biologią, więc zacznijmy od początku:

Mózg to złożona rzecz, ale można go również podzielić na kilka głównych części i operacji:

Czynnikiem sprawczym może być wewnętrzny(na przykład obraz lub pomysł):

Przyjrzyjmy się teraz podstawowym i uproszczonym Części mózg:

Mózg jest jak sieć kablowa.

Neuron- główna jednostka obliczeniowa w mózgu, odbiera i przetwarza sygnały chemiczne innych neuronów i, w zależności od wielu czynników, albo nic nie robi, albo generuje impuls elektryczny lub potencjał działania, który następnie wysyła sygnały do ​​sąsiednich neuronów przez synapsy związane z neurony:

Sny, wspomnienia, ruchy samoregulujące, odruchy, a właściwie wszystko, co myślisz lub robisz - wszystko dzieje się dzięki temu procesowi: miliony, a nawet miliardy neuronów pracują na różnych poziomach i tworzą połączenia, które tworzą różne równoległe podsystemy i reprezentują biologiczne sieć neuronowa. Internet.

Oczywiście to wszystko uproszczenia i uogólnienia, ale dzięki nim możemy opisać proste
sieć neuronowa:

I opisz to sformalizowane za pomocą wykresu:

Wymagane jest tutaj pewne wyjaśnienie. Koła to neurony, a linie to połączenia między nimi,
i aby nie komplikować na tym etapie, połączenia wzajemne reprezentują bezpośredni przepływ informacji od lewej do prawej. Pierwszy neuron w ten moment aktywny i podświetlony na szaro. Przypisaliśmy mu również numer (1 jeśli działa, 0 jeśli nie). Pokaż liczby między neuronami waga znajomości.

Powyższe wykresy pokazują czas sieci, dla dokładniejszego wyświetlenia należy go podzielić na przedziały czasowe:

Aby stworzyć własną sieć neuronową, musisz zrozumieć, jak wagi wpływają na neurony i jak neurony się uczą. Jako przykład weźmy królika (królika testowego) i umieśćmy go w warunkach klasycznego eksperymentu.

Kiedy kieruje się na nie bezpieczny strumień powietrza, króliki, podobnie jak ludzie, mrugają:

Ten model zachowania można narysować za pomocą wykresów:

Podobnie jak na poprzednim schemacie, te wykresy pokazują tylko moment, w którym królik czuje oddech, a my w ten sposób kodować zaciągnięcie jako wartość logiczna. Dodatkowo obliczamy, czy drugi neuron odpala na podstawie wartości wagi. Jeśli jest równy 1, neuron czuciowy odpala, mrugamy; jeśli waga jest mniejsza niż 1, nie mrugamy: drugi neuron limit- 1.

Wprowadźmy jeszcze jeden element - bezpieczny sygnał dźwiękowy:

Możemy modelować zainteresowanie królików w następujący sposób:

Główna różnica polega na tym, że teraz waga wynosi zero, więc nie dostaliśmy mrugającego królika, cóż, przynajmniej jeszcze nie. Teraz nauczymy królika mrugać na komendę, mieszając
drażniące (pip i oddech):

Ważne jest, aby te zdarzenia miały miejsce w różnym czasie era, na wykresach będzie to wyglądać tak:

Sam dźwięk nic nie robi, ale przepływ powietrza nadal powoduje, że królik mruga, a my pokazujemy to poprzez ciężarki razy bodźce (na czerwono).

Edukacja złożone zachowanie można uprościć jako stopniową zmianę masy między połączonymi neuronami w czasie.

Aby wytresować królika, powtórz kroki:

W przypadku pierwszych trzech prób diagramy będą wyglądać tak:

Należy pamiętać, że waga bodźca dźwiękowego wzrasta po każdym powtórzeniu (podświetlona na czerwono), ta wartość jest teraz dowolna – wybraliśmy 0,30, ale liczba może być dowolna, nawet ujemna. Po trzecim powtórzeniu nie zauważysz zmiany w zachowaniu królika, ale po czwartym powtórzeniu stanie się coś niesamowitego - zachowanie się zmieni.

Usunęliśmy ekspozycję na powietrze, ale królik nadal mruga, gdy słyszy dźwięk! Nasz ostatni schemat może wyjaśnić to zachowanie:

Nauczyliśmy królika, aby reagował na dźwięk mruganiem.

W prawdziwym eksperymencie tego rodzaju, aby osiągnąć wynik, może być wymagane więcej niż 60 powtórzeń.

Teraz opuścimy biologiczny świat mózgu i królików i spróbujemy przystosować wszystko, co
nauczył się tworzyć sztuczną sieć neuronową. Najpierw spróbujmy wykonać proste zadanie.

Załóżmy, że mamy maszynę z czterema przyciskami, która dozuje jedzenie po naciśnięciu odpowiedniego.
przyciski (no lub energia, jeśli jesteś robotem). Zadanie polega na ustaleniu, który przycisk daje nagrodę:

Możemy zobrazować (schematycznie), co robi przycisk po naciśnięciu w ten sposób:

Lepiej rozwiązać taki problem jako całość, więc spójrzmy na wszystkie możliwe wyniki, w tym poprawny:

Kliknij trzeci przycisk, aby otrzymać obiad.

Aby odtworzyć sieć neuronową w kodzie, najpierw musimy stworzyć model lub wykres, do którego można zmapować sieć. Oto jeden odpowiedni wykres do tego zadania, poza tym dobrze pokazuje jego biologiczny odpowiednik:

Ta sieć neuronowa po prostu otrzymuje dane wejściowe - w tym przypadku będzie to percepcja, który przycisk został naciśnięty. Następnie sieć zastępuje informacje wejściowe wagami i wyciąga wnioski na podstawie dodania warstwy. Brzmi to trochę dezorientująco, ale zobaczmy, jak przycisk jest reprezentowany w naszym modelu:

Zauważ, że wszystkie wagi wynoszą 0, więc sieć neuronowa, podobnie jak dziecko, jest całkowicie pusta, ale w pełni połączona.

W ten sposób dopasowujemy zdarzenie zewnętrzne do warstwy wejściowej sieci neuronowej i obliczamy wartość na jego wyjściu. Może się to pokrywać z rzeczywistością lub nie, ale na razie zignorujemy to i zaczniemy opisywać zadanie w sposób zrozumiały dla komputera. Zacznijmy od wpisania wag (będziemy używać JavaScript):

Wejścia Var = ; var wagi = ; // Dla wygody te wektory można nazwać
Kolejnym krokiem jest stworzenie funkcji, która zbiera wartości wejściowe i wagi oraz oblicza wartość wyjściową:

Function EvaluationNeuralNetwork(inputVector, weightVector)( var wynik = 0; inputVector.forEach(function(inputValue, weightIndex) ( layerValue = inputValue*weightVector; wynik += layerValue; )); return (result.toFixed(2)); ) / / Może wydawać się skomplikowane, ale wystarczy dopasować pary waga/dane wejściowe i dodać wynik
Zgodnie z oczekiwaniami, jeśli uruchomimy ten kod, otrzymamy taki sam wynik, jak w naszym modelu lub wykresie…

EvaluateNeuralNetwork(wejścia, wagi); // 0,00
Przykład na żywo: Sieć neuronowa 001.

Kolejnym krokiem w ulepszaniu naszej sieci neuronowej będzie sposób na sprawdzenie własnego wyjścia lub wartości wynikowych w porównaniu do rzeczywistej sytuacji,
najpierw zakodujmy tę konkretną rzeczywistość w zmiennej:

Aby wykryć niespójności (i ile), dodamy funkcję błędu:

Błąd = Rzeczywistość - Wyjście sieci neuronowej
Dzięki niemu możemy ocenić wydajność naszej sieci neuronowej:

Ale co ważniejsze – co z sytuacjami, w których rzeczywistość daje pozytywne rezultaty?

Teraz wiemy, że nasz model sieci neuronowej nie działa (i wiemy jak), świetnie! I to jest świetne, ponieważ teraz możemy wykorzystać funkcję błędu do kontrolowania naszego treningu. Ale to wszystko ma sens, jeśli przedefiniujemy funkcję błędu w następujący sposób:

błąd= Pożądane wyjście- Wyjście sieci neuronowej
Subtelna, ale ważna rozbieżność, po cichu wskazująca, że ​​będziemy…
wykorzystaj wcześniejsze wyniki do porównania z przyszłymi działaniami
(i do nauki, jak zobaczymy później). Istnieje również w prawdziwe życie, kompletny
powtarzających się wzorców, więc może stać się strategią ewolucyjną (no cóż,
w większości przypadków).

var wejście = ; var wagi = ; vardesiredResult = 1;
I nowa funkcja:

Function assessmentNeuralNetError(desired,actual) ( return (pożądane - rzeczywiste); ) // Po przeanalizowaniu zarówno sieci, jak i błędu otrzymamy: // "Wyjście sieci neuronowej: 0,00 Błąd: 1"
Przykład na żywo: Sieć neuronowa 002.

Podsumujmy. Zaczęliśmy od zadania, wykonaliśmy prosty model w postaci biologicznej sieci neuronowej i otrzymaliśmy sposób na zmierzenie jej wydajności w porównaniu z rzeczywistością lub pożądanym rezultatem. Teraz musimy znaleźć sposób na naprawienie niespójności – proces, który zarówno dla komputerów, jak i dla ludzi można uznać za uczenie się.

Jak trenować sieć neuronową?

Podstawą treningu zarówno biologicznych, jak i sztucznych sieci neuronowych jest powtarzanie
I algorytmy uczenia się, więc będziemy z nimi pracować osobno. Zacznijmy
algorytmy uczenia się.

W naturze algorytmy uczenia są rozumiane jako zmiany fizyczne lub chemiczne
charakterystyka neuronów po eksperymentach:

Dramatyczna ilustracja tego, jak dwa neurony zmieniają się w czasie w kodzie i w naszym modelu „algorytmu uczenia się”, oznacza, że ​​po prostu zmienimy rzeczy z biegiem czasu, aby nasze życie stało się łatwiejsze. Dodajmy więc zmienną, aby wskazać, o ile łatwiejsze jest życie:

Współczynnik uczenia się Var = 0,20; // Im większa wartość, tym szybszy będzie proces uczenia :)
A co to zmieni?

Zmieni to wagi (tak jak królik!), zwłaszcza wagę wyniku, który chcemy uzyskać:

Jak zakodować taki algorytm to twój wybór, dla uproszczenia dodaję do wagi współczynnik uczenia, tutaj jest on w postaci funkcji:

Funkcja learn(inputVector, weightVector) ( weightVector.forEach(function(weight, index, weights) ( if (inputVector > 0) ( wagi = waga + learningRate; ) )); )
W przypadku użycia ta funkcja treningowa po prostu doda nasz wskaźnik uczenia się do wektora wagi aktywny neuron, przed i po kole treningowym (lub powtórce), wyniki będą następujące:

// Oryginalny wektor wagi: // Wyjście sieci neuronowej: 0,00 Błąd: 1 nauka (wejście, wagi); // Nowy wektor wagi: // Wyjście sieci neuronowej: 0,20 Błąd: 0,8 // Jeśli nie jest to oczywiste, wyjście sieci neuronowej jest bliskie 1 (wyjście kurczaka) - o co nam chodziło, więc możemy wnioskować, że idą we właściwym kierunku
Przykład na żywo: Sieć neuronowa 003.

No dobrze, teraz, gdy idziemy we właściwym kierunku, ostatnim elementem tej układanki będzie implementacja powtórzenia.

To nie jest takie trudne, w naturze po prostu robimy to samo w kółko, ale w kodzie po prostu określamy liczbę powtórzeń:

Próby Var = 6;
A wprowadzenie funkcji liczby powtórzeń do naszej szkoleniowej sieci neuronowej będzie wyglądało tak:

Pociąg funkcji (próby) ( dla (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }
A oto nasz raport końcowy:

Neuronowe wyjście netto: 0,00 Błąd: 1,00 Wektor ważenia: Neuronowe Wyjście netto: 0,20 Błąd: 0,80 Wektor ważenia: Neuronowe Wyjście netto: 0,40 Błąd: 0,60 Wektor ważenia: Neuronowe wyjście netto: 0,60 Błąd: 0,40 Wektor ważenia: Neuronowe wyjście netto: 0,80 Błąd : 0,20 Wektor ważenia: Sieć neuronowa Wyjście netto: 1,00 Błąd: 0,00 Wektor ważenia: // Obiad z kurczakiem !
Przykład na żywo: Sieć neuronowa 004.

Teraz mamy wektor wagowy, który da tylko jeden wynik (kurczak na obiad), jeśli wektor wejściowy będzie zgodny z rzeczywistością (naciśnięcie trzeciego przycisku).

Więc jaka jest fajna rzecz, którą właśnie zrobiliśmy?

W tym konkretnym przypadku nasza sieć neuronowa (po treningu) może rozpoznać dane wejściowe i powiedzieć, co doprowadzi do pożądanego rezultatu (nadal będziemy musieli zaprogramować konkretne sytuacje):

Ponadto jest to skalowalny model, zabawka i narzędzie do nauki z Tobą. Udało nam się nauczyć czegoś nowego o uczeniu maszynowym, sieciach neuronowych i sztucznej inteligencji.

Uwaga dla użytkowników:

  • Mechanizm przechowywania wyuczonych wag nie jest przewidziany, więc ta sieć neuronowa zapomni o wszystkim, co wie. Podczas aktualizacji lub ponownego uruchamiania kodu, aby sieć w pełni się wytrenowała, potrzebujesz co najmniej sześciu udanych powtórzeń, jeśli uważasz, że osoba lub maszyna będzie naciskać przyciski w losowej kolejności… To zajmie trochę czasu.
  • Biologiczne sieci do uczenia się ważnych rzeczy mają współczynnik uczenia się równy 1, więc potrzebne będzie tylko jedno udane powtórzenie.
  • Istnieje algorytm uczenia się, który jest bardzo podobny do neuronów biologicznych, ma chwytliwą nazwę: reguła widroffa-hoffa, lub szkolenie widroff-hoff.
  • Progi neuronowe (1 w naszym przykładzie) i efekty przekwalifikowania (kiedy w dużych ilościach powtórzenia powodują, że więcej niż 1) nie są brane pod uwagę, ale są one bardzo ważne z natury i są odpowiedzialne za duże i złożone bloki reakcji behawioralnych. Podobnie wagi ujemne.

Notatki i bibliografia do dalszej lektury

Starałem się unikać matematyki i ścisłych terminów, ale jeśli się zastanawiasz, zbudowaliśmy perceptron, który jest zdefiniowany jako nadzorowany algorytm uczenia (nadzorowane uczenie się) podwójnych klasyfikatorów - ciężkie rzeczy.

Biologiczna struktura mózgu nie jest łatwym tematem, częściowo ze względu na nieścisłości, częściowo ze względu na jego złożoność. Lepiej zacząć od Neuroscience (Purves) i Cognitive Neuroscience (Gazzaniga). Zmodyfikowałem i zaadaptowałem przykład królika z Gateway to Memory (Gluck), który jest również świetnym przewodnikiem po świecie grafów.

Kolejny niesamowity zasób, Wprowadzenie do sieci neuronowych (Gurney), jest świetnym rozwiązaniem dla wszystkich Twoich potrzeb związanych ze sztuczną inteligencją.

A teraz w Pythonie! Podziękowania dla Ilyi Andshmidt za udostępnienie wersji Pythona:

Dane wejściowe = wagi = pożądany_wynik = 1 współczynnik_nauczenia = 0,2 prób = 6 def ocena_sieć_neuralna(tablica_wejściowa, tablica_waga): wynik = 0 dla i in range(len(tablica_wejściowa)): wartość_warstwy = tablica_wejściowa[i] * tablica_wagi[i] wynik += wartość_warstwy print("evaluate_neural_network: " + str(result)) print("wagi: " + str(wagi)) return wynik def ocenia_error(pożądane, rzeczywiste): błąd = pożądany - aktualny print("ewaluacja_error: " + str(błąd) ) return error def learn(input_array, weight_array): print("learning...") for i in range(len(input_array)): if input_array[i] > 0: weight_array[i] += learning_rate def train(trials ): for i in range(trials): neural_net_result = evaluation_neural_network(wejścia, wagi) learn(wejścia, wagi) train(trials)
A teraz w GO! Podziękowania dla Kierana Mahera za tę wersję.

Główny import pakietu ("fmt" "math") func main() ( fmt.Println("Tworzenie danych wejściowych i wag...") input:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0.00, 0.00, 0.00) pożądana:= 1.00 współczynnik nauki:= 0.20 prób:= 6 train(próby, dane wejściowe, wagi, pożądane, współczynnik nauki) ) func train(trials int, inputy float64, weights float64, required float64, learningRate float64) ( dla i:= 1;i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print("\nError: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print("\n\n") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0.00 ( wektor wagi = wektor wagi + współczynnik nauki ) ) zwróć wektor wagi ) func Evaluation(InputVector float64, weightVector float64) float64 ( wynik:= 0.00 dla indeksu, wartość wejściowa:= zakres inputVector ( layerValue:= inputValue * weightVector wynik = wynik + layerValue ) zwróć wynik ) func evaluationError(pożądane float64, rzeczywiste float64) float64 (zwróć pożądane - rzeczywiste)

Możesz pomóc i przelać część środków na rozwój serwisu

 

Sztuczna sieć neuronowa to zbiór neuronów, które wchodzą ze sobą w interakcje. Są w stanie odbierać, przetwarzać i tworzyć dane. Trudno to sobie wyobrazić, jak pracę ludzkiego mózgu. Sieć neuronowa w naszym mózgu działa, więc możesz teraz to przeczytać: nasze neurony rozpoznają litery i układają je w słowa.

Sztuczna sieć neuronowa jest jak mózg. Został pierwotnie zaprogramowany, aby uprościć niektóre złożone procesy obliczeniowe. Dziś sieci neuronowe mają znacznie więcej możliwości. Niektóre z nich są na Twoim smartfonie. Inna część już zarejestrowała w swojej bazie danych, że otworzyłeś ten artykuł. Jak to wszystko się dzieje i dlaczego, czytaj dalej.

Jak to się wszystko zaczęło

Ludzie naprawdę chcieli zrozumieć, skąd bierze się umysł danej osoby i jak działa mózg. W połowie ubiegłego wieku zrozumiał to kanadyjski neuropsycholog Donald Hebb. Hebb zbadał wzajemne oddziaływanie neuronów, zbadał zasadę łączenia ich w grupy (naukowo - zespoły) i zaproponował pierwszy w nauce algorytm do trenowania sieci neuronowych.

Kilka lat później grupa amerykańskich naukowców stworzyła model sztucznej sieci neuronowej, która potrafiła odróżnić kwadratowe kształty od innych.

Jak działa sieć neuronowa?

Naukowcy odkryli, że sieć neuronowa to zbiór warstw neuronów, z których każda odpowiada za rozpoznanie określonego kryterium: kształtu, koloru, rozmiaru, tekstury, dźwięku, objętości itp. Rok po roku, w wyniku milionów eksperymenty i tony obliczeń do najprostsza sieć dodawano coraz więcej warstw neuronów. Pracują na zmianę. Na przykład pierwszy określa, czy kwadrat jest kwadratem, czy nie, drugi rozumie, czy kwadrat jest czerwony, czy nie, trzeci oblicza rozmiar kwadratu i tak dalej. Nie kwadraty, nie czerwone i zły rozmiar figury wpadają w nowe grupy neuronów i są przez nie badane.

Czym są sieci neuronowe i do czego służą?

Naukowcy opracowali sieci neuronowe, dzięki którym nauczyli się rozróżniać złożone obrazy, filmy, teksty i mowę. Obecnie istnieje wiele rodzajów sieci neuronowych. Są one klasyfikowane w zależności od architektury - zestawy parametrów danych i wagi tych parametrów, pewien priorytet. Poniżej kilka z nich.

Konwolucyjne sieci neuronowe

Neurony są podzielone na grupy, każda grupa oblicza nadaną jej charakterystykę. W 1993 roku francuski naukowiec Jan LeCun pokazał światu LeNet 1, pierwszą splotową sieć neuronową, która potrafiła szybko i dokładnie rozpoznawać liczby zapisane ręcznie na papierze. Sam zobacz:

Dziś splotowe sieci neuronowe są wykorzystywane głównie do celów multimedialnych: pracują z grafiką, dźwiękiem i wideo.

Rekurencyjne sieci neuronowe

Neurony konsekwentnie zapamiętują informacje i budują dalsze działania w oparciu o te dane. W 1997 roku niemieccy naukowcy zmodyfikowali najprostsze sieci rekurencyjne do sieci z długotrwałą pamięcią krótkotrwałą. Na ich podstawie opracowano następnie sieci z kontrolowanymi neuronami rekurencyjnymi.

Dziś za pomocą takich sieci pisze się i tłumaczy teksty, programuje się boty, które prowadzą sensowne dialogi z osobą, tworzone są kody stron i programy.

Wykorzystanie tego rodzaju sieci neuronowych to możliwość analizowania i generowania danych, kompilowania baz danych, a nawet predykcji.

W 2015 roku SwiftKey wypuścił pierwszą na świecie klawiaturę zasilaną przez sieć neuronową z kontrolowanymi neuronami. Następnie system podawał podpowiedzi w procesie pisania na podstawie ostatnio wprowadzonych słów. W zeszłym roku programiści wyszkolili sieć neuronową, aby uczyła się kontekstu pisanego tekstu, a podpowiedzi stały się znaczące i przydatne:

Połączone sieci neuronowe (konwolucyjne + rekurencyjne)

Takie sieci neuronowe są w stanie zrozumieć, co jest na obrazie i opisać to. I odwrotnie: rysuj obrazki zgodnie z opisem. Najwyraźniejszy przykład zademonstrował Kyle Macdonald, który zabrał sieć neuronową na spacer po Amsterdamie. Sieć natychmiast ustaliła, co jest przed nią. I prawie zawsze dokładnie:

Sieci neuronowe nieustannie się uczą. Poprzez ten proces:

1. Skype wprowadził możliwość tłumaczenia symultanicznego na 10 języków. Wśród których na chwilę pojawiają się rosyjski i japoński – jeden z najtrudniejszych na świecie. Oczywiście jakość tłumaczenia wymaga poważnej poprawy, ale sam fakt, że już teraz możesz komunikować się z kolegami z Japonii po rosyjsku i mieć pewność, że zostaniesz zrozumiany, jest inspirujący.

2. Yandex stworzył dwa algorytmy wyszukiwania oparte na sieciach neuronowych: Palekh i Korolev. Pierwsza z nich pomogła znaleźć najbardziej odpowiednie witryny dla zapytań o niskiej częstotliwości. „Palekh” przestudiował tytuły stron i porównał ich znaczenie ze znaczeniem próśb. Na podstawie Palecha pojawił się Korolow. Algorytm ten ocenia nie tylko tytuł, ale także całą zawartość tekstową strony. Wyszukiwanie staje się coraz dokładniejsze, a właściciele witryn zaczynają inteligentniej podchodzić do treści stron.

3. Koledzy specjalistów SEO z Yandex stworzyli muzyczną sieć neuronową: komponuje poezję i pisze muzykę. Neurogrupa symbolicznie nazywa się Neurona, a mają już swój pierwszy album:

4. Google Inbox używa sieci neuronowych do odpowiadania na wiadomość. Rozwój technologii jest w pełnym rozkwicie, a dziś sieć już studiuje korespondencję i generuje możliwe opcje odpowiedź. Nie możesz tracić czasu na pisanie i nie bać się zapomnieć o ważnej umowie.

5. YouTube wykorzystuje sieci neuronowe do oceniania filmów i zgodnie z dwiema zasadami jednocześnie: jedna sieć neuronowa bada filmy i reakcje na nie, a druga prowadzi badania nad użytkownikami i ich preferencjami. Dlatego rekomendacje YouTube są zawsze aktualne.

6. Facebook aktywnie pracuje nad DeepText AI - programem komunikacyjnym, który rozumie żargon i oczyszcza czaty z nieprzyzwoitego słownictwa.

7. Aplikacje takie jak Prisma i Fabby, zbudowane na sieciach neuronowych, tworzą obrazy i filmy:

Colorize przywraca kolor czarno-białym zdjęciom (niespodzianka babci!).

MakeUp Plus wybiera idealną szminkę dla dziewczyn z prawdziwej gamy prawdziwych marek: Bobbi Brown, Clinique, Lancome i YSL już działają.


8.
Apple i Microsoft stale ulepszają swoje neuronowe Siri i Contana. Na razie wykonują tylko nasze rozkazy, ale w niedalekiej przyszłości zaczną przejmować inicjatywę: dawać rekomendacje i przewidywać nasze pragnienia.

A co jeszcze nas czeka w przyszłości?

Samouczące się sieci neuronowe mogą zastąpić ludzi: zaczną od copywriterów i korektorów. Już teraz roboty tworzą teksty z sensem i bez błędów. I robią to znacznie szybciej niż ludzie. Będą kontynuować pracę z pracownikami call center, wsparcia technicznego, moderatorami i administratorami publiczności w sieciach społecznościowych. Sieci neuronowe już wiesz, jak nauczyć się skryptu i odtworzyć go na głos. A co z innymi obszarami?

Sektor rolny

Sieć neuronowa zostanie zaimplementowana na specjalnym sprzęcie. Kombajny będą autopilotować, skanować rośliny i badać glebę, przesyłając dane do sieci neuronowej. Ona zdecyduje - podlewać, nawozić lub spryskiwać szkodniki. Zamiast kilkudziesięciu pracowników potrzebnych będzie co najwyżej dwóch specjalistów: nadzorczy i techniczny.

Medycyna

Microsoft obecnie aktywnie pracuje nad stworzeniem leku na raka. Naukowcy zajmują się bioprogramowaniem - starają się zdigitalizować proces powstawania i rozwoju nowotworów. Gdy wszystko się ułoży, programiści będą mogli znaleźć sposób na zablokowanie takiego procesu, przez analogię powstanie lek.

Marketing

Marketing jest wysoce spersonalizowany. Już teraz sieci neuronowe mogą określić w ciągu kilku sekund, którego użytkownika, jakie treści i za jaką cenę pokazać. W przyszłości udział marketera w procesie zostanie ograniczony do minimum: sieci neuronowe będą przewidywać zapytania na podstawie danych o zachowaniach użytkowników, skanować rynek i wystawiać najodpowiedniejsze oferty do czasu, gdy dana osoba pomyśli o zakupie.

Handel elektroniczny

E-commerce będzie wdrażany wszędzie. Nie musisz już wchodzić do sklepu internetowego za pomocą linku: jednym kliknięciem możesz kupić wszystko tam, gdzie to widzisz. Na przykład czytasz ten artykuł kilka lat później. Naprawdę podoba Ci się szminka na ekranie z aplikacji MakeUp Plus (patrz wyżej). Klikasz na niego i idziesz prosto do koszyka. Lub obejrzyj film o Najnowszy model Hololens (Mixed Reality Glasses) i złóż zamówienie bezpośrednio z YouTube.

W niemal każdej dziedzinie doceniani będą specjaliści posiadający wiedzę lub przynajmniej zrozumienie budowy sieci neuronowych, uczenia maszynowego i systemów. sztuczna inteligencja. Będziemy istnieć ramię w ramię z robotami. A im więcej o nich wiemy, tym spokojniej będziemy żyć.

PS Zinaida Falls to sieć neuronowa Yandex, która pisze poezję. Oceń pracę, którą napisała maszyna, dowiedziawszy się o Majakowskim (zachowana pisownia i interpunkcja):

« Ten»

ten
tylko
coś
w przyszłości
i moc
ta osoba
czy jest wszystko czy nie?
wszędzie jest krew
rozdać
tyć
chwała w
grunt
z pęknięciem w dziobie

Imponujące, prawda?

Ostatnio coraz częściej mówi się o tzw. sieciach neuronowych, mówią, że niedługo będą aktywnie wykorzystywane w robotyce, inżynierii mechanicznej i wielu innych obszarach ludzkiej działalności, ale algorytmy wyszukiwarek, same Google, już powoli zaczynają z nich korzystać. Czym są te sieci neuronowe, jak działają, jakie są ich zastosowania i jak mogą nam się przydać, o tym wszystkim czytaj dalej.

Czym są sieci neuronowe

Jednym z obszarów są sieci neuronowe badania naukowe w zakresie tworzenia sztucznej inteligencji (AI), która opiera się na chęci naśladowania ludzkiego układu nerwowego. W tym jej (układ nerwowy) zdolność do korygowania błędów i samouczenia się. Wszystko to, choć nieco szorstkie, powinno pozwolić na symulację pracy ludzkiego mózgu.

Biologiczne sieci neuronowe

Ale ta definicja w powyższym akapicie jest czysto techniczna, ale mówiąc językiem biologii, sieć neuronowa to ludzki układ nerwowy, czyli zespół neuronów w naszym mózgu, dzięki któremu myślimy, podejmujemy określone decyzje, postrzegamy otaczający nas świat. nas.

Neuron biologiczny to specjalna komórka składająca się z jądra, ciała i procesów, ponadto ma ścisły związek z tysiącami innych neuronów. Dzięki temu połączeniu impulsy elektrochemiczne są stale przesyłane, wprowadzając całą sieć neuronową w stan podniecenia lub odwrotnie. Na przykład jakieś przyjemne, a zarazem emocjonujące wydarzenie (spotkanie ukochanej osoby, wygrana w konkursie itp.) wygeneruje impuls elektrochemiczny w sieci neuronowej, która znajduje się w naszej głowie, co doprowadzi do jej wzbudzenia. W efekcie sieć neuronowa w naszym mózgu przekaże swoje pobudzenie do innych narządów naszego ciała i doprowadzi do zwiększonego tętna, częstszego mrugania oczami itp.

Na zdjęciu bardzo uproszczony model biologicznej sieci neuronowej mózgu. Widzimy, że neuron składa się z ciała komórki i jądra, z kolei ciało komórki ma wiele rozgałęzionych włókien zwanych dendrytami. Długie dendryty nazywane są aksonami i mają znacznie większą długość niż pokazano na tym rysunku, poprzez aksony odbywa się komunikacja między neuronami, dzięki którym w naszych głowach działa biologiczna sieć neuronowa.

Historia sieci neuronowych

Jaka jest historia rozwoju sieci neuronowych w nauce i technologii? Powstaje wraz z pojawieniem się pierwszych komputerów lub komputerów (komputerów elektronicznych), jak je nazywano w tamtych czasach. Tak więc pod koniec lat 40. pewien Donald Hebb opracował mechanizm sieci neuronowej, który określał zasady uczenia komputerów, tych „protokomputerów”.

Dalsza chronologia wydarzeń przedstawiała się następująco:

  • W 1954 r. pierwszy praktyczne użycie sieci neuronowe w pracy komputerów.
  • W 1958 roku Frank Rosenblatt opracował algorytm rozpoznawania wzorców i matematyczną adnotację do niego.
  • W latach 60. zainteresowanie rozwojem sieci neuronowych nieco osłabło ze względu na słabą moc obliczeniową tamtych czasów.
  • I odżyła ponownie już w latach 80., w tym okresie pojawił się system z mechanizmem sprzężenia zwrotnego, opracowano algorytmy samouczące się.
  • Do 2000 roku moc komputerów wzrosła tak bardzo, że były w stanie realizować najśmielsze marzenia naukowców z przeszłości. W tym czasie pojawiły się programy do rozpoznawania głosu, wizji komputerowej i wiele innych.

Sztuczne sieci neuronowe

Sztuczne sieci neuronowe są powszechnie rozumiane jako: systemy komputerowe posiadają zdolność do samodzielnego uczenia się, stopniowo zwiększając swoją produktywność. Głównymi elementami struktury sieci neuronowej są:

  • Sztuczne neurony, które są elementarnymi, połączonymi ze sobą jednostkami.
  • to połączenie, które służy do wysyłania i odbierania informacji między neuronami.
  • Sygnał to rzeczywista informacja do przesłania.

Zastosowanie sieci neuronowych

Zakres sztucznych sieci neuronowych powiększa się z roku na rok, dziś są one wykorzystywane w takich obszarach jak:

  • Uczenie maszynowe to rodzaj sztucznej inteligencji. Opiera się na szkoleniu AI na przykładzie milionów zadań tego samego typu. W dzisiejszych czasach uczenie maszynowe jest aktywnie wdrażane Wyszukiwarki Google, Yandex, Bing, Baidu. Więc w oparciu o miliony Zapytania, które wszyscy wpisujemy codziennie w Google, ich algorytmy uczą się pokazywać nam najtrafniejsze wyniki, dzięki czemu możemy znaleźć dokładnie to, czego szukamy.
  • W robotyce sieci neuronowe są wykorzystywane do opracowywania licznych algorytmów żelaznych „mózgów” robotów.
  • Architekci systemy komputerowe wykorzystać sieci neuronowe do rozwiązania problemu obliczeń równoległych.
  • Za pomocą sieci neuronowych matematycy mogą rozwiązywać różne złożone problemy matematyczne.

Rodzaje sieci neuronowych

Ogólnie rzecz biorąc, do różnych zadań są używane Różne rodzaje oraz rodzaje sieci neuronowych, wśród których są:

  • konwolucyjne sieci neuronowe,
  • rekurencyjne sieci neuronowe,
  • Sieć neuronowa Hopfielda.

Konwolucyjne sieci neuronowe

Sieci konwolucyjne to jeden z najpopularniejszych typów sztucznych sieci neuronowych. Udowodnili więc swoją skuteczność w rozpoznawaniu wzorców wizualnych (wideo i obrazy), systemach rekomendujących i przetwarzaniu języka.

  • Splotowe sieci neuronowe są wysoce skalowalne i mogą być używane do rozpoznawania wzorców o dowolnej dużej rozdzielczości.
  • Sieci te wykorzystują wolumetryczne trójwymiarowe neurony. W obrębie jednej warstwy neurony połączone są jedynie niewielkim polem, zwanym warstwą receptywną.
  • Neurony sąsiednich warstw są połączone mechanizmem lokalizacji przestrzennej. Pracę wielu takich warstw zapewniają specjalne nieliniowe filtry, które reagują na coraz większą liczbę pikseli.

Rekurencyjne sieci neuronowe

Takie sieci neuronowe nazywane są rekurencyjnymi, których połączenia między neuronami tworzą cykl orientacyjny. Ma następujące cechy:

  • Każde połączenie ma swoją wagę, co również jest priorytetem.
  • Węzły dzielą się na dwa typy, węzły wprowadzające i węzły ukryte.
  • Informacje w rekurencyjnej sieci neuronowej są przekazywane nie tylko w linii prostej, warstwa po warstwie, ale także między samymi neuronami.
  • Ważną cechą wyróżniającą sieć neuronową rekurencyjną jest obecność tak zwanego „obszaru uwagi”, w którym maszynie można nadać pewne fragmenty danych, które wymagają ulepszonego przetwarzania.

W rozpoznawaniu i przetwarzaniu danych tekstowych wykorzystywane są rekurencyjne sieci neuronowe (często bazują na translatorze Google, algorytmie Yandex Palekh, asystent głosowy Apple Siri).

Sieci neuronowe, wideo

I na zakończenie ciekawe wideo o sieciach neuronowych.


Pisząc artykuł, starałem się, aby był jak najbardziej interesujący, użyteczny i wysokiej jakości. za każdy będę wdzięczny opinia oraz konstruktywną krytykę w postaci komentarzy do artykułu. Możesz również napisać swoje życzenie / pytanie / sugestię na moją pocztę [e-mail chroniony] lub na Facebooku, z szacunkiem autor.

Tym razem postanowiłem zbadać sieci neuronowe. Podstawowe umiejętności w tej materii udało mi się zdobyć latem i jesienią 2015 roku. Przez podstawowe umiejętności rozumiem, że potrafię samodzielnie stworzyć od podstaw prostą sieć neuronową. Przykłady można znaleźć w moich repozytoriach GitHub. W tym artykule podam kilka wyjaśnień i udostępnię zasoby, które mogą okazać się przydatne w badaniu.

Krok 1: Neurony i propagacja z wyprzedzeniem

Czym więc jest „sieć neuronowa”? Poczekajmy z tym i zajmijmy się najpierw jednym neuronem.

Neuron jest jak funkcja: przyjmuje wiele danych wejściowych i zwraca jeden.

Poniższy okrąg przedstawia sztuczny neuron. Otrzymuje 5 i zwraca 1. Wejście jest sumą trzech synaps podłączonych do neuronu (trzy strzałki po lewej).

Po lewej stronie obrazu widzimy 2 wartości wejściowe (na zielono) oraz offset (podświetlony na brązowo).

Dane wejściowe mogą być liczbowymi reprezentacjami dwóch różnych właściwości. Na przykład, tworząc filtr antyspamowy, mogą oznaczać więcej niż jedno słowo napisane WIELKIMI LITERAMI i słowo „Viagra”.

Wartości wejściowe są mnożone przez ich tzw. „wagi”, 7 i 3 (podświetlone na niebiesko).

Teraz dodajemy wynikowe wartości z przesunięciem i otrzymujemy liczbę, w naszym przypadku 5 (podświetloną na czerwono). To jest wejście naszego sztucznego neuronu.

Następnie neuron wykonuje jakieś obliczenia i wytwarza wartość wyjściową. Mamy 1, ponieważ zaokrąglona wartość sigmoidy w punkcie 5 wynosi 1 (więcej o tej funkcji później).

Gdyby to był filtr spamu, fakt, że wynik to 1 oznaczałby, że tekst został oznaczony przez neuron jako spam.

Ilustracja sieci neuronowej z Wikipedii.

Jeśli połączysz te neurony, otrzymasz propagującą się do przodu sieć neuronową - proces przechodzi od wejścia do wyjścia, poprzez neurony połączone synapsami, jak na zdjęciu po lewej stronie.

Krok 2. Sigmoid

Po obejrzeniu samouczków Welch Labs warto zapoznać się z czwartym tygodniem kursu uczenia maszynowego Coursera poświęconego sieciom neuronowym, aby pomóc Ci zrozumieć, jak one działają. Kurs zagłębia się w matematykę i jest oparty na Octave, podczas gdy ja preferuję Python. Z tego powodu pominąłem ćwiczenia i zebrałem wszystko niezbędna wiedza z wideo.

Sigmoid po prostu mapuje twoją wartość (na osi poziomej) na segment od 0 do 1.

Pierwszym priorytetem było dla mnie zbadanie esicy, tak jak to się przedstawia w wielu aspektach sieci neuronowych. Wiedziałem już coś o niej od trzeciego tygodnia powyższego kursu, więc obejrzałem stamtąd film.

Ale same filmy nie zaprowadzą Cię daleko. Dla pełnego zrozumienia postanowiłem sam to zakodować. Zacząłem więc pisać implementację algorytmu regresji logistycznej (który wykorzystuje sigmoid).

Zajęło to cały dzień, a wynik raczej nie będzie satysfakcjonujący. Ale to nie ma znaczenia, bo zorientowałem się, jak to wszystko działa. Kod można zobaczyć.

Nie musisz tego robić sam, ponieważ wymaga to specjalnej wiedzy - najważniejsze jest to, że rozumiesz, jak działa esica.

Krok 3 Metoda wstecznej propagacji

Zrozumienie, jak sieć neuronowa działa od wejścia do wyjścia, nie jest takie trudne. O wiele trudniej jest zrozumieć, w jaki sposób sieć neuronowa jest szkolona na zestawach danych. Zasada, której użyłem, nazywa się

James Loy, Georgia Tech University. Poradnik dla początkujących, po którym możesz stworzyć własną sieć neuronową w Pythonie.

Motywacja: skupiający się na osobiste doświadczenie w nauce deep learning postanowiłem stworzyć sieć neuronową od podstaw bez kompleksów biblioteka edukacyjna, jak na przykład . Uważam, że początkujący Data Scientist powinien zrozumieć Struktura wewnętrzna sieć neuronowa.

Ten artykuł zawiera to, czego się nauczyłem i mam nadzieję, że będzie przydatny również dla Ciebie! Inne przydatne artykuły pokrewne:

Co to jest sieć neuronowa?

Większość artykułów na temat sieci neuronowych przedstawia paralele z mózgiem, opisując je. Uważam, że łatwiej jest opisać sieci neuronowe jako funkcję matematyczną, która mapuje dane wejście do pożądanego wyjścia bez wchodzenia w zbyt wiele szczegółów.

Sieci neuronowe składają się z następujących elementów:

  • warstwa wejściowa, x
  • dowolna kwota ukryte warstwy
  • warstwa wyjściowa, ŷ
  • zestaw waga I offsety między każdą warstwą W I b
  • wybór funkcje aktywacji dla każdej ukrytej warstwy σ ; w tej pracy użyjemy funkcji aktywacji Sigmoid

Poniższy diagram przedstawia architekturę dwuwarstwowej sieci neuronowej (należy zwrócić uwagę, że warstwa wejściowa jest zwykle wykluczana przy liczeniu liczby warstw w sieci neuronowej).

Tworzenie klasy sieci neuronowej w Pythonie wygląda prosto:

Trening sieci neuronowych

Wyjście ŷ prosta dwuwarstwowa sieć neuronowa:

W powyższym równaniu wagi W i błędy systematyczne b są jedynymi zmiennymi, które wpływają na wynik ŷ.

Oczywiście prawidłowe wartości wag i odchyleń decydują o dokładności prognoz. Proces precyzyjnego dostrajania wag i odchyleń na podstawie danych wejściowych jest znany jako uczenie sieci neuronowej.

Każda iteracja procesu uczenia się składa się z następujących kroków:

  • obliczanie przewidywanego wyjścia ŷ, zwanej propagacją w przód
  • aktualizowanie wag i odchyleń, zwane propagacją wsteczną

Poniższy wykres sekwencji ilustruje ten proces:

bezpośrednia propagacja

Jak widzieliśmy na powyższym wykresie, propagacja w przód -  jest tylko prostym obliczeniem, a dla podstawowej dwuwarstwowej sieci neuronowej wynik sieci neuronowej jest określony wzorem:

Aby to zrobić, dodajmy funkcję propagacji w przód do naszego kodu Pythona. Zauważ, że dla uproszczenia przyjęliśmy, że przesunięcia wynoszą 0.

Potrzebujemy jednak sposobu, aby ocenić „czynnik jakości” naszych prognoz, czyli jak daleko są nasze prognozy.) Funkcja strat po prostu pozwala nam to zrobić.

Funkcja strat

Dostępnych jest wiele funkcji straty, a charakter naszego problemu powinien dyktować nasz wybór funkcji straty. W tej pracy będziemy używać suma kwadratów błędów jako funkcja straty.

Suma kwadratów błędów - jest średnią różnicy między każdą przewidywaną i rzeczywistą wartością.

Celem nauki jest znalezienie zestawu wag i błędów systematycznych, które minimalizują funkcję straty.

wsteczna propagacja

Teraz, gdy zmierzyliśmy nasz błąd przewidywania (stratę), musimy znaleźć sposób propaguje błąd z powrotem i zaktualizuj nasze wagi i odchylenia.

Aby poznać odpowiednią sumę do dostosowania wag i odchyleń, musimy znać pochodną funkcji straty w odniesieniu do wag i odchyleń.

Przypomnij sobie z analizy, że pochodna funkcji  -  jest tangensem nachylenia funkcji.

Jeśli mamy pochodną, ​​możemy po prostu zaktualizować wagi i odchylenia, zwiększając/zmniejszając je (patrz diagram powyżej). Nazywa się to zejście gradientowe.

Nie możemy jednak bezpośrednio obliczyć pochodnej funkcji straty w odniesieniu do wag i odchyleń, ponieważ równanie funkcji straty nie zawiera wag i odchyleń. Potrzebujemy więc reguły łańcucha, która pomoże w obliczeniach.

Uff! Było to kłopotliwe, ale pozwoliło nam uzyskać to, czego potrzebujemy - pochodną (nachylenie) funkcji straty względem wag. Teraz możemy odpowiednio dostosować wagi.

Dodajmy funkcję backpropagation (backpropagation) do naszego kodu Pythona:

Sprawdzenie działania sieci neuronowej

Teraz, gdy mamy już kompletny kod Pythona do propagacji w przód iw tył, weźmy naszą sieć neuronową jako przykład i zobaczmy, jak to działa.


Idealny zestaw wag

Nasza sieć neuronowa musi nauczyć się idealnego zestawu wag do reprezentowania tej funkcji.

Wytrenujmy sieć neuronową dla 1500 iteracji i zobaczmy, co się stanie. Patrząc na poniższy wykres strat iteracyjnych, wyraźnie widać, że strata maleje monotonicznie do minimum. Jest to zgodne z algorytmem opadania gradientu, o którym mówiliśmy wcześniej.

Spójrzmy na ostateczną predykcję (wnioskowanie) z sieci neuronowej po 1500 iteracjach.

Zrobiliśmy to! Pokazał nasz algorytm propagacji do przodu i do tyłu udana praca sieć neuronowa, a przewidywania zbiegają się na prawdziwych wartościach.

Zauważ, że istnieje niewielka różnica między przewidywaniami a rzeczywistymi wartościami. Jest to pożądane, ponieważ zapobiega nadmiernemu dopasowaniu i pozwala sieci neuronowej na lepsze uogólnianie na niewidocznych danych.

Końcowe przemyślenia

Wiele się nauczyłem podczas pisania od podstaw własnej sieci neuronowej. Podczas gdy biblioteki głębokiego uczenia, takie jak TensorFlow i Keras, pozwalają na tworzenie głębokich sieci bez pełnego zrozumienia praca wewnętrzna sieci neuronowych, uważam, że dla początkujących naukowców zajmujących się danymi pomocne jest ich głębsze zrozumienie.

Zainwestowałem dużo mojego osobistego czasu w ta praca i mam nadzieję, że okaże się to przydatne!

Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
TAk
Nie
Dziękuję za opinię!
Coś poszło nie tak i Twój głos nie został policzony.
Dzięki. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!