Tải bản đầy đủ (.pdf) (37 trang)

Tìm hiểu CAPTCHA và nhận diện CAPTCHA sử dụng deep learning để chỉ ra các lỗ hỏng trong CAPTCHA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.87 MB, 37 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CƠNG NGHỆ THƠNG TIN
CHUN NGÀNH: AN TỒN THƠNG TIN
---🙞🕮🙜---

BÁO CÁO ĐỒ ÁN CHUYÊN NGÀNH
ĐỀ TÀI: TÌM HIỂU CAPTCHA VÀ NHẬN DIỆN CAPTCHA SỬ DỤNG DEEP
LEARNING ĐỂ CHỈ RA CÁC LỖ HỔNG TRONG CAPTCHA
Giảng viên hướng dẫn:
Th.S Đinh Nguyễn Trọng Nghĩa
Sinh viên thực hiện:
Đặng Hoàng Nhu - 2033180162
Nguyễn Phạm Hoài Thanh - 2033181067

Tp. Hồ Chí Minh, Ngày… Tháng… Năm

1


LỜI MỞ ĐẦU
Cơng nghệ thơng tin phát triển có những bước tiến vượt bậc hầu hết các doanh
nghiệp và cá nhân đã dần đưa công nghệ thông tin vào phục vụ cho cơng việc của
mình với những phần mềm hệ thống hoặc ứng dụng phù hợp, nhưng đối với những
doanh nghiệp và cá nhân khơng có đủ điều kiện về kinh tế thì việc lựa chọn các cơng
cụ, phần mềm thương mại là khơng khả thi vì vậy phần mềm mã nguồn mở là một
sự lựa chọn đúng đắn cho các doanh nghiệp và cá nhân.
An ninh thơng tin nói chung và an ninh mạng nói riêng đang là vấn đề được quan
tâm không chỉ ở Việt Nam mà trên tồn thế giới. Cùng với sự phát triển nhanh chóng
của mạng Internet, việc đảm bảo an ninh cho các hệ thống thông tin càng trở nên cấp
thiết hơn bao giờ hết.


Trong lĩnh vực an ninh mạng, xác thực để giảm tấn cơng DDoS, chống spam cho
các mạng máy tính là một đề tài hay, thu hút được sự chú ý của nhiều nhà nghiên cứu
với nhiều hướng nghiên cứu khác nhau. Vì vậy nhóm em lựa chọn đề tài “Tìm hiểu
CAPTCHA và nhận diện CAPTCHA sử dụng Deep learning để chỉ ra các lỗ
hỏng trong CAPTCHA”. Với mong muốn tìm hiểu cũng như triển khai deep
learning để phá vỡ captcha qua đó cho thấy được tầm quan trọng của hệ thống xác
thực captcha và cũng như sự lỗi thời kém an toàn của captcha truyền thống.

2


LỜI CẢM ƠN
Trong lời đầu tiên của báo cáo đồ án: “Tìm hiểu CAPTCHA và nhận diện
CAPTCHA sử dụng Deep learning để chỉ ra các lỗ hỏng trong CAPTCHA” này,
nhóm em muốn gửi những lời cảm ơn và biết ơn chân thành nhất của mình tới tất cả
những người đã hỗ trợ, giúp đỡ em về kiến thức và tinh thần trong quá trình thực
hiện đồ án
Trước hết, em xin chân thành cảm ơn thầy giáo Ths. Đinh Nguyễn Trọng Nghĩa,
giảng viên Khoa Công Nghệ Thông Tin, Trường Đại Học Công Nghiệp Thực Phẩm
TPHCM, người đã trực tiếp hướng dẫn, nhận xét, giúp đỡ em trong suốt quá trình
thực hiện đồ án.
Xin chân thành cảm ơn ban giám hiệu nhà trường, các thầy cô trong Khoa Công
Nghệ Thông Tin và các phòng ban nhà trường đã tạo điều kiện tốt nhất cho nhóm em
cũng như các bạn khác trong suốt thời gian học tập.
Cuối cùng nhóm em xin gửi lời cảm ơn đến gia đình, bạn bè, người thân đã giúp
đỡ động viên chúng em rất nhiều trong quá trình học tập.
Mặc dù chúng em đã hết sức cố gắng để hồn thiện báo cáo đồ án song khả năng
cịn hạn chế nên bài báo cáo vẫn còn thiếu nhiều sai sót. Vì vậy chúng em rất mong
được sự đóng góp chân tình của các thầy cơ và bạn bè.
TPHCM, ngày 15 tháng 6 năm 2021

Sinh viên
Đặng Hoàng Nhu
Nguyễn Phạm Hoài Thanh

3


MỤC LỤC

LỜI MỞ ĐẦU ................................................................................................................ 2
LỜI CẢM ƠN ................................................................................................................. 3
MỤC LỤC BẢNG .......................................................................................................... 6
MỤC LỤC HÌNH ........................................................................................................... 7
Chương 1. Tổng quan về Captcha .................................................................................. 8
1.1 Captcha là gì? ........................................................................................................ 8
1.2 Đặc điểm của Captcha .......................................................................................... 8
1.3 Nguồn gốc của Captcha ........................................................................................ 8
1.4 Nguyên tắc hoạt động của Captcha....................................................................... 9
1.5 Ứng dụng của Captcha ........................................................................................ 10
Chương 2: Tổng quan về Deep Learning và CNN ....................................................... 11
2.1 Deep Learning là gì? ........................................................................................... 11
2.2 Lịch sử ra đời của Deep Learning ....................................................................... 12
2.3 CNN là gì? .......................................................................................................... 18
2.4 Ứng dụng của Deep Learning. ............................................................................ 21
Chương 3: Tổng quan về bài toán phá mã Captcha ..................................................... 22
3.1 Dữ liệu đầu vào ................................................................................................... 22
3.2 Sơ lược mơ hình .................................................................................................. 22
3.2.1 Mục tiêu của bài tốn

22


3.2.2 Bố trí thực nghiệm

