Veri Bilimcisi

Makine Öğrenmesi, Derin Öğrenme, Veri Madenciliği, Veri Analizi

Lineer Cebir 101

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.

  1. NumPy’a Hızlı Başlangıç
  2. Pandas’a Hızlı Başlangıç
  3. SciPy’a Hızlı Başlangıç

İÇERİK

  1. Lineer Cebir Nedir?
  2. Derin Öğrenmede Lineer Cebir 
  3. Vektörler
    1. Vektör Gösterimi
    2. Geometride Vektörler
    3. Skaler İşlemler
    4. Elementwise Operasyonlar
    5. Vektörel Çapım
    6. Nokta Çarpımı
    7. Hadamard Çarpımı
    8. Vektör Alanları
  4. Matrisler
    1. Matris Boyutları
    2. Matris Skaler İşlemleri
    3. Matris Elementwise İşlemleri
    4. Numpy Broadcasting*
    5. Matris Hadamard Çarpımı
    6. Matris Transpozu
    7. Matris Çarpımı
    8. Numpy ile Matris Çarpımı

 

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:

vektor_gosterimi.png

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.

geometride_vektorler.png
V = [-2, 5]
Uzaydaki herhangi bir noktaya bir vektör uygulanabilir. Vektörün yönü, 5 ve 2 birimlik hareketlinin hipotenüsünün eğimine eşittir. Büyüklüğü hipotenüsün uzunluğuna eşittir.

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.

skaler_toplam.png
Skaler Toplama İşlemi

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.

vektor_toplama.png
Vektörel Toplama İşlemi
 

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.

vektor_nokta_carpimi

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.

vektor_hadamard_carpimi

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.

vektor_alan.png

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.

matris_boyutlari.png

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.

matris_skalar.png
Matris Skaler Toplama İşlemi
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.

matris_elementwise.png

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.

matris_hadamard.png

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.

hadamard.png

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:

transpoz.png

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. 1. matristeki sütunların sayısı 2. matrisdeki satırların sayısına eşit olmalıdır
  2. 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.

matriscarpimi.png

matriscarpim2.png

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)

Designed by Freepik

%d blogcu bunu beğendi: