Thursday, April 04, 2019

Numpy: Menggabungkan dua list menjadi N x 2 vektor

Misalkan kita memiliki dua list sebagai berikut:

kata = ["Bagus!", "Ampuh!", "cantik!", "Mantap!", "Cakep!", 
        "Jelek", "Rusak", "Nol", "Omong kosong", "Busuk", "Tidak"]
label = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]

Kita ingin menggabungkan dua list tersebut sehingga menjadi seperti ini:
array([['Bagus!', '1'],
       ['Ampuh!', '1'],
       ['cantik!', '1'],
       ['Mantap!', '1'],
       ['Cakep!', '1'],
       ['Jelek', '0'],
       ['Rusak', '0'],
       ['Nol', '0'],
       ['Omong kosong', '0'],
       ['Busuk', '0'],
       ['Tidak', '0']])

Maka, kita dapat menggunakan skrip berikut:
kata_label = hstack([np.array(kata, ndmin=2).T, np.array(label, ndmin=2).T])

Friday, March 29, 2019

Word Embedding dan Implementasinya dalam Python (Keras)

Tulisan ini merupakan implementasi dari tulisan sebelumnya, "Vektor dari Kata dan GloVe Embedding". Word embedding merupakan representasi dari kata. Dua teknik yang paling umum dipakai dalam word embedding telah dipaparkan sebelumnya: vektor kata dan GloVe embedding. Tulisan ini adalah implementasi dari teknik tersebut dengan menggunakan bahasa pemrograman Python dan modul Keras.

Misalkan kita punya kumpulan lima kata-kata baik dan enam kata-kata jelek seperti dibawah. Kata-kata baik kita labelkan dengan angka "1" sedangkan kata-kata jelek kita labelkan dengan angka "0".

import numpy as np
kata = ["Bagus!", "Ampuh!", "cantik!", "Mantap!", "Cakep!", 
        "Jelek", "Rusak", "Nol", "Omong kosong", "Busuk", "Tidak"]
label = np.array ([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])

Kemudian kata-kata di atas kita rubah menjadi integer
# merubah kata menjadi integer
from keras.preprocessing.text import one_hot
vocab_size = 50
encoded_docs = [one_hot(d, vocab_size) for d in kata]
print(encoded_docs)

Karena panjang maksimal dari elemen kata adalah dua buah (yakni kata "Omong kosong"), kita jadikan kata-kata lainnya memiliki panjang dua buah kata.

Thursday, March 28, 2019

Data yang besar mengalahkan algoritma yang baik

Dalam sebuah workshop yang saya ikuti setahun dua tahun yang lalu di Trieste, seorang pemateri dengan pedenya menyampaikan: "bigger data win over good algorithm", data yang besar mengalahkan algortima yang baik. Saya tercengang. Benarkah...? Selama sekolah, S1~S2, saya diajari dan dituntut untuk menghasilkan algoritma yang baik dari data pengukuran fisis untuk aplikasi kontrol, prediksi, diagnosa dan lain sebagainya. Namun sekarang paradigmanya berubah, bukan bagaimana meng-improve algoritma, tapi mempebesar jumlah data. Tidak sepenuhnya benar memang, namun ini jauh lebih mudah. Akan lebih mudah mengakuisisi lebih banyak data daripada mengimprove/memodifikasi algoritma yang biasanya membutuhkan matematika yang cukup rumit.

Benar adanya, tak semata-mata algoritma/metode yang baik, tapi juga data yang banyak. Gampangannya, orang yang yamg "pintar" tapi jarang belajar dibanding dengan orang yang "rajin" belajar dari banyak data. Pengalaman menunjukkan, tipe orang disebut terakhir lebih banyak berhasilnya daripada tipe orang yang disebut pertama.

Analogi lagi, data vs algoritma: mana yang lebih penting adalah seperti membandingkan mana yang lebih dulu: telur atau ayam. Awalnya saya, mungkin seperti kebanyakan orang juga, berpikiran telur lebih dahulu. Alasannya: telur lebih rigid, lebih statis, dan lebih kecil daripada ayam. Namun hasil penelitian membuktikan bahwa ayam lebih dahulu daripada telur (artinya Tuhan menciptakan ayam dulu, ini lebih masuk akal). Begitu juga dengan data vs algoritma: data-lah akhirnya yang menang, tentunya data yang banyak, big atau bahkan very big.

Jadi tunggu apa lagi? Cari data sebanyak-banyaknya, seakurat mungkin! Mengumpulkan data tidak sesulit membangun algortima. Kalau membangun algortima, kita butuh mikir exktra, menurunkan rumus matematik, dan mengimplementasikannya dalam bahasa pemrograman. Sedangkan untuk mengumpulkan data, kita cuma butuh waktu, keuletan, dan ketekunan. Contohnya untuk data teks, kita perlu sabar dan rajin mengumpulkan kalimat, tokenisasi, mengetik dan sebagaiknya. Untuk data suara, kita perlu merekam, mengedit dan memanipulasi (tambahkan noise, hilangkana noise, dsb). Jauh lebih mudah untuk memperbanyak data daripada memperbaiki algoritma.

Garbage In Garbage Out
Salah satu prinsip yang penting dalam machine learning dan pengenalan pola adalah "data yang baik", berkualitas. Jika data yang kita masukkan adalah sampah, maka hasilnya juga sampah. Maka, selain memperbanyak data, yang harus kita perhatikan adalah kualitas data tersebut. Jangan sampai data yang kita latih, misal dengan deep learning, merupakan data sampah, sehingga hasilnya juga sampah. Disinilah pentingnya preprocessing.

Berapa data yang "besar" itu?

Pertanyaanya selanjutnya, jika data yang besar mengalahkan algoritma yang baik, seberapa besar data yang besar itu? Ian Goodfellow et al. dalam bukunya "Deep learning" berargumen sebagai berikut,
As of 2016, a rough rule of thumb is that a supervised deep learning algorithm will generally achieve acceptable performance with around 5,000 labeled examples per category, and will match or exceed human performance when trained with a dataset containing at least 10 million labeled examples. Working successfully with datasets smaller than this is an important research area, focusing in particular on how we can take advantage of large quantities of unlabeled examples, with unsupervised or semi-supervised learning.
 Jadi, 5000 data yang terlabeli dengan benar merupakan data minimal dari sisi best practice. Tenju saja, semakin besar semakin baik.

Referensi:
  1. Alon Halevy, P. Norvig, F. Pereira, "The Unreasonable Effectiveness of Data". Available online:https://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/35179.pdf
  2. https://www.datasciencecentral.com/profiles/blogs/data-or-algorithms-which-is-more-important

Tuesday, March 26, 2019

Vektor dari kata dan GloVe embedding

Mengolah kata pada pemrosesan bahasa alami (NLP, Natural Language Processing) dari suatu text mensyaratkan untuk mengubah kata tersebut menjadi nilai numerik karena komputer hanya bisa memproses angka. Permasalahannya: bagaimana merepresentasikan kata ke suatu nilai numerik? Disini dua pendekatan akan dibahas: vektor dari kata (word2vector, atau word2vec) dan GloVe embedding.
Vektor kata: Raja, ratu, pria, wantia

Vektor dari Kata
Apa itu vektor dari kata, atau singkatnya 'vektor kata'? Sederhananya: a vector of weights. Tugas dari vektor dari kata adalah untuk mencari representasi (numerik) dari kata-kata yang dicari. Contoh sederhana adalah sebagai berikut.
Sebuah data terdiri dari kata-kata:
data = {raja, ratu, pria, wanita, anak-anak}
maka kata "raja" dapat kita tuliskan:
raja = {1, 0,  0, 0, 0}
ratu = {0, 1, 0, 0, 0}
pria = {0, 0, 1, 0, 0}
wanita = {0, 0, 0, 1, 0}
anak-anak={0, 0, 0, 0, 1}

Teknik diatas disebut dengan one-hot encoding.

Friday, March 15, 2019

Atensi, hubungannya dengan cocktail party problem dan deep learning

Beberapa hari ini saya kembali membaca beberapa paper tentang fenomena "cocktail party", tema penelitian saya saat S1 dan S2. Dulu, bahkan sampai minggu lalu, saya hanya membaca banyak paper dari aspek statitsik, algoritma, dan aplikasinya. Padahal teknik tersebut (ICA/BSS) diusulkan untuk meniru cara kerja otak manusia. Karena sedang mengambil kuliah tentang "perceptual", sekarang saya sedang membaca beberapa paper tentang bagaimana otak memproses fenomea "cocktail party". Kali ini, semua yang saya baca adalah tentang persepsi, kognisi dan proses biologi, bukan rekayasa matematika atau deep learning, tapi tentang jaringan saraf sebenarnya.

