Mạng Nơ-ron nhân tạo truyền thẳng – Feedforward Neural Network

Sơ lược về mạng nơ-ron nhân tạo nói chung và mạng nơ-ron truyền thẳng nói riêng

Não người được hình thành từ các nơ-ron thần kinh liên kết với nhau tạo thành một hệ thống. Mỗi tế bào nơ-ron bao gồm thân chứa nhân tế bào. Từ thân phát ra nhiều tua ngắn, phân nhánh gọi là sợi nhánh và một tua dài, có bao mi-ê-lin, gọi là sợi trục. Đầu mỗi sợi là các xi-náp dùng để liên kết các nơ-ron lại với nhau theo kiểu sợi trục của tế bào này sẽ nối vào sợi nhánh của tế bào khác và hình thành mạng nơ-ron thần kinh. Xung thần kinh được truyền từ một tế bào ra sợi trục của nó, đến sợi nhánh của tế bào thần kinh khác và cứ thế lan truyền.

Lấy ý tưởng từ mô hình trên, mạng nơ-ron nhân tạo ra đời với cấu trúc tương tự trong đó một nơ-ron là một khối tính toán gồm nhiều đầu vào (các sợi nhánh), một đầu ra (sợi trục) và một giá trị ngưỡng để cho phép tín hiệu có truyền qua nơ-ron này hay không. Các giá trị đầu vào sẽ được nhân với một bộ trọng số w và tính tổng các kết quả cùng với một hằng số phụ b (bias). Nếu tổng vượt giá trị ngưỡng thì đầu ra sẽ có giá trị thể hiện nơ-ron này đã được kích hoạt (thường là +1), ngược lại sẽ là giá trị chưa được kích hoạt (thường là -1). Các giá trị trọng số đầu vào của mỗi nơ-ron sẽ được điều chỉnh thông qua quá trình học để xây dựng được mạng nơ-ron phù hợp cho bài toán đang cần giải quyết.

a neural cell
hình ảnh một tế bào nơ-ron nhân tạo

Các nơ-ron nhân tạo liên kết lại với nhau sẽ hình thành nên mạng nơ-ron với nhiều lớp gồm lớp đầu vào (imput layer), các lớp ẩn (hidden layers) và lớp đầu ra (output layer). Mô hình đơn giản nhất của mạng nơ-ron chính là mạng nơ-ron truyền thẳng. Các nơ-ron trong mạng truyền thẳng liên kết với nhau mà không hình thành chu trình nên tín hiệu sẽ truyền thẳng từ đầu vào qua các lớp ẩn và đến đầu ra.

feedforward neural network
một mô hình mạng nơ-ron truyền thẳng

Perceptron một lớp

Perceptron một lớp là một mô hình đơn giản nhất của mạng nơ-ron truyền thẳng chỉ với một lớp đầu ra. Trong lớp này có thể có một hoặc nhiều nơ-ron và các thông số đầu vào sẽ được kết nối trực tiếp đến các nơ-ron này.

single layer perceptron
single layer perceptron

Mô hình perceptron một lớp vốn bắt nguồn từ thuật toán perceptron, cũng chính là mô hình perceptron một lớp đơn giản nhất chỉ với một nơ-ron. Ngay từ khi ra đời, mô hình này đã thể hiện được khả năng của nó trong các bài toán phân lớp thông qua việc học bộ dữ liệu huấn luyện và điều chỉnh các trọng số w (chi tiết xem trong bài viết thuật toán perceptron). Không chỉ các bài toán phân lớp nhị phân mà các bài toán phân thành nhiều lớp hơn cũng có thể giải quyết bằng cách thêm nhiều nơ-ron vào trong lớp. Hơn thế nữa, perceptron một lớp còn có thể mô phỏng lại một số hàm như AND, OR và NOT. Tuy nhiên, năm 1969, Marvin Minsky và Seymour Papert đã chứng minh được rằng mô hình này chỉ có thể giải quyết các bài toán khả phân tách tuyến tính (linearly separable) và đối với các bài toán không thể phân tách tuyến tính như mô phỏng lại hàm XOR thì mô hình perceptron một lớp không thể giải quyết

Perceptron nhiều lớp

Mô hình perceptron nhiều lớp, cải tiến của perceptron một lớp, là một mạng nơ-ron truyền thẳng điển hình. Mô hình này ngoài các lớp đầu vào và đầu ra còn có các lớp ẩn và một nơ-ron trong một lớp được kết nối đầy đủ đến tất cả các nơ-ron của lớp tiếp theo.

