Czy sieć neuronowa bez wstecznej propagacji jest w stanie wyliczyć odpowiednie wyniki na wyjściu?

0

Czy sieć neuronowa bez wstecznej propagacji jest w stanie wyliczyć odpowiednie wyniki na wyjściu?

2

Tak.

0
Patryk27 napisał(a):

Tak.

Jak wtedy są wyliczane wagi neuronów?

3

Nie pytałeś o proces uczenia się sieci neuronowej - do uczenia w większości przypadków potrzebujesz wykorzystać jakiś algorytm (np. wsteczną propagację albo rand()), lecz do funkcjonowania stworzonej uprzednio sieci (tak jak zrozumiałem Twoje pytanie) żaden algorytm uczący nie jest wymagany.

2
  1. Jw, nauczona sieć po prostu działa (lub nie)
  2. Backpropagation to nie jedyny algorytm uczenia przecież. Masz przecież jakieś Kohoneny czy forward propagation
0
Patryk27 napisał(a):

Nie pytałeś o proces uczenia się sieci neuronowej - do uczenia w większości przypadków potrzebujesz wykorzystać jakiś algorytm (np. wsteczną propagację albo rand()), lecz do funkcjonowania stworzonej uprzednio sieci (tak jak zrozumiałem Twoje pytanie) żaden algorytm uczący nie jest wymagany.

To w takim przypadku wagi między warstwą wejściową i ukrytą na starcie są dobierane losowo. Jak natomiast będą dobierane wagi połączeń między warstwą ukrytą a warstwą wyjściową? Zakładając, że jest jedna warstwa ukryta?

3

Też losowo. Jakoś musisz zainicjalizować wagi sieci, prawda?

Dopiero w trakcie uczenia sieci wagi zmieniają się zgodnie z jakimś przyjętym algorytmem. Może to być wsteczna propagacja a może to być np. "wprowadź losową zmianę i sprawdź, czy uzyskałeś poprawę".

0

Mam jeszcze jedno pytanie, może troche głupie, ale czy sieć neruonowa zawsze działa w oparciu o pojedyńczy neuron? Czyli w oparciu o sumę wag na połączeniach, danych wejściowych oraz funkcje aktywacji. Czy sieć ma różne sposoby działania?

1

Co masz na myśli mówiąc "pojedynczy neuron"?

Sieć zbudowaną z dokładnie jednego neuronu? Nie, nie zawsze, właściwie to ciężko nazwać pojedyczny neuron siecią neuronową, bo nie ma tu żadnej sieci. Jeśli dobrze pamiętam to taki pojedynczy neuron nazywa się perceptron i nadaje się jedynie do najbardziej prymitywnych zastosowań tzw. problemów liniowo separowalnych.

Sieć zbudowaną z wielu neuronów jednego rodzaju? Nie siedzę w żadnym AI, deep learningu i niczym podobnym, tylko klepię CRUDy, także będę hipotetyzował, ale nie ma żadnych przeszkód, by np. każda warstwa neuronów miała np. inną funkcję aktywacji - algorytmy wstecznej propagacji i tak są uogólnione na jakąś funkcję aktywacji i jej pochodne, więc użycie różnych funkcji nawet w jednej warstwie nie powinno być niemożliwe - inna sprawa, czy jest praktyczne i cokolwiek daje. Tego nie wiem. Ale kombinować i eksperymentować na pewno nikt Ci nie zabroni, a jeśli przy okazji uzyskasz pożądany efekt, to nawet tym lepiej.

0

Mówiąc pojedyńczy neuron miałem na myśli sieć neuronową składającą się z wielu neuronów, gdzie każdy neuron to pojedyńczy neuron. I chciałem spytać czy w takiej sieci wartości danych neuronów zawsze wylicza się w taki sposób, że sumę wag połączeń wchodzących do danego neuronu podstawia się pod jakąś funkcje aktywacji? Czy istnieją inne sposoby wyliczeń/działania takich neuronów w sieci składającej się z wielu neuronów. Jak coś jeszcze jest nie jasne to doprecyzuje pytanie.

1

No ale przecież na tym polega sieć neuronowa, że zawiera "neurony" (albo raczej ich biedną imitację), które dostają jakieś sygnały na wejściu, które są sumowane (z wagami) i przekazywane do funkcji aktywacji, która przybiera jakąś wartości, stanowiąc sygnał na wyjściu podawany gdzieś dalej - wgłąb sieci lub jako sygnał wyjściowy. To się nie zmienia.

Zmieniać się może na przykład

  • struktura sieci (warstwy, liczba neuronów w warstwie, czy jest jakaś rekurencja etc)
  • algorytm uczenia
  • funkcja aktywacji

Różne typy sieci mogą się wyróżniać właśnie charakterystycznymi algorytmami uczenia i/lub występowaniem sprzężeń zwrotnych/rekurencji i/lub tym ile jest warstw, potencjalnie "typową" funkcją aktywacji, ale idea sieci neuronowej pozostaje mniej więcej stała.

1

@tom8543: Czy sieć neuronowa bez wstecznej propagacji jest w stanie wyliczyć odpowiednie wyniki na wyjściu?

Musialbys najpierw zdefiniowac "odpowiednie", ale zakladajac ze masz na mysli optymalne dla danego zestawu danych, to odpowiedz brzmi: o ile nie zostala wczesnej nauczona to nie.

@tom8543: Jak wtedy są wyliczane wagi neuronów?

Wagi w pierwszym kroku najczesciej dobierane sa losowo dla kazdego poloczenia neuronowego, mozna rowniez dobierac je wg jakiegos klucza, lub doswiadczenia opartego na analizie podobnych problemow.

@Patryk27: Nie pytałeś o proces uczenia się sieci neuronowej - do uczenia w większości przypadków potrzebujesz wykorzystać jakiś algorytm (np. wsteczną propagację albo rand()) ...

Co ma piernik do wiatraka? Mieszasz proces uczecznia sieci z inicjacja wartosci wag.

@Shalom: Backpropagation to nie jedyny algorytm uczenia przecież. Masz przecież jakieś Kohoneny czy forward propagation...

Ty rowniez mylisz pojecia. Mieszasz proces uczenia, z typem sieci i procesowaniem sygnalu miedzy jej warstwami.

@tom8543: To w takim przypadku wagi między warstwą wejściową i ukrytą na starcie są dobierane losowo. Jak natomiast będą dobierane wagi połączeń między warstwą ukrytą a warstwą wyjściową? Zakładając, że jest jedna warstwa ukryta?

Wszystkie wagi w procesie inicjacji ich wartosci sa dobierane losowo niezaleznie od warstwy. No chyba, ze jestes gosciem, ktory ma niesamowitego czuja, albo postepujesz wg jakiegos znanego sobie klucza, ale za takie umiejetnosci dostalbys z marszu Nobla.

@superdurszlak: Może to być wsteczna propagacja a może to być np. "wprowadź losową zmianę i sprawdź, czy uzyskałeś poprawę".

Z ta losowa zmiana to pojechales :). Generalnie uzycie algorytmu wstecznej propagacji jako metody uczenia sieci, ma jedynie zastosowanie czysto "prezentacyjne". W wiekszosci przypadkow MLP niezaleznie czy jest on rekurencyjny czy nie, stosuje sie najrozniejsze odmiany metod gradientowych. Sam algortym Levenberg'a-Marquardt'a posiada calkiem sporo odmian.

@superdurszlak: Sieć zbudowaną z wielu neuronów jednego rodzaju? Nie siedzę w żadnym AI, deep learningu i niczym podobnym, tylko klepię CRUDy, także będę hipotetyzował, ale nie ma żadnych przeszkód, by np. każda warstwa neuronów miała np. inną funkcję aktywacji - algorytmy wstecznej propagacji i tak są uogólnione na jakąś funkcję aktywacji i jej pochodne, ...

Masz jak najbardziej racje, z tym ze ja osobiscie mialem do czynienia z jednym algorytmem wstecznej propagacji.

@superdurszlak: więc użycie różnych funkcji nawet w jednej warstwie nie powinno być niemożliwe - inna sprawa, czy jest praktyczne i cokolwiek daje.

Masz jak najbardziej racje. Powiem wiecej, mozesz nawet roznicowac funkcje aktywacji dla neuronow tej samej warstwy.

@superdurszlak: No ale przecież na tym polega sieć neuronowa, że zawiera "neurony" (albo raczej ich biedną imitację), które dostają jakieś sygnały na wejściu, które są sumowane (z wagami) i przekazywane do funkcji aktywacji, która przybiera jakąś wartości, stanowiąc sygnał na wyjściu podawany gdzieś dalej - wgłąb sieci lub jako sygnał wyjściowy. To się nie zmienia.

To nalezy doprecyzowac. Neuron poprzedniej warstwy daje jakas wartosc na wyjsciu. Neuron warstwy nastepnej "przechowuje" odpowiednia wage dla kazdego wyjscia neuronow warstwy poprzedniej. Zeby nie komplikowac sprawy, wartosci sygnalow emitowanych przez neurony warstwy poprzedniej mnozone sa przez wartosci odpowadajacych im wag w neuronie warstwy nastemnej. Takie iloczyny sa sumowane i podstawiane jako argument do funkcji aktywacj. Wartosc funkcji aktywacji dla tak przygotowanego argumentu staje sie sygnalem wyjsciowym danego neuronu.

To tyle.

0

Mieszasz proces uczecznia sieci z inicjacja wartosci wag.

Nie mieszam - jak najbardziej celowo podałem rand() jako sposób "uczenia" sieci, zestawiając to z dosyć abstrakcyjnie zadanym pytaniem przez autora ;-)

1

Ty rowniez mylisz pojecia. Mieszasz proces uczenia, z typem sieci i procesowaniem sygnalu miedzy jej warstwami.

Nie, nie myle. Sieci Kohonena/SOM jak najbardziej określają sposób nauki i co więcej stosują właśnie metody mocno odmienne od backpropagation czy gradientów.

1

@Shalom: Nie, nie myle. Sieci Kohonena/SOM jak najbardziej określają sposób nauki i co więcej stosują właśnie metody mocno odmienne od backpropagation czy gradientów.

Jak najbardziej mylisz sie kolego, bo siec Kohanena to typ sieci. Gdybys zamiast tego uzyl pojec samoorganizacja i konkurencyjnosc oraz darowal sobie forward propagtion, to nie byloby tematu.

1
Constantic napisał(a):

Z ta losowa zmiana to pojechales :). Generalnie uzycie algorytmu wstecznej propagacji jako metody uczenia sieci, ma jedynie zastosowanie czysto "prezentacyjne". W wiekszosci przypadkow MLP niezaleznie czy jest on rekurencyjny czy nie, stosuje sie najrozniejsze odmiany metod gradientowych. Sam algortym Levenberg'a-Marquardt'a posiada calkiem sporo odmian.

MLP z zalozenia nie jest rekurencyjny tylko liniowy :D

1

@komuher: dodaj sobie R z przodu i "powyciagaj" sprzezenia z warstw pozniejszych do wczesniejszych i wszystko bedzie sie zgadzalo :D, a tak powaznie jest po polnocy, podobnie jak pozostali "klepie z palca" bez wsparcia z wikipedii. To jest forum a nie wyklad na AGH :).

0

Dziękuję wszystkim za odpowiedzi

  1. Czyli nawet najbardziej skomplikowane sieci neuronowe działają w ten sposób, że wyliczają sumę wag dla danego neuronu i obliczają funkcję aktywacji dla niego?
  2. Czy algortym wstecznej propagacji jest reukrencyjny?
  3. Jeśli sieć ma więcej neuronów w warstwie ukrytej tym bardziej dokładne wyniki będziemy otrzymywać na wyjściu sieci neuronowej?
2

@tom8543: Czyli nawet najbardziej skomplikowane sieci neuronowe działają w ten sposób, że wyliczają sumę wag dla danego neuronu i obliczają funkcję aktywacji dla niego?
Czy algortym wstecznej propagacji jest reukrencyjny?
Jeśli sieć ma więcej neuronów w warstwie ukrytej tym bardziej dokładne wyniki będziemy otrzymywać na wyjściu sieci neuronowej?

Niniejszym oficjalnie "odszczekuje" wszystkie moje negatywne wypowiedzi na temat arogancji i opryskliwosci odpowiadajacych na pytania doswiadczonych uzytkownikow forum. Chyba w koncu zrozumialem skad sie to bierze.

