Aljabar linear adalah pondasi yang paling dasar dalam statistik maupun machine learning.
Aljabar linear adalah cabang matematika yang mempelajari vektor, matriks, ruang vektor, transformasi linear, dan sistem persamaan linear. Aljabar linear menyediakan alat dan konsep yang penting untuk memodelkan dan menyelesaikan masalah dalam berbagai bidang, termasuk fisika, ilmu komputer, statistik, dan machine learning.
Beberapa konsep dasar dalam aljabar linear meliputi:
Vektor. Objek matematika yang memiliki magnitude (besar) dan arah.
Matriks. Susunan bilangan dalam bentuk baris dan kolom.
Operasi Matriks. Penjumlahan, perkalian, invers, dan transpose.
Ruang Vektor: Kumpulan vektor yang memenuhi aturan tertentu.
Transformasi Linear. Fungsi yang memetakan vektor dari satu ruang vektor ke ruang vektor lain.
Nilai Eigen dan Vektor Eigen. Konsep yang berkaitan dengan skalar dan vektor yang mempertahankan arahnya setelah transformasi linear.
Aljabar linear adalah fondasi utama dalam machine learning karena sebagian besar algoritma dan model machine learning bekerja dengan data yang direpresentasikan dalam bentuk vektor dan matriks. Berikut adalah beberapa fungsi aljabar linear dalam machine learning:
Aljabar linear digunakan untuk melakukan transformasi data, seperti scaling, rotasi, atau proyeksi.
Contoh: Principal Component Analysis (PCA) menggunakan aljabar linear untuk mengurangi dimensi data dengan memproyeksikannya ke ruang berdimensi lebih rendah.
Model machine learning seperti regresi linear, support vector machines (SVM), dan neural networks menggunakan operasi aljabar linear untuk menghitung prediksi.
Contoh: Dalam neural networks, setiap lapisan (layer) melakukan operasi linear diikuti oleh fungsi aktivasi non-linear.
Aljabar linear digunakan untuk menghitung jarak antara vektor, seperti jarak Euclidean atau cosine similarity, yang penting dalam algoritma clustering dan klasifikasi.
Contoh: Dalam k-means clustering, jarak antara titik data dan centroid dihitung menggunakan operasi vektor.
Vektor Vektor adalah objek dalam ruang vektor yang memiliki magnitude (panjang) dan arah. Mereka dapat diwakili sebagai kumpulan bilangan yang memiliki aturan penjumlahan dan perkalian dengan skalar. Vektor bisa dalam ruang 2D (seperti bidang) atau ruang 3D (seperti ruang tiga dimensi), tetapi konsep vektor tidak terbatas pada dimensi itu saja.
Ruang Vektor Ruang vektor adalah himpunan vektor yang memenuhi aksioma-aksioma aljabar linear. Ruang tersebut dapat memiliki dimensi yang berbeda-beda. Misalnya, ruang vektor 2D terdiri dari semua vektor yang dapat diwakili oleh dua bilangan, dan ruang vektor 3D terdiri dari semua vektor yang dapat diwakili oleh tiga bilangan.
Transformasi Linear Transformasi linear adalah fungsi matematika antara dua ruang vektor yang memelihara sifat-sifat aljabar linear. Transformasi ini memetakan vektor dari satu ruang ke ruang vektor lainnya, mempertahankan operasi penjumlahan vektor dan perkalian dengan skalar.
Matriks Matriks adalah representasi aljabar linear yang terdiri dari baris dan kolom bilangan. Matriks dapat digunakan untuk merepresentasikan transformasi linear dan sistem persamaan linear. Operasi pada matriks termasuk penjumlahan, perkalian, dan invers matriks.
Tensor Tensor adalah objek matematika yang umumnya memperluas konsep vektor dan matriks ke dimensi yang lebih tinggi. Mereka digunakan untuk merepresentasikan dan memanipulasi data yang memiliki struktur multidimensi. Tensor dapat memiliki berbagai orde, seperti tensor skalar (orde 0), vektor (orde 1), matriks (orde 2), dan tensor berorde tinggi lainnya.
Vektor adalah salah satu struktur data dasar dalam aljabar linear. Secara matematis, vektor adalah objek yang memiliki magnitude (panjang) dan arah. Vektor dapat direpresentasikan sebagai array atau daftar bilangan yang terurut, di mana setiap bilangan mewakili komponen vektor dalam suatu dimensi.
Contoh berikut implementasi vector dalam numpy. NumPy adalah library Python untuk komputasi numerik. NumPy menyediakan objek ndarray (n-dimensional array) yang dapat digunakan untuk merepresentasikan vektor, matriks, dan tensor.
SciPy adalah library yang dibangun di atas NumPy dan menyediakan fungsi-fungsi tambahan untuk komputasi ilmiah, termasuk operasi aljabar linear.
from scipy.linalg import norm# Membuat vektorv = np.array([1, 2, 3]) # Menggunakan NumPy untuk membuat vektor# Menghitung normnorm_v = norm(v)print("Norm v:", norm_v)
PyTorch adalah library machine learning yang menyediakan dukungan kuat untuk operasi aljabar linear, termasuk operasi pada vektor. Berikut adalah contoh implementasi vektor dan operasinya menggunakan PyTorch:
Tensor adalah objek matematika yang digunakan untuk merepresentasikan hubungan multilinear antara himpunan vektor, skalar, dan objek-objek multilinear lainnya dalam ruang vektor. Tensor memiliki berbagai orde, misalnya, tensor orde pertama adalah vektor, tensor orde kedua adalah matriks, dan tensor orde tinggi memiliki struktur yang lebih kompleks.
PyTorch adalah library python yang digunakan untuk machine learning dan deep learning, dimana PyTorch menggunakan tensor sebagai dasar struktur data.
Apa itu tensor? Tensor adalah struktur data yang mirip dengan array multidimensi (seperti array NumPy), namun tensor di PyTorch memiliki beberapa keunggulan tambahan, terutama dalam konteks komputasi numerik untuk machine learning dan deep learning. Tensor di PyTorch memungkinkan operasi yang efisien, baik di CPU maupun GPU (dengan dukungan CUDA), yang sangat penting untuk komputasi besar yang dibutuhkan dalam training model deep learning.
Tensor orde tinggi memiliki struktur yang lebih kompleks dengan lebih dari dua set indeks. Misalnya, tensor orde tiga dapat direpresentasikan sebagai kubus bilangan:
Ini adalah representasi matematika dari tensor 3D yang memiliki 2 blok, setiap blok berisi matriks berukuran 3×4.
Tensor orde tiga adalah tensor yang memiliki tiga dimensi. Biasanya, tensor orde tiga bisa dilihat sebagai kumpulan matriks 2D, dan dalam kasus ini, kita memiliki dua matriks 3x4 yang membentuk tensor 3D.
Mari kita uraikan representasi matematika tensor 3D yang tersebut:
Tensor ini hanya memiliki dua lapisan, yaitu lapisan pertama di dan lapisan kedua di . Masing-masing lapisan berukuran , yang berarti ada 12 elemen per lapisan.
Tensor 3D
Memastikan hanya ada 2 lapisan sesuai dengan tensor yang diberikan, yaitu yang terdiri dari 2 blok matriks .
Indeks
Variabel diatur dengan dua nilai, yaitu 0 dan 1, yang mewakili dua lapisan/slice, satu di dan satu lagi di .
Grid
x dan y mengatur grid koordinat dalam 2D untuk kolom dan baris.
z berfungsi sebagai kedalaman dan hanya berisi 2 lapisan.
Plot 3D:
Plot akan menunjukkan dua lapisan di ruang 3D, dengan elemen-elemen yang diberi anotasi sesuai dengan nilai tensor.
Plot akan menunjukkan 2 lapisan, yang hanya berisi 12 elemen per lapisan.
Tensor seperti ini sering digunakan dalam berbagai aplikasi, seperti:
Citra berwarna (RGB): Setiap lapisan bisa merepresentasikan saluran warna yang berbeda (misalnya, merah, hijau, dan biru), dengan baris dan kolom mewakili dimensi spasial citra.
Video: Di mana setiap lapisan mewakili frame yang berbeda dari video, dan setiap frame berisi piksel yang disusun dalam baris dan kolom.
Di PyTorch, tensor 3D sering digunakan dalam deep learning untuk merepresentasikan data dengan lebih dari dua dimensi (misalnya, citra atau video). Untuk membentuk tensor 3D seperti di atas, Anda dapat menggunakan kode berikut di PyTorch:
python
import torch# Membuat tensor 3D dengan bentuk (2, 3, 4)tensor_3d = torch.tensor([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])# Menampilkan tensor 3Dprint(tensor_3d)
Di PyTorch, vektor adalah tensor orde 1 yang hanya memiliki satu dimensi. Vektor ini dapat berisi berbagai jenis data seperti bilangan bulat, floating point, atau nilai lainnya. Kita juga dapat melakukan beberapa operasi pada vektor, termasuk transposisi dan membuat vektor nol.
Vektor adalah tensor yang memiliki satu dimensi. Secara matematis, vektor adalah himpunan nilai yang terorganisir dalam urutan tertentu, tetapi hanya memiliki satu dimensi.
Transposisi pada vektor orde 1 pada dasarnya tidak mengubah vektor itu sendiri karena tidak ada dimensi kedua atau lebih. Namun, kita dapat melakukan perubahan bentuk atau struktur vektor, misalnya mengubahnya menjadi vektor kolom (tensor 2D) dengan dimensi (n, 1) atau sebaliknya.
Misalnya, kita bisa menganggap bahwa transposisi pada vektor satu dimensi ini adalah mengubah bentuknya menjadi bentuk vektor kolom atau vektor baris.
Mengubah vektor menjadi vektor kolom (dimensi (n, 1)):
python
# Mengubah vektor menjadi vektor kolom (tensor orde 2)vektor_kolom = vektor.unsqueeze(1)print("Vektor Kolom:\n", vektor_kolom)
Output:
Vektor Kolom: tensor([[1], [2], [3], [4], [5]])
Pada contoh ini, unsqueeze(1) menambahkan dimensi kedua pada tensor, mengubah vektor satu dimensi menjadi vektor kolom dengan dimensi (5, 1).
Vektor nol adalah vektor yang berisi semua elemen bernilai nol. Vektor nol sering digunakan dalam berbagai operasi matematika atau algoritma, seperti dalam inisialisasi bobot pada neural network.
Untuk membuat vektor nol di PyTorch, kita dapat menggunakan fungsi torch.zeros().
Pada contoh ini, kita membuat vektor nol dengan 5 elemen yang semuanya bernilai nol. torch.zeros(5) menghasilkan tensor dengan 5 elemen yang semuanya adalah nol, dan tensor ini memiliki dimensi (5,).
Setelah memahami bagaimana membuat vektor, transposisi vektor, dan vektor nol, kita dapat melakukan berbagai operasi pada vektor, seperti penjumlahan, perkalian, dan operasi aritmatika lainnya. Berikut beberapa contoh operasi sederhana:
norm, juga dikenal sebagai Euclidean norm atau norm Euclidean, adalah salah satu jenis norm dalam ruang vektor yang mengukur "panjang" atau "jarak" dari sebuah vektor dalam ruang tersebut. Dalam matematika, norm dari suatu vektor dalam ruang vektor dinyatakan sebagai berikut:
Di sini, adalah komponen-komponen vektor dalam ruang vektor -dimensi, dan menunjukkan norm .
Beberapa poin penting tentang norm :
Sifat Euclidean. norm dihitung dengan mengambil akar kuadrat dari jumlah kuadrat dari komponen vektor.
Representasi Geometris. Dalam ruang dua dimensi (), norm dari vektor adalah panjang garis lurus dari titik awal ke titik akhir yang diwakili oleh vektor tersebut di dalam ruang Euclidean.
Kasus Khusus di Bidang Machine Learning. norm sering digunakan dalam konteks pembelajaran mesin sebagai fungsi objektif atau fungsi kehilangan (loss function), terutama dalam regularisasi seperti ridge regression, di mana tujuannya adalah untuk meminimalkan norm dari parameter.
Norm memiliki banyak aplikasi dalam matematika, fisika, dan ilmu komputer, terutama dalam pengolahan sinyal, pembelajaran mesin, optimisasi, dan bidang-bidang lain yang melibatkan perhitungan jarak atau kehilangan dalam ruang vektor.
Norma , juga dikenal sebagai norma Manhattan atau norma taxicab, adalah salah satu jenis norma dalam matematika yang mengukur jarak antara dua titik dalam ruang vektor berdasarkan jumlah nilai absolut perbedaan dari komponen-komponen vektor tersebut.
Untuk suatu vektor dalam ruang vektor , norma didefinisikan sebagai:
Di sini, adalah komponen-komponen vektor , dan menunjukkan norma .
Beberapa poin penting tentang norma :
Sifat Manhattan. Norma dihitung dengan menjumlahkan nilai absolut dari perbedaan antara komponen-komponen vektor.
Representasi Geometris. Dalam ruang dua dimensi (), norma dari vektor adalah jarak yang ditempuh jika hanya diizinkan berjalan sepanjang garis horizontal dan vertikal (seperti jalan dalam kota).
Kasus Khusus di Bidang Machine Learning. Norma sering digunakan dalam konteks regularisasi, terutama dalam LASSO (Least Absolute Shrinkage and Selection Operator), di mana tujuannya adalah untuk meminimalkan nilai dari norma dari parameter.
Norma memiliki berbagai aplikasi dalam matematika, rekayasa, optimisasi, dan bidang-bidang lain yang melibatkan perhitungan jarak atau regularisasi dalam ruang vektor.
Max Norm atau Norm Maksimum adalah salah satu jenis norma vektor yang digunakan untuk mengukur "ukuran" atau "panjang" vektor berdasarkan elemen terbesar dari vektor tersebut. Dalam konteks ini, Max Norm didefinisikan sebagai nilai absolut dari elemen terbesar dalam vektor.
Secara matematis, jika kita memiliki vektor , maka Max Norm atau Norma Maksimum dari vektor tersebut adalah:
Di sini, kita mengambil nilai terbesar dari semua nilai absolut elemen dalam vektor. Max Norm ini dikenal juga dengan nama Infinity Norm atau L∞ Norm.
Max Norm sering digunakan dalam konteks pembelajaran mesin, misalnya dalam regularisasi untuk mencegah overfitting dengan membatasi nilai terbesar yang dapat dimiliki oleh elemen-elemen dari vektor, seperti bobot (weights) dalam neural network.
torch.abs(vektor): Fungsi ini mengembalikan tensor baru yang berisi nilai absolut dari setiap elemen vektor.
Misalnya, dari vektor [3, -4, 5, -2] menjadi [3, 4, 5, 2].
torch.max(): Fungsi ini digunakan untuk mendapatkan nilai maksimum dari tensor. Di sini, kita menggunakan torch.max(torch.abs(vektor)) untuk mendapatkan nilai terbesar dari nilai absolut elemen vektor.
Misalnya, dari vektor [3, 4, 5, 2], nilai terbesar adalah 5.
Dengan demikian, Max Norm dari vektor [3, -4, 5, -2] adalah 5, yang merupakan nilai terbesar dalam nilai absolut elemen-elemen vektor tersebut.
Matriks adalah struktur data yang terdiri dari elemen-elemen yang terorganisir dalam bentuk baris dan kolom. Sebuah matriks disebut tensor orde 2 karena memiliki dua dimensi: satu untuk baris dan satu lagi untuk kolom. Dalam konteks pembelajaran mesin atau komputasi numerik, matriks sering digunakan untuk merepresentasikan data seperti gambar, teks, atau fitur dari dataset.
Secara matematis, sebuah matriks dengan ukuran (m baris dan n kolom) dapat ditulis sebagai:
Dalam PyTorch, matriks dapat direpresentasikan sebagai tensor orde 2.
Ada beberapa operasi dasar yang dapat dilakukan pada matriks:
Penjumlahan Matriks: Penjumlahan dua matriks yang ukurannya sama dilakukan dengan menjumlahkan elemen-elemen yang bersesuaian.
Jika dan adalah dua matriks dengan ukuran yang sama, maka hasil penjumlahan .
Perkalian Matriks: Matriks dapat dikalikan dengan matriks jika jumlah kolom pada sama dengan jumlah baris pada .
Hasil dari perkalian dua matriks dan , yang diwakili oleh , adalah matriks baru dengan dimensi baris dari dan kolom dari .
Transpose Matriks: Transposisi dari matriks diperoleh dengan menukar baris dan kolomnya.
adalah matriks yang diperoleh dengan transposisi matriks .
Invers Matriks: Matriks memiliki invers, yang ditulis sebagai , jika dan hanya jika matriks tersebut adalah matriks persegi dan tidak singular (determinannya tidak nol). Matriks invers digunakan untuk menyelesaikan sistem persamaan linear.
Perkalian Skalar Matriks: Matriks dapat dikalikan dengan skalar (angka), yang berarti setiap elemen matriks dikalikan dengan angka tersebut.
Tensor ordo tinggi, seperti rank 4 tensor, adalah tensor dengan empat dimensi. Dalam konteks pembelajaran mesin dan pengolahan gambar, tensor dengan ordo tinggi sering digunakan untuk merepresentasikan data gambar.
Sebagai contoh, pada dataset gambar seperti MNIST atau CIFAR-10, gambar-gambar tersebut biasanya disimpan dalam tensor dengan rank 4 yang menyimpan beberapa informasi penting dalam empat dimensi tersebut.
Dimensi pertama dalam tensor atau rank 4 adalah jumlah gambar yang ada dalam satu batch.
Misalnya, dalam satu batch pelatihan, kita memiliki 32 gambar, sehingga dimensi pertama adalah 32.
Tinggi Gambar (Height of Image):
Dimensi kedua menunjukkan tinggi gambar dalam piksel.
Misalnya, pada dataset MNIST yang terdiri dari gambar digit berukuran 28x28 piksel, dimensi kedua adalah 28.
Lebar Gambar (Width of Image):
Dimensi ketiga menunjukkan lebar gambar dalam piksel.
Misalnya, untuk gambar MNIST yang memiliki ukuran 28x28 piksel, dimensi ketiga juga adalah 28.
Jumlah Saluran Warna (Number of Color Channels):
Dimensi keempat menunjukkan jumlah saluran warna (channels) pada gambar.
Gambar berwarna penuh biasanya memiliki 3 saluran warna (RGB: Merah, Hijau, Biru), sedangkan gambar hitam-putih memiliki 1 saluran warna.
Sebagai contoh, untuk gambar warna RGB, dimensi keempat adalah 3.
Contoh Tensor Ordo Tinggi pada Gambar RGB (Batch of Images)
Misalkan kita memiliki sebuah batch gambar dengan ukuran 32 gambar, di mana masing-masing gambar berukuran 28x28 piksel dan memiliki 3 saluran warna (RGB). Maka tensor yang merepresentasikan batch ini akan memiliki dimensi $ (32, 28, 28, 3) $, yang dapat dijelaskan sebagai:
32: Jumlah gambar dalam batch.
28: Tinggi gambar dalam piksel.
28: Lebar gambar dalam piksel.
3: Jumlah saluran warna (RGB).
Representasi Matematis Tensor Rank 4
Di sini, T merepresentasikan tensor yang berisi nilai untuk tiap piksel dan saluran warna pada setiap gambar dalam batch.
Contoh Penggunaan Tensor Ordo Tinggi dalam PyTorch
Pada PyTorch, tensor dengan rank 4 ini sering digunakan untuk merepresentasikan gambar dalam deep learning. Berikut adalah contoh pembuatan tensor rank 4 untuk dataset gambar.
python
import torch# Misalkan kita memiliki 32 gambar, masing-masing berukuran 28x28 piksel, dengan 3 saluran warna (RGB)batch_size = 32height = 28width = 28channels = 3# Membuat tensor dengan dimensi (32, 28, 28, 3) yang berisi angka acakimages_tensor = torch.randn(batch_size, height, width, channels)# Menampilkan dimensi tensorprint("Dimensi tensor batch gambar: ", images_tensor.shape)
torch.randn(batch_size, height, width, channels) membuat tensor dengan dimensi yang sesuai dengan batch gambar. Nilai dalam tensor ini diisi dengan angka acak yang terdistribusi normal (Gaussian).
Tensor ini memiliki dimensi (32, 28, 28, 3), yang berarti 32 gambar, masing-masing berukuran 28x28 piksel, dengan 3 saluran warna (RGB).
Tensor ordo 4 sangat penting dalam pemrosesan gambar karena banyaknya gambar yang digunakan dalam satu batch, serta banyaknya dimensi yang diperlukan untuk mewakili informasi spasial (tinggi dan lebar gambar) dan warna (saluran RGB).
Dengan tensor ordo tinggi ini, kita dapat melakukan operasi seperti pelatihan jaringan saraf, konvolusi, dan berbagai transformasi lainnya dalam deep learning, terutama dalam bidang pengolahan citra.
Tensor Transposition adalah operasi yang mengubah urutan dimensi suatu tensor. Pada tensor dengan lebih dari satu dimensi, transposisi dapat mengubah susunan dimensi tersebut, sama seperti transposisi matriks yang mengubah baris menjadi kolom dan kolom menjadi baris.
Dalam hal tensor dengan lebih dari dua dimensi, transposisi dapat dilakukan dengan memilih dimensi mana yang akan dipertukarkan. Hal ini bisa sangat berguna dalam berbagai konteks, seperti manipulasi data dalam deep learning atau ketika kita ingin memanipulasi data tensor dengan cara yang lebih fleksibel.
Pada tensor ordo 2 (matriks), transposisi berfungsi dengan cara yang sama seperti yang kita ketahui dalam aljabar linier: mengubah baris menjadi kolom dan kolom menjadi baris.
Jika kita memiliki matriks dengan ukuran , maka transposisinya akan memiliki ukuran .
Untuk tensor dengan lebih dari dua dimensi, kita bisa melakukan transposisi dengan memilih dua dimensi untuk dipertukarkan. Misalnya, pada tensor ordo 3, transposisi dapat dilakukan dengan menukar dua dimensi dari tensor tersebut.
Sebagai contoh, jika kita memiliki tensor ordo 3 yang memiliki dimensi $ (d_1, d_2, d_3) $, kita dapat mentranspose dimensi dengan atau dimensi dengan , dan sebagainya.
Pada PyTorch, operasi transposisi dapat dilakukan dengan fungsi torch.transpose() atau tensor.T untuk matriks (tensor ordo 2). Untuk tensor ordo lebih tinggi, kita dapat menggunakan torch.permute() untuk memilih dimensi yang akan dipertukarkan.
Pada contoh di atas, kita menggunakan tensor_2d.T untuk melakukan transposisi pada tensor ordo 2 (matriks). Fungsi T adalah cara yang sederhana untuk mentranspose tensor ordo 2.
Pada tensor ordo 3, kita bisa menggunakan torch.permute() untuk mengubah urutan dimensi tensor. Misalnya, jika kita memiliki tensor dengan dimensi $ (d_1, d_2, d_3) $, kita bisa mentransposenya menjadi $ (d_2, d_1, d_3) $ dengan menukar dimensi pertama dan kedua.
python
# Membuat tensor ordo 3tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])# Melakukan transposisi dengan permutetensor_3d_transpose = tensor_3d.permute(1, 0, 2)print("Tensor asli:")print(tensor_3d)print("\nTensor setelah transposisi:")print(tensor_3d_transpose)
Pada contoh di atas, kita menggunakan tensor_3d.permute(1, 0, 2) untuk mentranspose tensor ordo 3, di mana dimensi pertama dan kedua ditukar.
Fungsi torch.permute() digunakan untuk merubah urutan dimensi dari tensor. Fungsi ini mengambil parameter yang merupakan urutan indeks dimensi yang diinginkan. Sebagai contoh, pada tensor ordo 3 dengan dimensi $ (d_1, d_2, d_3) $, kita bisa mengubah urutannya menjadi $ (d_2, d_1, d_3) $, atau dimensi lainnya sesuai dengan kebutuhan.
Tensor, sebagai objek matematika, memiliki properti dasar tertentu saat melakukan operasi seperti penjumlahan atau perkalian. Operasi ini dapat diterapkan secara elemen-per-elemen, yang berarti operasi dilakukan pada setiap elemen tensor secara individual. Properti-properti ini sangat penting ketika bekerja dengan tensor di dalam framework seperti PyTorch atau TensorFlow, terutama dalam pembelajaran mesin di mana operasi tensor digunakan secara luas.
Ketika kita menambahkan atau mengalikan sebuah skalar dengan tensor, operasi tersebut diterapkan secara elemen-per-elemen pada setiap elemen tensor. Bentuk tensor tetap tidak berubah setelah operasi ini, karena skalar hanya berinteraksi dengan setiap elemen secara terpisah dan tidak mempengaruhi struktur keseluruhan tensor.
Begitu juga, ketika sebuah skalar dikalikan dengan tensor, setiap elemen tensor akan dikalikan dengan skalar tersebut. Operasi ini juga dilakukan elemen-per-elemen.
Misalnya, jika kita memiliki tensor yang sama, dan kita mengalikan tensor tersebut dengan skalar 3, hasilnya adalah:
Pada perkalian elemen-per-elemen, yang sering disebut Hadamard Product, operasi perkalian dilakukan pada setiap elemen tensor secara terpisah, tanpa memperhatikan struktur dimensi tensor secara keseluruhan. Artinya, setiap elemen tensor dikalikan dengan elemen yang sesuai pada tensor .
Setelah melakukan operasi penjumlahan atau perkalian dengan skalar, bentuk (shape) tensor tetap sama. Artinya, jumlah dimensi dan ukuran setiap dimensi tensor tidak berubah. Hanya nilai elemen tensor yang diubah sesuai dengan operasi yang diterapkan.
Sebagai contoh, jika kita memiliki tensor dengan dimensi (2 baris dan 3 kolom), setelah penjumlahan atau perkalian dengan skalar, dimensi tensor tersebut tetap . Demikian juga, saat kita melakukan perkalian elemen-per-elemen antara dua tensor dengan bentuk yang sama, tensor hasilnya tetap memiliki bentuk yang sama.
Reduction merujuk pada proses pengurangan dimensi tensor melalui operasi seperti penjumlahan atau operasi lainnya yang mengurangi tensor menjadi nilai yang lebih sederhana, berdasarkan operasi tertentu. Salah satu operasi yang paling umum dalam konteks reduction adalah penjumlahan seluruh elemen dalam tensor, tetapi dapat juga mencakup operasi lainnya seperti rata-rata, maksimum, atau minimumnya.
Misalnya, kita dapat menghitung jumlah seluruh elemen pada sebuah tensor (seperti vektor atau matriks), yang biasanya digunakan untuk mendapatkan total atau agregat dari data yang ada.
Untuk Vektor (Tensor Orde 1) Misalkan kita memiliki vektor yang terdiri dari elemen-elemen . Penjumlahan seluruh elemen vektor ini adalah:
Dimana adalah panjang vektor . Penjumlahan ini menghasilkan nilai tunggal yang mewakili total seluruh elemen pada vektor.
Untuk Matriks (Tensor Orde 2) Jika kita memiliki matriks berukuran dengan elemen-elemen , penjumlahan seluruh elemen dalam matriks dapat dihitung dengan:
Dimana adalah jumlah baris dan adalah jumlah kolom matriks. Dengan penjumlahan ini, kita menggabungkan seluruh nilai dalam matriks menjadi satu angka yang mewakili jumlah total elemen matriks.
Pada PyTorch, kita bisa melakukan operasi reduction ini dengan menggunakan berbagai fungsi built-in seperti torch.sum(), torch.mean(), dan lain-lain. Misalnya:
Penjumlahan seluruh elemen dalam tensor (Reduction)
Untuk Vektor (Tensor Orde 1) Kita dapat menghitung jumlah seluruh elemen dalam vektor menggunakan torch.sum().
python
import torch# Membuat tensor vektorx = torch.tensor([1, 2, 3, 4, 5])# Menghitung jumlah seluruh elementotal_sum = torch.sum(x)print("Jumlah seluruh elemen vektor:", total_sum)
Output:
Jumlah seluruh elemen vektor: tensor(15)
Penjumlahan seluruh elemen dalam Matriks (Tensor Orde 2)
Untuk Matriks (Tensor Orde 2) Kita dapat menghitung jumlah seluruh elemen dalam matriks menggunakan torch.sum() dengan menghilangkan dimensi tertentu, atau langsung menghitung seluruh elemen.
python
# Membuat tensor matriksX = torch.tensor([[1, 2, 3], [4, 5, 6]])# Menghitung jumlah seluruh elementotal_sum_matrix = torch.sum(X)print("Jumlah seluruh elemen matriks:", total_sum_matrix)
Output:
Jumlah seluruh elemen matriks: tensor(21)
Reduction berdasarkan dimensi tertentu
Anda juga bisa melakukan reduction berdasarkan dimensi tertentu untuk menghasilkan hasil penjumlahan yang lebih terbatas pada dimensi tersebut.
Penjumlahan berdasarkan baris (dimensi 0) Kita dapat menghitung penjumlahan seluruh elemen dalam setiap baris (kolomnya akan hilang).
python
# Penjumlahan berdasarkan barissum_rows = torch.sum(X, dim=1)print("Penjumlahan berdasarkan baris:", sum_rows)
Output:
Penjumlahan berdasarkan baris: tensor([ 6, 15])
Penjumlahan berdasarkan kolom (dimensi 1) Anda bisa menghitung penjumlahan berdasarkan kolom.
python
# Penjumlahan berdasarkan kolomsum_columns = torch.sum(X, dim=0)print("Penjumlahan berdasarkan kolom:", sum_columns)
Selain penjumlahan, Anda bisa melakukan operasi reduction lainnya seperti:
Rata-rata elemen menggunakan torch.mean()
Maksimum elemen menggunakan torch.max()
Minimum elemen menggunakan torch.min()
Norma (seperti L2-norm) menggunakan torch.norm()
Berikut adalah contoh penghitungan rata-rata elemen dalam tensor:
python
# Rata-rata seluruh elemenmean_value = torch.mean(X.float()) # Harus konversi ke float karena rata-rata bukan integerprint("Rata-rata seluruh elemen matriks:", mean_value)
Produk titik atau dot product adalah operasi matematika yang menggabungkan dua vektor menjadi satu nilai skalar. Operasi ini sangat penting dalam berbagai aplikasi, terutama dalam aljabar linear, machine learning, dan grafik komputer.
Untuk dua vektor dan yang memiliki panjang yang sama , dot product dihitung dengan mengalikan elemen-elemen yang bersesuaian dari kedua vektor dan menjumlahkan hasilnya.
Di PyTorch, Anda bisa menghitung dot product dengan menggunakan fungsi torch.dot() atau operator @ untuk dua vektor 1D.
Berikut adalah contoh penerapan dot product di PyTorch:
python
import torch# Membuat dua tensor (vektor)x = torch.tensor([1, 2, 3])y = torch.tensor([4, 5, 6])# Menghitung dot product menggunakan torch.dot()dot_product = torch.dot(x, y)print("Dot product antara x dan y:", dot_product)
Pengukuran kesamaan vektor. Dot product sering digunakan untuk mengukur kesamaan antara dua vektor. Dalam machine learning, ini banyak digunakan dalam algoritma seperti regresi linier, support vector machines (SVM), atau jaringan saraf tiruan.
Proyeksi vektor: Dot product juga digunakan untuk menghitung panjang proyeksi satu vektor ke vektor lainnya.
Kalkulasi sudut antara vektor: Jika dot product dibagi dengan norma dari kedua vektor, kita bisa memperoleh nilai cosine dari sudut antara dua vektor, yang sering digunakan dalam pengukuran kesamaan teks atau gambar.
Selain vektor 1D, produk titik juga dapat diperluas untuk tensor dengan dimensi lebih tinggi, misalnya untuk matriks (tensor orde-2) atau tensor lebih tinggi. Untuk matriks, produk titik biasanya disebut produk matriks, dan di PyTorch, fungsi seperti torch.matmul() atau operator @ bisa digunakan untuk menghitung produk matriks.
Produk titik antara dua vektor mengukur hubungan antara keduanya dan menghasilkan sebuah nilai skalar.
Dalam notasi, produk titik bisa ditulis sebagai , , atau .
Di PyTorch, produk titik dapat dihitung menggunakan torch.dot() atau operator @ untuk dua vektor 1D.
Penyelesaian Sistem Linear: Teknik Substitusi dan Eliminasi
Sistem persamaan linear adalah sekumpulan persamaan linear yang mengandung dua atau lebih variabel. Dalam matematika, tujuan kita adalah menemukan nilai variabel yang memenuhi semua persamaan dalam sistem tersebut.
Secara umum, sistem persamaan linear dapat dinyatakan dalam bentuk matriks sebagai berikut:
di mana:
adalah matriks koefisien (biasanya berbentuk matriks ),
adalah vektor yang berisi variabel yang ingin dicari,
adalah vektor hasil dari setiap persamaan.
Terdapat beberapa metode untuk menyelesaikan sistem persamaan linear, yang paling umum adalah metode substitusi dan metode eliminasi.
Metode substitusi adalah teknik di mana kita menyelesaikan salah satu persamaan untuk satu variabel, kemudian menggantikan variabel tersebut dalam persamaan lainnya.
Metode eliminasi, juga dikenal dengan Metode Gauss, adalah teknik yang digunakan untuk menghilangkan satu variabel dengan cara menambahkan atau mengurangkan persamaan sehingga satu variabel hilang. Kemudian, kita menyelesaikan sistem persamaan yang lebih sederhana.
Substitusi lebih berguna ketika salah satu variabel dapat dengan mudah diisolasi dalam persamaan, sementara eliminasi lebih efisien saat koefisien variabel lebih mudah disesuaikan atau jika ada banyak variabel.
Eliminasi cenderung lebih cepat ketika bekerja dengan sistem persamaan linear dengan lebih dari dua variabel.
Kedua metode ini akan memberikan hasil yang sama, tetapi pilihan metode tergantung pada kompleksitas sistem persamaan yang diberikan.
PyTorch dapat digunakan untuk menyelesaikan sistem persamaan linear menggunakan fungsi tensor. Berikut adalah contoh implementasi solusi sistem persamaan linear menggunakan Metode Eliminasi Gauss di PyTorch.
python
import torch# Matriks koefisien A (2x2) dan vektor hasil b (2x1)A = torch.tensor([[1., 1.], [2., -1.]])b = torch.tensor([5., 1.])# Menggunakan PyTorch untuk menyelesaikan sistem persamaan linearx = torch.linalg.solve(A, b)print("Solusi x dan y:", x)
Penjelasan:
Matriks $A $ adalah matriks koefisien sistem persamaan.
Vektor adalah hasil dari setiap persamaan.
Fungsi torch.linalg.solve() digunakan untuk menyelesaikan sistem persamaan linear .
Norma Frobenius adalah salah satu jenis norma yang digunakan untuk mengukur ukuran atau "besar" dari sebuah matriks. Ini adalah bentuk norma matriks yang paling umum dan mudah dihitung. Norma Frobenius dihitung dengan cara yang mirip dengan menghitung panjang atau magnitude dari sebuah vektor, tetapi untuk matriks.
Norma Frobenius dari matriks yang berukuran (matriks dengan baris dan kolom) didefinisikan sebagai akar kuadrat dari jumlah kuadrat dari semua elemen matriks tersebut:
di mana:
adalah elemen pada baris ke- dan kolom ke- dari matriks ,
adalah nilai absolut dari elemen ,
Penjumlahan dilakukan untuk seluruh elemen matriks .
Secara sederhana, norma Frobenius mengukur seberapa besar matriks tersebut dengan cara menjumlahkan kuadrat dari semua elemen, kemudian mengambil akar kuadrat dari jumlah tersebut.
Norma Frobenius dapat dianggap sebagai ukuran total "besar" dari matriks, yang menunjukkan seberapa banyak energi yang dikandung oleh matriks tersebut dalam bentuk elemen-elemen individualnya. Semakin besar nilai norma Frobenius, semakin besar elemen-elemen dalam matriks.
Sebagai contoh, jika matriks berisi banyak elemen besar, maka norma Frobenius akan menjadi lebih besar. Sebaliknya, jika elemen-elemen matriks kecil, norma Frobenius juga akan kecil.
Penggunaan dalam Machine Learning dan Deep Learning
Norma Frobenius sering digunakan dalam berbagai aplikasi dalam machine learning, khususnya dalam optimasi dan pembelajaran mesin. Beberapa contohnya adalah:
Regularisasi Matriks. Dalam metode pembelajaran mesin, norma Frobenius dapat digunakan sebagai bagian dari regularisasi untuk mencegah overfitting. Regularisasi ini dapat membantu mengontrol besar elemen-elemen dalam matriks, seperti dalam kasus pembelajaran dengan matriks bobot dalam jaringan saraf.
Perbandingan Matriks. Norma Frobenius dapat digunakan untuk membandingkan dua matriks, misalnya untuk mengukur seberapa besar perbedaan antara dua matriks yang dihasilkan selama proses pelatihan.
Penyelesaian Masalah Optimasi. Dalam metode optimasi, norma Frobenius sering digunakan untuk mengukur ukuran dari gradien atau error matriks.
Di PyTorch, kita dapat menghitung norma Frobenius dari matriks menggunakan fungsi torch.norm() dengan parameter p='fro'. Berikut adalah contoh penggunaannya:
python
import torch# Membuat sebuah matriksA = torch.tensor([[1., 2.], [3., 4.]])# Menghitung norma Frobeniusfrobenius_norm = torch.norm(A, p='fro')print("Norma Frobenius dari A:", frobenius_norm)
Penjelasan:
torch.tensor digunakan untuk membuat matriks .
torch.norm(A, p='fro') menghitung norma Frobenius dari matriks .
Hasilnya akan menunjukkan nilai akar kuadrat dari jumlah kuadrat elemen-elemen matriks.
Perkalian matriks dengan vektor adalah operasi matematika yang melibatkan matriks dan vektor. Ini sangat umum digunakan dalam berbagai aplikasi, terutama dalam machine learning, terutama dalam operasi linear dan transformasi.
Misalkan kita memiliki matriks berukuran dan vektor berukuran , maka hasil perkalian matriks dengan vektor adalah vektor yang berukuran , dengan setiap elemen dihitung sebagai produk titik (dot product) antara baris dari matriks dan vektor .
Perkalian dua matriks adalah operasi di mana setiap elemen dalam hasil matriks diperoleh dari perkalian elemen-elemen baris dari matriks pertama dengan elemen-elemen kolom dari matriks kedua dan kemudian dijumlahkan.
Jika kita memiliki dua matriks dan , dengan ukuran dan berturut-turut, maka hasil perkaliannya akan menjadi matriks baru dengan ukuran .
Misalkan kita memiliki matriks berukuran dan matriks berukuran . Matriks hasil perkaliannya akan memiliki ukuran , dan elemen dihitung sebagai berikut:
Dengan kata lain, elemen diperoleh dengan mengalikan setiap elemen baris ke- dari matriks dengan elemen kolom ke- dari matriks , kemudian menjumlahkan hasil perkaliannya.
Matriks simetris adalah matriks yang memiliki properti khusus, yaitu elemen-elemen di atas diagonal utama sama dengan elemen-elemen yang berada di bawah diagonal utama. Secara matematis, matriks dikatakan simetris jika memenuhi hubungan:
Untuk memeriksa apakah matriks adalah simetris, kita bisa membandingkan matriks dengan transposnya. Jika hasilnya benar untuk semua elemen, maka matriks tersebut simetris.
python
print(X_sym.T == X_sym)
Output:
Karena semua elemen dalam hasil perbandingan adalah True, kita dapat menyimpulkan bahwa matriks adalah matriks simetris.
Matriks identitas adalah matriks persegi (jumlah baris sama dengan jumlah kolom) yang memiliki elemen-elemen utama yang bernilai 1, sementara elemen-elemen lainnya bernilai 0. Matriks identitas untuk ukuran dapat dituliskan sebagai berikut:
Dalam konteks perkalian matriks, matriks identitas bertindak seperti angka dalam perkalian biasa, yaitu jika Anda mengalikan matriks identitas dengan matriks lain (atau vektor), hasilnya adalah matriks atau vektor yang sama.
Perkalian antara matriks identitas dan vektor menghasilkan vektor yang sama, yaitu . Ini karena matriks identitas bertindak seperti elemen netral dalam perkalian matriks, sama seperti angka 1 dalam perkalian bilangan biasa. Setiap elemen pada vektor dipertahankan oleh matriks identitas, yang tidak mengubah nilai-nilai elemen vektor tersebut.
Invers matriks adalah suatu konsep dalam aljabar linear yang sangat penting. Jika kita memiliki suatu matriks , invers matriks adalah matriks yang, ketika dikalikan dengan , menghasilkan matriks identitas . Dalam kata lain, untuk matriks yang memiliki invers, berlaku hubungan berikut:
Dengan kata lain, invers matriks membalikkan pengaruh matriks tersebut.
Salah satu cara untuk menghitung invers matriks adalah dengan menggunakan metode np.linalg.inv() di NumPy atau fungsi serupa di PyTorch dan TensorFlow.
Sekarang kita akan memverifikasi apakah hasil perkalian antara dan benar-benar menghasilkan matriks identitas :
python
np.dot(Xinv, X)
Hasilnya adalah:
Hasil ini mendekati matriks identitas , meskipun terdapat sedikit kesalahan numerik yang sangat kecil (seperti yang ditunjukkan oleh nilai yang sangat kecil).
Jika kita memiliki sistem persamaan linear yang dituliskan dalam bentuk , kita dapat menggunakan invers matriks untuk menyelesaikan sistem tersebut. Misalnya, kita memiliki vektor sebagai berikut:
python
y = np.array([4, -7])print(y)
Output:
Untuk menemukan , kita cukup mengalikan dengan :
python
w = np.dot(Xinv, y)print(w)
Hasilnya adalah:
Kemudian, untuk memverifikasi bahwa solusi ini benar, kita dapat menggantikan ke dalam persamaan :
python
np.dot(X, w)
Hasilnya:
Ini menunjukkan bahwa , yang membuktikan bahwa solusi adalah benar.
Sistem persamaan linear yang kita selesaikan dapat divisualisasikan dalam bentuk dua garis. Setiap persamaan dalam sistem dapat dipandang sebagai garis dalam ruang dua dimensi, dan titik potong kedua garis tersebut adalah solusi dari sistem persamaan tersebut. Misalnya, dua persamaan berikut:
Dapat direpresentasikan sebagai dua garis dalam plot. Setelah menyelesaikan sistem ini, kita menemukan titik potong di dan .
Matriks invers adalah matriks yang jika dikalikan dengan matriks , menghasilkan matriks identitas .
Invers matriks digunakan dalam penyelesaian sistem persamaan linear, di mana kita dapat menyelesaikan dengan menggunakan .
Invers matriks dapat dihitung menggunakan berbagai pustaka seperti NumPy, PyTorch, dan TensorFlow, yang memiliki fungsi built-in untuk melakukan operasi ini.
Invers matriks sangat berguna dalam berbagai aplikasi matematis dan komputasi ilmiah.
Pada bagian ini, kita akan membahas mengenai kasus di mana matriks yang diberikan tidak dapat diinversi (disebut singular matrix). Sebuah matriks dikatakan singular jika tidak memiliki invers. Ini terjadi ketika matriks tersebut tidak memiliki determinan yang tidak nol.
Untuk menghitung invers matriks, kita bisa menggunakan fungsi np.linalg.inv(X). Namun, matriks ini adalah singular karena determinannya adalah nol. Matriks yang singular tidak memiliki invers.
Untuk memastikan apakah matriks ini singular atau tidak, kita bisa menghitung determinannya menggunakan np.linalg.det():
python
det_X = np.linalg.det(X)print(det_X)
Outputnya akan menunjukkan nilai determinan:
0.0
Karena determinannya adalah 0, matriks ini adalah singular dan tidak dapat diinversi. Jika kita mencoba untuk menghitung invers dari matriks ini dengan menggunakan np.linalg.inv(X), kita akan mendapatkan kesalahan seperti ini:
python
Xinv = np.linalg.inv(X)
Ini akan menghasilkan error:
LinAlgError: Singular matrix
Penjelasan Mengapa Matriks Singular Tidak Bisa Dihitung Inversnya
Sebuah matriks tidak bisa diinversi (singular) jika baris atau kolom-kolomnya saling bergantung secara linier. Dalam hal ini, baris kedua adalah kelipatan dari baris pertama . Secara matematis, jika kita mencoba untuk mencari determinan, kita akan menemukan bahwa nilai determinannya adalah 0, yang menunjukkan bahwa matriks tersebut tidak memiliki invers.
Selain itu, penting juga untuk diingat bahwa hanya matriks persegi (matriks dengan jumlah baris dan kolom yang sama) yang memiliki kemungkinan untuk memiliki invers. Jika kita mencoba untuk menghitung invers matriks non-persegi (misalnya matriks 2x3), kita akan mendapatkan error juga:
python
X_non_square = np.array([[1, 2, 3], [4, 5, 6]])Xinv_non_square = np.linalg.inv(X_non_square) # This will throw an error
Outputnya akan seperti ini:
LinAlgError: Last 2 dimensions of the array must be square
Ini menunjukkan bahwa invers hanya dapat dihitung pada matriks persegi.
Matriks ortogonal adalah matriks yang memiliki properti di mana kolom-kolom (atau baris-baris) matriks tersebut saling tegak lurus (orthogonal) dan memiliki panjang satu (norma unit). Dalam hal ini, kita akan membahas dua matriks ortogonal: matriks identitas dan matriks .
Untuk memastikan bahwa adalah matriks ortogonal, kita perlu memeriksa apakah . Jika ini benar, maka adalah matriks ortogonal. Kita bisa menggunakan operasi perkalian matriks:
Output yang diperoleh adalah matriks yang hampir sama dengan matriks identitas, dengan sedikit kesalahan numerik karena representasi floating-point:
Karena hasilnya sangat dekat dengan matriks identitas, kita dapat menyimpulkan bahwa adalah matriks ortogonal.
Matriks adalah matriks ortogonal karena kolom dan barisnya ortonormal (salin ortogonal dan norma unit).
Matriks juga ortogonal karena kolom-kolomnya ortonormal, dan hasil perkalian mendekati matriks identitas.
Matriks ortogonal adalah matriks yang memiliki kolom dan baris ortonormal, dan mereka sangat berguna dalam berbagai aplikasi, seperti rotasi dan transformasi dalam geometri dan aljabar linier.