Vấn đề 1. Local minima and global minimum
Ý này đc giải thích tốt hơn bằng concept “exploration vs exploitation” của reinforcement learning. Nhưng mà bài này giới hạn trong supervised learning nên thôi.
“Khoảng cách” giữa output và target thường đc gọi là “cost” hoặc “loss”. Theo hướng thực dụng, thì mục đích của việc học là update bản thân để hoạt động của mình ít loss hơn. Nhưng update thì tốn năng lượng, mà người thì ko thích tiêu tốn năng lượng, và chỉ tiêu năng lượng cho những việc họ cho là đáng làm.
Trong quá trình training/học, có thể mình thấy kĩ thuật của mình đã tiến bộ hơn so với trước đó, và nếu mình thay đổi, thì output của mình sẽ tệ đi. Với AI model thì đây gọi là minima, nhìn xung quanh thì chả có chỗ nào tốt hơn/thấp hơn/ ít loss hơn chỗ này. Và mọi thay đổi sẽ là tăng loss, thay vì giảm loss. Và AI model sẽ dừng training lúc này. Thế nên là programmer phải áp dụng 1 số kĩ thuật như regularization, thay đổi loss function, minibatch gradient descent…. để AI model có thể “thoát khỏi” local minima, từ bỏ những nơi “hơi hơi tốt” để đến nơi tốt hơn. Trước khi đến nơi thấp hơi, thì phải chấp nhận leo ra khỏi chỗ thấp mình đang ở.
Đôi lúc thì mình cảm thấy thỏa mãn với kỹ thuật, output của bản thân. Và mình có xu hướng dừng training, vì mình nghĩ là mình đã đủ tốt rồi. Lúc này thì nên niệm 1 mantra trong Vagabond, “There is no limit to technique. There is always room for improvement.”. Luôn luôn có chỗ để tiến bộ.
Ngay cả khi mình biết là ko có global minimum, training/học ko bao giờ dừng…, thì việc từ bỏ cảm giác thỏa mãn, từ bỏ trạng thái ít loss, đi làm những hành động tăng loss, kĩ thuật tệ đi, chất lượng cuộc sống giảm đi… đều là những thứ khó làm. Dù sao thì, tùy vào purpose, mà The Creator sẽ thúc đít và train dù mình có muốn hay ko. Tự giác lao vào bể khổ thì đỡ khổ hơn là chống cự.
“The perfect man employs his mind as a mirror; it grasps nothing, it refuses nothing, it receives, but does not keep ” – Chuang Tzu. Ko níu kéo những thứ đã qua, ko từ chối những thứ sắp đến, mọi thứ đều là training, và việc của mình chỉ đơn giản là cho ra output tốt nhất và enjoy the waves. Loss tăng hay giảm, đó là việc của The Creator.
“Mistakes’ is the word you’re too embarrassed to use. You ought not to be. You’re a product of a trillion of them. Evolution forged the entirety of sentient of life on this planet using one tool – the mistake.” – Dr. Robert Ford, WestWorld
Vấn đề 2. Overfitting and underfitting
Khi train 1 model thì người ta hay chia dataset ra làm 3 loại: training, validation, và test. Training dataset dc dùng để… train model, loss này đc dùng để update model. Với validation dataset thì loss vẫn đc tính, nhưng loss đó đc dùng để programmer xem xem model đang đi theo hướng nào, và loss này ko đc dùng để update model. Test thì cũng na ná validation, chỉ là lúc này model ko ở trong giai đoạn phát triển, mà trong giai đoạn kiểm tra chất lượng.
Validation và test là unseen data (vì model ko đc update trong lúc nó chạy validation và test dataset). Mục đích của validation và test là giúp programmer xem xem model có “hiểu”, có nhìn thấy underline pattern của data hay ko. Ví dụ, cho 1 dãy số 1,2,4,8,16… underline pattern của dãy số này là “số sau gấp đôi số trước”. Khi nhìn thấy underline pattern thì mình có thể dự đoán đc số tiếp theo trong dãy số. 1 ví dụ khác là 1 công thức ax +b = y, giả sử mình có dataset: 1x+2 = 4, 3x + 4 = 10, 5x +1 = 11, thì dựa vào dataset này, mình khá chắc x=2, vì xác suất x=2 cho ra kết quả đúng là 3/3, 100%. Nếu mình ko hiểu underlined pattern, thì khi gặp những thứ mình chưa thấy, mình phải educated guess – đoán dựa theo những gì mình đã thấy.
Underfit là khi model quá đơn giản, và ko có khả năng nhìn thấy underline pattern và cho ra kết quả gần target. Con người thì bị dính underfit trong 2 trường hợp: 1 là ko đủ tâm lực để hiểu và giải quyết vấn đề, 2 là bị overloaded thông tin, ngốn quá nhiều data mà chưa kịp tiêu hóa và update. Ví dụ, tập võ. Newbie lúc mới tập, phải tiếp thu rất nhiều thông tin, ko biết người khác đang làm gì, và ko biết mình đang làm gì (ko nhìn thấy đc pattern và phản ứng hợp lý theo pattern của mình và đối thủ).
Còn với người tập lâu, nhìn ánh mắt, cái lắc hông của đối thủ là đã có thể dự đoán đối thủ sắp làm gì. Ví dụ 2, người đọc bài này. Nếu attention span của bạn khoảng 10 phút, thì bạn ko đủ tâm lực để load mấy ý này, đây là trường hợp 1. Trường hợp 2, bạn ko có kinh nghiệm về AI hay việc học, thì quá nhiều thông tin để tiêu hóa ở đây. Nếu bạn đã biết những concept căn bản của AI nhắc đến trong bài (global/local minimum, loss function, training loop…), hoặc bạn có kinh nghiệm với việc học, thì bài này dễ như ăn cháo.
Cách giải quyết underfit đơn giản là, tăng nội công/tâm lực (để chơi game đúng tầm), và more training time (từ từ tiêu hóa và xử lý thông tin).
Overfit là khi model giải quyết rất tốt những vấn đề nó đã nhìn thấy (từ training dataset), nhưng giải quyết rất tệ những vấn đề nó chưa nhìn thấy (validation và test dataset). Nguyên nhân thường là 1 là training data quá ít, ko đủ để model nhận thức đc toàn cảnh vấn đề. Vì ko có toàn cảnh vấn đề nên ko nhìn thấy đc underline patterns, mà lại quá tự tin vào cái “hiểu” thiếu xót. Con người overfitted thì người ta hay gọi là “ếch ngồi đáy giếng”.
Cái giếng là 1 thế giới nhỏ, mình có thể biết tất tần tật và dự đoán mọi thứ xảy ra trong cái giếng, cuộc sống của mình rất tốt, loss gần bằng 0. Nhưng khi ra khỏi miệng giếng, là 1 dataset hoàn toàn khác, những patterns mình chưa thấy bao giờ, thì mình bị con bò dẫm lòi ruột.
Con người thì luôn luôn bị cả overfitted lẫn underfitted. Undefit là hiểu ko đủ sâu. Overfit là hiểu ko đủ rộng. Và vì cuộc đời ko có global minimum, nên con người ko bao giờ có thể hiểu đủ sâu và đủ rộng. Luôn luôn có chỗ cho sự tiến bộ.