Halo rekan!
Dari berita terbaru tentang inovasi mendatang kami di bidang ML / DL:
Nishant Shakla, "
Machine Learning with Tensorflow " - sebuah buku tentang tata letak, diharapkan di toko-toko pada bulan Januari
Delip Rao, Brian McMahan, "
Pemrosesan Bahasa Alami di PyTorch " - kontrak ditandatangani, kami berencana untuk memulai terjemahan pada bulan Januari.
Dalam konteks ini, kami sekali lagi ingin kembali ke topik yang menyakitkan - studi yang buruk tentang tema ML / DL di Jawa. Karena ketidakmatangan solusi dan algoritma Java ini, kami pernah memutuskan untuk meninggalkan buku DL4J Gibson dan Patterson, dan artikel Humphrey Sheil yang diterbitkan hari ini menunjukkan bahwa kami mungkin benar. Kami mengundang Anda untuk berkenalan dengan pemikiran penulis tentang bagaimana Java akhirnya bisa bersaing dengan Python dalam pembelajaran mesin
Baru-baru ini, saya memberikan
ceramah tentang sekarang dan masa depan pembelajaran mesin dan mendalam (ML / DL) di perusahaan. Dalam konteks perusahaan besar, lebih banyak topik dan masalah yang diterapkan lebih relevan daripada di konferensi penelitian - misalnya, bagaimana tim saya dan saya dapat mulai menggunakan ML, dan cara terbaik untuk mengintegrasikan ML dengan sistem yang kami miliki dalam operasi. Kemudian mulai diskusi panel tentang Java dan pembelajaran mesin.
Bahasa Jawa praktis tidak ada di segmen pembelajaran mesin. Hampir tidak ada kerangka kerja ML yang akan ditulis di Jawa (ada
DL4J , tetapi secara pribadi, saya tidak tahu siapa pun yang akan menggunakannya,
MXNet memiliki API di Scala, tetapi tidak di Jawa, dan kerangka kerja ini sendiri tidak ditulis di Jawa) . Tensorflow memiliki
API yang tidak lengkap di Jawa , namun, Jawa memiliki andil besar dalam pengembangan perusahaan, selama 20 tahun terakhir, triliunan dolar telah diinvestasikan dalam bahasa ini di hampir semua bidang subjek yang dapat dibayangkan: layanan keuangan, transaksi elektronik, toko online, daftar telekomunikasi bisa berlangsung selamanya. Dalam pembelajaran mesin, "first among equals" adalah Python, bukan Java. Secara pribadi, saya sangat suka memprogram dalam Python dan Java, tetapi
Frank Greco merumuskan pertanyaan menarik yang mendorong saya untuk berpikir:
Mengapa Java harus bersaing dengan Python di ML? Mengapa tidak mengambil tugas membawa dukungan ML serius ke pikiran?
Apakah ini penting?Mari kita benarkan topik ini. Sejak 1998, bahasa Jawa telah ada di Liga Premier, tanpa itu tidak ada peristiwa evolusi dan revolusioner di perusahaan. Kita berbicara tentang teknologi web dan yang seluler, tentang membandingkan peramban dan solusi asli, tentang sistem pengiriman pesan, dukungan globalisasi i18n dan l10n, penskalaan horizontal dan dukungan penyimpanan untuk informasi perusahaan apa pun yang dapat Anda bayangkan - dari basis data relasional hingga Pencarian Elastics
Tingkat dukungan tanpa syarat ini memberikan budaya yang sangat sehat yang telah dikembangkan dalam perintah-Jawa: "kita bisa", "gulung lengan baju Anda dan tulis kode." Tidak ada komponen magis atau API yang tidak dapat ditambah atau diganti oleh tim pengembang Java yang baik.
Tetapi prinsip ini tidak bekerja dalam pembelajaran mesin. Di sini, perintah Java memiliki dua opsi:
- Latih / latih kembali dengan Python.
- Gunakan API pihak ketiga untuk menambahkan kemampuan pembelajaran mesin ke sistem perusahaan Anda yang ada.
Tidak satu pun dari opsi ini yang dapat disebut benar-benar tidak berbahaya. Yang pertama membutuhkan banyak waktu dan investasi di muka, ditambah biaya dukungan yang berkelanjutan. Pada opsi kedua, kita berisiko menjadi tergantung pada pemasok, kehilangan dukungan pemasok, ditambah harus bekerja dengan komponen pihak ketiga (membayar harga untuk transisi jaringan pada saat yang sama), bermigrasi ke sistem di mana mungkin ada persyaratan keamanan yang kritis dan Anda harus berbagi informasi dengan oleh seseorang di luar organisasi Anda. Dalam beberapa situasi, ini tidak dapat diterima.
Yang paling merusak dalam kasus ini (menurut saya) adalah potensi
kerusakan budaya - tim tidak dapat mengubah kode yang tidak mereka pahami atau tidak bisa pertahankan, sehingga tanggung jawabnya kabur, dan pekerjaan utama harus didelegasikan kepada orang lain. Tim yang hanya terdiri dari pengembang Java berisiko kehilangan gelombang besar berikutnya, yang akan membanjiri komputasi perusahaan - gelombang pembelajaran mesin.
Oleh karena itu, penting dan diinginkan bahwa dukungan kelas satu untuk pembelajaran mesin muncul dalam bahasa dan platform Java. Jika tidak, ada risiko bahwa dalam 5-10 tahun ke depan Jawa akan digantikan oleh bahasa lain di mana ML lebih baik didukung.
Mengapa Python begitu dominan dalam ML?Untuk memulai, mari kita bahas mengapa Python telah menjadi pemimpin dalam pembelajaran mesin dan pembelajaran mendalam.
Saya curiga semuanya dimulai dengan fitur yang sama sekali tidak bersalah - dukungan untuk pemotongan daftar. Dukungan ini dapat
__getitem__
: setiap kelas Python yang mengimplementasikan metode
__getitem__
dan
__setitem__
dapat dipotong menggunakan sintaks ini. Daftar berikut menunjukkan betapa sederhana dan alami fitur Python ini.
a = [1, 2, 3, 4, 5, 6, 7, 8] print(a[1:4])
Tentu saja tidak semuanya. Kode python jauh lebih ringkas dan ringkas dibandingkan dengan kode Java "lama". Pengecualian didukung, tetapi tidak dicentang, dan pengembang dapat dengan mudah menulis skrip Python yang cocok sebagai barang habis pakai - coba "cara kerjanya" tanpa tenggelam dalam pandangan dunia Java "semuanya adalah kelas". Python mudah untuk terlibat.
Namun, menurut pendapat saya, faktor terpenting dari keunggulan (yang tidak mencegah saya mengenali kerja keras yang dilakukan komunitas Python untuk menjaga hubungan antara Python 2.7 dan Python 3) adalah mereka berhasil membuat perpustakaan yang dirancang lebih baik dan lebih cepat untuk operasi. dengan angka - NumPy. Numpy dibangun di sekitar
ndarray , sebuah objek yang merupakan array N-dimensional. Saya mengutip dokumentasi: “
Objek utama dalam NumPy adalah array multidimensi yang homogen. Ini adalah tabel elemen (biasanya angka), semua dari tipe yang sama, diindeks oleh tupel bilangan bulat positif. " Semua pekerjaan NumPy didasarkan pada penulisan data Anda ke ndarray dan operasi selanjutnya pada mereka. NumPy mendukung berbagai opsi pengindeksan, siaran, vektorisasi untuk kecepatan, dan umumnya memungkinkan pengembang untuk dengan mudah membuat dan memanipulasi susunan numerik yang besar.
Daftar berikut menunjukkan dalam praktik pengindeksan dan penyiaran di ndarray - ini adalah operasi utama dalam ML / DL.
import numpy as np
Bekerja dengan array numerik multidimensi besar, kami menandai jantung pemrograman untuk pembelajaran mesin, dan khususnya - pembelajaran mendalam. Deep neural networks adalah kisi-kisi node dan edge yang dimodelkan pada level angka. Operasi runtime ketika melatih jaringan atau melakukan output berdasarkan itu membutuhkan perkalian matriks cepat.
Berkat NumPy, banyak yang telah dilakukan -
scipy ,
panda, dan banyak perpustakaan berbasis NumPy lainnya. Perpustakaan pembelajaran
terdepan (
Tensorflow dari Google,
PyTorch dari Facebook) serius mengembangkan Python. Tensorflow memiliki API lain untuk Go, Java, dan JavaScript, tetapi tidak lengkap dan dianggap tidak stabil. PyTorch awalnya ditulis dalam bahasa Lua, dan mengalami peningkatan popularitas yang nyata ketika pada tahun 2017 ia pindah dari bahasa yang terus terang ini menjadi ekosistem ML Python utama pada tahun 2017.
Kelemahan PythonPython bukan bahasa yang ideal, juga bukan runtime yang paling populer, CPython. Ini memiliki kunci juru bahasa global (
GIL ), jadi penskalaan tidak mudah. Selain itu, kerangka kerja pembelajaran mendalam Python seperti PyTorch dan Tensorflow masih meneruskan metode kunci untuk implementasi buram. Misalnya, pustaka
cuDNN NVidia
memiliki dampak besar pada ruang lingkup implementasi PyTorch
RNN / LSTM . RNN dan LSTM (jaringan saraf berulang dan memori jangka pendek jangka panjang) adalah alat DL yang sangat penting untuk aplikasi bisnis, khususnya karena mereka berspesialisasi dalam klasifikasi dan prediksi serangkaian panjang variabel yang berurutan - misalnya. navigasi web, analisis clickstream, analisis fragmen teks, peristiwa pengguna, dll.
Demi ketidakberpihakan terhadap Python, harus dicatat bahwa opacity / pembatasan tersebut berlaku untuk hampir semua kerangka kerja untuk ML / DL kecuali ditulis dalam C atau C ++. Mengapa Karena untuk mencapai kinerja maksimum untuk operasi dasar, yang sangat sarat muatan, seperti perkalian matriks, pengembang sedekat mungkin dengan logam.
Apa yang dibutuhkan Java untuk bersaing di bidang ini?Saya berasumsi bahwa platform Java membutuhkan tiga tambahan besar. Jika diterapkan, maka ekosistem yang sehat dan sejahtera untuk pembelajaran mesin akan mulai menyebar:
- Tambahkan dukungan pengindeksan / pengiris asli ke inti bahasa sehingga Anda dapat bersaing dengan Python dengan semua kemudahan penggunaan dan ekspresifnya. Ada kemungkinan bahwa kemampuan seperti itu harus dibangun di Jawa di sekitar koleksi yang sudah ada, antarmuka <E> Daftar . Untuk dukungan semacam itu, perlu juga mengenali kebutuhan kelebihan beban - perlu memenuhi poin # 2.
- Buat implementasi tensor - mungkin dalam paket
java.math
, tetapi juga dengan keluar ke API Koleksi. Rangkaian kelas dan antarmuka ini dapat bekerja setara dengan ndarray
dan memberikan dukungan tambahan untuk pengindeksan, khususnya, tiga jenis pengindeksan yang tersedia di NumPy: akses ke bidang, irisan sederhana, dan pengindeksan lanjutan yang diperlukan untuk pemrograman. - Memberikan penyiaran - skalar dan tensor dimensi yang sewenang-wenang (namun kompatibel).
Jika ketiga tugas ini dapat dilakukan dalam inti bahasa Jawa dan runtime, kami akan membuka cara untuk menciptakan
"NumJava" , setara dengan NumPy.
Proyek Panama juga dapat berguna untuk menyediakan akses tingkat rendah yang di-vektorisasi ke operasi tensor cepat yang dilakukan pada CPU, GPU, TPU dan tidak hanya agar Java ML dapat menjadi yang tercepat dari jenisnya.
Saya sama sekali tidak mengatakan bahwa add-on ini sepele - tidak, jauh dari itu, tetapi manfaat potensial mereka untuk seluruh platform Java sangat besar.
Daftar berikut menunjukkan bagaimana contoh siaran dan pengindeksan kami dari NumPy mungkin terlihat seperti NensJava dengan kelas
Tensor
, didukung oleh sintaksis pengiris berbasis bahasa dan pembatasan saat ini pada operator yang kelebihan muatan.
Perspektif dan Panggilan untuk BertindakKita semua tahu bahwa pembelajaran mesin akan mengubah dunia bisnis tidak kurang dari pada waktu - database relasional, Internet dan teknologi seluler. Ada banyak hype di sekitarnya, tetapi beberapa artikel dan kesimpulan yang sangat meyakinkan muncul. Sebagai contoh,
artikel ini menjelaskan masa depan ketika sistem dapat mempelajari konfigurasi optimal dari server database, server web dan server aplikasi, di latar belakang, menggunakan pembelajaran mesin. Anda bahkan tidak harus menggunakan ML sendiri di sistem Anda sendiri - pasti, salah satu vendor Anda akan dapat melakukan ini.
Berdasarkan posisi pragmatis yang disajikan dalam artikel ini, Anda dapat menulis kerangka kerja Java untuk pembelajaran mesin dan pembelajaran mendalam (bekerja pada JRE) di Jawa daripada kerangka kerja yang ada untuk web, penyimpanan jangka panjang atau parsing XML - bayangkan! Anda dapat membayangkan kerangka kerja Java dengan dukungan untuk
jaringan saraf convolutional (CNNs) untuk implementasi visi komputer mutakhir, seperti implementasi LSTM jaringan saraf berulang untuk dataset serial (yang merupakan kunci penting untuk bisnis), dengan fitur ML paling canggih, seperti diferensiasi otomatis dan banyak lagi. Kemudian kerangka kerja ini akan membantu untuk mengimplementasikan dan mendorong generasi berikutnya dari sistem perusahaan yang dapat diintegrasikan dengan sistem Java yang ada, menggunakan semua alat yang sama - IDE, kerangka kerja pengujian, integrasi berkelanjutan. Yang paling penting, itu akan ditulis dan didukung oleh orang-orang kami. Jika Anda seorang penggemar Java - tidakkah Anda menyukai prospek itu?