Mạng Perceptron truyền thẳng

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 30 - 170)

2.2.1. Mạng Perceptron

Như đã giới thiệu, Perceptron là một mạng chỉ có một lớp neural (Lớp này có thể có một hay nhiều neuron), do Frank Rosenblatt đề nghị năm 1957.

Lớp đầu vào có chức năng thu nhận tín hiệu, như vậy mạng chỉ có 1 lớp là đầu ra.

Hình 2.5. Mạng perceptron (Single player)

Mạng neural truyền thẳng một lớp là loại mạng chỉ có lớp neural đầu vào và một lớp neural đầu ra (Thực chất lớp neural đầu vào không có vai trò xử lý, do đó ta nói mạng chỉ có một lớp). Loại mạng này còn được gọi là mạng perceptron một lớp. Mỗi neural đầu ra có thể nhận tín hiệu từ các đầu vào x1, x2,…, xm để tạo ra tín hiệu đầu ra tương ứng. Mô hình mạng neural của Rosenblatt sử dụng hàm ngưỡng đóng vai trò là hàm chuyển. Do đó, tổng của các tín hiệu vào lớn hơn giá trị ngưỡng thì giá trị đầu ra của neural sẽ là 1, còn trái lại sẽ là 0.

Từ khi mạng Perceptron một lớp được đề xuất nó đã được sử dụng để giải quyết bài toán phân lớp. Một đối tượng sẽ được neural i phân vào lớp A nếu tổng thông tin đầu vào: ∑wijxj > θ i(Ngưỡng). Trong đó wij là trọng số liên kết từ neural j tới neural i, xj là đầu vào từ neural j, và θ là ngưỡng của neural i. Trong trường hợp trái lại đối tượng sẽ được phân vào lớp B.

18

2.2.2. Mạng Perceptron truyền thẳng nhiều lớp

Trong mạng neural truyền thẳng nhiều lớp, lớp nhận tín hiệu vào của mạng gọi là lớp vào (Input layer), nó thường không thực hiện việc chuyển đổi thông tin mà chỉ làm chức năng nhận tín hiệu. Tín hiệu ra của mạng được đưa ra từ lớp ra (Output layer). Các lớp ở giữa lớp vào và lớp ra gọi là các lớp ẩn. Trong mạng truyền thẳng (Feed– forward network) không có nút nào mà đầu ra của nó là đầu vào của một nút khác trên cùng lớp với nó hoặc lớp trước [9].

19 Hình 2.6. Mạng perceptron nhiều lớp

Ở đây, chúng ta xác định ba thành phần cơ bản của một mô hình neural:

Một tập hợp các trọng số hay các kết nối, mà mỗi một trong chúng được đặc trưng bởi một trọng số của riêng nó. Tức là một tín hiệu tại đầu vào của trọng số j nối với neural k sẽ được nhân với trọng số wkj. Ở đó k là chỉ số của neural tại đầu ra của trọng số đang xét, còn j chỉ điểm đầu vào của trọng số. Các trọng số của một neural nhân tạo có thể nhận cả các giá trị âm và các giá trị dương.

Một bộ cộng để tính tổng các tín hiệu đầu vào của neural, đã được nhân với các trọng số tương ứng; phép toán được mô tả ở đây tạo nên một bộ tổ hợp tuyến tính.

Một hàm kích hoạt (Activation function) để giới hạn biên độ đầu ra của neural. Hàm kích hoạt cũng được xem xét như là một hàm nén, nó nén (Giới hạn) phạm vi biên độ cho phép của tín hiệu đầu ra trong một khoảng giá trị hữu hạn. Có nhiều loại hàm kích hoạt:

Hàm truyền Đồ thị Định nghĩa

Symmetrical Hard Limit

