Perceptron: Khối xây dựng của mạng nơron nhân tạo

Nút nguồn: 1216283

Nếu bạn là người đam mê máy học và AI, chắc hẳn bạn đã bắt gặp từ perceptron. Perceptron được dạy trong chương đầu tiên của nhiều khóa học học sâu. Vậy chính xác nó là gì? Cảm hứng đằng sau nó là gì? Làm thế nào chính xác nó giải quyết vấn đề phân loại? Trong bài viết này, chúng ta sẽ bắt đầu với nguồn cảm hứng sinh học đằng sau perceptron, sau đó đi sâu vào các kỹ thuật toán học của nó, và cuối cùng xây dựng một bộ phân loại nhị phân từ đầu bằng cách sử dụng đơn vị perceptron.

Cảm hứng sinh học của Mạng lưới thần kinh

Một tế bào thần kinh (tế bào thần kinh) là khối xây dựng cơ bản của hệ thống thần kinh. Một bộ não con người bao gồm hàng tỷ tế bào thần kinh được kết nối với nhau. Họ chịu trách nhiệm nhận và gửi tín hiệu từ não. Như đã thấy trong sơ đồ bên dưới, một tế bào thần kinh điển hình bao gồm ba phần chính – đuôi gai, sợi trục và thân tế bào hoặc soma. Đuôi gai là những nhánh giống như cây có nguồn gốc từ thân tế bào. Họ nhận được thông tin từ các tế bào thần kinh khác. Soma là lõi của tế bào thần kinh. Nó chịu trách nhiệm xử lý thông tin nhận được từ đuôi gai. Axon giống như một sợi cáp mà qua đó các tế bào thần kinh gửi thông tin. Về cuối, sợi trục chia thành nhiều nhánh tạo kết nối với các tế bào thần kinh khác thông qua sợi nhánh của chúng. Các kết nối giữa sợi trục và các sợi nhánh nơ-ron khác được gọi là khớp thần kinh.

1: Nơ-ron sinh học so với mạng nơ-ron nhân tạo

Hình ảnh Nguồn: Willems, K. (2017, ngày 2 tháng XNUMX). Hướng dẫn Keras: Học sâu trong Python.

Vì ANN được lấy cảm hứng từ hoạt động của bộ não, chúng ta hãy xem bộ não hoạt động như thế nào. Bộ não bao gồm một mạng lưới hàng tỷ tế bào thần kinh. Chúng giao tiếp bằng các tín hiệu điện và hóa học thông qua một khớp thần kinh, trong đó, thông tin từ một tế bào thần kinh được truyền đến các tế bào thần kinh khác. Quá trình truyền dẫn bao gồm một xung điện được gọi là 'điện thế hoạt động'. Để thông tin được truyền đi, các tín hiệu đầu vào (xung) phải đủ mạnh để vượt qua một rào cản ngưỡng nhất định, sau đó chỉ một tế bào thần kinh kích hoạt và truyền tín hiệu đi xa hơn (đầu ra).

Lấy cảm hứng từ chức năng sinh học của một tế bào thần kinh, một nhà khoa học người Mỹ Franck Rosenblatt đã đưa ra khái niệm về perceptron tại Phòng thí nghiệm Hàng không Cornell vào năm 1957.

  • Một tế bào thần kinh nhận thông tin từ các tế bào thần kinh khác dưới dạng các xung điện có cường độ khác nhau.
  • Nơ-ron tích hợp tất cả các xung nó nhận được từ các nơ-ron khác.
  • Nếu tổng kết quả lớn hơn một giá trị ngưỡng nhất định, nơ-ron sẽ 'kích hoạt', kích hoạt điện thế hoạt động được truyền đến các nơ-ron được kết nối khác.

Các thành phần chính của Perceptron

Rosenblatt's perceptron về cơ bản là một bộ phân loại nhị phân. Perceptron bao gồm 3 phần chính:

  • Các nút đầu vào hoặc lớp đầu vào: Lớp đầu vào đưa dữ liệu ban đầu vào hệ thống để xử lý tiếp. Mỗi nút đầu vào được liên kết với một giá trị số. Nó có thể lấy bất kỳ giá trị thực nào.
  • Trọng số và độ lệch: Thông số trọng số thể hiện cường độ kết nối giữa các đơn vị. Trọng số càng cao thì ảnh hưởng của nơ-ron đầu vào liên quan đến quyết định đầu ra càng mạnh. Độ chệch đóng vai trò giống như phần chặn trong một phương trình tuyến tính.
  • Chức năng kích hoạt: Chức năng kích hoạt xác định xem nơ-ron có kích hoạt hay không. Đơn giản nhất, chức năng kích hoạt là một chức năng bước, nhưng dựa trên tình huống, các chức năng kích hoạt khác nhau có thể được sử dụng.

