# AI筆記
## Machine Learning
### 監督式學習
1. **線性迴歸 (Linear Regression)**: 用於預測一個或多個自變量和一個連續因變量之間的關係。

2. **邏輯回歸 (Logistic Regression)**: 用於預測二元結果(是/否)的機率,常用於分類問題。

3. **KNN (K-Nearest Neighbors, K最近鄰)**: 通過找出一個樣本點最近的K個鄰居,並根據這些鄰居的類別來決定該樣本點的類別。

4. **支援向量機 (Support Vector Machines, SVM)**: 找出一個邊界,最大化不同類別的數據的間隔,並使用核函數來處理非線性問題。

5. **決策樹 (Decision Trees)**: 通過一系列問題將數據分成不同的類別或預測結果。

6. **隨機森林 (Random Forest)**: 結合多個決策樹,以提高預測準確性和控制過擬合。

7. **梯度提升機 (Gradient Boosting Machines, GBM)**: 逐步建構模型,每次建構都試圖修正前一模型的錯誤。

10. **Naive Bayes分類器**: 基於貝葉斯定理,假設每個特徵之間相互獨立。

11. **感知機(Perceptron)**: 最早的人工神經網絡結構之一,適用於簡單的二元分類問題。

12. **多層感知機(Multilayer Perceptron, MLP)**: 感知機的擴展,包含多層隱藏層,能處理更複雜的數據。

13. **AdaBoost**: 一種提升方法,通過組合多個弱分類器來提高分類性能。

14. **XGBoost**: 極端梯度提升,是GBM的高效實現,廣泛用於競賽和工業應用。

15. **局部加權回歸(Locally Weighted Regression)**: 在每一點附近對數據進行加權,然後進行回歸,更適合非線性數據。

16. **Simple Vector Machines (SVMs for regression)**: SVM的回歸版本,用於預測連續數值。

17. **隨機梯度下降法 (Stochastic Gradient Descent, SGD)**: 用於大規模數據集的優化算法,每次迭代只使用一部分數據。

18. **Least Absolute Shrinkage and Selection Operator (LASSO)**: 用於回歸分析,通過加入正則化項來實現變量選擇和複雜度控制。

19. **卷積神經網絡(CNN)**:
◦ 用於圖像和視頻識別。
◦ 能夠自動從圖像中學習特徵。
◦ 適用於圖像分類、物體檢測等任務。
2. **遞歸神經網絡(RNN)**:
◦ 專門用於處理序列數據,如時間序列或自然語言。
◦ 能夠記住前一狀態的輸出,將其用於當前輸入的計算中。
◦ 常用於語言模型和文本生成。
3. **長短期記憶網絡(LSTM)**:
◦ RNN的一種,特別設計為了解決序列資料的長期依賴問題,尤其是在時間序列分析和自然語言處理(NLP)中非常有用。
4. **全連接前饋神經網絡(DNN)**:
- 最基本的深度學習模型。
- 適合從固定大小的輸入映射到固定大小的輸出。
- 常用於結構化數據的分類和迴歸問題。
2. **Transformer模型**:
- 採用自注意力機制(Self-Attention)來處理序列數據。
- 在處理長距離依賴關係方面表現出色。
- 廣泛用於NLP任務,如機器翻譯和文本摘要。
---
### 非監督式學習
1. **K-均值聚類 (K-Means Clustering)**: 將數據點分為K個群組,使得每個數據點屬於與其最近的中心點(centroid)相對應的群組。

2. **階層聚類 (Hierarchical Clustering)**: 建立一個多級的群組樹狀結構,可以是自底向上(聚合)或自頂向下(分裂)的方式。

3. **主成分分析 (Principal Component Analysis, PCA)**: 一種降維技術,通過提取數據的主要特徵來減少數據集的維度。

4. **自編碼器 (Autoencoders)**: 一種神經網絡,用於學習數據的有效表示(編碼),通常用於數據降維或特徵學習。
- 用於資料的降維和特徵學習。
- 通過無標籤數據學習數據的壓縮表示。
- 常用於異常檢測和去噪。

5. **t-SNE (t-Distributed Stochastic Neighbor Embedding)**: 一種可視化高維數據的技術,能夠在低維空間中保留數據點之間的相對距離。

6. **關聯規則學習 (Association Rules)**: 用於發現大型數據集中不同項目之間的有趣關係(如“購物籃分析”)。

7. **Apriori Algorithm**: 一種關聯規則學習的經典算法,用於挖掘頻繁項目集,進而生成關聯規則。

8. **奇異值分解 (Singular Value Decomposition, SVD)**: 一種矩陣分解技術,常用於推薦系統、信號處理和統計學等領域。

9. **Dimensionality Reduction**: 指的是各種方法和技術,用於減少數據集的維度,同時盡量保留重要信息。這包括PCA、t-SNE等方法。

