Bu öğreticide, lineer cebiri makine öğrenmesinde ve derin öğrenmedeki kullanılışlarını daha iyi anlayabilmek için en basit haliyle inceleyeceğiz ve lineer cebir bilgisinin temellerini vereceğiz.
Başlamadan Önce Şunlara Bakmanız Tavsiye Edilir.
İÇERİK
Lineer Cebir Nedir?
Doğrusal Cebir (Lineer Cebir), vektörleri, vektör uzaylarını, doğrusal dönüşümlerini, doğrusal denklemleri ve matrisleri inceler. Lineer Cebir, karmaşık sorunları basit, sezgisel ve verimli hesaplanabilen problemlere dönüştürür.
Lineer Cebirin daha hızlı ve basit bir şekilde nasıl aynı problemi daha başarılı çözdüğüne bir göz atalım.
İki diziyi birbirleri ile çarpalım:
import numpy as np # iki diziyi carpma islemi x = [1, 2, 3] y = [4, 5, 6] sonuc = [] for i in range(len(x)): sonuc.append(x[i] * y[i]) # lineer cebir ile x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) print x * y # sonuc array([ 4, 10, 18])
Dizileri tanımladıktan sonra lineer cebir yaklaşımı 3 kat daha hızlı hesapladı.
Derin Öğrenmede Lineer Cebir
Sinir ağları, ağırlıkları matrislerde saklar. Lineer cebir matris işlemlerini, özellikle de GPU’larda eğitim yaparken hızlı ve kolay gerçekleştirir. Aslında, GPU’lar vektör ve matris işlemlerini göz önünde bulundurularak oluşturulmuştur. Görüntülerin piksel dizisi olarak nasıl gösterilebileceğine benzer şekilde, video oyunları devasa, sürekli gelişen matrisleri kullanarak etkileyici oyun deneyimleri üretir. Pikselleri birer birer işlemek yerine, GPU’lar piksellerin tüm matrislerini paralel olarak işler.
Vektörler
Vektörler 1 boyutlu sayı veya terim dizisidir. Geometride vektörler potansiyel bir değişimin büyüklüğünü ve yönünü ifade eder. Vektör [5, -6] sağa 5 ve aşağı 6 gitmektir. Birden fazla boyuta sahip bir vektöre matris denir.
Vektör gösterimi
Vektörleri temsil etmenin çeşitli yolları vardır. Bunlardan birkaç gösterim:
Geometride Vektörler
Vektörler tipik olarak bir noktadan hareketi temsil eder. Potansiyel değişikliklerin bir noktaya hem büyüklüğünü hem de yönünü depolarlar. Vektör [-2,5], 2 birim sola hareket ettirmesini ve 5 birim yukarıya çıkmasını söyler.
Skaler İşlemler
Skaler operasyonlar bir vektör ve sayı içerir. Vektörü, vektördeki tüm değerlerden ekleme, çıkarma veya çarpma yoluyla yerinde değiştirirsiniz.

Elementwise Operasyonlar
Toplama, çıkarma ve bölme gibi elementwise işlemlerde, konumsal olarak karşılık gelen değerler birleştirilerek yeni bir vektör oluşturulur. Vektördeki 1. değer, vektörün 1. değeri ile eşleştirilir. 2. değer 2. ile eşleştirilir vb. Bu vektörlerin, işlemi tamamlamak için eşit boyutlara sahip olması gerektiği anlamına gelir.

import numpy as np y = np.array([1,2,3]) x = np.array([2.,3.,4.]) print y + x print y - x print y / x # sonuclar # y + x = [3, 5, 7] # y - x = [-1, -1, -1] # y / x = [.5, .67, .75]
Vektörel Çarpım
İki tür vektör çarpımı vardır: Nokta Çarpım ve Hadamard Çarpım.
Nokta Çarpımı
İki vektörün nokta çarpımı bir skalerdir. Vektörlerin ve matrislerin nokta ürünü (matris çarpımı) derin öğrenmede en önemli işlemlerden biridir.
import numpy as np y = np.array([1, 2, 3]) x = np.array([2, 3, 4]) print np.dot(y, x) # sonuc # np.dot(y,x) = 20
Hadamard Çarpımı
Hadamard Product elementwise çarpımdır ve bir vektör çıktılar.
import numpy as np y = np.array([1,2,3]) x = np.array([2,3,4]) print y * x # sonuc # y * x = [2, 6, 12]
Vektör Alanları
Bir vektör alanı, toplama veya çarpma gibi bir vektör fonksiyonu uyguladığımızda noktanın (x, y) varsayımsal olarak ne kadar hareket edeceğini gösterir. Uzaydaki bir nokta göz önüne alındığında, bir vektör alanı önerilen bir değişikliğin grafiğindeki çeşitli noktalardaki güç ve yönünü gösterir.
Bu vektör alanı, başlangıç noktasına bağlı olarak farklı yönlerde hareket edebilir. Bunun nedeni, bu alanın ardındaki vektörün, -2 ve 5 gibi skaler değerler yerine 2x veya x² gibi terimler olmasıdır. Grafideki her bir nokta için, x koordinatını 2x veya x²’den başlayarak başlangıç noktasından yeni yerine bir ok çiziyoruz. Vektör alanları, Dereceli Azalma (Gradient Descent) gibi makine öğrenmesi tekniklerini görselleştirmek için son derece yararlıdır.
Matrisler
Bir matris, toplama, çıkarma ve çarpma için özel kurallara sahip dikdörtgen bir sayı veya terim tablosudur.
Matris Boyutları
Bir matrisin boyutlarını satırlarla ve sütunlarla tanımlarız.
import numpy as np a = np.array([ [1, 2, 3], [4, 5, 6] ]) # a.shape == (2, 3) # a = [[1 2 3] # [4 5 6]] b = np.array([ [1, 2, 3] ]) # b.shape == (1, 3) # b [[1 2 3]]
Matris Skaler İşlemleri
Matrislerle ölçeklendirme işlemlerini vektörlerde olduğu gibi çalıştırır. Matrisdeki her elemana skalar uygulayın – topla, çıkart, böl, çarp.

