Sidebar

Najnowsze

  • Problemy cywilizacji związane z rozwojem sztucznej inteligencji
  • Nowy Traktat Logiczno-Filozoficzny
  • Czas i paradoksy logiczne
  • Wprowadzenie do alternatywnych miar złożoności obliczeniowej
  • Mechanizm wnioskowania w systemach przetwarzania danych
  • Współczesne interpretacje argumentu św Anzelma
  • Cyfrowe oczyszczanie logiki
  • Znaczenie a oznaczanie
  • Informatyka w służbie prawdzie
  • Problemy wirtualnej rzeczywistości
Polish Logic Polish Logic Polish Logic

News

Problemy cywilizacji związane z rozwojem sztucznej inteligencji

Details
Jerzy Wawro
Filozofia informatyki
14 August 2023
Hits: 6737
Empty
  •  Print 
  • Email

Wirtualną rzeczywistość rozumiem tak, jak Mark Zuckerberg1 - czyli jako rozszerzenie naszej rzeczywistości o kreacje komputerowe. W tej przestrzeni będziemy się komunikować nie tylko z innymi ludźmi, ale również z programami, które mogą wykorzystywać sztuczną inteligencję. To budzi wiele obaw. Będę jednak dowodził że większe zagrożenia dla społeczeństwa wynikają z samej wirtualizacji, niż z uwagi na zastosowanie w niej sztucznej inteligencji. Przedstawiona argumentacja sięga fundamentów informatyki2. Dlatego początek tekstu ma charakter „techniczny”. Dalsze rozważania, to opis sytuacji z punktu widzenia humanisty funkcjonującego w świecie techniki.

 

Maszyny matematyczne

 

Dawniej komputery - nie bez przyczyny - nazywano maszynami matematycznymi. Modele obliczeniowe, zgodnie z którymi je zbudowano, zostały zaprojektowane przez matematyków. Najprostszym takim modelem obliczeniowym jest tabliczka mnożenia, z którą każdy z nas się zetknął. Jest to „pamięć”, przechowująca wyniki mnożenia dwóch liczb. Mając dwie liczby (od 1 do 10) możemy łatwo odczytać z tej pamięci wynik ich mnożenia.

Read more: Problemy cywilizacji związane z rozwojem sztucznej inteligencji

Nowy Traktat Logiczno-Filozoficzny

Details
Jerzy Wawro
Filozofia i logika
30 August 2018
Hits: 12362
Empty
  •  Print 
  • Email

Dla mnie „Traktat Logiczno Filozoficzny”1 to dzieło o granicach racjonalności napisane bez należytej dbałości o precyzję. Na dodatek upływ czasu sprawił, że wiele terminów których Wittgenstein używa bez podania definicji ma dzisiaj bardzo konkretne znaczenie – odmienne od tego jak on je rozumiał. Dlatego Traktat pozostaje żerowiskiem filozofów żyjących z wyjaśniania tego co autor miał na myśli. Natomiast jego przesłanie – aby było żywe – trzeba napisać od nowa. Chcąc podjąć dzieło Wittgensteina, trzeba zacząć od krytycznej analizy tego, co on napisał. Nie chodzi przy tym o interpretację treści, ale o wykorzystanie zestawu poruszonych zagadnień do refleksji nad drogą do wyznaczonego celu.

Pierwsza część tekstu zawiera analizę głównych zagadnień poruszonych w Traktacie. Druga część to podjęcie próby odsłonięcia granic racjonalności przy zastosowaniu wniosków z wykonanej analizy.

Na koniec tego wprowadzenia wyjaśnię krótko dlaczego zdecydowałem się stworzyć niniejszy tekst. Motywacje były trzy:

1) cel jaki postawił sobie Wittgenstein pozostaje aktualny – może teraz w czasach „postprawdy” bardziej niż kiedykolwiek;

2) negatywna ocena środowiska naukowego sprawia, że nie widzę żadnych szans na to, by to potrzebne dzieło zostało przez naukowców i filozofów wykonane (nie spodziewam się też, że moja praca zostanie przez nich dostrzeżona i doceniona);

3) języki programowania pełnią rolę o jakiej marzyli twórcy pozytywizmu logicznego (umożliwiają ścisły opis rzeczywistości); wydaje się ogromnie dziwne, że nie zostało to dostrzeżone przez spadkobierców tej tradycji; nie jestem filozofem (w sensie zawodowym), ale jestem programistą i dostrzegam doniosłość powyższego odkrycia.

Read more: Nowy Traktat Logiczno-Filozoficzny

Czas i paradoksy logiczne

Details
Jerzy Wawro
Filozofia i logika
02 April 2018
Hits: 9992
Empty
  •  Print 
  • Email

Czas a logika klasyczna1

Zdania w logice klasycznej opisują fakty (stan), a nie ich zmiany w czasie! Jeśli uznajemy zdanie za prawdziwe (fałszywe), tym samym uznajemy iż jego wartość logiczna nie zmienia się w czasie.
Na przykład zdanie 'jutro będzie padać deszcz' nie jest zdaniem logiki, gdyż nie umiemy ustalić jego wartości logicznej.

Możemy powiedzieć: 'dodając do liczby 2 liczbę 3 otrzymamy 5'. Wydaje się, że wyrażono tu jakiś ciąg czynności w czasie. Ale to jedynie opis zdeterminowanego wyniku działania. Wynik jest z góry przesądzony i dlatego możemy go podać. To, że posługujemy się przy tym czasownikiem jest jedynie środkiem wyrazu. Analogicznie możemy traktować każdy program komputerowy jako sieć logiczną2. Zamiana tego zapisu na instrukcje działania wykonywane w czasie powoduje jedynie zmniejszenie złożoności sieci logicznej na złożoność czasową (zamiast jednego złożonego działania ciąg prostszych wykonywanych w kolejnych chwilach czasu). Trudno więc mówić, że w ten sposób uwzględniono w komputerze czas taki jakim my go rozumiemy (jako doświadczaną zmienność). Prawdą pozostaje teza postawiona na początku: jeśli uznajemy zdanie za prawdziwe/fałszywe, tym samym uznajemy iż jego wartość logiczna nie zmienia się w czasie.

Opis działania komputera jest równoważny opisowi jego struktury, który da się przedstawić jako zbiór wyrażeń logicznych. Zauważmy przy tym, że takie wyrażenia nie są nigdy zapisem zdań fałszywych – nawet gdy dają na wynik 0 (fałsz). Na przykład zdanie: „koniunkcja daje na wynik fałsz, gdy wartości obu czynników koniunkcji (wejście) są fałszywe” jest prawdą! Opis działania komputera jest równoważny ze zbiorem zdań prawdziwych!

Dotyczy to wszystkich układów (maszyn) deterministycznych. Wątpliwości mogą dotyczyć jedynie tego, czy mamy do czynienia z determinizmem (jak w zdaniu 'jutro wzejdzie słońce'). Problemem jest też próba uwzględnienia czasu ciągłego (a nie dyskretnego). Prowadzi to do paradoksów związanych z nieskończonością. Z uwagi na to w tym artykule problem czasu ciągłego nie został poruszony.

Logika modalna i światy możliwe

Na początku tekstu podkreślone zostało to, że zdania logiczne służą do opisu faktów (stanu rzeczy). Kiedy fakty nie są znane w pełni, też możemy je opisać w sposób ścisły - choć niekoniecznie szczegółowy. Na przykład: 'jeśli rzucimy kostką do gry to otrzymamy ilość oczek od 1 do 6'. W tym przypadku można też skorzystać z pewnego rozszerzenia logiki klasycznej, a mianowicie logiki modalnej. W logice tej wprowadza się dwa operatory: jest konieczne oraz jest możliwe. Możemy więc powiedzieć: 'jest możliwe że rzucając kostką do gry otrzymamy 6 oczek'. Nie stanowi to istotnego wyłomu w deterministycznym charakterze logiki. Powszechnie takie zdania modalne interpretuje się w ten sposób, że pojawia się kilka światów możliwych. W każdym z nich wynik jest zdeterminowany. A więc na przykład w jednym ze światów możliwych rzucenie kostką da na pewno wynik 1 a w innym 6. Jeden z tych światów możliwych jest naszym światem realnym (choć możemy nie wiedzieć który). Operator „jest możliwe” oznacza że istnieje co najmniej jeden świat możliwy w którym zdanie jest prawdziwe. Operator „jest konieczne” zaś oznacza, że w każdym świecie możliwym rozważane zdanie jest prawdziwe.

