Perpustakaan pembelajaran mesin dan pembelajaran mendalam terbaik

Jika Anda memulai proyek pembelajaran mesin atau pembelajaran mendalam baru, Anda mungkin bingung tentang kerangka kerja mana yang harus dipilih. Seperti yang akan kita diskusikan, ada beberapa opsi bagus untuk kedua jenis proyek tersebut.

Ada perbedaan antara framework machine learning dan framework deep learning. Pada dasarnya, kerangka kerja pembelajaran mesin mencakup berbagai metode pembelajaran untuk klasifikasi, regresi, pengelompokan, deteksi anomali, dan persiapan data, dan mungkin atau mungkin tidak menyertakan metode jaringan saraf.

Framework deep learning atau deep neural network mencakup berbagai topologi jaringan neural dengan banyak lapisan tersembunyi. Keras, MXNet, PyTorch, dan TensorFlow adalah framework pembelajaran yang dalam. Scikit-learn dan Spark MLlib adalah framework pembelajaran mesin. (Klik salah satu tautan sebelumnya untuk membaca ulasan produk saya yang berdiri sendiri.)

Secara umum, komputasi jaringan neural dalam berjalan jauh lebih cepat pada GPU (khususnya GPU tujuan umum Nvidia CUDA), TPU, atau FPGA, daripada pada CPU. Secara umum, metode pembelajaran mesin yang lebih sederhana tidak memanfaatkan GPU.

Meskipun Anda dapat melatih jaringan neural dalam pada satu atau lebih CPU, pelatihannya cenderung lambat, dan lambatnya saya tidak berbicara tentang detik atau menit. Semakin banyak neuron dan lapisan yang perlu dilatih, dan semakin banyak data yang tersedia untuk pelatihan, semakin lama waktu yang dibutuhkan. Saat tim Google Brain melatih model terjemahan bahasanya untuk versi baru Google Terjemahan pada tahun 2016, mereka menjalankan sesi pelatihan mereka selama seminggu pada satu waktu, di beberapa GPU. Tanpa GPU, setiap eksperimen pelatihan model akan memakan waktu berbulan-bulan.

Sejak itu, Intel Math Kernel Library (MKL) memungkinkan untuk melatih beberapa jaringan saraf pada CPU dalam waktu yang wajar. Sementara itu GPU, TPU, dan FPGA menjadi lebih cepat.

Kecepatan pelatihan semua paket pembelajaran dalam yang berjalan pada GPU yang sama hampir identik. Itu karena loop dalam pelatihan menghabiskan sebagian besar waktu mereka dalam paket Nvidia CuDNN.

Terlepas dari kecepatan pelatihan, masing-masing pustaka pembelajaran mendalam memiliki pro dan kontra sendiri, dan hal yang sama berlaku untuk Scikit-learn dan Spark MLlib. Mari selami.

Keras

Keras adalah spesifikasi dan implementasi front-end tingkat tinggi untuk membangun model jaringan neural yang dikirimkan dengan dukungan untuk tiga framework deep learning back-end: TensorFlow, CNTK, dan Theano. Amazon saat ini sedang mengerjakan pengembangan back-end MXNet untuk Keras. Ini juga memungkinkan untuk menggunakan PlaidML (proyek independen) sebagai back-end untuk Keras untuk memanfaatkan dukungan OpenCL PlaidML untuk semua GPU.

TensorFlow adalah back-end default untuk Keras, dan yang direkomendasikan untuk banyak kasus penggunaan yang melibatkan akselerasi GPU pada hardware Nvidia melalui CUDA dan cuDNN, serta untuk akselerasi TPU di Google Cloud. TensorFlow juga berisi tf.keraskelas internal , terpisah dari penginstalan Keras eksternal.

Keras memiliki lingkungan tingkat tinggi yang membuat penambahan lapisan ke jaringan saraf semudah satu baris kode dalam model Sekuensial, dan hanya memerlukan satu panggilan fungsi untuk menyusun dan melatih model. Keras memungkinkan Anda bekerja di tingkat yang lebih rendah jika Anda mau, dengan Model atau API fungsionalnya.

Keras memungkinkan Anda untuk turun lebih jauh, ke tingkat pengkodean Python, dengan membuat subkelas keras.Model, tetapi lebih memilih API fungsional jika memungkinkan. Keras juga memiliki scikit-learnAPI, sehingga Anda dapat menggunakan pencarian grid Scikit-learn untuk melakukan pengoptimalan hyperparameter di model Keras. 

