"Przekształcenie" pewnego ciągu...

chomzee
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 17 sty 2007, o 18:51
Płeć: Mężczyzna
Lokalizacja: Leszno

"Przekształcenie" pewnego ciągu...

Post autor: chomzee »

Próbuję wynaleźć coś nowego w związku z sieciami neuronowymi, już mam koncepcję, ale nie wiem jak matematycznie rozwiązać następujący problem. Nie wiedziałem w jakim dziale umieścić ten wątek, jeżeli się pomyliłem, przepraszam.

Mamy dany ciąg n-ciu liczb (n>1), którego suma wszystkich wyrazów wynosi 1. Każdy z wyrazów zawiera się w przedziale (0; 1), to znaczy że każdy wyraz jest dodatni i mniejszy od 1.

Gdyby wszystkie liczby były "równo rozłożone", wówczas każdy wyraz miałby wartość 1/n (to chyba jasne). Szukam algorytmu, który zmodyfikuje każdy wyraz ciągu tak, aby:
- im wartość wyrazu jest większa od 1/n, tym bardziej zwiększ wartość wyrazu
- im wartość wyrazu jest bliższa 1, tym mniej zwiększ wartość wyrazu (każdy wyraz ciągu musi być mniejszy od 1)
- im wartość wyrazu jest mniejsza od 1/n, tym bardziej zmniejsz wartość wyrazu
- im wartość wyrazu jest bliższa 0, tym mniej zmniejsz wartość wyrazu (każdy wyraz ciągu musi być większy od 0)
- jeżeli wartość wyrazu jest równa 1/n, to pozostaw wyraz bez zmian
- zachowaj własność, że suma tego ciągu jest równa 1

Mam nadzieję, że w miarę dokładnie opisałem to, co chcę osiągnąć. Może mi ktoś pomóc? Uważam to za ciekawy problem i liczę na pomoc bardziej doświadczonych matematyków:)
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3306
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

"Przekształcenie" pewnego ciągu...

Post autor: max »

chomzee pisze:Mam nadzieję, że w miarę dokładnie opisałem to, co chcę osiągnąć.
Skonkretyzuj - co algorytm ma dostawać (jakie dane), a co zwracać...
chomzee
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 17 sty 2007, o 18:51
Płeć: Mężczyzna
Lokalizacja: Leszno

"Przekształcenie" pewnego ciągu...

Post autor: chomzee »

Powiedzmy, że dostaje liczbę całkowitą n (n>1), a następnie n liczb zmiennoprzecinkowych z przedziału (0; 1) takich, że ich suma jest równa 1.

Na wyjściu chcę otrzymać te liczby w tej samej kolejności, jednakże proporcjonalnie zmienione - tym większe im są one większe od 1/n oraz tym mniejsze im mniejsze są one od 1/n. Suma ciągu na wyjściu również powinna być równa 1.

Zauważmy, że jeżeli liczby na wejściu są uszeregowane niemalejąco, to wynik również powinien być ciągiem niemalejącym.

Nie wiem dokładnie, co chcę wykonać z tymi liczbami, gdybym to wiedział, nie pytałbym się.

[ Dodano: 20 Czerwca 2007, 21:34 ]
To ja może wyjaśnię, co chcę osiągnąć, aby zobrazować mój problem.

Mamy neuron. Wpływa do niego dana (liczba zmiennoprzecinkowa), która następnie jest rozdzielana na kilka synaps (połączeń) do innych neuronów. Każda z synaps ma wagę (liczbę od 0 do 1), która mówi, jaką część sygnału ma przekazać kolejnemu neuronowi. Ważne jest to, aby suma wag synaps była równa 1 (chcę, aby sygnał się rozdzielał, a nie zmieniał swojej 'siły').

Chcę teraz zaimplementować 'uczenie'. Mianowicie - chcę wzmocnić te już silniejsze synapsy (których waga jest większa niż 1/n, gdzie n to liczba synaps) oraz osłabić już słabe synapsy (takie, których waga jest mniejsza niż 1/n). Oczywiście - po nauce synapsy znów mają tylko odpowiednio rozdzielać sygnał, to znaczy suma ich wag musi być równa 1.

Ma ktoś pomysł?
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3306
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

"Przekształcenie" pewnego ciągu...

Post autor: max »

Nie czuję się mocny w temacie sieci neuronowych, ale mogę chociaż wynotować jakieś przydatne oczywistości...


Na początek kilka uwag ogólnych:

Możesz rozdzielić zbiór krawędzi na trzy i dalej rozpatrywać każdy z nich z osobna:
A. krawędzie o wagach \(\displaystyle{ \tfrac{1}{n}}\), w dalszym rozumowaniu będziemy je pomijać
B. krawędzie o wagach większych od \(\displaystyle{ \tfrac{1}{n}}\) - mamy zwiększyć każdą z nich
C. krawędzie o wagach mniejszych od \(\displaystyle{ \tfrac{1}{n}}\) - mamy zmniejszyć każdą z nich.

Algorytm zmiany układu wartości wag ma zachowywać uporządkowanie tych wartości, przy czym:
-zauważmy, że zachowanie uporządkowania wartości wag krawędzi ze zbiorów B i C jest równoznaczne z zachowaniem uporządkowania tych wag dla wszystkich rozpatrywanych krawędzi
-zauważmy również, że łączny wzrost wag krawędzi w zbiorze B jest równy łącznemu spadkowi wag krawędzi w zbiorze C.


No i teraz na pewno można różnie, co powinno zależeć też w dużej mierze od tego, co chcesz osiągnąć - znaczenie będzie mieć zarówno to, jak duży łączny wzrost (lub łączny spadek, na jedno wychodzi) zakładasz jak i to, w jaki sposób chcesz ustalić zależność między wzrostem/spadkiem danej wagi, a jej odległością od bliższego końca przedziału \(\displaystyle{ (0,1)}\).

Btw - być może Cię to zainteresuje:

(są tam też wykłady ze sztucznej inteligencji)

Pozdrawiam
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

"Przekształcenie" pewnego ciągu...

Post autor: smiechowiec »

Niech wspp oznacza współczynnik zbliżania się wyrazów ciągu do wartości 1/n
n - liczba wyrazów ciągu,
wspp powinien się mieścić w przedziale od 0 do 1,
dla 1 wszystkie wyrazy przyjmą wartość 1/n, natomiast dla 0 pozostaną niezmienione.
Wartość wejściowa wyraz ciągu \(\displaystyle{ i_{we}}\)
Wartość wyjściowa wyraz ciągu \(\displaystyle{ i_{wy}}\)
\(\displaystyle{ i_{wy} = i_{we} + wspp (\frac{1}{n} - i_{we})}\)
Wartości ciągu wejściowego wczytujemy po kolei i zwracamy na bieżąco kolejne wartości wyrazów ciągu wyjściowego.
Awatar użytkownika
max
Użytkownik
Użytkownik
Posty: 3306
Rejestracja: 10 gru 2005, o 17:48
Płeć: Mężczyzna
Lokalizacja: Lebendigentanz
Podziękował: 37 razy
Pomógł: 778 razy

"Przekształcenie" pewnego ciągu...

Post autor: max »

Zdaje się, że chomzee chodziło o to, aby oddalić wyrazy danego ciągu od \(\displaystyle{ \tfrac{1}{n}}\), a nie je zbliżyć... dlatego też, aby uzyskać żądany efekt proponowaną metodą, należałoby zmienić znaki w nawiasie.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

"Przekształcenie" pewnego ciągu...

Post autor: smiechowiec »

Faktycznie, nie doczytałem, myślałem, że chodzi o wyłagodzenie ciągu, a nie o zaostrzenie.
Jednak wtedy sama zmianu znaku we wzorze nie jest wystarczająca bo \(\displaystyle{ i_{wy}}\) może znaleźć się poza zakresem od 0 do 1.
Nalezy zamienić we wzorze \(\displaystyle{ i_{we}}\) z \(\displaystyle{ i_{wy}}\) i wyliczyć \(\displaystyle{ i_{wy}}\).
ODPOWIEDZ