22

3.2.3 Bộ cơng cụ được sử dụng.

22

3.2.4 Xây dựng mơ hình CNN.

24

Chương 4: Kết quả của bài toán ................................................................................... 29
4.1 Số lần duyệt qua hết số lượng mẫu trong tập huấn luyện. .................................. 29
4.2 Thống kê tỷ lệ sai sót cho mỗi lần thực nghiệm ................................................. 30
4.3 Một số dự đốn về captcha của chương trình: .................................................... 31
4.3.1 Một số hình ảnh chương trình dự đốn đúng:

31

4.3.2 Một số hình ảnh chương trình dự đốn sai:

33

4.3.3 Một số ảnh bị lỗi font khi load vẫn cho kết quả đúng:

34

Chương 5: Những lỗ hỏng của Captcha hiện nay......................................................... 35

4


LỜI KẾT ....................................................................................................................... 36
Tài liệu tham khảo: ....................................................................................................... 37

5


MỤC LỤC BẢNG
Bảng 1. Số lần duyệt và tỉ lệ. ........................................................................................ 29
Bảng 2. Thống kê tỷ lệ sai sót ...................................................................................... 30

6


MỤC LỤC HÌNH
Hình 1. Ngun tắc hoạt động của Captcha. .................................................................. 9
Hình 2. Ứng dụng của Captcha. ................................................................................... 10
Hình 3. Mơ hình Mạng Neural tích phức hợp .............................................................. 18
Hình 4. Ứng dụng của Deep Learning.......................................................................... 21
Hình 5. Sơ đồ khởi tạo Dataset. .................................................................................... 24
Hình 6. Dữ liệu đầu vào................................................................................................ 25
Hình 7. Sơ đồ đơn giản hóa. ......................................................................................... 25
Hình 8. Sơ đồ đơn giản hóa học sâu 1 ký tự. ................................................................ 26
Hình 9. Mơ hình CNN chi tiết ...................................................................................... 27
Hình 10. Kết quả chạy chương trình. ........................................................................... 29
Hình 11. Ảnh dự đốn đúng. ........................................................................................ 31
Hình 12. Một số hình ảnh dự đốn đúng. ..................................................................... 32
Hình 13. Một số hình ảnh dự đốn sai. ......................................................................... 33

Hình 14. Một số ảnh captcha lỗi font khi load cho dự doán đúng. .............................. 34

7


Chương 1. Tổng quan về Captcha
1.1 Captcha là gì?
Captcha phiên âm là ˈkæptʃə, viết tắc của từ Completely Automated Public Turing
test to tell Computer and Human Apart (Phép kiểm tra Turing công khai tự động để
nhận diện Người và Máy tính). Là một dạng phép kiểm thử hỏi đáp để xác định người
dùng là máy hay con người. Đây là q trình mà máy chủ u cầu người dùng phải
hồn tất một bài kiểm tra mà chỉ có con người có thể hồn tất được u cầu. Vì thế
bất cứ những ai không thể giải được sẽ không được xem là con người và ngược lại.
Thuật ngữ CAPTCHA được 3 giáo sư thuộc Đại học Carnegie Mellon là Luis von
Ahn, Nicholas J.Hopper và Manuel Blum cùng John Langford thuộc IBM đề xuất cái
tên vào năm 2000.
Loại CAPTCHA mà là một hình ảnh bao gồm các chữ cái méo mó, dị dạng là loại
CAPTCHA được sử dụng phổ biến nhất hiện nay. Yêu cầu làm sao cho người dùng
phải nhập đúng ý nghĩa với các chữ cái kia.
1.2 Đặc điểm của Captcha
- Hệ thống CAPTCHA yêu cầu thử thách phải được tạo ra tự động và phải có những
đặc điểm nhất định.
- Hệ thống CAPTCHA phải đặt ra những thử thách mà thơng thường thì mọi người
đều có thể hiểu và giải được nó.
- Phải khiến máy tính khơng thể giải được chính xác.
- Tuy hộp kiểm tra dạng “Tơi khơng là robot” có thể phân biệt được người và máy
nhưng khơng được xem là CAPTCHA do nó khơng phải mất q cơng q của
những kẻ tấn cơng để phá nó.
1.3 Nguồn gốc của Captcha
Vào năm 1950, khi Alan Turing, cha đẻ của ngành khoa học máy tính mơ tả lại

phép thử Turing nổi tiếng của ơng. Sự khó khăn tiềm tàng trong việc phân biệt giữa
người và máy tính giả danh đã được ông đề ra. Đây là bước đệm để dẫn đến các bàn
luận và thử nghiệm trong việc phân biệt người và máy.
8


Trong bản thảo của Moni Naor từ Viện khoa học Weizmann vào năm 1996, ông
cũng đề cập về vấn đề này với mục đích là kiểm sốt các dịch vụ truy cập web, được
mang tên “Verification of a human in the loop or Identification via the Turing Test”
(Lĩnh vực xác minh con người, hay Sự định danh thông qua Phép thử Turing).
Người ta cho rằng vào năm 1997, Andrei Broder và đồng nghiệp tại AltaVista đã
phát triển những CAPTCHA nguyên thủy nhằm ngăn ngừa việc các con bot máy tình
thêm URL vào cơng cụ tìm kiếm của họ.
Nhóm Andrei Broder khi phát triển CAPTCHA đã mơ phỏng những tình huống
mà OCR-Optical Character Recognition (Nhận dạng ký tự quang học) sẽ cho kết quả
sai nhằm chống lại chúng. Đây được coi là bước khởi đầu cho CAPTCHA hiện tại.
Năm 2000, Luis von Ahn và Manuel Blum phát triển và công khai khái niệm
CAPTCHA, những chương trình giúp phân biệt con người và máy tính. Đã có thêm
những mẫu CAPTCHA khác được thêm vào. Yahoo! cũng đã sử dụng những loại
CAPTCHA này.
1.4 Nguyên tắc hoạt động của Captcha

