[Bài dịch] Hỏi Tôi Bất Cứ Thứ Gì với Kaggle Grandmaster Vladimir I. Iglovikov

kaggle

#1

(Bản dịch từ Bài viết gốc)

Xin chào, tôi tên là Vladimir.

Sau khi tốt nghiệp đại học với bằng vật lý lý thuyết, tôi chuyển tới Silicon Valley để tìm kiếm một vị trí khoa học dữ liệu trong môi trường công nghiệp. Việc này đưa tôi tới vị trí hiện tại, làm việc với các ứng dụng thị giác máy tính tại Phòng phương tiện tự lái của Lyft.

Trong những năm vừa qua, tôi dành rất nhiều thời gian trong các cuộc thi Machine Learning (ML). Một mặt, việc này rất thú vị, nhưng mặt khác, đây là một cách rất hiệu quả để phát triển các kỹ năng trong khoa học dữ liệu (DS). Tôi không muốn nói rằng mọi cuộc thi đều dễ, và tôi không đạt kết quả tốt trong các cuộc thi đó. Nhưng theo thời gian tôi có thể tiến gần hơn tới top bảng xếp hạng (BXH), việc này cuối cùng mang lại cho tôi danh hiệu Kaggle Grandmaster.

Tôi xin cảm ơn @Lasteg người đã đề xuất ký tưởng Hỏi Tôi Bất Kỳ Thứ Gì (Ask Me Anything – AMA) này và thu thập các câu hỏi trên Reddit, Kagglescience.d3.ru (tiếng Nga). Có rất nhiều câu hỏi. Tôi sẽ cố gắng trả lời những câu tôi có thể, nhưng tôi sẽ không thể trả lời tất cả trong bài viết này. Nếu câu hỏi của bạn không được giải quyết, hãy để lại bình luận phía dưới và tôi sẽ cố gắng trả lời.

Dưới đây là các cuộc thi Deep Learning mà tôi (hoặc đội của tôi) đã may mắn nằm ở top của BXH:

  • 10th place: Ultrasound Nerve Segmentation

  • 3rd place: Dstl Satellite Imagery Feature Detection

  • 2nd place: Safe passage: Detecting and classifying vehicles in aerial imagery

  • 7th place: Kaggle: Planet: Understanding the Amazon from Space

  • 1st place: MICCAI 2017: Gastrointestinal Image ANAlysis (GIANA)

  • 1st place: MICCAI 2017: Robotic Instrument Segmentation

  • 1st place: Kaggle: Carvana Image Masking Challenge

  • 9th place: Kaggle: IEEE’s Signal Processing Society — Camera Model Identification

  • 2nd place: CVPR 2018 Deepglobe. Road Extraction.

  • 2nd place: CVPR 2018 Deepglobe. Building Detection.

  • 3rd place: CVPR 2018 Deepglobe. Land Cover Classification.

  • 3rd place: MICCAI 2018: Gastrointestinal Image ANAlysis (GIANA)

1. Q: Bạn có cuộc sống ngoài (khoa học) dữ liệu không?

Có, tôi có chứ :slight_smile:

Tôi thích leo núi (backpacking) và trèo tường (rock climbing). Nếu bạn trèo tường ở phòng tập Mission Cliffs vào buổi sáng, bạn có thể chào tôi lần tới chúng ta gặp.

Tôi cũng thích nhảy đôi, đặc biệt là Blues Fusion. Mission Fusion ở San Francisco và South Bay Fusion là những nơi tôi thường tới.

Du lịch cũng quan trọng với tôi. Mùa xuân này tôi ở Belarus, Ma Rốc và Jordan. Vào tháng Chín tôi dành ba tuần ở Phần Lan, Đức và Áo. Và dĩ nhiên, Burining Man 2018 là nơi có trải nghiệm tuyệt vời nhất trong năm nay :slight_smile:

2. Q: Chiều cao/Cân nặng?

1m83 (6 feet), 84kg (185 lbs)

Tôi đoán câu hỏi này có thể liên quan tới việc tập thể dục, vậy để tôi cho bạn một vài kết quả nâng tạ từ thời tôi ở bậc sau đại học :slight_smile:

  • Maximum benchpress 225 lb

  • Maximum squat 315 lb

  • Maximum deadlift 405 lb

3. Q: Làm thế nào mà bạn có sự nghiệp và tham gia Kaggle toàn thời gian?

Làm việc với các cuộc thi Kaggle là công việc không lương toàn thời gian thứ hai của tôi. Bạn cần có một lý do tốt để làm việc này. Đó là chuyện bình thường với những người tham gia Kaggle khi tìm kiếm những thay đổi trong ngành. Tôi không phải là ngoại lệ. Tôi bắt đầu với các cuộc thi khi tôi chuyển dần từ môi trường học thuật ra công nghiệp. Tôi cần có một cách hiệu quả để làm quen với các bài toán mà ML có thể giải quyết, làm chủ các công cụ, và mở rộng tư duy tới thế giới mới của ML.

Sau đó, sau khi tôi kiếm được việc đầu tiên tại Bidgely, tôi tham gia Kaggle thậm chí nhiều hơn. Ban ngày tôi làm việc với các tác vụ xử lý tín hiệu và hầu hết mọi tối tôi làm việc với các cuộc thi với dữ liệu ở dạng bảng (tabular data). Tôi không có sự cân bằng giữa công việc và cuộc sống thời gian đó, nhưng lượng kiến thức trong một đơn vị thời gian tôi đạt được xứng đáng với hy sinh đó.

