Bài 3: Neural network | Deep Learning cơ bản
 

Bài 3: Neural network

| Posted in Deep Learning cơ bản

Bài trước học về thuật toán logistic regression với giá trị đầu ra là nhị phân. Tuy nhiên, logistic regression là một mô hình neural network đơn giản, bài này sẽ học mô hình neural network đầy đủ.

Bạn nên hoàn thành 2 bài trước linear regressionlogistic regression trước khi vào bài này. Trong bài này có khá nhiều kí hiệu và công thức, nên bạn nên chuẩn bị giấy bút để bắt đầu.

Neural network là gì

Con chó có thể phân biệt được người thân trong gia đình và người lạ hay đứa trẻ có thể phân biệt được các con vật. Những việc tưởng chừng như rất đơn giản nhưng lại cực kì khó để thực hiện bằng máy tính. Vậy sự khác biệt nằm ở đâu? Câu trả lời nằm ở bộ não với lượng lớn các nơ-ron thần kinh liên kết với nhau. Thế thì máy tính có nên mô phỏng lại mô hình ấy để giải các bài toán trên ???

Neural là tính từ của neuron (nơ-ron), network chỉ cấu trúc đồ thị nên neural network (NN) là một hệ thống tính toán lấy cảm hứng từ sự hoạt động của các nơ-ron trong hệ thần kinh.

Hoạt động của các nơ-ron

Source: https://askabiologist.asu.edu/neuron-anatomy

Nơ-ron là đơn vị cơ bản cấu tạo hệ thống thần kinh và là một phần quan trọng nhất của não. Não chúng ta gồm khoảng 10 triệu nơ-ron và mỗi nơ-ron liên kết với 10.000 nơ-ron khác.

Ở mỗi nơ-ron có phần thân (soma) chứa nhân, các tín hiệu đầu vào qua sợi nhánh (dendrites) và các tín hiệu đầu ra qua sợi trục (axon) kết nối với các nơ-ron khác. Hiểu đơn giản mỗi nơ-ron nhận dữ liệu đầu vào qua sợi nhánh và truyền dữ liệu đầu ra qua sợi trục, đến các sợi nhánh của các nơ-ron khác.

Mỗi nơ-ron nhận xung điện từ các nơ-ron khác qua sợi nhánh. Nếu các xung điện này đủ lớn để kích hoạt nơ-ron, thì tín hiệu này đi qua sợi trục đến các sợi nhánh của các nơ-ron khác. => Ở mỗi nơ-ron cần quyết định có kích hoạt nơ-ron đấy hay không. Giống giống hàm sigmoid bài trước nhỉ ?

Tuy nhiên NN chỉ là lấy cảm hứng từ não bộ và cách nó hoạt động, chứ không phải bắt chước toàn bộ các chức năng của nó. Việc chính của chúng ta là dùng mô hình đấy đi giải quyết các bài toán chúng ta cần.

Mô hình neural network

Logistic regression

Logistic regression là mô hình neural network đơn giản nhất chỉ với input layer và output layer.

Mô hình của logistic regression từ bài trước là: \hat{y} = \sigma({w_0 + w_1 * x_1 + w_2 * x_2}). Có 2 bước:

  • Tính tổng linear: z = 1 * w_0 + x_1 * w_1 + x_2 * w_2
  • Áp dụng sigmoid function: \hat{y} = \sigma{(z)}

Để biểu diễn gọn lại ta sẽ gộp hai bước trên thành một trên biểu đồ

Mô hình logistic regresion

Hệ số w_0 được gọi là bias. Để ý từ những bài trước đến giờ dữ liệu khi tính toán luôn được thêm 1 để tính hệ số bias w_0 . Tại sao lại cần hệ số bias? Quay lại với bài 1, phương trình đường thẳng sẽ thế nào nếu bỏ w_0, phương trình giờ có dạng: w_1*x + w_2*y = 0, sẽ luôn đi qua gốc tọa độ và nó không tổng quát hóa phương trình đường thẳng nên có thể không tìm được phương trình mong muốn. => Việc thêm bias (hệ số tự do) là rất quan trọng.

Hàm sigmoid ở đây được gọi là activation function.

Mô hình tổng quát

Mô hình neural network

Layer đầu tiên là input layer, các layer ở giữa được gọi là hidden layer, layer cuối cùng được gọi là output layer. Các hình tròn được gọi là node.

Mỗi mô hình luôn có 1 input layer, 1 output layer, có thể có hoặc không các hidden layer. Tổng số layer trong mô hình được quy ước là số layer – 1 (Không tính input layer).

Ví dụ như ở hình trên có 1 input layer, 2 hidden layer và 1 output layer. Số lượng layer của mô hình là 3 layer.

Mỗi node trong hidden layer và output layer :

  • Liên kết với tất cả các node ở layer trước đó với các hệ số w riêng.
  • Mỗi node có 1 hệ số bias b riêng.
  • Diễn ra 2 bước: tính tổng linear và áp dụng activation function.

Kí hiệu

Số node trong hidden layer thứ i là l^{(i)}.

Ma trận W^{(k)} kích thước l^{(k-1)} * l^{(k)} là ma trận hệ số giữa layer (k-1) và layer k, trong đó w_{ij}^{(k)} là hệ số kết nối từ node thứ i của layer k-1 đến node thứ j của layer k.

Vector b^{(k)} kích thước l^{k} * 1 là hệ số bias của các node trong layer k, trong đó b_i^{(k)} là bias của node thứ i trong layer k.

Với node thứ i trong layer l có bias b_i^{(l)}thực hiện 2 bước:

  • Tính tổng linear: z_i^{(l)} = \sum_{j=1}^{l^{(l-1)}} a_j^{(l-1)} * w_{ji}^{(l)} + b_i^{(l)} , là tổng tất cả các node trong layer trước nhân với hệ số w tương ứng, rồi cộng với bias b.
  • Áp dụng activation function: a_i^{(l)} = \sigma(z_i^{(l)})

Vector z^{(k)} kích thước l^{(k)} * 1 là giá trị các node trong layer k sau bước tính tổng linear.

Vector a^{(k)} kích thước l^{(k)} * 1 là giá trị của các node trong layer k sau khi áp dụng hàm activation function.

Mô hình neural network trên gồm 3 layer. Input layer có 2 node ( l^{(0)} = 2), hidden layer 1 có 3 node, hidden layer 2 có 3 node và output layer có 1 node.

Do mỗi node trong hidden layer và output layer đều có bias nên trong input layer và hidden layer cần thêm node 1 để tính bias (nhưng không tính vào tổng số node layer có).

Tại node thứ 2 ở layer 1, ta có:

  • z_2^{(1)} = x_1 * w_{12}^{(1)} + x_2 * w_{22}^{(1)} + b_2^{(1)}
  • a_2^{(1)} = \sigma(z_2^{(1)})

Hay ở node thứ 3 layer 2, ta có:

  • z_3^{(2)} = a_1^{(1)} * w_{13}^{(2)} + a_2^{(1)} * w_{23}^{(2)} + a_3^{(1)} * w_{33}^{(2)} + b_3^{(2)}
  • a_3^{(2)} = \sigma(z_3^{(2)})

Feedforward

Để nhất quán về mặt ký hiệu, gọi input layer là a^{(0)} (=x) kích thước 2*1.

Tương tự ta có:

z^{(2)} = (W^{(2)})^T * a^{(1)} + b^{(2)}\newline a^{(2)} = \sigma(z^{(2)}) \newline z^{(3)} = (W^{(3)})^T * a^{(2)} + b^{(3)}\newline \hat{y} = a^{(3)} = \sigma(z^{(3)})
Feedforward

Biểu diễn dưới dạng ma trận

Tuy nhiên khi làm việc với dữ liệu ta cần tính dự đoán cho nhiều dữ liệu một lúc, nên gọi X là ma trận n*d, trong đó n là số dữ liệu và d là số trường trong mỗi dữ liệu, trong đó x_j^{[i]} là giá trị trường dữ liệu thứ j của dữ liệu thứ i. Ví dụ dataset bài trước

LươngThời gian làm việc
101
52
61.8
71

thì n = 4, d = 2, x_1^{[1]} = 10, x_2^{[1]} = 1, x_1^{[3]} = 6, x_2^{[2]} = 2 .

Biểu diễn dạng ma trận của nhiều dữ liệu trong dataset

Do x^{[1]} là vector kích thước d*1 tuy nhiên ở X mỗi dữ liệu được viết theo hàng nên cần transpose x^{[1]} thành kích thước 1*d, kí hiệu: -(x^{[1]})^T-

Gọi ma trận Z^{(i)} kích thước N*l^{(i)} trong đó z_{j}^{(i)[k]} là giá trị thứ j trong layer i sau bước tính tổng linear của dữ liệu thứ k trong dataset.

*** Kí hiệu (i) là layer thứ i và kí hiệu [k] là dữ liệu thứ k trong dataset.

Tương tự, gọi ma trận A^{(i)} kích thước N*l^{(i)} trong đó a_{j}^{(i)[k]} là giá trị thứ j trong layer i sau khi áp dụng activation function của dữ liệu thứ k trong dataset.

Do đó

Phép tính cuối cùng không đúng nhưng để viết công thức cho gọn lại.

Vậy là có thể tính được giá trị dự đoán của nhiều dữ liệu 1 lúc dưới dạng ma trận.

Giờ từ input X ta có thể tính được giá trị dự đoán \hat{Y}, tuy nhiên việc chính cần làm là đi tìm hệ số W và b. Có thể nghĩ ngay tới thuật toán gradient descent và việc quan trọng nhất trong thuật toán gradient descent là đi tìm đạo hàm của các hệ số đối với loss function. Và việc tính đạo hàm của các hệ số trong neural network được thực hiện bởi thuật toán backpropagation, sẽ được giới thiệu ở bài sau. Và vì bài này có quá nhiều công thức sợ mọi người rối nên code sẽ được để ở bài sau.

