Tải bản đầy đủ (.doc) (32 trang)

BÀI TẬP LỚN CUỐI KỲ ỨNG DỤNG MẠNG NEURAL NHÂN TẠO TRONG NHẬN DẠNG KÝ TỰ ĐƠN

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.76 MB, 32 trang )

TRƯỜNG ĐẠI HỌC NHA TRANG

KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN CUỐI KỲ
ỨNG DỤNG MẠNG NEURAL NHÂN TẠO
TRONG NHẬN DẠNG KÝ TỰ ĐƠN

Giảng viên hướng dẫn: TS. Đinh Đồng Lưỡng
Nhóm thực hiện:
Võ Trương Ngọc Ly
Hồ Quang Phúc
Nguyễn Thị Xuân Phương
Môn học: Nhận dạng và học máy

Nha Trang, tháng 6 năm 2018


MỤC LỤC
MỤC LỤC...................................................................................................................................i
DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU.................................................................ii
LỜI MỞ ĐẦU...........................................................................................................................iii
CHƯƠNG I: GIỚI THIỆU VỀ MẠNG NEURAL NHÂN TẠO...............................................1
1.1. Mạng neural sinh học...................................................................................................1
1.2. Mạng neural nhân tạo...................................................................................................2
1.3. Ứng dụng của mạng neural..........................................................................................5
1.4. Xây dựng mạng neural.................................................................................................7
CHƯƠNG II: HUẤN LUYỆN MẠNG NEURAL.....................................................................9
2.1. Các phương pháp học.......................................................................................................9
2.2. Huấn luyện mạng neural.................................................................................................10
CHƯƠNG III: NHẬN DẠNG KÝ TỰ TRONG MẠNG NEURAL NHÂN TẠO..................13


3.1. Các bước xây dựng nên bài toán....................................................................................13
3.2. Xác định cấu trúc mạng..................................................................................................13
3.3. Thuật toán huấn luyện mạng...........................................................................................15
3.4. Phương pháp và thuật toán nhận dạng ký tự..................................................................17
3.5. Huấn luyện mạng............................................................................................................23
3.6. Nhận dạng ký tự quang học............................................................................................25
CHƯƠNG IV: GIAO DIỆN CHÍNH CỦA CHƯƠNG TRÌNH.............................................................26

i


DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU

Chữ viết tắt

Giải thích

CSDL
SIFT

Cơ sở dữ liệu
Viết tắt của thuật ngữ “Scale Invariant Feature

Keypoint

Transform”
Những điểm đặc trưng dùng trong quá trình nhận

BRIEF


dạng ảnh
Viết tắt của thuật ngữ “Binary Robust Independent

Gaussian

Elementary Features”
Hàm Gauss (Biểu đồ của một hàm Gauss là một

DoG
BBF

đường cong đối xứng đặc trưng "hình quả chng")
Viết tắt của thuật ngữ “Difference-of-Gaussian”
Viết tắt của thuật toán “Best-Bin-First”

ii


LỜI MỞ ĐẦU
Do có khả năng liên tưởng, con người có thể dễ dàng làm nhiều điều mà việc
lập trình cho máy tính địi hỏi rất nhiều cơng sức. Chẳng hạn như việc nhận dạng hay
trị chơi ơ chữ. Một em bé có thể tự học hỏi để nhận dạng và phân loại đồ vật chung
quanh mình, biết được cái gì là thức ăn, cái gì là đồ chơi. Một người bình thường cũng
có thể đốn được vài chữ trong một ơ chữ. Nhưng thật khó mà dạy cho máy tính làm
được những việc ấy. Từ lâu các nhà khoa học đã nhận thấy những ưu điểm của bộ óc
con người và tìm cách bắt chước để thực hiện trên những máy tính, tạo cho nó có khả
năng học tập, nhận dạng và phân loại. Các mạng neural nhân tạo đã ra đời từ những nỗ
lực đó. Nó thực sự được chú ý và nhanh chóng trở thành một hướng nghiên cứu đầy
triển vọng trong mục đích xây dựng các máy thơng minh tiến gần tới trí tuệ con người.
Đặc biệt là lĩnh vực nhận dạng.

Từ lâu các nhà khoa học đã nhận thấy những ưu điểm của bộ óc con người và
tìm cách bắt chước để thực hiện trên những máy tính, tạo cho nó có khả năng học tập,
nhận dạng và phân loại. Vì vậy các nhà khoa học đã nghiên cứu và sáng tạo ra mạng
neural nhân tạo. Nó thực sự được chú ý và nhanh chóng trở thành một hướng nghiên
cứu đầy triển vọng đặc biệt là lĩnh vực nhận dạng. Để giải quyết các bài toán nhận
dạng, người ta đã đưa vào các cách tiếp cận khác nhau. Mỗi phương pháp tiếp cận
trong những bài tốn cụ thể đều có những ưu, nhược điểm riêng… và những phương
pháp này có một tỉ lệ nhận biết thành cơng nhất định. Và bài tốn nhận dạng ký tự là
một bài toán con trong lớp các bài toán nhận dạng, xử lý ảnh.
Nội dung của báo cáo này sẽ đi vào tìm hiểu tổng quan về mạng neural, xem xét
và nghiên cứu cấu trúc các mạng neural, giới thiệu về phương pháp huấn luyện mạng
neural và cuối cùng là tìm hiểu về vấn đề nhận dạng ký tự - một trong những ứng dụng
phổ biến của mạng neural.

iii


CHƯƠNG I: GIỚI THIỆU VỀ MẠNG NEURAL NHÂN TẠO
1.1. Mạng neural sinh học
Bộ não chúng ta được hình thành từ hơn 10 tỉ tế bào được gọi là neural. Loại tế bào
này khác các tế bào khác ở chỗ nó có khả năng nhận, xử lý và truyền các tín hiệu điện hóa
trên các đường kết nối giữa các tế bào, các con đường này tạo nên hệ thống giao tiếp của bộ
não. Từ đó, các neural liên kết với nhau, tạo thành mạng neural.

Hình 1. Mạng neural trong bộ não con người
Sau đây là những thành phần chính trong cấu trúc của một nơron trong bộ não con
người:

Hình 2. Mơ hình neural sinh học
Trong đó :

1





Các Soma là thân của neural.
Các Dendrites là các dây mảnh, dài, gắn liền với soma, chúng truyền dữ liệu

(dưới dạng xung điện thế) đến cho Soma xử lý. Bên trong Soma các dữ liệu đó được tổng
hợp lại. Có thể xem gần đúng sự tổng hợp ấy như là một phép lấy tổng tất cả các dữ liệu mà
neural nhận được.
 Một loại dây dẫn tín hiệu khác cũng gắn với Soma là các Axon. Khác với
Dendrites, Axons có khả năng phát các xung điện thế, chúng là các dây dẫn tín hiệu từ
neural đi các nơi khác. Chỉ khi nào điện thế trong Soma vượt quá một giá trị ngưỡng nào đó
(threshold) thì axon mới phát một xung điện thế, cịn nếu khơng thì nó ở trạng thái nghỉ.
 Axon nối với các Dendrites của các neural khác thông qua những mối nối đặc
biệt gọi là Synapse. Khi điện thế của Synapse tăng lên do các xung phát ra từ Axon thì
Synapse sẽ nhả ra một số chất hoá học (neurotransmitters); các chất này mở "cửa" trên
Dendrites để cho các ions truyền qua. Chính dịng ions này làm thay đổi điện thế trên
Dendrites, tạo ra các xung dữ liệu lan truyền tới các neural khác.
 Có thể tóm tắt hoạt động của một neural như sau: neural lấy tổng tất cả các điện
thế vào mà nó nhận được, và phát ra một xung điện thế nếu tổng ấy lớn hơn một ngưỡng
nào đó. Các neural nối với nhau ở các Synapses. Synapse được gọi là mạnh khi nó cho phép
truyền dẫn dễ dàng tín hiệu qua các neural khác. Ngược lại, một Synapse yếu sẽ truyền dẫn
tín hiệu rất khó khăn.
Các Synapses đóng vai trị rất quan trọng trong sự học tập. Khi chúng ta học tập thì
hoạt động của các Synapses được tăng cường, tạo nên nhiều liên kết mạnh giữa các nơron.
Có thể nói rằng người nào học càng giỏi thì càng có nhiều Synapses và các Synapses
ấy càng mạnh mẽ, hay nói cách khác, thì liên kết giữa các neural càng nhiều, càng nhạy bén.

1.2. Mạng neural nhân tạo
Mạng neural nhân tạo là mơ hình được xây dựng dựa trên việc bắt chước cấu trúc và
chức năng của mạng neural sinh học. Thành phần cấu tạo cơ bản của mạng là tế bào neural
nhân tạo. Các neural này về bản chất, cũng dựa trên mô hình tế bào neural sinh học. Một mơ
hình tế bào neural nhân tạo gồm có ba quy tắc cơ bản: nhân, tổng hợp và kích hoạt. tại lối
vào (input) của mơ hình, các giá trị đầu vào sẽ được nhân với trọng số cá nhân (weight). Các
lối vào đều có trọng số riêng của mình. Thơng thường, các trọng số này được khởi tạo một
cách ngẫu nhiên ở thời điểm khởi tạo mạng và được cập nhật liên tục trong quá trình học
2


mạng. Lối vào nào có trọng số càng lớn thì đồng nghĩa với tín hiệu truyền qua đó càng lớn.
Bên trong thân của tế bào sẽ tổng hợp các giá trị đầu vào này và ngưỡng (bias). Ở lối ra
(output) của tế bào, hàm truyền (Transfer function) có tác dụng giới hạn phạm vi output của
tế bào, sẽ nhận vào giá trị tổng hợp, xử lý và quyết định giá trị đầu ra của tế bào, thường là 0
hoặc 1. Các hàm truyền rất đa dạng, có thể là các hàm tuyến tính hoặc phi tuyến. Việc lựa
chọn hàm truyền nào là tuỳ thuộc vào từng bài toán cụ thể. Có thể viết mơ hình trên dưới
dạng tốn học như sau:
- Tổng hợp các input với trọng số

Với w, x là giá trị đầu vào và trọng số tại đường truyền input thứ i, (trong tổng số N
đường input). Neural này sẽ hoạt động như sau: giả sử có N inputs, neural sẽ có N weights
(trọng số) tương ứng với N đường truyền inputs. Neural sẽ lấy tổng có trọng số của tất cả
các inputs. Nói như thế có nghĩa là neural sẽ lấy input thứ nhất, nhân với weight trên đường
input thứ nhất, lấy input thứ hai nhân với weight của đường input thứ hai v.v..., rồi lấy tổng
của tất cả các kết quả thu được. Đường truyền nào có weight càng lớn thì tín hiệu truyền qua
đó càng lớn, như vậy có thể xem weight là đại lượng tương đương với Synapse trong neural
sinh học.
-


Out put

Kết quả này sẽ được so sánh với threshold t của neural, nếu nó lớn hơn t thì neural
cho output là 1, cịn nếu nhỏ hơn thì output là 0. Ngồi ra ta cũng có thể trừ tổng nói trên
cho t, rồi so sánh kết quả thu được với 0, nếu kết quả là dương thì neural cho ouput bằng 1,
nếu kết quả âm thì output là 0.

Với f là là hàm Heaviside:

3


f được gọi là threshold function hay transfer function của neural, còn giá trị (-t) còn
được gọi là bias hay offset của neural.
Nếu chúng ta đưa thêm một input nữa vào, input thứ 0, có giá trị ln ln bằng 1 và
weight ln ln bằng bias (-t) thì output của neural cịn có thể viết dưới dạng:

Lưu ý là chỉ số của tổng bây giờ bắt đầu từ 0 chứ không phải bằng 1 như trước nữa.
Với cấu trúc và cách thức hoạt động trên, khả năng xử lý của một tế bào neural nhân
tạo chỉ có giới hạn. Tuy nhiên, sức mạnh tính tốn và xử lý của chúng sẽ được phát huy khi
ta kết nối các tế bào này lại với nhau thành một kiến trúc đồng nhất, tạo thành một mạng
neural. Mơ hình mạng neural có khả năng xử lý những tình huống vấn đề, bài tốn phức tạp
hơn, nhất là trong các bài toán phi tuyến như phân tích, dự dốn, nhận dạng tiếng nói, vân
tay hay các ứng dụng nhận dạng khác, … Khả năng này được dựa trên ba tham số: kiểu của
tế bào, kiến trúc kết nối và thuật toán học cho mạng.
Về mặt toán học, một mạng neural được xem như là một hàm ánh xạ F: X->Y, trong
đó X là khơng gian trạng thái đầu vào (input state space) và Y là không gian trạng thái đầu
ra (output state space) của mạng. Các mạng chỉ đơn giản là làm nhiệm vụ ánh xạ các vector
đầu vào x ∈ X sang các vector đầu ra y ∈ Y thông qua “bộ lọc” (filter) các trọng số. Tức là
y = F(x) = s(W, x), trong đó W là ma trận trọng số liên kết.

Khác với các ứng dụng trên máy tính truyền thống, thường chỉ thực hiện theo một
giải thuật - một tập luật có thứ tự được đề ra một cách rõ ràng, mơ hình mạng neural có cách
xử lý thơng tin giống với hoạt động của bộ não con người hơn. Một mơ hình mạng neural
4


gần giống như một đối tượng có thể tư duy. Mạng được tạo nên từ một số lượng lớn các
phần tử xử lý được kết nối với nhau làm việc song song để giải quyết một vấn đề cụ thể.
Mạng neural có thể mơ phỏng gần như bất cứ hàm mục tiêu nào với số biến nhập và xuất
tuỳ ý. Ngồi ra, mạng neural cịn có một ưu điểm tuyệt vời khác, đó là khả năng học. Khả
năng học của mạng chủ yếu dựa trên kỹ thuật lan truyền ngược. Mạng neural lan truyền là
một hàm phi tuyến có thể xấp xỉ gần đúng, nhưng một hàm đích được cho qua một số mẫu
trong tập mẫu có sẵn. Mỗi khi có kiến thức mới ta lại đưa cho mạng neural. Khả năng này
của mạng neural là rất cần thiết cho các vấn đề có dữ liệu ln thay đổi.

Hình 3. Mơ hình neural nhân tạo ở mức đơn giản
Mơ hình mạng neural ở trên gồm 3 lớp: lớp nhập (input), lớp ẩn(hidden) và lớp xuất
(output). Mỗi nút trong lớp nhập nhận giá trị của một biến độc lập và chuyển vào mạng.
Dữ liệu từ tất cả các nút trong lớp nhập được tích hợp – ta gọi là tổng trọng số – và
chuyển kết quả cho các nút trong lớp ẩn. Gọi là “ẩn” vì các nút trong lớp này chỉ liên lạc với
các nút trong lớp nhập và lớp xuất, và chỉ có người thiết kế mạng mới biết lớp này (người sử
dụng không biết lớp này).
Các nút trong lớp xuất nhận các tín hiệu tổng trọng hóa từ các nút trong lớp ẩn. Mỗi
nút trong lớp xuất tương ứng với một biến phụ thuộc.
1.3.

Ứng dụng của mạng neural
Mạng neural nhân tạo có khả năng được sử dụng trong các cơng việc phân loại, bài

tốn gần đúng, xử lý dữ liệu, lọc, phân nhóm, nén, robot, các quy định, ra quyết định, …

Việc chọn cấu trúc liên kết mạng neural nhân tạo phụ thuộc vào kiểu của ứng dụng và dữ
5


liệu đại diện của một vấn đề nhất định. Khi chọn và sử dụng các mạng neural nhân tạo,
chúng ta cần phải quen thuộc với lý thuyết của mơ hình mạng thần kinh nhân tạo và các
thuật toán học. Phức tạp của các mơ hình được lựa chọn là rất quan trọng; sử dụng mơ hình
đơn giản cho cơng việc cụ thể thường là kết quả trong các kết quả thấp hay sai, nhưng một
mơ hình phức tạp cho một nhiệm vụ cụ thể có thể dẫn đến các vấn đề trong q trình học.
Có nhiều thuật tốn học với rất nhiều sự kết hợp cân bằng giữa chúng và gần như tất cả đều
thích hợp cho bất kỳ loại mơ hình mạng neural nhân tạo nào. Việc lựa chọn thuật tốn học
thích hợp cho một cơng việc cần nhiều kinh nghiệm và thử nghiệm về vấn đề nhất định và
các loại dữ liệu. Khi mơ hình mạng thần kinh nhân tạo và thuật toán học đã đúng cách lựa
chọn thì chúng ta có được cơng cụ mạnh mẽ để giải quyết vấn đề bài toán.
Một số ứng dụng của mạng neural:
- Nhận dạng mẫu: Phân loại mẫu có liên quan với sự phân công của một mẫu mới
cho một trong những quy định trước một số loại dựa trên một hoặc nhiều thuộc tính mơ tả
một loại. Ứng dụng trong y học lâm sàng, vi sinh học và xử lý ảnh được cho bởi Penny và
Frost (1996), Basheer và Hajmeer (2000), Mattone et al (2000.), Và Egmont-Petersen et al.
(2002).
- Tạo nhóm: Trong trường hợp này, mạng neural được sử dụng để chỉ định các mẫu
tương tự với cùng một nhóm. Thường thì các mạng Kohonen được sử dụng. Ứng dụng tiêu
biểu có thể được tìm thấy trong lĩnh vực phân tích hóa học (Tokutaka et al, 1999.) và nhận
dạng mẫu thời tiết (Ambroiseet al., 2000).
- Mơ hình hóa và dự báo: Mơ hình hóa bao gồm việc huấn luyện mạng neural trên dữ
liệu đầu vào - đầu ra, như vậy một mối quan hệ hiện tại giữa dữ liệu đầu vào và dữ liệu đầu
ra được thực hiện đầy đủ chính xác. Các mối quan hệ có thể là tĩnh, trong trường hợp này
thường một mạng feed - forward được sử dụng. Cũng có thể các mối quan hệ là động, trong
trường hợp này thường là mạng hồi quy được sử dụng. Nhiều ứng dụng có thể được tìm
thấy trong tài liệu về các lĩnh vực ứng dụng khác nhau, chẳng hạn như mơ hình nhà máy

nước thải, điều hịa dữ liệu, vv…, xem ví dụ Miller et al. (1997), Meert (1998), Triệu et al.
(1999), Basak et al. (2000) và Veltri et al. (2002).
- Tối ưu hóa: Trong tối ưu hóa, nó là cần thiết để tìm một giải pháp để đánh giá một
đối tượng hàm mục tiêu để thiết lập liên kết. Mạng Hopfield được chứng minh rất hiệu quả
6


trong việc giải quyết vấn đề tối ưu hóa phi tuyến. Một số ví dụ là những ứng dụng trong các
vấn đề đường đi ngắn nhất (Bousono-Carzon et al., 1997) và trong vấn đề tối ưu hóa tổ hợp
(Colorni, et al., 1996).
- Điều khiển quá trình và nhận dạng: Trong q trình kiểm sốt, một mạng neural có
thể được dùng để tính tốn đầu vào q trình để những kết quả đầu ra q trình đạt mục đích
mong muốn. Yonghong và van Cauwenberghe (1996) thảo luận về việc thiết kế một bộ điều
khiển dự đoán neural, Cohen et al. (1997) áp dụng một hệ thống thần kinh để điều khiển
trình tự của một lò phản ứng đợt Menhaj và Salmasi (2000) sử dụng một mạng neural cho
các tham số dự toán và Hafner et al. (2000) sử dụng các mạng thần kinh cho thiết kế điều
khiển động cơ diesel.
1.4.

Xây dựng mạng neural
Về cơ bản ta có thể hiểu mạng neural là một đồ thị có hướng như hình 1.8. Trong đó

các đỉnh của đồ thị là các neural và các cạnh của đồ thị là các liên kết giữa các neural.
Vì vậy để xây dựng một mạng neural ta xây dựng một đồ thị có hướng: số đỉnh của
đồ thị bằng số neural trong mạng, giá trị của các cạnh chính là trọng số liên kết neural.

h1
g1
x


h2

f
g2

h3
Hình 4. Sơ đồ đồ thị có hướng đơn giản
Ví dụ xây dựng một mạng neural đơn giản:
Đầu vào: Cho mạng neural có số lớp (với số lớp >1).
Mỗi lớp có số neural trong một lớp (số neural >=1).
Trọng số w liên kiết neural ngẫu nhiên trong khoảng (-a,a).
7


Đầu ra: Mạng neural nhân tạo.
Kiểu dữ liệu: chọn lưu dữ kiểu mảng. int số neural[số lớp];
float w[i][j][k]; với 2<=i<=số lớp, 1<=j, k<=số neural[]
Thuật toán:
Bước 1: Chọn lớp i=2 là lớp bắt đầu
Bước 2: Chọn lớp i là lớp hiện thời.
Bước 3: Tại lớp đang xét i, xét neural thứ j.
Bước 4: Thực hiện khởi tạo ngẫu nhiên trọng số kết nối với neural k của lớp i-1 trong
khoảng (-a,a). w(i,j,k)= random(-a,a).
Bước 5: Nếu k <= số neural[i-1] quay lại “Bước 4”, ngược lại thực hiện “Bước 6”.
Bước 6: Nếu j<= số neural[i] quay lại “Bước 3”, ngược lại thực hiện “Bước 7”.
Bước 7: Nếu i<= số lớp quay lại “Bước 3”. ngược lại kết thúc.

8



CHƯƠNG II: HUẤN LUYỆN MẠNG NEURAL
2.1. Các phương pháp học
Có ba kiểu học chính, mỗi kiểu mẫu tương ứng với một nhiệm vụ học trừu tượng. Đó
là học có giám sát, học khơng có giám sát và học tăng cường. Thơng thường, loại kiến trúc
mạng nào cũng có thể dùng được cho các nhiệm vụ trên.
2.1.1. Học có giám sát
Học có giám sát là kỹ thuật máy học mà bộ thông số của một mạng neural nhân tạo
được tạo từ dữ liệu huấn luyện. Nhiệm vụ của mạng neural nhân tạo tự học tập là để thiết lập
giá trị của tham số của nó đối với bất kỳ giá trị đầu vào hợp lệ sau khi đã nhìn thấy giá trị
đầu ra. Các dữ liệu huấn luyện bao gồm các cặp đầu vào và giá trị đầu ra mong muốn được
đại diện trong các vector dữ liệu truyền thống. Việc học giám sát cũng có thể được gọi là
phân loại, nơi chúng ta có một loạt các phân loại, mỗi điểm mạnh và điểm yếu của nó.
Để giải quyết một vấn đề bài tốn nhất định thì học có giám sát các bước khác nhau
phải được xem xét:
- Trong bước đầu tiên chúng ta phải xác định các loại ví dụ huấn luyện. Trong bước
thứ hai chúng ta cần phải thu thập dữ liệu đào tạo thiết rằng thỏa đáng mô tả một vấn đề
nhất định.
- Trong bước thứ ba chúng ta cần phải mô tả dữ liệu đào tạo tập trung thiết lập dưới
hình thức dễ hiểu đối với một mạng neural nhân tạo được chọn.
- Trong bước thứ tư, chúng ta làm việc học tập và sau khi học chúng ta có thể kiểm
tra hiệu năng của mạng neural nhân tạo đã học được với các thử nghiệm (xác nhận) dữ liệu.
Kiểm tra dữ liệu bao gồm các dữ liệu đã không được giới thiệu đến mạng neural nhân tạo
trong khi học.
Như vậy với học có giám sát, số lớp cần phân loại đã được biết trước. Nhiệm vụ của
thuật toán là phải xác định được một cách thức phân lớp sao cho với mỗi vector đầu vào sẽ
được phân loại chính xác vào lớp của nó.
2.1.2. Học khơng giám sát
Học khơng có giám sát là một kỹ thuật máy học mà bộ thông số của một mạng neural
nhân tạo dựa trên dữ liệu nhất định và một hàm chi phí được giảm thiểu. Hàm chi phí có thể
là bất cứ hàm nào và nó được xác định bởi vấn đề. Học khơng có giám sát là chủ yếu được

9


sử dụng trong các ứng dụng thuộc lĩnh vực của các vấn đề ước lượng như mơ hình thống kê,
nén, lọc, tách nguồn mù và gom nhóm (clustering). Nó khác với học có giám sát và học
củng cố, trong đó các mạng neural nhân tạo được đưa ra ví dụ duy nhất khơng có nhãn. Điều
này cho thấy, ta sẽ khơng biết đầu ra đạt giá trị gì. Với loại này, thì các neural sẽ phải tự
xoay xở với các dữ liệu mẫu mà nó có được. Mạng phải tự khám phá mẫu, đặc tính, sự
tương quan hay loại đầu vào. Trong khi khám phá những đặc tính này, tham số của mạng sẽ
bị thay đổi. Quá trình này được gọi là tự tổ chức. Một ví dụ điển hình là q trình phân loại
đối tượng khơng có giám sát, những lớp thích hợp được hình thành bằng cách khám phá sự
tương tự và không tương tự trong số các đối tượng. Như vậy với học không giám sát, số lớp
phân loại chưa được biết trước, và tùy theo tiêu chuẩn đánh giá độ tương tự giữa các mẫu
mà ta có thể có các lớp phân loại khác nhau.
Một hình thức phổ biến của việc học khơng có giám sát là gom nhóm (clustering),
nơi chúng ta cố gắng để phân loại dữ liệu trong các cụm khác nhau.
2.1.3. Học tăng cường
Học tăng cường là một kỹ thuật máy học mà bộ thông số của một mạng neural nhân
tạo, dữ liệu thường không được đưa ra, nhưng được tạo ra bởi sự tương tác với mơi trường.
Học tăng cường có liên quan với các mạng thần kinh nhân tạo nên những hành động trong
một mơi trường để tối đa hóa một số khái niệm về “phần thưởng dài hạn”. Trong học tăng
cường, dữ liệu input x thường không được cho trước mà được tạo ra trong quá trình một tác
tử tương tác với môi trường. Tại mỗi thời điểm t, tác tử thực hiện hành động output yt và
môi trường tạo một quan sát input xt và một chi phí tức thời ct, theo một quy trình động nào
đó (thường là khơng được biết). Mục tiêu là tìm một sách lược lựa chọn hành động để cực
tiểu hóa một chi phí dài hạn nào đó, nghĩa là chi phí tích lũy mong đợi. Quy trình động của
mơi trường và chi phí dài hạn cho mỗi sách lược thường không được biết, nhưng có thể ước
lượng được. Mạng neural nhân tạo thường được dùng trong học tăng cường như là một phần
của thuật tốn tồn cục. Các bài tốn thường được giải quyết bằng học tăng cường là các bài
toán điều khiển, trò chơi, và các nhiệm vụ quyết định tuần tự (sequential decision making)

khác.
Nhìn chung, học tăng cường giống là học theo “nhà phê bình” (học theo sự đánh
giá) , ngược lại với học có giám sát là học theo “thầy giáo” (học theo sự hướng dẫn).
10


2.2. Huấn luyện mạng neural
a. Lý thuyết về huấn luyện mạng neural
Để đào tạo một mạng neural, đầu tiên là một bộ đào tạo và một bộ thử nghiệm của
các dữ liệu mẫu từ quy trình này phải được tạo ra. Đào tạo là xây dựng các cặp dữ liệu đầu
vào và đầu ra, được gọi là mẫu. Những mô hình khơng nhất thiết phải duy nhất, đầu ra được
phép có nhiều hơn một đầu vào khác, tuy nhiên, một đầu vào chỉ có thể có một đầu ra riêng
biệt.
Dữ liệu trong các bộ này phải là một mơ hình hóa tốt cho dữ liệu q trình trung bình
và do đó phải được soạn cẩn thận. Điều này có nghĩa rằng cả hai bộ có thể tước bỏ bất kỳ dữ
liệu xấu như các lỗi do trục trặc trong quá trình hay máy móc. Tuy nhiên, điều này khơng có
nghĩa là mạng neural này không thể đào tạo để nhận ra các tính năng này. Nó cũng có thể
được huấn luyện để nhận ra các lỗi này và xác định nguyên nhân có thể xảy ra của chúng.
Sau khi các bộ dữ liệu được kiểm tra, chúng sẽ được đưa vào mạng. Trong thời gian
đào tạo, các trọng số được cập nhật theo cách như vậy mà tổng bình phương của sự khác
biệt giữa giá trị thực tế ngõ ra và ngõ ra của mạng, đã được giảm thiểu.
Trong quá trình đào tạo của tất cả các cặp đầu vào / đầu ra của tập huấn luyện sẽ
được trình bày nhiều lần vào mạng. Số lần tập huấn luyện được trình bày tới mạng được gọi
là số lượng chu trình được sử dụng để huấn luyện mạng.Có bốn phương pháp tiếp cận khác
nhau về cơ bản cho việc huấn luyện mạng neural.
- Phương pháp tiếp cận đầu tiên là hiệu chỉnh lỗi quy tắc huấn luyện, nơi mà lỗi giữa
đầu ra của mạng và đầu ra đo được được sử dụng để hiệu chỉnh trọng số mạng tương thích.
- Một phương pháp tiếp cận thứ hai là huấn luyện Boltzman, nó tương tự như hiệu
chỉnh lỗi huấn luyện, tuy nhiên, đầu ra của một neural được dựa trên một phân bố thống kê
Boltzman.

- Phương pháp thứ ba là huấn luyện Hebbian, nơi huấn luyện được thực hiện cục bộ
bằng cách điều chỉnh trọng số dựa trên các hoạt động của neural.
- Phương pháp thứ tư là huấn luyện cạnh tranh, nơi mà các neuron cạnh tranh theo
cách mà chỉ có một neural sẽ được kích hoạt trong một lặp nhất định.
b. Ví dụ về huấn luyện mạng neural

11


Giả sử chúng ta muốn dạy nơ tron phân biệt chữ A và B. Khi đưa input là A chúng ta
muốn neural cho output là 1, còn khi input là B thì neural phải cho output bằng 0.
Hãy bắt đầu bằng cách cho các trọng số những giá trị ngẫu nhiên, lúc này neural
chưa biết gì hết. Bây giờ hãy input chữ A. Neural sẽ lấy tổng có trọng số của các inputs và
so sánh kết quả với 0. Nếu kết quả dương thì output là 1, âm thì output là 0. Khả năng
neural đốn đúng là 50%, vì các trọng số đang có giá trị hồn tồn ngẫu nhiên. Nếu neural
đốn đúng thì chúng ta khơng cần làm gì cả, nhưng khi neural đốn sai (output bằng 0), thì
chúng ta phải tăng các trọng số của các inputs đang hoạt động (các inputs khác không) lên,
sao cho lần tới tổng có trọng số sẽ vượt quá ngưỡng và tạo nên output là 1.

Ngược lại, khi đưa chữ B vào và neural đốn sai (output bằng 1), thì ta phải giảm các
trọng số của các inputs đang hoạt động xuống, sao cho lần tới tổng có trọng số sẽ nhỏ hơn
ngưỡng và buộc nơ tron phải cho output bằng 0.
Như vậy, khi dạy chữ B thành cơng rồi thì neural có qn đi chữ đã học trước đó là A
khơng? Khơng, vì khi input là các chữ khác nhau thì nhóm các đường inputs đang hoạt động
cũng khác nhau hoặc là khơng hồn tồn trùng nhau. Nhớ là chúng ta chỉ biến đổi trọng số
của các inputs đang hoạt động thôi. Chúng ta chỉ việc lập đi lập lại quá trình dạy như trên
cho tới khi neural học thuộc bài mới thôi.

12



CHƯƠNG III: NHẬN DẠNG KÝ TỰ TRONG MẠNG NEURAL NHÂN TẠO
3.1. Các bước xây dựng nên bài toán
Dưới đây là các bước chính khi tiến hành thiết kế và thực thi mạng neural nhân
tạo cho bài toán nhận dạng ký tự :
Xác định dữ liệu đầu vào, và đầu ra mong muốn để tiến hành huấn luyện cho
mạng neural.
- Đầu vào: Vì báo cáo chỉ tập trung vào nghiên cứu và cài đặt quá trình nhận
dạng ký tự neural, nên các dữ liệu đầu vào phải qua xử lý và đạt chuẩn yêu cầu trước
khi đưa vào nhận dạng.Các yêu cầu dữ liệu đầu vào là các file ảnh dạng văn bản có
định dạng *.bmp, đây là dạng file ảnh chuẩn, có kiểu màu pixel đen và trắng, để việc
tiến hành nhận dạng được chính xác.Các file ảnh này đã qua giai đoạn tiền xử lý : xử
lý ảnh nhiễu, ảnh đa sắc , lọc ảnh...
- Đầu ra mong muốn: là một file text chứa các ký tự Unicode tương ứng mà
chương trình mong muốn huấn luyện mạng học thuộc. Số ký tự đầu ra mong muốn
phải tương ứng với số kí tự ảnh đầu vào cần huấn luyện.
ABCDEFGHIJKMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
+-\?*^@&:<>

Hình 5. Một ví dụ về mẫu các ký tự trong nhận dạng ký tự quang học
3.2. Xác định cấu trúc mạng
- Mạng neural được xây dựng theo phương pháp học có giám sát. Bài toán lựa
chọn mạng Feed-forward 3 lớp với cấu trúc như sau:
+ Số neural lớp đầu vào: 150 noron.
Giải thích: Việc huấn luyện cho mạng học là một vòng lặp duyệt qua lần lượt
các ký tự ảnh giúp mạng neural nhớ và nhận dạng các ký tự ảnh này. Với mỗi vòng
lặp, một ký tự sẽ được đưa vào giảng dạy cho mạng neural học. Trong quá trình này,
mỗi ký tự sẽ được phân tích và chuyển tỉ lệ vào một ma trận nhị phân 15 x 10. Ứng với

mỗi điểm lưới của ma trận sẽ được tuyến tính hóa tạo ra tương ứng với một neural đầu
vào. Vì vậy ma trận sẽ tạo ra 15x10=150 neural đầu vào.
Lưu ý: Việc chọn số lượng neural đầu vào hay nói cách khác việc chọn tỉ lệ ma
trận đầu vào cho kí tự là rất quan trọng.
13


Nếu số lượng neural lớn quá sẽ dẫn đến việc:
1. Nhận dạng những kí tự có font chữ nhỏ hoặc trung bình bị sai hoặc khơng
chính xác.
2. Chương trình viết ra phải duyệt qua rất nhiều vòng lặp dẫn đến chương trình
bị chậm, hoặc gây ra tình trạng bị đứng máy khi chạy.
Nếu số lượng neural quá nhỏ:
- Việc phân tích các kí tự ảnh thơng thường và lớn sẽ dẫn đến sai số lớn, vì vậy,
việc nhận dạng kí tự cũng sẽ thiếu tính chính xác.
- Qua kiểm nghiệm, và dựa trên nhiều tài liệu, nhận thấy giá trị 150 neural đầu
vào là khá phù hợp để nhận dạng với kiểu kí tự ảnh có font chữ trung bình, và phổ
biến. Các kí tự ảnh này có chiều cao trung bình là 70 pixel và chiều rộng khoảng 54
pixel.
- Số neural lớp ẩn: 500 neural. Việc lựa chọn giá trị này dựa trên thực nghiệm
của các tài liệu chuyên về nhận dạng kí tự quang học. Số neural này được quyết định
từ những kết quả tối ưu và giá trị lỗi cơ sở trong quá trình huấn luyện.
- Số neural đầu ra: 16 neural tương ứng với 16 bit nhị phân của mã Unicode.Từ
16 neural này ta tổng hợp và chuyển thành 16 bit nhị phân, sau cùng chuyển thành 1 kí
tự Unicode.
0 hoặc
1

Điểm
ảnh

Điểm
ảnh

0 hoặc
1

Điểm
ảnh

0 hoặc
1

Điểm
ảnh

0 hoặc
1
16 neural
Lớp đầu

150 neural
Lớp đầu vào

ra
500 neural
Lớp ẩn

14



Hình 6. Sơ đồ mạng neural thiết kế
3.3. Thuật tốn huấn luyện mạng
Mạng feed - forward sử dụng giải thuật lan truyền ngược sai số Back
Propagation.
Giải thuật gồm 2 bước :
> Bước 1:
- Lan truyền xuôi đầu vào qua mạng.
Sử dụng các cơng thức:
+ Cơng thức chung tính đầu ra của một noron thứ i tại lớp thứ k:
n

yi = f (  wij x j -bi)
j 0

Với f là hàm chuyển sigmoid lưỡng cực được tính theo cơng thức:
f=

2
1
1  e  t

α: hệ số góc của hàm chuyển
t: biến net-input
bi: hệ số ngưỡng hay độ lệch
Áp dụng đối với mơ hình mạng của chương trình :
- Cơng thức cho đầu ra của một neural thứ i (1250) tại lớp ẩn
n

ai = f (  wij x j -bi)
j 1


Với wij : trọng số tại neural thứ i của lớp ẩn kết nối với đầu vào thứ j của lớp
vào.
x j : giá trị đầu vào của neural thứ j tại lớp vào

bi : giá trị ngưỡng hay độ lệch của neural thứ i của đầu vào
- Công thức cho đầu ra của một noron thứ k (k =116)tại lớp output
n

n

j 1

j 1

