Neden aşırı giyinmek kötü?


27

Bu dersleri çalıştım ve makine öğrenimindeki eylemlere fazla uymamanın kötü olduğunu söylüyorlar, ancak nöronlarımız çok güçlüydü ve yaşadığımız veya kaçtığımız en iyi eylemleri / duyuları buluyorlar, artı kötüden arttırılmış / arttırılmış olabilirler • Kötü veya iyi tetikleyiciler tarafından iyi, eylemlerin aynı seviyede olacağı ve en iyi (sağda), süper güçlü kendinden emin eylemlerle biteceği anlamına gelir. Bu nasıl başarısız olur? 44pos'tan söylenen eylemleri kaldırmak / artırmak için pozitif ve negatif duyu tetikleyicileri kullanır. 22neg.


4
Bu soru sadece makine öğrenmesi, sinir ağları vb. İçin çok daha geniştir. Polinom sığdırmak kadar basit örneklere uygulanır.
gerrit


7
@ FriendlyPerson44 Sorunuzu tekrar okuduktan sonra, başlığınızla gerçek sorunuz arasında büyük bir kopukluk olduğunu düşünüyorum.
AI'nızdaki kusurları soruyor gibisiniz

3
@DoubleDouble Katılıyorum. Ayrıca, makine öğrenmesi ve nöronlar arasındaki bağlantı şüphelidir. Makine öğreniminin 'beyin gibi davranma', nöronları taklit etme ya da zekayı taklit etme ile ilgisi yoktur. Bu noktada OP'ye yardımcı olabilecek birçok farklı cevap var gibi görünüyor.
Shaz

2
Sorunuzu ve unvanınızı netleştirmelisiniz. Belki de: "İnsan beyni, aşırı giydirmeye karşı herhangi bir önlem almadan harika çalışırken, neden sanal bir beyni fazla giydirmeye karşı korumak zorundayız?"
Falco

Yanıtlar:


44

Duyduğum en iyi açıklama şudur:

Makine öğrenimi yaparken, bazı olasılıksal dağılımları izleyen verilerden öğrenmeye çalıştığınızı varsayıyorsunuz.

Bu, herhangi bir veri setinde, rastlantısallık nedeniyle, bir miktar gürültü olacağı anlamına gelir : veri rastgele değişir.

Kıyafet giydiğinde, gürültüden ders alıp onu modeline dahil etmelisin.

Ardından, diğer verilerden tahminler yapma zamanı geldiğinde, doğruluğunuz azalır: Gürültü modelinize girdi, ancak egzersiz verilerinize özgüdü, bu nedenle modelinizin doğruluğunu etkiledi. Modeliniz genelleştirmiyor: eğitmek için seçtiğiniz veri setine çok özel.


1
"Gürültüden öğrenme" bana belirsiz geliyor. Tam olarak ne oluyor? Bir örnek verebilir misin?
Raphael

Verileriniz çok temiz olsa ve aykırı değerler dışında (hem doğal hem de doğal olmayan aykırı değerler) hala "fazla uydurma" kötü bir uygulamadır ve modelinizden çıkarılmalıdır. Modeliniz "fazladan takılı" olduğunda bu, modelinizin verilerde gizli olan bilgileri genelleştirmediği ve diğer veri noktalarını tahmin edemediği anlamına gelir. Basitçe, modelinizi taktığınızda sadece tren / test veri setinize uyursunuz.
Aboelnour

2
@Raphael Sistem, eğitim setindeki gürültüyü özellikler olarak görmeye başlar. Daha sonra net olarak belirli bir gürültünün eksik olduğu gerçek veriler üzerinde çalıştırırsanız, özellikler (= dahil edilen gürültü) eksik olduğundan daha düşük bir olasılık elde edersiniz.
drake7707,

2
@Raphael Peki örneğin: Trafik kamerasından bir resim koleksiyonum var. Mevcut araba olup olmadığını tespit eden bir ağı eğitelim. Biraz antrenmandan sonra arabaları olan ve olmayan bir set verir, harika! Bir sokağın insanlar olmadan boş olup olmadığını tespit etmek için ağı yeni bir sette uygulayalım ve ha, neden boş sokamı yüksek olasılıkla algılamıyor? Örnek sete baktığımda, her resimde araba bulunmadığında resimlerin arka planında insanlar olduğunu fark ettim.
Filenin fazla sığması

1
Bozuk parayla eklenen gürültülü bir sistemi düşünün. Kafalara, değere 1 eklersiniz ve yazılara 0 eklersiniz. Sonuçları açıklığa kavuşturmak için, iki noktadan absürd küçük bir veri seti seçeriz: (2, 5) ve (2.1, 8). Bozuk para, birinci noktaya gelir, ikinciyi izler, gürültü çıkarır, veri setini yapar (3, 5), (2.1, 8). Şimdi sinir ağı, neredeyse tümü gürültü olsa bile, x ve y değerleri arasında anlamlı bir ilişki olduğu gözüken bir veri setinden öğreniyor. O zaman bunu 'gerçek verilerde netleştirin, yanlış sonuçlar
doğuracak

39

ELI5 Sürümü

Bu temelde bunu 6 yaşındaki çocuğuma açıkladım.

Bir zamanlar Mel adında bir kız vardı ( "Al? ML?" "Baba, topalsın" ). Ve her gün Mel farklı bir arkadaşla oynadı ve her gün güneşli, harika bir gündü.

Mel, Pazartesi günü Ürdün, Salı günü Lily, Çarşamba günü Mimi, Perşembe günü Olive ve ardından Cuma günü Mel, Brianna ile oynadı ve yağmur yağdı. Korkunç bir fırtınaydı!

Daha fazla gün, daha fazla arkadaş! Mel Cumartesi günü Kwan, Pazar günü Grayson, Pazartesi günü Asa ... ve Salı günü Mel, Brooke ile oynadı ve yine eskisinden daha da kötüleşti!

Şimdi Mel'in annesi tüm oyunları oynamıştı, böylece akşam yemeğinde o gece Mel'e sıraya girdiği yeni oynatma oyunlarını anlatmaya başladı. "Çarşamba günü Luis, perşembe günü Ryan, cuma günü Jemini, cumartesi günü Bianca -"

Mel kaşlarını çattı.

Mel'in annesi, “Sorun ne Mel, Bianca'yı sevmiyor musun?” Diye sordu.

Mel, "Ah, elbette, harikaydı, ama adı B ile başlayan bir arkadaşımla her oynadığımda yağmur yağıyor!"


Mel'in cevabında yanlış olan ne?

Cumartesi günü yağmur yağmayabilir.

Bilmiyorum, demek istediğim, Brianna geldi ve yağmur yağdı, Brooke geldi ve yağmur yağdı ...

Evet biliyorum ama yağmur arkadaşlarına bağlı değil.


10
Ve bu diğer soruya göre, "gürültüden öğrenmek" demek budur.
Kyle Hale

Yağmur yorumuna - Ama bunu yaparız, o zaman bu şekilde çalışmaya devam eder ve daha sonra öğreniriz.
Friendly Person 44,

13
@ FriendlyPerson44 Haklısınız, insanlar hata yapıyor ve kıyafet gibi kötü şeyler yapıyor. Sorunuz, aşırı telaşlamanın neden kötü olduğunu soruyor, insanların yapıp yapmamasını değil.
Kyle Hale

1
Bu sorun yalnızca zayıf öğrenen robotlar için değil, aynı zamanda zayıf öğrenen insanlar için de geçerlidir.
Tomáš Zato - Monica

Tam olarak takip etmiyorum: Yağmur her şeyden önce bir tahmin değişkeni olmamalı, aşırı giyinmeyle ne ilgisi var?
mucaho

14

Overfitting, öğrenicinizin iyi genelleşmeyeceği anlamına gelir. Örneğin, puanları iki sınıfa ayırmaya çalıştığınız standart bir denetimli öğrenme senaryosunu düşünün. Verilmiş olduğunu varsayalımN-N-


Ancak, çok fazla uyarlanmış eylemleri belirli duyularla bağlantılıdır ve yalnızca aynı duyuları tekrar gördüğünde hafızayla eşleşir ve bu eylemlere bağlanır, başka şeyler gördüğü zaman bunları yapmaz. Genelleme iki şeydir - tüm bu ağaç görüntüleri ağaçtır ve bu yeni şeyi çözmek için geçmişten gelen bilgileri kullanır. AI'mın bunu çözmesi için bir ağaç görür ve "ağacı" duyar ve bu hafıza ile eşleşir ve onu öne çıkarır, sonra yeni ağaçlar görür, isimleri ve hepsi en son hafızada duyularla bağlanır - ilk ağaç görüntüsü & ses. Knwldge tarafından yeni ilgili küçük şey bulmak yeni aktris olduğunu
Friendly Person 44

