Panduan Deep Learning dalam Bahasa Portugis
Panduan Deep Learning dalam Bahasa Portugis
Tujuan pertama kami sudah tercapai dan 50 bab sudah dikembangkan. Tujuan kedua
meta adalah mencapai 100 bab, semuanya 100% dalam bahasa Portugis. Dengan cara ini, kami berharap dapat berkontribusi
untuk pertumbuhan Deep Learning dan Kecerdasan Buatan di Brasil.
Ikuti kami dalam perjalanan luar biasa ini!
Tim DAS
[Link]
BAB 1
Deep Learning dan Badai Sempurna
Minat terhadap Pembelajaran Mesin (Machine Learning) meledak dalam dekade terakhir.
dunia di sekitar kita sedang mengalami transformasi dan kita melihat interaksi yang semakin
maior dari aplikasi komputer dengan manusia. Perangkat lunak deteksi spam,
sistem rekomendasi, penandaan di foto media sosial, asisten pribadi yang diaktifkan
melalui suara, mobil otonom, ponsel cerdas dengan pengenalan wajah dan masih banyak lagi.
Dan minat terhadap Pembelajaran Mesin semakin jelas terlihat oleh jumlah yang semakin banyak
dari konferensi, pertemuan, artikel, buku, kursus, pencarian di Google, dan profesional serta perusahaan
mencari memahami apa itu dan bagaimana menggunakan pembelajaran mesin, meskipun banyak yang masih
membingungkan apa yang dapat mereka lakukan dengan apa yang ingin mereka lakukan. Tidak ada cara untuk bersikap acuh tak acuh terhadap ini
revolusi yang dibawa oleh pembelajaran mesin dan, menurut Gartner, hingga 2020 semua
perangkat lunak korporat akan memiliki fungsionalitas yang terhubung dengan Pembelajaran Mesin.
Secara fundamental, Pembelajaran Mesin adalah penggunaan algoritma untuk mengekstrak informasi dari
data mentah dan mewakilinya melalui beberapa jenis model matematis. Kami kemudian menggunakan ini
model untuk membuat inferensi dari kumpulan data lain. Ada banyak algoritma
yang memungkinkan untuk melakukan ini, tetapi sejenis khusus menonjol, yaitu jaringan saraf buatan.
Jaringan saraf buatan tidaklah baru, sudah ada setidaknya sejak dekade.
de 1950. Namun selama beberapa dekade, meskipun arsitektur model-model ini telah berkembang,
masih ada bahan yang membuat model benar-benar berfungsi. Dan bahan-bahan ini
surgiram hampir bersamaan. Salah satunya mungkin sudah Anda dengar: Big Data. Volume data,
dihasilkan dalam variasi dan kecepatan yang semakin besar, memungkinkan untuk membuat model mencapai tingkat tinggi
keakuratan. Tapi masih ada satu bahan yang kurang. Kurang! Bagaimana memproses model-model besar dari
Pembelajaran Mesin dengan jumlah data yang besar? CPU tidak mampu mengatasinya.
pesan.
Itu adalah ketika para gamer dan keserakahan mereka akan daya komputasi dan grafik yang sempurna, membantu kami
a menemukan bahan kedua: Pemrograman Paralel di GPU. Unit-unit dari
pemrosesan grafis, yang memungkinkan melakukan operasi matematis secara paralel,
terutama operasi dengan matriks dan vektor, elemen yang ada dalam model jaringan
jaringan saraf buatan, membentuk badai sempurna, yang memungkinkan evolusi di mana kami
kami menemukan hari ini: Big Data + Pemrosesan Paralel + Model Pembelajaran dari
Mesin = Kecerdasan Buatan.
Unit dasar dari jaringan saraf buatan adalah sebuah simpul (atau neuron matematis), yang
sebaliknya didasarkan pada neuron biologis. Koneksi antara neuron matematis ini
juga terinspirasi oleh otak biologis, terutama dalam cara mereka ini
koneksi berkembangdatang seiring waktu dengan "pelatihan". Pada pertengahan dekade
1980 dan awal dekade 1990, banyak kemajuan penting dalam arsitektur jaringan saraf
artifisial terjadi. Namun, jumlah waktu dan data yang diperlukan untuk mendapatkan yang baik
hasil memperlambat adopsi dan, oleh karena itu, minat menjadi surut, dengan apa yang dikenal
sebagai Musim Dingin AI.
Pada awal tahun 2000-an, kekuatan komputasi berkembang secara eksponensial dan pasar melihat
sebuah "ledakan" teknik komputasi yang tidak mungkin dilakukan sebelumnya. Itu adalah ketika
pembelajaran mendalam (Deep Learning) muncul dari pertumbuhan komputasi yang eksplosif
dekade ini sebagai mekanisme utama dalam pembangunan sistem Kecerdasan Buatan,
mendapatkan banyak kompetisi penting dalam pembelajaran mesin. Minat terhadap Deep
Pembelajaran tidak berhenti berkembang dan hari ini kita melihat istilah pembelajaran mendalam disebutkan.
dengan frekuensi yang semakin tinggi dan solusi komersial bermunculan setiap saat.
Buku ini, gratis dan dalam bahasa Portugis, adalah inisiatif dari Data Science Academy untuk membantu
mereka yang mencari pengetahuan yang mendalam dan berkualitas dalam bahasa kita. Dengan cara ini,
kami berharap dapat berkontribusi pada perkembangan Deep Learning dan Kecerdasan Buatan di Brasil.
Ikuti kami dalam perjalanan yang luar biasa ini!
Tim DSA
[Link]
BAB 2
Sebuah Sejarah Singkat Jaringan Syaraf Buatan
Untuk memahami di mana kita berada hari ini, kita perlu melihat ke masa lalu dan menganalisis bagaimana
kami sudah sampai di sini. Mari kita lihat sejenak Sejarah Singkat Jaringan Saraf Buatan.
O cérebro manusia adalah mesin yang sangat kuat dan kompleks yang mampu memproses sebuah
jumlah besar informasi dalam waktu minimum. Unit utama otak adalah
neurons dan melalui mereka informasi ditransmisikan dan diproses. Tugas-tugas
realizadas oleh otak mengintrik para peneliti, seperti misalnya, kemampuan untuk
mengenali wajah yang familiar di antara kerumunan hanya dalam milidetik.
jawaban tentang beberapa teka-teki tentang cara kerja otak masih belum terjawab dan
berlangsung terus hingga hari ini. Apa yang diketahui tentang cara kerja otak adalah bahwa
mesmo mengembangkan aturannya melalui pengalaman yang didapat dari situasi yang dijalani
sebelumnya.
Gambar1– Otak manusia, mesin paling fantastis yang ada di Planet Bumi.
Perkembangan otak manusia terjadi terutama dalam dua tahun pertama kehidupan,
tetapi menyeret sepanjang hidup. Terinspirasi oleh model ini, berbagai peneliti telah mencoba
meniru cara kerja otak, terutama proses pembelajaran melalui
pengalaman, untuk menciptakan sistem pintar yang mampu melakukan tugas seperti klasifikasi,
pengenalan pola, pemrosesan gambar, antara aktivitas lainnya. Seperti
hasil dari penelitian ini muncul model neuron buatan dan kemudian sebuah sistem
dengan beberapa neuron yang saling terhubung, yang disebut Jaringan Saraf.
Pada tahun 1943, neurofisiolog Warren McCulloch dan matematikawan Walter Pitts menulis sebuah
artikel tentang bagaimana neuron dapat berfungsi dan untuk itu, mereka memodelkan sebuah jaringan
neural simples menggunakan sirkuit listrik.
Warren McCulloch dan Walter Pitts menciptakan model komputasional untuk jaringan saraf
berbasis pada matematika dan algoritma yang disebut logika ambang (threshold logic). Ini
model membuka jalan untuk penelitian jaringan saraf yang dibagi menjadi dua pendekatan: satu
pendekatan yang berfokus pada proses biologis di otak, sedangkan yang lain berfokus pada aplikasi
dari jaringan saraf ke kecerdasan buatan.
Pada tahun 1946, Donald Hebb menulisOrganisasi
Perilakusebuah karya yang menunjukkan fakta
bahwa jalur saraf diperkuat setiap kali digunakan, sebuah konsep
fundamental secara esensial untuk cara manusia belajar. Jika dua saraf
menembak pada saat yang sama, dia berargumen, hubungan antara mereka menjadi lebih baik.
Namun, selama waktu ini, para pembela 'mesin berpikir' terus melanjutkan
mengargumentasikan penelitian Anda. Pada tahun 1956, Proyek Penelitian Musim Panas Dartmouth tentang
Kecerdasan Buatan memberikan dorongan baik untuk Kecerdasan Buatan maupun Jaringan
Neurais. Salah satu hasil dari proses ini adalah mendorong penelitian di AI dalam bagian
pemrosesan neural.
Pada tahun-tahun setelah Proyek Dartmouth, John von Neumann menyarankan untuk meniru fungsi-fungsi sederhana
neuron menggunakan relai telegraf atau tabung vakum. Selain itu, Frank Rosenblatt, seorang
neurobiologis, mulai bekerja di Perceptron. Dia tertarik pada cara kerjanya
dari mata seekor lalat. Sebagian besar pemrosesan yang dilakukan oleh lalat saat memutuskan untuk melarikan diri adalah
dibuat di matamu. Perceptron, yang dihasilkan dari penelitian ini, dibangun dalam perangkat keras dan adalah
jaringan saraf tertua yang masih digunakan hari ini. Perceptron lapisan tunggal telah berguna untuk
mengklasifikasikan sekumpulan masukan dengan nilai kontinu ke dalam salah satu dari dua kelas. Perceptron
hitung jumlah tertimbang dari masukan, kurangi batas dan lewatkan salah satu dari dua nilai
kemungkinan sebagai hasil. Sayangnya, Perceptron terbatas dan telah terbukti demikian
selama "tahun-tahun yang mengecewakan" oleh Marvin Minsky dan buku Seymour Papert tahun 1969,
Perseptor.
Sayangnya, para penerus sebelumnya tersebut membuat orang-orang melebih-lebihkan potensi jaringan.
neural, terutama mengingat batasan dalam elektronika, saat itu tersedia. Ini
ekstrem yang berasal dari dunia akademis dan teknis, menginfeksi sastra umum dari
era. Banyak janji dibuat, tetapi hasilnya adalah kekecewaan. Selain itu,
banyak penulis mulai merenungkan tentangefek yang akan dimiliki 'mesin berpikir' di
Pria. Serial Asimov tentang robot mengungkapkan dampak terhadap moral dan nilai-nilai manusia
ketika mesin menjadi mampu melakukan seluruh pekerjaan umat manusia. Penulis lain
menciptakan komputer yang lebih menyeramkan, seperti HAL dari film 2001.
Seluruh diskusi ini tentang efek Kecerdasan Buatan terhadap kehidupan manusia, bersamaan dengan
sedikit kemajuan, membuat suara-suara terhormat mengkritik penelitian tentang jaringan saraf. Hasilnya
itu adalah pengurangan drastis dari sebagian besar pendanaan dalam penelitian. Periode ini dari
pertumbuhan terhenti berlangsung hingga 1981, dikenal sebagai Musim Dingin AI (AI Winter).
Pada tahun 1982, berbagai peristiwa memicu minat yang diperbarui. John Hopfield dari Caltech
mengajukan sebuah dokumen kepada Akademi Ilmu Pengetahuan Nasional. Pendekatan Hopfield tidaklah
tidak hanya memodelkan otak, tetapi juga menciptakan perangkat yang berguna. Dengan kejelasan dan analisis
matematika, ia menunjukkan bagaimana jaringan ini bisa berfungsi dan apa yang bisa mereka lakukan. Di
Namun, sumber daya terbesar Hopfield adalah karismanya. Dia artikulatif dan ramah, dan itu
berkontribusi banyak agar dia didengar.
Pada tahun 1985, Institut Fisika Amerika memulai apa yang menjadi pertemuan tahunan.– Jaringan
Jaringan untuk Komputasi. Pada tahun 1987, Konferensi Internasional pertama tentang jaringan Saraf
tidak nsInstitut Insinyur Listrik dan Elektronik (IEEE) menarik lebih dari 1.800 peserta.
Pada tahun 1986, dengan jaringan saraf yang memiliki beberapa lapisan dalam berita, masalahnya adalah bagaimana memperluas
aturan Widrow-Hoff untuk beberapa lapisan. Tiga kelompok peneliti independen, di antara
yang mana David Rumelhart, mantan anggota departemen psikologi Stanford,
memperkenalkan ide-ide serupa yang sekarang disebut sebagai jaringan Backpropagation karena
mendistribusikan kesalahan pengenalan pola di seluruh jaringan. Jaringan hibrida menggunakan
hanya dua lapisan, jaringan Backpropagation ini menggunakan banyak. Hasilnya adalah bahwa
jaringan Backpropagation "belajar" dengan lebih lambat, karena mungkin memerlukan,
ribuan iterasi untuk belajar, tetapi menghasilkan hasil yang sangat akurat.
Saat ini, jaringan saraf digunakan dalam berbagai aplikasi. Ide dasar di balik
alam dari jaringan saraf adalah bahwa, jika ia berfungsi di alam, ia harus mampu berfungsi di
komputer. Masa depan jaringan saraf, bagaimanapun, terletak pada pengembangan perangkat keras.
Jaringan saraf yang cepat dan efisien bergantung pada perangkat keras yang ditentukan untuk akhirnya
uso.
Diagram di bawah menunjukkan beberapa tonggak penting dalam evolusi dan penelitian jaringan saraf
artifisial. Faktanya, kami masih menulis cerita ini dan banyak evolusi sedang terjadi
saat ini, melalui kerja ribuan peneliti dan profesional
Kecerdasan Buatan di seluruh dunia. Dan Anda, tidak ingin membantu menulis cerita ini?
Gambar3– Marcos dalam pengembangan jaringan saraf.
Kita dapat merangkum demikian tonggak utama dalam penelitian dan evolusi jaringan saraf
artifisial sampai kita mencapai Deep Learning:
1943: Warren McCullock dan Walter Pitts menciptakan model komputasi untuk jaringan saraf
berbasis pada matematika dan algoritma yang disebut logika ambang.
1958: Frank Rosenblatt menciptakan Perceptron, sebuah algoritma untuk pengenalan pola
berbasis pada jaringan saraf komputasi dua lapis menggunakan penjumlahan sederhana dan
pengurangan. Dia juga mengusulkan lapisan dengan notasi matematis, tetapi itu tidak akan
diselesaikan hingga 1975.
1980: Kunihiko Fukushima mengusulkan Neoconitron, sebuah jaringan saraf berhierarki, multilapis,
yang digunakan untuk pengenalan tulisan tangan dan masalah pengenalan lainnya
standar.
1989: Para ilmuwan berhasil menciptakan algoritma yang menggunakan jaringan saraf dalam, tetapi
waktu pelatihan untuk sistem diukur dalam hari, membuatnya tidak praktis
untuk penggunaan di dunia nyata.
1992: Juyang Weng menerbitkan Cresceptron, sebuah metode untuk melakukan pengenalan
objek 3-D secara otomatis dari adegan yang berantakan.
Tengah tahun 2000-an:Istilah "pembelajaran mendalam" mulai mendapatkan popularitas setelah
sebuah artikel oleh Geoffrey Hinton dan Ruslan Salakhutdinov menunjukkan bagaimana sebuah jaringan saraf yang variasi
lapisan bisa dilatih sebelumnya satu lapisan pada satu waktu.
2009:Terjadi Workshop NIPS tentang Pembelajaran Mendalam untuk Pengenalan Suara dan
diketahui bahwa dengan kumpulan data yang cukup besar, jaringan saraf tidak
pre-training yang tepat dan tingkat kesalahan turun secara signifikan.
2012:Algoritma pengenalan pola buatan mencapai kinerja pada tingkat
manusia dalam tugas tertentu. Dan algoritme pembelajaran mendalam dari Google mampu
untuk mengidentifikasi kucing.
2014: O Google membeli Startup Kecerdasan Buatan bernama DeepMind, dari Inggris,
por 400m.
2015: Facebook menerapkan teknologi pembelajaran mendalam– panggilan DeepFace– em
operasi untuk menandai dan mengidentifikasi secara otomatis pengguna Facebook dalam foto.
Algoritma menjalankan tugas pengenalan wajah superior menggunakan jaringan dalam yang
mempertimbangkan 120 juta parameter.
2016:Algoritma Google DeepMind, AlphaGo, memetakan seni dari permainan papan kompleks
Pergilah dan kalahkan juara dunia Go, Lee Sedol, dalam turnamen yang sangat dipublikasikan di Seoul.
2017: Adopsi massal dari Deep Learning dalam berbagai aplikasi korporat dan mobile, selain
kemajuan dalam penelitian. Semua acara teknologi terkait dengan Data Science, AI, dan Big Data,
menunjukkan Deep Learning sebagai teknologi utama untuk pembuatan sistem cerdas.
Janji pembelajaran mendalam bukanlah bahwa komputer mulai berpikir seperti
manusia. Ini seperti meminta sebuah apel untuk menjadi jeruk. Sebaliknya,
buktikan bahwa, mengingat satu set data yang cukup besar, prosesor cepat dan
sebuah algoritma yang cukup canggih, komputer dapat mulai menjalankan tugas-tugas
yang hingga saat itu hanya bisa dilakukan oleh manusia, seperti mengenali gambar dan
suara, menciptakan karya seni atau mengambil keputusan sendiri.
Studi tentang jaringan saraf mengalami revolusi besar mulai tahun 80-an dan ini
bidang studi ini telah menonjol, baik karena karakteristik menjanjikan yang ditunjukkan oleh
model-model jaringan saraf yang diusulkan, baik oleh kondisi teknologi saat ini dari
implementasi yang memungkinkan mengembangkan implementasi arsitektur neural yang berani
paralel dalam perangkat keras yang didedikasikan, sehingga memperoleh kinerja yang sangat baik dari sistem-sistem ini
(jauh lebih unggul dibandingkan sistem konvensional). Evolusi alami dari jaringan saraf adalah
jaringan saraf dalam (atau Deep Learning). Tapi ini adalah apa yang akan kita bahas di berikutnya
bab! Sampai saat itu.
BAB 3
Apa itu Jaringan Saraf Buatan Dalam atau Deep Learning?
Pembelajaran Dalam atau Deep Learning, adalah sub-bidang dari Pembelajaran Mesin, yang
menggunakan algoritma untuk memproses data dan meniru pemrosesan yang dilakukan oleh otak manusia.
Apa itu Jaringan Saraf Tiruan Dalam atau Pembelajaran Mendalam? Itu yang akan kita lihat di sini.
bab. Jangan khawatir jika beberapa istilah yang lebih teknis tidak masuk akal sekarang. Semua itu
akan dipelajari sepanjang buku ini.
Deep Learning menggunakan lapisan neuron matematis untuk memproses data, memahami
berbicara manusia dan mengenali objek secara visual. Informasi disampaikan melalui setiap lapisan,
mengeluarkan lapisan sebelumnya memberikan masukan untuk lapisan berikutnya. Lapisan pertama
di sebuah jaringan disebut sebagai lapisan masukan, sementara yang terakhir disebut sebagai lapisan keluar
keluaran. Semua lapisan antara keduanya disebut sebagai lapisan tersembunyi. Setiap lapisan adalah
tipikal sebuah algoritma sederhana dan seragam yang mengandung jenis fungsi aktivasi.
Figur 4– Jaringan Saraf Sederhana dan Jaringan Saraf Dalam (Deep Learning)
Pembelajaran mendalam bertanggung jawab atas kemajuan terbaru dalam penglihatan komputer,
pengenalan suara, pemrosesan bahasa alami, dan pengenalan audio. O
pembelajaran mendalam didasarkan pada konsep jaringan saraf buatan, atau sistem
komputasional yang meniru cara kerja otak manusia.
Ekstraksi sumber daya adalah aspek lain dari Pembelajaran Mendalam. Ekstraksi sumber daya menggunakan
sebuah algoritma untuk secara otomatis membangun 'sumber daya' yang berarti dari data untuk tujuan
pelatihan, pembelajaran, dan pemahaman. Biasanya, Ilmuwan Data, atau insinyur
de IA, bertanggung jawab atas ekstraksi sumber daya.
Peningkatan cepat dan dominasi yang tampak dari pembelajaran mendalam atas metode
tradisional pembelajaran mesin dalam berbagai tugas telah menjadi
menakjubkan untuk disaksikan dan, kadang-kadang, sulit untuk dijelaskan. Pembelajaran Mendalam adalah sebuah evolusi
jaringan saraf, yang pada gilirannya memiliki sejarah yang menarik yang kembali ke dekade
1940, penuh liku-liku, putaran dan perubahan, teman dan rival, kesuksesan dan kegagalan. Di
sebuah kisah yang layak untuk film tahun 90-an, sebuah ide yang pernah menjadi semacam bebek jelek
mekar untuk menjadi bola yang sedang digemari.
Gambar5– Arsitektur jaringan dalam dikenal pertama yang dilatih oleh Alexey Grigorevich
Ivakhnenko pada tahun 1965.
Pada akhir dekade 1970-an, musim dingin AI yang pertama dimulai, sebagai hasil dari janji-janji yang tidak
dapat dipertahankan. Dampak dari kurangnya pendanaan ini membatasi penelitian di Jaringan
Jaringan Saraf Dalam dan Kecerdasan Buatan. Untungnya, ada individu yang melakukan
penelitian tanpa pendanaan.
Sebagai prim“jaringan syaraf konvolusi” digunakan oleh Kunihiko Fukushima.
Fukushima mengembangkan jaringan saraf dengan beberapa lapisan pengelompokan dan konvolusi. Di
1979, ia mengembangkan jaringan saraf buatan, yang disebut Neocognitron, yang menggunakan desain
halohierarkis dan multilapis. Desain ini memungkinkan komputer untuk "belajar" mengenali
pola visual. Jaringan tersebut mirip dengan versi modern, tetapi telah dilatih dengan sebuah
strategi penguatan aktivasi berulang di berbagai lapisan, yang semakin kuat seiring berjalannya waktu
selain itu, desain Fukushima memungkinkan sumber daya penting untuk
disesuaikan secara manual dengan meningkatkan "beban" dari koneksi tertentu.
Gambar 6– Para perintis Kecerdasan Buatan. Dari kiri ke kanan: Yann LeCun, Geoffrey
Hinton, Yoshua Bengio dan Andrew Ng.
Namun, selama periode ini kami mengalami apa yang dikenal sebagai musim dingin kedua AI, yang terjadi
antara 1985-1990, yang juga mempengaruhi penelitian dalam Jaringan Syaraf dan Pembelajaran Mendalam.
Beberapa individu yang berlebihanpara optimis telah melebih-lebihkan potensi "segera" dari
Kecerdasan Buatan, menghancurkan harapan dan membuat marah para investor. Kemarahan itu begitu
intens, bahwa frasa Kecerdasan Buatan telah mencapai status sebagai pseudoscience. Untungnya, beberapa
orang-orang terus bekerja dengan IA dan Deep Learning, dan beberapa kemajuan signifikan
dibuat. Pada tahun 1995, Dana Cortes dan Vladimir Vapnik mengembangkan mesin vektor
suporte atau Upport Vector Machine (sistem untuk memetakan dan mengenali data yang serupa).
LSTM (Memori Jangka Panjang-Pendek) untuk jaringan saraf berulang dikembangkan pada tahun 1997.
oleh Sepp Hochreiter dan Juergen Schmidhuber.
Langkah evolusi signifikan berikutnya untuk Deep Learning terjadi pada tahun 1999, ketika
komputer mulai menjadi lebih cepat dalam memproses data GPU
(unit pemrosesan grafis) dikembangkan. Penggunaan GPU berarti sebuah
loncatan dalam waktu pemrosesan, yang mengakibatkan peningkatan kecepatan komputasi
em 1000 vezes ao longo de um período de 10 anos. Durante esse período, jaringan saraf
mulai bersaing dengan mesin vektor dukungan, jaringan saraf menawarkan yang lebih baik
hasil menggunakan data yang sama. Jaringan saraf juga memiliki keuntungan untuk terus
semakin baik seiring semakin banyak data pelatihan ditambahkan.
Sekitar tahun 2000, muncul masalah yang dikenal sebagai Gradien Menghilang. Itu adalah
ditemukan bahwa 'karakteristik' yang dipelajari di lapisan yang lebih rendah tidak dipelajari
pelas lapisan atas, karena tidak ada tanda pembelajaran yang mencapai lapisan ini. Ini tidak
itu adalah masalah fundamental untuk semua jaringan saraf, hanya yang memiliki metode
pembelajaran berbasis gradien. Asal usul masalah ternyata adalah fungsi-fungsi tertentu
de aktivasi. Serangkaian fungsi aktivasi mengkondensasi masukan mereka, mengurangi, karena
vez, jalur keluar dalam bentuk yang sangat kecil. Di area masuk ini, sebuah besar
perubahan akan dikurangi menjadi perubahan kecil pada output, menghasilkan gradien di
queda. Dua solusi yang digunakan untuk mengatasi masalah ini adalah pra-latihan lapisan-a-
lapisan dan pengembangan memori jangka panjang dan jangka pendek.
Pada tahun 200, sebuah laporan riset dari Grup META (sekarang disebut Gartner) menggambarkan
tantangan dan peluang dalam pertumbuhan volume data. Laporan tersebut menggambarkan peningkatan
volume data dan kecepatan data yang meningkat seperti peningkatan variasi sumber dan
tipe data. Ini adalah seruan untuk bersiap menghadapi serangan Big Data, yang sedang
baru mulai.
Pada tahun 2009, Fei-Fei Li, profesor IA di Stanford, California, meluncurkan ImageNet dan membentuk
sebuah basis data gratis dari lebih dari 14 juta gambar yang diberi label. Diperlukan
gambar yang ditandai untuk "melatih" jaringan saraf. Profesor Li berkata: "Visi kitaão é que o
Big Data akan mengubah cara kerja pembelajaran mesin. Data mendorong pembelajaran.
Dia tepat sasaran!
Hingga 2011, kecepatan GPU meningkat secara signifikan, memungkinkan terbentuknya
redes convolutivas "sem" o pré-latihan lapis demi lapis. Dengan peningkatan kecepatan
komputasi, menjadi jelas bahwa Deep Learning memiliki keunggulan signifikan dalam hal
efisiensi dan kecepatan. Contohnya adalah AlexNet, sebuah jaringan saraf konvolusional, yang arsitekturnya
mendapatkan berbagai kompetisi internasional selama tahun 2011 dan 2012. Unit linier
Retifikasi telah digunakan untuk meningkatkan kecepatan.
Juga pada tahun 2012, Google Brain meluncurkan hasil dari sebuah proyek yang tidak biasa yang dikenal
seperti Eksperimen Kucing. Proyek semangat bebas mengeksplorasikesulitan belajar
sem supervisio". A Aprendizagem profunda usa "aprendizagem super visionada", o que
berarti bahwa jaringan saraf konvolusional dilatih menggunakan data berlabel. Menggunakan
pembelajaran tanpa pengawasan, sebuah jaringan saraf konvolusional diberi makan dengan data tidak
ditandai, dan kemudian diminta pencarian pola yang berulang.
O Cat Experiment menggunakan jaringan saraf terdistribusi di lebih dari 1.000 komputer. Sepuluh
jutaan gambar "tanpa label" diambil secara acak dari YouTube,ditampilkan kepada
sistem e, kemudian, perangkat lunak pelatihan telah diizinkan untuk dijalankan. Di akhir d o
pelatihan, sebuah neuron di lapisan teratas ditemukan merespons dengan kuat terhadap
gambar kucing. Andrew Ng, pendiri proyek tersebut, mengatakan: "Kami juga menemukan sebuah
neurón yang merespons kuat terhadap wajah manusia. Pembelajaran tidak terawasi
terus menjadi bidang penelitian aktif dalam Pembelajaran Mendalam.
Saat ini, pemrosesan Big Data dan evolusi Kecerdasan Buatan keduanya
bergantung pada Pembelajaran Mendalam. Dengan Deep Learning kita dapat membangun sistem
cerdas dan kita sedang mendekati penciptaan AI yang sepenuhnya otonom. Ini akan
membuat dampak di semua segmen masyarakat dan mereka yang tahu cara bekerja dengan
teknologi, akan menjadi pemimpin dunia baru yang dihadapi di depan kita.
Di bab berikutnya, Anda akan mulai memahami secara teknis bagaimana cara kerjanya
Pembelajaran Mendalam. Hingga bab 4.
BAB 4
O Neurônio, Biológico e Matematis
O Neurônio Biológico
Neuron adalah unit dasar dari otak manusia, yaitu sel yang khusus dalam
transmisi informasi, karena di dalamnya terdapat sifat-sifat eksitabilitas dan
konduksi pesan saraf. Neuron terdiri dari 3 bagian utama: soma atau
corpo seluler, yang memancarkan beberapa cabang yang disebut dendrit, dan oleh sebuah
cabang turunan lain dari jumlah, tetapi lebih luas, disebut akson. Di dalam
ekstremitas akson adalah saraf terminal, melalui mana transmisi dilakukan
informasi untuk neuron lainnya. Transmisi ini dikenal sebagai sinapsis.
Otak kita terdiri dari miliaran neuron. Tetapi mereka tidak terpisah. Sebaliknya,
ada ratusan miliar koneksi di antara mereka, membentuk jaringan besar
komunikasi, jaringan saraf. Setiap neuron memiliki tubuh pusat, berbagai dendrit, dan sebuah
axônio. Dendrit menerima sinyal listrik dari neuron lain melalui sinaps, yang
merupakan proses komunikasi antar neuron. Badan sel memproses informasi dan
kirim ke neuron lain.
Perhatikan bahwa soma dan dendrit membentuk permukaan masuk neuron dan akson
permukaan keluaran dari aliran informasi (aliran informasi ini penting untuk
memahami neuron matematika sebentar lagi). Informasi yang ditransmisikan oleh
neuron adalah impuls listrik. Impuls listrik adalah pesan yang
neuron yang mentransmisikan satu sama lain, yaitu, itu adalah propagasi dari sebuah rangsangan sepanjang
neuron yang dapat berupa sinyal apa pun yang ditangkap oleh reseptor saraf.
Dendrit memiliki fungsi untuk menerima informasi, atau impuls saraf, yang berasal dari yang lain.
neuron dan membawanya ke tubuh sel. Di sana, informasi diproses dan impuls baru
dihasilkan. Impuls ini ditransmisikan ke neuron lain, melewati akson dan
mencapai dendrit dari neuron berikutnya. Badan neuron bertanggung jawab untuk mengumpulkan
dan mengombinasikan informasi yang datang dari neuron lain.
Sinyal listrik yang dihasilkan oleh sensor (retina mata, papila rasa, dll...) berjalan di sepanjang
axônios. Se esses sinais forem superiores a um limiar de disparo (threshold), seguem pelo
axônio. Jika sinyal ini melebihi ambang tembakan (threshold), mereka akan mengikuti
akson. Jika tidak, mereka diblokir dan tidak dilanjutkan (dianggap tidak relevan). A
passagem desses sinais não é elétrica, mas química (através da substância serotonina). Se o
sinyal untuk di atas batas tertentu (threshold), lanjut; jika tidak, diblokir dan tidak
lanjutkan. Kita sedang membicarakan neuron biologis dan perhatikan baik-baik kata
ambang, karena itu adalah esensi dari neuron matematis.
Sebuah neuron menerima sinyal melalui sejumlah dendrit, yang kemudian dipertimbangkan dan dikirim.
untuk akson, mungkin atau tidak melanjutkan (ambang). Dalam perjalanan melalui suatu neuron, sebuah
sinyal dapat diperkuat atau dilemahkan, tergantung pada dendrit asal, karena setiap
konduktor, terhubung dengan sebuah bobot yang mana sinyal dikalikan. Bobot adalah apa yang kita sebut
dari ingatan.
Setiap wilayah otak memiliki spesialisasi dalam fungsi tertentu, seperti pemrosesan sinyal
auditif, suara, pengembangan pemikiran, keinginan, dll... Pemrosesan ini terjadi melalui
jaringan pribadi yang saling terhubung, melakukan pemrosesan paralel. Setiap daerah dari
otak memiliki arsitektur jaringan yang berbeda: jumlah neuron dan sinapsis bervariasi
melalui neuron, nilai ambang dan bobot, dll... Nilai bobot ditentukan oleh
cara pelatihan yang diterima oleh otak selama masa hidup. Itu adalah menghafal.
Terinspirasi oleh neuron biologis, para peneliti mengembangkan sebuah model neuron
matematik yang menjadi dasar Kecerdasan Buatan. Ideanya sederhana: "Jika jaringan saraf
formam kecerdasan manusia, mari kita reproduksi ini dan menciptakan kecerdasan buatan.” Dan demikian
lahir neuron matematis, yang kami deskripsikan di bawah ini.
Neuron Matematis
Berdasarkan struktur dan fungsi neuron biologis, para peneliti mencoba meniru
sistem ini dalam komputer. Model yang paling diterima dengan baik diusulkan oleh Warren McCulloch dan
Walter Pitts pada tahun 1943, yang menerapkan dengan cara yang disederhanakan komponen dan
fungsi dari neuron biologis. Dalam istilah sederhana, neuron matematis dari suatu
jaringan saraf buatan adalah komponen yang menghitung jumlah tertimbang dari beberapa input, menerapkan sebuah
fungsi dan meneruskan hasilnya.
Dalam model neuron matematis ini, impuls listrik yang berasal dari neuron lain
sangat direpresentasikan oleh apa yang disebut sinyal input (huruf x dalam diagram di bawah ini, yang tidak ada)
tetapi lebih dari data yang memberi makan model jaringan saraf buatan Anda). Di antara berbagai
stimulasi yang diterima, beberapa akan lebih mengaktifkan dan yang lainnya kurang mengaktifkan neuron reseptor dan pengukuran ini
seberapa eksitatori stimulan ini direpresentasikan dalam model Warren McCulloch dan Walter Pitts
melalui bobot sinaptik. Semakin besar nilai bobot, semakin eksitatori rangsangan.
pesos sinápticos diwakili oleh wkn dalam diagram di bawah ini, di mana k mewakili indeks
do neurônio em questão e n se refere ao terminal de entrada da sinapse a qual o peso sináptico
merujuk.
Soma atau tubuh sel direpresentasikan oleh komposisi dari dua modul, yang pertama adalah
sebuah penggabungan aditif, jumlah dari rangsangan (sinyal masuk) dikalikan dengan faktornya
excitatório (berat sinaptik), dan kemudian fungsi aktivasi, yang akan menentukan berdasarkan
pada input dan bobot sinaptik, apa yang akan menjadi keluaran neuron. Akson di sini diwakili
pela saída (yk) diperoleh melalui penerapan fungsi aktivasi. Sama seperti dalam model biologis,
stimulus dapat bersifat eksitatori atau inhibitasi, yang diwakili oleh berat sinaptik positif atau
negatif masing-masing.
Model yang diusulkan memiliki sifat biner. Baik sinyal masukan maupun keluaran, adalah
nilai biner. McCulloch percaya bahwa fungsi sistem saraf pusat
memiliki karakter biner, yaitu, sebuah neuron memengaruhi atau tidak memengaruhi neuron lain, tetapi
kemudian terbukti bahwa itu tidak seperti itu.
Neuron matematika adalah model yang disederhanakan dari neuron biologis. Model semacam ini
diinspirasikan dari analisis generasi dan propagasi impuls listrik melalui membran
seluler dari neuron. Neuron matematis menerima satu atau lebih sinyal masuk dan mengembalikan
satu sinyal keluaran, yang dapat didistribusikan sebagai sinyal keluaran jaringan, atau sebagai sinyal
masuk untuk satu atau beberapa neuron lainnya di lapisan posterior (yang membentuk jaringan saraf
artifisial). Dendrit dan akson hanya direpresentasikan secara matematis oleh sinapsis,
dan intensitas hubungan diwakili oleh besaran yang disebut berat sinaptik,
disimbolkan oleh huruf w, Ketika masukan, x disajikan kepada neuron, mereka adalah
dikalikan dengan bobot sinaptik yang sesuai, menghasilkan masukan yang terberat, atau
seja, x1 yang mengalikan w1, dll... Ini menggambarkan salah satu dasar matematis dari fungsi
sebuah jaringan saraf buatan, perkalian matriks.
Gambar 9– Perkalian Matriks antara Sinyal Masuk x dan Bobot Sinaptik w (versi
disederhanakan).
Neurona kemudian menjumlahkan produk menghasilkan satu hasil tunggal. Fungsi ini disebut
fungsi kombinasi. Nilai ini kemudian disajikan kepada fungsi aktivasi atau fungsi
transferensi, yang memiliki, antara lain, tujuan untuk menghindari peningkatan nilai secara progresif
keluar sepanjang lapisan jaringan, mengingat bahwa fungsi-fungsi tersebut memiliki nilai maksimum dan
minimum yang terkandung dalam interval yang ditentukan. Penggunaan fungsi transfer non-linear
Jadikan jaringan saraf sebagai alat yang kuat. Diketahui bahwa jaringan Perceptron terdiri dari dua
lapisan dengan fungsi transfer non-linear seperti fungsi sigmoid (yang akan kita lihat lebih lanjut
adiante), disebut sebagai penyempurna universal.
Sebuah neuron memicu ketika jumlah impuls yang diterimanya melebihi ambang batasnya.
pembangkitan yang disebut ambang. Tubuh neuron, pada gilirannya, diekspresikan oleh sebuah mekanisme
simples yang melakukan penjumlahan nilai xi dan wi yang diterima oleh neuron (penjumlahan berbobot) dan
memutuskan apakah neuron harus menembak atau tidak (output sama dengan 1 atau 0) dengan membandingkan jumlah yang diperoleh
di ambang atau threshold neuron. Aktivasi neuron diperoleh melalui penerapan
sebuah "fungsi aktivasi", yang mengaktifkan keluaran atau tidak, tergantung pada nilai jumlah berbobot
masukan Anda.
Perhatikan bahwa model matematis sederhana dari neuron ini bersifat statis, yaitu tidak
pertimbangkan dinamika neuron alami. Di neuron biologis, sinyal dikirim dalam
pulsos dan beberapa komponen dari neuron biologi, seperti akson, berfungsi sebagai
fitur frekuensi.
Model neuron matematis juga dapat menyertakan polaritas atau bias input.
Variabel ini dimasukkan ke dalam jumlah fungsi aktivasi, dengan tujuan untuk meningkatkan derajat
dari kebebasan fungsi ini dan, akibatnya, kemampuan jaringan untuk mendekati. Nilainya
bias disesuaikan dengan cara yang sama seperti bobot sinaptik. Bias memungkinkan neuron untuk
presentasikan output tidak nol meskipun semua input Anda nol. Misalnya, jika tidak
jika tidak ada bias dan semua masukan dari sebuah neuron adalah nol, maka nilai dari fungsi dari
aktivasi akan menjadi nol. Dengan cara ini kita tidak bisa, misalnya, membuat neuron
belajar hubungan yang relevan dengan "atau eksklusif" dalam logika. Singkatnya, kita memiliki ini
komponen dalam neuron matematis:
Sinyal masukan { X1, X2, ..., Xn }: Merupakan sinyal eksternal yang biasanya dinormalisasi
untuk meningkatkan efisiensi komputasi dari algoritma pembelajaran. Itu adalah
data yang memberi makan model prediktif Anda.
Bobot sinaptik { W1, W2, ..., Wn }: Adalah nilai untuk memberi bobot pada sinyal dari setiap input
da jaringan. Nilai-nilai ini dipelajari selama pelatihan.
Combinador linear { ∑ }: Agregar todos sinais de entrada que foram ponderados pelos
berat sinaptik masing-masing untuk menghasilkan potensi aktivasi.
Potensial aktivasi { ц }:É o resultado obtido pela diferença do valor produzido entre
kombinator linier dan aktivasi. Jika nilainya positif, yaitu, jika ц > 0 maka
neuron menghasilkan potensi eksitatori; jika tidak, potensi akan bersifat menghambat.
Fungsi aktivasi { g }: Tujuannya adalah untuk membatasi keluaran neuron dalam suatu interval
dari nilai-nilai.
Sinyal keluar { y }: Ini adalah nilai akhir keluar yang dapat digunakan sebagai masukan untuk yang lain
neuron yang terhubung secara berurutan.
Model-model yang berbasis pada jaringan saraf buatan adalah yang paling mendapatkan perhatian di
tahun-tahun terakhir karena berhasil menyelesaikan masalah AI di mana sedikit kemajuan diperoleh
dengan teknik lainnya. Dari konsepsi neuron matematis, berbagai arsitektur dan
model dengan kombinasi yang berbeda antara neuron-neuron ini, dan menerapkan teknik yang berbeda
matematika dan statistik, muncul dan memungkinkan penciptaan arsitektur Deep yang maju
Belajar seperti Jaringan Syaraf Konvolusional, Jaringan Syaraf Rekuren, Auto Encoder,
Jaringan Adversarial Generatif, Jaringan Memori, antara lain, yang akan kita pelajari sepanjang
dari buku ini.
BAB 5
Menggunakan Jaringan Saraf untuk mengenali Digit Tangan
Sistem penglihatan manusia adalah salah satu keajaiban dunia. Pertimbangkan urutan berikut ini
digit tangan:
Sebagian besar orang mengenali angka-angka ini tanpa usaha sebagai 504192. Kemudahan ini adalah
Di rumah belahan otak kita, manusia memiliki korteks visual
primer, juga dikenal sebagai V1, mengandung 140 juta neuron, dengan puluhan dari
miliar koneksi di antara mereka. Dan, meskipun begitu, penglihatan manusia melibatkan tidak hanya V1, tetapi juga sebuah
seri lengkap korteks visual– V2, V3, V4 e V5 – melakukan pemrosesan gambar
secara bertahap menjadi lebih kompleks. Kami membawa dalam pikiran kami sebuah superkomputer,
disesuaikan oleh evolusi selama ratusan juta tahun, dan sangat cocok
untuk memahami dunia visual. Mengenali angka tulisan tangan tidaklah mudah. Sebaliknya, kami
manusia itu luar biasa, secara mengejutkan baik, dalam memahami apa yang mata kita
Namun hampir seluruh pekerjaan ini dilakukan secara tidak sadar. Dan, oleh karena itu, biasanya tidak
Kami menghargai betapa sulitnya masalah sistem visual kami.
Kesulitan dalam mengenali pola visual menjadi jelas jika Anda mencoba menulis sebuah
program komputer untuk mengenali digit seperti di atas. Apa yang tampak mudah ketika
di antara manusia, tiba-tiba menjadi sangat sulit. Intuisi sederhana tentang
bagaimana kita mengenali bentuk– “pada jam 9 ada loop dan kursus vertikal di sudut kanan bawah”
tidak semudah itu untuk diekspresikan secara algoritmik. Ketika Anda mencoba membangun aturan ini
Dengan cara yang tepat, Anda dengan cepat tersesat dalam berbagai pengecualian, catatan, dan kasus khusus.
Ini agak membuat putus asa.
Jaringan saraf menangani masalah dengan cara yang berbeda. Ideanya adalah untuk mengambil sejumlah besar
jumlah digit tulisan tangan, dikenal sebagai contoh pelatihan, dan kemudian,
mengembangkan sistem yang dapat belajar dari contoh-contoh pelatihan ini. Dalam kata lain
kata-kata, jaringan saraf menggunakan contoh untuk secara otomatis menarik kesimpulan tentang aturan untuk
pengenalan angka tulisan tangan. Selain itu, dengan meningkatkan jumlah contoh dari
melatih, jaringan dapat belajar lebih banyak tentang kaligrafi, dan dengan demikian meningkatkan akurasinya.
Kita dapat membangun sebuah pengenal digit tulisan tangan yang lebih baik dengan menggunakan ribuan, jutaan
ou bilhões de exemplos de treinamento.
Sepanjang bab-bab kita akan memulai perjalanan kita menuju arsitektur yang paling maju dari
Deep Learning, mengembangkan program komputer yang menerapkan jaringan saraf
yang belajar mengenali digit tulisan tangan. Program ini tidak akan menggunakan pustaka jaringan
jaringan saraf khusus (kami hanya akan menggunakan bahasa Python). Tetapi program ini dapat mengenali
digit dengan akurasi lebih dari 96%, tanpa intervensi manusia. Selain itu, dalam bab
posteriores, kami akan mengembangkan ide-ide yang dapat meningkatkan akurasi menjadi lebih dari 99%. Di
Kenyataannya, jaringan saraf komersial terbaik sekarang begitu baik sehingga digunakan oleh bank-bank.
untuk memproses cek dan oleh kantor pos untuk mengenali alamat.
Kami fokus pada pengenalan manuskrip karena itu adalah masalah yang sangat baik
prototipe untuk belajar tentang jaringan saraf secara umum. Sebagai prototipe, ia mencapai titik
menarik: itu menantang– tidak begitu sederhana untuk mengenali angka tulisan tangan– tetapi juga
tidak terlalu sulit dan tidak memerlukan solusi yang sangat rumit, atau kekuatan yang luar biasa
komputasional. Selain itu, ini adalah cara yang bagus untuk mengembangkan teknik yang lebih maju,
seperti pembelajaran mendalam. Dan dengan demikian, sepanjang buku ini, kita akan kembali berulang kali ke
masalah pengenalan digit tulisan tangan. Nanti, di dalam buku, kita akan membahas bagaimana
ide-ide ini dapat diterapkan pada masalah lain dalam visi komputer, dan juga dalam
pengakuan suara, pemrosesan bahasa alami, dan bidang lainnya.
Sepanjang jalan, kita akan mengembangkan banyak ide kunci tentang jaringan saraf, termasuk
dua jenis neuron buatan yang penting (Perceptron dan neuron sigmoida) dan yang
algoritma pembelajaran standar untuk jaringan saraf, dikenal sebagai penurunan stokastik dari
gradien. Kami akan menjelaskan mengapa hal-hal dilakukan dengan cara yang mereka lakukan dan dalam pembangunan
intuisimu jaringan saraf Anda. Ini memerlukan diskusi yang lebih panjang dari sekadar mempersembahkan
mekanika dasar dari apa yang sedang terjadi, tetapi layak untuk pemahaman yang lebih
mendalam yang akan Anda capai. Dan di akhir buku ini, Anda akan memiliki pemahaman yang baik tentang apa itu
pembelajaran mendalam dan bagaimana ini mengubah dunia!
Jika Anda memiliki pengetahuan tentang bahasa Python, kami merekomendasikan kursus Python.
Fundamentals untuk Analisis Data. Dia akan memberikan dasar yang bagus untuk semua yang Anda butuhkan
untuk mulai mengembangkan jaringan syaraf Anda.
BAB 6
O Perceptron– Bagian 1
Apakah Anda tahu apa saja arsitektur utama dari jaringan saraf buatan? Tidak. Jadi, analisislah.
cermatlah pada gambar di bawah ini (pekerjaan excellent yang dibuat oleh tim Asimov Institute,
tautan yang dapat Anda temukan di bagian referensi di akhir bab ini).
Luar biasa, bukan? Ada berbagai arsitektur, digunakan untuk menyelesaikan berbagai jenis masalah,
seperti misalnya arsitektur jaringan saraf konvolusional yang digunakan dalam masalah
Visi Komputer dan jaringan saraf berulang yang digunakan dalam masalah Bahasa
Alami. Kami akan mempelajari hampir semua arsitektur ini di buku ini. Ya, itu benar bahwa
Anda sudah membaca. Kita baru mulai!!
Meskipun semua arsitektur ini adalah jaringan saraf buatan, tidak semua adalah Deep
Pembelajaran. Apa yang menjadi ciri model pembelajaran mendalam, seperti namanya, adalah
jaringan saraf buatan dengan banyak lapisan tersembunyi (atau perantara). Tapi sebelum
chegarmos lá, precisamos passar pela arsitektur paling sederhana dari jaringan saraf buatan, yang
Perceptron. Seperti kata pepatah: "Setiap perjalanan besar dimulai dengan langkah pertama."
Model Perceptron dikembangkan pada dekade 1950 dan 1960 oleh ilmuwan Frank
Rosenblatt, terinspirasi oleh pekerjaan sebelumnya dari Warren McCulloch dan Walter Pitts. Hari ini, lebih
umum menggunakan model neuron buatan lainnya, tetapi Perceptron memungkinkan sebuah
pemahaman yang jelas tentang bagaimana jaringan saraf bekerja dalam istilah matematis, menjadi sebuah
pengenalan yang sangat baik.
Jadi, bagaimana cara kerja Perceptron? Sebuah Perceptron adalah model matematis yang menerima
várias entradas, x1, x2, ... e produz uma única saída binária:
Dalam contoh yang ditunjukkan, Perceptron memiliki tiga masukan: x1, x2, x3. Rosenblatt mengusulkan sebuah
aturan sederhana untuk menghitung keluaran. Dia memperkenalkan bobot, w1, w2, ..., angka riil yang menyatakan
pentingnya masing-masing input untuk output. Output neuron, 0 atau 1, ditentukan
melalui jumlah tertimbang,∑jwjxj, kurang dari atau lebih dari nilai ambang (threshold) tertentu. Jadi
seperti bobot, ambang adalah angka riil yang merupakan parameter neuron. Untuk menentukannya
dalam istilah aljabar yang lebih tepat:
Ini adalah model matematis dasar. Salah satu cara untuk memikirkan tentang Perceptron adalah bahwa itu adalah
perangkat yang mengambil keputusan dengan membuktikan bukti. Biarkan saya memberikan contoh. Ini bukan sebuah
conto yang sangat realistis, tetapi mudah dipahami, dan segera kita akan mencapai contoh yang lebih realistis.
Andaikan akhir pekan akan datang dan Anda mendengar bahwa akan ada festival
keju di kotamu. Apakah kamu suka keju dan sedang mencoba memutuskan apakah harus pergi ke festival atau tidak.
Anda bisa membuat keputusan Anda dengan mempertimbangkan tiga faktor:
Kita bisa mewakili ketiga faktor ini dengan variabel biner yang sesuai x1, x2, dan x3.
Misalnya, kita akan memiliki x1 = 1 jika cuacanya baik dan x1 = 0 jika cuacanya buruk. Dari
x2 = 1 jika pacar Anda ingin pergi ke festival bersama Anda, dan x2 = 0, jika
tidak. Dan sama halnya untuk x3 dan transportasi publik.
Sekarang, bayangkan bahwa Anda sangat menyukai keju dan bersedia pergi ke festival, meskipun pacar Anda
Anda pacar tidak tertarik dan festival berada di tempat yang sulit dijangkau dan tanpa
transportasi umum yang tersedia secara luas. Selain itu, Anda benar-benar membenci cuaca buruk, dan
tidak ada cara untuk pergi ke festival jika cuaca buruk. Anda bisa menggunakan Perceptron untuk memodelkan
jenis pengambilan keputusan ini.
Salah satu cara untuk melakukannya adalah dengan memilih bobot w1 = 6 untuk waktu dan w2 = 2 untuk yang lainnya
kondisi. Nilai lebih besar dari w1 menunjukkan bahwa waktu sangat penting bagi Anda, jauh lebih
apakah pacar Anda akan menemani Anda atau jika festivalnya dekat dengan
transporte umum. Akhirnya, anggaplah Anda memilih ambang batas 5 untuk Perceptron.
Dengan pilihan ini, Perceptron menerapkan model pengambilan keputusan yang diinginkan,
memproduksi 1 setiap kali cuaca baik dan 0 setiap kali cuaca buruk. Tidak membuat
perbedaan untuk hasilnya jika pacar Anda ingin pergi, atau jika transportasi umum
tersedia.
Dengan memvariasikan bobot dan ambang batas, kita dapat memperoleh model pengambilan keputusan yang berbeda.
contoh, misalkan kita memilih ambang batas 3. Jadi, Perceptron akan memutuskan bahwa Anda
seharusnya pergi ke festival setiap kali cuaca baik atau saat festival dekat
transportasi umum dan pacar Anda bersedia bergabung dengan Anda. Dalam hal lain
kata-kata, itu akan menjadi model yang berbeda dalam pengambilan keputusan. Mengurangi ambang batas berarti bahwa
Anda lebih cenderung untuk pergi ke festival.
Jelas, Perceptron bukanlah model lengkap untuk pengambilan keputusan manusia! Tapi apa
contoh yang diilustrasikan adalah bagaimana sebuah Perceptron dapat memberi bobot pada berbagai jenis bukti untuk mengambil
keputusan. Dan harus terlihat masuk akal bahwa sebuah jaringankompleksitas Perceptrons bisa mengambil
keputusan yang cukup halus.
Dalam jaringan ini, kolom pertama dari Perceptrons– apa yang akan kita sebut sebagai lapisan pertama dari
Perceptron– está tomando três decisões muito simples, pesando a evidência de entrada. E
mengenai Perceptrons di lapisan kedua? Masing-masing Perceptron ini mengambil sebuah
keputusan mempertimbangkan hasil dari lapisan pertama pengambilan keputusan. Dengan cara ini, sebuah
Perceptron di lapisan kedua dapat membuat keputusan pada tingkat yang lebih kompleks dan lebih
abstrato dari apa yang Perceptron di lapisan pertama. Dan keputusan yang bahkan lebih kompleks bisa
ser dilakukan oleh Perceptron di lapisan ketiga. Dengan cara ini, sebuah jaringan Perceptron dari
berbagai lapisan dapat terlibat dalam pengambilan keputusan yang rumit.
Omong-omong, ketika kita mendefinisikan Perceptrons, kita mengatakan bahwa sebuah Perceptron hanya memiliki satu output.
Pada jaringan di atas, Perceptrons tampaknya memiliki banyak hasil. Sebenarnya, mereka masih merupakan
keluaran tunggal. Anak panah keluaran ganda hanya merupakan cara yang berguna untuk menunjukkan bahwa keluaran
sebuah Perceptron sedang digunakan sebagai input untuk beberapa Perceptrons lainnya.
Mari kita menyederhanakan cara kita mendeskripsikan Perceptron. Dalam batas kondisi
∑jwjxj> ambangkita bisa melakukan dua perubahan notasi untuk menyederhanakannya. Yang pertama
perubahan adalah menulis∑jwjxjseperti produk (produk titik), w.x=∑jwjxj, onde w e x são vetores
komponen-komponennya adalah bobot dan input, masing-masing. Perubahan kedua adalah memindahkan
ambang untuk sisi lain dari persamaan dan menggantinya dengan apa yang dikenal sebagai bias
do Perceptron, ou b = - threshold. Menggunakan bias daripada ambang, aturan Perceptron dapat
ser ditulis ulang
Anda dapat menganggap bias sebagai ukuran seberapa mudah untuk membuat Perceptron menghasilkan
um 1. Atau untuk mengungkapkannya dalam istilah yang lebih biologis, bias adalah ukuran seberapa mudahnya melakukan
dengan apa Perceptron memicu. Untuk Perceptron dengan bias yang benar-benar besar, itu adalah
sangat mudah bagi Perceptron mengeluarkan 1. Tapi jika biasnya sangat negatif, maka itu sulit.
agar Perceptron mengeluarkan 1. Jelas, pengenalan bias hanyalah sebuah kecil
perubahan dalam cara kita mendeskripsikan Perceptron, tetapi kita akan melihat lebih lanjut bahwa ini mengarah pada hal-hal lain.
simplifikasi notasi. Oleh karena itu, di sisa buku ini, kita tidak akan menggunakan ambang batas, kita akan menggunakan
selalu ada bias.
Sekarang mulai lebih mudah untuk memahami konsep di balik jaringan saraf buatan dan
ini akan sangat berguna ketika kita mempelajari arsitektur yang lebih maju! Sebuah Perceptron mengikuti
modelumpan-foward”, o que significa que as entradas são enviadas para o neurônio,
diproses dan menghasilkan keluaran. Pada diagram di bawah, ini berarti bahwa jaringan (sebuah
neurônio) membaca dari kiri ke kanan.
No capítulo anterior descrevemos os Perceptrons como um método para pesar evidencias a fim
untuk mengambil keputusan. Cara lain di mana Perceptron dapat digunakan adalah untuk menghitung
fungsi logika dasar seperti AND, OR, dan NAND (jika ada keraguan tentang operasi
logika, lihat referensi di akhir bab ini). Misalnya, anggap kita memiliki
sebuah Perceptron dengan dua input, masing-masing dengan berat -2 dan satu bias 3. Berikut adalah kita
Perceptron:
Jadi kita melihat bahwa input 00 akan menghasilkan output 1, mengingat (-2) * 0 + (-2) * 0 + 3 = 3, adalah
positif (hasil positif, menghasilkan keluaran 1 dari Perceptron, ingat bab sebelumnya?). Di sini,
Kami menyertakan simbol * untuk menjadikan perkalian eksplisit. Perhitungan serupa menunjukkan bahwa
input 01 dan 10 menghasilkan output 1. Namun input 11 menghasilkan output 0, karena (-2) *
1 + (-2) * 1 + 3 = -1, itu negatif. Dan dengan demikian Perceptron kita mengimplementasikan sebuah "gerbang" NAND, atau
operasi logika biner NAND.
O exemplo NAND mostra que podemos usar Perceptrons para calcular funções lógicas simples.
Sebenarnya, kita bisa menggunakan jaringan Perceptron untuk menghitung fungsi logika apapun. Alasan
yaitu gerbang NAND adalah universal untuk komputasi, artinya kita dapat membangun apa saja
komputasi dengan gerbang NAND.
Sebuah jaringan Perceptron dapat digunakan untuk mensimulasikan sebuah sirkuit yang mengandung banyak gerbang.
NAND. Dan karena gerbang NAND adalah universal untuk penghitungan, maka Perceptrons
juga bersifat universal untuk komputasi. Mengingat bahwa Perceptron adalah model yang paling
jaringan saraf sederhana, bayangkan apa yang bisa dilakukan dengan model yang jauh lebih canggih! Betul
Jika Anda memikirkan Kecerdasan Buatan.
Keterampilan komputasi dari Perceptrons secara bersamaan menenangkan dan
mengecewakan. Ini menghibur karena memberi tahu kita bahwa jaringan Perceptron dapat menjadi begitu
kuat seperti perangkat komputasi lainnya. Tapi juga mengecewakan,
karena tampaknya Perceptron hanyalah jenis baru dari gerbang NAND. Ini tidak
sebuah berita besar!
Namun, situasinya lebih baik daripada pandangan ini menunjukkan. Ternyata kita dapat membayangkan
algoritma pembelajaran yang dapat secara otomatis menyesuaikan bobot dan bias dari sebuah
jaringan neuron buatan. Penyesuaian ini terjadi sebagai respons terhadap rangsangan eksternal, tanpa
intervensi langsung dari seorang pemrogram. Algoritma pembelajaran ini memungkinkan kita untuk menggunakan
neuron buatan dengan cara yang sangat berbeda dari gerbang logika
konvensional. Alih-alih menempatkan secara eksplisit sirkuit NAND dan gerbang lainnya, kami
jaringan saraf dapat dengan mudah belajar untuk menyelesaikan masalah, kadang-kadang masalah di mana
akan sangat sulit untuk dirancang langsung menggunakan sirkuit konvensional
logika.
Sesuai yang disebutkan di atas, sebuah Perceptron menghitung jumlah bobot dari nilai masukan.
Untuk kesederhanaan, mari kita anggap bahwa ada dua nilai masukan, x dan y untuk suatu tertentu
Perceptron P. kita akan mendefinisikan bobot x dan y, sebagai A dan B, masing-masing. Jumlah
rata-rata tertimbang dapat direpresentasikan sebagai: A x + B y.
Karena Perceptron menghasilkan nilai yang tidak nol hanya ketika jumlah tertimbang
melebihi batas tertentu C, keluaran dari Perceptron ini dapat dituliskan sebagai berikut:
Mengingat bahwa A x + B y > C dan A x + B y < C adalah dua daerah di bidang xy yang dipisahkan oleh
garis A x + B y + C = 0, dan jika kita masih mempertimbangkan titik (x, y) sebagai sebuah titik di sebuah bidang,
jadi Perceptron benar-benar memberi tahu kita wilayah mana di bidang yang menjadi milik titik ini. Seperti itu
wilayah, sekali lagi karena dipisahkan oleh satu garis, disebut sebagai wilayah linier
tersendiri.
Sebuah Perceptron tunggal hanya dapat menyelesaikan fungsi yang dapat dipisahkan secara linier. Dalam fungsi
tidak terpisahkan secara non-linear, Perceptron tidak dapat menghasilkan sebuah hiperplane, garis ini kepada kita
grafik di bawah, untuk memisahkan data. Masalahnya adalah bahwa di dunia nyata jarang sekali data adalah
linearmente terpisah, membuat Perceptron tidak sangat berguna untuk kegiatan
praktik (tetapi ideal untuk memulai studi di jaringan saraf buatan). Dan bagaimana kita memisahkan
apakah data tidak dapat dipisahkan secara non-linear? Teruslah mengikuti buku ini dan Anda akan menemukan.
Namun, meskipun demikian, Perceptron memiliki kegunaannya, karena menghasilkan beberapa fungsi logika,
seperti operator boolean AND, OR, dan NOT, yang dapat dipisahkan secara linier, yaitu, mereka
dapat dilakukan menggunakan satu Perceptron. Kita dapat mengilustrasikan mengapa mereka adalah
linier secara terpisah dengan menggambar masing-masing dari mereka dalam grafik:
Pada grafik di atas, kedua sumbu adalah input yang dapat menghasilkan nilai 0 atau 1 dan angka
Tidak ada grafik adalah output yang diharapkan untuk input tertentu. Menggunakan vektor bobot
apropriado para cada caso, um único Perceptron pode executar todas essas funções.
Namun, tidak semua operator logika dapat dipisahkan secara liniar. Misalnya,
Operator XOR tidak dapat dipisahkan secara linear dan tidak dapat dicapai oleh satu Perceptron.
Namun, masalah ini dapat diatasi dengan menggunakan lebih dari satu Perceptron yang diorganisasi dalam
jaringan saraf feed-forward, yang akan kita lihat lebih lanjut di bab-bab berikutnya.
Karena tidak mungkin untuk menggambar garis untuk membagi daerah yang berisi 1 atau 0, fungsi
XOR tidak dapat dipisahkan secara linier seperti yang dapat dilihat pada grafik di atas.
Sekarang lebih mudah memahami mengapa kita membutuhkan arsitektur jaringan yang lebih maju.
jaringan saraf buatan, karena kita memiliki masalah kompleks di dunia nyata, seperti Penglihatan
Komputasional, Pemrosesan Bahasa Alami, Terjemahan, Deteksi Penipuan,
Klasifikasi dan banyak lainnya. Dan kita akan melihat arsitektur ini secara mendetail. Tapi sebelumnya, kita perlu
berbicara tentang komponen dasar dari jaringan saraf, Fungsi Aktivasi. Di berikutnya
bab! Sampai jumpa!
BAB 8
Fungsi Aktivasi
Dalam bab ini kita akan mempelajari komponen penting dari jaringan saraf buatan, yaitu Fungsi
de Aktivasi. Bab ini adalah pengantar untuk tema tersebut dan kita akan kembali ke tema ini di kemudian hari ketika
kita mempelajari arsitektur maju dari Deep Learning. Bab ini mungkin sedikit
menantang, karena kita akan mulai memperkenalkan konsep yang lebih maju, yang akan sangat berguna dalam
urutan bab. Santai, bacalah dan pelajari sedikit lebih banyak tentang jaringan saraf
artifisial.
Sebelum menyelami detail fungsi aktivasi, mari kita lakukan sedikit tinjauan tentang
apa itu jaringan saraf buatan dan bagaimana cara kerjanya. Jaringan saraf adalah sebuah mekanisme dari
pembelajaran mesin (Machine Learning) yang sangat kuat yang pada dasarnya meniru bagaimana
otak manusia belajar. Otak menerima rangsangan dari dunia luar, melakukan pemrosesan
dan menghasilkan hasilnya. Seiring tugas menjadi rumit, beberapa neuron membentuk sebuah
jaringan kompleks, mentransmisikan informasi satu sama lain. Dengan menggunakan jaringan saraf buatan, kami mencoba
meniru perilaku yang serupa. Jaringan yang Anda lihat di bawah adalah jaringan saraf buatan
terdiri dari neuron yang saling terhubung.
Lingkaran hitam di gambar di atas adalah neuron. Setiap neuron dicirikan oleh bobot,
bias dan fungsi aktivasi. Data masukan disalurkan ke lapisan masukan. Yang
neurons melakukan transformasi linier pada input melalui bobot dan bias. Transformasi tidak
linear dilakukan oleh fungsi aktivasi. Informasi bergerak dari lapisan input ke
lapisan [Link] tersembunyi melakukan pemrosesan dan mengirimkan keluaran akhir ke
lapisan keluaran. Ini adalah pergerakan langsung informasi yang dikenal sebagai propagasi langsung.
Tapi bagaimana jika hasil yang dihasilkan jauh dari nilai yang diharapkan? Dalam jaringan saraf,
kami akan memperbarui bobot dan bias neuron berdasarkan kesalahan. Proses ini dikenal sebagai
Backpropagation. Setelah semua data melewati proses ini, bobot dan bias adalah
usados para previsões.
Tenang, tenang, tenang. Banyak informasi dalam satu paragraf, saya tahu! Mari kita bagi-bagi.
entri, bobot, dan bias sudah kita bahas di bab-bab sebelumnya. Fungsi aktivasi akan kita bahas
diskusikan sekarang dan penyebaran langsung serta Backpropagation yang akan kita bahas di bab-bab berikutnya!
Fungsi Aktivasi
Algoritma pembelajaran itu luar biasa. Tapi bagaimana kita bisa menyusun algoritma ini
untuk jaringan saraf buatan? Misalkan kita memiliki jaringan Perceptron yang
kami ingin menggunakan untuk belajar menyelesaikan masalah. Misalnya, masukan untuk
jaringan tersebut bisa berupa data piksel dari gambar digital yang dipindai, ditulis tangan, dari sebuah digit.
Kami ingin jaringan mempelajari bobot dan bias agar keluaran jaringan mengklasifikasikan
benar-benar digit. Untuk melihat bagaimana pembelajaran bisa bekerja, anggaplah kita melakukan
sebuah perubahan kecil pada bobot (atau bias) di jaringan. Yang kami inginkan adalah agar perubahan kecil ini
perubahan berat hanya menyebabkan sedikit perubahan yang sesuai dalam keluaran jaringan. Seperti
kita akan melihat dalam beberapa saat, sifat ini akan memungkinkan pembelajaran.
Secara skematis, inilah yang kami inginkan (jelas, jaringan ini sangat sederhana untuk
melakukan pengenalan tulisan, tetapi tenang saja kita akan melihat jaringan yang jauh lebih kompleks).
Jika itu benar bahwa perubahan kecil pada sebuah bobot (atau bias) membuat kita memiliki
hanya sedikit perubahan pada hasilnya, jadi kita bisa menggunakan fakta ini untuk memodifikasi
berat dan nilai bias agar jaringan kita berfungsi lebih sesuai dengan yang kita inginkan.
Sebagai contoh, anggaplah jaringan klasifikasifique equivocadamente uma imagem como "8" ketika
seharusnya menjadi "9". Kita bisa menemukan cara untuk membuat sedikit perubahan pada bobot dan bias untuk
agar jaringan sedikit lebih dekat pada klasifikasi gambar sebagai “9”. Dan kemudian,
kita akan mengulangi ini, mengubah bobot dan nilai bias secara berulang untuk menghasilkan yang lebih baik
Hasil terbaik. Jaringan sedang belajar.
Masalahnya adalah bahwa ini bukan yang terjadi ketika jaringan kami hanya mengandung Perceptron,
sesuai yang kita pelajari di bagian sebelumnya. Sebenarnya, perubahan kecil pada bobot dari sebuah
Perceptron tunggal dalam jaringan dapat, terkadang, menyebabkan keluaran dari Perceptron ini berubah
sepenuhnya, katakanlah dari 0 hingga 1. Perubahan ini dapat kemudian mengubah perilaku dari
resto dari jaringan, mengubahnya sepenuhnya dengan cara yang sangat rumit. Jadi, sementara
sembilan Anda sekarang dapat diklasifikasikan dengan benar, perilaku jaringan di semua
Gambar lain kemungkinan akan berubah sepenuhnya dengan cara yang sulit untuk dikendalikan. Mungkin
ada cara pintar untuk menyelesaikan masalah ini. Ya, ada. Dan itu dikenal sebagai fungsi dari
aktivasi.
Kita dapat mengatasi masalah ini melalui pengenalan komponen matematis dalam
neuron kita, yang disebut fungsi aktivasi. Fungsi aktivasi memungkinkan bahwa kecil
perubahan pada bobot dan bias hanya menyebabkan sedikit perubahan pada output. Ini adalah fakta
krusial yang akan memungkinkan jaringan neuron buatan untuk belajar.
Mari kita lihat bagaimana ini bekerja:
Fungsi aktivasi adalah elemen yang sangat penting dari jaringan saraf buatan.
Mereka pada dasarnya memutuskan apakah sebuah neuron harus diaktifkan atau tidak. Artinya, apakah informasi
apa yang diterima neuron adalah relevan untuk informasi yang disediakan atau harus diabaikan.
Lihat pada rumus di bawah bagaimana fungsi aktivasi adalah lapisan matematis lainnya di
pengolahan.
Fungsi aktivasi adalah transformasi non-linear yang kita lakukan sepanjang sinyal masukan.
Keluaran yang telah diubah ini kemudian dikirim ke lapisan neuron berikutnya sebagai masukan.
Ketika kita tidak memiliki fungsi aktivasi, bobot dan bias hanya melakukan sebuah
transformasi linier. Sebuah persamaan linier sederhana untuk diselesaikan, tetapi terbatas dalam itu
kemampuan untuk menyelesaikan masalah kompleks. Jaringan saraf tanpa fungsi aktivasi adalah
sebenarnya hanya sebuah model regresi linier. Fungsi aktivasi melakukan
transformasi non-linear pada data input, membuatnya mampu belajar dan melaksanakan
tugas yang lebih kompleks. Kami ingin jaringan saraf kami berfungsi dalam tugas
kompleks, seperti terjemahan bahasa (Pemrosesan Bahasa Alami) dan
klasifikasi gambar (Penglihatan Komputer). Transformasi linier tidak akan pernah
mampu melaksanakan tugas-tugas tersebut.
Fungsi aktivasi memungkinkan propagasi selanjutnya asalkan gradiennya.
disediakan bersama dengan kesalahan untuk memperbarui bobot dan bias. Tanpa fungsi non-linear
diferensiabel, itu tidak akan mungkin. Jika istilah gradien tidak familiar, tunggu saja
bab-bab berikutnya, ketika kita akan menjelaskan konsep ini secara rinci, mengingat bahwa ini adalah intinya
proses pembelajaran dalam jaringan saraf buatan.
Tetapi tidak ada hanya satu jenis fungsi aktivasi. Faktanya, ada beberapa, masing-masing
digunakan dalam berbagai situasi. Mari kita lihat deskripsi singkat mengenai jenis yang paling populer.
Fungsi aktivasi adalah komponen matematis yang dimasukkan dalam struktur jaringan saraf
artifisial untuk memungkinkan penyelesaian masalah kompleks. Ada berbagai jenis dari
fungsi aktivasi dan ini adalah area penelitian aktif, seiring dengan kecerdasan buatan
evolusi (tidak luar biasa untuk berpartisipasi dalam evolusi ini, yang akan mengubah
sepenuhnya dunia?). Mari kita lihat jenis yang paling populer.
Hal pertama yang terlintas di benak kita ketika kita memiliki fungsi aktivasi adalah sebuah
klasifikator berbasis ambang (threshold), yaitu, apakah neuron harus diaktifkan atau tidak. Jika
Jika nilai Y berada di atas nilai batas tertentu, aktifkan neuron, jika tidak, biarkan.
dinonaktifkan. Sederhana! Itu adalah aturannya:
f(x) = 1, x> = 0
f(x) = 0, x< 0
Fungsi langkah biner adalah hal itu, sangat sederhana. Itu dapat digunakan saat membuat sebuah
klasifikasi biner. Ketika kita hanya perlu mengatakan ya atau tidak untuk satu kelas saja,
fungsi langkah akan menjadi pilihan terbaik, karena akan mengaktifkan neuron atau membiarkannya nol.
Fungsinya lebih teoretis daripada praktis, karena, dalam banyak kasus, kami mengklasifikasikan data ke dalam
beberapa kelas daripada hanya satu kelas tunggal. Fungsi langkah tidak akan mampu melakukan itu.
Selain itu, gradien fungsi langkah adalah nol. Ini membuat fungsi langkah tidak menjadi
sangat berguna selama Backpropagation ketika gradien dari fungsi aktivasi dikirim
untuk perhitungan kesalahan untuk meningkatkan dan mengoptimalkan hasil. Gradien dari fungsi langkah
reduz semua menjadi nol dan perbaikan model benar-benar tidak terjadi. Mengingat, sekali lagi
nanti, kita akan melihat secara rinci konsep gradien dan Backpropagation.
bab-bab berikutnya!
Fungsi Linier
Kami melihat masalah dengan fungsi langkah, gradien yang nol, sangat sulit untuk memperbarui
gradien selama Backpropagation. Alih-alih fungsi langkah sederhana, kita bisa mencoba
menggunakan fungsi linear. Kita dapat mendefinisikan fungsi tersebut sebagai:
f(x) = ax
Turunan dari fungsi linear adalah konstan, yaitu, tidak bergantung pada nilai masukan x. Ini
ini berarti bahwa setiap kali kita melakukan Backpropagation, gradiennya akan sama. Dan ini adalah sebuah
masalah besar, kami tidak benar-benar memperbaiki kesalahan, karena gradiennya praktis
hal yang sama. Dan jangan hanya berasumsi bahwa kita sedang mencoba melakukan tugas yang rumit untuk
kita perlu beberapa lapisan dalam jaringan kita. Sekarang, jika setiap lapisan memiliki sebuah
transformasi linier, tidak peduli berapa banyak lapisan yang kita miliki, keluaran akhir tidak lain adalah
sebuah transformasi linier dari input. Oleh karena itu, fungsi linier dapat menjadi ideal untuk tugas-tugas
sederhana, di mana interpretabilitas sangat diinginkan.
Sigmoida
f(x) = 1 / (1 + e^ -x)
Ini adalah fungsi halus dan dapat diturunkan terus-menerus. Keuntungan terbesar dibandingkan fungsi yang
etapa e fungsi linear adalah bahwa itu tidak linier. Ini adalah karakteristik yang sangat menarik
dari fungsi sigmóide. Ini secara esensial berarti bahwa ketika saya memiliki beberapa neuron dengan
fungsi aktivasi– keluaran juga tidak linier. Fungsi bervariasi dari 0 hingga 1 dengan bentuk S.
Fungsi pada dasarnya mencoba untuk mendorong nilai y ke ekstrem. Ini adalah sebuah kualitas
muito desejável quando tentamos classificar os valores para uma classe específica.
Fungsi sigmoid masih banyak digunakan hingga hari ini, tetapi kita masih memiliki masalah yang
kita perlu membahas. Dengan sigmoide kita memiliki masalah ketika gradien menjadi terlalu
kecil. Ini berarti bahwa gradiennya mendekati nol dan jaringan tidak
benar-benar belajar.
Masalah lain yang dialami fungsi sigmoid adalah bahwa nilainya hanya bervariasi dari 0 hingga 1. Ini
karena fungsi sigmoida tidak simetris di sekitar asal dan nilai yang diterima adalah
semua positif. Kami tidak selalu ingin nilai yang dikirim ke neuron berikutnya menjadi
semua dengan sinyal yang sama. Ini dapat dibahas melalui perluasan fungsi sigmoid. Ini adalah
persis apa yang terjadi pada fungsi tanh.
Tanh
Fungsi tanh sangat mirip dengan fungsi sigmoid. Sebenarnya, itu hanya merupakan versi
escalonada dari fungsi sigmoid.
Tanh berfungsi dengan cara yang mirip dengan fungsi sigmoid, tetapi simetris terhadap asal.
variasi dari -1 hingga 1.
Pada dasarnya, menyelesaikan masalah nilai kita, yang semuanya memiliki tanda yang sama. Semua yang
outras propriedades são as mesmas da função sigmoide. É contínuo e diferenciável em todos os
pontos. Fungsi non-linear, jadi kita bisa melakukan Backpropagation dengan mudah pada kesalahan.
ReLU
ReLU adalah fungsi aktivasi yang paling banyak digunakan saat merancang jaringan saraf saat ini.
Pertama-tama, fungsi ReLU bersifat non-linear, yang berarti kita dapat dengan mudah menyalin
kesalahan ke belakang dan memiliki beberapa lapisan neuron yang diaktifkan oleh fungsi ReLU.
Keuntungan utama menggunakan fungsi ReLU dibandingkan fungsi aktivasi lainnya adalah bahwa ia tidak
aktifkan semua neuron sekaligus. Apa artinya ini? Jika Anda melihat fungsi
ReLU dan input yang negatif, itu akan diubah menjadi nol dan neuron tidak akan teraktivasi. Ini
ini berarti bahwa, pada saat yang sama, hanya beberapa neuron yang diaktifkan, membuat jaringan menjadi jarang.
efisien dan mudah untuk komputasi.
Ma ReLU juga dapat mengalami masalah dengan gradien yang bergerak menuju nol. Tetapi
ketika kita memiliki masalah, kita selalu dapat memikirkan solusi. Lagipula, itu adalah apa yang
perusahaan lebih mencari di hari ini: "penyelesai masalah". Jadilah satu dan Anda
pekerjaan akan terjamin!
Leaky ReLU
Fungsi Leaky ReLU tidak lebih dari versi yang ditingkatkan dari fungsi ReLU. Pada fungsi ReLU,
Gradien adalah 0 untuk x < 0, yang menyebabkan neuron mati karena aktivasi di daerah ini. Leaky
ReLU membantu menyelesaikan masalah ini. Alih-alih mendefinisikan fungsi ReLU sebagai 0para x inferior
sebuah 0, kami mendefinisikan sebagai komponen linier kecil dari x. Ini dapat didefinisikan sebagai:
Apa yang kami lakukan di sini adalah kami hanya mengganti garis horizontal dengan garis tidak nol,
tidak horizontal. Di sini satu adalah nilai kecil seperti 0,01 atau sesuatu yang serupa. Keuntungan utamanya
Untuk mengganti garis horizontal adalah menghapus gradien nol.
Softmax
Fungsi softmax juga merupakan jenis fungsi sigmoida, tetapi berguna ketika kita mencoba menangani
masalah klasifikasi. Fungsi sigmoida seperti yang kita lihat sebelumnya mampu menangani
hanya dua kelas. Apa yang harus kita lakukan ketika kita mencoba menangani beberapa kelas?
Hanya mengklasifikasikan ya atau tidak untuk satu kelas tidak akan membantu. Fungsi softmax mengubah
sebagai keluaran untuk kelas rumah untuk nilai antara 0 dan 1 dan juga membagi dengan jumlah keluaran. Ini
secara essencial memberikan probabilitas bahwa input berada dalam kelas tertentu. Itu bisa menjadi
didefinisikan sebagai:
Misalkan, contohnya, kita memiliki keluaran seperti [1.2, 0.9, 0.75], ketika kita menerapkan fungsi
softmax, kita akan mendapatkan [0.42, 0.31, 0.27]. Jadi, sekarang kita dapat menggunakannya sebagai probabilitas dari
biarkan nilai menjadi masing-masing kelas.
Wah! Banyak sekali, bukan? Dan kita belum melihat pertanyaan matematis yang terlibat dalam fungsi-fungsi ini.
Tapi jangan tergesa-gesa, tidak ada jalan pintas untuk belajar dan kita akan mempelajari segala sesuatu langkah demi langkah.
Fungsi Sigmoid dan kombinasi mereka biasanya bekerja lebih baik dalam kasus
klasifikator.
Fungsi ReLU adalah fungsi aktivasi umum dan digunakan dalam sebagian besar kasus saat ini.
Jika kita menemukan kasus neuron yang defisien dalam jaringan kita, fungsi Leaky
ReLU adalah pilihan terbaik.
Selalu ingat bahwa fungsi ReLU hanya boleh digunakan di lapisan tersembunyi.
Sebagai aturan umum, Anda dapat mulai menggunakan fungsi ReLU dan kemudian beralih ke yang lainnya.
fungsi aktivasi dalam kasus ReLU tidak memberikan hasil yang optimal.
Apakah Anda mulai merasakan getaran dalam bekerja dengan Kecerdasan Buatan? Maka lanjutkan
mengikuti, karena kita baru saja di awal! Sampai bab berikutnya!
BAB 9
Arsitektur Jaringan Saraf
Di bab 11 kita akan mengembangkan jaringan saraf untuk klasifikasi digit tulisan tangan.
menggunakan bahasa Python. Tapi sebelum itu, mari kita memahami istilah yang akan sangat berguna
ketika kita mengembangkan model kita, mempelajari Arsitektur jaringan Saraf.
Anggaplah kita memiliki jaringan di bawah ini:
Lapisan paling kiri dalam jaringan ini disebut lapisan input dan neuron-neuron di dalamnya
lapisan disebut neuron input. Lapisan paling kanan atau output berisi
neuron-neuron keluar atau, seperti dalam kasus ini, satu neuron keluar. Lapisan tengah adalah
panggilan lapisan tersembunyi, karena neuron-neuron di lapisan ini bukanlah input atau output. O
istilah "tersembunyi" mungkin terdengar sedikit misterius - pertama kali saya mendengar istilah tersebut, saya pikir bahwa
harus ada makna filosofis atau matematis yang dalam– tapi ini benar-benar tidak
berarti tidak lebih dari "sebuah lapisan yang bukan input atau output". Jaringandi atas hanya
satu lapisan tersembunyi, tetapi beberapa jaringan memiliki beberapa lapisan tersembunyi, misalnya,
jaringan berikut dengan empat lapisan memiliki dua lapisan tersembunyi:
Jaringan lapisan ganda disebut Perceptron Multilapis atau MLP.
Multilayer Perceptrons, yaitu jaringan saraf yang terdiri dari Perceptrons (meskipun dalam
kebenaran adalah jaringan neuron sigmoidal, seperti yang akan kita lihat lebih lanjut.
Desain lapisan input dan output dalam sebuah jaringan biasanya langsung. Misalnya,
andaikan qKami sedang mencoba menentukan apakah gambar tulisan tangan mewakili sebuah '9' atau tidak.
Salah satu cara alami untuk merancang jaringan adalah dengan mengkodekan intensitas piksel gambar di dalamnya
neuron input. Jika gambarnya adalah gambar grayscale 64 x 64, maka kita akan memiliki 64 x
64 = 4.096 neuron masukan, dengan intensitas yang diukur dengan benar antara 0
1. Lapisan output hanya akan memiliki satu neuron dengan nilai di bawah 0,5 yang menunjukkan
bahwa "gambar masukan bukanlah 9" dan nilai yang lebih besar dari 0,5 menunjukkan bahwa "gambar dari
masuk adalah 9".
Meskipun desain lapisan input dan output dari jaringan saraf seringkali
langsung, mungkin ada banyak variasi untuk desain lapisan tersembunyi. Khususnya, tidak ada
mungkin merangkum proses desain lapisan tersembunyi dengan beberapa aturan sederhana. Alih-alih
Oleh karena itu, para peneliti jaringan saraf telah mengembangkan banyak heuristik desain untuk
lapisan tersembunyi, yang membantu orang mendapatkan perilaku yang mereka inginkan dari jaringan mereka.
Kita akan mengenal berbagai heuristik desain tipe ini lebih lanjut di sepanjang yang berikutnya
bab. Desain lapisan tersembunyi adalah salah satu poin krusial dalam model Pembelajaran Mendalam.
Sampai sekarang, kita sedang mendiskusikan jaringan saraf di mana keluaran dari satu lapisan digunakan sebagai masukan
ke lapisan berikutnya. Jaringan ini disebut jaringan saraf feedforward. Ini berarti
bahwa tidak ada loop di jaringan– informasi selalu disampaikan ke depan, tidak pernah
dikirim kembali. Jika kita memiliki loop, kita akan menghadapi situasi di mana masukan untuk
fungsi σ tergantung pada keluaran. Ini akan sulit dipahami dan, oleh karena itu, kami tidak mengizinkan hal tersebut.
loops.
Namun, ada model lain dari jaringan saraf buatan di mana sirkuit umpan balik
itu mungkin. Model-model ini disebut sebagai jaringan saraf berulang. Ide di dalamnya
modelos adalah memiliki neuron yang tembak dalam jangka waktu terbatas. Menembak bisa
menghentak neuron lain, yang bisa terpicu sedikit lebih lambat, juga oleh sebuah
durasi terbatas. Ini membuat lebih banyak neuron menyala dan, seiring waktu,
kami berhasil mendapatkan gelombang tembakan neuron. Loop tidak menyebabkan masalah dalam hal ini
model, karena keluaran dari neuron hanya mempengaruhi masukannya pada suatu saat
posterior, tidak secara instan.
Umumnya, arsitektur jaringan saraf dapat dibagi menjadi 3 kategori spesifik:
Ini adalah jenis jaringan saraf yang paling umum dalam aplikasi praktis. Lapisan pertama adalah
masukan dan lapisan terakhir adalah keluaran. Jika ada lebih dari satu lapisan tersembunyi, kami menyebutnya
jaringan saraf 'dalam' (atau Pembelajaran Mendalam). Jenis jaringan saraf iniadalah kalkulus sebuah
serangkaian transformasi yang mengubah kemiripan antara kasus-kasus. Kegiatan dari
neuron-neuron di setiap lapisan adalah fungsi non-linear dari aktivitas di lapisan sebelumnya.
2– Jaringan Berulang
Jenis-jenis jaringan saraf ini memiliki siklus terarah dalam grafik koneksinya. Ini berarti bahwa
kadang-kadang Anda dapat kembali ke tempat Anda mulai dengan mengikuti panah. Mereka mungkin memiliki sebuah
dinamika yang rumit dan ini bisa membuat mereka sangat sulit untuk dilatih. Namun, tipe-tipe ini adalah
lebih realistis secara biologis.
Saat ini, ada banyak minat untuk menemukan cara yang efisien untuk melatih jaringan
recursif. Jaringan saraf rekursif adalah cara yang sangat alami untuk memodelkan data
sekuensial. Mereka setara dengan jaringan yang sangat dalam dengan satu lapisan tersembunyi per irisan
di waktu; kecuali bahwa mereka menggunakan bobot yang sama di setiap potongan waktu dan menerima input
di setiap irisan. Mereka memiliki kemampuan untuk mengingat informasi dalam keadaan tersembunyi mereka untuk waktu yang lama
periode waktu, tetapi sangat sulit untuk melatih mereka menggunakan potensi ini.
Ini seperti jaringan berulang, tetapi koneksi antara unit-unit adalah simetris (mereka memiliki
berat yang sama di kedua arah). Jaringan simetris jauh lebih mudah dianalisis dari
bahwa jaringan berulang. Mereka juga lebih terbatas dalam apa yang dapat mereka lakukan karena mematuhi
sebuah fungsi energi. Jaringan yang terhubung secara simetris tanpa unit tersembunyi adalah
panggilan "Jaringan Hopfield". Jaringan yang terhubung secara simetris dengan unit tersembunyiadalah
panggilan "Mesin Boltzmann".
Di antara 3 kategori ini, kita dapat mencantumkan 10 arsitektur utama jaringan saraf:
Di chapter berikutnya, kami akan memberikan Anda gambaran umum tentang masing-masing dari 10 arsitektur ini dan
Sepanjang bab-bab berikut, kita akan mempelajari semuanya. Masing-masing dari arsitektur ini memiliki
digunakan untuk menyelesaikan berbagai masalah dan menciptakan sistem Kecerdasan Buatan. Mengetahui
bekerja dengan IA secara efisien akan menjadi penentu untuk masa depan profesional Anda.
c
Pembelajaran Mesin (Machine Learning) diperlukan untuk menyelesaikan tugas-tugas yang merupakan
sangat kompleks bagi manusia. Beberapa tugas sangat kompleks sehingga tidak praktis,
senão tidak mungkin, bahwa manusia dapat menjelaskan semua nuansa yang terlibat. Jadi,
sebagai gantinya, kami menyediakan sejumlah besar data untuk algoritma pembelajaran
dari mesin dan membiarkan algoritme berfungsi, mengeksplorasi data ini dan mencari sebuah
model yang mencapai apa yang ditentukan oleh ilmuwan data dan insinyur AI sebagai
tujuan. Mari kita lihat dua contoh ini:
Sangat sulit untuk menulis program yang menyelesaikan masalah seperti mengenali sebuah
objek tiga dimensi dari sudut pandang baru dalam kondisi baru dari
pencahayaan dalam adegan yang berantakan. Kami tidak tahu program komputer mana
menulis mengapa kita tidak tahu bagaimana proses itu terjadi di otak kita. Bahkan jika
jika kita memiliki ide yang baik tentang bagaimana melakukannya, program ini bisa menjadi luar biasa
rumit.
Di sinilah Pembelajaran Mesin dapat diterapkan dengan sukses. Alih-alih menulis sebuah program untuk
tangan untuk setiap tugas spesifik, kami mengumpulkan banyak contoh yang menentukan keluaran
benar untuk suatu input tertentu. Sebuah algoritma pembelajaran mesin menerima
contoh-contoh ini dan menghasilkan sebuah program yang melakukan pekerjaan tersebut. Program yang dihasilkan oleh
algoritma pembelajaran mungkin terlihat sangat berbeda dari program tipikal yang ditulis tangan.
Pode conter milhões de números. Se o fizermos corretamente, o programa funciona para novos
kasus (data baru). Jika data berubah, program juga dapat berubah saat dilatih di
data baru. Dan dengan pengurangan biaya komputasi (terutama menggunakan
pengolahan awan), jumlah besar data (Big data) dan pemrosesan paralel
Di GPU, kita memiliki kondisi sempurna untuk evolusi Pembelajaran Mesin. Masalah terbesar,
Sungguh mengherankan, ini akan menjadi kurangnya profesional yang berkualitas dalam jumlah yang cukup untuk
memenuhi permintaan pasar.
Beberapa contoh tugas yang lebih baik diselesaikan oleh pembelajaran mesin meliputi:
Pengenalan pola: objek dalam adegan nyata, identitas wajah atau ekspresi
fasilitas, kata-kata tertulis atau diucapkan.
Perceptron, seperti yang telah kita pelajari di bab-bab sebelumnya, adalah algoritma sederhana yang ditujukan
untuk melakukan klasifikasi biner; yaitu, memprediksi apakah input termasuk dalam suatu kategori tertentu.
kategori minat atau tidak; penipuan atau tidak_penipuan, kucing atau tidak_kucing.
Sebuah Perceptron adalah classifier linier; dengan kata lain, ini adalah algoritma yang mengklasifikasikan masukan
memisahkan dua kategori dengan garis lurus. Masukan biasanya adalah vektor fiturx
dikalikan dengan beratwe ditambahkan ke dalam bias (atau bias)[Link] adalah contoh Perceptron:
y = w * x + b. Sebuah Perceptron menghasilkan satu output berdasarkan beberapa input nilai
nyata, membentuk kombinasi linier menggunakan bobot (dan kadang-kadang melewatkan keluaran melalui
fungsi aktivasi non-linear.
Rosenblatt membangun sebuah Perceptron satu lapisan. Artinya, algoritmanya tidak mencakup banyak
lapisan, yang memungkinkan jaringan saraf memodelkan hierarki sumber daya. Ini mencegah
agar Perceptron dapat melakukan klasifikasi non-linear, seperti fungsi XOR (sebuah pemicu
operator XOR ketika input menunjukkan satu karakteristik atau yang lain, tetapi tidak keduanya, berarti
"OR eksklusif"), sepertiMinsky dan Papert menunjukkan dalam buku mereka.
Sebuah Multilayer Perceptron (MLP) adalah jaringan saraf buatan yang terdiri dari lebih dari satu
Perceptron. Mereka terdiri dari satu lapisan input untuk menerima sinyal, satu lapisan
keluar yang mengambil keputusan atau ketentuan tentang masuknya, dan antara keduanya, sebuah angka
arbitrari lapisan tersembunyi yang merupakan mekanisme komputasi sejati dari MLP, MLOs
bagaimana sebuah lapisan tersembunyi dapat mendekati fungsi kontinu manapun.
Multi-layer Perceptron adalah semacam 'Hello World' dari pembelajaran mendalam: sebuah yang baik
cara untuk mulai ketika Anda sedang belajar tentang Deep Learning.
MLP sering diterapkan pada masalah pembelajaran terawasi:
berlatih dalam sekumpulan pasangan input-output dan belajar memodelkan korelasi (atau
ketergantungan) antara input dan output ini. Pelatihan melibatkan penyesuaian parameter,
Anda adalah bobot dan bias, dari model untuk meminimalkan kesalahan. Backpropagation digunakan untuk melakukan
penyesuaian bobot dan bias sehubungan dengan kesalahan, dan kesalahan itu sendiri dapat diukur dengan berbagai cara
cara, termasuk melalui kesalahan kuadrat rata-rata (MSE– Kesalahan Kuadrat Rata-rata)
Jaringan feed forward, seperti MLP, seperti ping-pong. Mereka terutama terlibat
dalam dua gerakan, sebuah konstanta bolak-balik. Dalam perjalanan ke depan, aliran sinyal se
gerakkan dari lapisan input melalui lapisan tersembunyi ke lapisan output dan keputusan dari
lapisan keluaran diukur terhadap keluaran yang diharapkan.
Pada proses mundur, menggunakan Backpropagation dan aturan rantai (Chain Rule), turunan
parsial dari fungsi kesalahan berbagai bobot dan bias direproduksi melalui MLP. Tindakan ini
dari diferensiasi memberi kita gradien, di mana parameter dapat disesuaikan dengan
ukuran yang menggerakkan MLP satu langkah lebih dekat ke kesalahan minimum. Ini dapat dilakukan dengan
algoritma optimasi berbasis gradien, seperti penurunan stokastik dari
gradien. Jaringan terus bermain permainan ping-pong itu hingga kesalahan tidak dapat lagi diperbaiki.
direduksi (sampai ke minimum yang mungkin). Keadaan ini dikenal sebagai konvergensi.
Kedengarannya seperti banyak hal? Ya, memang. Kita akan melihat proses ini dengan lebih rinci di sini dalam buku ini.
Pada tahun 1998, Yann LeCun dan kolaboratornya mengembangkan sebuah pengenal yang benar-benar baik,
para digit manuskrip yang disebut LeNet. Dia menggunakan Backpropagation dalam jaringan feed forward
dengan banyak lapisan tersembunyi, banyak peta unit yang direplikasi di setiap lapisan,
mengelompokkan keluaran unit yang berdekatan, membentuk jaringan luas yang dapat menangani
berbagai karakter sekaligus, bahkan jika mereka tumpang tindih dan cara yang cerdas untuk
melatih sistem yang lengkap, bukan hanya pengenalan. Nanti, arsitektur ini akan
diformalkan dengan nama jaringan konvolusional.
Jaringan Saraf Konvolusional (ConvNets atau CNN) adalah jaringan saraf buatan dalam
que podem ser usadas para classificar imagens, agrupá-las por similaridade (busca de fotos) e
melakukan pengenalan objek dalam adegan. Ini adalah algoritma yang dapat mengidentifikasi
wajah, individu, tanda jalan, wortel, ornithorincus, dan banyak aspek lain dari data
visual
Jaringan Konvolusional melakukan pengenalan karakter optik (OCR) untuk mendigitalkan
teks dan membuat pemrosesan bahasa alami di dokumen analog dan
manuskrip, di mana gambar adalah simbol yang harus ditranskripsikan. CNN juga dapat
d diterapkan langsung pada analisis teks, serta data grafis.
Efektivitas jaringan Konvolusional dalam pengenalan gambar adalah salah satu alasan utama
di mana dunia menyaksikan efektivitas pembelajaran mendalam. Jenis jaringan ini sedang
mendorong kemajuan besar dalam Penglihatan Komputer, yang memiliki aplikasi yang jelas dalam mobil
mandiri, robotika, drone, keamanan, diagnosa medis dan perawatan untuk penyandang disabilitas
visual
Jaringan Konvolusi mengonsumsi dan memproses gambar sebagai tensor yang merupakan matriks dari
angka dengan beberapa dimensi. Mereka bisa sulit untuk divisualisasikan, jadi mari kita mendekatinya
melalui analogi. Skalar hanyalah sebuah angka, seperti 7; vektor adalah daftar angka (untuk
contoh, [7,8,9]); dan sebuah matriks adalah kisi persegi panjang dari angka yang menempati beberapa baris
dan kolom seperti sebuah lembar kerja. Secara geometris, jika sebuah skalar adalah titik dengan dimensi nol,
jadi vektor adalah garis unidimensional. Matriks adalah bidang bidimensional, sebuah tumpukan
de matriks adalah kubus tiga dimensi dan ketika setiap elemen dari matriks tersebut memiliki sebuah tumpukan
de matriks adalah kubus tiga dimensi dan ketika setiap elemen dari matriks tersebut memiliki sebuah tumpukan
dari peta sumber yang terkait dengannya, Anda memasuki dimensi keempat. Berteriaklah, jangan putus asa
(nanti). Kita akan membahas ini lebih lanjut dengan tenang, ketika kita belajar secara eksklusif tentang ini.
arsitektur. Di kursus kami di Data Science Academy, kami menyertakan pelajaran lengkap tentang
Aljabar Linear, di mana skalar, vektor, matriks, dan tensor dipelajari dalam teori dan praktik,
karena pengetahuan ini sangat penting dalam pembangunan jaringan saraf dalam.
Hal pertama yang perlu diketahui tentang jaringan konvolusional adalah bahwa mereka tidak memahami gambar seperti
manusia. Oleh karena itu, Anda harus berpikir dengan cara yang berbeda tentang apa itu gambar
berarti ketika diberi makan dan diproses oleh jaringan konvolusi.
Jaringan Konvolusional mempersepsikan gambar sebagai volume; yaitu, objek tiga dimensi, bukan
dari struktur datar yang hanya diukur berdasarkan lebar dan tinggi. Ini karena gambar dari
inti digital memiliki pengkodean merah-hijau-biru (RGB– Merah-Hijau-Biru), mencampurkan
tiga warna ini untuk menghasilkan spektrum warna yang dapat dilihat oleh manusia. Sebuah jaringan
konvolusional menerima tiga lapisan terpisah berwarna yang ditumpuk satu di atas yang lain.
Dengan demikian, jaringan konvolusional menerima gambar sebagai kotak persegi panjang yang lebar dan
tinggi diukur dengan jumlah piksel di sepanjang dimensi ini dan kedalamannya adalah
tiga lapisan dalam, satu untuk setiap huruf dalam RGB. Lapisan kedalaman ini adalah
disebut sebagai saluran.
Saat gambar bergerak melalui jaringan konvolusional, kami menggambarkan di
termos volume masuk dan keluar, mengekspresikannya secara matematis sebagai matriks dari
berbagai dimensi seperti ini: 30x30x3. Dari lapisan ke lapisan, dimensinya berubah.
ukuran yang melewati jaringan saraf konvolusional hingga menghasilkan serangkaian probabilitas di
lapisan keluaran, menjadi suatu probabilitas untuk setiap kemungkinan kelas keluaran. Yang dengan
kemungkinan terbesar, akan menjadi kelas yang ditentukan untuk gambar masukan, seekor burung misalnya.
Anda perlu memperhatikan dengan baik ukuran setiap dimensi volume gambar,
karena mereka adalah dasar dari operasi aljabar linear yang digunakan untuk memproses gambar.
Kita bisa mendedikasikan dua bab penuh untuk arsitektur ini. Omong-omong, itu adalah apa yang akan kita lakukan lagi di
depan di buku.
Jaringan berulang adalah seperangkat algoritma jaringan saraf buatan yang kuat
especialmente úteis para o processamento de dados sequenciais, como som, dados de séries
temporalis atau bahasa alami. Sebuah versi dari jaringan berulang digunakan oleh DeepMind di
proyek video game dengan agen otonom.
As redes recorrentes diferem das redes feed forward porque incluem um loop de feedback, pelo
apa keluaran dari langkah n-1 dipasok kembali ke jaringan untuk memengaruhi hasil dari langkah n, dan
begitu seterusnya untuk setiap langkah berikutnya. Sebagai contoh, jika suatu jaringan terpapar pada a
kata huruf demi huruf, dan diminta untuk menebak setiap huruf berikutnya, huruf pertama dari sebuah
kata akan membantu menentukan apa yang dipikirkan jaringan berulang tentang apa huruf kedua bisa jadi.
Ini berbeda dari jaringan feed forward, yang belajar mengklasifikasikan setiap angka tulisan tangan oleh
contoh, terlepas dari itu, dan sesuai dengan piksel yang terpapar dari satu tunggal
contoh, tanpa merujuk pada contoh sebelumnya untuk menyesuaikan perkiraan Anda. Jaringan berulang
tidak menghadapi pembatasan satu-ke-satu yang sama.
Meskipun beberapa bentuk data, seperti gambar, tidak tampak berurutan, mereka dapat menjadi
dipahami sebagai urutan ketika diberi makan di jaringan berulang. Pertimbangkan sebuah
gambar dari sebuah kata yang ditulis tangan. Sama seperti jaringan berulang memproses tulisan
manual, mengubah setiap gambar menjadi huruf dan menggunakan awalan kata untuk
menebak bagaimana kata ini akan berakhir, jadi jaringan dapat menampilkan sebagian dari gambar apa pun
seperti huruf dalam sebuah urutan. Jaringan saraf yang menjelajahi gambar besar dapat
belajar dari setiap wilayah, apa yang kemungkinan besar menjadi wilayah tetangga.
Jaringan berulang dan jaringan feed forward "mengingat" sesuatu tentang dunia, memodelkan
data yang terpapar. Tapi mereka mengingat dengan cara yang sangat berbeda. Setelah itu
pelatihan, jaringan feed forward menghasilkan model statis dari data dan model ini dapat
jadi menerima contoh baru dan mengklasifikasikannya atau mengelompokkannya dengan akurasi.
Pada pertengahan tahun 90-an, proposal dari peneliti Jerman Sepp Hochreiter dan Juergen
Schmidhuber memperkenalkan variasi dari jaringan rekuren dengan unit yang disebut Long
Memori Jangka Pendek, sebagai solusi untuk masalah Vanishing gradient, masalah
umum dalam jaringan saraf berulang.
LSTMs membantu menjaga kesalahan yang dapat disalin oleh waktu dan lapisan. Dengan mempertahankan
kesalahan yang lebih konstan, mereka memungkinkan jaringan berulang untuk terus belajar selama
beberapa langkah waktu (lebih dari 1000), membuka saluran untuk menghubungkan penyebab dan efek
secara jarak jauh. Ini adalah salah satu tantangan utama untuk pembelajaran mesin dan IA, sekali
bahwa algoritma sering dihadapkan pada lingkungan di mana sinyal-sinyal
imbalan itu langka dan terlambat, seperti kehidupan itu sendiri. (Para pemikir religius
mendekati masalah yang sama dengan ide karma atau hadiah ilahi, mengajukan teori
konsekuensi yang tidak terlihat dan jauh untuk tindakan kita.
LSTM mengandung informasi di luar aliran normal dari jaringan berulang dalam sebuah sel tertutup.
As informações podem ser armazenadas, escritas ou lidas a partir de uma célula, como dados
di memoria sebuah komputer. Sel mengambil keputusan tentang apa yang disimpan, dan kapan
memungkinkan pembacaan, penulisan, dan penghapusan, melalui gerbang terbuka dan tertutup. Berbeda dengan
penyimpanan digital di komputer, namun, gerbang ini adalah analog,
diimplikasikan dengan penggandaan elemen oleh sigmoid, yang semuanya berada di rentang 0-
1. Analogo memiliki keuntungan dibandingkan digital karena dapat dibedakan dan, oleh karena itu, cocok untuk
Backpropagation.
Pintu-pintu ini bertindak atas sinyal yang mereka terima dan, dengan cara yang mirip dengan simpul jaringan
neural, mereka memblokir atau mentransmisikan informasi berdasarkan kekuatan dan kepentingannya, yang
mereka menyaring dengan kumpulan bobot mereka sendiri. Bobot ini, seperti bobot yang memodulasi
entrada dan status tersembunyi, disesuaikan melalui proses pembelajaran jaringan
rekuren. Dengan kata lain, sel-sel belajar ketika mereka membiarkan data masuk, keluar atau
jam dikeluarkan melalui proses iteratif membuat asumsi, menghitung kesalahan selama
Backpropagation dan penyesuaian bobot melalui penurunan gradien.
Diagram di bawah ini mengilustrasikan bagaimana data mengalir melalui sel memori dan
dikelola oleh gerbang-gerbangnya.
Jaringan berulang dari unit non-linier biasanya sangat sulit untuk dianalisis. Mereka
dapat berperilaku dengan berbagai cara: menetap dalam keadaan stabil,
berosilasi atau mengikuti jalur kacau yang tidak dapat diprediksi di masa depan. Jaringan Hopfield
terdiri dari unit batas biner dengan koneksi berulang di antara mereka. Pada tahun 1982, John
Hopfield menyadari bahwa, jika koneksi bersifat simetris, ada fungsi energi global. Setiap
"konfigurasi" biner dari seluruh jaringan memiliki energiia, sementara aturan keputusan batas
biner membuat jaringan sesuai dengan minimum dari fungsi energi ini. Sebuah yang luar biasa
cara menggunakan jenis komputasi ini adalah menggunakan memori sebagai energi minimal untuk jaringan
neural. Menggunakan minimum energi untuk mewakili memori menghasilkan memori
dapat diakses oleh kontennya. Sebuah item dapat diakses hanya dengan mengetahui sebagian dari
konten. Ini tahan terhadap kerusakan pada perangkat keras.
Setiap kali kita mengingat sebuah konfigurasi, kita berharap menciptakan minimum energi baru.
Tapi bagaimana jika dua minimum yang berdekatan berada di lokasi yang tengah? Ini membatasi kemampuan untuk
Sebuah Jaringan Hopfield. Jadi, bagaimana kita meningkatkan kapasitas sebuah Jaringan Hopfield? Para fisikawan
saya menyukai ide bahwa matematika yang sudah mereka kenal dapat menjelaskan bagaimana otak
berfungsi. Banyak artikel telah diterbitkan dalam jurnal fisika tentang Jaringan Hopfield dan suasana
kapasitas penyimpanan. Akhirnya, Elizabeth Gardner menemukan bahwa ada sebuah
aturan penyimpanan yang jauh lebih baik yang menggunakan total kapasitas beban. Alih-alih mencoba
mengambil vektor sekaligus, ia telah melintasi kumpulan pelatihan berkali-kali dan menggunakan
prosedur konvergensi Perceptron untuk melatih setiap unit agar memiliki keadaan
benar, mengingat keadaan semua unit lain dalam vektor [Link] statistik menyebut ini
teknik "pseudo-probabilitas
Ada peran komputasi lain untuk Jaringan Hopfield. Alih-alih menggunakan jaringan untuk
menyimpan memori, kita gunakan untuk membangun interpretasi dari input sensorik. Inputnya adalah
diwakili oleh unit yang terlihat, interpretasi diwakili oleh keadaan dari
unit tersembunyi dan kesalahan interpretasi diwakili oleh energi.
6– Mesin Boltzmann
Mesin Boltzmann adalah jenis jaringan saraf rekursif stokastik. Dapat dilihat
sebagai bentuk stokastik dan generatif dari Jaringan Hopfield. Itu adalah salah satu jaringan pertama
neural yang mampu belajar representasi internal dan mampu mewakili serta menyelesaikan
masalah kombinatorial yang sulit.
Tujuan dari pembelajaran algoritma Mesin Boltzmann adalah memaksimalkan produk dari
probabilitas yang diberikan oleh Mesin Boltzmann kepada vektor biner dalam kumpulan
pelatihan. Ini setara dengan memaksimalkan jumlah probabilitas log yang Mesin
Boltzmann mengaitkan dengan vektor pelatihan. Ia juga setara dengan memaksimalkan
kemungkinan kita mendapatkan tepat N kasus pelatihan jika kita melakukan hal berikut:
1) Biarkan jaringan menetap dalam distribusi stasionernya pada waktu N yang berbeda, tanpa
masukan eksternal dan 2) Ubah vektor yang terlihat sekali di setiap iterasi.
Sebuah prosedur efisien untuk pembelajaran mini-batch telah diusulkan untuk Mesin
Boltzmann oleh Salakhutdinov dan Hinton pada tahun 2002.
Backpropagation dianggap sebagai metode standar dalam jaringan saraf buatan untuk menghitung
kontribusi kesalahan setiap neuron setelah memproses satu batch data (kita akan memiliki sebuah bab
seluruh tentang itu). Namun, ada beberapa masalah penting dalam Backpropagation. Di
Pertama-tama, membutuhkan data pelatihan yang berlabel; sementara hampir semua data ada
tanpa label. Kedua, waktu belajar tidak skala dengan baik, yang berarti bahwa itu
sangat lambat di jaringan dengan beberapa lapisan tersembunyi. Ketiga, bisa terjebak di
um "optimum lokal". Oleh karena itu, untuk jaringan dalam, backpropagation jauh dari optimal.
Untuk mengatasi keterbatasan backpropagation, para peneliti mempertimbangkan penggunaan
pendekatan pembelajaran tanpa pengawasan. Ini membantu menjaga efisiensi dan kesederhanaan
menggunakan metode gradien untuk menyesuaikan bobot, tetapi juga menggunakannya untuk memodelkan
struktur dari masukan sensorik. Secara khusus, mereka menyesuaikan bobot untuk memaksimalkan
probabilitas sebuah model telah menghasilkan input sensorik. Pertanyaannya adalah jenis model apa
Generatif, apa yang harus kita pelajari? Bisa jadi model berbasis energi seperti Mesin
de Boltzmann? Atau model kausal yang terbuat dari neuron? Atau hibrida dari keduanya?
Sebuah Deep Belief Network dapat didefinisikan sebagai sekumpulan Mesin Boltzmann
Restritas (RBM– Restricted Boltzmann Machines), di mana setiap lapisan RBM berkomunikasi dengan
seperti lapisan sebelumnya dan lapisan berikutnya. Node dari lapisan mana pun tidak saling berkomunikasi secara lateral.
Tumpukan RBMs ini bisa diakhiri dengan lapisan Softmax untuk membuat klasifikasi, atau
secara sederhana dapat membantu mengelompokkan data yang tidak terekam dalam skenario pembelajaran tanpa
pengawasan.
Dengan pengecualian lapisan awal dan akhir, setiap lapisan dalam Jaringan Keyakinan Dalam memiliki sebuah
fungsi ganda: ia berfungsi sebagai lapisan tersembunyi untuk node yang datang sebelum, dan sebagai lapisan dari
masukan (atau "terlihat") untuk node yang datang setelahnya. Ini adalah jaringan yang dibangun dari jaringan lapisan
unik.
Jaringan Kepercayaan Dalam digunakan untuk mengenali, mengelompokkan, dan menghasilkan gambar, urutan dari
video dan data pengambilan gerakan. Aplikasi lain dari Deep Belief Networks adalah pada
Pemrosesan Bahasa Alami. Jenis jaringan ini diperkenalkan oleh Geoff Hinton dan
murid-murid Anda pada tahun 2006.
8– Auto-Encoder Dalam
Sebuah Deep Auto-Encoder terdiri dari dua jaringan simetris Deep Belief yang biasanya memiliki
empat atau lima lapisan dangkal yang mewakili setengah dari pengkodean (encoder) jaringan dan
set kedua dari empat atau lima lapisan yang membentuk setengah dari dekode
(decoder).
Sebagai lapisan adalah Mesin Boltzmann Terbatas, blok bangunan dari Deep Belief
Jaringan, dengan berbagai keunikan yang akan kita bahas di bawah ini. Berikut adalah sebuah skema
disederhanakan struktur dari Deep Auto-Encoder:
Deep Auto-Encoders adalah cara yang sangat menyenangkan untuk mengurangi dimensi tidak
linear karena beberapa alasan: mereka menyediakan pemetaan fleksibel dalam kedua arah. O
waktu pembelajaran bersifat linier (atau lebih baik) dalam jumlah kasus pelatihan. Dan model
kode akhir cukup kompak dan cepat. Namun, mungkin sangat sulit untuk mengoptimalkan
Deep Auto-Encoders menggunakan backpropagation. Dengan bobot awal yang kecil, gradien dari
backpropagation mati. Tapi kami memiliki cara untuk mengoptimalkannya, menggunakan pra-pelatihan
lapis demi lapis tanpa pengawasan atau hanya menginisialisasi bobot dengan hati-hati.
Deep Auto-Encoders berguna dalam pemodelan topik atau pemodelan statistik topik
abstrak yang didistribusikan dalam kumpulan dokumen, Ini, pada gilirannya, adalah langkah
penting dalam sistem pertanyaan dan jawaban seperti IBM Watson.
Singkatnya, setiap dokumen dalam koleksi diubah menjadi Bag-of-Words (yaitu, sebuah
seperangkat hitungan kata) dan hitungan kata ini disesuaikan untuk
desimal antara 0 dan 1, yang dapat dipandang sebagai probabilitas sebuah kata muncul di
dokumen.
Sebagai penghitung kata dalam skala kemudian dimasukkan ke dalam Jaringan Kepercayaan Dalam, sebuah
tumpukan Mesin Boltzmann Terbatas, yang mereka sendiri hanyalah sebuah subkumpulan dari
Auto-Encoder. Jaringan Keyakinan Dalam ini, atau DBN, mengkompres setiap dokumen menjadi sebuah
seperangkat 10 angka melalui serangkaian transformasi sigmoida yang memetakan mereka di
ruang sumber daya.
Himpunan angka dari setiap dokumen, atau vektor, kemudian dimasukkan ke dalam ruang yang sama
vektorial, dan jaraknya dari vektor dokumen lainnya diukur. Dalam hal
sekitar, vektor dokumen yang dekat termasuk dalam topik yang sama. Oleh karena itu
contoh, sebuah dokumen bisa menjadi 'pertanyaan' dan yang lainnya bisa menjadi 'jawaban', sebuah
kombinasi yang akan dibuat perangkat lunak menggunakan ukuran ruang vektor.
Singkatnya, sekarang ada banyak cara berbeda untuk melakukan pra-pelatihan lapis-oleh-lapis.
lapisan sumber daya. Untuk himpunan data yang tidak memiliki sejumlah besar kasus
dilabeli, pra-pelatihan membantu pembelajaran diskriminatif yang berikutnya. Untuk
set data yang sangat besar dan berlabel, tidak perlu memulai bobot yang digunakan dalam
pembelajaran terawasi menggunakan pra-pelatihan tidak terawasi, bahkan untuk jaringan
profundas. Pra-pelatihan adalah jalan baik pertama untuk menginisialisasi bobot untuk jaringan
profundas, tetapi sekarang ada cara lain. Tapi jika kita membangun jaringan yang jauh lebih besar,
kita akan membutuhkan pralatihan lagi!
Sebagai contoh, mengingat kata-kata dalam sebuah email, sebuah algoritma diskriminatif dapat
memperkirakan apakah pesan itu spam atau tidak_spam. Spam adalah salah satu label dan tas kata (Bag
Kata-kata) coletados do e-mail são os recursos que constituem os dados de entrada. Quando est
masalah dinyatakan secara matematis, label disebut y dan sumber daya disebut x.
Rumus p (y | x) digunakan untuk berarti “probabilitas y diberikan x”, yang dalam hal ini adalah
probabilitas suatu email menjadi spam adalah y diberikan x, yang dalam kasus ini seria
probabilitas email menjadi spam dengan kata-kata yang terkandung.
Oleh karena itu, algoritma diskriminatif memetakan fitur ke label. Mereka khawatir
hanya dengan korelasi ini. Salah satu cara untuk memikirkan tentang algoritma generatif adalah bahwa mereka
mereka melakukan sebaliknya. Alih-alih memprediksi sebuah label dengan fitur tertentu, mereka mencoba memprediksi
sumber daya dengan label tertentu.
Pertanyaan yang coba dijawab oleh algoritma penghasil adalah: menganggap bahwa email ini adalah spam, apa yang
probabilitas sumber daya? Sementara model diskriminatif lebih peduli dengan
hubungan antara y dan x, model generatif memperhatikan “bagaimana Anda mendapatkan x”. Mereka
izinkan Anda menangkap p (x | y), probabilitas x diberikan y, atau probabilitas dari
karakteristik yang ditawarkan dalam sebuah kelas. (Dengan kata lain, algoritma penghasil juga dapat
dapat digunakan sebagai pengklasifikasi, meskipun mereka dapat melakukan lebih dari sekadar mengategorikan data dari
entrada.)
Cara lain untuk memikirkan tentang ini adalah membedakan diskriminatif dari generator dengan cara ini:
Sementara itu, generator sedang membuat gambar-gambar baru yang diteruskan ke diskriminator.
terjadi dengan harapan bahwa mereka, juga, dianggap otentik, meskipun mereka adalah
salah. Tujuan dari generator adalah menghasilkan digit yang ditulis sendiri. Tujuan dari diskriminator
dan mengidentifikasi gambar yang dihasilkan oleh generator sebagai palsu.
Gambar yang dihasilkan ini dimasukkan ke dalam diskriminator bersamaan dengan aliran gambar.
pengambilan dari kumpulan data nyata.
Discriminador menerima gambar nyata dan palsu dan mengembalikan probabilitas, sebuah angka
antara 0 dan 1, dengan 1 mewakili sebuah prediksi keaslian dan 0 mewakili
palsu.
Sebuah diskriminator berada dalam loop umpan balik dengan gambar-gambar asli, yang
kami mengenal.
Pada akhir tahun 2017, Geoffrey Hinton dan timnya menerbitkan dua artikel yang memperkenalkan sebuah
jenis jaringan baru yang disebutKapsul. Selain itu, tim menerbitkan sebuah algoritma yang disebut
routing dinamis antara kapsul, yang memungkinkan pelatihan jaringan ini.
Untuk semua orang di komunitas Deep Learning, ini adalah berita besar, dan untuk berbagai alasan. Di
Pertama-tama, Hinton adalah salah satu pendiri Deep Learning dan seorang penemu dari banyak sekali
model dan algoritma yang saat ini banyak digunakan. Kedua, artikel-artikel ini
menyajikan sesuatu yang sepenuhnya baru, dan ini sangat menggembirakan karena kemungkinan besar
akan mendorong gelombang tambahan dan aplikasi yang sangat inovatif.
SebagaiKapsulmemperkenalkan sebuah blok bangunan baru yang dapat digunakan dalam pembelajaran
profunda untuk memodelkan hubungan hierarkis dengan lebih baik dalam representasi
pengetahuan internal dari jaringan saraf, Intuisi di balik mereka sangat sederhana dan elegan
Hinton dan timnya mengusulkan cara untuk melatih jaringan yang terdiri dari kapsul ini dan
melatihnya dengan sukses dalam kumpulan data sederhana, mencapai kinerja puncak. Ini
ini sangat mendorong. Namun, ada tantangan. Implementasi saat ini jauh lebih lambat
do que outros modelos modernos de aprendizado profundo. O tempo mostrará se as redes
Kapsuldapat dilatih dengan cepat dan efisien. Selain itu, kita perlu melihat apakah mereka
berfungsi dengan baik pada kumpulan data yang lebih sulit dan di berbagai domain.
Dalam hal apapun, jaringanKapsulini adalah model yang sangat menarik dan sudah berfungsi
pasti akan berkembang seiring waktu dan akan berkontribusi pada perluasan yang lebih besar dari
aplikasi pembelajaran mendalam.
Kami memasukkan Capsules di antara 10 arsitektur jaringan saraf utama, karena mereka
mewakili inovasi dan kemajuan di bidang Deep Learning dan sistem yang luar biasa dan bersemangat
Kecerdasan Buatan. Profesional yang benar-benar ingin mengadopsi IA sebagai karier, harus
berhati-hati terhadap gerakan dan inovasi di bidang tersebut.
Ini bukanlah daftar definitif dari arsitektur dan ada yang lain, seperti Word2Vex, Doc2vec,
Embeddings Neural dan variasi dari arsitektur yang disajikan di sini, seperti Denoising
Autoencoder, Autoencoder Variasional, serta kategori lainnya seperti Penguatan Dalam
Belajar. Tepatnya untuk membantu mereka yang mencari pengetahuan terdepan 100% dalam
português dan 100% online, yang kami buat adalah Program Pelatihan Kecerdasan Buatan, satu-satunya program
dari Brasil lengkap, dengan semua alat yang dibutuhkan siswa untuk belajar bekerja
dengan IA secara efisien. Siswa belajar pemrograman paralel di GPU, Deep Learning dan
kerangka kerja Anda, mempelajari arsitektur utama dengan aplikasi praktis dan mengembangkan
aplikasi Penglihatan Komputer dan Pemrosesan Bahasa Alami.
Ini menyimpulkan bagian pertama dari buku ini, dengan pengantar ke alam semesta Deep Learning.
Di bab berikutnya kita akan mulai melihat jaringan saraf beraksi. Sampai saat itu.
BAB 11
Desain Jaringan Saraf untuk Pengenalan Angka
Pada bagian pertama buku online ini, selama 10 bab pertama kami mendefinisikan dan mempelajari
alam semesta jaringan saraf buatan. Pada titik ini Anda harus sudah memiliki pemahaman yang baik
tentang apa algoritma ini dan bagaimana mereka dapat digunakan, selain pentingnya jaringan
neuron untuk membangun sistem Kecerdasan Buatan. Kami siap untuk memulai
konstruksi jaringan saraf dan selanjutnya kita akan mempelajari arsitektur yang lebih canggih.
Mari kita mulai dengan mendefinisikan Desain Jaringan Saraf Untuk Pengenalan Angka,
Tugas pertama kita adalah membangun jaringan saraf untuk mengenali tulisan tangan, yaitu angka.
tulisan tangan yang telah dipindai menjadi gambar di komputer. Mengapa kita akan mulai
dengan jenis tugas ini? Karena ini memungkinkan untuk melalui semua tahap dan prosedur
matematik dari jaringan saraf, sehingga, ini adalah pengantar yang sangat baik. Mari kita mulai?
Jika Anda mengikuti kursus di Data Science Academy, Anda sudah tahu bahwa: sebelum berpikir tentang
Menulis baris kode pertama Anda, perlu mendefinisikan dengan jelas masalah yang akan diselesaikan.
Teknologi ada untuk menyelesaikan masalah dan definisi yang jelas tentang tujuan adalah titik awal
dari setiap proyek yang sukses! Di bab ini kita akan mendefinisikan masalah yang harus diselesaikan, dalam hal ini
kasus pengenalan digit tulisan tangan.
Kita dapat membagi masalah mengenali digit tulisan tangan menjadi dua sub-masalah.
Pertama, kita perlu menemukan cara untuk memecah gambar yang mengandung banyak
digit dalam urutan gambar terpisah, masing-masing berisi satu digit. Oleh
contoh, kami ingin memecah gambar:
Kami manusia menyelesaikan masalah segmentasi ini dengan mudah, tetapi ini adalah tantangan bagi
sebuah program komputer membagi gambar dengan benar. Setelah gambar telah
tersegmentasi, program perlu mengklasifikasikan setiap digit secara individu. Jadi, misalnya,
kami ingin program kami secara otomatis mengenali bahwa digit pertama di atas
adalah 5:
Mari kita fokus untuk menulis program untuk menyelesaikan masalah kedua, yaitu
mengklasifikasikan digit individu. Masalah segmentasi tidak begitu sulit untuk dipecahkan
setelah Anda memiliki cara yang baik untuk mengklasifikasikan digit individu. Ada banyak
mengatasi pendekatan untuk menyelesaikan masalah segmentasi. Salah satu pendekatan adalah menguji banyak
berbagai cara untuk mengsegmentasi gambar, menggunakan klasifikator untuk digit tunggal
tandai setiap segmentasi uji. Sebuah segmentasi uji mendapat skor tinggi jika
klasifikator digit tunggal yakin dengan klasifikasinya di semua segmen
dan merupakan skor rendah jika pengklasifikasi memiliki banyak masalah di satu atau lebih segmen. A
ideanya adalah, jika pengklasifikasi mengalami masalah di suatu tempat, kemungkinan besar itu
menghadapi masalah karena segmentasi dipilih secara salah. Ide ini dan lainnya
variasi dapat digunakan untuk menyelesaikan masalah segmentasi. Jadi, alih-alih
khawatir dengan segmentasi, kami fokus pada pengembangan jaringan saraf yang
dapat menyelesaikan masalah yang paling menarik dan sulit, yaitu mengenali digit individu
manuskrip.
Untuk mengenali digit individu, kita akan menggunakan jaringan saraf tiga lapis:
Lapisan input jaringan berisi neuron yang mengkodekan nilai-nilai piksel masukan.
Sesuai yang akan kita bahas di bab selanjutnya, data pelatihan kami untuk jaringan
akan terdiri dari banyak gambar berukuran 28 kali 28 piksel dari digit yang ditulis tangan yang dipindai dan,
Oleh karena itu, lapisan input berisi 28 × 28 = 784 neuron (Catatan: sebuah gambar tidak lebih dari
adalah sebuah matriks, dalam hal ini dengan dimensi 28×28, yang akan kita konversi menjadi sebuah vektor yang
ukuran akan menjadi 784, di mana setiap item mewakili satu piksel dalam gambar). Piksel masukan adalah
dari skala abu-abu, dengan nilai 0,0 mewakili putih dan nilai 1,0 mewakili
hitam. Nilai perantara mewakili nuansa abu-abu yang semakin gelap.
Lapisan kedua dari jaringan adalah lapisan tersembunyi. Kami akan merepresentasikan jumlah neuron
dalam lapisan tersembunyi oleh n, dan kita akan mencoba nilai yang berbeda untuk n. Contoh
yang ditunjukkan di atas menggambarkan lapisan tersembunyi kecil, yang hanya berisi n = 15 neuron.
Lapisan keluaran dari jaringan mengandung 10 neuron. Jika neuron pertama "menembak" (menjadi
diaktifkan), yaitu, jika ada keluaran ≈ 1, maka ini menunjukkan bahwa jaringan menganggap digit tersebut adalah 0. Jika
neurônio kedua "menembak"(untuk diaktifkan), ini akan menunjukkan bahwa jaringan menganggap digit tersebut adalah 1.
Dan seterusnya. Singkatnya, kita akan memberi nomor pada neuron keluaran dari 0 hingga 9 dan menemukan
neuron mana yang memiliki nilai aktivasi tertinggi. Jika neuron ini adalah, katakanlah, neuron nomor
6, jadi jaringan kami akan menebak bahwa digit inputnya adalah 6. Dan seterusnya untuk yang lainnya
neurons keluaran lainnya.
Anda mungkin bertanya mengapa kami menggunakan 10 neuron keluaran. Lagipula, tujuan jaringan adalah untuk kami
mengatakan digit mana (0,1,2, …, 9) yang sesuai dengan imagensi masuk. Sebuah cara yang tampaknya
sifat alami untuk melakukan ini adalah menggunakan hanya 4 neuron keluaran, memperlakukan setiap neuron sebagai
mengasumsikan nilai biner, tergantung apakah keluaran neuron lebih dekat ke 0 atau 1.
Empat neuron sudah cukup untukmengenkripsi jawaban, karena 2ˆ4 = 16 lebih dari
10 nilai yang mungkin untuk digit masukan. Mengapa jaringan kami harus menggunakan 10 neuron di
daripada itu? Bukankah ini tidak efisien? Justifikasi akhirnya adalah empirik: kita dapat mencoba keduanya
proyek jaringan, dan diperiksa bahwa, untuk masalah spesifik ini, jaringan dengan 10 neuron
de saída belajar mengenali digit lebih baik daripada jaringan dengan 4 neuron keluaran. Tapi ini
masih menyisakan pertanyaan mengapa penggunaan 10 neuron keluaran bekerja lebih baik. Apakah ada beberapa
heuristik yang memberi tahu kita sebelumnya bahwa kita harus menggunakan pengkodean 10 keluaran daripada
apakah pengkodean 4 output?
Memahami mengapa kita melakukan ini, membantu memikirkan tentang apa yang sebenarnya dilakukan oleh jaringan saraf.
Pertimbangkan terlebih dahulu kasus di mana kita menggunakan 10 neuron keluaran. Mari kita fokus pada
neuron keluaran pertama, yang mencoba memutuskan apakah angka tersebut adalah 0 atau bukan. Dia melakukannya
menimbang bukti dari lapisan tersembunyi neuron. Apa yang neuron tersembunyi ini lakukan
melakukan? Baiklah, mari kita anggap bahwa neuron pertama di lapisan tersembunyi mendeteksi atau tidak sebuah
gambar seperti berikut:
Ini dapat dilakukan dengan memberikan bobot yang kuat pada piksel input yang tumpang tindih dengan gambar dan hanya
mendalami sedikit entri lainnya. Dengan cara yang sama, mari kita anggap bahwa yang kedua,
neuron ketiga dan keempat di lapisan tersembunyi mendeteksi apakah gambar berikut ada atau tidak
hadiah:
Seperti yang Anda duga, keempat gambar ini bersama-sama membentuk gambar 0 yang kita lihat.
di garis digit yang ditunjukkan sebelumnya:
Jadi, jika keempat neuron tersembunyi itu aktif, kita dapat menyimpulkan bahwa digitnya adalah
um 0. Claro, esse não é o único tipo de evidência que podemos usar para concluir que a imagem
era um 0– kita secara sah dapat memperoleh 0 dengan banyak cara lain (misalnya,
melalui terjemahan gambar di atas, atau distorsi kecil). Tapi tampaknya aman untuk mengatakan bahwa,
setidaknya dalam kasus ini, kita bisa menyimpulkan bahwa masukannya adalah 0.
Mengingat bahwa jaringan saraf berfungsi demikian, kita dapat memberikan penjelasan yang masuk akal tentang mengapa
lebih baik memiliki 10 keluaran dari jaringan, daripada 4. Jika kita memiliki 4 keluaran, neuron pertama dari
keluaran akan berusaha untuk menentukan apa lagi yang diwakili oleh bit signifikan dari digit tersebut. Dan tidak ada yang
cara mudah untuk menghubungkan bit paling signifikan ini dengan bentuk sederhana, seperti yang ditunjukkan
Di atas. Bentuk komponen dari digit akan sangat terkait dengan (katakanlah) yang
sedikit lebih signifikan dalam keluaran.
Semua ini hanyalah sebuah heuristik. Tidak ada yang mengatakan bahwa jaringan saraf tiga lapis harus beroperasi
dengan cara yang kami deskripsikan, dengan neuron tersembunyi yang mendeteksi bentuk komponen
sederhana. Mungkin sebuah algoritma pembelajaran cerdas menemukan beberapa penugasan bobot
yang memungkinkan kita hanya menggunakan 4 neuron keluar. Namun, menggunakan heuristik yang baik dapat
menghemat banyak waktu dalam merancang arsitektur jaringan saraf yang baik.
Kami sudah memiliki desain untuk jaringan saraf kami. Sekarang kita perlu menentukan bagaimana itu akan menjadi
proses pembelajaran algoritma, sebelum mulai mengkode jaringan kami dalam bahasa
Python. Kami akan menggunakan pelatihan dengan Gradien Turun, topik di bab berikutnya,
yang sebenarnya tidak akan saya lewatkan untuk apa pun, jika saya menjadi Anda, karena di situlah berada 'sihir' di balik jejaring sosial
neural. Sampai jumpa!
Untuk mengikuti bab-bab berikutnya dan menerapkan contoh-contoh tersebut, Anda harus memiliki Anaconda
Python terinstal di komputer Anda dengan versi Python 3.6.x. Akses bab 1 dari kursus
gratisDasar-Dasar Python untuk Analisis Datauntuk belajar bagaimana menginstal Anaconda.
Referensi:
Pelatihan Kecerdasan Buatan
Fungsi Sigmoid
Pembelajaran Mesin
Elemen Pembelajaran Statistika: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Jaringan Syaraf dan Pembelajaran Mendalam(beberapa bagian diambil dan diterjemahkan dengan izin
kepada penulisMichael Nielsen
BAB 12
Pembelajaran dengan Penurunan Gradien
Di chapter sebelumnya, kami telah mendefinisikan desain untuk jaringan saraf kami dan sekarang kami dapat memulai
proses pembelajaran mesin. Di bab ini Anda akan memahami apa itu
Pembelajaran Dengan Turunan Gradien.
Hal pertama yang kita butuhkan adalah sekumpulan data untuk melatih jaringan. Kami akan menggunakan
kumpulan dataMNISTyang berisi puluhan ribu gambar yang dipindai dari
digit manuskrip, bersama dengan klasifikasinya yang benar. Nama MNIST berasal dari fakta
dari apa yang merupakan subset yang dimodifikasi dari dua set data yang dikumpulkan oleh NIST, Institut
Nacional de Padrões e Tecnologia dos Estados Unidos. Berikut adalah beberapa gambar dari MNIST:
MNIST memiliki dua bagian. Bagian pertama berisi 60.000 gambar untuk digunakan sebagai
data pelatihan. Gambar-gambar ini adalah sampel manuskrip yang dipindai dari 250 orang,
setengah dari karyawan Biro Sensus AS dan setengah dari siswa sekolah
sedang. Gambar-gambar tersebut dalam skala abu-abu dan berukuran 28 kali 28 piksel. Bagian kedua dari
set data MNIST memiliki 10.000 gambar yang akan digunakan sebagai data pengujian, juga
28 oleh 28 piksel dalam skala abu-abu. Kami akan menggunakan data tes untuk mengevaluasi seberapa baik kita
jaringan saraf belajar mengenali digit. Untuk menjadikannya sebagai uji coba kinerja yang baik,
data uji diambil dari kumpulan berbeda dari 250 orang dibandingkan dengan
data pelatihan asli (meskipun masih menjadi kelompok yang terbagi antara karyawan dari
Biro Sensus dan siswa sekolah menengah). Ini membantu kami untuk yakin bahwa sistem kami dapat
mengenali digit orang yang tulisannya tidak terlihat selama pelatihan.
Kami akan menggunakan notasi x untuk menunjukkan sebuah entri (input) pelatihan. Ini akan nyaman
menganggap setiap entri pelatihan x (setiap gambar) sebagai vektor dari 784 posisi (28
x 28 piksel). Gambar di bawah ini menunjukkan bagaimana vektor ini dibangun:
Setiap entri dalam vektor mewakili nilai abu-abu untuk satu piksel di gambar. Mari kita
tunjukkan output yang diinginkan sesuai dengan y = y(x), di mana y adalah vektor dengan dimensi 10. Oleh karena itu
contoh, jika sebuah gambar pelatihan khusus, x, mewakili angka 3, maka y(x) =
(0,0,0,1,0,0,0,0,0,0)T adalah keluaran yang diharapkan dari jaringan. Perhatikan bahwa T di sini adalah operasi dari
transposisi, mengubah vektor baris menjadi vektor biasa (kolom). Mari kita tinggalkan
ini lebih jelas. Perhatikan gambar di bawah ini:
Mari kita gunakan pixel gambar yang sesuai dengan aliran keseluruhandisebut "fitur". Yang
Label adalah One-Hot Encoded 1-hot. Label yang mewakili kelas keluaran gambar dengan
digit 3 menjadi-se "0001000000" sekali karena kita memiliki 10 kelas untuk 10 digit yang mungkin,
di mana indeks pertama sesuai dengan digit "0" dan yang terakhir sesuai dengan digit "9".
Apa yang kita inginkan adalah algoritma yang memungkinkan kita menemukan bobot dan bias agar output dari
rede mendekati y(x) untuk semua entri pelatihan x. Untuk mengukur seberapa baik
kami sedang mencapai tujuan ini, kami menentukan fungsi biaya:
Fungsi Biaya Kuadratik
Na fórmula acima, w indica a coleta de todos os pesos na rede, b todos os bias (viés), n é o
jumlah total entri pelatihan, a adalah vektor keluaran dari jaringan (ketika x adalah input) dan
jumlah adalah tentang semua masukan pelatihan x. Tentu saja, keluaran a bergantung pada x, w dan b, tetapi
Untuk menjaga notasi tetap sederhana, saya tidak menunjukkan ketergantungan ini secara eksplisit. Notasi
‖v‖ hanya menunjukkan fungsi panjang biasa untuk vektor v. Kita akan menyebut C sebagai fungsião de
biaya kuadratik, yang juga dikenal sebagai kesalahan kuadratik rata-rata atau hanya MSE
(Rata-Rata Kesalahan Kuadrat). Dengan menginspeksi bentuk fungsi biaya kuadrat, kita melihat bahwa C (w,
b) tidak negatif, karena setiap suku dalam jumlah tidak negatif. Selain itu, biaya C (w, b) menjadi-
se kecil, yaitu, C (w, b) ≈ 0, tepatnya ketika y(x) kira-kira sama dengan keluaran, a,
untuk semua entri pelatihan x.
Oleh karena itu, algoritma pelatihan kami bekerja dengan baik jika dapat menemukan bobot dan
biasagar C (w, b) ≈ 0. Ini pada dasarnya berarti bahwa model kami telah membuat prediksi
benar, yaitu setiap kali kita menunjukkan kepada model sebuah gambar dengan digit 3, ia mampu
untuk mengakui bahwa ini adalah nomor 3.
Sebaliknya, algoritma tidak akan memiliki kinerja yang baik, ketika C (w, b) adalah nilai yang lebih besar dari 0
– ini berarti bahwa algoritma kami tidak dapat membuat prediksi, yaitu, saat
Diperlihatkan gambar dengan digit 3, ia tidak mampu memprediksi bahwa itu adalah angka 3.
Ini terjadi karena perbedaan antara nilai sebenarnya dari output dan nilai yang diprediksi oleh model adalah
sangat tinggi. Dengan demikian, tujuan algoritma pelatihan kami adalah untuk meminimalkan biaya C(w, b)
dalam fungsi bobot dan bias. Dengan kata lain, kita ingin menemukan satu set bobot
e bias yang membuat biaya serendah mungkin. Mari kita lakukan ini dengan menggunakan algoritma yang dikenal
seperti Penurunan Gradien (Descent Gradient).
Sebelum itu, ada pertanyaan. Mengapa memperkenalkan biaya kuadratik? Lagipula, kita tidak tertarik
terutama oleh jumlah gambar yang diklasifikasikan dengan benar oleh jaringan? Mengapa tidak
berusaha memaksimalkan angka ini secara langsung, daripada meminimalkan ukuran, seperti biaya
kuadratik? Masalah dengan itu adalah bahwa jumlah gambar yang diklasifikasikan dengan benar tidak
sebuah "fungsi halus" dari bobot dan bias di jaringan. Umumnya, melakukan perubahan kecil pada
pesos dan bias tidak akan menyebabkan perubahan pada jumlah gambar pelatihan
klasifikasi dengan benar. Ini membuat sulit untuk mengetahui bagaimana mengubah bobot dan bias untuk
sayameningkatkan kinerja. Jika, sebagai gantinya, kita menggunakan "fungsi biaya halus", seperti biaya
kuadratik, menjadi mudah untuk menemukan cara membuat perubahan kecil pada bobot dan bias untuk
mendapatkan perbaikan dalam biaya. Itulah mengapa kami fokus terlebih dahulu pada minimisasi dari
biaya kuadratik dan kemudian kita akan memeriksa ketepatan klasifikasi.
Bahkan jika kita mempertimbangkan bahwa kita ingin menggunakan "fungsi biaya yang halus", Anda masih bisa
bertanya mengapa kita memilih fungsi kuadratik. Mungkin jika kita memilih sebuah fungsi dari
biaya yang berbeda, kita akan mendapatkan satu set bobot dan bias yang sepenuhnya berbeda? Ini adalah sebuah
kekhawatiran yang valid dan, nanti, kita akan mengunjungi kembali fungsi biaya dan akan melakukan beberapa
modifikasi. Namun, fungsi biaya kuadratik yang ditunjukkan sebelumnya berfungsi
sempurna untuk memahami konsep dasar pembelajaran di jaringan saraf, jadi
kita akan tetap dengan ini untuk sementara.
Merekap, tujuan kami dalam membangun jaringan saraf adalah menemukan bobot dan bias yang
minimalkan fungsi biaya kuadratik C (w, b).
Penurunan Gradien
Sebagian besar tugas dalam Pembelajaran Mesin sebenarnya adalah masalah optimisasi dan salah satu dari
algoritma yang paling banyak digunakan untuk ini adalah Algoritma Penurunan Gradien. Untuk seorang pemula,
nama Algoritma Penurunan Gradien mungkin terdengar menakutkan, tetapi saya berharap setelah
Baca apa yang ada di bawah ini, ini tidak akan menjadi misteri bagi Anda.
Untuk memahami intuisi dari Penurunan Gradien, mari kita menyederhanakan sedikit hal-hal.
Mari kita bayangkan bahwa kita baru saja menerima sebuah fungsi dengan banyak variabel dan kita ingin
minimalkan fungsi ini. Mari kembangkan teknik yang disebut Penurunan Gradien yang dapat
digunakan untuk menyelesaikan masalah minimisasi semacam itu. Jadi, kita akan kembali ke fungsi
spesifik yang ingin kita minimalkan untuk jaringan saraf.
Oke, mari kita anggap kita mencoba meminimalkan suatu fungsi, C(v). Ini bisa jadi
fungsi nilai nyata dari banyak variabel, di mana v = v1,v2, …. Perhatikan bahwa saya mengganti
notasi w dan b untuk menekankan bahwa ini bisa menjadi fungsi apa pun– kami tidak lagi
berpikir secara khusus dalam konteks jaringan syaraf saja. Untuk meminimalkan C (v), kita akan
membayangkan C sebagai suatu fungsi dari hanya dua variabel, yang akan kita sebut v1 dan v2, sesuai dengan
dapat dilihat pada gambar di bawah:
Apa yang kami inginkan adalah menemukan di mana C mencapai minimum globalnya. Jelas, untuk fungsi
dilacak pada grafik di atas, kita dapat dengan mudah mengamati grafik dan menemukan minimum. Tapi
fungsi umum, C, dapat menjadi fungsi rumit dengan banyak variabel, dan biasanya tidak
apakah mungkin hanya mengamati grafik untuk menemukan nilai minimum.
Salah satu cara untuk menyerang masalah adalah menggunakan Kalkulus (khususnya Aljabar Linier) untuk mencoba
menemukan minimum secara analitis. Kita bisa menghitungturunandan kemudian mencoba menggunakannya untuk
menemukan tempat di mana C adalah sebuahekstrim. Ini bisa berfungsi ketika C adalah sebuah fungsi dari
hanya satu atau beberapa variabel. Tetapi akan berubah menjadi mimpi buruk ketika kita memiliki
banyak variabel lainnya. Dan untuk jaringan saraf, seringkali kita menginginkan lebih banyak variabel
– jaringan saraf terbesar memiliki fungsi biaya yang bergantung pada miliaran bobot dan bias
cara yang sangat rumit. Menggunakan "hanya" Kalkulus untuk meminimalkan ini, tidak
itu akan berfungsi dan kita perlu sesuatu yang lebih! Kita perlu algoritma optimisasi yang mampu
minimalkan C (v).
Untungnya, ada sebuah analogi yang membantu kita memahami cara menemukan solusinya.
Kami mulai dengan memikirkan fungsi kami sebagai semacam lembah dan membayangkan sebuah bola
berguling di lereng lembah, seperti yang terlihat pada gambar di bawah. Pengalaman harian kami
nos berkata bahwa bola akan bergulir ke dasar lembah. Mungkin kita bisa menggunakan ide ini sebagai
cara untuk menemukan minimum untuk fungsi? Kami akan memilih secara acak satu poin dari
permainan untuk bola (imajiner), dan kemudian kami akan mensimulasikan gerakan bola saat ia
rol hingga ke dasar lembah. Kita bisa melakukan simulasi ini hanya dengan turunannya dari
komputasi fungsi C– turunan ini akan memberi tahu kita semua yang perlu kita ketahui tentang
bentuk lokal dari lembah, dan, oleh karena itu, bagaimana bola kita harus bergulir.
Artinya, Penurunan Gradien adalah algoritma optimisasi yang digunakan untuk mencari nilai-nilai
dari parameter (koefisien atau jika Anda lebih suka w dan b– berat dan bias dari suatu fungsi yang meminimalkan
fungsi biaya. Penurunan Gradien lebih baik digunakan ketika parameter tidak dapat
ser dihitung secara analitis (misalnya, menggunakan aljabar linier) dan harus diteliti
melalui algoritma optimisasi.
Prosedur dimulai dengan nilai awal untuk koefisien atau koefisien fungsi. Ini
bisa 0.0 atau nilai kecil acak (inisialisasi koefisien adalah bagian penting
proses dan berbagai teknik dapat digunakan, dengan pilihan menjadi tanggung jawabIlmuwan dari
Datae do problema yang harus dipecahkan dengan model). Kita bisa memulai dengan cara ini
koefisien (nilai w dan b):
coeficiente = 0,0
custo = f (koefisien)
kamu
Turunan dari biaya dihitung. Turunan adalah konsep dalam Kalkulus dan merujuk pada kemiringan dari
fungsi pada titik tertentu. Kita perlu mengetahui kemiringan agar kita bisa
mengetahui arah (tanda) untuk menggeser nilai koefisien untuk mendapatkan biaya yang lebih rendah
pada iterasi selanjutnya.
Agora que sabemos da derivada em que direção está em declive, podemos atualizar os valores
dua koefisien. Sebuah parameter laju pembelajaran (alfa) harus ditentukan dan mengontrol
seberapa banyak koefisien dapat berubah dalam setiap pembaruan.
Penurunan Gradien itu sederhana, tetapi memerlukan perhitungan gradien dari fungsi biaya
Anda mengoptimalkan fungsi yang Anda maksud, tetapi selain itu, itu sangat langsung. Singkatnya:
Anda membagi data Anda menjadi sampel dan setiap sampel, Anda memberikan masukan
melalui jaringan, kalikan dengan bobot, jumlahkan, dan pada akhirnya Anda akan mendapatkan keluaran Anda (perkiraan dari
Anda kemudian membandingkan output jaringan Anda dengan jawaban yang benar, menghitung kesalahan, dan
jadi lakukan retrograde kesalahan ini (backpropagation), menyesuaikan bobot setiap neuron dari
setiap lapisan. Ketika Anda selesai melakukan pembaruan bobot, sebuah sampel baru adalah
diperkenalkan dan itu akan dikalikan dengan bobot yang sudah diperbarui. Proses ini untuk memperbarui
berat disebut sebagai "pembelajaran".
Jika Anda mengamati algoritma yang paling terbaru, semuanya bekerja dalam sebuah konsep
relatif baru yang disebut mini-lots (mini-batches). Untuk mengoptimalkan
kinerja, yang dilakukan adalah melewati jaringan beberapa sampel (misalnya 128
amostras), menghitung kesalahan rata-rata mereka dan kemudian melakukan backpropagation dan pembaruan
dua peso. Dari sudut pandang pembaruan berat, 1 sampel = 128 sampel. Ini
ini adalah konsep yang lebih baru, diperlukan terutama dalam pelatihan besar
model-model Deep Learning.
Selanjutnya, kita akan melihat bagaimana kita bisa menggunakan ini dalam algoritma pembelajaran mesin.
Tujuan dari semua algoritma pembelajaran mesin terawasi adalah untuk memperkirakan sebuah
fungsi tujuan (f) yang memetakan data masukan (X) ke variabel keluaran (Y). Ini
descreve todos os problemas de classificação e regressão (aprendizagem supervisionada).
Dari fungsi biaya, sebuah turunan dapat dihitung untuk setiap koefisien sehingga ia
dapat diperbarui menggunakan persamaan pembaruan yang tepat seperti yang dijelaskan di atas.
Penurunan gradien dalam batch adalah bentuk paling umum dari penurunan gradien dalam Mesin
Pembelajaran.
Penurunan Gradien dapat berjalan lambat pada kumpulan data yang sangat besar.
Karena sebuah iterasi dari algoritma penurunan gradien memerlukan sebuah prediksi untuk setiap
instansi di kumpulan data pelatihan, bisa memakan waktu lama ketika Anda memiliki banyak
jutaan instansi.
Dalam situasi di mana Anda memiliki sejumlah besar data, Anda dapat menggunakan variasi
dari penurunan gradien yang disebut Stochastic Gradient Descent.
Dalam variasi ini, prosedur penurunan gradien yang dijelaskan di atas dilaksanakan, tetapi a
pembaruan untuk koefisien dilakukan untuk setiap instansi pelatihan, bukan di akhir
dari kumpulan instansi.
Langkah pertama dari prosedur ini mengharuskan urutan kumpulan data pelatihan
secara acak. Artinya, mengacak urutan pembaruan yang dilakukan pada koefisien.
Karena koefisien diperbarui setelah setiap instansi pelatihan, pembaruan akan
barulhentas melompat kesana kemari, dan dengan cara itu biaya yang sesuai akan berfungsi. Saat mencampurkan
perintah untuk pembaruan koefisien, ia memanfaatkan perjalanan acak ini dan menghindari
agar dia tetap 'teralihkan' atau terjebak.
Prosedur pembaruan untuk koefisien adalah sama dengan yang sebelumnya, kecuali bahwa
biaya tidak dijumlahkan di semua pola pelatihan, melainkan dihitung untuk satu pola
pelatihan.
Pembelajaran dapat jauh lebih cepat dengan penurunan gradien stokastik untuk
set data pelatihan yang sangat besar dan seringkali Anda hanya perlu satu
jumlah kecil passage melalui dataset untuk mencapai satu set dari
koefisien yang cukup baik.
Ufa, kamu masih di sana? Sekarang kamu mengerti mengapa Ilmuwan Data dan Insinyur AI harus
menjadi sangat bergaji tinggi? Mereka adalah "penyihir" yang membantu mengubahdunia
dengan Pembelajaran Mesin. Dan bab ini hanyalah pengantar singkat! Kita akan kembali ke ini
mas caso você queira
belajar secara rinci bagaimana semua ini berfungsi dan membuat model Anda menggunakan bahasa R,
Python, Scala, atau Java, untuk aplikasi komersial, periksa:Pembelajaran MesinMesin
Belajar dengan Scala dan Spark,Pembelajaran MendalameAnalisis Prediktif dengan Machine Learning di Java.
Saya yakin Anda sangat ingin membuat dan melatih jaringan saraf pertama Anda. Jadi, tidak
hilangkan bab berikutnya!
Referências:
Pelatihan Kecerdasan Buatan
Pembelajaran Mesin
MNIST
Turunan
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Baiklah. Saatnya tiba. Mari kita menulis program dalam bahasa Python yang belajar bagaimana
mengakui digit tulisan tangan, menggunakanStochastic Gradient Descent dan dataset dari
{"text":"pelatihan MNIST. Jika Anda sudah sampai di sini tanpa membaca bab-bab sebelumnya, maka berhenti"}
segera, baca 12 bab terakhir dan kemudian kembali ke sini! Jangan terburu-buru! Tidak ada
jalan pintas untuk belajar!
Bab ini mempertimbangkan bahwa Anda sudah memiliki interpreter Python (versi 3.6.x) terpasang di komputer Anda.
komputer, baik itu dengan sistem operasi Windows, MacOS, atau Linux. Kami merekomendasikan bahwa
anda menginstalAnakondadan sudah memiliki pengetahuan dalam bahasa Python. Jika ini bukan
kasus Anda, sebelum membaca bab ini dan menjalankan contoh-contoh yang diberikan di sini, akses kursus
gratisPython Dasar Untuk Analisis Data.
Kita akan menggunakan Python 3 dan skrip-skrip dapat ditemukan di repositori buku diGitHubAyo
mulai!
*************************************************************************
Ketika kita menggambarkan dataset MNIST sebelumnya, kami mengatakan bahwa itu dibagi menjadi
60.000 gambar pelatihan dan 10.000 gambar pengujian. Ini adalah deskripsi resmi dari MNIST.
Tapi mari kita membagi data dengan cara yang sedikit berbeda. Kita akan membiarkan gambar uji sebagai
Kami akan membagi set pelatihan MNIST yang terdiri dari 60.000 gambar menjadi dua bagian:
sekelompok 50.000 gambar, yang akan kami gunakan untuk melatih jaringan saraf kami dan sebuah kumpulan
terpisah dari validasi 10.000 gambar. Kami tidak akan menggunakan data validasi ini di sini
bab, namun nanti, di sini juga dalam buku, kami akan menggunakan dataset ini ketika kami sedang
mengkonfigurasi beberapa hiperparameter dari jaringan syaraf, seperti laju pembelajaran misalnya.
Meskipun data validasi tidak termasuk dalam spesifikasi MNIST asli, banyak orang
Gunakan MNIST dengan cara ini dan penggunaan data validasi adalah hal yang umum dalam jaringan saraf. Ketika
saya akan merujuk pada "data pelatihan MNIST" dari sekarang, saya akan merujuk pada kami
kumpulan data 50.000 gambar, dan bukan kumpulan data 60.000 gambar. Tetap
waspada!
Selain data MNIST, kita juga membutuhkan pustaka Python yang disebut Numpy, untuk
aljabar linear. Jika Anda telah menginstal Anaconda, Anda tidak perlu khawatir, karena Numpy sudah ada
terinstal. Jika tidak, perlu melakukan instalasi paket.
Sebelum memuat dan membagi data, mari kita pahami fitur utama dari kami
kode untuk membangun jaringan saraf. Bagian utama adalah kelas yang disebutJaringan, que
kami gunakan untuk merepresentasikan jaringan saraf.
Di bawah ini adalah kelas Jaringan dan konstruktornya:
Dalam kode ini, parametersizes mengandung jumlah neuron di lapisan masing-masing, yaitu
sebuah objek tipe daftar di Python. Jadi, misalnya, jika kita ingin membuat sebuah objek dari kelas
Jaringan dengan 2 neuron di lapisan pertama, 3 neuron di lapisan kedua dan 1 neuron
di lapisan terakhir, berikut adalah kode yang kami gunakan untuk menginstansiasi objek dari kelas Jaringan:
Os bias e pesos no objeto rede1 são todos inicializados aleatoriamente, usando a função
[Link] untuk menghasilkan distribusi Gaussian dengan rata-rata 0 dan deviasi standar 1.
Inisialisasi acak ini memberikan algoritma penurunan gradien stokastik kita suatu lokasi untuk
mulai. Di bab-bab selanjutnya, kita akan menemukan cara yang lebih baik untuk menginisialisasi bobot dan
bias. Perhatikan bahwa kode inisialisasi jaringan mengasumsikan bahwa lapisan neuron pertama adalah
sebuah lapisan input dan mengabaikan definisi dari bias apapun untuk neuron-neuron tersebut, karena
bias hanya digunakan untuk menghitung keluaran lapisan-lapisan berikutnya.
Perhatikan juga bahwa bias dan bobot disimpan sebagai daftar matriks Numpy. Jadi, untuk
contoh, [Link][1] adalah matriks Numpy yang menyimpan bobot yang menghubungkan kedua dan
lapisan neuron ketiga. (Ini bukan lapisan pertama dan kedua, karena pengindeksan dari
daftar di Python dimulai dari 0.) Mengingat [Link][1] cukup mendetail, mari kita hanya
indikasikan matriks ini w. Ini adalah matriks sehingga wjk adalah bobot untuk koneksi antara neuron kth dalam
lapisan kedua dan neuron jth di lapisan ketiga. Pengurutan indeks j dan k ini mungkin tampak
aneh–pasti akan lebih masuk akal untuk menukar indeks j dan k? Keuntungan besar menggunakan ini
pengurutan adalah apa yang berarti bahwa vektor aktivasi dari lapisan neuron ketiga adalah:
Persamaan1
Perhatikan bahwa ketika input z adalah vektor atau matriks Numpy, Numpy menerapkan
secara otomatis fungsi sigmoid elemen demi elemen, yaitu dalam bentuk vektorisasi.
Selanjutnya, kami menambahkan metode feedforward ke dalam kelas Network, yang, diberikan input a untuk
jaringan, mengembalikan keluaran yang sesuai. Pada dasarnya metode feedforward menerapkan Persamaan 1
ditunjukkan di atas, untuk setiap lapisan:
Kegiatan utama yang kami ingin objek dari kelas Jaringan lakukan adalah belajar.
Untuk tujuan ini, kita akan membuat metode SGD (Stochastic Gradient Descent). Berikut adalah kodenya. Ini adalah
sedikit misterius di beberapa tempat, tetapi kami akan menjelaskan secara rinci di bawah ini:
Odata_pelatihanini adalah daftar tuple (x, y) yang mewakili masukan pelatihan dan
keluaran yang diinginkan. Variabeleraemini_batch_size adalah apa yang kamu
menunggu– jumlah epoch untuk melatih dan ukuran mini-batch yang akan digunakan
selama pengambilan sampel, sementaraetaadalah laju pembelajaran, η. Jika argumen opsional
data_uji yang diberikan, program akan mengevaluasi jaringan setelah setiap periode pelatihan dan
akan mencetak kemajuan parsial. Ini berguna untuk melacak kemajuan, tetapi memperlambat
substantially things.
Kode berfungsi sebagai berikut. Setiap epoch, ia mulai dengan menyeret secara acak
data pelatihan dan kemudian membaginya menjadi mini-batch dengan ukuran yang sesuai. Ini
ini adalah cara mudah untuk pengambilan sampel acak dari data pelatihan. Jadi, untuk setiap
mini_batch, kita menerapkan satu langkah penurunan gradien. Ini dilakukan oleh kode
self.update_mini_batch (mini_batch, eta), yang memperbarui bobot dan bias jaringan sesuai dengan
satu iterasi tunggal dari penurunan gradien, menggunakan hanya data pelatihan di
mini_batch. Berikut adalah kode untuk metode update_mini_batch:
Sebagian besar pekerjaan dilakukan oleh baris delta_nabla_b, delta_nabla_w = [Link] (x, y).
Ini memanggil sesuatu yang disebut algoritma backpropagation, yang merupakan cara cepat untuk menghitung
o gradiente dari fungsi biaya. Jadi, update_mini_batch berfungsi hanya dengan menghitung
gradien ini untuk setiap contoh pelatihan di mini_batch dan kemudian memperbarui
[Link] dan [Link] dengan tepat.
Di bawah ini Anda menemukan kode untuk [Link], tetapi kami tidak akan mempelajarinya sekarang.
Kami akan mempelajari secara rinci bagaimana backpropagation berfungsi di bab berikutnya, termasuk
kode untuk [Link]. Untuk saat ini, cukup anggap bahwa ia berperilaku seperti yang disebutkan,
mengembalikan gradien yang sesuai untuk biaya yang terkait dengan contoh pelatihan x.
No programa completo disponível no GithubAnda akan menemukan komentar yang menjelaskan bagaimana
proses terjadi sepenuhnya. Selain [Link], program ini bersifat autodijelaskan– semua
angkat berat dilakukan di [Link] dan self.update_mini_batch, yang sudah kita diskusikan. Metode
[Link] menggunakan beberapa fungsi tambahan untuk membantu dalam perhitungan gradien,
khususnya sigmoid_prime, yang menghitung turunan dari fungsi σ dan self.cost_derivative.
Kelas Jaringan adalah pada dasarnya algoritma jaringan saraf kita. Dari sini kita membuat sebuah
instância (seperti jaringan1), kami memberi makan dengan data pelatihan dan melakukan pelatihan.
Kami kemudian mengevaluasi kinerja jaringan dengan data uji dan mengulang seluruh proses sampai
mencapai tingkat akurasi yang diinginkan dalam proyek kami. Ketika model final siap,
kami menggunakan untuk melakukan perkiraan untuk mana model dibuat, menyajikan kepadanya yang baru
kumpulan data dan mengekstrak prediksi. Perhatikan bahwa ini adalah algoritma jaringan saraf
sangat sederhana, tetapi memungkinkan untuk memahami bagaimana jaringan saraf berfungsi dan nanti,
di sini juga di buku, jaringan saraf dalam atau Deep Learning.
Di bab berikutnya kita akan melanjutkan bekerja dengan algoritma ini dan memahami bagaimana
fungsi Backpropagation. Selanjutnya, kita akan memuat data, melatih, dan menguji jaringan kita
neural dan kemudian menggunakannya untuk mengenali digit tulisan tangan. Sampai saat itu.
Referências:
Pelatihan Kecerdasan Buatan
Pembelajaran Mesin
Pembelajaran Mesin dengan Scala dan Spark
MNIST
Turunan
Pembelajaran Mesin
Elemen Pembelajaran Statistika: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Di chapter terakhir, kita melihat bagaimana jaringan saraf dapat belajar bobot dan biasnya menggunakan
algoritma gradien menurun. Namun, ada kekurangan dalam penjelasan kami: tidak
kami membahas cara menghitung gradien dari fungsi biaya. Di bab ini, kami akan menjelaskan tentang
sebuah algoritma yang digunakan untuk menghitung gradien ini, sebuah algoritma yang dikenal sebagai
backpropagation. Karena tema ini adalah inti dari pelatihan jaringan saraf, mari kita bagi-
Saya dalam dua bab. Mari kita mulai dengan Algoritma Backpropagation Bagian 1– Grafos
Komputasional dan Aturan Rantai.
O backpropagationadalah algoritma yang tidak dapat disangkal paling penting dalam sejarah jaringan
neural– Tanpa backpropagation, hampir tidak mungkin untuk melatih jaringan pembelajaran.
mendalam seperti yang kita lihat hari ini. Backpropagation dapat dianggap sebagai batu penjuru
jaringan saraf modern dan akibatnya dari Deep Learning.
O backpropagationitu adalah algoritma kunci yang membuat pelatihan model mendalam menjadi sesuatu
computationally tractable. Untuk jaringan saraf modern, ia bisa membuat pelatihan
dengan gradien menurun hingga sepuluh juta kali lebih cepat, dibandingkan dengan sebuah
implementasi yang naif. Ini adalah perbedaan antara model yang memerlukan waktu beberapa jam atau hari
melatih dan ada yang bisa memakan waktu bertahun-tahun (tanpa melebih-lebihkan).
Selain penggunaannya dalam Deep Learning, backpropagation adalah alat yang kuat
komputasi di banyak bidang lainnya, mulai dari perkiraan cuaca hingga analisis stabilitas
numerik. Sungguh, algoritma ini telah ditemukan kembali setidaknya puluhan kali dalam berbagai
campo. Nama umum, terlepas dari aplikasinya, adalah "diferensiasi dalam mode terbalik".
Pada dasarnya, backpropagation adalah teknik untuk menghitung turunan dengan cepat.
Apakah Anda tahu apa itu turunan? Konsultasikan tautan untuk video luar biasa dalam bahasa Portugis yang menjelaskan ini.
konsep secara rinci dalam referensi di akhir bab ini). Dan itu adalah trik yang penting, tidak
hanya dalam Deep Learning, tetapi dalam berbagai situasi komputasi numerik.
Dan untuk memahami backpropagation secara efektif, mari kita terlebih dahulu memahami
konsep graf komputasional dan aturan rantai.
Graf Komputasi
Grafos komputasi adalah cara yang baik untuk memikirkan tentang ekspresi matematis. Konsep
de grafo diperkenalkan olehLeonhard Euler pada tahun 1736 untuk mencoba menyelesaikan masalah
dasJembatan [Link] adalah model matematis untuk menyelesaikan masalah praktis
dari hari ke hari, dengan berbagai aplikasi di dunia nyata seperti: sirkuit listrik, jaringan dari
distribusi, hubungan kekerabatan antar orang, analisis jaringan sosial, logistik, jaringan dari
jalan, jaringan komputer, dan banyak lagi. Graf digunakan secara luas untuk memodelkan
masalah dalam komputer.
Sebuah Graf adalah model matematis yang menggambarkan hubungan antara objek. Sebuah graf G = (V, E)
terdiri dari sekumpulan simpulV(juga disebut simpul), terhubung oleh satu set dari
bordas ou arestasE. Untuk mempelajari lebih lanjut tentang graf, klikdi sini.
e = (a + b)∗ (b + 1)
Ada tiga operasi: dua penjumlahan dan satu perkalian. Untuk memudahkan pemahaman tentang
itu, kita akan memperkenalkan dua variabel perantara c dan d agar keluaran dari setiap fungsi memiliki
sebuah variabel. Kami sekarang memiliki:
c=a+b
d=b+1
e = c∗d
Untuk membuat grafik komputasi, kita melakukan masing-masing dari operasi ini pada kitabersama-sama
dengan variabel input. Ketika nilai sebuah simpul adalah input untuk simpul lain, sebuah panah akan
dari satu ke yang lain dan kita memiliki dalam kasus ini sebuah graf terarah.
Jenis-jenis graf ini muncul setiap saat di Ilmu Komputer, khususnya saat berbicara
tentang program fungsional. Mereka terkait erat dengan konsep graf.
dependensi dan graf panggilan. Mereka juga merupakan abstraksi utama di balik yang populer
kerangka kerja Deep Learning, oTensorFlow.
Kita bisa mengevaluasi ekspresi dengan mendefinisikan variabel input untuk nilai-nilai tertentu dan
menghitung simpul melalui grafik. Misalnya, kita akan mendefinisikan a = 2 dan b = 1:
Jika seseorang ingin memahami turunan dalam graf komputasional, kuncinya adalah memahami
turunan di tepi (sisi yang menghubungkan simpul di grafik). Jikaaafeta diretamentec, jadi
kami ingin tahu bagaimana ini mempengaruhic. Se amudah sedikit, seperticmuda? Kami menyebutnya
turunan parsial daricsehubungan dengana.
Untuk mengevaluasi turunan parsial pada grafik ini, kita memerlukan aturan penjumlahan dan aturan tentang
produto:
Di bawah, grafik memiliki turunan di setiap sisi (tepi) yang dilabeli.
Dan jika kita ingin memahami bagaimana node yang tidak terhubung secara langsung mempengaruhi satu sama lain
Lainnya? Mari kita anggap sebagaieterpengaruh olehaJika kita berpindahakecepatan dari
1cjuga berubah pada kecepatan 1. Sebaliknya,cberubah dengan kecepatan 1
dengan apaebergerak dengan kecepatan 2. Jadiemuda pada tingkat 1∗ 2 terkait
aa(analisis diagram di atas untuk melihat ini).
Aturan umumnya adalah menjumlahkan semua jalan yang mungkin dari satu simpul ke simpul lainnya, mengalikan
turunan di setiap sisi jalur. Misalnya, untuk mendapatkan turunan dariesehubungan denganb,
kami mendapatkan:
Aturan umum "penjumlahan di atas jalur" ini hanyalah cara berbeda untuk berpikir tentang
aturan rantai multivariat atauaturan rantai.
Memfaktorkan Jalan
Masalah dengan hanya "menjumlahkan jalur" adalah bahwa sangat mudah untuk mendapatkan ledakan
kombinasi dalam jumlah jalur yang mungkin.
Pada diagram di atas, terdapat tiga jalur dari X ke Y, dan tiga jalur dari Y ke Z. Jika kita ingin
memperoleh turunan ∂Z/∂X dengan menjumlahkan semua jalur, kita perlu menghitung 3 ∗3 = 9 jalur:
Contoh di atas hanya memiliki sembilan jalur, tetapi akan mudah bagi jumlah jalur meningkat
secara eksponensial seiring dengan semakin rumitnya graf. Alih-alih hanya
Dengan naif menjumlahkan jalan-jalan, akan jauh lebih baik untuk memfaktorkannya:
Diferensiasi cara kemajuan dimulai dari suatu titik masuk ke graf dan bergerak ke arah
di akhir. Di setiap simpul, jumlahkan semua jalur yang memberi makan. Setiap jalan ini
mewakili cara di mana input mempengaruhi simpul ini. Dengan menambahkannya, kita mendapatkan cara
total di mana simpul terpengaruh oleh masukan, itu adalah turunan.
Meskipun Anda mungkin tidak memikirkannya dalam hal graf, diferensiasi di
modo de avanço é muito parecida com o que você aprendeu implicitamente caso tenha feito
beberapa pengantar ke Kalkulus.
Diferensiasi dalam mode terbalik, di sisi lain, dimulai dari output graf dan bergerak ke
arah ke awal (yaitu, jika melakukan retropropagasi atau backpropagation). Di setiap simpul, ia menggabungkan semua
jalur yang berasal dari simpul ini.
Diferensiasi cara kemajuan melacak bagaimana suatu entri mempengaruhi semua simpul.
diferensiasi dalam cara terbalik melacak bagaimana setiap simpul mempengaruhi keluaran. Artinya, diferensiasi
dengan cara maju menerapkan operator ∂/∂X di setiap node, sementara diferensiasi dengan cara
reverso menerapkan operator ∂Z/∂ pada setiap simpul. Jika ini terdengar seperti konsep pemrograman dinamis,
dan karena itu tepat sekali! (akses materi tentang pemrograman dinamis di referensi
di akhir bab
Pada titik ini, Anda mungkin bertanya-tanya mengapa seseorang peduli dengan diferensiasi di
modo reverso. Parece uma maneira estranha de fazer a mesma coisa que o modo de avanço.
Apakah ada keuntungan? Mari kita pertimbangkan contoh asli kita lagi:
Kita dapat menggunakan diferensiasi cara kemajuan daribke atas. Ini memberi kita turunan dari
setiap simpul terkait denganb.
Kami menghitung ∂e/∂b, turunan dari kamisa saída em relação a um de nossos inputs. E se
kami melakukan diferensiasi secara terbalik darieke bawah? Ini memberi kita turunan darieem
hubungan dengan semua simpul:
Ketika saya mengatakan bahwa diferensiasi dalam cara terbalik memberi kita turunan dariesehubungan dengan setiap simpul,
saya benar-benar ingin mengatakan setiap simpul. Kami memiliki baik ∂e/∂a dan ∂e/∂b, turunan dari eem
hubungan antara kedua entri. Diferensiasi dalam cara kemajuan memberi kita turunan dari kita
keluaran terkait dengan satu masukan tunggal, tetapi diferensiasi dalam cara terbalik memberi kita semuanya.
Untuk graf ini, itu hanya merupakan faktor dari dua kecepatan, tetapi bayangkan sebuah fungsi dengan sebuah
juta entri dan satu keluaran. Diferensiasi dalam cara kemajuan akan mengharuskan kita untuk melanjutkan
pelo grafo um milhão de vezes para obter as derivadas. Diferenciação no modo reverso pode
lakukan ini dalam satu langkah saja! Akselerasi dengan faktor satu juta sangat keren dan menjelaskan
karena kami berhasil melatih model jaringan saraf dalam waktu yang wajar.
Saat melatih jaringan saraf, kita memikirkan biaya (sebuah nilai yang menggambarkan seberapa banyak jaringan saraf
itu buruk) berdasarkan parameter (angka yang menggambarkan bagaimana jaringan berperilaku).
Kami ingin menghitung turunan biaya terkait semua parameter, untuk digunakan dalam
penurunan gradien. Namun, seringkali, ada jutaan atau bahkan puluhan juta
parameter dalam jaringan neural. Jadi, diferensiasi dalam mode terbalik, yang disebut
backpropagation dalam konteks jaringan saraf, memberi kita kecepatan yang luar biasa!
Apakah ada kasus di mana diferensiasi cara kemajuan lebih masuk akal? Ya, ada! Di mana
mode terbalik memberikan turunan dari suatu keluaran terkait dengan semua masukan, mode dari
avanço memberi kita turunan dari semua keluaran sehubungan dengan satu masukan. Jika ada sebuah fungsi
Dengan banyak keluaran, diferensiasi dalam cara kemajuan bisa jauh, jauh lebih cepat.
Ketika kita pertama kali belajar apa itu backpropagation, reaksi kita adalah: "Oh, ini hanya
aturan rantai (chain rule)! Mengapa kita menghabiskan begitu banyak waktu untuk menemukannya?
Pada saat backpropagation ditemukan, orang-orang tidak terlalu fokus pada
jaringan saraf feedforward. Juga tidak jelas bahwa turunan adalah jalan yang tepat untuk
melatih mereka. Ini hanya tampak jelas ketika Anda menyadari bahwa Anda dapat menghitung dengan cepat
turunan. Ada ketergantungan melingkar.
Melatih jaringan saraf dengan turunan? Tentu saja Anda akan terjebak di minimum lokal. Dan
jelas bahwa akan mahal untuk menghitung semua turunan ini. Faktanya adalah bahwa hanya karena kita tahu bahwa
pendekatan ini bekerja adalah bahwa kita tidak segera mulai mencantumkan alasan yang
mungkin tidak akan berhasil. Kita sudah tahu bahwa itu berhasil, tetapi pendekatan baru sedang dilakukan
proposal untuk kemajuan penelitian dalam Deep Learning dan Kecerdasan Buatan.
Kesimpulan Bagian 1
Backpropagation juga berguna untuk memahami bagaimana turunan mengalir melalui sebuah
model. Ini bisa sangat berguna dalam berpikir tentang mengapa beberapa model sulit.
untuk mengoptimalkan. Contoh klasik dari ini adalah masalah hilangnya gradien pada jaringan
jaringan saraf berulang, yang akan kita bahas lebih lanjut di dalam buku ini.
Akhirnya, ada pelajaran algoritmik yang luas yang dapat diambil dari teknik-teknik ini. Backpropagation dan
diferensiasi mode maju menggunakan sekumpulan trik yang kuat (linearization dan pemrograman
dinâmica) untuk menghitung turunan dengan cara yang lebih efisien daripada yang bisa dibayangkan. Jika Anda
benar-benar memahami teknik-teknik ini, dapat menggunakannya untuk menghitung dengan efisien berbagai hal lainnya
ekspresi menarik yang melibatkan turunan.
Namun, bab ini hanya bertujuan untuk membantumu memahami algoritma, karena
praktis tidak ada dokumentasi tentang ini dalam bahasa Portugis. Masih perlu memahami
bagaimana backpropagation diterapkan dalam pelatihan jaringan saraf. Apakah Anda menantikannya? Jadi
ikuti chapter berikutnya!
Data Science Academy menawarkan program lengkap, di mana konsep-konsep ini dan banyak lainnya
dipelajari secara rinci dan dengan berbagai aplikasi praktis dan menggunakan TensorFlow.
Formasi Kecerdasan Buatan terdiri dari 9 kursus, semuanya 100% online dan 100% di
português, yang menggabungkan teori dan praktik dengan tepat, dengan aplikasi nyata dari Kecerdasan
Buatan. Cek program lengkap kursus:Formasi Kecerdasan Buatan.
Referências:
Pelatihan Kecerdasan Buatan
Aturan Rantai
Catatan: sebagian gambar yang digunakan dalam bab ini diambil dari pos yang luar biasa (dinyatakan dalam
referensi di atas) dariChristopher Olah,peneliti Machine Learning dari Google Brain, dan
dengan izin yang tepat dari penulis.
BAB 15
Algoritma Backpropagation Bagian 2– Pelatihan Jaringan Syaraf
Backpropagation adalah algoritma yang tidak diragukan lagi yang paling penting dalam sejarah jaringan
neural– Tanpa backpropagation (efisien), akan mustahil untuk melatih jaringan pembelajaran.
profunda pada cara kita melihat hari ini. Backpropagation dapat dianggap sebagai batu penjuru
jaringan saraf modern dan pembelajaran mendalam. Di bab ini, kita akan memahami
bagaimana backpropagation digunakan dalam pelatihan jaringan saraf: Algoritma
Backpropagation Bagian 2– Pelatihan Jaringan Syaraf.
1. Langkah ke depan (forward pass), di mana input kita diteruskan melalui jaringan dan
prasangka keluaran yang diperoleh (tahap ini juga dikenal sebagai fase propagasi).
2. O passo para trás (backward pass), onde calculamos o gradiente da função de perda di
lapisan akhir (artinya, lapisan prediksi) dari jaringan dan kami menggunakan gradien ini untuk menerapkan
secara rekursif aturan rantai (chain rule) untuk memperbarui bobot di jaringan kami (langkah
juga dikenal sebagai fase pembaruan bobot atau propagasi balik).
Mari kita analisis setiap fase ini dan memahami bagaimana backpropagation bekerja di
pelatihan di jaringan saraf. Di bab berikutnya, kita akan kembali ke skrip dalam Python untuk
memahami bagaimana implementasi algoritma [Link]!
Operasi Maju
Tujuan langkah maju adalah untuk menyebarkan input kami (data masukan) melalui
rede menerapkan serangkaianproduk titik (perkalian antar vektor) dan aktivasi hingga
kita sampai ke lapisan keluaran jaringan (yaitu, prediksi kita). Untuk memvisualisasikan proses ini,
Mari kita terlebih dahulu mempertimbangkan tabel di bawah ini. Kita dapat melihat bahwa setiap entri X dalam matriks adalah 2-dim
(2 dimensi), di mana setiap titik data diwakili oleh dua angka. Misalnya,
titik data pertama diwakili oleh vektor fitur (0, 0), titik data kedua
por (0, 1), etc. Em seguida, temos nossos valores de saída Y como a coluna da direita. Nossos
nilai keluaran adalah label kelas. Mengingat sebuah input dari matriks, tujuan kami adalah untuk memprediksi
nilai keluaran yang diinginkan dengan benar. Singkatnya, X mewakili input dan Y mewakili keluaran.
Untuk mencapai akurasi klasifikasi yang sempurna dalam masalah ini, kita memerlukan sebuah jaringan
jaringan saraf maju dengan setidaknya satu lapisan tersembunyi. Kami kemudian dapat mulai dengan sebuah
arsitektur 2-2-1 sesuai dengan gambar di bawah.
Ini adalah awal yang baik, namun, kita lupa untuk memasukkan bias. Ada dua
cara-cara untuk memasukkan bias b ke dalam jaringan kita. Kita bisa:
2. Mengolaho bias sebagai parameter yang dapat dilatih dalam matriks, dengan memasukkan satu kolom
de1 detikdi vektor sumber daya.
Menyisipkan kolom 1 di vektor fitur kami dilakukan secara programatis, tetapi untuk
untuk menjamin didaktik, kita akan memperbarui matriks kita untuk melihat ini secara eksplisit, sesuai tabel
di bawah. Seperti yang Anda lihat, sebuah kolom dari1stelah ditambahkan ke vektor sumber daya kami.
Dalam praktiknya, Anda dapat menempatkan kolom ini di mana saja yang Anda inginkan, tetapi biasanya
kita tempatkan sebagai entri pertama dalam vektor sumber daya atau entri terakhir dalam vektor
sumber daya.
Bagaimana kami mengubah ukuran vektor fitur input kami (biasanya apa yang
dilakukan dalam implementasi jaringan itu sendiri, agar tidak perlu mengubah
secara eksplisit ke matriks kami), ini mengubah arsitektur jaringan kami dari 2-2-1 menjadi sebuah
arsitektur 3-3-1, sesuai dengan gambar di bawah. Kami juga merujuk pada arsitektur jaringan ini.
seperti 2-2-1, tetapi ketika datang ke implementasi, sebenarnya adalah 3-3-1 karena penambahan
termo bias yang terintegrasi dalam matriks.
Akhirnya, ingatlah bahwa baik lapisan masuk kami maupun semua lapisan tersembunyi
mereka meminta istilah bias. Namun, lapisan keluaran akhir tidak memerlukan bias. Bias sekarang
adalah parameter yang dapat dilatih dalam matriks bobot, menjadikan pelatihan lebih efisien dan
secara substansial lebih mudah untuk diterapkan. Untuk melihat forward pass dalam aksi, pertama
kami menginisialisasi bobot di jaringan kami, sesuai gambar di bawah. Amati bagaimana setiap panah di
matriks bobot memiliki nilai yang terkait dengannya– ini adalah nilai berat saat ini untuk suatu
nó e significa nilai di mana suatu input tertentu diperbesar atau diminus. Nilai ini
berat akan kemudian diperbarui selama fase backpropagation (ingat bahwa kita masih
tidak ada langkah maju). Ada beberapa cara untuk menginisialisasi vektor bobot dan ini dapat mempengaruhi
langsung dalam pelatihan jaringan, seperti yang akan kita lihat lebih lanjut di bawah.
Di ujung kiri gambar di bawah, kami menyajikan vektor sumber daya (0, 1, 1) dan juga
nilai keluaran 1 untuk jaringan, karena kemudian kita perlu menghitung kesalahan prediksi. Di sini
kita dapat melihat bahwa 0,1 dan 1 telah diberikan kepada ketiga simpul input di jaringan. Untuk menyebarkan
nilai melalui jaringan dan mendapatkan peringkat akhir, kami membutuhkanproduk titikantara
entri dan nilai bobot, diikuti oleh penerapan fungsi aktivasi (dalam hal ini, a
fungsisigmoid s). Mari kita hitung input untuk ketiga node di lapisan tersembunyi:
Menerapkan fungsi langkah dengan output = 0,506, kita melihat bahwa jaringan kita memprediksi 1 yang memang benar,
label kelas yang benar. Namun, jaringan kami tidak terlalu yakin dengan label ini
kelas. Nilai yang diperkirakan 0.506 sangat dekat dengan batas tahap. Idealnya, prediksi ini
harus lebih mendekati 0,98 atau 0,99, yang menunjukkan bahwa jaringan kita benar-benar belajar
standar dalam kumpulan data. Agar kitarede realmente “belajar”, kita perlu menerapkan
backpropagation.
Backpropagation
Untuk setiap masalah pembelajaran terawasi, kami memilih bobot yang
menyediakan perkiraan optimal dari sebuah fungsi yang memodelkan data pelatihan kami. Di
Dengan kata lain, kami ingin menemukan sekumpulan bobot W yang meminimalkan keluaran J(W),
onde J(W) é fungsi kerugian, atau kesalahan dari jaringan. Di bab-bab sebelumnya, kami membahas
algoritma penurunan gradien, di mana kita memperbarui setiap bobot dengan pengurangan skalar tertentu
negativa dari turunan kesalahan terhadap bobot ini. Jika kita memilih untuk menggunakan gradien
penurunan (atau hampir semua algoritma optimisasi cembung lainnya), kita perlu
menemukan turunan dalam bentuk numerik.
Tujuan dari backpropagation adalah mengoptimalkan bobot agar jaringan saraf dapat belajar untuk
memetakan dengan benar masukan ke keluaran.
Untuk algoritma pembelajaran mesin lainnya, seperti regresi logistik atau regresi
linier, perhitungan turunan adalah aplikasi dasar dari diferensiasi. Ini terjadi karena
sebagai keluaran dari model-model ini hanyalah input yang dikalikan dengan beberapa bobot yang dipilih dan,
maksimal, diberi makan oleh satu fungsi aktivasi (fungsi sigmoid dalam regresi
logistik). Namun, hal yang sama tidak dapat dikatakan untuk jaringan saraf. Untuk menunjukkan ini,
ini adalah diagram dari jaringan saraf dua lapis:
Seperti yang Anda lihat, setiap neuron adalah fungsi dari neuron sebelumnya yang terhubung dengannya. Dalam hal lain
kata-kata, jika seseorang mengubah nilai w1, neuron "tersembunyi 1" dan "tersembunyi 2" (dan, akhirnya,
keluaran) akan berubah. Karena gagasan tentang ketergantungan fungsional ini, kita dapat memformulasikan
secara matematis keluaran sebagai fungsi terkomposisi yang ekstensif:
Anda saja:
Untuk menerapkan algoritma backpropagation, fungsi aktivasi kita harus dapat diturunkan,
sehingga kita dapat menghitung turunan parsial dari kesalahan terkait dengan bobot tertentu wi,j,
kerugian(E), output dari node oj dan output dari jaringan j.
Di sini, keluaran adalah fungsi yang terkomposisi dari bobot, masukan, dan fungsi (atau fungsi-fungsi) aktivasi. Ini adalah
penting untuk memahami bahwa unit / node tersembunyi adalah hanya perhitungan antara
yang sebenarnya, dapat direduksi menjadi perhitungan dari lapisan masuk. Jika kita kemudian
mengambil turunan dari fungsi terhadap suatu bobot arbitrer (misalnya, w1), kita akan menerapkan
secara iteratif aturan rantai (yang saya yakin Anda ingat daribab
anterior). Hasilnya akan mirip dengan yang berikut:
Sekarang, mari kita lampirkan satu operasi lagi ke ekor jaringan saraf kita. Operasi ini akan
menghitung dan mengembalikan kesalahan– menggunakan fungsi biaya– dari keberangkatan kita:
Semua yang kami lakukan adalah menambahkan ketergantungan fungsional lainnya; kesalahan kami sekarang adalah sebuah fungsi
da saída dan, oleh karena itu, merupakan fungsi dari input, bobot, dan fungsi aktivasi. Jika kita menghitung
turunan kesalahan dengan bobot arbitrer apa pun (sekali lagi, kita akan memilih w1), hasilnya
seria
Setiap turunan ini dapat disederhanakan, karena kita memilih suatu fungsi dari
aktivasi dan kesalahan, sehingga semua hasil mewakili nilai numerik. Pada titik ini,
setiap abstraksi telah dihapus dan turunan kesalahan dapat digunakan dalam penurunan gradien
(seperti yang dibahas sebelumnya di buku ini) untuk meningkatkan secara iteratif bobot. Kami menghitung
derivatif dari kesalahan w.r.t. untuk semua bobot lainnya di jaringan dan menerapkan gradien
turun dengan cara yang sama. Ini adalah backpropagation– simply the calculation of derivatives
yang diberi makan untuk algoritma optimasi konveks. Kita menyebut ini sebagai
retropropagasi karena kami menggunakan kesalahan keluaran untuk memperbarui bobot, mengambil
langkah-langkah iteratif menggunakan aturan rantai sampai kita mencapai nilai berat ideal.
Jika Turunan positif, ini berarti bahwa peningkatan berat badan akan meningkatkan kesalahan.
Oleh karena itu, berat baru haruslah lebih ringan.
Jika Turunan negatif, itu berarti bahwa peningkatan berat akan mengurangi kesalahan, oleh karena itu,
kita perlu meningkatkan beban.
Jika Turunan adalah 0, itu berarti kita berada pada minimum yang stabil. Jadi, tidak ada pembaruan.
di berat diperlukan -> kami telah mencapai keadaan stabil.
Karena kita memperbarui bobot dengan langkah kecil delta satu per satu, diperlukan beberapa
iterasi untuk terjadi pembelajaran. Di jaringan saraf, setelah setiap iterasi, kekuatan penurunan dari
gradien memperbarui bobot ke nilai yang semakin kecil dari fungsi kehilangan global.
Pembaruan bobot pada jaringan saraf dipandu oleh kekuatan gradien menurun terhadap kesalahan.
Berapa banyak iterasi yang diperlukan untuk berkonvergensi (yaitu, mencapai fungsi kehilangan
mínima global)? Ini akan tergantung pada berbagai faktor:
Tergantung seberapa kuatnya laju pembelajaran yang kita terapkan. Laju tinggi
pembelajaran berarti pembelajaran yang lebih cepat, tetapi dengan kemungkinan ketidakstabilan yang lebih besar.
Itu juga tergantung pada hyperparameter jaringan (berapa banyak lapisan, seberapa kompleksnya)
fungsi non-linier, dll..). Semakin banyak variabel, semakin lama waktu yang dibutuhkan untuk berkonvergensi, tetapi
presisi cenderung lebih besar.
Tergantung pada penggunaan metode optimisasi, karena beberapa aturan pembaruan bobot adalah
terbukti lebih cepat daripada yang lain.
Tergantung pada inisialisasi acak dari jaringan. Mungkin dengan sedikit keberuntungan Anda memulai jaringan dengan
pesos hampir ideal dan hanya satu langkah dari solusi ideal. Tetapi sebaliknya juga
dapat terjadi.
Tergantung pada kualitas set pelatihan. Jika input dan output tidak memiliki
korrelasi antara mereka, jaringan saraf tidak akan melakukan sihir dan tidak dapat belajar sebuah korelasi
acak.
Artinya, melatih jaringan saraf bukanlah tugas yang sederhana. Bayangkan sekarang melatih jaringan dalam,
dengan beberapa lapisan perantara dan jutaan atau bahkan miliaran titik data dan Anda
memahami seberapa sulit ini bisa terjadi dan berapa banyak keputusan yang harus diambil oleh
Ilmuwan Data atau Insinyur AI. Dan belajar untuk bekerja secara profesional, membutuhkan
tempo, dedikasi dan persiapan dan lebih baik lagi jika itu bisa 100% dalam bahasa Portugis untuk mempercepat
pembelajaran Anda. Membangun aplikasi AI adalah keterampilan yang semakin banyak diminati di
pasar.
BAB 16
Algoritma Backpropagation dalam Python
Setelah memahami bagaimana backpropagation bekerja, kita sekarang dapat memahami kodenya.
digunakan di beberapa bab sebelumnya untuk menerapkan algoritma (yang akan kami reproduksi
di sini). File dengan kode lengkap dapat ditemukan di repositori buku diGithub.
yang menggunakan metode backprop untuk menemukan turunan parsial ∂Cx / ∂blj dan ∂Cx / ∂wljk. Ini
memanggil algoritma backpropagation, yang merupakan cara cepat untuk menghitung gradien dari
fungsi biaya. Jadi, update_mini_batch berfungsi dengan menghitung ini
gradientes untuk setiap contoh pelatihan di mini_batch dan, kemudian, memperbarui
[Link] dan [Link] dengan tepat. Ada perubahan kecil– kami menggunakan pendekatan
sedikit berbeda untuk mengindeks lapisan. Perubahan ini dilakukan untuk memanfaatkan sebuah
sumber daya Python, yaitu penggunaan indeks daftar negatif untuk menghitung mundur dari
akhir dari sebuah daftar, misalnya, lst[-3] adalah entri ketiga terakhir dalam daftar yang disebut lst. O
kode untuk backprop ada di bawah, bersama dengan beberapa fungsi tambahan, yang digunakan untuk
menghitung fungsi σ, turunan σ′ dan turunan fungsi biaya. Dengan inklusi ini, Anda
harus mampu memahami kode secara mandiri:
Amati metode backprop. Kami mulai dengan menginisialisasi matriks bobot (nabla_w) dan bias.
(nabla_b) dengan nol. Inimatriks akan diisi dengan nilai selama proses
pelatihan. Ini adalah apa yang dipelajari oleh jaringan saraf buatan secara efektif. Setelah menginisialisasi
beberapa objek, kita memiliki loop for untuk setiap nilai b dan w (yang pada titik ini Anda sudah tahu jika
trata bias dan bobot, masing-masing). Dalam loop ini, kami menggunakan fungsi [Link] dari Numpy untuk
perkalian antara matriks dan penambahan bias, kita meletakkan hasilnya di daftar z dan melakukan sebuah
panggilan ke fungsi aktivasi Sigmoid. Di akhir loop ini, kami akan memiliki daftar dengan semua
aktivasi dan kami menyelesaikan langkah ke depan.
Pada langkah mundur (Backward Pass) kita menghitung turunan dan melakukan perkalian dari
matriks sekali lagi (fungsi dari jaringan saraf buatan didasarkan pada sebuah konsep
elemen dasar Aljabar Linear, perkalian matriks). Perhatikan bahwa kita menyebut metode ini
Transpose() untuk menghasilkan transpos dari matriks dan dengan demikian menyesuaikan dimensi sebelum melakukan
perhitungan. Akhirnya, kami mengembalikan bias dan bobot.
Dalam arti apa backpropagation adalah algoritma yang cepat?
Untuk menjawab pertanyaan ini, mari kita pertimbangkan pendekatan lain untuk menghitung gradien.
Bayangkan bahwa itu adalah awal penelitian jaringan saraf. Mungkin itu adalah dekade 1950 atau 1960, dan
Anda adalah orang pertama di dunia yang berpikir menggunakan gradien menurun untuk
pembelajaran! Tapi, agar ide tersebut berfungsi, Anda perlu cara untuk menghitung
gradien fungsi biaya. Anda kembali ke pengetahuan kalkulus Anda dan memutuskan apakah Anda dapat menggunakan
aturan rantai (chain rule) untuk menghitung gradien. Tapi setelah bermain sedikit,
aljabar tampak rumit dan Anda merasa putus asa. Jadi Anda mencoba mencari yang lain
pendekatan. Anda memutuskan untuk mempertimbangkan biaya sebagai fungsi hanya dari bobot C = C(w)
(kita akan kembali ke bias dalam sejenak). Anda memberi nomor kepeso w1, w2,… dan ingin menghitung ∂C
/ ∂wj untuk berat tertentu wj. Salah satu cara yang jelas untuk melakukannya adalah dengan menggunakan pendekatan
di mana ϵ > 0 adalah angka positif kecil dan ej adalah vektor unit dalam arah j. Dengan kata lain,
kita dapat memperkirakan ∂C / ∂wj dengan menghitungo o custo C untuk dua nilai yang sedikit berbeda dari wj
e, kemudian, menerapkan persamaan. Ide yang sama akan memungkinkan kita untuk menghitung turunan parsial
∂C / ∂b dalam kaitannya dengan bias.
Pendekatan ini tampak sangat menjanjikan. Secara konseptual sederhana dan sangat mudah untuk
mengimplementasikan, hanya dengan beberapa baris kode. Tentu saja, tampaknya jauh lebih
janji dari pada ide untuk menggunakan aturan rantai untuk menghitung gradien!
Sayangnya, meskipun pendekatan ini terlihat menjanjikan, ketika Anda mengimplementasikan kode,
itu menjadi sangat lambat. Untuk memahami mengapa, bayangkan kita memiliki satu juta peso di
jaringan kami. Jadi, untuk setiap bobot berbeda wj, kita perlu menghitung C (w + ϵej) untuk menghitung
∂C / ∂wj. Ini berarti bahwa, untuk menghitung gradienKita perlu menghitung fungsi biaya
satu juta kali berbeda, membutuhkan satu juta langkah ke depan melalui jaringan (oleh
contoh, pelatihan). Kita juga perlu menghitung C(w) dalam total satu juta kali
dan dalam satu kali lewat di jaringan.
Apa yang cerdas tentang backpropagation adalah bahwa ia memungkinkan kita untuk menghitung secara bersamaan
semua turunan parsial ∂C / ∂wj menggunakan hanya satu langkah langsung melalui jaringan, diikuti
untuk sebuah operan ke belakang melalui jaringan. Secara garis besar, biaya komputasi dari operan ke belakang
ini hampir sama dengan yang di depan. Ini harus masuk akal, tetapi memerlukan beberapa analisis untuk
buatlah pernyataan yang hati-hati. Ini dapat diterima karena biaya komputasi yang dominan dalam proses
ke depan dikalikan dengan matriks bobot, sedangkan pada langkah mundur dikalikan
pelas transpostas dari matriks bobot. Jelas bahwa operasi ini memiliki biaya
komputasional serupa. Dan dengan demikian, biaya total dari retropropagasi adalah
sekitar yang sama dengan hanya melakukan dua kali perlintasan jaringan. Bandingkan ini dengan
satu juta dan satu langkah maju yang kami butuhkan untuk pendekatan yang saya deskripsikan
sebelumnya. Jadi, meskipun backpropagation tampak lebih kompleks secara superficially dari
bahwa pendekatan sebelumnya, sebenarnya jauh lebih cepat.
Percepatan ini sangat dihargai pada tahun 1986 dan secara besar-besaran memperluas jangkauan
masalah yang dapat diselesaikan oleh jaringan saraf. Ini, pada gilirannya, menyebabkan gelombang
orang-orang yang menggunakan jaringan saraf. Tentu saja, backpropagation bukanlah solusi segala masalah. Bahkan di akhir
tahun 1980-an, orang-orang menghadapi batasan, terutama saat mencoba menggunakan
retropropagasi untuk melatih jaringan saraf dalam, yaitu jaringan dengan banyak lapisan
tersembunyi. Lebih jauh lagi, dalam buku ini, kita akan melihat bagaimana komputer modern dan beberapa yang baru
ide-ide cerdas memungkinkan penggunaan backpropagation untuk melatih jaringan saraf dengan baik
profunda.
Tugas Anda sekarang adalah mempelajari dan memahami setiap baris kode yang digunakan di jaringan kami.
contoh. Kode ini cukup sederhana dan tujuannya adalah untuk menunjukkan kepada Anda bagaimana segala sesuatunya berfungsi
secara programatik. Kita masih akan melatih jaringan kita, mengevaluasi kinerjanya, mengoptimalkan
beberapa operasi dan memahami konsep dasar lainnya. Kami memiliki lebih banyak lagi yang akan datang!
Sampai bab berikutnya!
Referensi:
Pelatihan Kecerdasan Buatan
Pembelajaran Mesin
Produk Titik
Aturan Delta
Turunan
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Ketika seorang pemain tenis belajar untuk berlatih olahraga, dia biasanya menghabiskan sebagian besar
sebagian waktu mengembangkan gerakan tubuh. Hanya secara bertahap ia mengembangkan
tacadas, pelajari cara menggerakkan bola dengan presisi ke lapangan lawan dan dengan itu akan
membangun tekniknya, yang semakin baik saat ia berlatih. Dengan cara yang sama, sampai
sekarang kita fokus pada memahami algoritma backpropagation,
basis untuk mempelajari sebagian besar aktivitas di jaringan saraf. Mulai sekarang, kita akan belajar
seperangkat teknik yang dapat digunakan untuk meningkatkan penerapan kita dari
backpropagation e, demikian, meningkatkan cara jaringan kita belajar.
Teknik yang akan kami kembangkan termasuk: pemilihan fungsi biaya yang lebih baik, yang dikenal
sebagai fungsi biaya entropi silang (atau Fungsi Biaya Entropi Silang); empat metode
de "regularisasi" (regularegularisasi L1 dan L2, dropout, dan ekspansi artifisial data dari
pelatihan), yang meningkatkan jaringan kita untuk menggeneralisasi di luar data pelatihan;
metode yang lebih baik untuk menginisialisasi bobot di jaringan; dan sekumpulan heuristik untuk membantu
memilih hyperparameter yang baik untuk jaringan. Kita juga akan menganalisis berbagai teknik lainnya
dengan kedalaman yang lebih sedikit. Diskusi sebagian besar independen satu sama lain
dan oleh karena itu, Anda dapat melanjutkan jika Anda mau. Kami juga akan menerapkan banyak dari teknik-teknik tersebut dalam
kode kami dan kami akan menggunakannya untuk meningkatkan hasil yang diperoleh dalam masalah klasifikasi
angka tulisan tangan yang dipelajari dibab-bab sebelumnya.
Tentu saja, kami hanya membahas beberapa dari banyak teknik yang telah dikembangkan.
untuk digunakan dalam jaringan saraf. Filosofinya adalah bahwa akses terbaik ke berbagai teknik
tersedia adalah studi mendalam tentang beberapa yang paling penting. Menguasai teknik-teknik ini
penting tidak hanya berguna dengan sendirinya, tetapi juga akan memperdalam pemahaman Anda tentang
apa saja masalah yang dapat muncul ketika Anda menggunakan jaringan syaraf. Ini akan membuat Anda baik
siap untuk belajar dengan cepat teknik lainnya, sesuai kebutuhan.
Fungsi Biaya
Kebanyakan dari kita merasa tidak nyaman ketika salah. Segera setelah mulai belajar piano,
anak perempuan saya melakukan presentasi pertamanya di depan penonton. Dia merasa gugup dan mulai
untuk memainkan bagian dengan oktaf yang sangat rendah. Dia merasa bingung dan tidak bisa melanjutkan sampai
seseorang menunjuk kesalahan. Dia merasa sangat malu. Meskipun tidak menyenangkan, juga
kita belajar dengan cepat ketika kita dengan tegas salah. Anda bisa bertaruh bahwa a
kali berikutnya dia tampil di depan penonton, dia mulai pada oktaf yang benar! Di
kebalikan, kita belajar lebih lambat ketika kesalahan kita kurang terdefinisi dengan baik.
Secara ideal, kami berharap jaringan saraf kami belajar dengan cepat dari kesalahan mereka. Tapi
apakah ini yang terjadi dalam praktiknya? Untuk menjawab pertanyaan ini, mari kita lihat...
contoh sederhana. Contoh ini melibatkan sebuah neuron dengan hanya satu input:
Namun, anggaplah bahwa, sebaliknya, kita memilih bobot awal dan bias awal sebagai 2.0. Dalam hal ini
dalam kasus ini, keluaran awal adalah 0,98, yang sangat buruk. Mari kita lihat bagaimana neuron belajar menghasilkan 0
neste caso:
Meskipun contoh ini menggunakan laju pembelajaran yang sama (η = 0,15), kita bisamelihat bahwa a
pembelajaran dimulai jauh lebih lambat. Faktanya, dalam 150 epoch pertama pembelajaran,
berat dan bias tidak banyak berubah. Jadi pembelajaran mulai beraksi dan, seperti di kami
contoh pertama, keluaran neuron dengan cepat mendekati 0.0.
Perilaku ini aneh jika dibandingkan dengan pembelajaran manusia. Seperti yang saya katakan
di awal bab ini, seringkali kita belajar lebih cepat ketika kita sangat
salah tentang sesuatu. Tetapi kami baru saja melihat bahwa neuron buatan kami memiliki banyak kesulitan
em belajar ketika sangat salah– jauh lebih sulit daripada ketika hanya
sedikit salah. Selain itu, dapat dilihat bahwa perilaku ini tidak hanya terjadi di sini
contoh, tetapi dalam jaringan yang lebih umum. Mengapa belajar begitu lambat? Dan kita bisa menemukan sebuah
cara untuk menghindari perlambatan ini?
Untuk memahami asal usul masalah, pertimbangkan bahwa neuron kita belajar dengan mengubah bobot
e bias ditentukan oleh turunan parsial dari fungsi biaya, ∂C/∂w dan ∂C/∂b.
Jadi, mengatakan "belajar itu lambat" sebenarnya sama dengan mengatakan bahwa turunan parsial ini adalah
kecil. Tantangannya adalah memahami mengapa mereka kecil. Untuk memahami hal ini, mari kita hitung
sebagai turunan parsial. Ingatlah bahwa kita menggunakan fungsi biaya kuadrat, yang merupakan
dada por:
di manasebuahadalah
keluaran dari neuron ketika input pelatihan x = 1 digunakan, dan y = 0 adalah keluaran
diinginkan yang sesuai. Untuk menulis ini dengan lebih eksplisit dalam istilah bobot dan bias,
lembre-se que a = σ(z), onde z = wx+ b. Menggunakan aturan rantai untuk membedakan terkait
dari berat dan bias, kami memperoleh:
di mana menggantikan x = 1 dan y = 0. Untuk memahami perilaku ekspresi ini, mari kita lihat
lebih dekat dengan istilah σ ′ (z) di sisi kanan. Ingatlah-se da forma da fungsiσ:
Kita bisa melihat di grafik ini bahwa ketika keluaran neuron mendekati 1, kurvanya menjadi sangat
plana, dan kemudian σ ′ (z) menjadi sangat kecil. Persamaan di atas kemudian memberi tahu kita bahwa ∂C/∂w dan
∂C/∂b menjadi sangat kecil. Ini adalah asal dari perlambatan [Link]. Selain itu,
seperti yang akan kita lihat kemudian, perlambatan pembelajaran terjadi pada dasarnya karena hal yang sama
motif pada jaringan saraf yang lebih umum, tidak hanya pada contoh sederhana ini.
Bagaimana kita dapat menghadapi perlambatan pembelajaran? Ternyata kita bisa menyelesaikannya.
masalah menggantikan biaya kuadratik dengan fungsi biaya yang berbeda, dikenal sebagai
entropi silang. Untuk memahami entropi silang, mari kita menjauh sedikit dari kita
model super-sederhana. Mari kita asumsikan bahwa kita sedang mencoba melatih sebuah neuron dengan berbagai
variabel masukan, x1, x2,…, bobot yang sesuai w1, w2,… dan sebuah bias, b:
Keluaran neuron adalah, secara alami,a = σ(z), di manaz = ∑jwjxj + badalah jumlah tertimbang dari
entri. Kami mendefinisikan fungsi biaya dari entropi silang untuk neuron ini sebagai berikut:
di mananadalah jumlah total item data pelatihan, jumlahnya adalah tentang semua entri dari
pelatihanxeyadalah hasil yang diinginkan yang sesuai. Tidak jelas bahwa ekspresi sebelumnya
atasi masalah perlambatan pembelajaran. Sebenarnya, secara jujur, bahkan tidak jelas bahwa
ada makna untuk menyebut ini sebagai fungsi biaya! Sebelum membahas perlambatan dari
pembelajaran, mari kita lihat dalam arti apa entropi silang dapat diinterpretasikan sebagai
fungsi biaya.
Dua properti khusus membuat wajar untuk menginterpretasikan entropi silang sebagai
fungsi biaya. Pertama, tidak negatif, yaitu, C > 0. Untuk memvisualisasikan ini, perhatikan pada rumus
sebelum ini: (a) semua istilah individu dalam jumlah adalah negatif, karena kedua logaritma
adalah angka dalam rentang 0 hingga 1; dan (b) ada tanda minus di depan jumlah.
Kedua, jika keluaran nyata dari neuron mendekati keluaran yang diinginkan untuk semua masukan
dari pelatihan x, maka entropi silang akan mendekati nol. Untuk melihat ini, anggaplah, untuk
contoh, di mana y = 0 dan a ≈ 0 untuk beberapa masukan x. Ini adalah kasus ketika neuron berada
melakukan pekerjaan yang baik pada entri ini. Kami melihat bahwa suku pertama (dalam rumus di atas) untuk
ocusto, menghilang, sejak y = 0, sementara istilah kedua hanya −ln (1 − a) ≈ 0. Sebuah
analisis serupa berlaku ketika y = 1 dan a ≈ 1. Dan dengan demikian, kontribusi untuk biaya akan
rendah, asalkan keluaran nyata mendekati keluaran yang diinginkan.
Singkatnya, entropi silang adalah positif dan cenderung mendekati nol, seiring dengan perbaikan neuron.
perhitungan keluaran yang diinginkan, y, untuk semua masukan pelatihan, x.
Ini adalah dua sifat yang secara intuitif kita harapkan untuk fungsi biaya.
fato, kedua properti tersebut juga dipenuhi oleh biaya kuadrat. Oleh karena itu, ini adalah
berita baik untuk entropi silang. Tetapi fungsi biaya entropi silang memiliki keuntungan dari
yang, tidak seperti biaya kuadratik, menghindari masalah perlambatan pembelajaran. Untuk
melihat ini, kita akan menghitung turunan parsial dari biaya entropi silang terhadap bobot.
Kami menggantikan a = σ (z) dalam rumus di atas dan menerapkan aturan rantai dua kali, menghasilkan:
Menempatkan semuanya dalam penyebut yang sama dan menyederhanakan, ini menjadi:
Menggunakan definisi fungsi sigmoida, σ (z) = 1 / (1 + ez), dan sedikit aljabar, kita bisa
menunjukkan bahwa σ (z) = σ (z) (1 − σ (z)). Kita melihat bahwa istilah σ′ (z) dan σ (z) (1 − σ (z)) saling membatalkan
dalam persamaan di atas, dan menyederhanakannya menjadi:
Ini adalah ungkapan yang indah. Ini memberi tahu kita bahwa laju di mana berat belajar dikendalikan oleh σ (z)
-y, yaitu, oleh kesalahan pada keluaran. Semakin besar kesalahan, semakin cepat neuron akan belajar. Ini adalah
tepatnya apa yang kami harapkan secara intuitif. Secara khusus, menghindari lambatnya pembelajaran
disebabkan oleh istilah σ′ (z) dalam persamaan analog untuk biaya kuadrat. Ketika kita menggunakan
entropi silang, istilah σ′ (z) dicancel dan kita tidak perlu lagi khawatir tentang
Kecil. Pembatalan ini adalah mukjizat khusus yang dijamin oleh fungsi biaya entropi.
perang salib. Sebenarnya, itu tidak benar-benar sebuah keajaiban. Seperti yang akan kita lihat lebih lanjut, entropi
cruzada dipilih secara khusus karena hanya memiliki sifat ini.
Dengan cara yang sama, kita dapat menghitung turunan parsial untuk bias. Saya tidak akan menjelaskan lebih lanjut.
semua rincian lagi, tapi Anda bisa dengan mudah memeriksa bahwa:
Sekali lagi, ini mencegah perlambatan pembelajaran yang disebabkan oleh istilah σ′ (z) dalam persamaan yang setara.
untuk biaya kuadrat.
Sekarang kita akan kembali ke contoh di awal bab ini, dan mengeksplorasi apa yang terjadi ketika
kami menggunakan entropi silang alih-alih biaya kuadrat. Untuk mengarahkan kembali diri kita, kita akan mulai
dengan kasus di mana biaya kuadratik baik, dengan bobot awal 0,6 dan bias awal 0,9. Lihat
apa yang terjadi ketika kita mengganti biaya kuadrat dengan entropi silang:
Seperti yang diharapkan, neuron belajar dengan sangat baik dalam kasus ini, seperti yang dilakukan
sebelumnya. Dan sekarang mari kita lihat kasus di mana neuron kita terjebak sebelumnya, dengan
berat dan bias keduanya dimulai dari 2.0:
Sukses!Kali ini, neuron belajar dengan cepat, tepat seperti yang kita harapkan. Jika Anda
mengamati dengan cermat, Anda dapat melihat bahwa kemiringan kurva biaya jauh lebih curam
awal dari daerah datar awal pada kurva yang sesuai untuk biaya kuadrat. Itu
kemiringan ini yang entropi silang bantu kita selesaikan, mencegah kita terjebak
tepatnya saat kita berharap bahwa neuron kita belajar lebih cepat, yaitu ketika
neurônio mulai salah.
Saya tidak menyebutkan tarif pembelajaran yang digunakan dalam contoh yang baru saja saya ilustrasikan.
Sebelumnya, dengan biaya kuadratik, kami menggunakan η = 0,15. Seharusnya kami menggunakan tarif yang sama.
dari pembelajaran pada contoh-contoh baru? Sungguh, dengan perubahan pada fungsi biaya, tidak mungkin
Mengatakan dengan tepat apa arti menggunakan 'tingkat' pembelajaran yang 'sama'; itu adalah perbandingan dari
apel dan jeruk. Untuk kedua fungsi biaya, saya hanya mencoba menemukan sebuah
tingkat pembelajaran yang memungkinkan untuk melihat apa yang sedang terjadi. Jika Anda masih
penasaran, ini adalah ringkasan: saya menggunakan η = 0.005 dalam contoh yang baru saja saya berikan.
Anda dapat membantah bahwa perubahan dalam laju pembelajaran membuat grafik di atas tidak...
makna. Siapa yang peduli dengan kecepatan neuron belajar, ketika pilihan kita
Tingkat pembelajaran itu diambil secara sembarangan, untuk memulai?! Tapi keberatan ini tidak relevan. Poin
dua grafik tidak tentang kecepatan mutlak pembelajaran. Ini tentang bagaimana kecepatan dari
pembelajaran berubah. Khususnya, ketika kita menggunakan biaya kuadrat, pembelajaran menjadi lebih
lambat ketika neuron tidak diragukan lagi salah tentang apa yang akan terjadi di kemudian hari selama
pelatihan, seiring neuron mendekati keluaran yang benar; sementara pembelajaran
entropia silang lebih cepat ketika neuron jelas salah. Ini
deklarasi tidak tergantung pada bagaimana tingkat pembelajaran didefinisikan.
Kami sedang mempelajari entropi silang untuk satu neuron. Namun, mudah untuk menggeneralisasi
entropi silang untuk jaringan multi-lapis dengan banyak neuron. Secara khusus, anggap bahwa
y = y1, y2,… adalah nilai yang diinginkan di neuron keluaran, yaitu, neuron di lapisan
akhirnya, sementara aL1, aL2,… adalah nilai nyata keluaran. Jadi kami mendefinisikan entropi silang
untuk:
Ini sama dengan ekspresi kita sebelumnya, kecuali sekarang kita memiliki ∑j yang menjumlahkan semua
neuron-neuron keluaran. Saya tidak akan secara eksplisit bekerja dengan sebuah turunan, tetapi harusnya
ada kemungkinan bahwa penggunaan ungkapan sebelumnya menghindari perlambatan dalam pembelajaran di banyak
jaringan neuron.
Omong-omong, saya menggunakan istilah "entropi silang" dengan cara yang membingungkan beberapa orang
dari pembaca pertama, karena tampaknya secara superficial bertentangan dengan sumber lain. Di
secara khusus, adalah umum untuk mendefinisikan entropi silang untuk dua distribusi probabilitas, pj dan
qj, seperti ∑jpjlnqj. Definisi ini dapat dihubungkan dengan rumus entropi untuk sebuah neuron
seperti yang ditunjukkan sebelumnya, jika kita memperlakukan satu neuron sigmoida sebagai keluaran dari sebuah
distribusiprobabilitas yang terdiri dari aktivasi a dari neuron dan komplemennya 1 -
a.
Namun, ketika kita memiliki banyak neuron sigmoid di lapisan terakhir, vektor aLj dari aktivasi
tidak biasanya membentuk distribusi probabilitas. Sebagai hasilnya, definisi seperti
∑jpjlnqj tidak masuk akal, karena kami tidak sedang bekerja dengan distribusi probabilitas.
Sebagai gantinya, Anda bisa memikirkan formula entropi untuk beberapa neuron sebagai sebuah
himpunan jumlah entropi silang per neuron, dengan aktivasi setiap neuron adalah
diinterpretasikan sebagai bagian dari distribusi probabilitas dua elemen. Ya, saya tahu
itu tidak sederhana.
Dalam pengertian ini, rumus entropi untuk beberapa neuron merupakan generalisasi dari entropi
cruzada untuk distribusi probabilitas.
Kapan kita harus menggunakan entropi silang daripada biaya kuadratik? Sebenarnya, entropi
cruzada hampir selalu merupakan pilihan terbaik, asalkan neuron keluaran adalah neuron
sigmoid. Untuk memahami mengapa, pertimbangkan bahwa, saat kita mengatur jaringan,
biasanya kita menginisialisasi bobot dan bias menggunakan semacam kebetulan. Bisa jadi
terjadi bahwa pilihan awal ini menghasilkan jaringan yang secara decisif salah untuk beberapa
masukan pelatihan– artinya, neuron keluaran akan jenuh mendekati 1, ketika
seharusnya 0, atau sebaliknya. Jika kita menggunakan biaya kuadratik yang akan memperlambat
pembelajaran, dia tidak akan berhenti belajar sepenuhnya, karena bobot akan terus berlanjut
belajar dari masukan pelatihan lainnya, tetapi jelas tidak diinginkan.
Memikirkan hal ini, Data Science Academy menawarkan program lengkap, di mana ini dan berbagai
konsep lain dipelajari secara rinci dan dengan berbagai aplikasi praktis, menggunakan
TensorFlow. APelatihan Kecerdasan Buatan terdiri dari 9 kursus, semuanya 100% online dan
100% dalam bahasa Indonesia, yang menggabungkan teori dan praktik dengan proporsi yang tepat, dengan aplikasi nyata dari
Kecerdasan Buatan. Cek program lengkap kursus:Formasi Kecerdasan
[Link] perusahaan di seluruh Brasil sudah melatih profesional mereka bersama kami! Ayo
menjadi bagian dari revolusi IA.
Referensi:
Pembentukan Kecerdasan Buatan
Produk Titik
Turunan
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Entropi Silang (atau entropi silang, jika Anda lebih suka istilah dalam bahasa Indonesia) mudah untuk
mengimplementasikan sebagai bagian dari program yang belajar menggunakan gradien turun dan
pemrograman balik. Kita akan melakukan ini di bab-bab berikutnya ketika kita melatih jaringan lengkap,
mengembangkan versi yang ditingkatkan dari program kami sebelumnya untuk mengklasifikasikan digit
manuskrip dari dataset MNIST. Program baru ini disebut [Link] dan tidak menggabungkan
hanya entropi silang, tetapi juga berbagai teknik lainnya yang akan kita pelajari lebih lanjut.
Sekarang, mari kita lihat bagaimana cara menggunakanEntropi Silang Untuk Mengukur Perbedaan Antara Dua
Distribusi Probabilitas.
Sementara itu, mari kita lihat bagaimana program baru kami mengklasifikasikan digit MNIST. Kami akan menggunakan
sebuah jaringan dengan 30 neuron tersembunyi, dan kita akan menggunakan ukuran mini-batch sebesar 10. Kami mendefinisikan
laju pembelajaran untuk η = 0,5dan kami berlatih selama 30 epoch. Antarmuka untuk [Link]
akan sedikit berbeda dari [Link], tetapi masih harus jelas apa yang sedang terjadi. Di kita
di bab berikutnya, kami akan menyajikan kode lengkap di repositori buku diGithub.
Perhatikan bahwa perintah net.large_weight_initializer() digunakan untuk menginisialisasi bobot dan bias.
Dengan cara yang sama seperti yang telah kami jelaskan sebelumnya. Kami perlu menjalankan perintah ini
karena nantinya kita akan mengubah bobot standar untuk inisialisasi dalam jaringan kami. O
hasil dari eksekusi urutan perintah di atas adalah sebuah jaringan dengan akurasi 95,49%.
Mari kita lihat juga kasus di mana kita menggunakan 100 neuron tersembunyi, entropi silang, dan kita mempertahankan
parameter dengan cara yang sama. Dalam hal ini, kami mendapatkan akurasi 96,82%. Ini adalah
perbaikan substansial dibandingkan dengan hasil yang kami peroleh dibab-bab sebelumnya,di mana
akurasi klasifikasi adalah 96,59%, menggunakan biaya kuadrat. Ini mungkin tampak seperti
perubahan kecil, tetapi pertimbangkan bahwa tingkat kesalahan turun dari 3,41% menjadi 3,18%. Dengan kata lain,
Kami menghapus sekitar satu dari empat belas kesalahan asli. Ini adalah peningkatan yang cukup berguna.
Ini menggembirakan bahwa biaya entropi silang memberi kita hasil yang serupa atau lebih baik dari
bahwa biaya kuadratik. Namun, hasil ini tidak membuktikan secara meyakinkan bahwa
entropi silang adalah pilihan yang lebih baik. Alasannya adalah bahwa kami hanya menempatkan sedikit
usaha dalam pemilihan hyperparameter seperti laju pembelajaran, ukuran mini-batch dan
demikian seterusnya. Agar perbaikan benar-benar meyakinkan, kami perlu melakukan sebuah
pekerjaan lengkap pengoptimalan hyperparameter ini. Meskipun demikian, hasilnya adalah
penguat dan memperkuat argumen teoretis kami sebelumnya bahwa entropi silang adalah
pilihan lebih baik daripada biaya kuadrat.
Ini, omong-omong, adalah bagian dari pola umum yang akan kita lihat di bab-bab berikutnya dan, sebenarnya,
di sebagian besar sisa buku. Mari kita mengembangkan teknik baru, mari kita
bereksperimenkita akan mendapatkan hasil "yang ditingkatkan". Tentu saja, baik untuk melihat ini
perbaikan, tetapi interpretasi dari perbaikan tersebut selalu bermasalah. Mereka hanya
benar-benar meyakinkan jika kita melihat perbaikan setelah berusaha untuk
mengoptimalkan semua hyperparameter lainnya. Ini adalah jumlah pekerjaan yang besar, membutuhkan
sangat banyak daya komputasi, dan biasanya kami tidak akan melakukan penyelidikan yang begitu mendetail.
Sebagai gantinya, kami akan melanjutkan berdasarkan pengujian informal seperti yang telah dilakukan sejauh ini.
Hingga saat ini, kita telah mendiskusikan entropi silang dengan sangat rinci. Mengapa begitu banyak usaha
ketika entropi silang hanya memberi kita sedikit perbaikan dalam hasil kita dengan
dataset MNIST? Namun, ke depan kita akan melihat teknik lain, terutama regularisasi, yang
membawa perbaikan yang jauh lebih besar. Jadi, mengapa begitu fokus pada entropi silang? Sebagian alasannya
karena entropi silang adalah fungsi biaya yang banyak digunakan dan karena itu patut dicoba
memahaminya dengan baik. Tetapi alasan yang paling penting adalah bahwa saturasi neuron adalah sebuah
masalah penting dalam jaringan saraf, sebuah masalah yang akan kita bahas berulang kali pada
panjang buku. Itulah sebabnya kita membahas entropi silang dalam perpanjangan karena ini adalah laboratorium yang baik
untuk mulai memahami saturasi neuron dan bagaimana hal itu dapat didekati.
Diskusi kita tentang entropi silang terfokus pada analisis aljabar dan
implementasi praktis. Ini berguna, tetapi meninggalkan pertanyaan konseptual yang lebih luas tidak
dijawab, seperti: apa arti entropi silang? Apakah ada cara intuitif untuk
berpikir tentang entropi silang? Dan apa makna intuitif dari entropi silang? Bagaimana
devemos pensar sobre isso?
Menjelaskan ini secara mendalam akan membawa kita lebih jauh dari tujuan yang ingin kita capai dalam buku ini. Di
Namun, perlu dicatat bahwa ada cara standar untuk menginterpretasikan entropi silang yang
datang dari bidang teori informasi. Mari kita lihat.
Kita sudah tahu bahwa untuk melatih sebuah jaringan saraf, Anda perlu menemukan kesalahan antara keluaran
dihitung dan keluaran target yang diinginkan. Ukuran kesalahan yang paling umum disebut sebagai kesalahan
kuadratik rata-rata (atau Mean Square Error). Namun, ada beberapa hasil penelitian
yang menyarankan penggunaan ukuran yang berbeda, yang disebut sebagai error entropi silang, sebagai
metode yang lebih disukai terkait dengan kesalahan kuadrat rata-rata.
Ukuran entropi silang telah digunakan sebagai alternatif untuk kesalahan kuadrat rata-rata. A
entropi silang dapat digunakan sebagai ukuran kesalahan ketika keluaran suatu jaringan
dapat dianggap sebagai mewakili hipotesis independen (misalnya, setiap simpul
berarti konsep yang berbeda) dan aktivasi node dapat dipahami sebagai
merepresentasikan probabilitas (atau kepercayaan) bahwa masing-masing hipotesis dapat
benar. Dalam hal ini, vektor keluaran mewakili distribusi probabilitas, dan kami
ukuran kesalahan– entropi silang– tunjukkan jarak antara apa yang diyakini jaringan bahwa ini
distribusi haruslah dan apa yang seharusnya. Ada juga alasan praktis untuk menggunakan
entropi silang. Bisa lebih berguna dalam masalah di mana tujuannya adalah 0 dan 1. Entropi
cruzada cenderung memungkinkan kesalahan mengubah bobot meskipun ada simpul yang jenuh (apa yang
ini berarti bahwa turunan Anda mendekati 0). Mari kita memahami lebih baik ini:
Entropi silang umumnya digunakan untuk mengkuantifikasi perbedaan antara dua distribusi
[Link], distribusi 'sebenarnya' (dari data yang digunakan untuk pelatihan) adalah
ekspresikan dalam bentuk distribusi One-Hot.
Misalnya, anggaplah bahwa untuk suatu instance pelatihan tertentu (satu baris tunggal di
dataset Anda), kelasnya adalah B (dari 3 kemungkinan: A, B, dan C). Distribusi unik untuk
instansi pelatihan ini adalah, oleh karena itu:
Anda dapat menginterpretasikan distribusi di atas dengan cara berikut: instance pelatihan memiliki
0% kemungkinan menjadi kelas A, 100% kemungkinan menjadi kelas B dan 0%
probabilitas menjadi kelas C.
Sekarang, anggaplah bahwa algoritma pembelajaran mesin Anda telah memprediksi hal berikut
distribusi probabilitas:
Seberapa dekat distribusi yang diperkirakan dengan distribusi yang sebenarnya?Ini yang menentukan kesalahan
dari entropi silangEntropi silang diwakili oleh rumus ini:
Jumlahnya adalah tentang tiga kelas A, B, dan C. Jika Anda menyelesaikan perhitungan, Anda akan menemukan bahwa kerugian adalah
0,479. Jadi, begitulah seberapa "jauh" perkiraan Anda dari distribusi yang sebenarnya.
Entropi silang adalah salah satu dari banyak fungsi kehilangan yang mungkin. Fungsi-fungsi kehilangan ini adalah
tipikalnya ditulis sebagai J(theta) dan dapat digunakan dalam penurunan gradien, yang merupakan
sebuah struktur iteratif untuk memindahkan parameter (atau koefisien) ke nilai optimal.
Referensi:
Pembentukan Kecerdasan Buatan
Produk Titik
Turunan
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Ketika seorang pemain tenis belajar untuk berlatih olahraga, dia biasanya menghabiskan sebagian besar
sebagian waktu mengembangkan gerakan tubuh. Hanya secara bertahap ia mengembangkan
tacadas, pelajari cara menggerakkan bola dengan presisi ke lapangan lawan dan dengan itu akan
membangun tekniknya, yang semakin baik saat ia berlatih. Dengan cara yang sama, sampai
sekarang kita fokus pada memahami algoritma backpropagation,
basis untuk mempelajari sebagian besar aktivitas di jaringan saraf. Mulai sekarang, kita akan belajar
seperangkat teknik yang dapat digunakan untuk meningkatkan penerapan kita dari
backpropagation e, demikian, meningkatkan cara jaringan kita belajar.
Teknik yang akan kami kembangkan termasuk: pemilihan fungsi biaya yang lebih baik, yang dikenal
sebagai fungsi biaya entropi silang (atau Fungsi Biaya Entropi Silang); empat metode
de "regularisasi" (regularegularisasi L1 dan L2, dropout, dan ekspansi artifisial data dari
pelatihan), yang meningkatkan jaringan kita untuk menggeneralisasi di luar data pelatihan;
metode yang lebih baik untuk menginisialisasi bobot di jaringan; dan sekumpulan heuristik untuk membantu
memilih hyperparameter yang baik untuk jaringan. Kita juga akan menganalisis berbagai teknik lainnya
dengan kedalaman yang lebih sedikit. Diskusi sebagian besar independen satu sama lain
dan oleh karena itu, Anda dapat melanjutkan jika Anda mau. Kami juga akan menerapkan banyak dari teknik-teknik tersebut dalam
kode kami dan kami akan menggunakannya untuk meningkatkan hasil yang diperoleh dalam masalah klasifikasi
angka tulisan tangan yang dipelajari dibab-bab sebelumnya.
Tentu saja, kami hanya membahas beberapa dari banyak teknik yang telah dikembangkan.
untuk digunakan dalam jaringan saraf. Filosofinya adalah bahwa akses terbaik ke berbagai teknik
tersedia adalah studi mendalam tentang beberapa yang paling penting. Menguasai teknik-teknik ini
penting tidak hanya berguna dengan sendirinya, tetapi juga akan memperdalam pemahaman Anda tentang
apa saja masalah yang dapat muncul ketika Anda menggunakan jaringan syaraf. Ini akan membuat Anda baik
siap untuk belajar dengan cepat teknik lainnya, sesuai kebutuhan.
Fungsi Biaya
Kebanyakan dari kita merasa tidak nyaman ketika salah. Segera setelah mulai belajar piano,
anak perempuan saya melakukan presentasi pertamanya di depan penonton. Dia merasa gugup dan mulai
untuk memainkan bagian dengan oktaf yang sangat rendah. Dia merasa bingung dan tidak bisa melanjutkan sampai
seseorang menunjuk kesalahan. Dia merasa sangat malu. Meskipun tidak menyenangkan, juga
kita belajar dengan cepat ketika kita dengan tegas salah. Anda bisa bertaruh bahwa a
kali berikutnya dia tampil di depan penonton, dia mulai pada oktaf yang benar! Di
kebalikan, kita belajar lebih lambat ketika kesalahan kita kurang terdefinisi dengan baik.
Secara ideal, kami berharap jaringan saraf kami belajar dengan cepat dari kesalahan mereka. Tapi
apakah ini yang terjadi dalam praktiknya? Untuk menjawab pertanyaan ini, mari kita lihat...
contoh sederhana. Contoh ini melibatkan sebuah neuron dengan hanya satu input:
Menggunakan hasilnya, kita dapat menggambarkan bagaimana biaya berubah seiring dengan jaringan
pelajari (atau skrip [Link] berisi kode yang menghasilkan hasil ini):
Ini tampak menggembirakan, menunjukkan pengurangan yang halus dalam biaya, persis seperti yang kami harapkan.
Perhatikan bahwa saya hanya menunjukkan epoch pelatihan dari 200 hingga 399. Ini memberi kita wawasan yang baik tentang
tahap terakhir dari pembelajaran, yang, seperti yang akan kita lihat, adalah di mana aksi yang menarik terjadi.
Mari kita sekarang melihat bagaimana akurasi klasifikasi pada data uji berubah seiring waktu:
Sekali lagi, saya memperluas sedikit. Pada 200 epoch pertama (tidak ditampilkan), akurasi meningkat
para sedikit kurang dari 82%. Pembelajaran kemudian berkurang secara bertahap. Akhirnya, sekitar
dari era 280, ketepatan klasifikasi hampir berhenti meningkat. Era-era selanjutnya
hanya melihat fluktuasi stokastik kecil di dekat nilai presisi pada waktu 280.
Bandingkan ini dengan grafik sebelumnya, di mana biaya yang terkait dengan data pelatihan
terus jatuh perlahan. Jika kita hanya melihat biaya ini, tampaknya model kita
masihsedang menjadi "lebih baik". Namun hasil akurasi tes menunjukkan bahwa perbaikan adalah
sebuah ilusi. Sama seperti model yang tidak disukai Fermi, apa yang dipelajari jaringan kita setelah
epoca 280 tidak lagi digeneralisasi untuk data pengujian. Dan jadi itu bukanlah pembelajaran yang berguna.
Kami mengatakan bahwa jaringan sedang sangat beradaptasi atau mengalami penyesuaian berlebih atau bahkan overfitting, berdasarkan
dari era 280.
Anda mungkin bertanya-tanya apakah masalahnya di sini adalah bahwa saya sedang melihat biaya data dari
pelatihan, bertentangan dengan ketepatan klasifikasi pada data uji. Dengan kata lain,
mungkin masalahnya adalah kita membuat perbandingan antara apel dan jeruk. Apa yang
apa yang akan terjadi jika kita membandingkan biaya data pelatihan dengan biaya data
uji, apakah kita akan membandingkan ukuran yang serupa? Atau mungkin kita bisa membandingkan the
akurasi klasifikasi baik pada data pelatihan maupun data pengujian? Di dalam
benar, pada dasarnya fenomena yang sama muncul, tidak peduli bagaimana kita melakukannya
perbandingan. Detailnya berubah, namun. Misalnya, mari kita analisis biaya dalam data
de teste:
Kita dapat melihat bahwa biaya dalam data uji membaik hingga epoch 15, tetapi setelah itu ia
sungguh mulai memburuk, meskipun biaya pada data pelatihan terus berlanjut
memperbaiki. Ini adalah tanda lain bahwa model kami sedang mengalami overfitting.
sementara itu, ajukan sebuah teka-teki, yaitu apakah kita harus mempertimbangkan zaman 15 atau zaman 280 sebagai yang
titik di mana overfitting menguasai pembelajaran? Dari sudut pandang praktis, apa yang
yang sebenarnya kami pedulikan adalah meningkatkan akurasi klasifikasi pada data pengujian, sementara
biaya data uji bukanlah lebih dari sekadar proksi untuk akurasi klasifikasi. Dan demikian
lebih masuk akal untuk menganggap waktu 280 sebagai titik di mana overfitting terjadi
mendominasi pembelajaran di jaringan saraf kami.
Sinyal lain dari overfitting dapat dilihat pada akurasi klasifikasi di data pelatihan:
Akurasi meningkat hingga 100%. Artinya, jaringan kami mengklasifikasikan dengan benar semua 1.000
gambar pelatihan! Sementara itu, akurasi pengujian kami hanya mencapai 82,27%.
Oleh karena itu, jaringan kami benar-benar sedang belajar tentang keunikan dari kumpulan
pelatihan, tidak hanya mengenali digit secara umum. Ini hampir seperti jaringan kami
hanya menghafal kumpulan pelatihan, tanpa memahami digit
cukup baik untuk menggeneralisasi kumpulan pengujian.
Overfitting adalah masalah besar dalam jaringan saraf. Ini terutama benar dalam jaringan
model-model modern, yang umumnya memiliki sejumlah besar bobot dan bias. Untuk melatih dengan cara
efektif, kita membutuhkan cara untuk mendeteksi kapan overfitting sedang terjadi. Dan
kita perlu menerapkan teknik untuk mengurangi efek overfitting (di seluruh pekerjaan ini dan
pengetahuan yang diperlukanIlmuwan Dataharus dibayar dengan sangat baik).
Cara yang jelas untuk mendeteksi overfitting adalah dengan menggunakan pendekatan di atas, sambil menjaga kontrol terhadap
presisi pada data uji sesuai dengan pelatihan jaringan kami. Jika kita menyadari bahwa presisi
data uji tidak lagi membaik, kita harus berhenti melatih. Jelas bahwa,
secara ketat, ini bukan tanda dari overfitting. Mungkin saja bahwa
presisi pada data pengujian dan data pelatihan berhenti meningkat pada saat yang sama.
Meskipun begitu, penerapan strategi ini akan mencegah overfitting.
Sebenarnya, kita akan menggunakan variasi dari strategi ini. Ingatlah bahwa, ketika kita memuat
data MNIST, kami memuatnya dalam tiga set data:
Sampai sekarang, kami telah menggunakandata_pelatihanedata_ujidan kami mengabaikanvalidation_data.
O data_validasi
mengandung 10.000 gambar digit, gambar yang berbeda dari 50.000 gambar dalam kumpulan
pelatihan MNIST dan 10.000 gambar dalam kumpulan data pengujian MNIST. Alih-alih menggunakan
data_uji untuk menghindari overfitting, kami akan menggunakan data_validasi. Untuk melakukan ini, kami akan menggunakan
praktisnya strategi yang sama seperti yang dijelaskan di atas untuk test_data. Dengan kata lain, kita akan menghitung ...
presisi klasifikasi pada data validasi di akhir setiap epoch. Ketika presisi dari
klasifikasi pada data validasi telah jenuh, kami berhenti melatih. Strategi ini adalah
panggilan berhenti lebih awal (Early-Stopping). Jelas bahwa, dalam praktiknya, kita tidak tahu
segera ketika akurasi sudah jenuh. Sebaliknya, kami terus melatih hingga
termos kepastian bahwa akurasi telah jenuh.
Mengapa menggunakan validation_data untuk menghindari overfitting, daripada test_data? Sebenarnya, ini membuat
bagian dari strategi yang lebih umum, yaitu menggunakan validation_data untuk mengevaluasi berbagai opsi
evaluasi hiperparameter, seperti jumlah epoch untuk pelatihan, laju
pembelajaran, arsitektur jaringan terbaik dan seterusnya. Kami menggunakan evaluasi ini untuk
menemukan dan mendefinisikan nilai-nilai baik untuk hiperparameter. Sebenarnya, meskipun saya tidak memiliki
sebutan itu sampai sekarang, yaitu, sebagian, bagaimana kita sampai pada pemilihan hiperparameter
dilakukan sebelumnya di buku ini. (Lebih lanjut tentang ini nanti.)
Tentu, itu sama sekali tidak menjawab pertanyaan mengapa kita menggunakan
data_validasi untuk menghindari overfitting, bukan data_uji. Untuk memahami mengapa, pertimbangkan
yang, saat menentukan hiperparameter, kemungkinan besar kita akan mencoba banyak pilihan berbeda untuk
hiperparameter. Jika kita mendefinisikan hiperparameter berdasarkan evaluasi dari data_uji, maka akan
kemungkinan kita akan sangat menyesuaikan hiperparameter kita dengan data uji. Artinya, kita bisa
akhirnya menemukan hiperparameter yang sesuai dengan keunikan tertentu dari
data uji, tetapi di mana kinerja jaringan tidak akan digeneralisasi untuk kumpulan lain dari
Kami melindungi dari itu dengan menemukan hiperparameter menggunakan data_validasi.
Jadi, setelah kita memiliki hiperparameter yang kita inginkan, kita melakukan evaluasi akhir
dari akurasi menggunakan test_data. Ini memberi kita kepercayaan bahwa hasil kami pada data
tes adalah ukuran nyata seberapa baik jaringan saraf kami dapat menggeneralisasi. Untuk mengatakannya dengan cara lain
Anda dapat menganggap data validasi sebagai sejenis data pelatihan yang
membantu kita belajar parameter yang baik. Pendekatan ini untuk menemukan hiperparameter yang baik.
sering dikenal sebagai metode "hold out", karena data validasi adalah
dipisahkan atau "dipertahankan" dari data pelatihan.
Sekarang, dalam praktiknya, bahkan setelah mengevaluasi kinerja pada data uji, kita dapat mengubah
pendapat kami adalah mencoba pendekatan lain– mungkin arsitektur jaringan yang berbeda– apa
libatkan penemuan sekumpulan hiperparameter baru. Jika kita melakukan ini, tidak ada bahaya
Apakah kita juga akan menghapus test_data? Kita membutuhkan regresi yang berpotensi tak terbatas.
dari kumpulan data, agar kita dapat memastikan bahwa hasil kami akan
generalized? Mengatasi kekhawatiran ini adalah masalah yang dalam dan sulit. Tetapi untuk kita
tujuan praktis, kita tidak akan terlalu khawatir dengan masalah ini. Sebaliknya, kita akan
berfokus pada metode dasar retensi, berdasarkan data training_data, validation_data dan
data_uji, sesuai dengan yang dijelaskan di atas.
Kami melihat bahwa overfitting terjadi ketika kami hanya menggunakan 1.000 gambar pelatihan.
Apa yang terjadi ketika kita menggunakan seluruh set pelatihan yang terdiri dari 50.000 gambar?
Kami akan menjaga semua parameter lainnya sama (30 neuron tersembunyi, laju pembelajaran dari
0,5, ukuran mini-lot 10), tetapi kami melatih menggunakan semua 50.000 gambar selama 30
era. Berikut adalah grafik yang menunjukkan hasil akurasi klasifikasi pada data
pelatihan dan pada data uji. Perhatikan bahwa saya menggunakan data uji di sini, bukan data
validasi, untuk membuat hasil lebih langsung dapat dibandingkan dengan grafik sebelumnya.
Seperti yang Anda lihat, akurasi pada data uji dan pelatihan tetap jauh lebih tinggi.
selanjutnya dari pada ketika kami menggunakan 1.000 contoh pelatihan. Secara khusus,
akurasi klasifikasi terbaik sebesar 97,86% pada data pelatihan hanya 2,53% lebih tinggi
dari 95,33% pada data pengujian. Ini dibandingkan dengan selisih 17,73% yang kami dapatkan
Sebelumnya! Overfitting masih terjadi, tetapi sudah sangat berkurang. Jaringan kami sedang
se generalizing much better from training data to test data. In general, a
salah satu cara terbaik untuk mengurangi overfitting adalah meningkatkan volume (ukuran) data
pelatihan (sekarang jelas mengapaData Besarsedang merevolusi Ilmu Data?). Dengan
data pelatihan yang cukup, bahkan jaringan yang sangat besar pun sulit untuk mengalami
overfitting. Sayangnya, data pelatihan bisa mahal atau sulit didapat.
ini tidak selalu merupakan pilihan yang praktis.
Meningkatkan jumlah data pelatihan adalah cara untuk mengurangi overfitting. Tapi
ada cara lain untuk mengurangi tingkat overfitting? Salah satu pendekatan yang mungkin adalah
mengurangi ukuran jaringan kita. Namun, jaringan besar memiliki potensi untuk menjadi lebih
lebih kuat daripada jaringan kecil dan, oleh karena itu, ini adalah opsi yang hanya kami adopsi sebagai upaya terakhir
kasus.
Untungnya, ada teknik lain yang dapat mengurangi overfitting, bahkan ketika kita memiliki
sebuah jaringan tetap dan data pelatihan tetap. Teknik-teknik ini dikenal sebagai teknik dari
regulasi dan akan menjadi topik di bab berikutnya.
Sampai jumpa!
Referensi:
Pelatihan Kecerdasan Buatan
Produk Titik
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua
Meningkatkan jumlah data pelatihan adalah cara untuk mengurangi overfitting. Tapi
apakah ada cara lain untuk mengurangi sejauh mana terjadinya overfitting? Sebuah pendekatan
mungkin untuk mengurangi ukuran jaringan kita. Namun, jaringan besar memiliki potensi untuk menjadi
lebih kuat daripada jaringan kecil dan ini adalah pilihan yang hanya akan kami adopsi dengan enggan.
Untungnya, ada teknik lain yang dapat mengurangi overfitting, bahkan ketika kita memiliki
jaringan dengan ukuran tetap dan data pelatihan dalam jumlah terbatas. Teknik-teknik ini adalah
dikenal sebagaiteknik regulasi. Di bab ini, kami menggambarkan salah satu teknik dari
regulasi yang paling umum digunakan, sebuah teknik yang kadang-kadang dikenal sebagai peluruhan
peso (penurunan berat) atau Regularisasi L2. Ide dari Regularisasi L2 adalah menambahkan sebuah istilah
ekstra pada fungsi biaya, sebuah istilah yang disebut istilah regulasi. Berikut adalah entropi
cruzada regularizada
Persamaan 1
Istilah pertama hanyalah ekspresi biasa untuk entropi silang. Tetapi kami menambahkan sebuah
istilah kedua, jumlah kuadrat dari semua bobot jaringan. Ini diskalakan dengan faktor
λ / 2n, di mana λ > 0 dikenal sebagai parameter regulasi danné, seperti biasa,
ukuran set pelatihan kami. Saya akan membahas lebih lanjut bagaimanaλ dipilih. Itu
penting untuk dicatat juga bahwa istilah regulasi tidak termasuk bises. Saya juga
Saya akan kembali ke ini nanti.
Tentu saja, dimungkinkan untuk mengatur fungsi biaya lainnya, seperti biaya kuadrat. Ini bisa dilakukan
dilakukan dengan cara yang sama:
Persamaan 2
Dalam kedua kasus, kita dapat menulis fungsi biaya teratur sebagai:
Persamaan 3
Secara intuitif, efek dari regularisasi adalah membuat jaringan lebih memilih untuk belajar hal-hal kecil
berat, dengan semua hal lain tetap sama. Berat besar hanya akan diizinkan jika mereka memperbaiki
secara signifikan bagian pertama dari fungsi biaya. Dengan kata lain, regulasi
dapat dilihat sebagai cara untuk berkomitmen antara menemukan beban-beban kecil dan
meminimalkan fungsi biaya asli. Pentingnya relatif dari kedua elemen tersebut
kompromi tergantung pada nilai λ: ketika λ kecil, kita lebih memilih untuk meminimalkan fungsi dari
biaya asli, tetapi ketika λ besar, kami lebih memilih bobot kecil.
Sekarang, tidak sepenuhnya jelas mengapa membuat jenis komitmen ini harus membantu mengurangi
overfitting! Tapi kenyataannya, itu memang mengurangi. Kita akan membahas soal mengapa ini membantu dalam
pengurangan overfitting di bab berikutnya, tetapi pertama-tama mari kita bekerja pada sebuah contoh
menunjukkan bagaimana regulasi mengurangi overfitting.
Untuk membangun sebuah contoh, pertama-tama kita perlu mencari tahu bagaimana menerapkan algoritma kita
pembelajaran daripenurunan gradien stokastik dalam jaringan saraf yang diregulasi. Di
khusus, kita perlu tahu bagaimana menghitung turunan parsial ∂C/∂w dan ∂C/∂b untuk semua
peso dan bias di jaringan. Mengambil turunan parsial dari Persamaan 3 di atas, kita memiliki:
Persamaan 4
Os termos ∂C0/∂w dan ∂C0/∂b dapat dihitung menggunakan backpropagation, seperti yang dijelaskan
di bab-bab sebelumnya. Dan dengan demikian kita melihat bahwa mudah untuk menghitung gradien dari fungsi biaya
diregularisasi, karena cukup menggunakan backpropagation, seperti biasa, dan kemudian menambahkan(λ/n).wà
turunan parsial dari semua istilah bobot. Turunan parsial terhadap bias adalah
tidak berubah dan, oleh karena itu, aturan pembelajaran penurunan gradien untuk bias tidak berubah
dari aturan biasa:
Persamaan 5
Persamaan 6
Ini persis sama dengan aturan biasa dari pembelajaran penurunan gradien, kecuali
karena kita pertama-tama meresize bobot w dengan faktor 1 − (ηλ/n).
Esse reeskalonasiTerkadang, disebut sebagai pengurangan berat, karena mengurangi beban.
Sekilas, tampaknya ini berarti bahwa bobot sedang diarahkan ke nol, tetapi
itu tidak benar-benar demikian, karena istilah lain dapat menyebabkan bobot meningkat, jika ini terjadi
sebuah penurunan dalam fungsi biaya yang tidak teratur.
Oke, inilah cara kerja penurunan gradien. Dan bagaimana dengan penurunan gradien stokastik?
Nah, sama seperti dalam penurunan gradien stokastik yang tidak diregulasi, kita dapat memperkirakan
∂C0/∂w rata-rata dari sebuah mini -lotre dari m contoh pelatihan. Jadi, aturannya
pembelajaran yang teratur untuk penurunan gradien stokastik menjadi:
Persamaan 7
di mana jumlahnya adalah tentang contoh pelatihan x dalam mini-batch, dan Cx adalah biaya (tidak teratur)
untuk setiap contoh pelatihan. Ini persis sama dengan aturan biasa untuk penurunan
de gradien stokastik, kecuali untuk faktor pembusukan berat 1 − (ηλ/n). Akhirnya, dan
secara lengkap, izinkan saya menyatakan aturan pembelajaran yang teratur untuk bias. Artinya,
secara alami, persis sama seperti dalam kasus yang tidak teratur:
Persamaan 8
Saya juga menggunakan test_data lagi, bukan validation_data. Secara ketat, kita harus
menggunakan validation_data, untuk semua alasan yang telah kita diskusikan sebelumnya. Tetapi saya memutuskan untuk menggunakan
data_uji karena ia membuat hasil lebih langsung dapat dibandingkan dengan hasil kami
sebelumnya dan tidak teratur. Anda dapat dengan mudah mengubah kode untuk menggunakan
data_validasi dan Anda akan melihat bahwa ia akan memiliki hasil yang serupa.
Biaya data pelatihan menurun seiring waktu, sama seperti di
kasus sebelumnya, tidak diselesaikan dibab sebelumnya:
Tetapi kali ini akurasi pada test_data terus meningkat selama 400 epoch:
Jelas, penggunaan regularisasi menekan overfitting. Selain itu, akurasi adalah
secara signifikan lebih besar, dengan akurasi klasifikasi puncak 87,1%, dibandingkan
dengan puncak 82,27% yang diperoleh dalam kasus yang tidak teratur. Sebenarnya, hampir pasti kita bisa
mendapatkan hasil yang jauh lebih baik, terus melatih lebih dari 400 epoch.
Sepertinya, secara empiris, regulasi membuat jaringan kami lebih baik dalam melakukan generalisasi
dan mengurangi secara signifikan efek overfitting.
Apa yang terjadi jika kita keluar dari lingkungan buatan dengan hanya 1.000 gambar pelatihan
Apakah Anda ingin kembali ke set lengkap pelatihan yang terdiri dari 50.000 gambar? Tentu saja, kami sudah melihat bahwa
Overfitting jauh lebih tidak bermasalah dengan 50.000 gambar. Regularisasi masih membantu
Tetapi? Mari kita pertahankan hiperparameter yang sama seperti contoh sebelumnya– 30 epoch, tarif
pembelajaran 0,5, ukuran mini-batch 10. Namun, kita perlu memodifikasi parameter
de regularisasi. Alasananya adalah karena ukuran n dari kumpulan pelatihan berubah dari n =
1.000 untuk n = 50.000, dan ini mengubah faktor penurunan berat 1 − (ηλ/n). Jika
jika kita terus menggunakan λ = 0,1, itu berarti kehilangan berat badan yang jauh lebih sedikit dan, oleh karena itu, sangat
laki-lakiefek regularisasi. Kami mengompensasi dengan mengubah menjadi λ = 5.0.
Oke, mari kita latih jaringan kita, berhenti terlebih dahulu untuk menginisialisasi ulang bobot:
Ada banyak berita baik di sini. Pertama, akurasi klasifikasi kami pada data uji
meningkat dari 95,49%, ketika tidak diperbaiki, menjadi 96,49%. Ini adalah sebuah perbaikan yang besar.
Kedua, kita dapat melihat bahwa perbedaan antara hasil pada data pelatihan
e teste é muito menor do que antes, com um percentual abaixo de zero. Essa ainda é uma lacuna
signifikan, tetapi jelas kami telah membuat kemajuan yang substansial untuk mengurangi overfitting.
Akhirnya, mari kita lihat akurasi klasifikasi pengujian yang kita dapatkan ketika menggunakan
100 neuron tersembunyi dan satu parameter regulasiisasi λ = 5.0. Saya tidak akan melewati sebuah
analisis mendetail tentang overfitting di sini, ini murni untuk bersenang-senang, hanya untuk melihat akurasi yang
kita bisa mendapatkan ketika kita menggunakan trik baru kita: fungsi biaya entropi silang dan
Regularisasi L2.
Hasil akhirnya adalah akurasi klasifikasi 97,92% pada data validasi. Itu adalah sebuah
loncatan besar dari kasus 30 neuron tersembunyi. Sebenarnya, dengan sedikit penyesuaian lebih lanjut, untuk
eksekusi selama 60 epoch dengan η = 0.1 dan λ = 5.0, kita memecahkan batas 98%, mencapaimemulai sebuah
akurasi klasifikasi 98,04% pada data validasi. Tidak buruk untuk apa yang akhirnya menjadi
152 baris kode!
Saya menggambarkan regulasi sebagai cara untuk mengurangi overfitting dan meningkatkan akurasi.
klasifikasi. Sebenarnya, ini bukan satu-satunya manfaat. Secara empiris, saat menjalankan berbagai
eksekusi jaringan kami dengan dataset MNIST, tetapi dengan inisialisasi bobot yang berbeda
(acak), kami menemukan bahwa eksekusi tidak-yang teratur sesekali akan 'terperangkap',
jelas ter terjebak di minimum lokal dari fungsi biaya. Hasilnya adalah bahwa berbeda
eksekusi terkadang memberikan hasil yang cukup berbeda. Di sisi lain, eksekusi
yang teratur memberikan hasil yang jauh lebih mudah direplikasi.
Referensi:
Formasi Kecerdasan Buatan
Produk Titik
Pembelajaran Mesin
Elemen Pembelajaran Statistik: Penambangan Data, Inferensi, dan Prediksi, Edisi Kedua