(Hardlims) y = {−1 nếu x < 0

20

Linear (Purelin) y = x

Saturating Linear (Satlin) y = {

0 với x < 0 x với 0 ≤ x ≤ 1 1 với x > 1 Log–Sigmoid (Logsig) y = 1 1+ e−x Bảng 2.2. Một số hàm kích hoạt

Có thể mô tả kiến trúc của mạng neural perceptoron nhiều lớp như sau:

- Đầu vào là các vector (x1, x2,..., xn) trong không gian n chiều, đầu ra là các vector (y1, y2,..., ym) trong không gian m chiều. Đối với các bài toán phân loại, n chính là kích thước của mẫu đầu vào, m chính là số lớp cần phân loại. - Mỗi neural thuộc tầng sau liên kết với tất cả các neural thuộc tầng liền trước

nó.

- Đầu ra của neural tầng trước là đầu vào của neural thuộc tầng liền sau nó Hoạt động của mạng như sau: Tại tầng đầu vào các neural nhận tín hiệu vào xử lý (Tính tổng trọng số, gửi tới hàm kích hoạt) rồi cho ra kết quả (Là kết quả của hàm kích hoạt), kết quả này sẽ được truyền tới các neural thuộc tầng ẩn thứ nhất; các neural tại đây tiếp nhận như là tín hiệu đầu vào, xử lý và gửi kết quả đến tầng ẩn thứ 2, thứ 3,…, quá trình tiếp tục cho đến khi các neural thuộc tầng ra cho kết quả.

2.2.3. Các phương pháp học của mạng

Định nghĩa [11]: Học trong mạng neural là quá trình thay đổi giá trị của trọng số để mạng có thể đưa ra được kết quả mong muốn tối ưu.

21 Sự khác nhau giữa giá trị thật của mẫu và kết quả dự đoán của mạng gọi là lỗi. Quá trình học sẽ tìm các trọng số để lỗi nhỏ nhất.

Một mạng neural được huấn luyện sao cho với một tập các vector đầu vào X, mạng có khả năng tạo ra tập các vector đầu ra mong muốn Y của nó. Tập X được sử dụng cho huấn luyện mạng được gọi là tập huấn luyện (Training set). Các phần tử x thuộc X được gọi là các mẫu huấn luyện (Training example). Quá trình huấn luyện bản chất là sự thay đổi các trọng số liên kết của mạng. Trong quá trình này, các trọng số của mạng sẽ hội tụ dần tới các giá trị sao cho với mỗi vector đầu vào x từ tập huấn luyện, mạng sẽ cho ra vector đầu ra y như mong muốn

Có ba phương pháp học phổ biến là học có giám sát (Supervised learning), học không giám sát (Unsupervised learning) và học tăng cường (Reinforcement learning):

Học có giám sát

Là quá trình học có sự tham gia giám sát của một “thầy giáo”. Cũng giống như việc ta dạy một tác giả nhỏ các chữ cái. Ta đưa ra một chữ “a” và bảo với tác giả đó rằng đây là chữ “a”. Việc này được thực hiện trên tất cả các mẫu chữ cái. Sau đó khi kiểm tra ta sẽ đưa ra một chữ cái bất kì (có thể viết hơi khác đi) và hỏi tác giả đó đây là chữ gì?

Với học có giám sát, tập mẫu huấn luyện được cho dưới dạng D = {(x,t) | (x,t) ∈ [IRN x RK]}, trong đó: x = (x1, x2,..., xN) là vector đặc trưng N chiều của mẫu huấn luyện và t = (t1, t2,..., tK) là vector mục tiêu K chiều tương ứng, nhiệm vụ của thuật toán là phải thiết lập được một cách tính toán trên mạng như thế nào đó để sao cho với mỗi vector đặc trưng đầu vào thì sai số giữa giá trị đầu ra thực sự của mạng và giá trị mục tiêu tương ứng là nhỏ nhất. Chẳng hạn mạng có thể học để xấp xỉ một hàm t = f(x) biểu diễn mối quan hệ trên tập các mẫu huấn luyện (x, t).

Như vậy với học có giám sát, số lớp cần phân loại đã được biết trước. Nhiệm vụ của thuật toán là phải xác định được một cách thức phân lớp sao cho với mỗi vector đầu vào sẽ được phân loại chính xác vào lớp của nó.

22

Học không có giám sát

Là việc học không cần có bất kỳ một sự giám sát nào. Trong bài toán học không giám sát, tập dữ liệu huấn luyện được cho dưới dạng: D = {(x1, x2,..., xn)}, với (x1, x2,..., xn) là vector đặc trưng của mẫu huấn luyện. Nhiệm vụ của thuật toán là phải phân chia tập dữ liệu D thành các nhóm con, mỗi nhóm chứa các vector đầu vào có đặc trưng giống nhau.

Như vậy với học không giám sát, số lớp phân loại chưa được biết trước, và tùy theo tiêu chuẩn đánh giá độ tương tự giữa các mẫu mà ta có thể có các lớp phân loại khác nhau.

Học tăng cường

Đôi khi còn được gọi là học thưởng–phạt (Reward–penalty learning), là sự tổ hợp của cả hai mô hình trên. Phương pháp này cụ thể như sau: Với vector đầu vào, quan sát vector đầu ra do mạng tính được. Nếu kết quả được xem là “tốt” thì mạng sẽ được thưởng theo nghĩa tăng các trọng số kết nối lên; ngược lại mạng sẽ bị phạt, các trọng số kết nối không thích hợp sẽ được giảm xuống. Do đó học tăng cường là học theo nhà phê bình (Critic), ngược với học có giám sát là học theo thầy giáo.

Phương pháp huấn luyện cho mạng và sự lựa chọn của đồ án

Đồ án sẽ chọn phương pháp học có giám sát, bởi vì học có giám sát có thể được xem như việc xấp xỉ một ánh xạ: X→ Y, trong đó X là tập các vấn đề và Y là tập các lời giải tương ứng cho vấn đề đó. Các mẫu (x, y) với x = (x1, x2,..., xn) ∈ X, y = (y1, y1,..., ym) ∈ Y được cho trước. Rõ ràng hơn, ở đây ta có 1 tập các ảnh huấn luyện, và tập các đầu ra mong muốn. Ta muốn tìm 1 ánh xạ f nào đó sao cho ứng với mỗi mẫu x trong tập huấn luyện ta cho ra đúng đầu y của tập đầu ra mong muốn.

Học có giám sát trong các mạng neural thường được thực hiện theo các bước sau: B1: Xây dựng cấu trúc thích hợp cho mạng neural như n neural đầu vào, m

neural đầu ra, và khởi tạo các trọng số liên kết của mạng. B2: Đưa một vector x trong tập mẫu huấn luyện X vào mạng. B3: Tính vector đầu ra o của mạng.

23 B4: So sánh vector đầu ra mong muốn y (Là kết quả được cho trong tập huấn luyện) với vector đầu ra o do mạng tạo ra; nếu có thể thì đánh giá lỗi. B5: Hiệu chỉnh các trọng số liên kết theo một cách nào đó sao cho ở lần tiếp

theo khi đưa vector x vào mạng, vector đầu ra o sẽ gần với y hơn, tức là sự sai lệch hay lỗi so với lần học trước đó đã giảm.

B6: Nếu cần, lặp lại các bước từ 2 đến 5 cho tới khi mạng đạt tới trạng thái hội tụ (trạng thái mạng ra đúng chính xác giá trị mong muốn). Việc đánh giá lỗi có thể thực hiện theo nhiều cách, cách dùng nhiều nhất là sử dụng lỗi tức thời, và nhiệm vụ của mỗi lần lặp là làm nhỏ dần lỗi này đến cực tiểu, công thức tính lỗi dựa theo công thức bình phương nhỏ nhất:

∑num_outputi = 0 (ti − yi)2(2.2) Trong đó:

E: Giá trị lỗi ở đầu ra

t: Giá trị đầu ra mong muốn y: Giá trị đầu ra thực

Có hai loại lỗi trong đánh giá một mạng neural [11]. Thứ nhất, gọi là lỗi rõ ràng (Apparent error), đánh giá khả năng xấp xỉ các mẫu huấn luyện của một mạng đã được huấn luyện. Thứ hai, gọi là lỗi kiểm tra (Test error), đánh giá khả năng tổng quá hóa của một mạng đã được huấn luyện, tức khả năng phản ứng với các vector đầu vào mới. Để đánh giá lỗi kiểm tra chúng ta phải biết đầu ra mong muốn cho các mẫu kiểm tra.

Thuật toán tổng quát ở trên cho học có giám sát trong các mạng neural có nhiều cài đặt khác nhau, sự khác nhau chủ yếu là cách các trọng số liên kết được thay đổi trong suốt thời gian học như đã nói ở bước 5, trong thực tế đã có nhiều thuật toán giải quyết vấn đề này được đề xuất [9]:

- Thuật toán lan truyền ngược (Back propagation) - Liên hợp giảm độ dốc (ConJugate gradient descent) - Lan truyền nhanh (Quick propagation)

24 - Delta–Bar–Delta

2.2.4. Thuật toán lan truyền ngược

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,…

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 30 - 170)

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

(170 trang)