{%hackmd @themes/dracula %}
# DAY 1 - GENERATIVE AI
Seluruh materi di bawah merupakan hak milik Laboratorium Image Processing and Vision.
Sumber Repo : [Pelatihan Generative AI IMV 2024](https://github.com/Pelatihan-Generative-AI-IMV-2024)
[TOC]
## 1. Generative AI Dasar
### a. Pengantar Generative AI
Generative AI merupakan bidang studi yang mencakup hal-hal yang luas. Hal yang dicakup oleh Generative AI mulai dari computer vision yang berkaitan dengan citra (gambar), natural language processing (bahasa manusia), hingga creative art (gambar yang digenerate oleh AI).
Generative AI berfokus pada algoritm dan model AI yang mampu mengenerate data yang menyerupai realita. Dalam kata lain, Generative AI dapat menciptakan sesuatu seperti manusia menciptakan sesuatu.
Contoh yang paling sering kita temui belakangan ini adalah penggunaan Chat GPT yang berbasis pada chatbot yang mampu merespon pada pertanyaan kita dalam berbagai bahasa.

sumber gambar : Google
## 2. Machine Learning
### a. Dasar-Dasar Machine Learning
Machine Learning yaitu istilah untuk menyebut komputer yang belajar dari data. Bidang ini merupakan irisan dari jurusan `ilmu komputer` dan `statistika` di mana algoritma digunakan untuk melakukan tugas tertentu tanpa diprogram secara eksplisit. Sebaliknya, `machine larning mengenali pola dalam data` dan membuat prediksi ketika ada data baru yang tiba.
Secara umum, proses pembelajaran algoritma ini dapat bersifat `supervised ataupun unsupervised`, tergantung pada data yang digunakan untuk melatih algoritma.
Machine Learning menggabungkan `algoritma “klasik”` untuk berbagai macam tugas seperti `pengelompokan (clustering), regresi, atau klasifikasi`. Algoritma Machine Learning harus dilatih pada data dengan memberikan label tertentu. `Semakin banyak data` yang diberikan ke dalam algoritma, maka `hasilnya akan semakin baik`.
Machine learning sebenarnya adalah bagian yang lebih mengerucut dari bidang AI. Bidang ini menggunakan teknik (termasuk juga deep learning) yang memungkinkan mesin menggunakan pengalaman atau data sebelumnya untuk menyelesaikan tugas yang diberikan. Proses pembelajaran didasarkan pada langkah-langkah berikut:
<ol type="a">
<li>Masukkan data ke dalam algoritma. (Pada langkah ini kita dapat memberikan informasi tambahan ke model, misalnya, dengan melakukan ekstraksi fitur).</li>
<li>Gunakan data tersebut untuk melatih model.</li>
<li>Uji dan terapkan model.</li>
<li>Gunakan model yang diterapkan untuk melakukan tugas prediksi otomatis. (Dengan kata lain, panggil dan gunakan model yang digunakan untuk menerima prediksi yang dikembalikan oleh model).</li>
</ol>
### b. Pembelajaran Mesin Supervised
Supervised learning memiliki data training yang sudah dilabel sebelumnya. Secara garis besar, model supervised learning memiliki gambaran dasar tentang nilai output yang benar itu seperti apa.

sumber gambar: medium.com
Adapun pelabelan data umumnya dilakukan secara manual oleh manusia sebelum data digunakan untuk machine learning. Algoritma supervised learning menggunakan sample dataset yang sudah dilabel untuk melatih dirinya sendiri secara berulang untuk meminimalkan error.
Supervised learning lebih berfokus pada pembelajaran tentang relasi antara input dan output. Biasanya digunakan pada object detection, prediksi berbasis waktu, prediksi trafik lalu lintas, dan lainnya.
referensi : cloud.google.com
### c. Pembelajaran Mesin Unsupervised
Unsupervised learning memiliki masukan data tanpa label. Adapun algoritma ini bekerja secara independen untuk mempelajari hubungan antar data masukan untuk menentukan output. Algoritma unsupervised diharapkan dapat mengelompokan pola yang ada pada dataset yang dimasukan.

sumber gambar: medium.com
Unsupervised learning berfokus pada pemeblajaran tentang pola pola baru secara mentah. Dapat digunakan untuk mengidentifikasi pola pembelian secara online dan merekomendasikannya pada customer yang serupa. Oleh karena itu unsupervised learning lebih sering digunakan pada deteksi anomali, big data visualization, hingga customer segmentation.
referensi : cloud.google.com
### d. Generative AI Model
Berbeda dengan discriminative AI, Generative AI mampu menghasilkan sesuatu yang baru. Discriminative AI adalah tipe AI yang tugasnya untuk membeda-bedakan berdasarkan data training, misalnya melakukan klasifikasi gambar anjing dengan kucing. Sedangkan, generative AI mampu menghasilkan sesuatu yang baru berdasarkan data training, misalnya menghasilkan gambar kuda berjalan di luar angkasa.

Generative AI utamanya terbagi ke dalam dua model, yakni Generative Text Model dan Generative Image Model. Text model menerima input berupa text dan memberikan output berupa text. Image model dapat menerima input berupa text atau image dan memberikan keluaran berupa text atau image juga, asalkan salah satunya (input atau output) berupa gambar. Contohnya seperti gambar berikut:

## 3. Deep Learning
### a. Pemahaman Deep Learning
Deep Learning didefinisikan sebagai algoritma yang menganalisis data dengan struktur logika yang mirip dengan `cara manusia menarik kesimpulan`. Perlu diketahui bahwasanya deep learning dapat dicapai hanya dengan menggunakan supervised dan semisupervised learning.
Untuk mencapai hal ini, sistem deep learning menggunakan struktur algoritma berlapis yang disebut `jaringan saraf tiruan (JST)` atau `Artificial Neural Network (ANN)` . Desain JST semacam itu terinspirasi oleh `jaringan saraf biologis otak manusia`, yang mengarah ke proses pembelajaran yang jauh lebih mumpuni daripada model machine learning standar.
Saat ini, Deep Learning digunakan di banyak bidang. Sistem kemudi otomatis, misalnya, Deep learning digunakan untuk mendeteksi objek, seperti rambu STOP atau pejalan kaki. Militer menggunakan Deep learning untuk mengidentifikasi objek dari satelit, misal untuk menemukan zona aman atau tidak aman bagi pasukannya. Tentu saja, industri elektronik juga tak ketinggalan. Perangkat smart home assistant seperti Amazon Alexa, mengandalkan algoritma Deep Learning untuk merespons suara dan mengetahui preferensi penggunanya.

Pendekatan klasifikasi secara Machine Learning (konvensional) umumnya melakukan ektraksi fitur secara terpisah kemudian dilanjutkan proses pembelajaran menggunakan metode klasifikasi konvensional.
Kelemahan pendekatan konvensional:
- Memerlukan waktu dan pengetahuan lebih untuk ekstraksi fitur.
- Sangat tergantung pada satu domain permasalahan saja sehingga tidak berlaku general.
Pendekatan klasifikasi berbasis Deep learning mempelajari representasi hirarki (pola fitur) secara otomatis melalui beberapa tahapan proses feature learning.
### b. Generative Adversarial Networks
GANs merupakan salah satu arsitektur deep learning yang dapat dilatih. GANs secara garis besar melatih 2 neural network untuk berkompetisi dalam mengenerate data yang mendekati real berdasarkan dataset masukan.
GANs sendiri melatih 2 networks dimana 1 networks disebut "generator" yang berfungsi untuk mengenerate data dan 1 network lainnuya disebut "discriminator" yang berfungsi untuk membedakan data asli dan data yang diciptakan oleh "generator". Perhatikanlah contoh berikut ini.

gambar diatas merupakan "generator" pada training mula-mula dimana hasilnya dapat dibedakan dengan mudah.

Semakin lama "generator" akan menciptakan data yang lebih realistis.

Dan pada akhirnya, "discriminator" akan kesulitan untuk membedakan output dari "generator" dengan data yang asli.
Berikut bagan umum sistem GANs

sumber : developer.google.com
### c. Variational Autoencoders (VAEs)
Secara garis besar, VAEs terdiri dari Encoder dan Decorder. Encoder meng- compress data input menjadi lebih kecil dan Decorder merekonstruksi data asli dari yang sudah di compress tsb.

VAEs dapat dilatih melalui gradient descent.

VAEs memiliki perbedaan dimana terdapat proses sampling dalam algoritmanya

### d. Transfer Learning

Transfer learning terdiri dari mengambil fitur yang dipelajari pada satu masalah, dan memanfaatkannya pada masalah baru yang serupa.
#### Alur Kerja Transfer Learning
1. Buat instance model dasar dan muat beban yang telah dilatih sebelumnya ke dalamnya.
```python
base_model = tf.keras.applications.Xception(
weights='imagenet', # Load weights pre-trained on ImageNet.
input_shape=(150, 150, 3),
include_top=False) # Do not include the ImageNet classifier at the top.
```
2. Freeze semua layer dalam model dasar dengan mengatur trainable = False.
```python
base_model.trainable = False
```
3. Buat model baru di atas output dari satu (atau beberapa) lapisan dari model dasar.
```python
inputs = tf.keras.Input(shape=(150, 150, 3))
# Kami memastikan bahwa model_dasar berjalan dalam mode inferensi di sini,
# dengan meneruskan `training=False`.
x = base_model(inputs, training=False)
# Konversi fitur bentuk `base_model.output_shape[1:]` ke vektor
x = tf.keras.layers.GlobalAveragePooling2D()(x)
# Dense classifier dengan 1 unit output (binary classification)
outputs = tf.keras.layers.Dense(1,activation='sigmoid')(x)
model = tf.keras.Model(inputs, outputs)
```
4. Latih model baru Anda pada set data baru Anda.
```python
model.compile(optimizer=....,
loss=....,
metrics=[....])
model.fit(new_dataset, epochs=20, validation_data=...)
```
Fine Tuning
Fine-tuning terdiri dari 'unfreeze' seluruh model yang Anda peroleh di atas (atau sebagian darinya), dan melatihnya kembali pada data baru dengan tingkat pembelajaran yang sangat rendah
```python
# Unfreeze base model
base_model.trainable = True
```
## 4. Generative AI Lanjutan
### a. Diffusion Model

Diffusion models adalah iterative denoising autoencoders yang secara progresif menyempurnakan gambar untuk mencapai hasil akhir yang bersih dan denoised. Proses ini dimulai dengan random noise dan mengalami beberapa langkah penyempurnaan. Pada setiap langkah, model menentukan transformasi optimal dari input saat ini ke versi yang telah di-denoised. Diffusion models dapat menghadapi tantangan dalam menghasilkan gambar beresolusi tinggi karena meningkatnya kebutuhan komputasi saat memproses gambar yang lebih besar dengan arsitektur U-Net. Solusi untuk tantangan ini melibatkan pelaksanaan operasi difusi dalam latent space, memanfaatkan kerangka kerja encoder-decoder untuk konversi gambar. Dengan menggabungkan text conditioning, model difusi dapat menghasilkan gambar yang diinginkan berdasarkan petunjuk teks tertentu, daripada menghasilkan gambar secara acak. Stable Diffusion, yang memanfaatkan teknik-teknik ini, telah mencapai hasil yang canggih dan dapat digunakan pada GPU konsumen untuk menghasilkan gambar berkualitas tinggi. Model ini dilatih pada kumpulan data yang telah dikurasi dari gambar-gambar yang menyenangkan secara estetika, khususnya bagian dari LAION 5B yang disebut sebagai LAION aesthetics. Pada paper High-Resolution Image Synthesis with Latent Diffusion Models, terdapat setidaknya 4 langkah untuk memproses gambar dari input hingga output.

1. Encoder akan mengkompres gambar input menjadi 2D latent vector
2. Melakukan teknik diffusion dan proses de-noising pada latent vector
3. Menambahkan conditioning via text encoder dan cross-attention
4. Decoder merekonstruksi gambar dari latent vector
Generative AI dapat dibangun menggunakan beberapa jenis algoritma yang ada sesuai kebutuhan. Pada pelatihan kali ini kita akan spesifik pada perancangan model generative AI text to image. Beberapa jenis model text to image meliputi
- Parti (AutoRegresive)
- DALL- E (AutoRegresive)
- GLIDE (Diffusion)
- COGVIEW (AutoRegresive)
- XMC-GAN (GAN)
- dan lain lain.
# PPT
1. https://docs.google.com/presentation/d/192qDZU3Q8wpvHrSZbNsTDZS1NWfDFnAS/edit?usp=drivesdk&ouid=110235200083663562755&rtpof=true&sd=true
# HANDS-ON
1. BASIC MACHINE LEARNING :
- Soal : https://colab.research.google.com/drive/1uDlr9_xDy_qA1TKsE9Uuze76xu27h3vn?usp=sharing
- Kunci jawaban : https://colab.research.google.com/drive/1F3MsI3fB-mzysUf-wAMg_AIP-g3shsnC?usp=sharing
3. Generative Adveserial Network:
https://colab.research.google.com/drive/1N0wULf2QuZRGp9f6usXIZgI07zKzgPru?usp=sharing
4. Using Existing Stable Diffusion:
https://colab.research.google.com/drive/14-ne4iIKPWBJ4G4CYxKiMARKvoU6CYsz?usp=sharing
5. Fine Tuning Stable Diffusion:
https://colab.research.google.com/drive/1m3fQBqEoMcrgV6MhK2lWMq4EnGx3_akE?usp=sharing
# Referensi
Bandi, A., Adapa, P. V. S. R., & Kuchi, Y. E. V. P. K. (2023). The power of generative ai: A review of requirements, models, input–output formats, evaluation metrics, and challenges. Future Internet, 15(8), 260.
Feuerriegel, Stefan, et al. "Generative ai." Business & Information Systems Engineering 66.1 (2024): 111-126.
Yu, J., Xu, Y., Koh, J. Y., Luong, T., Baid, G., Wang, Z., ... & Wu, Y. (2022). Scaling autoregressive models for content-rich text-to-image generation. arXiv preprint arXiv:2206.10789, 2(3), 5.