Yapay sinir ağı nasıl çalışıyor?

Arkadaşlar gerçekten bu konu hakkında cok fazla araştırma yaptım tıp konuları hakkında araştırma yapıp bilgi sahibi ooldum şu lanet sinir ağı anlatıcak ne eğitim videosu nede video kanallarında bulabildim.

adam formül ve ağırlıktan bahsediyor.Normal sinir ağının nasıl çalıştıgını gerçekten öğrendim.Şu yapay sinir ağına verdikleri ağırlık ve formüle yapay sinir ağı nasıl olayları çözüyor nasıl şu dev bilgileri ayrıştırabiliyor o formül ve ağırlıklarla anlamadım udemyden youtubeden video izlemekten sıkıldım
udemyde aldıgım videolarıda hep iptal ettim cünkü adam olayı bilmeden udemyden eğitimci olabiliyor slyat okuyarakta basarı elde etmek zor değil

Okulunuzla alakalı herhangi bir dersten dolayı mı öğrenmek istiyorsunuz, yoksa bu işe gönül vermek üzeresiniz ama bu noktada mı takıldınız?

1 Beğeni

Hocam hobi olarak normalde yazılımla uğraşıyorum küçüklüğümden beridir.Yapay zekayı hayatıma entegre etmek için ugrasıyorum.Kitap felan aldım udemyden eğitim aldım ama istediğim gibi anlatılmamaktadır.Hep ezbere ağırlık varda şimdi dil öğretmek istesek altından cıkamaz ama bunu nasıl yapıyor giriş katmanında nasıl bi işlem sürmekte gizli katmanda nasıl bi işlem vs bunu anlamak zor değil.Ben bilgi konusunda acım doyurmak isteyen yok eğitimler kitaplar olarak.

2 Beğeni

bazı insanlar bunu bilerek yapıyor, yani bir şeyde usta oldukları zaman öğrencilerine, kendi bilgilerinin tamamını vermiyorlar, tıpkı şunun gibi:
çırağı kendisinden daha çok şey yapamasın diye bildiklerinin tamamını vermeyen usta.

bazen de üşengeçlik…
ben de bir şeyi zar zor öğreniyorum ve birisi bana sorduğu zaman tam olarak anlatamıyorum.
yada öğrendiği şeyi nasıl öğrendiğini unutmak da olabilir.

Haklısın cok var bilgiyi öğrenip paylaşmayan veya kendini ifade edemeyip olayı anlaması.Şunu söyliyebilirim ki yapay zekada herkes layt okuyup ingilizce makaleleri cevirip okuyor.Mantığı anlatan biri var youtubede tensorflow ama gercek bildigimiz yapay zeka bu değil biir şeyi öğrenmesi yapay sinir ağı bunun icin normal analiz etme tablo okuma vs keras tensorflow dısındada yapabiliriz.Var olan örnekler hep anlatılıyor biri cıkıpta mantık su demiyor.Eğer cabalarım sonucu öğrenirsem gercekten farklı örneklerle video cekip insanlara yardımcı olmaya calıscam.

1 Beğeni

Ustanın amacı o değildir.Niye yanında çalıştırsın ki adamı?

Bilgili insan ne kadar cok olursa bi problemin çözümüne o kadar yakın oluruz usta kendisine verdiği egodan dolayı bilgi onda takılır ve yapay zeka insan zekası gibi öğrenme hızı sorunu yaşar.Batılı ülkelere baktığımızda adamlar herşeyi anlatıyor bilgiyi bizim toplumumuzda görmek zor adam öğreniyor ama öğretmeyi unutuyor veya unutmak istiyor.Yardım etmek güzel bi şey ustada çıraktan öğrenecegi cok sey var.

Burada bilgiyi paylaşmamak kimine göre suç,kimine göre iyi bir şey.GPT-3’ün (kendisi en gelişmiş yapay zekadır) API’sinin herkese açık olmamasının bir nedeni var.Bazı şeyler öğretilmez.Püf noktası diye bir deyim vardır.Gelin hikayesini okuyalım…

Çanak-çömlek yapan bir dükkan varmış.Dükkanın çırağı kendini iyice geliştirdiğini düşünüp yeni bir dükkan açmak ister.Ustası dükkanı açmamasını ister.Ve çırak ondan daha iyi olabileceğini düşünmeye başlar.Yoksa neden dükkanı açmamasını ister ki?