Hình 1. Nguyên tắc hoạt động của Captcha.
9


Nguyên tắc hoạt động của CAPTCHA khá cơ bản. CAPTCHA dựa trên những
quy tắc của con người mà máy tính khơng thể hiểu như về tiếng lóng và ngơn ngữ.
Từ đó CAPTCHA có thể phân biệt chính xác người và máy tính. Tránh những
virus, worm hay trojan dùng để tấn công vào hệ thống.

Các xâm nhập trái phép cũng bị chặn lại ở bước xác minh CAPTCHA. Đảm bảo
tính an tồn của hệ thống.
1.5 Ứng dụng của Captcha

Hình 2. Ứng dụng của Captcha.
- Các ứng dụng CAPTCHA thường thấy trên website bao gồm:


Chống spam .



Xác nhận tài khoản người dùng khi đăng ký.



Chặn các cuộc tấn công Từ chối dịch vụ như DDOS và DOS.



Đảm bảo an tồn của thơng tin và dữ liệu.

- CAPTCHA cũng giúp hạn chế quá tải khi một dịch vụ được sử dụng bắt đầu vượt
quá giới hạn.

10


Chương 2: Tổng quan về Deep Learning và CNN
2.1 Deep Learning là gì?

Deep Learning (hay cịn được gọi là Deep Structured Learning) là một nhánh của
Machine Learning, được mở rộng hơn dựa trên mạng nhân tạo với phương pháp
Representation Learning. Q trình xử lý của Deep Learning có thể được giám sát,
bán giám sát hoặc khơng có sự giám sát.
Các kiến trúc của Deep Learning bao gồm: Deep Neural Networks, Deep Belief
Networks, Graph Neural Networks, Recurrent Neural Networks và Convolutional
Neural Networks. Chúng đã được áp dụng cho các lĩnh vực bao gồm thị giác máy
tính, nhận dạng giọng nói, xử lý ngôn ngữ tự nhiên, dịch máy, tin sinh học, thiết kế
thuốc, y tế phân tích hình ảnh, kiểm tra vật liệu và các chương trình trị chơi dạng
Board - game, trong đó chúng đã có những kết quả có thể so sánh với con người,
thậm chí trong một số trường hợp là vượt qua.
Từ "Deep" trong Deep Learning đề cập đến việc sử dụng nhiều lớp mạng. Nghiên
cứu ban đầu cho thấy rằng một perceptron tuyến tính khơng thể là một bộ phân loại
phổ quát, nhưng một mạng có chức năng kích hoạt phi đơn thức với một lớp ẩn có
chiều rộng khơng giới hạn thì có thể. Deep Learning là một biến thể hiện đại của
Machine Learning có liên quan đến số lượng lớp có kích thước khơng giới hạn, cho
phép ứng dụng thực tế và triển khai được tối ưu hóa, trong khi vẫn giữ được tính phổ
quát lý thuyết trong điều kiện nhẹ. Trong Deep Learning, các lớp cũng được phép
không đồng nhất và sai lệch nhiều so với các mơ hình kết nối được thơng báo về mặt
sinh học, vì lợi ích của hiệu quả, khả năng đào tạo và dễ hiểu, kể từ phần "có cấu
trúc".
Các thuật tốn của Deep Learning dựa trên các đại diện phân phối. Giả định tiềm
ẩn đằng sau các đại diện phân phối là các dữ liệu được quan sát là được tạo ra bởi sự
tương tác của các yếu tố được tổ chức theo lớp. Deep Learning thêm giả định rằng
các lớp của các yếu tố này tương ứng với các mức độ trừu tượng hay theo thành phần.
Các con số khác nhau của các lớp và kích thước của lớp có thể được sử dụng để quy
định các lượng trừu tượng khác.

11



2.2 Lịch sử ra đời của Deep Learning
Một số nguồn chỉ ra rằng Frank Rosenblatt đã phát triển và khám phá tất cả các
thành phần cơ bản của hệ thống học sâu ngày nay. Ơng đã mơ tả nó trong cuốn sách
"Nguyên lý của động lực học thần kinh: Perceptron và lý thuyết về cơ chế não", được
xuất bản bởi Phịng thí nghiệm hàng khơng Cornell, Inc., Đại học Cornell vào năm
1962.
Thuật toán học tập tổng quát đầu tiên cho các perceptron được giám sát, sâu,
chuyển tiếp, nhiều lớp được Alexey Ivakhnenko và Lapa xuất bản vào năm 1967.
Một bài báo năm 1971 đã mô tả một mạng sâu với tám lớp được đào tạo bằng phương
pháp xử lý dữ liệu theo nhóm. Các kiến trúc làm việc học sâu khác, đặc biệt là những
kiến trúc được xây dựng cho thị giác máy tính, bắt đầu với Neocognitron được
Kunihiko Fukushima giới thiệu vào năm 1980.
Thuật ngữ Deep Learning được Rina Dechter giới thiệu với cộng đồng học máy
vào năm 1986, và đến các mạng neural nhân tạo bởi Igor Aizenberg và các đồng
nghiệp vào năm 2000, trong bối cảnh các neural ngưỡng Boolean.
Năm 1989, Yann LeCun et al. đã áp dụng thuật toán lan truyền ngược tiêu chuẩn,
đã được coi là chế độ phân biệt ngược tự động kể từ năm 1970, cho một mạng neural
sâu với mục đích nhận dạng mã ZIP Postal Code viết tay trên thư. Trong khi thuật
toán hoạt động, việc đào tạo cần 3 ngày.
Đến năm 1991, các hệ thống như vậy đã được sử dụng để nhận dạng các chữ số
viết tay 2D riêng biệt, trong khi việc nhận dạng các đối tượng 3D được thực hiện
bằng cách kết hợp các hình ảnh 2D với một mơ hình đối tượng 3D được làm thủ
cơng. Weng và cộng sự. cho rằng não người không sử dụng mơ hình vật thể 3D
ngun khối và vào năm 1992, họ đã công bố Cresceptron, một phương pháp để thực
hiện nhận dạng vật thể 3D trong các cảnh lộn xộn. Bởi vì nó trực tiếp sử dụng hình
ảnh tự nhiên, Cresceptron bắt đầu bắt đầu học trực quan có mục đích chung cho thế
giới 3D tự nhiên. Crestron là một tầng của các lớp tương tự như Neocognitron. Nhưng
trong khi Neocognitron yêu cầu một lập trình viên con người hợp nhất các tính năng
bằng tay, thì Cresceptron đã học được một số tính năng mở trong mỗi lớp mà khơng