Atensi

Apakah atensi itu? Atensi merupakan proses kognitif dan perilaku untuk memilih informasi tertentu dan mengabaikan informasi lainnya. Studi tentang atensi ini mulai berkembang ketika Cherry pada tahun 1953 mempublikasikan papernya tentang eksperimen "shadowing task": dimana responden diperdengarkan dua pesan melalui headphone secara dichotic (satu pesan untuk tiap kanal, kanan dan kiri). Pesan terserbut merupakan pesan utama (attended) dan sampingan (non-attended). Cherry menemukan bahwa sangat kecil sekali reponden memperhatikan pesan sampingan, misalnya apakah pesan itu diucapkan oleh laki-laki/wanita, bahasa apa yang digunakan, dll. Eksperimen Cherry ini membuka jalan lahirnya teori tentang atensi dan beberapa modelnya.

Gambar 1. Model atensi Broadbent dan Treisman

Wednesday, March 06, 2019

Mencoba Kaldi di Ubuntu 18.04, cuda9.0

Ini adalah catatan saya saat mencoba Kaldi (speech recognition toolkit) pada Ubuntu 18.04. Spesifikasi PC yang saya gunakan adalah CPU i9-7900X dan GPU GTX 1060. Hasil percobaan ini membuahkan satu paper yang saya submit pada ASJ spring meeting 2019.

Instalasi

Instalasi kaldi adalah proses pertama, dan bisa jadi, tersulit. Jika anda "SUCCESS" menginstall Kaldi, proses selanjutnya akan mudah. Jika tidak, akan terhenti. Berikut adalah dasar alur kerja setelah meng-clone Kaldi.

Pertama clone Kaldi ke direktori PC kita.

Monday, February 04, 2019

Phase Unwrapping

Samakah hasil perhitungan: $ \cos (420^\circ)$ dengan $\cos (420^\circ-2\pi)$? Ide inilah yang (menurut saya) melatarbelakangi teknik phase unwrapping pada analisa sinyal.

Phase unwrapping adalah metode untuk "membuka" fase sinyal. Algoritma metode untuk unwrapping fase ini adalah sebagai berikut: "Jika selisih antara dua skalar fase dalam array lebih dari dikont, yakni $\pi$ (3.14, dalam radian), maka nilai skalar yang lebih tinggi tadi dikurangi $2 \pi$. Nilai diskont ini bisa dirubah, namun defaultnya adalah $\pi$.

Perhatikan contoh berikut. Vektor $x$ adalah array yang berisi fase dari suatu sinyal.

$$ px = [0~ 1~ 3.24~ 5~ 6.28~ 10~ 13~ 16]$$

Jika selisih antara $x[n]$ dengan $x[n+1]$ lebih besar dari $\pi$ maka dilakukan unwrapping fase. Sehingga untuk vektor fase $x$ diatas hasilnya adalah,

$$ px2 = [0.0~        1.0~        2.0~        3.24~      5.0~     
       6.28~      3.72~  6.72~ 9.72] $$

Vektor $px2$ merupakan hasil phase unwrapping dalam radian agar tracking fase terlihat lebih halus. Lihar gambar di bawah ini untuk hasil plot fase (atas) dengan unwrapping fase (bawah).

Plot fase (atas) dengan unwrapping fase (bawah)

Friday, February 01, 2019

Zero Padding dan efeknya pada FFT

Zero padding berarti menambahkan nol diakhir sinyal. Misal kita memiliki vektor x sebagai berikut,

$$ x = [0 ~1~ 2 ~3 ~1~ 2~ 3~ 2~ 4~ 3] $$

Vektor tersebut memiliki ukuran 10 data. Zero padding adalah menambahkan nol di belakang vektor tersebut, misalnya kita tambahkan lima nol di belakang data terakhir sehingga menjadi,

$$x = [0 ~1~ 2~ 3~ 1~ 2~ 3~ 2~ 4~ 3~ 0~ 0~ 0~ 0~ 0]$$

Zero padding banyak dipakai untuk menyamakan ukuran vektor/matriks. Pada machine learning/deep learning, ukuran input harus sama, dan zero padding dilakukan untuk tujuan tersebut (menyamakan ukuran input). Pada analisa sinyal di domain frekuensi, zero padding ini biasanya digunakan agar spektrum yang kita plot menjadi lebih halus.

