Loss Function (Hàm mất mát) và Objective Function (Hàm mục tiêu)

<p style="text-align: justify;">Trong&nbsp;<a href="../../../khoa-hoc/machine-learning-co-ban/luong-cang-cao-se-cang-hanh-phuc-vi-du-dau-tien-ve-machine-learning" target="_blank" rel="noopener">b&agrave;i trước</a>, ch&uacute;ng ta đ&atilde; biết rằng để huấn luyện m&ocirc; h&igrave;nh machine learning th&igrave; th&ocirc;ng thường ch&uacute;ng ta thường thực hiện c&ocirc;ng việc tối ưu h&oacute;a một h&agrave;m mục ti&ecirc;u hay l&agrave;m cực tiểu một h&agrave;m mất m&aacute;t (loss function). Trong b&agrave;i n&agrave;y ch&uacute;ng ta sẽ t&igrave;m hiểu chi tiết hơn về c&aacute;c h&agrave;m loss function v&agrave; objective function n&agrave;y.</p> <h2 id="ftoc-heading-1" class="ftwp-heading" style="text-align: justify;">Vấn đề ước lượng h&agrave;m số trong machine learning</h2> <p style="text-align: justify;">Trong machine learning, bạn được cung cấp một tập hữu hạn c&aacute;c quan s&aacute;t (dữ liệu) v&agrave; phải từ số lượng hữu hạn dữ liệu n&agrave;y x&acirc;y dựng được một m&ocirc; h&igrave;nh hoặc một quy luật tổng qu&aacute;t cho b&agrave;i to&aacute;n sao cho m&ocirc; h&igrave;nh của bạn c&oacute; thể dự đo&aacute;n đ&uacute;ng cả trong những trường hợp dữ liệu mới được đưa v&agrave;o kh&ocirc;ng c&oacute; trong tập dữ liệu hữu hạn đ&atilde; được quan s&aacute;t. Điều n&agrave;y kh&aacute; giống như c&ocirc;ng việc m&agrave; c&aacute;c nh&agrave; khoa học tự nhi&ecirc;n vẫn thực hiện h&agrave;ng ng&agrave;n năm nay.</p> <p style="text-align: justify;">Nếu bạn đ&atilde; học qua chương tr&igrave;nh Vật l&yacute; phổ th&ocirc;ng, hẳn c&aacute;c bạn đều biết đến một truyền thuyết rằng&nbsp;<a href="https://vi.wikipedia.org/wiki/Isaac_Newton" target="_blank" rel="noopener">Newton</a>&nbsp;bị quả t&aacute;o rơi v&agrave;o đầu v&agrave; nghĩ ra định luật vạn vật hấp dẫn,&nbsp;<a href="https://vi.wikipedia.org/wiki/Albert_Einstein" target="_blank" rel="noopener">Einstein</a> quan s&aacute;t c&aacute;c ch&ugrave;m s&aacute;ng v&agrave; ph&aacute;t hiện ra thuyết tương đối. Nhưng thực sự từ những &yacute; tưởng mơ mộng đ&oacute; đến c&aacute;c phương tr&igrave;nh vật l&yacute; $F=m a$ hay $E=m c^{2}$ l&agrave; cả một qu&atilde;ng đường th&iacute; nghiệm v&agrave; nghi&ecirc;n cứu trải d&agrave;i h&agrave;ng năm thậm ch&iacute; h&agrave;ng chục năm. C&aacute;c nh&agrave; khoa học sẽ phải quan s&aacute;t rất nhiều số liệu đo đạc từ thực tế, sau đ&oacute; đưa ra c&aacute;c phương tr&igrave;nh &ldquo;hợp l&yacute;&rdquo; cho c&aacute;c số liệu đo đạc đ&oacute; (tức l&agrave; sai số nhỏ nhất). Điều n&agrave;y giống hệt với những g&igrave; ch&uacute;ng ta đ&atilde; l&agrave;m trong b&agrave;i trước về v&iacute; dụ&nbsp;<a href="../../../khoa-hoc/machine-learning-co-ban/luong-cang-cao-se-cang-hanh-phuc-vi-du-dau-tien-ve-machine-learning" target="_blank" rel="noopener">x&aacute;c định mức độ h&agrave;i l&ograve;ng với c&ocirc;ng việc theo mức lương</a>. Tất nhi&ecirc;n c&aacute;c b&agrave;i to&aacute;n khoa học th&igrave; phức tạp hơn, nhiều tham số hơn v&agrave; tham số đ&oacute; cũng kh&oacute; đo đạc hơn. Nhưng nh&igrave;n chung, mọi chuyện diễn ra kh&aacute; tương tự.</p> <p style="text-align: justify;"><img style="width: 100%;" src="../../../public_files/fddf0d3d-bfb1-485a-b226-aca1aba94201" alt="Loss-Function-2-768x725" /></p> <p style="text-align: justify;">Tuy nhi&ecirc;n, c&oacute; ba vấn đề nghịch l&yacute; xảy ra trong thực tế khoa học, cũng như trong ch&iacute;nh machine learning đ&oacute; l&agrave;:</p> <ul style="text-align: justify;"> <li>Dữ liệu trong một b&agrave;i to&aacute;n l&agrave; v&ocirc; hạn, cũng như c&aacute;c quan s&aacute;t trong thực tế cũng l&agrave; v&ocirc; hạn nhưng sức người c&oacute; hạn v&agrave; chỉ c&oacute; thể c&oacute; được một phần hữu hạn (thường l&agrave; rất nhỏ) trong to&agrave;n bộ số lượng v&ocirc; hạn c&aacute;c quan s&aacute;t đ&oacute;. V&agrave; kể cả ch&uacute;ng ta c&oacute; thu được một c&aacute;ch đầy đủ v&ocirc; hạn dữ liệu th&igrave; cũng kh&ocirc;ng c&oacute; m&aacute;y t&iacute;nh hoặc năng lực t&iacute;nh to&aacute;n n&agrave;o c&oacute; thể xử l&yacute; nổi</li> <li>Ngo&agrave;i ra, dữ liệu khi đo đạc lu&ocirc;n tồn tại c&aacute;c sai số ngẫu nhi&ecirc;n v&agrave; kh&ocirc;ng phải l&uacute;c n&agrave;o cũng đ&uacute;ng 100%.</li> <li>Ch&uacute;ng ta kh&ocirc;ng thực sự biết thế giới n&agrave;y tồn tại như thế n&agrave;o, v&agrave; cũng chẳng biết c&aacute;c m&ocirc; h&igrave;nh ch&iacute;nh x&aacute;c trong b&agrave;i to&aacute;n l&agrave; như thế n&agrave;o n&ecirc;n gần như ch&uacute;ng ta sẽ phải đi t&igrave;m c&aacute;i m&agrave; ch&uacute;ng ta kh&ocirc;ng bao giờ biết.</li> </ul> <p style="text-align: justify;">Ch&iacute;nh v&igrave; những l&yacute; do đ&oacute; m&agrave; c&aacute;c m&ocirc; h&igrave;nh machine learning hay kể cả những m&ocirc; h&igrave;nh khoa học ch&uacute;ng ta t&igrave;m thấy v&agrave; sử dụng đều l&agrave; kh&ocirc;ng thể x&aacute;c định n&oacute; c&oacute; đ&uacute;ng hay kh&ocirc;ng nếu kh&ocirc;ng được thực nghiệm đủ tốt trong thực tế. Ch&uacute;ng ta chỉ c&oacute; m&ocirc; h&igrave;nh đủ tốt chử kh&ocirc;ng c&oacute; m&ocirc; h&igrave;nh ch&iacute;nh x&aacute;c. Hay n&oacute;i c&aacute;ch kh&aacute;c, bạn cần t&igrave;m một h&agrave;m b&iacute; ẩn $f^{*}$ n&agrave;o đ&oacute; từ một loạt c&aacute;c mẫu quan s&aacute;t $x^{(1)}, \cdots, x^{(N)}$ cho trước, trong đ&oacute; c&oacute; thể c&oacute; chứa c&aacute;c nhān $y^{(1)}=f^{*}\left(x^{(1)}\right), \cdots, y^{(N)}=f^{*}\left(x^{(N)}\right)$ tương ứng. Nhưng bạn lại chẳng thể biết ch&iacute;nh x&aacute;c h&agrave;m $f^{*}$ l&agrave; g&igrave; m&agrave; chỉ biết c&aacute;c dữ liệu quan s&aacute;t $\left(x^{(i)}, y^{(i)}\right)$ với đầy nhiễu đo đạc.</p> <p style="text-align: justify;"><strong>V&iacute; dụ: </strong>Ch&uacute;ng ta c&oacute; một h&agrave;m $f^{*}=x^{2}$ v&agrave; c&aacute;c cặp gi&aacute; trị tương ứng $(1,1),(2,4),(3,9),(5,25) .$ Nếu ta biết h&agrave;m số c&oacute; dạng bậc 2 th&igrave; mọi chuyện cực kỳ đơn giản, ch&uacute;ng ta c&oacute; thể dễ d&agrave;ng suy ra được h&agrave;m $f^{*}$, nhưng vấn đề l&agrave; ch&uacute;ng ta lại kh&ocirc;ng biết dạng thực sự của h&agrave;m c&oacute; phải l&agrave; bậc 2 hay kh&ocirc;ng. Đến đ&acirc;y, chắc chắn để kh&ocirc;i phục lại h&agrave;m l&agrave; điều cực kỳ kh&oacute; khăn chưa kể đến trường hợp c&oacute; nhiễu trong dữ liệu quan s&aacute;t.</p> <p style="text-align: justify;">V&igrave; ta kh&ocirc;ng thể n&agrave;o biết được $f^{*}$ c&oacute; dạng như thế n&agrave;o. Do đ&oacute;, d&ugrave; ta c&oacute; đưa ra một m&ocirc; h&igrave;nh $f_{w}$ để ước lượng $f^{*}$, th&igrave; ta cũng kh&ocirc;ng biết ch&iacute;nh x&aacute;c $f^{*}$ l&agrave; g&igrave; để biết l&agrave; ta đang đ&uacute;ng hay sai. N&oacute;i c&aacute;ch kh&aacute;c, machine learning l&agrave; một tr&ograve; chơi dự đo&aacute;n m&agrave; kh&ocirc;ng ai biết đ&aacute;p &aacute;n đ&uacute;ng l&agrave; g&igrave;.</p> <p style="text-align: justify;"><img style="width: 100%;" src="../../../public_files/4849abc6-c0a7-498a-9219-f971faf981f4" alt="Loss-Function-4" /></p> <p style="text-align: justify;">C&oacute; vẻ đến đ&acirc;y ch&uacute;ng ta nghe kh&aacute; nản rồi phải kh&ocirc;ng ạ? Tuy nhi&ecirc;n, đừng lo lắng, bạn vẫn thấy c&aacute;c phương tr&igrave;nh của Newton hay Einstein &ldquo;chạy&rdquo; tốt chứ? T&ocirc;i th&igrave; thực sự kh&ocirc;ng biết n&oacute; c&oacute; ch&iacute;nh x&aacute;c hay kh&ocirc;ng, nhưng cho đến giờ, người ta vẫn phải l&agrave;m h&agrave;ng ng&agrave;n th&iacute; nghiệm thực tế để kiểm chứng lại c&aacute;c l&yacute; thuyết n&agrave;y cho đến khi n&oacute; sai th&igrave; th&ocirc;i. M&agrave; thực ra cơ học của Newton đ&atilde; được chỉ ra l&agrave; kh&ocirc;ng ch&iacute;nh x&aacute;c trong vật l&yacute; lượng tử, nhưng đ&acirc;u c&oacute; quan trọng, n&oacute; vẫn hoạt động tốt trong c&aacute;c hoạt động h&agrave;ng ng&agrave;y l&agrave; được m&agrave;. Trong machine learning cũng vậy, ch&uacute;ng ta kh&ocirc;ng cần biết n&oacute; c&oacute; thực sự đ&uacute;ng hay kh&ocirc;ng m&agrave; ch&uacute;ng ta chỉ cần n&oacute; đ&uacute;ng trong thực nghiệm. Điều n&agrave;y kh&aacute;c biệt ho&agrave;n to&agrave;n với to&aacute;n học phải đ&uacute;ng về mặt l&yacute; thuyết, machine learning cũng như c&aacute;c ng&agrave;nh khoa học thực nghiệm kh&aacute;c chỉ cần quan t&acirc;m đến việc n&oacute; đ&uacute;ng trong thực tế. N&oacute;i c&aacute;ch kh&aacute;c, cho d&ugrave; ch&uacute;ng ta kh&ocirc;ng biết h&igrave;nh dạng của $f^{*}$ ra sao, th&igrave; ch&uacute;ng ta vẫn c&ograve;n đ&oacute; c&aacute;c dữ liệu sinh ra từ h&agrave;m n&agrave;y để c&oacute; thể đ&aacute;nh gi&aacute; độ tốt của một model tr&ecirc;n c&aacute;c dữ liệu thực tế n&agrave;y. V&agrave; mục ti&ecirc;u của ch&uacute;ng ta đ&oacute; l&agrave; tối ưu&nbsp;độ đo hiệu quả P&nbsp;tr&ecirc;n dữ liệu thực tế sao cho lỗi dự đo&aacute;n l&agrave; tối thiểu tr&ecirc;n dữ liệu thực tế. Do độ đo P tối ưu kh&ocirc;ng phải bao giờ cũng dễ d&agrave;ng để tối ưu (do t&iacute;nh rời rạc, kh&ocirc;ng c&oacute; đạo h&agrave;m&hellip;) do đ&oacute;, ch&uacute;ng ta thường &aacute;nh xạ n&oacute; sang những đại lượng tương tự m&agrave; c&oacute; thể biểu diễn được dưới dạng c&aacute;c h&agrave;m số c&oacute; thể tối ưu được gọi l&agrave; c&aacute;c h&agrave;m mục ti&ecirc;u (objective function) hoặc h&agrave;m mất m&aacute;t (loss function).</p> <h2 id="ftoc-heading-2" class="ftwp-heading" style="text-align: justify;">Loss Function v&agrave; Objective Function</h2> <p style="text-align: justify;">Về mặt bản chất, loss function (h&agrave;m mất m&aacute;t) l&agrave; h&agrave;m cho ph&eacute;p x&aacute;c định mức độ sai kh&aacute;c của kết quả dự đo&aacute;n so với gi&aacute; thực thực cần dự đo&aacute;n. N&oacute; l&agrave; một phương ph&aacute;p đo lường chất lượng của m&ocirc; h&igrave;nh dự đo&aacute;n tr&ecirc;n tập dữ liệu quan s&aacute;t. Nếu m&ocirc; h&igrave;nh dự đo&aacute;n sai hiều th&igrave; gi&aacute; trị của loss function sẽ c&agrave;ng lớn v&agrave; ngược lại nếu n&oacute; dự đo&aacute;n c&agrave;ng đ&uacute;ng th&igrave; gi&aacute; trị của loss function sẽ c&agrave;ng thấp.</p> <p style="text-align: justify;"><strong>V&iacute; dụ 1.</strong>&nbsp;Ở đ&acirc;y, để cho dễ hiểu, ch&uacute;ng ta định nghĩa một h&agrave;m loss function đơn giản như sau. X&eacute;t b&agrave;i to&aacute;n hồi&nbsp;<a href="../../../khoa-hoc/machine-learning-co-ban/luong-cang-cao-se-cang-hanh-phuc-vi-du-dau-tien-ve-machine-learning" target="_blank" rel="noopener">quy mức độ h&agrave;i l&ograve;ng với c&ocirc;ng việc theo mức lương ở b&agrave;i trước</a>. Với mỗi dự đo&aacute;n m&agrave; m&ocirc; h&igrave;nh đưa ra, ch&uacute;ng ta đưa ra một gi&aacute; trị mất m&aacute;t do dự đo&aacute;n sai l&agrave; trị tuyệt đối của hiệu giữa gi&aacute; trị dự đo&aacute;n v&agrave; gi&aacute; trị thực trong bộ dữ liệu quan s&aacute;t. Hay loss $=\left|y_{\text {predicted }}-y\right|$, trong đ&oacute; $y_{\text {predicted }}$ l&agrave; gi&aacute; trị dự đo&aacute;n của m&ocirc; h&igrave;nh v&agrave; $y$ l&agrave; gi&aacute; trị nh&atilde;n đ&uacute;ng trong bộ dữ liệu quan s&aacute;t. Lấy một số điểm dự đo&aacute;n ta t&iacute;nh được gi&aacute; trị mất m&aacute;t tại một số điểm trong bộ dữ liệu quan s&aacute;t như sau:</p> <table style="width: 90.2025%; height: 88px;"> <tbody> <tr style="height: 22px;"> <td style="width: 25.1633%; text-align: center; height: 22px;">Gi&aacute; trị thật $y$</td> <td style="width: 33.4756%; height: 22px; text-align: center;">Gi&aacute; trị dự b&aacute;o $y_{\text {predicted }}$</td> <td style="width: 34.669%; height: 22px; text-align: center;">Gi&aacute; trị mất m&aacute;t do dự đo&aacute;n sai</td> </tr> <tr style="height: 22px;"> <td style="width: 25.1633%; height: 22px; text-align: center;">60</td> <td style="width: 33.4756%; height: 22px; text-align: center;">60</td> <td style="width: 34.669%; height: 22px; text-align: center;">0</td> </tr> <tr style="height: 22px;"> <td style="width: 25.1633%; height: 22px; text-align: center;">70</td> <td style="width: 33.4756%; height: 22px; text-align: center;">80</td> <td style="width: 34.669%; height: 22px; text-align: center;">10</td> </tr> <tr style="height: 22px;"> <td style="width: 25.1633%; height: 22px; text-align: center;">80</td> <td style="width: 33.4756%; height: 22px; text-align: center;">70</td> <td style="width: 34.669%; height: 22px; text-align: center;">10</td> </tr> </tbody> </table> <p style="text-align: justify;">Như vậy, ch&uacute;ng ta c&oacute; thể t&iacute;nh được gi&aacute; trị mất m&aacute;t do m&ocirc; h&igrave;nh dự đo&aacute;n tại tất cả c&aacute;c điểm trong bộ dữ liệu quan s&aacute;t. Gi&aacute; trị n&agrave;y c&oacute; thể lớn, c&oacute; thể nhỏ v&agrave; kh&aacute; rời rạc n&ecirc;n ch&uacute;ng ta kh&ocirc;ng thể biết được đ&acirc;u l&agrave; dự đo&aacute;n tốt, đ&acirc;u l&agrave; dự đo&aacute;n kh&ocirc;ng tốt, v&igrave; vậy để đ&aacute;nh gi&aacute; mức độ tốt của m&ocirc; h&igrave;nh dự đo&aacute;n, ch&uacute;ng ta lấy trung b&igrave;nh gi&aacute; trị mất m&aacute;t của to&agrave;n bộ c&aacute;c điểm tr&ecirc;n bộ dữ liệu quan s&aacute;t. Điều n&agrave;y gi&uacute;p ta x&aacute;c định được một loss function tr&ecirc;n to&agrave;n bộ bộ dữ liệu quan s&aacute;t:</p> <p style="text-align: center;">$\mathcal{L}=\frac{1}{N} \sum_{i=1}^{N}\left|f_{w}\left(x^{(i)}\right)-y^{(i)}\right|$</p> <p><img style="width: 100%; display: block; margin-left: auto; margin-right: auto;" src="../../../public_files/644eab14-4616-4c28-bba7-35b04173c09d" alt="Loss-Function-3" /></p> <p style="text-align: justify;"><strong>V&iacute; dụ 2.</strong>&nbsp;Thay v&igrave; h&agrave;m trị tuyệt đối ở tr&ecirc;n, b&acirc;y giờ ch&uacute;ng ta c&oacute; muốn phạt nặng nhiều lần hơn cho c&aacute;c dự đo&aacute;n sai lớn, v&agrave; để c&oacute; thể t&iacute;nh được đạo h&agrave;m dễ d&agrave;ng hơn, khi đ&oacute; ch&uacute;ng ta c&oacute; thể chọn h&agrave;m trung b&igrave;nh b&igrave;nh phương như đ&atilde; n&oacute;i ở b&agrave;i trước:</p> <p style="text-align: center;">$\mathcal{L}\left(m_{0}, m_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(f\left(x_{i}, m_{0}, m_{1}\right)-y\right)^{2}$</p> <p style="text-align: justify;">N&oacute;i t&oacute;m lại, loss function l&agrave; c&aacute;c h&agrave;m phạt, đo lường mức độ dự đo&aacute;n sai của m&ocirc; h&igrave;nh tr&ecirc;n dữ liệu quan s&aacute;t hữu hạn, n&oacute; l&agrave; trung b&igrave;nh lỗi dự đo&aacute;n tr&ecirc;n to&agrave;n bộ bộ dữ liệu v&agrave; thường cần nhận gi&aacute; trị thực, kh&ocirc;ng &acirc;m (để đo cường độ v&agrave; kh&ocirc;ng l&agrave;m triệt ti&ecirc;u lỗi khi t&iacute;nh trung b&igrave;nh), ngo&agrave;i ra n&oacute; n&ecirc;n c&oacute; đạo h&agrave;m dễ x&aacute;c định để tiện cho việc tối ưu h&oacute;a sử dụng c&aacute;c thuật to&aacute;n dựa tr&ecirc;n đạo h&agrave;m hoặc gradient sau n&agrave;y.</p> <p style="text-align: justify;">C&aacute;c loss function n&agrave;y c&oacute; thể được sử dụng trong cả qu&aacute; tr&igrave;nh huấn luyện lẫn qu&aacute; tr&igrave;nh đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh. Trong qu&aacute; tr&igrave;nh đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh n&oacute; được gọi l&agrave; h&agrave;m đ&aacute;nh gi&aacute; (evaluation function). C&ograve;n ngược lại khi ch&uacute;ng ta sử dụng c&aacute;c loss function n&agrave;y v&agrave;o qu&aacute; tr&igrave;nh huấn luyện tr&ecirc;n tập dữ liệu huấn luyện, ch&uacute;ng ta gọi n&oacute; l&agrave; objective function hay h&agrave;m mục ti&ecirc;u m&agrave; ch&uacute;ng ta cần tối ưu h&oacute;a.</p> <p style="text-align: justify;">Hầu hết mọi qu&aacute; tr&igrave;nh huấn luyện m&ocirc; h&igrave;nh machine learning đều tập trung v&agrave;o việc tối ưu h&oacute;a một hoặc một số h&agrave;m mục ti&ecirc;u n&agrave;o đ&oacute;. Trong đa số c&aacute;c trường hợp n&oacute; l&agrave; c&aacute;c h&agrave;m loss function hay h&agrave;m mất m&aacute;t hoặc h&agrave;m phạt, nhưng cũng c&oacute; những trường hợp n&oacute; l&agrave; c&aacute;c h&agrave;m thưởng cần cực đại h&oacute;a. Tất cả ch&uacute;ng đều gọi chung l&agrave; Objective Function hay h&agrave;m mục ti&ecirc;u. V&agrave; hầu hết mọi b&agrave;i to&aacute;n machine learning đều quy về một b&agrave;i to&aacute;n tối ưu h&agrave;m mục ti&ecirc;u. C&aacute;c thuật to&aacute;n machine learning đều quy về c&aacute;c thuật to&aacute;n tối ưu v&agrave; cũng như lĩnh vực tối ưu h&oacute;a trong to&aacute;n học, cũng c&oacute; rất nhiều c&aacute;c phương ph&aacute;p để l&agrave;m việc n&agrave;y. Ch&uacute;ng ta sẽ quay lại chi tiết một số h&agrave;m mất m&aacute;t cũng như c&aacute;c phương ph&aacute;p tối ưu ở c&aacute;c b&agrave;i tiếp theo trong Series n&agrave;y.</p> <hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p>