cần giám sát, trong đó mỗi tính năng được biểu diễn bằng một nhân chập. Cresceptron
đã phân đoạn từng đối tượng đã học từ một cảnh lộn xộn thông qua phân tích ngược
12


thông qua mạng. Tổng hợp tối đa, hiện thường được áp dụng bởi các mạng thần kinh
sâu (ví dụ: thử nghiệm ImageNet), lần đầu tiên được sử dụng trong Cresceptron để
giảm độ phân giải vị trí theo hệ số (2x2) xuống 1 thơng qua tầng để tổng qt hóa tốt
hơn.
Năm 1994, André de Carvalho, cùng với Mike Fairhurst và David Bisset, đã công
bố kết quả thử nghiệm của mạng neural boolean nhiều lớp, cịn được gọi là mạng
neural khơng trọng số, bao gồm module mạng neural khai thác tính năng tự tổ chức
3 lớp tiếp theo là module mạng neural phân loại nhiều lớp (GSN - Generative
Stochastic Networks), được đào tạo độc lập. Mỗi lớp trong module trích xuất tính
năng trích xuất các tính năng với độ phức tạp ngày càng tăng liên quan đến lớp trước
đó.
Năm 1995, Brendan Frey đã chứng minh rằng có thể đào tạo (trong hai ngày) một
mạng chứa 6 lớp được kết nối đầy đủ và hàng trăm đơn vị ẩn bằng cách sử dụng thuật
toán thức-ngủ, được đồng phát triển với Peter Dayan và Hinton. Nhiều yếu tố góp
phần vào tốc độ chậm, bao gồm cả vấn đề độ dốc biến mất được phân tích vào năm
1991 bởi Sepp Hochreiter.
Kể từ năm 1997, Sven Behnke đã mở rộng phương pháp tiếp cận tích hợp phân
cấp nguồn cấp dữ liệu trong Kim tự tháp trừu tượng thần kinh bằng các kết nối bên
và phía sau để kết hợp linh hoạt ngữ cảnh vào các quyết định và giải quyết lặp đi lặp
lại những mơ hồ cục bộ.
Các mơ hình đơn giản hơn sử dụng các tính năng thủ cơng dành riêng cho nhiệm
vụ như bộ lọc Gabor và máy vector hỗ trợ (SVM - Support vector machine) là lựa
chọn phổ biến trong những năm 1990 và 2000, do chi phí tính tốn của mạng neural
nhân tạo (Artificial Neural Network - ANN) và sự thiếu hiểu biết về cách các dây
dẫn của bộ não mạng lưới sinh học của nó.

Cả học tập nơng và sâu (ví dụ, lưới lặp lại) về ANN đã được khám phá trong nhiều
năm. Các phương pháp này không bao giờ vượt trội hơn công nghệ hỗn hợp Gaussian
thủ công nội bộ khơng đồng nhất. Mơ hình Markov ẩn Generalized Method of
Moments - Hidden Markov Model (GMM-HMM) dựa trên các mơ hình tổng quát
của giọng nói được huấn luyện phân biệt. Những khó khăn chính đã được phân tích,
bao gồm sự giảm dần độ dốc và cấu trúc tương quan thời gian yếu trong các mơ hình
13


tiên đốn thần kinh. Những khó khăn khác là thiếu dữ liệu đào tạo và khả năng tính
tốn hạn chế.
Hầu hết các nhà nghiên cứu nhận dạng giọng nói đã rời xa mạng lưới thần kinh để
theo đuổi mơ hình tổng hợp. Một ngoại lệ là tại SRI International vào cuối những
năm 1990. Được tài trợ bởi NSA và DARPA của chính phủ Hoa Kỳ, SRI đã nghiên
cứu các mạng thần kinh sâu trong nhận dạng giọng nói và người nói. Nhóm nhận
dạng người nói do Larry Heck dẫn đầu đã báo cáo thành công đáng kể với mạng
neural sâu trong xử lý giọng nói trong đánh giá Nhận dạng người nói của Viện Tiêu
chuẩn và Cơng nghệ Quốc gia năm 1998. Mạng neural sâu SRI sau đó được triển
khai trong Nuance Verifier, đại diện cho ứng dụng công nghiệp lớn đầu tiên của học
sâu.
Nguyên tắc nâng cao các tính năng "thơ" so với tối ưu hóa thủ cơng lần đầu tiên
được khám phá thành công trong kiến trúc của bộ mã tự động sâu trên biểu đồ quang
phổ "thô" hoặc các tính năng của ngân hàng bộ lọc tuyến tính vào cuối những năm
1990, cho thấy tính ưu việt của nó so với Mel. Các tính năng Cepstral chứa các giai
đoạn biến đổi cố định từ quang phổ. Các tính năng thơ của giọng nói, dạng sóng, sau
này đã tạo ra kết quả tuyệt vời ở quy mô lớn hơn.
Nhiều khía cạnh của nhận dạng giọng nói đã được thực hiện bởi một phương pháp
học sâu được gọi là trí nhớ ngắn hạn dài (Long Short Term Memory - LSTM), một
mạng lưới thần kinh lặp lại được xuất bản bởi Hochreiter và Schmidhuber vào năm
1997. LSTM RNN (Long Short Term Memory Recurrent Neural Network) tránh

được vấn đề độ dốc biến mất và có thể học các nhiệm vụ "Học rất sâu" yêu cầu ký
ức về các sự kiện đã xảy ra hàng nghìn bước thời gian rời rạc trước đó, điều này rất
quan trọng đối với bài phát biểu. Năm 2003, LSTM bắt đầu trở nên cạnh tranh với
các trình nhận dạng giọng nói truyền thống trong một số nhiệm vụ. Sau đó, nó được
kết hợp với phân loại thời gian kết nối (Connection Time Classification - CTC) trong
các ngăn xếp LSTM RNN. Vào năm 2015, tính năng nhận dạng giọng nói của Google
được báo cáo đã trải qua một bước nhảy vọt về hiệu suất 49% thông qua LSTM do
CTC đào tạo, mà họ cung cấp thông qua Tìm kiếm bằng giọng nói của Google.
Năm 2006, các ấn phẩm của Geoff Hinton, Ruslan Salakhutdinov, Osindero và
Teh đã chỉ ra cách một mạng neural truyền thẳng nhiều lớp có thể được đào tạo trước
14


một cách hiệu quả từng lớp một, lần lượt xử lý từng lớp như một máy Boltzmann hạn
chế không được giám sát, sau đó tinh chỉnh nó bằng cách sử dụng nhân giống ngược
có giám sát. Các bài báo đề cập đến việc học tập cho các mạng lưới niềm tin sâu sắc.
Học sâu là một phần của các hệ thống hiện đại trong nhiều lĩnh vực khác nhau,
đặc biệt là thị giác máy tính và nhận dạng giọng nói tự động (Automatic Speech
Recognition - ASR). Kết quả trên các bộ đánh giá thường được sử dụng như TIMIT
(ASR) và MNIST - Modified National Institute of Standards and Technology
database (phân loại hình ảnh), cũng như một loạt các nhiệm vụ nhận dạng giọng nói
từ vựng lớn đã được cải thiện đều đặn. Mạng neural chuyển đổi (CNN) đã được thay
thế cho ASR bởi CTC cho LSTM. Nhưng thành công hơn trong thị giác máy tính.
Tác động của học sâu trong ngành bắt đầu vào đầu những năm 2000, khi CNN đã
xử lý khoảng 10% đến 20% tổng số séc được viết ở Mỹ, theo Yann LeCun. Các ứng
dụng công nghiệp của học sâu vào nhận dạng giọng nói quy mơ lớn bắt đầu vào
khoảng năm 2010.
Hội thảo Neural Information Processing Systems (NIPS) năm 2009 về Học sâu để
nhận dạng giọng nói được thúc đẩy bởi những hạn chế của các mơ hình phát sinh sâu
của giọng nói và khả năng cung cấp phần cứng có khả năng hơn và tập dữ liệu quy

mô lớn mà mạng thần kinh sâu (Deep Neural Network - DNN) có thể trở nên thực
tế. Người ta tin rằng các DNN trước khi đào tạo sử dụng các mơ hình tổng hợp của
lưới niềm tin sâu sắc (Deep Belief Network - DBN) sẽ khắc phục được những khó
khăn chính của lưới thần kinh. Tuy nhiên, người ta phát hiện ra rằng việc thay thế
đào tạo trước bằng một lượng lớn dữ liệu đào tạo để truyền ngược đơn giản khi sử
dụng DNN với các lớp đầu ra lớn, phụ thuộc vào ngữ cảnh đã tạo ra tỷ lệ lỗi thấp hơn
đáng kể so với mơ hình hỗn hợp Gaussian hiện đại khi đó (GMM ) / Mơ hình Markov
ẩn (HMM) và hơn cả các hệ thống dựa trên mơ hình phát triển tiên tiến hơn. Bản chất
của các lỗi nhận dạng được tạo ra bởi hai loại hệ thống là khác nhau về đặc điểm,
cung cấp những hiểu biết kỹ thuật về cách tích hợp học sâu vào hệ thống giải mã
giọng nói hiệu quả cao hiện có được triển khai bởi tất cả các nhận dạng giọng nói
chính. hệ thống. Phân tích vào khoảng năm 2009–2010, đối chiếu giữa GMM (và các
mơ hình giọng nói chung khác) với mơ hình DNN, đã kích thích đầu tư công nghiệp
sớm vào học sâu để nhận dạng giọng nói, cuối cùng dẫn đến việc sử dụng phổ biến
15


và thống trị trong ngành đó. Phân tích đó được thực hiện với hiệu suất tương đương
(tỷ lệ lỗi ít hơn 1,5%) giữa các DNN phân biệt và các mô hình phát sinh.
Vào năm 2010, các nhà nghiên cứu đã mở rộng học sâu từ TIMIT sang nhận dạng
giọng nói từ vựng lớn, bằng cách áp dụng các lớp đầu ra lớn của DNN dựa trên các
trạng thái HMM phụ thuộc ngữ cảnh được xây dựng bởi cây quyết định.
Những tiến bộ trong phần cứng đã thúc đẩy sự quan tâm mới đến học sâu. Năm
2009, Nvidia đã tham gia vào cái được gọi là “cú nổ lớn” của học sâu, “vì mạng
neural học sâu được đào tạo với các đơn vị xử lý đồ họa (GPU - Graphics Processing
Unit) của Nvidia.” Năm đó, Andrew Ng xác định rằng GPU có thể tăng tốc độ của
hệ thống học sâu lên khoảng 100 lần. Đặc biệt, GPU rất phù hợp cho các phép tính
ma trận / vector liên quan đến học máy. GPU tăng tốc các thuật toán đào tạo theo thứ
tự cường độ, giảm thời gian chạy từ vài tuần xuống cịn ngày. Hơn nữa, tối ưu hóa
phần cứng và thuật tốn chun biệt có thể được sử dụng để xử lý hiệu quả các mơ

hình học sâu.
Năm 2012, một nhóm do George E. Dahl dẫn đầu đã giành chiến thắng trong "Thử
thách hoạt động phân tử Merck" bằng cách sử dụng mạng lưới thần kinh sâu đa nhiệm
vụ để dự đoán mục tiêu phân tử sinh học của một loại thuốc. Vào năm 2014, nhóm
của Hochreiter đã sử dụng học sâu để phát hiện các tác động độc hại của hóa chất
mơi trường trong chất dinh dưỡng, sản phẩm gia dụng và thuốc và đã giành chiến
thắng trong "Thử thách dữ liệu Tox21" của NIH (National Institutes of Health), FDA
(Food and Drug Administration) và NCATS (National Center for Advancing
Translational Sciences).
Các tác động bổ sung đáng kể trong nhận dạng hình ảnh hoặc đối tượng đã được
cảm nhận từ năm 2011 đến năm 2012. Mặc dù CNN được đào tạo bằng cách nhân
giống ngược đã tồn tại trong nhiều thập kỷ và việc triển khai GPU của Neural
Network trong nhiều năm, bao gồm cả CNN, việc triển khai nhanh các CNN trên
GPU là cần thiết để phát triển thị giác máy tính . Vào năm 2011, phương pháp này
đã lần đầu tiên đạt được hiệu suất siêu phàm trong một cuộc thi nhận dạng hình ảnh
trực quan. Cũng trong năm 2011, nó đã giành chiến thắng trong cuộc thi chữ viết tay
của ICDAR (International Conference on Document Analysis and Recognition)
Trung Quốc vào tháng 5 năm 2012, nó đã giành chiến thắng trong cuộc thi phân đoạn
16


hình ảnh ISBI (International Symposium on Biomedical Imaging). Cho đến năm
2011, CNN khơng đóng vai trị chính trong các hội nghị về thị giác máy tính, nhưng
vào tháng 6 năm 2012, một bài báo của Ciresan et al. tại hội nghị hàng đầu CVPR
(Conference on Computer Vision and Pattern Recognition) đã cho thấy cách tổng
hợp tối đa CNNs trên GPU có thể cải thiện đáng kể nhiều bản ghi điểm chuẩn về thị
lực. Vào tháng 10 năm 2012, một hệ thống tương tự của Krizhevsky và cộng sự đã
giành chiến thắng trong cuộc thi ImageNet quy mô lớn nhờ lợi nhuận đáng kể so với
các phương pháp học máy nông. Vào tháng 11 năm 2012, hệ thống của Ciresan và
cộng sự cũng đã giành chiến thắng trong cuộc thi ICPR (International Conference on

Pattern Recognition) về phân tích hình ảnh y tế lớn để phát hiện ung thư, và trong
năm tiếp theo cũng là Thử thách lớn của MICCAI (Medical Image Computing and
Computer Assisted Intervention) về chủ đề tương tự. Trong năm 2013 và 2014, tỷ lệ
lỗi trong tác vụ ImageNet sử dụng học sâu đã giảm hơn nữa, theo xu hướng tương tự
trong nhận dạng giọng nói quy mơ lớn.
Việc phân loại hình ảnh sau đó được mở rộng thành nhiệm vụ khó khăn hơn là tạo
mơ tả (chú thích) cho hình ảnh, thường là sự kết hợp của CNN và LSTM.
Một số nhà nghiên cứu tuyên bố rằng chiến thắng ImageNet vào tháng 10 năm
2012 đã đánh dấu sự khởi đầu của một "cuộc cách mạng học sâu" đã làm thay đổi
ngành công nghiệp AI.
Vào tháng 3 năm 2019, Yoshua Bengio, Geoffrey Hinton và Yann LeCun đã được
trao Giải thưởng Turing cho những đột phá về khái niệm và kỹ thuật đã đưa mạng
neural sâu trở thành một thành phần quan trọng của máy tính.

17


2.3 CNN là gì?

Hình 3. Mơ hình Mạng Neural tích phức hợp
Convolutional Neural Network (CNNs – Mạng neural tích phức hợp) là một trong
những mơ hình Deep Learning tiên tiến. Nó giúp cho chúng ta xây dựng được những
hệ thống thơng minh với độ chính xác cao như hiện nay. CNN được sử dụng nhiều
trong các bài toán nhận dạng các object trong ảnh.
Convolutional là gì? Là một cửa sổ trượt (Sliding Windows) trên một ma trận. Các
convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh lấy ra
những thơng tin chính xác nhất mà khơng cần chọn các feature.
Convolution hay tích chập là nhân từng phần tử trong ma trận 3. Sliding Window
hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích thước nhỏ.
Cấu trúc mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử

dụng các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong
các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thơng tin
trừu tượng hơn cho các lớp tiếp theo.
Mỗi một lớp sau khi thơng qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng
hơn cho các lớp tiếp theo. Trong mơ hình mạng truyền ngược (feedforward neural
network) thì mỗi neural đầu vào (input node) cho mỗi neural đầu ra trong các lớp tiếp
theo.
Mơ hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn
vẹn (affine layer). Cịn trong mơ hình CNNs thì ngược lại. Các layer liên kết được
với nhau thông qua cơ chế convolution.
Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có được
các kết nối cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của filter áp
đặt lên một vùng ảnh cục bộ của neuron trước đó.
18


Mỗi một lớp được sử dụng các filter khác nhau thơng thường có hàng trăm hàng
nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngồi ra có một số layer khác
như pooling/subsampling layer dùng để chắt lọc lại các thơng tin hữu ích hơn (loại
bỏ các thơng tin nhiễu).
Trong quá trình huấn luyện mạng (training) CNN tự động học các giá trị qua các
lớp filter dựa vào cách thức mà bạn thực hiện. Ví dụ trong tác vụ phân lớp ảnh, CNNs
sẽ cố gắng tìm ra thơng số tối ưu cho các filter tương ứng theo thứ tự raw pixel >
edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân
lớp ảnh.
Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất biến (Location
Invariance) và tính kết hợp (Compositionality). Với cùng một đối tượng, nếu đối
tượng này được chiếu theo các góc độ khác nhau (translation, rotation, scaling) thì
độ chính xác của thuật toán sẽ bị ảnh hưởng đáng kể.
Pooling layer sẽ cho bạn tính bất biến đối với phép dịch chuyển (translation), phép

quay (rotation) và phép co giãn (scaling). Tính kết hợp cục bộ cho ta các cấp độ biểu
diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn thơng qua
convolution từ các filter.
Đó là lý do tại sao CNNs cho ra mơ hình với độ chính xác rất cao. Cũng giống
như cách con người nhận biết các vật thể trong tự nhiên.
CNN sử dụng 3 ý tưởng cơ bản: các trường tiếp nhận cục bộ (local receptive field),
trọng số chia sẻ (shared weights), tổng hợp (pooling).
Trường tiếp nhận cục bộ (local receptive field): Đầu vào của mạng CNN là một
ảnh. Ví dụ như ảnh có kích thước 28×28 thì tương ứng đầu vào là một ma trận có
28×28 và giá trị mỗi điểm ảnh là một ơ trong ma trận. Trong mơ hình mạng ANN
truyền thống thì chúng ta sẽ kết nối các neuron đầu vào vào tầng ảnh.
Tuy nhiên trong CNN chúng ta không làm như vậy mà chúng ta chỉ kết nối trong
một vùng nhỏ của các neuron đầu vào như một filter có kích thước 5×5 tương ứng
(28- 5 + 1) 24 điểm ảnh đầu vào. Mỗi một kết nối sẽ học một trọng số và mỗi neuron
ẩn sẽ học một bias. Mỗi một vùng 5×5 đấy gọi là một trường tiếp nhận cục bộ. Một
cách tổng quan, ta có thể tóm tắt các bước tạo ra 1 hidden layer bằng các cách sau:
- Tạo ra neuron ẩn đầu tiên trong lớp ẩn 1.
19


- Dịch filter qua bên phải một cột sẽ tạo được neuron ẩn thứ 2: Với bài toán nhận
dạng ảnh người ta thường gọi ma trận lớp đầu vào là feature map, trọng số xác định
các đặc trưng là shared weight và độ lệch xác định một feature map là shared bias.
Như vậy đơn giản nhất là qua các bước trên chúng ta chỉ có 1 feature map. Tuy nhiên
trong nhận dạng ảnh chúng ta cần nhiều hơn một feature map. Như vậy, local
receptive field thích hợp cho việc phân tách dữ liệu ảnh, giúp chọn ra những vùng
ảnh có giá trị nhất cho việc đánh giá phân lớp.
Trọng số chia sẻ (shared weight and bias): Đầu tiên, các trọng số cho mỗi filter
(kernel) phải giống nhau. Tất cả các neural trong lớp ẩn đầu sẽ phát hiện chính xác
feature tương tự chỉ ở các vị trí khác nhau trong hình ảnh đầu vào.

Tóm lại, một convolutional layer bao gồm các feature map khác nhau. Mỗi một
feature map giúp detect một vài feature trong bức ảnh. Lợi ích lớn nhất của trọng số
chia sẻ là giảm tối đa số lượng tham số trong mạng CNN.
Lớp tổng hợp (pooling layer): Lớp pooling thường được sử dụng ngay sau lớp
convolutional để đơn giản hóa thơng tin đầu ra để giảm bớt số lượng neuron. Thủ tục
pooling phổ biến là Max-pooling, thủ tục này chọn giá trị lớn nhất trong vùng đầu
vào 2×2. Như vậy qua lớp Max Pooling thì số lượng neuron giảm đi phân nửa. Trong
một mạng CNN có nhiều Feature Map nên mỗi Feature Map chúng ta sẽ cho mỗi
Max Pooling khác nhau. Chúng ta có thể thấy rằng Max Pooling là cách hỏi xem
trong các đặc trưng này thì đặc trưng nào là đặc trưng nhất. Ngoài Max Pooling cịn
có L2 Pooling. Cuối cùng ta đặt tất cả các lớp lại với nhau thành một CNN với đầu
ra gồm các neuron với số lượng tùy bài toán. 2 lớp cuối cùng của các kết nối trong
mạng là một lớp đầy đủ kết nối (fully connected layer) . Lớp này nối mọi neural từ
lớp max pooled tới mọi neural của tầng ra.

20


2.4 Ứng dụng của Deep Learning.

Hình 4. Ứng dụng của Deep Learning
- Nhận dạng tiếng nói tự động với các bài tốn “Nhận dạng giọng nói”.
- Xử lý ngơn ngữ tự nhiên với bài toán “Nhận dạng chữ viết”.
- Khám phá dược phẩm và độc chất học với việc sử dụng neural sâu đa tác vụ để dự
đoán mục tiêu sinh học của một hợp chất.
- Quản lý quan hệ khách hàng (CRM) với việc dùng Deep Learning để ước tính giá
trị của các hành động.
- Tin sinh học ứng dụng Deep Learning để dự đoán các mối quan hệ chức năng gen
và các chú thích Bản thể gen.
- Phân tích hình ảnh y tế dựa trên các cơng trình về nhận diện ảnh kết hợp với phân

tích Tin sinh học.
- Quảng cáo trên điện thoại di động thông qua việc học sâu các hành vi của khách
hàng để đưa ra gợi ý mặt hàng thích hợp nhất.
- Phục hồi hình ảnh thơng qua bản dịch khơng gian tiềm ẩn sâu.
- Phát hiện gian lận tài chính sử dụng cơ sở dữ liệu xuyên thời gian để thực hiện
phân tích gian lận thời gian thực.
- Quân sự áp dụng nhiều thành tựu của Deep Learning để thúc đẩy sức mạnh.

21