Khác biệt lớn nhất giữa mạng Perceptron một lớp và Perceptron nhiều lớp chính là hàm kích hoạt. Perceptron nhiều lớp sử dụng hàm kích hoạt phi tuyến. Hai hàm được sử dụng nhiều nhất là:

y(x) = tanh(x) y(x) = \frac{1}{1 + e^{-x}}

Lý do sử dụng các hàm phi tuyến vì mạng chỉ sử dụng các hàm tuyến tính có thể lược giản thông qua các biến đổi đại số thành mô hình perceptron một lớp và như vậy vẫn không có tiến triển gì so với mô hình một lớp. Đồng thời các hàm phi tuyến này cũng gần tương đương với các hàm kích hoạt tuyến tính, chúng vẫn có thể chia ngưỡng thành các giá trị 0, 1 (hoặc +1 và -1) khi x có giá trị đủ lớn.

Mạng nơ-ron truyền thẳng Perceptron nhiều lớp học điều chỉnh các trọng số w thông qua thuật toán lan truyền ngược sai số (backpropagation). Tư tưởng chính của thuật toán này như tên gọi của nó: lan truyền sai số giữa kết quả y mà mô hình đưa ra với đầu vào x và kết quả thật sự d để cập nhật các trọng số cho từng nút mạng (các nơ-ron). Giả sử có một mô hình Perceptron 3 lớp (lớp vào (x), lớp ẩn (z), lớp ra (y)) với hàm kích hoạt tại các nơ-ron là g. Một mẫu dữ liệu train x cho giá trị vào của neural lớp ẩn thứ q là net_q = \sum_{j=1}^{m}w_{qj}x_j và giá trị ra z_q = g(net_q). Các giá trị ra này sẽ lại được dùng làm giá trị vào cho nơ-ron lớp tiếp theo, do đó ta có chuỗi lan truyền tín hiệu cho tới đầu ra y_i = g(\sum_{q=1}^{l}w_{iq}z_q) = g(\sum_{q=1}^{l}w_{iq}g(\sum_{j=1}^{m}w_{qj}x_j)). Xét hàm tính độ sai số giữa kết quả từ mô hình và kết quả thật sự như sau:

E(w) = \frac{1}{2}\sum_{i=1}^{n}(d_i - y_i)^{2} = \frac{1}{2}\sum_{i=1}^{n}(d_i - g(net_i))^{2} = \frac{1}{2}\sum_{i=1}^{n}(d_i - g(\sum_{q=1}^{l}w_{iq}z_q))^{2}

Hàm này thể hiện mức sai lệch của dữ liệu phụ thuộc vào các trong số w của các nơ-ron. Để tìm được trọng số phù hợp chúng ta cần điều chỉnh để hàm E(w) đạt giá trị nhỏ nhất. Xét nơ-ron i thuộc lớp ra nhận đầu vào từ các nơ-ron q lớp ẩn, ta có \Delta w_{iq} = -\eta\frac{\partial E}{\partial w_{iq}} là giá trị hiệu chỉnh cho trọng số wiq. Triển khai theo nguyên tắc tính đạo hàm gián tiếp, ta có:
\Delta w_{iq} = -\eta \frac{\partial E}{\partial y_{i}}\frac{\partial y_i}{\partial net_i}\frac{\partial net_i}{\partial w_{iq}} = \eta [d_i - y_i]g'(net_i)(z_q) = \eta \delta_i z_q

Ta thấy công thức trên giống với cách học cho peceptron một lớp với đầu là y và đầu vào là các zq truyền đến từ lớp ẩn. Áp dụng cách thức tương tự cho các nơ-ron thuộc lớp ẩn nhận đầu vào từ lớp vào:
\Delta w_{qj} = -\eta \frac{\partial E}{\partial z_q}\frac{\partial z_q}{\partial net_q}\frac{\partial net_q}{\partial w_{qj}}

