CHƯƠNG II: PHÁT HIỆN URL ĐỘC HẠI DỰA TRÊN HỌC SÂU
2.1. Khái quát về học máy và học sâu
2.1.3 Một số phương pháp học sâu
2.1.3.1 Mạng nơ ron sâu (Deep Neural Network-DNN)
Đây là một dạng cụ thể của lĩnh vực học sâu. Mạng nơ ron sâu là một mạng nơ ron nhân tạo nhưng có kiến trúc phức tạp và "sâu" hơn nhiều so với kiến trúc của mạng nơ ron truyền thống. Mạng nơ-ron sâu có số lượng nút trong mỗi lớp và số lượng lớp ẩn lớn hơn rất nhiều, cho phép nó học và mô hình hóa những đặc trưng phức tạp và trừu tượng từ dữ liệu. Sự vượt trội của mạng nơ-ron sâu đã được chứng minh trong nhiều lĩnh vực, bao gồm việc phát hiện xâm nhập (intrusion detection) trên nhiều tập dữ liệu khác nhau. Các nghiên cứu đã áp dụng mạng nơ-ron sâu vào bài toán phát hiện xâm nhập trên các tập dữ liệu như KDDCup 99, NSL-KDD, Kyoto, UNSW-NB15, WSN-DS và CICIDS 2017.
Một DNN thường có cấu trúc gồm nhiều lớp nơ-ron, trong đó mỗi lớp nơ-ron gồm nhiều đơn vị tính toán được gọi là nơ-ron. Các lớp nơ-ron thường được kết nối với nhau thông qua các trọng số. Dữ liệu sẽ được đưa vào lớp đầu vào và được truyền qua các lớp ẩn để tạo ra đầu ra cuối cùng.
DNN được huấn luyện thông qua một quá trình gọi là "lan truyền ngược" (back propagation). Trong quá trình này, mô hình DNN thử nghiệm và điều chỉnh các trọng số của nơ-ron để tối ưu hóa hàm mất mát (loss function) và đạt được kết quả tốt nhất.
Hình 2-1 Mô hình DNN
Với khả năng học tập từ dữ liệu lớn và khả năng hiểu các đặc trưng phức tạp, DNN đã chứng minh được hiệu suất cao trong nhiều lĩnh vực như nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên, nhận dạng giọng nói và nhiều ứng dụng khác. Điều này đã làm cho DNN trở thành một công cụ quan trọng trong lĩnh vực trí tuệ nhân tạo và học máy hiện đại. DNN là một trong những kiến trúc mạng nơ ron mạnh mẽ nhất hiện nay và đã đạt được nhiều thành công trong nhiều lĩnh vực ứng dụng.
Khái niệm và thành phần quan trọng của DNN:
Lớp đầu vào (Input layer): Đây là lớp đầu tiên của mạng nơ ron sâu, nhận dữ liệu đầu vào và chuyển tiếp nó tới các lớp ẩn tiếp theo. Số nơ-ron trong lớp này thường phụ thuộc vào số chiều của dữ liệu đầu vào.
Lớp ẩn (Hidden layers): DNN thường có nhiều lớp ẩn, mỗi lớp chứa một số nơ-ron. Các lớp ẩn giúp mô hình học các đặc trưng phức tạp từ dữ liệu đầu vào. Mỗi nơ-ron trong lớp ẩn kết nối với tất cả các nơ-ron trong lớp trước đó và lớp sau đó.
Lớp đầu ra (Output layer): Lớp cuối cùng của DNN, chịu trách nhiệm tạo ra dự đoán hoặc đầu ra của mô hình. Số nơ-ron trong lớp này phụ thuộc vào bài toán cụ thể mà mạng nơ-ron đang giải quyết. Ví dụ, trong bài toán phân loại nhị phân, lớp đầu ra thường có 1 nơ-ron để đưa ra dự đoán có hoặc không.
Hàm kích hoạt (Activation function): Mỗi nơ-ron trong mạng nơ ron sâu sẽ sử dụng một hàm kích hoạt để áp dụng trên tổng trọng số đầu vào. Hàm kích hoạt này giúp đưa ra một đầu ra phi tuyến tính và giúp mô hình học các đặc trưng phức tạp. Một số hàm kích hoạt phổ biến bao gồm hàm ReLU (Rectified Linear Unit), hàm sigmoid và hàm tanh.
o Hàm ReLU (Rectified Linear Unit):
Công thức: f(x) = max(0, x)
ReLU áp dụng một biến đầu vào x và trả về giá trị của x nếu x > 0, hoặc trả về 0 nếu x <= 0. Điều này dẫn đến việc loại
bỏ các giá trị âm và giữ lại các giá trị dương. ReLU thường được sử dụng rộng rãi vì tính đơn giản và khả năng giúp mạng học nhanh chóng.
o Hàm sigmoid:
Công thức: f(x) = 1 / (1 + exp(-x))
Sigmoid chuyển đổi mọi giá trị đầu vào thành một giá trị nằm trong khoảng (0, 1). Điều này thường được sử dụng trong các mạng thần kinh nhân tạo để biểu diễn xác suất, ví dụ như trong bài toán phân loại nhị phân.
o Hàm tanh (hyperbolic tangent):
Công thức: f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))
Tanh cũng chuyển đổi các giá trị đầu vào thành giá trị nằm trong khoảng (-1, 1), tương tự như sigmoid. Tuy nhiên, tanh có dải giá trị lớn hơn và có xu hướng "đối xứng" xung quanh điểm gốc.
Trọng số và bias: Trọng số là các tham số trong mạng nơ ron sâu, xác định mức độ quan trọng của tín hiệu đầu vào đối với nơ-ron. Bias là một giá trị hằng số được thêm vào đầu vào của mỗi nơ-ron để điều chỉnh việc kích hoạt của nó. Cả trọng số và bias được điều chỉnh trong quá trình lan truyền ngược để tối ưu hóa mô hình.
Hàm mất mát (Loss function): Đây là một hàm được sử dụng để đo lường sai khác giữa đầu ra dự đoán của mạng nơ ron sâu và giá trị thực tế. Mục tiêu là tối thiểu hóa hàm mất mát này trong quá trình huấn luyện để mô hình có khả năng dự đoán chính xác.
Lan truyền ngược (Backpropagation): Là thuật toán được sử dụng để huấn luyện mạng nơ ron sâu. Nó dựa trên việc tính toán độ lỗi truyền ngược từ đầu ra đến đầu vào, và sử dụng gradient descent để điều chỉnh trọng số và bias của mô hình.
2.1.3.2 Mạng Nơ-ron tích chập (Convolutional neural network - CNN)
Mạng nơ ron tích chập có một lớp vào, một lớp ra và nhiều lớp ẩn khác nhau.
Nó là một dạng cụ thể của mạng nơ-ron sâu được sử dụng rộng rãi trong xử lý dữ liệu không gian như ảnh, âm thanh và video. Mạng Nơ-ron tích chập được thiết kế đặc biệt để tận dụng tính chất không gian của dữ liệu bằng cách sử dụng các lớp tích chập.
Các lớp ẩn gồm các loại như: lớp tích chập, lớp giảm kích thước, lớp sửa dữ liệu, lớp chuẩn hóa, lớp kết nối đầy đủ... Trong đó, lớp tích chập được sử dụng nhằm tạo liên kết giữa các lớp liền kề trong phạm vi nhỏ, thường được giới hạn trong một vùng cục bộ của dữ liệu. Quá trình tích chập giữa đầu vào và các bộ lọc (filter) trong lớp tích chập giúp tạo ra các feature map, ghi nhận mức độ quan tâm của mạng đối với các đặc trưng trong vùng cục bộ đó. Điều này giúp giảm đáng kể các việc tính toán các hàm truyền giữa các lớp mà vẫn duy trì được mối liên hệ giữa các nơ ron để trích xuất đặc trưng của dữ liệu ở các lớp sau đó của mạng. Một số nghiên cứu đề xuất một IDS hiệu quả dựa trên CNN. Ý tưởng chính là sử dụng kỹ thuật phân tích thành phần và autoencoder để trích xuất đặc trưng từ dữ liệu trước khi đưa vào CNN. Sau đó, autoencoder được sử dụng để học một biểu diễn nén (latent representation) của dữ liệu. Autoencoder là một mạng nơ-ron có khả năng học cách biểu diễn dữ liệu đầu vào thành một đặc trưng nén thông qua quá trình huấn luyện mô hình với mục tiêu tái tạo đầu ra gần giống với đầu vào. Điều này giúp tạo ra một biểu diễn tối thiểu của dữ liệu với các đặc trưng quan trọng nhất được bảo lưu. Sau khi đã trích xuất được các đặc trưng thông qua PCA và autoencoder, các đặc trưng được biến đổi thành ma trận hai chiều và đưa vào mạng nơ-ron tích chập (CNN) để huấn luyện và phân loại các bản ghi mạng. Các thử nghiệm trên tập dữ liệu KDD Cup'99 đã chứng minh hiệu quả của mạng nơ-ron tích chập trong việc phát hiện xâm nhập. Nó đã cung cấp kết quả tốt về thời gian thực hiện so với các thuật toán truyền thống trong giai đoạn huấn luyện và kiểm tra. Điều này cho thấy sự mạnh mẽ và tiềm năng của CNN trong xử lý dữ liệu phức tạp và trích xuất đặc trưng từ dữ liệu mạng.[3]
Mạng nơ ron sâu bao gồm các lớp nơ ron được kết nối với nhau theo kiểu truyền thẳng (feedforward). Mỗi nơ ron trong một lớp được kích hoạt thông qua một
hàm kích hoạt (activation function) dựa trên tổng trọng số đầu vào của nó. Các trọng số trong mạng nơ ron sâu được tối ưu hóa thông qua quá trình huấn luyện để mô hình có thể dự đoán đầu ra chính xác từ đầu vào.Quá trình huấn luyện mạng nơ ron sâu thường sử dụng phương pháp lan truyền ngược (backpropagation) để tính toán đạo hàm của hàm mất mát (loss function) theo các trọng số và điều chỉnh các trọng số đó để giảm thiểu hàm mất mát. Điều này giúp mạng nơ ron sâu học được các mẫu và đặc trưng ẩn trong dữ liệu.
Hình 2-2 Mô hình CNN
Các thành phần chính của một mạng nơ-ron tích chập bao gồm:
Lớp đầu vào: Nhận dữ liệu hình ảnh đầu vào.
Lớp tích chập (Convolutional layer): Sử dụng các bộ lọc tích chập để trích xuất các đặc trưng từ dữ liệu hình ảnh. Mỗi bộ lọc tích chập trượt qua không gian ảnh và tính toán tích chập giữa bộ lọc và một phần của ảnh.
Quá trình này giúp phát hiện các đặc trưng như cạnh, góc, hoặc texture.
Lớp kích hoạt (Activation layer): Áp dụng hàm kích hoạt để đưa ra đầu ra phi tuyến tính sau khi tích chập. Thông thường, hàm kích hoạt ReLU (Rectified Linear Unit) được sử dụng để đưa ra giá trị dương và loại bỏ các giá trị âm.
Lớp gộp (Pooling layer): Thực hiện việc giảm kích thước không gian của đặc trưng trích xuất bằng cách áp dụng một phép toán gộp như Max
Pooling hoặc Average Pooling. Điều này giúp giảm số lượng tham số và tính toán, đồng thời giữ lại thông tin quan trọng.
Lớp kết nối đầy đủ (Fully-connected layer): Lớp này nhận đầu vào từ các lớp trước đó và thực hiện tính toán trên các đặc trưng đã được trích xuất để đưa ra dự đoán cuối cùng.
Lớp đầu ra: Lớp cuối cùng của mạng, đưa ra đầu ra dự đoán, ví dụ như các lớp phân loại hoặc các giá trị hồi quy.
2.1.3.3 Mạng nơ ron hồi quy (Recurrent neural networks - RNN)
RNN là một loại mạng nơ-ron mở rộng khả năng của mạng nơ-ron truyền thống bằng cách cho phép xử lý dữ liệu tuần tự. Nó được thiết kế để mô hình hóa các quan hệ phụ thuộc thời gian trong dữ liệu. RNN được tạo ra từ các đơn vị: đầu vào- đơn vị ẩn-đơn vị đầu ra. Các đơn vị ẩn trong RNN được coi là các phần tử nhớ, chúng giúp lưu trữ thông tin về các đầu vào trước đó. Mỗi đơn vị RNN dựa vào đầu vào hiện tại của nó và đầu ra của đơn vị RNN trước đó để đưa ra quyết định. Điều này cho phép RNN xem xét và xử lý thông tin dựa trên ngữ cảnh thời gian. RNN được sử dụng rộng rãi trong các lĩnh vực khác nhau như xử lý giọng nói, nhận dạng hoạt động của con người, dự đoán chữ viết tay và hiểu ngữ nghĩa. Trong hệ thống Phát hiện xâm nhập (IDS), RNN có thể được sử dụng để giải quyết bài toán phân lớp có giám sát hoặc trích xuất đặc trưng từ dữ liệu.. IDS dựa trên RNN được một số nghiên cứu đề xuất để phân loại nhị phân và phân lớp đa lớp trên tập dữ liệu NSL-KDD. Mô hình đã được thử nghiệm bằng cách sử dụng một số nút ẩn và tốc độ học khác nhau. Kết quả cho thấy rằng tốc độ học và số lượng các nút ẩn ảnh hưởng đến độ chính xác của mô hình. Vì vậy điều chỉnh tốc độ học và số lượng đơn vị ẩn là những yếu tố quan trọng để đạt được hiệu suất tốt của mô [3]
Đặc điểm quan trọng của RNN là khả năng lưu trữ thông tin từ quá khứ và sử dụng thông tin đó để thực hiện các dự đoán trong tương lai. Điều này cho phép RNN xử lý dữ liệu tuần tự như văn bản, âm thanh, chuỗi thời gian và các loại dữ liệu có tính chất thời gian khác. Cấu trúc của một RNN bao gồm các "đơn vị hồi quy"
(recurrent units) hoặc "nút hồi quy" (recurrent nodes). Mỗi nút hồi quy nhận đầu vào
từ nút trước đó và sử dụng thông tin trạng thái trước đó để tính toán đầu ra và trạng thái hiện tại. Nút hồi quy được lặp đi lặp lại qua các thời điểm tuần tự, tạo thành một chuỗi các nút hồi quy.
Trong RNN, mỗi nút hồi quy có hai loại trọng số: trọng số đầu vào và trọng số hồi quy. Trọng số đầu vào điều chỉnh ảnh hưởng của đầu vào tại mỗi thời điểm, trong khi trọng số hồi quy xác định mức độ thông tin từ trạng thái trước đó được truyền vào nút hiện tại. Các trọng số này được cập nhật trong quá trình huấn luyện mạng.
Hình 2-3 Mô hình RNN Cấu trúc RNN:
Đầu vào (Input): Mỗi đầu vào tại thời điểm t được biểu diễn bằng một vector x(t).
Trạng thái ẩn (Hidden state): RNN duy trì một trạng thái ẩn tại mỗi thời điểm t, được biểu diễn bằng một vector h(t). Trạng thái ẩn chứa thông tin từ các thời điểm trước đó và được chuyển tiếp qua các thời điểm tiếp theo.
Trọng số: RNN có các trọng số W, U và b, điều chỉnh quá trình tính toán và học của mạng.
Đầu ra (Output): Mỗi đầu ra tại thời điểm t được biểu diễn bằng một vector y(t).
Quá trình tính toán RNN:
Tại thời điểm t, đầu vào x(t) và trạng thái ẩn h(t-1) được kết hợp để tính toán trạng thái ẩn mới h(t) theo công thức: h(t) = f(W * x(t) + U * h(t-1) + b), trong đó f() là một hàm kích hoạt phi tuyến (thường là hàm tanh hoặc hàm sigmoid).
Trạng thái ẩn mới h(t) được sử dụng để tính toán đầu ra y(t) theo công thức:
y(t) = g(V * h(t) + c), trong đó g() là một hàm kích hoạt khác (thường là hàm softmax cho bài toán phân loại).
Quá trình lan truyền ngược (Backpropagation Through Time - BPTT):
RNN sử dụng thuật toán lan truyền ngược để điều chỉnh các trọng số và cập nhật mô hình.
Quá trình BPTT tính toán độ lỗi giữa đầu ra dự đoán y(t) và giá trị thực tế y*(t), sau đó lan truyền lỗi ngược lại qua các thời điểm trước đó.
Các đạo hàm riêng của hàm lỗi được tính để cập nhật trọng số W, U, V và các tham số bias b, c.
Vấn đề phụ thuộc xa (Long-Term Dependencies):
Một thách thức của RNN là khả năng xử lý các phụ thuộc xa trong dữ liệu.
Trong quá trình lan truyền ngược thông thường, đạo hàm có thể giảm mất dần qua các thời điểm, dẫn đến việc quên thông tin quan trọng từ quá khứ.
Để giải quyết vấn đề này, kiến trúc LSTM (Long Short-Term Memory) được phát triển, sử dụng cơ chế cổng để kiểm soát việc truyền thông tin và quên thông tin.
2.1.3.4 Mạng bộ nhớ ngắn dài (Long short term memory - LSTM)
Mạng bộ nhớ dài-ngắn là một dạng đặc biệt của RNN, mô hình có khả năng học được các phụ thuộc xa. LSTM được giới thiệu bởi Hochreiter & Schmidhuber2 năm 1997, và sau đó đã được cải tiến và phổ biến bởi rất nhiều người trong ngành.
2 Tham khảo https://dl.acm.org/doi/10.1162/neco.1997.9.8.1735
Mô hình hoạt động cực kì hiệu quả nên dần đã trở thành một trong những mô hình phổ biến nhất hiện nay trong lĩnh vực xử lý tuần tự dữ liệu. LSTM được thiết kế để tránh được vấn đề phụ thuộc xa (long-term dependency). Một trong những đặc điểm quan trọng của LSTM là khả năng nắm bắt thông tin trong suốt thời gian dài mà không gặp vấn đề gradient biến mất (vanishing gradient) như trong RNN truyền thống. Việc nhớ thông tin trong suốt thời gian dài là đặc tính mặc định của mô hình, chứ ta không cần phải huấn luyện nó để có thể nhớ được. Tức là ngay nội tại của nó đã có thể ghi nhớ được mà không cần bất kì can thiệp nào.
Hình 2-4 Mô hình LSTM
Cấu trúc của LSTM:
Input gate: Nó phát hiện ra giá trị nào từ đầu vào sẽ được sử dụng để sửa đổi bộ nhớ. Hàm Sigmoid quyết định giá trị nào sẽ cho qua 0 hoặc 1. Và hàm tanh đưa ra trọng số cho các giá trị được truyền, quyết định mức độ quan trọng của chúng trong khoảng từ -1 đến 1.
Forget gate: Nó khám phá các chi tiết cần loại bỏ khỏi khối. Một hàm sigmoid quyết định nó. Nó xem xét trạng thái trước đó (ht-1) và đầu vào nội dung (Xt) và xuất ra một số giữa 0 (bỏ qua điều này) và 1 (giữ nguyên điều này) cho mỗi số trong trạng thái ô Ct-1.
Output gate: Đầu vào và bộ nhớ của khối được sử dụng để quyết định đầu ra.
Hàm Sigmoid quyết định giá trị nào cho qua 0 hoặc 1. Và hàm tanh quyết định giá trị nào cho qua 0, 1. Và hàm tanh đưa ra trọng số cho các giá trị được