• Nie Znaleziono Wyników

Na co dzień spotykamy algorytmy stosujące różnorodne techniki określane mianem sztucznej inteligencji.

Każdy z nas korzysta z wyszukiwarki internetowej, która stara się jak najlepiej dopasować wynik do naszych potrzeb. Silnik wyszukiwania ma w sobie wbudowane różne mechanizmy wykorzystujące najnowsze technologie, w tym sztuczną inteligencję. W programach pocztowych są zainstalowane filtry antyspamowe, klasyfikujące wiadomości na pożądane i te, które prawdopodobnie trzeba odrzucić. Algorytmy są trenowane na dużym zbiorze danych i ciągle udoskonalane. Dzwoniąc do firmy świadczącej usługi (np. dostarczającej internet czy sprzedającej towary online) możemy natrafić na wirtualnego konsultanta, który potrafi obsłużyć typowe zgłoszenia. Trudno sobie wyobrazić media społecznościowe bez rekomendacji treści i reklam. Inteligentne urządzenia określane etykietą „smart”, pojawiają się także w naszych domach. Coraz więcej osób decyduje się bowiem na zakup sprzętu sterowanego za pomocą głosu lub reguł algorytmicznych wprowadzonych do systemu. Powstają pytania:

Gdzie jeszcze można spotkać algorytmy związane ze sztuczną inteligencją? Jak działają takie algorytmy i czy można samodzielnie je zaimplementować?

Rysunek 1. Przykładowe zastosowania sztucznej inteligencji

Rozpoznawanie cyfr

Podejmijmy próbę implementacji algorytmu rozpoznawania cyfr pisanych ręcznie. Do tego celu będziemy wykorzystywać bazę MNIST (Modified National Institute of Standards and Technology database), w której zapamiętanych jest 70 tysięcy obrazów cyfr.

Rysunek 2. Fragment zbioru cyfr z bazy MNIST

54

Cyfrowa edukacja

54

Nauczanie informatyki

Sztuczna inteligencja na lekcji informatyki

Prezentowany algorytm oparty jest o sieć neuronową złożoną z kilku warstw i zostanie zaimplementowany w języku Python z użyciem dostępnych bibliotek. Komputerową realizację algorytmu można przygotować w środowisku Colab1. Usługa Colaboratory (czyli w skrócie „Colab”) umożliwia pisanie i uruchamianie kodu Python bezpośrednio w przeglądarce. Po zalogowaniu się na konto Gmail pracujemy w tzw. notatniku Colab.

Jest to specjalnie przystosowana wersja notatnika Jupyter2, znajdująca się na serwerach udostępnianych przez firmę Google. Tworzony przez nas notatnik składa się z komórek zawierających sformatowany tekst lub kod programu, który może być uruchamiany online. Można też dzielić się swoją pracą z innymi, podobnie jak innymi dokumentami Google.

Rysunek 3. Logo Google Colab

W kolejnych krokach przedstawimy proces powstawania implementacji algorytmu rozpoznawania cyfr.

Zacznijmy od instalacji potrzebnych bibliotek. Będziemy korzystać z biblioteki numpy, która wspomaga operację na dużych zbiorach danych, matplotlib do wyświetlania danych na wykresie, tensorflow oraz keras do budowy sieci neuronowej i operacji pomocniczych. W języku Python przygotowany jest instalator pakietów pip, z którego skorzystamy. Jeśli pracujemy na komputerze stacjonarnym, to wywołujemy polecenie w konsoli, natomiast w notatniku Colab wpisujemy polecenie poprzedzając je wykrzyknikiem.

Rysunek 4. Uruchamianie kodu w Colab

Jeśli chcemy uruchomić pojedynczą komórkę z kodem, klikamy w strzałkę lub naciskamy klawisze Ctrl + Enter.

Możemy też wykonać cały program, wybierając z menu notatnika Środowisko wykonawcze | Uruchom wszystko.

W pierwszym kroku programu następuje import modułów, które będziemy wykorzystywać do implementacji algorytmu. Dodatkowo pobieramy bazę MNIST.

import numpy as np import mnist

import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import Dense

from keras.utils import to_categorical

Każdy rekord bazy to obrazek przedstawiający jedną cyfrę od 0 do 9 zapisaną w formacie 28 x 28 pikseli w odcieniach szarości oraz etykieta 0…9 identyfikująca cyfrę. Dodatkowo zbiór podzielony został na dwie części:

do trenowania i testowania sieci neuronowej.

Rysunek 5. Przykładowy obraz cyfry 4 1 https://colab.research.google.com

2 https://jupyter.org

55

Cyfrowa edukacja

55

Nauczanie informatyki

55

Nauczanie informatyki

Katarzyna Olędzka

train_images = mnist.train_images() train_labels = mnist.train_labels() test_images = mnist.test_images() test_labels = mnist.test_labels()

Dane należy przygotować tak, aby mogły stanowić dane wejściowe do sieci neuronowej. Potrzebna jest normalizacja – przeskalowanie przedziału i zamiana na tablicę jednowymiarową.

