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 37 - 47)

Cũng như những thuật toán huấn luyện mạng được nêu ở trên, thuật toán này cũng được áp dụng vào mạng kết hợp với phương pháp gradient descent để cập nhật lại trong số theo khuynh hướng lỗi đầu ra giảm dần về cực tiểu. Tuy nhiên thuật toán này có thể nói là thuật toán gần gũi nhất với những kiến thức thông thường, đó là dựa vào đạo hàm để đưa lỗi về giá trị cực tiểu, thuật toán này cũng được chọn để cài đặt trong đồ án.

Giải thuật được chia làm 2 giai đoạn:

- Lan truyền tiến (Tính đầu ra của các neural)

- Lan truyền ngược (Truyền tín hiệu lỗi về các neural)

Để minh họa giải thuật, ở đây tác giả sử dụng một mạng neural gồm 4 lớp: 1 lớp đầu vào gồm 2 neural, lớp ẩn thứ nhất có 3 neural, lớp ẩn thứ hai có 2 neural và lớp đầu ra có 1 neural.

Hình 2.7. Mạng neural dùng trong minh họa thuật toán lan truyền ngược Mỗi neural gồm hai thành phần chính:

- Phần thứ nhất là các trọng số và các trị số đầu vào x, sẽ được tổ hợp lại với bộ tổ hợp e.

25 Hình 2.8. Các thành phần của neural nhân tạo

Để dạy cho mạng chúng ta cần phải có các mẫu. Mỗi mẫu bao gồm hai thành phần đó là:

- Đầu vào x1, x2.

- Đầu ra z là kết quả mong muốn.

Bước 1: Lan truyền tiến

Chúng ta sẽ bắt đầu với hai đầu vào x1, x2. Từ đó chúng ta có thể tính được đầu ra của mỗi neural trong mạng dựa vào công thức 2.1. Hình dưới minh họa cho sự lan truyền các giá trị trong mạng.

Trong đó:

- w(xm)n: Tượng trưng cho các trọng số của kết nối giữa đầu vào 𝑥𝑚 và neural thứ n trong lớp đầu vào của mạng.

26 Hình 2.9. Minh họa lan truyền tiến

Sự lan truyền của các tín hiệu từ lớp đầu vào đến lớp ẩn. Kí hiệu wmn biểu diễn trọng số của kết nối giữa đầu ra của neural m và là đầu vào của neural n.

27 Hình 2.10. Minh họa lan truyền tiến

Sự lan truyền của tín hiệu đến lớp đầu ra:

Hình 2.11. Minh họa lan truyền tiến

Bước tiếp theo của giải thuật là so sánh giá trị đầu ra của mạng là y với giá trị z là kết quả mong muốn. Hiệu giữa chúng ta gọi là tín hiệu lỗi  của lớp đầu ra.

28 Như đã đề cập trong phần 2.2.3.4, công thức 2.2 là công thức tính lỗi tổng quát. Tuy nhiên trong thực tế, người ta lại không làm theo công thức này, mà người ta thường đi tìm cực tiểu lỗi của 1

2E. Theo [12], hệ số 1

2 được áp dụng vào nhằm khử số mũ khi lấy đạo hàm. Điều này có nghĩa rằng từ đây về sau chúng ta sẽ làm việc với công thức tính lỗi sau:

1

2∑num_outputi = 0 (zi − yi)2 Với:

zi: Là đầu ra mong muốn yi: Là đầu ra thực tế

Như đã nói, thuật toán lan truyền ngược dựa vào đạo hàm để cực tiểu hóa lỗi, cụ thể ở trong trường hợp đang xét này, ta cần tính lỗi của các trọng số của mạng, vì nhiệm vụ của chúng ta ở đây là cập nhật lại trọng số sao cho lỗi cực tiểu. Ở đây, ta sẽ chứng minh 2 công thức liên quan:

-Đạo hàm của hàm kích hoạt: Do ta tính lỗi dựa trên đầu ra của mạng, mà đầu ra có được nhờ hàm kích hoạt (Trong công thức của ta sẽ dính đạo hàm của hàm kích hoạt nên ta chứng minh trước).

o Gọi x là tổng giá trị đầu vào và trọng số

o Gọi 𝜎(x) là hàm kích hoạt Sigmoid, ta có 𝜎(x) = 1 1+e−x

o Gọi d