Implementasi dengan Python

Implementasi zero padding dengan python bisa bermacam-macam, salah satunya dengan np.pad (salah lainnya dengan menggunakan np.zeros).

Contohnya adalah sebagai berikut:

>>> x = np.array([1, 2, 3, 4, 5])
>>> xpad = np.pad(x, (0, 5), 'constant')  # menambahkan lima nol di belakang vektor a
>>> x
    [1, 2, 3, 4 , 5, 0, 0, 0, 0, 0]

Friday, January 18, 2019

Merobohkan penghalang dalam "menulis"

Sebetulnya saya ingin membaca sebuah buku "How to Write a lot: A practical guide to productive academic writing", tapi setelah saya cari cari-cari di perpus tidak ketemu (padahal saya cek di web ada: "borrowable" dan "in place"). Saya baca versi ebooknya, tidak puas. Dari googling, saya menemukan seseorang sudah meresumenya. Berikut adalah terjemahan bebas saya atas resume tersebut.
  1. Penghalang #1: "Saya tidak punya waktu untuk menulis"
  2. Solusi: Alokasikan waktu menulis, sediakan dan jadwalkan waktu tersebut.
  3. Penghalang #2: "Saya butuh membaca lebih banyak, menganalisa tulisan orang lain, dll untuk menulis"
  4. Solusi: Lakukan sekarang juga dan tulislah hasil bacaanmu dan analisamu, langsung setelah itu.
  5. Penghalang #3: "(Kayaknya) Saya butuh laptop baru ..."
  6. Solusi: Tidak, kamu tidak butuh laptop baru. Tulisan ini ditulis dengan laptop produksi 6 tahun yang lalu.
  7. Penghalang #4: "Saya tidak punya inspirasi untuk menulis"
  8. Solusi: Kamu tidak perlu menunggu inspirasi datang, cukup duduk, tulis. Gerakkan tanganmu di atas tuts keyboard, tulis.
  9. Penghalang #5: "Saya tidak punya motivasi (untuk menulis)"
  10. Solusi:


    A post shared by Bagus Tris Atmaja (@bagustris) on
That's all! Penghalang ke #5 di atas bukan dari buku, tapi dari saya sendiri. Selamat menulis!

Wednesday, January 16, 2019

Ketidaklinearan sistem pendengaran [6]

Catatan kuliah "Human perceptual model and its system", pertemuan ke-6.

Telinga manusia merupakan sistem yang tidak linear. Apa buktinya? Fakta berikut merupakan beberapa bukti ketidaklinearan sistem pendengaran manusia. Meskipun ada beberapa bukti kelinearan pada fenomena berikut (misalnya emisi spontan pada otoakustik), dengan menggunakan sifat ketidaklinearan fenomena tersebut justru menjadikannya masuk akal.

Respon basilar membrane (pemilihan frekuensi)

Pemilihan frekuensi: Kemampuan telinga untuk memisahkan komponen frekuensi dari suara kompleks. Basilar membrane hanya bergetar pada tempat/lokasi dimana frekuensinya sama (resonansi). Seperti diketahui sebelumnya, respon frekuensi pada basilar membrane berjalan dari frekuensi tinggi (base) menuju frekuensi rendah (apex). Response basilar membrane merupakan filter dimana fitter tersebut gabungan dari banyak bandpass filter. Karenanya filter auditori ini disebut filterbank.

Respone basilar membrane ini tidak liner. Dilihat dari skala yang digunakan (Bark dan ERB), keduanya menggunakan spasi logaritmik. Meski model auditory seperti gammatone masih menggunakan filter linear, namun model yang lain seperti double-resonance nonlinear (DRNL) menggunakan konsep nonlinear yang memberikan hasil yang lebih bagus daripada filter linear.

Contoh skala bark yang diturunkan dari konsep critical band (Zwicker model) seperti terlihat pada gambar di bawah. Perlu diingat bahwa skala yang lain, yakni ERB-rate, lebih banyak dipakai karena hasilnya cocok baik dari eksperimen psikoakustik maupun psikologi.
Auditori filter dalam frekuensi Bark

Wednesday, January 09, 2019

Fisiologi dari peripheral auditori dan pemodelannya [5]

Catatan kuliah human perceptual system and its model, pertemuan kelima, kelanjutan kuliah sebelumnya.

