---
# System prepended metadata

title: 機器學習筆記
tags: [Machine Learning]

---

# 機器學習數位課程筆記
## 1. The milestones of AI
### The birth of AI
* John McCarthy將人工智慧與自動控制領域劃分，確立人工智慧領域的誕生
### The milestones of AI
#### Deep Blue
* 由IBM開發
* 1997年5月擊敗西洋棋世界棋王Kasparov，成為首個在標準比賽中擊敗西洋棋世界冠軍的電腦系統
#### Waston
* 由IBM開發
* 具備語音辨識、問答處理系統
* 在2011年參加Jeopardy，擊敗人類，贏得100萬獎金
#### AlphaGo
* 由Google DeepMind開發
* 在2015年10月，擊敗樊麾，成為第一個無需讓子在19路棋盤上擊敗圍棋職業棋士的電腦圍棋程式
* 在2016年5月，以4勝1敗的戰績擊敗南韓9段圍棋棋手李世乭，成為第一個不讓子且擊敗職業9段棋士的電腦程式
* 韓國棋院授予AlphaGo名譽職業9段
* 2017年5月，在烏鎮圍棋峰會以3:0戰績擊敗當時排名世界第一的棋士柯潔
* 在無人類對手後，Google便宣布將AlphaGo退役
#### AlphaGo-Master
* 2016年底，在網路上以帳號名Master，挑戰亞州好手。至2017年1月初，戰績60戰全勝
#### AlphaStar
* 由Google DeepMind開發
* 採強化式學習
* 將遊戲視為長序列建模學習工作，也可應用在天氣預測、語言理解等
* 2019年10月，DeepMind在《nature》雜誌上發布最新研究，相關數據顯示，AlphaStar已經超越99.8%的活躍玩家
#### AlphaFold
* 由Google DeepMind開發
* 採深度學習系統
* 蛋白質3D結構預測程式
* AlphaFold1在2018年12月第13屆CASP比賽，排名第一
* AlphaFold2在2020年11月第14屆CASP比賽獲得分數92.4，準確度遠高其他程式
#### AlphaCode
* 由Google DeepMind開發，在2022年二月發布
* 在Codeforces程式競賽中，取得前54%的成績，具有中等參賽者水準
#### Chatgpt
* 由OpenAI開發，在2022年11月發布
* 採強化式學習
* 具備人類對話能力的聊天機器人
## 2. What is machine learning
### What is machine learning?
讓電腦從資訊中學習的資訊科學
### The difference between human and machine
#### The learning model of human's brain
![人類學習](https://hackmd.io/_uploads/B1h4WxrOC.png)
**人類透過生活經驗統整、歸納出規則**
**在遇到新問題時會根據規則做出判斷該如何執行**

---

#### The learning model of machines
![機器學習](https://hackmd.io/_uploads/By-DZeruC.png)

**機器是透過資料訓練出模型**
**在遇到新資料時，會透過已訓練好的模型做出反應**

---

### The types of machine learning
#### 學習過程中是否有人類監督
:::spoiler Supervised learning
**監督式學習**
利用訓練資料集建立模型，用模型推測新案例的答案，通常有預設的Label（答案）
例如：利用CIFAR-10訓練新模型，在未來便可預測新資料的類別
:::
:::spoiler Unsupervised learning
**非監督式學習**
沒有事先標記過的資料集，自動對新輸入資料集進行分類或分群
最後根據資料分類（分組）的結果，說明發現
:::
:::spoiler Semi-supervised learning
**半監督式學習**
利用少量有標記的資料和大量無標記的資料來訓練模型，改善無標記的資料間的連結
:::
:::spoiler Reinforement learning
**強化式學習**
無法事先標記資料，在機器做出反應時，給予獎勵或處罰，從嘗試錯誤中學習
:::
#### 考慮能否從傳入的資料作增量學習
:::spoiler Batch learning
**批次學習**又稱為離線學習
Training phase:
在固定大小的數據集上做訓練，用以訓練的資料都是已經事先收集並固定的，模型在訓練期間不會接收到新的資料
Prediction phase:
將測試資料萃取出featrue後，放入訓練好的模型中，產生Predict label，最後得到預測的答案
:::
:::spoiler Online learning
**線上學習**
一筆資料重複訓練，得到更新模型的權重
:::
## 3. SDK Installation
### 顯卡型號及系統資訊


## 4. Neuron and Perceptron
### Neuron
#### 神經元
神經細胞會長出像樹枝狀的**樹突(Dendrites)**，而生長出去的是神經細胞的**軸突(Axons)**
樹突負責接收訊息
軸突負責傳遞訊息
在Dendrites和Axons中有**突觸(Synapse)** 負責傳動中的訊息
![神經細胞](https://hackmd.io/_uploads/SyYmiDyKA.png)
#### Neuronal computational model
1943年由Warren McCulloch, Walter Pitts所發表的模仿神經元的運算模式
![模仿神經元的運算模型](https://hackmd.io/_uploads/rk3Iow1K0.png)
### Perceptron
1957年由Frank Roserblatt提出用感知器實現神經元的模型
![感知器模型](https://hackmd.io/_uploads/ByqwiDktC.png)
將所有輸入都算上權重後，再加上偏差值，在透過激活函數(Activation function)，最後得到輸出
#### Perceptron learning algorithm
目標：透過資料訓練，調整權重，縮小錯誤
![感知器學習演算法](https://hackmd.io/_uploads/Hy5HhwJFR.png)
直到所有訓練資料都匯入
#### Nerual Network
![神經網路](https://hackmd.io/_uploads/BkT7XMLtR.png)
由輸入層、隱藏層、輸出層組成
## 5. Multi Layer Perceptron
前饋式網路
網路媒層可包含各式獨立的神經元，同層中神經元彼此各式獨立，每層的神經元都會連接到下層的神經元
### Activation function
大多為非線性函數
主要作用是讓神經網路加入非線性因素，讓神經網路能夠解決更為複雜的問題
#### Commonly used activation functions
* Sigmoid
* tanh
* Rectified Linear Unit
* Softmax

### Sigmoid
![Sigmoid函數](https://hackmd.io/_uploads/H12A-FytA.png)
* 適合用於輸出機率模型
* 在使用反向傳播調整權重時，會有梯度消失的問題
* 不適用於多層網路模型，層數越多，梯度消失問題越嚴重
### Tanh
![Tanh函數](https://hackmd.io/_uploads/r1mJGYJKR.png)
* 主要使用於分類工作
* 也有梯度消失的問題
### Rectified Linear Unit(Relu)
![Relu函數](https://hackmd.io/_uploads/ryFh5tJFR.png)
* 具有類似生物神經元特性
* 沒有梯度消失的問題
* Dead Relu Problem:Input x<0, weights will no longer be changed
### Softmax
![Softmax函數](https://hackmd.io/_uploads/SJ-QUREtA.png)
* 規劃指數函數
* 每個元素取指數次方加總放分母，分子則是每個元素的指數次方
* 適合用在多分類的機率模型
### Loss Function
#### Commonly used Loss function in deep learning
Let Y be a vector of n predictions, and Ŷ be the vector of actual values.
:::spoiler Mean_squared_error
![Mean squared error](https://hackmd.io/_uploads/ByE87n4t0.png)
:::
:::spoiler Mean_absolute_error
![Mean absolute error](https://hackmd.io/_uploads/rJxi73VtC.png)
:::
:::spoiler Mean_absolute_percentage_error
![Mean absolute percentage error](https://hackmd.io/_uploads/SJGsmhNFR.png)
:::
:::spoiler Mean_squared_logarithmic_error
![Mean squared logarithmic error](https://hackmd.io/_uploads/HJYoQnEt0.png)
:::
:::spoiler Binary_crossentropy
![LogLoss](https://hackmd.io/_uploads/HJeMLhNFC.png)
* 二分類
* 搭配Sigmoid activation function
* Ouptut必須經過one-hot encoded
:::
:::spoiler Categorical_crossentropy
![LogLoss](https://hackmd.io/_uploads/rk4GL3VtR.png)
* 多分類
* 搭配Softmax activation function
:::
### One-hot Encoding
用N個Bit代表狀態
![One-hot Encoding](https://hackmd.io/_uploads/SkJedhVt0.png)
## 6. Strategies for adjusting MLP weights
神經網路就像是函數
![神經網路-2](https://hackmd.io/_uploads/BJ5N7G8KC.png)
而神經網路的目的是要調整權重，使預測的誤差值縮小
### Methods for Improving the Efficieny of Multilayer Perceptron
### Backpropagation
**反向傳播法**
These gradients are then utilized to update the weights, aiming to minimize the value of the loss function
![反向傳播法](https://hackmd.io/_uploads/SJggTGUtA.png)

---
#### Factors Influencing the Gradient
![Factors Influencing the Gradient](https://hackmd.io/_uploads/ryEIdyfqA.png)
#### Challenges of Backpropagation
* 問題：每次使用全部訓練集來計算損失函數的梯度，再更新權重，那麼收斂速度會非常慢
  解法：用Stochastic Gradient Descent(SGD) to speed up
* 問題：梯度下降法沒辦法保證找到Global optimal solution
  解法：用Momentum method去減少被困在Local minimum的機率
### Stochastic Gradient Descent
**隨機梯度下降法**
* 一種隨機梯度下降的優化方法
* 一次只跑一個樣本，跑完算一次梯度，並重新更權重
* 因為一次只跑一個樣本，所以耗時長
### Mini-Batch Gradient Descent
**小梯次梯度下降法**
* 將訓練資料拆成很多小份，每次有多筆資料進行訓練
* Compared with SGD:一個epoch執行速度比較快
  Compared to GD:收斂的速度比較快
* Batch size often used 32,128,256,1024,2048
### Momentum
**動量法**
* 梯度下降的一個變形
![Momentum](https://hackmd.io/_uploads/HyZ5JWz9A.png)
## 7. Introduction to Tensorflow
### Tensor
* 單一資料型態的多維陣列
### Flow
* 一種資料流或資料運算
* 透過產生Data Flow Graphs進行運算，稱為Computation Graphs
* 點代表數學運算，邊代表關聯性
### Session
* 執行圖的架構
* 為運算做資源(CPU, GPU)分配
* 主控資源，決定要開啟或釋放資源
### Neuron operation
![Neuron operation](https://hackmd.io/_uploads/S1UWWIj5C.png)
### Eager Execution
* 不需要定義計算圖
* 不需要初始化參數
* 不需要用tf.Session.run()就可以啟動運算
### Operation of 2D Tensor
![Operation of 2D Tensor](https://hackmd.io/_uploads/SyD3gLscA.png)
### Keras
* 可以快速建造Tensorflow模型
* 高階API
### Sequential Model
方法一
![Sequential Model](https://hackmd.io/_uploads/S1mT18jcA.png)
**圖片大小為28x28轉成one-dimensional vector為784**
方法二
![Sequential Model-2](https://hackmd.io/_uploads/rkA6QUi9R.png)
## 8. Classic Sample Dataset
## 9. Build MLP model
### Basic steps for training a model
1. Load Libraries
2. Parameter Configuration
:::spoiler batch size
**大batch size(64, 128)：**
* 訓練速度快
* 適用有充足運算資源的大數據集
* 未必訓練的好

**小batch size(1~32)：**
* 訓練速度慢
* 適用於小數據集
* 訓練結果較優
:::
:::spoiler num classes
因是訓練手寫數字模型，總共10類
:::
:::spoiler epochs
數據集被完整訓練過得次數
:::
3. Data Loading and Preprocessing
    * 將資料reshape成一維
    * Normalize資料，使其值介於0到1之間
    * 因是訓練手寫辨識數字類別，所以最後須轉換成one-hot encoding
4. Build Model Architecture
:::spoiler Ex
![Build Model Structure](https://hackmd.io/_uploads/H1zv3DEs0.png)
* 512為神經元
* 第一層要先指定input_shape
:::
5. Model Training
    * validation_spilt：抽出多少比例做驗證
6. Model Evaluation
7. Model Saving
### Basic steps for sample prediction
1. Load Libraries
2. Build Model Architecture
3. Load Model
4. Read Sample
5. Data Preprocessing
6. Sample prediction
## 10. Model Evaluation Metrics
### Confusion Matrix
* 又稱錯誤矩陣
* 可以將學習演算法的效率視覺化的呈現

|             | True Yes       | True No        |
| ----------- | -------------- | -------------- |
| Predict Yes | True Positive  | False Positive |
| Predict No  | False Negative | True Negative  |
### Accuracy
* Accuracy = ( TP + TN ) / Total
* 當TP的數量很少時，要注意是否有資料不平均的狀況
### Precision
* Precision = TP / ( TP + FP )
### Recall
* 又稱Sensitivity, TPR
* Recall = TP / ( TP + FN )
### Specificity
* Specificity = TN / ( FP + TN )
### F-measure
* F1 score = 2 / ( 1 / precision + 1 / recall )
* Fα = ( 1 + α^2 ) * precision * recall / ( α^2 * ( precision + recall ))
### ROC
* Receiver Operating Characteristic curve
* 受試者操作特徵曲線
* 表達不同模型真陽率對假陽率的關係
### AUC
* Area Under the Curve = Area of ROC
* AUC越大，代表分類做得越好
## 11. Image Convolution
也稱為image filtering(影像濾波器)
目的：選擇性強化影像中的某些特徵，消除不需要的特徵
### Common convolution effects:
* Sharpen
* Blur
* Edge Detection
* Edge Enhancement
* Noise Removal
### Convolution Operation
LLL
### Common Filters
:::spoiler Smoothing Filter
適用於模糊化和去除雜訊
Ex：Low pass filter
:::
:::spoiler Sharpening Filter
強化物件的邊緣位置
Ex：High pass filter
:::
:::spoiler Sobel Filter
主要使用於邊緣偵測
:::
:::spoiler Laplacian Filter
主要使用於邊緣偵測
::: 
### Low Pass Filter
* 主要用於消除影像上高頻部分的變化，可使影像變得較均勻
* 可以消除高頻雜訊，使影像變得較平緩
* 可去除對比強烈的雜點
* 將每一個像素的臨近灰階值加總再以平均值取代該像素的灰階值
### High Pass Filter
* 保持高頻部分，減少或消除低頻部分
* 原始影像減去低通濾波的影像
### Sobel Filter
Filter Result
![Soble Filter](https://hackmd.io/_uploads/SkgKE0ToC.png)
### Laplacian Filter
* 計算中心和臨近像素的總和
![Laplacian Filter](https://hackmd.io/_uploads/ry_1UAaiR.png)
## 12. Convolutional Neural Networks
### Disadvantages of training MLP models
在操作MLP模型時會需要先將圖片轉為一維陣列，且輸入層和隱藏層間是全連接層
所以當圖檔很大時，權重會很多，對於模型訓練負擔很大
### Reducing the complexity of image training
* 只取重要特徵訓練
* 特徵是由相近的像素組成
### Convolution Operation
* 將每一個像素以及鄰近的像素由一個濾波器加權總後得到一個值
* 對每一個像素都做Convolution
### Convolutional Neural Network
* 由輸入層和隱藏層及輸出層組成
* 並非都為全連接層，其中包含了捲基層、池化層、激活層、平坦層和一些全連接層所組層
![Convolutional Neural Network](https://hackmd.io/_uploads/Sysf5CpiR.png)
### Hyperparameters for Convolutional Layers
:::spoiler Zero-padding
將全周圍都補零，讓在邊緣或角落的像素可以做Convolution
:::
:::spoiler Stride
* 在做Convolution時會需要決定要跳多少格
* 當Stride設定很大時，Convolution後的影像會變小
:::
:::spoiler Depth
要套幾個Filter對圖片做Convolution
:::
### Pooling
* 減少圖片尺寸
* 降低權重大小
![Max Pooling](https://hackmd.io/_uploads/rkNQR0TsA.png)
### Hyperparameter setting
* 影像大小要能夠被2整除，常見的有32, 64, 96, 224, 384, 512
* Convolutional layer filter size大部分為3x3，最大有到7x7
* stride≤(Wf-1)/2
* CNN model(16+ layers)通常使用 3x3 filter和 stride 1
## 13. Build CNN Model
### Basic steps for training a model
1. Load Library
2. Parameter Setting
3. Data Loading and Pre-processing
4. Build Model Architecture
    * filters：卷積層使用卷積核的數量
    * kernel_size：卷積核的大小
    * padding：卷積層的輸出是否和輸入相同
5. Model Training
6. Model Evaluation
7. Model Saving
### Basic steps for sample prediction
1. Load Libraries
2. Build Model Architecture
3. Load Model
4. Load Sample
5. Sample Pre-precessing
6. Sample Prediction
## 14. Classic CNN Models
### CNN Classic Models
* LeNet
* AlexNet
* VGGNet
* ResNet
### LeNet
* 用於手寫數字、字母的辨識
1. 利用捲基層、池化層等操作提取特徵
2. 利用全連接層進行分類的訓練辨識
![LeNet](https://hackmd.io/_uploads/BksodkRnA.png)

### AlexNet
* 使用非線性的激活函數：Relu
* 使用Data augmentation和Dropout防止Overfitting
* 使用mini-Batch SGD加速訓練
![AlexNet](https://hackmd.io/_uploads/S1r2_yRn0.png)
### VGGNet
* 有5層捲基層、3層全連接層
* 包含8個學習層，5個捲基層和3個全連接層和softmax輸出層
* 層與層之間使用MaxPooling
* Activation function：Relu
* 有多個捲基核是使用3x3，可以減少參數，也可以進行更多非線性的映射，增加網路的彌合能力
* Small pooling kernel(2x2)
* 第一層的通道數為64，每層都會加倍直到512，讓更多的特徵可以被提取出來
### ResNet
* 解決了在深層的網路梯度消失和精確度下降的問題
![ResNet Block](https://hackmd.io/_uploads/B1yA6xA3C.png)
## 15.Data Augmentation
### CNN model building process
1. Data preprocessing
2. Determine the model architecture and parameters
3. Compile and train the model
4. Model Evaluation
5. Hyperparameters tuning
6. Repeat steps 2~5 until the model efficiency can no longer be improve
7. Predictions
### Data preprocessing
#### Data augmentation
* rotation
* shift
* zoom
* brightness
#### Import packages
## 16.Introduction to OpenCV
### OpenCV
Open Source Computer Vision Library
### Read image
![OpenCV Read image](https://hackmd.io/_uploads/HkLRzYx6A.png)
* [filename]：圖片檔案的路徑
* GRAYSCALE：灰階
* COLOR：彩色
* UNCHANGE：與讀取的相同
### Saving image
![OpenCV Saving image](https://hackmd.io/_uploads/SyfN4FxpR.png)
### Slicing image
![OpenCV Slicing image](https://hackmd.io/_uploads/By16BFlp0.png)
### Zoom out
![OpenCV Zoom out](https://hackmd.io/_uploads/H1xWFKl6C.png)
## 17.Classic Datasets for Data Analysis
### Iris Dataset Introduction
* 三種不同種類的鳶尾花：
    * Iris Setosa（山鳶尾）
    * Iris Versicolor（變色鳶尾）
    * Iris Virginica（維吉尼亞鳶尾）
* 四種不同特徵：
    * Sepal length（花萼長度）
    * Sepal width（花萼寬度）
    * Petal length（花瓣長度）
    * Petal width（花瓣寬度）
* 每一種鳶尾花有50個樣本
### Boston Housing Dataset Introduction
* 14種城鎮資料，506筆
    *　平均犯罪率
    *　占地25000平方英尺以上的住宅用地比例
    *　城鎮非營授業比例
    *　是否在查爾斯河旁
    *　一氧化碳濃度
    *　每個住宅平均房間數
    *　1940年前建造的自有住宅比例
    *　與5個波士頓行政中心的加權距離
    *　高速公路通行性指數
    *　財產稅率($10000)
    *　城鎮師生比
    *　黑人比例
    *　人口地位較低的百分比
    *　目前房價
### Breast Cancer Wisconsin
* 569種惡性和良性的細胞樣本：
    * 每筆資料有十種屬性：
        * Radius（半徑）
        * Texture（細胞核紋路）
        * Perimeter（腫瘤周長）
        * Area（面積）
        * Smoothness（平滑程度）
        * Compactness（緊湊性　）
        * Concavity（邊緣凹凸度）
        * Concave points（凹凸點）
        * Symmetry（對稱性）
        * Fractal dimension（輪廓估計）
    * 每個特徵有3種不同的值：平均值、標準差，最差值
* 資料集分為兩個類別：Benign（良性）, Malignant（惡性）
* 良性的有357筆資料，惡性的有212筆
## 18.Data Processing
* Feature selection
* Data cleaning
    * Dealing with missing data
    * Convert data for non-numeric type
    * Delete duplicate data
    * Pick out the outliers
    * Dealing with imbalance classes
* Increase speed and improve performance
    * Standardization
    * Normalization
* Training strategy
    * Regression, Classification
### Feature selection
* Evaluate featuire's importance
* Filter out features that are irrelevant to the prediction target
    ![pandas](https://hackmd.io/_uploads/SyJLK6rTA.png)
### Dealing with missing data
* When the cloumn data is missing
    * delete the feature
        * Too many features missing
        * Use the drop of pandas DataFrame to directly delete the column of the feature
    * fill the gaps
        * The filling method is usually 0 for the category type and the average orr median for the numeerical type
        * Use pandas Series median(), mean() and fillna() to fill
        ![fill the gap](https://hackmd.io/_uploads/HJxDR6SpC.png)
### Convert data for non-numeric type 
* Words: Arrange the words that will appear into a sequence and convert them into corresponding index values
![convert data for non-numeric type](https://hackmd.io/_uploads/BJ8jZABp0.png)
* Category type data, np size relationship, converted to one-hot encoding
### Delete duplicate data
* If the duplicate data is not generated by some augmentation strategies, it should be removed
![delete duplicate data](https://hackmd.io/_uploads/S1vrsRBpR.png)
### Pick out the outliers
### Dealing with imbalanced classes
* Most data belonging to a certain class will cause overfitting
* Duplicate the data for the classes with fewer data, or through out some data from the classes with larger number of data
![dealing with imbalance classes](https://hackmd.io/_uploads/rkf5Vy8pA.png)
### Standradization
z = ( x - µ ) / σ
* x: an original score that needs to be normalized
* µ: population mean
* σ: population standard deviation
* ![Standradization](https://hackmd.io/_uploads/SyflvJUTA.png)
### Normalization
* Compress the value of the data between 0 and 1, making it easier for the model to find appropriate weight
* The method of converting data-type data with size relationship into 0 to 1 is min-max normalization
*  Convert class-type data into one-hot encoding
### Training strategy
* Regression is to directly predict the value
* Classification requires transfer one-hot endcoding for labels, but not for binary classification
## 19.Feature Selection
### Feature Selection-RFE
* Recursive Feature Elimination
使用一些基本的Model並根據feature的數量迭代的做選擇，在訓練後會將一些較不重要的feature剔除掉，在繼續執行下一輪的訓練直到達到目標feature的數量
* Implement
from sklearn.feature_selection import RFE
* Model Training and Evalution
### Feature Selection-Filter
* Filter
根據feature發散的程度(variance)和feature跟target間的相關性對各個feature進行評分
可以設定要選擇feature的個數或設定一個固定的閥值並留下評分在閥值裡面的feature
* filter method
    * Remove features with low variance(變異數)
        呼叫scikit-learn's VarianceThreshold package 將較不重要的feature移除掉
    * Univariate Feature Selection
        個別計算每個feature的統計指標，根據該指標判斷feature的重要性，剔除不重要的feature 
## 20. Machine Learning Algorithms Decision Tree and Random Forest
### Decision Tree（決策樹）
* 用於分類（classification)和迴歸（regression）監督式學習方式
* 目標是創建一個模型，通過學習從數據特徵推斷出簡單決策規則來預測目標變量的值
* 樹的中間節點（non-leaf nodes）代表測試條件
* 樹的分支（branches）代表條件測試的結果
* 樹的葉節點（leaf nodes）代表分類後所的到的分類標記，也就是分類的結果
### 決策樹的產生程序與用途
#### 決策樹的產生程序
1. 建立樹狀結構
    * 所有的訓練樣本都在根節點
    * 依據選取的屬性，重複地將樣本分隔開
2. 修剪樹狀結構
    * 辨識並移除導致雜訊或特例的分支
#### 決策樹的用途：分類未知的樣本
* 依據決策樹測試樣本的屬性值
### 決策樹推論演算法
#### 基本演算法
* 樹結構是由上而下，遞迴方式建立
* 無法處理連續性的數值，數值屬性必須先轉換
#### 運作方式
1. 所有樣本都在根節點
2. 屬性都是類別狀態（若是連續型數值，事先做離散化）
3. 依據選取的屬性，反覆地將樣本分隔開
4. 測試各屬性是否以統計性測量（如資訊獲利 information gain）為基礎而挑選出來
#### 停止分支的條件
* 當某個分支集合內的所有樣本都屬於同一個類別
* 所有屬性都用完了，用多數投票法以樣本數較多的類別來代表此業節點
* 選取某屬性後，產生的某分支完全沒有測試樣本
#### 建構決策樹
* 若節點順序改變，同樣的資料建構出的決策樹也會不同
* 決策樹決定節點特徵順序的3個常用演算法
    * ID3演算法
        使用資訊獲利（Information Gain）最大的特徵優先
    * C4.5演算法
        使用資訊獲利比最大的特徵優先
    * CART演算法
        使用基尼指數（Gini）最小的特徵優先
### 資訊獲利、資訊獲利比和基尼指數
* 資訊獲利（Information Gain）= 資訊熵-條件熵
指在一個條件下資訊不確定性減少的程度
* 資訊熵：樣本類別的複雜度
    ![資訊熵](https://hackmd.io/_uploads/Bkwl8HNR0.png)
* 條件熵：在某一特徵下，樣本類別的複雜度
    ![條件熵](https://hackmd.io/_uploads/BJ7r8SVRA.png)
* 資訊獲利比 = 資訊獲利/資訊熵
* 基尼指數（Gini）：
用來表示資料的不純度，基尼指數越大，表示資料越不平均
當資料中樣本的類別都一樣時，基尼指數為0
    *公式：![基尼指數](https://hackmd.io/_uploads/B17iwrNAR.png)
    D為資料全體樣本
    p(xi)表示每個類別出現機率
### 決設樹的優缺點
#### 決策樹的優點
* 模擬人的直觀決策規則，訓練速度快
#### 決策樹的缺點
* 容易忽略資料集裡面屬性的相互關聯
* 若不進行一定的限制，如剪枝，會導致模型訓練很符合訓練資料卻不適用新的資料，造成過度學習（overfitting）
### 隨機森林
* 一個包含多個決策樹的分類器，其輸出的類別是依據個別決策樹輸出類別的眾數而定
* 本質屬於隨機學習的集成學習（Ensemble Learning）
#### 隨機森林演算法流程
1. 從資料庫中（有放回的）隨機採樣，選出n個樣本函示庫
2. 從所有特徵中隨機選擇k個特徵，對選出的樣本，利用這些特徵建立決策樹
3. 重複以上步驟m次，即生成m棵決策樹，形成隨機森林
4. 經過每棵決策樹，最後投票決定輸出類別
### 隨機森林的優缺點
#### 隨機森林的優點
* 能處理很高維度的資料，且不用做特徵選擇
* 可判斷出不同特徵之間的相互影響
* 可判斷特徵的重要程度
* 訓練速度快，容易做成並行化方法
* 有採樣過程的隨機性，不容易過度學習
#### 隨機森林的缺點
* 在某些噪音較大的分類或回歸問題上會過度學習
* 對於有不同取值屬性的數據，取值劃分較多的屬性會對隨機林產生較大的影響
## 21. Machine Learning Algorithms Linear Regression and Logistic Regression
### 迴歸分析
* 統計學上分析數據的方法，目的在於了解變數間是否相關（相關方向、相關程度），並建立數學模型以便觀察特定變數來預測研究者感興趣的變數
* 用自變數（independent variable）來預測應變數（dependent variable）
### 線性迴歸（Linear Regression）
* 利用線性迴歸方程式的最小平方函數對一個或多個自變數（independent variable）和應變數（dependent variable）之間關係進行建模的一種迴歸分析
* 給定一些點，找出一條直線方程式，使得所有點到直線的距離平方和最小
* 應變數（Y）通常為連續型變數
### 羅吉斯迴歸（Logistic Regression）
* 探討應變數和自變數之間的關係，其中自變數對應變數的影響是以指數的方式做變動
* 羅吉斯迴歸的應變數（Y）主要為類別變數，特別是分成兩類的變數（如：是或否、有或無）
### 羅吉斯迴歸 vs 線性迴歸
* 監督式學習中，常用的預測方法有
    * 對連續性的資料使用迴歸模型進行資料預測
    * 對離散的資料進行分類預測
### 羅吉斯迴歸的機制
* 羅吉斯迴歸與感知器的差異在於激活函數為Sigmoid Function，損失函數是交叉熵誤差函數（Cross entropy Error Function），具有正則化項（Regularization Term），或懲罰項（Penalty Term），避免過度學習
### 誤差函數
* 交叉熵誤差函數
![誤差函數](https://hackmd.io/_uploads/HkNZg0oC0.png =60%x)
    * N：資料數
    * yᵢ：預測數
    * tᵢ：正確數
### 正則化（Regulation）
* 在學習時給予懲罰，讓決策分界線變得更平滑
* 加入正則化，目標函數＝損失函數的總資料和＋正則化項
* L2正則化：將權重參數的平方值當作損失函數的懲罰項
![L2正則化](https://hackmd.io/_uploads/By-6MRiCA.png =60%x)
* L1正則化：將權重參數的絕對值當作損失函數的懲罰項
* ![L1正則化](https://hackmd.io/_uploads/By2JQRoR0.png =60%x)
### 羅吉斯迴歸的優缺點
#### 羅吉斯迴歸的優點
* 實現簡單，廣泛的應用在工業問題上
* 分類時計算量非常小，速度快，存儲資源低
* 方便於觀測樣本概率分數
* 計算代價不高，易於理解和實現
#### 羅吉斯迴歸的缺點
* 特徵空間很大時，性能不是很好
* 容易欠擬合，一般準確度不太高
* 不能很好地處理大量多特徵或變數
* 只能處理兩分類問題且必須線性可分
* 對於非線性特徵，需要進行轉換
## 22. Machine Learning Algorithms Support Vector Machine
### 支援向量機（Support Vector Machine）
* 可以用於分類或迴歸的監督式機器學習演算法
* 需事先定義分群的類型
* 一般線性分類器，主要用於二元分類的問題
* ==SVM能處理線性不可分的情形==
* SVM是將實例表示為空間的點，在高維度的空間中找一個超平面作為類別的分割，以確保最小的分類錯誤率
#### 支援向量機概念
* 找到一個決策邊界（Decision Boundry）讓兩類之間的邊界（Margins）最大化，使其可區隔開來
![支援向量機概念](https://hackmd.io/_uploads/BkSsn0A0R.png =50%x)
* 超平面對於每個類別的最近的元素，距離是最遠的
![支援向量機概念-2](https://hackmd.io/_uploads/SJZ8TCRAR.png =50%x)
### 核函數
* 透過空間映射找到最佳分割超平面，解決線性不可分的情形
* 但這種維度轉換會增加計算成本，維度轉換可以使用向量機來進行計算，即核函數
* 使用低維度特徵空間上的計算，來避免在高維度特徵空間中向量內積的大量計算
#### 常用核函數
* 線性核函數（Linear Kernel）
    * 函數：*K(x,z)=x·z*
    * 用於線性可分SVM
* 多項式核函數（Polynomial Kernel）
    * 函數：*K(x,z)=(y x-z+r)ᵈ*
    * 是線性不可分SVM常用的核函數之一
* 高斯核函數（Gaussian Kernel）
    * 也稱為徑向基核函數（Radial Basis Function, RBF）
    * 函數：![高斯核函數](https://hackmd.io/_uploads/HkU1R21kke.png =30%x)
    * 是非線性分類SVM最主流的核函數
* Sigmoid核函數（Sigmoid Kernel）
    * 函數：*K(x,z)=tanh(yx·z+r)*
### 多分類支援向量機
* 若要處理多類別分類，必須結合多個二分類法來達成多分類的目標
* SVM處理多分類的方法
    * One-vs-Rest
        * 處理k類別問題，會產生k個SVM
        * 其中第i個SVM的訓練資料中，第i類標註為+1
          其他類別資料都標註為-1
    * One-vs-One
        * 會處理k類別問題，每兩類資料都會產生一個SVM，
          會產生k(k-1)/2個二分類SVM
### 支援向量機優缺點
#### 支援向量機優點
* 可解決高維問題，即大型特徵空間
* 解決小樣本機器學習問題
* 能夠處理非線性特徵的相互作用
#### 支援向量機缺點
* 一般SVM只支援二分類
* 當觀測樣本很多時，效率不高
* 對非線性問題沒有通用解決方案，有時候很難找到一個合適的核函數
## 23. Machine Learning Algorithms k Nearest Neighbor
### K-近鄰演算法
* k-Nearest Neighbor(KNN)
* 用於分類和迴歸的無母數統計方法
* 在k-NN分類中，一個物件的分類是由其鄰居**多數表決**的結果來決定
* k-NN就是由k個最近鄰居的分類結果決定該物件的類別
* k的數值影響預測效率
### K-近連演算法概念
* 在分類任務中，K=3，也就是取最接近的3個鄰居，並由這3個鄰居投票表決樣本的標籤
![K-近鄰演算法概念](https://hackmd.io/_uploads/H1iVJKZJ1e.png =80%x)
* 訓練樣本是多維特徵空間向量，其中每個訓練樣本帶有一個類別標籤
* 演算法的訓練階段包含訓練樣本的特徵向量和標籤
### K-近鄰演算法步驟
1. 決定k值
2. 計算每個測試樣本和所有訓練樣本之間的距離
3. 選擇k個近鄰集合
4. 統計此k近鄰所屬分類
5. 根據分類統計最多數的類別為此測試樣本的類別
6. 重複步驟2~5直到所有樣本分類完畢
### 距離函數
* 距離函數決定K-近鄰演算法中如何計算兩點間的距離
* 常見的距離函數
    * 歐幾里得距離（Euclidean Distance）
    * 曼哈頓距離（Manhatten Distance）
    * 明可夫斯距離（Minkowski Distance）
* 歐幾里得距離（Euclidean Distance）
    * ![歐幾里得距離](https://hackmd.io/_uploads/Sk8mMtWyJe.png =50%x)
* 曼哈頓距離（Manhatten Distance）
    * ![曼哈頓距離](https://hackmd.io/_uploads/H1swzFZ11l.png =50%x)
* 明可夫斯距離（Minkowski Distance）
    * ![明可夫斯距離](https://hackmd.io/_uploads/HyFqMF-k1e.png =50%x)
    * 當p=1時為曼哈頓距離
    * 當p=2時為歐幾里得距離
### 尋找最近k點演算法- k-d Tree
* k-d樹是每個節點都為k維點的二元樹。所有非葉子節點可以視作用一個超平面把空間分割成兩個半空間
![k-d Tree](https://hackmd.io/_uploads/B11MrKWJ1x.png =70%x)
### 尋找最近k點演算法- Ball Tree
* Ball Tree將數據遞迴地劃分為由圓心C和半徑r定義的節點，使得節點中的每個點位於由r和C定義的hyper-sphere內
![Ball Tree](https://hackmd.io/_uploads/H1Y0HY-Jyl.png =70%x)
### K-近鄰演算法的優缺點
#### K-近鄰演算法的優點
* 簡單，易於理解，易於實現，無需估計參數，無需訓練
#### K-近鄰演算法的缺點
* KNN每一次分類都會重新進行一次全局運算，對於樣本數量大的數據集計算量較大
* 樣本不平衡時，預測偏差較大
* 對於類別數在3個（含）以上，經常會出現投票平局，平局要取預設值，這會讓K-NN損失精確度
## 24. Machine Learning Algorithms Naive Bayes Classifier
### 貝式分類器
* 單純貝氏分類器（Naive Bayes' Classifier）是假設特徵之間互相獨立，運用貝葉斯定理（Bayes' Theorem）為基礎的簡單機率分類器
* 貝是分類器在20世紀60年代初引入到資料檢索領域，目前仍是文件分類的一種熱門方法
* 文件分類是以詞頻為特徵判斷文件所屬類別或其他（如：垃圾郵件、合法性、體育或政治等）的問題
### 貝式定理
* 貝式定理（Bayes' theorem）描述在已知的一些條件下，某事件的發生機率
* P(A|B) = P(B|A) * P(A) / P(B)
    * P(A)、P(B)：是A、B的**先驗機率**
    * P(A|B)：已知B發生的情況下，A的條件機率。稱作A的**後驗機率**
    * P(B|A)：已知A發生的情況下，B的條件機率。稱作B的**後驗機率**
### 貝式分類器概念
* 根據一些屬性（Feature）將一些物件進行分類（Classes）
* 給定一組數性F，可計算具有數性F的物件O屬於類別C的機率，我們表示為P(C|F)
* 根據所有類別Ci的P(Ci|F)，物件O就分類屬於那個P(Ci|F)值最高的類別
### 多分類貝式定理
* 假設給定n個兩兩不相交的類別C1, C2, ...Cn和一組屬性F
* 一個物件F具備屬性F，分類為Cj的機率
### 貝式分類器種類
* 當單純貝式分類器所給定的特徵是連續的數值，我們使用高斯貝式分類器（GaussianNB）
* 假設變數為常態分配的情況下，以樣本資料的標準差及變異數來計算機率
![貝式計算](https://hackmd.io/_uploads/B1sFc4Eykl.png =70%x)
* 當資料為二元值，可採用伯努力（BernouliNB）分類器
* 在離散資料方面，也可採用多項式（MultinomialNB）分類器
### 貝式分類器優缺點
#### 貝式分類器優點
* 有堅實的數學基礎，及穩定的分類效率
* 對小規模的數據表現很好，能夠處理多分類任務，適合增量式訓練
* 對缺失數據不太敏感，算法也較簡單
#### 貝式分類器缺點
* 無法學習特徵間的相互作用
* 需要計算鮮先驗機率
## 25. Unsupervised Learning Algorithms K Means
### 非監督式學習
* 針對沒有事先標記過的資料，自動進行分類或群
* 非監督式學習的型態：
    * 分群演算法（Clustering algorithm）
      將資料分成不同群組，群組內的成員具有類似屬性
      如：K-means演算法和DBSCAN演算法
    * 非監督式轉換（Unsupervised transformation）
      將原資料轉換為另一種表示方式，讓資料處理更為方便，如：降維（Dimension reeduction）       與特徵擷取（Feature extraction）
* 非監督式學習的特性
    * 因為資料沒有輸出標籤，不易評估模型效率
    * 常用來了解資料集的特性，當作監督式學習的預先處理步驟，透過預先的資料分析，讓之後的監督式學習效率更好
### K-means演算法
* K-means演算法會將資料根據給定的K值進行分群，K代表群組數
* K-means演算法的目標為最小化群組內資料和群中心的距離平方和：
    * x：Si群內的資料點
    * k：k群
    * S：群的分類
    * μi：Si群中所有點的均值
    ![K-means演算法](https://hackmd.io/_uploads/Byme4L5kyl.png =50%x)
### 距離函數
* K-means演算法的距離函數計算
    * 歐幾里得距離（Euclidean distance）
    * 曼哈頓距離（Manhattan distance）
    * 餘弦相似（Cos similarity）
### 餘弦相似（Cos similarity）
假設x=(x1, x2, ..., xn), y=(y1, y2, ..., yn)為兩個n維向量
![餘弦相似](https://hackmd.io/_uploads/HJp7I8qkkl.png =70%x)
> by歐幾里得點積公式：a．b = |｜a｜| x |｜b｜| x cosθ
### K-means演算法的步驟
1. 決定k值，隨意選取k個點當作群組中心
2. 將每一個點歸類於距離最近的群組中心
3. 重新計算分類後每個群組的中心
4. 重複步驟2、3直到群集不再變動或群組中心移動量小於設定的閥值
### K-means初始方法
* K-means++想法為讓每個初始群中心盡可能相距越遠越好
* 步驟
    1. 從資料集中隨機選擇第一點
    2. 計算已選擇的群中心中最遠的資料位置為新的群中心
    3. 重複直到K個群中心產生
### 加速運算
* 在歸類資料所屬群中心時需要大量計算
    * 傳統作法：每筆資料和每個群中心計算距離
    * elkan
        1. 預先計算各群中心的距離
        2. 2倍資料點到群中心A的距離小於群中心A到群中心B的距離，則資料點到群中心B的距離一定比大於A的距離
        ![elkan](https://hackmd.io/_uploads/S15CpU9Jkx.png)
### K-means演算法的優缺點
#### K-means演算法的優點
* 速度快
* 參數簡單
#### K-means演算法的缺點
* 無法區分噪點或離群點
* 不適用非凸資料分佈
* 資料不平均、各類變異不同
## 26. Unsupervised Learning Algorithms - DBSCAN
### DBSCAN演算法
* DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
* 分群演算法
* 分群依據為密度，不需要設定群組數，因此相較於K-Means能更好的找出不同形狀的資料群，且能找出離群點（最接近它的點也很遠）
* 有偵測距離與最少樣本數兩個參數
* 以某個資料點為中心，在其周圍的偵測距離內若有最少樣本數以上個資料點，則此區域稱為密集區（Dense region）
  該資料點稱為核心樣本或核心點（Core samples, core points）
* 位於某資料點為中心的密集區但不符合樣本的資料點稱為邊界點（Boundary points）
* 不在任何密集區的資料點被歸類為雜訊（Noise），亦即不屬於任何群組
### DBSCAN演算法步驟
1. 挑選一個無標記的資料點v，如果是核心點，則給一個新的群組標記並進行下個步驟，否則標記為雜訊並重複此步驟
2. 拜訪此資料點的所有鄰居（距離小於偵測距離r），若尚無標記，則設定與v相同標記
3. 如果鄰居資料點也是核心點，以該鄰居資料點為中心重複步驟2，直到沒有其他核心點
4. 重複步驟1~3，直到所有資料點都處理完畢
### DBSCAN範例說明
* 從資料點中選一個未標記的點
    * 如果是核心點，則把範圍內資料點標記同一群組
    * 如果不是核心點，則設為雜訊，繼續搜尋
    ![DBSCAN範例說明](https://hackmd.io/_uploads/HkgvBUMxkg.png =40%x)
* 檢查所有鄰居，如果鄰居也是核心點，則重複直到沒有鄰居核心
![DBSCAN範例說明-1](https://hackmd.io/_uploads/BJ9PIUGeyg.png =40%x)
* 重複步驟1~3，找到下一個未標記點，重新開始
![DBSCAN範例說明-2](https://hackmd.io/_uploads/rkoTLLMlJg.png =40%x)
* 直到掃描完所有點
![DBSCAN範例說明-3](https://hackmd.io/_uploads/SypmD8MlJl.png =40%x)
### DBSCAN演算法的優缺點
#### DBSCAN演算法的優點
* 不用設定離群數
* 能找出離群點（噪點）
* 能適用比較複雜的資料狀態
#### DBSCAN演算法的缺點
* 參數設定不好會影響效果甚大
* 如果資料點有不同的密度，且差異很大，DBSCAN將無法提供一個好的分群結果
## 27. Introduction to AlphaGo
### AlphaGo演算法
* 蒙地卡羅樹搜尋（Monte Carlo based Tree Search, MCTS）
* 深層神經網路（Deep Neural Networks, DNN）
* 卷積神經網路（Convolutional Neural Networks, CNN）
* 強化學習（Reinforcement Learning, RL）
### 蒙地卡羅模擬搜尋（原始想法）
* 對於每一個可能的下一步，都進行大量的模擬，然後計算勝率，選擇最高勝率的著手落子
* 但由於隨機性太高，在一開始剛引進蒙地卡羅模擬的程式還沒辦法獲勝
### 解決策略
* 主要策略：保持==開發==和==探勘==的平衡
    * Exploitation: 開發目前最好的步
    * Exploration: 探勘其他步，看是否可以獲得更好的報酬
    * 信賴上界（Upper Confidence Bound;UCB）
    ![UCB](https://hackmd.io/_uploads/SJx7PKIxkx.png =70%x)
### 蒙地卡羅樹搜尋演法
![蒙地卡羅樹搜尋演算法](https://hackmd.io/_uploads/SJ_qwYUlJe.png =80%x)
### 策略網路（policy network）
* 為了降低遊戲樹的分支度，AlphaGo訓練一個策略網路（神經網路）來預測高手可能回應的著手
### 評估網路（value network）
* 為了讓自我模擬期局能更像高手的對弈，AlphaGo訓練一個評估網路（神經網路）來引導棋局的模擬
### 強化式學習
* 強化式學習的目的為代理人（Agent）對環境（Environment）進行一連串的動作，使得整個過程中可以獲得的累積獎勵（cumulative reward）最大化
### AlphaGO運作圖解
![AlphaGo運作圖解](https://hackmd.io/_uploads/HyCFaF8lkx.png =80%x)
## 28. Introduction to Othello Contest Plateform

































# 自然語言筆記
自然語言處理的目的是要讓電腦能夠處理人類的語言
#### Turing Test
如果一個人（代號A）使用自然語言透過終端機去詢問兩個他看不見的用戶端任意問題。
而用戶端中一個是正常思維的人（代號B）、一個是機器（代號C）。
如果經過若干詢問以後，A不能得出實質的區別來分辨B與C的不同，則此機器C通過圖靈測試。
## 自然語言常見處理任務
### 分詞/斷句
* 將文字語料(corpus)切分為單元詞彙(word)
* 英文透過空白、標點符合隔開單詞，但中文並非如此
Ex:邁向充滿希望的新世紀 ⭢ 邁向 充滿 希望 的 新 世紀
### 詞性標記
* 為每隔單詞指定相對應的詞型，詞性包含名詞(n)、形容詞(a)、副詞(d)、連接詞(c)、介系詞(p)、助詞(u)、時間詞(t)等
Ex:邁向 充滿 希望 的 新 世紀 ⭢ 邁向/v 充滿/v 希望/n 的/u 新/a 世紀/n
### 具名實體識別(NER, Named Entity Recognition)
* 從給定的文字或語料中辨識出一些實體(entity)，也就是較長的專有名詞，如：人物、地點、機構名稱
Ex:[台灣/n 電腦/n 對局/v 學會/n] 將於/v 2022年/t 在/v 暨南大學/n 舉辦/v 比賽/n
### 消除單詞歧義(WSD, Word-Sense Disambiguation)
* 識別出單詞的正確意義
Ex:The dog **barked** at the mailman. 狗對郵差**吠**
   Tree **bark** is sometimes used as a medicine. 樹**皮**有時被用作藥物
### 句子/摘要分類
* 將句子或摘要進行二元或多元分類
* 應用於垃圾信件偵測、新聞文章分類（財經、政治等類別、產品評價好壞（正、負評）等
### 語言生成
* 使用大量文件（語料庫）進行學習模型的訓練，再使用此模型產生新的文字
### 問題答覆
* 技術具商業價值，應用於客服聊天機器人、虛擬助理和智慧管家
* 需要資訊檢索，知識表達的技術配合
### 機器翻譯
* 將句子或一段文字從來源語言(source language)轉換成目標語言(target language)
* 語言間的轉換，單詞語單詞間的關係並非一對一轉換，需要單詞對齊(word alignment)
## 自然語言處理的派別
* 基於規則的專家系統
    * 成功案例：1980馬丁波特所提出的波特詞幹演算法(Porter stemming algorithm)，被廣泛應用在英語詞幹提取
    * 每條規則是一系列的if, then
    * 高度依賴專家知識
* 基於統計的學習方法
    *　使用統計方法讓機器自動學習
    *　降低對專家的依賴
## 傳統自然語言處理做法
* 傳統機器學習在自然語言處理
  處理步驟：
    1. 資料預處理階段：刪除不需要資料
    2. 特徵工程階段：將文字資料轉換成數值表達方式
    3. 學習階段：運用機器學習演算法進行模型訓練
    4. 面對全新資料進行預測
* 傳統機器學習在自然語言處理流程
![傳統機器學習在自然語言處理流程](https://hackmd.io/_uploads/rJOcfudTC.png)
### 資料預處理
* 詞幹處理：例如將文字過去式改為原型
* 去除標點符號
### 特徵工程
* 單詞袋(BOW, Bag-of-Words)
    * 將文章中所有的單詞收集成為詞彙集(vocabulary)並且統計各單詞出現的頻率，用以創建特徵向量
    * 嚴重限制：沒有記住單詞出現的順序
      Ex:
      Bob went to the market to buy some flowers.
      Bob bought the flowers to give to Mary.
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vocabulary
      [“Bob”, “went”, “to”, “the”, “market”, “buy”, “some”, “flowers”,              “bought”, “give”, “Mary”]
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vectors
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀ [1, 1, 2, 1, 1, 1, 1, 1, 0, 0, 0]
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀ [1, 0, 2, 1, 0, 0, 0, 1, 1, 1, 1]
* N-gram
    * 將文字分解成多個由N個字母（或單詞）組成的單元素，用以創建特徵向量
      Ex:
      Bob went to the market to buy some flowers.
      Bob bought the flowers to give to Mary.
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ 2-gram
      [“# Bob”, “Bob went”, “went to”, “to the”, “the market”, “market to”,        “to buy”, “buy 
       some”, “some flowers”, “flowers #”, “Bob bought”, “bought the”, “the        flowers”, 
       “flowers to”, “to give”, “give to”, “to Mary”, “Mary #”]
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⭣ vectors
      ⠀⠀⠀⠀⠀[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
      ⠀⠀⠀⠀⠀[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]
### 學習模型流程
* 隱馬可夫模型(HMM, Hidden Markov Model)
* 句子修正器(sentence planner)
* 通篇修正器(discourse planner)
![模型學習流程](https://hackmd.io/_uploads/B1Plqdt6R.png)
### 學習模型範例
* 隱馬可夫模型會針對語料庫中的統計分機結果進行HMM模型訓練
* 利用句子修正器（結合文法規則庫）修正片語中可能出現的語言學錯誤（構詞型態、文法錯誤）
* 通篇修正器可以重新排列句子，建構出所要傳達的一組訊息
### 深度學習自然語言處理做法
* 循環神經網路(RNN, Recurrent Nerual Networks)
    * 具備時間序列（記憶）功能的模型，可考慮文句前後文關係
    ![RNN](https://hackmd.io/_uploads/Sk4I3OYTR.png)
* 長短期記憶(LSTM, Long Short-Term Memory)
    * RNN的擴展，具備長期記憶功能
    ![LSTM](https://hackmd.io/_uploads/S12s3OtTA.png)
* Transformers
    * 用於機器翻譯seq2seq
    * Encoder-Decoder Model + Multi-Head Attention
    ![Transformers](https://hackmd.io/_uploads/SkjBTutTR.png)
* BERT(Bidirectional Encoder Representation from Transformers)
    * Transformers中的Encoder，但有很多層
    * Pre-train + fine tune
    ![BERT](https://hackmd.io/_uploads/B17jp_Yp0.png)
