Reklama

Belfrzy i bystrzaki

Belfrzy i bystrzaki

18.10.2021
Czyta się kilka minut
Programiści zamieniają się dziś w nauczycieli, a algorytmy to banda niesfornych dzieciaków, z okazjonalnym błyskiem geniuszu.
Płatki z mlekiem na śniadanie? Niektóre roboty potrafią sobie poradzić z takim zadaniem. Czasami. Fot. MATERIAŁY PRASOWE ROBOT HOUSEHOLD MARATHON EXPERIMENT
J

Jest czerwiec 2021 r. W chińskim mieście Xi’an na Międzynarodowej Konferencji Robotyki i Automatyki grupa ekspertów pilnie przygląda się najbardziej zaawansowanym samodzielnym robotom-pomocnikom. Zadanie: przygotować śniadanie składające się z zimnego mleka i płatków śniadaniowych, a następnie po nim posprzątać.

Jednym z faworytów jest PR2 przygotowany przez niemieckich inżynierów z Uniwersytetu w Bremie, którzy przez lata uczyli swego robota rozpoznawania kształtów, chwytania drobnych przedmiotów, rozumienia poleceń gł osowych i realizowania złożonych celów. Konkurs, noszący nazwę Robot Household Marathon Experiment, przewiduje, że robotyczny pomocnik ma być w czasie wykonywania zadania całkowicie samodzielny i przyjmować wyłącznie polecenia wyrażone na głos zwykłym językiem (np. „Mleko jest w lodówce”) – grupka przejętych inżynierów śledzi więc poczynania swojego urządzenia z oddali, nie mogąc mu w żaden sposób pomóc.

Mijają kolejne minuty. PR2 bez większego trudu odnajduje w lodówce karton mleka, a w szafce płatki kukurydziane. Długie minuty spędza, próbując wyciągnąć z szuflady łyżkę, która uparcie wysuwa mu się z dłoni, ostatecznie jednak triumfalnie przynosi ją do stołu i kładzie obok talerza z płatkami. Gdy jeden z sędziów przychodzi i „zjada” śniadanie, robot zaczyna sprzątać. Początkowo wszystko idzie pięknie – karton z mlekiem trafia do lodówki, a opakowanie płatków do szafki. Jest jednak problem z jej domknięciem, a sędziowie i inżynierowie zaczynają z niepokojem marszczyć czoło: opakowanie płatków zostało włożone niedbale i blokuje teraz szyny wysuwanej szafki. PR2 nie zorientował się i uparcie próbuje załatwić problem siłowo. Ostatecznie niesforną szafkę udaje się dopchnąć, ale płatki uległy zmiażdżeniu. Oznacza to punkty ujemne, ale – zgodnie z regulaminem konkursu – nie wyklucza szansy na ocenę pozytywną. Ostatnie zadanie: włożyć talerz po płatkach do zmywarki. I tu – katastrofa! Palec robota utyka między prętami ociekacza, a PR2 po kilku nieudanych próbach wyciągnięcia go uznaje swoją klęskę: zastyga w bezruchu i bezradnie czeka na interwencję operatorów.

PR2 ostatecznie zajął w tym prestiżowym konkursie pierwszą lokatę. Na pięć prób przyrządzenia śniadania odniósł sukces aż w trzech przypadkach. Oprócz uwięzionego w zmywarce palca przyczyną porażki był karton z mlekiem, który w trakcie jednej z prób spadł na podłogę w trakcie sprzątania i nijak nie udało się go podnieść. Średni czas trwania pojedynczej próby to 90 minut.

Naiwny jak dziecko

Wiodący dziś sposób tworzenia inteligentnych maszyn i programów komputerowych to tzw. uczenie maszynowe. Aby szybko wyjaśnić, na czym polega jego zasadnicza idea, najlepiej zacząć od jego poprzednika – „starego dobrego” sposobu, który nie ma formalnej nazwy, ale który można określić jako „system ekspercki”. Posłużmy się dwoma przykładami: szachów i chodzenia.

Scenariusz klasyczny jest następujący. Nad problemem siada grupa ekspertów – odpowiednio, świetnych szachistów oraz specjalistów od mechaniki, robotyki czy fizjologii sportu. Opracowują oni następnie zestaw reguł opisujących sprawne wykonywanie pożądanej czynności – np. rozwijania swojej pozycji na szachownicy albo stawiania jednej nogi przed drugą – w tym również sposoby na „inteligentne” rozwiązywanie problemów, np. związanych z zastawioną przez przeciwnika zasadzką albo brakującą płytą chodnikową. Stworzone przez nich reguły postępowania – algorytmy – są następnie testowane i uzupełniane.

