Меню

TensorFlow ilə Artificial Intelligence, Machine Learning və Deep Learning-ə giriş

Bu sözlər son zamanlar ciddi səs-küyə səbəb olub. Əgər sizə də bu “kainat” maraqlıdırsa və niyə hamının məhz bu sözlərdən danışdığını bilmək istəyirsinizsə, o zaman bu məqalə sizin üçündür. Məqaləni oxuyaraq növbəti suallara cavab verə biləcəksiz:

•    Niyə Artificial Intelligence, Machine Learning və Deep Learning-i öyrənməlisiz
•    Əsas konseptlər və ənənəvi proqramlaşdırmadakı fərqlər 
•    AI, ML and Deep Learning nə ilə fərqlənir
•    "Hello world" Deep Learning proqramı TensorFlow framework-ilə necə yazılır

Mən bu sahədə ekspert deyiləm və sadəcə bildikləriyimi sizinlə bölüşürəm. Bu məqaləni Coursera-da bitirdiyim kurs əsasında hazırlamışam. Qeyd etmək lazımdır ki, bu sahənin konsepti çətin kodlaşdırma baxımından nisbətən asandır.

Niyə Artificial Intelligence, Machine Learning və Deep Learning öyrənməlisiz?

•    Proqramçı perspektivindən baxanda bu sahə yeni paradiqma yaradır. Onun vasitəsi ilə biz yeni növ problemləri həll edə bilərik. Halbuki bu, əvvəl mümkün deyildi və proqramlaşdırma baxımından çox çətin idi.
•    AI istifadəsi insan həyatının bir çox sahəsini dəyişdirə və təkmilləşdirə bilər. Əgər siz cəmiyyətə təsir etmək arzusundasınızsa, bu, ən doğru seçimdir.  
•    İndi AI hər bir sahədə mövcuddur. SME-lər verilən və website-da mövcud məlumata görə cavablar üçün chatbot-ları istifadə edir, 10 il öncə yalnız arzularımizda təsəvvür etdiyimiz özlərini idarə edən maşınları artıq avtomobil sənayesi ümumi yollarda test edir, Precision Smart Farming məhsuldarlığı artırır, Smart Home cihazlar evimizdə mühiti bizim istəklərimizə əsasən dəyişir. Bu sahənin sizə yaxın olub-olmamasını anlamaq üçün ən azından end-to-end layihəsi üzərində işləmək vacibdir.
•    Dünyada kifayət qədər AI proqramçı yoxdur: Sorğulara əsasən (2020 il) 25-26 milion  proqramçı arasında cəmi 300,000-si öz layihələrində AI istifadə edib. 
AI-la bağlı işlərə böyük təlabat var. Bu səbəbdən əgər siz bu sahədə ixtisaslaşmışsınızsa, bu karyera baxımından həm yüksək maaş, həm də yeni perspektivlər deməkdir.
 

Əsas konseptlər və ənənəvi proqramlaşdırmadan fərqləri
 

machine-learning

 


Şəkil 1

Proqram təminatını biz adətən daxil olan tələbləri kodlaşdıra biləcəyimiz hissələrə bölərək yaradırıq. Məsələn, bizə fond analitika proqram təminatını yaratmaq tapşırığı verilsə idi, qiymət və gəlirlərin nisbətini tapmaq üçün kodumuzda məlumatı data source-dan çəkərək, hesablamanı apararaq və nəticəni qaytararaq həll edərdik. (şəkil 1)

machine_learning2
 


Şəkil 2

Əgər bizə oyun yazmaq tapşırığı verilirsə, adətən qaydalar əvvəlcədən məlum olur. (şəkil 2) Top kərpicə dəyəndə qayıdır və kərpic yox olur. Əgər top ekranın aşağısına deyirsə, oyunçu canını itirir.

traditional-programming


Şəkil 3

Ənənəvi proqramlaşdırmanı biz bu diaqramla göstərə bilərik (şəkil 3): qaydalar və məlumatı daxil edirik, cavabları nəticə kimi alırıq. Qaydalar proqramlaşdırma dili vasitəsilə əks olunur, məlumat isə müxtəlif mənbələrdən gələ bilər. Məsələn, lokal dəyişəndən verilənlər bazasına kimi.

