Kursus
Fungsi aktivasi menentukan sinyal mana yang diteruskan melalui jaringan saraf dan mana yang tidak. Jika Anda memilih yang salah, model Anda akan belajar terlalu lambat atau gagal melakukan generalisasi. Selama bertahun-tahun, ReLU menjadi pilihan default yang masuk akal karena cepat dan cukup baik untuk sebagian besar tugas.
GELU (Gaussian Error Linear Unit) mengubah itu. Kini ia menjadi fungsi aktivasi di balik beberapa model paling canggih yang pernah dibuat, termasuk BERT dan GPT.
Dalam artikel ini, saya akan membahas intuisi di balik GELU, rumusnya, perbandingannya dengan fungsi aktivasi lain, dan di mana Anda benar-benar akan menggunakannya dalam praktik.
Jika Anda benar-benar baru mengenal fungsi aktivasi dalam machine learning, baca Panduan Pemula untuk Rectified Linear Unit (ReLU) kami.
Apa Itu Fungsi Aktivasi GELU?
GELU, atau Gaussian Error Linear Unit, adalah fungsi aktivasi yang memberikan bobot pada masukan berdasarkan magnitudonya menggunakan pendekatan yang mulus dan probabilistik.
Sebagian besar fungsi aktivasi membuat keputusan untuk meneruskan sinyal atau membloknya. ReLU, misalnya, meniadakan semua nilai negatif dan meneruskan sisanya tanpa perubahan. GELU bekerja berbeda. Alih-alih batas tegas, ia menskalakan masukan secara mulus berdasarkan seberapa besar atau kecil nilainya, yang berarti bahkan nilai negatif kecil masih dapat berkontribusi pada keluaran.
Perbedaannya dari ReLU adalah bahwa GELU halus dan kontinu di semua titik. Tidak ada sudut tajam di nol dan tidak ada transisi mendadak. Keluwesan ini bisa berpengaruh selama pelatihan karena memberi pengoptimal informasi gradien yang lebih bersih untuk digunakan.
Intuisi di Balik GELU
Anggaplah GELU sebagai filter yang tidak memperlakukan semua masukan dengan cara yang sama.
ReLU itu kasar — apa pun yang negatif akan menjadi nol, setiap saat. Di sisi lain, GELU bertanya “seberapa mungkin nilai masukan ini berguna?” Nilai yang jelas besar dan positif akan diteruskan hampir tanpa perubahan. Nilai yang kecil atau negatif akan diskalakan turun, tidak dipotong sepenuhnya.
Hasilnya, Anda mendapatkan kurva mulus yang menekan sinyal yang kurang relevan tanpa membuangnya sepenuhnya.
Bayangkan Anda meninjau setumpuk lamaran kerja. Filter yang ketat akan menghapus siapa pun tanpa gelar, tanpa pengecualian. Filter yang lebih cerdas masih akan mempertimbangkan kandidat yang mendekati karena mungkin mereka memiliki pengalaman relevan yang menutupi kekurangan. GELU bekerja seperti filter yang lebih cerdas. Ia tidak membuat pemotongan tegas, melainkan menimbang setiap masukan berdasarkan magnitudonya dan memutuskan seberapa banyak yang akan diteruskan.
Penskalaan bertahap dan probabilistik inilah yang membuat GELU berbeda. Tidak ada transisi tajam dan tidak ada neuron mati — hanya keputusan halus untuk meneruskan atau menekan yang dibuat untuk setiap nilai masukan.
Rumus GELU
Rumus GELU yang tepat dibangun di atas fungsi distribusi kumulatif Gaussian (CDF), ditulis sebagai:

Fungsi distribusi kumulatif Gaussian
di mana x adalah nilai masukan dan Φ(x) adalah probabilitas bahwa sebuah variabel acak yang diambil dari distribusi normal baku kurang dari atau sama dengan x. Sederhananya, Φ(x) memberi tahu Anda seberapa "normal" atau diharapkan nilai masukan itu — dan probabilitas itulah yang digunakan GELU untuk menskalakan masukan.
Semakin tinggi masukan, semakin mendekati 1 nilai Φ(x), yang berarti masukan lewat hampir tanpa perubahan. Semakin rendah masukan, semakin mendekati 0 nilai Φ(x), yang berarti masukan ditekan.
Pendekatan aproksimasi yang digunakan dalam praktik
Masalah dengan rumus yang tepat adalah bahwa menghitung Φ(x) itu mahal. Ini melibatkan fungsi error, yang tidak memiliki bentuk tertutup sederhana dan lambat dihitung dalam skala besar.
Kerangka deep learning menggunakan aproksimasi berikut sebagai gantinya:

Rumus aproksimasi GELU
Aproksimasi ini menggunakan tanh, yang cepat dan didukung dengan baik pada perangkat keras modern. Hasilnya hampir identik dengan rumus yang tepat di rentang masukan yang relevan dalam praktik, itulah mengapa kerangka seperti PyTorch dan TensorFlow menggunakannya secara default.
Tentu saja, Anda tidak perlu menghafal kedua rumus tersebut. Namun mengetahui bahwa aproksimasi itu ada — dan alasannya — membantu Anda memahami apa yang sebenarnya terjadi saat Anda memanggil GELU dalam kode Anda.
GELU vs Fungsi Aktivasi Lain
Setiap fungsi aktivasi menangani masukan dengan cara berbeda, dan perbedaan itu terlihat pada seberapa baik model Anda berlatih.
Berikut tampilan perbedaannya secara visual sebelum menjelaskannya melalui teks:

Grafik GELU dibandingkan fungsi aktivasi lainnya
Sigmoid
Sigmoid memampatkan semua masukan ke rentang antara 0 dan 1. Ia halus, tetapi memiliki masalah yang terkenal: gradien menghilang. Untuk masukan yang sangat besar atau sangat kecil, gradien mendekati nol, yang berarti lapisan yang lebih dalam berhenti belajar. GELU tidak memiliki masalah ini karena gradiennya tetap bermakna di rentang masukan yang lebih luas.
Tanh
Tanh mirip dengan Sigmoid tetapi berpusat di nol, dengan keluaran antara -1 dan 1. Ia menangani masukan negatif lebih baik daripada Sigmoid, tetapi masih mengalami gradien menghilang di ekstrem. GELU menghasilkan kurva keluaran yang lebih mulus dengan aliran gradien yang lebih baik melalui jaringan yang dalam.
ReLU
ReLU cepat dan sederhana: masukan positif diteruskan tanpa perubahan, masukan negatif menjadi nol. Batas tegas di nol inilah yang menyebabkan masalah neuron mati — neuron yang selalu menerima masukan negatif seiring waktu benar-benar berhenti diperbarui. GELU menghindarinya dengan menskalakan masukan negatif alih-alih memutuskannya.
Leaky ReLU
Leaky ReLU memperbaiki masalah neuron mati dengan membiarkan sebagian kecil masukan negatif lewat. Ini satu langkah lebih baik dari ReLU, tetapi transisi di nol tetap tajam. GELU menghasilkan kurva yang lebih mulus secara keseluruhan, yang cenderung bekerja lebih baik dalam arsitektur dalam di mana kualitas gradien lebih penting.
Jadi, untuk merangkum, berikut perbedaan antara kelima fungsi aktivasi ini:

Tabel GELU dibandingkan fungsi aktivasi lainnya
Mengapa GELU Digunakan dalam Transformer
Transformer hanyalah jaringan saraf yang dalam. Dan semakin dalam jaringan Anda, semakin penting kualitas gradien.
Model seperti BERT dan GPT menumpuk puluhan lapisan satu di atas yang lain. Pada kedalaman tersebut, masalah kecil dengan aliran gradien akan terakumulasi. Jika fungsi aktivasi Anda menghasilkan gradien yang tidak stabil atau mendekati nol di wilayah tertentu, lapisan awal dalam jaringan hampir tidak diperbarui selama pelatihan, yang berarti mereka tidak banyak belajar.
GELU menghindari ini dengan menjaga gradien tetap mulus dan tidak nol di rentang masukan yang lebih luas. Tidak ada batasan tegas seperti nol pada ReLU, sehingga pengoptimal mendapatkan sinyal yang lebih bersih di setiap lapisan, bukan hanya yang dekat keluaran.
Ada alasan tambahan mengapa GELU cocok dalam arsitektur transformer.
Transformer memproses masukan melalui mekanisme atensi yang menghasilkan rentang nilai aktivasi yang luas — baik positif maupun negatif. Fungsi aktivasi yang mulus menangani rentang itu lebih baik daripada yang memiliki transisi tajam.
Saat makalah asli BERT diterbitkan, para penulis memilih GELU daripada ReLU dan melaporkan hasil yang lebih baik pada tolok ukur mereka. GPT mengikuti pilihan yang sama. Sejak itu, GELU menjadi fungsi aktivasi default di sebagian besar arsitektur berbasis transformer, bukan karena baru, tetapi karena bekerja lebih baik pada skala operasional model-model ini.
GELU dalam Praktik
Menggunakan GELU dalam model Anda semudah menggunakan fungsi aktivasi lainnya. Baik PyTorch maupun TensorFlow memiliki dukungan bawaan.
PyTorch
Di PyTorch, Anda dapat menerapkan GELU sebagai modul mandiri atau inline di dalam definisi model. Berikut blok feedforward sederhana yang menggunakan GELU:
import torch
import torch.nn as nn
class FeedForwardBlock(nn.Module):
def __init__(self, input_dim, hidden_dim):
super().__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.act = nn.GELU()
self.fc2 = nn.Linear(hidden_dim, input_dim)
def forward(self, x):
return self.fc2(self.act(self.fc1(x)))
block = FeedForwardBlock(input_dim=512, hidden_dim=2048)
x = torch.randn(8, 512)
output = block(x)
nn.GELU() berada di antara dua lapisan linear, persis seperti yang Anda temukan di sublapisan feedforward transformer. Aktivasi dijalankan setelah proyeksi pertama dan sebelum yang kedua.
TensorFlow
Di TensorFlow, GELU tersedia melalui API Keras:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(2048, input_shape=(512,)),
keras.layers.Activation("gelu"),
keras.layers.Dense(512)
])
x = tf.random.normal((8, 512))
output = model(x)
Anda juga dapat meneruskannya langsung sebagai argumen string ke lapisan Dense:
keras.layers.Dense(2048, activation="gelu")
Kedua pendekatan menghasilkan hasil yang sama.
Di mana GELU ditempatkan dalam jaringan
GELU ditempatkan di tempat yang sama seperti fungsi aktivasi lain — tepat setelah transformasi linear dan sebelum lapisan berikutnya. Dalam arsitektur transformer, itu berarti di dalam sublapisan feedforward, di antara dua proyeksi dense. Dalam jaringan dalam lainnya, tempatkan setelah lapisan linear atau konvolusional Anda, dan biarkan ia menskalakan keluaran sebelum diteruskan.
Keunggulan GELU
Jika Anda masih membaca sampai titik ini, Anda sudah tahu nilai jual utama GELU dibandingkan fungsi aktivasi lain. Berikut rekap singkatnya:
- Aktivasi yang mulus: GELU menghasilkan kurva kontinu dan terdiferensiasi tanpa transisi tajam, yang memberi pengoptimal informasi yang lebih bersih pada setiap langkah.
- Aliran gradien yang lebih baik: GELU tidak meniadakan masukan negatif, sehingga gradien tetap dapat merambat melalui neuron yang menerima nilai negatif. Ini mengurangi risiko neuron mati selama pelatihan.
- Kinerja lebih baik pada model dalam: Dalam arsitektur dalam seperti transformer, efek kumulatif gradien yang lebih mulus cenderung berujung pada hasil pelatihan yang lebih baik dibandingkan fungsi aktivasi yang lebih sederhana.
Keterbatasan GELU
GELU bukan pilihan yang tepat untuk setiap situasi. Berikut beberapa keterbatasan yang harus Anda ketahui:
-
Lebih mahal dihitung daripada ReLU: GELU melibatkan fungsi error atau aproksimasi berbasis
tanh, yang keduanya lebih mahal daripada operasi ambang sederhana pada ReLU. Dalam model besar dengan banyak lapisan, ini bisa terakumulasi. -
Kurang intuitif: Fungsi seperti ReLU mudah dipahami — nilai positif lewat, nilai negatif tidak. Penskalaan probabilistik GELU lebih sulit diinterpretasikan.
-
Tidak selalu diperlukan: Untuk jaringan dangkal atau tugas yang lebih sederhana, GELU tidak menawarkan keunggulan yang berarti. ReLU atau Leaky ReLU sering kali berkinerja sama baiknya dengan biaya komputasi yang lebih rendah.
Sebagai penutup, jika Anda membangun transformer atau arsitektur dalam lainnya, GELU adalah default yang solid. Untuk yang lain, lakukan benchmarking sebelum memutuskan menggunakannya.
Kesimpulan
GELU bukan peningkatan universal, juga bukan solusi satu untuk semua yang menggantikan ReLU. Ini adalah pilihan desain yang disengaja dan layak dalam konteks tertentu — pikirkan jaringan dalam dan model transformer.
Jika Anda bekerja dengan BERT, GPT, atau model berbasis transformer apa pun, Anda sudah menggunakan GELU entah Anda menyadarinya atau tidak. Sekarang Anda tahu alasannya.
Untuk yang lain, pilihan fungsi aktivasi bergantung pada trade-off. Tidak ada satu fungsi pun yang selalu menang, dan memahami apa yang dilakukan masing-masing fungsi adalah cara Anda mengambil keputusan tersebut dengan yakin, bukan sekadar kebiasaan.
Jika Anda masih merasa perbedaan antar fungsi aktivasi membingungkan, daftarlah di Machine Learning Engineer Track kami untuk mempersiapkan karier di machine learning dan MLOps.
FAQs
Apa itu fungsi aktivasi GELU?
GELU, atau Gaussian Error Linear Unit, adalah fungsi aktivasi yang digunakan dalam jaringan saraf. Tidak seperti ReLU, GELU menskalakan masukan secara mulus berdasarkan magnitudonya menggunakan pendekatan probabilistik. Ini membuatnya lebih cocok untuk arsitektur dalam di mana kualitas gradien penting.
Bagaimana perbedaan GELU dari ReLU?
ReLU meniadakan semua masukan negatif dengan batas tegas di nol, yang dapat menyebabkan neuron berhenti belajar — masalah yang dikenal sebagai neuron mati. GELU menghindari hal ini dengan secara bertahap menskalakan masukan negatif turun alih-alih memutuskannya. Hasilnya adalah aliran gradien yang lebih mulus dan kinerja yang lebih baik pada jaringan dalam.
Kapan saya harus menggunakan GELU dibandingkan fungsi aktivasi lain?
GELU bekerja paling baik dalam arsitektur dalam, khususnya model berbasis transformer seperti BERT dan GPT. Untuk jaringan dangkal atau tugas yang lebih sederhana, beban komputasinya jarang membenarkan beralih dari ReLU. Mulailah dengan ReLU sebagai tolok ukur, dan Anda selalu dapat menguji opsi lain.
Apa perbedaan antara rumus GELU yang tepat dan aproksimasi?
Rumus GELU yang tepat menggunakan fungsi distribusi kumulatif Gaussian, yang memerlukan perhitungan fungsi error — operasi yang lambat dalam skala besar. Aproksimasi menggantinya dengan tanh, yaitu ekspresi berbasis yang lebih cepat dan didukung dengan baik pada perangkat keras modern. Dalam praktiknya, keduanya menghasilkan hasil yang hampir identik, itulah sebabnya sebagian besar kerangka menggunakan aproksimasi secara default.
Apakah GELU berfungsi di PyTorch dan TensorFlow?
Ya, kedua kerangka mendukung GELU. Di PyTorch, Anda dapat menggunakan nn.GELU() sebagai modul di dalam definisi model Anda. Di TensorFlow, Anda dapat meneruskan "gelu" sebagai string ke argumen activation pada lapisan mana pun, atau menggunakan keras.layers.Activation("gelu").

