.. raw:: html .. raw:: html .. raw:: html Cân nhắc tới Môi trường ======================= .. raw:: html Trong các chương trước ta đã thực hành một số ứng dụng của học máy và khớp mô hình với nhiều tập dữ liệu khác nhau. Tuy nhiên, ta chưa bao giờ dừng lại để nhìn nhận về nguồn gốc của dữ liệu, hoặc dự định sẽ làm gì với đầu ra của mô hình. Đa phần là khi có được dữ liệu, các nhà phát triển học máy thường đâm đầu vào triển khai các mô hình mà không tạm dừng để xem xét các vấn đề cơ bản này. .. raw:: html Nhiều triển khai học máy thất bại có thể bắt nguồn từ khuôn mẫu này. Đôi khi các mô hình có độ chính xác rất tốt trên tập kiểm tra nhưng lại thất bại thảm hại trong triển khai thực tế, khi mà phân phối của dữ liệu thay đổi đột ngột. Đáng sợ hơn, đôi khi chính việc triển khai một mô hình có thể là chất xúc tác gây nhiễu cho phân phối dữ liệu. Ví dụ, giả sử rằng ta huấn luyện một mô hình để dự đoán xem một người có trả được nợ hay không, rồi mô hình chỉ ra rằng việc chọn giày dép của ứng viên có liên quan đến rủi ro vỡ nợ (giày tây thì trả được nợ, giày thể thao thì không). Từ đó, ta có thể sẽ có xu hướng chỉ cấp các khoản vay cho các ứng viên mang giày tây và sẽ từ chối cho vay đối với những trường hợp mang giày thể thao. .. raw:: html Trong trường hợp này, việc ta không cân nhắc kỹ khi nhảy vọt từ nhận dạng khuôn mẫu đến ra quyết định và việc không nghiêm túc xem xét các yếu tố môi trường có thể gây ra hậu quả nghiêm trọng. Như ví dụ trên, không sớm thì muộn khi ta bắt đầu đưa ra quyết định dựa trên kiểu giày, khách hàng sẽ để ý và thay đổi hành vi của họ. Chẳng bao lâu sau, tất cả các người vay tiền sẽ mang giày tây, nhưng chỉ số tín dụng của họ thì không hề cải thiện. Hãy dành một phút để “thấm” điều này vì có rất nhiều vấn đề tương tự trong các ứng dụng của học máy: bằng việc ra quyết định dựa trên mô hình trong một môi trường, ta có thể làm hỏng chính mô hình đó. .. raw:: html Dù không thể thảo luận kỹ lưỡng về các vấn đề này chỉ trong một mục, chúng tôi vẫn muốn đề cập một vài mối bận tâm phổ biến và kích thích tư duy phản biện để có thể sớm phát hiện ra các tình huống này, từ đó giảm thiểu thiệt hại và có trách nhiệm hơn trong việc sử dụng học máy. Một vài giải pháp khá đơn giản (thu thập dữ liệu “phù hợp”), còn một vài giải pháp lại khó hơn về mặt kỹ thuật (lập trình một hệ thống học tăng cường), và một số khác thì hoàn toàn nằm ngoài lĩnh vực dự đoán thống kê và cần ta phải vật lộn với các câu hỏi triết học khó khăn về khía cạnh đạo đức trong việc ứng dụng thuật toán. .. raw:: html .. raw:: html .. raw:: html Dịch chuyển Phân phối --------------------- .. raw:: html Để bắt đầu, ta sẽ trở lại vị trí quan sát và tạm gác lại các tác động của ta lên môi trường. Trong các mục tiếp theo, ta sẽ xem xét kỹ vài cách khác nhau mà phân phối dữ liệu có thể dịch chuyển và những gì ta có thể làm để cứu vãn hiệu suất mô hình. Chúng tôi sẽ cảnh báo ngay từ đầu rằng nếu phân phối sinh dữ liệu :math:`p(\mathbf{x},y)` có thể dịch chuyển theo các cách khác nhau tại bất kỳ thời điểm nào, việc học một bộ phân loại mạnh mẽ là điều bất khả thi. Trong trường hợp xấu nhất, nếu bản thân định nghĩa của nhãn có thể thay đổi bất cứ khi nào: nếu đột nhiên con vật mà chúng ta gọi là “mèo” bây giờ là “chó” và con vật trước đây chúng ta gọi là “chó” thì giờ lại là “mèo”, trong khi không có bất kỳ thay đổi rõ ràng nào trong phân phối của đầu vào :math:`p(\mathbf{x})`, thì không có cách nào để phát hiện được sự thay đổi này hay điều chỉnh lại bộ phân loại tại thời điểm kiểm tra. May mắn thay, dưới một vài giả định chặt về cách dữ liệu có thể thay đổi trong tương lai, một vài thuật toán có thể phát hiện được sự dịch chuyển và thậm chí có thể thích nghi để đạt được độ chính xác cao hơn so với việc tiếp tục dựa vào bộ phân loại ban đầu một cách ngây thơ. .. raw:: html .. raw:: html .. raw:: html Dịch chuyển Hiệp biến ~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Một trong những dạng dịch chuyển phân phối được nghiên cứu rộng rãi nhất là *dịch chuyển hiệp biến* (*covariate shift*). Ở đây, ta giả định rằng mặc dù phân phối đầu vào có thể biến đổi theo thời gian, nhưng hàm gán nhãn, tức phân phối có điều kiện :math:`P(y \mid \mathbf{x})` thì không thay đổi. Mặc dù vấn đề này khá dễ hiểu, trong thực tế nó thường dễ bị bỏ qua. Hãy xem xét bài toán phân biệt mèo và chó với tập dữ liệu huấn luyện bao gồm các ảnh sau: .. raw:: html +----------+----------+----------+----------+ | mèo | mèo | chó | chó | +==========+==========+==========+==========+ | |image0| | |image1| | |image2| | |image3| | +----------+----------+----------+----------+ .. raw:: html Tại thời điểm kiểm tra ta phải phân loại các ảnh dưới đây: .. raw:: html +----------+----------+----------+----------+ | mèo | mèo | chó | chó | +==========+==========+==========+==========+ | |image4| | |image5| | |image6| | |image7| | +----------+----------+----------+----------+ .. raw:: html Rõ ràng việc phân loại tốt trong trường hợp này là rất khó khăn. Trong khi tập huấn luyện bao gồm các ảnh đời thực thì tập kiểm tra chỉ chứa các ảnh hoạt hình với màu sắc thậm chí còn không thực tế. Việc huấn luyện trên một tập dữ liệu khác biệt đáng kể so với tập kiểm tra mà không có một kế hoạch để thích ứng với sự thay đổi này là một ý tưởng tồi. Thật không may, đây lại là một cạm bẫy rất phổ biến. Các nhà thống kê gọi vấn đề này là *dịch chuyển hiệp biến* bởi vì gốc rễ của nó là do sự thay đổi trong phân phối của các đặc trưng (tức các *hiệp biến*). Theo ngôn ngữ toán học, ta có thể nói rằng :math:`P(\mathbf{x})` thay đổi nhưng :math:`P(y \mid \mathbf{x})` thì không. Khi ta tin rằng :math:`\mathbf{x}` gây ra :math:`y` thì dịch chuyển hiệp biến thường là một giả định hợp lý, mặc dù tính hữu dụng của nó không chỉ giới hạn trong trường hợp này. .. raw:: html .. raw:: html .. raw:: html Dịch chuyển Nhãn ~~~~~~~~~~~~~~~~ .. raw:: html Vấn đề ngược lại xuất hiện khi chúng ta tin rằng điều gây ra sự dịch chuyển là một thay đổi trong phân phối biên của nhãn :math:`P(y)` trong khi phân phối có điều kiện theo lớp :math:`P(\mathbf{x} \mid y)` vẫn không đổi. Dịch chuyển nhãn là một giả định hợp lý khi chúng ta tin rằng :math:`y` gây ra :math:`\mathbf{x}`. Chẳng hạn, thông thường chúng ta muốn dự đoán kết quả chẩn đoán nếu biết các biểu hiện của bệnh. Trong trường hợp này chúng ta tin rằng kết quả chẩn đoán gây ra các biểu hiện, tức bệnh gây ra các triệu chứng. Thỉnh thoảng các giả định dịch chuyển nhãn và dịch chuyển hiệp biến có thể xảy ra đồng thời. Ví dụ, khi hàm gán nhãn là tất định và không đổi, dịch chuyển hiệp biến sẽ luôn xảy ra, kể cả khi dịch chuyển nhãn cũng đang xảy ra. Một điều thú vị là khi chúng ta tin rằng cả dịch chuyển nhãn và dịch chuyển hiệp biến đều đang xảy ra, làm việc với các phương pháp được suy ra từ giả định dịch chuyển nhãn thường chiếm lợi thế. Các phương pháp này thường sẽ dễ làm việc hơn vì chúng thao tác trên nhãn thay vì trên các đầu vào đa chiều trong học sâu. .. raw:: html Dịch chuyển Khái niệm ~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Một vấn đề liên quan nữa nằm ở việc *dịch chuyển khái niệm* (*concept shift*), khi chính định nghĩa của các nhãn thay đổi. Điều này nghe có vẻ lạ vì sau cùng, con mèo là con mèo. Quả thực định nghĩa của một con mèo có thể không thay đổi, nhưng điều này có đúng với thuật ngữ “đồ uống có ga” hay không? Hoá ra nếu chúng ta di chuyển vòng quanh nước Mỹ, dịch chuyển nguồn dữ liệu theo vùng địa lý, ta sẽ thấy sự dịch chuyển khái niệm đáng kể liên quan đến thuật ngữ đơn giản này như thể hiện trong :numref:`fig_popvssoda`. .. raw:: html .. _fig_popvssoda: .. figure:: ../img/popvssoda.png :width: 400px Dịch chuyển khái niệm của tên các loại đồ uống có ga ở Mỹ. .. raw:: html Nếu chúng ta xây dựng một hệ thống dịch máy, phân phối :math:`P(y \mid x)` có thể khác nhau tùy thuộc vào vị trí của chúng ta. Vấn đề này có thể khó nhận ra, nhưng bù lại :math:`P(y \mid x)` thường chỉ dịch chuyển một cách chậm rãi. .. raw:: html .. raw:: html .. raw:: html Ví dụ ~~~~~ .. raw:: html Trước khi đi vào chi tiết và thảo luận các giải pháp, ta có thể bàn thêm về một số tình huống khi dịch chuyển hiệp biến và khái niệm có thể có biểu hiện không quá rõ ràng. .. raw:: html .. raw:: html .. raw:: html Chẩn đoán Y khoa ^^^^^^^^^^^^^^^^ .. raw:: html Hãy tưởng tượng rằng bạn muốn thiết kế một giải thuật có khả năng phát hiện bệnh ung thư. Bạn thu thập dữ liệu từ cả người khoẻ mạnh lẫn người bệnh rồi sau đó huấn luyện giải thuật. Nó hoạt động hiệu quả, có độ chính xác cao và bạn kết luận rằng bạn đã sẵn sàng cho một sự nghiệp chẩn đoán y khoa thành công. Đừng vội mừng… .. raw:: html Bạn có thể đã mắc nhiều sai lầm. Cụ thể, các phân phối mà bạn dùng để huấn luyện và các phân phối bạn gặp phải trong thực tế có thể rất khác nhau. Điều này đã từng xảy ra với một công ty khởi nghiệp không may mắn mà tôi đã tư vấn nhiều năm về trước. Họ đã phát triển một bộ xét nghiệm máu cho một căn bệnh xảy ra chủ yếu ở đàn ông lớn tuổi và họ đã thu thập được một lượng kha khá mẫu máu từ các bệnh nhân. Mặc dù vậy, việc thu thập mẫu máu từ những người đàn ông khoẻ mạnh lại khó khăn hơn (chủ yếu là vì lý do đạo đức). Để giải quyết sự thiếu hụt này, họ đã kêu gọi một lượng lớn các sinh viên trong trường học tham gia hiến máu tình nguyện để thực hiện xét nghiệm máu của họ. Sau đó họ đã nhờ tôi xây dựng một bộ phân loại để phát hiện căn bệnh. Tôi đã nói với họ rằng việc phân biệt hai tập dữ liệu trên với độ chính xác gần như hoàn hảo là rất dễ dàng. Sau cùng, các đối tượng kiểm tra có nhiều khác biệt về tuổi, nồng độ hóc môn, hoạt động thể chất, chế độ ăn uống, mức tiêu thụ rượu bia, và nhiều nhân tố khác không liên quan đến căn bệnh. Điều này không giống với trường hợp của những bệnh nhân thật sự: Quy trình lấy mẫu của họ khả năng cao đã gây ra hiện tượng dịch chuyển hiệp biến rất nặng giữa phân phối *gốc* và phân phối *mục tiêu*, và thêm vào đó, nó không thể được khắc phục bằng các biện pháp thông thường. Nói cách khác, dữ liệu huấn luyện và kiểm tra khác biệt đến nỗi không thể xây dựng được một mô hình hữu dụng và họ đã lãng phí rất nhiều tiền của. .. raw:: html Xe tự hành ^^^^^^^^^^ .. raw:: html Giả sử có một công ty muốn xây dựng một hệ thống học máy cho xe tự hành. Một trong những bộ phận quan trọng là bộ phát hiện lề đường. Vì việc gán nhãn dữ liệu thực tế rất tốn kém, họ đã có một ý tưởng (thông minh và đầy nghi vấn) là sử dụng dữ liệu giả từ một bộ kết xuất đồ hoạ để thêm vào dữ liệu huấn luyện. Nó đã hoạt động rất tốt trên “dữ liệu kiểm tra” được lấy mẫu từ bộ kết xuất đồ hoạ. Nhưng khi áp dụng trên xe thực tế, nó là một thảm hoạ. Hoá ra, lề đường đã được kết xuất chỉ với một kết cấu rất đơn giản. Quan trọng hơn, *tất cả* các lề đường đều được kết xuất với *cùng một* kết cấu và bộ phát hiện lề đường đã nhanh chóng học được “đặc trưng” này. .. raw:: html Một điều tương tự cũng đã xảy ra với quân đội Mỹ trong lần đầu tiên họ thử nghiệm nhận diện xe tăng trong rừng. Họ chụp các bức ảnh khu rừng từ trên cao khi không có xe tăng, sau đó lái xe tăng vào khu rừng và chụp một bộ ảnh khác. Bộ phân loại này được huấn luyện tới mức “hoàn hảo”. Không may thay, tất cả những gì nó đã học được là phân loại cây có bóng với cây không có bóng—bộ ảnh đầu tiên được chụp vào buổi sáng sớm, trong khi bộ thứ hai được chụp vào buổi trưa. .. raw:: html .. raw:: html .. raw:: html Phân phối không dừng ^^^^^^^^^^^^^^^^^^^^ .. raw:: html Một vấn đề khó phát hiện hơn phát sinh khi phân phối thay đổi chậm rãi và mô hình không được cập nhật một cách thoả đáng. Dưới đây là một vài trường hợp điển hình: .. raw:: html - Chúng ta huấn luyện mô hình quảng cáo điện toán và sau đó không cập nhật nó thường xuyên (chẳng hạn như quên bổ sung thêm thiết bị iPad mới vừa được ra mắt vào mô hình). - Xây dựng một mô hình lọc thư rác. Mô hình làm việc rất tốt cho việc phát hiện tất cả các thư rác mà chúng ta biết cho đến nay. Nhưng rồi những người gửi thư rác cũng khôn khéo hơn và tạo ra các mẫu thư mới khác hẳn với những thư trước đây. - Ta xây dựng hệ thống đề xuất sản phẩm. Hệ thống làm việc tốt trong suốt mùa đông… nhưng sau đó nó vẫn tiếp tục đề xuất các mẫu nón ông già Noel ngay cả khi Giáng Sinh đã qua từ lâu. .. raw:: html Các giai thoại khác ^^^^^^^^^^^^^^^^^^^ .. raw:: html - Chúng ta xây dựng mô hình phát hiện gương mặt. Nó hoạt động rất tốt trên các bài kiểm tra đánh giá. Không may mắn là mô hình lại thất bại trên tập dữ liệu kiểm tra—các ví dụ đánh bại được mô hình khi khuôn mặt lấp đầy hoàn toàn cả bức ảnh, trong khi không có dữ liệu nào tương tự như vậy xuất hiện trong tập huấn luyện. - Ta xây dựng hệ thống tìm kiếm web cho thị trường Hoa Kỳ và hiện tại muốn triển khai nó cho thị trường Anh. - Chúng ta huấn luyện một bộ phân loại hình ảnh bằng cách biên soạn một tập dữ liệu lớn, trong đó mỗi lớp trong tập dữ liệu đều có số lượng mẫu bằng nhau, ví dụ 1000 lớp và mỗi lớp được biểu diễn bởi 1000 ảnh. Sau đó chúng ta triển khai hệ thống trong khi trên thực tế phân phối của nhãn chắc chắn là không đồng đều. .. raw:: html Chung quy lại, có nhiều trường hợp mà phân phối huấn luyện và kiểm tra :math:`p(\mathbf{x}, y)` là khác nhau. Trong một số trường hợp may mắn thì các mô hình vẫn chạy tốt dù phân phối của hiệp biến, nhãn hay khái niệm đều dịch chuyển. Trong một số trường hợp khác, chúng ta có thể làm tốt hơn bằng cách sử dụng nhiều chiến lược một cách có nguyên tắc để đối phó với sự dịch chuyển này. Phần còn lại của mục này sẽ tập trung nhiều hơn hẳn vào mặt kỹ thuật. Tuy nhiên, những độc giả vội vàng có thể bỏ qua mục này vì các khái niệm được trình bày dưới đây không phải là tiền đề cho các phần tiếp theo. .. raw:: html .. raw:: html .. raw:: html .. raw:: html .. raw:: html Hiệu chỉnh Dịch chuyển Hiệp biến ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Giả sử rằng ta muốn ước lượng mối liên hệ phụ thuộc :math:`P(y \mid \mathbf{x})` khi đã có dữ liệu được gán nhãn :math:`(\mathbf{x}_i, y_i)`. Thật không may, các mẫu quan sát :math:`x_i` được thu thập từ một phân phối *mục tiêu* :math:`q(\mathbf{x})` thay vì từ phân phối *gốc* :math:`p(\mathbf{x})`. Để có được tiến triển, chúng ta cần nhìn lại xem chính xác thì việc gì đang diễn ra trong quá trình huấn luyện: ta duyệt qua tập dữ liệu huấn luyện cùng với nhãn kèm theo :math:`\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}` và cập nhật vector trọng số của mô hình sau mỗi minibatch. Đôi khi chúng ta cũng áp dụng thêm một lượng phạt nào đó lên các tham số, bằng cách dùng suy giảm trọng số, dropout hoặc các kĩ thuật liên quan khác. Điều này nghĩa là ta hầu như chỉ đang giảm thiểu giá trị mất mát trên tập huấn luyện. .. math:: \mathop{\mathrm{minimize}}_w \frac{1}{n} \sum_{i=1}^n l(x_i, y_i, f(x_i)) + \mathrm{một~lượng~phạt}(w). .. raw:: html Các nhà thống kê gọi số hạng đầu tiên là *trung bình thực nghiệm*, tức trung bình được tính qua dữ liệu lấy từ phân phối :math:`P(x) P(y \mid x)`. Nếu dữ liệu được lấy “nhầm” từ phân phối :math:`q`, ta có thể hiệu chỉnh lại bằng cách sử dụng đồng nhất thức: .. math:: \begin{aligned} \int p(\mathbf{x}) f(\mathbf{x}) dx & = \int q(\mathbf{x}) f(\mathbf{x}) \frac{p(\mathbf{x})}{q(\mathbf{x})} dx. \end{aligned} .. raw:: html Nói cách khác, chúng ta cần đánh lại trọng số cho mỗi mẫu bằng tỉ lệ của các xác suất mà mẫu được lấy từ đúng phân phối :math:`\beta(\mathbf{x}) := p(\mathbf{x})/q(\mathbf{x})`. Đáng buồn là ta không biết tỉ lệ đó, nên trước khi ta có thể làm được bất cứ thứ gì hữu ích thì ta cần phải ước lượng được nó. Nhiều phương pháp có sẵn sử dụng cách tiếp cận lý thuyết toán tử màu mè nhằm cố tái cân bằng trực tiếp toán tử kỳ vọng bằng cách sử dụng nguyên lý chuẩn cực tiểu hay entropy cực đại. Lưu ý rằng những phương thức này yêu cầu ta lấy mẫu từ cả phân phối “đúng” :math:`p` (bằng cách sử dụng tập huấn luyện) và phân phối được dùng để tạo ra tập kiểm tra :math:`q` (việc này hiển nhiên là có thể được). Tuy nhiên cũng cần để ý là ta chỉ cần mẫu :math:`\mathbf{x} \sim q(\mathbf{x})`; ta không cần sử dụng đến nhãn :math:`y \sim q(y)`. .. raw:: html Trong trường hợp này có một cách tiếp cận rất hiệu quả và sẽ cho kết quả tốt gần ngang ngửa, đó là: hồi quy logistic. Đấy là tất cả những gì ta cần để tính xấp xỉ tỉ lệ xác suất. Chúng ta cho học một bộ phân loại để phân biệt giữa dữ liệu được lấy từ phân phối :math:`p(\mathbf{x})` và phân phối :math:`q(x)`. Nếu không thể phân biệt được giữa hai phân phối thì điều đó có nghĩa là khả năng các mẫu liên quan đến từ một trong hai phân phối là ngang nhau. Mặt khác, bất kì mẫu nào mà có thể được phân biệt dễ dàng thì cần được đánh trọng số tăng lên hoặc giảm đi tương ứng. Để cho đơn giản, giả sử ta có số lượng mẫu đến từ hai phân phối là bằng nhau, được kí hiệu lần lượt là :math:`\mathbf{x}_i \sim p(\mathbf{x})` và :math:`\mathbf{x}_i' \sim q(\mathbf{x})`. Ta kí hiệu nhãn :math:`z_i` bằng 1 cho dữ liệu từ phân phối :math:`p` và -1 cho dữ liệu từ :math:`q`. Lúc này xác suất trong một bộ dữ liệu được trộn lẫn sẽ là .. math:: P(z=1 \mid \mathbf{x}) = \frac{p(\mathbf{x})}{p(\mathbf{x})+q(\mathbf{x})} \text{ và~từ~đó } \frac{P(z=1 \mid \mathbf{x})}{P(z=-1 \mid \mathbf{x})} = \frac{p(\mathbf{x})}{q(\mathbf{x})}. .. raw:: html Do đó, nếu sử dụng cách tiếp cận hồi quy logistic mà trong đó :math:`P(z=1 \mid \mathbf{x})=\frac{1}{1+\exp(-f(\mathbf{x}))}`, ta có .. math:: \beta(\mathbf{x}) = \frac{1/(1 + \exp(-f(\mathbf{x})))}{\exp(-f(\mathbf{x}))/(1 + \exp(-f(\mathbf{x})))} = \exp(f(\mathbf{x})). .. raw:: html .. raw:: html .. raw:: html Vì vậy, có hai bài toán cần được giải quyết: đầu tiên là bài toán phân biệt giữa dữ liệu được lấy ra từ hai phân phối, và sau đó là bài toán cực tiểu hóa với trọng số cho các mẫu được đánh lại với :math:`\beta`, ví dụ như thông qua các gradient đầu. Dưới đây là một thuật toán nguyên mẫu để giải quyết hai bài toán trên. Thuật toán này sử dụng tập huấn luyện không được gán nhãn :math:`X` và tập kiểm tra :math:`Z`: .. raw:: html 1. Tạo một tập huấn luyện với :math:`\{(\mathbf{x}_i, -1) ... (\mathbf{z}_j, 1)\}`. 2. Huấn luyện một bộ phân loại nhị phân sử dụng hồi quy logistic để tìm hàm :math:`f`. 3. Đánh trọng số cho dữ liệu huấn luyện bằng cách sử dụng :math:`\beta_i = \exp(f(\mathbf{x}_i))`, hoặc tốt hơn là :math:`\beta_i = \min(\exp(f(\mathbf{x}_i)), c)`. 4. Sử dụng trọng số :math:`\beta_i` để huấn luyện trên :math:`X` với nhãn :math:`Y`. .. raw:: html Lưu ý rằng phương pháp này được dựa trên một giả định quan trọng. Để có được một kết quả tốt, ta cần đảm bảo rằng mỗi điểm dữ liệu trong phân phối mục tiêu (tại thời điểm kiểm tra) có xác suất xảy ra tại thời điểm huấn luyện khác không. Nếu một điểm có :math:`q(\mathbf{x}) > 0` nhưng :math:`p(\mathbf{x}) = 0`, thì trọng số quan trọng tương ứng bằng vô hạn. .. raw:: html *Mạng Đối sinh* sử dụng một ý tưởng rất giống với mô tả ở trên để thiết kế một *bộ sinh dữ liệu* có khả năng tạo dữ liệu không thể phân biệt được với các mẫu được lấy từ một tập dữ liệu tham chiếu. Trong các phương pháp này, ta sử dụng một mạng :math:`f` để phân biệt dữ liệu thật với dữ liệu giả, và một mạng thứ hai :math:`g` cố gắng đánh lừa bộ phân biệt :math:`f` rằng dữ liệu giả là thật. Ta sẽ thảo luận vấn đề này một cách chi tiết hơn sau. .. raw:: html .. raw:: html .. raw:: html Hiệu chỉnh Dịch chuyển nhãn ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Để thảo luận về dịch chuyển nhãn, giả định rằng ta đang giải quyết một bài toán phân loại :math:`k` lớp. Nếu phân phối của nhãn thay đổi theo thời gian :math:`p(y) \neq q(y)` nhưng các phân phối có điều kiện của lớp vẫn giữ nguyên :math:`p(\mathbf{x})=q(\mathbf{x})`, thì trọng số quan trọng sẽ tương ứng với tỉ lệ hợp lý (*likelihood ratio*) của nhãn :math:`q(y)/p(y)`. Một điều tốt về dịch chuyển nhãn là nếu ta có một mô hình tương đối tốt (trên phân phối gốc), ta có thể có các ước lượng nhất quán cho các trọng số này mà không phải làm việc với không gian đầu vào (trong học sâu, đầu vào thường là dữ liệu nhiều chiều như hình ảnh, trong khi làm việc với các nhãn thường dễ hơn vì chúng chỉ là các vector có chiều dài tương ứng với số lượng lớp). .. raw:: html Để ước lượng phân phối nhãn mục tiêu, đầu tiên ta dùng một bộ phân loại sẵn có tương đối tốt (thường được học trên tập huấn luyện) và sử dụng một tập kiểm định (cùng phân phối với tập huấn luyện) để tính ma trận nhầm lẫn. Ma trận nhầm lẫn C là một ma trận :math:`k \times k`, trong đó mỗi cột tương ứng với một nhãn *thật* và mỗi hàng tương ứng với nhãn dự đoán của mô hình. Giá trị của mỗi phần tử :math:`c_{ij}` là số lượng mẫu có nhãn thật là :math:`j` *và* nhãn dự đoán là :math:`i`. .. raw:: html .. raw:: html .. raw:: html Giờ thì ta không thể tính trực tiếp ma trận nhầm lẫn trên dữ liệu mục tiêu được bởi vì ta không thể quan sát được nhãn của các mẫu trong thực tế, trừ khi ta đầu tư vào một pipeline phức tạp để đánh nhãn theo thời gian thực. Tuy nhiên điều mà ta có thể làm là lấy trung bình tất cả dự đoán của mô hình tại lúc kiểm tra, từ đó có được giá trị đầu ra trung bình của mô hình :math:`\mu_y`. .. raw:: html Hoá ra là dưới các giả định đơn giản — chẳng hạn như bộ phân loại vốn đã khá chính xác, dữ liệu mục tiêu chỉ chứa ảnh thuộc các lớp đã quan sát được từ trước, và giả định dịch chuyển nhãn là đúng (đây là giả định lớn nhất tới bây giờ), thì ta có thể khôi phục phân phối nhãn trên tập kiểm tra bằng cách giải một hệ phương trình tuyến tính đơn giản :math:`C \cdot q(y) = \mu_y`. Nếu bộ phân loại đã khá chính xác ngay từ đầu thì ma trận nhầm lẫn C là khả nghịch và ta có nghiệm :math:`q(y) = C^{-1} \mu_y`. Ở đây ta đang lạm dụng kí hiệu một chút khi sử dụng :math:`q(y)` để kí hiệu vector tần suất nhãn. Vì ta quan sát được nhãn trên dữ liệu gốc, nên có thể dễ dàng ước lượng phân phối :math:`p(y)`. Sau đó với bất kì mẫu huấn luyện :math:`i` với nhãn :math:`y`, ta có thể lấy tỉ lệ ước lượng :math:`\hat{q}(y)/\hat{p}(y)` để tính trọng số :math:`w_i` và đưa vào thuật toán cực tiểu hóa rủi ro có trọng số được mô tả ở trên. .. raw:: html Hiệu chỉnh Dịch chuyển Khái niệm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Khắc phục vấn đề dịch chuyển khái niệm theo một cách có nguyên tắc khó hơn rất nhiều. Chẳng hạn như khi bài toán đột nhiên chuyển từ phân biệt chó và mèo sang phân biệt động vật có màu trắng và động vật có màu đen, hoàn toàn có lý khi tin rằng ta không thể làm gì tốt hơn ngoài việc thu thập tập nhãn mới và huấn luyện lại từ đầu. May mắn thay vấn đề dịch chuyển tới mức cực đoan như vậy trong thực tế khá hiếm. Thay vào đó, điều thường diễn ra là tác vụ cứ dần dần thay đổi. Để làm rõ hơn, ta xét các ví dụ dưới đây: .. raw:: html - Trong ngành quảng cáo điện toán, khi một sản phẩm mới ra mắt, các sản phẩm cũ trở nên ít phổ biến hơn. Điều này nghĩa là phân phối của các mẩu quảng cáo và mức phổ biến của chúng sẽ thay đổi dần dần và bất kì bộ dự đoán tỉ lệ click chuột nào cũng cần thay đổi theo. - Ống kính của các camera giao thông bị mờ đi theo thời gian do tác động của môi trường, có ảnh hưởng lớn dần tới chất lượng ảnh. - Nội dung các mẩu tin thay đổi theo thời gian, tức là tin tức thì không đổi nhưng các sự kiện mới luôn diễn ra. .. raw:: html Với các trường hợp trên, ta có thể sử dụng cùng cách tiếp cận trong việc huấn luyện mô hình để chúng thích ứng với các biến đổi trong dữ liệu. Nói cách khác, chúng ta sử dụng trọng số đang có của mạng và chỉ thực hiện thêm vài bước cập nhật trên dữ liệu mới thay vì huấn luyện lại từ đầu. .. raw:: html .. raw:: html .. raw:: html .. raw:: html .. raw:: html Phân loại các Bài toán Học máy ------------------------------ .. raw:: html Ta đã được trang bị kiến thức về cách xử lý các thay đổi trong :math:`p(x)` và :math:`P(y \mid x)`, giờ đây ta có thể xem xét một số khía cạnh khác của việc xây dựng các bài toán học máy. .. raw:: html - **Học theo batch.** Ở đây ta có dữ liệu và nhãn huấn luyện :math:`\{(x_1, y_1), \ldots, (x_n, y_n)\}`, được sử dụng để huấn luyện mạng :math:`f(x, w)`. Sau đó, ta dùng mô hình này để đánh giá điểm dữ liệu mới :math:`(x, y)` được lấy từ cùng một phân phối. Đây là giả thuyết mặc định cho bất kỳ bài toán nào mà ta bàn ở đây. Ví dụ, ta có thể huấn luyện một mô hình phát hiện mèo dựa trên nhiều hình ảnh của mèo và chó. Sau khi hoàn tất quá trình huấn luyện, ta đưa mô hình vào một hệ thống thị giác máy tính cho cửa sập thông minh mà chỉ cho phép mèo đi vào. Hệ thống này sẽ được lắp đặt tại nhà của khách hàng và nó không bao giờ được cập nhật lại (ngoại trừ một vài trường hợp hiếm hoi). - **Học trực tuyến.** Bây giờ hãy tưởng tượng rằng tại một thời điểm ta chỉ nhận được một mẫu dữ liệu :math:`(x_i, y_i)`. Cụ thể hơn, giả sử đầu tiên ta có một quan sát :math:`x_i`, sau đó ta cần tính :math:`f(x_i, w)` và chỉ khi ta hoàn thành việc đưa ra quyết định, ta mới có thể quan sát giá trị :math:`y_i`, rồi dựa vào nó mà nhận lại phần thưởng (hoặc chịu mất mát). Nhiều bài toán thực tế rơi vào loại này. Ví dụ, ta cần dự đoán giá cổ phiếu vào ngày mai, điều này cho phép ta giao dịch dựa trên dự đoán đó và vào cuối ngày ta sẽ biết được liệu nó có mang lại lợi nhuận hay không. Nói cách khác, ta có chu trình sau, trong đó mô hình dần được cải thiện cùng với những quan sát mới. .. math:: \mathrm{mô~hình} ~ f_t \longrightarrow \mathrm{dữ~liệu} ~ x_t \longrightarrow \mathrm{ước~lượng} ~ f_t(x_t) \longrightarrow \mathrm{quan~sát} ~ y_t \longrightarrow \mathrm{mất~mát} ~ l(y_t, f_t(x_t)) \longrightarrow \mathrm{mô~hình} ~ f_{t+1} .. raw:: html - **Máy đánh bạc.** Đây là một *trường hợp đặc biệt* của bài toán trên. Trong khi ở hầu hết các bài toán ta luôn có một hàm liên tục được tham số hóa :math:`f` và công việc của ta là học các tham số của nó (ví dụ như một mạng học sâu), trong bài toán máy đánh bạc ta chỉ có một số hữu hạn các cần mà ta có thể gạt (tức một số lượng giới hạn những hành động mà ta có thể thực hiện). Không có gì quá ngạc nhiên khi với bài toán đơn giản này, ta có được các cơ sở lý thuyết tối ưu mạnh mẽ hơn. Chúng tôi liệt kê nó ở đây chủ yếu là vì bài toán này thường được xem (một cách nhầm lẫn) như là một môi trường học tập khác biệt. - **Kiểm soát (và Học Tăng cường phi đối kháng).** Trong nhiều trường hợp, môi trường ghi nhớ những gì ta đã làm. Việc này không nhất thiết phải có tính chất đối kháng, môi trường chỉ nhớ và phản hồi phụ thuộc vào những gì đã xảy ra trước đó. Ví dụ, bộ điều khiển của ấm pha cà phê sẽ quan sát được nhiệt độ khác nhau tùy thuộc vào việc nó có đun ấm trước đó không. Giải thuật điều khiển PID (*proportional integral derivative* hay *vi tích phân tỉ lệ*) là một lựa chọn phổ biến để làm điều đó. Tương tự như vậy, hành vi của người dùng trên một trang tin tức sẽ phụ thuộc vào những gì ta đã cho họ xem trước đây (chẳng hạn như là mỗi người chỉ đọc mỗi mẫu tin một lần duy nhất). Nhiều thuật toán như vậy cấu thành một mô hình của môi trường mà trong đó chúng muốn làm cho các quyết định của mình trông có vẻ ít ngẫu nhiên hơn (tức để giảm phương sai). - **Học Tăng cường.** Trong trường hợp khái quát hơn của môi trường có khả năng ghi nhớ, ta có thể gặp phải tình huống môi trường đang cố gắng *hợp tác* với ta (trò chơi hợp tác, đặc biệt là các trò chơi có tổng khác không), hoặc môi trường sẽ cố gắng *chiến thắng* ta như Cờ vua, Cờ vây, Backgammon hay StarCraft. Tương tự như vậy, có thể ta muốn xây dựng một bộ điều khiển tốt cho những chiếc xe tự hành. Những chiếc xe khác khả năng cao sẽ có những phản ứng đáng kể với cách lái của những chiếc xe tự hành, ví dụ như cố gắng tránh nó, cố gắng gây ra tai nạn, cố gắng hợp tác với nó, v.v. .. raw:: html Điểm khác biệt mấu chốt giữa các tình huống khác nhau ở trên là: một chiến lược hoạt động xuyên suốt các môi trường cố định, có thể lại không hoạt động xuyên suốt được khi môi trường có khả năng thích nghi. Chẳng hạn, nếu một thương nhân phát hiện ra cơ hội kiếm lời từ chênh lệch giá cả thị trường, khả năng cao cơ hội đó sẽ biến mất ngay khi anh ta bắt đầu lợi dụng nó. Tốc độ và cách môi trường thay đổi có ảnh hưởng lớn đến loại thuật toán mà ta có thể sử dụng. Ví dụ, nếu ta *biết trước* mọi việc chỉ có thể thay đổi một cách từ từ, ta có thể ép những ước lượng phải thay đổi dần theo. Còn nếu ta biết môi trường có thể thay đổi ngay lập tức, nhưng không thường xuyên, ta có thể cho phép điều này xảy ra. Đối với các nhà khoa học dữ liệu giỏi, những kiến thức này rất quan trọng trong việc giải quyết các toán dịch chuyển khái niệm khi vấn đề cần giải quyết lại thay đổi theo thời gian. .. raw:: html .. raw:: html .. raw:: html Công bằng, Trách nhiệm và Minh bạch trong Học máy ------------------------------------------------- .. raw:: html | Cuối cùng, cần ghi nhớ một điều quan trọng sau đây: khi triển khai một hệ thống học máy, bạn không chỉ đơn thuần cực tiểu hóa hàm đối log hợp lý hay cực đại hóa độ chính xác mà còn đang tự động hóa một quy trình quyết định nào đó. Thường thì những hệ thống được tự động hóa việc ra quyết định mà chúng ta triển khai có thể sẽ gây ra những hậu quả cho những ai chịu ảnh hưởng bởi quyết định của nó. Nếu chúng ta triển khai một hệ thống chẩn đoán y khoa, ta cần biết hệ thống này sẽ hoạt động và không hoạt động với những ai. Bỏ qua những rủi ro có thể lường trước được để chạy theo phúc lợi của một bộ phận dân số sẽ đi ngược lại những nguyên tắc đạo đức cơ bản. Ngoài ra, “độ chính xác” hiếm khi là một thước đo đúng. Khi chuyển những dự đoán thành hành động, chúng ta thường để ý đến chi phí tiềm tàng của các loại lỗi khác nhau. Nếu kết quả phân loại một bức ảnh có thể được xem như một sự phân biệt chủng tộc, trong khi việc phân loại sai sang một lớp khác thì lại vô hại, bạn có thể sẽ muốn cân nhắc cả các giá trị xã hội khi điều chỉnh ngưỡng của hệ thống ra quyết định đó. Ta cũng muốn cẩn thận về cách những hệ thống dự đoán có thể dẫn đến vòng lặp phản hồi. Ví dụ, nếu hệ thống dự đoán được áp dụng theo cách ngây ngô để dự đoán các hành động phi pháp và theo đó phân bổ sĩ quan tuần tra, một vòng luẩn quẩn có thể xuất hiện. Một khu xóm có nhiều tội phạm hơn sẽ có nhiều sĩ quan tuần tra hơn, phát hiện ra nhiều tội phạm hơn, thêm nhiều dữ liệu huấn luyện, nhận được dự đoán tốt hơn, dẫn đến nhiều sĩ quan tuần tra hơn, và càng nhiều tội ác được phát hiện,… Thêm vào đó, chúng ta cũng muốn cẩn thận ngay từ đầu về việc chúng ta có đang giải quyết đúng vấn đề hay không. | Hiện tại, các thuật toán dự đoán đóng một vai trò lớn khi làm bên trung gian trong việc phân tán thông tin. Những tin tức nào được hiển thị đến người dùng có nên được quyết định bởi những trang Facebook nào mà họ *đã thích* hay không? Đây chỉ là một số trong rất nhiều vấn đề về đạo đức mà bạn có thể bắt gặp trong việc theo đuổi sự nghiệp học máy của mình. .. raw:: html Tóm tắt ------- .. raw:: html - Trong nhiều trường hợp, tập huấn luyện và tập kiểm tra không được lấy mẫu từ cùng một phân phối. Đây là hiện tượng dịch chuyển hiệp biến. - Dịch chuyển hiệp biến có thể được phát hiện và khắc phục nếu sự dịch chuyển không quá nghiêm trọng. Thất bại trong việc khắc phục có thể dẫn đến những kết quả không lường được lúc kiểm thử. - Trong nhiều trường hợp, môi trường sẽ ghi nhớ những gì chúng ta đã làm và sẽ phản hồi theo những cách không lường trước được. Chúng ta cần xem xét điều này khi xây dựng mô hình. .. raw:: html Bài tập ------- .. raw:: html 1. Điều gì có thể xảy ra khi chúng ta thay đổi hành vi của công cụ tìm kiếm? Người dùng có thể sẽ làm gì? Còn các nhà quảng cáo thì sao? 2. Xây dựng một chương trình phát hiện dịch chuyển hiệp biến. Gợi ý: hãy xây dựng một hệ thống phân lớp. 3. Xây dựng một chương trình khắc phục vấn đề dịch chuyển hiệp biến. 4. Chuyện tồi tệ gì có thể xảy ra nếu tập huấn luyện và tập kiểm tra rất khác nhau? Chuyện gì sẽ xảy ra đối với trọng số mẫu? .. raw:: html .. raw:: html .. raw:: html Thảo luận --------- - `Tiếng Anh `__ - `Tiếng Việt `__ Những người thực hiện --------------------- Bản dịch trong trang này được thực hiện bởi: - Đoàn Võ Duy Thanh - Lý Phi Long - Lê Khắc Hồng Phúc - Nguyễn Duy Du - Phạm Minh Đức - Lê Cao Thăng - Nguyễn Minh Thư - Nguyễn Thành Nhân - Phạm Hồng Vinh - Vũ Hữu Tiệp .. |image0| image:: ../img/cat3.jpg .. |image1| image:: ../img/cat2.jpg .. |image2| image:: ../img/dog1.jpg .. |image3| image:: ../img/dog2.jpg .. |image4| image:: ../img/cat-cartoon1.png .. |image5| image:: ../img/cat-cartoon2.png .. |image6| image:: ../img/dog-cartoon1.png .. |image7| image:: ../img/dog-cartoon2.png