Logistic regression với toán tử XOR

Phần này không bắt buộc, nó giúp giải thích việc có nhiều layer hơn thì mô hình có vẻ sẽ giải quyết được các bài toán phức tạp hơn. Cụ thể là mô hình logistic regresion bài trước không biểu diễn được toán tử XOR nhưng nếu thêm 1 hidden layer với 2 node ở giữa input layer và output layer thì có thể biểu diễn được toán tử XOR.

AND, OR, XOR là các phép toán thực hiện phép tính trên bit. Thế bit là gì? bạn không cần quan tâm, chỉ cần biết mỗi bit nhận 1 trong 2 giá trị là 0 hoặc 1.

NOT

Phép tính NOT của 1 bit cho ra giá trị ngược lại.

ANOT(A)
10
01

AND

Phép tính AND của 2 bit cho giá trị 1 nếu cả 2 bit bằng 1 và cho giá trị bằng 0 trong các trường hợp còn lại. Bảng chân lý

ABA AND B
000
010
100
111

Giờ muốn máy tính học toán tử AND, ta thấy là kết quả là 0 và 1, nên nghĩ ngay đến logistic regression với dữ liệu

x_1x_2y
000
010
100
111
Chấm xanh là giá trị 0, chấm đỏ là giá trị 1

Theo bài trước, thì logistic regression chính là đường thẳng phân chia giữa các điểm nên áp dụng thuật toán trong bài logistic regression ta tìm được w_0 = -1.5, w_1 = 1, w_2 = 1

Hình 1: x_1 AND x_2
Đường thẳng y = 1.5-x phân chia 2 miền dữ liệu

Nhận xét, do phép tính NOT là đổi giá trị của bit, nên phép tính NOT(A AND B) có thể biểu diễn như hình trên với việc đổi màu các điểm từ đỏ thành xanh và xanh thành đỏ. Do đó đường phân chia không thay đổi và 2 miền giá trị đổi dấu cho nhau => giá trị các tham số đổi dấu w_0 = 1.5, w_1 = -1, w_2 = -1

Hình 2: NOT (x_1 AND x_2)

OR

Phép tính OR của 2 bit cho giá trị 1 nếu 1 trong 2 bit bằng 1 và cho giá trị bằng 0 trong các trường hợp còn lại. Bảng chân lý

ABA OR B
000
011
101
111

Tương tự ta cũng tìm được w_0 = -0.5, w_1 = 1, w_2 = 1

Hình 3: x_1 OR x_2

XOR

Phép tính XOR của 2 bit cho giá trị 1 nếu đúng 1 trong 2 bit bằng 1 và cho giá trị bằng 0 trong các trường hợp còn lại. Bảng chân lý

ABA XOR B
000
011
101
110

Khi thiết lập bài toán logistic regression, ta có đồ thị

Rõ ràng là không thể dùng một đường thẳng để phân chia dữ liệu thành 2 miền. Nên khi bạn dùng gradient descent vào bài toán XOR thì bất kể bạn chạy bước 2 bao nhiêu lần hay chỉnh learning_rate thế nào thì vẫn không ra được kết quả như mong muốn. Logistic regression như bài trước không thể giải quyết được vấn đề này, giờ cần một giải pháp mới !!!

Áp dụng các kiến thức về bit ở trên lại, ta có:

ABA XOR BA AND BNOT(A AND B)A OR B(NOT(A AND B) AND (A OR B))
0000100
0110111
1010111
1101010

Do đó: A XOR B = (NOT(A AND B) AND (A OR B)), vậy để tính được XOR ta kết hợp NOT(AND) và OR sau đó tính phép tính AND.

Mô hình XOR

Nhìn có vẻ rối nhỉ, cùng phân tích nhé:

  • node NOT(x_1 AND x_2) chính là từ hình 2, với 3 mũi tên chỉ đến từ 1, x_1, x_2 với hệ số w_0, w_1, w_2 tương ứng là 1.5, -1, -1.
  • node tính x_1 OR x_2 là từ hình 3
  • node trong output layer là phép tính AND từ 2 node của layer trước, giá trị hệ số từ hình 1 mang xuống.

Nhận xét: mô hình logistic regression không giải quyết được bài toán XOR nhưng mô mình mới thì giải quyết được bài toán XOR. Đâu là sự khác nhau:

  • Logistic regression chỉ có từ input layer và output layer
  • Mô hình mới có 1 hidden layer có 2 node ở giữa input layer và output layer

=> Có vẻ càng nhiều layer và node thì càng giải quyết được các bài toán phức tạp hơn.


Deep Learning cơ bản ©2024. All Rights Reserved.
Powered by WordPress. Theme by Phoenix Web Solutions