Chương 3: Tổng quan về bài toán phá mã Captcha
3.1 Dữ liệu đầu vào
- Gồm 10000 bức ảnh được lấy nguồn từ bài viết Simple a Captcha trên WordPress.
+ 6000 ảnh dùng để train.
+ 4000 ảnh dùng để test.
3.2 Sơ lược mơ hình
3.2.1 Mục tiêu của bài tốn
Mục tiêu của bài tốn là có thể sử dụng Deep Learning với mơ hình CNN để nhận
dạng được Captcha dạng 4 ký tự. Cho thấy được tỷ lệ và xác suất thành cơng của
cơng cụ. Từ đó chứng minh những lỗ hổng của Captcha hiện nay.
Đồng thời có thể áp dụng phương pháp trên để phá mã Captcha với 8 ký tự hoặc
nhiều hơn 10 ký tự. Qua đó càng khẳng định thêm cho sự lạc hậu của Captcha.
3.2.2 Bố trí thực nghiệm
Từ dữ liệu đầu vào gồm 10000 bức ảnh Captcha 4 ký tự có độ phân giải là 72x24
pixels. Ta lấy 60% - 70% của thư viện ảnh trên để train, khoảng 30% - 40% cịn lại
test độ chính xác của thực nghiệm ta sắp tiến hành.
3.2.3 Bộ công cụ được sử dụng.
a) Python:
Python là ngơn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra bởi

Guido van Rossum. Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những
ngơn ngữ lập trình nhập môn tốt nhất cho người lần đầu tiếp xúc với ngơn ngữ lập
trình. Python hồn tồn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động.
Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu
quả đối với lập trình hướng đối tượng. Cú pháp lệnh của Python là điểm cộng vơ
cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở
thành một ngôn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh
vực, ở hầu hết các nền tảng.
Python là một ngơn ngữ lập trình thú vị với các thư viện tuyệt vời cho máy học và
thị giác máy tính.

22


b) OpenCV:
OpenCV là thư viện nguồn mở hàng đầu cho Computer Vision và Machine
Learning, và hiện có thêm tính năng tăng tốc GPU cho các hoạt động theo real-time.
OpenCV là một khn khổ phổ biến để xử lý hình ảnh và thị giác máy tính. Chúng
ta sẽ sử dụng OpenCV để xử lý hình ảnh CAPTCHA. Nó có một API Python để
chúng ta có thể sử dụng nó trực tiếp từ Python.
c) Keras
Keras là một thư viện phần mềm mã nguồn mở cung cấp giao diện Python cho các
mạng neural nhân tạo. Keras hoạt động như một giao diện cho thư viện TensorFlow.
Keras là một khung học sâu được viết bằng Python. Nó giúp dễ dàng xác định,
đào tạo và sử dụng mạng neural sâu với mã hóa tối thiểu.
d) TensorFlow
TensorFlow là một thư viện phần mềm mã nguồn mở dành cho máy học trong
nhiều loại hình tác vụ nhận thức và hiểu ngôn ngữ
TensorFlow là thư viện của Google dành cho máy học. Chúng ta sẽ viết mã trong
Keras, nhưng Keras không thực sự triển khai bản thân logic mạng neural. Thay vào

đó, nó sử dụng thư viện TensorFlow của Google đằng sau để thực hiện công việc
nặng nhọc.
e) Numpy
Numpy là một thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ cho
việc tính tốn các mảng nhiều chiều, có kích thước lớn với các hàm đã được tối ưu
áp dụng lên các mảng nhiều chiều đó. Numpy đặc biệt hữu ích khi thực hiện các hàm
liên quan tới Đại Số Tuyến Tính. Tổ tiên của NumPy, Numeric, ban đầu được tạo ra
bởi Jim Hugunin với sự đóng góp từ một số nhà phát triển khác.
f) Imutils
Imutils là một loạt các chức năng tiện lợi để thực hiện các chức năng xử lý hình
ảnh cơ bản như dịch, xoay, thay đổi kích thước, tạo khung và hiển thị hình ảnh
Matplotlib dễ dàng hơn với OpenCV và cả Python 2.7 và Python 3.
g) Scikit-learn
Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy
được viết trên ngôn ngữ Python. Thư viện cung cấp một tập các công cụ xử lý các
23


bài toán machine learning và statistical modeling gồm: classification, regression,
clustering, và dimensionality reduction.
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền
tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập.
3.2.4 Xây dựng mơ hình CNN.
Input đầu vào: Ảnh Captcha có 4 ký tự có kích thước là 72x24 pixels. Được xử lý
ban đầu cho các ký tự được cắt vào trong chương trình Input_shape (20,20,1). Tức
trong khơng gian 3 chiều và khi qua layer đầu tiền, ảnh sẽ được xử lý với kích thước
gồm: Chiều rộng 20 pixels, chiều cao 20 pixels và chiều sâu 1 pixels.
Tạo Dataset: Để đào tạo bất kỳ hệ thống học máy nào, chúng ta cần dữ liệu đào
tạo. Để phá vỡ hệ thống CAPTCHA, chúng ta muốn dữ liệu đào tạo giống như sau:


Hình 5. Sơ đồ khởi tạo Dataset.
Vì chúng ta sử dụng hình ảnh từ nguồn WordPress. Bộ dữ liệu được tải xuống
gồm 10.000 hình ảnh CAPTCHA cùng với câu trả lời dự kiến cho mỗi hình ảnh.

24


Đây là một số CAPTCHA mà chúng ta sẽ sử dụng:

Hình 6. Dữ liệu đầu vào.

Hình 7. Sơ đồ đơn giản hóa.
Với đủ dữ liệu đào tạo, cách tiếp cận này thậm chí có thể hoạt động - nhưng chúng
ta có thể làm cho vấn đề trở nên đơn giản hơn rất nhiều để giải quyết. Vấn đề càng
đơn giản, chúng ta càng cần ít dữ liệu đào tạo hơn và ít sức mạnh tính tốn hơn để
giải quyết nó.
May mắn thay, hình ảnh CAPTCHA chỉ gồm bốn chữ cái. Nếu bằng cách nào đó
chúng ta có thể tách hình ảnh ra để mỗi chữ cái là một hình ảnh riêng biệt, thì chúng
ta chỉ phải huấn luyện mạng neural để nhận ra một chữ cái duy nhất tại một thời
điểm:
25


×