Read more: Czas i paradoksy logiczne

Wprowadzenie do alternatywnych miar złożoności obliczeniowej

Details
Maciej Wawro, Jerzy Wawro
Teoria obliczeń
13 March 2017
Hits: 8696
Empty
  •  Print 
  • Email

Maszyna Turinga jako powszechnie przyjęty model obliczeniowy ma kilka wad. Najważniejszą z nich jest koncentracja na złożoności czasowej problemów (złożoność pamięciowa jest zawsze mniejsza od czasowej, więc nie ma potrzeby jej brać pod uwagę). W praktyce musimy uwzględnić zarówno czas jak i zasoby pamięci potrzebne do rozwiązania problemu. Jeśli w pamięci komputera zawarte są częściowe rozwiązania, może to przyspieszyć obliczenia. Można też poddać niezależnej analizie złożoność pamięciową – optymalizując ją na przykład przez kompresję.

Niniejszy artykuł pokazuje perspektywy badań nad złożonością, jakie otwierają się dzięki uwzględnieniu innego modelu obliczeniowego: systemów iteracyjnych.

Jedna z proponowanych koncepcji złożoności (sieci logiczne) jest obecnie rozwijana1, co potwierdza słuszność wniosków wysnutych na podstawie poniższej analizy.

System iteracyjny jako model obliczeniowy

Maszyna Turinga nie jest jedynym znanym modelem obliczeniowym. Wcześniej sformułowano rachunek lambda, a później systemy iteracyjne (Z. Pawlak)2. Powstał też model bardziej zbliżony do współczesnych komputerów: maszyny RAM3. Model maszyny Turinga z nieskończoną taśmą nie jest ani intuicyjny, ani praktyczny. Dlatego w niniejszym artykule analizę złożoności opartą o system iteracyjny.

Składa się on z pamięci, funkcji przejścia i zegara w takt którego wynik funkcji przejścia zapisywany jest do pamięci. Jeśli przyjmiemy, że pamięć składa się z elementów jednobitowych (0 lub 1), to funkcja przejścia staje się zbiorem funkcji logicznych, z których każda na podstawie zawartości pamięci wylicza nową wartość jednej komórki pamięci.

Model zaproponowany przez Z. Pawlaka nie obejmuje wydzielonego wejścia i wyjścia. Jednak nic nie stoi na przeszkodzie, aby dokonać stosownego rozszerzenia. W pamięci możemy więc teoretycznie wydzielić wejście oraz wyjście.

Wejście to część pamięci (teoretycznie może być cała) która zawiera dane wejściowe dla programu zaimplementowanego w postaci systemu iteracyjnego. Wyjście to z kolei część pamięci, której zmiana jest celem programu. Zmiana tej części pamięci oznacza zakończenie programu.

Obliczenia polegają na powtarzaniu zapisywania nowego stanu w pamięci tak długo, aż zostanie osiągnięty określony stan końcowy - na przykład zapisanie w części pamięci (na wyjściu) wyniku.

System iteracyjny (z określoną funkcją przejścia i zawartością początkową pamięci) oblicza wynik dla algorytmu zdeterminowanego przez funkcję przejścia i zapisane w pamięci dane (wejście). Aby uwzględnić możliwość użycia tego modelu dla takich samych obliczeń o różnych wejściach, proponujemy używać określenia „system iteracyjny Pawlaka” dla oznaczenia konstrukcji opisanej powyżej. Klasa systemów iteracyjnych Pawlaka różniących się między sobą zawartością wejścia odpowiada programowi obliczającemu wynik algorytmu dla dowolnych danych wejściowych. W dalszej części tekstu będziemy używać konsekwentnie nazwy „system iteracyjny” dla określenia takiej właśnie klasy systemów iteracyjnych Pawlaka.

Problem możemy zdefiniować jako zbiór algorytmów (systemów iteracyjnych) takich, że dla identycznych danych wejściowych dają identyczne wyniki.

