Apa itu Grafik Komputasi Dinamis?


19

Kerangka kerja seperti PyTorch dan TensorFlow melalui TensorFlow Fold mendukung Dynamic Computational Graphs dan menerima perhatian dari para ilmuwan data.

Namun, tampaknya ada kekurangan sumber daya untuk membantu dalam memahami Grafik Komputasi Dinamis.

Keuntungan dari Dynamic Computational Graphs tampaknya mencakup kemampuan untuk beradaptasi dengan jumlah yang bervariasi dalam data input. Sepertinya mungkin ada pemilihan otomatis jumlah lapisan, jumlah neuron di setiap lapisan, fungsi aktivasi, dan parameter NN lainnya, tergantung pada setiap instance input selama pelatihan. Apakah ini karakterisasi yang akurat?

Apa kelebihan model dinamis dibanding model statis? Apakah itu sebabnya DCGs menerima banyak perhatian? Singkatnya, apa itu DCG dan apa pro dan kontra penggunaannya?

Jawaban:


8

Dua Jawaban Pendek

Jawaban singkat dari perspektif teoretis adalah bahwa ...

Grafik Komputasi Dinamis adalah sistem yang bisa berubah yang direpresentasikan sebagai grafik aliran data antar operasi. Ini dapat divisualisasikan sebagai bentuk yang berisi teks yang dihubungkan oleh panah, dimana simpul (bentuk) mewakili operasi pada data yang mengalir di sepanjang tepi (panah).

Perhatikan bahwa grafik seperti itu mendefinisikan dependensi dalam aliran data tetapi tidak harus urutan temporal dari aplikasi operasi, yang dapat menjadi ambigu dalam mempertahankan keadaan dalam simpul atau siklus dalam grafik tanpa mekanisme tambahan untuk menentukan prioritas temporal.

Jawaban singkat dari perspektif pengembangan aplikasi adalah bahwa ...

Kerangka kerja Dynamic Computational Graph adalah sistem perpustakaan, antarmuka, dan komponen yang menyediakan antarmuka waktu berjalan yang fleksibel, terprogram, yang memfasilitasi konstruksi dan modifikasi sistem dengan menghubungkan serangkaian operasi yang terbatas tetapi mungkin dapat diperluas.

Kerangka PyTorch

PyTorch adalah integrasi kerangka kerja Torch dengan bahasa Python dan penataan data. Torch bersaing dengan Theano, TensorFlow, dan kerangka kerja konstruksi sistem komputasi dinamis lainnya.


———   Pendekatan Tambahan untuk Memahami   ———

Struktur Komputasi Sewenang-wenang dari Tensor Diskret Sewenang-wenang

Salah satu komponen yang dapat digunakan untuk membangun sistem komputasi adalah elemen yang dirancang untuk saling berhubungan untuk membuat jaringan saraf. Ketersediaan ini mendukung pembelajaran mendalam konstruksi dan kembali menyebarkan jaringan saraf. Berbagai macam sistem lain yang melibatkan perakitan komponen yang bekerja dengan data multidimensi yang berpotensi dalam struktur komputasi yang ditentukan secara sewenang-wenang juga dapat dibangun.

Data dapat berupa nilai skalar, seperti angka titik mengambang, bilangan bulat, atau string, atau agregasi ortogonal dari ini, seperti vektor, matriks, kubus, atau kubus hiper. Operasi pada generalisasi dari formulir data ini adalah tensor diskrit dan struktur yang dibuat dari perakitan operasi tensor ke dalam sistem kerja adalah aliran data.

Poin Referensi untuk Memahami Konsep Komputasi Dinamis

Grafik Komputasi Dinamis bukan konsep yang sangat baru, meskipun istilahnya relatif baru. Ketertarikan pada DCG di antara para ilmuwan komputer tidak sama baru dengan istilah Data Scientist. Meskipun demikian, pertanyaannya dengan tepat menyatakan bahwa ada beberapa sumber daya yang ditulis dengan baik tersedia (selain contoh kode) dari mana seseorang dapat mempelajari konsep keseluruhan seputar kemunculan dan penggunaannya.

Salah satu titik acuan yang memungkinkan untuk mulai memahami DCG adalah pola desain perintah yang merupakan salah satu dari banyak pola desain yang dipopulerkan oleh para pendukung desain berorientasi objek. Pola desain perintah menganggap operasi sebagai unit perhitungan yang detailnya disembunyikan dari objek perintah yang memicu mereka. Pola desain Command sering digunakan bersama dengan pola desain Interpreter.

Dalam kasus DCG, pola desain Komposit dan Fasad juga terlibat untuk memfasilitasi operasi tensor diskrit plug-and-play definisi yang dapat dirakit bersama dalam pola untuk membentuk sistem.

Kombinasi khusus dari pola desain untuk membentuk sistem ini sebenarnya adalah abstraksi perangkat lunak yang sebagian besar menyerupai gagasan radikal yang menyebabkan munculnya arsitektur Von Neumann, pusat bagi kebanyakan komputer saat ini. Kontribusi Von Neumann terhadap kemunculan komputer adalah gagasan untuk mengizinkan algoritma arbitrer yang mengandung logika Boolean, aritmatika, dan percabangan untuk direpresentasikan dan disimpan sebagai data - suatu program.

Cikal bakal DCG lainnya adalah mesin ekspresi. Mesin ekspresi dapat sesederhana mesin aritmatika dan serumit aplikasi seperti Mathematica. Sebuah mesin aturan mirip dengan DCG kecuali bahwa mesin aturan adalah deklaratif dan meta-aturan untuk mesin aturan beroperasi pada deklarasi tersebut.

Program Memanipulasi Program

Apa kesamaan ini dengan DCG adalah bahwa aliran data dan operasi yang akan diterapkan dapat ditentukan pada saat dijalankan. Seperti DCG, beberapa pustaka dan aplikasi perangkat lunak ini memiliki API atau mekanisme lain untuk mengizinkan operasi diterapkan pada detail fungsional. Ini pada dasarnya ide program yang memungkinkan manipulasi program lain.

Titik referensi lain untuk memahami prinsip ini pada tingkat primitif adalah pernyataan sakelar kasus yang tersedia dalam beberapa bahasa komputer. Ini adalah struktur kode sumber dimana programmer pada dasarnya menyatakan, "Kami tidak yakin apa yang harus dilakukan, tetapi nilai variabel ini akan memberi tahu model eksekusi waktu nyata apa yang harus dilakukan dari serangkaian kemungkinan."

Pernyataan beralih-kasus adalah abstraksi yang memperluas gagasan menunda keputusan ke arah perhitungan sampai waktu berjalan. Ini adalah versi perangkat lunak dari apa yang dilakukan di dalam unit kontrol CPU kontemporer dan perpanjangan konsep menunda beberapa detail algoritma. Tabel functors (function pointer) dalam C atau polimorfisme dalam C ++, Java, atau Python adalah contoh primitif lainnya.

Dynamic Computation mengambil abstraksi lebih lanjut. Mereka sangat menentang jika tidak semua spesifikasi perhitungan dan hubungan di antara mereka untuk menjalankan waktu. Generalisasi komprehensif ini memperluas kemungkinan modifikasi fungsional pada saat run time.

Representasi Grafik yang Diarahkan untuk Komputasi

Itulah model Dynamic Computational. Sekarang untuk bagian Grafik.

Setelah seseorang memutuskan untuk menunda pilihan operasi yang akan dibentuk sebelum waktu berjalan, sebuah struktur diperlukan untuk menahan operasi, hubungan ketergantungan mereka, dan mungkin memetakan parameter. Representasi seperti itu lebih dari sekadar pohon sintaksis (seperti pohon yang mewakili hierarki kode sumber). Tidak seperti program bahasa assembly atau kode mesin, itu harus mudah dan bisa berubah-ubah. Itu harus mengandung lebih banyak informasi daripada grafik aliran data dan lebih dari sekadar peta memori. Seperti apa struktur data yang menentukan struktur komputasi itu?

Untungnya, algoritma apa pun yang arbitrer, terbatas, dan terbatas dapat direpresentasikan sebagai grafik dependensi antara operasi yang ditentukan. Dalam grafik seperti itu, simpul (sering direpresentasikan sebagai simpul dari berbagai bentuk ketika ditampilkan) mewakili operasi yang dilakukan pada data dan tepi (sering diwakili sebagai panah saat ditampilkan) adalah representasi digital dari informasi yang berasal dari beberapa operasi (atau input sistem) dan di mana operasi lain (atau output sistem) bergantung.

Perlu diingat bahwa grafik yang diarahkan bukan merupakan algoritma (dalam urutan operasi yang tepat ditentukan) maupun deklarasi (bahwa data dapat disimpan secara eksplisit dan loop, cabang, fungsi, dan modul dapat didefinisikan dan disarangkan).

Sebagian besar kerangka kerja Grafik Komputasi Dinamis dan perpustakaan memungkinkan komponen untuk melakukan perhitungan pada input komponen yang mendukung pembelajaran mesin. Verteks dalam grafik yang diarahkan dapat berupa simulasi neuron untuk pembangunan jaringan saraf atau komponen yang mendukung kalkulus diferensial. Kerangka kerja ini menyajikan kemungkinan konstruksi yang dapat digunakan untuk pembelajaran mendalam dalam arti yang lebih umum.

Dalam Konteks Sejarah Komputer

Sekali lagi, tidak ada yang disebutkan sejauh ini baru bagi ilmu komputer. LISP memungkinkan skema komputasi untuk dimodifikasi oleh algoritma lain. Dan dimensi dan angka input yang digeneralisasi dibangun ke dalam sejumlah antarmuka dan protokol plug-and-play yang sudah lama ada. Gagasan tentang kerangka kerja untuk belajar kembali ke periode pertengahan abad ke-20 yang sama juga.

Apa yang baru dan semakin populer adalah kombinasi tertentu dari fitur terintegrasi dan set terminologi terkait, agregasi terminologi yang ada untuk masing-masing fitur, yang mengarah ke basis yang lebih luas untuk dipahami oleh mereka yang telah belajar untuk dan bekerja di industri perangkat lunak .

  • Rasa kontemporer (trendi) dari antarmuka API
  • Orientasi objek
  • Dukungan tensor diskrit
  • Abstraksi grafik yang diarahkan
  • Interoperabilitas dengan bahasa dan paket populer yang mendukung data besar, penambangan data, pembelajaran mesin, dan analisis statistik
  • Dukungan untuk pembangunan jaringan saraf yang sewenang-wenang dan sistematis
  • Kemungkinan adaptasi struktural jaringan saraf dinamis (yang memfasilitasi eksperimen pada plastisitas saraf)

Banyak dari kerangka kerja ini mendukung kemampuan beradaptasi untuk mengubah dimensi input (jumlah dimensi dan kisaran masing-masing).

Kemiripan dengan Pohon Simbol Abstrak dalam Penyusun

Grafik ketergantungan input dan output operasi juga muncul di dalam pohon simbol abstrak (AST), yang dibangun oleh beberapa kompiler yang lebih progresif selama penafsiran struktur kode sumber. AST kemudian digunakan untuk menghasilkan instruksi assembler atau instruksi mesin dalam proses menghubungkan dengan perpustakaan dan membentuk executable. AST adalah grafik berarah yang mewakili struktur data, operasi yang dilakukan, dan aliran kontrol yang ditentukan oleh kode sumber.

Aliran data hanyalah serangkaian ketergantungan antara operasi, yang harus melekat pada AST agar AST dapat digunakan untuk membuat instruksi eksekusi dalam assembler atau kode mesin yang secara tepat mengikuti algoritma yang ditentukan dalam kode sumber.

Kerangka kerja Computational Graph Dinamis, tidak seperti statement switch-case atau model AST dalam kompiler, dapat dimanipulasi secara real-time, dioptimalkan, disetel (seperti dalam kasus jaring plastik buatan), terbalik, diubah oleh tensor, dihancurkan, dimodifikasi untuk menambah atau menghapus entropi, bermutasi menurut seperangkat aturan, atau diterjemahkan ke dalam bentuk turunan. Mereka dapat disimpan sebagai file atau stream dan kemudian diambil darinya.

Ini adalah konsep sepele untuk programmer LISP atau mereka yang memahami sifat rekomendasi John von Neumann untuk menyimpan spesifikasi operasional sebagai data. Dalam hal ini nanti, suatu program adalah aliran data untuk menginstruksikan, melalui kompiler dan sistem operasi, sistem komputasi dinamis yang diimplementasikan dalam sirkuit digital VLSI.

Mencapai Dimensi dan Numerasi yang Dapat Disesuaikan

Dalam pertanyaannya adalah komentar bahwa seseorang tidak, "Perlu memiliki set data - bahwa semua instance di dalamnya memiliki jumlah input yang sama dan tetap." Pernyataan itu tidak mempromosikan pemahaman yang akurat. Ada cara yang lebih jelas untuk mengatakan apa yang benar tentang kemampuan beradaptasi input.