Sistem auditori merupakan sistem pemrosesan aktif, otak  turut andil dalam memproses gelombang mekanik suara menjadi sinyal nerve. Otak bisa menambah dan mengurangi gain dalam sistem auditori.

Mekanika kontrol otak ke sistem pendengaran tersebut juga meliputi  kemampuan otak untuk mengendalikan hair cell, artinya sistem efferent (dari otak ke peripheral) bisa mengontrol ketidak-linearan sistem pendengaran.

Lagi, bagian-bagian telinga dapat dipecah sebagai berikut:
Anatomi manusia (dimodifikasi dari Wikipedia)

Sunday, January 06, 2019

Analisa sinyal (suara) dan teknik sintesis [4]

Ini adalah catatan kuliah Human perceptual system and its model, pertemuan ke-4.

Suara yang dihasilkan microphone bukan murni suara kita, namun suara kita dikalikan dengan respon microphone (yang tidak flat).

Bagaimana menganalisa sinyal (suara)?
1. Pendekatan non-parameterik
2. Pendekatan parametrik

Analisa Non-parametrik

Untuk mendapatkan sinyal target digunakan metode tanpa mengasumsikan model tertentu.
Contoh:
$$Y(z) = H(z)X(z) + N(z)$$

Contoh dalam analisa suara:
- short term autocorrelation analysis
- short term spectral analysis
- cepstrum analysis
- band pass filter bank
- zero cross analysis

Friday, January 04, 2019

Pentingnya intuisi dalam memahami persamaan matematika: Teorema Bayes

Intuisi dari sebuah persamaan Matematika sangat penting, tanpanya kita tidak bisa memahami sebuah fenomena melalui sebuah rumus. Contohnya adalah hukum Newton, F = ma. Gaya yang sama yang dikenakan pada masa yang berbeda akan menghasilkan percepatan yang berbeda (Dosen saya dulu mengajarkannya, a = F/m, bukan F = m.a). Gaya yang sama diberikan pada bola akan menghasilkan percepatan yang besar, namun tidak pada sebuah mobil. Perhatikan gambar di bawah ini.


Kali ini bukan Hukum Newton yang kita bahas, melainkan Bayes rule, Teorema Bayes.

Teorema Bayes

Teorema Bayes merupakan formulasi "tingkat kepercayaan" terhadap probabilitas suatu event berdasar pengetahuan sebelumnya. Teorema Bayes dirumuskan sebagai berikut,

$$ P\left( W \middle| O \right) = \frac{P\left( O \middle| W \right)P\left( W \right)}{P(O)} $$

Untuk memahami persamaan di atas, perhatikan sebuah contoh berikut. Pada suatu populasi, 1% penduduknya adalah musisi sedangkan 10% dari total populasi adalah kidal. Sebuah survey terbaru menyatakan bahwa 60% musisi adalah kidal. Berapa probailitas bayi yang baru lahir yang kidal akan menjadi musisi?

Tuesday, December 25, 2018

Representasi suara dan pemrosesannya [3]

Tulisan ini adalah kelanjutan tulisan sebelumnya, catatan kuliah "Human perceptual system and its model", pertemuan ketiga.

Motivasi:
Apa perbedaan pemrosesan linear dan pemrosesan non-linear?
Pemrosesan linear:Transformasi Fourier, Laplace, Z, Wavelet
Pemrosesan non-linear: Sistem auditori, sistem produksi suara, sistem audio
Lebih jauh tentang perbedaan sistem linear dan non-linear bisa dilihat disini: https://youtu.be/nxGmkAgJaA8

Bagaimana mempelajari pendengaran?
- Fisiologi auditori
- Psikofisika auditori (psikoakustik)

Monday, December 17, 2018

Pengolahan sinyal auditori [2]

Ini adalah catatan kuliah yang saya transkrip ketika kuliah berlangsung: I656 - Human Perceptual Systems and its Models, pertemuan kedua.

Sistem auditori merupakan sistem pendengaran manusia.
Video tentang sistem auditori berikut memvisualisasikan tulisan di bawah ini:

Telinga manusia terbagi menjadi 3:
1. telinga bagian luar
2. telinga bagian tengah
3. telinga bagian dalam

Gambar berikut menjelaskan bagian-bagian telinga tersebut yang akan dijelaskan lebih detil di bawahnya.

Friday, December 14, 2018

Bermain (virtual) Piano di Ubuntu

