Ví dụ về thuật toán lan truyền ngược

Một phần của tài liệu Dò tìm phát hiện mặt người bằng mạng neural nhân tạo và PCA (Thuần code) (Trang 47 - 49)

35 Mạng neural này có 2 neural A, B ở lớp đầu vào, 2 neural A1, B1 lớp ẩn và 1 neural C lớp ra.

Mạng thuộc kiến trúc perceptron đa lớp truyền thẳng. w1 = 0.3 w2 = 0.9 w3 = 0.1 w4 = 0.8 w5 = 0.4 w6 = 0.6

Mục tiêu của mạng là cho ra output = 0.5. Tỉ lệ học (Learning rate) = 1.

Giải bài toán như sau:

Lan truyền tiến:

Input to neuron A1 = (0.35 × 0.1) + (0.9 × 0.8) = 0.755 => Out = 0.68. Input to neuron B1 = (0.9 × 0.6) + (0.35 × 0.4) = 0.68 => Out = 0.6637. Input to neuron C = (0.3 × 0.68) + (0.9 × 0.6637) = 0.80133 => Out = 0.69. Vậy output của mạng trong lần học đầu tiên là 0.69.

Lan truyền ngược:

Gradient output: δ = Error × 𝑑𝑓(𝑒)

𝑑𝑒 = (t - o)(1 - o)o = (0.5 - 0.69)(1 - 0.69)0.69 = -0.0406. Trong đó:

t: target, đầu ra mong muốn, là z trong hình trên. o: output, đầu ra tính được, là y trong hình trên. Error = t - o (Đạo hàm lỗi đã trình bày ở trên)

𝑑𝑓(𝑒)

𝑑𝑒 : Đạo hàm của hàm kích hoạt, ở đây ta chọn hàm Sigmoid, đạo hàm của hàm Sigmoid là (1 - o) × o như đã chứng minh.

Cập nhật trọng số của lớp đầu ra:

36 w2 = w2 + (δ × oB1) = 0.9 + (-0.0406 × 0.6637) = 0.87305.

Tính Gradient của lớp ẩn:

Do bài này chỉ có 1 neural ở lớp ra, nên ta có: 𝛿𝐴1 = 𝑑𝑓(𝑒) 𝑑𝑒 × δ × w1 = (1 - 𝑜𝐴1)𝑜𝐴1 × -0.0406 × 0.272392 = -2.406 × 10−3 𝛿𝐵1 = 𝑑𝑓(𝑒) 𝑑𝑒 × δ × w2 = (1 - 𝑜𝐵1)𝑜𝐵1 × -0.0406 × 0.87305 = -7.916 × 10−3 Cập nhật lại trọng số lớp ẩn: w3 = 0.1 + (-2.406 × 10−3 × 0.35) = 0.09916. w4 = 0.8 + (-2.406 × 10−3 × 0.9) = 0.7978. w5 = 0.4 + (-7.916 × 10−3 × 0.35) = 0.3972. w6 = 0.6 + (-7.916 × 10−3 × 0.9) = 0.5928.

Bạn hãy tính toán lại đầu ra thử nhé, lúc này đầu ra sẽ giảm còn 0.68205 so với 0.69 trước đó. Việc tính toán này lặp đi lặp lại sẽ hội tụ về 0.5 đúng với đầu ra ta mong muốn.

Một phần của tài liệu Dò tìm phát hiện mặt người bằng mạng neural nhân tạo và PCA (Thuần code) (Trang 47 - 49)

Tải bản đầy đủ (PDF)

(170 trang)