Thứ Sáu, 7 tháng 1, 2022

Deep Neural Network

1. Giới thiệu

Trong bài viết này mình sẽ giới thiệu cải tiến của Neural Network mà chúng ta đã tìm hiểu ở bài viết trước được gọi là Deep Neural Network.

Nội dung

  • Đặt vấn đề
  • Deep Neural Network
  • Biểu diễn dưới dạng toán học
  • Cách tính output bài toán binary classification

2. Đặt vấn đề

Như các bạn đã biết, Logistic Regression được xem như là một Neural Network đơn giản

Đối với dữ liệu được mô tả như hình trên, đơn giản chỉ cần 1 boundary là có thể phân loại được rồi. Nhưng trong thực tế dữ liệu không hề đơn giản như vậy. Ví dụ như dữ liệu dưới đây:

Các bạn thấy đó đối với dữ liệu như trên thì 1 boundary là không đủ để phân loại dữ liệu. Để giải quyết vấn đề này Deep Neural Network ra đời

3. Deep Neural Network

Quay lại với dữ liệu trên, Deep Neural Network xử lý như sau:

Từ hình trên ta thấy Deep Neural Network sử dụng 2 boundaries thay vì chỉ sử dụng 1. Ban đầu tìm đường $A_1$ (Màu đỏ) để phân tách thành 2 vùng: Vùng chứa điểm số 2 và vùng còn lại chứa 1,3,4. Đường còn lại $A_2$ (Màu vàng) phân tách các điểm dữ liệu thành 2 vùng: Vùng chứa điểm số 3 và vùng còn lại chứa 1, 4

Giả sử có 1 điểm dữ liệu mới chúng ta cần phân loại xem nó thuộc class nào: Sử dụng boundary $A_1$(Màu đỏ) để phân loại. Nếu nó thuộc ở vùng chứa điểm dữ liệu số 2 thì nó thuộc class dấu x màu xanh. Ngược lại nếu đường boundray $A_1$ phân loại điểm đó vào vùng chứa điểm dữ liệu 1,3,4 thì ta sử dụng tiếp đường boundary $A_2$(Màu vàng). Nếu nó thuộc vùng chứa điểm dữ liệu số 3 thì nó thuộc class dấu x màu xanh, ngược lại nếu thuộc vùng chứa điểm 1,4 thì nó thuộc class dấu x màu đỏ

Như vậy boundary $A_1$ phân loại được output sau đó output này được đưa vô làm input của boundary $A_2$. Để được output cuối cùng.

Biễu diễn bài toán dưới dạng Deep Neural Network

Trong thực tế mạng Neural Network chúng ta sử dụng nhiều layers và nhiều neural trong một layer để giải quyết các bài toán phức tạp hơn. Dưới đây là Neural Network tổng quát nhất.

Mỗi layer sẽ có nhiều neural. Các bạn nhớ rằng, nếu có ai hỏi Neural Network trên có bao nhiêu layer thì bạn đừng có tính Input layer vào nhé. Vì người ta chỉ tính hidden layer và output layer thôi. Như hình trên thì chỉ có 4 layers (3 màu xanh da lá cây là hidden layer, 1 màu xanh lam nhạt ở cuối cùng là output layer)

Lưu ý: Đối với bài toán binary classification thì output layer chỉ có một layer. Còn bài toán multiple classification thì số neural tại output layer bằng với số class mình sẽ giới thiệu trong bài sau

4. Biễu diễn dưới dạng toán học

Vì biễu diễn các parameter riêng lẽ, nhìn vào hình sẽ rất rối nên mình sẽ biểu diễn dưới dạng ma trận.

Gọi $W^{(1)}, W^{(2)}, W^{(3)}$ là parameters của hàm giả thuyết(mình cũng quy định luôn là từ nay mình sẽ gọi là Activation Function nhé), các bạn nhớ là trong parameters phải có cả vector bias nữa nhé. Các chỉ số trên đầu chính là thứ tự của layer. Trong trường hợp này là hàm sigmoid.

$$W^{(1)} = \begin{bmatrix} w_{1}^{(1)} & w_{11}^{(1)} & w_{21}^{(1)} & w_{31}^{(1)} & ... & w_{n_{0}1}^{(1)}\\ w_{2}^{(1)} & w_{12}^{(1)} & w_{22}^{(1)} & w_{32}^{(1)} & ... & w_{n_{0}2}^{(1)}\\ ... & ... & ... & ... & ... & ...\\ w_{n_{1}}^{(1)} & w_{1n_{1}}^{(1)} & w_{2n_{1}}^{(1)} & w_{3n_{1}}^{(1)} & ... & w_{n_{0}n_{1}}^{(1)}\\ \end{bmatrix}$$

Với $n_0$, $n_1$ lần lượt là số neural của input layer và hidden layer 1. Trong hình vẽ trên $n_0 = 3, n_1 = 4$

$w_{1}^{(1)}$ là bias của neural 1 tại hidden layer 1, $w_{11}^{(1)}$ là parameter liên kết giữa neural 1 của input layer và neural 1 của hidden layer 1, $w_{1n_1}^{(1)}$ là parameter liên kết giữa neural 1 của input layer và neural $n_1$ của hidden layer 1. Biễu diễn tương tự với các parameter khác

$$W^{(2)} = \begin{bmatrix} w_{1}^{(2)} & w_{11}^{(2)} & w_{21}^{(2)} & w_{31}^{(2)} & ... & w_{n_{1}}^{(2)}\\ w_{2}^{(2)} & w_{12}^{(2)} & w_{22}^{(2)} & w_{32}^{(2)} & ... & w_{n_{1}2^{(2)}}\\ ... & ... & ... & ... & ... & ...\\ w_{n_2}^{(2)} & w_{1n_{2}^{(2)}} & w_{2n_{2}^{(2)}} & w_{3n_{2}^{(2)}} & ... & w_{n_{1}n_{2}}^{(2)}\\ \end{bmatrix}$$

Với $n_1, n_2$ lần lượt là số neural của hidden layer 1 và hidden layer 2. Trong hình vẽ trên $n_1 = 4, n_2 = 4$

Gọi $a^{(1)}, a^{(2)}$ chính là vector output của layer đó(hidden layer) với input của nó là output của layer trước. Số mũ trên đầu cũng là thứ tự của layer.

$a^{(1)} = \sigma(W^{(1)}*X)$

$$a^{(1)} = \begin{bmatrix} a_{1}^{(1)}\\ a_{2}^{(1)}\\ ... ...\\ a_{n_1}^{(1)}\\ \end{bmatrix} = \begin{bmatrix} \sigma(w_{1}^{(1)}*1 + w_{11}^{(1)}*x_{1} + w_{21}^{(1)}*x_{2} + w_{31}^{(1)}*x_{3} + ... + w_{n_01}^{(1)}*x_{n_0})\\ \sigma(w_{2}^{(1)}*1 + w_{12}^{(1)}*x_{1} + w_{22}^{(1)}*x_{2} + w_{32}^{(1)}*x_{3} + ... + w_{n_02}^{(1)}*x_{n_0})\\ ... ... ... ... ... ...\\ \sigma(w_{n_1}^{(1)}*1 + w_{1n_1}^{(1)}*x_{1} + w_{2n_1}^{(1)}*x_{2} + w_{3n_1}^{(1)}*x_{3} + ... + w_{n_0n_1}^{(1)}*x_{n_0})\\ \end{bmatrix}$$

Với $a_{i}^{(l)}$ là vector output neural $k$ của layer thứ $l$. Tương tự đối với $a^{(2)}$

$a^{(2)} = \sigma(W^{(2)}*a^{(1)})$

$$a^{(2)} = \begin{bmatrix} a_{1}^{(2)}\\ a_{2}^{(2)}\\ ... ...\\ a_{n_2}^{(2)}\\ \end{bmatrix} = \begin{bmatrix} \sigma(w_{1}^{(2)}*1 + w_{11}^{(2)}*a_{1}^{(1)} + w_{21}^{(2)}*a_{2}^{(1)} + w_{31}^{(2)}*a_{3}^{(1)} + ... + w_{n_11}^{(2)}*a_{n_1}^{(1)})\\ \sigma(w_{2}^{(2)}*1 + w_{12}^{(2)}*a_{1}^{(1)} + w_{22}^{(2)}*a_{2}^{(1)} + w_{32}^{(2)}*a_{3}^{(1)} + ... + w_{n_12}^{(2)}*a_{n_1}^{(1)})\\ ... ... ... ... ... ...\\ \sigma(w_{n_2}^{(2)}*1 + w_{1n_2}^{(2)}*a_{n_1}^{(1)} + w_{2n_2}^{(2)}*a_{n_1}^{(1)} + w_{3n_2}^{(2)}*a_{n_1}^{(1)} + ... + w_{n_1n_2}^{(2)}*a_{n_1}^{(1)})\\ \end{bmatrix}$$

Gọi $\hat{y}$ là output của Neural Network khi đó: $y = \sigma(W^{(3)}*a^{(2)})$. Có $\hat{y}$ rồi ta dễ dàng tìm được Loss Function L tùy vào bài toán ta sử dụng Loss Function thích hợp

Như vậy quá trình từ $X$ ban đầu đến khi tìm được $\hat{y}$ được gọi là Feed Forward

Bây giờ ta áp dụng Gradient Descent để cập nhật parameters như thế nào?

Để cập nhật $W^{(1)}$ ta áp dụng Gradient Descent như sau:$$W^{(1)} = W^{(1)} - \eta \frac{\partial L}{\partial W^{(1)}}$$

Để tính $\frac{\partial L}{\partial W^{(1)}}$ ta áp dụng chain rule vì bản chất của Neural Network là các hàm toán học lồng nhau. Giống như những gì mình đã viết trong bài chain rule

Sau khi tính được $\frac{\partial L}{\partial W^{(1)}}$ chúng ta áp dụng Gradient Descent để cập nhật $W^{(1)}$

Ở đây mình chỉ trình bày cách Neural Network hoạt động. Chứ không tính đạo hàm chi tiết. Việc tính các đạo hàm này các thư viện nổi tiếng như tensorflow hoặc pytorch người ta đã tính rồi các bạn không phải ngồi tính nữa.

Tương tự đối với $W^{(2)}, W^{(3)}$

Quá trình thực hiện như trên được gọi là Backpropagation

Quá trình Feed Forward và Backpropagation được thực hiện một cách tuần tự. Feed Forward dùng để tìm $\hat{y}$ sau đó tính L. Còn quá trình Backpropagation sẽ tính đạo hàm sau đó sử dụng Gradient Descent để cập nhật parameters. Lặp đi lặp lại quá trình này cho đến khi hội tụ (điều kiện dừng của Gradient descent mình đã trình bày ở đây)

Trong ví dụ trên mình chỉ trình bày một Neural Network đơn giản. Thực tế Neural Network phức tạp hơn nhiều (nhiều neural hơn, nhiều layer hơn). Tuy nhiên cách hoạt động thì không khác nhau.

5. Cách tính output bài toán binary classification

Đối với bài toán binary classification thì cách tính output như Logistic Regression các bạn có thể xem lại tại đây

Trên đây mình đã trình bày về Neural Network, nếu có thắc mắc gì vui lòng để lại comment phía dưới. Xin cảm ơn

0 nhận xét:

Đăng nhận xét