Otomatik makine öğrenimi, sinir ağı özerk programlama (kod ve teknik bilgi) "Ayarın tamamen otomatik olmasına izin verin"

Xinzhiyuan önerilir

Son birkaç yılda, Otomatik Makine Öğrenimi (AutoML) bir araştırma etkin noktası haline geldi. Sonraki konuya geçmeden önce kısaca AutoML'nin ne olduğunu ve neden önemli olduğunu anlatalım. Daha sonra, sinir ağı otomatik programlamayı eğitmek için bir proje tanıtacağız, kodu iliştireceğiz, kendiniz pratik yapabilirsiniz.

Sinir ağı programlamasını kendi başınıza izlemek çok heyecan verici ve bunu kendi başınıza yapmanızı şiddetle tavsiye ediyoruz.

Her şeyden önce, otomatik makine öğrenimi (AutoML) nedir?

AutoML, otomatik bir veri bilimi değildir (otomatik veri bilimi). Elbette, ikisi örtüşüyor, ancak makine öğrenimi veri bilimindeki birçok araçtan yalnızca biri ve makine öğrenimi tahmin için çok iyi, ancak tanımlayıcı analiz gibi görevler için hiç kullanılmıyor.

Bununla birlikte, tahmin görevleri için bile veri bilimi, gerçek tahmin modellerinden daha fazlasını kapsar. Veri bilimci Sandro Saitta, AutoML ile otomatikleştirilmiş veri bilimi arasındaki olası karışıklığı tartışırken bir keresinde şunları söylemişti:

Yanlış anlama, tüm veri bilimi süreci (bkz. Örneğin CRISP-DM) ile veri hazırlama (özellik çıkarma, vb.) Ve modelleme (algoritma seçimi, hiperparametre ayarı vb.) Alt görevleri arasındaki karışıklıktan kaynaklanır. ...

Otomatik veri bilimi ve veri bilimi yarışmaları için araçlar hakkındaki haberleri okurken, endüstri deneyimi olmayan kişilerin kafası karışabilir ve veri biliminin sadece modelleme olduğunu ve tamamen otomatikleştirilebileceğini düşünebilir.

O haklı, bu sadece bir anlambilim meselesi değil. Ek olarak, veri bilimci ve otomatik makine öğrenimi savunucusu Randy Olson, etkili makine öğrenimi tasarımının şunları yapmamızı gerektirdiğini belirtti:

  • Daima modelin hiperparametrelerini ayarlayın

  • Her zaman birçok farklı modeli deneyin

  • Veriler için her zaman çok sayıda özellik temsilini keşfedin

Özetle, AutoML'yi algoritma seçimi, hiperparametre ayarlama, yinelemeli modelleme ve model değerlendirme görevi olarak düşünebiliriz. Tabii ki, bu tanım tamamen kesin değil, ama önce buradan başlayalım.

AutoML neden yapıyor?

Stanford Üniversitesi'nde bir yapay zeka araştırmacısı ve doktora öğrencisi olan S. Zayd Enam, "Machine Learning Is Hard" başlıklı bir blogda yazdı (kalın ve vurgulanan kısım orijinal metindir):

Makine öğrenimi hala nispeten "zor" bir sorundur. Makine öğrenimi algoritmaları bilimini araştırma yoluyla ilerletmenin zor olduğuna şüphe yok. Yaratıcılık, deneme ve dayanıklılık gerektirir. Yeni uygulamalara uyum sağlamak için mevcut algoritmaları ve modelleri uygularken, makine öğrenimi bir zorluk olmaya devam ediyor.

Enam'ın esas olarak makine öğrenimi araştırmasına atıfta bulunmasına rağmen, kullanım durumlarında mevcut algoritmaların uygulanmasından da bahsettiğini unutmayın (kalın kısma bakın).

Ardından Enam, algoritmanın doğasına odaklanarak makine öğreniminin zorluklarını açıklamaya devam etti (vurgu, orijinal metinde de yer almaktadır):