2
@ FriendlyPerson44 Denetimli makine öğreniminde, eğitimin sonucunun daha fazla değişmesine gerek yoktur. Burası "fazla uydurma" devreye giriyor. Makine bir ağacı tanımayı öğrenmiş gibi olur - ilk önce renkler, sonra genel şekil, sonra belirli bir şekil ( durması gereken ), ama sonra ağaçları yalnızca sizin yerinizde bulunan rastgele desenlerle ayırmaya başlar Eğitim Seti. Ağaçların rastgele yeni resimlerini görmesine izin verdiğinizde, ağaç olmadığına karar verir. Bu noktada, en kötü durum, kullanımda olması ve kimse denetlememesidir!
DoubleDouble

Ancak mayın, ağaç görüntüsünü ve sesi "ağaç" olarak kaydederek ve iki duyuyu birbirine bağlayarak ağacı tanır ve ağaç söylendiğinde bellekteki ile eşleşir ve eşleşmeyi ve buna bağlı olanları belleğin önüne getirir ve sonra diğer gösterildiğinde ağaçlar ve yeni isimler bu görüntüleri & ilk öğrenilenlere benziyor. Ağaçlar tetikleyici değiller, yiyecek vb., Bir renk veya desen gördüğünde eylemleri kurtaramayacak. Mine gerçekten eylemleri öğrenir.
Friendly Person 44,

1
@ FriendlyPerson44 Aşırı donmanın kötü olmasının bununla ne alakası var?
DoubleDouble

9

Kabaca konuşursak, aşırı uydurma genellikle oran olduğunda

görüntü tanımını buraya girin

çok yüksek.

Aşırı uyumu, modelinizin test verisine genelleştirilmesini engelleyen büyük resimleri öğrenmek yerine, eğitim verilerini kalpten öğrendiği bir durum olarak düşünün: bu, model boyutuna göre çok karmaşık olduğunda gerçekleşir. Eğitim verisi, yani eğitim verilerinin boyutunun model karmaşıklığına göre daha küçük olması.

Örnekler:

  • Verileriniz iki boyuttaysa, eğitim setinde 10000 puanınız vardır ve model bir çizgi ise, altında -fit.
  • Verileriniz iki boyuttaysa, eğitim setinde 10 puana sahipsiniz ve model 100 dereceli polinom ise, aşırı uyum göstermeniz olasıdır .

görüntü tanımını buraya girin

Teorik açıdan bakıldığında, modelinizi doğru şekilde eğitmek için ihtiyacınız olan veri miktarı, makine öğreniminde çok önemli ancak cevaplanması gereken bir sorudur. Bu soruyu cevaplamak için böyle bir yaklaşım VC boyutudur . Başka bir yanlılık varyansı tradeoff .

Ampirik bir bakış açısına göre, insanlar genellikle eğitim hatasını ve test hatasını aynı arsaya çizer ve test hatası pahasına eğitim hatasını azaltmadıklarından emin olun:

görüntü tanımını buraya girin

Coursera 'Makine Öğrenmesi kursu , "10: Makine Öğrenimi uygulamak için tavsiyeler" bölümünü izlemenizi tavsiye ederim .


1
"Kalpten öğrenme" çizgisini seviyorum çünkü insanlar bunu bir ölçüde yapabiliyor (ve yapabiliyor). Soruların ve cevapların asla değişmediği ancak cevapları yanlış aldığınızda size söylenen çok zor bir sınav aldığınızı hayal edin. Denklemi (2 + 2) taklit etmek zor, denklemi tanıyor ve '4' diyorsunuz - ama sonra (2 + 3) geliyor, fakat eklemeyi öğrenmediniz, sadece '4' demeyi öğrendiniz '2 + 2' olduğunda
DoubleDouble

güzel açıklama
Nikos M.

4

Bence iki durumu göz önüne almalıyız:

Sonlu eğitim

Modelimizi geliştirmek için kullandığımız sınırlı miktarda veri var. Bundan sonra modeli kullanmak istiyoruz.

Bu durumda, fazladan giyiniyorsanız, verileri ortaya çıkaran olgunun bir modelini yapmazsınız, ancak veri kümenizin bir modelini yaparsınız. Eğer veri setiniz mükemmel değilse - mükemmel bir veri setini hayal etmekte zorlanırım - modeliniz, eğitim almak için kullandığınız verinin kalitesine bağlı olarak, pek çok durumda veya bazı durumlarda iyi çalışmayacaktır. Bu yüzden fazla uyum, altta yatan olguyu modellemek istediğinizde, genelleme yapmak istediğinizde, veri setinizde uzmanlaşmaya yol açacaktır.

Devamlı öğrenme

Modelimiz her zaman yeni veriler alacak ve öğrenmeye devam edecektir. Muhtemelen, kabul edilebilir bir başlangıç ​​noktası elde etmek için başlangıçta artan bir esneklik dönemi vardır.

Bu ikinci durum, insan beyninin nasıl eğitildiğine benzer. Bir insan çok genç olduğunda, öğrenmek istediklerinizin yeni örnekleri, yaşlandığınızdan daha belirgin bir etkiye sahiptir.

Bu durumda aşırı donanım biraz farklı fakat benzer bir sorun sunar: Bu davanın altındaki sistemler genellikle öğrenirken bir işlev görmesi beklenen sistemlerdir. Bir insandan nasıl bir yerde oturmadığını, öğrenecek yeni veriler sunarken düşünün. Bir insan sürekli olarak etkileşimde bulunur ve hayatta kalır.

Verilerin gelmeye devam etmesi nedeniyle sonuçların iyi sonuçlanacağını iddia edebilirsiniz, ancak bu zaman zarfında öğrenilmiş olanın kullanılması gerekiyor! Aşırı yükleme, modelinize daha kötü performans vererek, 1. durumda olduğu gibi aynı kısa süreli etkileri sağlayacaktır. Fakat çalışacak modelinizin performansına bağlısınız!

Şuna bir bakın, eğer fazladan giyiniyorsanız, gelecekte sizi bir süre daha yemeye çalışan avcıyı, ancak avcı sizi yerken avlanmayacağını anlayabilirsiniz.


Operasyonun belirttiği soruya iyi cevap: “Neden beyinlerimiz iyi çalışıyor gibi gözüküyorsa, herhangi bir fazladan tazminat ödemeden sanal beyinlerde fazladan takmayı engellemek zorundayız” - insanlar kendileri için öğrenirken bir makine eğitilmişlerdir.
Falco

3

Diyelim ki, bilgisayara iyi ve kötü ürünler arasında bir belirleme yapmayı öğretin ve öğrenmesi için aşağıdaki veri setini verin: veri kümesi ile diyagramı.  0 ila 50, 0'dır. 52 ve 74, 0'dır. 51 ila 100 arasında kalan değerler 1'dir.

0, ürünün arızalı olduğu, 1'in tamam olduğu anlamına gelir. Gördüğünüz gibi, X ve Y ekseni arasında güçlü bir korelasyon var. Ölçülen değer 50'nin altında veya ona eşitse, ürünün arızalanması çok büyük olasılıkla (~% 98) ve üzerinde çok yüksek olması muhtemeldir (~% 98). 52 ve 74, aykırı değerlerdir (yanlış ölçülmüş veya rol oynayan ölçülmemiş faktörler; aynı zamanda gürültü olarak da bilinir). Ölçülen değer, kalınlık, sıcaklık, sertlik veya başka bir şey olabilir ve bu örnekte birimi önemli değildir.

if(I<=50)
    return faulty;
else
    return OK;

Yanlış sınıflandırmanın% 2 si şansı olacaktı.

Bir güçlendirme algoritması şöyle olurdu:

if(I<50)
    return faulty;
else if(I==52)
    return faulty;
else if(I==74)
    return faulty;
else
    return OK;

Bu yüzden, aşırı yükleme algoritması, 52 veya 74'ü ölçen tüm ürünleri hatalı olarak sınıflandırır, ancak yeni veri setleri verildiğinde / üretimde kullanıldığında iyi olma ihtimalleri yüksektir. Yanlış sınıflandırmaların% 3,92'sinin şansı olur. Bir dış gözlemciye göre bu yanlış sınıflandırma garip fakat fazladan takılan orijinal veri setini bilmesi ile açıklanabilir.

Orijinal veri seti için, en fazla kullanılan algoritma en iyisidir, yeni veri setleri için genel (çok fazla olmayan) algoritma en iyisidir. Son cümle, temelde fazla uydurmanın anlamını açıklar.


2

Üniversitedeki AI kursunda, hocamız Kyle Hale'inkine benzer bir şekilde bir örnek verdi:

Bir kız ve annesi ormanda birlikte yürürler, aniden bir kaplan fırçanın dışına fırlar ve annesini mahveder. Ertesi gün babasıyla birlikte ormanda yürüyor ve yine kaplan fırçanın dışına atlıyor. Babası ona koşması için bağırıyor, ama “Ah, tamam baba, kaplanlar sadece anneleri yerler” der.

Ama diğer yandan:

Bir kız ve annesi ormanda birlikte yürürler, aniden bir kaplan fırçanın dışına fırlar ve annesini mahveder. Ertesi gün, babası odasını kovarken bulur ve neden arkadaşlarıyla dışarıda oynamak istemediğini sorar. "Hayır! Bir kaplanın dışına çıkarsam, kesinlikle beni yer!" Diye cevap verir.

Hem fazla giyme hem de giydirme kötü olabilir, ancak bunun hangisinin sizi daha çok endişelendiriyorsa çözmeye çalıştığınız sorunun içeriğine bağlı olduğunu söyleyebilirim.



2

Gerçekten karşılaştığım bir şey de böyle. İlk olarak, girdi / çıktı oranının kabaca doğrusal olmasını beklediğim bir şeyi ölçtüm. İşte ham verilerim:

Input   Expected Result
1.045   0.268333453
2.095   0.435332226
3.14    0.671001483
4.19    0.870664399
5.235   1.073669373
6.285   1.305996464
7.33    1.476337174
8.38    1.741328368
9.425   1.879004941
10.47   2.040661489

Ve işte bu bir grafik:

görüntü tanımını buraya girin

Kesinlikle doğrusal veri beklentime uyuyor gibi görünüyor. Denklemi bulmak için oldukça basit olmalı, değil mi? Böylece, programınızın bu verileri biraz analiz etmesine izin verirsiniz ve sonunda% 99.99 gibi bir doğrulukla tüm bu veri noktalarına çarpan denklemi bulduğunu bildirir! Müthiş! Ve bu denklem ... 9sin (x) + x / 5. Bunun gibi görünüyor: görüntü tanımını buraya girin

Eh, denklem girdi verilerini neredeyse mükemmel bir doğrulukla tahmin ediyor, ancak girdi verisine çok fazla uyduğundan, başka bir şey yapmak için oldukça yararsız.


Bence fazla uydurma, girdi verisine sahip olduktan sonra yanlış yaptığınız şeyle ilgili bir soru. Burada yapabileceğiniz hiçbir şey yok; Girişler yetersiz çünkü örnekleme var.
Emre,

1
@Emre: Örnek alma niyetinde değilim, giriş / çıkışın lineer olmasını amaçlamıştım, ancak aşırı uydurma açıkça doğrusal olmayan bir denklem üretti. Netleştirmek için düzenleyeceğim.
Mooing Duck

1

Bu makaleye bir göz atın, oldukça iyi ve çok iyi uydurma açıklar.

http://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html

Makale, bir kosinüs fonksiyonundan gelen bir sinyal verisi örneğini inceler. Takma modeli, sinyalin biraz daha karmaşık bir fonksiyon olacağını öngörür (bu aynı zamanda kosinüs fonksiyonuna da dayanır). Bununla birlikte, fazladan takılan model, genellemeye değil, sinyal verilerindeki gürültünün ezberlenmesine dayanarak bunu sonuçlandırır.


4
Bu bağlantı koparsa, cevabınız değersiz yanında olacaktır. Lütfen cevabın bu bağlantıdan bağımsız bir değeri olması için en azından bir özeti (elbette atıfta bulunarak) verin.
Raphael

1

Makine öğrenimi ve @ jmite'nin cevabını değerlendirmek konusunda hiçbir deneyime sahip olmayan , burada ne anlama geldiğini düşündüğümün bir görselleştirmesi:

Gösteri için yaklaşık doğru şeklin rastgele grafiği

Yukarıdaki grafikteki tek tek çubukların, daha büyük veri kümelerine uygulanacak genel eğilimleri anlamaya çalıştığınız verileriniz olduğunu varsayalım. Amacınız eğri çizgiyi bulmaktır. Kıyafet takıyorsanız - gösterilen eğri çizginin yerine, her bir çubuğun üstünü birbirine bağlayın ve ardından bunu veri kümenize uygulayın - ve gürültü (beklenen değişikliklerden) abartılı hale geldiğinde garip bir hassas titiz tepki elde edin gerçek uygulama veri kümelerinize ekleyin.

Umarım bir şekilde yardım etmişimdir ...


0

Gerçek hayatta fazla uydurma:

Beyaz insan, suç işleyen siyah insanın haberini görür. Beyaz insan, suç işleyen bir siyah insanın başka bir haberi görüyor. Beyaz insan, suç işleyen siyah bir şahsın üçüncü bir haberini görür. Beyaz insan kırmızı tişört giyen beyaz insan hakkında haberler görüyor, anne babaları ve akıl hastalığı geçmişi suç işliyor. Beyaz insan, bütün siyah insanların suç işlediğine ve sadece kırmızı gömlekler, zengin ebeveynler ve zihinsel hastalık geçmişine sahip beyaz insanların suç işlediğine karar verir.

Neden bu tür aşırı uydurmanın "kötü" olduğunu anlamak istiyorsanız, yukarıdaki "siyah" ı, sizi az çok benzersiz bir şekilde tanımlayan bir özellikle değiştirin.


Kalıp yargılaması, meslekten olmayanların fazla takma dediği şeydir.
Emre

3
Bu çok uygun değil. Aşırı uyum, suçlu olan tek insanın derinin rengine, gömlek rengine, ebeveyn gelirine ve akıl hastalığı geçmişine sahip olanların haberlerde suçlulardan biri olduğuna karar veren sistem olacaktır.
David Richerby

8
@Emre Hayır, klişeleştirme, fazla uydurmanın tam tersidir. Basmakalıp eğitim verilerinin özelliklerinin çoğunu yok sayan sonuçlara geliyor. Aşırı uyum, sadece eğitim verilerindeki her noktanın, tanımaya çalıştığınız şeyin bir bölümünü mükemmel bir şekilde tarif ettiği sonucuna varmaktır.
David Richerby

Moderatör notu: konu dışı / bağlam dışı yorumlar silindi. Genel tartışma için, lütfen Bilgisayar Bilimleri Sohbetini ziyaret edin . Belirli bir programla ilgili olarak, aşırı kullanma konusunda yararlı olabilecek veya kullanılmayacak olan bir sorunuz varsa, lütfen yeni bir soru sorun.
Gilles 'SO- kötülük'

2
@ArnabDatta Overfitting, aşırı derecede karmaşık bir modeli tam olarak eğitim verileriyle eşleştiriyor; basmakalıp bir aşırı basitleştirilmiş modelin kullanılmasıdır.
David Richerby

0

Test ettiğiniz tüm veriler, öğrenmek istediğiniz özelliklere ve öğrenmelerini istemediğiniz bazı özelliklere sahip olacaktır.

John 11 yaşında.
Jack 19 yaşında.
Kate 31 yaşında.
Lana 39 yaşında.

Uygun montaj: Yaşlar yaklaşık olarak doğrusaldır, ~ 20 yaşından sonra
Kıyafet: İki insan 10 yıl ayrı olamaz (verilerdeki gürültünün özelliği)
İçindekiler: Tüm insanların 1 / 4'ü 19 (klişe)


Hoşgeldiniz! Zaten çok sayıda gayrı resmi örneğimiz var, bu yüzden bunun çok fazla katkı sağladığından emin değilim. Ve bu örneği daha resmi hale getirmek zor görünüyor. Örneğin, bahsettiğiniz doğrusal işlev nedir? İşlevin girişi, bir sayı olmayan kişinin adı gibi görünüyor. Bu arada, "iki insan on yıl ayıramaz" ve "1/4 insan 19 yaşında" verilerden öğrenilen fonksiyonlara örnek değildir.
David Richerby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.