Chia một không gian vector thành nhiều tế bào có thể đƣợc thực hiện với các tế bào đồng nhất hoặc có kích thƣớc khác nhau. Cách tiếp cận đồng nhất tăng theo số mũ khi số chiều tăng – chia mỗi tham số của vector N-chiều thành M phần đƣợc MN
tế bào. Cách tiếp cận đồng nhất cũng không khả thi nếu có ít nhất một chiều có giá trị không bị ràng buộc.
Nhƣ vậy ta có thuận lợi khi xây dựng một codebook trong đó các tế bào chỉ phủ không gian tham số giống nhƣ đƣợc phân bố với các vector xuất hiện trong tiến trình VQ thông thƣờng. Codebook này cũng đảm bảo rằng các phần tử của không gian tham số có xác suất phân bố cao sẽ đƣợc phủ bởi các tế bào nhỏ hơn các phần có xác suất thấp. Trong trƣờng hợp này mục tiêu của thiết kế codebook là cực tiểu hóa sai lệch trung bình toàn cục của quá trình VQ.
Để thiết kế một codebook nhƣ vậy, cần một tập vector đại diện và một phân bố các vector xuất hiện trong VQ- tập huấn luyện. Quá trình phát sinh codebook sau đó sẽ
tiến hành phân nhóm các vector này thành tế bào. Tiến trình này đƣợc lặp lại trên từng phần cho đến khi sai lệch trung bình toàn cục đạt đến một cực tiểu. Với một phân bố cụ thể các vector huấn luyện, để tính toán các vector này, trƣớc hết cần tính vector đại diện cho mỗi tế bào mà các vector trong tế bào đó sẽ đƣợc lƣợng hóa. Với các độ đo sai lệch bình phƣơng trung bình hoặc sai số bình phƣơng trung bình có trọng số, toàn bộ sai lệch đƣợc cực tiểu hóa nếu vector đại diện của một tế bào là trung bình mẫu của các vector đƣợc cực tiểu hóa nếu vector đại diện của một tế bào là trung bình mẫu của các vector huấn luyện đƣợc phân bố vào tế bào đó.
Một thuật toán thiết kế codebook thƣờng sử dụng là thuật toán LBG – Linder, Buzo, Gray mà thực chất là giải thuật phân nhóm k-means. Đôi khi nó còn đƣợc gọi là thuật toán Lloyd tổng quát tài liệu về lý thuyết thông tin. Tên “LBG” sau khi Linde, Buzo và Gray, những ngƣời đã chứng minh rằng thuật toán hoạt động với phạm vi độ đo sai lệch rộng. Nội dung của nó nhƣ sau:
1. Khởi tạo:
Đặt m=0. Chọn một tập hợp các codeword khởi đầu.
2. Phân lớp:
Phân lớp tập hợp các vector huấn luyện thành các nhóm Ci theo qui tắc lân cận gần nhất: x Ci(m), nếu d(x,yi(m)) d(x,yj(m)) với mọi j i (56)
3. Cập nhật code vector: m m + 1.
Code vector của mỗi nhóm đƣợc tính nhƣ trung bình mẫu của các vector huấn luyện.
4. Kết thúc:
Nếu khác biệt trong toàn bộ sai lệch trung bình giữa lần lặp lại m và lần cuối cùng là dƣới một ngƣỡng thì dừng, ngƣợc lại đến bƣớc 2. Bất kỳ một phép kiểm tra kết thúc hợp lý nào cũng có thể đƣợc áp dụng thay vì bƣớc 4
Trong trƣờng hợp codebook đƣợc biểu diễn nhƣ một hỗn hợp các img – thay vì phân bố không gian vector thành các tế bào – quá trình phân nhóm tƣơng tự nhƣng đƣợc điều khiển bởi xác suất của mỗi vector huấn luyện trong tế bào. Phân nhóm tiếp tục đến khi toàn bộ xác suất của tất cả các vector huấn luyện đƣợc phát sinh bởi các img tƣơng ứng là cực đại hóa. Thay vì tính toán vector đại diện các tham số của img phải đƣợc ƣớc lƣợng cho một tập hợp các vector huấn luyện cho trƣớc. Với một mô hình hỗn hợp Gauss, quá trình này gồm tính toán trung bình mẫu và hợp biến cho mỗi nhóm các vector huấn luyện.
Một cách phân nhóm các vector huấn luyện khác để tạo codebook là lƣợng hóa vector theo kiểu thống kê – Stochastic Vector Quantisation. Phƣơng pháp này cần một mô hình định nghĩa trƣớc cho các vector mã hóa. Các vector nhiễu White Gauss đƣợc truyền qua bộ lọc trạng thái để biểu diễn mô hình và các kết quả chuẩn đƣợc sử dụng làm codeword. Cách tiếp cận này tính toán đơn giản hơn phân nhóm.
Khi codebook đã đƣợc thiết kế, cách tiếp cận để định lƣợng mỗi vector mới là so sánh nó với mọi codeword để tìm codeword cực tiểu sai lệch lƣợng hóa (theo một độ sai lệch nào đó) hoặc cực đại xác suất (theo một mật độ xác suất tham số nào đó). Cách tiếp cận này có hiệu suất tối ƣu với chi phí là một khối lƣợng tính toán đáng kể - các thao tác là tuyến tính theo trong số chiều và kích thƣớc của codebook. Bằng cách phân bố codebook theo cách thích hợp nào đó, có thể giảm độ phức tạp, chỉ tỷ lệ với kích thƣớc của codebook.
Một codebook tìm kiếm nhị phân hoạt động theo cách phân nhóm có thứ bậc các vector huấn luyện. Trong quá trình phát sinh codebook, thuật toán phân nhóm đƣợc sử dụng để phân nhóm các vector huấn luyện thành 2 nhóm, và vector đại diện đƣợc tìm thấy nhƣ trọng tâm của mỗi nhóm. Sau đó quá trình lặp lại một cách đệ qui cho mỗi nhóm này, xây dựng thành một cây nhị phân nhƣ hình 3.3.1.1b. Quá trình đệ qui kết thúc khi mức thấp nhất của cây biểu diễn số codeword cần L, trong đó L là lũy thừa của 2. Sau đó quá trình định lƣợng gồm tìm kiếm cây từ gốc xuống lá sao cho sai lệch đƣợc cực tiểu hóa tại mỗi nút. Trong trƣờng hợp này số tính toán sai lệch bằng với 2log2L, nhỏ hơn đáng kể so với L tính toán khi tìm kiếm đầy đủ với bất kỳ giá trị L lớn hợp lý nào.
Hình 3.13 Cây nhị phân tìm kiếm VQ