Biaya: Sumber terbuka gratis. 

Platform: Linux, MacOS, Windows, atau Raspbian; TensorFlow, Theano, atau CNTK back-end. 

Baca review saya tentang Keras. 

MXNet

MXNet telah berevolusi dan meningkat cukup banyak sejak bergerak di bawah payung Apache Software Foundation pada awal tahun 2017. Meskipun sudah ada pekerjaan di Keras dengan back-end MXNet, antarmuka tingkat tinggi yang berbeda menjadi jauh lebih penting: Gluon. Sebelum penggabungan Gluon, Anda dapat menulis kode imperatif yang mudah atau kode simbolik cepat di MXNet, tetapi tidak keduanya sekaligus. Dengan Gluon, Anda dapat menggabungkan yang terbaik dari kedua dunia, dengan cara yang bersaing dengan Keras dan PyTorch.

Keuntungan yang diklaim untuk Gluon meliputi:

  • Kode sederhana dan mudah dipahami: Gluon menawarkan rangkaian lengkap blok bangunan jaringan neural plug-and-play, termasuk lapisan, pengoptimal, dan penginisialisasi yang telah ditentukan sebelumnya.
  • Fleksibel, struktur imperatif: Gluon tidak memerlukan model jaringan neural untuk didefinisikan secara kaku, tetapi lebih mendekatkan algoritme dan model pelatihan untuk memberikan fleksibilitas dalam proses pengembangan.
  • Grafik dinamis: Gluon memungkinkan pengembang untuk menentukan model jaringan saraf yang dinamis, yang berarti mereka dapat dibangun dengan cepat, dengan struktur apa pun, dan menggunakan aliran kontrol asli Python apa pun.
  • Kinerja tinggi: Gluon memberikan semua manfaat di atas tanpa memengaruhi kecepatan pelatihan yang disediakan mesin yang mendasarinya.

Keempat keuntungan ini, bersama dengan koleksi contoh model yang sangat luas, membawa Gluon / MXNet ke keseimbangan kasar dengan Keras / TensorFlow dan PyTorch untuk kemudahan pengembangan dan kecepatan pelatihan. Anda dapat melihat contoh kode untuk masing-masing kode ini di halaman utama Gluon dan diulangi di halaman ringkasan untuk Gluon API.

Gluon API mencakup fungsionalitas untuk lapisan jaringan saraf, jaringan saraf berulang, fungsi kerugian, metode kumpulan data dan kumpulan data vision, kebun binatang model, dan kumpulan metode jaringan saraf eksperimental yang dikontribusikan. Anda dapat dengan bebas menggabungkan gluon dengan standar MXNet dan NumPy modul, misalnya module,autograd , dan ndarray, serta dengan mengalir kontrol Python.

Gluon memiliki pilihan lapisan yang baik untuk model bangunan, termasuk lapisan dasar (Padat, Putus, dll.), Lapisan konvolusional, lapisan penyatuan, dan lapisan aktivasi. Masing-masing panggilan satu baris. Ini dapat digunakan, di antara tempat lain, di dalam wadah jaringan seperti gluon.nn.Sequential().

Biaya: Sumber terbuka gratis. 

Platform: Linux, MacOS, Windows, Docker, Raspbian, dan Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++, dan Clojure (percobaan). MXNet disertakan dalam AMI Deep Learning AWS.

Baca review saya tentang MXNet. 

PyTorch

PyTorch dibangun di atas Torch lama dan kerangka kerja Caffe2 baru. Seperti yang bisa Anda tebak dari namanya, PyTorch menggunakan Python sebagai bahasa skripnya, dan menggunakan back-end Torch C / CUDA yang telah berevolusi. Fitur produksi Caffe2 dimasukkan ke dalam proyek PyTorch.

PyTorch disebut sebagai "Tensor dan jaringan neural dinamis dengan Python dengan akselerasi GPU yang kuat". Apa artinya?

Tensor adalah konstruksi matematika yang banyak digunakan dalam fisika dan teknik. Tensor peringkat dua adalah jenis matriks khusus; mengambil hasil kali dalam sebuah vektor dengan tensor menghasilkan vektor lain dengan besaran dan arah baru. TensorFlow mengambil namanya dari cara tensor (bobot sinapsis) mengalir di sekitar model jaringannya. NumPy juga menggunakan tensor, tetapi menyebutnya sebagai ndarray.

Akselerasi GPU diberikan untuk sebagian besar kerangka kerja jaringan neural dalam modern. Sebuah dinamis jaringan saraf adalah salah satu yang dapat berubah dari iterasi ke iterasi, misalnya memungkinkan model PyTorch untuk menambah dan menghapus lapisan tersembunyi selama pelatihan untuk meningkatkan akurasi dan umum. PyTorch membuat ulang grafik dengan cepat di setiap langkah iterasi. Sebaliknya, TensorFlow secara default membuat grafik aliran data tunggal, mengoptimalkan kode grafik untuk performa, dan kemudian melatih model.

Meskipun mode eager execution adalah opsi yang cukup baru di TensorFlow, itu satu-satunya cara PyTorch berjalan: panggilan API dijalankan saat dipanggil, daripada ditambahkan ke grafik untuk dijalankan nanti. Itu mungkin tampak kurang efisien secara komputasi, tetapi PyTorch dirancang untuk bekerja seperti itu, dan tidak bungkuk dalam hal pelatihan atau kecepatan prediksi.

PyTorch mengintegrasikan pustaka akselerasi seperti Intel MKL dan Nvidia cuDNN dan NCCL (Nvidia Collective Communications Library) untuk memaksimalkan kecepatan. Tensor CPU dan GPU intinya serta back-end jaringan neural — TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network), dan THCUNN (Torch CUDA Neural Network) —ditulis sebagai library independen dengan C99 API. Pada saat yang sama, PyTorch bukanlah Python yang mengikat ke dalam kerangka kerja C ++ monolitik — tujuannya adalah agar Python terintegrasi secara mendalam dengan Python dan untuk memungkinkan penggunaan pustaka Python lainnya.

Biaya: Sumber terbuka gratis. 

Platform: Linux, MacOS, Windows; CPU dan GPU Nvidia. 

Baca review saya tentang PyTorch. 

Scikit-learn

Kerangka kerja Scikit-learn Python memiliki banyak pilihan algoritme pembelajaran mesin yang kuat, tetapi tidak ada pembelajaran mendalam. Jika Anda penggemar Python, Scikit-learn mungkin merupakan pilihan terbaik untuk Anda di antara perpustakaan pembelajaran mesin biasa.

Scikit-learn adalah pustaka pembelajaran mesin yang kuat dan terbukti untuk Python dengan bermacam-macam algoritme mapan dan grafik terintegrasi. Ini relatif mudah untuk diinstal, dipelajari, dan digunakan, dan memiliki contoh dan tutorial yang bagus.

Di sisi lain, Scikit-learn tidak mencakup pembelajaran mendalam atau pembelajaran penguatan, tidak memiliki model grafis dan prediksi urutan, dan tidak dapat benar-benar digunakan dari bahasa selain Python. Itu tidak mendukung PyPy, kompiler just-in-time Python, atau GPU. Meskipun demikian, kecuali perampokan kecilnya ke dalam jaringan saraf, ia tidak benar-benar memiliki masalah kecepatan. Ia menggunakan Cython (kompiler Python ke C) untuk fungsi yang harus cepat, seperti loop dalam.

Scikit-learn memiliki pilihan algoritma yang baik untuk klasifikasi, regresi, pengelompokan, pengurangan dimensi, pemilihan model, dan preprocessing. Ini memiliki dokumentasi dan contoh yang baik untuk semua ini, tetapi tidak memiliki jenis alur kerja terpandu untuk menyelesaikan tugas-tugas ini.

Scikit-learn mendapatkan nilai tertinggi untuk kemudahan pengembangan, sebagian besar karena semua algoritme berfungsi seperti yang didokumentasikan, API konsisten dan dirancang dengan baik, dan ada beberapa "ketidakcocokan impedansi" antara struktur data. Sangat menyenangkan bekerja dengan perpustakaan yang fitur-fiturnya telah disempurnakan secara menyeluruh dan bugnya telah dibersihkan sepenuhnya.

Di sisi lain, perpustakaan tidak mencakup pembelajaran mendalam atau pembelajaran penguatan, yang mengabaikan masalah yang sulit namun penting saat ini, seperti klasifikasi gambar yang akurat dan penguraian dan terjemahan bahasa real-time yang andal. Jelas, jika Anda tertarik dengan pembelajaran mendalam, Anda harus mencari di tempat lain.

