🏷️sec_linear-algebra
Şimdi verileri saklayabileceğinize ve oynama yapabileceğinize göre, bu kitapta yer alan modellerin çoğunu anlamanız ve uygulamanızda gereken temel doğrusal cebir bilgilerini kısaca gözden geçirelim. Aşağıda, doğrusal cebirdeki temel matematiksel nesneleri, aritmetiği ve işlemleri tanıtarak, bunların her birini matematiksel gösterim ve koddaki ilgili uygulama ile ifade ediyoruz.
Doğrusal cebir veya makine öğrenmesi üzerine hiç çalışmadıysanız, matematikle ilgili geçmiş deneyiminiz muhtemelen bir seferde bir sayı düşünmekten ibaretti.
Ayrıca, bir çek defterini dengelediyseniz veya hatta bir restoranda akşam yemeği için ödeme yaptıysanız, bir çift sayıyı toplama ve çarpma gibi temel şeyleri nasıl yapacağınızı zaten biliyorsunuzdur.
Örneğin, Palo Alto'daki sıcaklık
Bu kitapta, skaler değişkenlerin normal küçük harflerle (ör.
(Skaler, sadece bir elemente sahip bir tensör ile temsil edilir.) Sıradaki kod parçasında, iki skalere değer atıyoruz ve onlarla toplama, çarpma, bölme ve üs alma gibi bazı tanıdık aritmetik işlemleri gerçekleştiriyoruz.
from mxnet import np, npx
npx.set_np()
x = np.array(3.0)
y = np.array(2.0)
x + y, x * y, x / y, x ** y
#@tab pytorch
import torch
x = torch.tensor(3.0)
y = torch.tensor(2.0)
x + y, x * y, x / y, x**y
#@tab tensorflow
import tensorflow as tf
x = tf.constant(3.0)
y = tf.constant(2.0)
x + y, x * y, x / y, x**y
[Bir vektörü basitçe skaler değerlerin bir listesi olarak düşünebilirsiniz.]
Bu değerlere vektörün elemanları (giriş değerleri veya bileşenleri) diyoruz.
Vektörlerimiz veri kümemizdeki örnekleri temsil ettiğinde, değerleri gerçek dünyadaki önemini korur.
Örneğin, bir kredinin temerrüde düşme (ödenmeme) riskini tahmin etmek için bir model geliştiriyorsak, her başvuru sahibini, gelirine, istihdam süresine, önceki temerrüt sayısına ve diğer faktörlere karşılık gelen bileşenleri olan bir vektörle ilişkilendirebiliriz.
Hastanedeki hastaların potansiyel olarak yaşayabilecekleri kalp krizi riskini araştırıyor olsaydık, her hastayı bileşenleri en güncel hayati belirtilerini, kolesterol seviyelerini, günlük egzersiz dakikalarını vb. içeren bir vektörle temsil edebilirdik.
Matematiksel gösterimlerde, genellikle vektörleri kalın, küçük harfler (örneğin,
Vektörlerle tek boyutlu tensörler aracılığıyla çalışırız. Genelde tensörler, makinenizin bellek sınırlarına tabi olarak keyfi uzunluklara sahip olabilir.
x = np.arange(4)
x
#@tab pytorch
x = torch.arange(4)
x
#@tab tensorflow
x = tf.range(4)
x
Bir vektörün herhangi bir öğesini bir altindis kullanarak tanımlayabiliriz.
Örneğin,
$$\mathbf{x} =\begin{bmatrix}x_{1} \x_{2} \ \vdots \x_{n}\end{bmatrix},$$
:eqlabel:eq_vec_def
burada
x[3]
#@tab pytorch
x[3]
#@tab tensorflow
x[3]
Bazı kavramları tekrar gözden geçirelim :numref:sec_ndarray
.
Bir vektör sadece bir sayı dizisidir.
Ayrıca her dizinin bir uzunluğu olduğu gibi, her vektör de bir uzunluğa sahiptir.
Matematiksel gösterimde,
Sıradan bir Python dizisinde olduğu gibi, Python'un yerleşik (built-in) len()
işlevini çağırarak [bir tensörün uzunluğuna erişebiliriz.]
len(x)
#@tab pytorch
len(x)
#@tab tensorflow
len(x)
Bir tensör bir vektörü (tam olarak bir ekseni ile) temsil ettiğinde, uzunluğuna .shape
özelliği ile de erişebiliriz.
Şekil, tensörün her ekseni boyunca uzunluğu (boyutsallığı) listeleyen bir gruptur.
(Sadece bir ekseni olan tensörler için, şeklin sadece bir elemanı vardır.)
x.shape
#@tab pytorch
x.shape
#@tab tensorflow
x.shape
"Boyut" kelimesinin bu bağlamlarda aşırı yüklenme eğiliminde olduğunu ve bunun da insanları şaşırtma yöneliminde olduğunu unutmayın. Açıklığa kavuşturmak için, bir vektörün veya ekseninin boyutluluğunu onun uzunluğuna atıfta bulunmak için kullanırız; yani bir vektörün veya eksenin eleman sayısı. Halbuki, bir tensörün boyutluluğunu, bir tensörün sahip olduğu eksen sayısını ifade etmek için kullanırız. Bu anlamda, bir tensörün bazı eksenlerinin boyutluluğu, bu eksenin uzunluğu olacaktır.
Vektörler, skalerleri sıfırdan birinci dereceye kadar genelleştirirken, matrisler de vektörleri birinci dereceden ikinci dereceye genelleştirir.
Genellikle kalın, büyük harflerle (örn.,
Matematiksel gösterimde,
$$\mathbf{A}=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} & a_{m2} & \cdots & a_{mn} \ \end{bmatrix}.$$
:eqlabel:eq_matrix_def
Herhangi bir
Bir tensörü örneği yaratırken, en sevdiğimiz işlevlerden herhangi birini çağırıp
A = np.arange(20).reshape(5, 4)
A
#@tab pytorch
A = torch.arange(20).reshape(5, 4)
A
#@tab tensorflow
A = tf.reshape(tf.range(20), (5, 4))
A
Satır (eq_matrix_def
gibi, basitçe $\mathbf{A}$ matrisinin küçük harfli altindislisi $a{ij}$yi kullanarak $[\mathbf{A}]{ij}$'ye atıfta bulunuruz.
Gösterimi basit tutarken indeksleri ayırmak için virgüller yalnızca gerekli olduğunda eklenir, örneğin $a{2, 3j}$ ve
Bazen eksenleri ters çevirmek isteriz.
Bir matrisin satırlarını ve sütunlarını değiştirdiğimizde çıkan sonuç matrisine devrik (transpose) adı verilir.
Usul olarak, bir eq_matrix_def
'deki
Şimdi kodda bir (matrisin devriğine) erişiyoruz.
A.T
#@tab pytorch
A.T
#@tab tensorflow
tf.transpose(A)
Kare matrisin özel bir türü olarak, [bir simetrik matris B
diye tanımlıyoruz.
B = np.array([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B
#@tab pytorch
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B
#@tab tensorflow
B = tf.constant([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B
Şimdi B
yi kendi devriğiyle karşılaştıralım.
B == B.T
#@tab pytorch
B == B.T
#@tab tensorflow
B == tf.transpose(B)
Matrisler yararlı veri yapılarıdır: Farklı değişim (varyasyon) kiplerine (modalite) sahip verileri düzenlememize izin verirler.
Örneğin, matrisimizdeki satırlar farklı evlere (veri örneklerine) karşılık gelirken, sütunlar farklı özelliklere karşılık gelebilir.
Daha önce elektronik tablo yazılımı kullandıysanız veya şurayı okuduysanız :numref:sec_pandas
, bu size tanıdık gelecektir.
Bu nedenle, tek bir vektörün varsayılan yönü bir sütun vektörü olmasına rağmen, bir tablo veri kümesini temsil eden bir matriste, her veri örneğini matristeki bir satır vektörü olarak ele almak daha gelenekseldir.
Ve sonraki bölümlerde göreceğimiz gibi, bu düzen ortak derin öğrenme tatbikatlarını mümkün kılacaktır.
Örneğin, bir tensörün en dış ekseni boyunca, veri örneklerinin minigruplarına veya minigrup yoksa yalnızca veri örneklerine erişebilir veya bir bir sayabiliriz.
Vektörlerin skalerleri genellemesi ve matrislerin vektörleri genellemesi gibi, daha fazla eksenli veri yapıları oluşturabiliriz.
[Tensörler] (bu alt bölümdeki "tensörler" cebirsel nesnelere atıfta bulunur) (bize rastgele sayıda ekseni olan
Renk kanallarını (kırmızı, yeşil ve mavi) istiflemek için yükseklik, genişlik ve bir kanal eksenine karşılık gelen 3 eksene sahip
X = np.arange(24).reshape(2, 3, 4)
X
#@tab pytorch
X = torch.arange(24).reshape(2, 3, 4)
X
#@tab tensorflow
X = tf.reshape(tf.range(24), (2, 3, 4))
X
Skalerler, vektörler, matrisler ve rasgele sayıda eksenli tensörler (bu alt bölümdeki "tensörler" cebirsel nesnelere atıfta bulunur), çoğu zaman kullanışlı olan bazı güzel özelliklere sahiptir. Örneğin, bir eleman yönlü işlemin tanımından, herhangi bir eleman yönlü tekli işlemin işlenen nesnenin şeklini değiştirmediğini fark etmiş olabilirsiniz. Benzer şekilde, (aynı şekle sahip herhangi bir iki tensör göz önüne alındığında, herhangi bir ikili elemanlı işlemin sonucu, gene aynı şekle sahip bir tensör olacaktır.) Örneğin, aynı şekle sahip iki matris toplama, bu iki matrisin üzerinde eleman yönlü toplama gerçekleştirir.
A = np.arange(20).reshape(5, 4)
B = A.copy() # `A`nın kopyasını yeni bellek tahsis ederek `B`ye atayın
A, A + B
#@tab pytorch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone() # `A`nın kopyasını yeni bellek tahsis ederek `B`ye atayın
A, A + B
#@tab tensorflow
A = tf.reshape(tf.range(20, dtype=tf.float32), (5, 4))
B = A # Yeni bellek tahsis ederek `A`yı `B`ye klonlamak yok
A, A + B
Özellikle, [iki matrisin eleman yönlü çarpımına Hadamard çarpımı] (matematik gösterimi eq_matrix_def
'da tanımlanmıştır) ve
A * B
#@tab pytorch
A * B
#@tab tensorflow
A * B
[Bir tensörün skaler ile çarpılması veya toplanması], işlenen tensörün her elemanını skaler ile toplayacağından veya çarpacağından tensörün şeklini de değiştirmez.
a = 2
X = np.arange(24).reshape(2, 3, 4)
a + X, (a * X).shape
#@tab pytorch
a = 2
X = torch.arange(24).reshape(2, 3, 4)
a + X, (a * X).shape
#@tab tensorflow
a = 2
X = tf.reshape(tf.range(24), (2, 3, 4))
a + X, (a * X).shape
🏷️subseq_lin-alg-reduction
Keyfi tensörlerle gerçekleştirebileceğimiz faydalı işlemlerden biri [elemanlarının toplamını] hesaplamaktır.
Matematiksel gösterimde,
x = np.arange(4)
x, x.sum()
#@tab pytorch
x = torch.arange(4, dtype=torch.float32)
x, x.sum()
#@tab tensorflow
x = tf.range(4, dtype=tf.float32)
x, tf.reduce_sum(x)
[Rasgele şekilli tensörlerin elamanları üzerindeki toplamları] ifade edebiliriz.
Örneğin,
A.shape, A.sum()
#@tab pytorch
A.shape, A.sum()
#@tab tensorflow
A.shape, tf.reduce_sum(A)
Varsayılan olarak, toplamı hesaplama işlevini çağırmak, tüm eksenleri boyunca bir tensörü skalere indirger.
[Toplama yoluyla tensörün indirgendiği eksenleri de belirtebiliriz.]
Örnek olarak matrisleri alın.
Tüm satırların öğelerini toplayarak satır boyutunu (eksen 0) indirgemek için, işlevi çağırırken axis=0
değerini belirtiriz.
Girdi matrisi, çıktı vektörü oluşturmak için eksen 0 boyunca indirgendiğinden, girdinin eksen 0 boyutu, çıktının şeklinde kaybolur.
A_sum_axis0 = A.sum(axis=0)
A_sum_axis0, A_sum_axis0.shape
#@tab pytorch
A_sum_axis0 = A.sum(axis=0)
A_sum_axis0, A_sum_axis0.shape
#@tab tensorflow
A_sum_axis0 = tf.reduce_sum(A, axis=0)
A_sum_axis0, A_sum_axis0.shape
axis=1
olarak belirtmek, tüm sütunların öğelerini toplayarak sütun boyutunu (eksen 1) azaltacaktır.
Böylece, girdinin eksen 1 boyutu, çıktının şeklinde kaybolur.
A_sum_axis1 = A.sum(axis=1)
A_sum_axis1, A_sum_axis1.shape
#@tab pytorch
A_sum_axis1 = A.sum(axis=1)
A_sum_axis1, A_sum_axis1.shape
#@tab tensorflow
A_sum_axis1 = tf.reduce_sum(A, axis=1)
A_sum_axis1, A_sum_axis1.shape
Bir matrisin toplama yoluyla hem satırlar hem de sütunlar boyunca indirgenmesi, matrisin tüm öğelerinin toplanmasıyla eşdeğerdir.
A.sum(axis=[0, 1]) # `A.sum()` ile aynı
#@tab pytorch
A.sum(axis=[0, 1]) # `A.sum()` ile aynı
#@tab tensorflow
tf.reduce_sum(A, axis=[0, 1]) # `tf.reduce_sum(A)` ile aynı
[İlgili bir miktar da ortalamadır.] Ortalamayı, toplamı toplam eleman sayısına bölerek hesaplıyoruz. Kod olarak, keyfi şekildeki tensörlerdeki ortalamanın hesaplanmasında ilgili işlevi çağırabiliriz.
A.mean(), A.sum() / A.size
#@tab pytorch
A.mean(), A.sum() / A.numel()
#@tab tensorflow
tf.reduce_mean(A), tf.reduce_sum(A) / tf.size(A).numpy()
Benzer şekilde, ortalama hesaplama fonksiyonu, belirtilen eksenler boyunca bir tensörü de indirgeyebilir.
A.mean(axis=0), A.sum(axis=0) / A.shape[0]
#@tab pytorch
A.mean(axis=0), A.sum(axis=0) / A.shape[0]
#@tab tensorflow
tf.reduce_mean(A, axis=0), tf.reduce_sum(A, axis=0) / A.shape[0]
🏷️subseq_lin-alg-non-reduction
Gene de, bazen toplamı veya ortalamayı hesaplamak için işlevi çağırırken [eksen sayısını değiştirmeden] tutmak yararlı olabilir.
sum_A = A.sum(axis=1, keepdims=True)
sum_A
#@tab pytorch
sum_A = A.sum(axis=1, keepdims=True)
sum_A
#@tab tensorflow
sum_A = tf.reduce_sum(A, axis=1, keepdims=True)
sum_A
Örneğin, sum_A
her satırı topladıktan sonra hala iki eksenini koruduğundan,(A
'yı yayınlayarak sum_A
ile bölebiliriz.)
A / sum_A
#@tab pytorch
A / sum_A
#@tab tensorflow
A / sum_A
[Bir eksen boyunca A
'nın öğelerinin biriktirilmiş (kümülatif) toplamını hesaplamak] istiyorsak, axis=0
diyelim (satır satır), cumsum
işlevini çağırabiliriz. Bu işlev girdi tensörünü herhangi bir eksen boyunca indirgemez.
A.cumsum(axis=0)
#@tab pytorch
A.cumsum(axis=0)
#@tab tensorflow
tf.cumsum(A, axis=0)
Şimdiye kadar sadece eleman yönlü işlemler, toplamalar ve ortalamalar gerçekleştirdik. Ayrıca tüm yapabileceğimiz bu olsaydı, doğrusal cebir muhtemelen kendi bölümünü hak etmeyecekti. Bununla birlikte, en temel işlemlerden biri iç çarpımdır. İki vektör
[İki vektörün nokta çarpımı, aynı konumdaki elemanların çarpımlarının toplamıdır.]
y = np.ones(4)
x, y, np.dot(x, y)
#@tab pytorch
y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)
#@tab tensorflow
y = tf.ones(4, dtype=tf.float32)
x, y, tf.tensordot(x, y, axes=1)
(İki vektörün nokta çarpımlarını, eleman yönlü bir çarpma ve ardından bir toplam gerçekleştirerek eşit şekilde ifade edebileceğimizi) unutmayın:
np.sum(x * y)
#@tab pytorch
torch.sum(x * y)
#@tab tensorflow
tf.reduce_sum(x * y)
Nokta çarpımları çok çeşitli bağlamlarda kullanışlıdır.
Örneğin,
Artık nokta çarpımlarını nasıl hesaplayacağımızı bildiğimize göre, matris-vektör çarpımları anlamaya başlayabiliriz.
eq_matrix_def
ve :eqref:eq_vec_def
'de görselleştirdik.
burada her
:begin_tab:mxnet
Matris-vektör çarpımlarını tensörlerle kodda ifade ederken, nokta çarpımlarındaki aynı dot
işlevini kullanırız.
A
matrisi ve x
vektörü ile np.dot(A, x)
dediğimizde matris-vektör çarpımı gerçekleştirilir.
A
sütun boyutunun (eksen 1 boyunca uzunluğu) x
boyutuyla (uzunluğu) aynı olması gerektiğini unutmayın.
:end_tab:
:begin_tab:pytorch
Matris-vektör çarpımlarını tensörlerle kodda ifade ederken, mv
işlevini kullanırız.
A
matrisi ve x
vektörü ile torch.mv(A, x)
dediğimizde matris-vektör çarpımı gerçekleştirilir.
A
sütun boyutunun (eksen 1 boyunca uzunluğu) x
boyutuyla (uzunluğu) aynı olması gerektiğini unutmayın.
:end_tab:
:begin_tab:tensorflow
Matris-vektör çarpımlarını tensörlerle kodda ifade ederken, matvec
işlevini kullanırız.
A
matrisi ve x
vektörü ile tf.linalg.matvec(A, x)
dediğimizde matris-vektör çarpımı gerçekleştirilir.
A
sütun boyutunun (eksen 1 boyunca uzunluğu) x
boyutuyla (uzunluğu) aynı olması gerektiğini unutmayın.
:end_tab:
A.shape, x.shape, np.dot(A, x)
#@tab pytorch
A.shape, x.shape, torch.mv(A, x)
#@tab tensorflow
A.shape, x.shape, tf.linalg.matvec(A, x)
Eğer nokta ve matris-vektör çarpımlarını anladıysanız, matris-matris çarpımı açık olmalıdır.
$$\mathbf{A}= \begin{bmatrix} \mathbf{a}^\top_{1} \ \mathbf{a}^\top_{2} \ \vdots \ \mathbf{a}^\top_n \ \end{bmatrix}, \quad \mathbf{B}=\begin{bmatrix} \mathbf{b}{1} & \mathbf{b}{2} & \cdots & \mathbf{b}_{m} \ \end{bmatrix}. $$
Daha sonra,
$$\mathbf{C} = \mathbf{AB} = \begin{bmatrix} \mathbf{a}^\top_{1} \ \mathbf{a}^\top_{2} \ \vdots \ \mathbf{a}^\top_n \ \end{bmatrix} \begin{bmatrix} \mathbf{b}{1} & \mathbf{b}{2} & \cdots & \mathbf{b}{m} \ \end{bmatrix} = \begin{bmatrix} \mathbf{a}^\top{1} \mathbf{b}1 & \mathbf{a}^\top{1}\mathbf{b}2& \cdots & \mathbf{a}^\top{1} \mathbf{b}m \ \mathbf{a}^\top{2}\mathbf{b}1 & \mathbf{a}^\top{2} \mathbf{b}2 & \cdots & \mathbf{a}^\top{2} \mathbf{b}m \ \vdots & \vdots & \ddots &\vdots\ \mathbf{a}^\top{n} \mathbf{b}1 & \mathbf{a}^\top{n}\mathbf{b}2& \cdots& \mathbf{a}^\top{n} \mathbf{b}_m \end{bmatrix}. $$
[Matris-matris çarpımı A
ve B
üzerinde matris çarpımı yapıyoruz.
Burada A
, 5 satır ve 4 sütunlu bir matristir ve B
4 satır ve 3 sütunlu bir matristir.
Çarpma işleminden sonra 5 satır ve 3 sütun içeren bir matris elde ederiz.
B = np.ones(shape=(4, 3))
np.dot(A, B)
#@tab pytorch
B = torch.ones(4, 3)
torch.mm(A, B)
#@tab tensorflow
B = tf.ones((4, 3), tf.float32)
tf.matmul(A, B)
Matris-matris çarpımı basitçe matris çarpımı olarak adlandırılabilir ve Hadamard çarpımı ile karıştırılmamalıdır.
🏷️subsec_lin-algebra-norms
Doğrusal cebirde en kullanışlı operatörlerden bazıları normlardır. Gayri resmi olarak, bir vektörün normu bize bir vektörün ne kadar büyük olduğunu söyler. Burada ele alınan ebat kavramı boyutsallık değil, bileşenlerin büyüklüğü ile ilgilidir.
Doğrusal cebirde, bir vektör normu, bir vektörü bir skalere eşleştiren ve bir avuç dolusu özelliği karşılayan bir
İkinci özellik, tanıdık üçgen eşitsizliğidir:
Üçüncü özellik, normun negatif olmaması gerektiğini söyler:
Çoğu bağlamda herhangi bir şey için en küçük ebat 0 olduğu için bu mantıklıdır. Nihai özellik, en küçük normun sadece ve sadece tüm sıfırlardan oluşan bir vektör tarafından elde edilmesini gerektirir.
Normların mesafe ölçülerine çok benzediğini fark edebilirsiniz.
Ayrıca eğer ilkokuldan Öklid mesafesini hatırlarsanız (Pisagor teoremini düşünün), o zaman negatif olmama ve üçgen eşitsizlik kavramları zihininizde bir zil çalabilir.
Aslında Öklid mesafesi bir normdur: Özellikle
($$|\mathbf{x}|2 = \sqrt{\sum{i=1}^n x_i^2},$$)
burada
u = np.array([3, -4])
np.linalg.norm(u)
#@tab pytorch
u = torch.tensor([3.0, -4.0])
torch.norm(u)
#@tab tensorflow
u = tf.constant([3.0, -4.0])
tf.norm(u)
Derin öğrenmede, kare
($$|\mathbf{x}|1 = \sum{i=1}^n \left|x_i \right|.$$)
np.abs(u).sum()
#@tab pytorch
torch.abs(u).sum()
#@tab tensorflow
tf.reduce_sum(tf.abs(u))
Hem
$$|\mathbf{x}|p = \left(\sum{i=1}^n \left|x_i \right|^p \right)^{1/p}.$$
[$$|\mathbf{X}|F = \sqrt{\sum{i=1}^m \sum_{j=1}^n x_{ij}^2}.$$]
Frobenius normu, vektör normlarının tüm özelliklerini karşılar.
Matris şeklindeki bir vektörün bir
np.linalg.norm(np.ones((4, 9)))
#@tab pytorch
torch.norm(torch.ones((4, 9)))
#@tab tensorflow
tf.norm(tf.ones((4, 9)))
🏷️subsec_norms_and_objectives
Kendimizi aşmak istemesek de, şimdiden bu kavramların neden faydalı olduğuna dair bazı sezgiler ekleyebiliriz. Derin öğrenmede, genellikle optimizasyon (eniyileme) sorunlarını çözmeye çalışıyoruz: Gözlenen verilere atanan olasılığı en üst düzeye çıkar; tahminler ve gerçek-doğru gözlemler arasındaki mesafeyi en aza indir. Benzer öğeler arasındaki mesafe en aza indirilecek ve benzer olmayan öğeler arasındaki mesafe en üst düzeye çıkarılacak şekilde öğelere (kelimeler, ürünler veya haber makaleleri gibi) vektör ifadeleri ata. Çoğu zaman, amaç fonksiyonları, ki belki de derin öğrenme algoritmalarının (verilerin yanı sıra) en önemli bileşenleridir, normlar cinsinden ifade edilir.
Sadece bu bölümde, modern derin öğrenmenin dikkate değer bir bölümünü anlamak için ihtiyaç duyacağınız tüm doğrusal cebiri öğrettik. Doğrusal cebirde çok daha fazlası vardır ve daha fazla matematik makine öğrenmesi için yararlıdır. Örneğin, matrisler faktörlere ayrılabilir ve bu ayrışmalar gerçek dünya veri kümelerinde düşük boyutlu yapıları ortaya çıkarabilir. Veri kümelerindeki yapıyı keşfetmek ve tahmin problemlerini çözmek için matris ayrıştırmalarına ve onların yüksek dereceli tensörlere genellemelerini kullanmaya odaklanan koca makine öğrenmesi alt alanları vardır. Ancak bu kitap derin öğrenmeye odaklanmaktadır. Gerçek veri kümelerinde faydalı makine öğrenmesi modelleri uygulayarak ellerinizi kirlettikten sonra daha fazla matematik öğrenmeye çok daha meyilli olacağınıza inanıyoruz. Bu nedenle, daha sonra daha fazla matematik tanıtma hakkımızı saklı tutarken, bu bölümü burada toparlayacağız.
Doğrusal cebir hakkında daha fazla bilgi edinmek istiyorsanız, şunlardan birine başvurabilirsiniz: Doğrusal cebir işlemleri üzerine çevrimiçi ek veya diğer mükemmel kaynaklar :cite:Strang.1993,Kolter.2008,Petersen.Pedersen.ea.2008
.
- Skalerler, vektörler, matrisler ve tensörler doğrusal cebirdeki temel matematiksel nesnelerdir.
- Vektörler skaleri genelleştirir ve matrisler vektörleri genelleştirir.
- Skalerler, vektörler, matrisler ve tensörler sırasıyla sıfır, bir, iki ve rastgele sayıda eksene sahiptir.
- Bir tensör, belirtilen eksenler boyunca
toplam
veortalama
ile indirgenebilir. - İki matrisin elementsel olarak çarpılmasına Hadamard çarpımı denir. Matris çarpımından farklıdır.
- Derin öğrenmede, genellikle
$L_1$ normu,$L_2$ normu ve Frobenius normu gibi normlarla çalışırız. - Skalerler, vektörler, matrisler ve tensörler üzerinde çeşitli işlemler gerçekleştirebiliriz.
-
$\mathbf{A}$ 'nın devrik bir matrisinin devrik işleminin$\mathbf{A}$ :$(\mathbf{A}^\top)^\top = \mathbf{A}$ olduğunu kanıtlayın. -
$\mathbf{A}$ ve$\mathbf{B}$ matrisleri verildiğinde, devriklerin toplamının bir toplamın devriğine eşit olduğunu gösterin:$\mathbf{A}^\top + \mathbf{B}^\top = (\mathbf{A} + \mathbf{B})^\top$ . - Herhangi bir kare matris
$\mathbf{A}$ verildiğinde,$\mathbf{A} + \mathbf{A}^\top$ her zaman simetrik midir? Neden? - Bu bölümde (2, 3, 4) şeklinde
X
tensörünü tanımladık.len(X)
çıktısı nedir? - Rasgele şekilli bir tensör
X
için,len(X)
her zaman belirli birX
ekseninin uzunluğuna karşılık gelir mi? Bu eksen nedir? -
A / A.sum (axis=1)
komutunu çalıştırın ve ne olduğunu görün. Sebebini analiz edebilir misiniz? - Manhattan'da iki nokta arasında seyahat ederken, koordinatlar açısından, yani cadde ve sokak cinsinden, kat etmeniz gereken mesafe nedir? Çaprazlama seyahat edebilir misiniz?
- (2, 3, 4) şekilli bir tensörü düşünün. 0, 1 ve 2 ekseni boyunca toplam çıktılarının şekilleri nelerdir?
- 3 veya daha fazla eksenli bir tensörü
linalg.norm
fonksiyonuna besleyin ve çıktısını gözlemleyin. Bu işlev keyfi şekilli tansörler için ne hesaplar?
:begin_tab:mxnet
Tartışmalar
:end_tab:
:begin_tab:pytorch
Tartışmalar
:end_tab:
:begin_tab:tensorflow
Tartışmalar
:end_tab: