Jawaban ini ada di sisi umum fungsi biaya, tidak terkait dengan TensorFlow, dan sebagian besar akan membahas bagian "beberapa penjelasan tentang topik ini" dari pertanyaan Anda.
Dalam kebanyakan contoh / tutorial yang saya ikuti, fungsi biaya yang digunakan agak sewenang-wenang. Intinya adalah lebih untuk memperkenalkan pembaca ke metode tertentu, bukan ke fungsi biaya secara khusus. Seharusnya tidak menghentikan Anda untuk mengikuti tutorial agar terbiasa dengan alat, tetapi jawaban saya akan membantu Anda tentang cara memilih fungsi biaya untuk masalah Anda sendiri.
Jika Anda ingin jawaban mengenai Entrop Silang, Logit, norma L2, atau apa pun yang spesifik, saya menyarankan Anda untuk mengirim beberapa pertanyaan yang lebih spesifik. Ini akan meningkatkan kemungkinan seseorang dengan pengetahuan khusus akan melihat pertanyaan Anda.
Memilih fungsi biaya yang tepat untuk mencapai hasil yang diinginkan adalah titik kritis dari masalah pembelajaran mesin. Pendekatan dasar, jika Anda tidak tahu persis apa yang Anda inginkan dari metode Anda, adalah dengan menggunakan Mean Square Error (Wikipedia) untuk masalah regresi dan Persentase kesalahan untuk masalah klasifikasi. Namun, jika Anda ingin hasil yang baik dari metode Anda, Anda perlu mendefinisikan yang baik , dan dengan demikian mendefinisikan fungsi biaya yang memadai. Ini berasal dari pengetahuan domain (apa data Anda, apa yang ingin Anda capai), dan pengetahuan tentang alat yang Anda inginkan.
Saya tidak percaya saya bisa memandu Anda melalui fungsi biaya yang sudah diterapkan di TensorFlow, karena saya hanya memiliki sedikit pengetahuan tentang alat ini, tetapi saya dapat memberi Anda sebuah contoh tentang cara menulis dan menilai berbagai fungsi biaya.
Untuk menggambarkan berbagai perbedaan antara fungsi biaya, mari kita gunakan contoh masalah klasifikasi biner, di mana kita inginkan, untuk setiap sampel , kelas .xnf(xn)∈{0,1}
Dimulai dengan sifat komputasi ; bagaimana dua fungsi mengukur "hal yang sama" dapat menghasilkan hasil yang berbeda. Ambil fungsi biaya sederhana berikut ini; persentase kesalahan. Jika Anda memiliki sampel , adalah kelas yang diprediksi dan adalah kelas yang benar, Anda ingin meminimalkanNf(yn)yn
- 1N∑n{10 if f(xn)≠yn otherwise=∑nyn[1−f(xn)]+[1−yn]f(xn) .
Fungsi biaya ini memiliki manfaat mudah ditafsirkan. Namun, itu tidak mulus; jika Anda hanya memiliki dua sampel, fungsi "melompat" dari 0, ke 0,5, ke 1. Ini akan menyebabkan inkonsistensi jika Anda mencoba menggunakan gradient descent pada fungsi ini. Salah satu cara untuk menghindarinya adalah dengan mengubah fungsi biaya untuk menggunakan probabilitas penugasan; . Fungsi menjadip(yn=1|xn)
- 1N∑nynp(yn=0|xn)+(1−yn)p(yn=1|xn) .
Fungsi ini lebih halus, dan akan bekerja lebih baik dengan pendekatan gradient descent. Anda akan mendapatkan model yang 'lebih bagus'. Namun, ada masalah lain; jika Anda memiliki sampel yang ambigu, katakanlah Anda tidak memiliki cukup informasi untuk mengatakan sesuatu yang lebih baik daripada . Kemudian, menggunakan gradient descent pada fungsi biaya ini akan mengarah pada model yang meningkatkan probabilitas ini sebanyak mungkin, dan dengan demikian, mungkin, overfit.p(yn=1|xn)=0.5
Masalah lain dari fungsi ini adalah bahwa jika sementara , Anda yakin benar, tetapi Anda salah. Untuk menghindari masalah ini, Anda dapat mengambil log probabilitas, . Saat dan , fungsi berikut tidak memiliki masalah yang dijelaskan dalam paragraf sebelumnya:p(yn=1|xn)=1yn=0logp(yn|xn)log(0)=∞log(1)=0
- 1N∑nynlogp(yn=0|xn)+(1−yn)logp(yn=1|xn) .
Ini harus menggambarkan bahwa untuk mengoptimalkan hal yang sama , persentase kesalahan, definisi yang berbeda dapat menghasilkan hasil yang berbeda jika mereka lebih mudah dipahami, secara komputasi.
Hal ini dimungkinkan untuk fungsi biaya dan untuk mengukur konsep yang sama , namun mungkin menyebabkan metode Anda untuk hasil yang lebih baik daripada .ABAB
Sekarang mari kita lihat bagaimana fungsi biaya yang berbeda dapat mengukur konsep yang berbeda. Dalam konteks pencarian informasi, seperti dalam pencarian google (jika kami mengabaikan peringkat), kami ingin hasilnya dikembalikan
- memiliki presisi tinggi , tidak mengembalikan informasi yang tidak relevan
- memiliki daya ingat yang tinggi , kembalikan hasil yang relevan sebanyak mungkin
- Precision and Recall (Wikipedia)
Perhatikan bahwa jika algoritme Anda mengembalikan semuanya , itu akan mengembalikan setiap hasil yang relevan yang mungkin, dan karenanya memiliki daya ingat tinggi, tetapi memiliki presisi yang sangat buruk. Di sisi lain, jika hanya mengembalikan satu elemen, elemen yang paling pasti relevan, ia akan memiliki presisi tinggi tetapi daya ingat rendah.
Untuk menilai algoritma tersebut, fungsi biaya umum adalah -core (Wikipedia) . Kasus yang umum adalah -score, yang memberikan bobot yang sama untuk presisi dan daya ingat, tetapi pada umumnya -score, dan Anda dapat mengubah untuk mendapatkanFF1Fββ
- Penarikan lebih tinggi, jika Anda menggunakanβ>1
- Presisi lebih tinggi, jika Anda menggunakan .β<1
Dalam skenario seperti itu, memilih fungsi biaya adalah memilih apa yang harus dilakukan algoritme Anda .
Contoh lain yang sering diangkat adalah kasus diagnosis medis, Anda dapat memilih fungsi biaya yang menghukum lebih banyak negatif palsu atau positif palsu tergantung pada apa yang lebih disukai:
- Lebih banyak orang sehat digolongkan sakit (Tapi kemudian, kita mungkin memperlakukan orang sehat, yang mahal dan mungkin melukai mereka jika mereka sebenarnya tidak sakit)
- Semakin banyak orang sakit yang diklasifikasikan sebagai sehat (Tapi kemudian, mereka mungkin mati tanpa perawatan)
Sebagai kesimpulan, mendefinisikan fungsi biaya adalah menentukan tujuan dari algoritma Anda. Algoritma menentukan cara menuju ke sana.
Catatan: Beberapa fungsi biaya memiliki cara algoritma yang bagus untuk mencapai tujuan mereka. Misalnya, cara yang bagus untuk meminimalkan kerugian Engsel (Wikipedia) ada, dengan memecahkan masalah ganda dalam SVM (Wikipedia)