Zorluğun bir yönü, sorunu çözmek için hangi araçların kullanılacağını anlamak için sezgiye güvenmeyi içerir. Bu, mevcut algoritmaları ve modelleri ve her algoritma ve modelin artılarını, eksilerini ve kısıtlamalarını bilmeyi gerektirir. ...

Zorluk, makine öğreniminin temelde hata ayıklamasının zor olmasıdır. Makine öğreniminin hatalarının giderilmesi gerekiyorsa, iki durum vardır: 1) algoritma çalışmıyor veya 2) algoritma iyi çalışmıyor ... Çok az algoritma bunu bir kez yapar, bu nedenle sonunda zamanın çoğu algoritmalar oluşturmak için harcanır .

Enam daha sonra bu sorunu algoritma araştırması perspektifinden açıkladı. Bir algoritma çalışmıyorsa veya yeterince iyi sonuç vermiyorsa ve seçim ve optimizasyon süreci yinelemeli ise, bu otomasyon için fırsatlar sağlar ve dolayısıyla otomatik makine öğrenimi için yer vardır.

Önceki bir makalede AutoML'nin özünün şu olduğunu yazmıştım:

Sebastian Raschka'nın açıkladığı gibi, bilgisayar programlama otomasyonla ilgilidir, makine öğrenimi ise "otomasyonu otomatikleştirmek" ve ardından otomatik makine öğrenimi "otomasyon otomasyonu" ile ilgilidir.

Programlama, tekrarlayan görevleri yöneterek iş gücümüzü azaltır; makine öğrenimi, bilgisayarların bu yinelenen görevleri en iyi şekilde nasıl gerçekleştireceklerini öğrenmelerine olanak tanır ve otomatik makine öğrenimi, bilgisayarların bu görevleri nasıl gerçekleştireceklerini öğrenmenin sonuçlarını nasıl optimize edeceklerini öğrenmelerine olanak tanır.

Geçmişte, parametreleri ve hiperparametreleri ayarlamak için çok çaba sarf etmemiz gerekiyordu ve otomatik makine öğrenimi sistemleri, birçok farklı yöntemle bu sonuçları en iyi şekilde nasıl ayarlayacağını öğrenebilirdi.

AutoML bu fikirden doğmuştur: Çok sayıda makine öğrenimi modelinin çeşitli algoritmalar ve birden çok farklı hiperparametre yapılandırması kullanılarak oluşturulması gerekiyorsa, bu modeli oluşturma süreci ve modelin performans ve doğruluğunu karşılaştırma süreci otomatikleştirilebilir.

Basit?

Alıştırma: Otomatik olarak programlanabilen bir sinir ağını eğitin

İddia

  • Tensorflow + temel derin öğrenme becerileri

  • Projenin Github kitaplığı: https://github.com/thibo73800/deep_generation/tree/master/c_code

  • Aşağıdakiler, Tekrarlayan Sinir Ağlarının (RNN) temel noktalarını hızlı bir şekilde gözden geçirecek, proje operasyonunu başından sonuna kadar yapmayacak olsam da, temel noktalara odaklanacağım. Her bir kod parçasını bir kenara ayırmak için zaman ayırmak, tüm mantığı daha iyi anlamanıza yardımcı olabilir. Uygulamalı çalışma çok önemlidir.

Tamam, başlayalım!

veri seti

Herhangi bir denetimli öğrenmeyi gerçekleştirmek bir eğitim veri seti gerektirir ve aynı şey ağımız için de geçerlidir. Projenin kodu tamamen C diline dayanmaktadır (çok basit bir dil kullanmak sıkıcıdır). Bu nedenle, eğitim veri setimiz Github Linux kütüphanesindeki C dil betiği olacaktır. İlgili bilgileri önceden çıkardım .c Kod.

ilk soru:

Sinir ağları yalnızca sayılarla ilgilenir, başka hiçbir bilgi bilinmemektedir. Bu nedenle, veri setindeki her karakterin aşağıdaki biçimde temsil edilmesi gerekir:

Yukarıdaki şekilde görüldüğü gibi "=" karakteri 7 numarasına atanmıştır. Daha sonra her sayıyı temsil etmek için sıcak kodlamayı kullanacağız, böylece geri yayılma işlemi sırasında daha iyi yakınsayabilir.