10. **生成對抗網絡(GANs)**:
- 由生成器和判別器組成的網絡模型。
- 生成器產生數據,判別器評估數據的真實性。
- 常用於圖像生成、風格轉換和數據增強。
11. **自組織映射(Self-Organizing Maps, SOMs)**:
- 競爭型神經網絡,通過訓練來映射高維數據到二維或三維空間。
- 適合於視覺化和探索性數據分析。
12. **深度信念網絡(Deep Belief Networks, DBNs)**:
- 基於無監督的受限玻爾茲曼機(Restricted Boltzmann Machines, RBMs)。
- 能夠學習數據的深層表示。
- 可用於特徵提取、維度降低和分類。
13. **受限玻爾茲曼機(RBMs)**:
- 通過概率生成模型學習輸入數據的分佈。
- 可以作為其他深度學習模型的預訓練步驟。
| 學習類型 | 問題類型 | 演算法 |
| ------------ | ------------ | ----------------------------------------- |
| 監督式學習 | 分類 | 邏輯回歸 (Logistic Regression) |
| 監督式學習 | 分類 | K最近鄰 (K-Nearest Neighbors, K-NN) |
| 監督式學習 | 分類 | 支援向量機 (Support Vector Machines, SVM) |
| 監督式學習 | 分類 | 決策樹 (Decision Trees) |
| 監督式學習 | 分類 | 隨機森林 (Random Forest) |
| 監督式學習 | 分類 | Naive Bayes |
| 監督式學習 | 分類 | 感知機 (Perceptron) |
| 監督式學習 | 分類 | 多層感知機 (Multilayer Perceptron, MLP) |
| 監督式學習 | 分類 | AdaBoost |
| 監督式學習 | 回歸 | 線性回歸 (Linear Regression) |
| 監督式學習 | 回歸 | Simple Vector Machines (SVMs for regression) |
| 非監督式學習 | 聚類 | K-均值聚類 (K-Means Clustering) |
| 非監督式學習 | 聚類 | 階層聚類 (Hierarchical Clustering) |
| 非監督式學習 | 聚類 | t-SNE |

---
### DNN (Deep Learning Neural Network)
> - 由多層神經元組成的網路,每一層包含多個神經元,每個神經元與前一層的所有神經元相連接。
>
> - 結構特點: 包含輸入層、多個隱藏層和一個輸出層。每個層都是全連接層,意味著每層的每個神經元都與前一層的所有神經元相連。

### 卷積神經網絡(Convolutional Neural Networks)
> 是一種前饋類神經網路(Feedforward Neural Networks)並透過filter(或kernel)來優化並自行學習特徵

### 遞歸神經網路( Recurrent Neural Network )
> 是一種專門用於處理序列資料(資料間通常具有某種邏輯或時間上的關聯性)的神經網絡,能夠在其結構中保持一定的「記憶」。
>
> - 結構特點: 其特點是網絡中的神經元不僅與前一層的神經元相連,還與自己的上一時刻的狀態相連。
> - 應用場景: 廣泛用於時間序列分析、語音識別、語言模型和機器翻譯等領域。
> - 優缺點: 優點在於能夠處理不同長度的輸入序列,並能捕捉時間序列數據中的動態時間關係。缺點是訓練過程可能比較複雜且計算量大,且對於長序列可能出現梯度消失或梯度爆炸的問題。

### 激活函數(Activation Function)
> 通常都加在最後一層,為了實現將非線性轉換成線性輸出的函數,以增加模型對於非線性規則的學習能力。
> 將輸入值、權重、偏移值運算後的值做非線性的轉換,成為神經元的最終輸出。
>
> eg. 大於某個值就輸出1,否則輸出-1

### 常見的激活函數

1. Step function


2. Sigmoid function
> 常用於輸出層,特別是在二分類問題中


3. Tanh (hyperbolic tangent) function
> 形狀類似於 Sigmoid,但範圍更寬


4. ReLU (rectified linear unit) function
> 在正數範圍內保持線性,負數部分為0,計算簡單且有效,廣泛用於各種神經網絡中。


5. Leaky ReLU function
> ReLU的變體,允許負數部分有一個小的、非零的斜率,可以解決死亡ReLU問題


6. Identity function
> 𝑦=𝑥

7. Softmax function
> 通常用於多類分類問題的輸出層,可以將輸入值轉換為概率分佈。

### 何時會使用到激活函數?
1. 在神經網絡的每層之後:
> 在神經網絡中,激活函數通常用於每個隱藏層的輸出,以及輸出層。激活函數使得每層的輸出可以包含非線性特徵,從而讓網絡有能力學習更複雜的數據結構。
2. 處理非線性問題:
> 當數據集中的關係不是線性的時,就需要激活函數來幫助神經網絡學習這些非線性關係。例如,在圖像識別、語音識別、自然語言處理等複雜問題。
3. 在特定類型的網絡中:
> 比如在卷積神經網絡(CNN)中,激活函數用於卷積層之後來引入非線性;在遞歸神經網絡(RNN)中,激活函數幫助網絡處理時間序列數據中的非線性關係。
---