Tại một thời điểm, tôi sẵn sàng đổi việc và gia nhập TrueAccord với một vị trí mà tôi làm việc nhiều với ML truyền thống. Nhưng sẽ là không sáng suốt nếu dừng các cuộc thi Kaggle. Vì vậy, ML truyền thống vào ban ngày và deep learning (DL) vào buổi tối và cuối tuần. Sự cân bằng cuộc sống-công việc thậm chí tệ hơn, nhưng tôi đã học được rất nhiều thứ với những kỹ năng để trở thành một Kaggle Master. Mọi nỗ lực được trả xứng đáng khi tôi được nhận vào vị trí Level5 tại Lyft. Công việc này tập trung vào các ứng dụng của các kỹ thuật DL cho các bài toán của xe tự lái.

Cuối cùng, tôi không làm việc với Kaggle toàn thời gian nữa. Nhưng tôi vẫn tích cực học hỏi. Có rất nhiều bài toán thị giác máy tính thú vị tại công ty và tôi cố gắng học hỏi thêm những lĩnh vực mà các cuộc thi Kaggle chưa đề cập. Tôi vẫn nộp kết quả trong nhiều cuộc thi, nhưng chủ yếu để có cái nhìn tốt hơn về bài toán mà người tham gia phải đối mặt. Việc này ngược lại giúp tôi kiếm được nhiều thông tin bổ ích từ các bài chia sẻ trên diễn đàn Kaggle.

4. Q: Trình tự làm việc hàng ngày là gì khiến bạn hiệu quả như vậy? Bạn tổ chức một ngày như thế nào?

Trước hết, tôi không chắc tôi là một người rất hiệu quả. :slight_smile: Tôi luôn luôn tìm cách cải thiện cách làm việc của mình.

Luôn luôn có nhiều bài toán một người cần giải quyết và những hoạt động người đó muốn làm. Không phải mọi việc đều hưu ích và thú vị như nhau. Điều này nghĩa là tôi luôn cần đặt ưu tiên lên mọi hành động. Có một vài cuốn sách có nhưng thảo luận xuất sắc về vấn đề này. Tôi khuyến khích mọi người đang suy nghĩ về vấn đề làm việc hiệu quả đọc các cuốn sách này:

So Good They Can’t Ignore You: Why Skills Trump Passion in the Quest for Work You LoveDeep Work: Rules for Focused Success in a Distracted World.

Vào những ngày trong tuần, tôi dậy lúc 6h sáng và tới phòng tập trèo tường. Việc này giúp tôi giữ dáng và tỉnh táo cả ngày. Sau đó, tôi lái xe tới công ty. Trung tâm kỹ thuật xe tự lái của chúng tôi nằm ở Palo Alto, việc này khiến tôi hơi buồn một chút. Tôi thích sống ở thành phố. Lái xe khá vui, nhưng di chuyển tới chỗ làm thì không (đường ở khu vực Silicon Valley khá tắc). Để thời gian di chuyển được hiệu quả hơn, tôi nghe sách nói trên xe. Tôi sẽ không nói rằng tôi có thể tập trung nghe sách khi di chuyển, nhưng có rất nhiều các tác phẩm, hầu hết hướng tới các kỹ năng mềm liên quan đến công việc khá phù hợp để nghe trong lúc lái xe.

Tôi muốn nói rằng tôi có một sự cân bằng công việc-cuộc sống tuyệt vời, nhưng sự thật không phải vậy. Chắc chắn, một lượng lớn thời gian dành cho bạn bè tại các sự kiện khác nhau. May mắn thay một số thứ xảy ra đồng thời tại San Francisco. Tại một thời điểm, tôi vẫn cần phải học; tôi vẫn cần phải giữ kiến thức ML. Không chỉ gắn liền với các công việc tại công ty mà còn nhiều lĩnh vực rộng hơn. Điều này nghĩa là đôi khi vào buổi tối tôi dành thời gian đọc về lý thuyết kỹ thuật và lập trình cho các cuộc thi, dự án ngoài, hoặc các dự án mã nguồn mở.

Nói về các dự án mã nguồn mở, tôi xin giới thiệu một thư viện cho việc tăng cường ảnh (image augmentations) mà Alexander Búlaev, Alex Parinov, Eugene Khvedcheniatôi đã tạo ra dựa trên kinh nghiệm tham gia các cuộc thi về thị giác máy tính.

Tôi giả sử tôi không thể trả lời hoàn toàn câu hỏi này mà không cung cấp một vài mẹo cụ thể:

  • Tôi thích Ubuntu + i3 hơn MacBook, việc này làm tăng 10% hiệu quả công việc theo ý kiến chủ quan.

  • Tôi tối thiểu việc sử dụng Jupyter notebooks, chỉ dùng để hiển thị hình vẽ và khám phá dữ liệu. Tôi viết code chủ yếu trên PyCharm, kiểm tra với flake8 và đẩy lên GitHub. Nhiều bài toán ML tương tự nhau. Dành thời gian tạo một code cơ sở chung, cố gắng không lặp đi lặp lại chính mình, và nghĩ về việc làm thế nào chia nhỏ (refactor) code tốt nhất có thể làm chậm tiến độ lúc ban đầu, nhưng giúp tăng tốc nhiều về sau.

  • Tôi viết unit tests bất cứ khi nào có tể. Mọi người nói về tầm quan trọng của unit test trong DS, nhưng không phải ai cũng đầu tư thời gian để viết chúng. Alex Parinov viết một bài hướng dẫn thú vị về việc đi từ đơn giản tới phúc tạp. Bạn có thể thử làm theo nó và thêm các tests vào các dự án học thuật hoặc Kaggle ML pipeline. Tôi đang giả sử rằng bạn đã đang thực hiện theo cách này.

  • Tại thời điểm này, tôi làm thí nghiệm với công cụ kiểm soát phiên bản DVC. Việc này tôi hy vọng sẽ tạo kết quả mà ML pipeline tạo ra code dễ sử dụng lại.

  • Tôi cố gắng tối thiểu việc sử dụng chuột máy tính. Thi thoảng tôi phải viết các phím tắt ra giấy, đặt nó trước mặt và cố gắng sử dụng chúng càng nhiều càng tốt.

  • Tôi không sử dụng các mạng xã hội.

  • Tôi kiểm tra hòm email chỉ vài lần trong ngày.

  • Mỗi sáng tôi tạo một danh sách các công việc mà tôi sẽ cố gắng đạt được trong ngày và sẽ làm việc càng gần với các công việc đó càng tốt. Tôi sử dụng Trello cho việc này.

  • Tôi cố gắng không phân mảnh một ngày của tôi quá nhiều. Rất nhiều công việc yêu cầu sự tập trung và nhảy giữa nhiều việc khác nhau sẽ không thực sự hữu ích.

Tất cả những ý tưởng này khá là phổ biển, nhưng tôi không thể nhớ được bất kỳ mẹo ma thuật nào trong túi. :slight_smile: (All these ideas are pretty standard, but I can not remember any magic trick in my pocket. :slight_smile:cần dịch lại câu này)

5. Q: Làm thế nào bạn cập nhật những nghiên cứu hiện tại trong ngành?

Tôi sẽ không nói là tôi cập nhật. Lĩnh vực ML biến đổi nhanh những ngày này, số lượng bài báo khoa học, cuộc thi, bài blog, và sách quá lớn đến mức thậm chí xem lướt qua chúng là cũng không thể. Trên thực tế, khi tôi đối mặt với một bài toán, tôi tập trung vào tìm kiếm những kết quả gần đây và đào sâu vào nó. Sau khi tôi hoàn thành bài toán này, tôi chuyển sang bài tiếp theo. Kết quả là, tôi chỉ có kiến thức bề nổi của những lĩnh vực tôi không có kinh nghiệm thực tế, và tôi ok với điều đó. Đồng thời, danh sách các bài toán tôi đã làm việc, và theo đó là có kinh nghiệm chuyên sâu, là tương đối lớn và danh sách này tiếp tục dài ra. Sự thực này khẳng định với tôi rằng sự kết hợp của kinh nghiệm và code mà tôi đã viết (và giữ chúng ở các repo riêng tư) sẽ giúp tôi có một khởi đầu nhanh trong bất kỳ bài toán liên quan tới ML nào.

Và bên cạnh đó, điều này nghĩa là tôi có một bộ khung rất tốt để khởi đầu các bài toán tương tự trong tương lai.

Tôi cũng tham gia NIPS, CVPR và nhiều hội thảo khác. Kết quả trình bày ở đó cũng cho thấy một bức tranh khá tổng quát về việc những thứ có thể làm và chưa thể làm trong nghiên cứu hiện thời.

6. Q: Quay ngược trở lại thời gian (4-5 năm trước), có Ph.D. trong ngành không phải ML (Vật lý, cơ khí …) rất có lợi cho nhà tuyển dụng. Hiện tại, tôi có cảm giác tình thế đã thay đổi, và nếu ai đó so sánh các tiến sĩ từ một ngành không phải ML với một thạc sĩ từ ML, dường như ngành công nghiệp IT/ML sẽ ưu tiên thạc sĩ cho vị trí kỹ sư/nhà phát triển ML, nhưng tôi không chắc điều đương tự với các vị trí nghiên cứu. Vì bạn cũng có bằng tiến sĩ vật lý rồi sau đó chuyển qua ML, tôi nghĩ bạn có thể biết câu trả lời theo kinh nghiệm của mình.

Ý kiến của bạn về việc có một bằng tiến sĩ không phải ML bây giờ là gì, nếu một người muốn chuyển sang ML sau đó? Liệu điều đó có giúp kiếm được một vị trí nghiên cứu trong một công ty? Liệu điều đó có giúp tìm kiếm một việc trong ngành ML nếu so sánh với các bằng thạc sĩ liên quan?

Đây là một câu hỏi khó, tôi không biết câu trả lời, vậy tôi sẽ nói ra những suy nghĩ của mình.

Vật lý là một ngành tuyệt vời. Thậm chí nếu tôi có thể quay lại và chọn giữa vật lý và KHMT, biết rằng cuối cùng tôi vẫn chuyển sang KHMT, tôi vẫn sẽ chọn vật lý.

Lý do chính dĩ nhiên là việc tôi bị kích thích bởi vật lý và khoa học tự nhiên nói chung. Liệu ML có dạy bạn vũ trụ lớn thế nào, đa sắc màu thế nào, thú vị thế nào xung quanh ta? Không thực sự. Nhưng vật lý có thể. Và không chỉ có thế. Một trong những lý do tại sao tôi chuyển từ vật lý qua ML tương đối nhanh là vì vật lý trang bị cho tôi những kiến thức không chỉ về máy lượng tử, thuyết tương đối, lý thuyết trường lượng tử, và các chủ đề phức tạp khác mà nó còn mang đến cho tôi những kỹ năng quan trọng trong toán, thống kê, lập trình, mọi điều này khiến tôi chuyển đổi dễ dàng qua các lĩnh vực khác.

Vật lý dạy bạn làm thế nào chuyển đổi giữa lý thuyết và thực hành một cách có hệ thống; một kỹ năng thiết yếu cho bất kỳ ai làm ML. Và gần như không thể học vật lý hoặc toán cao cấp mà không học đại học. Từ hướng nhìn này, tôi có niềm tin mạnh rằng sự phát triển vượt bậc mới trong deep learning sẽ xảy ra khi chúng ta khám phá ra làm thế nào áp dụng toán cao cấp, phát triển cho vật lý, hóa học, và các ngành nâng cao khác vào ML. Hiện tại, kiến thức toán của năm nhất đại học là đủ để giải quyết các bài toán thị giác máy tính.

Mọi điều này nghĩa là hiện tại toán không phải là một chướng ngại, và đó là lý do tại sao các kiến thức ngoài một người học được từ toán/vật lý/hóa học và các ngành STEM khác gần như vô dụng khi giải quyết các bài toán thực tế (business problems), và đó là lý do tại sao rất nhiều người tốt nghiệp từ những ngành này cảm thấy bị phản bội. Họ có rất nhiều kiến thức chuyên sâu; họ có bằng tiến sĩ, họ dành nhiều năm trong nghiên cứu học thuật. Họ không thể kiếm được một việc thú vị được trả lương tốt. Internet tràn ngập nhưng bài blog kiểu này.

Mặc khác, có khả năng lập trình là cực kỳ quan trọng trong mọi lĩnh vực và đó là lý do vì sao khi nhà tuyển dụng lựa chọn giữa một người giỏi toán và một người lập trình tốt, họ có xu hướng sẽ chọn người thứ hai.

Nhưng tôi tin rằng điều này sẽ thay đổi. Không phải bây giờ, nhưng tại một thời điểm nào đó trong tương lai.

Một điều quan trọng khác là các bài báo khoa học bạn đọc và các khóa học bạn lấy trong trường đại học có thể không liên quan trực tiếp đến tập các kỹ năng cần thiết trong công nghiệp. Điều này đúng, nhưng tôi không nghĩ nó là một vấn đề lớn.

Thông thường, những thứ bạn cần biết để làm trong công nghiệp như một nhà khoa học dữ liệu hay người phát triển phần mềm, bạn có thể tự học, hoặc bạn sẽ không thể học trong trường đại học. Hầu hết những thứ người ta học ở môi trường công nghiệp chỉ có thể đạt được khi làm việc toàn thời gian tại một công ty.

Đồng thời, tôi từng thấy bị áp lực khi cố gắng tìm kiếm việc ngoài công nghiệp trong khi vừa làm luận văn của tôi về Vật Lý lý thuyết, vừa học khoa học dữ liệu.

Tại thời điểm đó, tôi không có những kiến thức được yêu cầu; tôi không hiểu mọi thứ được thực hiện như thế nào ở Silicon Valley và họ kỳ vọng gì ở tôi. Tôi gần như không có quan hệ, và thứ duy nhất tôi cố gắng làm là gửi hồ sơ của tôi tới các công ty khác nhau, lặp đi lặp lại, trượt hàng loạt cuộc phỏng vấn, học từ mọi thất bại và lặp lại tới khi đạt được kết quả.

Tôi nhớ một lần được hỏi tôi làm gì cho luận văn. Tôi lúc đó làm Monte Carlo lượng tử, và tôi nói với người phỏng vấn điều này. Sau đó, tôi cố gắng giải thích điều đó có nghĩa là gì và tại sao chúng ta cần nó. Người phỏng vấn nhìn tôi và hỏi: “Kỹ thuật này có thể giúp chúng tôi tăng doanh số từ khách hàng như thế nào?”

Tôi muốn nói hướng tiếp cận khả dĩ nhất cho những người không chuyên KHMT là tham gia một khóa liên quan tới khoa học dữ liệu (DS) trong khoa KHMT. Học DS/ML vào thời gian rảnh của bạn. May mắn thay, có nhiều nguồn tài liệu tuyệt vời cho điều này. Tôi muốn nói rằng bạn nên tìm một giáo sư trong khoa có hứng thú với việc áp dụng ML vào các bài toán của họ. Nộp hồ sơ cho các vị trí thực tập liên quan tới ML tại các công ty công nghệ và lấy được vị trí thực tập khi là một sinh viên cao học dễ dàng hơn lấy được một việc toàn thời gian.

Đạt được một công việc toàn thời gian sau khi thực tập là khá dễ dàng. Ví dụ, bạn tôi Wẹnian Hu cũng nghiên cứu vật lý trong nhóm nhiên cứu của chúng tôi làm chính xác như vậy, và cậu ấy có được vị trí Research Scientist tại Facebook AI Research (FAIR).

Nhìn chung, thật là không không ngoan khi đánh giá cao quá cao ảnh hưởng của chuyên ngành học, trường đại học, … trong khi tìm việc ngoài công nghiệp. Khi một công ty tuyển bạn, họ có kế hoạch trả tiền bạn để giải quyết các vấn đề họ đối mặt. Bằng cấp và chuyên ngành của bạn chỉ là một đánh giá tương đối cho khả năng của bạn. Chắc chắn rằng, vượt qua vòng lọc hồ sơ bởi phòng nhân sự mà không có dòng nào họ kỳ vọng bạn có là việc rất khó, và mạng lưới quan hệ của bạn, điều quan trọng trong tìm việc sẽ trở nên yếu hơn, nhưng một lần nữa, đó không phải là thứ ảnh hưởng tới quyết định chọn chuyên ngành của bạn.

Tôi có thể hơi ngây thơ, nhưng ai cũng nên chọn chuyên ngành, không phải vì anh ấy/cô ấy tin rằng nó sẽ mang tới một công việc lương cao, mà bởi bạn đam mê chuyên ngành đó.

7. Q: Các bài toán thú vị trong DS/ML nằm ở đâu? Tôi kết thúc khoảng nửa chương trình thạc sĩ và không chắc về việc lĩnh vực ML nào tôi muốn làm. Tôi nói chuyện với một người khẳng định hai lĩnh vực tốt nhất là tạo ra thuật toán và mở rộng quy mô (đối ngược với các ứng dụng DS/ML điều mà có thể chủ yếu là dùng thư viện). Bạn nghĩ thế nào về việc này? Bạn có lời khuyên nào về tính linh hoạt trong nghề nghiệp.

Tôi sẽ nói rằng các bài toán thú vị trong DS/ML nằm xa xu thế chính hiện này. Các bài toán trong xu thế chính đã quá dày đặc. Ứng dụng ML vào tính điểm tín dụng, hệ thông gợi ý, bán lẻ và các lĩnh vực nơi chúng ta tìm cách kết nối dữ liệu với tiền bạc khá buồn tẻ. Nhưng nếu bạn ứng dụng DS/ML vào các bài toán chưa có lời giải trong toán học, vật lý, sinh học, hóa học, lịch sử, khảo cổ học, địa lý, hoặc bất kỳ lĩnh vực nào mà con người chưa thử áp dụng ML nhiều, bạn có thể gặp may.

Liên quan tới việc lựa chọn nghề nghiệp, không giống như sinh học hay vật lý, các kỹ năng bạn học trong DS/ML đơn giản hơn nhiều trong việc chuyển đổi qua lại giữa các lĩnh vực. Chắc chắn rằng, phát triển các thuật toán cho giao dịch tại ngân hàng không giống như làm việc với xe tự lại, nhưng sự khác nhau không quá lớn, và bạn có thể lựa chọn các kỹ năng cần thiết một cách nhanh chóng nếu bạn có nền tảng tốt.

8. Q: Liệu 30 tuổi có là quá muộn để gia nhập cộng đồng ML với nền tảng không phải toán hay KHMT? Nếu không muộn, điều kiện tối thiểu cần thiết là gì theo quan điểm của bạn?

Dĩ nhiên, việc đó không là quá muộn. 90% ML yêu cầu kiến thức toán ở mức sinh viên năm nhất đại học tại các trường kỹ thuật, vì vậy kiến thức sâu về toán là không cần thiết. Và ngôn ngữ được sử dụng nhiều nhất trong DS là Python và R, là các ngôn ngữ bậc cao, bởi vậy bạn có thể bắt đầu sử dụng chúng mà không cần nhảy vào chi tiết kỹ thuật.

Tôi khuyến khích bạn lấy một vài khóa học online về DS và bắt đầu làm việc với các bài toán trên Kaggle. Dĩ nhiên, sẽ có rất nhiều khái niệm mới, nhưng bạn chỉ cần có kỷ luật và đam mê cống hiến, mọi thứ sẽ đến.

Hai ví dụ khác liên quan đến tuổi:

  • Kaggle Grandmaster Evgeny Patekha bắt đầu sự nghiệp khoa học dữ liệu năm 40 tuổi.

  • Kaggle Grandmaster Alexander Larko tham gia Kaggle lúc 55 tuổi.

9. Q: Bạn có coi rằng nền tảng giáo dục trong lĩnh vực kỹ thuật quan trọng tới việc thành công trong DS và các cuộc thi Kaggle? Bạn có phản ví dụ nào theo kinh nghiệm của mình trong công việc?

Chúng hữu ích, nhưng không phải tối quan trọng. Có rất nhiều người ở Kaggle với kết quả tuyệt vời không có nền tảng giáo dục trong ngành kỹ thuật. Một ví dụ điển hình là Mikel Bober-Irizar, một Kaggle Grandmaster, đang là một học sinh cấp ba.

Một điều khác bạn cần nhớ là các kỹ năng bạn học ở Kaggle chỉ là một tập con nhỏ của những kỹ năng bạn cần trong công việc ML ngoài công nghiệp hoặc trong học thuật. Và với những kỹ năng không phát triển thông qua Kaggle, nền tảng giáo dục trong lĩnh vực kỹ thuật có thể rất quan trọng.

Nhưng một lần nữa, bạn có thể có kết quả tốt ở Kaggle cả khi không có bằng tốt nghiệp cấp ba.

10. Q: Mất bao lâu bạn học DS/ML để đạt tới trình độ cao như thế ở Kaggle?

Tôi quyết định chuyển qua DS từ 01/2015. Sau đó, tôi bắt đầu lấy các khóa học trực tuyến trên Coursera. Vào 02/2015, tôi tìm hiểu Kaggle và đăng ký tham gia. Trong hai tháng tôi lấy được huy chương bạc đầu tiên.

11. Q: Một người có thể lấy được kết quả tốt trên Kaggle với một máy tính đơn giản và không sử dụng các dịch vụ đám mây?

Tôi không sử dụng các dịch vụ đám mây trong các cuộc thi. Nhưng tôi có hai máy tính tương đối mạnh ở nhà. Một với bốn GPUs, một với hai. Bạn có thể có kết quả tốt tại Kaggle mà không có máy tính khỏe, nhưng thiếu khả năng tính toán mạnh sẽ giới hạn bạn trong việc có bao nhiêu ý tưởng bạn có thể kiểm chứng trong một đơn vị thời gian. Và số lượng những ý tưởng bạn có thể kiểm chứng có mối quan hệ mạnh tới kết quả của bạn. Bởi vậy, nếu bạn huấn luyện một mô hình 24/7, bạn nên đầu tư cho một máy tính bàn tốt.

Sau một vài vòng lặp, tôi kết thúc với devbox dưới đây với bốn GPUs cho các chương trình cần tính toán cao và một máy bàn với hai GPUs cho việc thử nghiệm mô hình.

Có một máy tính khỏe là chưa đủ. Bạn cần có khả năng lập trình để tận dụng nó:

  • Một trong những lý do tôi chuyển từ Keras sang Pytorch là bởi DataLoader trong PyTorch ưu thế hơn rất nhiều.

  • Chúng tôi viết albumentations bởi tăng cường ảnh (imgaug) quá chậm và chúng sử dụng CPU 100%, trong khi GPUs không được sử dụng hoàn toàn.

  • Để tăng tốc đọc viết ảnh JPEG từ ổ cứng, bạn không nên sử dụng PIL, skimage hay thậm chí OpenCV mà nên dùng libjpeg-turbo hoặc PyVips.

12. Q: Có lời khuyên nào cho việc bắt đầu Kaggle như thế nào cho những người mong muốn theo con đường nhà khoa học dữ liệu? Lời khuyên tốt nhất cho những người tham gia cuộc thi đầu tiên là gì?

Có rất nhiều cách để bắt đầu với Kaggle, nhưng dựa trên những điều tôi quan sát, một trong những cách hiệu quả nhất để đạt được những kiến thức cần thiết là dùng cách tiếp cận hacker.

  1. Xem một số khóa học trực tuyến về python và ML cơ bản.

  2. Chọn một cuộc thi trên Kaggle. Nếu bạn có thể viết một bộ khung từ đầu đến cuối với đầu vào là dữ liệu, đầu ra là file nộp bài, đó là điều tuyệt vời. Nếu bạn là người mới, việc này có thể khó. Trong trường hợp này, bạn hãy vào diễn đàn, copy paste các kernel được chia sẻ.

  3. Chạy kernel đó trên máy của bạn, tạo ra một file nộp bài, và xuất hiện trên BXH. Tại bước này, hầu như bạn sẽ gặp khó khăn trong với hệ điều hành, driver, phiên bản thư viện, các vấn đề vào/ra dữ liệu, … Điều quan trọng là bắt đầu làm quen với nó càng nhanh càng tốt. Nếu bạn không hiểu điều gì xảy ra trong kernel đó, đừng lo.

  4. Thay đổi một vài tham số, không hiểu bản chất cũng không sao, huấn luyện lại mô hình, nộp bài. Hy vọng, một vài thay đổi của bạn giúp bạn tăng bậc trên BXH. Và đừng lo, hàng trăm người đang làm tương tự như thế. Họ đang tinh chỉnh các tham số mà không có kiến thức sâu hoặc hiểu tại sao code lại chạy như thế.

  5. Để đạt được kết quả cao hơn những người thay đổi tham số mà không hiểu rõ bản chất, bạn cần bắt đầu phát triển kiến thức liên quan để có được trực giác tốt về việc điều gì có thể và không thể, sau đó khám phá ra các hướng tiếp cận khả dĩ một cách thông minh và hiệu quả hơn. Tại bước này, bạn sẽ cần hiểu sâu hơn về các thí nghiệm. Bạn sẽ cần học theo hai hướng. Thứ nhất – căn bản, các lớp học như mlcourse.ai, CS231, đọc sách, học toán, thống kê, làm thế nào để viết code tốt hơn, … Thông thường, thật khó để khiến bản thân tự làm điều đó, nhưng về dài hạn, việc này rất quan trọng. Thứ hai, bạn sẽ nhìn thấy hàng loạt thuật ngữ mới trên diễn đàn liên quan tới bài toán bạn đang cố gắng giải quyết. Tập trung vào các thuật ngữ đó. Cố gắng đạt kết quả tốt hơn trên BXH như là một động lực để học những điều mới. Nhưng đừng lựa chọn giữa học tập và làm thí nghiệm – hãy làm cả hai cùng lúc. ML là một lĩnh vực ứng dụng, và bạn không muốn kiến thức của bạn chỉ nằm trên sách vở. Lý thuyết không có thực hành là ngu ngốc. Thực hành không có lý thuyết thì như người mù.

  6. Sau khi cuộc thi kết thúc, mặc dù bạn đã cố gắng hết mức, nhiều cả năng bạn sẽ thấy vị trí của mình rất thấp trên BXH. Điều này không ngoài dự đoán. Đọc thật kỹ trên diễn đàn, đọc giải pháp của những người dành chiến thắng, cố gắng tìm hiểu bạn có thể làm gì để đạt kết quả tốt hơn. Lần tới khi bạn gặp một bài toán tương tự, bạn sẽ có bước khởi đầu tốt hơn nhiều.

  7. Lặp lại quá trình này trong nhiều cuộc thi, và bạn sẽ dần tăng bậc trên BXH. Điều quan trọng là bạn sẽ dần có một bộ khung cho nhiều bài toán, và có trực giác tốt hơn khi đối mặt với các thách thức ML trong các cuộc thi, trong công việc và trong học thuật.

13. Q: As someone from a physics background, does it sometimes frustrate you when competitions are more of an overfitting exercise vs. actual generalization at a specific task? Assuming so, how do you cope?

Thông thường, bạn cần overfit dữ liệu và phép đo (metrics) để có kết quả tốt. Không sao, điều này không ngoài mong đợi. Mọi người overfit tập ImageNet trong nhiều năm, và kiến thức mới vẫn được tạo ra trong quá trình. Nhưng để làm điều đó bạn cần hiểu rõ về phép đo và dữ liệu. Và đây là nơi cần tới kiến thức (chuyên biệt). Miễn là kiến thức được tạo ra trong quá trình thi thố, tôi không thấy có vấn đề với overfitting. Như bạn có thể để ý, các bộ khung và ý tưởng tốt cho một bài toán có thể là một mô hình cơ bản tin tưởng được cho bài toán tiếp theo, điều này chứng tỏ sự khái quát hóa có xảy ra.

**Ý kiến của bạn về việc rỏ rỉ dữ liệu (data leaks) trên Kaggle như thế nào, ví dụ, Santander, dự đoán Airship, và Google Analytics? Có vấn đề đạo đức nào trong việc sử dụng dữ liệu rò rỉ trong các cuộc thi Kaggle?

Tôi biết rằng rất khó để tổ chức một cuộc thi, vì vậy tôi không chê trách những người tổ chức khi dữ liệu rò rỉ được khám phá ra. Tôi cũng không thấy có vấn đề gì khi mọi người khai thác việc này. Tôi chấp nhận rằng rò rỉ dữ liệu làm giảm động lực của tôi khi tham gia các cuộc thi, nhưng lý do chính là vì tôi khó có thể tổng quát hoát những kiến thức thu được cho các cuộc thi khác một cách dễ dàng. Tôi vẫn tin rằng ban quản trị Kaggle cần tạo ra một danh sách các khả năng rò rỉ dữ liệu và kiểm tra chúng trước khi cuộc thi bắt đầu để ngăn chặn một vấn đề xuất hiện nhiều lần, nhưng tôi tin rằng họ đang làm việc với vấn đề này.

14. Q: Các cuộc thi Kaggle hữu ích như thế nào tới công việc như là một kỹ sư deep learning?

Câu này khó. Kaggle cải thiện kỹ năng của bạn trong một vài lĩnh vực quan trọng nhưng rất hẹp. Tập kỹ năng này là quan trọng, và cực hữu ích với một vài vị trí công việc, nhưng không hẳn với các vị trí khác. Với tất cả các việc tôi đã làm, và đặc biệt hiện tại khi tôi làm việc với xe tự lái, các kỹ năng từ Kaggle rất quan trọng cùng với các kỹ năng tôi có được từ môi trường học thuật và các nguồn kiến thức khác.

Nhưng một lần nữa, có các kỹ năng tốt trên Kaggle là không đủ. Rất nhiều thứ bạn chỉ có thể học được trong môi trường công nghiệp.

Trở thành một Kaggle Master không nhất thiết và không đủ để giỏi trong công việc, nhưng đồng thời, tôi tin rằng nếu một người là một Kaggle Master, họ sẽ qua được vòng lọc hồ sơ bởi phòng nhân sự và được mời vào vào phỏng vấn kỹ thuật.

15. Q:Tham gia các cuộc thi Kaggle sau khi trở thành Grandmaster hữu ích như thế nào? Động lực nào khiến bạn tiếp tục tham gia Kaggle ngay cả khi bạn đã là một nhà khoa học dữ liệu?

Như tôi đã đề cập, tôi không tham gia các cuộc thi Kaggle nhiều như trước, nhưng tôi bắt đầu quan tâm tới các cuộc thi được tổ chức trong các hội thảo. Đội của tôi đạt được kết quả tốt tại MICCAI 2017, CVPR 2018, và MICCAI 2018. Các cuộc thi thường có dữ liệu sạch, và cho phép bạn tập trung vào các vấn đề khác hơn là dữ liệu. Sự xa hoa này không xảy ra trong công việc thực tế ở đó quá trình lựa chọn dữ liệu thường là thành phần quan trọng nhất trong việc tạo ra một mô hình hữu ích.

**16. Q: Từ kinh nghiệm học tập và thi đầu, bạn có lời khuyên nào cho sinh viên đại học và cao học? Những dấu mốc nào cần đạt được để có thể thành thạo trong DS?

Tôi còn không biết thế nào là thành thạo trong DS. Có hàng tá cách để trả lời câu hỏi này. Nhưng trong AMA này tôi đang nói chuyện như một Kaggle Grandmaster, vậy dấu mốc đầu tiên là trả thành một Kaggle Master. Việc này khá dễ hiểu, nhưng khi bạn làm việc với nó, bạn sẽ có một cái nhìn tót hơn về điều bạn muốn trong lĩnh vực này.

