4.1.1. Tối ƣu Bayes
Tối ƣu Bayes là một thuật toán dựa trên mô hình để giải quyết các bài toán tối ƣu hộp đen (black box optimization) mà hàm mục tiêu f(x) là hàm hộp đen. Mọi thông tin về biểu thức hay đạo hàm của hàm f(x) đều không đƣợc biết. Việc tìm hiểu về hàm số này chỉ thông qua giá trị của hàm tại một số điểm x.
Tối ƣu Bayes thƣờng chỉ đƣợc áp dụng cho các bài toán mà việc tính toán hàm f là phức tạp, tốn thời gian, nguồn lực. Lúc này tối ƣu Bayes sẽ giúp giảm số lần phải lấy mẫu từ đó giảm số lần thực hiện hàm f [5]. Thuật toán này đƣợc gọi là Bayes vì việc lựa chọn giá trị tiếp theo đƣợc thực hiện bằng việc tính toán toàn bộ phân phối hậu nghiệm (posterior distribution) của hàm f với tập đầu vào x thông qua:
giả thiết biết trƣớc về hàm f
xác suất để toàn bộ các giá trị x đã lấy mẫu trƣớc xảy ra (likelihood)
Từ đó việc lựa chọn giá trị tiếp theo tùy thuộc vào việc ta muốn chọn giá trị lớn nhất hay nhỏ nhất. Huấn luyện Gaussion Process Hàm thu giá trị k tiếp theo kết quả huấn luyện của giá trị k
4.1.2. Gaussian process
Trong các mô hình của thuật toán tối ƣu Bayes, Gaussian process là một mô hình phổ biến. Ý tƣởng của mô hình Gaussian process là với mỗi đầu vào x ta có một đầu ra y = f(x) mà f là một hàm biến thiên ngẫu nhiên (stochastic function) [6]. Mô hình này coi rằng với mỗi đầu vào x sẽ có tƣơng ứng một phân phối gaussian (phân phối chuẩn) đƣợc đặc trƣng bằng giá trị trung bình µ và độ lệch chuẩn σ [10]. Do đó với mỗi đầu vào x, Gaussian process sẽ định nghĩa một phân phối xác suất cho giá trị có thể của f(x). Vì giá trị trung bình µ và độ lệch chuẩn σ có thể khác nhau cho mỗi giá trị x, nên ta định nghĩa phân phối xác suất nhƣ sau:
P(f(x) | x) = N(µ(x), σ2
(x))
Trong đó N là một phân phối chuẩn tắc (standard normal distribution). Để ƣớc lƣợng giá trị của µ(x) và σ(x), cần phải điều chỉnh mô hình Gaussian process sao cho phù hợp với dữ liệu mẫu đang có. Vì mỗi giá trị f(x) đƣợc lấy mẫu từ phân phối chuẩn nên giả sử ta có t mẫu dữ liệu nhƣ sau: f(x1), f(x2), …, f(xt) thì vector [f(x1), f(x2), …, f(xt)] là một mẫu từ một phân phối chuẩn nhiều chiều [4]. Phân phối chuẩn nhiều chiều này sẽ đƣợc đặc trƣng bởi một vector trung bình và một ma trận hiệp phƣơng sai. Do đó một Gaussian process là sự tổng quát của một phân phối chuẩn cho n biến, với n là số mẫu đang có.
Ma trận hiệp phƣơng sai thể hiện sự tƣơng quan giữa các mẫu. Với giả thiết ban đầu rằng hàm f mịn (smooth) dẫn tới các mẫu mà ở gần nhau sẽ có tƣơng quan mạnh và các mẫu ở xa nhau thì độ tƣơng quan sẽ thấp. Ma trận hiệp phƣơng sai sẽ đƣợc định nghĩa thông qua một hàm hiệp phƣơng sai k(xi, xj) (còn gọi là hàm nhân, hàm kernel).
Cho trƣớc tập f(x1:t) và một tham số lấy mẫu nhiễu σ2
noise (tham số nhiễu này bằng không nếu tập dữ liệu huấn luyện không có nhiễu, còn không nó sẽ có giá trị lớn hơn 0) thì Gaussian process cho giá trị x sẽ đƣợc mô tả nhƣ sau:
P(f(x) | f(x1:t), x) = N(µt(x), σt (x)) với: µt(x) = kT K-1 f(x1:t) σt 2 (x) = k(x,x) - kT K-1 k K = [ ( ) ( ) ( ) ( ) ] + σ2nhiễu I k = [k(x, x1), k(x, x2), …., k(x, xt)]
I là ma trận định danh (identity matrix) có kích thƣớc t x t
Với Gaussian process có nhiều lựa chọn cho hàm nhân (hàm hiệp phƣơng sai). Trong luận văn này ta chọn hàm Squared Exponential, hàm này đƣợc định nghĩa nhƣ sau [7]:
k(xi, xj) = σf 2
exp(- ( )
)
với σf2 và là hai tham số cần đƣợc cấu hình bằng tay. Tham số chiều dài đặc trƣng cho độ mịn của hàm (thông thƣờng tham số đƣợc cài đặt bằng 1 và bằng nhau cho toàn bộ giá trị x). Tham số σf2
đặc trƣng cho độ biến thiên theo chiều dọc (thƣờng đƣợc cài đặt bằng 1)
4.1.3. Hàm thu
Hàm thu định nghĩa tập siêu tham số cho lần huấn luyện tới của mạng nơron. Có rất nhiều hàm khác nhau có thể tính toán giá trị tốt nhất cho siêu tham số. Nhƣng ở trong mô hình đề xuất này, tôi sử dụng hàm Expected Improvement. Hàm này có hai cách tính, nếu ta đang muốn tìm giá trị nhỏ nhất, ta sẽ sử dụng công thức sau:
gmin(x) = max(0, ymin – ygiá trị mong muốn nhỏ nhất )
trong đó ymin là giá trị nhỏ nhất của y mà ta đã thấy và ygiá trị mong muốn nhỏ nhất là giá trị nhỏ nhất có thể.
Nếu ta muốn tìm giá trị lớn nhất thì sử dụng công thức sau:
gmax(x) = max(0, ygiá trị mong muốn lớn nhất - ymax)
trong đó ymax là giá trị lớn nhất của y mà ta đã thấy và ygiá trị mong muốn lớn nhất là giá trị lớn nhất có thể.
Trong bài toán hiện tại, chúng ta đang mong muốn sai số của việc dự đoán điểm đích là nhỏ nhất nên ta sẽ sử dụng công thức gmin(x)
4.2. Xây dựng thử nghiệm
Nhắc lại bài toán: Trong bài toán dự đoán điểm đích của một chuyến taxi, MILA lab sử dụng mạng nơron nhân tạo nhiều tầng truyền thẳng để giải quyết vấn đề. Để thực hiện training mạng nơron này, MILA lab chỉ sử dụng k điểm đầu tiên và k điểm cuối cùng của chuyến taxi làm dữ liệu đầu vào. MILA lab cài đặt k có giá trị là 5 mà không có giải thích nào, trong khi đó tham số k ảnh hƣởng trực tiếp đến việc bao nhiêu dữ liệu mà mạng nơron có thể học đƣợc nên tham số này là một siêu tham số quan trọng ảnh hƣởng đến độ chính xác khi dự đoán điểm đích. Do đó mô hình mà luận văn xây dựng nhằm mục đích xác định đƣợc giá trị k tối ƣu đảm bảo cho sai số dự đoán là nhỏ nhất.
Việc huấn luyện mạng nơron của MILA lab là cần nhiều thời gian. Với một giá trị k và cài đặt số vòng lặp là 2 triệu, thực hiện huấn luyện trên một máy tính cơ bản sẽ mất gần một ngày, nên để tối ƣu thời gian chạy thì mọi bƣớc khi thực hiện mô hình luận văn đề xuất cần phải đƣợc thực hiện liên tục, hoàn toàn tự động để đảm bảo thời gian chạy là ít nhất và cũng giảm thiểu sức lao động. Bản thân phƣơng pháp của MILA lab cũng là phƣơng pháp duy nhất trong các đội thi mà chạy hoàn toàn tự động, không cần thực hiện bất cứ thao tác bằng tay nào.
Sai số = 0?
Hàm thu tính giá trị k mới
Xác định giá trị k Cài đặt mô hình MILA với giá trị k
Huấn luyện mô hình MILA
Đẩy tệp dự đoán lên Kaggle website
Kaggle tính sai số dự đoán
Lấy sai số từ Kaggle về
Sinh ra tập dữ liệu k-sai-số gồm các cặp (k, sai số)
Tìm sai số nhỏ nhất trong tập k-sai-số, k mới đã tồn
tại trong tập k-sai-số?
Lấy tập dữ liệu k-sai-số làm đầu vào cho Gausian process
Lấy đẩu ra của Gausian process cho vào hàm thu
Đúng
Dự đoán điểm đích với tập đánh giá Bắt đầu
Sai
Sai
Lƣu kết quả dự đoán vào tệp csv
Trình tự triển khai mô hình nhƣ sau:
+ Cài đặt và chạy đƣợc mô hình của MILA lab [11]
+ Xác định vị trí cấu hình tham số k trong mã nguồn của MILA lab
+ Cài đặt thuật toán tối ƣu Bayes mà cụ thể là cài đặt Gaussion Process cho vai trò mô hình xấp xỉ và Expected Improvement cho vai trò hàm thu.
+ Chú ý để mô hình Gaussion Process có thể hoạt động ta cần ít nhất 2 cặp giá trị tham số k và kết quả huấn luyện tƣơng ứng để mồi, vì mô hình hoạt động dựa trên thống kê cùng các đặc trƣng nhƣ giá trị trung bình, phƣơng sai. Kết quả huấn luyện là giá trị trung bình của tất cả các sai lệch khi dự đoán điểm đích của toàn bộ chuyến taxi. Sau khi đã có 2 cặp giá trị mồi, thực hiện tính toán giá trị k tối ƣu tiếp theo.
+ Nếu giá trị k tiếp theo nằm trong tập các giá trị k đã huấn luyện thì mô hình đã hội tụ. Thực hiện dừng việc huấn luyện, tìm giá trị kết quả nhỏ nhất trong các kết quả đã huấn luyện (vì kết quả là sai số nên giá trị càng nhỏ càng tốt). Giá trị tham số k tƣơng ứng với giá trị này chính là tham số k tối ƣu mà mô hình đã tìm ra. Kết thúc chƣơng trình chạy.
+ Nếu giá trị k tiếp theo không nằm trong tập các giá trị k đã huấn luyện, thực hiện huấn luyện mạng nơron với giá trị k này.
+ Sau khi huấn luyện xong, đƣa dữ liệu đánh giá là tập các chuyến taxi vào mạng nơron nhân tạo để mạng dự đoán. Kết quả dự đoán sẽ đƣợc lƣu vào tệp csv.
+ Thực hiện đẩy tệp kết quả csv này lên máy chủ Kaggle, máy chủ Kaggle sẽ trả lại giá trị sai lệch. Ta sử dụng trực tiếp tập dữ liệu đánh giá của Kaggle để đảm bảo giống với các đội thi từ đó có đƣợc so sánh khách quan. Đồng thời dữ liệu đánh giá của Kaggle là ở thời điểm một năm sau dữ liệu huấn luyện nên kết quả đánh giá sẽ mang lại ý nghĩa thực tiễn hơn so với việc tách một phần tập dữ liệu huấn luyện ra làm tập dữ liệu đánh giá.
này chính là giá trị tối ƣu nhất. Nếu sai lệch khác 0 thì giá trị sai lệch này và giá trị k sẽ tạo thành cặp giá trị (k, sai số).
+ Cặp giá trị (k, sai số) mới cùng với những cặp giá trị (k, sai số) cũ tạo thành tập (k, sai số) mới. Tập này đƣợc đƣa vào mô hình Gausian process để tính toán, cập nhật lại các đặc trƣng.
+ Hàm thu sẽ sử dụng các đặc trƣng lấy từ Gausian process cũng yêu cầu về độ tin cậy để tính toán giá trị k tiếp theo.
+ Thực hiện lặp lại quá trình trên đến khi nào kết thúc hoặc độ sai lệch đạt mức yêu cầu thì dừng lại.
4.2.1 Dữ liệu
Toàn bộ dữ liệu sử dụng trong phần thực nghiệm đều đƣợc cung cấp bởi cuộc thi Kaggle và nó giống nhau cho mọi đội thi, do đó đảm bảo tính khách quan khi so sánh kết quả giữa mô hình luận văn đề xuất và MILA lab cũng nhƣ các đội thi khác. Các dữ liệu mà cuộc thi cung cấp gồm:
- Tập dữ liệu tên và vị trí GPS các điểm chờ taxi nhƣng ở bài toán này, ta hoàn toàn không cần sử dụng đến tập dữ liệu này,
- Tập dữ liệu gồm hơn 1.7 triệu chuyến taxi hoàn chỉnh, thu thập liên tục trong suốt một năm hoàn chỉnh (từ ngày 01/07/2013 đến ngày 30/06/2014) của 442 taxi hoạt động tại thành phố Porto thủ đô của Bồ Đào Nha. Dữ liệu này đƣợc cung cấp cho mỗi đội tham gia cuộc thi Kaggle và lƣu ở định dạng file CSV. Dữ liệu này đƣợc MILA lab sử dụng trong quá trình huấn luyện mạng nơron. Do đó trong phần chạy thử nghiệm của mô hình luận văn đề xuất, dữ liệu này cũng đƣợc sử dụng để huấn luyện mạng nơron. Dữ liệu này sẽ đƣợc tách làm hai phần, một phần cho tập phê chuẩn (validation) và phần còn lại cho tập huấn luyện. Các thuộc tính trong tệp csv là: (trip_id, call_type, origin_call, origin_stand, taxi_id, timestamp, day_type, missing_data, polyline). Một trƣờng mẫu trong file CSV nhƣ sau:
trip_id: T1 call_type: B
origin_stand: 15 taxi_id: 20000542 timestamp: 1408039037 day_type: A missing_data: FALSE polyline: [ [-8.585676,41.148522], [-8.585712,41.148639], [-8.585685,41.148855], [-8.58573,41.148927], [-8.585982,41.148963],[-8.586396,41.148954], [-8.586072,41.14872],[-8.586324,41.147847], [-8.586999,41.14746],[-8.586576,41.147154], [-8.584884,41.146623] ]
Một trƣờng dữ liệu này mô tả đầy đủ thông tin cho một hành trình hoàn thiện của chuyến taxi, trong đó:
+ trip_id: đƣợc biểu diễn dƣới dạng xâu, là một định danh duy nhất cho mỗi chuyến taxi
+ call_type: đƣợc biểu diễn dƣới dạng ký tự, dùng để xác định kiểu gọi xe của hành khách cho chuyến taxi này. Trƣờng này là một trong ba giá trị sau:
- „A‟: nếu chuyến taxi đƣợc điều đi từ trung tâm vận hành - „B‟: nếu chuyến taxi đƣợc gọi trực tiếp từ điểm đón taxi - „C‟: trong các trƣờng hợp khác (nhƣ khách đón taxi ngay trên
đƣờng)
+ origin_call: đƣợc biểu diễn dƣới dạng số tự nhiên, thể hiện một định danh độc nhất cho mỗi số điện thoại khách hàng đã từng phục vụ. Khi call_type là „A‟ thì trƣờng này sẽ có giá trị, ngƣợc lại nó có giá trị NULL.
+ origin_stand: đƣợc biểu diễn dƣới dạng số tự nhiên, thể hiện một định danh độc nhất cho điểm chờ taxi. Trƣờng này sẽ là vị trí bắt đầu của chuyến đi, nếu call_type là „B‟, ngƣợc lại nó có giá trị NULL.
+ taxi_id: đƣợc biểu diễn dƣới dạng số tự nhiên, thể hiện một định danh độc nhất cho tài xế đang thực hiện chuyến đi
+ timestamp: đƣợc biểu diễn dƣới dạng số tự nhiên dƣới định dạng thời gian của hệ điều hành Unix, thể hiện thời gian bắt đầu của chuyến đi. + day_type: đƣợc biểu diễn dƣới dạng ký tự, thể hiện loại của ngày mà chuyến taxi này đang chạy. Trƣờng này là một trong ba giá trị sau:
- „B‟: nếu chuyến taxi chạy trong ngày lễ hoặc một ngày đặc biệt nào đó (ngày nghỉ lễ bù)
- „C‟: nếu chuyến taxi chạy trƣớc ngày kiểu „B‟
- „A‟ trong những trƣờng hợp còn lại (ngày thƣờng, ngày cuối tuần,...)
+ missing_data: đƣợc biểu diễn dƣới dạng boolean, mang giá trị sai (false) nếu luồng dữ liệu GPS là hoàn thiện, mang giá trị đúng (true) nếu một hoặc nhiều vị trí GPS bị mất.
+ polyline: đƣợc biểu diễn dƣới dạng xâu, thể hiện một chuỗi các điểm GPS (dƣới định dạng WGS84) mà đƣợc ánh xạ sang dạng xâu ký tự. Ký tự bắt đầu xâu là „[‟, ký tự kết thúc xâu là „]‟. Mỗi một cặp tọa độ cũng đƣợc thể hiện bằng một cặp ngoặc vuông nhƣ sau „[kinh độ, vĩ độ]‟. Với mỗi 15 giây của chuyến taxi sẽ có một cặp tọa độ tƣơng ứng. Cặp tọa độ đầu tiên là vị trí xuất phát, cặp tọa độ cuối cùng là vị trí kết thúc.
- Tập dữ liệu đánh giá: đây là tập dữ liệu dùng để đánh giá các mô hình dự đoán. Tập dữ liệu này gồm năm tập con nhƣng đƣợc cung cấp dƣới một tệp định dạng CSV gồm tổng 320 chuyến taxi. Mỗi tập dữ liệu con này tƣơng ứng với những chuyến hành trình diễn ra trong thời gian từ 01/07/2014 đến ngày 31/12/2014. Mỗi tập con sẽ cung cấp thông tin tƣơng ứng một snapshot của mạng lƣới taxi tại một thời điểm cố định. Thông tin các taxi đang chạy, những điểm đã chạy qua đều đƣợc cung cấp. Năm thời điểm tƣơng ứng với năm tập con đƣợc lấy từ năm thời gian sau:
2. 30/09/2014 08:30:00 3. 06/10/2014 17:45:00 4. 01/11/2014 04:00:00 5. 21/12/2014 14:30:00
4.2.2. Công thức tính sai lệch dự đoán
Mỗi đội thi cũng nhƣ mô hình luận văn thực hiện dự đoán điểm đích (dƣới dạng kinh độ, vĩ độ) cho từng chuyến taxi và tổng hợp 320 điểm dự đoán này vào một tệp csv. Tệp này có 3 thuộc tính là (trip_id, latitude – vĩ độ, longitude – kinh độ). Một ví dụ của file dự đoán này nhƣ sau:
TRIP_ID LATITUDE LONGITUDE T1 41.146504 -8.611317 T2 41.146504 -8.611317 ……… T320 41.146504 -8.611317
Sau khi có đƣợc file csv dự đoán này, thực hiện đẩy lên website kaggle. Website này thực hiện việc tính sai số cho từng chuyến đi thông qua việc đo khoảng cách Haversine giữa điểm đích thật và kết quả dự đoán. Sau đó tính giá trị sai số trung bình cộng của tất cả các dự đoán và thông báo kết quả trung bình cộng. Do sau khi cuộc thi kết thúc, Kaggle cũng không công bố điểm đích của các chuyến taxi trong tập đánh giá, nên để biết đƣợc sai số dự đoán, ta vẫn cần đẩy các dự đoán lên Kaggle website. Kết quả cuối cùng này sẽ đƣợc dùng để so sánh, đánh giá xem mô hình của luận văn có giúp cải thiện độ chính xác của thuật toán do MILA lab đề xuất không.
4.2.3 Cài đặt thuật toán
một điểm đầu và điểm cuối để huấn luyện là không hợp lý, nên thực hiện cài giá trị nhỏ nhất của k là 2. Với cận trên của k, ta mong muốn lấy đƣợc quãng đƣờng