### Overfitting:
Overfitting in machine learning occurs when a model learns the training data too well, including noise and details that do not generalize to new data. This means the model performs very well on the training data but poorly on unseen data. Overfitting is typically a result of an excessively complex model with too many parameters relative to the amount of training data.
當模型對訓練數據的學習能力過強時,就會發生機器學習中的過度擬合,包括無法泛化到新數據的雜訊和細節。這意味著該模型在訓練數據上表現得很好,但在看不見的數據上表現不佳。過度擬合通常是由於模型過於複雜,相對於訓練數據量而言,參數過多。
1. **Regularization**:
> Regularization is a method used to prevent overfitting by adding a penalty to the loss function for large weights. Techniques like L1 and L2 regularization encourage the model to keep the weights small, which can lead to a simpler model that generalizes better. Thus, regularization is indeed a method to combat overfitting, so "Yes" is appropriate.
> 正則化是一種通過向大權重的損失函數添加懲罰來防止過度擬合的方法。L1 和 L2 正則化等技術鼓勵模型保持較小的權重,這可以導致更簡單的模型,從而更好地泛化。因此,正則化確實是一種對抗過擬合的方法,因此“是”是合適的。
2. **Using a Complex Model**:
> Using a more complex model often leads to overfitting because complex models have a higher capacity to learn details and noise in the training data. Therefore, opting for a more complex model is typically not a solution to overfitting, but rather a cause of it. The "No" in the table is correct.
> 使用更複雜的模型通常會導致過度擬合,因為複雜模型具有更高的能力來學習訓練數據中的細節和雜訊。因此,選擇更複雜的模型通常不是過擬合的解決方案,而是過擬合的原因。表中的“否”是正確的。
3. **Dropout**:
> Dropout is a regularization technique that involves randomly "dropping out" a subset of units in a neural network during training. This prevents units from co-adapting too much and leads to a model that is less sensitive to the specific weights of neurons, thereby improving generalization and reducing overfitting. So "Yes" is correct.
> Dropout 是一種正則化技術,涉及在訓練期間隨機“丟棄”神經網络中的單元子集。這可以防止單元過度協同適應,並導致模型對神經元的特定權重不太敏感,從而改善泛化並減少過度擬合。所以“是”是正確的。
4. **Cross-Validation**:
> Cross-validation is a technique used to evaluate the generalization capability of a model. It involves dividing the data into subsets, training the model on some subsets while validating on others, and then rotating which subsets are used for training and validation. This method helps in assessing how well the model will perform on an independent dataset, but it does not directly prevent overfitting. It's more of a diagnostic tool than a solution. However, cross-validation can help in selecting the model that generalizes the best, so in that sense, it can be part of a strategy to address overfitting. That's why "Yes" can be considered correct here.
> 交叉驗證是一種用於評估模型泛化能力的技術。它涉及將數據劃分為子集,在某些子集上訓練模型,同時在其他子集上進行驗證,然後輪換用於訓練和驗證的子集。此方法有助於評估模型在獨立數據集上的表現,但不能直接防止過度擬合。它更像是一種診斷工具,而不是一種解決方案。但是,交叉驗證可以幫助選擇能夠概括最佳的模型,因此從這個意義上說,它可以成為解決過擬合策略的一部分。這就是為什麼“是”在這裡可以被認為是正確的。
5. **Data Augmentation**:
> Data augmentation is a technique to increase the diversity of your training data without actually collecting new data, by applying various transformations like rotation, scaling, and cropping to the existing data. This can help the model generalize better to new, unseen data by presenting it with a wider variety of examples during training, thus combating overfitting. Therefore, "Yes" is the correct marking.
> 數據增強是一種技術,通過對現有數據應用各種轉換(如旋轉、縮放和裁剪),在不實際收集新數據的情況下增加訓練數據的多樣性。這可以説明模型更好地泛化到新的、看不見的數據,方法是在訓練期間向它展示更多種類的樣本,從而防止過度擬合。因此,“是”是正確的標記。
1. 隱式馬可夫模型(HMM,Hidden Markov Model)
2. 支援向量機(SVM ,Support Vector Machine)
### K-fold Cross-Validation (K 折 交叉驗證)
> K-fold 的 K 跟 K-mean、KNN 的 K 一樣,指的是一個數字,一個可以由使用者自訂數字並將資料集 "折" (拆分) 成幾個部分。
> 1. 將資料集拆分成 K 份做交叉驗證。
> 2. 並將k-1份作為training set
> 3. 剩下的那一份作為Validation set
> 4. 算出一個 Validation Error,接著再從沒當過驗證集的資料挑一份出來當驗證集,剛剛做過驗證集的資料則加回訓練集,維持 K-1 份做訓練、1 份做驗證
> 5. 如此反覆直到每一份資料都當過驗證集,這樣會執行 K 次,算出 K 個 Validation Error,最後我們再將這 K 個 Validation Error 做平均,用他們的平均分數來做為我們評斷模型好壞的指標。


### 泛化(Generalization)
> 指模型對於新的 未見過的數據的處理能力。
- 良好的泛化能力:指模型能從訓練集中學到規律,並將此應用於未見過的資料上,做出準確合理的決策。