Makine Öğrenimi ve Sinir Ağları - sayfa 65

 

Python Temelleri - Bölüm 01


Python Temelleri - Bölüm 01

Ben Dr. Soper ve bugün Python programlama dilinin temelleri üzerine üç kapsamlı dersten ilkini sunma zevkini yaşıyorum. Python programlamanın her detayını birkaç videoda ele almak imkansız olsa da, bu üç dersin sonunda, Python programlama yolculuğunuzu anlamak ve bu yolculuğa çıkmak için yeterli bilgi edinmiş olacaksınız.

Bu dersler boyunca, etkileşimli programlama ve veri keşfi için güçlü bir araç olan Jupyter Not Defterlerini kullanacağız. Jupyter Defterlerine aşina değilseniz, Python programlamaya dalmadan önce bu ortama alışmak için bu serideki bir önceki videoyu izlemenizi şiddetle tavsiye ederim.

Bu derste öğreneceklerinize genel bir bakış sunarak başlayalım. Bu videonun sonunda, Python'un aşağıdaki yönleri hakkında bilgi edinmiş olacaksınız:

  1. Metin görüntüleme: Ekranda metin göstermek için print() işlevini nasıl kullanacağımızı öğreneceğiz. Python'daki metin, onu programlama komutlarından ayırmak için tek tırnak içine alınır.

  2. Değişkenler: Değişkenler, bir bilgisayarın belleğinde sembolik olarak adlandırılan depolama konumlarıdır. Gerektiğinde değiştirilebilen değerleri tutarlar. Değişkenleri nasıl oluşturacağımızı ve metin, tamsayı veya kayan değişken olsun, onlara nasıl değer atayacağımızı keşfedeceğiz.

  3. Aritmetik operatörler: Python, değişkenler üzerinde matematiksel işlemler gerçekleştirmek için çeşitli aritmetik operatörler sunar. Toplama, çıkarma, çarpma, bölme, üs alma ve modulo işlemlerini ele alacağız.

  4. Karşılaştırma operatörleri: Karşılaştırma operatörleri, iki değeri karşılaştırmamıza ve aralarındaki ilişkiyi belirlememize olanak tanır. "Eşittir", "eşit değildir", "büyüktür", "küçüktür", "büyüktür veya eşittir" ve "küçüktür veya eşittir" gibi operatörleri öğreneceğiz.

Ders boyunca, bu Python becerileri ve özellikleri hakkındaki anlayışınızı sağlamlaştırmak için örnekler ve gösterimler kullanacağız. Python'da metnin nasıl görüntüleneceğini tartışarak başlayalım. Bir metin satırını göstermek için print() işlevini kullanırız. Görüntülemek istediğimiz metin, tek tırnak içinde print() işlevine bir argüman olarak iletilir. Ek olarak, "\n" sembolünü kullanarak satır sonları ekleyebiliriz. Pound işareti (#) ile gösterilen yorumlar yalnızca insan kullanımı içindir ve kod bölümlerinin açıklanmasına yardımcı olur. Python, kodu yürütürken yorumları yok sayar.

Bu teknikleri göstermek için, bir Jupyter Not Defteri içindeki bir kod hücresini ele alalım. Kod hücresi, "Merhaba, benim adım Dan!" metnini görüntülemek için print() işlevini kullanır. ekranda. Başka bir örnek, tek bir print() işlev çağrısında birden fazla metin satırı görüntülemek için "\n" kullanımını gösterir.

Değişkenlere geçersek, bunlar bir bilgisayarın belleğindeki depolama konumları olarak adlandırılır. Değişkenler her türlü veriyi tutabilir. Python'da yeni bir değişken oluşturmak için eşittir işaretinin sol tarafına adını, sağ tarafına da değerini yazarak ona bir değer atıyoruz. Bir kod hücresinde 'Delicious Nachos' değeri ile "product_name", 33 değeri ile "quantity_sold" ve 12,99 değeri ile "unit_price" gibi değişkenleri bildirebiliriz. Daha sonra print() işlevini ve birleştirme işlemini kullanarak bu değişkenlerin değerlerini yazdırabiliriz.

Alternatif olarak, değişken değerler için yer tutucularla aynı sonucu elde etmek için format() işlevini kullanabiliriz. Bu, istenen çıktı metnini tanımlamamıza ve değişken konumları kaşlı ayraçlar içinde belirtmemize izin vererek süreci basitleştirir. Aritmetik operatörleri göstermek için toplama için "+", çıkarma için "-", çarpma için "*", bölme için "/", üs alma için "**" ve modulo işlemi için "%" gibi simgeler kullanıyoruz. Bu operatörler değişkenler üzerinde matematiksel hesaplamalar yapar.

Umarım hepiniz harika bir gün geçiriyorsunuzdur. Adım Dr. Soper ve bugün Python programlama dilinin temelleri üzerine üç derslik bir serinin ilk bölümünü sunma zevkini yaşıyorum. Şimdi, sadece birkaç videoda Python programlamanın her detayını ele alamayacağımı belirtmek önemlidir. Ancak, bu üç dersi tamamladığınızda, Python projelerini anlamak ve bunlarla çalışmaya başlamak için yeterli bilgiyi edinmiş olacaksınız.

Bu dersler boyunca, tüm örnekleri gerçekleştirmek için bir Jupyter Notebook kullanacağım. Jupyter Not Defterlerine aşina değilseniz, Python programlama dünyasına dalmadan önce bu serideki bir önceki videoyu izlemenizi şiddetle tavsiye ederim. Daha fazla uzatmadan, bu derste öğreneceklerinize kısaca bir göz atalım.

Bu videonun sonunda, Python'un aşağıdaki yönleri hakkında iyi bir anlayışa sahip olacaksınız:

  1. Metin gösteriliyor
  2. Değişkenler
  3. Aritmetik operatörler
  4. Karşılaştırma işleçleri

Python programlama dilinin kavramlarını ve özelliklerini kavramanıza yardımcı olacak çok sayıda açıklayıcı örnek ve gösterimle bu konuların her birini ayrıntılı olarak inceleyeceğiz. Python'da metnin nasıl görüntüleneceğini öğrenerek başlayalım. Python'da bir metin satırı görüntülemek için print() işlevini kullanırız. Görüntülemek istediğimiz metin, tek tırnak içine alınmış olarak print() işlevine bir argüman olarak iletilir. Python'da, değişmez metin dizelerini tek tırnak içine almak alışılmış bir durumdur. Bu, Python'un metin dizeleri ile diğer metin tabanlı programlama komutlarını ayırt etmesine yardımcı olur.