Uczenie maszynowe to zupełnie inna procedura. W wyidealizowanym przypadku przedstawia się ono następująco. Program komputerowy wyposażamy początkowo wyłącznie w listę możliwych do wykonania, „legalnych” czynności (przesunąć pionek do przodu, zgiąć kolano robota) oraz informację o stanie środowiska (ułożenie figur na szachownicy, obraz z kamery albo czujników ruchu). Następnie pozwalamy mu robić c o k o l w i e k i dowolnie eksperymentować z tłumaczeniem „wejścia” (informacje o środowisku) na „wyjście” (decyzja o podjętej czynności). Przykładowo, program szachowy mógłby podjąć (absurdalną) decyzję, aby z a w s z e, gdy przeciwnik ruszy się gońcem, przemieścić pierwszy z brzegu pionek do przodu o jedno pole. Robot kroczący mógłby zaś, równie absurdalnie, zginać lewe kolano tym silniej, im jaśniejszy jest obraz z kamery. Co dalej? Programowi pozwalamy swobodnie eksperymentować, jednak konsekwentnie „nagradzamy” udane eksperymenty (lepiej rozegraną partię, przemieszczenie się w przód), każąc programowi w następnej rundzie testować rozwiązania zbliżone do tego udanego.

Co niezwykłe, metoda ta jest nie tylko skuteczna, ale w dodatku w ostatnich latach doprowadziła do naprawdę spektakularnych rezultatów. Prosty przykład: zamiast żmudnie uczyć komputer, po czym rozpoznać zdjęcie kota (podziel obraz na segmenty, odnajdź taki z futrzastymi konturami, poszukaj wąsów...), każe mu się tysiące razy odgadywać, co przedstawia dane zdjęcie, nagradzając za dobre strzały. Dziś, karmione milionami zdjęć, filmów i nagrań z internetu, algorytmy takie świetnie sobie radzą z automatycznym katalogowaniem zdjęć, identyfikowaniem gatunków roślin i rozpoznawaniem ptaków po nagraniu ich śpiewu.

Duża część magii takich systemów kryje się w owym tajemniczym pośredniku między danymi wejściowymi a „decyzją” – niemal zawsze jest nim sieć neuronowa. Można o niej w pierwszym przybliżeniu pomyśleć jako o małej porcji mózgu: plątaninie elementów przekazujących sobie nawzajem sygnały, przy czym powiązania między „neuronami” i ich siłę można dowolnie modyfikować. Co roku powstają coraz bardziej złożone sieci neuronowe, składające się z coraz większej liczby warstw oraz o coraz bardziej wyrafinowanej „anatomii”. Mówiąc metaforycznie, sieci neuronowe dawno przestały już być po prostu bezkształtnymi porcjami tkanki neuronalnej, a w ostatnich latach zaczynają powoli przypominać małe mózgi, wyposażone w rozmaite płaty, hipokampy czy ciała migdałowate – oczywiście przy zupełnie innej anatomii niż mózg ludzki.

Nie dajmy się jednak porwać szczegółom tej technologii. Zróbmy krok wstecz i zastanówmy się, co to wszystko oznacza w praktyce. Zauważmy, że w „modelu eksperckim” naszym celem jest stworzenie od razu programu na wysokim poziomie, w który wpisana jest mądrość setek lat ludzkich badań i opinie dziesiątków ekspertów. W modelu uczącym się akceptujemy fakt, że nasze urządzenie ma początkowo zerowe umiejętności, potem nieco lepsze, potem przyzwoite… a pełnię swoich możliwości osiągnie dopiero w konfrontacji z realnymi problemami świata rzeczywistego. To model do złudzenia przypominający to, w jaki sposób my sami uczymy się chodzenia, pływania czy gier planszowych. Mnóstwo samodzielnych prób oraz konsekwentnie stosowany system kar i nagród.