Antarmuka antara DCG dan komponen lain dari keseluruhan sistem harus ditentukan, tetapi antarmuka ini mungkin memiliki dimensi atau angka dinamis yang terintegrasi di dalamnya. Ini adalah masalah abstraksi.

Misalnya, tipe objek tensor diskrit menghadirkan antarmuka perangkat lunak tertentu, namun tensor adalah konsep matematika dinamis yang digunakan untuk antarmuka umum. Tensor diskrit dapat berupa skalar, vektor, matriks, kubus, atau hiper-kubus, dan rentang variabel dependen untuk setiap dimensi dapat bervariasi.

Ini dapat menjadi kasus bahwa jumlah node dalam lapisan sistem yang didefinisikan dalam Grafik Komputasi Dinamis dapat menjadi fungsi dari jumlah input dari jenis tertentu, dan itu juga dapat menjadi perhitungan yang ditunda untuk menjalankan waktu.

Kerangka kerja dapat diprogram untuk memilih struktur lapisan (perpanjangan paradigma switch-case lagi) atau menghitung parameter yang menentukan ukuran struktur dan kedalaman atau aktivasi. Namun, fitur-fitur canggih ini tidak memenuhi kualifikasi kerangka kerja sebagai kerangka kerja Grafik Komputasi Dinamis.

Apa yang Memenuhi Syarat untuk Mendukung Grafik Komputasi Dinamis?

Untuk memenuhi syarat sebagai kerangka kerja Computational Graph Dinamis, kerangka kerja tersebut harus semata mendukung penangguhan penentuan algoritma untuk menjalankan waktu, oleh karena itu membuka pintu ke sejumlah besar operasi pada dependensi komputasi dan aliran data pada waktu berjalan. Dasar-dasar operasi yang ditangguhkan harus mencakup spesifikasi, manipulasi, eksekusi, dan penyimpanan grafik yang diarahkan yang mewakili sistem operasi.

Jika spesifikasi algoritme TIDAK ditunda sampai waktu berjalan tetapi dikompilasi ke dalam executable yang dirancang untuk sistem operasi tertentu dengan hanya fleksibilitas tradisional yang disediakan oleh bahasa tingkat rendah seperti jika-kemudian-lain, sakelar-kasus, polimorfisme, susunan Functor, dan string panjang variabel, itu dianggap sebagai algoritma statis.

Jika operasi, dependensi di antara mereka, aliran data, dimensi data dalam aliran, dan kemampuan adaptasi sistem terhadap angka dan dimensi input adalah semua variabel pada waktu berjalan dengan cara menciptakan sistem yang sangat adaptif, maka algoritma ini dinamis dengan cara ini.

Sekali lagi, program LISP yang beroperasi pada program LISP, mesin aturan dengan kemampuan meta-aturan, mesin ekspresi, perpustakaan objek tensor diskrit, dan bahkan pola desain Perintah yang relatif sederhana semuanya dinamis dalam beberapa hal, menunda beberapa karakteristik untuk menjalankan waktu. DCG fleksibel dan komprehensif dalam kemampuannya untuk mendukung konstruksi komputasi yang sewenang-wenang sedemikian rupa untuk menciptakan lingkungan yang kaya untuk eksperimen pembelajaran yang mendalam dan implementasi sistem.

Kapan Menggunakan Grafik Komputasi Dinamis

Pro dan kontra DCGs sepenuhnya masalah khusus. Jika Anda menyelidiki berbagai konsep pemrograman dinamis di atas dan yang lain yang mungkin terkait erat dengan mereka dalam literatur terkait, akan menjadi jelas apakah Anda memerlukan Grafik Komputasi Dinamis atau tidak.

Secara umum, jika Anda perlu mewakili model perhitungan yang berubah-ubah dan sewenang-wenang untuk memfasilitasi penerapan sistem pembelajaran yang mendalam, sistem manipulasi matematika, sistem adaptif, atau konstruk perangkat lunak fleksibel dan kompleks lainnya yang memetakan paradigma DCG dengan baik, maka bukti konsep menggunakan kerangka kerja Dynamic Computatonal Graph adalah langkah pertama yang baik dalam mendefinisikan arsitektur perangkat lunak Anda untuk solusi masalah.

Tidak semua perangkat lunak pembelajaran menggunakan DCG, tetapi mereka sering merupakan pilihan yang baik, ketika manipulasi sistematis dan mungkin terus menerus dari struktur komputasi yang sewenang-wenang merupakan persyaratan waktu berjalan.