Çırak gider dükkkanını açar.Rafları,dolapları çanak-çömlek ile doldurur.Her şey çok güzel oldu derken,her şey teker teker çatlamaya,kırılmaya başlar.Yenilerini yapar,yine aynı şeyler olur.Bu sefer ustasına gider ve neyi yanlış yaptığını sorar.Ustası ise masanın başına geçer…

Çanak-çömlek üretimi yapılırken cıvık bir kıvamda iken şekil verilir ve kurur.Bu şekilde ilerideki şekil bozulmaz.Ancak şekil verilirken “püf” diyerek içindeki hava kabarcıkları patlatılmazsa çömlekler kuruduğu zaman çatlamaya yol açar.İşte,işin “püf noktasını” öğrenmeden dükkan açılmaz.

Bir süre boyunca sadece ustasını izlese,hatta dinlese bile böyle şeyler olmayacaktı.Bazen sizin ona ulaşmanız gerekmekte.Onun size gelmesini beklememeliyiz.

Bu arada insanlar 3-4 yaşında ancak konuşabiliyor.Yapay zeka doğduğu anda konuşabiliyor,dinleyebiliyor.Aramızda kritik farklar var.Umarım çözüm gelecektir.

2 Beğeni

güzel bi hikayeymiş, ama bu insanoğlu işte; bekleyemez, sabredemez, ama tek neden aten o değil, unutmak, üşenmek, gibi nedenler de var.

Güzel ama ustamız yok :)).

1 Beğeni

@Then_Shiffman Neden sildiniz ki açıklamayı? O kadar uzun uzun yazmışsınız hem de.

1 Beğeni

Bende aynı fikirdeyim.@Then_Shiffman bu dökumasyon bile olabilir.

Kısmen tamamlanmış iken göndere basmış bulunmuşum, o yüzden geri çektim.

1 Beğeni

perceptron'u anlamak gerekir neural network’e varmadan. Perceptron, (herhangi bir boyutta) linear bir şekilde ayrılabilen iki sınıfı mükemmel bir şekilde ayrıştırabilen bir algoritmaya sahip. Linear şekilde ayrılabilen iki sınıf nedir? Şudur mesela iki boyutta:

Burada üçgenleri ve daireleri birbirinden ayıran bir sürü doğru (sonsuz tane aslında) çizebiliriz, mesela:

(Tek boyutta bu ayıran şey nokta olur, iki boyutta doğru, üç boyutta düzlem, 4+'da hyperplane diyoruz. Kolaylık olsun diye her boyuttakine hyperplane diyelim)

Perceptron’un amacı bu sonsuz hyperplane’lerden birini bulup ayrıştırmayı (classification) sağlamak.

Peki nasıl? Perceptron’un yapısına bakalım:

  • En soldaki oklar girdilerimiz. Kaç boyuttaysak o kadar girdi var*. Bu girdiler (feature'lar) sample point’lerimizi karakterize eden elemanlardır. Mesela üstteki iki boyutlu örnekte, bir üçgeni veya daireyi karakterize eden nedir? (x, y) koordinatları değil mi? O zaman 2 girdimiz var demektir. Her sample için kendisinin x, y koordinatlarını buraya feed’leriz.

  • Feed’lerken ne oluyor? Bi’ analitik geometriye gidip gelelim: (orijinden geçen) bir doğrunun denklemini nasıl yazarız:

                              ax + by = 0

    değil mi? Bir soru daha: doğrunun eşitsizliği ne belirtir? Yani şu mesela:

                              ax + by > 0

    Doğrunun üstünü (veya altını) belirtir değil mi? < 0'lı versiyonu da altını (veya üstünü) belirtir. Çok iyi. Neden? Perceptron’un yapması gereken şey az çok belli oldu: Öyle bir doğru bulmalı ki bir sınıfa ait (diyelim mavi üçgenler) sample’ların (mümkünse) hepsi bu doğrunun üstünde kalmalı, diğer sınıfa ait tüm sample’ların hepsi de bu doğrunun altında kalmalı. Böylelikle ayrıştırmayı yapmış olur.

  • İşte bu a ve b hemfikir olduğumuz iki girdiyi (x ve y) çarpacak olan elemanlar. Sonra da \Sigma ile betimlediğimiz resimdeki yuvarlak eleman da bu çarpımları toplayacak ve bir tek çıktı verecek sağındaki dikdörtgene. Yani doğru denkleminin sol tarafını (ax + by) gerçeklemiş olacağız. Buna “çarpıp toplayan” diyelim ve hemen bir python attıralım buraya:

def carpip_toplayan(a, b, x, y):
    # Yazdığımıza değse bari :p
    return a*x + b*y
  • Tamam, o dikdörtgen ne yapıyor? Ona hard limiter diyoruz (veya unipolar step). Bu parçalı bir fonksiyon: kendisine gelen girdi negatifse 0 olarak çıktı veriyor, non-negatifse 1 veriyor. İyi de niye lazım bu? Şöyle düşünelim: bizim amacımız classification yapmak yani ayrıştırmak. Ama carpip_toplayan bize herhangi bir reel sayı verebilir. Ama hatırlayınız, verdiği sayı 0’dan büyükse veya değilse’den yola çıkarak hyperplane’in neresinde kaldığını anlıyoruz. O zaman bize bunu söyleyecek biri lazım o da bu arkadaş. Onun çıktısına göre sample’ın hangi sınıfa ait olduğunu anlarız. 1 verdiyse mavi üçgen, 0 verdiyse yeşil dairelerin safındayız. Python’da:
def hard_limiter(carpip_toplayanin_ciktisi):
    return 1 if carpip_toplayanin_ciktisi >= 0 else 0
  • Tamam o zaman bir perceptron’un ne yaptığını az çok görüyoruz. a ve b belliyse, girdi olarak verdiğimiz bir sample’a sınıf ataması yapıyor. Mesela a = -2, b = 5 olsun. Sample’ımız da (12, 4) noktasında olsun. Ne olur?

    1. Çarpıp toplarız: ax + by = (-2) * 12 + 5 * 4 = -2
    2. Limiter’dan geçiririz: -2 < 0 ? 0 : 1 = 0

Perceptron bu konfigurasyon ve inputla 0 çıktısı verdi, yani bu sample’ın yeşil dairelerin tarafında olduğunu iddia ediyor. Peki.

  • Asıl meseleye geliyoruz: a ve b nam-ı diğer weight'leri bulmak. Elimizde ne var peki? Sadece 5+ 6 = 11 tane sample var. Ama öyle ne idüğü belirsiz sample’lar değiller; kimin hangi sınıfta olduğu belli. Bu özellikleriyle aslında a ve b'yi bulmak maceramızda (yani training dediğimiz faz) training data'yı oluşturuyorlar. Şöyle yani:
[
{"features": (1, 10), "target": 1},
{"features": (2.4, 8), "target": 1},
{"features": (1.1, 7), "target": 1},
...
...
{"features": (14.15, 4), "target": 0},
{"features": (9, 3.1), "target": 0}
]

Bundan yola çıkarak perceptron’u train etmeliyiz ve uygun a ve b değerlerini bulmalıyız.

  • Diyelim ki ilk başta elimizde rastgele a ve b değerleri olsun. Training data’mızın ilk elemanını bu ave b ile perceptron’a soktuk diyelim. Beklediğimiz şey 1 değerini vermesi. Farz edelim 1 değerini verdi. Çok iyi o zaman, sıkıntı yok, diğer sample’a geçelim. Onu da soktuk, 1 bekliyoruz ve gerçekten de 1 geldi. Çok iyi. Tek tek tüm 11 datayı denedik hepsi de istenilen şekilde 1 veya 0 verdi. Yani prediction'larımız target'larla tamamiyle eşleşiyor. E o zaman train etmeye ne gerek var, bu a ve b mükemmel deriz ve olay biter. Ama tabii çok iyimser bir tablo oldu değil mi? (Bu aslında bize algoritmanın ne zaman durması gerektiğini söyleyen şart olarak karşımıza çıkacak az sonra.)

  • Şimdi baştan farklı bir şekilde farz edelim. İlk sample’ı verdik, perceptron da 1 dedi, tamam. İkinciyi verdik, 0 dedi… Ama biz 1 bekliyoruz. Bir şeyler yapmamız gerek! Burada biraz matematik lazım.

  • i'inci sıradaki sample’ın istenen değeri (target) t_i olsun. Perceptron’un biz verdiği de (prediction) p_i olsun. Eğer p_i == t_i ise ne güzel, hiçbir şey yapmaya gerek yok. Ya değilse? Burada bizim bir “kaybımız” var ve onu tanımlamamız gerekir. Bunu çeşitli şekillerde yapabiliriz. Kimisi der ki kaybımız |p_i - t_i| olsun (L1 metrik), kimisi der 0.5(t_i-p_i)**2 olsun (L2 metrik). Ben diyorum ki L2 metriği kullanalım. Niye? Türevini alması kolay da ondan. Haydaa, türev nerden çıkıyor arkadaş?

  • Siz de takdir edersiniz ki t_i sabit, oynamıyor, önceden belli. Ama p_i pek öyle değil. a'ya ve b'ye bağlı (kendinizi ikna ediniz). O zaman bizim kaybımız (L_i diyelim) a'ya ve b'ye bağlı. Tamam. Şöyle bir adım geri çekilelim: bizim buradaki nihai amacımız neydi? Öyle bir hyperplane bul ki bu iki sınıfı ayırsın. Peki. Bu amaçla L_i'leri minimize etmek aynı yolun yolcusu değil midir? Diğer bir deyişle, her sample’daki kaybı azaltsak (mümkünse 0!**) hepsini doğru sınıflamaya yaklaşmış oluruz.

  • Bir üst paragraftaki eğik yazıyı fark ettiyseniz, türevin burada ne işi olduğunu da söyleyebilirsiniz. Minimizasyon varsa türev de oradadır. Peki öyle olsun, kimin türevini neye göre alalım? Genel yanıtımız şudur: “kimi minimize etmek istiyorsan onun türevini al, kim bunu etkiliyorsa onlara göre türevini al sonra da 0’a eşitle***”. O zaman L_i'nin a ve b'ye göre türevini alalım. Ama bir sorun var… Bizim amacımız total loss’u (L diyelim, kendisi tüm L_i'ların toplamına eşit) minimize etmek. (Öyle ya, tüm sample’ların doğru saflarda yer almasını temenni ediyoruz). O zaman tüm L_i'ları toplayıp onun türevini alalım? 11 tane nokta için iyi hoş da, “bir sürü” data sample’ı için “analitik olarak tractable” olmaktan çıkar, hele bir de şu an 2 boyuttayız, 22 boyutta o işlemleri yapmamız neredeyse na-mümkün (aslında 11 tane için bile öyle, yeteri kadar üşengeçseniz :d).

  • Peki ne yapıyoruz o zaman? Sahneyi “Stochastic Gradient Descent”'e bırakabiliriz (“rassal bayır aşağı iniş” gibi bir şey). Bu ne yahu? Bu algoritma der ki: N tane sample’a bağlı toplam loss’unuz var ise ve bunu “bir anda” minimize etmekten imtina ediyorsanız, benim şöyle bir teklifim var. Bir anda olmasa da “step step” sizi o minimize noktasına götürebilirim. Bu arada bizim loss’un grafiği şöyle bir şey:


Dikkat: 2 tane parametremiz var bulmaya çalıştığımız (a ve b). Bunlara bağlı bir Loss var, dolasıyla 3 boyutlu bir grafiğimiz var. Nihai amaç o alttaki turuncu çarpıya denk gelen (a, b) ikilisini bulmak ****.
Dikkat 2: Bu şekil üç boyutlu (paraboloid aslında yani, idare ediniz :d).

Biz başlangıçta rastgele a ve b değerleriyle bu grafiğin herhangi bir yerinde olabiliriz (mesela kahverengi nokta). Ama amacımız loss’u indirgemek olduğu için hep "aşağı"lara doğru hareket etsek ne iyi olur değil mi? İşte “stochastic gradient descent”'in descent’ini bulmuş olduk. Amaç aşağı gitmek.

  • Şimdi türeve geri dönelim. Geometrik olarak türev ne der bize? Bir fonksiyonun bir noktadaki türevi, o fonksiyonun o noktadaki artışının en büyük olacağı yöne tekabül eder. Lise matematiğini (ve hocanızı) anımsayınız. Bize ne lazım peki? "azalış"ın en büyük olduğu yön. Yani türev bize "artış"ın en büyük olduğu yönü verdi, bize de "azalış"ın en büyük olduğu yer lazım. O zaman türevin tersi yönde ilerleriz! Aha da “gradient descent” yani “al türevini tersine doğru yürü”'yü de bulmuş olduk. Kaldı “stochastic”.

  • Hatırlarsanız tüm Loss’u bir anda minimze edip şakkadanak o minimal noktaya ermenin “analtik olarak elden geçirilebilir” olmadığından dem vurmuştuk. “Stochastic” de diyor ki: öyle şakkadanak bulamam ama sabredersen adım adım seni oraya gönderebilirim. Nasıl yani adım adım? Tüm loss yerine sample sample giderek her sample için “loss’un türevinin tersi” yönünde ilerle ve arada saparak da olsa o nihai alt noktaya ulaş. Bi dakika, niye arada başka yollara sapıyoruz? Çünkü sen tüm sample’ların Loss’a katkısını minimize etmek istiyorsun, gönlünden geçen bu; ama analitik olarak yapamadın. Bendeki yol da sample-by-sample yol aldığı için “rassal” sapmalar yapabilir. (Diğer bir deyişle, bir sample’dan ortaya çıkan loss tüm loss’un representative’i olamaz, deterministikliğini kaybetmiş olur). Ama tüm sample’ları gezeceğim için eninde sonunda seni oraya götürürüm. Peki o zaman “stochastic”'liğini de görmüş olduk.

  • Türev türev dedik, alalım bari. Unutmayın SGD kullanacağız, ve sample bazında türev almalıyız. Bize lazım olan şunlar (daha doğrusu negatifleri; unutmayın bayır aşağı gitmek arzusundayız):


                          d(L_i) / d(a)     d(L_i) / d(b)

Loss’u hatırlayalım: L_i = 0.5(t_i-p_i)**2. Tamam türev almalıyız ama a, b nerede burada? Evet, p_i'nin içinde: p_i = a*x + b*y*****. Gelsin zincir kuralı o zaman:

d(L_i) / d(a) = (d(L_i) / d(p_i)) * (d(p_i) / d(a)) = (p_i - t_i) * x
d(L_i) / d(b) = (d(L_i) / d(p_i)) * (d(p_i) / d(b)) = (p_i - t_i) * y

İşte bu! Türevleri bulduk, bunların tersine “yürüdük” mü iş tamamdır. Peki nasıl yürüyeceğiz? Şöyle bir şey olsa gerek******: bir_sonraki_a = şimdiki_a - loss_un_a_ya_göre_türevi (-'ye dikkat!). b için de benzer şekilde. Gerçekten de böyle! Python gelsin o zaman:

def loss_un_turevi(x, y, t_i, p_i):
    diff = p_i - t_i
    a_ya_gore = diff * x
    b_ye_gore = diff * y
    return (a_ya_gore, b_ye_gore)
  • Tamamdır. Şimdi ne var? Malum stokastiklik var, tüm sample’ları dolanmak gerek (for loop diyosun). Şimdi son küçük bir mevzu kaldı: Sizce tüm sample’ları 1 kere gezsek yeterli olur mu? Olmaz di mi? Niye? Şöyle ki: ilk turda 11’in 4’ü düzeldi (veya halihazırda düzgündü) ama 7’si kaldı (ilerleme kaydettik ama hala doğru saflarda değiller). Bunu iyice bellemesi için “birkaç” kez sample’ların hepsinin üstünden geçmesi gerekir. İşte buna da “epoch” diyoruz. (Düzelenlere ya bir şey olursa diğer epoch’ta iye tedirgin olanlara: SGD (yani aslında türev) bunun olmayacağını garanti ediyor çünkü hiç yukarı çıkmayız loss grafiğinde). O zaman for içinde for bizi bekliyor.

  • Biraz psedo biraz gerçek tüm algoritma şöyle oldu:

# Rastgele başlasınlar (akıllı initailzasyonlar da mevcut)
a = get_random_num()
b = get_random_num()

# Elimizdeki tek şey: elle topla veya simule et veya internetten çek
training_data = get_data()

num_epochs = 10_000

for epoch in range(num_epochs):
    for sample in training_data:
        # Unpack data
        x, y = sample["features"]
        t_i = sample["target"]

        # get_prediction diye fonksiyona çevrilmeli
        p_i = hard_limiter(carpip_toplayan(a, b, x, y))

        # Düz türevleri alalım
        dL_da, dL_db = loss_un_turevi(x, y, t_i, p_i)

        # Bayır aşağı yürüyelim
        a = a - dL_da
        b = b - dL_db

Burada bitiyor, for’lardan çıktıktan sonra elimizdeki a, b değerleri işte o yukarıdaki sonsuz tane mükemmel şekilde ayıran doğrudan birini karakterize eder. Bir dataset ile deneyiniz!


Bu bir tek neuron’un (Rosenblatt, 1958) yapabildiği. Linearly seperable’da convergence garantisi var! Ama değilse, kompleks bir hyperplane çizmketen aciz. Ama yine de “deep learning” diye şurada burada duyduğumuz kelimenin temsil ettiği alana giriş için iyi bir örnek. Bunu aşama aşama genişletebiliriz (biri değiernin üst kümesi olmak zorunda değil): “single layer perceptron”, “multi layer perceptron (a.k.a feedforward (vanilla) neural network”, “convolutional neural network”, “recurrent neural network”…

Başlıkta yazan “yapay sinir ağı”, “multi layer perceptron (a.k.a feedforward (vanilla) neural network”'e tekabül ediyor. Çalışma prensibi bu perceptron’a çok benzemekle birlikte, ayrılan ve onu daha güçlü yapan noktaları da var (en önemlisi linearly seperable zorunluluğu olmaması!). Ama bunun anlaşılması onun anlaşılmasına katkı sağlar diye düşünüyorum, en azından öyle olmasını temenni ederim. Harf hatalrı için kusura bakmayınız.


*: Bir de bias (intercept) var ama aman aman bir şey değil; hyperplane’lerin orijinden geçmek zorunda olmasına sebep oluyor bunun yokluğu sadece (tabii önemli bir kısıtlama). Ama eklenmesi kolay.

**: Perceptron için 0 loss iyi sayılır çünkü linearly seperable’lar için biçilmiş bir kaftan. Ama training loss’un 0 olması genel öğrenme algoritmaları için çok iyi değil.

***: sonra bir de ikinci türevi al, onun pozitif olduğunu gör, minimize ettiğinden emin ol; ama burada gerek yok :d.

****: Aslında tam olarak illa o alt noktayı bulmak zorunda değiliz. Niye? Çünkü sonsuz tane ayırabilen hyperplane var dedik, Loss en az olmayıp da tüm sample’ları doğru sınıflandırabilen (a, b) ikilisi iş görür, ki algoritma tüm sınıflandrımalar doğruysa durur, loss global minima olmasa da. Ama şu da var: yolumuz orası, oraya doğru gitmeyi hedefliyoruz. “Orası” loss’un daha az olduğu bir yer olmakla önem kazanıyor, global minima olması 100% gerekmiyor.

*****: Evet aslında p_i bu değil, hard limiter’dan geçiyor ve hard limiter differentiable değil. Ama bu noktada hard limiter’ı ortadan kaldırmak nihai amacımıza ihanet etmiyor (aslında daha da güçlendirir, düşününüz). p_i ~ a*x + b*y gibi düşünmek zararsız yani.

******: Learning rate (step size) var ama perceptron’da 1 alsak da olur. Normalde negatif türevin başına gelip "adım"ımızın büyüklüğünü ayarlıyor. Az olmasın, çok vakit alır, çok olmasın osilasyon yapar. Yine bir ifrat-tefrit mevzuu a.k.a hyperparameters.

11 Beğeni

Çok güzel bi anlatım.Gerçekten slyat okumadan yaptıgınıza inanırım :)) ayrıca anlatımınızda sunu fark ettim olayı hissederek anlatmanız konuya hakkim oldugunuzu gösteriyor.Gerçekten cok çok teşekkür ederim Hocam ellerinize sağlık.İyi ki varsınız :slight_smile:

Bilmiyorum işinize yarar mı ama şöyle bir video var:

1 Beğeni

Hocam ingilizcem o kadar iyi değil :slight_smile: .Yinede cok sağolun yardımlarınızdan dolayı

Youtube de altyazısı var çok basit bir şekilde anlatmış.

1 Beğeni

Hocam güzel bi video cok basit bi anlatımı var fakat söyle bi ayrıntı var simdi sayılar demiyelimde harfler cümleler kelimeler yapay sinir hücresinde formüller hep anlatılmıs.Yani orda formül nasıl cümleyi veya kelimeyi ve resimi ayırt edebiliyor o ince detay kafamı cok kurcalıyor.Perceptron konusunu anladım grafıkte sonsuz dogrudan dogruyu bulup ortasını alıyor.Fakat bi konuyu öğretiğimizde formüllerden geciyor bilgi belli ağırlık vs veriliyor gibi anlatılıyor.Bu ezberdir asıl mantığını anlamak önemli.

Somut kavramları formülle nasıl öğretiyoruz bu anlamsız ve mantıksız bi olay.Ordaki formülden somut kavramlar nasıl öğretiliyor sinir ağına olay bu mantık yok piyasada.Ezber deseniz yeminle öğrenirim hic sorun değil ama bu yalnıs olur ve hakkim olmadıgım bir konuda uzman olmam mümkün olmaz.