Dalam postingan blog ini, saya akan membahas detail dan prinsip metode LoRA (Low-Rank Adaptation Of Large Language Models), sambil menelaah makalah tersebut . Fokus utama makalah ini adalah untuk menghadirkan struktur baru yang mengurangi biaya fine-tuning model sekaligus meningkatkan performanya. Operasi fine-tuning telah memiliki tempat penting dalam studi pemrosesan bahasa alami untuk beberapa waktu. Katakanlah Anda memiliki model yang telah dilatih, dan Anda ingin memperluas pengetahuannya. Anda dapat melakukannya dengan fine-tuning, tanpa melatih model dari awal.
Misalkan sebuah model memiliki n parameter setelah pelatihan dan Anda perlu menyempurnakannya. Jika Anda menggunakan metode penyempurnaan penuh, semua parameter model akan diperbarui. Ketika kita mempertimbangkan model yang memiliki miliaran parameter, pembaruan pada semua parameter akan menimbulkan masalah waktu dan penyimpanan. Dalam makalah ini, hasil kinerja yang lebih baik atau setara ditekankan untuk model RoBERTa, DeBERTa, GPT-2 dan GPT-3 dengan menggunakan metode LoRA.
Disebutkan dalam makalah tersebut bahwa metode LoRA terinspirasi dari penelitian Li et. al (2018a) dan Aghajanyan et al. (2020). Penelitian tersebut menekankan bahwa keberhasilan model yang terlalu parametrik sebenarnya didasarkan pada dimensi intrinsik yang rendah. Hal ini menjadi titik yang membentuk hipotesis metode LoRA.
Metode LoRA merupakan studi yang sepenuhnya didasarkan pada faktorisasi peringkat. Dalam metode ini, dua matriks sekuensial ditambahkan secara paralel ke beberapa lapisan padat dalam jaringan saraf seperti yang ditunjukkan pada Gambar 1. Matriks sekuensial ini dibentuk oleh konfigurasi peringkat tertentu. Gambar di bawah ini menunjukkan seperti apa lapisan padat setelah menambahkan matriks peringkat sekuensial. Variabel input dikirim melalui matriks bobot pra-pelatihan asli dan matriks pertama dari matriks sekuensial. Kemudian, nilai output dihitung dengan menjumlahkan output dari dua matriks paralel ini.

Metode LoRA
Jaringan saraf memiliki banyak lapisan padat yang melakukan perkalian matriks. Matriks bobot di lapisan-lapisan ini sebenarnya adalah matriks berperingkat penuh (semua baris dan kolom independen). Namun, Aghajanyan dkk. menyebutkan dalam makalah mereka bahwa model bahasa yang telah dilatih sebelumnya memiliki "dimensi intrinsik" yang rendah. Hal ini membentuk hipotesis LoRA dalam aspek ini. Jadi, hipotesis LoRA menjadi bahwa model dapat belajar dengan perubahan dimensi rendah pada matriks bobot selama adaptasi terhadap tugas tertentu.
Pembaruan pada matriks ini dilakukan melalui matriks

dipisahkan oleh pangkat rendah. Di sini, B adalah matriks dxr, A adalah matriks rxk, sedangkan r (peringkat) jauh lebih kecil daripada d dan k. Selama penyempurnaan, pembaruan gradien ke Wo dicegah. Baik matriks Wo maupun ∆W dikalikan dengan nilai masukan yang sama dan hasilnya dijumlahkan dan keluaran h= w0 + ∆Wx = w0 +BAx terbentuk.
Pada awal pelatihan, mereka menggunakan inisialisasi Gaussian acak untuk nilai matriks A dan inisialisasi nol penuh untuk nilai matriks B. Dengan kata lain, BA sama dengan nol di awal.
Aplikasi LoRA dalam Arsitektur Transformator
Ada 4 matriks bobot Wq, Wk, Wv, Wo dalam modul self-attention dan 2 matriks bobot dalam modul MLP dalam arsitektur transformer. Selama adaptasi LoRA, mereka membekukan bobot dalam modul MLP, dan menerapkan metode tersebut pada bobot perhatian agar pelatihan tetap sederhana.
Kelebihan
- Kemudahan terbesar yang disediakan oleh LoRA adalah penggunaan memori dan penyimpanan. Misalnya, dalam artikel tersebut disebutkan bahwa untuk model transformator besar yang dilatih dengan Adam, penggunaan VRAM berkurang hingga 2/3 jika << r d. Hal ini karena status pengoptimal tidak disimpan untuk parameter beku.
- Untuk model GPT-3 175B, konsumsi VRAM menurun dari 1.2 TB menjadi 350 GB.
- Dalam skenario di mana r=4 dan hanya bobot nilai dan matriks kueri yang diubah, ukuran titik pemeriksaan dikurangi dari 350 GB menjadi 35 MB. Hal ini memungkinkan pelatihan dilakukan dengan lebih sedikit GPU.
- Selain itu, karena tidak ada pembaruan gradien di sebagian besar parameter, percepatan 25% tercapai saat melatih GPT-3 175B dengan LoRA dibandingkan dengan proses penyempurnaan penuh.
Artikel tersebut juga menyebutkan bahwa jika proses fine-tuning diperlukan untuk bahasa lain, seluruh model sebaiknya digunakan, bukan LoRA.
Pengetahuan Tambahan
Apa itu Rank
Rank adalah jumlah total kolom atau baris yang saling bebas secara linear dalam sebuah matriks. Misalkan kita memiliki matriks dengan n kolom dan semua kolom saling bebas, maka kita dapat mengatakan bahwa rank kolom matriks ini adalah n. Demikian pula, jika semua baris matriks dengan n baris saling bebas, maka kita dapat mengatakan bahwa rank baris matriks tersebut adalah n.
Peringkat baris dan peringkat kolom suatu matriks harus sama. Sebagai contoh, kita dapat melihat matriks di bawah ini.
Matriks A = [[1,2,5], [ 2, 4, 10] ]
Jika kita perhatikan matriks dengan saksama, kita dapat melihat bahwa baris ke-2 berukuran dua kali lipat dari baris ke-1. Demikian pula, kolom ke-2 dan ke-3 dari matriks berukuran masing-masing 2 dan 5 kali lipat dari kolom ke-1. Dengan kata lain, meskipun ada dua vektor pada baris yang sama pada basis baris dalam matriks, dan tiga vektor berbeda pada baris lain pada basis kolom, hanya ada satu vektor unik pada setiap basis baris dan kolom. Ini berarti pangkat matriks adalah 1.
Untuk menemukan peringkat, kita mengubah matriks ke bentuk eselon, lalu kita hitung jumlah baris yang terdiri dari setidaknya satu nilai bukan nol.
Apa itu Matriks Peringkat Rendah
Dalam matriks, peringkatnya bisa sama dengan atau kurang dari jumlah kolom atau baris. Matriks yang memiliki baris atau kolom independen linier lebih kecil daripada jumlah baris atau kolom saat ini disebut matriks peringkat rendah. Matriks yang semua baris atau kolomnya independen disebut matriks peringkat penuh.
Apa itu Faktorisasi/Dekomposisi Peringkat
Kita dapat menulis ulang matriks dengan rank r sebagai B=LR^T dengan menguraikannya menjadi matriks L dan R. Di sini, L adalah matriks berdimensi mxr, sedangkan R^T adalah matriks berdimensi rxn. Proses ini dikenal sebagai dekomposisi rank.
Pentingnya Faktorisasi Peringkat:
Pentingnya proses faktorisasi peringkat adalah memungkinkan kita untuk membagi matriks menjadi matriks yang lebih kecil, L dan R, dan menyimpannya dalam ruang yang lebih sedikit. Ini berarti Anda dapat menyimpan B dengan menyimpan faktor-faktornya L dan R. Ini mengurangi kebutuhan penyimpanan B menjadi (m+n)r angka dari mn angka. Poin tambahan yang perlu disebutkan di sini adalah bahwa setelah menguraikan matriks menjadi dua matriks kecil ini, banyak perhitungan dapat dilakukan pada matriks tersebut tanpa perlu membuat matriks yang sama lagi. Karena alasan ini, ketika berurusan dengan matriks berperingkat rendah, faktorisasi peringkat selalu dianggap sebagai langkah pertama yang penting. Setelah faktorisasi peringkat, perhitungan dapat dilakukan jauh lebih cepat dan menggunakan lebih sedikit memori.
Selanjutnya
Untuk informasi lebih detail tentang matriks peringkat rendah, Anda dapat membaca blog Ethan R. Epperly dan makalah LoRA . Selain itu, Anda dapat mempelajari aplikasi berbasis kode LoRA secara detail di repositori GitHub microsoft/LoRA.
Gizem ABALI, MSc. / Pimpinan Tim