17. Q: Bạn có thể đi được bao xa trên Kaggle (và trong DS nói chung) nếu bạn không có kiến thức nền tảng về toán/KHMT hay các lĩnh vực liên quan? Thay vì kiến thức, đam mê và khao khát học hỏi có thể đưa bạn đi bao xa?

Bạn có thể đứng top của top trong Kaggle hoặc một lĩnh vực DS khác nếu bạn là người có mục đích và sẵn sàng học hỏi. Bước khó nhất là bước đầu tiên. Cứ bắt tay vào làm. Và thời điểm tốt nhất để làm là ngay bây giờ, bởi vì ngày mai thường nghĩa là không bao giờ.

Không ai hỏi tôi: làm thế nào bạn tìm những người sẽ giúp bạn đạt kết quả tốt hơn trong một cuộc thi? Tôi nghĩ đây là một chủ đề quan trọng mà tôi chưa thấy bài blog nào đề cập.

Hướng tiếp cận phổ biến nhất: Một vài người bạn hoặc động nghiệp hứng thú với cuộc thi, họ nói về nó, họp mặt, thảo luận rồi lập đội. Một vài người cố làm gì đó, những người khác bận rộn với các hoạt động khác. Đội này đạt được một điều gì đó, nhưng thường không nhiều.

Hướng tiếp cận tốt hơn:

  1. Bạn viết một bộ khung hoặc chia nhỏ các bộ khung đã được chia sẻ trên diễn đàn.

  2. Bộ khung này nên lấy đầu vào là dữ liệu, đầu ra là file nộp bài đúng chuẩn, và cũng tạo ra các điểm xác thực chéo (cross-validation).

  3. Bạn kiểm tra sự cải thiện trong điểm xác thực chéo đồng nghĩa với sự cải thiện trên BXH.

  4. Bạn thực hiện khám phá và phân tích dữ liệu, bạn đọc cẩn thận trong diễn đàn, bạn đọc báo khoa học, sách, giải pháp từ các cuộc thi trước tương tự với những gì bạn làm. Làm hoàn toàn một mình.

  5. Tại một thời điểm, chẳng hạn 2-4 tuần trước deadline bạn stuck đâu đó. Không có ý tưởng nào giúp tăng thứ hạng. Bạn cố gắng làm mọi thứ. Và bạn cần một nguồn ý tưởng mới.

  6. Lúc này bạn nhìn vào BXH và thảo luận với những người tham gia khác có thứ hạng tương đương.

  7. Trước hết, trung bình cộng các kết quả sẽ mang lại một cải thiện nhỏ nhưng quan trọng. Thứ hai, hướng tiếp cận của các bạn nhiều khả năng khác nhau một chút và hãy chia sẻ một danh sách các ý tưởng đã hoặc chưa thử sẽ mang lại nhiều lợi ích. Thứ ba, bởi vì các bạn tham gia cuộc thi độc lập nhau, tất cả các bạn đều nhìn vào dữ liệu, bạn đều viết bộ khung riêng, và đều được tạo động lực khi nhìn vào thay đổi thứ hạng trên BXH.

Nhưng quan trọng hơn, mọi người thường đánh giá quá cao lượng thời gian họ sẵn sàng dành ra cho cuộc thi và đánh giá quá thấp các vấn đề họ gặp phải trước khi có một bộ khung ổn định từ đầu đến cuối. Tạo một đội dựa trên BXH đóng vai trò như một bộ lọc tốt, đảm bảo rằng đồng đội có trình độ tương tự với bạn.

Có một vài cuộc thi mà kiến thức chuyên ngành đóng vai trò quan trọng trong việc có kết quả tốt. Ví dụ, dữ liệu bảng và xử lý đặc trưng hoặc ảnh y tế, nơi bạn có thể xem xét ghép đội với một người có kiến thức sâu về một ngành thậm chí họ không có nền tảng DS mạnh, nhưng tình huống này khá hiếm.

Đồng thời, cách các đội được hình thành trong môi trường công nghiệp hoàn toàn khác nhau. Sử dụng hướng tiếp cận hoạt động tốt trên Kaggle để tạo một đội trong môi trường công nghiệp không hẳn là khôn ngoan.

Tôi muốn nói lời cảm ơn với những người mà tôi may mắn làm việc cùng, những người dạy tốt rất nhiều trong các cuộc thi tôi tham gia:

Artem Sanakoeu, Alexander Buslaev, Sergey Mushinskiy, Evgeny Nizhibitsky, Konstantin Lopuhin, Alexey Noskov, Artur Kuzin, Ruslan Baikulov, Pavel Nesterov, Arseny Kravchenko, Eugene Babakhin, Dmitry Pranchuk, Artur Fattakhov, Ilya Kibardin, Liam Damewood, Alexey Shvets, Anton Dobrenkii, Selim Seferbekov, Alexandr Kalinin, Alexander Rakhlin.

Hầu hết tôi gặp những người này ở ODS.AI. ODS.AI là một cộng đồng DS những người nói tiếng Nga. Nếu bạn nói tiếng Nga và muốn đạt kết quả tốt hơn trên Kaggle, bạn hãy tham gia cộng đồng này.


#2

Hay quá bạn ơi :smiley: Rất hay cho những ai kém tiếng Anh như mình :))


#3

Hay quá anh ơi. Mong sao có nhiều bài chia sẻ như thế này.