Trzy proste elementy (pamięć, funkcja przejścia i zegar) przekładają się wprost na trzy miary złożoności systemu iteracyjnego:

  1. wykorzystywana pojemność pamięci;
  2. złożoność funkcji przejścia;
  3. czas

Złożoność pamięciowa może być mierzona ilością wykorzystywanych jednobitowych elementów pamięci.

Złożoność funkcji przejścia to suma ilości operatorów logicznych (bramek) wykorzystywanych w zdefiniowaniu wszystkich funkcji logicznych składających się na funkcję przejścia.

Natomiast złożoność czasowa to maksymalna ilość cykli zegara w czasie obliczeń.

Jeśli rozważamy konkretny system iteracyjny (program dla określonego algorytmu), to możemy założyć, że złożoność pamięciowa i złożoność sieci logicznej są stałe (maksymalna ilość wykorzystywana przy różnych danych), natomiast czas może się różnić zależnie od wielkości danych. To założenie nie jest teoretycznie konieczne, ale sprawia że model staje się intuicyjnie prosty.

Dla każdego problemu możemy stworzyć programy z minimalną pamięcią lub minimalną złożonością funkcji przejścia (a także szereg pośrednich):

  1. Zapisane w pamięci wszystkie możliwe wyniki obliczeń – wtedy obliczenia polegają na prostym odczycie ich na podstawie danych wejściowych. Funkcja przejścia jest pomijalna (obliczenia wykonane w jednym kroku)4.
  2. Złożona funkcja przejścia wylicza od razu wynik na podstawie danych wejściowych (początkowo w pamięci nie ma niczego poza danymi wejściowymi).

Zarys dowodu:

1. Możliwość zapisu wyników w pamięci jest trywialna.

2. Weźmy dowolny algorytm ze zdefiniowaną funkcją przejścia i pewną zawartością pamięci (wejścia). Jeśli algorytm wykonuje obliczenia w n krokach, możemy te obliczenia zapisać w postaci ciągu tych funkcji wchodzących w skład funkcji przejścia, które w kolejnym kroku wyliczyły nową zawartość pamięci. Ta wyliczona wartość jest wejściem dla funkcji użytych w następnym kroku. Nie musimy więc jej zapamiętywać, jeśli połączymy odpowiednio wyjście z funkcji użytych w poprzednim kroku z wejściem funkcji użytych w kroku następnym. W ten sposób skraca się czas – aż do pojedynczego kroku. Czyli funkcja przejścia może zastąpić pamięć.

Dwie nowe miary złożoności

Podane powyżej miary złożoności są bardzo praktyczne. Możemy dla każdego systemu obliczeniowego stosunkowo łatwo oszacować potrzebną pamięć, złożoność funkcji (ilość tranzystorów w procesorze?) oraz czas obliczeń.

Gdy rozważamy złożoność problemów, bardziej interesuje nas to jak ta złożoność zmienia się dla różnych algorytmów (programów) i różnych ilości danych. Możemy przyjąć, że złożoność problemu jest wielomianowa, jeśli istnieje taki program rozwiązujący (obliczający) ten problem, że wraz ze wzrostem ilości danych żadna z wielkości: pamięć, czas i złożoność funkcji przejścia nie rośnie szybciej niż wielomianowo.

1. Złożoność funkcji logicznej

Najprostszym automatem dokonującym obliczenia jest urządzenie wejściowe połączone z urządzeniem wyjściowym, przy użyciu sieci (funkcji) logicznej. Złożoność takiej sieci można określić podając ilość stanów pamięci potrzebnych do zapamiętania parametrów i wyniku, oraz ilość elementów w sieci.

Jak pokazano w poprzednim rozdziale, możliwa jest zamiana każdego systemu iteracyjnego na maszynę z pamięcią obejmującą jedynie elementy wejścia. System iteracyjny jest w tym przypadku tożsamy z samą siecią logiczną - obliczaną w jednym kroku, bez dodatkowej pamięci. W tej sytuacji złożoność algorytmu zostaje przeniesiona w całości na funkcję przejścia.

Miarą złożoności może być ilość bramek logicznych z których tą funkcję skonstruowano.

