重點:了解KNN原理與優缺點

K 值的選擇

KNN 中 K值的選擇沒有標準的做法,但仍然可以依照資料集來選擇合適的K值。首先我們先來看看兩個不適合的K值選擇:

K 值過小:會造成兩個問題。
1. 訓練資料集產生的模型過擬合(或指模型泛化能力不足)。
2. 資料可能會受到極端值(Outliers的影響)。

K 值過大: 與上述相反的問題外,還有多一個。
1. 模型缺乏鑑別度
2. 失去了不同群體間的重要資訊
3. 訓練時間過久

適當的K值

・K應為奇數,以避免無法判斷的情形發生。
・常見的設計方法是K = sqrt(N),N 為訓練集的數量。
・即便K = sqrt(N)是一個方便的做法,但是常常無法選出最適當的值,目前常見的做法是使用 “cross-validation”

K-fold

K-fold 是 cross-validation 中常見的做法,並且可以用做「Hyperparameters tuning」。

作法:

將訓練資料及拆分成K份 (此處的K,並不是KNN的K),其中1/K份作為驗證集,剩下 (K-1)/K當作訓練集,因此我們將可獲得K份驗證集的結果,再用這K組驗證結果平均,取得最終成果。

*注意:每個訓練都是獨立完成,彼此間並不分享資訊。

如何選擇:

一般我們會先預選幾個 K值,包含10、50、100,運用K-fold方式得到的不同結果,來選擇最合適的K值。

好處:

・現實中有時難以收到巨量的資料,藉由K-fold方法,我們可以在有限的訓練集中多次測試模型的泛化效果。
・因為使用多次的驗證集來獲取平均,故結果更具代表性。

註解:

即便KNN屬於監督式學習,但是KNN模型在訓練時是透過記住訓練資料集的位置,來預測新資料點的可能結果,因此實際上沒有真正的訓練過程。

介紹KNN之前,先簡單的了解機器學習中重要的演算法分類。

若以訓練過程中的標的是否已知來做分類,簡單來說可以分為三類:

  1. 監督式學習 (Supervised learning) : 分類問題、回歸問題
    通常在這類的模型訓練中,資料通常是必須有標註過的,才能送入模型予以訓練。
    ・分類問題:利用標記過的資料集去預測有限的資料類別。
    ・回歸問題:預測連續的數值。
  2. 非監督式學習 (Unsupervised learning): 降維問題、分群問題
    非監督式學習則強調不需要標注資料,而是利用資料本身的特徵來進行歸類。
    ・降維 (Dimension Reduction): 將高維度特徵壓縮成低維度,PCA, t-SNE
    ・集群 (Clustering): 利用資料本身特徵聚類,K-mean
    ・異常檢測 (Anomaly detection)
  3. 強化式學習 (Reinforcement learning): 暫時忽略

K-近鄰演算法

K-nearest nearest neighbors 屬於supervised learning 的分類演算法。

NLP領域常見的是利用KNN來解決文章分類垃圾郵件分類

概念很簡單,在已知標記的訓練集內,放入新的資料,讓這個資料和K個最鄰近的資料點計算距離,最終觀察資料並進行投票,選出最接近的資料類別。

本章重點:

  1. What is pre-train model
  2. How to fine-tune
  3. How to pre-train

Pre-train Model:

傳統使用的是Word2Vec, GloVe,但是他缺乏對上下文的理解,因此有了FastText,使用每個字母來當作Token。在中文領域,起初使用類似有邊讀邊的單字法去訓練模型的Embedding。

如今模型越來越大,不過也不是每個人都用得起這些大模型,因此有人也想辦法將模型壓縮成更小的狀態。嘗試由Network變小來著手的模型,舉例:Distill BERT, Tiny BERT, Mobile BERT, Q8BERT, ALBERT,其中值得注意的是ALBERT (有待認識)。另外也有從Network 的結構來著手壓縮模型的模型:Transformer-XL、Reformer、Longformer,後兩者是由降低Self-attention 複雜度來進行。

How to fine-tune

多對一:一段影片判斷出一個情緒,時間順序沒有這麼重要
時間順序重要性:★

一對多:圖片標注,給一張圖片,電腦判斷內容在做什麼?時間順序就比較重要
時間順序重要性:★★★

多對多:翻譯句子,從頭到尾都需要累加的語意來判斷,不同累加方法就會導致意思差異很大。
時間順序重要性:★★★★★

NLP的任務中,語意很重要,時間關係也相當的重要。

RNN, LSTM

RNN
將當前的輸入,和前一次的輸出一同合併,才會激活生成新的輸出。

Tanh長得和sigmoid很像,但是範圍是-1~1之間

RNN的缺點 — 金魚腦模型

問題1:反向傳播(梯度下降)

問題2:正向傳播

如何將長期記憶加入我們模型? → Long short term mermory

LSTM (Long short term mermory)

LSTM最後改良

本章節必須熟悉:

  1. 何謂斷詞
  2. 了解內部運算,並可實作斷詞

斷詞(Tokenize):這個動詞的意思就是希望可以將一個句子藉由工程方式,切割成一個一個的字元。

英文 (歐美語系) 和中文(東亞語系) 的斷詞有很大的差異,英文僅需利用空白自元就可輕易的將詞順利切割;但是中文無法這樣進行斷詞,又該如何進行切割?

目前常見的有三種斷詞方法:

  1. 基於辭典的分詞法:準備好詞典庫來匹配待訓練的文句。
  2. 基於統計的機器學習算法:HMM, CRF, SVM
  3. 基於深度學習的算法:雙向LSTM

目前最流行的中文斷詞是「結巴」,主要是基於傳統的機器學習來完成斷詞的。

結巴(Jieba)斷詞演算法,包含兩部分:

針對存在於字典的字詞:

  • 根據字典產生Trie樹 (字典樹、字首術、前綴樹)
  • 根據Trie樹建立給定輸入句的DAG (有向無環圖)
  • 使用動態規劃(DP)找出最大機率路徑,此路徑即為基於詞頻最大的分詞結果

針對不存在於字典的字詞:

  • 使用隱碼可夫模型 (HMM) 和維特比演算法 (Viterbi) 來進行分詞辨識

本次的課程內容:重要的五大問題

解決問題簡單,定義問題困難

Stable matching

開頭:男生與女生各100名,並配對成男女朋友。

Input表格呈現出每個男女對於異性的排序。

Perfect matching: 數學上每個人都有配對到對象就是完美了

Stability: 但是如果有unstable matching,則原配對的組合就會很不穩定,容易分開。

符合前面條件容易,但是後面的條件難,要如何解決?

  • Simple-But-Invalid: 不穩定的配對就會持續交換,但問題是可能會成為無限循環的迴圈。
  • Status of each person:
    >> free (unmarried) ~engaged(訂婚但可毀約)~married [Shapley]

實作 — Gale-Shapley Procedure

前一章講解完HMM的模型後,本章將回到End-to-end的語音模型來介紹。End-to-end的模型基本上都是在計算P(Y|X)的機率。以LAS為例,我們就是在給定的語音特徵下(X)下,去計算可能獲取最終的詞句(Y)的機率大小。

若P(y|x)是一個聲音訊號的計算機率,當要訓練一段聲音訊號的時候,則可以參考圖一右下角卡通圖:每一段聲音訊號都會生成一個結果並放入下一個聲音訊號來訓練,則 P(Y|X) = p(a|X)p(b|a,X)…。值得一提的是,由於我們在解譯(Decoding)的時候,不太可能窮舉所有結果訊來訓練,因此我們需要Beam Search來協助我們進行解譯,解譯的過程可以說是在給定的X條件下,努力地找到最大的Y的結果。

Decoding: Y* = arg max(Y) logP(Y|X)

Yu-Wei Chen

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store