yk = f(  wkj a j  bk ) = f [  wkj ( f (

n

w x
ij

j

)]

j 1

> Bước 2 : Lan truyền ngược
Tính tốn sai lệch giữa đầu ra thực và đầu ra mong muốn của neural thứ k tại

đầu ra.
ei = ti- yi
15


Tổng bình phương sai số của mạng ứng với mẫu học (Xs, Ts):
1 p
E =  ( ti- yi) 2
2 k 1

P: số phần tử đầu ra
Nếu E< ε và l+1Thông tin sai số sẽ được lan truyền ngược qua mạng để điều chỉnh lại trọng số
tại vòng lặp l.
- Công thức điều chỉnh trọng số với liên kết giữa neural thứ j trong lớp ẩn và
neural thứ i trong lớp ra tại lần lặp l+1: (l+1wij (l+1) = wij (l) + η.ei(l).yj.f’(yi(l))

Với η: hệ số học
+ ei(l): giá trị sai lệch của noron thứ i trong lớp ra , trong lần dạy (lặp ) thứ l.
1  x2
+ f’: đạo hàm của hàm chuyển lưỡng cực, công thức f’=
.
2

+ η: hệ số học.
yi(l): giá trị đầu ra của neural thứ i trong lớp ra tại vòng lặp thứ l.
yj (l): giá trị đầu ra của neural thứ j trong lớp ẩn tại vòng lặp thứ l.
- Công thức điều chỉnh trọng số với liên kết giữa neural vào thứ j và neural ẩn
thứ i, tại lần lặp thứ l+1 (l+1 < epochs)

m

wij (l+1) = wij (l)+ η.xj.f’(yi).  wki (l  1).ek (l ). f ' ( yk (l ))
k 1

Với:
η: hệ số học
xj : giá trị đầu ra của noron thứ j trong lớp vào.
yi : giá trị đầu ra của noron thứ i trong lớp ẩn.
wki(l+1): trọng số liên kết giữa neural thứ k trong lớp ra và neural thứ i trong
lớp ẩn trong lần lặp thứ l+1.
yk (l) : giá trị đầu ra của neural thứ k trong lớp ra.
> Các tham số sử dụng trong chương trình
Tốc độ học η = 150.
Hệ số góc α Sigmoid = 0.014.
Giá trị ngưỡng hay độ lệch: 30
Số lần dạy 300 - 600 tùy độ phức tạp của từng loại font.
16


Ngưỡng của lỗi = 0.0002.
3.4. Phương pháp và thuật toán nhận dạng ký tự
3.4.1. Xử lý dữ liệu (Phân tích ảnh)
- Q trình phân tích ảnh thực chất là phân tích chuỗi văn bản ảnh thành từng
ký tự một. Việc phân tích này dựa trên việc nhận dạng các pixel màu của ký tự ảnh với
dữ liệu đầu vào đã được xử lý và chuyển thành định dạng *.bmp chỉ có 2 pixel điểm
đen RGB(0,0,0) và điểm trắng RGB(255, 255, 255).
Q trình phân tích ảnh được thực hiện tuần tự như sau:
+ Phân tích văn bản thành từng dịng văn bản .
+ Phân tích từng dịng văn bản thành từng ký tự ảnh một.

a. Tách dịng kí tự
- Việc tách dịng kí tự chính là cơ sở để tiến hành tách từng kí tự một cách dễ
dàng và nhanh chóng.
> Thuật toán:
+ Bắt đầu từ điểm ảnh (x, y) đầu tiên của file ảnh (0,0), gán số dòng đang xét
lines =0;
<> Xác định giới hạn trên của dòng: Quét hết chiều rộng của ảnh, trên cùng một
giá trị y (chạy x<=chiều rộng ảnh, giữ nguyên y).


Nếu gặp một pixel đen thì ghi nhận y chính là tọa độ giới hạn trên của

dịng(top_line). Dừng duyệt x.


Nếu khơng, tiếp tục duyệt.



Nếu khi qt hết chiều rộng của ảnh, vẫn khơng tìm thấy giá trị điểm màu

đen thì reset lại x=0, và tiếp tục duyệt đến dòng tiếp theo (tăng y=y+1).
<> Xác định giới hạn dưới của dòng:


Bắt đầu duyệt từ giới hạn trên (đỉnh ) vừa tìm thấy của dịng (0,top_line).



Tương tự như xác định giới hạn trên, ta duyệt hết chiều rộng của ảnh trên


cùng một giá trị y.


Nếu duyệt hết dịng mà khơng tìm thấy ký tự pixel đen nào thì ghi nhận y-

1 là giới hạn dưới của dịng (bottom_line). Dừng duyệt. Tăng số dịng lên (lines++).


Nếu chưa tìm thấy bottom_line, tiếp tục duyệt đến dòng tiếp theo (tăng y,

reset x=0).

17


<> Bắt đầu từ giới hạn dưới y (bottom_line) vừa tìm thấy sau cùng,lặp lại các
bước a, b để xác định các giới hạn của các dòng tiếp theo, cho đến khi duyệt hết chiều
cao của ảnh thì dừng, quá trình xác định dịng ký tự hồn tất.

Giới hạn trên

Giới hạn dưới

Q
trình
tách
dịng
Ảnh đầu vào


b. Tách từng kí tự
> Thuật tốn:
Xét lần lượt từng dòng
<> Bắt đầu xét từ giá trị giới hạn trên y của dòng (top_line) và giá trị x đầu tiên
(x=0).
<> Xác định giới hạn trên của ký tự: Quét hết chiều rộng của ảnh, trên cùng giá
trị y.


Nếu phát hiện pixel đen thì đánh dấu y là giá trị đỉnh của ký tự

(top_character). Dừng quét.


Nếu quét hết chiều rộng, mà vẫn khơng tìm thấy pixel đen nào thì tăng y

và reset lại x, tiếp tục thực hiện lại bước 2.
<> Xác định giới hạn dưới của ký tự :Bắt đầu duyệt từ giới hạn trên (đỉnh ) vừa
tìm thấy của ký tự (0,top_character).


Tương tự như xác định giới hạn trên, ta duyệt hết chiều rộng của ảnh trên

cùng một giá trị y.


Nếu duyệt hết dịng mà khơng tìm thấy ký tự pixel đen nào thì ghi nhận y-

1 là giới hạn dưới của ký tự (bottom_character). Dừng duyệt.
18





Nếu chưa tìm thấy bottom_character, tiếp tục duyệt đến dịng tiếp theo

(tăng y, reset x=0).
<> Xác định giới hạn trái của ký tự (xác định giá trị của x)
> Bắt đầu từ giới hạn trên (đỉnh của ký tự - top_character), giá trị x đầu tiên
(x=0).
> Quét đến giới hạn dưới của dòng (bottom_character), giữ nguyên x (quét theo
chiều thẳng đứng).


Nếu gặp pixel đen đầu tiên, ghi nhận x là giới hạn trái của kí tự (left-

character). Dừng quét.


Nếu quét đến cuối giới hạn dưới, vẫn khơng tìm thấy pixel đen nào, thì

reset lại y = giới hạn trên vừa tìm thấy, tăng x lên (x++) và tiếp tục thực hiện lại bước
4.
<> Xác định giới hạn phải của ký tự (xác định giá trị x)
> Bắt đầu từ giới hạn trên - đỉnh của ký tự (top_character), giới hạn trái của ký
tự (left_character,top_character). Quét theo chiều thẳng đứng đến giới hạn dưới của
dòng.


Nếu khi quét hết chiều đứng ,mà vẫn khơng gặp được pixel đen nào thì


ghi nhận x-1 là giới hạn phải của ký tự (right_character). Dừng quét.


Nếu gặp pixel đen thì tăng x (x++) và reset lại y = top_character của ký tự

đang xét, để xét đường thẳng đứng tiếp theo.
<> Lặp lại bước 1 đến 5 để xác định giới hạn của ký tự tiếp theo trên cùng
dòng. Với y = top_line của dòng đang xét và giá trị x đầu tiên = right_character của ký
tự vừa tìm thấy.

19


Sau khi
tách ký
tự

3.4.2. Xác định giới hạn chính xác cho từng ký tự
Trong một số trường hợp, việc tách ký tự chưa thực sự chính xác (giống như ví
dụ trên ). Ta cần xác định lại một lần nữa giới hạn chính xác cho từng ký tự.
Thuật tốn:
Xét từng ký tự:
Xác định đỉnh ký tự:
- Bắt đầu từ đỉnh của ký tự tạm thời,và giới hạn trái của ký tự vừa xác định ở
trên( left_character,top_character). Quét đến giới hạn phải của ký tự, giữ nguyên y.
+ Nếu tìm thấy pixel đen thì chọn lại y là giới hạn đỉnh của ký tự
(top_character=y). Dừng quét.
+ Nếu không, xét điểm tiếp theo.
+ Nếu khơng tìm thấy pixel đen nào thì tăng y (y++), reset lại x.(x=

left_character). Thực hiện lại bước 1.
20


Xác định giới hạn dưới của ký tự:
- Bắt đầu từ giới hạn dưới hiện thời của ký tự (được xác định ở trên –phần 1.2 ),
và giới hạn trái của ký tự (left_character, bottom_character). Quét x đến giới hạn phải
của ký tự, trên cùng giá trị y .
+ Nếu tìm thấy pixel đen, đánh dấu y là giới hạn dưới của ký tự
( bottom_character = y). Ngừng quét.
+ Nếu khơng tìm thấy pixel đen nào, thì reset lại x (= left character ), giảm y
(y--). Thực hiện lại bước 2.
Giới hạn trên

Xác
định
giới hạn

Giới hạn dưới

3.4.3. Ánh xạ ký tự ảnh vào ma trận giá trị
Sau khi tách, ký tự ảnh sẽ được ánh xạ vào ma trận 2 chiều, có kích thước 15 x
10. Vì các ký tự ảnh dù đã chuẩn hóa, chọn lọc nhưng sau khi tách đều có kích thước
khá lớn so với ma trận ( khoảng 58 x 74), nên các ký tự ảnh này đều phải qua 1 bước
chuyển đổi tỉ lệ trước khi chuyển giá trị vào ma trận nhị phân 15 x 10.


Lưu ý: Việc chuyển đổi tỉ lệ này là một trong những nguyên nhân gây ra

sai số dẫn đến nhận dạng ký tự bị sai.

Thuật toán: ánh xạ ký tự ảnh vào ma trận pixel ảnh.
a. Xét chiều rộng
- Ánh xạ điểm đầu và điểm cuối của ký tự ảnh tương ứng với giá trị đầu và cuối
của ma trận.
- Khởi tạo với 10 phần tử tương ứng.
- Ánh xạ tọa độ điểm đầu (0, y) và điểm cuối (width, y) của ảnh kí tự tương ứng
với giá trị đầu (0, y) và giá trị cuối (10, y) của ma trận.

21


×