Khác với những bài viết trước, bài viết này sẽ có thể hơi lộn xộn vì đó cũng chính là tâm trạng của mình khi gõ những dòng này. Mình đã định không viết gì vào tuần này. Một phần vì mình không tìm được nguồn cảm hứng để viết (những bài viết trước mình luôn viết trong lúc cảm hứng rất dồi dào) và cũng vì mình cũng chưa nghĩ ra được một câu chuyện hoàn chỉnh và hay ho để kể cho mọi người. Nhưng mà, mình từng bảo mình sẽ viết dù không có ai đọc mà, vậy thì tại sao mình phải áp lực chính bản thân mình về nội dung của nó nhỉ? Cứ viết thôi :))).

Tuần này có những câu chuyện rời rạc, nhưng suy nghĩ còn dở dang của mình…

Fail silently

“Neural network fails silently”1 - mình đã trải nghiệm điều này khá nhiều lần, và tuần này mình vừa được trải nghiệm nó thêm một lần nữa =)))

Trong quá trình phát triển segmentation model, mình có viết một đoạn code nhỏ để tính pixel-level accuracy giữa predicted mask và groundtruth mask. Thụât toán thì cũng không có gì phức tạp, chỉ cần đọc vào ảnh và groundtruth tương ứng, chuyển chúng thành numpy array và so sánh pixel-wise là được. Vì nó đơn giản nên mình cũng không nghĩ là nó sẽ có bug :((

Đoạn code mình tính average accuracy như thế này:


avg_acc = np.average(seg_mask == gt_mask)

Khi chạy code thì mình nhận được một warning như thế này

DeprecationWarning: elementwise comparison failed; this will raise an error in the future.

Vì nó là DeprecationWarning và kết quả average trên tất cả các ảnh cũng ra một con số có nghĩa nên là mình cũng không để tâm lắm. Mình có để ý là kết quả evaluation hơi thấp hơn mình mong đợi. Mình nghĩ là chắc do đây là baseline model, và mình đã dành thời gian để cải thiện phần model training với mục đích tăng kết quả evaluation lên. Sau khi mình implement một số kĩ thuật training tốt hơn, kết quả evaluation có tăng nhưng không đáng kể và nó vẫn thấp hơn mình mong đợi. Mình bắt đầu cảm thấy bối rối (mình nghĩ với ai làm về Deep Learning thì đều đã trải qua cảm giác này). Và những lúc bối rối như thế này, mình bắt đầu kiểm tra lại mọi thứ

  • Data: Data mình lấy trực tiếp từ người khác, nên khả năng có lỗi cũng không cao, mà nếu có lỗi gì đó thì thường sẽ xảy ra lúc training mà training ổn nên tạm coi như data đã ổn.
  • Prediction của model: Visualize predicted segmentation mask thì mình vẫn thấy không có vấn đề gì.
  • Kiểm tra colorspace của predicted mask và groundtruth mask đã giống nhau chưa. Cả hai đã giống nhau, đều là grayscale image.
  • Ơ thế thì không lẽ model của mình có vấn đề …., cái này là ít khả năng nhất, và nếu debug thì sẽ tốn rất nhiều thời gian :(((

Tới đây mình bắt đầu cảm thấy hơi hoang mang, và trong những lúc như vậy mình quyết định làm mọi thứ cực kì cẩn thận. Mình nhớ đến cái warning khi này, mặc dù biết là nó cũng không liên quan gì nhưng mình quyết định cứ refactor lại nó (vì mình cũng chưa biết làm gì tiếp). Thế là mình search document của numpy và viết lại nó thành như thế này


avg_acc = np.average(np.equal(seg_mask, gt_mask))

Mình chạy lại code để đảm bảo cái warning đó đã mất đi. Đúng là nó mất đi thật, nhưng code của mình lại báo lỗi (•_•) (refactor xong xuất hiện thêm lỗi là có thật).


ValueError: operands could not be broadcast together with shapes (433,577) (480,640)

Ồ… hóa ra là vậy :(((. Data mình có vấn đề - size của input image và groundtruth mask bị sai lệch vài pixel. Và với 2 numpy array có shape khác nhau, khi thực hiện element-wise comparision như trên thì nó sẽ không báo lỗi mà trả về giá trị False, và khi pass False vào np.average() thì giá trị nhận được sẽ là 0.0. I’m fine ಥ_ಥ.

I’m stuck

Mình hay làm những task của thesis (do mình đặt ra) vào buổi tối. Nhưng thường sau khi dành cả ngày để tập trung vào công việc của công ty, mình thường cảm thấy hơi cạn kiệt năng lượng và cảm hứng. Và khi phải đối mặt với những task cần sự tập trung và nhiều năng lượng như implement một model, code của mình nó sẽ trở nên như thế này …. Mặc dù biết là không tốt, nhưng lúc đó mình chỉ cần nó train được và losses trả về hợp lí là đươc :'(.

Mình đang bị kẹt trong việc phát triển model của mình. Thật ra đây không phải là lần đầu mình rơi vào tình trạng này. Đó là trạng thái sau khi bạn đã phát triển thành công một baseline model, thử một số phương pháp phổ biến nhất để cải thiện nó và đạt được một kết quả tạm chấp nhận được nhưng không phải là cái mà bạn đang mong đợi. Lúc đó, bạn sẽ phải trả lời câu hỏi “What’s next?”. Đúng vậy, làm gì tiếp theo đây? Trước đây, mình thường hay giải quyết bằng cách thực hiện những thay đổi nhỏ trong hyperparameters, sau đó train lại và cầu nguyện cho nó hiệu quả. Phương pháp đó làm mình cảm thấy mình productive, vì mình vẫn đang làm gì đó, nhưng thật sự thì nó không hiệu quả lắm khi mà nếu model của bạn đã ổn định thì hầu như những thay đổi đó cũng không có ích gì mấy. Hiện tại mình đã đưa việc “productive ảo” này lên một tầm cao mới: thay vì chỉ thực hiện hyper-parameter tuning, mình suy nghĩ về việc tạo ra model khác bằng việc lắp ghép những ý tưởng khác nhau lại và implement tụi nó =)))). (Mình cảm thấy mình khá giỏi trong việc tự đánh lừa chính bản thân mình =))) ).

Việc productive một cách không thật sự productive như vậy càng làm mình cạn kiệt năng lượng. Mình nghĩ mình sẽ không lao đầu vào cái này nữa (rút kinh nghiệm từ những lần trước =))) ). Dự định của mình là “đi chậm” lại một tí, tạm gác những model qua một bên và tìm hiểu kĩ hơn về vấn đề mình cần giải quyết. Mình cần phải chấp nhận là mình sẽ tiến độ của mình sẽ chậm đi, nhưng mình hi vọng sau đó mình sẽ hiểu rõ hơn về những thí nghiệm mà mình muốn thử, thay vì làm một cách hơi “mù quáng” như bây giờ. Mình cảm thấy ngoài việc có progress, thì việc giữ được tinh thần bản thân ở một mức ổn cũng là việc thật sự cần thiết. Hôm nay mình đọc được một câu cũng khá là hay (trong một bài viết cũng khá là hay nốt), tiếp thêm cho mình một tí động lực để tạm dừng việc thử nghiệm ý tưởng một cách vô tội vạ này :)))

