Đây là Lab 2 trong môn IoT do thầy Minh Lịnh giảng dạy tại Học Viện Bưu Chính Viễn Thông tại TP.HCM. Bài Lab tập trung vào việc tìm hiểu và khám phá mô hình Deep Learning - CNN (Mạng Nơ-ron Tích chập). Model CNN được xây dựng theo mô hình AlexNet (2012).
Note: Mục tiêu của bài lab là giúp sinh viên nắm bắt các khái niệm cơ bản và ứng dụng của mô hình CNN thông qua việc phân tích và khám phá kiến trúc của AlexNet. Sinh viên sẽ được hướng dẫn về cách xây dựng, huấn luyện và đánh giá mô hình để hiểu rõ hơn về cách hoạt động của mạng CNN trong việc xử lý hình ảnh
- Ngôn ngữ lập trình: python 3.10, + Visual studio code, pycharm, thony, ...
- Thư viện sử dụng gồm có: tensorflow, requirements, numpy, ...
- Hệ điều hành: Window Server, Linux (Ubuntu), Windown 10Pro.
- Microsoft Software Removal Tool, Binvis.
- Tìm hiểu: Machine Learning/Deep Learning, IoT/ IioT, AI.
- chuyển đổi từ CPU sang GPU nếu có thể để tăng tốc độ tính toán và xử lý hình ảnh.
data/: Chứa 2 file nén .zip begin và malware.train.py: file train.docs/images: Chứa ảnh.script.py: file script.entropy.py: File tính entroypy.README.md: File này.
- ABSTRACT
- THEORY
- METHODOLOGY
- DATASET
- MODEL MACHINE LEARNING
- EVALUATION AND RESULT
- CONCLUSION
- REFERENCE
Internet of Things (IoT) là một thuật ngữ dùng để chỉ tập hợp các thiết bị kết nối internet rộng rãi, chia sẻ dữ liệu tự động và theo yêu cầu qua mạng mà chúng kết nối. Các loại thiết bị IoT khác nhau có thể cảm nhận và thu thập dữ liệu từ thế giới vật chất như nhiệt độ, và các thiết bị khác có thể hành động dựa trên dữ liệu này để thực hiện các quá trình thay đổi đặc điểm của thế giới vật chất, chẳng hạn như điều chỉnh nhiệt độ trong phòng. Thiết bị IoT đang tham gia nhiều hơn vào các quá trình quan trọng, đòi hỏi các biện pháp an ninh cao cần được chú ý liên tục để hoạt động đúng. Không thể phủ nhận rằng sự có sẵn của 5G sẽ khiến IoT tham gia nhiều hơn vào các lĩnh vực hàng ngày. IoT được sử dụng trong nhiều ứng dụng hỗ trợ các lĩnh vực như nông nghiệp, lưới điện thông minh, thành phố thông minh, nhà thông minh và phương tiện thông minh. Thường có nhiều loại thiết bị IoT khác nhau tham gia vào các ứng dụng này, mỗi loại từ một nhà sản xuất khác nhau. Các nhà phát triển thường mua số lượng lớn thiết bị IoT từ các nhà sản xuất mà bỏ qua thực tế rằng một số trong số đó được thiết kế mà không tính đến an ninh, điều này có thể gây ra một loạt các vấn đề trong các ứng dụng đã phát triển và mạng mà chúng chạy trên. Lý do chính dẫn đến việc bỏ qua an ninh khi sản xuất những thiết bị này là do thiếu tiêu chuẩn an ninh cho các thiết bị IoT hoặc sự thiếu thực thi nó.
- CNN (Convolution Neural Network): phương pháp tích chập.
- RNN (Recurrent Neural Network): Phương pháp hồi quy “tìm hiểu LSTM”.
- DNN (DNN-Deep neural Network): là một mạng neuron nhân tạo (ANN) với nhiều đơn vị lớp ẩn giữa lớp đầu vào và đầu ra.
- ANN: Mạng thần kinh nhân tạo
- ...
- Một mạng thần kinh tích chập là một lớp của mạng thần kinh sâu, áp dụng phổ biến nhất để phân tích hình ảnh trực quan.
- Máy tính coi hình ảnh đầu vào là 1 mảng pixel và nó phụ thuộc vào độ phân giải của hình ảnh. Dựa trên độ phân giải hình ảnh, máy tính sẽ thấy H x W x D (H: Chiều cao, W: Chiều rộng, D: Độ dày). Ví dụ: Hình ảnh là mảng ma trận RGB 6x6x3 (3 ở đây là giá trị RGB).
- Thứ tự raw pixel > edges > shapes > facial > high-level features
Keras là một thư viện open source cho phép xây dựng nhanh chóng một model CNN hoặc RNN, phù hợp với người mới bắt đầu.
- Tiền xử lý dữ liệu
- Dựng model
- Train và ước tính model
Keras cung cấp 2 kiểu xây dựng model là Sequential và function API. Bài này sử dụng Sequential. Sequential là một chồng các lớp đơn giản với một đầu vào và một đầu ra.
- Sequential: Sequential là một chồng các lớp đơn giản với 1 đầu vào và 1 đầu ra ⇒ bài này sử dụng Sequential.
- Function API
Một model Conv2D cơ bản
-
Conv2D
filters: Số nguyên, chiều của không gian đầu ra (nghĩa là số lượng bộ lọc đầu ra trong tích chập).kernel_size: Một số nguyên hoặc danh sách hai số nguyên, chỉ định chiều cao và chiều rộng của kernel.strides: Bước nhảy của kernel (bộ lọc).activation: Chọn hàm kích hoạt phù hợp với công việc của bạn.- relu: Hàm luôn dương.
- leaky relu
- softmax: Chuyển đổi một vectơ các giá trị thành phân phối xác suất.
- sigmoid
- tanh
- linear
input_shape: Hình dạng đầu vào, ví dụshape(*size*, height, width, layer).padding: Thêm các phần tử 0 để làm đệm cách đều nhau ở bên trái/phải hoặc lên/xuống của đầu vào. Khipadding = "same"vàstrides = 1, đầu ra có cùng kích thước với đầu vào.- Transposed convolution hay deconvolution có thể coi là phép toán ngược của convolution.
-
Batch normalization
- Là một kỹ thuật để đào tạo mạng nơ ron sâu, chuẩn hóa các đầu vào thành một layer cho mỗi mini-batch (Mini-batch gradient descent - Dùng một phần dữ liệu trong training set cho mỗi lần thực hiện bước tính đạo hàm). Điều này có tác dụng ổn định quá trình học tập và giảm đáng kể số lượng epoch đào tạo cần thiết để đào tạo mạng sâu.
- Mục đích chính của batch normalization đó là chuẩn hóa dữ liệu ở các layer theo batch về phân phối chuẩn để quá trình gradient descent hội tụ nhanh hơn.
-
Max Pooling (MaxPool2D) ⇒ còn có MaxPooling2D, AvergaPooling1D, 2D ( lấy max , trung bình) với từng size.
pool_size: kích thước ma trận để lấy max hay averagestrides: tương tựpaddingdata_format
-
Flatten: là một loại hoạt động reshape cụ thể trong đó tất cả các axes được làm phẳng ( smooshed) hoặc ghép lại (squashed ) với nhau.
-
Dense Layer này cũng như một layer neural network bình thường, với các tham số:
-
Units: Số chiều output, như số class sau khi train.
-
Activation: Chọn activation đơn giản với sigmoid thì output có 1 class.
-
Use_bias: Có sử dụng bias hay không (True or False).
-
Dropout
- Kỹ thuật dropout là việc bỏ qua một vài unit trong suốt quá trình train trong mô hình, các unit bị bỏ qua được lựa chọn ngẫu nhiên.
- Tránh tình trạng overfitting (học vẹt), node nào chưa rõ thì có thể bỏ qua.
- Hệ số dropout tốt nhất là 0.2 và 0.5.
- Dropout đòi hỏi phải gấp đôi quá trình huấn luyện để đạt được sự hội tụ, tuy nhiên, thời gian huấn luyện cho mỗi epoch sẽ ít hơn.
Model.summary()Model.compile(): ở hàm này chúng ta sử dụng để training models như thuật toán train qua optimizer như Adam, SGD, RMSprop,..Learning_rate : dạng float , tốc độc học, chọn phù hợp để hàm số hội tụ nhanh.
Model.fit()Epochs: một epoch được tính khi chúng ta đưa tất cả tập train vào mạng NN. ⇒ Ví dụ, bạn có 10 triệu bức hình trong tập train, bạn cho toàn bộ số hình đó là input của mô hình 3 lần, suy ra bạn đã train được 3 epoch.Batch Size: thể hiện số lượng mẫu mà Mini-batch GD sử dụng cho mỗi lần cập nhật trọng số . ⇒ ví dụ: chọn batch size =32, nghĩa là 1 lần lặp ta sẽ cho ngẫu nhiên 32 bức nhìn chó hoặc mèo chạy lan truyền tiến trong mạng neural network. tiếp theo bạn quăng tiếp 32 hình ngẫu nhiên, không lặp với các hình trước đó, vào mạng, quăng đến khi nào không còn hình nào có thể quăng vào nữa -> bạn hoàn thành 1 epoch.Iteration: Iterations là số lượng batchs cần để hoàn thành 1 epoch ⇒ ví dụ: có 20.000 tấm hình, có batch size là 500 thì có 40 (iteration lặp cho 1 epoch)Ví dụ: Giả sử ta có tập huấn luyện gồm 55.000 hình ảnh chọn batch-size là 55 images có nghĩa là mỗi lần cập nhật trọng số, ta dùng 55 images. Lúc đó ta mất 55.000/55 = 1000 iterations (số lần lặp) để duyệt qua hết tập huấn luyện (hoàn thành 1 epochs). Có nghĩa là khi dữ liệu quá lớn, chúng ta không thể đưa cả tập data vào train được, ta phải chia nhỏ data ra thành nhiều batch nhỏ hơn.
Là giá trị của một điểm nằm trên ma trận khối ở mỗi tầng của mạng CNN.
- Tiền xử lý
- Loss_function:
- mean_squared_error: Thường dùng trong regression tính theo eculid.
- mean_absolute_error: Để tính giá trị tuyệt đối.
- binary_crossentropy: Dùng cho classifier 2 class.
- categorical_crossentropy: Dùng cho classifier nhiều class.
- Optimizers
- SGD: Stochastic Gradient Descent optimizer.
- RMSprop.
- Adam.
- Callbacks: Khi models chúng ta lớn khi training thì gặp lỗi ta muốn lưu lại models để chạy lại thì ta sử dụng callbacks.
- ModelsCheckpoint: Lưu lại model sau mỗi epoch.
- EarlyStopping: Stop training khi models training không hiệu quả (Loss không có dấu hiệu giảm).
- ReduceLROnPlateau: Giảm learning mỗi khi metrics không cải thiện.
-
filters: Số lượng bộ lọc. -
kernel_size: Kích thước của kernel. -
strides: Bước nhảy của kernel. -
activation: Hàm kích hoạt. -
input_shape: Hình dạng đầu vào. -
padding: Đệm (padding).
- Lớp chuẩn hóa batch.
pool_size: Kích thước của pool.strides: Bước nhảy của pool.
- Lớp làm phẳng (Flatten).
- Lớp Dense.
- Lớp Dropout.
- Ưu điểm:
- Nhược điểm:
- Tập dữ liệu số lượng: 11,273 mẫu mã độc IoT học Malware và 3,697 mẫu lành tính.
- Các mẫu mã độc này được đánh nhãn.
| Family Name | Count |
|---|---|
| Mirai | 6,793 |
| Gafgyt | 4,427 |
| Other | 53 |
| Benign | 3,697 |
| Total | 14,970 |
Note: - Tỷ lệ phân chia quá trình training 2 phần: Huấn luyện (80%), tập kiểm thử (20%)
-
Đưa dữ liệu về dạng hình ảnh
-
Tìm hiểu về: Entropy, các giá trị màu của entropy được chia ra làm 5 nhóm: • Có trật tự (Ordered) • Thấp (Low) • Trung bình (Medium) • High (Cao) • Ngẫu nhiên (Random)
-
Tính toán entropy của một tệp nhị phân: X = 0, …, 255 đại diện cho một byte. Đầu tiên tính toán chuỗi entropy của một chuỗi byte. Entropy cho biết mức độ mà dữ liệu bị xáo trộn. (Shannon)
-
Trong đó:
- x là cửa sổ trượt,
- xi là số lần xuất hiện của i trong x
- P là tỉ lệ (tức là |x_i |/|x| ).
- Trong bài nghiên cứu này, các mẫu mã độc sẽ được đặt kích thước của cửa sổ trượt là 32x32 và cơ số là 10.
-
import os import multiprocessing import lib.binvis as bv test_samples = os.listdir('./sample/test') malware_samples = os.listdir('./sample/IoT/') benign_samples = os.listdir('./sample/IoT_benign') cwd = os.getcwd() out_path = '.\\out' test_path = '.\\test' def calc_sample_entropy(sample): print('[+] Calculating entropy for {}'.format(sample)) # bv.binvis(cwd + '\\sample\\IoT\\' + sample, output_path=out_path) bv.binvis(cwd + '\\sample\\IoT_benign\\' + sample, output_path=out_path + '\\benign\\') # bv.binvis(cwd + '\\sample\\test\\' + sample, output_path=test_path) return def main(): # new_malware_samples = malware_samples.copy() new_benign_samples = benign_samples.copy() new_test_sample = test_samples.copy() print("[+] Benign sample size {}".format(len(new_benign_samples))) # for sample in new_malware_samples: # if os.path.isfile(out_path + sample + '.png'): # # print("[!] Sample {} already calculated skipping".format(sample)) # new_malware_samples.remove(sample) count = 0 for sample in new_benign_samples: if os.path.isfile(out_path + '\\benign\\' + sample + '.png'): # print("[!] Sample {} already calculated skipping".format(sample)) count += 1 new_benign_samples.remove(sample) print("[!] Skipping {} samples".format(count)) # for sample in new_test_sample: # if os.path.isfile(test_path + sample + '.png'): # # print("[!] Sample {} already calculated skipping".format(sample)) # new_test_sample.remove(sample) # with multiprocessing.Pool(5) as p: # p.map(calc_sample_entropy, new_benign_samples) if **name** == "**main**": main()
- Chuyển đổi dải màu sang hình ảnh