activity-recognition


Şəkil 4
 

İndi isə növbəti misala baxaq (şəkil 4): Fəaliyyətin tanınması (activity recognition). Əgər yerişi tanımaq üçün cihaz düzəltsə idik, onun kodunda bu sətrlər (şəkil 4 - 1ci nümunə) ola bilərdi.
Əgər üstəlik qaçışı təyin etsə idik sürətə görə şərt qoyub, onu da təyin edə bilərik (şəkil 4 - 2ci nümunə). 
Sürət şərtləri yenə dəyişərək, velosiped sürmə fəaliyyətini də tanıya bilərik (şəkil 4 - 3cü nümunə).
Və sonra bizə tapşırıq gəlir ki, cihazımızı təkmilləşdirmək lazımdır və o artıq qolf oynamağı da tanımalıdır. Artıq sürətə görə fəaliyyəti tanımaq konsepsiyası səhv olur, çünki qolf oynayanda biz əsasən hərəkət etmirik. İnsanlar fərqli sürətlə yeriyir və qaçırrlar, buna yolun relyefi də böyük təsir edir. Yəni yalnız sürətdən asılı olaraq fəaliyyəti təyin etmək sadəlöhvlikdir.  

 

machine-learning-rules


Şəkil 5

 

Machine learning ənənəvi proqramlaşdırmaya çox oxşayır, sadəcə oxlar dəyişir. (şəkil 5) Problemi qaydalarla təyin etmək əvəzinə, kompromisə gedirik. Çünki bu bəzi hallarda mümkün deyil.  Biz çoxlu nümunə seçirik  və hər nümunədə label-lardan (nişanlar) məlumat kimi istifadə edərək yerişi, qaçışı, hətta qolf oynamağın nə olduğunu alqoritmimizə göstəririk. Beləcə, cavabları və məlumatı daxil edəcəyik və qaydaları nəticə kimi alacağıq (inference).

 

activity-recognition2

 


Şəkil 6

Machine learning alqoritmi məlumatlar arasında xüsusi pattern-ları (şablonları) taparaq, məlumatların nə ilə fərqləndiyini özü təyin edir. (şəkil 6) Bu, yeni paradiqmanın ən gözəl və vacib özəlliyidir. Yəni köhnə işləri yeni üsulla həll etmək deyil. Çünki bu paradiqma əvvələr əlçatmaz olan yeni imkanlar yaradır.


AI, ML and DeepLearning nə ilə fərqlənir

artificial-intelligence


Şəkil 7

Artificial intelligence (süni zəka) termini kompüterin verdiyi nəticəyə aiddır. O nəyi isə “ağıllı” edirsə, süni zəkanı nümayış etdirir. AI termini problemin həll etmə üsulundan heç nə bəhs etmir.  Rule-based (qaydalara əsaslanan) və expert systems daxil olmaqla bir çox fərqli həll etmə üsulu tapmaq olar. Misal üçün, şahmat oynayan proqram təminatı: Bunu Rule-based, ya minimax tree search və digər yollarla həll etmək olar.
***
ML-in məqsədi statistik alqoritmlər, verilən məlumata əsasən kompüterlərdə öyrənməyi təmin etmək və nəticədə kopüterdən mümkün qədər dəqiq proqnoz almaqdır. ML AI-ın alt dəstidir, sadə desək AI-ı realizasiya etmək üçün bir üslubdur, eləcə də alqoritmlərə qərar vermə imkanı öyrədən məşq metodudur. Musiqi və video streaming servislərin recommendation (tövsiyə) sistemləri ML-in nümunəsidir.
Deep learning ML-in inkişafı nəticəsində yaranıb. DL alqoritmləri insan beyninin məlumatı emal etmək üsullarından ilhamlanaraq yaranıb. Necə ki, biz beynimizi müxtəlif növ məlumatlarda patternləri tapmaq və klasslara bölmək üçün istifadə edirik, eləcə də deep learning alqoritmlərini kompüterlər üçün eyni tapşırığı həll etmək üçün öyrətmək olar. Beyin adətən aldığı məlumatı deşifrə etməyə çalışır. Buna məlumat hissələrinə label bağlayaraq və onları kateqoriyalara bölərək nail olur. Beyin yeni məlumat alan kimi mənasını bilmədən, əvvəlcə məlumatı bildiyi hissələrlə müqayisə edir və eyni məntiqlə deepl learning alqoritmlər işləyir.
Deep learning və machine learning arasında incə fərq var. DL classification (təsnifat) üçün istifadə olunan xüsusiyyətləri avtomatik olaraq kəşf edə bilsə də, ML bu xüsusiyyətlərin əl ilə təmin edilməsini tələb edir. Bundan əlavə, ML-dən fərqli olaraq, DL yüksək səviyyəli maşınlara və dəqiq nəticələr əldə etmək üçün kifayət qədər böyük miqdarda təlim məlumatlarına ehtiyac duyur.

