---
# System prepended metadata

title: Lecture Notes ML4AI 2021
tags: [COTAI LHP]

---

---
tags: COTAI LHP
---

# Lecture Notes ML4AI 2021

## Session 1 -- Linear Models

### Kiến thức cơ bản

* AI có thể học và áp dụng những kiến thức.
* AI cũng là cỗ máy giúp dự đoán những thứ ta cần thông qua dữ liệu ta cung cấp như là giá nhà đất, hay là ảnh,... thông qua những hàm số, những pixel bằng cách lấy mẫu và so khớp.
* Để có hàm số dự đoán cho máy tính, ta phải trích xuất các đặc trưng của input thông qua các mẫu B (Basic), rồi từ những đặc trưng đó để dự đoán output $\hat{y}$.
### Các loại Data:
* Định lượng rời rạc và định lượng liên tục.
* Phân nhóm.

**Từ đó ta chia hàm số ra làm 2 loại:**
* Regression: để dự báo (data là những định lượng liên tục).
* Classification: phân loại theo nhóm (data là nhóm và những định lượng rời rạc), và được phân thành 2 nhóm là supervised learning (Classification, phân nhóm theo ý ta, ví dụ như phương pháp kNN) và unsupervised learning (Clustering, phân nhóm theo ý máy tính).

### Tích chấm
* Tích chấm giúp ta dự đoán được $\hat{y}$ dựa vào những đặc trưng ban đầu và con số bias mà ta chọn, từ đó tính ra được độ giống/khác nhau giữa tính toán và thực tế.

### Mô hình cơ bản của Linear Predictor
* $\hat{y} = s$ (hàm nắn đầu ra theo ý ta) $= Wz + b$
* Đằng sau mỗi con số tọa độ của $z$ là 1 đặc trưng

### Linear Regression
* Ta có thể random những con số $(W^0,b^0)$ để thử xem hàm số của ta như thế nào rồi cải tiến dần
* Để đánh giá được hàm số ta cần phải cung cấp data là các input và output thực tế, rồi ta tính $\hat{y}$, rồi tính độ lệch chuẩn so với thực tế để xem hàm số chính xác bao nhiêu.
* Ta cũng có thể so khớp bằng khoảng cách thẳng Euclidean, tích vô hướng và góc (thông qua cos)
* Thực tế mô hình Linear Regression có thể sử dụng cho các mô hình chỉ cần tuyến tính theo $w$

**Hạn chế:**
1. Mô hình Linear Regression rất nhạy cảm với nhiễu (sensitive to noise). Vì vậy trước khi thực hiện Linear Regression, ta cần loại bỏ các nhiễu (pre-processing).
2. Linear Regression không biểu diễn được các mô hình phức tạp.

### Classification bằng phương pháp kNN (dùng trong các bài toán phân loại và hồi quy):
* Trong kNN, k là siêu tham số do ta điều chỉnh sao cho mô hình tối ưu nhất.
* kNN là giải thuật đi tìm k điểm dữ liệu gần với nó nhất để kiểm tra các điểm đó có gần tương tự với chúng hay không.
* kNN không học bất cứ thứ gì từ data train mà nhớ lại một cách máy móc toàn bộ dữ liệu.

$\Rightarrow$ kNN là thuật toán đi tìm outputs của 1 dữ liệu mới dựa trên thông tin của k điểm dữ liệu gần nhất vừa tìm.

## Session 2 -- Feature Extraction

**Link vào file notebook:**
https://colab.research.google.com/drive/1Jf2Gpa8YidN-8izoQMLbIwiM6tIsWADJ#scrollTo=NVtafduPX8Wi

**Problem 2.1.3**

Từ input trích xuất ra các đặc trưng $x \rightarrow z$

* **Phân loại qua độ tin cậy:** Ta sẽ sử dụng hàm nắn đầu ra như hàm Sigmoid hay hàm Softmax để biến score thành probabillity và tính được khoảng cách niềm tin ($\hat{y} \rightarrow y$)

#### Trích xuất đặc trưng ($x \rightarrow z$)

* Input là 1 hình ảnh: Máy tính sẽ phải làm việc với những con số đặc trưng cho từng loại màu (RGB) ở các điểm ảnh nhỏ. Từ đó khi cần trích xuất đặc trưng ở 1 tấm hình, ta cần phải sử dụng phương pháp trượt để lấy ra các mẫu của data rồi so khớp.
* Từ nhiều filter khác nhau của 1 bức ảnh, ta có thể tính toán và khôi phục được bức ảnh đó tùy theo thành phần chính và nhiều thành phần nhỏ hơn (ta có thể dùng phương pháp tích chập để khôi phục tấm hình).
* Trong khảo sát, ta còn có thể dự đoán được 1 người nào đó thích cái gì và ghét cái gì khi người đó chọn thiếu 1 câu thông qua 1 người khác có các lựa chọn gần tương tự.


**5 phương pháp trích xuất đặc trưng**
* **Hand crafted:** ta có thể dùng phương pháp này bằng sự hiểu biết của con người trích xuất các đặc trưng thủ công để cho máy tính nhận dạng ra các đặc trưng của input.
* **Spare coding:** từ các đặc trưng rất nhỏ có thể tạo ra được các features.
* **PCA (phép phân tích thành phần chính):** giúp ta biến đổi tập hợp dữ liệu từ một không gian nhiều chiều thành một không gian ít chiều hơn (2 hoặc 3 chiều) nhằm tối ưu hóa trong việc so khớp.
* **Convolutional kernels:** Kernels sẽ trượt hết tấm ảnh để tính toán và đưa ra feature của bức ảnh.
* **Word embeddings (Word2vec):** Data ở đây là chữ sẽ có những đặc trưng được tính theo con số (càng lớn là càng giống), và từ 1 model được huấn luyện thì ta có thể cho ra từ giống như ý muốn của người tìm kiếm nhất.

### Linh tinh
* Hàm Flatten để ép các vectơ thành các điểm trên 1 mặt phẳng (2D) (khi ép xuống có thể bị mất 1 số dữ liệu)


## Session 3 -- Nonlinear Models

### Nonlinear (mô hình không phẳng) Predictor
* Một số mô hình phức tạp cần hàm là 1 đường (hoặc mặt phẳng) cong để sai số ít hơn
* Decision boundary: vùng mà không quyết định được điểm thuộc class nào vì niềm tin bằng nhau ($W^1z + b^1 = W^2z+b^2 \Rightarrow W^{12} z+b^{12}=0$)
* Linearly separable: đường thẳng cắt để chia ra các class ở các mô hình đơn giản
* Nonlinearly separable: tách các class ra bằng đường cong ở các mô hình phức tạp hơn
* Non-separable: lỗi vì data không đồng nhất ở các thời điểm khác nhau
* Nonlinear transformation: chuyển đổi không gian đơn giản thành không gian lớn hơn $(Z \rightarrow Z')$, để có thể dễ dàng phân loại 1 số nhóm mà ở không gian đơn giản hơn không phân loại được
* Manifold Hypothesis: những dữ liệu khác nhau được phân bố trong 1 không gian chung, ta cần phải tách những dữ liệu này ra bằng transformation để cho data được trải ra và thống nhất hơn theo nhóm.

***Để có được mô hình học máy phi tuyến ta cần biến đổi từ $z \rightarrow z'$ bằng hàm phi tuyến biến đổi đặc trưng (nonlinear feature transform functions) $\phi(z)$***

### Transformation $(Z \xrightarrow{\mathit{B_1,B_2,...,B_n}} Z')$
**Note của Thầy**: các mẫu $B_1,B_2,\dots,B_n$ chỉ dùng để **trích xuất đặc trưng** cho ra coordinate vector $Z$ chứ ko phải cho nonlinear transform. @KjyIHMTnQd22jlFJfV67Hg 

#### Linear transform
* Input phẳng => output phẳng
* Được biểu diễn bằng 1 ma trận A nhân vào với $z' = Az$ (output là 1 ma trận)
* Xoay => co dãn => xoay: output không bị méo mó
#### Nonlinear transform
* Input phẳng => output cong, méo
* Được biểu diễn bằng 1 ma trận nhân vào rồi bóp méo output $\hat{y} = \gamma(Az+b)$
* Tương tự linear sau khi ta xoay, co dãn, xoay ta phải đưa qua hàm $\gamma$ để bẻ cong output
#### Bonus:
* Linear transform: Là phép biến đổi tuyến tính, trong đó output được biểu diễn bằng ma trận A nhân với vector input z. Đặc điểm của phép biến đổi này là input và output đều là các phẳng và output không bị méo mó khi xoay, co dãn, xoay lại.
* Nonlinear transform: Là phép biến đổi phi tuyến, trong đó output được biểu diễn bằng một phép biến đổi phi tuyến đưa input qua một hàm $\gamma$, sau đó được nhân với ma trận A và cộng với vector b để tạo ra output. Đặc điểm của phép biến đổi này là output là một dạng cong, méo so với input. Khi xoay, co dãn, xoay lại input, output sẽ bị bẻ cong theo cách mà hàm $\gamma$ quyết định.

**Có 4 phương pháp chính:**
* Feature engineering: thiết kế hàm $\phi(z)$
* MLP (Neural Network): xếp chồng các mô hình lên (deep learning $z \Rightarrow z'=\phi(z) \Rightarrow z''=\phi(z')...$)
* Kernel machine
    * Kernel trick: ta chỉ cần lấy kernel của 2 nhóm mà không cần phải bẻ cong bằng hàm $\phi$ rồi tính dot product.
* Locally linear
    * Decision Tree: chia nhỏ không gian lớn thành nhiều không gian nhỏ hơn để áp dụng các linear predictors riêng biệt.


**One-hot encoding:** là quá trình mã hóa các giá trị thành các đặc trưng nhị phân gồm giá trị 0 và 1 (mỗi đặc trưng có 1 giá trị "1" rời rạc)
* Để có được 1 model cho ra dự đoán tốt với cả những data unseen thì cách duy nhất là chia data ra làm 2 nhóm: training set (chiếm khoảng 80-90% data, dùng để train) và test set (không được sử dụng khi train).

#### Hidden Layer
Trong MLP ta cần phải xử lí nhiều nhiệm vụ khác nhau, vì vậy ta cần nhiều hidden layer để phân chia các nhiệm vụ, dữ liệu cho chúng xử lí, đầu ra của hidden layer này là đầu vào của hidden layer tiếp theo. Và việc có các hidden layer cũng giúp ta dễ dàng điều chỉnh weight hơn để có kết quả tốt hơn.

## Session 4 -- Recommender Systems
* Hệ khuyết nghị là core engine trong mọi user platform
* Là 1 phần rất quan trọng của robot, cobot (những robot thông minh cộng tác với ta)
#### Hệ thống đề xuất tốt cần phải:
* Khả năng khái quát hóa (generalization counts) (là ví dụ như Amazon khi người dùng mua 1 số sản phẩm, và dự báo cho người dùng khác)
* Khả năng cá nhân hóa (personalization counts)
**=> Vì vậy ta cần long-tail issues để cân bằng việc đề xuất những sản phẩm popular và những sản phẩm trải nghiệm cao nhưng phù hợp với nhóm nhỏ người dùng**

### Problem formulation
* Input: user items
* Output: prediction (thích hay không)
* **Các cách giải quyết:**
    * User-based filtering: ví dụ những users mua các sản phẩm gần giống nhau, và cùng thích một số sản phẩm đó thì có vẻ 2 người đó có sở thích giống nhau
    * Item-based filtering: ví dụ những mặt hàng thường được nhiều người mua thì có sự liên quan, và nếu có người dùng nào chưa mua thì recommend

**Người ta phân loại các nhóm khách hàng đặc trưng dựa vào nhiều input data**
**Khi đưa ra các khuyến nghị thì người ta cần tính toán sự giống nhau**
**Vấn đề chính là tìm những đặc trưng của users và items**

### Collaborative Filtering
**PP1: Item-based CF:**
* Transform 1 cái ma trận user-item rating
* Cách tính similarity: Mỗi user là 1 đặc trưng, áp dụng cosine similarity cho từng item
* Sau khi tính toán ta sẽ so sánh được các cặp item giống nhau như thế nào để đưa ra đề xuất (tính toán rating trung bình để ra được item gần nhất)

**PP2: User-based CF:** giống với item-based nhưng số lượng lớn hơn nên thường người ta dùng item-based
* Những item chưa mua thì sẽ có rating là giá trị trung bình giữa các item trong 1 cột user
* Sau khi tính được ma trận similarity giữa các users, sau đó tính ma trận $\hat{Y}$
* Ta sử dụng kNN (k là số lượng user giống nhau cần tìm) để tính toán $\hat{y}$ giữa user và item, vì số lượng user lớn nên tính toán bình thường sẽ lâu

**PP3: Matrix factorization (model-base) CF:** phân rã một ma trận cực lớn làm 2 ma trận user và item
* Ta chỉ trích xuất 1 số đặc trưng từ 2 ma trận rồi dùng dot product để tính được rating
* Cách tách ma trận: ta sử dụng SVD (xoay, co dãn, xoay)
* Cách trích xuất: cho random các đặc trưng rồi tính $\hat{y}$ rồi tối ưu

### Personalized recommender
**Content-based personalized:**
* Ta cần có những $Z$ của từng item, và từng users là các $\theta$
* Có thể dự đoán con số rating còn thiếu bằng cách tìm ra từng $\theta$ bằng phương pháp regression hoặc classification
* Mã sku trên sản phẩm giúp phân loại chi tiết hơn, ta có thể sử dụng mã sku để truy ngược ra các đặc trưng (có thể sử dụng toàn cầu)

**Context-aware & KB personalized:** Weather/time/location/... context (các thông tin ngữ cảnh)

**Integrated, hybrid:** kết hợp nhiều phương pháp để đưa ra dự đoán tốt nhất

## Session 5 -- Metrics and losses

### Validation set (Dev set)
* Để tăng chất lượng model khi gặp nhiều unseen data hơn, người ta cắt training set ra thành 1 tập data nhỏ (validation set) và phần còn lại làm training set, validation set lúc này sẽ evaluate kết quả từ training set, sau đó sử dụng test set để double-check evaluation từ validation set.
### Regression
* Mean squared error: MSE = $\frac{1}{n}\sum_{t=1}^{n}{e_t^2}$
* Root mean squared error: RMSE = $\sqrt{\frac{1}{n}\sum_{t=1}^{n}{e_t^2}}$
* Mean absolute error: MAE = $\frac{1}{n}\sum_{t=1}^{n}{|e_t|}$
* Mean absolute percentage error: MAPE = $\frac{100%}{n}\sum_{t=1}^{n}{\left| \frac{e_t}{y_t} \right|}$

**MAE sẽ ít bị noise hơn MSE nhưng khó để tối ưu hơn do khi sai số tăng thì khoảng phạt của MAE tăng bình phương**

### Classification
**Balanced dataset**
* Natural metric: đếm số lượng đầu ra sai so với thực tế bằng cách báo lỗi $\Rightarrow$ accuracy (chỉ nên dùng accuracy đối với dataset phân bố khá đồng đều nhau)
* Confusion matrix: những dự báo trên đường chéo là đúng

**Imbalanced dataset:** cần dùng chuẩn đánh giá khác là precision và recall

* Negative:
True Negative: đáng được ignore
False Negative: không đáng để ignore
* Precision cho biết độ chính xác của kết quả
Precision = $\frac{\sum TP}{\sum TP+FP}$
* Recall cho biết độ nhạy của kết quả
Recall = $\frac{\sum TP}{\sum TP+FN}$
(TP: True Positive, FP: False Positive, FN: False Negative, TN: True Negative)
* Mối quan hệ giữa Precision và Recall
$F_{\beta} = (1+{\beta}^2)\frac{\text{Precision.Recall}}{{\beta}^2\text{Precision+Recall}}$
* F1 score
$F1 = \frac{\text{2.Precision.Recall}}{\text{Precision+Recall}}$

**Multiclass extentions:** tính precision, recall, f1-score rồi tính trung bình

**Chuẩn đánh giá ROC**
* Ta có thể sử dụng API AUC để tính
TPR & FPR:
* TPR: xác suất tìm ra được object cần được detect 
* FPR: Xác suất của false alarm = 1 - TNR
* Tối ưu threshold: tính G-Mean
Trong logistic regression: ví dụ như trong bài toán phân chó và mèo, threshold default là 50%, ta muốn xác định rõ output là con chó thì ta có thể nâng threshold lên 80%, dưới 80% là con mèo.

**Chuẩn đánh giá: IoU trong object detection & segmentation**
* $IoU = \frac{\text{Area of Overlap}}{\text{Area of Union}}$

**Chuẩn đánh giá đối với ngôn ngữ: BLEU**

* Trong classification mô hình sẽ có dạng bậc thang (do nhiều data có cùng độ sai nên phẳng), ta cần chuyển mô hình từ bậc thang đó thành smooth để giúp máy tính biết hướng để tìm điểm tối ưu nhất (Surrogate loss)

### Mô hình support vector machines (SVM)
* Robust to noise: cần 1 liner predictor cách xa các điểm nhất để chống nhiễu (large margin)
* Hinge loss được thiết kế sao cho các điểm ở xa hàm linear nhất, để hiện thực hóa large margin
* Để đảm bảo cái large margin này ta cần hàm loss (Hinge loss): $y^t \in$ {$\pm 1$},$\hat{y}^t = sign(w \cdot x^t -b), l_1 = max(0, 1-y^t(w \cdot x^t-b))$
(Hàm nắn sign là để lấy dấu, dương: +1, âm: -1)
* Nếu margin > 1 thì không có lỗi, còn < 1 thì có lỗi
* Những điểm support vector là những điểm nằm trên 2 đường $w \cdot x - b = \pm 1$


**Nonlinear SVM: Kernel machines**
* Kernel ý nghĩa là tính simularity giữa 2 đặc trưng
* Ta chỉ cần lấy kernel để ra được simularity
* Sử dụng RBF

**Siêu tham số trong SVM**
* $C$ càng tăng thì margin càng nhỏ. $C$ lớn thì khoảng phạt lớn $\Rightarrow$ mô hình sẽ tìm cách học thuộc dữ liệu train
* Ý nghĩa của $\gamma$: https://www.youtube.com/watch?v=m2a2K4lprQw
* $\gamma$ còn là tham số đo độ cong của decision boundary

**Note tạm**
* Overfitting là tạo ra một model mặc dù có loss thấp nhưng khi đưa vào new data sẽ cho ra bad predictions (overfitting cũng xảy ra khi model phức tạp quá mức cần thiết và việc học thuộc)

## Session 6 

1. [**5** Point] Given a set of inputs $(X^1,\dots,X^N)$, we use PCA to represent them as $X^t = X_0 + z_1U_1+\dots+z_nU_n$ with $X_0$ the mean input and $U_i$ the orthonormal principal components. 
- [**2** Points] Write down equation for $X_0$, and equations for properties of $U_i,U_j$: unit length & mutual orthogonal. **Solution:** $X_0 = \frac{X^1+...+X^N}{N}$
- [**1** Point] We need to reduce the dimensions of $X^t$ to visualize them on 2D. What is the embedding vector ${\bf z}^t$ of $X^t$ if we use only 2 first principal components to represent it? What is the last feature of ${\bf z}^t$ in this case? **Solution**:
- [**1** Point] What are the main differences between representations by PCA and by sparse coding? **Solution**: PCA là phép biến đổi dữ liệu từ không gian nhiều chiều thành không gian ít chiều hơn, sparse coding là từ những đặc trưng rất nhỏ trích xuất ra features.
- [**1** Point] If we cluster the dataset into 3 groups with centroids $({\bf m}_1, {\bf m}_2, {\bf m}_3),$ what is the label embedding coordinates of $X^t$ if it belongs to cluster 2? **Solution**: 

