---
# System prepended metadata

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

---

---
tags: COTAI LHP
---

# Lecture Notes ML4AI 2021

## Session 12 -- Final Exam

<br>

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

<br>

CoTAI AI Training Program for Highschool Students

© [CoTAI](https://gem.cot.ai) 2021 

---

Open book. Choose to answer as many questions as possible, as concisely as possible. Ask instructors if you have difficulty in understanding the questions.

**Questions**

1. [**8** Points] The unified TEFPA framework to build a ML model: task $\mathcal{T}$, experience $\mathcal{E}$, function space $\mathcal{F}$, performance $\mathcal{P}$, and algorithm $\mathcal{A}$ to search. What are the elements in TEFPA framework...

    - Experience $\mathcal{E}$: n cặp ví dụ $\mathcal{D}=\{ (x^t,y^t) \}_{t=1}^N$ được truyền cho máy 
    - Tast $\mathcal{T}$: input là x, output là dự báo $\hat{y} = \mathcal{f} (x)$
    - function space $\mathcal{F}$: là không gian hàm số nơi có các hàm số $\mathcal{f}$
    - performance $\mathcal{P}$: chuẩn đánh giá để đánh giá độ tốt của mô hình
    - algorithm $\mathcal{A}$: thuật toán tối ưu là các để có tham số tối ưu như Gradient Descent

- 1.1 [**2** Point, 3.1] to build a face recognition model using a DCNN?

    - Step 1: học bộ kernel tượng trưng cho khuôn mặt
    - Step 2: Trượt kernel khuôn mặt qua tấm ảnh sẽ phát hiện được mặt

- 1.2 [**2** Point, 3.1] to build a RecSys? (using one of the models you have learned: item-based, user-based, content-based, MF)
    - Phương pháp item-based:
        - Step 1: Ta lấy các đánh giá của mọi người về một item nào đó để làm đặc trưng cho item đó cho ta utility matrix.
        - Step 2: Tính cosine similarity giữa các item.
        - Step 3: lấy cosine similarity của 2 người đang xét nhân lần lượt với đánh giá của họ rồi chia cho tổng cosine similarity đó..
- 1.3 [**2** Point, 3.1] to build a customer segmentation model using k-means?
    - Step 1: chia ra k nhóm khách hàng, tương ứng số centroid
    - Step 2: Gán mỗi input(là khách hàng) vào cluster có centroid gần nó nhất
    - Step 3: Nếu việc gán dữ liệu vào từng cluster ở step 2 không có gì thay đổi thì dừng.
    - Step 4: Cập nhật centroid cho từng cluster (trung bình cộng của tất cả dữ liệu)
    - Step 5: quay lại step 2 
- 1.4 [**2** Point, 3.1] to build a sentiment analysis model (good, bad, neutral comments) using RNN+Softmax Classifier?
    - Cần người đánh mẫu các comment cho ta một không gian Z
    - Cộng thêm một lượng nhỏ $\Delta Z$ để di chuyển trong không gian trên, dùng đạo hàm tìm về nơi thấp nhất.

2. [**6** Points] Convolutional filters (or kernels)
- 2.1 [**1** Point, 1.1, 3.2] How do we extend them from dot product?
    - dùng padding 
- 2.2 [**1** Point, 1.1, 3.2, 3.4] Why do we call their outputs "feature maps"?
    - Vì có kích thước về không gian và là các đặc trưng được xử lý ra
- 2.3 [**1** Point, 3.2] Explain padding: how to do & main purpose
    - Padding: bằng cách bọc thêm vào viền của ảnh ban đầu các lớp chứa con số 0.
    - Để: giúp giữa nguyên hoặc tăng kích thước đầu vào trong quá trình filters điều này giúp tránh thất thoát thông tin trên góc cạnh.
- 2.4 [**1** Point, 3.2] Explain pooling: how to do & main purpose
    - To do: gộp 4 ô dữ liệu ban đầu thành 1 ở toàn bộ tấm hình
    - Purpose: giảm 2 lần kích thước input, giúp mô hình vững chác trước các sai lệch nhỏ. 
- 2.5 [**1** Point, 3.2] Explain stride: how to do & main purpose
    -  To do: tăng số bước của kernel
    -  Purpose: thu nhỏ kích thước dữ liệu ban đầu
- 2.6 [**1** Point, 3.2, 3.4] Explain their **effective** receptive field: why do they produce highly absstract features?

    - Vì từng điểm dữ liệu của receptive field mang đặc trưng của cả vùng dữ liệu rộng lớn hơn ban đầu. 

3. [**6** Points] Recurrent neural networks (RNNs) can  be used for sequential modeling.
- 3.1 [**1** Point, 3.2] What does sequential data mean?
    -  Một chuỗi các sự kiện theo thứ tự thời gian.
- 3.2 [**1** Point, 1.1, 3.2, 3.4] Explain each element in this basic equation of RNNs $h_t = \mathsf{\gamma}(Ah_{t-1}+Wz_t)$ 
- 3.3 [**2** Point, 1.3, 2.1, 3.2] WWhat does back-propagation-through-time mean, why do we need it instead of using plain back-prop, and how does it work for training RNNs?
- 3.4 [**1** Point, 1.3, 3.2] Explain vanishing gradient problem for simple RNNs.
    - ta truy về càng nhiều là thì gradient càng nhỏ đi(Vanishing) - ta sẽ chỉ sửa được những dữ liệu ở gần ở xa sẽ bị quên đi(short memory)
- 3.5 [**1** Point, 3.1, 3.3] If we want to classify the sentiment of each user comment (good, bad, neutral) at the end of each sequence using RNN+Softmax classifier: explain briefly the model architecture.

4. [**6** Points] Planning in Markov Decision Process (MDP) $(S,A,T,R,\gamma)$.
- 4.1 [**1** Point, 3.1, 3.2] Explain 5 elements in MDP model (equation of each element if available).
    - S: là tập hợp các trạng thái
    - A: là tập hợp các hành động có thể thực hiện
    - P: là xác suất mà hành động a tại thời gian t thay đổi tạng thái s sang s' (s' tại thời gian t+1)
    - R: là phần thưởng đại diện cho khả năng thành công của 
    - $\gamma$: là chiết khấu thễ hiện sự khác biệt của reward của mỗi step các mục tiêu.
