Cứ làm, sửa nếu bạn mắc lỗi và cuối cùng sẽ thành công!
Đây là ý tưởng chính đằng sau một thuật toán rất quan trọng trong học máy – Thuật toán học Perceptron hay còn gọi là pla.
Trong trang này:
-
- Giới thiệu
- Vấn đề Perceptron
-
- Thuật toán Perceptron (pla)
- Một số ký hiệu
- Xây dựng hàm mất mát
- Bố cục
-
- Ví dụ về Python
- Tải thư viện và tạo dữ liệu
- hàm pla
-
- Chứng minh sự hội tụ
-
- Mô hình mạng thần kinh đầu tiên
-
- Thảo luận
- pla có thể đưa ra vô số giải pháp khác nhau
- pla yêu cầu dữ liệu có thể phân tách tuyến tính
- Thuật toán bỏ túi
-
- Kết luận
-
- Tham khảo
- Chọn ngẫu nhiên một vectơ hệ số (mathbf{w}) có các phần tử gần bằng 0.
- Di chuyển ngẫu nhiên từng điểm dữ liệu (mathbf{x}_i):
- Nếu (mathbf{x}_i) được phân loại chính xác, nghĩa là (text{ sgn} ( mathbf{w}^tmathbf{x}_i) = y_i), chúng ta không cần phải làm gì cả.
- Nếu (mathbf{x}_i) bị phân loại sai, hãy cập nhật (mathbf{w}) với công thức: [ mathbf{w} = mathbf{w} + y_imathbf{ x }_i ]
- Kiểm tra xem có bao nhiêu điểm bị phân loại sai. Nếu không còn điểm nào, thuật toán dừng lại. Nếu có, quay lại bước 2.
- h(w, x): Tính toán đầu ra với đầu vào x và trọng số w đã cho.
- has_converged(x, y, w): Kiểm tra xem thuật toán có hội tụ hay không. Ta chỉ cần so sánh h(w, x) với chân trị cơ bản y. Nếu giống nhau thì dừng thuật toán.
- perceptron(x, y, w_init): hiện thực chức năng chính của pla.
- Giới hạn số lượng vòng lặp pla.
- Mỗi khi chúng tôi cập nhật một giải pháp (mathbf{w}) mới, chúng tôi sẽ tính xem có bao nhiêu điểm bị phân loại sai. Nếu là lần đầu tiên, hãy giữ dung dịch này trong túi của bạn. Nếu không, điểm phân loại sai này được so sánh với điểm phân loại sai của giải pháp trong túi, và nếu nhỏ hơn, giải pháp cũ được rút ra và giải pháp mới này được đưa vào.
3. ví dụ về trăn
Như thường lệ, chúng ta sẽ thử một ví dụ về con trăn nhỏ.
Tải thư viện và tạo dữ liệu
Chúng ta sẽ tạo hai bộ dữ liệu, mỗi bộ có 10 điểm và mỗi điểm dữ liệu có hai chiều để minh họa. Dữ liệu mở rộng sau đó được tạo bằng cách thêm 1 vào đầu mỗi điểm dữ liệu.
Sau khi thực thi mã này, biến x sẽ chứa dữ liệu đầu vào (mở rộng) và biến y sẽ chứa nhãn cho mỗi điểm dữ liệu trong x.
hàm pla
Tiếp theo chúng ta cần viết 3 hàm cho pla:
Đây là hình minh họa thuật toán pla cho bài toán nhỏ này:
Sau 18 lần cập nhật, pla đã hội tụ. Các điểm được khoanh tròn màu đen là các đường ranh giới cập nhật lựa chọn điểm bị phân loại sai tương ứng.
Mã nguồn cho điều này (bao gồm cả hoạt ảnh) có thể được tìm thấy tại đây.
4. Chứng minh hội tụ
Giả sử rằng (mathbf{w}^*) là giải pháp cho vấn đề (chúng ta có thể giả sử điều này vì chúng ta đã giả định rằng hai lớp có thể phân tách tuyến tính – nghĩa là tồn tại một giải pháp). Có thể thấy rằng với mọi (alpha > 0), nếu (mathbf{w}^*) là nghiệm thì (alphamathbf{w}^*) cũng là nghiệm giải pháp của vấn đề. môn Toán. Xét dãy số không âm ( u_{alpha}(t) = ||mathbf{w}_{t} – alphamathbf{w}^*||_2^2). trong đó (mathbf{x}_i) là điểm phân loại sai, nếu dùng cách giải (mathbf{w}_t) ta có:
[ begin{eqnarray} &&u_{alpha}(t+1) = ||mathbf{w}_{t+1} – alpha mathbf{w}^*|| _2^2 newline&=& ||mathbf{w}_{t} + y_imathbf{x}_i – alphamathbf{w}^*||_2^2 newline &=& ; ||mathbf{w}_{t} -alphamathbf{w}^*||_2^2 + y_i^2||mathbf{x}_i||_2^2 + 2y_imathbf{x } _i^t(mathbf{w} – alphamathbf{w}^*) newline&<& u_{alpha}(t) + ||mathbf{x}_i||_2 ^2 – 2alpha y_imathbf{x}_i^t mathbf{w}^* end{eqnarray} ]Dấu
nhỏ hơn ở dòng cuối cùng là do (y_i^2 = 1) và (2y_imathbf{x}_i^tmathbf{w}_{t} < 0). Nếu chúng ta đặt:
[ begin{eqnarray} beta^2 &=& max_{i=1, 2, dots, n}||mathbf{x}_i||_2^2 newline gamma &=& min_{i=1, 2, dots, n} y_imathbf{x}_i^tmathbf{w}^* end{eqnarray} ]Và chọn (alpha = frac{beta^2}{gamma}), chúng ta có: [ 0 leq u_{alpha}(t+1) < u_{alpha} (t) + beta^2 – 2alphagamma = u_{alpha}(t) – beta^2 ]
Điều này có nghĩa là: nếu luôn có các điểm bị phân loại sai, thì dãy (u_{alpha}(t)) là một dãy giảm dần có cận dưới là 0 và các phần tử sau ít nhất kém hơn các phần tử trước đó cái. Số lượng là (beta^2>0). Điều vô lý này chứng tỏ đến một lúc nào đó sẽ không còn tình trạng phân loại sai điểm. Nói cách khác, thuật toán pla hội tụ sau một số hữu hạn bước.
5. Mô hình mạng thần kinh đầu tiên
Hàm xác định lớp (text{label}(mathbf{x}) = text{sgn}(mathbf{w}^tmathbf{x})) của perceptron có thể được mô tả như sau sau Hiển thị bên dưới (được gọi là mạng):
Đầu vào mạng (mathbf{x}) được biểu thị bằng các nút màu lục, trong đó các nút (x_0) luôn bằng 1. Tập hợp các nút màu xanh lá cây được gọi là lớp đầu vào. Trong ví dụ này, tôi giả sử số chiều của dữ liệu (d = 4). Số nút trong lớp đầu vào luôn là (d + 1) cộng với nút 1. Nút (x_0 = 1) này đôi khi bị ẩn.
trọng số(w_0, w_1, dots, w_d) được gán cho các mũi tên trỏ đến các nút(displaystyle z = sum_{i=0}^dw_ix_i = mathbf{w }^ t mathbf {x}). Các nút (y = text{sgn}(z)) là đầu ra của mạng. Biểu tượng z đảo ngược màu xanh trong nút (y) biểu thị đồ thị của hàm (text{sgn}).
Trong thuật toán pla, chúng ta phải tìm trọng số trên các mũi tên sao cho mỗi (mathbf{x}_i) được đặt trong lớp đầu vào trong tập hợp các điểm dữ liệu đã biết, đầu ra của mạng tương ứng vào nhãn (y_i) tương ứng.
Hàm (y = text{sgn}(z)) còn được gọi là hàm kích hoạt. Đây là hình thức đơn giản nhất của mạng lưới thần kinh.
Các mạng thần kinh sau này có thể có nhiều nút đầu ra tạo thành một lớp đầu ra hoặc có thể có thêm các lớp trung gian giữa lớp đầu vào và lớp đầu ra. Các lớp trung gian này được gọi là các lớp ẩn. Khi biểu diễn các mạng lớn, người ta thường giảm biểu đồ bên trái thành biểu đồ bên phải. trong đó nút (x_0 = 1) thường bị ẩn. Nút (z) cũng bị ẩn và chứa trong nút (y). Perceptron thường được vẽ ở dạng đơn giản, như trong Hình 5 bên phải.
Lưu ý nếu thay hàm kích hoạt bằng (y = z) thì ta sẽ có một mạng nơ-ron mô tả thuật toán hồi quy tuyến tính như hình bên dưới. Đường chéo màu xanh biểu thị đồ thị của hàm (y = z). Các trục đã được bỏ qua.
Mô hình perceptron ở trên rất giống với một nút nhỏ của dây thần kinh sinh học, như minh họa bên dưới:
Dữ liệu từ nhiều dây thần kinh đi vào nhân. Thông tin được tổng hợp và trình bày ở đầu ra. Nhiều bộ phận trong số này kết hợp với nhau để tạo thành hệ thống thần kinh sinh học. Đây là lý do tại sao có một cái tên cho mạng lưới thần kinh trong máy học. Mạng này đôi khi được gọi là mạng thần kinh nhân tạo (ann).
6. Thảo luận
pla có thể đưa ra vô số giải pháp khác nhau
Rõ ràng, nếu hai lớp có thể phân tách tuyến tính, thì có vô số đường thẳng phân tách hai lớp đó. Đây là một ví dụ:
Tất cả các đường màu đen đều thỏa mãn. Tuy nhiên, các đường khác nhau sẽ xác định các loại điểm tam giác khác nhau. Trong số này, cái nào là tốt nhất? Định nghĩa “tốt nhất” được hiểu theo nghĩa nào? Còn một thuật toán khác để định nghĩa và tìm đường đi tối ưu như vậy, tôi sẽ trình bày trong các bài tiếp theo. Tôi mời bạn đọc nó.
pla yêu cầu dữ liệu có thể phân tách tuyến tính
Hai lớp trong ví dụ dưới đây có thể phân tách tương đối tuyến tính. Mỗi lớp có 1 điểm như thể tiếng ồn nằm trong vùng điểm của lớp khác. pla không hoạt động trong trường hợp này vì luôn có ít nhất 2 điểm bị phân loại sai.
Ở một mức độ nào đó, đường màu đen vẫn có thể được coi là một giải pháp tốt, vì nó giúp phân loại chính xác hầu hết các điểm. Việc thiếu sự hội tụ với dữ liệu có thể phân tách gần như tuyến tính là một nhược điểm lớn của PLA.
Để khắc phục nhược điểm này, có một cải tiến nhỏ như thuật toán pocket dưới đây:
Thuật toán bỏ túi
Đương nhiên, nếu có một số nhiễu, chúng tôi sẽ tìm kiếm một đường phân cách giữa hai lớp để có rất ít điểm bị phân loại sai. Điều này có thể được thực hiện thông qua pla với những thay đổi sau:
Thuật toán này tương tự như thuật toán tìm phần tử nhỏ nhất trong mảng.
7.Kết luận
Hy vọng bài viết này đã cung cấp cho bạn cái nhìn sâu sắc về một số khái niệm trong mạng lưới thần kinh. Trong các bài tiếp theo, tôi sẽ tiếp tục thảo luận về các thuật toán cơ bản khác trong mạng nơ-ron trước khi chuyển sang các phần khác.
Trong tương lai, nếu có điều kiện, tôi sẽ viết thêm nhiều bài về deep learning và chúng ta sẽ quay trở lại với mạng nơ-ron.
8. Tài liệu tham khảo
[1] Rosenblatt. Perceptron, một dự án máy tự động nhận thức và nhận dạng cho. Phòng thí nghiệm hàng không Cornell, 1957. [2] S. McCulloch và W. rỗ. Phép tính logic của những suy nghĩ bên trong trong hoạt động thần kinh. Bulletin of Mathematical Biophysics, 5(4):115-133, 1943. [3] Widow và cộng sự Các tế bào thần kinh “adaline” thích ứng sử dụng “bộ nhớ” hóa học. Báo cáo kỹ thuật số 1553-2. Điện tử Stanford. Phòng thí nghiệm, Stanford, CA, tháng 10 năm 1960. [3] abu-mostafa, yaser s., malik magdon-ismail và hsuan-tien lin. Học hỏi từ dữ liệu. cuộn. 4. New York, NY, Hoa Kỳ ::amlbook, 2012. (liên kết khóa học) [4] Bishop, Christopher M. “Nhận dạng mẫu và học máy.” Springer (2006). (sách) [5] duda, richard o., peter e. Hart và David G. cửa tiệm. Phân loại hoa văn. Con trai của John Wiley, 2012.
1. Giới thiệu
Trong bài viết này, tôi sẽ giới thiệu thuật toán đầu tiên trong danh mục, được gọi là thuật toán học perceptron (pla), đôi khi được gọi đơn giản là perceptron.
Perceptron là một thuật toán phân loại hoạt động trong trường hợp đơn giản nhất: chỉ có hai lớp (các vấn đề chỉ có hai lớp được gọi là phân loại nhị phân) và chỉ hoạt động trong những trường hợp rất đặc biệt. Tuy nhiên, nó là cơ sở cho các phần quan trọng của học máy, mạng thần kinh và học sâu sau này. (Tại sao chúng được gọi là mạng lưới thần kinh – bạn sẽ thấy ở cuối bài viết).
Giả sử chúng ta có hai bộ dữ liệu được gắn nhãn như trong Hình 1 bên dưới. Hai lớp của chúng tôi là một tập hợp các điểm màu xanh và một tập hợp các điểm màu đỏ. Vấn đề là: đưa ra hai bộ dữ liệu được dán nhãn, hãy xây dựng một bộ phân loại sao cho khi có một điểm dữ liệu hình tam giác màu xám mới, chúng ta có thể dự đoán màu (nhãn của nó).
Nói cách khác, chúng ta cần tìm lãnh thổ của từng lớp, sao cho với mỗi điểm mới, chúng ta chỉ cần xác định nó thuộc lớp nào, rồi xác định nó thuộc lớp nào. Để tìm lãnh thổ của mỗi lớp, chúng ta cần tìm ranh giới giữa hai lãnh thổ này. Vì vậy có thể xem bài toán phân lớp là bài toán tìm ranh giới giữa các lớp. Và ranh giới đơn giản nhất là một đường thẳng trong không gian 2D, một mặt phẳng trong không gian 3D và một siêu phẳng trong không gian nhiều chiều (tôi gọi các mặt phẳng ranh giới này). Các ranh giới phẳng này được coi là đơn giản vì chúng có thể được biểu diễn toán học bằng các hàm đơn giản ở dạng tuyến tính, tức là tuyến tính. Tất nhiên, chúng tôi giả định rằng tồn tại một đường phẳng phân định lãnh thổ của hai lớp. Hình 1 bên phải minh họa các đường phân chia hai lớp trong mặt phẳng. Phần có nền màu xanh lam được coi là lãnh thổ của lớp màu xanh và phần có nền màu đỏ được coi là lãnh thổ của lớp màu đỏ. Trong trường hợp này, các điểm dữ liệu tam giác mới được gán cho lớp màu đỏ.
Vấn đề perceptron
Bài toán perceptron được phát biểu như sau: Cho hai lớp được gán nhãn, tìm một mặt phẳng sao cho tất cả các điểm thuộc lớp 1 nằm trên một mặt của mặt phẳng và tất cả các điểm thuộc lớp 2 nằm ở phía bên kia của mặt phẳng . Giả sử tồn tại một mặt phẳng như vậy.
Hai lớp được gọi là có thể phân tách tuyến tính nếu tồn tại một đường thẳng phân tách chúng. Các thuật toán phân loại tạo ra các ranh giới đường phẳng được gọi chung là các thuật toán phân loại tuyến tính.
2. Thuật toán Perceptron (pla)
Giống như thuật toán lặp trong phân cụm k-mean và giảm độ dốc, ý tưởng cơ bản của pla là bắt đầu từ một giải pháp dự đoán nhất định và qua mỗi lần lặp, tốt hơn là cập nhật giải pháp lên một vị trí nhất định. Bản cập nhật này dựa trên việc giảm một số hàm mất mát.
Một số ký hiệu
Giả sử (mathbf{x} = [mathbf{x}_1, mathbf{x}_2, dots, mathbf{x}_n] in mathbb{r}^{d times n }) là một ma trận chứa các điểm dữ liệu, trong đó mỗi cột (mathbf{x}_i in mathbb{r}^{dtimes 1}) là một điểm dữ liệu trong không gian (d ) PM . (Lưu ý: Khác với các bài trước tôi thường biểu diễn dữ liệu bằng vectơ hàng, ở bài này tôi biểu diễn dữ liệu bằng vectơ cột. Việc biểu diễn dữ liệu theo hàng hay cột là tùy vào từng bài toán, miễn là cách biểu diễn toán học của nó dễ hiểu .
Giả sử thêm các nhãn tương ứng với từng điểm dữ liệu được lưu trữ trong vectơ hàng (mathbf{y} = [y_1, y_2, dots, y_n] in mathbb{r}^{1 times n }) , nếu (mathbf{x}_i) là lớp 1 (màu xanh lục) thì (y_i = 1) nếu (mathbf{x}_i ) thuộc lớp 2 thì( y_i = -1 ) (màu đỏ).
Tại một thời điểm nhất định, giả sử chúng ta tìm thấy một ranh giới, là một mặt phẳng và phương trình là: [ begin{eqnarray} f_{mathbf{w}}(mathbf{x}) &=& ; w_1x_1 + dots + w_dx_d + w_0 newline &=&mathbf{w}^tmathbf{bar{x}} = 0 end{eqnarray} ]
Trong đó (mathbf{bar{x}}) là điểm dữ liệu được mở rộng bằng cách thêm các phần tử (x_0 = 1) trước vectơ (mathbf{x}), tương tự như hồi quy tuyến tính. Do đó, bằng cách nói (mathbf{x}), ý tôi là các điểm dữ liệu mở rộng.
Để đơn giản, hãy xử lý trường hợp mỗi điểm dữ liệu có thứ nguyên (d = 2). Giả sử dòng (w_1 x_1 + w_2 x_2 + w_0 = 0) là nghiệm cần tìm, như trong Hình 2 bên dưới:
Các điểm chú thích trên cùng một phía của dòng này sẽ cho hàm (f_{mathbf{w}}(mathbf{x})) cùng dấu. Nếu cần, chỉ cần đổi dấu của (mathbf{w}), ta có thể giả sử rằng các điểm trong nửa mặt phẳng nền xanh dương mang dấu cộng (+) và các điểm trong nửa mặt phẳng nền đỏ mang dấu trừ dấu (- ). Các mã thông báo này cũng tương đương với các nhãn (y) cho mỗi lớp. Vì vậy, nếu (mathbf{w}) là một giải pháp cho vấn đề perceptron, thì điểm dữ liệu mới (mathbf{x}) không được gắn nhãn và chúng ta có thể xác định lớp của nó bằng toán học. Đơn giản thế thôi: [ text{label}(mathbf{x}) = 1 ~text{if}~ mathbf{w}^tmathbf{x} geq 0, text{nếu không} – 1 ]
Ngắn gọn hơn: [ text{label}(mathbf{x}) = text{sgn}(mathbf{w}^tmathbf{x}) ] Trong số đó, (text { sgn }) là hàm xác định dấu, giả sử (text{sgn}(0) = 1).
Xây dựng hàm mất mát
Tiếp theo, chúng ta cần xây dựng một hàm mất mát với các tham số tùy ý (mathbf{w}). Vẫn trong không gian hai chiều, giả sử đường thẳng (w_1x_1 + w_2x_2 + w_0 = 0) như trong Hình 3 bên dưới:
Trong trường hợp này, các điểm được khoanh tròn là các điểm bị phân loại sai. Những gì chúng tôi muốn là những điểm không bị phân loại sai. Hàm mất mát đơn giản nhất mà chúng ta có thể nghĩ đến là hàm đếm số điểm bị phân loại sai và cố gắng giảm thiểu hàm này: [ j_1(mathbf{w}) = sum_{mathbf{x}_i in mathcal{ m }} (-y_itext{sgn}(mathbf{w}^tmathbf{x_i})) ]
trong đó (mathcal{m}) là tập hợp các điểm bị phân loại sai (tập hợp thay đổi theo (mathbf{w})). Đối với mỗi điểm (mathbf{x}_i in mathcal{m}), vì điểm này bị phân loại sai (y_i) và (text{sgn}(mathbf{w}^t mathbf { x})) khác, vì vậy (-y_itext{sgn}(mathbf{w}^tmathbf{x_i}) = 1 ). Vậy (j_1(mathbf{w})) là hàm đếm số điểm bị phân loại sai. Khi hàm này đạt giá trị nhỏ nhất bằng 0, chúng ta không còn điểm nào bị phân loại sai nữa.
Điểm quan trọng là hàm này rời rạc không tính được đạo hàm đối với (mathbf{w}) nên rất khó tối ưu. Chúng ta cần tìm một hàm mất mát khác để tối ưu hóa khả thi hơn.
Xét hàm mất mát sau:
[ j(mathbf{w}) = sum_{mathbf{x}_i in mathcal{m}} (-y_imathbf{w}^tmathbf{x_i}) ]Hàm (j()) hơi khác so với hàm (j_1()) vì nó bỏ qua hàm (text{sgn}). Lưu ý rằng điểm phân loại sai (mathbf{x}_i) càng xa ranh giới thì giá trị (-y_imathbf{w}^tmathbf{x}_i) sẽ càng lớn, nghĩa là, lỗi sẽ lớn hơn lớn. Giá trị nhỏ nhất của hàm mất mát này cũng bằng 0 nếu không có điểm nào bị phân loại sai. Chức năng mất mát này cũng được cho là tốt hơn chức năng (j_1()) vì nó phạt nặng các điểm xâm phạm một loại lãnh thổ khác. Trong khi (j_1()) phạt các điểm bị phân loại sai như nhau (cả hai = 1), bất kể chúng ở xa hay gần với ranh giới.
Một lần, nếu chúng ta chỉ quan tâm đến các điểm bị phân loại sai, thì hàm (j(mathbf{w})) khả vi (đạo hàm tính toán), vì vậy chúng ta có thể sử dụng phép giảm dần độ dốc hoặc giảm dần độ dốc ngẫu nhiên ( sgd ) để tối ưu hóa hàm mất mát này. Tận dụng lợi thế của sgd cho các vấn đề quy mô lớn, chúng tôi sẽ làm theo thuật toán này.
Đối với các điểm dữ liệu bị phân loại sai (mathbf{x}_i), hàm mất mát trở thành:
[ j(mathbf{w}; mathbf{x}_i; y_i) = -y_imathbf{w}^tmathbf{x}_i ]Dẫn xuất tương ứng:
[ nabla_{mathbf{w}}j(mathbf{w}; mathbf{x}_i; y_i) = -y_imathbf{x}_i ]Vậy quy tắc cập nhật là:
[ mathbf{w} = mathbf{w} + eta y_imathbf{x}_i ]Đặt (eta) làm tốc độ học tập thành 1. Chúng tôi có một quy tắc cập nhật rất gọn gàng: (mathbf{w}_{t+1} = mathbf{w}_{t} + y_imathbf{x}_i). Nói cách khác, đối với mỗi điểm (mathbf{x}_i) bị phân loại sai, chúng ta chỉ cần nhân điểm đó với nhãn của nó (y_i) và cộng kết quả vào (mathbf{w} ) chúng ta sẽ nhận được mới (mathbf{w}).
Chúng tôi có một quan sát nhỏ ở đây: [ mathbf{w}_{t+1}^tmathbf{x}_i = (mathbf{w}_{t} + y_imathbf{x) } _i)^tmathbf{x}_{i} newline = mathbf{w}_{t}^tmathbf{x}_i + y_i ||mathbf{x}_i||_2^2 ]
Nếu (y_i = 1), (mathbf{w}_{t}^tmathbf{x}_i mathbf{w}_{t}^tmathbf{x}_i ). Để giải thích bằng lời, (mathbf{w}_{t+1}) hoạt động để làm cho (mathbf{x}_i) được phân lớp chính xác. Điều tương tự cũng xảy ra nếu (y_i = -1) .
Ở đây, cảm nhận của chúng tôi về thuật toán này là: chỉ cần chọn đường biên. Xem xét từng điểm một và nếu điểm đó bị phân loại sai, hãy di chuyển đường ranh giới theo hướng làm cho điểm được phân loại chính xác. Có thể thấy rằng khi đường ranh giới này bị dịch chuyển, các điểm đã được phân loại đúng trước đó có thể lại bị phân loại sai. Tuy nhiên, pla vẫn được đảm bảo hội tụ sau một số bước hữu hạn (tôi sẽ chứng minh điều này sau trong bài đăng này). Nghĩa là, cuối cùng chúng ta sẽ tìm được một mặt phẳng để phân tách hai lớp, miễn là hai lớp có thể phân tách tuyến tính. Đó là lý do tại sao câu đầu tiên tôi nói với bạn trong bài viết này là: “Làm đi, mắc sai lầm thì sửa đổi, cuối cùng bạn sẽ thành công!”.
Tóm lại, thuật toán perceptron có thể được viết như sau:
Tóm tắt chương trình
- Thảo luận
- Ví dụ về Python
- Thuật toán Perceptron (pla)
- Giới thiệu