Aşağıdaki örnekte, print() işlevinden önce diyez işareti (#) ile başlayan bir satır göreceksiniz. Bu satıra yorum denir. Yorumlar yalnızca insan kullanımı içindir. Belirli bir kod bölümünün amacını anlamamıza yardımcı olurlar ve başkalarının kodumuzu anlamasını kolaylaştırırlar. Python, yorumları yürütülemez ifadeler olarak kabul ederek yok sayar. Dolayısıyla, kodun işlevselliğini etkilemezler. Metin çıktınıza bir satır sonu eklemek istiyorsanız, çıkış sırasını \n (yeni satır) kullanabilirsiniz. Bu, o noktada bir satır sonu ekleyecektir.

Şimdi bu tekniklerin bir gösterimini görelim. Bu not defterinin ilk kod hücresinde, ekranda bir satır metin görüntülemek için print() işlevini kullanan basit bir örneğimiz var. Çalıştır düğmesine tıkladığınızda "Merhaba, benim adım Dan!" görüntülenecektir. Bir sonraki kod hücresinde, print() işlevine yapılan tek bir çağrıyla birden çok metin satırını görüntülemek için \n yeni satır sembolünü kullanacağız. Kodu çalıştırdıktan sonra, Python her iki metin satırını da ekrana yazdıracaktır. Artık metin görüntülemeyi ele aldığımıza göre, Python'daki değişkenlere geçelim.

Değişken, bir bilgisayarın belleğinde sembolik olarak adlandırılmış bir depolama konumudur. Her değişkenin, gerektiğinde değiştirilebilen bir adı ve değeri vardır. Değişkenler, bir programdaki verileri takip etmek için inanılmaz derecede faydalıdır. Örneğin, bir konser için satılan biletlerin sayısını saklamak için bir değişken kullanabilirsiniz. Her ek bilet satıldığında, değişkenin değerini doğru sayımı yansıtacak şekilde güncelleyebilirsiniz.

Python'da değişkenler, metin, tamsayılar veya değişkenler (ondalıklı sayılar) gibi herhangi bir türde veri tutabilir. Yeni bir değişken oluşturmak için ona bir isim ve değer atamanız yeterlidir. Konsepti daha iyi anlamak için birkaç örneğe bakalım. İlk örnekte "x" adında bir değişken bildirip 33 değeri atıyoruz. İkinci örnekte "current_price" adında bir değişken bildirip 42,99 değeri atadık.

Değişkenlere atanan değerlerin sayı, metin veya başka herhangi bir geçerli veri türü olabileceğini unutmayın. Değişkenlere değerler atadıktan sonra, değerlerini ekranda görüntülemek için print() işlevini kullanabiliriz. Üçüncü örnekte, "x" değişkeninin değerini görüntülemek için print() işlevini kullanıyoruz. Dördüncü örnekteki "current_price" değişkeni için de aynısını yapıyoruz.

Değişkenleri yazdırarak değerlerini görüntüleyebileceğimizi ve gerektiğinde onlarla çalışabileceğimizi görebilirsiniz. Değişkenleri doğrudan yazdırmaya ek olarak, bunları metin çıktısına dahil etmenin başka bir yolu daha vardır. Metin ve değişken değerlerini birleştirme sürecini basitleştiren format() işlevini kullanabiliriz. Bu durumda, istenen çıktı metnini tanımlarsınız ve yer tutucu olarak kaşlı ayraçlar {} kullanarak değişkenlerin konumlarını belirtirsiniz. format() işlevinin içinde, değişkenleri istediğiniz sırada sağlarsınız.

Bunu çalışırken görmek için bir örneğe bakalım.

Beşinci örnekte, "Delicious Nachos" değerine sahip "product_name" adında bir değişkenimiz var. Ürün adını içeren bir mesaj görüntülemek istiyoruz. "{}'yi seviyorum!" metnini tanımlıyoruz. değişken değeri için yer tutucu olarak {} ile istenen çıktımız olarak. format() işlevinin içinde "product_name" değişkenini sağlıyoruz. Python, kodu çalıştırdıktan sonra yer tutucuyu değişkenin değeriyle değiştirir ve "I love Delicious Nachos!" sonucunu yazdırır. Bu yöntem, özellikle birden fazla değişkenle veya daha karmaşık mesajlarla çalışırken daha fazla esneklik ve dinamik metin çıktısı sağlar. Artık değişkenleri ele aldığımıza göre, Python'daki aritmetik operatörlere geçelim.

Python, değişkenler üzerinde matematiksel işlemler gerçekleştirmemize izin veren çeşitli aritmetik operatörler sağlar.

En sık kullanılan aritmetik operatörler şunlardır:

  • Ek: +
  • Çıkarma: -
  • Çarpma işlemi: *
  • Bölüm: /
  • Üs alma: **
  • Modül: %

Bu operatörler, hesaplamaları gerçekleştirmek için sayısal değişkenlerle birlikte kullanılabilir.

Aşağıdaki örnekte, bu aritmetik operatörlerden bazılarını göstermek için "a" ve "b" olmak üzere iki değişken kullanacağız.

İlk önce "a" adında bir değişken tanımlayıp 5 değerini atıyoruz. Ardından "b" adında başka bir değişken tanımlayıp "a + 2" ifadesini atayacağız. "a + 2" ifadesi, "a" değerini (5 olan) 2'ye ekler ve "b" değerinin 7 olmasını sağlar. Daha sonra "a" değerlerini görüntülemek için print() işlevini kullanabiliriz. ve ekranda "b".

Kodu çalıştırdıktan sonra, Python ifadeyi değerlendirecek ve sırasıyla 5 ve 7 olan "a" ve "b" değerlerini gösterecektir.

Ek olarak, değerleri çıkarmak için çıkarma operatörünü (-), değerleri çarpmak için çarpma operatörünü (*), değerleri bölmek için bölme operatörünü (/), değerleri yükseltmek için üs operatörünü (**) kullanabiliriz. güç ve bir bölme işleminin kalanını hesaplamak için modulo operatörü (%). Bu aritmetik operatörler, karmaşık hesaplamaları gerçekleştirmek için çeşitli şekillerde birleştirilebilir ve kullanılabilir.

Son olarak, Python'daki karşılaştırma operatörlerini kısaca tartışalım. Karşılaştırma işleçleri, iki değeri karşılaştırmamızı ve aralarındaki ilişkiyi belirlememizi sağlar.

En sık kullanılan karşılaştırma işleçleri şunlardır:

  • Eşittir: ==
  • Şuna eşit değil: !=
  • Şundan büyük: >
  • Şundan az: <
  • Büyük veya eşittir: >=
  • Küçük veya eşittir: <=

Kullanıldığında, bu işleçler, karşılaştırmanın sonucunu belirten True veya False şeklinde bir Boolean değeri döndürür.

Örneğin, a == b ifadesi, "a" değeri "b" değerine eşitse True, aksi halde False döndürür. Aşağıdaki örnekte, farklı karşılaştırma işleçleri kullanarak iki değişkenin, "a" ve "b" değerlerini karşılaştıracağız. Bu karşılaştırmaların sonuçlarını ekranda görüntülemek için print() işlevini kullanacağız. Kodu çalıştırdıktan sonra, Python her bir karşılaştırma ifadesini değerlendirecek ve karşılık gelen Boolean değerini gösterecektir. Çıktının her karşılaştırmanın sonucunu gösterdiğini görebilirsiniz: Doğru veya Yanlış.

Karşılaştırma işleçleri, değişkenler arasındaki ilişkiye dayalı olarak kodunuzun farklı bölümlerini koşullu olarak yürütmek için kullanışlıdır.

Bu, Python programlamanın temelleri hakkındaki ilk dersimizi sonlandırıyor. Bu derste şunları ele aldık:

  • print() işlevini kullanarak metni görüntüleme
  • Değişkenleri bildirmek ve kullanmak
  • Aritmetik operatörlerle matematiksel hesaplamalar yapma
  • Karşılaştırma işleçlerini kullanarak değerleri karşılaştırma

Umarım bu ders size Python programlama konusunda sağlam bir temel sağlamıştır. Bir sonraki derste, dizeler, tamsayılar ve değişkenler dahil olmak üzere veri türlerini daha derinlemesine inceleyeceğiz.

Herhangi bir sorunuz varsa veya kapsanan konulardan herhangi biri hakkında daha fazla açıklamaya ihtiyacınız varsa, lütfen sormaktan çekinmeyin. İzlediğiniz için teşekkürler, bir sonraki derste görüşürüz!

Python Fundamentals - Part 01
Python Fundamentals - Part 01
  • 2020.04.02
  • www.youtube.com
Dr. Soper discusses several fundamentals of the Python programming language, including how to display text, how to declare and use variables, all of Python's...
 

Python Temelleri - Bölüm 02



Python Temelleri - Bölüm 02

Ben Dr. Soper ve bugün Python programlama dilinin temellerini konu alan üç bölümlük dizimizin ikinci bölümünü sunma zevkini yaşıyorum.

Bugünün dersine geçmeden önce, paylaşacağım bilgilerin bir önceki derste geliştirdiğimiz bilgi ve becerilere dayandığını vurgulamak istiyorum. Bu nedenle, bir önceki videoyu izleme fırsatınız olmadıysa, Python ile ilgili bu derse başlamadan önce izlemenizi şiddetle tavsiye ederim.

Şimdi, bu derste neler öğrenmeyi bekleyebileceğinizi kısaca gözden geçirmek için biraz zaman ayıralım.

Bu videonun sonunda, Python'un aşağıdaki yönleri hakkında bilgi edineceksiniz:

  1. Listeler
  2. NumPy dizileri
  3. If ifadeleri
  4. Mantıksal operatörler

Ders boyunca, bu konuların her birini, Python programlama dili içindeki özelliklerini gösteren açıklayıcı örnekler ve gösterilerle tamamlayarak ayrıntılı olarak keşfedeceğiz.

Python'daki listeleri tartışarak başlayalım.

Python'da bir liste, yalnızca adlandırılmış bir öğe koleksiyonudur. Bu öğeler, sayılar, metin, değişkenler, nesneler ve hatta diğer listeler dahil olmak üzere herhangi bir türden olabilir! Bir liste, öğeleri olarak başka listeler içeriyorsa, buna çok boyutlu bir liste denir.

Açıklamak için, birkaç örnek ele alalım. İlk örnekte "int list" adında bir liste oluşturuyoruz ve elemanlarına -3, 7, 4, 0, -2 ve 342 değerlerini atadık. Basit, tek boyutlu bir listeyi bir vektör olarak tasavvur edebilirsiniz. Python, bir listeyi köşeli parantezleri ile tanımlar. Listenin elemanlarına değer atamak için onları köşeli parantez içinde virgüllerle ayırırız. Unutmayın, listeler herhangi bir veri türündeki öğeleri barındırabilir.

İkinci örnekte, gezegenlerin bir listesini ilan ediyoruz ve güneş sistemimizdeki bilinen tüm gezegenlerin isimlerini elementler olarak atadık. Pluto'nun 2006 yılında Uluslararası Astronomi Birliği tarafından "cüce gezegen" statüsüne indirildiğini ve dolayısıyla bu listede yer almadığını belirtmekte fayda var. Üçüncü örneğe geçelim, iki boyutlu bir liste ilan ediyoruz. Yani bu listenin elemanları da birer listedir. İki satır ve üç sütundan oluşan 2x3 matris gibi düşünebilirsiniz.

Şimdi, Python'da listelerin bildirildiği ve kullanıldığı birkaç gösterime göz atalım. İlk kod hücresinde, daha önce tartıştığımız üç listeyi açıklıyoruz. Bu hücreyi çalıştırdığımızda herhangi bir çıktı görüntülenmeyecektir çünkü Python'a sadece bu üç listeyi oluşturması ve bunları bilgisayarın belleğinde saklaması talimatını vermiş oluyoruz. Sonraki kod hücresinde, bir listedeki belirli değerlere nasıl erişileceğini keşfedeceğiz. Ancak devam etmeden önce Python'da indekslemeyi anlamak önemlidir.

Python, sıfır tabanlı bir indeksleme sistemi kullanır. Bu, listeler veya diziler gibi koleksiyonlarla uğraşırken, ilk öğenin sıfır dizinine sahip olduğu, ikinci öğenin bir dizini olduğu vb. anlamına gelir. Açıklamak için, örnek olarak "int listemizi" ele alalım. Bu liste altı değer içerir. Diyelim ki listedeki beşinci öğeye erişmek istiyorsak, o öğenin dizini 4 olacaktır.

Bu sıfır tabanlı indeksleme sistemini kavrayan bir sonraki kod hücresi, bu durumda "Dünya" olan "gezegenler" listesindeki üçüncü gezegenin adını basar. Listedeki üçüncü öğe olduğu için dizin konumu 2'de bulunmalıdır. Çıktının beklendiği gibi olduğunu ve Dünya'nın gerçekten de güneşten üçüncü kaya olduğunu doğrulamak için çalıştır düğmesine tıklayalım.

Devam ederek, bu ders için bir sonraki konumuzu inceleyelim: Python'da NumPy dizileri. Şimdi bu dersteki bir sonraki konumuza geçelim: if ifadeleri ve mantıksal operatörler. Python, bize if ifadelerini kullanarak koşullu ifadeleri kullanma yeteneği sağlar. Bir if ifadesi, belirli bir koşulun doğru veya yanlış olmasına bağlı olarak farklı kod bloklarını yürütmemize izin verir. Ayrıca Python, birden çok koşulu bir araya getirmemize izin veren mantıksal operatörler de sağlar.

İlk örnekte 'x' adlı bir değişkenin 10'dan küçük olup olmadığını kontrol eden basit bir if-else yapımız var. Koşul doğruysa ekrana "x is less less than 10" yazdırıyor. Aksi takdirde, koşul yanlışsa, "x 10'dan büyük veya eşittir" yazdırır. Else deyimi, if deyimindeki koşul yanlış olduğunda yürütülecek kodu belirtmek için kullanılır.

Bir if-elif-else yapısı kullanarak bu yapıyı birden çok olasılığı ele alacak şekilde genişletebiliriz. İkinci örnekte, kişinin yaşının 13'ten küçük olup olmadığını kontrol ederek ek bir koşul getiriyoruz. Kod, kişinin yaşına bağlı olarak kişinin çocuk mu, genç mi yoksa yetişkin mi olduğunu belirler. Elif ifadesi, koşullardan hiçbiri doğru değilse, başka ifadeye geri dönmeden önce ek koşulları kontrol etmemizi sağlar.

Jupyter Not Defterimizde bu if ifadelerinin ve mantıksal işleçlerin bazı gösterimlerini iş başında görelim.

İlk kod hücresinde 'x' adında bir değişken bildiriyor ve değerini belirliyoruz. Daha sonra 'x'in 10'dan küçük olup olmadığına bağlı olarak belirli bir mesajı yazdırmak için if-else yapısını kullanırız. Kod hücresini çalıştıralım ve çıktıyı gözlemleyelim. 'x'in değeri şu anda 10 olduğu için, Python ekrana "x büyüktür veya eşittir 10" yazdırır. 'x' değerini -7 olarak değiştirip kod hücresini tekrar çalıştırırsak farklı bir sonuç alırız. 'x' değerini -7 olarak değiştirdikten sonra, Python artık "x is less less less than 10" yazdırır.

Bir sonraki kod hücresinde if-elif-else yapısını uygulayarak bir kişinin yaşına göre çocuk mu, genç mi yoksa yetişkin mi olduğunu tespit ediyoruz. Hücreyi çalıştıralım ve ne olduğunu görelim. Beklendiği gibi, 'yaş' değişkeninin değeri şu anda 5'e ayarlı olduğu için Python "çocuk" yazdırır. "yaş" değerini değiştirir ve kod hücresini yeniden çalıştırırsak, kişinin yaşına göre farklı sonuçlar alırız. Bir sonraki konuya geçelim, Python'daki mantıksal operatörleri tartışalım. Python üç mantıksal işleç sağlar: 've', 'veya' ve 'değil'. Bu operatörler, aynı anda birden fazla koşulu test etmemize izin verir.

İlk örnekte, 'x' ve 'y' değişkenlerinin pozitif olup olmadığını belirlemek için 've' ve 'veya' operatörlerinin nasıl kullanılacağını gösteriyoruz. if ifadesi hem 'x' hem de 'y'nin pozitif olup olmadığını kontrol eder. Koşullardan en az biri yanlışsa, kod 'x' veya 'y'nin pozitif olup olmadığını kontrol eden elif ifadesine geçer. Ne 'x' ne de 'y' pozitif değilse, else deyimi yürütülür.

İkinci örnekte, bir karşılaştırmanın sonucunu tersine çevirmek veya tersine çevirmek için kullanılan 'değil' operatörünü tanıtıyoruz. Bir kişinin yaşının 13'ten küçük olup olmadığına bakıyoruz. Kişi 13'ten küçük değilse, o zaman en az 13 yaşında olmalı ve dolayısıyla çocuk olmamalıdır. Aksi halde çocuk sayılırlar.

Python'da kullanılan bu mantıksal işleçlerin bazı gösterimlerini görelim.

İlk kod hücresinde, 'x' ve 'y'nin pozitif olup olmadığını belirlemek için 've' ve 'veya' mantıksal işleçlerini kullanırız. 'x'i 5'e ve 'y'yi -2'ye ayarladık. Hücreyi çalıştıralım ve çıktıyı gözlemleyelim. 'y' negatif olduğundan, 've' operatörünün koşulu yanlıştır. Ancak, 'veya' operatörünün koşulu doğrudur çünkü 'x' pozitiftir. Bu nedenle, kod ekrana "x pozitiftir" yazdırır. Şimdi 'x' değerini -3 olarak değiştirelim ve kod hücresini tekrar çalıştıralım. Bu kez, 've' ve 'veya' işleçlerinin her iki koşulu da yanlıştır, dolayısıyla kod else ifadesine geçer ve "x ve y pozitif değildir" yazdırır.

Bir sonraki kod hücresinde, bir kişinin yaşına göre çocuk olup olmadığını kontrol etmek için 'değil' operatörünü kullanıyoruz. 'yaş' değişkenini 10 olarak belirledik, yani kişi çocuk kabul ediliyor. Kod hücresini çalıştıralım ve çıktıyı gözlemleyelim. Kişinin yaşı 13'ten küçük olduğu için 'not' operatörünün koşulu yanlıştır ve kod ekrana "Child" yazdırır.

Şimdi, 'age' değerini 18 olarak değiştirin ve kod hücresini yeniden çalıştırın. Bu kez, kişinin yaşı 13'ten küçük değildir, bu nedenle 'değil' operatörünün koşulu doğrudur ve kod "Çocuk değil" yazdırır. Bu, Python'daki listeler, NumPy dizileri, if ifadeleri ve mantıksal işleçler hakkındaki dersimizi sonlandırıyor. Umarım bu bilgiyi faydalı bulmuşsunuzdur ve Python programlama yolculuğunuzda size yardımcı olmuştur.

Bu serinin bir sonraki ve son bölümünde döngüler, işlevler ve dosya işleme gibi daha gelişmiş konuları keşfedeceğiz. Öyleyse, bunun için bizi izlemeye devam edin!

İlginiz için teşekkür ederiz, bir sonraki derste görüşmek üzere!

Python Fundamentals - Part 02
Python Fundamentals - Part 02
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses more fundamentals of the Python programming language, including how to work with lists in Python, how to use NumPy arrays, how to use 'if...
 

Python Temelleri - Bölüm 03



Python Temelleri - Bölüm 03

Umarım hepiniz iyi bir gün geçiriyorsunuzdur. Ben Dr. Soper ve Python programlama dilinin temellerini konu alan üçüncü dersimiz için tekrar sizlerle birlikte olmaktan çok mutluyum. Bugünkü oturumda, Python'u daha derinlemesine inceleyeceğiz ve anlayışınızı ve yetkinliğinizi geliştirecek bazı temel kavramları keşfedeceğiz.

Başlamadan önce, bu derste sunulan bilgilerin önceki iki derste geliştirdiğimiz bilgi ve becerilere dayandığını vurgulamak isterim. Bu videoları henüz izlemediyseniz Python'daki bu derse dalmadan önce izlemenizi önemle tavsiye ederim.

Şimdi, bu derste neler öğrenmeyi bekleyebileceğinizi tartışmak için biraz zaman ayıralım. Bu oturumun sonunda, Python'un aşağıdaki yönleri hakkında kapsamlı bir anlayışa sahip olacaksınız:

  1. "for" döngüleri
  2. "while" döngüleri
  3. Fonksiyonlar
  4. sınıflar
  5. nesneler

Bu ders boyunca, Python programlama dilindeki pratik uygulamalarını kavramanıza olanak tanıyan açıklayıcı örnekler ve gösterilerle bu kavramları keşfedeceğiz.

Python'da "for" ve "while" döngülerinin dünyasını keşfederek başlayalım.

Genel olarak döngüler, bir dizi talimatı tekrar tekrar yürütmemizi sağlar. Python iki tür döngü sağlar: "for" döngüleri ve "while" döngüleri. İkisi arasındaki temel fark, "for" döngülerinin belirli sayıda çalışması, "while" döngülerinin ise belirli bir koşul sağlanana kadar çalışmaya devam etmesidir.

1 ile 10 arasında tamsayı olan ilk 10 doğal sayıyı yazdıran bir "for" döngüsü örneğiyle başlayalım. "For" döngüsü oluşturmak için, "for" anahtar kelimesini ve ardından bir değişken adını kullanırız. Bu durumda, "x" değişkenini kullanacağız. "For" döngüsü yinelenirken, "x" değişkenine her yineleme için farklı bir değer atanacaktır. Ardından, değişkene yinelemeli olarak atanacak öğe kümesini ve ardından iki nokta üst üste işaretini belirtiriz. Bu özel örnekte, Python "aralık" işlevini kullanarak öğe kümesini oluşturuyoruz. "Range" işlevi, alt sınır ile üst sınır arasında bir sayı aralığı döndürür. Özellikle, alt sınır kapsayıcı iken üst sınır dışlayıcıdır. Bu nedenle, bu örnekteki sayı aralığı 1'den 10'a kadar olacaktır.

Döngünün ilk yinelemesinde, "x" değeri 1 olacaktır. Daha sonra, ikinci yinelemede "x"e 2 atanacaktır ve 10'a ulaşana kadar bu böyle devam edecektir. "for" ifadesini izleyen girintili kod satırları ifade, döngünün her yinelemesinde yürütülür. Bu örnekte, 1'den 10'a kadar olan sayıların görüntülenmesiyle sonuçlanan "x" değerini yazdırıyoruz.

Şimdi, gezegenlerin adlarını yazdıran başka bir "for" döngüsünü keşfedelim. Bu durumda, döngüyü kontrol etmek için "gezegen" değişken adını kullanacağız ve bir gezegen listesi üzerinde yineleyeceğiz. Döngü ilerledikçe, "gezegen" değişkenine teker teker her gezegenin adı atanacak ve bu da listedeki her gezegenin adını yazdırmamıza izin verecektir.

Devam edelim, Python'daki iç içe döngüleri tartışalım. Yuvalanmış döngülerde, bir döngü (iç döngü olarak bilinir) başka bir döngünün (dış döngü olarak bilinir) içinde çalışır. İç döngü, dış döngünün her yinelemesi için bir kez yürütülür. Örneğin, dış döngünün "satır" adlı bir değişkeni 0 ile 1 arasında tamsayılarla doldurduğu, iç döngünün ise "sütun" adlı bir değişkeni 0 ile 2 arasında tamsayılarla doldurduğu bir senaryo düşünün. Bu sayılar satıra karşılık gelir. ve iki boyutlu bir NumPy dizisinin sütun dizinleri. Yuvalanmış döngü ilerledikçe, önce dizinin ilk satırındaki tüm öğelerin değerlerini yazdırır ve ardından ikinci satıra geçer.

Son olarak, "while" döngüsünü keşfedelim. Bu tür bir döngüde, başlangıçta belirli bir değere ayarlanan "x" gibi bir kontrol değişkenine güveniriz. Döngü, "x" değeri belirli bir koşulu sağladığı sürece çalışmaya devam edecektir. Örneğin, "x"i 1 olarak başlatabiliriz ve "x" 10'un altında kaldığı sürece döngü çalışmaya devam eder. koşul artık karşılanmayana kadar döngü.

Bu, Python'daki "for" ve "while" döngülerine genel bakışımızı tamamlıyor. Bir sonraki bölümde, programlamada kodu etkili bir şekilde organize etmemize ve yeniden kullanmamıza izin veren temel bir kavram olan işlevleri keşfedeceğiz.

Python Fundamentals - Part 03
Python Fundamentals - Part 03
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses even more fundamentals of the Python programming language, including how to use 'for' loops in Python, how to use 'while' loops in Python...
 

Takviyeli Öğrenmenin Temelleri


Takviyeli Öğrenmenin Temelleri

Ben Dr. Soper ve bugün yapay zekanın daha geniş alanı içinde çok önemli bir alan olan pekiştirmeli öğrenmenin temellerini tartışacağım. Takviyeli öğrenmenin temellerini incelemeden önce, bu derste neler öğreneceğinizi gözden geçirmek için biraz zaman ayıralım.

Bu videonun sonunda, aşağıdakileri net bir şekilde anlayacaksınız:

  1. Takviyeli öğrenme nedir?
  2. Takviyeli öğrenmeye dayalı yapay zekanın temelini oluşturan beş ilke: a. Giriş ve çıkış sistemi. B. Ödüller. C. Çevre. D. Markov karar süreçleri. e. Eğitim ve çıkarım.

Bu kavramları kavradığımızda, gerçek yapay zeka modelleri oluşturmaya başlamak için tam donanımlı olacağız. O halde vakit kaybetmeyelim ve başlayalım!

İlk olarak, "pekiştirmeli öğrenme" ile ne kastedildiğini keşfedelim. Denetimli öğrenme ve denetimsiz öğrenmenin yanı sıra, pekiştirmeli öğrenme, makine öğreniminin üç temel paradigmasından biridir.

Denetimli öğrenmede, bir makine girdi-çıktı çiftlerine dayalı olarak çıktıları tahmin etmek için genel bir işlevi öğrenir. Denetimsiz öğrenmede, bir makine, veriler hakkında önceden bilgi sahibi olmadan bir veri kümesindeki kalıpları keşfeder. Öte yandan, takviyeli öğrenme, bir makineyi, kümülatif ödülleri en üst düzeye çıkarmak için harekete geçmesine izin verecek şekilde çevresini anlayacak şekilde eğitmeyi amaçlar. Bunu başarmak için pekiştirmeli öğrenme, çevreyi keşfetmekle şimdiye kadar öğrenilenleri kullanmak arasında en uygun dengeyi bulmayı içerir. Şimdi, takviyeli öğrenmeye dayalı yapay zekanın altında yatan beş ilkeyi inceleyelim.

Tartışacağımız ilk ilke girdi ve çıktı sistemidir. Bu sistem takviyeli öğrenmeye özgü değildir, ancak tüm yapay zeka ve bilişsel bilgi işlem sistemleri için temeldir. Girdilerin çıktılara dönüştürülmesini içerir.

Takviyeli öğrenme bağlamında, girdilere ortamın durumunu temsil eden "durumlar" adı verilir. Çıktılar "eylemler" olarak adlandırılır ve "Bundan sonra ne yapmalıyım?" Sorusuna yanıt verir. Takviyeli öğrenmenin amacı, her durumdaki eylemlere rehberlik eden en uygun politikayı belirlemektir.

Devam edelim, ödüller hakkında konuşalım. Ödüller, tüm yapay zeka ve bilişsel bilgi işlem sistemlerinde çok önemli bir rol oynar. Sistemi performansı hakkında bilgilendiren ölçümler olarak işlev görürler. Ödül işlevleri, çözülmekte olan soruna bağlı olarak kazançları en üst düzeye çıkarmak veya kayıpları en aza indirmek için tasarlanabilir. Anında ve kümülatif ödüller, zaman içinde toplam birikmiş ödülleri maksimize etmek için kabul edilir.

Üçüncü ilke, pekiştirmeli öğrenme sisteminin çalıştığı ortamı veya çevreyi ifade eden çevredir. Ortam, durumlar ve ödüller hakkında bilgi sağlar. Ayrıca herhangi bir zamanda hangi eylemlerin mümkün olduğunu belirleyerek oyunun kurallarını tanımlar. Başlangıçta, sistemin eylemlerinin sonuçları hakkında hiçbir bilgisi yoktur ve öğrenmek için deney yapması gerekir.

Ardından, Markov Karar Süreçlerimiz (MDP) var. Adını matematikçi Andrey Andreyevich Markov'dan alan MDP'ler, sonuçlar kısmen rastgele ve kısmen bir karar vericinin kontrolü altında olduğunda karar vermeyi modellemek için matematiksel bir çerçeve sağlar. Takviyeli öğrenmede yapay zeka sistemi, ortamda faaliyet gösteren karar verici olarak hareket eder. MDP'ler ayrı zaman birimleri içerir ve sistem gözlemlere, eylemlere, ödüllere ve sonraki durumlara dayalı olarak bir durumdan diğerine geçiş yapar.

Son olarak, eğitim modumuz ve çıkarım modumuz var. Takviyeli öğrenme sistemleri iki aşamadan geçer: eğitim ve çıkarım. Eğitim modunda, sistem öğrenir ve çoklu eğitim döngüleri yoluyla en uygun politikayı belirlemeye çalışır. Edindiği bilgilere dayanarak politikasını günceller. Çıkarım kipinde, sistem tam olarak eğitilmiştir ve daha fazla güncelleme olmaksızın öğrenilen ilkeyi kullanarak görevini gerçekleştirmek üzere konuşlandırılmıştır.

Artık pekiştirmeli öğrenme ilkelerini sağlam bir şekilde anladığımıza göre, gerçek pekiştirmeli öğrenme modelleri oluşturmaya başlayabiliriz. Sonraki iki videoda, pratik problemleri çözmek için Thompson Örneklemesinden yararlanan pekiştirmeli öğrenme modellerini keşfedeceğiz. İlk model, çok kollu haydut problemindeki keşif-sömürü ikilemini ele alacak ve ikinci model, simülasyonları kullanarak karmaşık bir reklam kampanyasında sonuçları optimize edecek.

Bu videolar, Python kullanarak yapay zeka modelleri oluşturma konusunda uygulamalı deneyim sağlayacaktır. Umarım bilişsel bilgi işlem ve yapay zeka alanındaki bu heyecan verici maceralarda bana katılırsınız!

Bu, takviyeli öğrenmenin temelleri hakkındaki dersimizi sonlandırıyor. Umarım bu bilgiyi ilginç bulmuşsunuzdur ve hepinize iyi günler dilerim.

Foundations of Reinforcement Learning
Foundations of Reinforcement Learning
  • 2020.04.07
  • www.youtube.com
Dr. Soper discusses the foundations of reinforcement learning, which is one of the primary focus areas in the broader realm of artificial intelligence and co...
 

Takviyeli Öğrenme: Thompson Örnekleme ve Çok Silahlı Haydut Problemi - Bölüm 01



Takviyeli Öğrenme: Thompson Örnekleme ve Çok Silahlı Haydut Problemi - Bölüm 01

Ben Dr. Soper, özellikle Thompson Örnekleme ve meşhur Çok Silahlı Haydut Problemi üzerine odaklanan, pekiştirmeli öğrenme hakkındaki kapsamlı dersimizin ilk bölümünü size sunmaktan büyük mutluluk duyuyorum.

Thompson Sampling ve Multi-Armed Bandit Problem bağlamında pekiştirmeli öğrenmenin inceliklerine girmeden önce, bu serideki önceki videoları izlemenin önemini vurgulamak istiyorum. Bu önceki dersler, bugün keşfedeceğimiz kavramlar için bir temel görevi görür ve henüz yapmadıysanız, bu kavramlara aşina olmanızı şiddetle tavsiye ederim.

Bu derste neler öğrenmeyi bekleyebileceğinize dair kısa bir genel bakış sağlamak için, ana noktaları özetlememe izin verin:

  1. Çok kollu haydut sorununun neyi gerektirdiğini anlayarak başlayacağız.
  2. Çok kollu haydut sorununun neden önemli olduğunu keşfedeceğiz.
  3. Ardından, Thompson Sampling'i ve onun bu sorunla ilişkisini tanıtacağız.
  4. Son olarak, Thompson Sampling'in iç işleyişini ve keşif-sömürü ikilemini nasıl etkili bir şekilde ele aldığını ortaya çıkaracağız.

Çok kollu haydut sorunlarının çeşitli uygulamalarını ve sonuçlarını ortaya çıkardığımızdan, önümüzdeki yolculuk aydınlatıcı olmayı vaat ediyor. Daha fazla uzatmadan keşifimize başlayalım!

Çoklu Silahlı Haydut Problemi bağlamında pekiştirmeli öğrenme kavramını kavramak için öncelikle bu problemin ne anlama geldiğini tanımlamak önemlidir.

Çok Silahlı Haydut Problemi, bir dizi rakip seçenek arasında sınırlı bir kaynağın sabit bir miktarını nasıl tahsis edeceğimizi belirlememiz gereken herhangi bir senaryoyu ifade eder. Birincil amaç, belirsizlikle karşı karşıya kalırken beklenen ödüllerimizi en üst düzeye çıkarmaktır.

Bu sınırlı kaynak, zaman, para, dönüşler vb. gibi çeşitli biçimler alabilir. Ek olarak, mevcut her seçenekten alabileceğimiz ödüller tam olarak bilinmemektedir. Ancak, kaynakları farklı seçeneklere tahsis ettikçe, her biriyle ilişkili potansiyel ödülleri yavaş yavaş daha iyi anlıyoruz.

"Çok Silahlı Eşkıya Problemi" ismi bir kumar benzetmesinden gelmektedir. Bir dizi kumar makinesiyle karşı karşıya kalan ve kazanma şansını en üst düzeye çıkaran makineyi belirlemeye çalışan bir kumarbaz düşünün. Slot makineleri, kumarhanelerde yaygın olarak bulunan ve oyuncuların sırayla para yatırdığı ve oynadığı şans oyunlarıdır. Şans oyuncudan yanaysa, makine, oyuncunun ilk yatırımını aşmasını umduğu parasal bir ödül verir.

Geleneksel olarak, slot makineleri, oyunu başlatmak için kullanılan mekanik kaldıraç (kol) nedeniyle "tek kollu haydutlar" olarak anılırdı. Bu nedenle, bir kumarbaz birkaç slot makinesiyle karşılaştığında ve hangisini oynayacağına karar vermesi gerektiğinde, bu klasik bir Multi-Armed Bandit Problemi sunar. Bu problem doğası gereği takviyeli öğrenme için temel olan keşfetme-kullanma ikilemini bünyesinde barındırır.

Keşif-sömürü ikilemi, kumarbazın her makineyi kaç kez oynaması gerektiğini belirleme etrafında döner. Bir kumarbaz sık sık ödül veriyor gibi görünen bir makine keşfederse, o makineyi oynamaya devam etmeli mi (sömürü) yoksa daha da ödüllendirici bir seçenek bulma umuduyla (keşif) diğer makineleri deneyerek potansiyel kayıpları göze mi almalı?

Şimdi, Çoklu Silahlı Haydut Probleminin neden bu kadar büyük önem taşıdığını merak edebilirsiniz. Gerçek şu ki, çok kollu haydut sorunları gerçek dünyada her yerde bulunuyor ve hem günlük hayatımıza hem de iş ortamlarımıza nüfuz ediyor.

Kişisel yaşamınızda karşılaştığınız seçimleri düşünün. Örneğin, bir Cuma gecesi en sevdiğiniz restoranı tekrar ziyaret edip etmeyeceğinize karar vermek veya daha önce deneyimlemediğiniz yeni bir restoranı keşfetmek. Benzer şekilde, birden fazla merak uyandıran TV dizisinin akış için mevcut olduğunu ancak bunları izlemek için sınırlı boş zamanınız olduğunu hayal edin. Zamanınızı hangi diziye ayıracağınızı nasıl belirlersiniz?

Thompson Örnekleme, Çok Silahlı Haydut Problemindeki keşif-sömürü ikilemini ele almak için kullanılan popüler bir algoritmadır. Bayesci çıkarımdan yararlanarak keşif ve kullanımı dengelemek için ilkeli bir yaklaşım sağlar.

Thompson Sampling'in arkasındaki ana fikir, haydut problemindeki her bir seçeneğin (kolun) gerçek altta yatan ödül olasılıkları hakkında bir inanç veya olasılık dağılımı sürdürmektir. Bu inanç, kollarla önceki etkileşimlerden elde edilen gözlemlenen ödüllere dayalı olarak güncellenir.

Thompson Sampling, karar vermede olasılıksal bir yaklaşım benimsiyor. Kesin olarak en yüksek ödüle (sömürü) sahip kolu seçmek veya kolları rastgele keşfetmek yerine, keşif ve sömürüyü dengeleyecek şekilde inanç dağılımından bir kolu örnekler.

Thompson Örnekleme algoritmasının adımlarını inceleyelim:

  1. Başlatma: Her kol için inanç dağılımını başlatarak başlayın. Bu dağılım, her bir kolun gerçek ödül olasılığı hakkındaki belirsizliği temsil eder. Tipik olarak, haydut problemlerinde ödülleri modellemek için yaygın olarak kullanılan binom dağılımına eşlenik olduğundan, önceki dağıtım olarak bir Beta dağılımı kullanılır.

  2. Örnekleme: Her etkileşim turu için, her bir kol için inanç dağılımından bir ödül olasılığını örnekleyin. Bu adım, ödül olasılıklarında daha yüksek belirsizliğe sahip kolları dikkate alarak keşif yapmayı içerir.

  3. Seçim: En yüksek örneklenmiş ödül olasılığına sahip kolu seçin. Bu adım, inanç dağılımına dayalı olarak daha yüksek beklenen ödüllere sahip olması muhtemel silahları tercih ederek sömürü içerir.

  4. Güncelleme: Seçilen koldaki ödülü gözlemleyin ve Bayes çıkarımına dayalı olarak o kol için inanç dağılımını güncelleyin. Bu adım, önceki dağılımı ve gözlemlenen ödülü kullanarak sonsal dağılımı günceller.

Tekrar tekrar örnekleme, seçme ve güncelleme yoluyla Thompson Sampling, inanç dağılımını gözlemlenen ödüllere göre uyarlar ve silah seçimini zaman içinde kademeli olarak geliştirir.

Thompson Sampling'in çeşitli uygulamalarda keşif-sömürü ikilemini çözmek için etkili bir algoritma olduğu kanıtlanmıştır. Çevrimiçi reklamcılıkta, klinik deneylerde, öneri sistemlerinde ve belirsizlik altında sıralı karar vermenin söz konusu olduğu diğer birçok alanda yaygın olarak kullanılmaktadır.

Thompson Sampling'in en önemli avantajlarından biri basitliği ve uygulama kolaylığıdır. Algoritma, karmaşık hesaplamalar veya hiperparametrelerin ayarlanmasını gerektirmediğinden, onu birçok gerçek dünya senaryosunda pratik bir seçim haline getirir.

Sonuç olarak, Thompson Örnekleme, Bayesçi çıkarsama yoluyla keşif ve sömürüyü dengeleyerek Çok Silahlı Haydut Problemine zarif bir çözüm sunuyor. Değişen ödül olasılıklarına uyum sağlama yeteneği ve geniş uygulanabilirliği, onu takviyeli öğrenme ve karar vermede değerli bir araç haline getirir.

Dersimizin bir sonraki bölümünde, Thompson Sampling'in matematiksel temellerini daha derinlemesine inceleyeceğiz ve performans garantilerini keşfedeceğiz. Bu güçlü algoritmanın inceliklerine heyecan verici bir yolculuk için bizi izlemeye devam edin!

Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 01
Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 01
  • 2020.04.11
  • www.youtube.com
Dr. Soper discusses reinforcement learning in the context of Thompson Sampling and the famous Multi-Armed Bandit Problem. Topics include what the multi-armed...
 

Takviyeli Öğrenme: Thompson Örnekleme ve Çok Silahlı Haydut Problemi - Bölüm 02



Takviyeli Öğrenme: Thompson Örnekleme ve Çok Silahlı Haydut Problemi - Bölüm 02

Ben Dr. Soper ve Thompson Sampling ve ünlü Çok Silahlı Haydut Problemi bağlamında pekiştirici öğrenme hakkındaki dersimizin ikinci bölümünü sunmak için buradayım.

Bu dizinin bir önceki videosunda, Çok Silahlı Haydut Problemi ve bunun üstesinden gelmek için Thompson Örneklemesinden nasıl yararlanılabileceği hakkında bir fikir edinmiştik.

Devam etmeden önce, bu dersi anlamanıza büyük ölçüde fayda sağlayacak temel bilgiler sağladığından, henüz izlemediyseniz önceki videoyu izlemenizi önemle tavsiye ederim.

Bugün, gerçek bir çok kollu haydut sorununu çözmek için Thompson Örneklemeyi kullanan, takviyeli öğrenmeye dayalı bir yapay zeka sistemi uygulamaya odaklanacağız. Bunu yapmak için Python'a geçeceğiz ve başlayalım! Başlamak için, üzerinde çalışacağımız senaryoyu kısaca gözden geçirelim. Kumar makinelerinde oynamak için 1000$ olan bir kumarhanede olduğunuzu hayal edin. Altı slot makinesi mevcuttur ve her dönüşün oynaması 1$'dır. Herhangi bir dönüşte kazanma olasılığını temsil eden dönüşüm oranı, makineler arasında değişiklik gösterir ve sizin tarafınızdan bilinmez.

Amacınız en hızlı şekilde dönüşüm oranı en yüksek slot makinesini belirleyerek kazanma şansınızı en üst düzeye çıkarmaktır.

Python uygulamamıza gerekli kütüphaneleri import ederek başlayacağız. Neyse ki, bu proje için sadece numpy'yi içe aktarmamız gerekiyor. Ardından, çevreyi tanımlayacağız. Çevreyi tanımlamak, herhangi bir takviyeli öğrenme projesinde çok önemli bir adımdır. Burada slot makinelerinde oynayacağımız toplam tur sayısını belirterek başlayacağız. 1.000 $'ımız olduğundan ve her dönüşün maliyeti 1 $ olduğundan, toplam 1.000 dönüşümüz olacak.

Ayrıca, bu durumda altı olan toplam slot makinesi sayısını da tanımlamamız gerekiyor. Ek olarak, her slot makinesi için kazançlarımızı ve kayıplarımızı takip etmek için diziler oluşturacağız. Bu diziler, önceki derste tartışıldığı gibi, beta dağılımı için şekil parametreleri olarak hizmet edecek. Ayrıca, sonuçlarımızın tekrarlanabilirliğini sağlamak için rasgele sayı üreteci için bir tohum ayarlayacağız.

Ardından, her slot makinesi için %1 ile %15 arasında rastgele dönüşüm oranları üreteceğiz. Bu dönüşüm oranları, bir kumarbazın söz konusu makineyi oynasaydı ne sıklıkta kazanacağını temsil eder. Gerçek dünya senaryosunda kumarbazın bu bilgilere erişimi olmayacağını lütfen unutmayın. Dönüştürme oranlarını oluşturduktan sonra, bilgisayarın belleğinde depolanan değerleri gözlemlemek için bunları ekrana yazdıracağız.

Bir sonraki adımda, birincil veri setini oluşturacağız. Bu veri seti, her dönüş için bir satır ve her slot makinesi için bir sütun içeren bir matris olacaktır. Bu durumda, veri setimiz, 1.000 dönüşü ve 6 olası slot makinesini temsil eden 1.000 satır ve 6 sütuna sahip olacaktır. Matristeki her giriş, belirli bir slot makinesinde belirli bir turda oynamanın sonucunu gösterecek ve "1" bir galibiyeti ve "0" bir kaybı gösterecektir.

Veri kümesini oluşturmak için iç içe "for" döngüleri kullanacağız. Veri setini oluşturduktan sonra, yapısını anlamak için ilk 15 satırı yazdıracağız.

Kod hücresini çalıştırmak, sırasıyla kazançları ve kayıpları temsil eden birler ve sıfırlarla dolu bir matris görüntüler. Her sıra bir dönüşe karşılık gelir ve her sütun bir slot makinesine karşılık gelir. Örneğin, ilk turda herhangi bir slot makinesinde oynamak kayıpla sonuçlanacaktır. Veri seti, belirli bir dönüşte belirli bir slot makinesini oynasaydık sonuçları anlamamızı sağlar.

Ardından, veri kümesindeki her sütun için araçları göstereceğiz. Bu araçlar, simülasyonumuzdaki her slot makinesi için bekleyebileceğimiz gerçek dönüşüm oranlarını temsil eder. Kod hücresinin çalıştırılması, rastgele sayı üreteci ve veri kümemizdeki sınırlı sayıda dönüş nedeniyle kesin olmasa da, daha önce tanımlanan teorik dönüştürme oranlarına yakın olması gereken bu değerleri gösterecektir.

Şimdi, her turda yalnızca bir makine oynama kısıtlamasına bağlı kalarak slot makinelerini 1.000 kez oynamayı simüle etmenin zamanı geldi.

İç içe geçmiş "for" döngülerini kullanarak, dış döngü her dönüşte ve iç döngü her slot makinesinde yineleyerek, simülasyonu gerçekleştireceğiz. Her turun başında "max_beta" değişkenini -1 olarak ayarlayacağız. Bu değişken, mevcut dönüş için gözlemlenen en büyük beta değerini takip etmemize yardımcı olacaktır.

Her slot makinesi için, makinenin beta dağılımından rastgele bir değer çekeceğiz; burada dağılımın şekli, o belirli makineyi oynamaktan elde edilen kazanç ve kayıpların sayısına göre belirlenir. Mevcut slot makinesinin beta değerini mevcut turda şimdiye kadar gözlemlenen en büyük beta değeri ile karşılaştıracağız. Daha büyükse, "index_of_machine_to_play" değişkenini mevcut slot makinesinin indeksi ile güncelleyeceğiz.

Altı slot makinesinin hepsinin beta değerlerini inceledikten sonra, "index_of_machine_to_play" değişkeni, mevcut dönüş için en yüksek beta değerine sahip makinenin dizinini saklayacaktır. Ardından, veri kümemizdeki sonuca bakarak ve "pozitif_ödüllerin_sayısı" veya "negatif_ödüllerin_sayısı" dizisindeki karşılık gelen öğeyi artırarak bunun bir kazanç mı yoksa kayıp mı olduğunu kaydederek seçilen slot makinesini oynayacağız.

Bu süreç, 1.000 turun tamamını tamamlayana kadar devam edecek. AI sistemimiz, keşif ve kullanım arasında karar vermek için birikmiş bilgisini kullanarak her turda sürekli olarak çevreden öğrenecektir. 1.000 turun tamamı bittiğinde, yapay zeka ajanımızın her slot makinesini toplam oynama sayısını hesaplayacağız ve sonuçları ekrana yazdıracağız.

Kod hücresinin çalıştırılması, her slot makinesinin kaç kez oynandığını gösterecektir. Gördüğünüz gibi, takviyeli öğrenmeye dayalı AI sistemimiz, slot makinesi 4'ü en yüksek kazanma olasılığına sahip olarak başarıyla tanımladı. Kümülatif ödüllerini en üst düzeye çıkarmak için bu makineyi 1.000 dönüşün 695'inde oynamayı seçti.

Son olarak, bu sonuçları ilgili bir taban çizgisiyle karşılaştırmak çok önemlidir. Bu durumda, naif bir yaklaşım, her turda oynamak için rastgele bir slot makinesi seçmek olacaktır. Son kod hücresi, her dönüşte oynamak için rastgele bir kumar makinesi seçecek olsaydık, kazanç sayısını hesaplayarak bu rastgele örnekleme yaklaşımını gösterir.

Kod hücresinin çalıştırılması, Thompson Örnekleme yaklaşımı ile rastgele örnekleme yaklaşımı arasındaki karşılaştırmayı ortaya çıkaracaktır. Gördüğünüz gibi, Thompson Örnekleme yaklaşımı, naif, rastgele örnekleme yaklaşımına kıyasla önemli ölçüde daha fazla kazanç sağladı. Bu nedenle, kumarbazımızın Thompson Sampling'i kullanması akıllıca olacaktır!

Bu derste, serimizde şu ana kadar edindiğimiz bilgileri gerçek dünyadaki bir karar verme problemini çözmek için uyguladık. Spesifik olarak, Python'da gerçek bir Çok Silahlı Haydut Problemini ele almak için Thompson Örneklemesini kullanan eksiksiz bir takviyeli öğrenmeye dayalı yapay zeka sistemini başarıyla oluşturduk.

Serimizin bu aşamasında, karar vermeyi desteklemede yapay zeka araçlarının yararlılığına dair bir anlayış geliştirmeye başladığınızı umuyorum. Diğer gerçek dünya sorunlarını çözmek için bu teknolojilerin akıllı ve yenilikçi uygulamalarını da tasavvur ediyor olabilirsiniz.

Bu serinin bir sonraki videosunda, karmaşık bir reklam kampanyasına uygulanan Thompson Örnekleme tabanlı pekiştirmeli öğrenmenin daha gelişmiş bir versiyonunu keşfedeceğiz. Seni de o video için bana katılmaya davet ediyorum.

Bu, Thompson Örnekleme ve ünlü Çok Silahlı Haydut Problemi bağlamında pekiştirici öğrenme hakkındaki dersimizin ikinci bölümünü sonlandırıyor. Umarım bu dersi ilginç bulmuşsunuzdur ve bir dahaki sefere kadar iyi günler!

Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 02
Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 02
  • 2020.04.11
  • www.youtube.com
Dr. Soper provides a complete demonstration of how to implement a reinforcement learning-based AI system in Python that uses Thompson Sampling to solve the c...
 

Python'da Kârı Maksimize Eden Takviyeli Öğrenmeye Dayalı Yapay Zeka Sistemi



Python'da Kârı Maksimize Eden Takviyeli Öğrenmeye Dayalı Yapay Zeka Sistemi

Herkese iyi günler! Dr. Soper konuşuyor. Bugün, pekiştirmeli öğrenmeye dayalı yapay zeka sisteminin, birden çok seçeneği ve milyonlarca müşteriyi içeren karmaşık bir senaryoda kurumsal kârları nasıl etkin bir şekilde maksimize edebileceğini gösteren kapsamlı bir Python örneğini inceleyeceğiz.

Bu videoda gösterilen teknikler, bu dizinin önceki derslerinde tanıtılmış ve kapsamlı bir şekilde tartışılmıştır. Önceki videoları izleme fırsatınız olmadıysa, bu videoya geçmeden önce mutlaka izlemenizi tavsiye ederim.

Python'da kodlamaya dalmadan önce, bu videoda Thompson örneklemeli takviyeli öğrenmeyi temel alan bir yapay zeka sistemi kullanarak çözmeyi amaçladığımız iş problemini tartışalım.

10 milyon müşterisi olan bir kablosuz iletişim şirketinde çalıştığınızı hayal edin. Şirket, bir akıllı telefon yükseltme programı başlatarak karını artırmaya karar verdi. Müşterileri akıllı telefonlarını yükseltmeye ikna etmek için şirketin pazarlama ekibi sekiz farklı reklam kampanyası tasarladı. Her kampanya, müşterilere belirli özellikler, promosyonlar veya indirimler sunar. Bununla birlikte, ilgili özellikler, promosyonlar ve indirimler şirket için değişen maliyetlere neden olacağından, her kampanyadan elde edilen ortalama kâr farklılık gösterecektir. Şirket, her bir reklam kampanyası için satış başına maliyeti ve karı hesaplayabilse de, her kampanyanın ne kadar etkili olacağı belirsizliğini koruyor. Bazı kampanyalar oldukça etkili olabilirken, diğerleri önemli sonuçlar vermeyebilir.

Amacımız, akıllı telefon yükseltme programı için şirketin kârını en üst düzeye çıkarabilecek bir AI sistemi oluşturmaktır. Hedefimizin yalnızca programa katılan müşteri sayısını en üst düzeye çıkarmak olmadığını belirtmek önemlidir. Bunun yerine, yalnızca her reklam kampanyasına maruz kalan müşteri sayısına değil, aynı zamanda her kampanyanın satış yaratmadaki etkinliğine ve satış başına ortalama kâra bağlı olan kârı optimize etmeyi hedefliyoruz. İş problemini net bir şekilde anladıktan sonra Python'a geçelim ve uygulamaya başlayalım.

Bu not defterindeki kodu açıklamadan önce, video açıklamasında bu not defterine bir bağlantı bulunduğunu bildirmek isterim. Denemek veya özel gereksinimlerinize uyarlamak için not defterinin bir kopyasını indirmekten çekinmeyin. Her zamanki gibi, gerekli Python kitaplıklarını içe aktararak başlıyoruz. Bu proje için iki kitaplığa ihtiyacımız olacak: çeşitli olasılık dağılımlarından rastgele değerler üretmek için kullanacağımız NumPy ve para birimi değerlerini uygun şekilde biçimlendirmek için kullanacağımız yerel ayar. Amacımız karı maksimize etmek olduğundan, bu projede yoğun olarak parasal değerlerle çalışacağız. Geçerli yerel ayarımızı Amerika Birleşik Devletleri olarak ayarlamak, Python'un para birimi değerlerini ABD Doları olarak biçimlendirmesini ve büyük sayıları ayırmak için virgül kullanmasını sağlar. Farklı bir para birimi biçimlendirmesini tercih ederseniz, yerel ayarı uygun şekilde değiştirmekten çekinmeyin.

Bir sonraki kod satırı, rasgele sayı üreteci için bir tohum ayarlar. Bu, not defterini indirmeyi ve çalıştırmayı seçerseniz, bu videoda gözlemlenen sonuçların aynısını oluşturabileceğinizi garanti eder.

Bir sonraki görevimiz, farklı reklam kampanyaları hakkında bilgi depolamak için bir sınıf tanımlamayı içerir. Bu sınıfı, her bir reklam kampanyasını temsil eden ve ilgili kampanyaların özniteliklerini veya özelliklerini koruyan nesneler oluşturmak için kullanacağız. Kampanya nesnelerini bu şekilde kullanmak, kampanyayla ilgili tüm ayrıntıları program mantığının geri kalanından ayırmamıza olanak tanıyarak yapay zekanın nasıl öğrendiğini ve karar verdiğini anlamamızı önemli ölçüde geliştirir.

Gözlemleyebileceğiniz gibi, her kampanya nesnesi, benzersiz bir kampanya kimliği sağlanarak başlatılır. __init__ işlevi daha sonra, tek biçimli bir olasılık dağılımından rastgele bir değer çekmek için NumPy kullanan kampanyaya %1 ile %20 arasında bir rastgele dönüşüm oranı atar. Dönüşüm oranı, belirli bir reklam kampanyasına maruz kaldığında akıllı telefonlarını yükseltmeyi seçecek olan müşterilerin yüzdesini ifade eder. Kablosuz şirketinin bu bilgiler hakkında bilgi sahibi olmadığını belirtmekte fayda var. Ayrıca, her kampanya için 100 ila 200 ABD Doları arasında değişen başarılı satış başına rastgele bir kâr atamak için NumPy'yi kullanıyoruz. Bu kâr değerlerini rastgele atamamıza rağmen, her reklam kampanyası için kablosuz iletişim şirketi tarafından sağlanan belirli değerleri kullanmak da eşit derecede mümkündür. Son olarak, sınıf, kampanya için başarılı satış başına karı döndüren bir get_profit() yöntemi içerir.

İşte Campaign sınıfının kodu:

import numpy as np

class Campaign:
    def __init__( self , campaign_id):
         self .campaign_id = campaign_id
         self .conversion_rate = np.random.uniform( 0.01 , 0.20 )
         self .profit_per_sale = np.random.uniform( 100 , 200 )
    
    def get_profit( self ):
         return self .profit_per_sale

Artık Campaign sınıfını tanımladığımıza göre, Thompson örneklemesine dayalı pekiştirmeli öğrenme algoritmasını uygulamaya geçebiliriz. Algoritmayı içine alacak ThompsonSampling adlı bir sınıf oluşturacağız.

ThompsonSampling sınıfı, aşağıdaki özniteliklere ve yöntemlere sahip olacaktır: num_campaigns: Reklam kampanyalarının sayısı.

  • kampanyalar: Mevcut reklam kampanyalarını temsil eden Kampanya nesnelerinin bir listesi.
  • total_sales: Her kampanya için toplam satış sayısını takip etmek için bir liste.
  • total_profits: Her kampanya için toplam karı takip etmek için bir liste.
  • num_trials: Thompson örnekleme algoritmasındaki toplam deneme veya yineleme sayısı.
  • trial_results: Her denemenin sonuçlarını, yani seçilen kampanyayı ve elde edilen karı saklamak için bir liste.

ThompsonSampling sınıfının metotları aşağıdaki gibidir:

  • Initialize_campaigns(): Kampanya nesnelerinin listesini belirtilen sayıda kampanya ile başlatır.
  • select_campaign(): Her deneme için bir kampanya seçmek üzere Thompson örnekleme algoritmasını uygular.
  • update_statistics(): Seçilen kampanya ve elde edilen kâra göre toplam satışları ve kârı günceller.
  • run_trials(): Belirtilen sayıda deneme çalıştırır ve sonuçları kaydeder.

İşte ThompsonSampling sınıfının kodu:

 class ThompsonSampling:
    def __init__( self , num_campaigns, num_trials):
         self .num_campaigns = num_campaigns
         self .campaigns = []
         self .total_sales = [ 0 ] * num_campaigns
         self .total_profits = [ 0 ] * num_campaigns
         self .num_trials = num_trials
         self .trial_results = []
    
    def initialize_campaigns( self ):
         for i in range( self .num_campaigns):
             self .campaigns.append(Campaign(i))
    
    def select_campaign( self ):
        samples = []
         for campaign in self .campaigns:
            profit = campaign.get_profit()
            sample = np.random.normal(profit, 1.0 / campaign.conversion_rate)
            samples.append(sample)
        selected_campaign = np.argmax(samples)
         return selected_campaign
    
    def update_statistics( self , trial, selected_campaign, profit):
         self .total_sales[selected_campaign] += 1
         self .total_profits[selected_campaign] += profit
         self .trial_results.append((trial, selected_campaign, profit))
    
    def run_trials( self ):
         for trial in range( self .num_trials):
            selected_campaign = self .select_campaign()
            profit = self .campaigns[selected_campaign].get_profit()
             self .update_statistics(trial, selected_campaign, profit)

Artık ThompsonSampling sınıfını uyguladığımıza göre, sınıfın bir örneğini oluşturmaya ve algoritmayı çalıştırmaya devam edebiliriz. Bu örnek için kampanya sayısını 8 ve deneme sayısını 1000 olarak ayarlayacağız. Denemeleri çalıştırdıktan sonra, her bir kampanya için toplam satışları ve karı görüntüleyeceğiz.

İşte Thompson örnekleme algoritmasını çalıştırmak için kullanılan kod:

num_campaigns = 8
num_trials = 1000

ts = ThompsonSampling(num_campaigns, num_trials)
ts.initialize_campaigns()
ts.run_trials()

for i in range(num_campaigns):
    total_sales = ts.total_sales[i]
    total_profits = ts.total_profits[i]
    print(f "Campaign {i}: Total Sales = {total_sales}, Total Profits = {total_profits}" )
Kampanya ve deneme sayısı gibi özel gereksinimlerinize göre kodu değiştirebilirsiniz. Ek olarak, her bir kampanya hakkında ek bilgi almak için Campaign sınıfını daha fazla öznitelik ve yöntemle genişletebilirsiniz.
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
  • 2020.04.15
  • www.youtube.com
Dr. Soper provides a complete example of a profit-maximizing artificial intelligence system in Python that relies on Thompson Sampling-based reinforcement le...
 

Q-Learning'in Temelleri



Q-Learning'in Temelleri

Herkese iyi günler! Ben Dr. Soper ve bugün yapay zeka alanındaki güçlü bir teknik olan Q-learning'in temellerini araştıracağım için heyecanlıyım. Bu öğrenme yolculuğuna çıkmadan önce, konseptte yeniyseniz, bu dizideki "Takviyeli Öğrenmenin Temelleri" başlıklı bir önceki videoyu izlemenizi tavsiye ederim.

Bu derste, özellikleri, Q-değerleri, zamansal farklar, Bellman denklemi ve genel Q-öğrenme süreci dahil olmak üzere Q-öğrenmenin temel kavramlarını keşfedeceğiz. Bu dersin sonunda, bu kavramları sağlam bir şekilde kavrayacak ve Q-öğrenmeye dayanan yapay zeka modelleri oluşturmak için iyi donanımlı olacaksınız. O halde, daha fazla uzatmadan başlayalım!

Başlamak için, Q-learning'in neleri içerdiğini kısaca tartışalım. Daha önce bahsedildiği gibi, Q-learning, bir yapay zeka ajanının durumlardan ve ödüllerden oluşan bir ortamla etkileşime girdiği bir pekiştirmeli öğrenme şeklidir. Aracının amacı, altta yatan bir matematiksel modeli veya olasılık dağılımını öğrenmeye ihtiyaç duymadan, doğrudan çevre ile etkileşime girerek en uygun politikayı oluşturmaktır. Q-learning, deneme yanılma yöntemini benimsiyor, çünkü aracı sürekli olarak birden çok bölümde farklı yaklaşımlar kullanarak sorunu çözmeye çalışırken aynı zamanda edindiği bilgilere dayalı olarak politikasını güncelliyor.

Şimdi Q-learning modellerinin özelliklerini inceleyelim. Q-learning, bir tür pekiştirmeli öğrenme olduğundan, tüm pekiştirmeli öğrenme modellerinin temel özelliklerini paylaşır. Bu özellikler bir girdi ve çıktı sistemi, ödüller, çevre, Markov karar süreçleri ve hem eğitim hem de çıkarım modlarını içerir. Bu özelliklere ek olarak, Q-learning modellerinin iki özel özelliği vardır. Birincisi, Q-öğrenme modellerindeki olası durumların sayısı sonludur, yani yapay zeka aracısı kendisini her zaman sabit sayıdaki olası durumlardan birinde bulacaktır. İkinci olarak, Q-öğrenme modellerindeki olası eylemlerin sayısı da sınırlıdır ve yapay zeka aracısının her durumda sabit bir dizi olası eylem arasından seçim yapmasını gerektirir.

Artık özellikleri anladığımıza göre, birkaç klasik Q-öğrenme problemini inceleyelim. Böyle bir problem, her konumun bir durumu temsil ettiği ve aracının eylemlerinin yukarı, sağa, aşağı veya sola hareket etmeyi içerdiği labirenttir. Amaç, labirentte gezinmek ve mümkün olan en kısa sürede çıkışa ulaşmaktır. Başka bir klasik örnek, aracının uçurumdan düşmeden belirli bir konuma ulaşmak için ızgara benzeri bir ortamda gezinmesi gereken uçurumda yürüme problemidir. Her iki senaryoda da yapay zeka aracısı, Q değerlerine güvenerek ve bunları güncelleyerek ortam hakkında bilgi edinir.

Peki, Q değerleri nelerdir? Q değerleri, belirli bir durumda (lar) belirli bir eylemin (a) kalitesini temsil eder. Bu eylem mevcut durumdan alınırsa, gelecekteki ödüllerin beklenen toplamını gösterirler. Başka bir deyişle, Q-değerleri, aracının belirli bir eylemde bulunarak ve oradan en iyi şekilde ilerleyerek biriktirebileceği ek ödülü tahmin eder. AI ajanı, negatif ödülleri olan senaryolarda toplam ödüllerini en üst düzeye çıkarmayı veya toplam cezalarını en aza indirmeyi amaçlar. Temsilci, Q değerlerini güncelleyerek ve iyileştirerek hem olumlu hem de olumsuz pekiştirme yoluyla öğrenir.

Q değerleri, olası durumları temsil eden satırlara ve olası eylemleri temsil eden sütunlara sahip bir Q tablosunda saklanır. Q-tablosu, aracının çevredeki eylemlerine rehberlik eden politikası olarak hizmet eder. Optimum bir Q-tablosu, aracının herhangi bir durumda en iyi eylemi seçmesine olanak tanıyan ve en yüksek potansiyel ödüle yol açan değerleri içerir.

Zamansal farklılıklar (TD), Q-öğrenmede çok önemli bir rol oynar. TD, aracının mevcut durumun eylemleri için Q değerleri hakkında öğrendiklerine dayalı olarak önceki eylem için Q değerinin ne kadar ayarlanması gerektiğini hesaplamak için bir yöntem sağlar. Bu ayarlama, temsilcinin sonraki bölümlerde daha iyi kararlar almasına yardımcı olur. TD değeri, önceki eylem için alınan anında ödül, gelecekteki ödülleri indirgeyen bir indirim faktörü (gama) ve bir sonraki durumun maksimum Q değeri dikkate alınarak hesaplanır.

Genellikle δ olarak gösterilen TD hatası, önceki durum-eylem çifti için TD değeri ile mevcut Q-değeri arasındaki fark olarak hesaplanır. Ajanın tahmini ile çevrede gözlemlenen gerçek ödül arasındaki tutarsızlığı temsil eder. TD hatası, önceki durum-eylem çiftinin Q-değerini güncellemek için kullanılır, böylece zaman içinde Q-değerlerini kademeli olarak iyileştirir.

Şimdi, Q-öğrenmenin kalbinde yer alan Bellman denklemini tanıtalım. Bellman denklemi, bir durum-eylem çiftinin Q-değeri ile komşu durum-eylem çiftlerinin Q-değerleri arasındaki ilişkiyi ifade eder. Aşağıdaki gibi tanımlanır:

Q(s, a) = R(s, a) + γ * maks[Q(s', a')]

Bu denklemde, Q(s, a), s durumunun Q-değerini temsil eder ve a eylemi, R(s, a), s durumunda a eylemi gerçekleştirilirken elde edilen anlık ödülü belirtir, γ (gama) indirim faktörüdür. anlık ödüllere kıyasla gelecekteki ödüllerin önemini belirler, s', s durumlarında a eylemi gerçekleştirildikten sonra ulaşılan bir sonraki durumdur ve a', s' durumlarında gerçekleştirilecek en iyi eylemi temsil eder.

Bellman denklemi esas olarak, bir durum-eylem çiftinin Q-değerinin, hemen elde edilen ödül artı bir sonraki durum-eylem çiftlerinin iskonto edilmiş maksimum Q-değerine eşit olması gerektiğini belirtir. Bellman denklemini yinelemeli olarak uygulayarak ve gözlemlenen ödüllere ve gelecekteki tahminlere dayalı olarak Q-değerlerini güncelleyerek, aracı kademeli olarak optimal bir politikaya yakınsar.

Şimdi genel Q-öğrenme sürecine geçelim. Q-learning, aşağıdaki adımlardan oluşan yinelemeli bir yaklaşımı takip eder:

  1. Q-tablosunu isteğe bağlı değerler veya sıfırlarla başlatın.
  2. Mevcut durumu gözlemleyin.
  3. Yeni eylemleri keşfetmekle öğrenilen bilgileri kullanmak arasında denge kuran epsilon-gredy gibi bir keşif-sömürü stratejisine dayalı bir eylem seçin.
  4. Seçilen eylemi gerçekleştirin ve anında ödülü ve bir sonraki durumu gözlemleyin.
  5. Bellman denklemini ve gözlemlenen ödülü kullanarak önceki durum-eylem çiftinin Q-değerini güncelleyin.
  6. Geçerli durumu bir sonraki duruma ayarlayın.
  7. Aracı bir terminal durumuna veya önceden tanımlanmış sayıda epizoda ulaşana kadar 3 ila 6 arasındaki adımları tekrarlayın.
  8. Q-değerlerini hassaslaştırmak ve aracının politikasını iyileştirmek için birden çok bölüm için 2 ila 7 arasındaki adımları tekrarlayın.

Bu yinelemeli süreç boyunca, Q değerleri güncellenir ve kademeli olarak optimal değerlerine yakınsayarak, iyileştirilmiş bir politikaya yol açar. Keşif-sömürü stratejisi, temsilcinin daha iyi stratejiler keşfetmek için yeni eylemler keşfetme ile mevcut en iyi eylemlere dayalı kararlar almak için öğrenilen bilgileri kullanma arasında denge kurmasına olanak tanır.

Q-learning'in politika dışı bir öğrenme algoritması olduğunu belirtmekte fayda var, bu da aracının farklı bir politika tarafından üretilen deneyimlerden öğrenebileceği anlamına gelir. Bu özellik, farklı stratejileri keşfetmede daha verimli öğrenme ve daha fazla esneklik sağlar.

Özetle, Q-learning, takviyeli öğrenme alanında güçlü bir tekniktir. Ortamın matematiksel bir modelini gerektirmeden deneme yanılma yoluyla en uygun politikaları öğrenmeyi içerir. Gelecekteki ödüllerin beklenen toplamını tahmin etmek için Q-değerlerini kullanarak, bunları zamansal farklılıklar ve Bellman denklemi aracılığıyla güncelleyerek ve yinelemeli bir öğrenme sürecini takip ederek, aracı kademeli olarak politikasını geliştirir ve verilen görevde daha iyi performans elde eder.

Umarım bu ders size Q-learning'in temelleri hakkında sağlam bir anlayış sağlamıştır. Bir sonraki derste, uygulama ayrıntılarına daha derinlemesine dalacağız ve Q-learning'in uygulamalı örneklerini iş başında keşfedeceğiz. İlginiz için teşekkür ederim, bir sonraki videoda görüşmek dileğiyle!

Foundations of Q-Learning
Foundations of Q-Learning
  • 2020.04.22
  • www.youtube.com
Dr. Soper discusses the foundations of Q-learning, which is one of the major types of reinforcement learning within the broader realm of artificial intellige...
 

Q-Learning: Python'da Eksiksiz Bir Örnek


Q-Learning: Python'da Eksiksiz Bir Örnek

Ben Dr. Soper ve bugün Q-learning kullanan Python tabanlı yapay zeka sisteminin ayrıntılı bir incelemesini sunmaktan heyecan duyuyorum. Bu ders, önceki videoda tartışılan kavramlar üzerine inşa edilmiştir, bu nedenle Q-learning'e aşina değilseniz, bu videoya geçmeden önce önceki videoyu izlemenizi önemle tavsiye ederim.

Bu derste, büyüyen bir e-ticaret şirketinin karşılaştığı bir iş problemini ele alacağız. Şirket yeni bir depo inşa ediyor ve toplama işlemlerini depo robotları kullanarak otomatikleştirmek istiyor. Depo robotları, toplama dahil olmak üzere çeşitli depo görevlerini yerine getirmek için tasarlanmış otonom kara araçlarıdır.

Toplama, müşteri siparişlerini yerine getirmek için depodaki farklı konumlardan tek tek kalemlerin toplanması sürecini ifade eder. Ürünler raflardan alındıktan sonra, e-ticaret şirketi, robotların bunları nakliye için depo içindeki belirli bir paketleme alanına taşımasını istiyor.

Maksimum verimlilik ve üretkenliği sağlamak için robotların, paketleme alanı ile depo içinde seyahat etmelerine izin verilen diğer tüm yerler arasındaki en kısa yolları öğrenmesi gerekir. Bu videoda amacımız, bu görevi gerçekleştirmek için Q-learning'i kullanmaktır.

Öncelikle depo robotu senaryomuz için ortamı tanıtalım. Depo, her siyah karenin bir öğe depolama konumunu (raf veya depolama kutusu) temsil ettiği ve her beyaz karenin robotların gezinme için kullanabileceği bir koridoru temsil ettiği bir diyagram olarak gösterilebilir. Yeşil kare, öğe paketleme alanının konumunu gösterir.

Toplamda, depoda 121 konum vardır ve her konum, bir robotun kendisini belirli bir zamanda bulabileceği bir durumu veya durumu temsil eder. Her durum bir satır ve sütun dizini ile tanımlanabilir. Örneğin, öğe paketleme alanı (0, 5) konumunda bulunur. Siyah ve yeşil kareler terminal durumlarıdır, yani AI aracısı eğitim sırasında bu alanlardan birine bir robot sürerse eğitim bölümü tamamlanır. Yeşil kare hedef durumu temsil ederken, siyah kareler başarısızlık durumlarını temsil eder, çünkü robotun bir öğe depolama alanına çarpması bir başarısızlık olarak kabul edilir.

Ardından, yapay zeka aracısının kullanabileceği eylemleri tartışalım. AI aracısı dört yönden birini seçebilir: Yukarı, Sağ, Aşağı veya Sol. Temsilcinin amacı, robotun öğe depolama alanlarına çarpmasını önleyen eylemleri öğrenmektir.

Şimdi, senaryomuz için ödül yapısını keşfedelim. Ambardaki her duruma (konuma) bir ödül değeri atanır. AI temsilcisinin öğrenmesine yardımcı olmak için, hedef durum dışındaki tüm durumlar için negatif ödüller (cezalar) kullanılır. Paketleme alanına (hedef durumu) 100 ödül değeri atanırken, diğer tüm durumlar -100 ödül değerine sahiptir. Negatif ödüllerin kullanılması, yapay zeka ajanını cezaları en aza indirerek hedefe giden en kısa yolu bulmaya teşvik eder. Beyaz kareler için pozitif ödüller kullanılmaz çünkü aracının amacı kümülatif ödülleri en üst düzeye çıkarmaktır ve beyaz kareler için pozitif ödüller kullanmak aracının hedefe ulaşmadan amaçsızca ödül biriktirmesine yol açabilir.

Ortamı durumları, eylemleri ve ödülleri ile tanımladığımıza göre, Python'a geçelim ve kod uygulamasına daha yakından bakalım.

Gerekli Python kitaplıklarını içe aktararak başlıyoruz. Bu proje için sadece çok boyutlu diziler oluşturmak, rastgele değerler üretmek ve sayısal görevleri gerçekleştirmek için kullanılacak olan numpy kütüphanesine ihtiyacımız var.

Bir sonraki adım, durumlardan başlayarak çevreyi tanımlamaktır. Depo, 121 olası durumla sonuçlanan 11x11 ızgara olarak temsil edilir. Her durum ve eylem kombinasyonu için Q değerlerini depolamak için üç boyutlu bir numpy dizisi kullanıyoruz. İlk iki boyut, durumların satırlarını ve sütunlarını temsil ederken, üçüncü boyut, AI aracısının gerçekleştirebileceği her olası eylem için bir öğe içerir.

Ardından, temsilcinin kullanabileceği dört eylemi tanımlıyoruz: Yukarı, Sağ, Aşağı, Sol.

Kod uygulamasına devam edelim.

import numpy as np

# Define the environment
num_rows = 11
num_cols = 11
num_actions = 4

# Create the Q- table
Q = np.zeros((num_rows, num_cols, num_actions))
Artık ortamı ve Q-tablosunu tanımladığımıza göre, Q-öğrenme algoritmasını uygulamaya geçebiliriz. Q-öğrenme algoritması aşağıdaki adımlardan oluşur:

  1. Q tablosunu sıfırlarla başlatın.
  2. Hiperparametreleri ayarlayın: öğrenme oranı (alfa), indirim faktörü (gama), keşif oranı (epsilon) ve bölüm sayısı (num_episodes).
  3. Her bölüm için:
    • İlk durumu ayarlayın (current_state).
    • Geçerli durum bir terminal durumuna ulaşana kadar tekrarlayın:
      • epsilon-greedy politikasına dayalı bir eylem (current_action) seçin.
      • Seçilen eylemi gerçekleştirin ve bir sonraki durumu (sonraki_durum) ve ödülü (ödül) gözlemleyin.
      • Q-öğrenme formülünü kullanarak mevcut durum-eylem çiftinin Q-değerini güncelleyin.
      • Mevcut durumu (current_state) bir sonraki duruma (next_state) güncelleyin.

Depo robotu senaryomuz için Q-learning algoritmasını uygulayan kod aşağıdadır:

# Set the hyperparameters
alpha = 0.1     # Learning rate
gamma = 0.9     # Discount factor
epsilon = 0.1   # Exploration rate
num_episodes = 1000

# Q-learning algorithm
for episode in range(num_episodes):
    # Set the initial state
    current_state = ( 0 , 0 )
    
    # Repeat until the current state reaches a terminal state
    while current_state != ( 0 , 5 ):
        # Select an action based on the epsilon-greedy policy
        if np.random.uniform() < epsilon:
            current_action = np.random.randint(num_actions)
         else :
            current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
        
        # Perform the selected action and observe the next state and the reward
        if current_action == 0 :  # Up
            next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
        elif current_action == 1 :  # Right
            next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
        elif current_action == 2 :  # Down
            next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
         else :  # Left
            next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
        
        reward = - 1   # Default reward for non-terminal states
        
        # Update the Q- value of the current state- action pair
        Q[current_state[ 0 ], current_state[ 1 ], current_action] = ( 1 - alpha) * Q[current_state[ 0 ], current_state[ 1 ], current_action] + alpha * (reward + gamma * np. max (Q[next_state[ 0 ], next_state[ 1 ], :]))
        
        # Update the current state to the next state
        current_state = next_state
Q-öğrenme algoritmasını çalıştırdıktan sonra, Q-tablosu, belirli bir durumda belirli bir eylemi gerçekleştirmek için beklenen kümülatif ödülleri temsil eden, her bir durum-eylem çifti için öğrenilen Q-değerlerini içerecektir.

Öğrenilen politikayı test etmek için, her durum için en yüksek Q değerlerine dayalı eylemleri seçmek üzere Q tablosunu kullanabiliriz:

 # Use the learned Q-table to select actions
current_state = ( 0 , 0 )
path = [current_state]

while current_state != ( 0 , 5 ):
    current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
    
     if current_action == 0 :   # Up
        next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
    elif current_action == 1 :   # Right
        next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
    elif current_action == 2 :   # Down
        next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
     else :   # Left
        next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
    
    current_state = next_state
    path.append(current_state)

print( "Optimal path:" )
for state in path:
    print(state)
Bu kod, öğrenilen Q değerlerine dayalı olarak başlangıç durumundan (0, 0) hedef durumuna (0, 5) giden en uygun yolu yazdıracaktır.
Q-Learning: A Complete Example in Python
Q-Learning: A Complete Example in Python
  • 2020.04.24
  • www.youtube.com
Dr. Soper presents a complete walkthrough (tutorial) of a Q-learning-based AI system written in Python. The video demonstrates how to define the environment'...
 

Yapay Sinir Ağları ve Derin Q-Öğrenmenin Temelleri


Yapay Sinir Ağları ve Derin Q-Öğrenmenin Temelleri

Ben Dr. Soper ve bugün hepinizle yapay sinir ağlarının ve derin Q-öğrenmenin temellerini tartışma zevkine sahibim.

Bu konuların inceliklerine girmeden önce, Q-learning'e aşina değilseniz, bu serinin bir önceki videosu olan "Q-Learning'in Temelleri" başlıklı videoyu izlemenizi tavsiye ederim.

Bu derste öğreneceklerinizi kısaca özetleyerek başlayalım.

Bu videonun sonunda, aşağıdakiler hakkında kapsamlı bir anlayışa sahip olacaksınız:

  1. Yapay nöronlar nelerdir?
  2. Aktivasyon fonksiyonları kavramı.
  3. Sinir ağları nasıl çalışır?
  4. Sinir ağlarının öğrenme süreci.
  5. Derin Q-öğrenmenin temelleri ve nasıl çalıştığı.

Bu kavramları kavradığımızda, yapay sinir ağlarına ve derin Q-öğrenmeye dayanan yapay zeka modelleri oluşturmak için tam donanımlı olacağız.

Daha fazla uzatmadan, haydi başlayalım!

Yapay sinir ağlarını ve iç işleyişini anlamak için öncelikle yapay nöronları ve aktivasyon fonksiyonlarını anlamamız gerekir.

Peki yapay nöron tam olarak nedir?

Yapay nöronlar, tüm yapay sinir ağlarının üzerine inşa edildiği temel yapı taşları olarak işlev görür. İlk olarak 1943'te Warren McCulloch ve Walter Pitts tarafından insan beyni de dahil olmak üzere hayvan beyinlerinin temelini oluşturan biyolojik nöronların matematiksel bir modeli olarak önerildi.

Bu biyolojik nöronlardan ilham alınarak yapay nöron modeli ortaya çıktı.

Diyagramda gösterildiği gibi, yapay bir nöronun amacı bir veya daha fazla girdi değerini bir çıktı değerine dönüştürmektir. Her giriş değeri, girişin gücünü ayarlayan bir ağırlıkla çarpılır. Örneğin, giriş değeri 0,8 ve ağırlık 0,5 ise, elde edilen çarpma 0,4'ü verir. Bu senaryoda, ağırlık girdinin gücünü azalttı. Tersine, eğer ağırlık 1'den büyük olsaydı, girdinin gücü artardı.

Ağırlıklı giriş değerleri hesaplandıktan sonra, yapay nöronun çıkış değerini üreten bir aktivasyon fonksiyonuna tabi tutulurlar. Hataları en aza indirmek için eğitim sırasında ağırlıkların ayarlanabileceğini belirtmekte fayda var - bu fikre biraz sonra tekrar bakacağız.

Şimdi aktivasyon fonksiyonlarını inceleyelim.

Bir aktivasyon fonksiyonu, ağırlıklı giriş değerlerini bir çıkış değerine dönüştürmek için yapay bir nöron tarafından kullanılan matematiksel bir fonksiyondur. Denklemde gösterildiği gibi, bir aktivasyon fonksiyonu, her bir giriş değerinin ilgili ağırlıkla çarpılmasıyla elde edilen tek bir giriş değerini alır ve ardından tüm bu sonuçları toplar. Toplanan değer daha sonra yapay nöronun çıkış değerini elde etmek için aktivasyon fonksiyonundan geçirilir.

Yapay bir nöronda, her biri girdi değerlerini çıktı değerlerine dönüştürmede farklı davranan çeşitli aktivasyon fonksiyonlarının kullanılabileceğini not etmek önemlidir.

Dört ortak aktivasyon işlevini keşfedelim:

  1. Eşik Etkinleştirme İşlevi: Bu işlev, çıkış olarak 0 veya 1 döndürür. Giriş değeri sıfırdan büyük veya sıfıra eşitse, 1 döndürür; aksi takdirde 0 döndürür. Sonuç olarak, bir eşik aktivasyon fonksiyonu kullanan yapay nöronlar için çıkış değerleri her zaman 0 veya 1 olacaktır.

  2. Sigmoid Aktivasyon Fonksiyonu: Sigmoid aktivasyon fonksiyonunun çıkışı 0 ile 1 arasında değişir. Pozitif giriş değerleri, giriş değerleri arttıkça çıkış değerlerinin 1.0'a yaklaşmasına neden olurken, negatif giriş değerleri, giriş değerleri düştükçe 0.0'a yakın çıkış değerleri verir. Bu nedenle, sigmoid aktivasyon fonksiyonu her zaman 0 ile 1 arasında bir çıkış üretir.

  3. Hiperbolik Teğet Aktivasyon Fonksiyonu: Hiperbolik tanjant fonksiyonu, çıkış değerinin her zaman -1.0 ile +1.0 arasında olması dışında sigmoid aktivasyon fonksiyonuna çok benzer. Pozitif giriş değerleri, giriş değerleri arttıkça +1.0'a yaklaşan çıkış değerleri üretir ve negatif giriş değerleri, giriş değerleri düştükçe -1.0'a yaklaşan çıkış değerleri üretir.

  4. Düzeltilmiş Doğrusal Birim (ReLU) Aktivasyon Fonksiyonu: ReLU aktivasyon fonksiyonu, pozitifse giriş değerinin kendisini ve giriş değeri negatifse 0'ı döndürür. Başka bir deyişle, ReLU tüm negatif değerleri 0'a ayarlar ve pozitif değerleri değiştirmez.

Bunlar, yapay sinir ağlarında kullanılan aktivasyon fonksiyonlarına sadece birkaç örnektir. Aktivasyon fonksiyonunun seçimi, spesifik probleme ve sinir ağının istenen davranışına bağlıdır. Artık yapay nöronları ve aktivasyon fonksiyonlarını ele aldığımıza göre, sinir ağlarının nasıl çalıştığını anlamaya geçelim.

Sinir ağları, karmaşık bir ağ yapısı oluşturan, birbirine bağlı yapay nöronların çoklu katmanlarından oluşur. Bir sinir ağındaki üç ana katman, girdi katmanı, gizli katmanlar ve çıktı katmanıdır. Giriş katmanı, resimler, metin veya sayısal değerler gibi girdi verilerini almaktan ve işlenmek üzere sonraki katmanlara iletmekten sorumludur. Giriş katmanındaki nöronların sayısı, verideki giriş özelliklerinin veya boyutlarının sayısına karşılık gelir. Gizli katmanlar, adından da anlaşılacağı gibi, giriş ve çıkış katmanları arasındaki ara katmanlardır. Bu katmanlar, bir sinir ağında hesaplamanın büyük bölümünü gerçekleştirir. Gizli katmandaki her nöron, önceki katmandan girdi alır ve aktivasyon fonksiyonunu kullanarak bir çıktı hesaplar.

Çıkış katmanı, sinir ağının son çıktısını üretir. Çıkış katmanındaki nöronların sayısı problemin doğasına bağlıdır. Örneğin, bir ikili sınıflandırma probleminde, çıktı katmanında tipik olarak bir sınıfa ait olma olasılığını temsil eden bir nöron olacaktır. Öğrenmeyi sağlamak ve sinir ağının performansını iyileştirmek için, nöronlar arasındaki bağlantıların ağırlıkları eğitim aşamasında ayarlanır. Bu ayarlama, stokastik gradyan iniş gibi bir optimizasyon algoritmasıyla birleştirilmiş, geri yayılım adı verilen bir işlem kullanılarak gerçekleştirilir. Eğitim sırasında, sinir ağına karşılık gelen hedef çıktılarla birlikte bir dizi girdi verisi sunulur. Ağ, her girdi için çıktısını hesaplar ve hesaplanan çıktı ile hedef çıktı arasındaki fark, bir kayıp fonksiyonu kullanılarak ölçülür.

Eğitimin amacı, bağlantıların ağırlıklarını ayarlayarak bu kaybı en aza indirmektir. Geri yayılım algoritması, ağırlıklara göre kayıp fonksiyonunun gradyanını hesaplayarak ağırlıkların kaybı azaltan yönde güncellenmesini sağlar. Bu yinelemeli süreç, sinir ağı verilen girdiler için doğru çıktılar üretmeyi öğrenene kadar devam eder. Artık yapay sinir ağları hakkında sağlam bir anlayışa sahip olduğumuza göre, derin Q-öğrenmenin temellerini keşfedelim.

Derin Q-öğrenme, bir Markov karar sürecinde (MDP) veya bir takviyeli öğrenme ortamında en uygun eylemleri öğrenmek için işlev tahmin edicileri olarak derin sinir ağlarını kullanan bir pekiştirmeli öğrenme tekniğidir. Derin Q-öğrenme bağlamında, genellikle Q-ağ olarak adlandırılan sinir ağı, ortamın durumunu girdi olarak alır ve olası her eylem için bir Q-değeri üretir. Q-değeri, belirli bir durumdan belirli bir eylemi gerçekleştirirken beklenen gelecekteki ödülü temsil eder. Eğitim sırasında, Q-ağ, takviyeli öğrenme ve sinir ağlarının unsurlarını birleştiren Q-öğrenme algoritması kullanılarak güncellenir. Q-öğrenme algoritması, Q-ağının optimal Q-değerlerine ilişkin tahminlerini kademeli olarak iyileştirmek için bir keşif ve kullanım kombinasyonu kullanır.

Derin Q-öğrenme algoritmasının temel adımları şu şekildedir:

  1. Q ağını rastgele ağırlıklarla başlatın.
  2. Ortamın mevcut durumunu gözlemleyin.
  3. Yeni eylemleri keşfetmekle mevcut bilgiyi kullanmak arasında bir dengenin olduğu epsilon-gredy gibi bir keşif-sömürü stratejisi kullanarak bir eylem seçin.
  4. Seçilen eylemi yürütün ve ödülü ve yeni durumu gözlemleyin.
  5. Q-ağının ağırlıklarını, seçilen eylemin Q-değerini gözlemlenen ödüle ve yeni durumun maksimum Q-değerine göre ayarlayan Q-öğrenme güncelleme kuralını kullanarak güncelleyin.
  6. Öğrenme süreci yakınsayana veya önceden tanımlanmış sayıda yinelemeye ulaşana kadar 2-5 arasındaki adımları tekrarlayın.

Q-öğrenme algoritmasını kullanarak Q-ağını yinelemeli olarak güncelleyerek, ağ kademeli olarak her bir durum-eylem çifti için en uygun Q-değerlerini tahmin etmeyi öğrenir. Eğitildikten sonra Q ağı, belirli bir durum için en yüksek Q değerine sahip eylemi seçmek için kullanılabilir ve bir aracının takviyeli bir öğrenme ortamında bilinçli kararlar almasını sağlar. Derin Q-öğrenme, diğerleri arasında oyun oynama, robotik ve otonom araç kontrolü dahil olmak üzere çeşitli alanlara başarıyla uygulandı. Yüksek boyutlu duyusal girdilerden karmaşık görevlerin öğrenilmesinde dikkate değer bir performans göstermiştir. Bununla birlikte, derin Q-öğrenmenin, Q-değerlerinin fazla tahmin edilmesi potansiyeli ve sürekli eylem alanlarını ele almanın zorluğu gibi belirli sınırlamaları olduğunu not etmek önemlidir. Araştırmacılar, bu zorlukların üstesinden gelmek ve derin takviyeli öğrenmenin yeteneklerini geliştirmek için gelişmiş teknikleri ve algoritmaları keşfetmeye devam ediyor.

Derin Q-öğrenme, belirli bir ortamda en uygun eylemleri öğrenmek için derin sinir ağlarıyla pekiştirmeli öğrenmeyi birleştiren güçlü bir tekniktir. Karmaşık işlevlere yaklaşmak için derin sinir ağlarının kapasitesinden yararlanan derin Q-öğrenme, yapay zekanın çeşitli alanlarında önemli ilerlemeler göstermiştir.

Foundations of Artificial Neural Networks & Deep Q-Learning
Foundations of Artificial Neural Networks & Deep Q-Learning
  • 2020.04.30
  • www.youtube.com
Dr. Soper discusses the foundations of artificial neural networks and deep Q-learning. Topics addressed in the video include artificial neurons, activation f...