Chương 1 Một số khó khăn của lý thuyết thông tin cổ điển Các kiến thức trong chương này được lấy từ tài liệu [1], [6], [9].1 Nén dữ liệu 1.1 Ví dụ về nén dữ liệu Những khó khăn đầu tiên của lý thuyết thông tin cổ điển là việc bị giới hạn kích thước đầu ra của nguồn tin. Shannon đã chứng minh được rằng việc nén thông tin đầu ra một cách tùy ý là không thể. Chúng ta bắt đầu với một ví dụ đơn giản để minh họa khái niệm của một nguồn tin. Sau đó chúng ta phát triển một chương trình mã hóa nguồn này với đòi hỏi ít bit hơn mà vẫn mã hóa chính xác thông tin.
Một người gửi A muốn gửi bốn ký tự a, b, c, d (có xác suất khác nhau) tới một người nhận B. Giả sử thêm rằng, có một kênh nhiễu truyền thông tin một cách hoàn hảo kết nối A và B. A và B muốn giảm thiểu số lần sử dụng kênh nhiễu này để giảm chi phí. Phân bố xác suất của bốn ký tự a, b, c, d là: Pr(a) = 1/2; Pr(b) = 1/8; Pr(c) = 1/4; Pr(d) = 1/8.
Tuy nhiên, một kênh nhiễu chỉ chấp nhận bit chứ không chấp nhận các kí tự a, b, c, d là đầu vào nên ta phải mã hóa các ký tự bằng biểu diễn nhị 3 phân, mỗi biểu diễn nhị phân là một từ mã và chiều dài của từ mã được dùng để đo lường hiệu suất. Chẳng hạn: A muốn gửi dãy ký tự aabcdaccaac.1) Cách mã hóa thứ nhất: a → 00 ; b → 01 ; c → 10 ; → 11. Cách thứ hai ta dùng mã hóa Huffman. Mã hóa Huffman là một thuật toán mã hóa dùng để nén dữ liệu.
Nó dựa trên bảng tần suất xuất hiện các kí tự cần mã hóa để xây dựng một bộ mã nhị phân cho các kí tự đó sao cho dung lượng (số bít) sau khi mã hóa là nhỏ nhất. Để đảm bảo điều này thì số bit dùng cho mỗi kí hiệu có thể khác nhau, kí hiệu nào xuất hiện nhiều lần thì nên dùng số bít ít, ký hiệu nào xuất hiện ít thì có thể mã hóa bằng từ mã dài hơn. Tuy nhiên, vì độ dài mã thay đổi nên khi giải mã để phân biệt được xâu bít nào là mã hóa của ký hiệu nào ta cần dùng đến mã tiền tố. Mã tiền tố là bộ các từ mã của một tập hợp các kí hiệu sao cho từ mã của mỗi ký hiệu không là tiền tố (phần đầu) của từ mã một ký hiệu khác trong bộ mã ấy.
Chẳng hạn: • Nếu mã hóa a → 0; b → 110; c → 01; d → 111, thì bộ từ mã này không là mã tiền tố ví từ mã của "a" là tiền tố của từ mã của "c". Để mã hóa xâu aabcdaccaac phải đặt dấu ngăn cách vào giữa các từ mã 0,0,110,01,111,0,01,01,0,0,01. Như vậy, các dấu nhăn cách chiếm một không gian đáng kể trong bảng mã.2) thì bộ từ mã này là mã tiền tố. Với bộ mã tiền tố này khi mã hóa xâu aabcdaccaac ta thu được 4 Đặc biệt, mã hóa với độ dài từ mã không đổi như cách mã hóa thứ nhất cũng là một mã tiền tố.
Mã hóa Huffma có thể được biểu diễn trên cây nhị phân. Nếu có một cây nhị phân n lá ta có thể tạo một bộ mã tiền tố cho n ký hiệu bằng cách đặt mỗi ký hiệu vào một lá. Từ mã của mỗi kí hiệu được tạo ra khi đi từ gốc tới lá chứa ký hiệu đó, nếu đi qua cạnh trái thì ta thêm số 0, đi qua cạnh phải thì thêm số 1. Hình minh họa cho cây nhị phân bốn lá Hình 1.1: Cây nhị phân bốn lá Như vậy, A sẽ mã hóa aabcdaccaac → 0011010111010100010 và gửi dãy mã hóa này cho B.
B phân tích 0011010111010100010 → aabcdaccaac. Chúng ta có thể tính toán chiều dài của chương trình mã hóa này như sau: 1 1 1 1 1 7. 2 8 4 4 8 4 So sách hai cách mã hóa ta thấy cách mã hóa thứ 2 đòi hỏi ít bit hơn so với cách mã hóa thứ nhất.2 Cách đo thông tin Ở ví dụ 1.1 trình bày một cách để đo lường thông tin theo sự phân bố xác suất của các ký tự. Các nội dung thông tin của một ký tự x ∈ {a, b, c, d}, 5 với p(x) là xác suất của x, 1 i(x) = log2 = − log2 p(x).
p(x) Trong công thức này, ký tự có xác suất càng nhỏ thì chứa một thông tin càng lớn. Độ dài mỗi từ mã trong chương trình mã hóa bằng các nội dung thông tin của các kí tự tương ứng của nó. Các nội dung thông tin có tính chất cộng tính. Giả sử rằng nguồn thông tin sản xuất hai ký hiệu x1 và x2.
Xác suất xuất hiện 2 ký tự này là p(x1 , x2 ), xác suất xuất hiện của x1 là p(x1 ), xác suất xuất hiện của x2 là p(x2 ) và giả sử nguồn tạo ra mỗi kí tự là độc lập. Các nội dung thông tin dự kiến của các nguồn thông tin X X p(x)i(x) = − p(x)log2 (p(x)). x x Đại lượng trên là rất quan trọng trong lý thuyết thông tin, nó được gọi là entropy của các nguồn thông tin. Entropy của các nguồn thông tin mô tả mức độ hỗn loạn trong một tín hiệu lấy từ một sự kiện ngẫu nhiên.
Entropy thường được diễn đạt dưới dạng số lượng bit cần thiết trung bình để lưu trữ hoặc dẫn truyền. Ví dụ, trong chương trình mã hóa ở ví dụ 1.1, chiều dài dự kiến của một từ mã là entropy của nguồn thông tin: 1 1 1 1 1 1 1 1 − log2 − log2 − log2 − log2 2 2 8 8 4 4 8 8 1 1 1 1 =. 4 6 Nếu một biến ngẫu nhiên rời rạc X, có thể nhận các giá trị là 1,2,.,n với các xác suất tương ứng p(1), p(2),. i=1 p (i) i=1 Không phải ngẫu nhiên mà chúng ta lựa chọn các chương trình mã hóa đặc biệt (1.
Việc lựa chọn chương trình mã hóa liên quan đến cấu trúc của các nguồn thông tin, số ký hiệu là một lũy thừa của hai và xác suất của mỗi biểu tượng là nghịch đảo của một lũy thừa của hai.3 Lý thuyết mã hóa nguồn của Shannon Câu hỏi tiếp theo là liệu có chương trình nào khác có thể đạt được một tỷ lệ nén tốt hơn so với các chương trình trong (1. Để trả lời câu hỏi này, chúng ta xem xét một nguồn thông tin tổng quát hơn và giới thiệu một khái niệm của Shannon, ý tưởng về tập hợp có trình tự điển hình. Chúng ta thể hiện một nguồn thông tin tổng quát hơn với một biến ngẫu nhiên X có chứa x là các chữ cái trong bảng chữ cái χ.3) x∈χ Nội dung thông tin i(X) của biến ngẫu nhiên X là i(X) = −log2 (pX (X)), (1.4) và chính nội dung thông tin là một biến ngẫu nhiên. Không có gì sai về mặt toán học khi biến ngẫu nhiên X là đối số cho hàm mật độ pX.
Một lần nữa, kì vọng của nội dung thông tin của X bằng với entropy của X , EX {−log2 (pX (X))} = H(X). Bây giờ, để mã hóa nguồn thông tin trên, phương pháp mã hóa từng ký tự như trên không còn phù hợp. Ý tưởng mang tính đột phá của Shannon là cho các nguồn phát ra một số lượng lớn các phần tử và sau đó mã hóa 7 các dữ liệu phát ra như một khối lớn, thay vì mã hóa mỗi ký tự như ví dụ 1. Kỹ thuật này được gọi là khối mã hóa.
Hiểu sâu vấn đề nên Shannon cho phép có một lỗi nhỏ trong các chương trình nén vì lỗi này sẽ biến mất khi kích thước khối trở nên lớn tùy ý. Để thực hiện các chương trình mã hóa khối một cách rõ ràng hơn, Shannon gợi ý để cho các nguồn phát ra các trình tự như sau xn = x1 x2 .xn , trong đó: • n là một số tự nhiên khá lớn biểu thị kích thước của khối dữ liệu phát ra., n) là biểu tượng phát ra thứ i. Gọi Xn biểu thị các biến ngẫu nhiên gắn liền với xn , và Xi là biến ngẫu nhiên cho các xi. Giả thiết quan trọng nhất đối với nguồn thông tin này là nó độc lập và phân phối giống nhau.
Giả thiết này có nghĩa là, mỗi Xi biến ngẫu nhiên có phân phối giống như biến ngẫu nhiên X. Theo đó, xác suất để xn phát ra là pX n (xn ) =pX1 , X2 ,.5) i=1 Từ công thức (1.5) về xác suất của những biến ngẫu nhiên độc lập, quá trình tính toán đơn giản hơn rất nhiều. Giả sử rằng, chúng ta gọi các chữ cái trong bảng chữ cái χ là a1 , a2 ,. Gọi N (ai |xn ) là số lần xuất hiện của chữ cái ai trong dãy xn (trong đó i = 1,.
Ví dụ, xét chuỗi ký tự (1., xn } như là một khối với một bộ mã ε và truyền từ mã trên kênh bit không nhiễu I. B nhận được nó, B giải mã từ mã nhận được với một bộ giải mã D và thu được theo trình tự ban đầu mà A đã truyền nếu mã có xác suất lỗi rất nhỏ. Theo công thức (1.6) i=1 i=1 Lưu ý rằng, độ dài n của chuỗi phát ra cực kỳ lớn, lớn hơn nhiều lần so với kích thước bảng chữ cái |χ|, n |χ| .6) đơn giản hơn rất nhiều so với công thức (1. Với xn là một chuỗi dài tổ hợp của các ký tự {x1 , x2 , ., xn } nên ta có thể hoán vị các ký tự trong chuỗi xn vì khi hoán vị xác suất xuất hiện của các kí tự không thay đổi, xn → a.
| 2{z | {z } n n N (a1 |x ) N (a2 |x ) N (a|χ| |xn ) Trên đây chúng ta đang xét nguồn phát ra theo một trình tự cụ thể. Bây giờ, chúng ta nghiên cứu cách thực hiện đối với nguồn phát ra một chuỗi ngẫu nhiên X n. Sự khác biệt giữa cách thực hiện của dãy có thứ tự xn và dãy ngẫu nhiên X n rất quan trọng. Đặc biệt, chúng ta xem xét về trung bình mẫu nội dung thông tin của chuỗi ngẫu nhiên này (chia nội dung thông tin cho n để được trung bình mẫu), 1 − log2 (pX n (X n )).7) n Có thể chúng ta thấy lạ khi cả X n và pX n (X n ) đều là những biến ngẫu nhiên, nhưng cách biểu diễn này thật sự tốt về mặt toán học bởi vì nó sẽ 9 trở nên rất ngắn ngọn.
Cách biểu diễn này giống với công thức (1.4) dùng để tính entropy.