Nhập môn Trí tuệ Nhân tạo·Neural Networks - Mạng neural

Chế độ xem

Neural Networks - từ một neuron đến mạng nhiều tầng

Bài này trả lời một câu hỏi hẹp: vì sao cộng các đầu vào theo trọng số, rồi uốn tổng đó bằng một hàm phi tuyến, lại gắn được nhãn cho những điểm mà một đường thẳng không tách nổi. Đơn vị làm việc đó gọi là neuron nhân tạo. Nhiều đơn vị ghép lại thành mạng neural, hiểu ở đây là một hàm toán học có nhiều tham số, và các tham số đó được chỉnh từ các ví dụ đã cho nhãn.

Bạn chưa cần thuật toán tìm trọng số, chưa cần ảnh, và chưa cần chuỗi ký tự. Bốn điểm giả định ở giữa bài cho thấy một neuron làm được phép AND. Bốn điểm XOR ngay sau đó cho thấy một tầng tuyến tính bỏ sót một điểm. Bài không hướng dẫn cài đặt, không trình bày vòng lặp huấn luyện, và không xây mạng nhìn ảnh hay mạng đọc chuỗi.

Mỗi đầu vào là một con số. Trọng số là con số cho biết đầu vào đó được phóng đại hay đảo chiều. Bias là số cộng thêm trước khi hàm kích hoạt uốn kết quả. Mạch tối thiểu là: đầu vào, nhân trọng số, cộng bias, rồi hàm kích hoạt.

Đường đọc nhanh: mục 1, mục 2, mục 3, mục 4, mục Khi cách này thất bại, mục 5, mục 6, rồi phần Mang đi. Các mục Đào sâu nằm ngoài đường đó.

1. Từ hình neuron sinh học đến một hàm

Tên “mạng neural” gợi một tế bào nhận nhiều tín hiệu, cộng chúng lại, và có thể phát tín hiệu tiếp. Hình dưới đây, lấy từ bài giảng CS50, chỉ dùng để tạo liên tưởng đó. Đơn vị trong bài này là một công thức, với đầu vào là số và đầu ra là số.

Minh họa neuron sinh học

Hình: neuron sinh học trong CS50 AI Lecture 5. Hình chỉ giúp tạo liên tưởng; artificial neuron là mô hình toán học, không phải mô phỏng sinh học đầy đủ.

Hãy đặt một câu hỏi cụ thể, với số giả định, không phải hồ sơ một lớp thật. Ta muốn gắn nhãn “qua” hoặc “trượt” từ hai đầu vào đã nằm trong khoảng từ 0 đến 1: tỉ lệ buổi có mặt, và điểm bài thực hành đã chia cho thang điểm. Gọi hai đầu vào là x1x_1 và x2x_2. Gọi nhãn mong muốn là 1 cho “qua” và 0 cho “trượt”.

Một đường thẳng trên mặt phẳng này có dạng “tổ hợp tuyến tính bằng không”. Phía bên này của đường là một nhãn, phía bên kia là nhãn còn lại. Nếu các điểm 1 và các điểm 0 thực sự nằm hai bên một đường như vậy, một neuron với ngưỡng cứng là đủ. Nếu chúng nằm xen kẽ, một đường thì thiếu. Phần tính tay bên dưới làm cả hai việc đó trên các tọa độ cố định, để bạn thấy ranh giới bằng phép cộng chứ bằng một lời mô tả chung.

Neuron nhân tạo nhận nn đầu vào. Mỗi đầu vào có một trọng số riêng. Kết luận của bước cộng là một số thực zz, chưa phải nhãn. Số đó bằng tổng các tích trọng số với đầu vào, cộng bias:

z=w1x1+w2x2+⋯+wnxn+bz = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b

Viết gọn, với w\mathbf{w} là cột các trọng số và x\mathbf{x} là cột các đầu vào, cùng một tổng có dạng tích vô hướng cộng bias:

z=wTx+bz = \mathbf{w}^{T}\mathbf{x} + b

Hàm kích hoạt, ký hiệu gg, uốn zz thành đầu ra yy. Kết luận của bước uốn là: đầu ra không còn buộc phải tỉ lệ thuận với zz.

y=g(z)y = g(z)

Ba chữ cần giữ đúng nghĩa ngay từ đầu. Tham số là số mà quá trình học sẽ đổi, ở bài này là trọng số và bias; bài này chưa tính bước đổi đó. Đầu ra của một neuron có thể là đầu vào của neuron sau, nên một tầng chưa phải cả mạng. Lớp tuyến tính là một tầng chỉ làm phép cộng có trọng số và cộng bias, chưa uốn.

2. Trọng số phóng đại, bias dịch ngưỡng, hàm kích hoạt uốn

Trọng số wiw_i gắn với đúng đầu vào xix_i. Khi wiw_i dương và lớn, tăng xix_i làm tăng zz. Khi wiw_i âm, tăng xix_i làm giảm zz. Độ lớn của wiw_i là mức phóng. Dấu của wiw_i là chiều. Bias bb cộng vào sau khi mọi tích đã xong, nên bias dịch cả ngưỡng: cùng một bộ trọng số, đổi bias là đổi chỗ đường ranh giới cắt các trục.

Lấy bộ số sẽ dùng ở mục 3: w1=1w_1 = 1, w2=1w_2 = 1, b=−1.5b = -1.5. Đường ranh giới là tập các điểm có z=0z = 0, tức x1+x2−1.5=0x_1 + x_2 - 1.5 = 0, hay x2=1.5−x1x_2 = 1.5 - x_1. Điểm (0,0)(0, 0) cho z=−1.5z = -1.5, nằm một phía. Điểm (1,1)(1, 1) cho z=0.5z = 0.5, nằm phía kia. Bias −1.5-1.5 là lý do gốc tọa độ chưa đủ để vượt ngưỡng: cả hai đầu vào phải cùng lớn thì tổng mới dương.

Trong một mạng nhiều tầng, một trọng số riêng thường không còn câu chuyện một ý. Tầng sau còn nhân và uốn tiếp. Vì vậy câu “trọng số điểm thực hành gấp đôi trọng số chuyên cần” chỉ an toàn khi cả mô hình là một neuron và bạn đang nói về chính bộ số đó. Ở mạng sâu, cùng một đầu vào đi qua nhiều đường, và mỗi đường còn bị hàm kích hoạt bẻ.

Nếu mọi tầng chỉ là tuyến tính, xếp chúng lại vẫn ra một phép tuyến tính. Kết luận này có thể kiểm bằng hai bước và một giá trị số. Tầng một nhận xx và tính y=2x+1y = 2x + 1. Tầng hai tính z=3y−4z = 3y - 4. Thế yy vào:

z=3(2x+1)−4=6x+3−4=6x−1z = 3(2x + 1) - 4 = 6x + 3 - 4 = 6x - 1

Với x=2x = 2, tầng một cho y=2⋅2+1=5y = 2 \cdot 2 + 1 = 5. Tầng hai cho z=3⋅5−4=15−4=11z = 3 \cdot 5 - 4 = 15 - 4 = 11. Phép gộp 6⋅2−1=116 \cdot 2 - 1 = 11, cùng một kết quả. Hai tầng đã tốn công, nhưng với đầu vào này chúng trùng một phép nhân 66 và một số trừ 11. Hàm kích hoạt phi tuyến nằm giữa hai tầng thì phép thế như trên không còn ra một đường thẳng. Đó là lý do mạng cần một lần uốn giữa các lần cộng.

Hàm ngưỡng, còn gọi là step, biến zz thành một bit. Kết luận của hàm này trên perceptron cổ điển là một nhãn cứng:

g(z)={1z≥00z<0g(z) = \begin{cases} 1 & z \ge 0 \\ 0 & z < 0 \end{cases}

Hàm sigmoid ép mọi số thực vào khoảng mở từ 0 đến 1. Kết luận của công thức là một đầu ra trơn, lớn dần khi zz tăng, và không nhảy từ 0 lên 1 tại một ngưỡng:

σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}

Đồ thị logistic sigmoid

Tại z=0z = 0, mẫu số là 1+e0=1+1=21 + e^{0} = 1 + 1 = 2, nên σ(0)=1/2=0.5\sigma(0) = 1/2 = 0.5. Ba giá trị khác được tính từ cùng công thức rồi làm tròn nửa lên tới bốn chữ số thập phân: σ(0.86)\sigma(0.86) ra 0.70270.7027, σ(−2)\sigma(-2) ra 0.11920.1192, và σ(2)\sigma(2) ra 0.88080.8808. Các số làm tròn này cho thấy đầu ra dương lớn hơn 0.50.5 và đầu ra âm nhỏ hơn 0.50.5 trên ba điểm đã chọn. Chúng chưa phải xác suất của một sự kiện, trừ khi mô hình được huấn luyện và hiệu chỉnh để đọc theo cách đó.

ReLU, viết tắt của rectified linear unit, giữ số dương và đổi số âm thành 0. Kết luận của hàm này là một nếp gập tại 0, rẻ về tính toán, và vẫn phi tuyến vì hai phía của 0 không cùng một đường thẳng:

ReLU⁡(z)=max⁡(0,z)\operatorname{ReLU}(z) = \max(0, z)

Cùng các mốc vừa dùng: ReLU⁡(0.86)=0.86\operatorname{ReLU}(0.86) = 0.86, ReLU⁡(0)=0\operatorname{ReLU}(0) = 0, ReLU⁡(−2)=0\operatorname{ReLU}(-2) = 0, ReLU⁡(2)=2\operatorname{ReLU}(2) = 2. So với sigmoid trên cùng các mốc, ReLU không nén số dương về dưới 1. Sigmoid thì luôn nằm trong khoảng từ 0 đến 1. Chỗ dùng từng hàm được nói kỹ hơn ở mục đào sâu; phần tính tay phía trước dùng hàm ngưỡng để mọi nhãn ra đúng 0 hoặc 1, không phải số làm tròn.

3. Ví dụ tính tay: perceptron trên bốn điểm

Perceptron ở mục này là một neuron với hàm ngưỡng: đầu ra bằng 1 khi z≥0z \ge 0, và bằng 0 khi z<0z < 0. Bộ tham số được chọn sẵn để minh họa phép AND, không phải kết quả của một lần huấn luyện. Trọng số w1=1w_1 = 1, w2=1w_2 = 1, bias b=−1.5b = -1.5. Bốn điểm và nhãn AND là (0,0)(0,0) gắn 0, (0,1)(0,1) gắn 0, (1,0)(1,0) gắn 0, và (1,1)(1,1) gắn 1.

Điểm (0,0)(0, 0). Tích thứ nhất là 1⋅0=01 \cdot 0 = 0. Tích thứ hai là 1⋅0=01 \cdot 0 = 0. Cộng bias: 0+0+(−1.5)=−1.50 + 0 + (-1.5) = -1.5. Vì −1.5<0-1.5 < 0, đầu ra là 0, trùng nhãn.

Điểm (0,1)(0, 1). Tích thứ nhất là 1⋅0=01 \cdot 0 = 0. Tích thứ hai là 1⋅1=11 \cdot 1 = 1. Cộng bias: 0+1−1.5=−0.50 + 1 - 1.5 = -0.5. Vì −0.5<0-0.5 < 0, đầu ra là 0, trùng nhãn.

Điểm (1,0)(1, 0). Tích thứ nhất là 1⋅1=11 \cdot 1 = 1. Tích thứ hai là 1⋅0=01 \cdot 0 = 0. Cộng bias: 1+0−1.5=−0.51 + 0 - 1.5 = -0.5. Vì −0.5<0-0.5 < 0, đầu ra là 0, trùng nhãn.

Điểm (1,1)(1, 1). Tích thứ nhất là 1⋅1=11 \cdot 1 = 1. Tích thứ hai là 1⋅1=11 \cdot 1 = 1. Cộng bias: 1+1−1.5=0.51 + 1 - 1.5 = 0.5. Vì 0.5≥00.5 \ge 0, đầu ra là 1, trùng nhãn.

Bốn lần tính cho cùng một kết quả: với bộ số này, perceptron gắn đúng cả bốn nhãn AND. Điều phép tính cho thấy là sự khớp trên bốn điểm đã chọn. Nó không cho thấy mọi quan hệ logic hai bit đều tách được bằng một đường, và mục thất bại ngay sau phần tuyến tính sẽ dùng XOR để thấy một quan hệ không khớp.

Hai điểm nằm giữa các ô vuông giúp đọc đường ranh giới. Điểm (0.5,0.5)(0.5, 0.5) cho z=0.5+0.5−1.5=−0.5z = 0.5 + 0.5 - 1.5 = -0.5, đầu ra 0. Điểm (1,0.6)(1, 0.6) cho z=1+0.6−1.5=0.1z = 1 + 0.6 - 1.5 = 0.1, đầu ra 1. Điểm (0.2,0.2)(0.2, 0.2) cho z=0.2+0.2−1.5=−1.1z = 0.2 + 0.2 - 1.5 = -1.1, đầu ra 0. Cả ba điểm đều dùng cùng công thức z=x1+x2−1.5z = x_1 + x_2 - 1.5. Chúng là điểm thử trên luật đã viết, không phải bốn điểm AND ban đầu.

Có thể thấy bias đang làm việc bằng cách đổi mỗi điểm một lượng −1.5-1.5 sau khi cộng hai đầu vào. Tại (1,1)(1, 1) tổng hai đầu vào là 22, trừ 1.51.5 còn 0.50.5, vừa đủ dương. Tại (1,0)(1, 0) tổng hai đầu vào là 11, trừ 1.51.5 còn −0.5-0.5, vẫn âm. Ngưỡng thực sự của tổng x1+x2x_1 + x_2 vì vậy là 1.51.5: tổng từ 1.51.5 trở lên thì nhãn 1. Trên các góc của hình vuông đơn vị, chỉ có (1,1)(1, 1) đạt mức đó. Đó là lý do cùng một bộ trọng số dương lại ra đúng bảng AND, với hàm ngưỡng này.

4. Vì sao một tầng tuyến tính có hình học rất rõ

Trên mặt phẳng hai đầu vào, phương trình w1x1+w2x2+b=0w_1 x_1 + w_2 x_2 + b = 0 là một đường thẳng, miễn là không phải cả hai trọng số cùng bằng 0. Hàm ngưỡng gán một nhãn cho nửa mặt phẳng z≥0z \ge 0 và nhãn kia cho nửa z<0z < 0. Bài toán gọi là tách được bằng đường thẳng khi tồn tại ít nhất một bộ w1,w2,bw_1, w_2, b làm đúng mọi điểm huấn luyện theo luật đó.

OR cũng là một bảng tách được. Một bộ minh họa, vẫn chọn tay, là w1=1w_1 = 1, w2=1w_2 = 1, b=−0.5b = -0.5. Điểm (0,0)(0, 0) cho z=−0.5z = -0.5, đầu ra 0. Điểm (1,0)(1, 0) cho z=0.5z = 0.5, đầu ra 1. Điểm (0,1)(0, 1) cho z=0.5z = 0.5, đầu ra 1. Điểm (1,1)(1, 1) cho z=1.5z = 1.5, đầu ra 1. Bốn nhãn OR đều khớp bộ số này. AND ở mục 3 và OR ở đây khác nhau ở bias, −1.5-1.5 so với −0.5-0.5, trong khi trọng số giữ nguyên. Đổi bias là đổi ngưỡng của cùng một hướng (1,1)(1, 1).

Hình học đó cũng nói giới hạn. Mọi điểm cùng nhãn theo perceptron phải nằm trong một nửa mặt phẳng lồi. Nếu một điểm nhãn 1 nằm trong đoạn thẳng nối hai điểm nhãn 0, không có nửa mặt phẳng nào chứa đúng các điểm 1 mà loại các điểm 0. XOR được dựng đúng theo kiểu xen kẽ đó. Phần sau không chỉ vẽ hình: nó viết các bất đẳng thức và chỉ ra chúng không đứng cùng nhau, rồi tính một bộ số cụ thể để thấy điểm nào bị gắn sai.

Khi cách này thất bại

XOR gắn nhãn như sau: (0,0)(0,0) là 0, (1,0)(1,0) là 1, (0,1)(0,1) là 1, và (1,1)(1,1) là 0. Hai điểm nhãn 1 nằm trên một đường chéo. Hai điểm nhãn 0 nằm trên đường chéo kia.

XOR

x2
1 |  1      0
  |
0 |  0      1
  +------------- x1
     0      1

Thử đúng bộ số của phép OR ở trên, w1=1w_1 = 1, w2=1w_2 = 1, b=−0.5b = -0.5, trên bảng XOR.

Điểm (0,0)(0, 0): z=−0.5z = -0.5, đầu ra 0, trùng nhãn 0. Điểm (1,0)(1, 0): z=0.5z = 0.5, đầu ra 1, trùng nhãn 1. Điểm (0,1)(0, 1): z=0.5z = 0.5, đầu ra 1, trùng nhãn 1. Điểm (1,1)(1, 1): z=1+1−0.5=1.5z = 1 + 1 - 0.5 = 1.5, đầu ra 1, trong khi nhãn XOR là 0. Bộ số này khớp ba điểm và sai điểm (1,1)(1, 1).

Sai một bộ số chưa nói lên mọi bộ số đều sai. Phần tiếp theo xét một bộ w1,w2,bw_1, w_2, b bất kỳ, với cùng luật đầu ra 1 khi z≥0z \ge 0 và đầu ra 0 khi z<0z < 0. Giả sử bộ đó gắn đúng cả bốn nhãn XOR. Khi ấy bốn điều sau phải cùng đúng.

Với (0,0)(0, 0) nhãn 0, cần b<0b < 0. Với (1,0)(1, 0) nhãn 1, cần w1+b≥0w_1 + b \ge 0. Với (0,1)(0, 1) nhãn 1, cần w2+b≥0w_2 + b \ge 0. Với (1,1)(1, 1) nhãn 0, cần w1+w2+b<0w_1 + w_2 + b < 0.

Cộng hai bất đẳng thức giữa: w1+w2+2b≥0w_1 + w_2 + 2b \ge 0. Trừ đi một lần bb ở hai vế, ta được w1+w2+b≥−bw_1 + w_2 + b \ge -b. Vì b<0b < 0, số đối −b-b là số dương. Vế trái vì vậy lớn hơn hoặc bằng một số dương, nên w1+w2+b>0w_1 + w_2 + b > 0.

Điều kiện của điểm (1,1)(1, 1) lại đòi w1+w2+b<0w_1 + w_2 + b < 0. Một số không thể vừa lớn hơn 0 vừa nhỏ hơn 0. Các bất đẳng thức của bốn nhãn XOR không đứng cùng nhau. Phép tính này cho thấy không có bộ w1,w2,bw_1, w_2, b nào, với hàm ngưỡng nêu trên, gắn đúng cả bốn điểm. Nó không nói gì về một mạng đã có tầng ẩn, và mục 5 sẽ chọn tay một mạng như vậy trên cùng bốn điểm.

Thất bại này là thất bại của một lần cộng rồi một lần ngưỡng. Thêm đầu vào thứ ba vẫn là một siêu phẳng, tức một lát cắt phẳng trong không gian cao hơn, nếu tầng đó vẫn tuyến tính cộng ngưỡng. Độ dày của mô hình chỉ tăng thật khi có một bước phi tuyến ở giữa, hoặc khi chính hàm cần học đã là một nửa mặt phẳng. Trên dữ liệu thật, người ta không nhìn bốn góc rồi kết luận cả bài toán. Dấu hiệu cùng kiểu là: biểu đồ hai đặc trưng cho thấy các lớp nằm xen, hoặc một mô hình tuyến tính đã được thử và sai có cấu trúc, không phải sai ngẫu nhiên từng điểm.

Một cách đọc nhầm dễ gặp là đổ lỗi cho hàm sigmoid. Sigmoid một tầng vẫn là một ngưỡng mềm trên cùng một tổng zz. Đường mức σ(z)=0.5\sigma(z) = 0.5 trùng đường z=0z = 0. Uốn trơn làm đầu ra thành xác suất mềm, nếu ta đọc nó như vậy, nhưng ranh giới một ngưỡng vẫn là đường thẳng của zz. XOR không được cứu bằng cách đổi step sang sigmoid trên cùng một tầng.

5. Hai đơn vị ẩn gắn lại bốn điểm XOR

Mục này chọn tay các trọng số để bốn điểm XOR ra đúng nhãn. Đây là một ví dụ tồn tại, tức là một mạng nhỏ làm được bảng này, không phải một lần học từ dữ liệu. Mỗi đơn vị ẩn dùng hàm ngưỡng.

Đơn vị ẩn thứ nhất tính z1=x1+x2−0.5z_1 = x_1 + x_2 - 0.5, rồi h1=1h_1 = 1 khi z1≥0z_1 \ge 0, ngược lại h1=0h_1 = 0. Với các góc của hình vuông, đơn vị này bật khi có ít nhất một đầu vào bằng 1.

Đơn vị ẩn thứ hai tính z2=x1+x2−1.5z_2 = x_1 + x_2 - 1.5, rồi h2=1h_2 = 1 khi z2≥0z_2 \ge 0, ngược lại h2=0h_2 = 0. Đơn vị này chỉ bật khi cả hai đầu vào bằng 1.

Đầu ra tính z=h1−h2−0.5z = h_1 - h_2 - 0.5, rồi nhãn 1 khi z≥0z \ge 0. Trọng số của h1h_1 là 11, trọng số của h2h_2 là −1-1, bias là −0.5-0.5. Nói bằng lời: đầu ra bật khi đơn vị thứ nhất bật và đơn vị thứ hai tắt.

Điểm (0,0)(0, 0). Đơn vị một: 0+0−0.5=−0.50 + 0 - 0.5 = -0.5, nên h1=0h_1 = 0. Đơn vị hai: 0+0−1.5=−1.50 + 0 - 1.5 = -1.5, nên h2=0h_2 = 0. Đầu ra: 0−0−0.5=−0.50 - 0 - 0.5 = -0.5, nhãn 0, trùng XOR.

Điểm (1,0)(1, 0). Đơn vị một: 1+0−0.5=0.51 + 0 - 0.5 = 0.5, nên h1=1h_1 = 1. Đơn vị hai: 1+0−1.5=−0.51 + 0 - 1.5 = -0.5, nên h2=0h_2 = 0. Đầu ra: 1−0−0.5=0.51 - 0 - 0.5 = 0.5, nhãn 1, trùng XOR.

Điểm (0,1)(0, 1). Đơn vị một: 0+1−0.5=0.50 + 1 - 0.5 = 0.5, nên h1=1h_1 = 1. Đơn vị hai: 0+1−1.5=−0.50 + 1 - 1.5 = -0.5, nên h2=0h_2 = 0. Đầu ra: 1−0−0.5=0.51 - 0 - 0.5 = 0.5, nhãn 1, trùng XOR.

Điểm (1,1)(1, 1). Đơn vị một: 1+1−0.5=1.51 + 1 - 0.5 = 1.5, nên h1=1h_1 = 1. Đơn vị hai: 1+1−1.5=0.51 + 1 - 1.5 = 0.5, nên h2=1h_2 = 1. Đầu ra: 1−1−0.5=−0.51 - 1 - 0.5 = -0.5, nhãn 0, trùng XOR.

Trên cả bốn điểm, nhãn tính được trùng nhãn XOR. Phép tính cho thấy hai đơn vị ẩn với hàm ngưỡng, rồi một đơn vị ra, đủ để gắn đúng bảng này với các trọng số đã chọn. Nó không cho thấy mạng sẽ tự tìm ra các trọng số đó, và không cho thấy mọi hàm hai bit đều cần đúng hai đơn vị ẩn.

Đáng chú ý là từng đơn vị ẩn một mình vẫn là một perceptron. Đơn vị một khớp OR. Đơn vị hai khớp AND, đúng bộ số của mục 3. Tầng ra làm một phép trừ: lấy “có ít nhất một bit bật” rồi loại trường hợp “cả hai cùng bật”. XOR trong cách dựng này là OR trừ AND. Tầng ẩn đã biến bốn góc thành các cặp (h1,h2)(h_1, h_2) dễ tách hơn: (0,0)(0,0), (1,0)(1,0), (1,0)(1,0), và (1,1)(1,1). Hai điểm nhãn 1 của XOR rơi vào cùng một cặp (1,0)(1, 0). Điểm nhãn 0 còn lại rơi vào (1,1)(1, 1) hoặc (0,0)(0, 0). Trên mặt phẳng các hh, một đường đã tách được. Phần việc phi tuyến nằm ở chỗ các hh là hàm ngưỡng của xx, nên đường thẳng ở tầng sau tương ứng một ranh giới gập trên mặt phẳng đầu vào.

6. Mạng nhiều tầng và biểu diễn trung gian

Một mạng nhiều tầng, thường gọi là multilayer perceptron khi mọi tầng là nối đầy đủ, xếp ba vai. Tầng vào giữ các số đo ban đầu, và thường không tự có trọng số. Một hoặc nhiều tầng ẩn tính các vector trung gian. Tầng ra phát nhãn hoặc một số dự đoán. Hình dưới đây là sơ đồ các tầng đó.

Mạng neural nhiều tầng

Mỗi mũi tên trong hình là một trọng số. Mỗi nút ẩn làm đúng mạch của mục 1: tổng có trọng số, cộng bias, rồi hàm kích hoạt. Khác biệt với perceptron một tầng là đầu vào của nút sau có thể là đầu ra đã uốn của nút trước, như h1h_1 và h2h_2 trong mục 5.

Người ta hay nói tầng ẩn “học đặc trưng”. Trong ví dụ XOR, đặc trưng không bí ẩn: h1h_1 là một bit OR và h2h_2 là một bit AND, với các trọng số ta đã viết. Trên ảnh hay trên một bảng đo lớn, đơn vị ẩn thường không trùng một tên gọi sẵn. Điều vẫn đúng là tầng ẩn tính một biểu diễn khác của cùng đầu vào, và tầng sau phân loại trên biểu diễn đó. Mạng vì vậy vừa tìm cách biểu diễn, vừa tìm cách gắn nhãn, trong cùng một họ tham số. Bài huấn luyện sẽ nói cách chỉnh các tham số. Bài này chỉ cần thấy biểu diễn trung gian có thể làm một bảng không tách tuyến tính trở thành tách được ở tầng sau.

Một chuỗi biến đổi viết được như sau. Kết luận của sơ đồ là dữ liệu gốc, các vector ẩn, và dự đoán là ba vật khác nhau:

x→f1h1→f2h2→f3y^\mathbf{x} \xrightarrow{f_1} \mathbf{h}_1 \xrightarrow{f_2} \mathbf{h}_2 \xrightarrow{f_3} \hat{\mathbf{y}}

Ký hiệu y^\hat{\mathbf{y}} là dự đoán, để phân biệt với nhãn yy đã cho. Với ảnh một lá cây, chuỗi có thể là các mức sáng đỏ-xanh-lục, rồi các đáp ứng cục bộ, rồi một vector mà tầng cuối đọc thành điểm cho từng bệnh. Ta không cần giả định rằng một nút ẩn “là” mép lá. Nhiều nút cùng tham gia một dấu hiệu là chuyện bình thường. Điều cần giữ là thông tin không gian của ảnh sẽ bị bàn ở bài tích chập; mạng nối đầy đủ trong bài này coi mỗi đầu vào là một tọa độ của vector, chưa có ưu tiên cho các pixel kề nhau.

Chọn hàm ở tầng ra theo kiểu câu trả lời. Hồi quy một số thực, chẳng hạn một điểm số, thường để tầng ra tuyến tính, tức là phát chính zz. Phân loại hai lớp với một xác suất cho lớp dương thường dùng sigmoid. Phân loại nhiều lớp mà đúng một lớp thì softmax biến một vector điểm thành các số dương cộng lại bằng 1. Khi hai điểm bằng nhau, softmax chia đều: với hai điểm (s,s)(s, s),

eses+es=12\frac{e^{s}}{e^{s} + e^{s}} = \frac{1}{2}

Mỗi lớp nhận 0.50.5. Phép này không cần xấp xỉ hàm mũ, vì hai số mũ bằng nhau và rút gọn. Nếu nhiều nhãn có thể đúng cùng lúc trên một mẫu, mỗi nhãn một sigmoid là cách đọc tự nhiên hơn một softmax, vì softmax buộc các đầu ra tranh nhau một tổng bằng 1.

Mạng sâu, hay deep learning trong cách dùng hẹp, là mạng neural có nhiều tầng ẩn. Thêm tầng tăng khả năng biểu diễn khi giữa các tầng có phi tuyến, như phép gộp tuyến tính ở mục 2 đã cho thấy điều ngược lại. Thêm tầng cũng tăng số tham số và số chỗ có thể chỉnh sai. Bài sau mới nói loss và bước cập nhật. Ở đây, “sâu” chưa có nghĩa là chính xác hơn.

Đào sâu: đọc sigmoid, ReLU, và chỗ đặt chúng

Hàm ngưỡng gần như phẳng trên từng nửa đường thẳng. Đạo hàm của nó bằng 0 ở mọi nơi trừ đúng ngưỡng, nơi đạo hàm không tồn tại theo nghĩa thông thường. Khi bài sau truyền một tín hiệu “hãy sửa trọng số” từ loss về phía trước, một hàm phẳng không cho độ dốc để sửa. Sigmoid và ReLU được dùng rộng vì chúng có đoạn độ dốc khác 0. Sigmoid có độ dốc nhỏ khi zz rất dương hoặc rất âm: các giá trị đã tính, 0.88080.8808 tại z=2z = 2 và 0.11920.1192 tại z=−2z = -2, đã nằm gần hai đầu khoảng (0,1)(0, 1). ReLU có độ dốc 1 khi z>0z > 0 và độ dốc 0 khi z<0z < 0. Đơn vị ReLU nào nhận zz âm thì tắt trên mẫu đó; mục tính tay của bài huấn luyện sẽ gặp một trường hợp tắt như vậy sau một bước cập nhật.

Một bảng đặt hàm cho lần đọc đầu:

Chỗ đặtHàm hay gặpĐầu ra đang là gì
Tầng ẩnReLU hoặc một biến thể gần ReLUmột đặc trưng đã bị gập
Hai lớp, một xác suấtSigmoidmột số trong khoảng 0 đến 1
Nhiều lớp, đúng một lớpSoftmaxcác số dương, tổng bằng 1
Nhiều nhãn độc lậpMột sigmoid mỗi nhãnmỗi nhãn một số trong khoảng 0 đến 1
Dự đoán một số thựcTuyến tính ở tầng rachính tổng có trọng số

Bảng là thói quen thiết kế, không phải một định lý rằng mọi bài toán phải theo đúng ô. Một tầng ra tuyến tính trên bài phân loại sẽ phát số âm và số lớn hơn 1, và người đọc phải tự quyết định ngưỡng. Một softmax trên bài hồi quy giá sẽ ép dự đoán thành một phân phối, sai kiểu câu trả lời.

Còn một giới hạn của chính ReLU: nếu mọi đầu vào của một đơn vị đều đẩy zz về phía âm trong suốt quá trình học, đơn vị đó phát 0 và độ dốc cục bộ bằng 0, nên các trọng số đi vào nó không nhận tín hiệu sửa từ các mẫu đó. Người ta gọi tình huống này là đơn vị chết. Nó là một lý do thực hành để khởi tạo và tốc độ học không được đẩy zz âm hàng loạt. Bài này chỉ cần nhận ra triệu chứng trên công thức: max⁡(0,z)\max(0, z) triệt tiêu cả đầu ra lẫn độ dốc khi z<0z < 0.

Đào sâu: vài mốc, để thấy đây không phải một ý tưởng của riêng thập niên này

Các mốc dưới đây là lược sử đã gắn với các tài liệu ở cuối bài, để đặt perceptron và mạng nhiều tầng vào một dòng dài. Chúng không phải một chứng minh rằng một kiến trúc sẽ thắng trên dữ liệu của bạn.

MốcĐiều người học thường cần nhớ
Thập niên 1940đã có mô hình toán sơ khai của neuron
1958Rosenblatt mô tả perceptron như một mô hình học
Thập niên 1960–1970giới hạn của perceptron một tầng được thấy rõ hơn; đây chỉ là một phần của giai đoạn AI ít được kỳ vọng
1986Rumelhart, Hinton và Williams trình bày cách huấn luyện mạng nhiều tầng bằng backpropagation theo cách có ảnh hưởng lớn
Thập niên 1990mạng tích chập và mạng hồi tiếp trở nên thực dụng hơn trên chữ viết, chuỗi và tín hiệu
2012AlexNet cho thấy mạng tích chập sâu, cùng GPU và dữ liệu lớn, tạo một bước nhảy trên ImageNet
2017kiến trúc Transformer cho thấy mô hình chuỗi có thể dựa vào attention thay vì vòng lặp thời gian

Điều đáng giữ từ bảng là sự hội tụ: kiến trúc, cách tối ưu, lượng dữ liệu, phần cứng, và phần mềm tính gradient đã đến cùng một giai đoạn. Một công thức perceptron từ 1958 vẫn là công thức mục 3 của bài này. Phần đổi là ta ghép được nhiều tầng, tính được độ dốc, và có đủ dữ liệu để các tầng đó có gì để học. Bài Language và khóa kiến trúc học sâu sẽ đi tiếp từ attention; bài này dừng ở chỗ một tầng ẩn đã đổi được biểu diễn của XOR.

Tự kiểm tra

  1. Với x=2x = 2, vì sao y=2x+1y = 2x + 1 rồi z=3y−4z = 3y - 4 ra cùng kết quả với z=6x−1z = 6x - 1? Hãy tính cả hai đường.
  2. Trên bộ AND w1=1w_1 = 1, w2=1w_2 = 1, b=−1.5b = -1.5, điểm (1,0)(1, 0) cho zz bằng bao nhiêu, và nhãn ngưỡng là gì?
  3. Bộ w1=1w_1 = 1, w2=1w_2 = 1, b=−0.5b = -0.5 sai điểm XOR nào, và zz tại đó bằng bao nhiêu?
  4. Trong mạng hai tầng ẩn của mục 5, cặp (h1,h2)(h_1, h_2) tại (1,1)(1, 1) là gì, và vì sao đầu ra lại âm?
  5. Bài dự đoán một giá tiền nên để tầng ra là sigmoid, softmax, hay tuyến tính? Bài chọn đúng một trong sáu nhãn thì sao?

Mang đi

Một neuron tính tổng có trọng số, cộng bias, rồi đưa qua hàm kích hoạt. Trọng số và bias là tham số. Trên bốn điểm AND, bộ w1=1w_1 = 1, w2=1w_2 = 1, b=−1.5b = -1.5 với hàm ngưỡng cho bốn nhãn đúng: ba điểm đầu ra 0 và điểm (1,1)(1, 1) có z=0.5z = 0.5 nên ra 1. Trên XOR, bộ w1=1w_1 = 1, w2=1w_2 = 1, b=−0.5b = -0.5 sai điểm (1,1)(1, 1) với z=1.5z = 1.5, và các bất đẳng thức cho thấy không có bộ trọng số nào của một hàm ngưỡng gắn đúng cả bốn điểm. Hai đơn vị ẩn, một cái theo OR và một cái theo AND, rồi một tầng ra lấy hiệu, gắn đúng bốn điểm XOR với các trọng số đã viết. Hai tầng chỉ toàn phép tuyến tính thì gộp lại vẫn là một phép tuyến tính, như 2x+12x + 1 đi qua 3y−43y - 4 thành 6x−16x - 1. Mạng nhiều tầng có ích khi giữa các tầng có một lần uốn, vì lúc đó tầng sau được nhìn một biểu diễn khác của đầu vào.

Bài sau lấy các trọng số này làm đối tượng cần tìm: một loss bậc hai, một tốc độ học, và một bước cập nhật được tính ra số.

Nguồn tham khảo

  • CS50 AI, Lecture 5 - Neural Networks: https://cs50.harvard.edu/ai/notes/5/
  • Rosenblatt, F. (1958), The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain, Psychological Review, DOI: 10.1037/h0042519.
  • Rumelhart, D. E., Hinton, G. E., Williams, R. J. (1986), Learning representations by back-propagating errors, Nature, DOI: 10.1038/323533a0.
  • Krizhevsky, A., Sutskever, I., Hinton, G. E. (2012), ImageNet Classification with Deep Convolutional Neural Networks, NeurIPS.
  • Vaswani, A. et al. (2017), Attention Is All You Need, arXiv:1706.03762.