Salah satu manfaat menggunakan TensorFlow, adalah dapat melacak operasi dan secara otomatis memperbarui variabel model berdasarkan back propagation. Pada Post ini, kita akan mencoba cara menggunakan aspek ini untuk keuntungan kita saat melatih model machine learning.
Sekarang kita akan mencoba cara mengubah variabel dalam model sedemikian rupa sehingga loss function diminimalkan. Kita telah belajar tentang cara menggunakan objek dan operasi, dan membuat loss function yang akan mengukur jarak antara prediksi dan target. Sekarang kita hanya perlu memberi tahu TensorFlow bagaimana cara back propagate errors melalui grafik komputasional kita untuk memperbarui variabel dan meminimalkan loss function. Ini dilakukan melalui mendeklarasikan fungsi pengoptimalan. Setelah kita memiliki fungsi pengoptimalan, TensorFlow akan menelusuri dan mencari tahu back propagation untuk semua perhitungan kita dalam grafik. Saat kita memasukkan data ke dalam dan meminimalkan loss function, TensorFlow akan memodifikasi variabel dalam grafik yang sesuai.
Untuk post ini, kita akan melakukan algoritma regresi yang sangat sederhana. Kita akan mengambil sampel angka acak dari normal, dengan mean 1 dan standar deviasi 0,1. Kemudian kita akan menjalankan angka melalui satu operasi, yang akan mengalikannya dengan variabel, A. Dari ini, loss function akan menjadi L2 norm antara output dan target, yang akan selalu menjadi nilai 10. Secara teoritis, nilai terbaik untuk A akan menjadi angka 10 karena data kita memiliki arti 1.
Contoh kedua adalah algoritma klasifikasi biner yang sangat sederhana. Di sini kita akan menghasilkan 100 angka dari dua distribusi normal, N (-1,1) dan N (3,1). Semua angka dari N (-1, 1) akan berada di kelas target 0, dan semua angka dari N (3, 1) akan berada di kelas target 1. Model untuk membedakan angka-angka ini akan menjadi fungsi sigmoid. Dengan kata lain, model akan menjadi sigmoid (x + A) di mana A adalah variabel yang akan kita fit. Secara teoritis, A akan sama dengan -1. Kita menggunakan angka ini karena jika m1 dan m2 adalah sarana dari dua fungsi normal, nilai yang ditambahkan ke mereka untuk menerjemahkannya sama dengan nol akan menjadi - (m1 + m2) / 2.
Sementara menentukan learning rate yang baik membantu konvergensi algoritma, kita juga harus menentukan jenis pengoptimalan. Dari dua contoh sebelumnya, kami menggunakan standard gradient descent. Ini diimplementasikan dengan fungsi TensorFlow GradientDescentOptimizer ().
Berikut adalah bagaimana contoh regresi berfungsi, untuk full codenya silahkan download DISINI:
- Kami mulai dengan memuat library numerik Python, numpy dan tensorflow, kemudian memulai graph session :
- Selanjutnya kita membuat data, placeholder, dan variabel A:
- Kita menambahkan operasi perkalian ke grafik :
- Selanjutnya kita menambahkan loss function L2 antara hasil perkalian dan data target:
- Sebelum kita dapat menjalankan apa pun, kita harus menginisialisasi variable
- Sekarang kita harus menyatakan cara untuk mengoptimalkan variabel dalam grafik kita. Kita mendeklarasikan algoritma optimizer. Sebagian besar algoritma optimisasi harus mengetahui seberapa jauh langkah dalam setiap iterasi. Jarak ini dikendalikan oleh learning rate. Jika learning rate kita terlalu besar, algoritma kita mungkin melampaui minimum, tetapi jika learning rate kita terlalu kecil, algoritma keluar mungkin membutuhkan waktu terlalu lama untuk konvergen. Learning rate memiliki pengaruh besar pada konvergensi. Sementara di sini kita menggunakan algoritma standard gradient descent, ada banyak algoritma pengoptimalan berbeda yang beroperasi secara berbeda dan dapat melakukan lebih baik atau lebih buruk tergantung pada masalahnya.
- Langkah terakhir adalah looping melalui algoritma pelatihan kita dan memberi tahu TensorFlow untuk melatih berkali-kali. Kita akan melakukan ini 100 kali dan mencetak hasil setiap 25 iterasi. Untuk melatih, kita akan memilih entri x dan y acak dan memberinya feed melalui grafik. TensorFlow secara otomatis akan menghitung loss, dan sedikit mengubah bias A untuk meminimalkan loss:
Here is the output:
- Sekarang kami akan memperkenalkan kode untuk contoh klasifikasi sederhana. Kita dapat menggunakan skrip TensorFlow yang sama jika kita mengatur ulang grafik terlebih dahulu. Ingat kita akan berusaha menemukan terjemahan optimal, A yang akan menerjemahkan dua distribusi ke asal dan fungsi sigmoid akan membagi keduanya menjadi dua kelas yang berbeda.
- Pertama-tama, kami menyetel ulang grafik dan memulai kembali graph session:
Perhatikan bahwa kami menginisialisasi A ke sekitar nilai 10, jauh dari nilai teoritis -1. Kami melakukan ini dengan sengaja untuk menunjukkan bagaimana algoritma menyatu dari nilai 10 ke nilai optimal, -1.
- Selanjutnya kita menambahkan operasi terjemahan ke grafik. Ingat bahwa kita tidak harus membungkus ini dalam fungsi sigmoid karena loss function akan melakukannya untuk kita:
- Karena specific loss function mengharapkan batch data yang memiliki dimensi ekstra yang terkait dengannya (dimensi tambahan yang merupakan nomor batch), kita akan menambahkan dimensi ekstra ke output dengan fungsi, expand_dims () Di bagian selanjutnya kita akan diskusikan cara menggunakan kumpulan ukuran variabel dalam pelatihan. Untuk saat ini, kami akan kembali hanya menggunakan satu titik data acak pada satu waktu:
- Selanjutnya kita akan menginisialisasi satu variabel kita, A:
- Sekarang kita mendeklarasikan loss function kita. kita akan menggunakan cross entropy dengan unscaled logits yang mengubahnya dengan fungsi sigmoid. TensorFlow memiliki semua ini dalam satu fungsi untuk kita dalam paket jaringan saraf yang disebut nn.sigmoid_cross_entropy_with_logits ().
- Sama seperti contoh regresi, kita perlu menambahkan fungsi pengoptimal ke grafik sehingga TensorFlow tahu cara memperbarui variabel bias dalam grafik:
- Akhirnya, kita loop melalui titik data yang dipilih secara acak beberapa ratus kali dan memperbarui variabel A . Setiap 200 iterasi, kami akan mencetak nilai A dan loss:
Kemudian didapatkan output berikut
Implementing Backpropagation
Reviewed by Jimmy Pujoseno
on
April 20, 2018
Rating:
No comments: