Akan membantu jika Anda memberikan konteks pada klaim bahwa gradient descent tidak efisien. Tidak efisien relatif terhadap apa?
Saya kira konteks yang hilang di sini adalah perbandingan dengan penurunan gradien stokastik atau batch dalam pembelajaran mesin. Inilah cara menjawab pertanyaan dalam konteks ini. Anda mengoptimalkan parameter model, bahkan hiperparameter. Jadi, Anda memiliki fungsi biaya , di mana - data Anda, dan - vektor parameter, dan - fungsi rugi. Untuk meminimalkan biaya ini, Anda menggunakan gradient descent di atas parameter :
x i Θ L ( ) θ j ∂∑ni = 1L ( xsaya| Θ)xsayaΘL ( ) θj
∂∂θj∑i = 1nL ( Θ | xsaya)
Jadi, Anda melihat bahwa Anda perlu mendapatkan penjumlahan dari semua data . Ini sangat disayangkan, karena itu berarti Anda terus mengulang-ulang data untuk setiap langkah gradient descent Anda. Begitulah keturunan batch dan stochastic gradient muncul: bagaimana jika kita mengambil sampel dari kumpulan data, dan menghitung gradien pada sampel, bukan set lengkap?
Di sini, adalah jumlah pengamatan dalam sampel . Jadi, jika sampel Anda 1/100 dari total yang ditetapkan, Anda mempercepat perhitungan Anda sebanyak 100 kali! Jelas, ini memperkenalkan kebisingan, yang memperpanjang pembelajaran, tetapi kebisingan berkurang pada tingkat∂xi = 1 , … , nnss√
∂∂θj∑k = 1nsL ( Θ | xk)
nss nn--√sementara jumlah perhitungan meningkat pada , jadi trik ini mungkin berhasil.
n
Atau, alih-alih menunggu hingga jumlah penuh dihitung, Anda dapat membaginya menjadi batch, dan melakukan langkah untuk setiap batch . Dengan cara ini Anda akan melakukan langkah-langkah M pada saat jumlah seluruh kumpulan data dihitung. Ini akan menjadi langkah yang lebih ribet, tetapi kebisingan akan hilang seiring waktu. ∑ M s = 1 ∑ n s i s = 1∑ni = 1∑M.s = 1∑nssayas= 1