Namun demikian, ada banyak masalah — mulai dari membangun fungsi prediksi yang menghubungkan observasi yang berbeda, hingga mengklasifikasikan observasi, hingga mempelajari struktur kumpulan data tanpa label — yang memungkinkan pembelajaran mesin lama tanpa memerlukan lusinan lapisan neuron, dan untuk area tersebut Scikit-learn memang sangat bagus.

Biaya: Sumber terbuka gratis. 

Platform: Membutuhkan Python, NumPy, SciPy, dan Matplotlib. Rilis tersedia untuk MacOS, Linux, dan Windows.

Baca ulasan saya tentang Scikit-learn. 

Percikan MLlib

Spark MLlib, library machine learning open source untuk Apache Spark, menyediakan algoritme machine learning umum seperti klasifikasi, regresi, pengelompokan, dan pemfilteran kolaboratif (tetapi tidak untuk jaringan neural dalam). Ini juga mencakup alat untuk ekstraksi fitur, transformasi, pengurangan dimensi, dan pemilihan; alat untuk membangun, mengevaluasi, dan menyesuaikan pipeline machine learning; dan utilitas untuk menyimpan dan memuat algoritme, model, dan pipeline, untuk penanganan data, dan untuk melakukan aljabar dan statistik linier.

Spark MLlib ditulis dalam Scala, dan menggunakan paket aljabar linier Breeze. Breeze bergantung pada netlib-java untuk pemrosesan numerik yang dioptimalkan, meskipun dalam distribusi open source itu berarti penggunaan CPU yang dioptimalkan. Databricks menawarkan kluster Spark khusus yang menggunakan GPU, yang berpotensi memberi Anda peningkatan kecepatan 10x lagi untuk melatih model pembelajaran mesin yang kompleks dengan data besar.

Spark MLlib mengimplementasikan banyak sekali algoritma dan model umum untuk klasifikasi dan regresi, ke titik di mana seorang pemula bisa menjadi bingung, tetapi seorang ahli kemungkinan besar akan menemukan pilihan model yang baik untuk data yang akan dianalisis, pada akhirnya. Untuk kebanyakan model ini, Spark 2.x menambahkan fitur penting dari penyetelan hyperparameter, juga dikenal sebagai pemilihan model. Tuning hyperparameter memungkinkan analis untuk mengatur grid parameter, estimator, dan evaluator, dan membiarkan metode validasi silang (memakan waktu tetapi akurat) atau melatih metode pemisahan validasi (lebih cepat tetapi kurang akurat) menemukan model terbaik untuk data.

Spark MLlib memiliki API lengkap untuk Scala dan Java, sebagian besar API penuh untuk Python, dan API parsial samar untuk R. Anda bisa merasakan cakupan yang baik dengan menghitung sampel: 54 contoh pembelajaran mesin Java dan 60 Scala, 52 mesin Python contoh pembelajaran, dan hanya lima contoh R. Menurut pengalaman saya, Spark MLlib paling mudah digunakan dengan notebook Jupyter, tetapi Anda pasti dapat menjalankannya di konsol jika menjinakkan pesan status Spark yang bertele-tele.

Spark MLlib menyediakan hampir semua yang Anda inginkan dalam pembelajaran mesin dasar, pemilihan fitur, pipeline, dan persistensi. Itu melakukan pekerjaan yang cukup baik dengan klasifikasi, regresi, pengelompokan, dan pemfilteran. Mengingat bahwa ini adalah bagian dari Spark, ia memiliki akses yang bagus ke database, aliran, dan sumber data lainnya. Di sisi lain, Spark MLlib tidak benar-benar disiapkan untuk membuat model dan melatih jaringan neural dalam dengan cara yang sama seperti TensorFlow, PyTorch, MXNet, dan Keras.

Biaya: Sumber terbuka gratis.

Platform: Spark berjalan pada sistem Windows dan mirip Unix (misalnya Linux, MacOS), dengan Java 7 atau lebih baru, Python 2.6 / 3.4 atau lebih baru, dan R 3.1 atau lebih baru. Untuk Scala API, Spark 2.0.1 menggunakan Scala 2.11. Spark membutuhkan Hadoop / HDFS.

Baca review saya tentang Spark MLlib.