İndi isə patternləri aşkarlanması üçün istifadə olunan neural network-un (sinir şəbəkəsi) yaranma əsaslarına baxacayıq.  Neural network machine learning-in bir az daha inkişaf etmiş bir tətbiqidir və biz buna deep learning deyirik. Amma xoşbəxtlikdən, kod baxımından asandir. Bu səbəbdən birbaşa DL-dən başlayırıq və "Hello World" nümunəsinə keçirik.
 

"Hello world" Deep Learning proqramı TensorFlow framework ilə necə yazılır

hello-world-deep-learning


Şəkil 8

Əvvəlcə gəlin insan beyninin necə pattern-ləri tapdığını anlayaq. Bunun üçün rəqəmlərə baxaq (şəkil 8). X və Y arasında tənlik mövcuddur. Siz bu tənliyi tapa bilirsiz? 
Düzgün cavab Y=2X-1. Bəs siz onu necə tapdız? Ola bilsin siz gördünüz ki X 2,3,4 olanda  Y 3,5,7 bərabər olur, yəni Y X-dən daha tez artır. Ola bilsin Y=2X. Amma X=0 olanda Y=-1, yəni cavab Y=2X-1 ola bilər. Sonra bu tənliyi bütün dəyərlərlə yoxlayaraq əmin olursunuz ki tənliyi düz tapmısınız.
Təbriklər, siz beyninizdə Deep Learning alqoritminin əsaslarını təkrarladınız. İndi isə kodda bunun yazılma qaydalarına diqqət yetirək.
 

deep-learning-algorithm


Şəkil 9

Kodu Python dilində, TensorFlow framework-u və onun daxilində neural network üçün istifadə olunan Keras API vasitəsi ilə yazacayıq (şəkil 9).
Neural network sadəcə pattern-ləri aşkarlaya bilən funksiyalar toplusudur. Bu sahədə ilk addımlarda çoxlu yeni konsepsiyalarla rastlaşacaqsınız və kod yazdıqca onları tez bir zamanda anlayacaqsınız. 
Ən sadə neural network yalnız bir neuron-dan (neyron) ibarətdir. Birinci sətr neural network-u necə təyin etdiyimizi göstərir. Keras-da bir layer (təbəqə) əlaqəli neuron-ları təyin etmək üçün “Dense” funksiyası istifadə olunur.
Bizim nümunədə yalnız bir Dense var. Yəni yalnız bir layer və onun içində yeganə unit var. Yəni biz tək bir neuron təyin etmişik. Unit-lər layer-in çıxışında nə almaq istədiyimizi göstərir (bizim halda yalnız Y dəyəri). Neural network-un ilk layer-ində ona nə daxil edəcəyimizi input shape-lə göstəririk. Gördüyünüz kimi bizim halda input shape çox sadədir və yeganə dəyər X-dir.
Layer-lər ardıcıl təyin olunanda list şəkilində Sequential funksiyasına onları parametr kimi ötürürük. 

Yəqin ki, machine learning üçün riyaziyyat, hesablama və ehtimal nəzəriyəsini bilməli və istifadə etməli olduğunuzu eşitmisiz. Modellərinizi optimallaşdırmaq istədiyiniz zaman bunları başa düşmək həqiqətən vacibdir, lakin TensorFlow və Keras-da bunları həyata keçirən hazır, istifadə edə biləcəyimiz funksiyalar var. Onların arasında iki funksiya daha çox əhəmiyyət kəsb edir - loss və optimizer. İkinci sətr onları təyin edir.
Neural network-un X və Y arasındakı münasibətdən xəbəri yoxdur, o guess (fərz) edir.  Misal üçün NN guess edir ki Y=10X-1. Sonra o guess-in nə qədər yaxşı və ya pis olduğunu ölçmək üçün bildiyi məlumatı (biz nümunə kimi verdiyimiz X və Y-lər) istifadə edir. Loss funksiyası bunu ölçür, sonra bu məlumatı optimizer-ə ötürür. Optimizer loss-dan gələn məlumata əsasən hər yeni guess-in uyğun olmasını ölçür. Onun məqsədi isə hər yeni guess-in əvvəlkindən daha yaxşı olmasıdır. Guess-lər daha yaxşı olduqca dəqiqlik 100 %-ə yaxınlaşacaq və biz buna “convergence” (yaxınlaşma) deyirik.
Misalı həll etmək üçün loss “mean squared error”, optimizer isə SGD yəni “stochastic gradient descent”-dir. Bunlar haqda daha ətraflı TensorFlow dokumentasiyasında oxuya bilərsiz.

Növbəti sətrdə bildiyimiz məlumatı X və Y-ləri modelimizə göstəririk. Python-un numpy adlı library-sin istifadə edərək list tipli məlumatı asanlıqla alqoritmimizə göstərə bilirik. Biz iki list istifadə edirik: biri X-lər, digəri isə Y-lər üçün.

Məşq “fit” komandasında baş verir. Bu sətr icra edəndə model X dəyərlərini Y dəyərlərinə necə uyğunlaşdıracağını tapacaq. “epochs=500“ məşq dövrün beş yüz dəfə təkrarlanması deməkdir. Hər bir dövr öncə qeyd etdiklərimizdir: guess etmək, nəqədər yaxşı və ya pis oluduğunu loss funksiyası ilə ölçmək, sonra isə onun nəticəsini və əvvəlcədən verilən məlumatı istifadə edərək optimizer vasitəsi ilə yeni guess etmək. 

Məşq prosesi bitdikdən sonra modeldən yeni X-lərə  Y tapmaq üçün “predict” metodundan istifadə edə bilərik. Modelimiz X=10-u heç vaxt görməyib. Sizcə o cavab olaraq nə qaytaracaq? Düşünə bilərsiz ki, cavab 19 olacaq, çünki Y=2X-1 və bu düz cavabdır. Amma özünüz workbook-da kodu icra edəndə görəcəksiz ki, cavab 19-a çox yaxındır, amma tam 19 deyil.

Bəs niyə cavab dəqiq deyil? Nəticəyə təsir edən iki əsas səbəb var. Birinci səbəb məşq prosesi çox az məlumatla baş verdiydir. Yalnız altı ədəd X istifadə etmişdik. Bu altı ədəd xətti tənlik təşkil edir, amma zəmanət yoxdur ki hər bir X üçün Y=2X-1.
İkinci səbəb isə neural network-lar hər şeyə cavab tapmağa çalışdığından onlar ehtimaldan da istifadə edirlər. Əsasən siz cavabları ehtimal edərək, həll etdiyiniz məsələnin məntiqinə görə uyğunlaşdıracaqsınız. 

Bizim “Hello world” nümunəsi üçün Google Colab istifadə edəcəyik. Colaboratory (“Colab”) Google Research-un məhsuludur. O hərkəsə browserdə istənilən Python kodunu yazmaq və icra etməyə imkan verir və bu, machine learning, data analitika, təlim üçün çox rahat alətdir. Daha texniki desək, Colab, GPU'lar da daxil olmaqla hesablama resurslarına pulsuz giriş təmin edərkən istifadəsi üçün heç bir quraşdırma tələb etməyən bir Jupyter notebook xidmətidir. Colab-la işləməyə başlamaq üçün videonu izləyin

Nəhayət nəzəri hissəni bitirdik. İndi isə gəlin praktiki olaraq gördüyümüz kodu yazaq və sonra icra edək.
Çalışın epoch-ları dəyişin, modelə əlavə məlumat ötürün, fərqli loss və optimizer funksiyaları istifadə edin. Bütün parameterlər nəticəyə təsir edir. Unutmayın ki, Machine Learning və Deep Learning həmişə eksperimentlərə bağlıdır.