Ta có công thức tính E nếu thay y_i = g(\sum_{q=1}^{l}w_{iq}z_q) sẽ là một hàm theo zq với \frac{\partial E}{\partial z_q} = \sum_{i=1}^{n}[(d_i - y_i)g'(net_i)w_{iq}]. Như vậy:
\Delta w_{qj} = \eta \sum_{i=1}^{n}[(d_i - y_i)g'(net_i)w_{iq}]g'(net_q)x_j = \eta\sum_{i=1}^{n}[\delta_i w_{iq}]g'(net_q)x_j

Lỗi di – yi đã được lan truyền về lớp ẩn và sử dụng để cập nhật trọng số. Nếu có nhiều hớn một lớp ẩn thì việc lan truyền sai số vẫn tiếp diễn vì ta có thể dễ dàng tính \delta của lớp thứ i dựa vào \delta của lớp thứ i+1 và dùng nó để tính \Delta w của lớp thứ i. Khi đã có các giá trị \Delta w ta sẽ dùng gradient descent để cập nhật các tham số w của mạng nơ-ron.

Mạng nơ-ron Perceptron đa lớp có nhiều ưu điểm hơn Perceptron một lớp, điển hình như bài toán mô phỏng hàm XOR. Perceptron đa lớp có thể mô phỏng lại một hàm XOR như mô hình dưới đây.

xor-perceptron
XOR với Perceptron đa lớp

Mạng nơ-ron truyền thẳng đa lớp còn có nhiều ứng dụng trong thực tế như trong các bài toán nhận dạng hình ảnh, nhận dạng tiếng nói, xử lý ngôn ngữ tự nhiên, ….

Bài viết tham khảo từ các nguồn:
https://en.wikipedia.org/wiki/Multilayer_perceptron
https://en.wikipedia.org/wiki/Feedforward_neural_network
Giáo trình Cơ sở trí tuệ nhân tạo, tác giả PGS.TS. Lê Hoài Bắc, ThS. Tô Hoài Việt, nhà xuất bản Khoa Học và Kỹ Thuật năm 2014

Chia sẻ bài viết:

Về tác giả

Lương Quốc An

Xem tát cả bài đăng

15 Comments

    • di là giá trị target thật sự mà ta mong muốn hệ thống của mình predict ra đuợc. Dùng di trong việc tính sai số để xác định xem mô hình của mình có độ lỗi là bao nhiêu và từ đó dùng độ lỗi để cập nhật lại trọng số mô hình.

      • Chào bạn, Mình mới nghiên cứu về deep learning. Bạn có thể nói rõ cho mình hiểu kỹ thuật embedding là như thế nào không? Bạn có thể cho mình skype or facebook để giúp đỡ mình được không? Mình cảm ơn bạn nhiều !

    • ký kiệu η là learning rate dùng trong thuật toán gradient descent. Nó đại diện cho tốc độ hạ dốc xuống dần điểm cực tiểu. Nếu learning rate nhỏ thì tìm đuợc cực tiểu sẽ lâu, còn nếu learning rate lớn thì thuật toán gradient descent có thể không hội tụ.

  • anh co link thuật toán backpropagation bằng c# ko anh. anh có thể cho em xin địa chỉ Email của anh được không.

    • Mình ko có link thuật toán backpropagation bằng c#. Hiện có rất nhiều framework để xây dựng model mạng nơ-ron. Bạn có thể search google chứ không cần phải code lại thuật toán backpropagation.

      • Anh ơi có thể cho em hỏi mình chỉ có dữ liệu kinh doanh của công ty trong 2 năm 2015, 2016 thì mình có thể sử dụng mang noron để dư báo được không anh.

        • Ở đây bài toán dự báo của bạn là dự báo cái gì? Mạng nơ-ron dùng tốt trong các bài toán phân lớp và cần dữ liệu đủ nhiều. Nếu trong 2 năm bạn có hơn trăm ngàn dòng data thì vẫn dùng đuợc. Ở đây nếu bạn dùng để dự đoán sự tăng trường thì có thể tham khảo qua bài Linear Regression. Mạng nơ-ron như đã đề cập thường dùng cho các bài toán phân lớp và nhận dạng.

  • Chào bạn, Mình mới nghiên cứu về deep learning. Bạn có thể nói rõ cho mình hiểu kỹ thuật embedding là như thế nào không? Bạn có thể cho mình skype or facebook để giúp đỡ mình được không? Mình cảm ơn bạn nhiều !

    • Bạn có thể nói rõ hơn về bài toán mà bạn muốn áp dụng kỹ thuật embedding đuợc không?

      • Bài toán của mình là hệ thống khuyến nghị sản phẩm: users, movies, và ratting là đánh giá người dùng lên movie. Out put là các ratting còn thiếu để đưa ra khuyến nghị cho người dùng

Leave a Reply

Your email address will not be published. Required fields are marked *