Seyreklik için Normalleştirme: L1 Normalleştirme

Seyrek vektörler genellikle çok sayıda boyut içerir. Özellik çapraz oluşturmak daha da fazla boyutla sonuçlanır. Bu tür yüksek boyutlu özellik vektörleri göz önünde bulundurulduğunda, model boyutu çok fazla olabilir ve çok fazla RAM gerektirebilir.

Yüksek boyutlu bir seyrek vektörde, ağırlıkların mümkün olduğunda tam olarak 0 değerine düşmesi teşvik edilir. Tam olarak 0'lık bir ağırlık, temelde karşılık gelen özelliği modelden kaldırır. Özelliklerin sıfırlanması RAM'den tasarruf edilmesini sağlar ve modeldeki paraziti azaltabilir.

Örneğin, yalnızca İzmir'i değil, tüm dünyayı kapsayan bir konut veri kümesini düşünün. Dakika düzeyinde (derece başına 60 dakika) küresel enlemi gruplandırmak, seyrek bir kodlamayla yaklaşık 10.000 boyut sağlar; dakika düzeyinde küresel boylam yaklaşık 20.000 boyut sağlar. Bu iki özelliğin bir özellik karşılaştırması, yaklaşık 200.000.000 boyutla sonuçlanır. Bu 200.000.000 boyutun çoğu, konutların sınırlı bir alanı (örneğin, okyanusun orta kısmı) temsil ettiği için bu verilerin etkili bir şekilde genelleştirilmesinin zor olacağı anlamına gelir. Bu gereksiz boyutları depolamanın RAM maliyetini ödemek çok saçma olurdu. Bu nedenle, anlamsız boyutların ağırlıklarının tam olarak 0'a düşmesini teşvik etmek iyi bir fikir olabilir. Bu şekilde, çıkarım sırasında bu model katsayılarının depolama maliyeti için ödeme yapmaktan kaçınabiliriz.

Uygun şekilde seçilmiş bir normalleştirme terimi ekleyerek bu fikri eğitim sırasında yapılan optimizasyon problemine kodlayabiliriz.

L2 normalleştirmesi bu görevi yerine getirir mi? Maalesef hayır. L2 normalleştirmesi, ağırlıkları küçük olmaya teşvik eder, ancak tam olarak 0,0'a zorlamaz.

Alternatif olarak, bir modelde sıfır olmayan katsayısal değerlerin sayısını azaltan bir normalleştirme terimi oluşturmayı deneyebilirsiniz. Bu sayıyı artırmak, yalnızca modelin verilere sığdırma yeteneğinde yeterli artış olması durumunda haklı çıkar. Ne yazık ki bu sayıya dayalı yaklaşım, sezgisel olarak cazip görünse de, dışbükey optimizasyon problemimizi dışlamadan olmayan bir optimizasyon sorununa dönüştürür. Dolayısıyla, L0 normalleştirmesi olarak bilinen bu fikir, pratikte etkili bir şekilde kullanabileceğimiz bir şey değildir.

Bununla birlikte, L0'a yakın bir değer olarak işlev gören, ancak dışbükey olması ve dolayısıyla hesaplama için verimli olma avantajına sahip olan, L1 normalleştirmesi adı verilen bir normalleştirme terimi vardır. Dolayısıyla, L1 normalleştirmesini kullanarak modelimizdeki bilgi içermeyen katsayıların çoğunun tam olarak 0 olmasını sağlayabilir ve böylece, çıkarım sırasında RAM tasarrufu elde edebiliriz.

L1 ve L2 normalleştirmesi.

L2 ve L1, ağırlıklara farklı şekilde ceza uygular:

  • L2, ağırlığa2 ceza verir.
  • L1, |weight| olarak ceza uygular.

Sonuç olarak, L2 ve L1'in farklı türevleri vardır:

  • L2'nin türevi 2 * ağırlık'tır.
  • L1'in türevi k'dır (değeri ağırlıktan bağımsız olan bir sabit).

L2'nin türevini, her seferinde ağırlığın% x'ini kaldıran bir kuvvet olarak düşünebilirsiniz. Zeno'nun da bildiği gibi, bir sayının yüzde x'ini milyarlarca kaldırsanız bile azalan sayı hiçbir zaman sıfıra ulaşmayacaktır. (Zeno, kayan nokta hassasiyeti sınırlamalarına pek aşina değildi; bu durum büyük olasılıkla tamamen sıfır üretebilirdi.) Her durumda, L2 normal şartlarda ağırlıkları sıfıra yönlendirmez.

L1 türevini, her seferinde ağırlıktan bir sabit değer çıkaran bir kuvvet olarak düşünebilirsiniz. Bununla birlikte, mutlak değerler sayesinde L1'in 0'da süreksizliği vardır. Bu, 0'ı aşan çıkarma sonuçlarının sıfırlanmasına neden olur. Örneğin, çıkarma işlemi +0,1'den -0,2'ye bir ağırlığı zorunlu kıldıysa L1, ağırlığı tam olarak 0 olarak ayarlar. Eureka, L1 ağırlığı sıfırladı.

Tüm ağırlıkların mutlak değerini cezalandıran L1 normalleştirmesi, geniş modeller için oldukça verimli olur.

Bu açıklamanın tek boyutlu bir model için geçerli olduğunu unutmayın.

L1 ve L2 normalleştirmesinin ağırlıklar ağı üzerindeki etkisini karşılaştırmak için aşağıdaki Oynat düğmesini () tıklayın.