Di zaman serba canggih ini, kita tidak harus memiliki piano untuk bisa bermain piano. Cukup dengan menggunakan laptop dan keyboard laptop-pun bisa dijadikan tuts piano. Begini caranya.

Instalasi
Saya menggunakan Ubuntu 16.04 untuk instalasi aplikasi piano ini. Anda bisa juga menggunakan OS lainnya. Aplikasi yang akan kita gunakan/install adalah vmpk (virtual midi piano keyboard). Untuk menginstallnya cukup mudah,

sudo apt install vmpk

Perintah tersebut juga akan menginstall qsynth, yang akan menginterface (menghubungkan) vmpk dengn sound output Ubuntu  (vmpk tidak menghasilkan suara, sehingga perlu interface untuk menghasilkan suara).

Monday, December 10, 2018

Pengantar Persepsi Manusia dan Pemodelannya [1]

Ini adalah catatan kuliah yang saya transkrip saat kuliah berlangsung untuk mata kuliah "Persepsi Manusia dan Pemodelannya", pertemuan pertama.

Persepsi: organisasi, identifikasi dan interpretasi informasi sensori untuk merepresentasikan dan memahami lingkungan.

Semua persepsi melibatkan sinyal dari sistem saraf (nerveous) yang dihasilkan dari stimulasi fisis dari organ pengindera.

Lima indera manusia:
- penglihatan
- pendengaran
- sentuhan
- perasa/pengecap
- penciuman

Kelima indera tersebut diindera oleh mata, telinga, kulit, lidah dan hidung.

1. Penglihatan
Mata merupakan indera penglihatan yang memiliki struktur kompleks terdiri atas lensa transparen yang memfokuskan cahaya pada retina. Retina sendiri terdiri atas dua organ penting, cell-rods dan cones. Cell-rods tidak sensitif terhadap warna namun sensitif terhadap cahaya daripada cones. Cones sensitif terhadap warna dan terletak pada bagian retina yang disebut fovea, dimana cahaya difokuskan oleh lensa. Manusia memiliki tiga cone (Red, green, blue) sedangkan anjing hanya memiliki dua saja (green dan blue), sehingga anjing tidak bisa membedakan warna hijau, kuning atau merah.

Penampang retina: rod, cones dan lapisan saraf (kiri-kanan)

Wednesday, October 17, 2018

Review Buku: 201 teknik presentasi

Dalam bukunya "Presentation skills 201", William "Bill" Steele (presentation skill trainer) membagikan kecakapan atau teknik presentasi sebagai berikut.

Perencanaan

Perencanaan sangat penting sebelum melakukan presentasi. Presentasi yang baik dipersiapkan dengan rencana yang baik pula. Jangan melakukan presentasi tanpa persiapan, dan jangan percaya pada orang yang bisa melakukan presentasi tanpa persiapan, kecuali dia sudah ahli. Diantara kecakapan atau teknik presentasi pada tahap perencanaan ini meliputi: bersungguh-sungguh melakukan persiapan, mendefinisikan apa yang ingin dicapai, memilih/memiliki tema, tekankan bahwa anda bukan audiens (tapi presenter), keluar dari kebiasaan, jangan abaikan suara kecil, jangan melalukan persiapan yang berlebihan, dan masukkan cerita pada presentasi anda.

Siapkan data dan buat data anda hidup, masukkan humor namun jangan mencoba melucu, bangun pemahaman dengan contoh, gunakan analogi untuk menjelaskan sains dan teknologi, bekerja dengan lawan, sitasi pengarang aslinya, nyatakan dengan jelas, mulai dengan mantap dan akhiri dengan mantap pula, sediakan rangkuman, pancing pertanyaan, pastikan pesan tersampaikan, hindari perubahan di menit-menit terakhir, dan persiapkan penampilan anda di panggung.

Persiapan Slide

Pada tahap persiapan slide kita bisa mencoba teknik brainstorming dulu: pesan apa yang ingin kita sampaikan baru kemudian beralih ke slide. Gunakan visualisasi yang baik, pewarnaan dan tema yang memukau namun tidak norak. Persiapkan juga untuk tampil tanpa slide (mati lampu misalnya, tidak ada LCD dll). Peragakan dan gunakan bahasa tubuh sebanyak mungkin jika ingin menggambarkan secara visual. Beralih dari slide ke slide selanjutnya secara halus. Jangan menjadi korban teknologi, intinya pada anda, bukan pada teknologi yang anda gunakan. 