Rysunek 6. Zbiór danych – każdy rekord to obraz cyfry i etykieta train_images = (train_images/255)-0.5

test_images = (test_images/255)-0.5

train_images = train_images.reshape((-1,784)) test_images = test_images.reshape((-1,784))

Sieć neuronowa w algorytmach sztucznej inteligencji jest wzorowana na ludzkim mózgu, w którym mamy struktury składające się z neuronów połączonych synapsami. Każdy węzeł – neuron przeprowadza własne stosunkowo proste obliczenia, a sieć, którą tworzą wszystkie neurony, zwielokrotnia potencjał tych obliczeń.

Grupy neuronów tworzą warstwy. Najczęściej przyjmuje się, że z pojedynczego neuronu istnieje połączenie do każdego neuronu warstwy następnej. Połączeniu przypisana jest waga, a do obliczenia wartości przechowywanej w neuronie potrzebujemy jeszcze tzw. funkcji aktywacji.

Rysunek 7. Pojedynczy neuron

Tak więc każdy neuron posiada wiele wejść i jedno wyjście. Proces uczenia polega na takim dostrajaniu wag połączeń między neuronami, aby otrzymać jak najlepsze wyniki. Wobec tego trzeba jeszcze określić algorytm modyfikowania parametrów oraz metodę obliczania błędu, z jakim sieć rozpoznaje obraz. Ponieważ proces jest powtarzany wielokrotnie, określa się także liczbę iteracji, zwaną liczbą epok.

56

Cyfrowa edukacja

56

Nauczanie informatyki

56

Nauczanie informatyki

Sztuczna inteligencja na lekcji informatyki

Rysunek 8. Schemat modelu sieci neuronowej

W naszym przykładzie będziemy budować sieć neuronową, która jest złożona z warstwy wejściowej, dwóch warstw ukrytych i warstwy wyjściowej. Warstwa wejściowa składa się z 784 neuronów, bo każdy obraz to 28 x 28 pikseli. Rozmiar warstw ukrytych można dobrać samodzielnie, w tym przykładzie przyjmiemy 64 neurony. Warstwa wyjściowa będzie złożona z 10 neuronów – bo otrzymujemy jedną z dziesięciu etykiet 0..9.

model = Sequential()

model.add(Dense(64,activation='relu',input_dim = 784)) model.add(Dense(64,activation='relu'))

model.add(Dense(10,activation='softmax'))

Następnie należy przeprowadzić kompilację zbudowanego modelu sieci neuronowej. Określamy sposób liczenia błędu i poprawiania parametrów.

model.compile(

optimizer = 'adam',

loss = 'categorical_crossentropy', metrics = ['accuracy']

)

Najbardziej czasochłonna część programu to trenowanie. Intuicja podpowiada nam, że im większa liczba iteracji, tym mniejszy błąd. Oczywiście kosztem czasu i zasobów sprzętowych, potrzebnych do wygenerowania modelu. Skoro jednak uczenie przeprowadzamy raz, a potem wiele razy będziemy wykorzystywać wypracowany model, warto na ten etap poświęcić więcej zasobów. W przedstawionym poniżej kodzie wykonujemy tylko 5 iteracji. Tak dobrana wartość daje zadowalające wyniki w krótkim czasie. Bez problemu można ją zwiększyć lub wywołać kod kilkukrotnie.

model.fit(

train_images,

to_categorical(train_labels), epochs = 5,

batch_size = 32 )

Na koniec czas na ewaluację – sprawdzenie, jak dobrze model rozpoznaje cyfry na innym zbiorze danych.

model.evaluate(test_images, to_categorical(test_labels))

57

Cyfrowa edukacja

57

Nauczanie informatyki

57

Nauczanie informatyki

Katarzyna Olędzka

Rysunek 9. Wynik rozpoznawania cyfr na zbiorze testowym. Pod każdym obrazkiem są dwie etykiety:

pierwsza z bazy, druga – wynik działania algorytmu.

Aby móc wykorzystać model w praktyce, zapisujemy wytrenowaną sieć.

model.save_weights('model.h5')

Zakończenie

Przedstawiony problem należy do klasyki algorytmów związanych ze sztuczną inteligencją. Inspiracją do przygotowania powyższego przykładu był materiał wideo Classify Handwritten Digits Using Python and Artificial Neural Networks3. Link do gotowej implementacji można znaleźć na stronie Programowanie w szkole4 w części dotyczącej sztucznej inteligencji. Zachęcamy do przygotowania podobnego Colabsa ze swoimi uczniami. Dzięki samodzielnej implementacji, uczymy się krok po kroku budować sieć neuronową, trenować ją i badać efektywność.

Potem można przejść do samodzielnie opracowanych zastosowań. Życzymy powodzenia :­)

3 https://www.youtube.com/watch?v=kOFUQB7u5Ck 4 https://programowanie.oeiizk.waw.pl/#!/sztucznainteligencja

58

Cyfrowa edukacja

58

Nauczanie informatyki

58

Nauczanie informatyki

Materiały edukacyjne przygotowane