# 機器學習數位課程筆記 ## 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)