Burada hatırlanması gereken 3 önemli değişken var: word_to_int , int_to_vocab ile kodlanmış . İlk ikisi, karakterler ve sayılar arasında serbestçe dönüşüm yapmamıza izin verir ve sonuncusu, tüm veri kümeleri için kodlayıcı formatıdır.

İlk parti

İlk önce iki sekanslı basit bir grup oluşturalım, her sekans 10 sayıdan oluşur. Bu parti aynı zamanda aşağıdaki makale için bir örnek görevi görecek.

Bu grup buna benziyor. Ayrıca şu şekilde görüntülenebilir:

Tamam, şimdi işlenmesi gereken ilk değerler grubumuz var. Sinir ağımızın yapması gereken şey, girilen n karakteri (sadece önceki karakteri değil) bildikten sonra bir sonraki karakterin ne olacağını tahmin edebilmektir. Örneğin, ağa girilen son karakterin "e" olduğunu söylersem, pek çok olası evrim vardır. Ancak, son girişin "w", "h", "i", "l" ve "e" olduğunu söylersem, girilecek bir sonraki karakterin "(" olduğu açıktır.

Bu nedenle, sinir ağımız karakter tiplerinin zamansal ve uzamsal özelliklerini dikkate alabilmelidir.

Bunu başarmak için tekrarlayan bir sinir ağı kullanmamız gerekiyor.

Tekrarlayan sinir ağı

Son örneği açıklamak için, klasik bir sınıflandırıcı (yukarıdaki şeklin sol tarafı) önceki harfi alır; bu harf gizli katmana (mavi ile gösterilir) geçirilir ve ağ bir çıktı türetecektir. Döngüsel bir sinir ağının yapısı farklıdır. Her birim (kırmızıyla gösterilir) yalnızca girişe değil, aynı zamanda ana bağlanır. t-1 Ünite bağlanmıştır. Problemimizi çözmek için LSTM (Uzun Kısa Süreli Hafıza) birimini kullanacağız.

Modellemeye başlayın!

Aşağıda bu makalenin 5 ana bölümünü detaylandıracağız. Yer tutucu, modelde bir giriş görevi görür. LSTM ünitesinin başlatılması, RNN'yi oluşturmak için kullanılır.

Çıktı katmanı her bir birime bağlanır. Model hatalarını ölçmek için korelasyon hesaplamaları kullanılır. Son olarak eğitim operasyonlarını tanımlayacağız.

1) Grafik girişi

Grup, 10 boyutunda iki girişten oluşur, bu nedenle girdimizin şekil boyutu ve bu grubun her girişi tek bir çıktıyla ilişkilendirilir ve hedefimiz de aynı şekil olarak tanımlanabilir. Son olarak, gelecekteki bırakma olasılığının değeri için bir yer tutucu tanımlıyoruz.

2) LSTM çıkışı

Şimdi bu koda bakalım:

  • create_cell Bir LSTM ünitesi oluşturmak için kullanılan bu LSTM ünitesi 4 gizli nörondan oluşur. Bu işlev, sonucu bize döndürmeden önce çıktıya bir bırakma ekleyecektir.

  • tf.contrib.rnn.MultiRNNCell RNN'yi örneklemekten sorumlu. Veririz create_cell Bir parametre, çünkü RNN'nin birden çok katmandan oluşmasını istiyoruz, bu durumda 3.

  • başlangıç hali : RNN'nin her biriminin önceki duruma bağlı olduğunu bildiğimizden, grubumuzdaki ilk girdi grubu olarak girilen 0'ın başlangıç durumlarını somutlaştırmalıyız.

  • x_one_hot Toplu işi sıcak koda dönüştürün

  • cell_outputs RNN'nin her hücresinin çıktısı verilir. Burada her çıktı 4 değerden (gizli nöronların sayısı) oluşacaktır.

  • final_state Son ünitenin durumunu geri getirin Bu durum, eğitim sırasında bir sonraki partinin yeni başlangıç durumu olarak kullanılabilir (sonraki partinin mantıksal olarak önceki partiye bağlı olduğu varsayılarak).

3 ) Grafik çıktısı

Ünitenin çıktı değeri üç boyutlu bir tabloda veya başka bir deyişle saklanır. Artık çıktıyı sırayla aralıklandırmamıza gerek yok. Daha sonra bir boyut dizisi elde etmek ve değişkende saklamak için çıktının boyutunu ayarlayacağız. seq_out_reshape arasında.

Son olarak, basit bir doğrusal işlem kullanın: tf.matmul (..) + b . Sonunda, çıktıyı olasılık biçiminde ifade etmek için bir softmax izler.

4 ) Kayıp

Hata hesaplamalarının yapılabilmesi için toplu işlemin hedefi, model çıktısı ile aynı şekilde ve aynı boyutlarda ifade edilmelidir. Kullanırız tf.one_hot Çıkışın girişle aynı kodlamaya sahip olduğunu gösterir. Ardından dizi (tf.reshape) Doğrusal çıktıya ayarla tf.matmul (..) + b Aynı boyutlar. Şimdi, modelin hatasını hesaplamak için bu işlevi kullanabilirsiniz.

5) Eğitim

Hatayı en aza indirmek için AdamOptimize'ı kullanın.

Eğitim sonuçları!

Eh, sonunda sonuca geldi. Bu en tatmin edici kısımdır. Kullandığım parametreler:

  • Sıra boyutu: 100

  • Toplu iş boyutu: 200

  • Hücre başına nöron sayısı: 512

  • RNN derinliği (katman sayısı): 2

  • Öğrenme oranı: 0.0005

  • Bırakma: 0.5

Aşağıda, GPU'm (GeForce GTX 1060) üzerinde yaklaşık 2 saatlik eğitimden sonra elde edilen sonuçlar yer almaktadır.

Hataların evrimiyle başlıyoruz:

Son olarak, modelin oluşturabileceği koda bakalım:

Modelin bir programın genel yapısını açıkça anlayabildiğini görmek gerçekten harika.

Veri kümesinde "super_fold" adlı bir işlev olmadığını unutmayın. Bu yüzden, bu işlevin işlevini anlamak için uzun zaman harcadım.

Söylemeliyim ki, bu model benden daha akıllı olabilir ...

Derleme kaynağı

  • https://becominghuman.ai/how-to-train-a-neural-network-to-code-by-itself-a432e8a120df

  • 2018 küresel SUV satış listesi yayınlandı! Satış şampiyonu Haval H6 bile sadece yedinci sırada yer aldı
    önceki
    Gansu'nun en popüler yemek listesi yayınlandı! En sevdiğiniz sığır eriştesi C piyasaya çıktı!
    Sonraki
    Her lider üç yükseltmeden geçmelidir
    Kanada ve Avustralya ekonomisi zenginden fakire değişebilir, Kanadalı ve Avustralyalı çiftçiler aniden Çin pazarını düşünürler.
    1 Ocak 2019'dan itibaren bu yeni düzenlemeler hayatınızı etkileyecek
    Kaderini değiştir! Ronaldo, Juventus'un geri dönüş yapmasına yardımcı olmak için üç gol attı. Bu adam bir ömür boyu hak ediyor!
    Ekonomiktir ve tamir etmeye gücü yetmez, belli bir maddi gücü yoktur, bu dört arabadan uzak durun
    Seyahat ederken iyi bir otelde kalmak için binlerce dolar harcamak gerekli mi?
    Şiir Mian Miaoyi Sınırsız Anlamı, sadece iki veya üç satır Jinshu gönder
    İran'ın ABD dolarını renminbi ile değiştirmesinin ardından işler ilerledi İngiltere Bankası Başkanı: Renminbi'nin büyük etkisi var
    En düşük 70.000, bu özerk orta otomobiller de "bir yüze sahip" olmanızı sağlar
    Polisi taciz etmek için bir dakika beklemek, mükemmel bir sonla sonuçlandı!
    Neden en verimli ekip 6 kişiden oluşuyor?
    Hoşçakal bizim süper kahramanımız
    To Top