Chúng ta sẽ xem thêm về những điều này trong phần tiếp theo.

Hoạt động của một Perceptron

Trong bước đầu tiên, tất cả các giá trị đầu vào được nhân với trọng số tương ứng của chúng và cộng lại với nhau. Kết quả thu được gọi là tổng trọng số ∑wi*xi, hoặc được nêu khác đi,  x1*w1 + x2*w2 +…wn*xn. Tổng này đưa ra một đại diện thích hợp của các yếu tố đầu vào dựa trên tầm quan trọng của chúng. Ngoài ra, một thuật ngữ thiên vị b được thêm vào tổng này ∑wi*xi + b. Xu hướng đóng vai trò là một tham số mô hình khác (ngoài trọng số) có thể được điều chỉnh để cải thiện hiệu suất của mô hình.

Trong bước thứ hai, một chức năng kích hoạt f được áp dụng trên số tiền trên ∑wi*xi + b để có được đầu ra Y = f(∑wi*xi + b). Tùy thuộc vào kịch bản và chức năng kích hoạt được sử dụng, Đầu ra là một trong hai nhị phân {1, 0} hoặc một giá trị liên tục. 

Hoạt động của một Perceptron

(Thường thì cả hai bước này được biểu diễn dưới dạng một bước duy nhất trong tri giác nhiều lớp, ở đây tôi đã chỉ ra chúng dưới dạng hai bước khác nhau để hiểu rõ hơn)

Chức năng kích hoạt

Một tế bào thần kinh sinh học chỉ kích hoạt khi vượt quá một ngưỡng nhất định. Tương tự, nơ-ron nhân tạo cũng sẽ chỉ kích hoạt khi tổng đầu vào (tổng trọng số) vượt quá một giá trị ngưỡng nhất định, giả sử là 0. Theo trực giác, chúng ta có thể nghĩ về một cách tiếp cận dựa trên quy tắc như sau –

Nếu ∑wi*xi + b > 0: đầu ra = 1 khác: đầu ra = 0

Biểu đồ của nó sẽ giống như thế này:

Chức năng kích hoạt

Trên thực tế, đây là chức năng kích hoạt Bước đơn vị (Ngưỡng) ban đầu được sử dụng bởi Rosenblatt. Nhưng như bạn có thể thấy, hàm này không liên tục tại 0, vì vậy nó gây ra các vấn đề trong tính toán toán học. Một phiên bản mượt mà hơn của chức năng trên là chức năng sigmoid. Nó xuất ra giữa 0 và 1. Một số khác là tiếp tuyến Hyperbolic(tanh), hàm tạo ra đầu ra trong khoảng từ -1 đến 1. Cả hai hàm sigmoid và tanh đều gặp vấn đề về độ dốc biến mất. Ngày nay, ReLU và Leaky ReLU là những chức năng kích hoạt được sử dụng phổ biến nhất. Chúng tương đối ổn định trên các mạng sâu.

Perceptron như một bộ phân loại nhị phân

Cho đến nay, chúng ta đã thấy nguồn cảm hứng sinh học và toán học của perceptron. Trong phần này, chúng ta sẽ xem một perceptron giải quyết vấn đề phân loại tuyến tính như thế nào.

Nhập một số thư viện –

từ sklearn.datasets nhập make_blobs nhập matplotlib.pyplot dưới dạng plt nhập numpy dưới dạng np %matplotlib nội tuyến

Tạo tập dữ liệu giả bằng cách sử dụng make_blobs chức năng được cung cấp bởi scikit learn –

# Tạo tập dữ liệu X, Y = make_blobs(n_features = 2, center = 2, n_samples = 1000, random_state = 12)
# Trực quan hóa tập dữ liệu plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground thật', fontsize = 18) plt.show()
Perceptron như một bộ phân loại nhị phân

Giả sử các chấm màu xanh lam là 1 và các chấm màu lục là 0. Sử dụng logic perceptron, chúng ta có thể tạo ranh giới quyết định (siêu phẳng) để phân loại phân tách các điểm dữ liệu khác nhau trên biểu đồ.

Trước khi chúng ta tiếp tục, hãy thêm một thuật ngữ sai lệch (những cái) vào vectơ đầu vào –

# Thêm độ lệch cho vectơ đầu vào X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Bộ dữ liệu sẽ trông giống như thế này – 

tập dữ liệu

Ở đây, mỗi hàng của tập dữ liệu trên đại diện cho vectơ đầu vào (một điểm dữ liệu). Để tạo ra một ranh giới quyết định, chúng ta cần tìm ra các trọng số phù hợp. Các trọng số được 'học' từ quá trình đào tạo bằng cách sử dụng quy tắc dưới đây -

w = w + (dự kiến ​​— dự đoán) * x

Perceptron w

Điều đó có nghĩa là trừ đi kết quả ước tính từ sự thật cơ bản và sau đó nhân kết quả này với vectơ đầu vào hiện tại và thêm các trọng số cũ vào nó để thu được giá trị mới của các trọng số. Nếu đầu ra của chúng ta giống với lớp thực tế, thì trọng số không thay đổi. Nhưng nếu ước tính của chúng tôi khác với sự thật cơ bản, thì trọng số sẽ tăng hoặc giảm tương ứng. Đây là cách các trọng số được điều chỉnh dần dần trong mỗi lần lặp.

Chúng tôi bắt đầu bằng cách gán các giá trị tùy ý cho vectơ trọng số, sau đó chúng tôi dần dần điều chỉnh chúng trong mỗi lần lặp bằng cách sử dụng lỗi và dữ liệu có sẵn –

# khởi tạo trọng số với giá trị ngẫu nhiên w = np.random.rand(3, 1) print(w)

Đầu ra:

[[0.37547448] [0.00239401] [0.18640939]]

Xác định chức năng kích hoạt của perceptron –

def activation_func(z): nếu z >= 1: trả về 1 khác: trả về 0

Tiếp theo, chúng tôi áp dụng quy tắc học tập perceptron -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Cập nhật trọng số w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Không đảm bảo rằng các trọng số sẽ hội tụ trong một lần, vì vậy chúng tôi cung cấp tất cả dữ liệu huấn luyện vào thuật toán perceptron 100 lần trong khi liên tục áp dụng quy tắc học tập để cuối cùng chúng tôi có thể thu được các trọng số tối ưu.

Bây giờ, chúng ta đã có được các trọng số tối ưu, chúng ta dự đoán lớp cho từng điểm dữ liệu bằng cách sử dụng Y = f(∑wi*xi + b) hoặc Y = wT.x ở dạng vectơ.

# dự đoán lớp của các điểm dữ liệu result_class = [activation_func(w.transpose().dot(x)) cho x trong X_bias]

Trực quan hóa ranh giới quyết định và nhãn lớp dự đoán –

# chuyển sang vectơ đơn vị w = w/np.sqrt(w.transpose().dot(w))
# Hiển thị kết quả plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'red') plt.title('Phân loại Perceptron với ranh giới quyết định') plt.show()
Phân loại Perceptron với ranh giới quyết định

Bạn có thể so sánh hình ảnh sự thật cơ bản với hình ảnh kết quả dự đoán và thấy một số điểm bị phân loại sai. Nếu chúng tôi tính toán độ chính xác, nó lên tới khoảng 98% (tôi để đây như một bài tập cho độc giả).

Nếu bạn thấy, ở đây dữ liệu ban đầu của chúng tôi khá tách biệt, vì vậy chúng tôi có thể có được độ chính xác cao như vậy. Nhưng đây không phải là trường hợp với dữ liệu trong thế giới thực. Sử dụng một perceptron duy nhất, chúng ta chỉ có thể xây dựng một ranh giới quyết định tuyến tính, vì vậy nếu dữ liệu được trộn lẫn thì thuật toán perceptron sẽ hoạt động kém. Đây là một trong những hạn chế của mô hình perceptron đơn lẻ.

Ghi chú

Chúng tôi bắt đầu bằng việc tìm hiểu cảm hứng sinh học đằng sau perceptron của Rosenblatt. Sau đó, chúng tôi chuyển sang toán học của perceptron và các hàm kích hoạt. Cuối cùng, bằng cách sử dụng bộ dữ liệu đồ chơi, chúng tôi đã thấy cách perceptron có thể thực hiện phân loại cơ bản bằng cách xây dựng ranh giới quyết định tuyến tính phân tách các điểm dữ liệu thuộc các lớp khác nhau.

Lưu ý

Pratik Nabriya là một Nhà khoa học dữ liệu lành nghề hiện đang làm việc cho một công ty Phân tích & AI có trụ sở tại Noida. Anh thành thạo Học máy, Học sâu, NLP, Phân tích chuỗi thời gian, Thao tác dữ liệu, SQL, Python và quen làm việc trong môi trường Đám mây. Trong thời gian rảnh rỗi, anh ấy thích tham gia cuộc thi Hackathons và viết các bài báo kỹ thuật.

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định riêng của Tác giả.

Nguồn: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Dấu thời gian:

Thêm từ Phân tích Vidhya