All the very good researchers I know try lots of ideas. (Pure volume isn’t enough, they try their ideas with purpose, but they try a lot of ideas with purpose.)2

This makes my day

Trong những ngày tâm trạng không ổn lắm như thế này, mình vô tình tìm được một thread Reddit rất hay mà mình tìm kiếm bấy lâu nay. Mình hay tìm kiếm những newsletter và blog liên quan đến AI, Deep Learning, và Machine Learning để có thể cập những kiến thức và công nghệ mới. Hiện tại thì mình đã có vài trang, nhưng cảm thấy vẫn không ổn lắm. Và khi mình đang nằm trên giường và lướt qua thread này, mình phải bật dậy và lập tức bookmark lại từng mục trong đó ngay lập tức :))). Đây là một thread tổng hợp lại những blogs, newsletter, youtube channels, paper summary, … từ những researchers và các tổ chức hàng đầu về AI. Nếu các bạn cũng đang cần tìm thì có thể xem ở đây nhé.

Tuần này như vậy thôi, hẹn gặp lại các bạn vào những bài viết tiếp theo \ (•◡•) /.


Các bạn có thể tìm đọc tất cả bài viết của series này tại đây.


  1. http://karpathy.github.io/2019/04/25/recipe/ ↩︎

  2. https://www.alexirpan.com/2021/04/07/grad-school-5years.html ↩︎