[Tech] Machine Learning (I)

Jack Huang
A Good Guy
Published in
8 min readSep 4, 2019

Machine Learning 當紅,現在有很多演算法已經被 impletment 出來, 大部分 coding 的部份可以直接使用別人已經 train 好的 model 來達到預測某件事實或物品。今天大叔我就順勢搭上這個潮流和大家一起來學習機器學習(好繞口XD)。在這一系列的文章將會 follow Google Developer 的 Machine Learning Crash Course 搭配前幾天的 Google ML Study Jam 機器學習培訓計劃 — 進階一起整理~主要會是替大家解析所謂的 Machine Learning 以及其背後的原理是什麼!

由於是第一次撰寫這種文章,若有任何錯誤歡迎指正~

Abstract

使用 model 的流程大概如下

  1. 蒐集資料
  2. 整理資料
  3. 選擇適合的模組
  4. 訓練模組
  5. 評估模組
  6. 參數調校
  7. 預測

以下是一些簡單的名詞介紹

Neural networks 神經網路

一項技術用來模擬人腦運算、特殊模式的辨認

Neurons 神經元

neurons 可以視為 set of input、set of weight 或 activation function,neurons 在 神經網路中會將得到的所有 input 轉成單一一個 output,而這個 output 也可再成為其他 nerons 的 input。

詳細細節根據不同的 neural network 不同會有不同的解釋,以一個權重加總的 functon 為例

𝑓(𝑥1,𝑥2,…,𝑥𝑛)=𝑤1⋅𝑥1+𝑤2⋅𝑥2+…+𝑤𝑛⋅𝑥𝑛

其中 f 在 neural network 中便被稱為 neural。
每個 neural 都存在一個 weight vector,weight vector 在 train 的階段不同而有所不同。而 x 即為該 neural 的 input。

Deep neural networks

有的時候我們的資料種類很多,或是 input 為沒有清楚的特徵或沒有特殊結構的資料,使用一般的 neual network training 出來的 model 精確度會下降,為了提高 model 的精確度,許多專家會建議使用 Deep neural network
Deep neural network 與一般的 neural network 不同的地方在於它存在 layer,每層會執行對應的 type sorting 或 ordering,對當前的 input 做特徵整理,此架構也被稱為 feature hierarchy。

而所謂的 deep learning 一詞也是來描述 deep neural network

接下來我們將介紹幾種重要的 neural network 類型,有些類型可能讀者在之前有聽過,這邊就再次幫大家複習一下每種類型其運用的場域以及特性

Recurrent neural network

因為語言通常要考慮前後文以免斷章取義,也就是說,在建立語言的相關模型時如果能額外考慮上下文關係準確率就會顯著的提昇(或考慮資料有時間序列的情況),因此 Recurrent neural network 最大的應用是在自然語言處理(NLP)上。

在 recurrent neural network 中當前的 output 不只受到 input 的影響,同時也會受到同一層前一個 output 影響。

例如

  • 我不吃辣,所以,我點蝦仁豆腐
  • 我吃辣,所以,我點麻婆豆腐

就以「我點」切入討論時,蝦仁豆腐或麻婆豆腐的機率實際上會一樣,但是若加入前文的推論的話,前面接我不吃辣時,我點後面接蝦仁豆腐的機率應該會稍微大於麻婆豆腐一點

Character-based recurrent neural network

一般的 recurrent neural network 在自然語言處理上需要 maintain 一個大型的單字庫提供 model 運算時的查詢,而 character-based recurrent network 與一般 recurrent neural network 不同的是,在分析運算的過程中他以一個一個字節進行分析,因此省去了 maintain 單字庫以及運算時查詢單字庫的耗損,提供了更有彈性的 language model

LTSM network

因為 RNN 的主旨為:利用當前的 input 資訊對其重複 sort out 或 ordering 以判讀該 input 的內容並預測該 input 的特定區塊,但是並不是所有的當前資訊分析都只依賴於先前的資訊,有部份的資訊可能需要更久以前的資訊。但 RNN 在資訊長度越長的情況,無法連接兼具遙遠的資訊在當前的判讀上