2. [**1** Point] If we use each song as a feature to represent the users, what is the embedding coordinates ${\bf z}_A$ of user A in the dataset below? **Solution**: 
![](https://i.imgur.com/PseEFdZ.png)

3. [**3** Point] From the general form of linear predictors: $\hat{y}=\mathsf{s}(Wz+b)$ with $\mathsf{s}(\cdot)$ a transfer function for desired output interpretation. 
- [**1** Point] What is $W$ for 
    - 1 dimentional linear regression? **Solution**: weight là giá trị mô hình cần học để có được $\hat{y}$ tốt nhất
    - sofmax regression with 3 classes? **Solution**: $W$ mô tả $w$ của từng class, $W = [w_1,w_2,w_3]$
- [**1** Point] What is function $\mathsf{s}(\cdot)$ for 
    - 1 dimentional linear regression? **Solution**: hàm nắn đầu ra
    - SVM binary classification? **Solution**: Hàm nắn sign là để lấy dấu, dương: +1, âm: -1
- [**1** Point] Why logistic regression (for binary classification) has only 1 probability output while there are 2 classes? **Solution**: Vì logistic regression chỉ trả về 2 giá trị xác suất là 0 hoặc 1 (tương ứng với True và False)

4. [**2** Points] Evaluation procedure 
- [**1** Point] Explain the main use of the train--dev (validation)--test sets. **Solution**: Để tăng chất lượng model khi gặp nhiều unseen data hơn, người ta cắt training set ra thành 1 tập data nhỏ (validation set) và phần còn lại làm training set, validation set lúc này sẽ evaluate kết quả từ training set, sau đó sử dụng test set để double-check evaluation từ validation set.

- [**1** Point] What are the main similarity and differences between linear SVM and logistic regression? **Solution**: SVM tìm hyperplane margin tốt nhất (khoảng cách giữa support vectors và the line), còn logistic regression tìm decision boundaries và weight tối ưu nhất.

5. [**2** Points] There are **1100 items** and **one million users**. We need to build a content-based RecSys by extracting **120 features** ${\bf z}_i$ describing each item $i$ then learn a classifier ${\bf \theta}_j$ for each user $j$ to predict **ratings from 1 to 5 stars** of each user for each item. 
![](https://i.imgur.com/PseEFdZ.png)
- [**1** Point] How many classes do we need? **Solution**: 1100 classes
- [**1** Point] What is the size of $W$ if we use softmax regression $\hat{y}=s(Wz+b)$ for to classify ratings? **Solution**: $0<W<1$

6. [**2** Points] Nonlinear predictors have general form $\hat{y}=s(W'\phi(z)+b')$. For Multilayer Perceptrons (MLP) in particular: $\phi(z) = \gamma(Wz+b)$ recursively, each called a "hidden layer". 
- [**1** Point] Give explicit equation of an MLP with 2 hidden layers. **Solution**: $\hat{y} = s(W_2(\gamma(W_1z+b_1)+b_2)$
- [**1** Point] What are the parameters of the fully-connected layer in your equation? **Solution**: $W, bias$ 

7. [**2** Points] Kernel machines use "kernel trick" $\phi(z_i)\cdot\phi(z_j)  = \kappa(z_i,z_j)$. 
- [**1** Point] Explain why kernel trick is useful. **Solution**: kernel trick tiện lợi cho việc chuyển đổi mô hình từ tuyến tính sang phi tuyến tính và tính toán similarity giữa các data.
- [**1** Point] Explain how we can use kernel trick in feature-space prediction $\hat{y}=s(W^\phi\phi(z)+b)$ to turn a linear predictor into a nonlinear one. **Solution**: kernel trick thông qua hàm $\phi(z)$ đã bẻ cong không gian của mô hình

## Session 7 -- Optimization & training
**Tìm hàm số tối ưu $f$**

### Tối ưu performance, giảm sai số
* Hàm số tốt là hàm số có sai số ở trên tập train và tập test nhỏ
* Từ một điểm trong không gian hàm số, ta có thể tìm được 1 loss, việc cần làm là tìm ra $\theta$ sao cho loss nhỏ nhất
* Ý tưởng: ta cho 1 điểm bất kì, và ta cần trượt điểm số sao cho điểm loss trượt xuống thấp nhất
* Output: $y=\sigma(wx+b)$ (hàm đầu ra là sigmoid)

### Vectơ vận tốc (gradient vector) & đạo hàm

* $p = (p_1,...,p_n) \rightarrow v = (v_1,...,v_n) \text{ với } v_i = \displaystyle{\lim_{\Delta t \to 0}}\frac{\Delta p_i}{\Delta t}$
* Hướng của vectơ vận tốc là hướng thay đổi nhanh nhất, vì vậy cần tìm hướng của vectơ vận tốc của hàm loss để tìm ra được tốc độ thay đổi hàm số theo từng hướng. Để hàm loss nhỏ nhất thì ta cần phải đi theo hướng ngược lại của vectơ vận tốc
* Gradient vector: định nghĩa là tốc độ của hàm $J$ theo tham số $\theta$, gradient nằm trong không gian $\theta$
* Để tìm ra hướng của vector ta cần phải tìm đạo hàm của từng thành phần
* Vì loss cần đi ngược hướng với gradient nên $\theta$ cần phải giảm ($\theta = \theta - \eta$.gradient ,$\eta$ là số bước đi)
* Nếu điểm đó là tối ưu, thì gradient bằng 0

### Gradient descent 
**Trong neuraul network, người ta có giải thuật backpropagation để update weight, bias cho từng các layer**
* Những vấn đề:
    * Learning rate: quá nhỏ thì đi quá chậm, quá lớn thì điểm loss di chuyển quá loạn

Batch: lấy toàn bộ data để tính gradient descent
SGD: lấy 1 data point để tính gradient descent
Momentum: giúp điểm có thể trượt qua được các điểm local minimum 

### Loss surface
* Người ta cần hàm loss để làm cho bề mặt loss phẳng, làm cho việc trượt dễ dàng hơn
* Các điểm greadient = 0 ngoài điểm tối ưu
    * Local optimum (cực tiểu cục bộ)
    * Saddle point (điểm yên ngựa)
    * Flat area (vùng đồng bằng)
    * Narrow valleys (vùng thung lũng hẹp)

### Mở rộng
* Khi accuracy ở train set giảm nhưng validation set tăng thì ta cần phải early stopping
* Thay vì tìm các tham số weight, bias trong MLP, ta có thể sử dụng dropout (tắt/mở các units) khi huấn luyện mô hình để cho ra kết quả tốt hơn

## Session 8 -- Convolutional Neural Network
**Chuyên dùng để xử lý dữ liệu kiểu hình ảnh, video, âm thanh**

Similarity được tính bằng dot product (nhân từng phần tử của nhau), kết quả càng lớn thì càng tương tự nhau

### Trượt
Áp dụng filter như bình thường sẽ làm giảm kích thước của feature map
=> ta cần phải có viền ngoài $\left(\text{padding} = \frac{filter-1}{2}\right)$ để đặt filter lệch ra để giữ nguyên kích thước của feature map
* Input có bao nhiêu kênh thì số lượng filter là bấy nhiêu
* Để có thể nhìn được toàn bộ tấm hình mà không phải qua nhiều lần trượt filter, người ta đã nghĩ ra stride và max pool
* Stride: bước nhảy (khoảng cách chiếu các điểm trên input)
* Pooling: giảm kích thước bức ảnh nhưng vẫn giữ lại các thông tin quan trọng (tham số là pool size, mặc định 2x2 và stride = 2), trong pool size có thể lấy ra 2 giá trị là max pooling (sharp feature) và average pooling (smooth feature)

Trong fully connected, kích thước của filter + số bias = số lượng của trọng số

* Số lần trượt = kích thước input x kích thước filter x số filter

![](https://i.imgur.com/22n0rpW.png)

### Receptive field

![](https://i.imgur.com/KxO18qc.png)

Những layer về sau filter quét sẽ ra được những kết quả đại diện cho tấm hình (Chấm xanh trong layer 2 biểu diễn cho 1 phần góc trái của layer 1, và chấm vàng ở layer 3 biểu diễn cho toàn bộ tấm hình)

### DCNN

Từ những chi tiết nhỏ được phân rã từ những chi tiết lớn, ta có thể tạo ra được filter nhỏ để quét cho input

## Session 9 -- Recurrent neural networks

**Dùng để dự đoán chuỗi khái niệm theo thời gian (đưa ra các hành động, quyết định từ chuỗi các hành động trước đó)** 
* Ex: speech, audio, giá vàng, nhu cầu khách hàng...

Vùng khái niệm: là không gian giúp phân biệt các đặc trưng

* Sequential data: chuỗi dữ liệu theo thời gian
* Trong không gian khái niệm, khi ta di chuyển $Z$ ta sẽ tạo ra các khái niệm mới, tạo ra các chuỗi hành động hợp lý => tăng khả năng sáng tạo của máy tính (computer creativity)

### Di chuyển trong không gian khái niệm về toán học

$z \rightarrow z' = z + \Delta z$: Có thể bị lệch ra ngoài không gian nên ta cần 1 hàm nắn
$z \rightarrow z' = \sigma(Uz+W\Delta z+b)$
$h \rightarrow h' = \sigma(Uh+Wx+b)$: Mô hình cơ bản nhất
$h_{t-1} \rightarrow h_t = \sigma(Uh_{t-1}+Wx_t+b)$: Mô hình có thời gian (ta phải lấy output cũ để làm input mới để tạo ra được chuỗi các khái niệm theo thời gian)

### Vanilla RNN

* Lấy $h_{t-1}$ làm input để tính cho $h_t$ và cứ thế lặp lại.
* Các tham số $U,W$ giống nhau (Weight sharing in time)
* Backpropagation (through time) (BPTT): trải dữ liệu ra -> tính output -> truyền về các lỗi để tối ưu lại $U, W$

**Chú thích:**
```
model.add(SimpleRNN(3, input_shape=(5,4,))) 
``` 
* units = 3 là $x^T$ có 3 nodes, input shape 5 mốc thời gian, mỗi mốc thời gian là vector 4 chiều

**Vấn đề của BPTT:** Nếu có sai số ở xa, ta phải nhân rất nhiều gradients thì sẽ làm gradient rất lớn hoặc rất nhỏ, điều này làm cho input ở cuối câu không còn giữ được các đặc trưng của input ở đầu câu, và model chỉ học được các đặc trưng ở các state nó đang học và quên đi những đặc trưng ở những state đầu tiên.

**Ví dụ:** Đoạn đầu tiên “Mặt trời mọc ở hướng …”, ta có thể chỉ sử dụng các từ trước trong câu để đoán là đông. Tuy nhiên, với đoạn, “Tôi là người Việt Nam. Tôi đang sống ở nước ngoài. Tôi có thể nói trôi chảy tiếng …” thì rõ ràng là chỉ sử dụng từ trong câu đấy hoặc câu trước là không thể dự đoán được từ cần điền là Việt

$\Rightarrow$ Để khắc phục người ta đã đề xuất sử dụng các mô hình LSTM và GRU

* Dự báo ngôn ngữ phụ thuộc vào $Z$

### Khác nhau cơ bản giữa CNN và RNN
* RNN có kết nối thường xuyên trong khi CNN không nhất thiết phải có chúng. Hoạt động cơ bản của CNN là hoạt động tích chập, không có trong RNN tiêu chuẩn.
* Một CNN sẽ học cách nhận ra các mẫu trên không gian trong khi RNN rất hữu ích để giải quyết các vấn đề dữ liệu tạm thời.
* CNN đã trở thành phương pháp để giải quyết bất kỳ thách thức dữ liệu hình ảnh nào trong khi RNN được sử dụng cho lý tưởng cho phân tích văn bản và lời nói.

$\Rightarrow$ Nói một cách rất chung chung, CNN sẽ học cách nhận biết các thành phần của hình ảnh (ví dụ: đường, đường cong, v.v.) và sau đó học cách kết hợp các thành phần này để nhận ra các cấu trúc lớn hơn (ví dụ: khuôn mặt, vật thể, v.v.) trong khi RNN tương tự sẽ học cách nhận ra các mẫu theo thời gian. Vì vậy, một RNN được đào tạo để chuyển đổi lời nói thành văn bản trước tiên nên tìm hiểu các tính năng cấp thấp như ký tự, sau đó là các tính năng cấp cao hơn như âm vị và sau đó phát hiện từ trong clip âm thanh.

## Session 10 -- K-mean Clustering: Unsupervised Learning

#### Unsupervised learning: phương pháp mà data không cần các mẫu y (học máy không cần giám sát) mà từ input tự đưa ra được dự báo

* Segmentation: phân vùng tấm ảnh thành từng class

#### Các ứng dụng:
![](https://i.imgur.com/kZ7QOKN.gif)

#### Clustering (gom cụm)

* Trong K-mean: mỗi cụm được biểu diễn bằng centroid
* Khởi tạo centroid: Chọn random các điểm bất kì trong data để làm centroid, sau đó tính toán khoảng cách, cập nhật lại centroid mới
* Phân chia các cluster thông qua intracluster, intercluster
* Giải thuật luôn dừng lại khi tổng khoảng cách intercluster là nhỏ nhất
* Elbow method: chọn $k$ -> tính tổng khoảng cách
* Silhouette method: tính SA của các centroid, silhouette càng lớn và cắt các miền giá trị SA thì mô hình càng tốt

## Session 11 - MDP: Planning

##### $X \rightarrow Z \rightarrow \hat{Y} \rightarrow A$

* Các định nghĩa cơ bản:
    * Enviroment là những thứ mà ta có thể thấy được
    * Agent là bộ não của AI để xử lý enviroment đó
    * $O$ (Observation) nằm trong enviroment, $Z$ nằm trong agent, thì $Z$ sẽ đơn giản hơn $O$ hoặc bằng $O$ tùy thuộc vào $b$
    * A plan = sequence of actions to efficiently achieve a goal $\rightarrow$ sequential decision making

* **Transition model**: mô hình chuyển đổi trạng thái, ta biết được hành động sẽ dẫn tới trạng thái nào đạt được kết quả tiếp theo tốt hay xấu cho plan để quyết định đưa ra hành động

### **Mô hình MDP**: 

* Tại mỗi state $S_t$,mỗi hành động $A_t$ sẽ tương ứng với 1 state $S_{t+1}$ và 1 reward $R_{t+1}$, từ đó mô hình có thể đưa ra 1 chuỗi quyết định đem lại kết quả tốt nhất.
* Gồm 5 thành phần $\langle S,A,P,R,\gamma\rangle$
    * S (State): là tập hợp các trạng thái
    * A (Action): là tập hợp các hành động
    * P (Probability): xác suất mà tại trạng thái $s$, hành động $a$ có thể dẫn tới trạng thái $s'$ hoặc là goal
    * R (Reward): là phần thưởng nhận được sau mỗi hành động $a$
    * $\gamma \in [0;1]$: là hệ số chiết khấu, giúp ta biết sự khác biệt giữa $r$ hiện tại và tương lai.
* Optimal plan:
    * policy đưa ra $a$ tốt nhất cho mỗi state
    * action value $q^{\pi^*}(s,a)$, có s có a có thể đưa ra được discounted sum of future reward nếu làm theo $\pi^*$ (là ý nghĩa, định nghĩa của $q^\pi$)
* Để biết được hành động nào tốt ta phải cộng tất cả các reward lại $G^\pi(s)$, rồi chia trung bình $q^\pi(s,a)$ để tìm hành động nào có được reward lớn nhất => để có được hành động tốt: optimal policy: $\pi^* = argmax(q^\pi(s,a))$
* **Lưu ý:** Chỉ áp dụng mô hình MDP khi số lượng state có giới hạn, không  quan tâm tới state của quá khứ

## Session 12 -- Final test

1.
1.1
* T: nhận diện khuôn mặt, input là image, output là tên đối tượng
* E: dataset là gồm image và label tương ứng
* F: hàm tuyến tính
* P: chuẩn đánh giá accuracy
* A: giải thuật DCNN
1.2
* T: input là ma trận item và user có sẵn, output là user (chưa có sẵn item phù hợp) nào hợp với những item nào
* E: dataset là gồm ma trận item và user tương ứng có sẵn và rating khi ta đề xuất cho user chưa có sẵn
* F: hàm tuyến tính
* P: dựa vào rating của user
* A: giải thuật kNN
1.3
* T: input là data của customer, ouput là nhóm đã phân loại
* E: dataset có data của customer
* F: hàm tuyến tính
* P: chuẩn đánh giá là: sum of the squared distances between each training instance and its closest centroid
* A: giải thuật clustering
1.4
* T: input là những dòng chữ nhận xét, output trả về nhận xét đó tốt/xấu như nào
* E: dataset là những dòng nhận xét và label tương ứng (good/bad/neutral) 
* F: hàm tuyến tính
* P: chuẩn đánh giá accuracy
* A: giải thuật RNN/LSTM

2.
2.1 Cho filter trượt qua, ta nhân từng số ở input vào kernel rồi cộng lại

2.2 Vì những outputs đó là output của filter ở layer trước đó

2.3 Padding có nghĩa là thêm viền ngoài của ảnh, tác dụng là làm cho ảnh không thay đổi kích thước sau khi filter trượt qua

2.4 Pooling: giảm kích thước bức ảnh nhưng vẫn giữ lại các thông tin quan trọng, trong pool size có thể lấy ra 2 giá trị là max pooling (sharp feature) và average pooling (smooth feature)

2.5 Stride: là bước nhảy khi quét (vd stride = 1 thì filter sẽ trượt qua từng ô, stride = 2 thì filter sẽ trượt cách 1 ô)

2.6 Effective receptive field: thuật toán sẽ tìm ra vùng quan trọng của ảnh để phân biệt được các ảnh với nhau

3.
3.1 Sequential data nghĩa là data tạo thành chuỗi (các data phụ thuộc vào nhau) theo thời gian

3.2 Đây là mô hình có thời gian, ta phải lấy output cũ để làm input mới để tạo ra được chuỗi các khái niệm theo thời gian, nghĩa là lấy $h_{t-1}$ làm input để tính cho $h_t$ và cứ thế lặp lại

3.3 Backpropagation-through-time là kỹ thuật dựa trên độ dốc của time để đào tạo model

3.4 Nếu có sai số ở xa, ta phải nhân rất nhiều gradients thì sẽ làm gradient rất lớn hoặc rất nhỏ, điều này làm cho input ở cuối câu không còn giữ được các đặc trưng của input ở đầu câu

3.5 Ta sẽ sử dụng LSTM và MLP với giá trị layer cuối có Dense = 3, activation = softmax

4.
4.1 
* S (State): là tập hợp các trạng thái
* A (Action): là tập hợp các hành động
* P (Probability): xác suất mà tại trạng thái $s$, hành động $a$ có thể dẫn tới trạng thái $s'$ hoặc là goal
* R (Reward): là phần thưởng nhận được sau mỗi hành động $a$
* $\gamma \in [0;1]$: là hệ số chiết khấu, giúp ta biết sự khác biệt giữa $r$ hiện tại và tương lai.

4.4
* Policy đưa ra $a$ tốt nhất cho mỗi state
* Action value $q^{\pi^*}(s,a)$, có s có a có thể đưa ra được discounted sum of future reward nếu làm theo $\pi^*$ (là ý nghĩa, định nghĩa của $q^\pi$)

4.5 Thuật toán này tính xác suất từ 1 state ngược về lại state trước đó, nên đã dự đoán được far future

4.6 $\gamma = 1$: reward của action sẽ bằng với reward của tương lai, còn $\gamma = 0$ thì reward của action hiện tại so với tương lai sẽ mất hết

5.
5.1.
**5 phương pháp trích xuất đặc trưng**
* **Hand crafted:** ta có thể dùng phương pháp này bằng sự hiểu biết của con người trích xuất các đặc trưng thủ công để cho máy tính nhận dạng ra các đặc trưng của input.
* **Spare coding:** từ các đặc trưng rất nhỏ có thể tạo ra được các features.
* **PCA (phép phân tích thành phần chính):** giúp ta biến đổi tập hợp dữ liệu từ một không gian nhiều chiều thành một không gian ít chiều hơn (2 hoặc 3 chiều) nhằm tối ưu hóa trong việc so khớp.
* **Convolutional kernels:** Kernels sẽ trượt hết tấm ảnh để tính toán và đưa ra feature của bức ảnh.
* **Word embeddings (Word2vec):** Data ở đây là chữ sẽ có những đặc trưng được tính theo con số (càng lớn là càng giống), và từ 1 model được huấn luyện thì ta có thể cho ra từ giống như ý muốn của người tìm kiếm nhất.

5.2 
* Linear: $y = W.x . b$, clustering, CNN, RNN, MDP 
* Nonlinear:
**Có 4 phương pháp chính:**
* Feature engineering: thiết kế hàm $\phi(z)$
* MLP (Neural Network): xếp chồng các mô hình lên (deep learning $z \Rightarrow z'=\phi(z) \Rightarrow z''=\phi(z')...$)
* Kernel machine
    * Kernel trick: ta chỉ cần lấy kernel của 2 nhóm mà không cần phải bẻ cong bằng hàm $\phi$ rồi tính dot product.
* Locally linear
    * Decision Tree: chia nhỏ không gian lớn thành nhiều không gian nhỏ hơn để áp dụng các linear predictors riêng biệt.

5.3 Sự khác nhau quan trọng giữa các linear predictor là input đưa vào, và mô hình học có giám sát và mô hình không giám sát

5.4 Dự đoán $\hat{Y}$ là xác suất tính được từ function cao nhất để agent đưa ra dự đoán

6. Chọn user A, training set là $\theta_A(1),\theta_A(2),\theta_A(4),\theta_A(5)$ và label tương ứng. 
7.
7.1 
* Range value action là lên, xuống, phải, trái
**Bellman's Optimality Equations**
$\forall s,a: ~ Q(s,a) = \sum_{s'} P(s'|s,a)\big[R(s,a,s') + \gamma \max_{a'}(Q(s',a'))\big]$
* Để tính xác suất thắng thua ta cần phải cho agent chơi đi chơi lại nhiều lần