- 4.2 [**1** Point, 3.2] Following a policy $\pi(s)$ to generate a trajectory of 10 time steps $(s_t,a_t,s_{t+1},r_{t+1})$. Compute the return. Equation of $a_t$?
    - $q^\pi(s,a) = \frac1{K} \sum_{k=1}^K \Big(r_1 + \gamma G^\pi_k(s') \Big)$ 
- 4.3 [**1** Point, 1.2, 3.2] Repeat for 10 days: from $s_0 = \text{HOME}$ take action $a_0 = \text{GET_BUS}$ with cost $r_1 = 6000 \text{VNĐ}$ then following policy $\pi(s)$ to generate $K=10$ trajectories, each with total cost $G_k$. Compute the average cost of taking bus then following $\pi$: $Q^\pi(\text{HOME, GET_BUS})$.
- 4.4 [**1** Point, 1.1, 1.3, 2.1, 3.2] How do we compute an optimal plan (i.e., optimal policy $\pi^*$) of a known MDP $(S,A,T,R,\gamma)$?
    - Bằng công thức bellman $q^*(s,a) = R(s,a) + \gamma \sum_{s'} P(s'|s,a)\max_{a'} q^*(s',a')$
- 4.5 [**1** Point, 3.2] Why do we say that the action value function $Q^\pi(s,a)$ gives predictions into very far future?
- 4.6 [**1** Point, 1.2, 3.2] What is the meaning of action value function when we set $\gamma = 1$? $\gamma = 0$?

    - $\gamma = 1$: không có sự thay đổi reward qua cacc time step
    - $\gamma = 0$: reward bắng 0 cho các ô không phải goal

5. [**7** Points] Unified ML models
$\text{Input } X \xrightarrow[B_{\beta}]{\text{Features}}\text{ Embedding Coordinates }Z \xrightarrow[P_{\theta}]{\text{Predictor}}\text{ Predictions }\hat{Y} \xrightarrow[{\pi^*}]{\text{Policy}}\text{ Action }A$
- 5.1 [**2** Points] List all *taught* algorithms for feature extraction and their main ideas.
    + Hand-crafted features: là phương pháp lấy toàn bộ dữ liệu gốc làm các đặc trưng, ví dụ với một bức ảnh là toàn bộ các điểm pixel.
    + Sparse coding: là phướng pháp lấy các điểm rời rạc trong input so sánh với các góc cạnh rời rạc của bộ dữ liệu cơ sở từ đó cho ta đặc trưng là sự giống nhau của từng góc cạnh rời rạc với điểm của input (từ $0.0$ dến $1.0$)
    + PCA: ta xác định các vector đặc trưng bằng cách giảm số chiều của vector input thông qua việc chỉ giữ lại những vector chứa nhiều thông tin quan trọng
    + Convolution kernels: là phương pháp dùng một ma trận chập trượt qua dữ liệu input (bằng cách nhân vectoc) cho ta output là vector đặc trưng
    + Word2vec: ta so sánh mức tương quan giữ một từ input và một bộ các từ thông qua đó cho ta một vector đặc trưng. 
- 5.2 [**2** Points] List all *taught* algorithms for making predictions and their main ideas. 
- 5.3 [**2** Points] What are the main *general* differences between linear predictors? And in your opinion why do we need different algorithms?
    - Vì có bài toán phức tạp và đơn gian, nhiều kiểu dữ liệu (ảnh, âm thanh,...) , nên ta cần các thuật toán khác nhau.
- 5.4 [**1** Points] For MDPs, what are the predictions $\hat{Y}$ used to make decisions $A$?
    - optimal policy $\pi$
6. [**2** Points] RecSys
![](https://i.imgur.com/PseEFdZ.png)
We build item embeddings ${\bf z}_i \in \mathbb{R}^2$ as in table, and use **softmax regression** to predict ratings 1 to 5. Choose a specific user $X\in \{A,\dots,F\}$, what is the training set for learning $\theta_X$? What are the parameters $\theta_X$ to be learned (with their shapes)?

    - traing set: Các cặp (users, item's feature vectors) dã biết

7. [**6** Points] MDP Planning for playing Chess. Let rewards = 1 for winning, -1 for losing, and 0 for a draw or unfinished game, and no discount. 
- 7.1 [**2** Points] What is the range of value of the optimal action-value function $Q^*(s,a)$, and how to derive probability of win/loss from it?
- 7.2 [**2** Points] If we use all the games already played in history to compute $Q^*(s,a)$, explain the method?
- 7.3 [**2** Points] Because there are so many state and action pairs $(s,a)$, we need to use *learning* to approximate and generalize for all $(s,a)$ pairs. If we use MLP to learn $Q^*(s,a)$, what is the dataset and possible network structure?


## Session 6 -- Midterm Exam

**Question 1**
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_2+\cdots+X_n}{n}$, $(\hat{U_i,U_j})=90^0$, unit lenght: $\sqrt{U_i^2-U_j^2}$


- [**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**: với sparse coding ta không giảm chiều dữ liệu, mà lấy các điểm rời rạc . PCA là lấy các đặc trưng quan trọng.
- [**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**: ${\bf m}_2$

**Question 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**: [5,5,$\theta_a$,1,1]
![](https://i.imgur.com/PseEFdZ.png)

**Question 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**: 1 con số
    - sofmax regression with 3 classes? **Solution**: $W=[w_1,w_2,w_3]$
- [**1** Point] What is function $\mathsf{s}(\cdot)$ for 
    - 1 dimentional linear regression? **Solution**:  không cần có hàm nắn.
    - SVM binary classification? **Solution**: sigmoid, relu
- [**1** Point] Why logistic regression (for binary classification) has only 1 probability output while there are 2 classes? **Solution**: Vì chỉ cần 1 output là ta biết được dữ liệu thuộc class nào.

**Q4**
[**2** Points] Evaluation procedure 
- [**1** Point] Explain the main use of the train--dev (validation)--test sets. **Solution**: fit tập train cho ta model, tập validation tách từ train set để chọn ra mô hình tốt nhất từ train set rồi chạy trên test set. Nếu tốt trên test set, mô hình này tốt.
- [**1** Point] What are the main similarity and differences between linear SVM and logistic regression? **Solution**: điểm giống là, classifier là đường thẳng. Điểm khác là SVM tìm ra threholds có margin lớn nhất.

**Q5**
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**: 5
- [**1** Point] What is the size of $W$ if we use softmax regression $\hat{y}=s(Wz+b)$ for to classify ratings? **Solution**: [1,2,3,4,5]


**Q6**

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**: $𝒔( W_2(𝜸(𝑊_1𝒛+𝒃_1)+𝒃_2)=\hat{𝒚}$
- [**1** Point] What are the parameters of the fully-connected layer in your equation? **Solution**: $W_1, W_2, b_1, b_2$

**Q7**
. [**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**: Vì ta không cần phải chuyển sang  chiều không gian cao hơn.
- [**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**: tính khoảng cách giữa từng điểm dữ liệu.

## Session 1 -- Linear Predictors

Bản tóm tắt session 1 lecture
+ Phần lí thuyết:
  + Cái nhìn tổng quan về cách từ input $x$ mà máy tính xử lí cho ra output $\hat{y}$
  + Khái niệm cơ bản của việc chiết xuất đặc trưng từ input $X$ thông qua $Z$ cho ta dự báo $\hat{Y}$
  + Các loại dự báo: liên tục và phân nhóm
  + linear regression
  + Sự khác biệt giữa gom nhóm theo mình và theo máy (Classification và clustering)
  + So khớp bằng tích chấm, tích khoảng cách thẳng Euclidean, tính góc.
  + Lý thuyết cơ bản của classification bằng kNN
+ Phần Coding:
  + áp dụng mô hình linear regression vào bài tập
  + thư viện sklearn

**Notes của Thầy:**
- Em tập gõ các phương trình Toán LaTeX dần nhé. Ở trên thầy có sửa làm mẫu. Dùng [trang này](https://www.codecogs.com/latex/eqneditor.php) vừa làm mẫu vừa học. Không biết gõ equation nào thì post lên Slack hỏi.

## Session 2 -- Feature Extraction

+ Phần lí thuyết:
    + 5 phương pháp chiết xuất đặc trưng gồm:
        + Hand-crafted features: là phương pháp lấy toàn bộ dữ liệu gốc làm các đặc trưng, ví dụ với một bức ảnh là toàn bộ các điểm pixel.
        + Sparse coding: là phướng pháp lấy các điểm rời rạc trong input so sánh với các góc cạnh rời rạc của bộ dữ liệu cơ sở từ đó cho ta đặc trưng là sự giống nhau của từng góc cạnh rời rạc với điểm của input (từ $0.0$ dến $1.0$)
        + PCA: ta xác định các vector đặc trưng bằng cách giảm số chiều của vector input thông qua việc chỉ giữ lại những vector chứa nhiều thông tin quan trọng
        + Convolution kernels: là phương pháp dùng một ma trận chập trượt qua dữ liệu input (bằng cách nhân vectoc) cho ta output là vector đặc trưng
        + Word2vec: ta so sánh mức tương quan giữ một từ input và một bộ các từ thông qua đó cho ta một vector đặc trưng.
    + Một số cơ sở lý thuyết:
        + Trong PCA: ta output là bức ảnh được tính bằng cách lấy trung bình công với các đặc trưng quan trong. Ví dụ như trong Cat creator
        + Chuyển các d-tensor thành thành vector trước khi đưa vào các thuật toán (Flatten)
+ Phần Coding:
    + Các bước thực hiên PCA bằng Sklearn: Khởi tạo StandardScaler -> Áp dụng StandardScaler -> khởi tạo PCA -> Áp dụng PCA
    + Thực hành PCA với word embedding và face embedding để giảm chiều dữ liệu
    + Tính cosine_similarity giữa các từ, các khuôn mặt
    + Vẽ heatmap

## Session 3 -- Nonlinear Predictor

**Tóm tắt SS3:** 
- Do trong hầu hết các bài toán các điểm dữ liệu đầu vào phân bố ở các vị trí phức tạp mà ta không thể phân vùng chúng bằng Linear Predictors do đó ta cần có các phép transformation để biến chúng thành mô hình cơ bản và có thể xài lại các thuật toán Linear
- Transformations:
    + Linear: đầu vào và đầu ra đều phẳng, được thực hiện bằng phép nhân ma trận: Z=AZ', và các bước lật -> xoay -> lật, thể hiện qua công thức $M=U.D.V^{T}$
    + Nonlinear: chuyển từ dữ liệu phẳng qua không phẳng bằng cách nhân ma trận và bóp méo đầu ra: $\phi =\gamma( Az+b)$ (mô hình MLP), với $\gamma$ là các activation function như hàm sigmoid, softmax... hoặc các cách bên dưới.

#Với 2 cách ta có thể nhân nhiều lần cho ra mạng neron 

+Kernel trick:
+ biến đổi từ một không gian ban đầu không phân biệt tuyến tính sang phân biệt bằng cách nhân hai hàm $\phi(z^{1}) . \phi(z^{2})$

+Locally linear: chia không gian lớn thành nhỏ

#Decision Boundary: tồn tại những vùng màu trắng: Niềm tin bằng nhau,Không xác định thuộc nhóm nào VD:$w^1Z + b^2= w^2Z + b^2$ do các noise dot khi này khi khác

**Coding**
+ các bước:
    + B1:Random Weight
    + B2:$\hat{y}$=s(wz+b)
    + B3:Tính loss($\hat{y}$,y)(sai số)
    + B4:Chọn lại Weights (optimizer)

## Session 4 -- Recommender Systems


**Giới Thiệu**
- RecSys hay hệ khuyến nghị đang ngày càng trở nên phổ biến song song với sự phát triển của khoa học công nghệ và được xem như một core engine trong nhiều nền tảng kinh doanh góp phần làm nên thành công của nhiều ông lớn như amazon, facebook,...
- Một hệ khuyến nghị dựa trên hai nền tảng cơ bản:
    - Generalization counts: khát quát hóa mối quan hệ các sản phẩm và các khách hàng
    - Personalization counts: cá nhân hóa theo từng khách hàng
- Đầu vào của bài toán hệ khuyến nghị có thể là:thông tin của người dùng như các giao dịch, sở thích,... thông tin sản phẩm như các thuộc tính, đặc tính của... hay những thông tin khác liên quan đến bối cảnh như thời gian, thời tiết, ...
- Đầu ra là: dự báo đánh giá của người dùng về sản phẩm để gợi ý cho họ các sản phẩm mà họ có khả năng sẽ thích cao.
- Loại RecSys: gồm hai loại cơ bản là dự trên bộ nhớ có sẵn(memory-based model) và Model-based
    * Memory-Based model gồm Collaborative Filter, Personalized Recommender, và loại kết hợp.
- Một vấn đề thường gặp là long-tail issues: một số sản phẩm được yêu thích và chọn sử dụng bởi phần đông người dùng trong khi các sản phẩm còn lại phù hợp với một nhóm người dùng nào đó nhưng độ hài lòng của họ lại cao hơn nhóm trên.


**Memory-based Model**
I. Collaborative Filter(CF)
* Dựa trên mối quan hệ giữa các khách hàng và sản phẩm để đánh giá tương quan từ đó chọn ra sản phẩm phù hợp đề gợi ý cho khách hàng. (Ưu điểm: có tính tương quan giữa người dùng và sản phẩm >< Nhược điểm: không có tính cá nhân hóa)
    * Item-Based CF: ta coi người dùng như các đặc trưng để lấy ra tọa độ nhúng Z là các item sau đó tính cosine similarity giữa các item rồi từ cosine similar đánh giá độ hài lòng của người dùng với sản phẩm bằng cách sử dụng độ hài lòng có sẵn với các sản phẩm khác.
    * User-Based CF: ngược lại ta coi các item là đặc trưng để lấy Z là người dùng sau khi scale matrix (lấy các giá trị trừ đi trung bình rồi lắp 0 vào khoảng trống). ->Tính cosine similarity giữa người dùng. -> Chọn ra hai người dùng giống nhất đã đánh giá về cùng sản phẩm đang cần rating cho một người khác. -> Tính bằng phương pháp giống như trên( lấy cosine similarity của 2 người đang xét nhân lần lượt với đánh giá của họ rồi chia cho tổng cosine similarity đó)
    * Matrix Factorization: từ matrix của hàng triệu người dùng và sản phảm ta phân rã ra 2 matrix đặc trưng cho người dùng và sản phẩm sao cho khi nhân lại ta được matrix ban đầu.

II. Personalized RecSys
* Sử dụng thêm các thông tin về môi trường, hoàn cảnh,... để cá nhân hóa các gợi ý.
    * Ví dụ: ta có các đánh giá của một người dùng về các bài nhạc($\theta$). Có các đặc trưng của bài nhạc(z). Dưa ra dự báo bằng công thức: $\theta_k.z_i+b_k$ (Với b là độ lệch)

III. Hybrid RecSys
* Kết hợp cả hai loại trên.

## Session 5 -- Evaluation: Metrics and losses


**Evalution Metrics**
- Để đánh giá các mô hình là tốt hay không thì ta cần các chuẩn đánh giá (Evaluation metrics) trả ra hàm mất mát (loss function) hoặc các hàm error, cost, objective... để tối ưu hóa được các predictor.
- Quà trình huấn luyện và đánh giá ra một mô hình gồm:
    - Chia bộ dữ liệu(dataset) thành Training set và Test set.
    - Huấn luyện training set cho ra môi hình
        - Chia training set thành thành training set nhỏ hơn và validation set.
        - Training set nhỏ huấn luyện ra một số môi hình
        - Validaion set chọn ra môi hình tốt nhất để chạy ở test set
    - Chạy mô hình đó ở test set để dánh giá
- Một mô hình tốt thì cần khát quá hóa tốt hay dự đoán tốt trên những data khác. Để so sánh khả năng khái quát hóa của các mô hình (trong bài toán clasifier) thì ta có thể dựa vào margin của nó. Large-margin thì khả năng khái quát hóa tốt.
- Chuẩn đánh giá của bài toán Regression có thể là MSE, RMSE, MAE, MAPE, ... Mỗi chuẩn đánh giá có ưu nhược điểm riêng. Ví dụ như MAE không bị ảnh hưởng nhiều bởi các khoản phạt  nhưng khó tối ưu.
- Chuẩn đánh giá của bài toán Classifier khi dữ liệu đầu vào cân bằng là Accuracy bằng cách đếm số lần môi hình dự đoán sai. 
- Chuẩn đánh giá của bài toán Classifier khi dữ liệu đầu vào <mark>bị nhiễu</mark> (Hung Ngo: bị mất cân đối unbalanced) là $F_\beta score = (1^2+\beta^2)\frac{Precision.Recall}{Precision+Recall}$ trong đó:
    - Presicion: là tỉ lệ thể hiện số lượng item được chọn là true trên tổng số item được chọn: $\frac{\sum TP}{\sum(TP+FP)}$
    - Recall: là tỉ lệ thể hiện số lượng true item được chọn trên tổng số true item: $\frac{\sum TP}{\sum(TP+FN)}$
- Hoặc là phương pháp Receiver Operating Characteristic (ROC) dựa trên tương quan giữa  true positive rate và false positive rate. Dùng area under ROC curve (AUC) hoặc G-Mean để tối ưu hóa.
- Chuẩn đánh giá cho bài toán Object Detection và segmentation là Intersect over union(IoU)
- Chuẩn đánh giá cho Translation là BLEU
**From mistake to suttogate losses**
- Lý do chính mà ta cẩn chuyển từ các chuẩn đánh giá sang hàm loss là để có thể tối ưu hóa được mô hình. Một trong những phương pháp là Gradient Descend.
- Linear predictors thường cho ta hàm loss lồi (convex losses).Ex: logistic loss, binary categorical cross-entropy loss, log-loss, ...
**Support Vector Machine**
- Đề vẽ decision boundary phân loại các điểm dữ liệu thì ta vẽ trước hai đường đi qua các điểm dữ liệu khác nhau và gần nhau. Khoảng trống giữa hai đường này gọi là margin, các điểm trên đường này là support vector và decision boundary sẽ nằm giữa hai đường này.
- Ý nghĩa của margin: Margin càng lớn thì mô hĩnh sẽ càng robust to noise.
- Hàm Hingle loss: 
    - $y^t$(các điểm dữ liệu thực tế) thuộc hai nhãn 1 và -1 hai bên bờ của Decision Boundary
    - Decision boundary được coi là 0
    - $\hat{y}^t = sign(wx^t - b)$ là dự báo với hàm sign nắn dấu kết quả đầu ra. 
    - $l_t = max(0,1-y^t(wx^t-b)) = max(0,1-y^t.\hat{y}^t)$.
    - Nếu dự đoán sai $y^t.\hat{y}^t$ sẽ âm và $l_t$ nếu lớn hơn 1 sẽ là khoảng phạt để chỉnh sửa margin.
- Nonlinear SVM: kernel trick in kernel machine:
    - kernel trick: ta thông qua hàm $\phi(x)$ chuyển các feature thành x' rồi dot product $\phi(x).\phi(x')$
    - Nolinear SVM: Ta tính k(z,z') theo các công thức. VD với polynomial kernel $k(z,z') = (z.z'+c)^d$ với n là số chiều không gian, $z=(z_1,\dots,z_n)^\top\in\mathbb R^n$ 

## Session 7 -- Optimization & training

**Giới Thiệu**
- Các bài toán machine learning lấy TEFPA làm khuôn khổ trong đó: 
    - Task $\mathcal{T}$: là thông tin input
    - Experience $\mathcal{E}$: là trải nghiệm mà máy có được trong quá trình fit dữ liệu
    - Function space $\mathcal{F}$: là các mô hình có được sau khi fit.
    - Performance $\mathcal{P}$: là đánh giá các mô hình
    - Search algorithm $\mathcal{A}$: là quá trình tìm ra mô hình tối ưu.
 
**Search Algorithm**
- Mô hình tối ưu nhất là mô hình có sai số nhỏ nhất.
- Tối ưu một hàm số là tối ưu tham số của của hàm đó. Cách làm của ta là chọn ngẫu nhiên các tham số (giúp ta vẻ được không gian tham số $\theta$ và loss surface) rồi tính loss của chúng để chọn ra tham số tối ưu $\theta^* = \arg\min J(\theta; X,\bf y)$.
- Việc tìm ra tham số tối ưu giống như trượt trên loss surface. Để trượt trên loss surface ta tính vector vận tốc để biết hàm loss nào thay đổi nhanh nhất, rồi tính đạo hàm của hàm số cần tối ưu $\nabla_\theta J(\theta;X,{\bf y}) = \Big(\frac{\partial}{\partial\theta_1}J_\theta, \dots, \frac{\partial}{\partial\theta_k}J_\theta, \dots, \frac{\partial}{\partial\theta_n}J_\theta\Big)$ để biết hướng mà hàm số thay đổi lớn nhất , ta sẽ đi theo hướng ngược lại.
- Việc tính đạo hàm cho ta biết độ dốc tại một điểm ta theo hướng ngược lại với một bước đi $\eta$ ($0< \eta\ll 1$)hay $\theta \leftarrow \theta -\eta \nabla_\theta J$. 
- Tại nơi tối ưu nhất đạo hàm sẽ bằng 0 nhưng ngược lại không đúng vì đạo hàm còn bằng 0 tại saddle, local opt, flat

**Back-propagation (MLP)**
- Mạng neural có thể tối ưu hóa bằng cách tính hàm mát mất của $\hat{y}$ rồi từ đó truy ngược lại tối ưu các tham số. Đây gọi là Back-propagation.

**Realistic loss surface**
- Linear predictors  → (often) convex losses  → global optimum.
- High-dimensional parameter spaces → very expensive to compute exact solution.
- Nonlinear predictors (e.g., MLPs) → highly nonconvex loss landscape → hard to search!
- Loss surface trong thực tế thường có nhiều local opt, saddle point những điểm có đạo hàm bằng không nên việc tối ưu phải dựa vào kinh nghiệm của từng người.
- Một số vấn đề về Gradient Descent:
    - Chọn learning rate $\theta$: nếu $\theta$ quá lớn thì hàm loss tăng giảm liên tục và không thể tìm ra chỗ có đạo hàm bằng không. Nếu quá nhỏ thì cần nhiều thời gian. Để tiết kiệm thời gian người ta thường chia bộ dữ liệu ban đầu ra dể sử dụng:
        - Batch: là ta lấy cả bộ dữ liệu 
        - SGD: lấy một điểm dữ liệu
        - Mini-Batch: lấy một lượng nhỏ   
    - Mometum: là hướng đi trước đó. Kết hợp với Hướng đi từ gradient hiện tại cho ta hướng đi đúng. Giúp ta vượt qua local min.

**Heuristics to search/optimize/learn & generalize better**
- Dùng Cross validation để tìm ra siêu tham số tốt nhất.
- Sai số trên tập validation thường tăng khi mô hình bị overfit. Để khắc phục ta có thể dùng Early Stopping..
- Đối với hệ neural ta có thể tắt bớt các nod để mô hình thích ứng tốt hơn với các noisy. Đây gọi là Dropout.

## Session 8 -- Convolutional nerual networks

**Giới thiệu**

- Trong xử lý ảnh, phương pháp CNN giúp ta giữa lại các đặc trưng về không gian của ảnh.
- CNN dựa trên inner product để tính similarity giữa kernel - dùng để trượt(sliding), và các vùng ảnh , quá trình này gọi là matching. Matching và sliding làm nên Convolution. 
- Filters trong CNN là quá trình từ input cho ra feature map bằng cách tính inner product giữa kernel và ảnh đồng thời trượt kernel đó trên toàn ảnh

**CNN operations**

- Padding: bằng cách bọc thêm vào viền của ảnh ban đầu các lớp chứa con số 0. Padding giúp giữa nguyên hoặc tăng kích thước đầu vào trong quá trình filters điều này giúp tránh thất thoát thông tin trên góc cạnh. Để giữa nguyên kích thước đầu vào ta có thể tính số lớp padding bằng cách lấy kích thước kernel trừ 1 rồi chia 2.
- Stride: chỉ số sải chập quyết định cách mà kernel di chuyển cả ngang lẫn dọc điều này sẽ thu nhỏ kích thước dữ liệu ban đầu
- Pooling: phép gộp giúp giảm 2 lần kích thước input, giúp mô hình vững chác trước các sai lệch nhỏ, pooling gồm AVG pooling (lấy trung bình các điểm dữ liệu -> smooth feaure) và Max pooling (lấy điểm dữ liệu có giá trị lớn nhất -> sharp feature).
    - Phép gộp giảm chiều dữ liệu xuống hai lần như với stride bằng hai nhưng khác là ta không cần phải tính toán các tham số.
- Công thức tổng quát tính output feature map:
    - $n_\text{out}=[\frac{n_\text{in}+2p-k}{s}]+1$
        - k là kích thước kernel
        - p là số lớp padding
        - s là số bước sải chập 

- Cách tính số trọng số cần tối ưu: lấy kích thước của kernel cộng với số feature map.
    - Có thể thấy CNN cần ít trọng số hơn fully Connect.
- DCNN là toàn bộ quá trình từ input là bức ảnh ta trượt kernel chứa các đặc trưng rời rạc qua nhiều lớp Convolution-MaxPooling rồi tới fully connected cho ra output. Bản chất là đi học các bộ filter để có thể trích xuất được các đặc trưng trong bộ dữ liệu + **học fully connected weights để predict**.

## Session 9 -- Recurrent Neural Networks

**Giới thiệu**
- Nếu như CNN giúp ta xử lý từng bức ảnh một mà không có sự liên quan giữa các input thì RNN sẽ giúp ta xử lý một chuỗi các sự kiện theo thứ tự thời gian. Ví dụ như: âm thanh, giọng nói, giá vàng...
- Với RNN, input là 1 chuỗi có tính thời gian, khi mà ta sẽ thay đổi liên tục Z, ta gọi là di chuyển trong không gian Z. 
- Di chuyển trong không gian Z là cộng thêm vào một lượng nhỏ $\Delta {\bf Z}$.
    - ${\bf z} \to {\bf z'} = {\bf z} + \Delta {\bf z}$
    - ${\bf z} \to {\bf z'} = \sigma\Big(U{\bf z} + W\Delta {\bf z} + {\bf b}\Big)$


**RNN**
- Trong RNN, để có tính thời gian ta di chuyển trong không gian Z dựa trên công thức:
    - ${\bf h} \to {\bf h'} = \sigma\Big(U{\bf h} + W {\bf x} + {\bf b}\Big)$
    - ${\bf h}_{t-1} \to {\bf h}_{t} = \sigma\Big(U{\bf h}_{t-1} + W {\bf x}_t + {\bf b}\Big)$
        - $U{\bf h}_{t-1}$: là thông tin của state trước đó
        - $W{\bf x}_t$: là input hiện tại
        - $\sigma$: là activation funtion như hàm tanh, ReLU, ...
            -->Ta có thể thấy ${\bf h}_{t}$ chứa thông tin của state trước đó và state hiện tại.Nên được gọi là recurrent.
            -->Các states chia sẻ với nhau W và U.
- Công thức và ỷ tưởng trên được trên gọi là Vanilla RNN. Có thể thấy với Vanilla RNN ta sử dụng lại thông tin đã chiết xuất trước đó và duy trì nó qua các hidden states.

**Backpropagation through time (BPTT)**
- Để huấn luyện Vanilla RNN thì ta cần BPTT, một phương pháp dự trên đạo hàm tại từng time-steps.
- Backpropagation through time: từ dự báo ta truy ngược lại, update các weight tại từng time-steps như với BP truyền thống rồi ta lấy tổng các updates đó làm weight mới rồi tiếp tục so sánh output mới...
- Một vấn đề của Backpropagation through time: là nếu ta truy về càng nhiều là thì gradient hoặc là càng nhỏ đi(Vanishing) - ta sẽ chỉ sửa được những dữ liệu ở gần ở xa sẽ bị quên đi(short memory), hoặc là lớn lên(exploding) thì xử lí không được do thông tin quá nhiều.
- Một số giải pháp cho:
    - Vanishing Gradient:
        - Weight initialization
        - LSTM
    - Exploding Gradient:
        - Truncated BPTT
        - Gradient clipping
- LSTMs và GRUs là các biến thể của vanilla RNN và cũng là một trong những mô hình mạnh mẽ nhất hiện nay cho các bài toán về xử lý ngôn ngữ tự nhiên (NLP).

## Session 10 -- K-means Clustering: Unsupervised Learning
**Giới thiệu**

- Khác với thuật toán supervised learning, thuật toán sử dụng các cặp (data,label) có từ trước để dự đoán đầu ra trên input mới, unsupervised learning ta không có label cho các data mà máy tính phải tự học điều đó.
- Và bài toán clustering (phân cụm) nói chung và k-means clustering nói riêng thuộc vào unsupervised learning, mục đích là phân dữ liệu thành các cụm (clusters) sao cho dữ liệu trong cùng 1 cụm có tính chất như nhau (nhưng ta không quyết định tính chất này mà là máy tính).

**K-means Clustering**
- Về mặt hình học, ta có thể hiểu một cluster là tập hợp các điểm gần nhau trong không gian nhiều chiều.
- Và centroid là điểm chính giữa của các clusters và đại diện cho cluster đó. Điều này có nghĩa là nếu ta xét một điểm dữ liệu bất kì, điểm dữ liệu này gần centroid nào nhất thì cũng thuộc cluster đó. Việc này có thể thực hiện bằng tính khoảnh cách euclidean dự trên công thức:
    - $\ \text{d}\bf (p,q)=\sqrt{(q_1 - p_1)^2 + (q_2 - p_2)^2 + \cdots + (q_3 - p_3)^2} = \sqrt{\sum_{i=1}^n(q_i-p_i)^2}$
- Một trong những cách để tính toán tọa độ của centroid trong không gian là tính trung bình lại tất cả tọa độ của các điểm dữ liệu thuộc cluster của centroid đó. Và do tính trung bình để ra được các centroid nên bài toán này có tên gọi là k-means clustering.
- Phương pháp gom k-clusters
    - Step 1: chọn k điểm tương ứng số nhóm muốn chia, random k centroid đó.
    - Step 2: Gán mỗi input vào cluster có centroid gần nó nhất
    - Step 3: Nếu việc gán dữ liệu vào từng cluster ở step 2 không có gì thay đổi thì dừng.
    - Step 4: Cập nhật centroid cho từng cluster (trung bình cộng của tất cả dữ liệu)
    - Step 5: quay lại step 2
- Chuẩn đánh giá, mục tiêu của bài toán:
    - Làm nhỏ nhất tổng khoảng cách của các intracluster (các điểm thuộc cluster đang xét, ngược lại với intercluster) .
        - $MinJ = \frac1{N}\sum_{t=1}^N d^2({\bf z}^t, {\bf m}_k^t)$
- Chọn số k:
    - Elbow method : thử với k=1,2,3,... tính tổng sai số bình phương trong từng trường hợp, vẽ hình, chọn điểm k mà trong hình biểu diễn như hình khuỷu. 
    - Silhoutte method: dùng để xác định mức độ tách biệt giữa các cluster, dựa trên công thức $SA_i = \frac{b_i - a_i}{\max(a_i, b_i)}$ với:
        - i là điểm thuộc cluster đang xét
        - $a_i$ là trung bình khoảng cách của intracluster
        - $b_i$ là trung bình khoảng cách của intercluster của cluster gần cluster đang xét nhất
        - Nếu SA=+1 thì điểm i xa cluster gần nhất nên các cluster có khoảng cách tốt
        - Nếu SA=0 điểm i gần decision boundary -> có các cluster chồng lên nhau
        - Nếu SA=-1 điểm i ở sai cluster 
    - Cả hai phương pháp trên đều 'heuristic'.

- k-means clustering là linear model vì ta chia các vùng bằng đường thẳng là đường trung trực giữa các cặp centroid

**Trả lời câu hỏi**
- Câu 1:Làm sao đề dùng clustering giảm chiều dữ liệu?

    - Ta tính khoảng cách của từng điểm dữ liệu với k centroid, mỗi điểm dữ liệu sẽ có k khoảng cách và có thể tạo thành vector đặc trưng cho điểm dữ liệu đó trong không gian k chiều.
    - Có nghĩa là chiều dữ liệu mà ta có thể giảm tới bằng với số centroid.
- 
    Câu 2:Trừ tính khoảng cách có thể dùng similarity cho từng điểm dữ liệu với centroid để gom cụm được không?
    - Ta có thể đùng similarity cho từng điểm dữ liệu với centroid để gom cụm vì vốn dĩ những điểm gần nhau trong không gian tương đương với việc chúng giống nhau và similarity giữa chúng sẽ lớn.
    - Ta chuyển qua bằng $e^{-d}$
## Session 11 -- MDP Planning

**Giới Thiệu**
- Lên kế hoạch (planning) là một chuỗi các hành động nhằm đạt được một mục đích nào đó một cách tối ưu nhất.
- Để lên được một kế hoạch ta cần phải dự đoán được sau mỗi hành động $a_t$ tại thời điểm t thì môi trường $s_{t+1}$ thay đổi như thế nào so với môi trường trước đó $s_t$ và với sự thay đổi đó có giúp tiến đến gần mục tiêu hơn hay không $r$.
-  Đây cũng là hệ thống planning đơn gian nhất: $MPD = (S,A,T,R,\gamma)$ trong đó:
    -  S: state là các tình trạng của môi trường
    -  A: action là các hành động có thể được thực hiện
    -  R: reward là chỉ số thể hiện khả năng thành công của action
    -  T: transition là xác suất mà hành động a tại thời gian t thay đổi tạng thái s sang s' (s' tại thời gian t+1)
    -  $\gamma$: discount factor là độ giảm reward của mỗi step cách mục tiêu. 
- MPD chỉ quan tâm đến kết quả hiện tại chứ không quan tâm tiến trình cho ra kết quả trong quá khứ.

**Planning trong toán**

- A plan =$\Big\{\text{policy } \pi(s), \text{ value } q^\pi(s,a)\Big\}$
- Hàm $q^\pi(s,a)$: trả ra độ thành công của của các lựa chọn hành động ở thời điểm hiện tại thể hiện qua công thức: $q^\pi(s,a) = \frac1{K} \sum_{k=1}^K \Big(r_1 + \gamma G^\pi_k(s') \Big)$ trong đó:
    - K là số episodes hay là số bước để từ s thông qua a đến s' nào đó $T(s_t,a_t) \sim s'$. 
    - $r_1$ là mức thưởng hiện tại. 
    - Mỗi mức thưởng sau đó sẽ nhân vào chiết khấu $\gamma$ tương ứng. Lấy tổng tất cả thưởng cho ta return G. $G^\pi (s) = \sum_{t=1}^T \gamma^{t-1} r_t$
- Thông qua $q^\pi(s,a)$ ta ta có thể lựa chọn ra $\text{policy } \pi(s)$ tối ưu nhất
- Công thức Bellman: $q^*(s,a) = R(s,a) + \gamma \sum_{s'} P(s'|s,a)\max_{a'} q^*(s',a')$ trong đó
    - R(s,a): là $r_1$
    - P(s'|s,a): transition probability xác xuất từ s qua a ra s'
    - $\max_{a'} q^*(s',a')$: optimal policy