例如當 RNN model 要判斷當前句子的最後一個字 “The clouds are in the sky” 時很明顯最後一個單詞可以只依賴前面的 context 判斷為 sky。
但是當輸入為一篇文章包含多個句子時,每個句子彼此之間也許存在上下文關係,在判斷該文章最後一個句子的最後一個單詞則可能需要前一個句子的資訊。
例如 “I grew up in France … I speak fluent French” 最後一個單字 French 則需要前一句的資訊才可以判斷的出來。這個問題被稱作 long-term dependency problem

因此 LTSM network 為 recurrent neural network 的改良,用於解決 long-term dependency problem,

Introducing Artificial Neural Networks

在深入使用 Keras 實作 deep learning 前,必須先理解什麼是 neural network

Perceptrons

最簡單的 neural network 便是 perceptrons,只包含一個 neuron,而該 neuron 存在一個簡單的樹狀結構,它包含了多個 input nodes 以及單個 output node,所有的 input nodes 會與 output node 相連

一個 perceptron 是一種模擬人類神經元細胞架構的資料結構
  1. Input node: 一個 input node 通常包含一個數值,可以是任意實數
  2. Connections: 每個 input node 都會有一個權重值,而這個值也可以是任意實數。透過權重值可將所有 input nodes 串接起來
  3. 所有 input nodes 串接起來後將輸入到 transfer (activation) function,透過該 function 輸出 output。利用數學式子表達如下:
    y = f(w1∗x1 + w2∗x2 + … + wD∗xD)
  4. 大部分的 transfer (activation) function 與 biological neuron 相似,實際上存在一個 threshhold:只有在輸入超出 threshhold value 或小於 threshhold value output 才會有變化,因此以數學式子表達的話 transfer (activation) function 大部分會是下面的形式:
    f(x) = 0 if x < 0
    f(x) = 0.5 if x = 0
    f(x) = 1 if x > 0
    以上面的例子可知,該 transfer (activation) function 的 threshold value 為 0
  5. 然而若是單純使用 transfer (activation) function 所得到的結果必定不會是連續還是離散的,這在後續一些數學運算處理上會造成麻煩,因此大部分會再使用 sigmoid function (S 函數) 將結果轉化成一個 smooth continuous value
  6. 最後,一個 perceptrons 或許會額外存在一個 bias 的 parameter,可以將它視為另一個有 weight value 永遠被設置為 1 的 input node。利用 bias 你可以去對 transfer (activation) function 的 input 做左移或右移,如此一來你便可以透過更改 bias input node 的輸入值來判斷 learning 的成功

然而,利用 Perceptrons 建立的 model 僅僅只能處理數值資料,也就是說,利用 Perceptrons 建立的 model 你必須先將資料轉化為數值型態才可以進行學習。
當你理解了 Perceptrons 後便可知道分類問題即可使用 Perceptrons 實作:只要超出 threshold value 則代表屬於某個類別,如果沒有則不屬於某個類別。

Multi-Layer Perceptron

如字面上的意思這是一個更加複雜的 neural network,它存在多個 neurons 並且被有規則地分層,一般而言 neural network 大多都是 2~3 層 layer,但是實際上的理論並沒有限制層數。

然而這些 layer 中你可以大致分類成以下 3 種:input layer、hidden layer、output layer,每一層的 output 會轉而成為下一層的 input ,並且其為 full-connected:每一層的 perceptron 的 output 都會傳遞給下一層的 perceptron 作為 input。

透過多層結構,他克服了原本單一 Perceptron 只能線性分離判斷類別(類別透過大於 threshold 或小於的條件判斷類別),可以表示更複雜的決策邊界。

今天大致就到這邊,主要是對整個 Machine Learning 幾個關鍵字作講解,在之後的文章或許也會提到這些關鍵字,讓大家比較不會那麼害怕~

--

--