Chương 14. Thay đổi thật sự
Tuần lễ nghỉ ngơi mà Minh Dương "ban" cho, hay đúng hơn là "ra lệnh", đã kết thúc.
Hoàng Ly quay trở lại lab A203 vào một chiều thứ Hai, không phải với tâm trạng của một kẻ chiến bại, mà là của một người lính vừa được chỉnh đốn lại quân trang.
Cô đã chuẩn bị tinh thần cho một sự thay đổi. Rằng có lẽ sau "sự cố" đó, anh ta sẽ nới lỏng kỷ luật, sẽ thông cảm hơn.
Cô đã lầm.
"Một tuần hết rồi à?" Dương ngẩng lên khỏi màn hình khi thấy cô bước vào, giọng nói không có chút gì là chào đón trở lại. "Vậy thì quay lại làm việc. Nhiệm vụ của tuần 14, implement một mạng RNN cơ bản, anh đã gửi email."
Anh ta quay lại với công việc, như thể cuộc khủng hoảng lúc 23 giờ đêm và hai ly trà sữa chưa bao giờ tồn tại.
Không có sự khoan nhượng.
Không có sự nới lỏng.
Kỷ luật vẫn là kỷ luật thép.
Deadline vẫn là 6 giờ sáng Chủ Nhật.
Nhưng Ly đứng đó, nhìn vào tấm lưng thẳng tắp của anh ta, và mỉm cười. Một nụ cười nhẹ, chỉ mình cô biết.
Cô nhận ra, anh ta không cần phải thay đổi. Bức tường vẫn cao như vậy, ngọn núi vẫn dốc như thế.
Người thay đổi, là cô.
---
Ly quay về bàn làm việc của mình, mở laptop. Cảm giác quá tải đã biến mất. Thay vào đó là một sự rõ ràng đến lạ lùng. Cô không còn làm việc vì sợ hãi bị mắng, sợ hãi bị phạt, hay sợ hãi mình không phải là "thiên tài".
Cô làm việc, đơn giản, vì cô muốn.
Cô muốn chinh phục cái mớ công thức RNN này. Cô muốn hiểu tại sao nó hoạt động. Cô muốn tự tay xây dựng một thứ gì đó. Quyết định nghỉ ngơi đã cho cô thấy rõ điều đó: cô thích AI. Và vì cô thích nó, cô chấp nhận cái giá phải trả của nó. Sự khó khăn không còn là một hình phạt, nó là một phần của hành trình mà cô đã tự mình lựa chọn.
---
Sự thay đổi trong tâm thế dẫn đến một sự thay đổi toàn diện trong phương pháp. Hoàng Ly bắt đầu học cách "làm việc thông minh" (smart work) theo một nghĩa hoàn toàn khác.
Trước đây, "smart" có nghĩa là tìm đường tắt, là copy-paste, là học lướt.
Bây giờ, "smart" có nghĩa là tối ưu hóa sự kiên trì.
Cô nhận ra mình không thể là một siêu nhân 24/7. Năm môn học trên trường và lộ trình của Dương là hai con quái vật. Nếu cô cố gắng chiến đấu với cả hai cùng lúc bằng sức lực, cô sẽ lại gục ngã.
Cô học cách quản lý thời gian.
Cô lấy ra một cuốn sổ, kẻ một bảng kế hoạch chi tiết đến từng 30 phút. Không phải một kế hoạch lý tưởng, mà là một kế hoạch thực tế.
7:00 - 8:00: Học "Kiến trúc máy tính" (môn khó nhất, học lúc đầu óc tỉnh táo nhất).
8:00 - 11:00: Lên lớp.
11:00 - 13:00: Ăn uống và nghỉ ngơi
13:00 - 16:00: Làm bài tập lớn "Mạng máy tính".
20:00 - 01:00: Chạy deadline theo Roadmap AI.
01:00: Đi ngủ, dù trời có sập cũng phải đi ngủ.
Cô tự đặt ra một quy tắc: 6 tiếng ngủ mỗi đêm. Không nhân nhượng. Cô nhận ra, 4 tiếng làm việc hiệu quả với cái đầu tỉnh táo, còn hơn 8 tiếng vật vờ trong mệt mỏi.
Và quan trọng nhất, cô học cách nói "không".
Đây là điều khó khăn nhất đối với một "con nhà người ta" luôn muốn làm hài lòng tất cả mọi người.
"Ly ơi, cuối tuần này khoa có đêm nhạc hội," Thu Hà, cô bạn cùng phòng cũ, hào hứng gọi điện. "Trưởng CLB Piano vẫn nhắc mày đấy. Lên solo một bài đi!"
Hoàng Ly của sáu tháng trước sẽ gật đầu, vì kiêu hãnh.
"Xin lỗi Hà," Ly đáp, giọng bình tĩnh. "Cuối tuần này tớ phải hoàn thành implement mạng RNN. Tớ không tham gia được rồi."
"Trời ơi, lại học à? Mày sống kiếp gì vậy Ly?"
"Kiếp mà tớ chọn," Ly mỉm cười. "Đi chơi vui vẻ nhé."
Cô cúp máy, không một chút hối tiếc. Nói "không" với một buổi tối tỏa sáng trên sân khấu, là nói "có" với việc chinh phục được mớ code đang chờ. Cô đã biết đâu là ưu tiên của mình.
---
Sự thay đổi này, tất nhiên, Minh Dương là người nhận ra đầu tiên. Không phải qua lời nói, mà qua chất lượng công việc.
Các bản report của Ly không còn là những bài tóm tắt làm cho đủ trang. Chúng trở nên sâu sắc, đầy những phân tích so sánh. Khi cô viết về RNN, cô không chỉ trình bày công thức, cô còn tự mình vẽ sơ đồ dòng chảy của gradient, chỉ ra chính xác vị trí mà "vanishing gradient" xảy ra, và đề xuất (dù chỉ là trên lý thuyết) tại sao LSTM hay GRU có thể giải quyết được nó.
Code của cô không còn là một mớ hỗn độn chỉ để "chạy được". Nó trở nên "clean".
Cô bắt đầu dùng những tên biến có ý nghĩa (hidden_state thay vì h), viết comment giải thích lý do đằng sau một khối lệnh phức tạp ("# Kẹp giá trị gradient trong khoảng [-1, 1] để chống bùng nổ gradient"), và chia code thành các hàm nhỏ, dễ đọc.
Nhưng thay đổi rõ rệt nhất là trong các buổi meeting.
Quy định "5 câu hỏi" vẫn được duy trì, nhưng Ly không còn hỏi những câu "Em không biết làm" nữa.
"Anh ơi," cô bắt đầu trong một buổi review. "Khi em implement BPTT, em thấy rằng việc tính toán gradient cho trọng số của các bước thời gian trước đó rất tốn kém. Em đọc thấy có phương pháp 'Truncated BPTT'. Nhưng nếu mình cắt ngắn, liệu mô hình có học được các phụ thuộc xa không? Và làm thế nào để quyết định nên cắt ngắn ở bao nhiêu bước (k) là hợp lý?"
Dương, vốn đang lướt qua code của cô, khựng lại. Anh ta ngẩng lên. Đây không phải là câu hỏi của một sinh viên, đây là câu hỏi của một người thực sự làm.
Anh ta không trả lời ngay.
Anh ta làm một điều mà Ly chưa từng thấy.
"Em nghĩ sao trước?"
Ly sững sờ. "Dạ?"
"Em đã hỏi một câu hỏi hay. Em đã phân tích được vấn đề là tốn kém, và đưa ra được giải pháp là cắt ngắn. Vậy theo em, ưu và nhược điểm của nó là gì?"
Bị đẩy vào thế bất ngờ, Ly phải vận dụng toàn bộ tư duy của mình. "Em nghĩ... nó là một sự đánh đổi. Mình mất đi khả năng học phụ thuộc rất xa, nhưng đổi lại mình có thể huấn luyện nhanh hơn. Có lẽ giá trị 'k' phải được chọn dựa trên... thực nghiệm? Hoặc dựa trên độ dài trung bình của các phụ thuộc trong dữ liệu của mình?"
Dương gật đầu nhẹ. "Tạm được. Tư duy đúng hướng. Nó là một siêu tham số (hyperparameter) cần phải 'tune'."
Kể từ hôm đó, các buổi meeting không còn là các phiên tòa một chiều.
Đôi khi, Dương còn chủ động hỏi ngược lại cô.
"Anh đang nghĩ về một vấn đề trong pipeline xử lý dữ liệu tiếng Việt của lab," anh ta nói trong một buổi khác, chỉ vào một sơ đồ trên bảng trắng. "Nếu là em, với dữ liệu mạng xã hội nhiều teencode, em sẽ ưu tiên dùng 'stemming' (đưa về gốc từ) hay 'lemmatization' (đưa về dạng từ điển)? Tại sao?"
Ly choáng váng. Anh ta đang hỏi ý kiến cô. Anh ta, Minh Dương, đang hỏi ý kiến một đứa sinh viên năm hai.
"Em... em nghĩ là lemmatization ạ," cô run run, nhưng cố gắng sắp xếp lý lẽ. "Vì stemming tiếng Việt rất dễ gây sai nghĩa, 'học' và 'họp' có thể bị đưa về cùng một gốc 'học' một cách sai lầm. Lemmatization, dù chậm hơn và cần từ điển, nhưng giữ được ngữ nghĩa, điều này quan trọng hơn cho các mô hình sau này..."
Dương lắng nghe, không ngắt lời. "Logic."
Ly cảm thấy một niềm vui sướng âm ỉ. Ý kiến của cô có giá trị. Cô không còn là một đứa trẻ chỉ biết nhận lệnh. Cô đang trở thành một người đồng nghiệp.
---
Sau đó, một buổi meeting đặc biệt đang đợi Ly.
Cuối tháng Hai, sau khi Ly vừa hoàn thành xuất sắc một nhiệm vụ khó nhằn: implement song song cả LSTM và GRU để so sánh hiệu suất.
Cô đã trình bày xong. Cô chỉ ra rằng GRU có ít tham số hơn, huấn luyện nhanh hơn, nhưng LSTM cho độ chính xác cao hơn một chút trên bộ dữ liệu cô tự tạo. Bài phân tích của cô rõ ràng, rành mạch.
Cô trình bày xong, chuẩn bị tinh thần nhận nhiệm vụ tiếp theo. Có lẽ là Attention, hoặc Seq2Seq.
Nhưng Minh Dương chỉ im lặng. Anh ta đóng laptop của cô lại, xoay ghế đối diện với cô.
"Được rồi. Tốt," anh ta nói.
Rồi anh ta dừng lại.
Một sự im lặng kéo dài, khác hẳn mọi khi.
"Em làm tốt lắm."
Một lời khen trực tiếp. Không ẩn ý. Không đi kèm với một chữ "nhưng".
Ly sững sờ. Cô chưa bao giờ nghe anh ta nói câu này.
"Anh nghĩ em đã sẵn sàng cho bước tiếp theo."
"Bước tiếp theo ạ?" Ly chớp mắt. "Tuần... tuần sau học về Attention à anh?"
Dương lắc đầu nhẹ. "Không. Hết roadmap cơ bản rồi."
"Hết... hết ạ?"
"Ừ. Lộ trình 6 tháng, em hoàn thành trong 5 tháng, kể cả một tuần nghỉ. Em đã nắm được toàn bộ nền tảng cốt lõi của Deep Learning cổ điển," anh ta nói một cách thản nhiên, như thể đó là chuyện đương nhiên.
"Giờ là lúc em tự bơi," anh ta tuyên bố. "Làm một 'side project' nhỏ."
Ly thấy tim mình hẫng một nhịp. "Side project?"
"Đúng. Một dự án từ A đến Z. Em tự chọn đề tài. Tự tìm và xử lý dữ liệu. Tự thiết kế và implement mô hình. Tự chạy thí nghiệm và phân tích kết quả. Một mình."
"Và," anh ta nói thêm, "anh sẽ không giao deadline tuần nữa."
Sự tự do. Thứ mà Ly luôn khao khát, giờ đây, khi được trao cho, lại trở nên đáng sợ. Không có deadline 6 giờ sáng? Không có nhiệm vụ hàng tuần? Chỉ có một mục tiêu mông lung?
"Em... một mình em á?" Ly lắp bắp. "Em... em có thể làm được không? Em thấy mình vẫn chưa biết gì nhiều..."
Dương nhìn cô. Cái nhìn của anh ta, lần này, không còn là cái nhìn của một người giám sát. Nó là cái nhìn của một người thầy, tin tưởng vào học trò của mình.
Giọng anh ta vẫn nghiêm khắc, nhưng có một sự chắc chắn không thể lay chuyển.
"Em làm được."
Anh ta dừng một giây, rồi nói một câu mà Ly sẽ không bao giờ quên.
"Anh tin em."
---
Side Project.
Đó là dự án độc lập đầu tiên của Ly.
Cô chọn một đề tài mà cô hứng thú: "Phân loại Văn bản (Text Classification) sử dụng LSTM". Cụ thể, cô muốn xây dựng một mô hình có thể đọc các bình luận phim (movie reviews) tiếng Việt và phân loại chúng là "Tích cực" hay "Tiêu cực".
Đầu tiên. Tuần thứ nhất: Địa ngục mang tên Dữ liệu.
Cô nhanh chóng nhận ra, 90% công việc nghiên cứu, như Dương từng nói, là "dọn rác". Không có bộ dữ liệu nào sạch sẽ, có sẵn. Cô phải tự mình cào (crawl) dữ liệu từ các trang review phim.
Cô nhận về một mớ hỗn độn: 50,000 bình luận, đầy teencode ("phim hay vcl"), lỗi chính tả ("fim wa' hay"), emojis (👍👍👍), và cả những bình luận vô nghĩa.
Cô muốn bỏ cuộc ngay trong tuần đầu tiên. Cái cảm giác chán nản, tẻ nhạt ập đến. Nhưng cô nhớ lại lý do mình bắt đầu. Cô cắn răng, dành 5 ngày liền chỉ để viết các kịch bản (scripts) bằng Biểu thức Chính quy (Regex) để làm sạch dữ liệu. Cô gán nhãn lại bằng tay hàng ngàn bình luận.
Sau đó là tuần thứ 2, tiếp tục vật lộn với đống dữ liệu.
Dữ liệu đã sạch. Giờ làm sao để máy tính "hiểu" được? Cô phải "tokenize" (tách từ) tiếng Việt. Cô dùng VnCoreNLP. Rồi cô phải biến từ thành số. Cô quyết định dùng một mô hình Word Embedding đã được huấn luyện sẵn (pre-trained) - FastText tiếng Việt - để tiết kiệm thời gian.
Cô thiết kế kiến trúc: Một lớp Embedding (sử dụng trọng số của FastText) -> Một lớp LSTM 128 đơn vị -> Một lớp Dropout (để chống overfitting) -> Một lớp Dense cuối cùng với hàm kích hoạt Sigmoid (cho bài toán phân loại nhị phân).
Tuần thứ 3: Cuộc chiến với Debugging.
Cô viết code mô hình bằng Keras. Cô nhấn "Run".
Và nó sập.
ValueError: Shapes (None, 100) and (None, 100, 300) are incompatible.
Lỗi. Lỗi về kích thước ma trận (tensor shape). Kẻ thù truyền kiếp của bất kỳ ai làm Deep Learning. Đầu ra của lớp Embedding không khớp với đầu vào của lớp LSTM.
Cô nhìn chằm chằm vào màn hình. 1 giờ sáng. Cô đã kẹt ở lỗi này 6 tiếng.
Cơn hoảng loạn bắt đầu ập đến. Mình không làm được. Mình nên nhắn tin cho anh Dương.
Cô cầm điện thoại lên, mở Zalo. Ngón tay cô run run trên bàn phím.
Nhưng rồi cô dừng lại.
Ly của vài tháng trước sẽ gửi tin nhắn. Thế nhưng, Ly của hiện tại thì không.
"Anh ấy nói 'hỗ trợ khi em thực sự bí'," cô tự nhủ. "Mình đã 'thực sự' bí chưa? Hay mình còn có thể tự tìm?"
Cô đặt điện thoại xuống. Cô pha một ly cà phê đen. Cô mở tài liệu của Keras ra, đọc lại từng dòng về lớp Embedding và lớp LSTM.
Và rồi, lúc 3 giờ sáng, cô tìm ra. Cô đã quên một tham số trong lớp Embedding.
Một lỗi ngớ ngẩn.
Cô sửa lại. Nhấn "Run".
Chương trình chạy. Vòng lặp huấn luyện bắt đầu. Epoch 1/20...
Nhưng niềm vui chưa kéo dài. Mô hình chạy, nhưng Loss không giảm.
Nó cứ đi ngang.
Lại một vấn đề khác. Có thể là learning rate quá cao, hoặc quá thấp. Có thể là hàm mất mát sai. Có thể là dữ liệu bị gán nhãn nhầm.
Đến tuần thứ 4. Tiếp tục chạy thí nghiệm.
Cô không bỏ cuộc. Cô bắt đầu làm việc như một nhà khoa học thực thụ. Cô tạo một file Excel, ghi lại nhật ký các thí nghiệm.
Thí nghiệm 1: Learning rate = 0.01. Loss không giảm. -> Thất bại.
Thí nghiệm 2: Learning rate = 0.0001. Loss giảm, nhưng rất chậm. Accuracy 65%.
Thí nghiệm 3: Đổi Optimizer từ Adam sang RMSprop. Accuracy 72%.
Thí nghiệm 4: Thêm một lớp Dropout 0.5. Accuracy 81%.
Thí nghiệm 5: Tăng số đơn vị LSTM lên 256. Accuracy 83%.
Thí nghiệm 6: Quay lại Adam, giữ Dropout, dùng LSTM 128. Accuracy 85%.
Nó đã hoạt động.
85%.
Không phải là con số cao nhất thế giới, nhưng là con số của cô.
Con số được đổi bằng một tháng trời kiên trì, tự mình vật lộn.
---
Buổi meeting đầu tiên của tháng Tư.
Ly bước vào lab, lòng đầy hồi hộp.
"Anh... em làm xong side project rồi ạ. Em demo cho anh xem nhé."
Dương gật đầu. "Chạy đi."
Ly trình bày. Cô không chỉ cho anh ta thấy kết quả cuối cùng. Cô cho anh ta xem toàn bộ hành trình.
Đây là script em crawl dữ liệu. Đây là script em làm sạch teencode. Đây là nhật ký 30 thí nghiệm của em, những cái thất bại và những cái thành công. Đây là code của em. Và đây...
Cô nhấn "Run" file huấn luyện cuối cùng.
Đồ thị hiện lên. Đường loss màu xanh giảm dần, đường accuracy màu cam tăng dần.
"Và... kết quả cuối cùng trên tập validation," cô nói, cố gắng giấu sự run rẩy trong giọng nói, "là 85% ạ."
Cô trình bày xong. Im lặng.
Minh Dương không nhìn vào con số 85%. Anh ta đang xem file nhật ký thí nghiệm của cô. Anh ta lướt qua file code làm sạch dữ liệu. Anh ta nhìn thấy những ghi chú về các lần thất bại, những dòng "thử lại với learning rate thấp hơn".
Anh ta thấy được quá trình. Anh ta thấy được sự vật lộn. Anh ta thấy được sự kiên trì.
Anh ta nhìn cô.
Một sự im lặng rất lâu.
Rồi, anh ta gật đầu, một cái gật đầu chậm rãi, đầy ý nghĩa.
Một nụ cười rất nhẹ, nhưng lần này là một nụ cười tự hào, hiện lên trên khuôn mặt vốn luôn nghiêm nghị của anh.
"Giờ mới như một researcher."
Chỉ một câu nói.
Nhưng đối với Hoàng Ly, nó còn vang dội hơn tất cả những tràng pháo tay, tất cả những tấm bằng khen, tất cả những danh hiệu thủ khoa mà cô từng nhận.
"Giờ mới như một researcher."
Nó không phải là lời khen về điểm số. Nó không phải là lời khen về thành tích.
Đó là sự công nhận về sự trưởng thành.
Đó là lời tuyên bố rằng cô đã vượt qua bài kiểm tra. Cô đã không còn là một cô nhóc thông minh nhưng dễ bỏ cuộc. Cô đã trở thành một người có thể kiên trì đi đến cùng.
Ly cảm thấy lòng mình ấm áp. Nước mắt lại dâng lên, nhưng lần này, đó là nước mắt của hạnh phúc.
"Em... em cảm ơn anh," cô chỉ có thể nói được vậy.
---
Đêm hôm đó, Ly về phòng. Cô kiệt sức, nhưng vô cùng mãn nguyện. Cô mở cuốn nhật ký mà cô bắt đầu viết từ sau vụ "so sánh bản thân".
Cô lật đến một trang mới, và viết:
"Ngày... tháng... năm...
Hôm nay, mô hình của mình đã chạy. 85%.
Nhưng không phải con số đó làm mình hạnh phúc. Mình hạnh phúc, vì mình đã không bỏ cuộc khi kẹt ở lỗi shape mismatch lúc 3 giờ sáng. Mình hạnh phúc, vì mình đã tự mình tìm ra lỗi, thay vì nhắn tin cầu cứu.
Hôm nay, anh Dương nói mình 'giống như một researcher'.
Mình chợt nhận ra, mình đã không còn là con bé Hoàng Ly của sáu tháng trước nữa. Con bé kiêu ngạo, lười biếng, và luôn bỏ cuộc khi mọi thứ bắt đầu khó.
Mình đã học được cách làm việc. Mình đã học được cách đối mặt với thất bại. Và quan trọng nhất...
Mình đã học được cách kiên trì."
Bạn đang đọc truyện trên: Truyen2U.Com