2

@tom8543

  1. Strukturalnie? Generalnie tak. Ale nie sumę wag, tylko sumę jego wejść.
  2. Co rozumiesz tutaj przez rekurencje? Jest iteracyjny, ale można by to zapisać w postaci rekurencji...
  3. Niekoniecznie. Dobranie struktury sieci to zwykle spory problem i trochę loteria. Za mało to źle ale za dużo też może być źle.
3
Constantic napisał(a):

@superdurszlak: Może to być wsteczna propagacja a może to być np. "wprowadź losową zmianę i sprawdź, czy uzyskałeś poprawę".

Z ta losowa zmiana to pojechales :). Generalnie uzycie algorytmu wstecznej propagacji jako metody uczenia sieci, ma jedynie zastosowanie czysto "prezentacyjne". W wiekszosci przypadkow MLP niezaleznie czy jest on rekurencyjny czy nie, stosuje sie najrozniejsze odmiany metod gradientowych. Sam algortym Levenberg'a-Marquardt'a posiada calkiem sporo odmian.

Dobra postanowilem odpowiedziec jako ze dysputa z cytowanym uzytkownikiem nic nie zmienila i nie zamierza on poprawic tak razacego bledu.

Po pierwsze algorytmu wstecznej propagacji jest w praktycznie kazdej sieci neuronowej uzywany do "compute gradientu" uzywanego przez pozniejsze algorytmy optymalizacyjne (bazowane na gradient descent -> SGD, Adam, AdaGrad etc.)
Za http://neuralnetworksanddeeplearning.com/chap2.html -> "... we didn't discuss how to compute the gradient of the cost function. That's quite a gap! In this chapter I'll explain a fast algorithm for computing such gradients, an algorithm known as backpropagation."

Kolejna pomylka tutaj to Levenberg'a-Marquardt ktory jest jedym z algorytmow uzywanych do "wyznaczenia gradientu" [oczywiscie w przypadku podanym przez tegoz uzytkownika] (czyli backpropagation) nie gradient descent ktory jest algorytmem optymalizacyjnym. -> https://pdfs.semanticscholar.org/0465/dca766776bdb51be0472a6654453673ae114.pdf

Plus jesli ktos sie zastanawia czy istnieja sieci bez backpropa (to owsze sa to miedzy innymi sieci ktore korzystaja z "Evolutionary Algorithms" (np. Neuroevolution)) -> https://eng.uber.com/deep-neuroevolution/

No i MLP nie moze byc rekurencyjny za cos takiego szybko dostaje się ujemne punkty na jakiejkolwiek rozmowie rekrutacyjnej (jako ze to jedna z podstaw NN :D)

0

@komuher: Dobra postanowilem odpowiedziec jako ze dysputa z cytowanym uzytkownikiem nic nie zmienila i nie zamierza on poprawic tak razacego bledu...

I cos takiego pisze gosc, ktory w zyciu samodzielnie nie zakodowal zadnego algorytmu optymalizacyjnego, a wszystko co na ten temat wie pochodzi z albo z plikow Read.me repoozytioriow bibliotek, ktore bycmoze kiedys mial okazje integrowac z jakims projektem, albo obcojezycznych publikacji, ktorych sens niestety nie jest dla niego jasny.

1

Do metod innych niz backprop dodam jeszcze publikacje z OpenAI'a -> https://openai.com/blog/evolution-strategies/

0

Wracając do tematu miałbym jeszcze kilka pytań :D

  1. Czy obecnie robotyka również wykrozystuje sieci neuronowe czy roboty wykorzystują inny rodzaj SI?
  2. Co przedstawia pojedyńczy neuron w warstwie ukrytej w sieci neuronowej? Zakładając, że dana sieć neuronowa posiada jedną warstwę ukrytą i sieć ta służy do rozpoznawania tego czy dany człowiek jest osobą dorosłą czy dzieckiem. Co oznacza wtedy pojedyńczy neuron w warstwie ukrytej? Sprawdza np. wzrost człowieka? Dobrze to rozumiem?
  3. Kiedy sieć neuronowa jest rekurencyjna? Wtedy, gdy korzysta np. z algorytmu wstecznej propagacji? Bo rozumiem to tak, że wtedy w sieci pojawiają się sprzężenia zwrotne przez co sieć staje się rekurencyjna.
1
  1. Nie ma reguły, bo i niby czemu miała by jakaś być? o_O Jestem pewien że są roboty korzystające z SSN a są i takie które korzystają z innych mechanizmów.
  2. Nic. Źle to rozumiesz. W tym zresztą jest cała słabość SSN -> że są zupełnie nieczytelne. Sieć albo działa albo nie, ale nie bardzo da się stwierdzić "dlaczego". Sieć działa jako całość. Pojedyńczy neuron nie znaczy nic. Inne techniki uczenia maszynowego są w tym względzie dużo lepsze -> np. inferencja reguł asocjacyjnych czy drzew decyzyjnych. Tam model jest zupełnie czytelny dla człowieka i łatwo stwierdzić czemu coś nie działa dla pewnych przypadków.
0
Shalom napisał(a):
  1. Nie ma reguły, bo i niby czemu miała by jakaś być? o_O Jestem pewien że są roboty korzystające z SSN a są i takie które korzystają z innych mechanizmów.
  2. Nic. Źle to rozumiesz. W tym zresztą jest cała słabość SSN -> że są zupełnie nieczytelne. Sieć albo działa albo nie, ale nie bardzo da się stwierdzić "dlaczego". Sieć działa jako całość. Pojedyńczy neuron nie znaczy nic. Inne techniki uczenia maszynowego są w tym względzie dużo lepsze -> np. inferencja reguł asocjacyjnych czy drzew decyzyjnych. Tam model jest zupełnie czytelny dla człowieka i łatwo stwierdzić czemu coś nie działa dla pewnych przypadków.

Skoro nie wiadomo co jest w warstwie urkytej to skąd wiadomo ile tych warstw ukrytych ma być w sieci neuronowej i to ile neuronów w tej warstwie ukrytej ma być?

3

Skoro nie wiadomo co jest w warstwie urkytej to skąd wiadomo ile tych warstw ukrytych ma być w sieci neuronowej i to ile neuronów w tej warstwie ukrytej ma być?

To jest druga słabość SSN. Nie wiadomo :)

Czyli te neurony w warstwie ukrytej mogą przedstawiać cokolwiek dowolnego i nie wiadomo co to jest?

Gorzej. One nie przedstawiają nic sensownego! Tak jak pisałem wyżej, sieć działa jako całość. Nie bardzo jest sens analizować jej składowe bo one same z siebie nic nie znaczą.

1
tom8543 napisał(a):
  1. Kiedy sieć neuronowa jest rekurencyjna? Wtedy, gdy korzysta np. z algorytmu wstecznej propagacji? Bo rozumiem to tak, że wtedy w sieci pojawiają się sprzężenia zwrotne przez co sieć staje się rekurencyjna.

Rekurencyjna łączy wyjście na powrót do wejścia.
Zobacz tu na SRN: https://skymind.ai/images/wiki/greff_lstm_diagram.png
Więcej: https://skymind.ai/wiki/lstm

BP nie ma rekurencji tylko odwrotny kierunek uczenia (Back Propagation) do kierunku używania sieci (Forward Propagation).

0

Ok, już wiem co to sieć rekurencyjna. A czy wszystkie algorytmy uczenia sieci neuronowych działają podobnie jak algorytm wstecznej propagacji, czyli w taki sposób, że na bieżąco aktualizowane są wagi?

1

Co rozumiesz przez "na bieżąco"?

Wagi są aktualizowane na etapie uczenia sieci. Podajesz jakieś dane na wejściu, dostajesz coś na wyjściu, następnie w sieci prowadzane są poprawki wg. jakiegoś algorytmu i tak w kółko, aż uznasz że sieć jest nauczona - może to być wsteczna propagacja i uczenie z nadzorem (czyli zmiany uwzględniają jakoś wyjście oczekiwane i uzyskane), a może to być jakaś forma uczenia bez nadzoru (tzn. uczenie nie uwzględnia wartości wyjściowych, jakie sieć powinna wyprodukować - choćby dlatego, że ich nie znasz).

Algorytm wstecznej propagacji nie determinuje tego, kiedy następuje aktualizacja wag, tylko w jaki sposób są zmieniane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1