上回提到了「資料的概念」,只要是讓電腦用來學習的素材都可以稱作資料,然而實際上電腦看到的是什麼呢?我們舉幾個常見的例子。
我們平常看到的圖片,對於電腦來說,不同格式有不同表示法,像是一張長 n 像素、寬 m 像素(pixels)大小的黑白照片,就會用 n x m 大小的矩陣來表示,其中每個元素都是 0 到 255 之間的整數;如果變成同樣大小的彩色照片,就會變成 n x m x 3 大小的張量(tensor)來表示,也就是紅、綠、藍三色分別代表一個 n x m 的矩陣,一樣每個元素都是 0 到 255;更或者有些除了顏色外,還多了透明值(alpha)一個維度,那就會變成 n x m x 4 大小的張量,有時候我們也會做正規化,變成 0 到 1 之間的實數來表示一個值。
影片可以把它理解為很多張圖片所串接起來,所以可能會變成 n x m x 3 x f 大小的張量,f 是指總共有幾幀的畫面,我們常用的單位就是看每秒幾幀(frame per second, fps),像是 100 fps 就是指一秒拍了 100 張圖片,如果是個一分鐘整的影片,最後就會有 6000 (= 100 x 60)幀圖片囉。
我們有時候會對資料做一些分類,有了好幾種不同的類別或標籤,最常見的就是 One-hot encoding。假設我們現在有 n 個不同的類別,那我們就會取一個 $n$ 維的向量,如果資料有第 $i$ 個類別,那這個向量的第 $i$ 維度就會設成 1 ,反之為 0。
音檔的表示方法就比較複雜也很多樣,我們知道聲音是一種波,第一種方法就是震幅隨著時間的變化,就會形成一個向量,其他方法包括頻譜分析(frequency domain)或是做傅立葉轉換等,也可以用來描述音檔,這裡就先不詳細探討。
文字表示法是最繁雜的,最暴力的方法就是把一個字詞看作一個類別,這樣就可以用類別表示法,使用 One-hot encoding。如果是英文,可能勉勉強強還有機會,就是當作總共有劍橋英語詞典這麼多單字量的類別來處理,然而當語言換成中文的時候,這方法就會完全壞掉,除非你再處理特定有限字詞的情況,否則你根本不知道有多少字詞,另外還存在許多缺點,像是這樣形成的矩陣、向量會變非常的稀疏(sparse),大部分都是 0,少部分是 1。所以當然還有其它表示法,像是詞向量(word embedding)等,這裡也先不詳細探討了。
資料千千萬萬總,這裡只是舉了最常見五種的表示方法,不同資料就會有不同的表示方法,有時候表示方法也是個令人頭疼的問題,我們會在之後的系列裡提到。