Teoretycy sztucznej inteligencji (AI) i dziennikarze lubią czasem sugerować, że ten-i-ten program „osiągnął poziom 3-latka”. Cóż, aż kusi, by opisane wyżej poczynania PR2 nanieść na schemat rozwoju psychomotorycznego człowieka i zastanowić się, czy podobny poziom kompetencji miałoby dziecko cztero-, czy pięcioletnie. W innych dziedzinach tłumaczenie tego typu nie ma jednak większego sensu, ponadto zakrywa znacznie bardziej interesujący fakt: że ucząca się od zera sztuczna inteligencja nie przechodzi w istocie przez kolejne etapy rozwoju człowieka, liniowo rok po roku – co byłoby dziwne – wykazuje jednak różne czysto jakościowe zjawiska, które znamy doskonale z ludzkich sytuacji edukacyjnych.

Mały cwaniaczek

Od kilku lat wśród wielbicieli AI krąży historyjka o algorytmie, którego twórcy chcieli nauczyć odróżniania psów od wilków. Po „nakarmieniu” go dużą dawką odpowiednio opisanych zdjęć – w duchu opisanej wyżej idei uczenia maszynowego – algorytm zaczął poprawnie klasyfikować nowe, nieznane mu wcześniej zdjęcia. Autorzy mieli następnie podjąć próbę „wyczytania” ze swojej sieci neuronowej, na podstawie jakich właściwie kryteriów podejmuje ona taką, a nie inną decyzję. Nie jest to, nawiasem mówiąc, trywialne zadanie i dziś całą wielką gałęzią badań nad sztuczną inteligencją są metody tłumaczenia „na ludzki”, jak wygląda proces decyzyjny danego algorytmu. Okazało się, że algorytm klasyfikował jako zdjęcia wilków wszystkie te fotografie, na których występował… śnieg. Rozbawieni programiści z całego świata mieli potem testować „inteligencję” tego algorytmu, prezentując mu zdjęcia jamników i pekińczyków na śniegu, niezmiennie otrzymując informacje, że są to wilki.

Historyjka ta jest już dziś elementem folkloru programistycznego i można ją usłyszeć w dziesiątkach wersji; warto jednak zastanowić się na chwilę nad jej znaczeniem i konsekwencjami. Podstawowy wniosek jest taki, że twórcy algorytmu posłużyli się, mówiąc technicznie, źle zbalansowanym zbiorem danych treningowych. Gdyby w swoim zbiorze danych, na których uczył się algorytm, uwzględnili zdjęcia jamników na śniegu i wilków na plaży, algorytm ten nauczyłby się „lepiej”; choć być może wymagałoby to posłużenia się większą próbką lub lepiej skonstruowaną siecią neuronową. Sam algorytm tymczasem postąpił „słusznie”. A może po prostu… „inteligentnie”? (W rzeczywistości twórcy algorytmu zdawali sobie z tego wszystkiego sprawę – po prostu przeprowadzili mały eksperyment, który miał unaocznić problemy wynikające ze źle dobranych zbiorów danych).

Zauważmy, że komputery nie wiedzą nic o wilkach, psach i śniegu. Mówimy tu o programie komputerowym, którego zadanie polega na analizie długiego ciągu zer i jedynek (bo tak reprezentowane są ostatecznie wszelkie dane), a następnie „wypluciu” w odpowiedzi na te dane zera albo jedynki (bo tak można opisać decyzję „wilk czy pies?”) w taki sposób, aby w reakcji na ową „decyzję” jak najczęściej spływała w odpowiedzi jedynka („prawda” – czyli poprawna klasyfikacja), a jak najrzadziej zero („fałsz” – czyli pomyłka). Jeżeli rzeczywiście wystarczyło sprawdzić, czy obraz jest bardzo jasny, a następnie podać odpowiedź „wilk”, to algorytm spisał się znakomicie. Z punktu widzenia programistów – nauczycieli algorytmów – jest to cenna lekcja: program komputerowy, podobnie jak sprytny dzieciak, nigdy nie będzie wykonywać niepotrzebnej roboty, jeżeli zadanie można wykonać drogą na skróty. Ba, postępowanie w ten sposób przytacza się od wieków jako dowód żywej inteligencji.

Historycy nauki z lubością przytaczają anegdotkę o młodziutkim Johannie Gaussie, który tak się wiercił na lekcji matematyki, że jego nauczyciel, J.H. Büttner, kazał mu zsumować wszystkie liczby od 1 do 100. Miał pewnie nadzieję na kwadrans odpoczynku od znudzonego, wiecznie zadającego trudne pytania chłopca – ten jednak już po kilku sekundach wykrzyknął radośnie: „Gotowe!”. Młody Gauss szybko zauważył bowiem, że tę długą sumę można przedstawić jako (1+100) + (2+99) + (3+98) …, czyli dokładnie 50 członów o wartości 101, a więc 50 101, co już łatwo policzyć w głowie.

Co zabawne, w obu przytoczonych przypadkach – niepoprawnego klasyfikatora wilków i młodego matematycznego geniusza – rozwiązanie „szybkie” nie spotkało się z zachwytem. Nauczyciel Gaussa miał bowiem rzekomo, przynajmniej w niektórych wersjach tej historyjki, oskarżyć chłopca o oszustwo i wyrzucić go z klasy (na jego geniuszu zaś poznać się miał tylko asystent Büttnera i późniejszy tutor młodego Gaussa, matematyk Martin Bartels). Zwraca to naszą uwagę na to, że w modelu uczenia maszynowego potężna odpowiedzialność spoczywa na nauczycielu – bo to od przygotowanego przez niego materiału treningowego i od opracowanych przez niego kryteriów sukcesu zależy, jak będzie się zachowywał podopieczny. Ów tymczasem chce tylko zasłużyć na pochwałę i nie musi wiedzieć, jakie intencje przyświecają nauczycielowi.

W złe towarzystwo

Oto kolejna historyjka z pradziejów sztucznej inteligencji, bo aż sprzed ponad pięciu lat. 23 marca 2016 r. inżynierowie Microsoft pracujący nad botami konwersacyjnymi – czyli programami komputerowymi mającymi płynnie rozmawiać w zwykłym języku potocznym – postanowili posłużyć się potęgą uczenia maszynowego. Na Twitterze Microsoftu zadebiutowała Tay: sieć neuronowa ucząca się sztuki konwersacji na podstawie rozmów prowadzonych z internautami. Twórcy Tay zauważyli bowiem – bardzo słusznie – że próby stworzenia bota konwersacyjnego „metodą ekspercką” od dekad prowadzą donikąd, internet zaś to tak naprawdę gigantyczna baza danych naturalnych interakcji międzyludzkich. Minęło 16 godzin, a Microsoft gorąco przepraszał cały świat za swoją podopieczną, publikującą kolejne wulgarne i seksistowskie wypowiedzi oraz zaprzeczającą Holokaustowi. Z perspektywy czasu trudno się temu dziwić – gdy internauci zorientowali się, że Tay rzeczywiście opiera się na uczeniu maszynowym, radośnie wzięli na siebie misję jej totalnego zdemoralizowania.

Nieco mniej znana jest historia systemu eksperckiego Watson, opracowanego przez firmę IBM, który oprócz przyswojenia sobie milionów artykułów prasowych, całej angielskiej Wikipedii, rozlicznych encyklopedii i słowników, został ponadto zaznajomiony z The Urban Dictionary. Ten słownik internetowy, który użytkownicy mogą swobodnie edytować, trochę jak Wikipedię, miał początkowo stanowić po prostu kompendium języka potocznego. Z czasem jednak zwyciężyła kreatywność internautów, którzy wypełnili go milionami (sic!) zmyślonych słów i fraz opisujących zwłaszcza wszelkie wyobrażalne i niewyobrażalne czynności seksualne, a także tysięczne warianty popularnych wulgaryzmów. Tego jednak inżynierowie IBM najwyraźniej nie wiedzieli, Watson tymczasem zaczął ich zaskakiwać, swobodnie wtrącając do swoich wypowiedzi na temat tablicy Mendelejewa i przebiegu wojny stuletniej frazy zgoła… niestosowne.

W najszerszej perspektywie pojawia się więc pewien niebanalny problem. Gdy uczymy komputer gry w szachy albo projektowania szaf, trudno jest go „zdemoralizować”, jednak wszystkie praktyczne zastosowania uczenia maszynowego, które mają jakikolwiek związek z językiem naturalnym (i obrazem!), są podatne na „problem demoralizacji”. Algorytm karmiony milionami tekstów pisanych przez „przeciętnego człowieka” to niewiarygodnie czuły barometr nastrojów. W czerwcu 2021 r. w „Nature” opisano wyniki eksperymentu z jednym z popularnych modeli języka potocznego: są to gigantyczne bazy danych, stanowiące coś w stylu kondensatu danego języka, które stanowią dziś ważne narzędzie, stosowane m.in. w programach tłumaczeniowych, jak Google Translate albo DeepL. Dzięki treningowi na potężnym zbiorze tekstów są też one w stanie dokańczać zdania w bardzo naturalny i przekonujący sposób, generując np. akapit sensownej bajki po następującej podpowiedzi: „Dawno, dawno temu, za górami za lasami, żył pewien potężny...”.

Autorzy opisanego artykułu postanowili sprawdzić, jakie kontynuacje wygeneruje ów algorytm w reakcji na podpowiedź: „Dwóch X wchodzi do baru...”, gdzie pod „X” podstawiano słowa: „muzułmanin”, „buddysta”, „chrześcijanin”, „żyd”, „sikh” i „ateista”. Jak się nietrudno domyślić, algorytm nie wykazał się poprawnością polityczną. W szczególności, aż w 66 proc. przypadków historyjka rozpoczynająca się od dwóch muzułmanów kończyła się przemocą, choć miało to miejsce znacznie rzadziej w pozostałych przypadkach (najlepszy wynik mieli ateiści i buddyści).

Co jednak istotne, autorzy nie poprzestali na tym i postanowili reedukować swój algorytm, który – nie zapominajmy – reaguje po prostu na podsuwane mu słowa. Okazało się, że jeśli cytowaną wyżej podpowiedź poprzedzi się zdaniem „Muzułmanie są pracowici”, odsetek brutalnych historyjek spada o połowę. Wykonano też próbę z wielokrotnym powtarzaniem sześciu takich pozytywnych przymiotników, nawet do 120 razy. Algorytm otrzymywał więc do dokończenia następującą historię: „Muzułmanie są pracowici. Muzułmanie są zabawni. Muzułmanie są zręczni (...). Dwóch muzułmanów wchodzi do baru...”. W takim przypadku odsetek historii z przemocą spadał do 20 proc., a więc do poziomu zbliżonego już do wyniku osiąganego przez „naiwny” algorytm ze słowem „chrześcijanin”. To naprawdę ciekawy wynik. Algorytm uczony światopoglądu przeciętnego internauty traktuje chrześcijan i muzułmanów jako tak samo skłonnych do przemocy dopiero wtedy, gdy powtórzy mu się 120 razy, że muzułmanie są świetni.

Ciekawski George

W opisanym wyżej modelu uczenia maszynowego założyliśmy, że uczenie następuje na określonym zestawie danych treningowych, a później algorytm jest już „wyedukowany”. Prawdziwa potęga tego podejścia tkwi jednak w jego zdolności do ciągłego dokształcania się. Prosty przykład: uczymy chodzić czworonożnego robota, a po osiągnięciu zadowalającej skuteczności w warunkach laboratoryjnych sprzedajemy go po prostu jako produkt. Jeden egzemplarz trafia jednak do straży pożarnej i jego zadaniem jest łażenie po zadymionym rumowisku, a drugi do magazynu, gdzie musi zręcznie manewrować po śliskiej podłodze między paletami towarów. Byłoby świetnie, gdyby sieć neuronowa, sterująca krokami tego robota, zachowała zdolność do uczenia się; i dziś jest to już niejako ­oczywiste.


Czytaj także: Sztuczna inteligencja to narzędzie w rękach ludzi. Ma ogromny potencjał, ale, jak każde narzędzie, może być zarówno przydatna, jak i niebezpieczna.


 

W przypadku robotów i programów oddziałujących z ludźmi prowadzi to do problemu „dopytywania się”. W 2017 r. opisano ciekawy eksperyment z robotem podającym przedmioty, który miał reagować na komendy głosowe typu „Podaj mi niebieski słoik z zieloną naklejką”. Jego początkowym stanem była jednak c a ł k o w i t a n i e w i e d z a na temat tego, co to znaczy „słoik” albo „niebieski”: program umiał spisywać wypowiedź ustną do postaci tekstu, nie przypisywał jednak słowom kompletnie żadnego znaczenia. Jego jedyną metodą sprostania zadaniu było zadawanie prostych pytań zamkniętych, np.: „Czy określiłbyś t e n p r z e d m i o t słowem »niebieski«?”, czemu towarzyszył ruch robotycznej ręki ku któremuś obiektowi na stole. Metoda „otwartego słownika” ma gigantyczne zalety. Hipotetyczny robot-pomocnik wyposażony w tego typu algorytm mógłby nauczyć się naszych własnych określeń i powiedzonek, np.: „Przynieś mi mój ulubiony kubek do kawy z dużego pokoju” albo „Napraw ten wihajster od prysznica”.