dxσ(x) là đạo hàm riêng của hàm kích hoạt theo biến số x, ta có d dxσ(x) = d dx( 1 1+e−x) = e−x (1+e−x)2 = 1+e −x−1 (1+e−x)2 = 1+e −x (1+e−x)2 – 1 (1+e−x)2 = 1 1+e−x – ( 1 1+e−x)2 = σ(x) – σ(x)2 = σ(x)(1 – σ(x))

29 - Ta muốn tính đạo hàm lỗi theo mỗi trọng số 𝑤𝑗𝑖 cho neural đầu ra thứ j.

o Gọi ∂E

∂wji là đạo hàm lỗi theo trọng số thứ j của neural thứ i.

o Gọi sj = wjxj là tổng của các tích trọng số và đầu vào của neural thứ j. o Ta có: ∂E ∂wji = ∂E sj ∂sj ∂wji = ∂E sj xji o Gọi 𝛿𝑗 = ∂E ∂sj = ∂ ∂sj 1 2 (zj− yj)2 = –(zj − yj) ∂y∂sj j (yj = σ(sj)) = –(zj − yj) ∂ ∂sjσ(sj) = –(zj − yj)(1 – σ(sj)) σ(sj) = –(zj − yj)(1 – yj) yj (2.4)

o Gọi ∆𝑤𝑗𝑖 là sai số của trọng số ứng với tín hiệu lỗi của lần học đó, ta có:

∆wji = –η∂w∂E

ji = –ηδjxji Trong đó:

𝜂: Là tỉ lệ học, là một đại lượng ngẫu nhiên ảnh hưởng đến tốc độ dạy của mạng. Có nhiều cách để chọn 𝜂. Có thể bắt đầu quá trình học bằng cách chọn 𝜂 là một đại lượng lớn rồi trong suốt quá trình học sẽ giảm dần giá trị này. Hoặc cách khác nữa là bắt đầu bằng một giá trị nhỏ rồi sau đó trong quá trình học có thể tăng dần giá trị này, đến cuối quá trình học lại giảm giá trị này xuống, cũng có thể giữ nguyên giá trị này trong suốt quá trình học,…

o Tóm lại, công thức cập nhật lại trọng số:

wji = wji + ∆wji = wji + ηδjxji (dấu - ta có thể bỏ)

30 Vì đây là ví dụ, nên ta chia công thức 2.4 ra làm cho dễ hiểu. Ta sẽ tính phương sai lỗi trước, sau đó lan truyền đến lớp ẩn cuối cùng, rồi mới lan truyền lên lại và dùng đạo hàm hàm kích hoạt để cập nhật trọng số. Cụ thể ở đây, nếu gọi 𝛿 là đạo hàm lỗi, thì ta có:

𝑧1 − 𝑦1 Vậy:

Hình 2.12. Tính giá trị lỗi ở neural đầu ra ở lớp đầu ra

Chúng ta không thể tính được các tín hiệu lỗi của các neural một cách trực tiếp. Bởi vì chúng ta không có được đầu ra của mỗi neural. Nên chúng ta sẽ lan truyền tín hiệu lỗi  lùi lại đến tất cả các neural. δn là tín hiệu lỗi ở neural n.

31 Hình 2.13. Lan truyền lỗi ở neural lớp đầu ra đến các neural ở lớp ẩn 2

Chú ý: Các trọng số wmn được dùng để tính toán trong trường hợp lan truyền ngược này bằng với các trọng số wmn trong lan truyền tiến. Chỉ có chiều của lan truyền tín hiệu là thay đổi. Kỹ thuật này được dùng cho tất cả các lớp của mạng. Ta có thể thấy bằng hình ảnh:

32 Hình 2.14. Lan truyền lỗi từ các neural lớp ẩn 2 đến các neural lớp ẩn 1 Để trùng với hình vẽ, ta định nghĩa lại công thức cập nhật trọng số lại như sau:

𝑤′𝑥𝑗𝑖 = 𝑤𝑥𝑗𝑖 + 𝜂𝛿𝑖𝑑𝑓(𝑒) 𝑑𝑒 𝑥𝑖 Trong đó:

𝑑𝑓(𝑒)

𝑑𝑒 : Đạo hàm của hàm kích hoạt Ta có:

34 Hình 2.15. Cập nhật lại trọng số kết nối từ lớp đầu vào tới lớp ẩn

Hình 2.16. Cập nhật lại trọng số liên kết từ lớp ẩn 2 tới lớp đầu ra

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 37 - 47)

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

(170 trang)