TỔNG QUAN VỀ TRÍ TUỆ NHÂN TẠO
TRÍ TUỆ NHÂN TẠO, MÁY HỌC, HỌC SÂU VÀ MẠNG NƠ-RON NHÂN TẠO
Trí tuệ nhân tạo, hay còn gọi là thông minh nhân tạo (AI), là một hệ thống máy tính có khả năng xử lý thông tin tương tự như con người, bao gồm nhận dạng, suy luận và phán đoán Mặc dù trí tuệ nhân tạo có thể mô phỏng một số chức năng của bộ não con người, nhưng cho đến nay, chưa có phần mềm hay thiết bị nào có thể tái tạo hoàn toàn sự phức tạp của bộ não Trí tuệ nhân tạo được xem như một chương trình máy tính có khả năng mô hình hóa các chức năng như nhận dạng, suy luận và dự đoán để hỗ trợ trong việc ra quyết định.
Hình 1.1: Trí tuệ nhân tạo, máy học, học sâu và mạng nơ-ron nhân tạo
Trí tuệ nhân tạo là một lĩnh vực khoa học bao gồm nhiều nhánh như máy học, học sâu và mạng nơ-ron nhân tạo Máy học, được định nghĩa bởi Arthur Samuel vào năm 1959, là một phần của trí tuệ nhân tạo, cho phép các chương trình máy tính học hỏi mà không cần lập trình cụ thể trước Những chương trình này có khả năng tự học và thực hiện các hoạt động thông minh vượt ra ngoài những gì đã được lập trình, từ đó xây dựng các hệ thống thông minh nhân tạo có khả năng tự thích nghi trong quá trình vận hành, xử lý, suy luận và dự đoán kết quả dựa trên dữ liệu quá khứ.
Máy học, một nhánh của khoa học trí tuệ nhân tạo, nổi bật với khả năng cho phép chương trình máy tính tự tạo ra kết quả mà không cần lập trình cụ thể Thay vì chỉ đưa ra quyết định dựa trên lập trình sẵn, máy học tập trung vào việc dự đoán tương lai Nếu một chương trình có khả năng xử lý thông tin một cách thông minh như con người, nó có thể được xem là trí tuệ nhân tạo hoặc máy học Tuy nhiên, nếu các thông số của chương trình không được cập nhật từ dữ liệu, nó sẽ không đủ tiêu chuẩn để được coi là trí tuệ nhân tạo hay máy học.
Mạng nơ-ron nhân tạo là mô hình xử lý thông tin được thiết kế dựa trên cấu trúc và chức năng của hệ thống thần kinh sinh vật Đây là một phương pháp trong máy học, sử dụng các thuật toán để xử lý tín hiệu qua các kết nối mô phỏng từ các khớp thần kinh của não người Khi số lượng lớp mạng tăng lên, khả năng biểu diễn dữ liệu cũng được cải thiện, dẫn đến khái niệm mạng sâu hay học sâu (Deep learning).
NƠ-RON NHÂN TẠO
Nơ-ron nhân tạo là đơn vị cơ bản của mạng nơ-ron nhân tạo, đóng vai trò quan trọng trong nhiều ứng dụng trí tuệ nhân tạo Chúng được xây dựng dựa trên mô hình toán học của các nơ-ron thần kinh trong não người Các nơ-ron này kết nối với nhau theo nhiều cách khác nhau để truyền tín hiệu trong mạng nơ-ron Hoạt động của nơ-ron nhân tạo được mô phỏng từ hoạt động của nơ-ron sinh học, tạo nên nền tảng cho sự phát triển của công nghệ AI.
Nơ-ron là đơn vị cơ bản của bộ não sinh học, tạo thành một hệ thống phức tạp với khoảng 10^11 nơ-ron kết nối lẫn nhau Mỗi nơ-ron có khả năng kết nối với khoảng 10^4 nơ-ron khác, truyền tín hiệu qua các khớp nối thần kinh (synapse) Thời gian truyền tín hiệu qua khớp nối thần kinh ước tính khoảng 10^-3 giây, chậm hơn nhiều so với tốc độ xử lý dữ liệu của máy tính hiện đại.
Hình 1.2: Mạng nơ-ron sinh học
Mạng nơ-ron sinh học, như hình 1.2 minh họa, là một cấu trúc phức tạp với các nơ-ron liên kết qua các khớp nối thần kinh Mỗi nơ-ron có khả năng kết nối với nhiều nơ-ron ở lớp sau cũng như các nơ-ron trong cùng một lớp, tạo nên mạng lưới kết nối đa dạng.
Hình 1.3: Nơ-ron sinh học
Nơ-ron, hay tế bào thần kinh, là đơn vị cơ bản của hệ thần kinh trung ương, có chức năng truyền dẫn tín hiệu hóa học và điện trong não Cấu trúc của nơ-ron bao gồm thân tế bào (soma) chứa nhân tế bào, sợi trục (axon) hình ống truyền dẫn xung điện ra khỏi thân tế bào, và nhánh tế bào (dendrite) hình cây nhận thông điệp từ các nơ-ron khác Nhờ vào các thành phần này, nơ-ron có khả năng giao tiếp và phối hợp hoạt động trong hệ thống thần kinh.
Khớp thần kinh (synapse) là bộ phận cuối của sợi trục thần kinh, đóng vai trò quan trọng trong việc kết nối các tế bào thần kinh Chúng quyết định mức độ tín hiệu hóa học hoặc điện được truyền giữa hai tế bào thần kinh Tế bào thần kinh cảm giác chuyển đổi kích thích từ môi trường thành tín hiệu nội bộ, trong khi tế bào thần kinh vận động, nằm trong hệ thống thần kinh trung ương, điều khiển các cơ bắp thông qua các sợi trục thần kinh.
Nơ-ron nhân tạo là mô hình toán học của nơ-ron sinh học, trong đó các nhánh thần kinh nhận tín hiệu từ nhiều ngõ vào khác nhau, được biểu diễn bằng các giá trị ngõ vào x Tín hiệu từ các nơ-ron ở lớp trước truyền đến nơ-ron thông qua các khớp thần kinh, được mô hình hóa bằng trọng số (synaptic weight) thể hiện độ mạnh của kết nối giữa các nơ-ron Trọng số quyết định mức độ quan trọng của thông tin từ các ngõ vào và thay đổi trong quá trình huấn luyện nơ-ron Bộ tổng có vai trò tổng hợp các giá trị ngõ vào với trọng số tương ứng, và giá trị tính được sau đó được điều chỉnh bởi hàm số f trước khi đưa đến ngõ ra y, có thể kết nối đến nhiều nơ-ron ở lớp sau.
Hình 1.4: Cấu trúc nơ-ron và mô hình toán của nơ-ron
CÁC ỨNG DỤNG CỦA TRÍ TUỆ NHÂN TẠO
Trí tuệ nhân tạo (AI) đang được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau Một số ứng dụng điển hình bao gồm nhận dạng đối tượng như nhận dạng khuôn mặt, giọng nói và cảm xúc, thường được tích hợp trên thiết bị di động AI cũng được sử dụng trong phân loại đối tượng, giúp phân chia các đối tượng thành nhiều lớp dựa trên các đặc điểm chung Bên cạnh đó, khả năng dự đoán của AI, được phát triển từ kiến thức và kinh nghiệm, cho phép đưa ra các dự đoán chính xác cho dữ liệu mới Với sự đa dạng và phong phú, ứng dụng của trí tuệ nhân tạo hiện diện trong nhiều lĩnh vực như kinh tế, y tế, giáo dục, công nghiệp, giao thông, an ninh và bảo mật, công nghệ robot, giải trí và nhiều lĩnh vực khác.
CÁC HƯỚNG TIẾP CẬN KHOA HỌC TRÍ TUỆ NHÂN TẠO
Khoa học trí tuệ nhân tạo đang trở thành chủ đề nóng trong bối cảnh cách mạng công nghiệp 4.0, không chỉ dành cho chuyên gia mà còn cho những người đam mê có kiến thức cơ bản về lập trình Trí tuệ nhân tạo là chương trình máy tính mô phỏng hoạt động của hệ thần kinh, và việc phát triển ứng dụng AI có thể thực hiện qua nhiều phương pháp, chủ yếu là trên nền tảng phần mềm Người phát triển cần sử dụng ngôn ngữ lập trình và có thể xây dựng chương trình từ đầu dựa trên mô hình toán học, tuy nhiên, điều này đòi hỏi kiến thức chuyên môn sâu và thời gian lớn để huấn luyện mô hình Hiện nay, việc sử dụng các thư viện viết sẵn như Tensorflow, Keras, và Scikit-learn giúp đơn giản hóa quá trình phát triển ứng dụng, tiết kiệm thời gian và nâng cao hiệu quả Tuy nhiên, việc dựa vào các hàm thư viện có sẵn cũng có hạn chế, khiến người phát triển khó nắm bắt cách thức hoạt động của hệ thống, từ đó ảnh hưởng đến khả năng cải tiến Tài liệu này nhằm cung cấp kiến thức về mô hình toán và phương pháp lập trình hệ thống mạng nơ-ron nhân tạo, giúp nhà phát triển kết hợp hiệu quả giữa kiến thức nền tảng và các thư viện hiện có để tạo ra ứng dụng AI nhanh chóng và hiệu quả hơn.
Các chương trình ứng dụng trí tuệ nhân tạo được thực thi trên phần cứng máy tính, với khả năng xử lý phụ thuộc vào số lượng nhân (core) trong bộ xử lý trung tâm (CPU) Ví dụ, bộ xử lý core i7 có 8 nhân, cho phép xử lý song song nhiều tác vụ Mặc dù các kiến trúc CPU mới có thể thực thi ứng dụng trí tuệ nhân tạo, nhưng việc xử lý khối lượng tính toán lớn vẫn gây mất thời gian và làm chậm hệ thống Hiện nay, để tăng hiệu năng xử lý, các ứng dụng trí tuệ nhân tạo thường được huấn luyện và thực thi trên card xử lý đồ họa (GPU), với số lượng nhân lên tới hàng ngàn, cho phép thực thi chương trình nhanh hơn nhờ khả năng xử lý song song.
Một phương pháp tiếp cận đáng chú ý hiện nay là phương pháp dựa trên phần cứng, nơi các nhà nghiên cứu thiết kế vi mạch hoạt động tương tự như bộ não sinh học Các tín hiệu trong mạch được truyền tải giống như cách thức hoạt động của não, dẫn đến sự hình thành các hệ thống được gọi là hệ mô phỏng hệ thần kinh (neuromorphic computing system) Khái niệm neuromorphic, được giới thiệu bởi nhà khoa học C Mead vào năm 1980, mô tả vi mạch có khả năng xử lý tín hiệu như bộ não Điều này đồng nghĩa với việc vi mạch thực thi các ứng dụng trí tuệ nhân tạo Tuy nhiên, việc phát triển các hệ neuromorphic yêu cầu khả năng thiết kế và chế tạo vi mạch phức tạp hơn so với các phương pháp phần mềm truyền thống.
MẠNG NƠ-RON NHÂN TẠO
GIỚI THIỆU
Nơ-ron là đơn vị cơ bản trong bộ não con người, tạo thành mạng lưới giúp thực hiện các chức năng như nhận thức, học tập và hành động Mạng nơ-ron nhân tạo (Artificial Neural Network) được phát triển dựa trên ý tưởng từ nơ-ron sinh học, bao gồm các đơn vị nơ-ron nhân tạo kết nối với nhau Các kiến trúc khác nhau của mạng phụ thuộc vào cách kết nối giữa các nơ-ron Những kết nối này cho phép tín hiệu lan truyền từ ngõ vào đến ngõ ra, đồng thời có thể có sự lan truyền ngược từ ngõ ra đến ngõ vào của các nơ-ron khác Việc tính toán giá trị ngõ ra cho mỗi ngõ vào dựa trên mô hình toán học của các nơ-ron và kết nối trong mạng.
MÔ HÌNH HOÁ NƠ-RON SINH HỌC
Mỗi nơ-ron nhân tạo là một mô hình toán của một nơ-ron sinh học
Mô hình toán cho nơ-ron nhân tạo tạo ra giá trị ngõ ra từ các tín hiệu ngõ vào thông qua ba thành phần chính: bộ nhân, bộ cộng và hàm kích hoạt Các tín hiệu ngõ vào được nhân với trọng số, sau đó kết quả của phép nhân được cộng lại và đưa qua hàm kích hoạt Hình 2.1 minh họa mô hình toán cho một nơ-ron.
Hình 2.1: Nơ-ron sinh học và mô hình toán của nơ-ron sinh học
(a) Cấu trúc nơ-ron (a) Mô hình toán của nơ-ron x 1 w 1 x 2 w 2 x n w n f y b
Cấu trúc của nơ-ron sinh học bao gồm các nhánh thần kinh (dendrite) tiếp nhận thông tin, soma xử lý tín hiệu và axon truyền tín hiệu đến các tế bào khác qua khớp nối thần kinh (synapse) Trong mô hình hóa nơ-ron, các ngõ vào tương ứng với các nhánh thần kinh, nơi nhận tín hiệu từ các nơ-ron khác Tín hiệu được khuếch đại hoặc làm suy giảm dựa trên các trọng số (weight), ảnh hưởng đến tín hiệu từ các tế bào thần kinh ở lớp trước Tổng hợp các tín hiệu từ tất cả ngõ vào quyết định ngõ ra: nếu tổng nhỏ hơn ngưỡng, ngõ ra là 0; nếu lớn hơn, ngõ ra là 1 Khi tổng tín hiệu vượt ngưỡng, nơ-ron phát ra xung truyền đến nơ-ron tiếp theo Trong mô hình toán, quyết định ngõ ra được thực hiện bởi hàm kích hoạt (activation function), trong đó hàm ngưỡng xác định ngõ ra là 1 nếu ngõ vào lớn hơn giá trị đặt trước, ngược lại là 0 Mô hình toán của nơ-ron với ngõ vào và trọng số được mô tả qua phương trình 2.1.
Trong mô hình nơ-ron, y đại diện cho đầu ra, f là hàm kích hoạt, x_i là các đầu vào, và w_i là trọng số tương ứng của các đầu vào Trọng số w_i thay đổi trong quá trình huấn luyện nơ-ron; nếu w_i và x_i đều dương, đầu vào x_i sẽ làm tăng giá trị đầu ra y, tạo thành các khớp kích thích (Excitatory synapse) Ngược lại, nếu w_i là âm, các trọng số này sẽ đảo ngược giá trị nhận được từ x_i, dẫn đến các khớp nối hạn chế (Inhibitory synapse) Công thức (2.1) còn có b là giá trị độ lệch (Bias), được coi như một yếu tố điều chỉnh đầu ra trong phương trình tuyến tính, giúp mô hình khớp với dữ liệu huấn luyện Trong một số trường hợp, bias có thể bị bỏ qua và được xem như trọng số với đầu vào bằng 1, từ đó công thức (2.1) có thể được viết lại.
Trong đó x 0 luôn bằng 1 Và w 0 đóng vai trò nhƣ b trong công thức (2.1)
Hàm truyền f, hay còn gọi là hàm kích hoạt, là các phương trình toán học xác định ngõ ra của nơ-ron trong mô hình nơ-ron sinh học Hàm này quyết định xem nơ-ron có hoạt động hay không, tức là liệu nó có tạo ra xung ngõ ra cho các nơ-ron kết nối sau khi ngõ vào đạt đến một mức nhất định Nếu hàm truyền là hàm ngưỡng, ngõ ra của nơ-ron sẽ có giá trị 1 khi tổng giá trị vượt qua mức ngưỡng Các mô hình mạng khác nhau sẽ áp dụng các hàm truyền khác nhau để tối ưu hóa hiệu suất.
Hàm truyền cho một nơ-ron đơn giản là hàm ngƣỡng Đồ thị hàm ngƣỡng đƣợc mô tả trong hình 2.2:
Ngõ ra của nơ-ron sử dụng hàm ngƣỡng làm hàm kích hoạt đƣợc xác định bởi phương trình sau:
MẠNG NƠ-RON NHÂN TẠO
Mạng nơ-ron nhân tạo được cấu thành từ việc kết nối các nơ-ron nhân tạo theo một thể thức nhất định, tạo nên sự khác biệt về cấu trúc và tính năng Kết nối truyền thống thường là kiểu lan truyền thẳng, bao gồm 1 lớp ngõ vào, 1 hoặc nhiều lớp ẩn, và 1 lớp ngõ ra Số lượng nơ-ron trong mỗi lớp và số lớp ẩn sẽ phụ thuộc vào mục đích cụ thể của mạng nơ-ron.
Hình 2.3: Mạng nơ-ron nhân tạo
Mạng nơ-ron hình 2.3 cho phép giá trị ngõ vào được lan truyền thẳng tới ngõ ra của lớp cuối Mạng cơ bản này bao gồm ba lớp ẩn, ký hiệu là h1, h2 và h3, và số lớp ẩn phụ thuộc vào độ phức tạp của dữ liệu Trong các mạng học sâu hiện nay, số lớp ẩn có thể lên tới hàng chục Mỗi nơ-ron trong lớp ẩn được kết nối đầy đủ với các nơ-ron ở lớp trước và lớp sau, trong khi nơ-ron ở lớp ngõ ra kết nối với tất cả nơ-ron của lớp ẩn cuối Để giảm thiểu hiện tượng quá khớp (overfitting), một số kết nối có thể bị loại bỏ trong quá trình huấn luyện Mỗi nơ-ron trong mạng thực hiện một chức năng cụ thể được mô tả trong công thức (2.1), và để tính giá trị ngõ ra cho các ngõ vào tương ứng, ta thực hiện các phép tính cần thiết.
Lớp đầu ra, lớp ẩn h1, h2, h3 và từng nơ-ron trong các lớp mạng thực hiện quá trình tính toán từ ngõ vào đến ngõ ra Để đơn giản hóa tính toán, các trọng số được lưu dưới dạng ma trận, cho phép thực hiện các phép nhân ma trận dễ dàng hơn Giả sử mạng nơ-ron bao gồm một lớp ngõ vào với n nơ-ron, một lớp ẩn với m nơ-ron, và một lớp ngõ ra với k nơ-ron như hình 2.4.
Hình 2.4: Mạng nơ-ron với các trọng số kết nối
Hình 2.4 minh họa mạng nơ-ron với các trọng số kết nối, trong đó w i,j đại diện cho trọng số kết nối từ nơ-ron thứ i trong lớp trước đến nơ-ron thứ j trong lớp sau Dựa vào mô hình toán của nơ-ron, ta có thể tính toán ngõ ra của các nơ-ron h 1, h 2, y 1 và y k một cách chính xác.
Quá trình lan truyền thẳng trong mạng nơ-ron diễn ra bằng cách tính toán giá trị ngõ ra của từng nơ-ron ở lớp cuối cùng thông qua từng nơ-ron trong các lớp Để đơn giản hóa quá trình tính toán, các trọng số, ngõ vào, giá trị của nơ-ron trong lớp ẩn và giá trị của nơ-ron ở lớp ngõ ra được thể hiện dưới dạng các ma trận.
Ma trận trọng số W xh, kích thước m×n, đại diện cho các kết nối ngõ vào đến lớp ẩn Ngõ vào x được thể hiện dưới dạng vector, và ma trận trọng số cho lớp vào đến lớp ẩn được mô tả như sau:
Ngõ ra o là ma trận thu đƣợc từ phép nhân ma trận trọng số và vector ngõ vào:
Khi thực hiện phép nhân giữa ma trận Wxh có kích thước m×n và ma trận x T kích thước n×1, ta thu được ma trận O với kích thước m×1 Các phần tử của ma trận O được xác định thông qua phép nhân của hai ma trận này.
Kết quả thu được từ ma trận tương đồng với kết quả tính toán cho từng nơ-ron theo phương trình (2.4) Trong mô hình mạng nơ-ron nhân tạo, các tham số được biểu diễn dưới dạng ma trận và vector, giúp tối ưu hóa quá trình tính toán.
HUẤN LUYỆN MẠNG NƠ-RON NHÂN TẠO
Mạng nơ-ron nhân tạo là hệ thống tính toán được thiết kế dựa trên cách hoạt động của mạng nơ-ron thần kinh trong não người Con người có khả năng xử lý thông tin một cách thông minh và chính xác nhờ vào quá trình đào tạo, bao gồm kiến thức từ sách vở và kinh nghiệm sống Tương tự, mạng nơ-ron nhân tạo cần được huấn luyện để có thể tiếp nhận và xử lý thông tin như mong muốn của người thiết kế Chẳng hạn, một mạng nơ-ron nhân tạo có thể được phát triển cho ứng dụng nhận dạng ký tự viết tay, minh họa cho khả năng học hỏi và ứng dụng của nó.
Hình 2.5: Mô hình mạng nơ-ron nhân tạo cho ứng dụng nhận dạng ký tự viết tay
Mạng nơ-ron hình 2.5 được sử dụng để nhận dạng ký tự viết tay từ 0 đến 9, với đầu vào là các điểm ảnh tương ứng Khi đầu vào là số 0, đầu ra sẽ xác định số 0, và tương tự cho các số khác, ví dụ nếu đầu vào là số 9, đầu ra thứ 9 sẽ tích cực Mạng nơ-ron thực chất là một mô hình toán học mô tả mối quan hệ giữa đầu ra (y) và đầu vào (x), với công thức y = f(x) Nếu x là các điểm ảnh của số 3, thì y phải có giá trị sao cho giải mã ra số 3, cụ thể là vector với phần tử thứ 3 bằng 1 và các phần tử còn lại bằng 0 Mối quan hệ giữa đầu ra và đầu vào được xác định bởi các trọng số, với hàm f là một hàm nhiều biến, cho phép thiết lập mối quan hệ vào ra của mạng.
Trong hình 2.4 và 2.5, chúng ta tìm kiếm các tập trọng số để thỏa mãn phương trình y = f(x), trong đó các giá trị x và y đáp ứng yêu cầu của bài toán nhận dạng Quá trình xác định các giá trị trọng số nhằm giải quyết bài toán này được gọi là huấn luyện mạng nơ-ron, hay nói cách khác, mạng nơ-ron học từ dữ liệu để thực hiện nhận dạng ký tự.
Phương pháp huấn luyện mạng nơ-ron được chia thành hai loại chính: học có giám sát (Supervised learning) và học không có giám sát (Unsupervised learning).
Học có giám sát là phương pháp tiếp thu kiến thức mới, trong đó chúng ta được cung cấp thông tin đầu vào và đầu ra lý tưởng Ví dụ, khi gặp một con số lạ, nếu được thông báo đó là số 1, chúng ta sẽ ghi nhớ và nhận diện nó trong tương lai Tương tự, trong mạng nơ-ron, đầu ra lý tưởng được gọi là nhãn (label), và khi đầu ra của mạng không khớp với nhãn, chúng ta sẽ điều chỉnh các trọng số để đạt được kết quả gần nhất với nhãn mong muốn Quá trình điều chỉnh trọng số này tuân theo các quy tắc toán học cụ thể, sẽ được trình bày trong các chương sau.
Hình 2.6: Học có giám sát
Trong học có giám sát, các cặp giá trị x được đưa vào để tính giá trị đầu ra của mạng Nếu đầu ra không đạt yêu cầu, sai số sẽ được sử dụng để điều chỉnh các trọng số Quá trình huấn luyện được lặp lại nhiều lần với các mẫu khác nhau nhằm đảm bảo mạng có thể đáp ứng được tất cả các mẫu Phương pháp học có giám sát rất phổ biến trong mạng nơ-ron nhân tạo, và độ chính xác của mạng phụ thuộc nhiều vào số lượng mẫu được sử dụng trong quá trình huấn luyện.
Phương pháp học không có giám sát là một hình thức huấn luyện mạng mà trong đó chúng ta cung cấp các đầu vào mà không kèm theo các giá trị đầu ra mong muốn Điều này có nghĩa là không có tiêu chuẩn nào để so sánh và đánh giá tính chính xác của đầu ra hiện tại, tạo ra một thách thức trong việc xác định hiệu quả của mô hình học.
Học không có giám sát là quá trình mà các mạng nơ-ron sử dụng các ngõ vào để giải quyết các bài toán phân nhóm Qua việc áp dụng một số thuật toán, mạng nơ-ron sẽ điều chỉnh các trọng số và biểu diễn dữ liệu theo các cấu trúc phù hợp Mô hình học không có giám sát cho bài toán phân nhóm dữ liệu được thể hiện rõ trong hình 2.7.
Hình 2.7: Học không có giám sát
Trong lĩnh vực máy học và trí tuệ nhân tạo, việc kết hợp học có giám sát và học không có giám sát, hay còn gọi là học bán giám sát, đang trở thành một phương pháp hiệu quả để giải quyết nhiều bài toán phức tạp.
MỘT SỐ KIẾN TRÚC MẠNG NƠ-RON NHÂN TẠO
Các nơ-ron kết nối theo nhiều cách khác nhau, hình thành nên các kiến trúc mạng nơ-ron đa dạng Sự khác biệt trong kiến trúc và cách kết nối ảnh hưởng đến khả năng ứng dụng của các mạng này Trong phần này, chúng ta sẽ khám phá một số kiểu kết nối phổ biến trong mạng nơ-ron.
Dữ liệu được phân loại
2.5.1 Perceptron nơ-ron Đây là mô hình nơ-ron cơ bản nhất Các nơ-ron Perceptron sử dụng các hàm kích hoạt là hàm ngƣỡng nhƣ chúng ta đã giới thiệu ở phần đầu của chương Các nơ-ron Perceptron nhận các ngõ vào và thực hiện tính toán với các trọng số để tạo ra ngõ ra cho các bài toán phân loại đơn giản Các nơ-ron Perceptron có thể đƣợc huấn luyện để thực hiện các phép tính đơn giản nhƣ phép cộng, trừ và các phép toán luận lý nhƣ AND, OR…
2.5.2 Mạng nhiều lớp lan truyền thẳng (Multilayer feed forward neural network)
Mạng nhiều lớp lan truyền thẳng (Multilayer feed forward neural network) là loại mạng nơ-ron truyền thống với nhiều lớp ẩn và các kết nối một chiều từ ngõ vào đến ngõ ra Các nơ-ron trong mạng này sử dụng hàm kích hoạt không tuyến tính thay vì hàm ngưỡng như trong nơ-ron Perceptron Số lượng lớp ẩn quyết định tính chất của mạng, với các mạng nhiều lớp hoặc mạng sâu khi số lớp và kết nối gia tăng Mạng nơ-ron truyền thẳng được ứng dụng rộng rãi trong các lĩnh vực như phân lớp, nhận dạng và dự đoán.
Hình 2.9: Mô hình mạng nơ-ron nhiều lớp truyền thẳng
2.5.3 Mạng nơ-ron hàm cơ sở xuyên tâm (Radius Basic Neural Network)
Mạng nơ-ron hàm cơ sở xuyên tâm (Radius Basic Neural Network) là một dạng đặc biệt của mạng nơ-ron nhiều lớp, được áp dụng cho bài toán phân loại không tuyến tính Cấu trúc của mạng này tương tự như mạng nhiều lớp, nhưng chỉ sử dụng một lớp ẩn Sự khác biệt chính giữa hai loại mạng này nằm ở việc mạng nơ-ron hàm cơ sở xuyên tâm sử dụng hàm kích hoạt Radius Basic Function, thay vì các hàm sigmoid như trong mạng nhiều lớp.
Hình 2.10: Mạng nơ-ron sử dụng hàm cơ sở xuyên tâm
2.5.4 Mạngnơ-ron tích chập (Convolutional Neural Network)
Mạng nơ-ron tích chập (CNN) là một thành phần quan trọng trong các mạng học sâu hiện nay, đặc biệt phù hợp cho việc xử lý ảnh trong không gian 2D CNN bao gồm nhiều lớp, trong đó một số lớp sử dụng toán tử tích chập để trích xuất đặc trưng từ dữ liệu đầu vào Cấu trúc của mạng nơ-ron tích chập được thể hiện rõ qua hình 2.11.
Hình 2.11: Mạng nơ-ron tích chập
2.5.5 Mạng hồi quy (Recurrent Neural Network)
Mạng hồi quy là một loại mạng nơ-ron nhiều lớp, trong đó có các kết nối giữa ngõ ra của lớp ẩn và ngõ vào của chính nó hoặc các nơ-ron trong cùng một lớp Giá trị ngõ ra của lớp ẩn được lưu giữ và sử dụng làm ngõ vào cho lần tiếp theo Loại mạng nơ-ron này rất phổ biến trong các ứng dụng xử lý chuỗi hoặc thông tin thay đổi theo thời gian, đặc biệt trong lĩnh vực xử lý ngôn ngữ tự nhiên.
Hình 2.12: Mạng nơ-ron hồi quy
In addition to the well-known neural networks mentioned above, there are numerous other architectures utilized in the field of artificial intelligence, including Auto Encoders, Hopfield Networks, Boltzmann Machines, Restricted Boltzmann Machines, Deep Belief Networks, Markov Chains, and Generative Adversarial Networks.
Fully connected layer Convolutional layer
HUẤN LUYỆN MẠNG NƠ-RON
GIỚI THIỆU
Huấn luyện mạng nơ-ron là quá trình tối ưu hóa các trọng số để đạt được kết quả đầu ra mong muốn từ ngõ vào Học có giám sát, một phương pháp phổ biến trong huấn luyện mạng nơ-ron, sử dụng tập dữ liệu với các cặp ngõ vào và ngõ ra để điều chỉnh trọng số Chương 3 sẽ trình bày mô hình toán học của nơ-ron và phương pháp huấn luyện dựa trên mô hình này Huấn luyện mạng nơ-ron nhiều lớp thường áp dụng phương pháp lan truyền ngược, một kỹ thuật phổ biến cho nhiều loại mạng nơ-ron Chương này cũng sẽ hướng dẫn xây dựng các chương trình huấn luyện bằng ngôn ngữ Python dựa trên các giải thuật toán học đã được trình bày.
PERCEPTRON NƠ-RON
Perceptron là đơn vị cơ bản của mạng nơ-ron nhân tạo, bao gồm một tập hợp các vector số thực đầu vào từ x1 đến xn, một hàm tổ hợp tuyến tính và một đầu ra Đầu ra của Perceptron có giá trị 1 khi tổ hợp tuyến tính đầu vào dương và -1 khi tổ hợp tuyến tính âm Công thức xác định đầu ra của Perceptron là yếu tố quan trọng trong việc hiểu cách hoạt động của nó.
Trong mạng nơ-ron, trọng số (w i) là các số thực thể hiện mức độ ảnh hưởng của ngõ vào đối với ngõ ra Chúng đóng vai trò quan trọng trong việc xác định mức độ đóng góp của từng ngõ vào Cụ thể, trong công thức 3.1, (-w 0) được sử dụng như một ngưỡng để quyết định ngõ ra của nơ-ron, có thể là -1 hoặc +1.
Công thức tổng quát cho ngõ ra của nơ-ron có thể đƣợc viết lại dưới dạng sau:
Trong mạng nơ-ron, giá trị x₀ bằng 1 và w₀ là giá trị ngưỡng Hàm f được gọi là hàm kích hoạt, và Perceptron sử dụng hàm dấu (sgn) để tạo ra đầu ra là -1 hoặc +1 Đầu ra của nơ-ron được ký hiệu là o, trong khi y hoặc t (target) đại diện cho đầu ra mong muốn.
Biểu diễn ngõ ra của nơ-ron với hàm dấu:
Trong mô hình toán học được mô tả bởi phương trình (3.4), chức năng của nơ-ron được coi như một hàm ánh xạ từ ngõ vào x đến ngõ ra o Các biến ngõ vào x1, x2, xn tương ứng với các hằng số w1, w2, wn Với mỗi vector ngõ vào x, ta sẽ nhận được một ngõ ra duy nhất và tương ứng, được xác định bởi công thức x1*w1 + x2*w2 + + xn*wn = f(o).
Một nơ-ron có hai ngõ vào có thể thực hiện chức năng của cổng AND, với ngõ vào 00, 01, 10 cho ngõ ra là 0 và ngõ vào 11 cho ngõ ra là 1 Quá trình huấn luyện nơ-ron nhằm tìm kiếm các giá trị trọng số phù hợp để đạt được trạng thái của cổng AND Tương tự, khi sử dụng nơ-ron để thực hiện cổng OR, các trọng số cần được điều chỉnh để đảm bảo ngõ ra là 0 với ngõ vào 00 và ngõ ra là 1 với các ngõ vào 01, 10, 11 Quá trình huấn luyện là việc thay đổi trọng số để đạt được ngõ ra mong muốn tương ứng với ngõ vào Để hiểu rõ hơn về cách hoạt động của nơ-ron, chúng có thể được biểu diễn trong mặt phẳng quyết định trong không gian n chiều, nơi nơ-ron cho ngõ ra là 1 cho các điểm nằm trên một phía của mặt phẳng và ngõ ra là -1 cho các điểm ở phía còn lại.
Hình 3.2: Mặt phẳng quyết định biểu diễn với một nơ-ron Perceptron có
Hình 3.2 minh họa một nơ-ron với hai ngõ vào x1 và x2, trong đó các điểm trên mặt phẳng được ký hiệu bằng dấu (+) và dấu (–) dựa trên tọa độ x1 và x2 Mục tiêu là phân biệt các điểm (+) với các điểm (–) bằng cách tạo ra ngõ ra 1 cho các điểm (+) và –1 cho các điểm (–) Trong hình 3.2(a), các giá trị của x1 và x2 cho ngõ ra 1 được phân tách khỏi ngõ ra –1 bởi một đường thẳng tuyến tính, cho thấy các cặp (x1, x2) là có khả năng tách biệt tuyến tính Ngược lại, trong hình 3.2(b), các cặp (x1, x2) tạo ra ngõ ra –1 và 1 không thể phân tách bằng một đường thẳng.
Một phía của mặt phẳng không thể được phân tách bằng một đường thẳng tuyến tính, dẫn đến việc hàm tổ hợp tuyến tính của hai đầu vào không đủ khả năng phân loại các điểm như trong hình 3.2(b).
Xét một nơ-ron với hai ngõ vào và một ngõ ra thực hiện hàm AND và hàm OR, trong đó ngõ ra 1 biểu diễn cho luận lý đúng (true) và -1 cho luận lý sai (false) Để thực hiện hàm AND, các trọng số được sử dụng là w0 = -0.8, w1 = 0.5, và w2 = 0.5 Giá trị ngõ ra của nơ-ron khi thực hiện hàm AND được xác định dựa trên các giá trị đầu vào x1 và x2 theo bảng kết quả tương ứng.
Perceptron nơ-ron trên có thể thực hiện hàm OR nếu thay mức ngưỡng w 0 = –0.3 Thực hiện phép tính tương tự với w 0 = –0.3 ta được bảng sau: x1 x2 o
Một nơ-ron có thể được cài đặt với nhiều chức năng khác nhau tùy thuộc vào giá trị của các trọng số Trong ví dụ đã nêu, các trọng số được xác định trước, và việc tìm kiếm giá trị trọng số phù hợp với yêu cầu của hàm chức năng là một phần quan trọng trong quá trình huấn luyện nơ-ron Do đó, quá trình huấn luyện có thể được hiểu đơn giản là việc tìm ra các giá trị trọng số để nơ-ron có thể thực hiện một hàm hoặc chức năng cụ thể.
3.2.2 Quy luật huấn luyện Perceptron nơ-ron
Các nơ-ron kết nối tạo thành mạng nơ-ron, và chúng ta thường huấn luyện toàn bộ mạng thay vì từng nơ-ron riêng lẻ Để hiểu cách các nơ-ron học từ dữ liệu, chúng ta xem xét nơ-ron Perceptron, học để đưa ra ngõ ra -1 hoặc +1 cho mỗi mẫu Quá trình học liên quan đến việc điều chỉnh các trọng số để nơ-ron đạt được ngõ ra mong muốn Một số thuật toán như quy luật Perceptron và quy luật Delta được sử dụng để huấn luyện nơ-ron, đảm bảo quá trình hội tụ, tức là lỗi giảm dần đến mức nhỏ và độ chính xác tăng lên Hội tụ là một khái niệm quan trọng, trong khi quá trình huấn luyện không hội tụ hoặc hội tụ cục bộ sẽ được thảo luận ở các phần sau.
Giả sử một perceptron nơ-ron có mô hình toán học như hình 3.1, quá trình huấn luyện bắt đầu với trọng số ngẫu nhiên Các mẫu huấn luyện được đưa vào nơ-ron và trọng số được điều chỉnh cho đến khi ngõ ra đạt giá trị mong muốn Quá trình này lặp lại liên tục cho đến khi nơ-ron tạo ra ngõ ra mong muốn cho tất cả ngõ vào Trọng số được cập nhật theo quy luật huấn luyện Perceptron, tương ứng với ngõ vào Trước khi đi vào chi tiết quy luật học, chúng ta sẽ định nghĩa một số thuật ngữ và giải thích rõ hơn về quá trình học của nơ-ron.
Tập huấn luyện trong học máy bao gồm các cặp vector đầu vào, thường được ký hiệu là x, và đầu ra mong muốn, ký hiệu là y hoặc t Ví dụ, một nơ-ron với 2 ngõ vào và 1 ngõ ra được huấn luyện để thực hiện hàm AND sẽ có tập huấn luyện gồm 4 mẫu, mỗi mẫu chứa một vector đầu vào và một giá trị đầu ra Giá trị đầu ra này thường được gọi là giá trị mong muốn (target) hoặc nhãn (label).
Cụ thể cho hàm AND, các ngõ vào và ngõ ra tương ứng được biểu diễn trong bảng sau:
Quá trình huấn luyện lặp lại các bước như sau:
Đặt ngõ vào (0, 0) vào nơ-ron, tính ngõ ra o, nếu ngõ ra chƣa bằng 0 thì quay lại hiệu chỉnh các trọng số
Đặt ngõ vào (0, 1) nếu ngõ ra chƣa bằng 0 thì quay lại hiệu chỉnh các trọng số
Quá trình huấn luyện mô hình lặp đi lặp lại cho đến khi đạt được đầu ra mong muốn tương ứng với vector đầu vào, được thể hiện trong bảng trạng thái của hàm AND Để đảm bảo quá trình huấn luyện hội tụ, việc cập nhật trọng số cần tuân theo một quy luật cụ thể Trong phần này, chúng ta áp dụng quy luật Perceptron để thực hiện việc cập nhật trọng số Trọng số sẽ được điều chỉnh trong mỗi vòng lặp theo quy tắc đã định.
Trong công thức (3.5), t đại diện cho ngõ ra mong muốn của mẫu huấn luyện, trong khi o là ngõ ra thực tế của nơ-ron theo công thức (3.4) Hằng số η, được gọi là tốc độ học (Learning rate), có vai trò điều tiết mức độ thay đổi của các trọng số trong quá trình huấn luyện Tốc độ học thường được chọn là một hằng số nhỏ hơn 1, với giá trị phổ biến là 0.1 Mặc dù là một hằng số, trong một số trường hợp, tốc độ học có thể được điều chỉnh và giảm dần để giải quyết các vấn đề phát sinh trong quá trình huấn luyện mạng.
Công thức 3.5 là công cụ quan trọng trong việc cập nhật trọng số, giúp quá trình huấn luyện mô hình hội tụ hiệu quả Để hiểu rõ hơn về quá trình hội tụ, chúng ta có thể xem xét một số trường hợp cụ thể Giả sử mẫu huấn luyện được phân loại chính xác bởi nơ-ron, khi đó giá trị (t-o) sẽ bằng 0, dẫn đến việc Δw i cũng trở thành 0.
MẠNG NHIỀU LỚP VÀ GIẢI THUẬT LAN TRUYỀN NGƯỢC
Trong các phần trước, chúng ta đã nghiên cứu về luật học của nơ-ron đơn với hàm ngõ ra tuyến tính Trong thực tế, nơ-ron được kết hợp thành mạng nơ-ron nhiều lớp, và phương pháp huấn luyện phổ biến là lan truyền ngược (Back Propagation) Mạng nơ-ron nhiều lớp cho phép xử lý các ứng dụng phức tạp, đặc biệt là phân biệt các tập dữ liệu trên mặt phẳng quyết định không tuyến tính Mặc dù khoa học trí tuệ nhân tạo đang phát triển nhanh chóng với các cấu trúc mạng phức tạp hơn, các mạng nơ-ron vẫn dựa trên mô hình toán học cơ bản mà chúng ta đã thảo luận Giải thuật lan truyền ngược vẫn là chìa khóa quan trọng trong việc hiểu quá trình học và đáp ứng của mạng nơ-ron nhân tạo Trong phần này, chúng ta sẽ trình bày chi tiết về giải thuật lan truyền ngược cùng với ví dụ bằng ngôn ngữ Python, giải thích dựa trên toán học và lập trình Mặc dù việc sử dụng thư viện hỗ trợ có thể tiết kiệm thời gian, nhưng chúng ta sẽ tập trung vào việc hiểu sâu về giải thuật và xây dựng chương trình huấn luyện mạng nơ-ron từ các mô hình toán học Sau khi nắm vững quá trình huấn luyện và các thông số mô hình, chúng ta có thể áp dụng các hàm thư viện để cài đặt và huấn luyện mạng nơ-ron một cách nhanh chóng và hiệu quả.
3.3.1 Các hàm kích hoạt phi tuyến
Khi xây dựng mạng nơ-ron, việc đầu tiên là chọn các đơn vị nơ-ron để kết nối trong mạng Các đơn vị nơ-ron tuyến tính chỉ phù hợp với những bài toán phân loại đơn giản và không thể ghép lại để giải quyết các bài toán phức tạp Đối với tập dữ liệu lớn và phức tạp, cần sử dụng nơ-ron có ngõ ra phi tuyến Một giải pháp hiệu quả là áp dụng các hàm phi tuyến làm hàm kích hoạt sau các tổ hợp tuyến tính của ngõ vào.
Mô hình nơ-ron với hàm kích hoạt phi tuyến đƣợc mô tả trong hình 3.5
Hình 3.5: Mô hình nơ-ron với hàm kích hoạt phi tuyến
Hình 3.7 trình bày một đơn vị nơ-ron với hàm ngõ ra phi tuyến, trong đó hàm sigmoid là một trong những hàm phổ biến nhất được sử dụng trong mạng nơ-ron Ngõ ra của hàm sigmoid được giới hạn trong khoảng (0,1) Ngoài hàm sigmoid, còn có một số hàm phi tuyến thông dụng khác như hàm tanh, hàm ReLU và hàm softmax.
Hàm sigmoid, hay còn gọi là hàm logistic, là một hàm quan trọng trong các mạng nơ-ron nhiều lớp Hàm này cung cấp đầu ra dương với giá trị không tuyến tính, dao động từ 0 đến 1, và được xác định bởi một phương trình cụ thể.
Hàm sigmoid có độ phức tạp tính toán cao, đặc biệt trên các hệ thống vi xử lý nhỏ, dẫn đến việc tiêu tốn nhiều năng lượng và thời gian Một vấn đề lớn với các nơ-ron sử dụng hàm sigmoid là hiện tượng khử gradient, gây cản trở việc cập nhật trọng số Đồ thị của hàm sigmoid được thể hiện trong hình 3.6.
Hình 3.6: Đồ thị hàm sigmoid x 1 w 1 x 2 w 2 x n w n o
Hàm tanh là một hàm phi tuyến tương tự như hàm sigmoid, nhưng có ngõ ra dao động từ -1 đến 1, trong khi hàm sigmoid chỉ tạo ra giá trị từ 0 đến 1 Hàm tanh được định nghĩa bằng một phương trình cụ thể.
Hàm tanh có thể gây ra hiện tượng triệt tiêu gradient tương tự như hàm sigmoid Triệt tiêu gradient xảy ra khi gradient giảm dần trong quá trình lan truyền ngược Khi có quá nhiều lớp trong mạng nơ-ron, gradient có thể trở nên rất nhỏ hoặc bằng 0 khi đến các lớp xa, dẫn đến việc không có cập nhật giá trị cho các trọng số trong những lớp này Đồ thị của hàm tanh được thể hiện trong hình 3.7.
Hình 3.7: Đồ thị hàm tanh
Hàm ReLU (Rectified Linear Unit) là một hàm đơn vị tuyến tính được sử dụng phổ biến trong kỹ thuật học sâu, giúp khắc phục những nhược điểm của các hàm phi tuyến Hàm này có giá trị dương khi đầu vào dương và bằng 0 khi đầu vào âm, được mô tả bằng phương trình toán học đơn giản.
Hàm ReLU được thực hiện một cách đơn giản, không yêu cầu phép toán phức tạp, giúp tiết kiệm tài nguyên và tăng tốc độ xử lý trong các mạng nơ-ron nhân tạo nhiều lớp Việc sử dụng hàm ReLU làm cho quá trình học hội tụ nhanh hơn và cải thiện tốc độ huấn luyện thông qua phương pháp giảm độ dốc ngẫu nhiên Ngoài ra, hàm ReLU còn khắc phục tình trạng triệt tiêu gradient mà các hàm sigmoid và tanh gặp phải.
Hình 3.8: Đồ thị hàm ReLU
Hàm softmax là một thành phần quan trọng trong kỹ thuật học sâu, thường được sử dụng làm hàm kích hoạt cho các nơ-ron ở ngõ ra thay vì các nơ-ron ở các lớp ẩn Kết quả của hàm softmax đại diện cho phân bố xác suất phân loại của các ngõ ra Công thức toán học của hàm softmax được mô tả như sau:
Hàm softmax là một thành phần quan trọng trong các mạng nơ-ron, đặc biệt là ở lớp ngõ ra trong các bài toán phân loại Nó cho phép xác định xác suất của từng ngõ ra so với tổng các ngõ ra, từ đó giúp mạng nơ-ron dự đoán lớp mà mẫu hiện tại có khả năng thuộc về cao nhất Trong các mạng nơ-ron học sâu, hàm softmax được sử dụng để tối ưu hóa quá trình phân loại.
Trong khi các hàm kích hoạt như sigmoid, tanh và ReLU tạo ra ngõ ra độc lập cho từng nơ-ron, hàm softmax lại đặt ngõ ra của mỗi nơ-ron trong mối quan hệ với tổng các nơ-ron còn lại Điều này cho phép hàm softmax thực hiện việc chuẩn hóa ngõ ra, giúp các giá trị trở thành xác suất và dễ dàng so sánh Hình 3.9 minh họa rõ ràng cách hoạt động của hàm softmax.
Hình 3.9: Phân bố ngõ ra của hàm softmax
3.3.2 Mạng nơ-ron nhiều lớp
Mạng nơ-ron nhiều lớp được hình thành từ sự kết nối của nhiều nơ-ron với ngõ ra không tuyến tính Các nơ-ron trong cùng một lớp thường sử dụng các hàm kích hoạt giống nhau Cấu trúc của mạng bao gồm ba lớp cơ bản: lớp ngõ vào, lớp ẩn và lớp ngõ ra.
Hình 3.10: Mạng nơ-ron nhiều lớp
Mạng nơ-ron nhiều lớp bao gồm lớp đầu vào, được ký hiệu là x, với số lượng ngõ vào tương ứng với số đặc điểm của mẫu mà nơ-ron được huấn luyện để nhận dạng, phân loại hoặc dự đoán Ví dụ, lớp ngõ vào cho ảnh 28×28 pixel sẽ có 784 nơ-ron Các lớp ẩn theo sau lớp ngõ vào, và số lượng lớp ẩn phụ thuộc vào độ phức tạp của tập dữ liệu; việc tăng số lượng lớp ẩn là một khái niệm quan trọng trong kỹ thuật học sâu Mỗi lớp ẩn chứa nhiều nơ-ron với hàm ngõ ra không tuyến tính, nhưng hiện chưa có tài liệu xác định số lượng nơ-ron cần thiết cho mỗi lớp ẩn, nên thường được thiết kế dựa trên thực nghiệm để tránh lãng phí tài nguyên Lớp cuối cùng là lớp ngõ ra, ví dụ, để nhận dạng 10 ký tự, mạng nơ-ron cần có 10 ngõ ra, mỗi ngõ ra đại diện cho một ký tự.
3.3.3 Giải thuật lan truyền ngƣợc (Backpropagarion Algorithm)
Giải thuật lan truyền ngược là phương pháp chính để huấn luyện các mạng nơ-ron nhiều lớp, trong đó số lượng nơ-ron và các kết nối được xác định trước Phương pháp này áp dụng thuật toán giảm dần độ dốc (Gradient Descent) nhằm tối ưu hóa và giảm thiểu sai số giữa các đầu ra x1, x2, xn.
HÀM LỖI – HÀM MẤT MÁT
3.4.1 Hàm lỗi, Cost function và Loss function
Hàm lỗi, hàm chi phí (cost function) và hàm mất mát (loss function) là những khái niệm quan trọng trong mạng học sâu, thể hiện mối quan hệ giữa sai số đầu ra thực tế và đầu ra mong muốn của mạng Mặc dù Cost function và Loss function có bản chất tương tự, chúng có sự khác biệt nhất định sẽ được giải thích sau Mục tiêu của quá trình huấn luyện là giảm giá trị của các hàm lỗi này đến mức tối thiểu Hàm lỗi là một hàm nhiều biến, trong đó các biến chính là trọng số kết nối của mạng nơ-ron.
3.4.2 Sai số bình phương trung bình
Một trong những phương pháp phổ biến để tính giá trị hàm lỗi trong huấn luyện mạng nơ-ron nhiều lớp là sử dụng sai số bình phương trung bình (MSE - Mean Square Error) Giả sử có m mẫu huấn luyện, mỗi mẫu bao gồm một vector x và một nhãn t (target) hoặc y (label) Ngõ ra thực của mạng được xác định dựa trên hàm số của ngõ vào và các trọng số Phương trình 3.41 minh họa cách tính sai số bình phương trung bình, trong đó okd là ngõ ra thực của nơ-ron và t kd là ngõ ra mong muốn thứ k đối với mẫu huấn luyện thứ d Hàm lỗi này giúp xác định mức độ sai lệch giữa ngõ ra thực và ngõ ra mong muốn trên toàn bộ tập dữ liệu huấn luyện.
Phương pháp tính sai số LMS được sử dụng để đánh giá độ khớp giữa giá trị ngõ ra thực tế của mạng và giá trị ngõ ra mong muốn, đặc biệt trong các trường hợp sử dụng hàm phi tuyến như sigmoid và tanh Tuy nhiên, ngõ ra từ các hàm phân bố xác suất như softmax không tương thích với phương pháp MSE Cụ thể, ngõ ra thực của các nơ-ron sử dụng hàm softmax là phân bố xác suất trên tổng các ngõ ra, trong khi ngõ ra mong muốn của các nơ-ron thông thường thường được mã hóa bằng one-hot.
Các ngõ ra của nơ-ron có thể được coi là một phân bố xác suất, với ngõ ra tích cực (giá trị 1) có xác suất cao nhất Giả sử ngõ ra của các nơ-ron sử dụng hàm xác suất là * + và ngõ ra mong muốn được biểu diễn bởi * + Để đo lường sự khác biệt giữa hai vector phân bố xác suất, ta sử dụng định nghĩa cross-entropy.
Hàm softmax và cross-entropy là hai thành phần quan trọng thường được áp dụng trong các mạng nơ-ron học sâu, bao gồm cả mạng nơ-ron tích chập và mạng nơ-ron hồi quy.
BATCH VÀ MINI-BATCH
Giải thuật lan truyền ngược cập nhật trọng số sau mỗi lần lặp với một mẫu huấn luyện, cho phép tối ưu hóa hiệu suất của mạng nơ-ron Trong các ví dụ đã trình bày, mạng được huấn luyện trên tập dữ liệu ký tự MNIST, bao gồm 60.000 hình ảnh.
Để huấn luyện một tập dữ liệu lớn, quá trình cập nhật trọng số có thể mất thời gian đáng kể, với 60.000 lần cập nhật cho mỗi mẫu Phương pháp xử lý theo khối (batch) được giới thiệu trong thuật toán lan truyền ngược, cho phép tính toán sai số cho từng mẫu nhưng chỉ cập nhật trọng số một lần sau khi hoàn thành tất cả mẫu Mặc dù hiệu quả, phương pháp này yêu cầu bộ nhớ lớn để lưu trữ giá trị cho đến khi hoàn tất tính toán Hiện nay, phương pháp mini-batch được ưa chuộng, trong đó trọng số được cập nhật sau khi xử lý một số mẫu được xác định bởi kích thước khối (batch-size) Ví dụ, tập dữ liệu MNIST với 60.000 mẫu có thể được chia thành các mini-batch với kích thước 256 Quá trình huấn luyện bắt đầu với từng khối mẫu, tính toán sai số tổng và cập nhật trọng số một lần cho mỗi khối, giúp rút ngắn thời gian huấn luyện Việc lựa chọn mẫu trong khối có thể cố định hoặc ngẫu nhiên, trong đó phương pháp ngẫu nhiên thường được áp dụng.
The mini-batch training program utilizes the softmax function for output instead of the sigmoid function, and it employs cross-entropy in place of the LMS error function The implementation involves importing essential libraries such as NumPy, TensorFlow, and Matplotlib, along with loading the MNIST database for data processing.
To preprocess the MNIST dataset, we load the training and testing data using `mnist.load_data()` The training data, `x_train`, is reshaped into a 2D array of dimensions (60000, 784) and normalized by dividing by 255.0 Similarly, the test data, `x_test`, is reshaped to (10000, 784) and normalized The labels for both training and testing sets, `y_train` and `y_test`, are converted into one-hot encoded matrices The reshaped and normalized data is then converted into matrix format for further processing Additionally, we define the sigmoid function to compute the logistic function and the softmax function to calculate the probabilities of each class Finally, the `AccTest` function is implemented to evaluate the matching score between the predicted outputs and the actual labels.
OutMaxArg=np.argmax(outN,axis=1)
LabelMaxArg=np.argmax(labels,axis=1)
Accuracy=np.mean(OutMaxArg==LabelMaxArg) return Accuracy def feedforward(samples,Wh,bh,Wo,bo): bo=0 bh=0
OutH1=sigmoid(np.dot(samples,Wh)+bh)
OutN=softmax(np.dot(OutH1,Wo)+bo) return OutN
# define the network parameter learningRate = 0.1 learningRate_decay=0.005 lamda=0.0001
Wh=np.matrix(np.random.uniform(-
0.5,0.5,(NumInput,NumHidden))) bh= np.random.uniform(0,0.5,(1,NumHidden)) del_Wh= np.zeros((NumInput,NumHidden)) del_bh= np.zeros((1,NumHidden))
Wo=np.random.uniform(-0.5,0.5,(NumHidden,NumOutput)) bo= np.random.uniform(0,0.5,(1,NumOutput)) del_Wo= np.zeros((NumHidden,NumOutput)) del_bo= np.zeros((1,NumOutput))
# Trainng the network with back propagation,
SampleIdx=np.concatenate([np.arange(NumOfTrainSample ),np.arange(NumOfTrainSample)])
Cost_Entropy=np.zeros(Epoch)
Cost=np.zeros(np.int(np.ceil(NumOfTrainSample/BatchS ize)))
IdxCost=0; t_start=t1=dt.datetime.now() for ep in range(Epoch): t1=dt.datetime.now()
Idx=np.random.randint(0,NumOfTrainSample,1) for i in range(0,NumOfTrainSample,BatchSize): # Mini-batch gradient descent algorithm Batch_sample SampleIdx[i+Idx[0]:i+Idx[0]+BatchSize]
#print(Batch_sample) sample=np.matrix(x_train[Batch_sample,:]) targ=np.matrix(y_train [Batch_sample,:])
OutH1=sigmoid(np.dot(sample,Wh)+bh)
OutN =softmax(np.dot(OutH1,Wo)+bo)
# size (BatchSiz x Number of class)
Cost[IdxCost]=- np.sum(np.multiply(targ,np.log10(OutN)))
IdxCost+=1; ho=(targ-OutN) dWo=np.matrix(np.dot(OutH1.T,ho)/BatchSize) dbo=np.mean(ho,0)
#back propagate error temp=np.dot(Wo,ho.T) temp1=np.multiply(OutH1,(1.-OutH1)) hH1=np.multiply(temp.T,temp1) dwh1=np.dot(sample.T,hH1)/BatchSize dbh1=np.mean(hH1,0)
WoUpdate=learningRate*dWo + Momentum*del_Wo boUpdate= learningRate*dbo + Momentum*del_bo del_Wo=WoUpdate; del_bo=boUpdate;
WhUpdate=learningRate*dwh1 + Momentum*del_Wh bhUpdate=learningRate*dbh1 + Momentum*del_bh del_Wh=WhUpdate; del_bh=bhUpdate;
Wh=Wh+ WhUpdate bh+=bhUpdate
Cost_Entropy[ep]=np.mean(Cost)
IdxCost=0 learningRate=learningRate-learningRate_decay t2=dt.datetime.now() print(t2-t1) print("Trining epoch %i" % ep) print("Cross-Entropy %f" % Cost_Entropy[ep]) #test sample
RealOutNedforward(x_test,Wh,bh,Wo,bo) AccuracycTest(RealOutN,y_test) print("Accuracy: %f" % Accuracy) t_end=t1=dt.datetime.now() print("Total time : ") print(t_end-t_start) plt.plot(Cost_Entropy,"dr-") plt.show()
Kết quả thực thi chương trình
Trong ví dụ này, hàm softmax được sử dụng thay vì hàm sigmoid cho các nơ-ron ở lớp ngõ ra, vì softmax cung cấp phân bố xác suất phù hợp cho các bài toán phân lớp Đạo hàm của hàm softmax được tính bằng công thức a i (1-a i ), với a i là ngõ ra của hàm softmax Hàm lỗi được áp dụng là cross-entropy.
Cost[IdxCost]=- np.sum(np.multiply(targ,np.log10(OutN)))
THIẾT KẾ MẠNG NƠ-RON NHIỀU LỚP VỚI THƯ VIỆN
Keras cho phép xây dựng mô hình mạng nơ-ron nhiều lớp thông qua lớp Sequential, được coi như một ngăn xếp các lớp Để thiết kế mạng nơ-ron, người dùng cần nắm vững một số khái niệm cơ bản trong Keras Mô hình mạng nơ-ron có thể được định nghĩa trong một lớp Sequential bằng cách sử dụng cú pháp: from keras.models import Sequential và model = Sequential( ).
Keras allows for the easy addition of layers to a model in a sequential order This can be accomplished using the add() method, enabling users to build their models efficiently To get started, you can import the necessary components with `from keras.models import Sequential` and `from keras.layers import Dense`, then create a Sequential model and add layers as needed.
Ngõ vào cho mạng là lớp đầu tiên trong mô hình mạng, xác định kích thước và định dạng cho ngõ vào thông qua các tham số mô hình Chẳng hạn, lớp ngõ vào có thể được định nghĩa với 8 ngõ vào cho lớp Dense, mà lớp này được biết đến như một lớp kết nối đầy đủ.
Khởi tạo trọng số là một bước quan trọng trong quá trình xây dựng mô hình, thường được thực hiện bằng cách gán giá trị ngẫu nhiên nhỏ cho các trọng số Keras cung cấp nhiều phương pháp khởi tạo trọng số, bao gồm phương pháp "uniform", trong đó trọng số được khởi tạo ngẫu nhiên trong khoảng từ 0 đến 0.05, và phương pháp "normal", nơi trọng số được khởi tạo theo phân bố Gaussian với giá trị trung bình nhất định.
= 0 và độ lệch chuẩn (standard deviation) = 0.05) o “zero”: Tất cả các trọng số đƣợc khởi tạo giá trị 0
Keras hỗ trợ nhiều lớp kết nối quan trọng cho việc xây dựng mô hình mạng nơ-ron Lớp Dense là lớp kết nối đầy đủ, có thể được sử dụng như lớp ẩn hoặc lớp ngõ ra Lớp Dropout giúp áp dụng kỹ thuật dropout để giảm thiểu vấn đề quá khớp trong mạng nơ-ron nhiều lớp bằng cách loại bỏ một số kết nối Cuối cùng, lớp Merge cho phép kết hợp đầu vào từ nhiều mô hình khác nhau thành một mô hình duy nhất.
Biên dịch mô hình là quá trình quan trọng trong học máy, sử dụng ba tham số chính Đầu tiên, model optimizer là phương pháp cập nhật trọng số, trong đó phương pháp giảm dần độ dốc ngẫu nhiên (SGD) được áp dụng phổ biến, bên cạnh các phương pháp khác như RMSprop và Adam Thứ hai, hàm sai số hay hàm mất mát (model loss function) đóng vai trò quan trọng trong việc đánh giá hiệu suất của mô hình Keras hỗ trợ cài đặt nhiều loại hàm mất mát, bao gồm MSE (mean squared error), binary_crossentropy và categorical_crossentropy.
Tiêu chuẩn mô hình (model metric): Tiêu chuẩn đƣợc sử dụng để đánh giá mô hình trong suốt quá trình huấn luyện
# For a multi-class classification problem model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# For a binary classification problem model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
# For a mean squared error regression problem model.compile(optimizer='rmsprop', loss='mse')
Sau khi biên dịch, mô hình sẽ được huấn luyện thông qua hàm fit() với các tham số quan trọng như Epochs, tức là số lần lặp lại trong quá trình huấn luyện trên tập dữ liệu, và Batch_size, là kích thước của nhóm nhỏ được sử dụng trong quá trình huấn luyện.
Sau khi được huấn luyện, mô hình có khả năng thực hiện các chức năng như nhận dạng, phân loại và dự đoán Có nhiều kiểu ngõ ra từ mô hình, bao gồm: Model.evaluate() để tính giá trị sai số cho dữ liệu ngõ vào, Model.predict() để tạo ra ngõ ra cho ngõ vào, Model.predict_class() để xác định lớp ngõ ra và Model.predict.proba() để cung cấp xác suất cho lớp ngõ ra.
Tóm tắt mô hình: Mô hình sau khi thiết kế có thể đƣợc tóm tắt bằng hàm summary()
This article demonstrates how to design a neural network for recognizing handwritten characters using the MNIST dataset with the Keras library The implementation begins by importing necessary libraries such as NumPy, TensorFlow, and Matplotlib The MNIST database is then loaded through TensorFlow's Keras API, setting the stage for building and training the neural network model.
(x_train, y_train),(x_test, y_test) mnist.load_data() x_train=np.reshape(x_train,(60000,784))/255.0 x_test= np.reshape(x_test,(10000,784))/255.0 y_train= np_utils.to_categorical(y_train,10) y_test= np_utils.to_categorical(y_test,10)
# model model = Sequential() model.add(Dense(512, input_dimx4,activation='sigmoid')) model.add(Dense(10, activation='softmax')) model.compile(loss="binary_crossentropy", optimizer="sgd",metrics=["accuracy"]) print(model.summary())
# Train model model.fit(x_train, y_train, batch_size0, epochs, validation_data=(x_test, y_test), verbose=1)
#model predict score = model.evaluate(x_test, y_test, batch_size8)
Kết quả thực thi chương trình:
Layer (type) Output Shape Param #
=============================================================== dense_36 (Dense) (None, 512) 401920 dense_37 (Dense) (None, 10) 5130
Train on 60000 samples, validate on 10000 samples
136us/step - loss: 0.3222 - accuracy: 0.9000 - val_loss: 0.3138 - val_accuracy: 0.9000
130us/step - loss: 0.3078 - accuracy: 0.9000 - val_loss: 0.3010 - val_accuracy: 0.9000
60000/60000 [==============================] - 9s 143us/step - loss: 0.2954 - accuracy: 0.9000 - val_loss: 0.2885 - val_accuracy: 0.9000
60000/60000 [==============================] - 9s 147us/step - loss: 0.2833 - accuracy: 0.9000 - val_loss: 0.2763 - val_accuracy: 0.9000
60000/60000 [==============================] - 9s 146us/step - loss: 0.2713 - accuracy: 0.9000 - val_loss: 0.2642 - val_accuracy: 0.9002
60000/60000 [==============================] - 11s 187us/step - loss: 0.2596 - accuracy: 0.9006 - val_loss: 0.2524 - val_accuracy: 0.9012
60000/60000 [==============================] - 13s 212us/step - loss: 0.2481 - accuracy: 0.9018 - val_loss: 0.2409 - val_accuracy: 0.9028
60000/60000 [==============================] - 13s 223us/step - loss: 0.2370 - accuracy: 0.9033 - val_loss: 0.2297 - val_accuracy: 0.9044
60000/60000 [==============================] - 13s 218us/step - loss: 0.2263 - accuracy: 0.9063 - val_loss: 0.2191 - val_accuracy: 0.9088
60000/60000 [==============================] - 15s 254us/step - loss: 0.2160 - accuracy: 0.9105 - val_loss: 0.2089 - val_accuracy: 0.9121
Thiết kế ứng dụng mạng nơ-ron nhiều lớp bằng thư viện Keras rất đơn giản, chỉ cần nắm vững cấu trúc mạng, thông số mô hình và các thuật toán huấn luyện Việc cài đặt mạng nơ-ron trở nên ngắn gọn và dễ dàng hơn so với việc viết chương trình từ mô hình toán học truyền thống Huấn luyện mạng cũng được thực hiện một cách hiệu quả.
After training for 10 epochs, the model achieved a recognition accuracy of 92% To enhance accuracy, model parameters were reconfigured The implementation involves importing necessary libraries such as NumPy, Keras, TensorFlow, and Matplotlib The MNIST database is loaded using TensorFlow's Keras API, setting the foundation for further analysis and optimization.
(x_train,y_train),(x_test,y_test)= mnist.load_data() x_train=np.reshape(x_train,(60000,784))/255.0 x_test= np.reshape(x_test,(10000,784))/255.0 y_train= np_utils.to_categorical(y_train,10) y_test= np_utils.to_categorical(y_test,10)
The article discusses the creation of a neural network model using the Sequential API in Keras The model consists of a dense layer with 512 units and a sigmoid activation function, followed by another dense layer with 10 units and a softmax activation function It employs the Stochastic Gradient Descent (SGD) optimizer with a learning rate of 0.1 and a momentum of 0.95 The model is compiled with binary crossentropy as the loss function and accuracy as a metric, and the summary of the model is printed for review.
# Train model model.fit(x_train,y_train,batch_size0, epochs, validation_data=(x_test,y_test), verbose=1)
#model predict score= model.evaluate(x_test,y_test, batch_size0)
Layer (type) Output Shape Param #
=================================================== dense_38 (Dense) (None, 512) 401920 dense_39 (Dense) (None, 10) 5130
Train on 60000 samples, validate on 10000 samples
60000/60000 [==============================] - 8s 139us/step - loss: 0.0954 - accuracy: 0.9673 - val_loss: 0.0593 - val_accuracy: 0.9794
60000/60000 [==============================] - 8s 140us/step - loss: 0.0538 - accuracy: 0.9821 - val_loss: 0.0495 - val_accuracy: 0.9838
60000/60000 [==============================] - 8s 139us/step - loss: 0.0487 - accuracy: 0.9839 - val_loss: 0.0458 - val_accuracy: 0.9846
146us/step - loss: 0.0447 - accuracy: 0.9854 - val_loss: 0.0429 - val_accuracy: 0.9855
60000/60000 [==============================] - 9s 146us/step - loss: 0.0412 - accuracy: 0.9866 - val_loss: 0.0391 - val_accuracy: 0.9872
60000/60000 [==============================] - 9s 148us/step - loss: 0.0377 - accuracy: 0.9878 - val_loss: 0.0359 - val_accuracy: 0.9888
60000/60000 [==============================] - 9s 153us/step - loss: 0.0342 - accuracy: 0.9890 - val_loss: 0.0329 - val_accuracy: 0.9893
60000/60000 [==============================] - 10s 160us/step - loss: 0.0314 - accuracy: 0.9900 - val_loss: 0.0315 - val_accuracy: 0.9900
60000/60000 [==============================] - 10s 174us/step - loss: 0.0289 - accuracy: 0.9908 - val_loss: 0.0286 - val_accuracy: 0.9907
60000/60000 [==============================] - 10s 165us/step - loss: 0.0266 - accuracy: 0.9915 - val_loss: 0.0275 - val_accuracy: 0.9910
Khi điều chỉnh các tham số như tốc độ học và momentum trong hàm SGD, độ chính xác của mô hình có thể đạt 99% chỉ sau 10 epoch Bên cạnh việc sử dụng thuật toán SGD, Keras còn hỗ trợ nhiều thuật toán khác để huấn luyện mạng nơ-ron, bao gồm RMSprop, Adagrad, Adadelta và Adam.