" PyTorch adalah integrasi kerangka kerja Torch untuk bahasa Python " - Saya pikir pernyataan ini dapat disalahartikan sebagai " PyTorch adalah pustaka pembungkus untuk kerangka kerja Torch untuk bahasa Python ", yang akan menjadi pernyataan yang salah. Anda mungkin harus mengulanginya.
nbro

" Dengan kerangka kerja Grafik Komputasi Dinamis, tidak seperti dengan pernyataan kasus sakelar atau model AST perantara dalam kompiler, orang dapat memanipulasi operasi " ... " menerjemahkannya " - Apa yang Anda maksud dengan "menerjemahkan operasi"?
nbro

1

Singkatnya, grafik perhitungan dinamis dapat memecahkan beberapa masalah yang tidak dapat dilakukan oleh statis, atau tidak efisien karena tidak memungkinkan pelatihan dalam batch.

Untuk lebih spesifik, pelatihan jaringan saraf modern biasanya dilakukan dalam batch , yaitu memproses lebih dari satu instance data pada suatu waktu. Beberapa peneliti memilih ukuran bets seperti 32, 128 sementara yang lain menggunakan ukuran bets lebih besar dari 10.000. Pelatihan satu contoh biasanya sangat lambat karena tidak dapat memanfaatkan paralelisme perangkat keras.

Misalnya, dalam Natural Language Processing, peneliti ingin melatih jaringan saraf dengan kalimat yang berbeda panjang. Menggunakan grafik perhitungan statis, mereka biasanya harus terlebih dahulu melakukan padding , yaitu menambahkan simbol yang tidak berarti ke awal atau akhir kalimat yang lebih pendek untuk membuat semua kalimat dengan panjang yang sama. Operasi ini banyak menyulitkan pelatihan (mis. Masking perlu, mendefinisikan kembali metrik evaluasi, membuang sejumlah besar waktu perhitungan pada simbol-simbol empuk). Dengan grafik perhitungan dinamis, padding tidak lagi diperlukan (atau hanya diperlukan dalam setiap batch).

Contoh yang lebih rumit adalah (menggunakan jaringan saraf untuk) memproses kalimat berdasarkan pohon parsingnya. Karena setiap kalimat memiliki parsing tree sendiri, mereka masing-masing memerlukan grafik perhitungan yang berbeda, yang berarti pelatihan dengan grafik perhitungan statis hanya dapat memungkinkan pelatihan instance tunggal. Contoh yang mirip dengan ini adalah Jaringan Syaraf Rekursif .


0

Banyak jaringan saraf yang dalam memiliki grafik aliran data statis, yang secara kasar berarti bahwa struktur komputasinya (grafik komputasinya) tetap stabil di atas input yang berbeda. Ini bagus karena kami dapat memanfaatkan fitur ini untuk kinerja, seperti dengan mini-batching (memproses banyak input sekaligus).

Tetapi beberapa jaringan saraf dapat memiliki grafik perhitungan yang berbeda untuk setiap input. Ini menyebabkan beberapa masalah (kesulitan batching, konstruksi grafik mahal secara komputasi), dan karenanya jaringan ini agak sulit digunakan.

Makalah yang Anda taut mengatasi masalah ini dengan mengusulkan metode yang dapat mengelompokkan beberapa grafik perhitungan menjadi satu. Kemudian, kita bisa melakukan teknik NN seperti biasa.

Manfaatnya adalah speedup, yang memberi insentif kepada para peneliti untuk menjelajahi berbagai struktur dan menjadi lebih kreatif.

Keuntungan dari Dynamic Computational Graphs tampaknya mencakup kemampuan untuk beradaptasi dengan jumlah yang bervariasi dalam data input. Sepertinya mungkin ada pemilihan otomatis jumlah lapisan, jumlah neuron di setiap lapisan, fungsi aktivasi, dan parameter NN lainnya, tergantung pada setiap instance input selama pelatihan. Apakah ini karakterisasi yang akurat?

Ini salah.


0

Grafik Komputasi Dinamis adalah CG sederhana yang dimodifikasi dengan tingkat abstraksi yang lebih tinggi. Kata 'Dinamis' menjelaskan semuanya: bagaimana data mengalir melalui grafik tergantung pada struktur input, yaitu struktur DCG bisa berubah dan tidak statis. Salah satu aplikasi penting adalah dalam jaringan saraf NLP.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.