import numpy as np a = np.array( [[1, 2], [3, 4]]) print a + 1 # [[2,3], # [4,5]]
Matris Elementwise İşlemleri
İki matrisin toplanması, çıkartılması veya bölünmesi için eşit boyutlara sahip olmaları gerekir. Yeni bir matris üretmek için ilgili değerleri elementwise olarak birleştiririz.
import numpy as np a = np.array([ [1, 2], [3, 4] ]) b = np.array([ [1, 2], [3, 4] ]) print a + b # [[2, 4], # [6, 8]]
Numpy Broadcasting*
Numpy’da elementwise operasyonlar için boyut gereksinimleri broadcasting denilen bir mekanizma ile rahatlatılır. Her bir matriste karşılık gelen boyutlar (satırlar ile satırlar, sütunlar ile sütunlar) aşağıdaki gereksinimleri karşılarlarsa, iki matris uyumludur:
- Boyutlar eşit ise veya
- Birinin boyutu 1 boyutlu ise
import numpy as np a = np.array([ [1], [2] ]) b = np.array([ [3, 4], [5, 6] ]) c = np.array([ [1, 2] ]) # Ayni satir sayisi # Farkli sutun sayisi # ama a'nin boyutu bir sutun o yuzden calisir print a * b # [[ 3, 4], # [10, 12]] # Ayni sutun sayisi # Farkli satir sayisi # ama c bir satirli o yuzden calisir print b * c # [[ 3, 8], # [5, 12]] # Farkli satir sayisi # Farkli sutun sayisi # ama a da c de tek boyutlu o yuzden calisir print a + c # [[2, 3], # [3, 4]]
Matrix Hadamard Çarpımı
Hadamard matrisler çarpanı, elementwise bir işlemdir. Pozisyonel olarak karşılık gelen değerler çarpılarak yeni bir matris oluşturulur.
import numpy as np a = np.array( [[2, 3], [2, 3]]) b = np.array( [[3, 4], [5, 6]]) # Python'in carpma islemini kullanir print a * b # [[ 6, 12], # [10, 18]]
Numpy’da bir matrisin ve vektörün boyutları broadcasting gereksinimlerini karşıladığı sürece Hadamard çarpımı alabilirsin.
Matris Transpozu
Yapay sinir ağlarında, ağırlık ve girdileri boyutları çoğunlukta matris çarpımının gereksinimlerini karşılamaz. Matris transpoz işlemi, matrislerden birini “döndürme”(rotate) yöntemini sağlar; böylece işlem çarpma gereksinimlerine uygun hale gelir. Bir matriste transpoz alma işlemi iki adımlıdır:
- Matrisi sağa 90 ° döndürün
- Her satırdaki öğelerin sıralamasını tersine çevirin (ör. [a b c] [c b a] olur)
Örnek olarak, matris M’nin transpoz T’si:
import numpy as np a = np.array([ [1, 2], [3, 4]]) print a.T # [[1, 3], # [2, 4]]
Matris Çarpımı
Matris çarpımı, matrisleri çarpmak için yeni bir matris üretmek için çeşitli kurallar vardır. Tüm matrisler çarpma işlemi için uygun değildir. Buna ek olarak, elde edilen matris çıktısının boyutları üzerinde de bazı gereklilikler vardır.
- 1. matristeki sütunların sayısı 2. matrisdeki satırların sayısına eşit olmalıdır
- Bir M x N matrisi ve bir N x K matrisi çarpımı bir M x K matrisidir. Yeni matris, 1. matrisin satirlarini ve 2. matrisin sütunlarının boyutlarını alır.
Matris çarpımı, çeşitli satır ve sütun kombinasyonlarını çarpmak için nokta çarpımına dayanır.
Numpy ile Matris Çarpımı
Numpy hem vektör hem de matris çarpımı için np.dot(A, B) fonksiyonunu kullanır.
import numpy as np a = np.array([ [1, 2] ]) # a.shape == (1,2) b = np.array([ [3, 4], [5, 6] ]) # b.shape == (2,2) # Carpim mm = np.dot(a, b) print mm # mm == [13, 16] # mm.shape == (1,2)