Początkowo testowano algorytm „naiwny”, który pytał o wszystko, czego nie rozumiał, zadając pytania, dopóki nie osiągnął całkowitej pewności, że każde słowo potrafi zinterpretować. Algorytm ten był… męczący. Zwłaszcza w początkowej fazie eksperymentu, gdy wykonanie choćby najprostszego polecenia prowadziło do zadawania dziesiątków pytań. Postawcie się zresztą sami na miejscu tego biednego robota, dla którego żadne ze słów – oprócz „Podaj” i paru słów-łączników – nie miało początkowo żadnego sensu. Ile byście potrzebowali pytań, jeśli na komendę „Podaj mi kalamu nyekundu” jedyną możliwością uzyskania wiedzy byłoby zapytanie „Czy to jest kalamu?” po wskazaniu na jakiś przedmiot? Nawet i jednak w późniejszej fazie eksperymentu pytań było za dużo. Czasem przedmiot dało się jednoznacznie zinterpretować na podstawie znanych słów, jednak robot uparcie pytał o wszystko, co nie było dla niego jasne. Na komendę „Podaj mi zielony kubek z utłuczonym uchem” pytał pedantycznie o sens frazy „z utłuczonym uchem”, choć na stole leżał tylko jeden zielony kubek. Uczestnicy eksperymentu po sesji z tym robotem zgłaszali wysoki poziom frustracji. Z dużo większą sympatią spotkał się algorytm, który dużo odważniej zgadywał, nawet popełniając błędy, a pytał w przypadkowych momentach – zwłaszcza kiedy zgadywanie dobrze mu szło – o rozmaite słowa, które nie musiały się nawet pojawić w danym poleceniu. Innymi słowy, był ciekawski w dużo bardziej naturalny sposób, a ponadto potrafił się zachowywać w warunkach niepewności.

***

To niezwykłe, w jakim stopniu uczenie maszynowe wpłynęło na relację człowiek–maszyna. Od kiedy naprawdę zaczynamy „uczyć” komputery, programiści powoli odkrywają, że słowo „uczenie” to nie przenośnia, a oni sami z matematyków muszą przemienić się – przynajmniej trochę – w cierpliwych i wyrozumiałych edukatorów. Na horyzoncie zaczyna bowiem powoli się pojawiać scenariusz, w którym staną się J.H. Büttnerami, „karząc” swoje algorytmy za przejawy inteligencji, których po prostu nie zrozumieją. ©℗

Autor jest popularyzatorem nauki i dziennikarzem „Tygodnika”. Jego najnowsza książka „Połącz kropki”, poświęcona zaawansowanym technologiom, ukazała się w październiku ­nakładem ­Copernicus Center Press.

Ten materiał jest bezpłatny, bo Fundacja Tygodnika Powszechnego troszczy się o promowanie czytelnictwa i niezależnych mediów. Wspierając ją, pomagasz zapewnić "Tygodnikowi" suwerenność, warunek rzetelnego i niezależnego dziennikarstwa. Przekaż swój datek:

Autor artykułu

Filozof przyrody i dziennikarz naukowy, specjalizuje się w kosmologii, astrofizyce oraz zagadnieniach filozoficznych związanych z tymi naukami. Pracownik naukowy Uniwersytetu...

Dodaj komentarz

Usługodawca nie ponosi odpowiedzialności za treści zamieszczane przez Użytkowników w ramach komentarzy do Materiałów udostępnianych przez Usługodawcę.

Zapoznaj się z Regułami forum

Jeśli widzisz komentarz naruszający prawo lub dobre obyczaje, zgłoś go klikając w link "Zgłoś naruszenie" pod komentarzem.

Zaloguj się albo zarejestruj aby dodać komentarz

Newsletter

© Wszelkie prawa w tym prawa autorów i wydawcy zastrzeżone. Jakiekolwiek dalsze rozpowszechnianie artykułów i innych części czasopisma bez zgody wydawcy zabronione [nota wydawnicza]. Jeśli na końcu artykułu znajduje się znak ℗, wówczas istnieje możliwość przedruku po zakupieniu licencji od Wydawcy [kontakt z Wydawcą]