Một số ký dụng thường thấy trong ngôn ngữ: • AdavàVHDLgói những số thập lục phân dùng gốc của hệ, điểm chỉ bằng con số biểu đạt gốc, chẳng hạn "16#5A3#".. • Một số phiên bảnBASIC, đặc bi
Trang 1Hệ thập lục phân
Trang 2Mục lục
1.1 Từ nguyên 1
1.1.1 Anh ngữ 1
1.2 Biểu thị số thập lục phân 1
1.3 Ứng dụng 2
1.4 Phân số 3
1.5 Hài hước 3
1.6 Triển khai sang hệ nhị phân 3
1.7 Đổi gốc từ các hệ số khác 4
1.7.1 Phép chia lấy số dư trong cơ số nguồn 4
1.7.2 Phép cộng và tính nhân trong hệ thập lục phân 4
1.7.3 Phép đổi thông qua hệ nhị phân 4
1.8 Hệ thập lục phân trong con mắt của giới báo chí và phim ảnh 5
1.9 Xem thêm 5
1.10 am khảo 5
1.11 Liên kết ngoài 5
2 Học tăng cường 6 2.1 Các thuật toán 6
2.2 Nghiên cứu hiện tại 7
2.3 am khảo 7
2.4 Liên kết ngoài 8
2.5 Nguồn, người đóng góp, và giấy phép cho văn bản và hình ảnh 9
2.5.1 Văn bản 9
2.5.2 Hình ảnh 9
2.5.3 Giấy phép nội dung 9
i
Trang 3Chương 1
Hệ thập lục phân
Trong toán học và trong khoa học điện toán, hệ
thập lục phân (hay hệ đếm cơ số 16, tiếng Anh:
hexadecimal), hoặc chỉ đơn thuần gọi là thập lục, là
mộthệ đếmcó 16 ký tự, từ 0 đến 9 và A đến F (chữ
hoa và chữ thường như nhau) Hệ thống thập lục phân
hiện dùng, được công tyIBMgiới thiệu với thế giới điện
toán vào năm 1963 Một phiên bản cũ của hệ thống này,
dùng các con số từ 0 đến 9, và các con chữ A đến F, đã
được sử dụng trong máy tínhBendix G-15, ra mắt năm
1956
Ví dụ, số thập phân 79, với biểu thị nhị phân là
01001111, có thể được viết thành 4F trong hệ thập lục
phân (4 = 0100, F = 1111)
Chú ý trong bảng sau: hex = thập lục phân
dec = thập phân
oct = bát phân
1.1 Từ nguyên
1.1.1 Anh ngữ
Chính IBM đã lựa chọn tiền tố hexa, thay vì sexa của
tiếng Latinh Cái tên hexadecimal là một cái tên xa lạ,
vì hexa nguyên có gốc từ hexi (έξι) trongtiếng Hy Lạp
và có nghĩa là “sáu”, còn decimal lại có gốc Latinh và có
nghĩa là “mười” Có thể hexa cũng đã được lấy từ tiếng
Latinh, song chữ deka của Hy Lạp lại gần với chữ decem
của Latinh hơn, nên có một số ý kiến cho rằng cách
đặt tên này có sự bất nhất nào đấy Một từ cổ hơn nữa
là sexidecimal nghe có vẻ Latinh nhưng không đúng
(từ Latinh đúng là sedecim, có nghĩa là 16) Từ này đã
được đổi vì một số người cho rằng việc dùng từ này
là quá mạo hiểm, vì từ này còn có một nghĩa khác là
“gốc 60” Tuy vậy, chữ sexagesimal (gốc 60) vẫn còn
giữ lại được nhóm tiền tố của nó Trong tài liệu trước
đây của máy tính Bendix, từ sexadecimal cũng có được
dùng đến ÔngSteven Schwartzmancó ghi lại: “Vì từ
hexadecimal là một từ tương đối dài, nên nhiều khi nó
được viết tắt là hex" Từ hexadecimal - thập lục phân
- là một từ bất thường, vì nó là từ ghép bởi tiết tố của
hai thứ tiếng Latinh và Hy Lạp Từ nguyên gốc Latinh
phải là sexadecimal, song những kẻ tấn công máy tính
(computer hackers), có thể bị gợi ý và dẫn dụ bằng từ này mà gọi tắt nó thành sex Giáo sư và nhà khoa học
máy tínhDonald Knuthcó chỉ ra rằng theo đúng nghĩa
của từ thì tên của nó phải là senidenary, một từ gốc Latinh với nghĩa là “nhóm 16” Những từ binary (nhị phân), ternary (tam phân) và quaternary (tứ phân) đều
được tổ hợp từ gốc Latinh cả, và theo đúng nghĩa thì từ
decimal (thập phân) đáng ra phải là denary (hệ mười).
Mấy năm trước đây, một hệ thống các ký tự khác của
hệ thập lục phân, rõ ràng, không nhập nhèm, đã được
đề cử (Cf Hexadecimal time)
1.2 Biểu thị số thập lục phân
Một vài con số thập lục phân hầu như hoàn toàn giống với những con số tronghệ thập phân(kể cả đối với con người và máy vi tính) Vì thế mà chúng thường được
ký hiệu theo một quy tắc nhất định
Dưới dạng in ấn, ký hiệu của hệ thường được chỉ định bởi một hậu tố, chẳng hạn 5A316, 5A3SIXTEEN, hoặc 5A3HEX
Trong cácngôn ngữ lập trìnhcho máy vi tính - hầu như luôn luôn dùngvăn bản đơn thuần(plain text), không
hề có sự phân biệt về chữ viết trên, hoặc chữ viết dưới như trong in ấn - rất nhiều cách để đánh dấu số hệ thập lục phân đã xuất hiện Những cách đánh dấu này còn được thấy trong chữ in, đặc biệt là những nội dung có liên quan đến một ngôn ngữ lập trình
Một số ký dụng thường thấy trong ngôn ngữ:
• AdavàVHDLgói những số thập lục phân dùng gốc của hệ, điểm chỉ bằng con số biểu đạt gốc,
chẳng hạn "16#5A3#" (Chú ý: Ada chấp nhận
phương thức ký dụng này cho các hệ, từnhị phân
cho đến thập lục phân, cho cả hai loạisố nguyên
(integer) vàsố thực(real)).
• Cvà những ngôn ngữ lập trình có ngữ pháp tương ứng (nhưC++,C#,JavavàJavascript) dùng tiền tố
“0x” cho các số thập lục phân, chẳng hạn “0x5A3”
Số không (0) dẫn đầu được dùng đểbộ thanh lọc
mã(parser) có thể trực tiếp nhận biết một con số,
1
Trang 42 CHƯƠNG 1 HỆ THẬP LỤC PHÂN
trong khi chữ “x” đại biểu cho chữ hexadecimal
(thập lục phân) - (đối chiếu với 0 đại diện cho
bát phân(octal)) Chữ “x” trong tiền tố “0x” có
thể được viết hoa (0X) hoặc viết thường (0x), song
thường thấy được viết thường
• Cácshellcủa*nix(phần mềm dùng để thao tác các
mệnh lệnh với máy tính, trong các hệ điều hành
tương tự như UNIX) dùngmã escapebằng tổ hợp
ký tự "\x0FF” trong các biểu thức (expression), và
dùng “0xFF” đối với các hằng số (constant).
• Trong HTML, những ký hiệu hệ thập lục phân
cũng được biểu thị với cách dùng chữ “x": ֣
sẽ tương đương như ֣ – với trình duyệt
webcủa bạn và ֣ theo thứ tự; (dấu trong
tiếng HebrewHebrew accent munah) Các mã chỉ
định màu sắc dùng hệ thập lục phân thường được
biểu đạt với tiền tố "#", chẳng hạn "#FFFFFF” (màu
trắng)
• Một vàingôn ngữ assemblychỉ định thập lục phân
bằng cách cho thêm chữ “h” vào đuôi (nếu con số
bắt đầu bằng một chữ, đồng thời đứng sau một con
số 0, chỉ định rằng nó là một con số), chẳng hạn
“0A3Ch”, “5A3h”
• Postscript chỉ định thập lục phân dùng tiền tố
“16#"
• Common Lispdùng tiền tố "#x” hoặc "#16r”
• Pascal, và các assembler khác (AT&T,Motorola),
và một vài phiên bản BASIC dùng tiền tố "$",
chẳng hạn "$5A3”
• Ngôn ngữ lập trìnhSmalltalkdùng tiền tố “16r”
Chú ý Smalltalk còn chấp nhận biểu thức <gốc hệ
số>r<dãy các con số> - gốc hệ số là một số từ 2
trở lên (ví dụ: 2r1110 bằng 10r14 hoặc 16rE), với
sự hạn chế trên thực tiễn vì các ký tự và con số
đều nằm trong các ký tự của bộASCII, 0-9 và A-Z
Một số phiên bản của Smalltalk cho phép các con
số thập phân đứng sau dấu chấm ".” biểu đạt số
chấm động thập lục phân (floating point number)
(và các gốc hệ số khác nữa)
• Một số phiên bảnBASIC, đặc biệt là những ngôn
ngữ là biến thể của nó do Microsotạo ra như
QBasicvàVisual Basic, các tiền tố để biểu đạt số
thuộc hệ thập lục phân, như "&H”, ví dụ: "&H5A3";
những cái khác như BBC BASIC chỉ dùng "&"
(được dùng để biểu đạthệ bát phân(octal) trong
BASIC củaMicroso)
• Những ký hiệu như X'5A3' cũng đôi khi được thấy;
PL/Idùng ký hiệu như vậy
• Donald Knuthgiới thiệu cách dùng các loại chữ
khác nhau để biểu diễn cơ số của hệ đếm trong
sách của ông e TeXbook Trong hệ thống ký
hiệu của ông, số thập lục phân được biểu đạt bằng
những dòng chữ kiểu chữ đánh máy (typewriter
type), ví dụ: 5A3
Một bảng cửu chương thập lục phân
Vì không có một quy định thống nhất nào nên tất cả những quy ước trên đều được dùng, đôi khi, ngay cả trong cùng một bài viết Song vì quy ước của chúng khá rõ ràng và biệt lập nên ít khi có những trắc trở xảy ra
Ký hiệu thường dùng (và thường gặp) nhất là tiền tố
“0x” hoặc ký hiệu viết số 16 xuống dưới
(subscript-based), đều chỉ số thập lục phân Chẳng hạn cả hai số
0x2BAD và 2BAD16đều cùng đại diện cho sốthập phân
11181 (hoặc 1118110)
Trong những thời kỳ đầu của lịch sử máy tính, sự lựa
chọn những con chữ từ A đến F để thay thế cho những
con số tiếp theo, chưa được chấp nhận trên toàn thế giới Trong những năm sau 1950, một số công trình cài đặt máy tính, ưa lựa chọn cách dùng các số từ 0 đến 5,
cùng với một cơ cấu mã (macron), để biểu thị giá trị từ
10 đến 15 Những người dùng máy tínhBendixthì lại dùng chữ “U” đến chữ “Z”
1.3 Ứng dụng
Hệ thập lục phân được dùng phổ biến trong lập trình
HTMLvàCSS(tạm dịch là Chương mục định hình tuần tự) Những lập trình này dùngbộ tam kết thập lục phân
(hex triplet) biểu thị màu sắc trong các trang web, bắt
đầu bằng một dấu "#" Dấu này còn được dùng để biểu thị các số thập lục phân nửa Khi biểu thị màu sắc với
24bit, công thức #RRGGBB ("Đỏ, Vàng, Xanh”) được
dùng để thể hiện Trong công thức này, “RR” (tiếng Anh là “Red Red”) biểu thị phân hợp màu đỏ, “GG” (“Green Green”) biểu thị phân hợp màu vàng (đáng ra phải gọi là màu xanh lá cây, song gọi là vàng để phân biệt với phân hợp tiếp theo, màu xanh lam), và “BB” (“Blue Blue”) biểu thị phân hợp màu xanh (lam) của tổ hợp tam phần, đại diện cho sắc độ của một màu Lấy ví
Trang 51.6 TRIỂN KHAI SANG HỆ NHỊ PHÂN 3
dụ, một dáng màu đỏ với giá trị thập phân (238, 9, 63)
được mã hóa sang hệ thập lục phân là #EE093F Công
thức này được sao chép từ tổ chức màu sắc tronghệ
thống cửa sổ X(X Window System).
Hệ thập phân còn được dùng trong kỹ thuật máy tính
trên nhiều khía cạnh chung chung khác, và là một
phương pháp thông thường nhất để biểu đạt giá trị của
mộtbyte, dùng dãy các ký tự (string), mà con người ai
cũng có thể đọc được Tất cả các giá trị của một byte
(bao gồm 256 giá trị) đều có thể được biểu thị bằng hệ
thập lục phân Một số người cho rằng phương pháp
dùng hệASCII8-bit, để biểu thị giá trị, là một phương
pháp khả thi, song phương pháp này không toàn diện,
vì hệ ASCII còn bao gồm những ký tự không in được
(còn gọi là cácký tự điều khiển(control characters)),
không thích hợp cho mục đích
Trong các dòng liên kết nốiURL, những chữ đặc biệt
có thể được biểu thị bằng cách dùng mã thập lục phân,
dẫn đầu bằngdấu phần trăm(%), chẳng hạnhttp://vi
wikipedia.org/wiki/Trang%20Ch%C3%ADnh
Công thức quy định cách viết địa chỉIPv6, đại diện mỗi
nhóm số gồm 16 bit, bằng những số thập lục phân, hòng
làm cho việc đọc, và sao chép các địa chỉ dài 128-bit
được dễ dàng hơn
1.4 Phân số
Tương tự như các hệ đếm khác, hệ thập lục phân cũng
có thể dùng để biểu thịphân số(vulgar fraction), song
chu kỳ thập phân tái diễn (recurring digits) thường xảy
ra, do số 16 chỉ có một thừa số nguyên tố:
Do cơ số 16 là bình phương của 4 (4²), phân số thập lục
phân có chu kỳ lặp lại cá biệt, xảy ra nhiều lần hơn, so
với những số thập phân Chu kỳ thập phân xảy ra khi
mẫu số, với thừa số thấp nhất (denominator in lowest
terms), có mộtthừa số nguyên tốkhông thấy ở trong
hàng cơ số Trong trường hợp số thập lục phân, tất cả
những phân số có mẫu số không phải là tích của một
số mũ 2, sẽ tạo nên một chu kỳ thập phân tái diễn
1.5 Hài hước
Hệ thập lục phân đôi khi được dùng trong các trò đùa
cợt của các lập trình viên, vì một số từ có thể được
tạo dựng bằng các con số thập lục phân Một số từ
này trong tiếng Anh là “dead” (chết), “bee” (thịt bò),
“babe” (người yêu bé bỏng) và, với những thế tự phù
hợp, từ “c0ffee” (cà phê).Trang nàylà một ví dụ điển
hình những trò đùa cợt này Do khả năng dễ nhận
biết của những từ sắp xếp kiểu này, kiểm duyệt cài
đặt (debugging setup) thường dùng chúng để ráp giá trị
khởi đầu cho những tiểu tiết trong bộ nhớ, giúp các lập
trình viên tìm ra những tiểu tiết chưa được ráp giá trị
khởi đầu (not initialised) Một số người thêm chữ “H”
vào đằng sau một con số để biểu thị con số ấy là một
số thập lục phân y luật này cũng đôi khi được dùng trong ngữ pháp của ngôn ngữ lập trình assembly cổ của Intel Với đuôi “H”, người ta có thể viết những từ và câu mới, chẳng hạn 1517ADEADB17CH
Một ví dụ nữa là consố ma(magic number) trong các
tiệp của hệ thống phân bổ FAT Mach-O và các chương trình Java, con số đó là “CAFEBABE” (cô bé quán cà phê)
Cáingân phiếu của Knuthcó giá trị là một đô la trong
hệ thập lục phân (256 xu = 162), tức là $2.56
Bảng liệt kê sau đây chính là một trò đùa với hệ thập lục phân:
3x12=36 2x12=24 1x12=12 0x12=18
Ba hàng đầu tiên là tích của số 12, trong khi hàng cuối cùng “0x12” trong thập lục phân lại là 18
Giá trị0xdeadbeef(“ox dead bee” - trâu chết [thành] thịt bò) đôi khi được gài vào bộ nhớ chưa được ráp giá
trị khởi đầu (uninitialized memory).
1.6 Triển khai sang hệ nhị phân
Khi làm việc với máy vi tính, chúng ta thường phải xử
lý dữ liệunhị phân, song xử lý con số trong hệ thập lục phân lại dễ dàng hơn so với hệ nhị phân (toàn số chỉ có
0 và 1) rất nhiều Trong khi chúng ta thông thuộc với
hệ thập phân hơn các hệ cơ số khác, việc biến đổi số
từ hệ nhị phân sang hệ thập lục phân lại dễ hơn là việc biến chúng sang hệ thập phân, vì mỗi một số thập lục phân tương đương với 4 bit nhị phân (410)
Hãy thử cân nhắc việc biến đổi số 11112sang hệ thập phân Vì mỗivị trícủa một con số tronghệ nhị phân
(cơ số 2) chỉ cho phép giá trị 0 hay 1 mà thôi, việc định giá trị của con số tại vị trí ấy, tính từ bên phải, là một việc tương đối dễ dàng:
• 00012= 110
• 00102= 210
• 01002= 410
• 10002= 810
Vì vậy:
Đây là một con tính đơn giản, nhưng cũng đã đòi hỏi bốn tính cộng, trong khi với một chút luyện tập, 11112
có thể được chuyển thẳng sang F16 mà chỉ cần một phép tính (xemBiểu thị số thập lục phân) Khi số nhị
Trang 64 CHƯƠNG 1 HỆ THẬP LỤC PHÂN
phân là một số lớn, việc đổi chúng sang số thập phân
là một việc dài dòng, tẻ nhạt Khi đổi số nhị phân sang
thập lục phân, chúng ta chỉ đơn giản chia nhóm các con
số thành những nhóm 4, chuyển mỗi nhóm 4 này thành
một số thập lục phân, giữ nguyên vị trí tương ứng của
nhóm Ví dụ sau đây chứng tỏ việc chuyển nhị phân
sang thập phân dài dòng như thế nào:
So sánh ví dụ trên với việc chuyển cùng con số sang hệ
thập lục phân:
Chúng ta cũng có thể đổi thẳng từ hệ thập lục phân
quay trở lại nhị phân như ví dụ trên
Dùngsố bát phân cũng là một cách hữu dụng để xử
lý dữ liệu trong máy vi tính (nhóm 3 bit thay vì nhóm
4); song, cái lợi lớn nhất của thập lục phân so với bát
phân là, để biểu thị một byte (octet), chúng ta chỉ cần
đúng hai con số thập lục phân là đủ Điều này có nghĩa
là nếu chúng ta có giá trị của một word (thường là 4
byte), việc nhận ra giá trị riêng của từng byte một là
một việc khá dễ dàng; ngược lại, nếu chúng ta có giá trị
của từng byte một, chúng ta cũng có thể dễ dàng ráp
chúng lại thành một word
1.7 Đổi gốc từ các hệ số khác
1.7.1 Phép chia lấy số dư trong cơ số
nguồn
Phương pháp đổi một số sang hệ thập lục phân được
thực hiện tương tự như phương pháp được áp dụng cho
cáchệ cơ sốkhác, bằng cách sử dụng phép chia lấy số
nguyên và số dư trong hệ cơ số nguồn Trên lý thuyết,
phương pháp này có thể áp dụng được với bất cứ (một
cặp) hệ cơ số nào Song nói chung theo thói quen sử
dụng của con người và trong kỹ thuậtmáy tính, phương
pháp này được áp dụng với hệ thập phân và nhị phân
(Đối với hệ nhị phân, người ta còn có những phương
pháp nhanh gọn hơn nữa.)
Chẳng hạn, nếu lấy d là số thập phân cần phải được đổi,
thì dãy số hh₋₁…h2h1là những con số để biểu diễn số
ở hệ thập lục phân tương ứng Với cách tính dãy h như
sau:
1 H:= d mod 16
(“mod” (modulus (tiếng
Anh)):phép chia lấy dư,
thực hiện phép chia số
nguyên và lấy kết quả
là số dư - chẳng hạn 17
mod 5 = 2 vì 17/5 = 3, dư
2.)
2 D := d −h i
16
3 Nếu d == 0 thì kết quả là dãy số
h); nếu không, quay trở lại bước 1
Phần sau đây giới thiệu chu trình của thuật toán trên, lập trình bằng ngôn ngữJavaScript, dùng để biến bất
cứ một số thập phân nào sang hệ thập lục phân, kết quả trả về là một string (dãy các ký tự) Mục đích của
ví dụ là minh họa chu trình của thuật toán (có thể dựa vào đấy để áp dụng cho các công dụng xử lý khác) Để
áp dụng thuật toán này với dữ liệu cụ thể, có thể dùng các toán tử trongphép toán thao tác bit
function toHex(d) { /* biến đổi sang hệ thập lục phân */ var r = d % 16; if(d-r==0) {return toChar(r);} else {return toHex((d-r)/16)+toChar(r);} } function toChar(n) { /* biến đổi số nguyên sang ký tự có thể đọc và in được */ var alpha = “0123456789ABCDEF"; return alpha.charAt(n); }
Cần lưu ý rằng cơ số “16” dùng ở trên có thể được thay thế bằng bất cứ cơ số nào (chẳng hạn hệ nhị phân (2), tam phân (3), bát phân (8) v.v ) Sau đây là thủ tục được minh họa bằng ngôn ngữC++để in ra một số ở hệ bất
kì tương ứng với một số thập phân nhận vào
const alpha = “0123456789ABCDEF"; void printinbase(long d, short b) { // in ra số ở hệ cơ
số b tương ứng với số thập phân d) short r=d%b; if (d-r) printinbase(d/b,b); cout << alpha[r]; }
1.7.2 Phép cộng và tính nhân trong hệ thập
lục phân
Chúng ta có thể biến đổi bằng cách phân giải giá trị của
vị trí của từng con số (hàng đơn vị, hàng chục, hàng trăm trong hệ thập phân chẳng hạn), rồi biến mỗi giá trị ấy sang giá trị tương ứng của hệ thập lục phân, sau
đó làm phép cộng hay nhân trên con số ấy để được kết quả trong hệ thập lục phân (khi làm tính nhân, nên
có sẵn một bảng cửu chương trong hệ tương ứng (thập lục phân) để dễ đối chiếu - vì đa số chỉ biết bảng cửu chương trong hệ thập phân mà thôi) (Number system
- Computer Methods in Chemical Engineering)
Ví dụ: 12310+ 45610
10010+ 2010+ 310+ 40010+ 5010+ 610 - hay 6416+ 1416+ 316+ 19016+ 3216+ 616 - 1F416+ 4616+ 91611 (Nhớ) - 1F416
50010+ 4616+ 7010916910 - - 2431657910
1.7.3 Phép đổi thông qua hệ nhị phân
Vì máy vi tính nói chung dùng hệ nhị phân, nên phương pháp đổi của máy thường là thông qua hệ nhị phân trước đã, sau đó dùng sự thông nối trực tiếp giữa thập lục phân và nhị phân, mà đổi sang hệ thập lục phân
Trang 71.11 LIÊN KẾT NGOÀI 5
1.8 Hệ thập lục phân trong con mắt
của giới báo chí và phim ảnh
Trong bộ phim hoạt họa nhiều tậpe Simpsons, tập có
tựa đềTreehouse of Horror VI(Ngôi nhà kinh dị trên
cây VI), nhân vật Homer lọt vào tầng không gian thứ 3,
(Homer³), một dãy các số thập lục phân (46 72 69 6e 6b
20 52 75 6c 65 73 21) bồng bềnh trên không tại “vùng đất
của không gian 3 chiều " (3-D land) Đối chiếu những
giá trị thập lục phân này trong bảnASCIIcho chúng ta
các con chữ mà khi ghép lại, nó biến thành một dòng
chữ tiếng Anh “Frink rules!" (ngoại trừ hai dấu ngoặc
kép mà thôi) - nghĩa là “Frink trị vì!" hoặc “Frink là
vua”
Trong chương trình TVReBoot, có một nhân vật với
cái tên Hexadecimal (hệ thập lục phân)
1.9 Xem thêm
• Số Hex
• Hệ thập phân
• Hệ nhị phân
1.10 Tham khảo
1.11 Liên kết ngoài
• Intuitor Hex Headquarters- Trang đặc biệt dành
cho việc khuyến cáo, đổi hệ số thập phân truyền
thống sang hệ thập lục phân
• Các phương pháp biến đổi đơn giản
• Leet Key, một phần lắp ráp phụ của Firefox hỗ trợ
việc biến đổi, cùng việc đánh máy chữ, giữa ASCII
và số thập lục phân
• Bits of Meaning (pd)- Giới thiệu vềsố học điện
toántrong máyBendix G-15củaIBM
• Hexadecimal basics- Căn bản về số thập lục phân
• Hexadecimal Numbers Guide- Hướng dẫn về số
thập lục phân
• Hexadecimal Colors- Biểu đạt màu sắc dùng hệ
thập lục phân
Trang 8Chương 2
Học tăng cường
Trong ngànhkhoa học máy tính, học tăng cường (tiếng
Anh: reinforcement learning) là một lĩnh vực con của
học máy, nghiên cứu cách thức một agent trong một
môi trường nên chọn thực hiện các hành động nào để
cực đại hóa một khoản thưởng (reward) nào đó về lâu
dài Các thuật toán học tăng cường cố gắng tìm một
chiến lược ánh xạ các trạng thái của thế giới tới các
hành động mà agent nên chọn trong các trạng thái đó
Môi trường thường được biểu diễn dưới dạng mộtquá
trình quyết định Markovtrạng thái hữu hạn (Markov
decision process - MDP), và các thuật toán học tăng
cường cho ngữ cảnh này có liên quan nhiều đến các kỹ
thuậtquy hoạch động Các xác suất chuyển trạng thái
và các xác suất thu lợi trong MDP thường là ngẫu nhiên
nhưng lại tĩnh trong quá trình của bài toán (stationary
over the course of the problem).
Khác vớihọc có giám sát, trong học tăng cường không
có các cặp dữ liệu vào/kết quả đúng, các hành động gần
tối ưu cũng không được đánh giá đúng sai một cách
tường minh Hơn nữa, ở đây hoạt động trực tuyến
(on-line performance) được quan tâm, trong đó có việc tìm
kiếm một sụ cân bằng giữa khám phá (lãnh thổ chưa
lập bản đồ) và khai thác (tri thức hiện có) Trong học
tăng cường, sự được và mất giữa khám phá và khai thác
đã được nghiên cứu chủ yếu qua bài toánmulti-armed
bandit
Một cách hình thức, mô hình học tăng cường bao gồm:
1 S: tập các trạng thái của môi trường;
2 A: tập các hành động; và
3 R : tập các khoản “thưởng” với giá trị vô hướng
Tại mỗi thời điểm t, agent thấy được trạng thái của nó
là s ∈ S và tập các hành động có thể A(s) Nó chọn
một hành động a ∈ A(s) và nhận được từ môi trường
trạng thái mới s₊₁ và một khoản thưởng r₊₁ Dựa trên
các tương tác này, agent học tăng cường phải phát triển
một chiến lược π:S → A có tác dụng cực đại hóa lượng
R=r0+r1+…+r với các MDP có một trạng thái kết thúc,
hoặc lượng R=Σγ t r với các MDP không có trạng thái
kết thúc (trong đó γ là một hệ số giảm khoản “thưởng
trong tương lai” nào đó, với giá trị trong khoảng 0.0 và
1.0)
Do đó, học tăng cường đặc biệt thích hợp cho các bài toán có sự được mất giữa các khoản thưởng ngắn hạn
và dài hạn Học tăng cường đã được áp dụng thành công cho nhiều bài toán, trong đó cóđiều khiển robot, điều vận thang máy,viễn thông, các trò chơibackgammon
vàcờ vua
2.1 Các thuật toán
Sau khi ta đã định nghĩa được một hàm trả về thích hợp cần được cực đại hóa, ta cần chỉ rõ thuật toán sẽ được
sử dụng để tìm chiến lược thu được kết quả trả về cao nhất Có hai cách tiếp cận chính, cách tiếp cận hàm giá trị và cách tiếp cận trực tiếp
Cách tiếp cận trực tiếp dẫn đến hai bước sau đây:
1 Với mỗi chiến lược có thể, lấy mẫu các kết quả trong khi thực hiện chiến lược đó
2 Chọn chiến lược có kết quả trả về kỳ vọng cao nhất
Một vấn đề với cách tiếp cận này là số chiến lược có thể cực kỳ lớn, hoặc thậm chí vô hạn Một vấn đề khác
là các giá trị trả về có thể ngẫu nhiên, khi đó sẽ cần đến một lượng lớn các mẫu để có thể ước lượng chính xác kết quả trả về của mỗi chiến lược Cách tiếp cận trực tiếp là cơ sở cho các thuật toán dùng trong ngành
Robotic tiến hóa Các vấn đề của cách tiếp cận trực tiếp có thể được làm giảm nhẹ nếu ta giả thiết một cấu trúc nào đó trong bài toán và bằng cách nào đó cho phép các mẫu thu được
từ một chiến lược này có thể được ảnh hưởng tới các ước lượng cho một chiến lược khác Cách tiếp cận hàm giá trị thực hiện điều này bằng cách chỉ giữ một tập các ước lượng về các giá trị trả về của một chiến lược π (thường là chiến lược hiện tại hoặc chiến lược tối ưu) Trong các cách tiếp cận như vậy, người ta cố gắng ước lượng một trong hai hàm: giá trị trả về nếu xuất phát
từ trạng thái s và theo chiến lược π như sau,
V (s) = E[R|s,π],
6
Trang 92.2 NGHIÊN CỨU HIỆN TẠI 7
hoặc giá trị trả về kỳ vọng khi thực hiện hành động a
trong trạng thái s và theo chiến lược π nghĩa là,
Q(s,a) = E[R|s,π],
Nếu có sẵn chiến lược tối ưu Q, ta luôn có thể chọn các
hành động tối ưu đơn giản bằng cách tại mỗi trạng thái
chọn hành động với giá trị cao nhất Để thực hiện được
điều này với V, ta phải có một mô hình môi trường, dưới
dạng các xác suất P(s’|s,a), cho phép tính Q bằng công
thức
Q(s, a) =∑
s ′
V (s ′ )P (s ′ |s, a),
hoặc ta có thể sử dụng các phương pháp Actor-Critic,
trong đó mô hình được chia làm hai phần: phần critic
giữ ước lượng giá trị trạng thái V, và phần actor có trách
nhiệm chọn các hành động thích hợp với mỗi trạng
thái
Cho trước một chiến lược cố định π, việc ước lượng
E[R|.] đối với γ=0 là đơn giản, do ta chỉ phải lấy trung
bình của các khoản thưởng trực tiếp Cách dễ thấy nhất
để thực hiện việc này với γ>0 là lấy trung bình của
tổng trả về sau mỗi trạng thái Tuy nhiên, kiểu lấy mẫu
Monte Carlo đòi hỏi MPD phải kết thúc
Do đó, nói chung việc ước lượng γ > 0 không dễ ực
ra, việc này lại khá đơn giản khi ta nhận ra rằng giá trị
kỳ vọng của R tạo nên mộtphương trình Bellmanđệ
quy: E[R |s t ] = r t + γE[R |s t+1]
Bằng cách thay thế các giá trị kỳ vọng trên bằng các
ước lượng của ta, V, và thực hiện thuật toángradient
descentvới hàm chi phí lỗi bình phương, ta thu được
TD(0) - thuật toán họctemporal difference learning
Trong trường hợp đơn giản nhất, tập hợp các trạng thái
và hành động đều là rời rạc và ta giữ các ước lượng
dạng bản cho mỗi trạng thái Các phương pháp cặp đôi
trạng thái-hành động làSARSAvàQ-Learning Tất cả
các phương pháp đều có các mở rộng mà nhờ đó một
kiến trúc xấp xỉ nào đó được sử dụng, mặc dù trong một
số trường hợp, sựhội tụkhông được đảm bảo sẽ xảy
ra Các ước lượng thường được cập nhật bởi một dạng
gradient descent, tuy rằng gần đây đã có các phương
phápbình phương tối thiểucho các trường hợp xấp xỉ
tuyến tính
Các phương pháp trên không những đều hội tụ về các
ước lượng đúng cho một chiến lược cố định, và còn có
thể được dùng để tìm chiến lược tối ưu Việc này thường
được thực hiện bằng cách theo một chiến lược π được
rút ra từ các ước lượng hiện tại, nghĩa là bằng cách hầu
như luôn luôn chọn hành động với lượng giá cao nhất,
và thỉnh thoảng chọn các hành động ngẫu nhiên để
khám phá không gian Các chứng minh cho sự hội tụ
tới chiến lược tối ưu cũng tồn tại đối với các thuật toán
nói đến ở trênvới một số điều kiện nhất định Tuy nhiên
tất cả các chứng minh này chỉ chứng tỏ sự hội tụ tiệm
cận, và về lý thuyết người ta còn biết rất ít về hành
vi của các thuật toán học tăng cường trong trường hợp
mẫu nhỏ, ngoại trừ trong các điều kiện tham số (seing)
rất hạn chế
Một phương pháp khác để tìm chiến lược tối ưu là tìm thẳng trong không gian các chiến lược Phương pháp không gian chiến lược định nghĩa chiến lược là một hàm có tham số π(s,θ) với các tham số θ ông thường,
một phương pháp leo đồi (gradient method) được áp
dụng để điều chỉnh các tham số Tuy nhiên, việc áp dụng các phương pháp leo đồi không đơn giản, do
không có thông tin nào về độ dốc (gradient information)
được giả thiết ay vào đó, chính độ dốc phải được ước
lượng từ các mẫu nhiều nhiễu (noisy samples) của kết
quả trả về Do điều này làm tăng mạnh chi phí tính toán, nên việc sử dụng một phương pháp leo đồi mạnh
hơn là leo đồi độ dốc cao nhất(steepest gradient descent)
có thể có lợi hơn Các phương pháp leo đồi dùng cho không gian chiến lược đã được sự quan tâm lớn trong
5 năm trở lại đây và giờ đã đạt đến giai đoạn tương đối chính muồi, nhưng lĩnh vực nghiên cứu này vẫn còn hoạt động Có nhiều cách tiếp cận khác, chẳng hạn
luyện thép(simulated annealing), có thể dùng để khám
phá không gian chiến lược Các nghiên cứu về các kỹ thuật này ít phát triển hơn
2.2 Nghiên cứu hiện tại
Các chủ đề nghiên cứu hiện tại bao gồm: Cách biểu diễn khác (chẳng hạn cách tiếp cận Predictive State Representation - biểu diễn trạng thái tiên đoán), tìm kiếm leo đồi trong không gian chiến lược, các kết quả hội tụ đối với mẫu nhỏ, các thuật toán và kết quả hội
tụ cho các MDP quan sát được một phần (partially observable MDP), học tăng cường môdun và phân cấp
(modular and hierarchical) Gần đây, học tăng cường
đã được áp dụng trong lĩnh vực Tâm lý họcđể giải thích quá trình học và hoạt động của con người Cụ thể, người ta đã dùng học tăng cường trong các mô hình nhận thức giả lập hoạt động của con người trong khi giải quyết các vấn đề hai khi học kỹ năng (v.d., Fu & Anderson, 2006)
2.3 Tham khảo
Leslie Pack Kaelbling;Michael L Liman;Andrew W Moore, Reinforcement Learning: A Survey, Journal of Artificial Intelligence Research4 (1996) pp 237–285
Richard S Suon; Andrew G Barto, Reinforcement Learning, MIT Press, 1998,ISBN 0-262-19398-1(full text online)
Dimitri P Bertsekas; John Tsitsiklis, Neuro-Dynamic
Programming, Athena Scientific, 1996,ISBN 1-886529-10-8
Trang 108 CHƯƠNG 2 HỌC TĂNG CƯỜNG
Jan Peters; Sethu Vijayakumar; Stefan Schaal,
Reinforcement Learning for Humanoid Robotics,
IEEE-RAS International Conference on Humanoid
Robots
Fu, W.-T., Anderson, J R (2006) Recurrent Choice
to Skilled Learning Model Learning: A Reinforcement
Learning Model Learning: A Reinforcement Learning
Model. Journal of Experimental Psychology: General,
135 (2), 184-206
2.4 Liên kết ngoài
• Reinforcement Learning Repository
• Reinforcement Learning and Artificial
Intelligence
• RL-Glue