- parameter map = square, size (của ảnh) = 224, color = entropy.
- Áp dụng đường cong Hilbert để biểu diễn theo dạng hình ảnh của tệp nhị phân busybox

- Lớp Convolutional
- Lớp fully connected
- Lớp Pooling: có 2 lớp đặc trưng là lớp pooling cục bộ và lớp pooling toàn cục
Note: Lưu ý: Cách chọn tham số cho CNN Số các convolution layer: càng nhiều các convolution layer thì performance càng được cải thiện. Sau khoảng 3 hoặc 4 layer, các tác động được giảm một cách đáng kể Filter size: thường filter theo size 5×5 hoặc 3×3 Pooling size: thường là 2×2 hoặc 4×4 cho ảnh đầu vào lớn Cách cuối cùng là thực hiện nhiều lần việc train test để chọn ra được param tốt nhất.
• LeNet (1998) • AlexNet (2012) • OverFeat (2013) • VGGNet (2014) • GoogleNet (2014) • ResNet (2015)
- Chọn model này AlexNet (2012) vì ...
from tensorflow import keras
def create_model(input_shape):
model = keras.models.Sequential([
# Alex Net (2012)
keras.layers.Conv2D(filters=64, kernel_size=(1, 1), strides=(2, 2), input_shape=input_shape, activation='relu', padding='same'),
keras.layers.MaxPool2D(pool_size=(2, 2)),
keras.layers.Conv2D(filters=128, kernel_size=(1, 1), strides=(1, 1), activation='relu', padding='same'),
keras.layers.MaxPool2D(pool_size=(2, 2)),
keras.layers.Conv2D(filters=128, kernel_size=(1, 1), strides=(1, 1), activation='relu', padding='same'),
keras.layers.Flatten(), # 64*64*8
keras.layers.Dense(1024, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(2, activation='softmax')
])
return model- Kết quả phát hiện mã độc IoT bằng hình ảnh entropy
| Phương pháp | Các thuật toán | Phương pháp trích xuất đặc trưng | Độ chính xác (Accuracy %) |
|---|---|---|---|
| Hình ảnh entropy | CNN | Entropy | 97.3% |
- Kết luận: Trong bài nghiên cứu này, Phương pháp chuyển tệp nhị phân sang hình ảnh bằng phương pháp entropy, nghiên cứu và phân tích các thành phần trong mạng CNN đạt hiệu quả.
-
[1] Link bài báo khoa học ứng theo yêu cầu của thầy Minh Lịnh: Lightweight IoT Malware Detection Solution Using CNN Classification
-
[2] Code mẫu: GitHub Repository
Note: Các khái niệm
- [3] TensorFlow: Trang hướng dẫn của TensorFlow
- [4] Dense: YouTube Video
- [5] CNN là gì?: Bài viết từ Vietnix
- [6] Bài 6: Convolutional Neural Network: Bài viết từ Nttuan8.com
- [7] Thuật toán Convolutional Neural Network (CNN - Phần 2) - Python: YouTube Video
- [8] Blog - Deep learning: Nttuan8.com
- [9] TensorFlow Document: API Documentation
- [10] Cross-Entropy: Machine Learning Mastery
- [11] Dropout: Pham Duy Tung
- [12] Tại sao mạng tích chập lại hoạt động hiệu quả?: Viblo
- [13] Convolution 2D: tf.keras.layers.Conv2D: API Documentation
- [14] Max Pooling 2D: MaxPool2D: API Documentation
- [15] Các layers quan trọng trong deep learning: Blog Post
- [16] Lý do Dropout 0.5?: Nghiên cứu NeurIPS
- [17] Cài đặt Library Keras, TensorFlow: Hướng dẫn cài đặt
- [18] Thiết lập GPU thay CPU cho TensorFlow: Hướng dẫn cài đặt
- [19] Tìm hiểu về class activation mapping - Tại sao các mạng thần kinh lại đưa ra quyết định như vậy?: Viblo
- [20] Understanding and Calculating the number of Parameters in Convolution Neural Networks (CNNs): Blog Post
- [21] How Do Convolutional Layers Work in Deep Learning Neural Networks?: Blog Post
- [22] Inception V4: GitHub Repository
- ...



