Machine learning
Tổng quan
Machine Learning, một nhánh của Trí tuệ nhân tạo (AI), là lĩnh vực trong Khoa học máy tính cho phép máy tính tự học từ dữ liệu mà không cần lập trình cụ thể Công nghệ này giúp máy tính phát triển khả năng nhận thức tương tự con người, như nghe, nhìn, hiểu ngôn ngữ và giải toán Ngoài ra, Machine Learning còn hỗ trợ con người xử lý khối lượng lớn thông tin, thường được gọi là Big Data, mà chúng ta phải đối mặt hàng ngày.
Phân loại thuật toán ML
2.1 Phân loại dựa trên phương thức học a Học có giám sát
Học có giám sát (Supervised Learning) là một phương pháp học máy sử dụng thuật toán để dự đoán đầu ra của dữ liệu mới dựa trên các cặp dữ liệu đã biết trước, bao gồm input và outcome Các cặp dữ liệu này thường được gọi là observation và label.
- Observation : kí hiệu là x, input trong các bài toán Observation thường có dạng một vector x = (x1, x2, …, xn), gọi là feature vector Mỗi xi gọi là một feature
- Label : kí hiệu là y, output của bài toán Mỗi observation sẽ có một label tương ứng tạo thành cặp (observation, label)
Các cặp dữ liệu (input, outcome) biết trước được gọi là training data (dữ liệu huấn luyện)
Học có giám sát mô phỏng quá trình học của con người thông qua việc đưa ra dự đoán cho một câu hỏi và so sánh với đáp án chính xác Phương pháp này không chỉ giúp người học trả lời đúng câu hỏi hiện tại mà còn áp dụng cho những câu hỏi tương tự trong tương lai.
Trong học có giám sát, việc dán nhãn các observation là điều bắt buộc, nhưng đây cũng là một nhược điểm của phương pháp này, vì không phải lúc nào việc gán nhãn chính xác cho các observation cũng dễ dàng.
Học có giám sát thường được chia làm 2 loại :
- Phân loại (Classification): Một bài toán được gọi là classification nếu các label của input data được chia thành một số hữu hạn nhóm
Hồi quy là một phương pháp thống kê được sử dụng khi đầu ra mong muốn là một dải giá trị liên tục, chẳng hạn như tiền lương hoặc trọng lượng Mô hình hồi quy đơn giản nhất là hồi quy tuyến tính, giúp phân tích mối quan hệ giữa các biến số.
Học có giám sát là mô hình học phổ biến nhất trong Machine Learning b Học không giám sát
Học không giám sát là một phương pháp học máy sử dụng thuật toán để khám phá và trích xuất các mối quan hệ tiềm ẩn trong dữ liệu mà không cần đến nhãn hay mục tiêu cụ thể Khác với học có giám sát, phương pháp này chỉ làm việc với dữ liệu đầu vào mà không được cung cấp kiến thức nào trước đó Điều này có nghĩa là các thuật toán phải tự học từ dữ liệu mà không có bất kỳ sự hướng dẫn nào, giúp phát hiện các cấu trúc và mẫu ẩn trong dữ liệu.
Học bán giám sát là phương pháp kết hợp giữa học có giám sát và học không giám sát, trong đó một phần dữ liệu được gán nhãn và phần lớn dữ liệu còn lại không có nhãn Mô hình này tận dụng số lượng lớn dữ liệu không được gán nhãn để cải thiện hiệu suất học tập.
Việc kết hợp 8 yếu tố này giúp tối ưu hóa hiệu quả sử dụng dữ liệu, từ đó nâng cao độ chính xác của mô hình Học củng cố đóng vai trò quan trọng trong quá trình này.
Học tăng cường (Reinforcement Learning) là một mô hình học tự động, nơi thuật toán điều chỉnh hành động của mình dựa trên phản hồi từ môi trường nhằm tối đa hóa hiệu quả đạt được Thuật toán này đo lường phản hồi và sử dụng hàm đánh giá để tìm kiếm các phương án hành động, từ đó tăng cường phản hồi tích cực Trong mô hình này, không cần có tập huấn luyện cố định; thuật toán chỉ cần một hoặc nhiều mục tiêu, danh sách các hành vi khả thi, cùng với dữ liệu phản hồi về hiệu quả thực thi hành động so với mục tiêu đã đề ra.
2.2 Phân loại dựa trên thuật toán
Hồi quy tuyến tính (Linear Regression) là một thuật toán nhằm xác định phương trình tuyến tính giữa dữ liệu đầu vào (X) và dữ liệu đầu ra (Y), trong đó X là biến giải thích và Y là biến phụ thuộc Ví dụ, mô hình hồi quy tuyến tính có thể được sử dụng để phân tích mối quan hệ giữa chiều cao và cân nặng Trước khi xây dựng mô hình, cần xác định xem có sự liên quan giữa các biến hay không; mặc dù không nhất thiết phải có sự tương tác, nhưng sự liên quan là cần thiết Biểu đồ phân tán có thể được sử dụng để minh họa mức độ liên quan giữa các biến Nếu không có mối quan hệ nào giữa các biến trong mô hình, hồi quy tuyến tính sẽ không mang lại giá trị.
Hình 1 Linear Regression b Logistic Regression
Hồi quy logistic là một thuật toán phân loại mạnh mẽ, được sử dụng để gán các đối tượng vào các giá trị rời rạc như 0, 1, 2, và hơn thế nữa Một ứng dụng phổ biến của thuật toán này là trong việc phân loại email, giúp xác định xem một email có phải là thư rác hay không.
Giao dịch trực tuyến có thể gặp rủi ro, bao gồm các email công việc, email gia đình và email spam Để đánh giá tính an toàn của các giao dịch này, thuật toán sử dụng hàm sigmoid logistic để đưa ra xác suất, ví dụ như khối u có 80% khả năng là lành tính hoặc giao dịch có 90% khả năng là gian lận Việc áp dụng công nghệ này giúp người dùng nhận biết và bảo vệ mình trước các mối nguy hiểm tiềm ẩn.
+ Dự đoán email có phải spam hay không
+ Dự đoán giao dịch ngân hàng là gian lận hay không
+ Dự đoán khối u lành hay ác tính
+ Dự đoán khoản vay có trả được không
+ Dự đoán khoản đầu tư vào start-up có sinh lãi hay không c Stepwise Regression
Hồi quy từng bước (stepwise regression) là phương pháp phân tích hồi quy bội, trong đó các biến độc lập được thêm vào phương trình hồi quy một cách tuần tự Mỗi biến được bổ sung sẽ được đánh giá theo mức độ ảnh hưởng và khả năng giải thích của mô hình hồi quy, giúp tối ưu hóa quá trình phân tích dữ liệu.
Nhược điểm chính của phương pháp hồi quy từng bước là khả năng đưa vào các biến không liên quan, dẫn đến việc tạo ra các mối quan hệ ảo hoặc tác động giả lên biến phụ thuộc trong mô hình.
Phương pháp quy hồi từng bước chỉ nên áp dụng khi các biến trong mô hình được hỗ trợ bởi lý thuyết vững chắc liên quan đến nghiên cứu Để đánh giá sự cải thiện độ phù hợp của mô hình, có thể sử dụng các chỉ số như R-bình phương, AIC và BIC qua câu lệnh nestreg Câu lệnh này cung cấp thông tin chi tiết về độ phù hợp của mô hình, bao gồm thống kê Wald, Chi-bình phương, R-bình phương, sự thay đổi R-bình phương, cùng với các chỉ số thông tin AIC và BIC cho từng mô hình trung gian.
Trong lĩnh vực machine learning, phân loại thống kê nhằm xác định lớp của một đối tượng dựa trên các đặc điểm của nó Bộ phân loại tuyến tính thực hiện điều này thông qua quyết định phân loại dựa trên sự kết hợp tuyến tính của các đặc tính, được gọi là giá trị đặc trưng và thường được trình bày dưới dạng vectơ đặc trưng Các bộ phân loại này hiệu quả trong các ứng dụng thực tế như phân loại tài liệu, đồng thời đạt được độ chính xác tương đương với bộ phân loại phi tuyến tính nhưng tốn ít thời gian hơn cho việc đào tạo và sử dụng.
Hình 2 Linear Classifier b Support Vector Machine (SVM)
Bài toán nhận dạng tiền mặt
Keras
Keras là một thư viện mã nguồn mở cung cấp giao diện Python cho mạng nơ-ron nhân tạo, hoạt động như một phần "high-level" với các phần "low-level" như TensorFlow, CNTK hoặc Theano Thư viện này bao gồm nhiều khối xây dựng quan trọng cho mạng nơ-ron như lớp (layers), mục tiêu (objective), chức năng kích hoạt (activation functions) và trình tối ưu hóa (optimizers) Keras cũng cung cấp các công cụ hữu ích để làm việc với dữ liệu hình ảnh và văn bản, giúp đơn giản hóa mã cần thiết cho việc phát triển mạng nơ-ron sâu (deep neural network).
In addition to standard neural networks, Keras also supports Convolutional Neural Networks (CNNs) and Recurrent Neural Networks (RNNs).
Hình 6 Deep Learning Framwork Power Scores 2018
Convolutional Neutral Network (CNN)
Mạng nơron tích chập (CNN hoặc ConvNet) là một trong những mô hình tiên tiến của Deep Learning, thường được sử dụng phổ biến trong phân tích và xử lý hình ảnh trực quan.
CNN đã tích hợp vào các nền tảng như Facebook và Google để phát triển công nghệ nhận diện khuôn mặt, nhận dạng hình ảnh, xe tự lái và drone giao hàng tự động.
CNN rất phù hợp và tối ưu cho xử lý phân loại hình ảnh vì vậy nhóm em quyết định sử dụng CNN cho đồ án của mình
- Convolution Layer (Conv Layer) là lớp đầu tiên để trích xuất các đặc trưng từ hình ảnh đầu vào
Convolution Layer giữ vai trò quan trọng trong việc duy trì mối quan hệ giữa các pixel bằng cách phân tích các đặc trưng hình ảnh từ các ô vuông nhỏ trong dữ liệu đầu vào Nó thực hiện tất cả các tính toán cần thiết, với các yếu tố chính bao gồm filter map, stride, padding và feature map.
CNN áp dụng các filter vào các vùng của hình ảnh thông qua các filter map Những filter map này là ma trận 3 chiều chứa các giá trị số được gọi là tham số.
+ Stride : khi dịch chuyển các filter map theo pixel dựa vào giá trị từ trái sang phải thì sự dịch chuyển này được gọi là stride
Hình 8 Convolve with 3x3 filter and stride is 2
Padding là việc thêm các giá trị 0 vào lớp input, giúp các pixel ở viền của ảnh tương tác tốt hơn với bộ lọc Bằng cách này, bạn có thể thêm pixel giá trị 0 vào viền hình ảnh mà không làm ảnh hưởng đến đầu vào khi bộ lọc được áp dụng.
+ Feature map : Thể hiện kết quả của mỗi lần filter map quét qua input
Hình 10 Minh họa feature map
ReLU Layer là một lớp quan trọng trong mạng nơ-ron, áp dụng hàm kích hoạt max(0, x) lên đầu ra của Conv Layer Mục tiêu của ReLU Layer là tăng cường tính phi tuyến tính cho mạng mà không làm thay đổi kích thước của ảnh hoặc thêm bất kỳ tham số nào.
Hình 11 Hàm ReLu và các biến thể
Pooling Layer là một thành phần quan trọng trong mạng nơ-ron tích chập, được sử dụng để giảm kích thước không gian đầu vào và độ phức tạp của tính toán Khi đầu vào quá lớn, pooling layer sẽ được đặt giữa các lớp convolution để tối ưu hóa quá trình xử lý dữ liệu.
Có hai loại pooling chủ yếu là max pooling và average pooling
Max pooling là một kỹ thuật phổ biến trong xử lý ảnh, nhằm mục đích giữ lại những chi tiết quan trọng bằng cách chọn pixel có giá trị lớn nhất.
Hình 12 Max pooling và Average pooling
Trong lớp Pooling, việc áp dụng Max Pooling giúp giảm số lượng tham số, dẫn đến việc mạng nơ-ron tích chập (Convolutional Neural Network) có thể tạo ra nhiều lớp Filter Map Mỗi Filter Map sẽ cung cấp một kết quả Max Pooling khác nhau.
Fully Connected Layer là các lớp kết nối đầy đủ trong mạng nơ-ron, hoạt động sau khi ảnh đã được xử lý qua các lớp Conv Layer và Pooling Layer, giúp mô hình học được các đặc điểm quan trọng của ảnh Các đầu ra từ lớp cuối được dàn phẳng thành vector và đưa vào Fully Connected Layer Để phân loại đầu ra, sử dụng hàm softmax hoặc hàm sigmoid: với bài toán phân loại có 2 đầu ra, hàm activation ở lớp đầu ra là hàm sigmoid; trong khi đó, nếu có nhiều hơn 2 đầu ra, hàm activation sẽ là hàm softmax.
Hình 13 Minh họa Fully Connected Layer
Hình 14 Minh họa hàm Softmax
VGG16
VGG16 is a convolutional neural network proposed by K Simonyan and A Zisserman from the University of Oxford After training, the VGG16 model achieved a remarkable top-5 test accuracy of 92.7% on the ImageNet dataset, which consists of 14 million images across 1,000 different classes.
Hình 15 Cấu trúc mạng VGG16
- Convolutional layer: kích thước 3*3, padding=1, stride=1
- Pool/2: max pooling layer với size 2*2
- Càng về sau thì kích thước của input càng giảm nhưng trọng số ngày càng tăng (64 -> 128 -> 256->512 ->4096)
- Sau nhiều Conv Layer và Pooling Layer thì dữ liệu sẽ được dàn phẳng (flattening) và đưa vào Fully Connected Layer.
Transfer Learning
Transfer Learning là kỹ thuật cho phép tái sử dụng một mô hình đã được huấn luyện trước trên các tác vụ nguồn cụ thể Mô hình này có thể sử dụng một phần hoặc toàn bộ để học các tác vụ mục tiêu, với khả năng thêm các lớp mới tùy thuộc vào nhiệm vụ của từng lớp trong mô hình Việc áp dụng Transfer Learning giúp cải thiện hiệu suất học tập cho các mô hình mới.
Các bước thực hiện chính của bài toán nhận diện tiền mặt
- Tạo dữ liệu bằng cách đọc ảnh các tờ tiền từ camera
Thiết kế mạng nơ-ron (NN) sử dụng đầu vào là ảnh có kích thước 128x128 với 3 kênh màu Ảnh này sẽ được đưa vào mạng VGG16 để trích xuất đặc trưng Đầu ra từ VGG16 sẽ được sử dụng làm đầu vào cho một mạng nơ-ron nhỏ hơn, kết thúc bằng một lớp Dense và hàm kích hoạt softmax để phân loại.
Đầu ra của mô hình sẽ là một vector softmax chứa xác suất p(i) cho mỗi lớp i, và chúng ta sẽ chọn giá trị lớn nhất trong vector đó làm lớp dự đoán Trước khi bắt đầu quá trình huấn luyện, cần phải có dữ liệu cho bài toán Do không có bộ dữ liệu sẵn có về tiền Việt Nam trên mạng, nhóm chúng tôi đã tự tạo dữ liệu bằng cách đọc liên tục từ camera và lưu vào thư mục tương ứng với các mệnh giá tiền Chúng tôi đã sử dụng ba mệnh giá là 10.000, 20.000 và 50.000 VNĐ, cùng với một nhãn 00000 cho ảnh không có tiền Hãy chạy đoạn code sau với các tên thư mục tương ứng với mệnh giá tiền mà bạn đã chọn làm dữ liệu.
Sau khi hoàn tất quá trình chạy cho bốn loại tiền, dữ liệu hình ảnh đầu vào của các loại tiền này được lưu trữ trong thư mục "data", với các thư mục con được đặt tên tương ứng với từng mệnh giá tiền.
Hình 17 Dữ liệu để training
Hình 18 Ảnh minh họa dữ liệu Đọc cái hình ảnh trong các thư mục đã tạo và resize các hình ảnh trong bộ dữ liệu thành kích thước (128,128)
Sau đó convert các nhãn (00000,10000,20000,50000) thành one-hot sử dụng class LabelBinarizer trong thư viên sklearn và lưu vào file pix.data để load dữ liệu cho lần sau
Tiếp theo là training model Chúng em tận dụng phần trích xuất đặc trưng của VGG16
Loại bỏ phần Classifier của mạng VGG16 và sử dụng các thành phần còn lại làm đầu vào cho lớp Fully Connected Đầu tiên, chia dữ liệu thành hai tập: tập huấn luyện chiếm 80% và tập kiểm tra chiếm 20%.
Hình 20 Chia train:test tỉ lệ 8:2
In our approach, we removed the classifier portion of the VGG16 network, opting to only adjust the weights of the newly added Fully Connected layers while keeping the existing VGG layers frozen, as they have already been well-trained The new Fully Connected section consists of a flattening layer, two Dense layers utilizing ReLU activation, and incorporates Dropout to randomly omit certain nodes in order to minimize overfitting Finally, we include a Dense layer with a softmax activation function to classify the data into four distinct outputs.
Để cải thiện độ chính xác của mô hình và tránh hiện tượng overfitting, chúng tôi đã áp dụng kỹ thuật augmentation cho dữ liệu Kỹ thuật này bao gồm các phép biến đổi như quay, thu phóng, thay đổi tỉ lệ, dịch chuyển trái phải, và lật ngang dọc, nhằm mở rộng tập dữ liệu huấn luyện.
Hình 22 Augmentaiton cho dữ liệu
Cuối cùng, chúng tôi sẽ tiến hành huấn luyện mô hình bằng hàm fit_generator để tăng cường dữ liệu, giúp mô hình tổng quát hóa tốt hơn Mô hình sẽ được đào tạo trong 50 epochs.
Hình 23 Training dữ liệu với 50 epochs
Sau khi training model với tỉ lệ train :test là 8:2 thì thu được kết quả là với weight có accuracy cao nhất thu được là 98.4%
Hình 25 Nhận diện tiền mệnh giá 10000
Hình 26 Nhận diện tiền mệnh giá 10000
Hình 27 Nhận diện tiền mệnh giá 20000
Hình 28 Nhận diện tiền mệnh giá 20000
Hình 29 Nhận diện tiền mệnh giá 50000
Hình 30 Nhận diện tiền mệnh giá 50000
Source code: https://github.com/sonngocminh99/Money_Classify