Slide anda merefleksikan siapa anda. Jika anda menggunakan template milik kantor atau institusi anda, slide tersebut sepenuhnya milik anda. Anda bebas mengeditnya sebaik mungkin.

Latihan

Saturday, September 29, 2018

Pendakian Gn Fuji via Fujinomiya Trail: Rute, Estimasi Waktu dan Biaya

Persiapan

Video berikut sangat membantu untuk persiapan mendaki Fuji, khususnya via Fujinomiya trail. Langsung cus ke link youtube di bawah ini. Simak dengan baik, kalau perlu catat hal-hal penting yang sekiranya bermanfaaat ketika mendaki nantinya.

Rute

Rute yang kita gunakan adalah Fujinomiya trail. Selain Fujinomiya, ada tiga rute lainnya: Gotenba trail, Subashiri trail, dan Yoshida (Kawaguchiko) trail. Fujinomiya trail sendiri bukan rute yang populer, karena terletak di arah selatan. Kebanyakan orang mendaki dari arah Tokyo, khususnya rute Yoshida trail beserta dua rute lainnya. Awalnya, saat ibukota Jepang masih di Kyoto, rute Fujinomiya trail ini (katanya) adalah yang paling populer. Namun, begitu Ibukota Jepang berpindah ke Tokyo (Utara), maka rute yang populer adalah dari sisi utara Gunung Fuji.

Thursday, August 02, 2018

Deep Learning: CNN

Tulisan ini adalah kelanjutan dari tulisan sebelumnya tentang Jaringan Syaraf Tiruan (JST) .

Deep learning (tidak hanya) terbagi menjadi dua cabang algoritma besar: CNN (Convolutional NN) dan RNN (Recurrent NN). Masih banyak metode lainnya, namun seolah tenggelam oleh dua algoritma tersebut. Perbedaan utama CNN dan RNN adalah sebagai berikut.

CNN:
  1. Input berupa tensor dengan ukuran tetap (e.g: image)
  2. Output juga berupa vector dengan ukuran tetap (e.g. probablitias dari beberapa kelas berbeda)
RNN:
  1. Beroperasi pada sekuen vector atau tensor
  2. Contoh aplikasi: Text translation, speech to text, speech recognition, text to speech.

Sederhanya, jika input bisa diubah dalam bentuk "image", kita pakai CNN, jika data berupa vektor kita pakai RNN. Contoh, data ujaran (speech) juga bisa ditraining dengan metode CNN dengan memberi input jaringan berupa "image" spectrogram.

Kembali ke CNN. Masalah terbesar JST/NN. 

Jika sebuah image berukuran 50 x 50 pixel sebagai input, dan JST memiliki konfigurasi 2 hidden layer dengan layer pertama berisi 7500 neuron (node) dan layer kedua berisi 2000 node dan 2 ouput, maka jumlah weight (bobot) pada arsitektur JST tersebut:
$$ (7500 \times 2000) + (2000 \times 2) = 15004000 $$
Jumlah yang cukup "berat" untuk dijalankan dengan komputer spek standar. Sebagai solusinya, ditawarkan arsitektur JST yakni CNN yang bisa bekerja dengan mempelajari pola pada skala yang lebih kecil, dan menggunakannya untuk mengidentifikasi gambar yang lebih besar. Contohnya adalah apakah gambar input merupakan gambar singa atau macan. Dengan mempelajari sebagian kecil bagian gambar (misal: bagian mulut), maka informasi tersebut dapat digunakan untuk menentukan gambar yang diinputkan adalah singa atau macan.

Ilustrasi CNN untuk deteksi gambar macan/singa

Konvolusi

Ide dasar dari CNN adalah kovolusi itu sendiri. Jadi, setiap bagian pada image dikonvolusikan dengan kernel atau filter.  Kedua istilah tersebut, filter dan kernel size, pada Keras/Tensorflow dibedakan, filter sebagai representasi banyaknya feature map hasil konvolusi, dan kernel sebagai peng-konvolusi. Sebagai contoh, kita memiliki data image dengan ukuran 5 x 5 pixel, kemudian kita buat filter ukuran 2 x 2. Setiap bagian (2 x 2) pada data image dikonvolusikan dengan kernel atau filter 2 x 2 tadi. Lihat gambar berikut untuk lebih jelasnya.