Można także podjąć badania takiej złożoności z wykorzystaniem automatycznych metod optymalizacji funkcji logicznych, takich jak metoda tablic Karnaugh, czy metoda Quine'a-McCluskeya5.

2.Złożoność jako wielkość pamięci.

Zdefiniowanie miary złożoności w postaci wielkości pamięci nie jest tak oczywiste jak w przypadku funkcji logicznych. Jeśli zapiszemy wszystkie wyniki w pamięci to czy jeszcze można mówić o obliczeniach? Jednak analiza wpływu wykorzystania pamięci na szybkość algorytmów może być obiecującym obszarem badań. Warto też w tym miejscu zauważyć, że takie szersze spojrzenie na problem złożoności (nie tylko sieci ale i pamięć) staje się bardzo naturalne przy wykorzystaniu modelu obliczeniowego w postaci systemów iteracyjnych.

Złożoność w zadaniach trudnych

Jak wiadomo problemy NP to takie, w których znając rozwiązanie, możemy sprawdzić jego poprawność w czasie wielomianowym. Doskonale to pasuje do proponowanych w artykule miar złożoności (złożoność sieci logicznej i wielkości pamięci). Załóżmy, że zamiast zgadywać – mamy możliwość odczytania zbioru potencjalnych rozwiązań z pamięci i sprawdzenia które z nich jest poprawne w czasie wielomianowym. Problem problemów NP-zupełnych sprowadza się do tego, czy pamięć lub złożoność sieci w takim systemie muszą rosnąć wykładniczo.

Załóżmy, że mamy funkcję wyliczającą zbiór danych wynikowych dla zadanych zmiennych:

P(dane) = wynik

i możemy ja przedstawić jako złożenie dwóch funkcji:

P(dane) = F(U(dane)) = wynik

Czyli najpierw wyliczamy przy pomocy U możliwe wyniki, a potem filtrujemy wielomianowym algorytmem F wyniki poprawne dla P.

W pamięci komputera możemy zapamiętać wszystkie możliwe wyniki U(dane) dla określonego zakresu danych. Jeśli algorytm wyliczenia w oparciu o te dane będzie działał wielomianowo – to mamy komputer rozwiązujący wielomianowo problem dla pewnego zakresu danych.

Można stąd wysnuć wniosek, że zużycie pamięci jako miary wiąże się z ograniczeniem maksymalnego rozmiaru problemu (pamięć nie może rosnąć w nieskończoność).

 

Przypisy

1 Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach Princeton University, 2009 [http://theory.cs.princeton.edu/complexity/]

2 Definicję systemów iteracyjnych podał Z. Pawlak w książce „Maszyny matematyczne”, Warszawa 1970, s. 9. Współczesne ich omówienie (jednak bez ścisłych definicji) można znaleźć w opracowaniu: http://www.math.uni.opole.pl/~ebryniarski/sys_iter.pdf. Ścisłą definicję można znaleźć w Andrzej Blikle, „Matematyka a informatyka — konflikty i związki” [w: Informatyka, IX/1972, http://delibra.bg.polsl.pl/Content/3209/Nr%209_72.pdf]. Później Z. Pawlak stworzył bardziej złożony model maszyny programowanej [„A mathematical model of digital computers” ] (http://bcpw.bg.pw.edu.pl/dlibra/docmetadata?id=1709&from=publication)

3 http://osilek.mimuw.edu.pl/index.php?title=Z%C5%82o%C5%BCono%C5%9B%C4%87_obliczeniowa/Wyk%C5%82ad_2:_Inne_modele_dla_z%C5%82o%C5%BCono%C5%9Bci

4 Ściśle rzecz ujmując, funkcja przejścia wciąż będzie mieć taką samą złożoność jak pamięć (bo wszystkie komórki pamięci muszą w niej być jakoś połączone bramkami).

5 http://www.bryk.pl/teksty/studia/pozosta%C5%82e/informatyka/15816-minimalizacja_funkcji_logicznych.html

Page 1 of 3
  • Start
  • Prev
  • 1
  • 2
  • 3
  • Next
  • End
Bootstrap is a front-end framework of Twitter, Inc. Code licensed under MIT License. Font Awesome font licensed under SIL OFL 1.1.