Charlie Gerard ile Çarpıcı Podcast Bölüm 33: Makine Öğrenimi Nedir?
Yayınlanan: 2022-03-10Bu bölümde, Makine Öğrenimi hakkında konuşuyoruz. Bir web geliştirme bağlamında ne tür görevlere koyabiliriz? Öğrenmek için uzman Charlie Gerard ile konuştum.
Notları göster
- JavaScript'te Pratik Makine Öğrenimi: Web Geliştiricileri için TensorFlow.js
- Twitter'da Charlie
- Charlie'nin kişisel sitesi
Haftalık güncelleme
- Bağımlılık Enjeksiyonuna Pratik Bir Giriş
Jamie Corkhill'in yazdığı - Reklamsız Bir Web'e Doğru: Çevrimiçi Ekonomiyi Çeşitlendirmek
Frederick O'Brien'ın yazdığı - Web Donanım Yeteneklerini Ortaya Çıkarmalı mı?
Noam Rosenthal'ın yazdığı - 2021'de Shopify Uygulamaları Satarak Nasıl Daha Fazla Para Kazanılır
Suzanne Scacca'nın yazdığı - Flutter Uygulamalarında GetX Paketine Başlarken
Kelvin Omereshone tarafından yazıldı.
Transcript
Drew McLellan: Netlify'da kıdemli bir ön uç geliştirici, web teknolojilerinde Google Developer uzmanı ve Mozilla teknoloji konuşmacısıdır. Boş zamanlarında insan bilgisayar etkileşimi alanını keşfediyor ve donanım, makine öğrenimi ve yaratıcı kodlama kullanarak etkileşimli prototipler oluşturuyor. Düzenli olarak konferanslarda konuşuyor ve öğrendiği şeyleri paylaşmak için blog yazıları yazıyor. Ve son olarak, Apress için JavaScript'te Pratik Makine Öğrenimi kitabının yazarıdır.
Drew: Yani onun bir ön uç uzmanı olduğunu biliyoruz, ancak bir keresinde rüyalardan ördüğü metal bir dosya kullanarak hapisten kaçmayı başardı mı? Ezici dostlarım, lütfen hoşgeldiniz Charlie Gerard. Merhaba Charlie. Nasılsınız?
Charlie Gerard: Eziyorum.
Drew: Bugün sizinle makine öğrenimi hakkında konuşmak istedim; bu, temelde web geliştirmenin bir tür tarayıcı ucuna odaklanan bir podcast için biraz garip bir konu gibi görünebilir. Makine öğrenimini, beyaz önlüklü insanlarla dev veri merkezlerinde veya laboratuvarlarda gerçekleşen bir şey olarak düşünmeye eğilimliyim. Bu günlerde kesinlikle bir tür moda kelime. Makine öğrenimi dediğimizde aslında ne demek istiyoruz?
Charlie: Yani genel olarak standart tanım, bilgisayarlara ne yapacakları söylenmeden tahminler üretme yeteneği vermek olurdu. Umarım, bunun hakkında konuşmaya devam ettiğimizde bu bir anlam ifade eder, ancak bu tür genel konuşma tanımıdır. Algoritmalara veya modellere gidip belirli şeyleri aramalarını gerçekten söylemiyorsunuz. Verdiğiniz veriler aracılığıyla öğrenirler ve daha sonra tahminler oluşturabilirler.
Drew: Yani belirli durumlar için özel olarak kodlama yapmak yerine, yazılımın bu şeyleri nasıl yapacağını öğrenebileceği genel bir durum mu yaratıyorsunuz?
Charlie: Evet, aynen.
Drew: Bu kulağa biraz ürkütücü geliyor. Bu, bir nevi şeylerin yapay zeka yönüne doğru ilerliyor. Bunu yapmak için sıkı bir matematik meraklısı mı yoksa bir veri bilimcisi mi olmanız gerekiyor? Yoksa yerleşik algoritmalar ve başlamak için arayabileceğiniz şeyler gibi şeyler var mı?
Charlie: Evet. Neyse ki, sıkı bir matematik ineği veya veri bilimcisi olmanıza gerek yok. Aksi takdirde, kesinlikle bundan bahsetmezdim. Ancak, her şeyi sıfırdan yazmanıza gerek kalmadan bu algoritmaları kullanmanıza izin veren, önceden anlaşılmış algoritmalar ve halihazırda mevcut araçlar vardır. Dolayısıyla, karşılaştırma olarak ön uç ekosistemini kullanırsak, web kamerasına veya mikrofona erişmek istediğinizde kullanıcı medyasını almak için gezgin gibi web API'lerini kullanabilirsiniz.
Charlie: Ve bu API'nin kaputun altında gerçekte nasıl uygulandığını bilmek zorunda değilsiniz. Önemli olan bu API'nin ne işe yaradığını ve isterseniz nasıl kullanılacağını bilmenizdir. Daha sonra, gerçekten nasıl çalıştığını öğrenmek için favori tarayıcınızın kaynak koduna gidip bakabilirsiniz, ancak ilk etapta gerçekten kullanışlı değil. Ve daha sonra kendi algoritmanızı yazmak isterseniz faydalı olabilir. Ama gerçekten dürüst olmak gerekirse, bunu yapmak istemeniz pek olası değil.
Duru: Tamam. Bu biraz, bir öğeyi bir sayfada konumlandırmak için CSS yazma yönteminize benziyor. Tarayıcının aslında bunu nasıl yaptığı umurunuzda değil. Sadece biraz CSS yazarsınız ve tarayıcı bununla ilgilenir.
Charlie: Evet. Başladığınızda, çoğunlukla böyle bir şey.
Duru: Bu iyi. Bu daha çok benim veri bilimi seviyem.
Charlie: Ben de.
Drew: Peki makine öğrenimini ne tür problemlere koyabilirsiniz? Ne tür şeylere iyi gelir?
Charlie: Her şeyden önce ne yapmak istediğinize bağlı, çünkü belirli bir şey inşa etmek istediğinizde, önce öğrenmek istediğiniz problemin türünü düşünmenizi tavsiye ederim, bu daha sonra bir algoritma seçmenize yardımcı olacaktır. düzeltmek veya sorununuza bir çözüm bulmak için kullanabilirsiniz. Genel olarak, çözmeye çalıştığım problemin türünü düşünerek başlardım ve üç ana problem var. Muhtemelen biraz daha fazlası olduğunu düşünüyorum, ancak genel olarak, yapmak için eğitildiğim ve okuduklarım için bahsedilen üç ana şey var.
Charlie: Buna girmemi istersen, denetimli öğrenme, denetimsiz öğrenme ve pekiştirmeli öğrenme var. Ayrıca çok fazla denetlenen var, ama dürüst olmak gerekirse, bu konuda pek bir şey bilmiyorum çünkü projelerimi ilk üçü ile inşa edebildim.
Drew: Denetimli, denetimsiz ve takviye mi dediniz?
Charlie: Evet, pekiştirmeli öğrenme.
Duru: Tamam. Peki denetimli öğrenme nedir? Bunun ne anlama geldiğine dair bize bir örnek verebilir misiniz?
Charlie: Denetimli öğrenme, veri kümenizin özelliklerden ve etiketlerden oluştuğu ve bunu bir algoritmaya beslediğiniz zamandır. Bu yüzden, çoğu insanın ilişki kurabileceğini umduğumuz bir örnek alırsak, bu, bir eviniz varsa ve onu satmak istiyorsanız ve evinizi veya evinizi hangi fiyata satacağınızı bulmak istiyorsanız. araba, aslında, bu arada, aynı şey olurdu. Ve aynı ortamdaki veya aynı tipteki evlerin bir veri setini kullanıp piyasadaki fiyatlarını bilerek kendi evinizin özelliklerini kullanabileceksiniz; peki kaç odası ve bahçesi var ve hangi mahallede? Ve bunun gibi şeyler.
Charlie: Bunlar özelliklerdir ve etiket fiyat olacaktır ve zaten etrafınızdaki evlerin tüm bu veri setlerini kullanarak, evinizin özellikleri arasındaki ilişkiyi öğrenecek bir makine öğrenimi algoritması kullanabilirsiniz. ve piyasadaki fiyatlar, daha sonra evinizin özelliklerini almak ve bundan bir fiyat üretebilmek. Yani en önemli şey denetimli öğrenmede, bir dizi özelliğiniz ve bir etiketiniz de var, böylece ikisi arasında gerçekten bir ilişki kurabilirsiniz.
Drew: Bu örnekte evlerle ilgili geniş bir veri seti ile modeli beslersiniz, fiyatlarını bilirsiniz ve sonra onlar hakkında tüm bu özellikleri bilirsiniz. Yatak odaları ve kare görüntüleri gibi neye sahipsiniz ve sanırım konum, hesaba katılabilecek başka bir şey olurdu?
Charlie: Evet. Bu, makine öğrenimi ile ilgili sorunlardan biri, birçok özelliğe sahip olabilmeniz ve bazılarının aslında diğerleri kadar verimli olmayacağıdır. Örneğin, evinizin rengine sahip olabilirsiniz, aslında fiyatla hiçbir ilişkisi olmayabilir, ancak bir dizi özellik verebilirsiniz ve model, ikisi arasında bir ilişki bulacaktır. Ardından, isterseniz veri kümenizi değiştirebilir ve rengi kaldırabilirsiniz veya bahçenin boyutunun önemli olmadığını veya bunun gibi şeyleri fark edebilirsiniz.
Charlie: Yani genel olarak, veri kümenizi bir modele besleseniz bile, ilk seferde mükemmel bir tahmininiz olmayacak. Genellikle birkaç farklı şeyi ince ayarlarsınız ve görürsünüz. Oldukça doğru olduğunu düşündüğünüz bir tahmine ulaşana kadar biraz ince ayar yaparsınız.
Drew: Ve bir kez bu model oluşturulduğunda veya onu bir şehirden gelen verileri kullanarak yarattığınızı söyleyince, onu alıp besleyebilir misiniz… onu başka bir şehirden veri beslemeniz gerekir mi? Bu eğitim tamamlandıktan sonra onu alıp başka bir yerde kullanabilecek misiniz yoksa o veri kümesine özel mi yoksa bu nasıl çalışır?
Charlie: Veri setine özel olacağını düşünüyorum. Yani aynı, diyelim format ile başka bir veri seti oluşturabilirsiniz. Farklı sütunlara sahip bir Excel Elektronik Tablonuz varsa, aynı etiketi ve özellikleri koruyabilir, ancak onu o şehrin değerleriyle değiştirmeniz gerekir. Ancak genel olarak bu, veri kümesini toplamanın da çok zaman alabileceği anlamına gelir, ancak örneğin Paris şehri için ne yaptığınızı zaten biliyorsanız ve veri kümenizin yapısının aynı olduğunu biliyorsanız, ancak değerleri değiştirirsiniz, biraz daha hızlıdır ve modeli yeniden oluşturabilirsiniz.
Charlie: Örneğin, Paris'teki evlerin fiyatları Avustralya'daki küçük bir şehirden farklı olduğu için verileriniz farklıysa aynı modeli tekrar kullanmamalısınız. Yani yanlış verilere sahip olmak istemezsiniz çünkü ilk başta veri kümenizin çekirdeği tam olarak aynı değildi.
Drew: Makine öğrenimi olan bir tür model hakkında çok konuşuyoruz. Dolayısıyla model, veri setinin tüm analizlerinin nihai sonucu gibidir. Ve daha sonra sonraki tahminleri yapmak için kullanılır. Model bu, değil mi?
Charlie: Evet, aynen öyle. Bu bir modeldir, dolayısıyla daha önce hiç görmediği yeni girdileri besleyeceğiniz bir fonksiyona benzer, ancak eğitim adımında öğrendiklerine dayalıdır. bir tahminde bulunabilecektir.
Drew: Denetimli öğrenme, o zaman özellikler üzerindeki etiketlerden bu tahmine dayalı modeli yapar. Denetimsiz öğrenme nedir?
Charlie: Yani denetimsiz olmak biraz aynı kavram ama etiketleri kaldırıyorsunuz. Yani bu durumda, bir evi satma problemimizin aslında denetimsiz bir öğrenme problemi olmayacağını düşünebilirsiniz, çünkü sadece çevrenizdeki evlerin özelliklerini biliyorsanız, ancak etiket olarak bir fiyatınız yoksa, gerçekten bir fiyat tahmin edemez. Fiyatın ne olduğunu bile bilmeyecek.
Charlie: Bir dizi veriye sahip olduğunuzda ve yalnızca onunla ilgili özelliklere sahip olduğunuzda denetimsiz daha fazladır. Birlikte daha fazla eğilim veya küme oluşturabilirsiniz. Belirli bir çıktı istiyorsanız, "Bunun fiyatı nedir?" gibi belirli bir sorunuz varsa denetimsiz öğrenmeyi kullanmazsınız. Bu, denetimsiz kullanımın gerçekten iyi bir kullanımı değil, ama dahası, varlıkları bir araya getirmek istiyorsanız, insanlar veya bunun gibi şeyler olabilir.
Charlie: Genellikle, bunun için bir kullanım örneği, Amazon tavsiyeleri veya Spotify tavsiyeleri gibi, "Sizin gibi insanlar da bunu dinliyor" gibi ve bu durumda özelliklerin olduğu yer daha çok... hakkınızdaki veriler, böylece ne dinlediğinizi, genellikle hangi ülkede olduğunuzu veya günde kaç kez bir şey dinlediğinizi bilirler? İnsanlarla ilgili bu özellikleri kullanarak, sizi aynı kümeye veya aynı tür dinleyicilere veya Amazon'da belirli şeyleri satın alan aynı tür insanlara koyabilirler. Ve bu tür denetimsiz öğrenmeyi kullanarak, sizin gibi insanlara dayanarak size neyin reklamını yapacaklarını veya ne dinlemeniz gerektiğini önereceklerini bilirler. Yani bu tür sorunlar daha çok.
Drew: Tamam, yani bunların hepsi şimdi bir web geliştiricisi olarak benim için çok daha mantıklı, çünkü bahsettiğimiz bu tür kullanımlar, ev fiyatları ve tavsiyeler ve reklamlar ve şeyler sunma, günün sonunda, Bunlar, uğraşmamız gereken her türlü şey ve bir siteye veya ürüne koymak isteyebileceğimiz özellikler veya sahip olduğunuz şeyler. Dolayısıyla, tahmin etmeye çalıştığımız konuya dayalı farklı öğrenme türlerine sahibiz. Bunu da koyabileceğimiz başka türden uygulamalar var mı? İnsanların yarattığı, bunu kullanabilecek iyi örnekler var mı?
Charlie: Evet. Çok fazla örnek var. Bu yüzden bir evin fiyatını tahmin etmekten bahsettiğimde, belki de sizi ilgilendiren bir şey değil. Belki o kadar heyecan verici değil, ama aslında yapabileceğiniz çok daha fazlası var. Etrafta çok güzel örnekler var. Sanırım ilk gördüğüm, görseller için dinamik olarak oluşturulmuş sanat metinleriydi. Yani elbette bir siteye resim eklediğinizde kendi başınıza yapabileceğiniz bir şey.
Charlie: Peki ya gerçekten tonlarca görsel içeren bir siteniz varsa ve manuel olarak yapmak yerine, her bir görseli bir makine öğrenme algoritmasına beslerseniz ve o görselin ne hakkında olduğunu anlatan bir sanat metni oluşturursa ve belki de tek insan adımı bunun doğru olduğunu doğrulamak olabilir, ancak bu gerçekten zamanınızı uygulamayı oluşturmaya odaklamanıza izin verir.
Charlie: Ve yine de resimler için sanat metinlerine sahip olarak web sitenizi erişilebilir hale getirirsiniz, ancak bu bir tür makine tarafından oluşturulur. Bu, işe başladığımda gördüğüm örneklerden biri, ancak aynı zamanda iş içeriği için güvenli olmayan bir filtreleme prototipiniz de var. Ve bunun bir Chrome uzantısında oldukça iyi olacağını düşünüyordum, bir web sayfasını her açtığınızda, sayfada bulunanların bir tür güvenli içerik olup olmadığını kontrol edebileceğiniz bir Chrome uzantısına sahip olabilirsiniz.
Charlie: Örneğin, dizüstü bilgisayarınızı kullanan çocuklarınız varsa veya bunun gibi şeyler varsa, isterseniz resimleri gizleyebilir veya bu resimleri pandalarla değiştirebilirsiniz. Ancak bu, belirli görevler hakkında endişelenmenize gerek kalmaması için bazı şeyleri sizin için otomatik olarak yapmak için makine öğrenimini kullanabileceğiniz veya başka şeyler yapmak için beyin gücünüzü kullanabileceğiniz türden bir uygulamadır.
Charlie: Ama sonra, Amazon Alexa ile iletişim kuran web kamerasını kullanan bir jest tanıma örneği, ses tanıma ve benzeri şeylerle daha da gelişmiş bir şey var. Böylece, ses ve web kamerası ve makine öğrenimi ile birçok farklı teknolojiyi, yalnızca tanıma ve farklı teknolojilerle etkileşime girebilmek için, ancak yeni bir şekilde gerçekten birleştirebilirsiniz. Bu yüzden gerçekten oldukça eğlenceli geçebilir.
Drew: Bu oldukça büyüleyici, çünkü bir tür veri modellerini bu şekilde analiz etmeye baktık ve şimdi oldukça ilginç olan makine öğrenimini kullanarak görüntü içeriğine bakmayı ve görüntülerin içeriğini analiz etmeyi düşünüyoruz. Sanırım bu, Facebook'un sahip olduğu türden bir özellik, biri kanlı olabileceğini düşündükleri veya bir yaralanma veya başka bir şey gösterdiğini düşündükleri bir resim yayınlarsa ve bu onu bulanıklaştırır ve sonra onu ortaya çıkarmak için tıklamanız yeterlidir. Bu tür şeyler, açıkçası, Facebook'un yüklenen her resme bakan moderatör ekipleri olamaz.
Charlie: Umarım yapmazlar.
Drew: Bu sonsuz bir görev olurdu.
Charlie: Bu da harika bir iş değil.
Drew: Eskiden insanların reklam yayınlayabileceği ücretsiz bir reklam sitesinde çalışıyordum. Ve bununla ilgili çok fazla ılımlılık vardı, web geliştiricisi olarak benim bile dahil olmak zorundaydım, sadece geçiyordum, "Evet, hayır, evet, hayır" diyerek tüm bu görüntülere bakıyordum.
Charlie: Onu da biraz yaptım. Keşke o zamanlar makine öğrenimi olsaydı, sadece bunu benim için yapacak küçük bir yardımcı araç ve şimdi orada. Bu çok güzel.
Drew: Evet, bu gerçekten harika. Ve bir web kamerasından canlı girdiyi düşünmek ve bunu gerçek zamanlı olarak analiz edebilmek oldukça heyecan verici, böylece jest tabanlı etkileşimler yapabilirsiniz. Bu mu…
Charlie: Evet, özünde aslında daha fazla görüntü sınıflandırması kullanıyor, çünkü web kameranız, bir görüntü bir piksel kümesidir, ancak daha sonra belirli hareketler yaptığınızda, bir modeli sağ elinizin yukarıda olduğunu ve belki de sizi tanımak için eğitebilirsiniz. fareyi bu şekilde kontrol eder veya elinizin ve ekranın koordinatlarına bakar ve fareyi takip edersiniz. Gerçekten ne istersen yapabilirsin. Belki renk tanımaya sahip olabilirsiniz.
Charlie: Gerçekten eğlenceli şeyler yapabilirsin. Bir prototip benim oluşturduğum, bir noktada bundan vazgeçtiğim ama biraz inşa ettiğim… Bunun bir Chrome uzantısı olmasını istedim ama işe yaramadı. Electron ile küçük bir masaüstü uygulaması yaptım. Ayrıca sadece başımı eğerek bir web sayfasına göz atabileceğim JavaScript'te. Böylece başımı aşağı eğdiğimde aşağı kaydığını ve yukarı çıktığımda yukarı çıktığını fark edecekti. "Pekala, bunu bir Chrome uzantısına dönüştürebilirsem, bazı insanlar için faydalı olabilir" diye düşündüğüm bu tür küçük deneylerdi.
Charlie: Sadece bilgisayarınızın başında yemek yiyor olsanız ve haberleri okuyor olsanız ve klavyemin kirlenmesini istemesem bile, o zaman başımı eğebilirim, ama sonra umarım erişilebilirlik için, aslında insanların belirli web sayfalarında veya bunun gibi şeylerde gezinmesine yardımcı olur. Kullanılabilir birçok araç var ve bu, etrafınızdaki durumu gözlemleyerek ortaya çıkabileceğiniz fikriyle ilgili ve makine öğrenimini kullanarak bu sorunlardan bazılarını nasıl çözebilirsiniz?
Drew: Makine öğrenimi için genellikle Python dillerini düşünürüz. Sanırım birçok gelişmenin ilk gerçekleştiği yer burası. Ancak web geliştiricileri olarak JavaScript konusunda genel olarak daha rahatız. Makine öğrenimi, gerçekçi bir şekilde yapmayı bekleyebileceğimiz bir şey mi? Küçük eğlenceli örnekler bir şeydir, ancak JavaScript'te gerçek çalışma için gerçekten yararlı mı?
Charlie: Yani, yani, öyle düşünüyorum, ama sonra yaptığım şeylerin çoğunun prototip olduğunu biliyorum, ama bence bu, işte bulunduğunuz duruma bağlı. Bir geliştirici olarak makine öğrenimini günlük işinizde uygulamanın yolları vardır. Ancak JavaScript hakkında gerçekten sevdiğim şey, zaten bir ön uç geliştiriciyseniz, gidip yeni bir ekosistem veya yeni bir araç seti veya yeni bir sözdizimi, yeni bir dil öğrenmeniz gerekmemesidir. Her gün çalıştığınız ortamda zaten bulunuyorsunuz.
Charlie: Genellikle bu tür şeyleri öğrendiğin zaman, eğer bu senin günlük işin değilse ve herkesin zamanı değerliyse ve sende o kadar çok zaman yoksa, kendi zamanında başlaman gerekir. Yani bazı engelleri kaldırabilir ve bildiğiniz ekosistemde kalabilirseniz, bence bu oldukça iyi, ama aynı zamanda başlayabilirsiniz… JavaScript'in bana göre gücü, insanları buna ikna etmek için küçük bir prototip oluşturarak başlayabilmenizdir. belki araştırılması gereken bir fikir vardır ve JavaScript'te hızlı bir şekilde bir şeyler döndürerek fikrinizin doğru olduğunu doğrulayabilirsiniz.
Charlie: O zaman ya daha fazla zaman ya da daha fazla para harcamak için liderlikten destek alabilir ya da Python'da oluşturmak istiyorsanız bunu Python geliştiricilerine verebilirsiniz. Ama benim için bir fikri hızlı bir şekilde doğrulama yeteneği çok önemli. Özellikle, belki bir startup için çalışıyorsanız ve her şey hızlı gidiyorsa ve bunun araştırmaya değer bir şey olduğunu gösterebiliyorsanız, bunun oldukça önemli olduğunu düşünüyorum.
Charlie: Ayrıca gerçekten büyük bir araç ekosistemi olduğu ve makine öğreniminin giderek daha fazla çerçevesi ve uygulaması olduğu gerçeği. JavaScript'te, makine öğrenimini yalnızca bir web sayfasında ekleyemeyiz. Daha önce söylediğim gibi, Electron ile Chrome uzantıları ve masaüstü uygulamaları, React Native ile mobil uygulamalar ve Johnny-Five gibi çerçeveler ile donanım ve IoT oluşturabilirsiniz.
Charlie: Yani zaten bildiğiniz dille, üzerinde aynı deneyi çalıştırabileceğiniz farklı platformlardan oluşan devasa bir ekosisteme erişiminiz var. Ve bence, bu benim için oldukça şaşırtıcı. JavaScript'te makine öğrenimi yapmanın gerçek gücünü burada görüyorum. Ve daha iyi hale geldikçe, belki her gün oluşturduğumuz uygulamalara gerçekten entegre edebilirsiniz.
Drew: JavaScript her yerde, değil mi?
Charlie: Evet.
Drew: İyisiyle kötüsüyle, o her yerde. Kim düşünebilirdi ki? Bu kulağa harika geliyor ama aynı zamanda çok fazla iş gibi geliyor. Ve veri kümeleri ve şeyler hakkında düşünüyorum, bu tür görevleri yapmaya nasıl başlıyorsunuz?
Charlie: Şu anda en azından TensorFlow.JS ile çerçeve ile yapabileceğiniz üç şey var. Ve diyelim ki en basiti mevcut önceden eğitilmiş bir modeli içe aktarmak. Bunlardan birkaçı var, farklı veri kümeleri ile eğitilmiş farklı modeller var ve bununla başlamanızı tavsiye ederim çünkü siz, çerçevenin kendisini gerçekten nasıl kullanacağınızın ve neler yapabileceğinizin gerçekten temellerini öğrenebilirsiniz. bu modeller ile
Charlie: Yani farklı görüntülerle eğitilmiş belirli görüntü tanıma modelleriniz var. Bazıları nesne tanıma için daha iyidir. Bazıları insanların tanınması için daha iyidir ve hangi modellerin kullanılacağını anlayarak, o modelin kısıtlaması içinde ne istersen onu inşa etmekte özgür olabiliriz.
Charlie: Ama bence bu başlamak için iyi bir yol. Pek çok deneyim için hala önceden eğitilmiş modeller kullanıyorum çünkü aynı zamanda, zaten oradaysa, tekerleği neden yeniden icat ettin? Sadece verilen araçları kullanalım. Daha sonra, belki bir adım daha ileri gitmek istediğinizde, önemli bir modeli yeniden eğittiğinizde transfer öğrenme denilen şeyi yapabilirsiniz. Yani hala önceden eğitilmiş modellerden birini kullanıyorsunuz, ancak daha sonra onu kendi örneklerinizle canlı olarak yeniden eğitme fırsatına sahip oluyorsunuz.
Charlie: Örneğin, farklı insanların olduğu bir görüntü sınıflandırması kullanmak istiyorsanız, o zaman belki de jest sınıflandırması yapmak istersiniz. Örneğin, modeliniz, her zaman, bilmiyorum, sağ eli ya da başka bir şeye sahip olan insanlarla eğitildiyse, ancak uygulamanız için sol eli istiyorsanız, bu modeli sol örneklerinizle yeniden eğitebilirsiniz. ve sonra sağ eli tanımak için zaten oldukça eğitimli bir modeliniz olur, ancak daha sonra kendi örneğinizi eklersiniz ve verdiğiniz yeni girdi verilerinin miktarına bağlı olarak bunu tarayıcıda oldukça hızlı bir şekilde yeniden eğitebilirsiniz. , biraz zaman alır, ancak birkaç saniye içinde, uygulamanızda kullanabileceğiniz bu iki hareketi tanımakta çok iyi olan yeniden eğitilmiş bir modeliniz olur.
Charlie: Yani bu genellikle ikinci adım gibidir. Ve biraz daha karmaşık olan üçüncü adım, tarayıcıda her şeyi yaptığınız zamandır. Yani kendi modelinizi sıfırdan yazarsınız ve onu tarayıcıda eğitirsiniz ve gerçekten tarayıcıda eğitir, çalıştırır ve modeli, her şeyi oluşturursunuz. Ancak genel olarak, bunun için gördüğüm tek uygulama görselleştirmeler oluşturmak. Eğitilen bir modelin sürecini ve attığı adım sayısını, ne kadar sürdüğünü görselleştirmek istediğinizde ve seçtiğiniz özelliklere ve ince ayar yaptığınız parametrelere bağlı olarak doğruluğun arttığını veya azaldığını görebilirsiniz. .
Charlie: Yani bununla gerçekten oynamadım çünkü kendim için oluşturmak istediğim bir uygulama bulamadım, ancak yalnızca önceden eğitilmiş modeli kullanmanın veya onu kendi örneklerimle yeniden eğitmenin ilk iki adımı kişisel olarak gördüğüm yer. Bununla eğlendim.
Drew: Yani tipik olarak, modeli önceden yaratma durumu olacak, bir nevi çevrimdışı gibi ve sonra tarayıcı bu eğitilmiş modeli kullanıyor ya da belki biraz ekliyor, biraz yeniden eğitim yapıyor, ama Genel olarak, bu model kullanıcının tarayıcısında kullanıma girmeden önce kurulacak mı?
Charlie: Genel olarak, evet. O zaman kesinlikle kendi modelinizi oluşturabilirsiniz. Bunu yaparsanız tarayıcıda eğitmenizi tavsiye etmem ama NodeJS'de de yapabilirsiniz. Biliyorsanız biraz NodeJS. Kesinlikle kendi modellerimi oluşturdum, ancak genellikle biraz daha performanslı olduğu için NodeJS'de çalıştırırım. Ardından tarayıcıda oluşturduğum oluşturulan modeli kullanıyorum.
Drew: Bunu JavaScript ile yapmak için hangi araçlar mevcut? TensorFlow JS'den bahsettiniz ama o nedir, nerede o? Bu Google'dan mı?
Charlie: Evet. İlk başta Google, Python'da TensorFlow aracına sahipti ve şimdi, geçmişte, belki birkaç yıl, belki biraz daha fazla JavaScript sürümünü yaptılar, bu yüzden JS ile akma eğiliminde. Ama aynı zamanda üstünde biraz soyutlama olan ML5 JS var. Bu nedenle, biraz kafanız karıştıysa veya TensorFlow JS, belgelerinde kullandıkları bazı kelimelerle biraz korkutucu görünüyorsa, aynı özelliklerin çoğuna sahip olan ML5 JS'yi kullanabilirsiniz, ancak diyelim ki API veya Sözdizimi biraz daha acemi dostu.
Charlie: ML5 ile başlayabilir, makine öğrenimini sevip sevmediğinizi veya harika bir uygulama düşünüp düşünmediğinizi görebilirsiniz ve sonra ML5'te bazı engelleyicileriniz varsa veya çerçevede yapmak istediğiniz belirli şeyler yoksa, siz daha sonra isterseniz TensorFlow JS'ye geçebilirsiniz. Ve gerçekten kendi kodunuzu yazmakla gerçekten ilgilenmiyorsanız, ancak zaten orada bulunan araçları kullanmak istiyorsanız, görüntü tanıma veya ses tanıma da yapmak için Amazon, Google ve Microsoft'tan bazı API'ler vardır. Bu nedenle, ne yapabileceğini görmekle daha çok ilgileniyorsanız, ancak kodu yazmak için çok fazla zaman harcamak istemiyorsanız, bazı API'lere ping atabilir ve araçlarından bazılarını deneyebilirsiniz.
Drew: Bu oldukça ilginç. Yani belki bir web kamerasından veya mikrofondan girdi almak için tarayıcıyı kullanabilirsin ya da neye sahipsin ve sonra bunu Amazon'a, Microsoft'a ya da herhangi birine gönderebilir ve sonra zor işi onların yapmasına izin verebilirsin?
Charlie: Evet.
Drew: Ve sonra sadece sonuçlardan faydalanırsın.
Charlie: Aynen.
Drew: Bu, fikirlere başlamak için kulağa hoş ve cezbedici bir yol gibi geliyor. Kulağa harika geliyor ama bunu ön uçta hangi sorunlara uygulayabiliriz? Birkaç küçük şeyden bahsettik ama bunu kullanmanın başka yolları var mı?
Charlie: Birçok yol var. Görüntü sınıflandırmasıyla başlarsam, evet yapabilirsiniz. Web'den veya telefonunuzdaki web kamerasından gelen görüntüleri kullanabilirsiniz. Web sitenizi telefonunuzda kullanırsanız ve fotoğraf çekebilir ve nesneleri tanıyabilir ve ya yapabilirsiniz... Yaptığım küçük bir şey geri dönüşümle ilgiliydi, eğer belirli nesneleri hangi çöp kutusuna nereye koyacağımı gerçekten bilmiyorsam, sarı kutu, yeşil kutu var, ülkelere göre değişir. Farklı renkleri var, ama bazen şeyleri gerçekten nereye atacağımı bilmekte gerçekten iyi değilim, böylece bunun gibi küçük araçlar yapabilirsiniz, canlı önünüzdeki iki nesneyi tanıyabilir ve sonra onları sınıflandırabilir ve siz de aşağıdaki gibi belirli şeyler yapabilirsiniz. Bugün nasılsın.
Charlie: Aksi takdirde, bu yılın başlarında TensorFlow GS modellerinden birini kullanarak yazılan yorumlara, GitHub sorunlarına ve GitHub PR'larına bakarak sınıflandırmak ve "Hey, eğer zehirli bir yorumsa, o zaman" dediğim yerde metin sınıflandırmanız var. "Hey, belki bunu yazmamalıydın" veya "Dikkat, biraz zehirli" diyen küçük bir botunuz var. Bunun güvenli bir alan olmasını istiyoruz.”” Böylece metin sınıflandırmasını bu şekilde kullanabilirsiniz.
Charlie: İsterseniz ses sınıflandırması var, Apple yeni saati OS'yi piyasaya sürdüğünde, akan suyun sesini tanıyacak, insanlara söyleyecek, COVID pandemisi ile 20 saniye ellerini yıkamak için bir şeyleri vardı, ancak yapabilirsiniz. JavaScript'te de öyle. Ve gerçekten ilginç olan şey, bazı videoları izliyordum ve "Ah, JavaScript'te bunu nasıl yapacağımı biliyorum" dedim.
Charlie: Ve küçük bir prototip yaptım. Apple watch'da çalışıyor mu bilmiyorum. Belki. Bende yok ama telefonumda ve dizüstü bilgisayarımda çalıştığını biliyorum. Ve sonra bu, bir arkadaşım Ramon Huidobro, Twitter'da @hola_soy_milk olduğu diğer insanlar için de bazı fikirler başlatabilir. Bu yıl birçok çevrimiçi konferansa katıldı. Ve problemlerinden biri, birini alkışlamak için alkışladığında, sohbete alkış emojisini de eklemek için zamanının olmaması. Ve yapmak istediği şey, alkışlarının sesini dinlemek ve bu, sohbette otomatik olarak alkış emojileri gönderecekti.
Charlie: Ve bunun gibi küçük şeyler, belki günlük işinizde gerçekten daha faydalı bir uygulama istiyorsanız, tahmine dayalı önceden getirme etrafında. Bu aynı zamanda web sitenizin analitiğine bakıldığında ön uçta makine öğrenimini kullanmaktır. Yani genellikle hangi sayfalara, hangisinden sonra bakılıyor ve bunun gibi şeyler. Daha sonra ziyaret edilmesi en muhtemel olan sayfaya göre kaynakları önceden getirebilirsiniz. Bu, tüm yıl boyunca araştırmak istediğim bir şeydi, ancak zamanım olmadı, ancak bu, sayfanızın performansını ve kullanıcı deneyimini gerçekten iyileştirmenize olanak tanır. Ve ihtiyaç duymayacağınız kaynakları talep etmiyorsunuz, bu gerçekten gelişebilir ve bu aynı zamanda bir makine öğrenimi uygulamasıdır.
Charlie: Yani eğlenceli şeyler yapabilirsin ya da daha faydalı şeyler yapabilirsin ama yanlış uygulama yoktur, yanlış uygulamalar olabilir. Onu geri alıyorum, ama sadece gerçekten başlıyorsan, eğlenceli bir şeyle başlamanın yanlış bir şey olmadığını söylüyorum ve sonra işte yapabileceğin bir şey hakkında birkaç fikir verebilirim. kuyu.
Drew: Sanırım burada gerçekten faydalı olan şey, bunların mümkün olduğunu bilmek. Ve aslında sadece kendi başımıza yapabileceğimiz sorunları çözmenin yaratıcı yolları. Geleneksel olarak, kullanıcı tarafından gönderilen içeriği denetleyerek bir şeyler inşa ettik ve bu oldukça ilkeldi ve temelde insanların bir şeylere bakmasını ve bu konuda kararlar vermesini sağlamak zorundaydık. Ancak bu örnekte makine öğrenimine erişimle, bundan daha fazlasını devredebilir ve ardından insanların uç durumlara, örneğin ikna edici bir eşleşmesi olmayan şeylere bakmasını sağlayabiliriz.
Drew: Tabii ki o zaman olacak, o şeyi geliştirmek ve yerine oturtmak için biraz zaman var, ama sonra insanların bir şeyleri manuel olarak kontrol etmemesinin tasarrufunu düşünüyorsun. Teknoloji geliştikçe bunun gelecekte hangi şeyler için kullanılacağını görebilirsiniz?
Charlie: Bana göre, belki gelecekte, modeller yüklenirken küçüldükçe ve daha fazla performans gösterdikçe ve muhtemelen eğitildikleri veri kümelerini iyileştirdiğimizi düşünüyorum. Daha faydalı araçlar görebilmeyi umuyorum. Demek istediğim, kişisel olarak, bir şeyler oluşturmak için mikrodenetleyiciler üzerinde çalışabilen o küçük makine öğrenimi modelleriyle ilgileniyorum. Ancak daha çok ön uç dünyada kalırsak, belki daha iyi ses tanımayı umuyorum çünkü internette bir izleme paneli veya klavye ile gezinmeye alışmışız gibi hissediyorum, ancak şu anda hala var. bir ses tanıma, ancak her zaman süper doğru değildir veya örneğin aksanlarla doğru değildir. Ve daha iyi modeller geliştirirken, daha küçük insanların web sitelerine eklemekten çok korkmayacağını umuyorum çünkü performansı o kadar kötü etkilemeyecek.
Charlie: Bir spektrumdaki deneyimi iyileştiren daha akıllı web siteleri oluşturabilmemiz için tahmine dayalı önceden getirme gibi şeylerde makine öğrenimini kullanmakla ilgileniyorum, çünkü kullanıcılar için bu daha iyi çünkü sayfa daha hızlı yüklenecek, dolayısıyla genel olarak performans sitenizden daha iyi. Ama aynı zamanda, sürdürülebilirlik hakkında düşünürsek, gereksiz kaynaklar talep etmemek de web sitenizin karbon ayak izine yardımcı oluyor diyelim. Ama bir de makine öğrenimi modellerinin karbon ayak izi var. Bu pek iyi değil. O yüzden belki bu konuyu konuşmayalım. Gelecek için düşünürdüm, sadece belki daha performanslı veya daha küçük modellere sahip olmayı umuyorum, böylece insanlar denemeye daha yatkın olur, çünkü diyelim ki insanların buna girmesi için daha az engelleyici olacak. , ama bakalım.
Drew: Bir makine öğrenimi projesine başlamadan önce bilmemiz gereken bilinen sınırlamalar ve kısıtlamalar var mı?
Charlie: Evet. Var. Bence, JavaScript veya Python'da yapıyor olsanız da, sınırlar var. Önceden eğitilmiş bir modeli olmayan, çok alışılmış bir şey inşa etmek istiyorsanız, sınırlardan biri, oldukça fazla veriye ihtiyaç duyabileceğiniz ve herkesin buna sahip olmadığıdır. So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.
Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.
Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.
Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.
Duru: Evet. I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?
Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.
Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.
Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. Let me fix that.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.
Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.
Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?
Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.
Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.
Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.
Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.
Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?
Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.
Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.
Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.
Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. Thanks for joining us today. Charlie, did you have any parting words?
Charlie: Biraz eğlenmeyi unutma. Bugün eğlenceli şeyler ve ardından pratik şeyler hakkında çok konuştuk, ancak buna bakmaya istekliyseniz, ne inşa etmeye karar verirseniz verin, biraz eğlenmeyi unutmayın.