Phần 1
Part 1. Overview
Coding là 1 task nhỏ của programming và software engineering. Coding có thể hiểu đơn giản là “dịch” các bước hướng dẫn từ ngôn ngữ của người thành ngôn ngữ của máy tính. Programming thì thêm 1 số tasks như là planning, designing, developing (coding here), testing, deploying, maintaining…
So sánh với nấu ăn. Đầu bếp xịn thì phải hiểu bản chất của nguyên liệu (cách các nguyên liệu phản ứng với nhau, với gia vị, với lửa, với nước, acid, đường gân đường mỡ của miếng thịt…). Từ đó đầu bếp thiết kế các bước hướng dẫn, aka công thức (bước này dùng nguyên liệu gì, cắt sao cho đúng, nấu bao lâu….
Bước tiếp theo như này như nọ…). Ko nói tới “cái hồn” của món ăn, thì 1 người bình thường nếu tuân theo 100% chi tiết công thức thì cũng có thể nấu ra món ăn như đầu bếp. Tương tự, programmer phải hiểu bản chất của data, của hardware, động não để tìm ra ‘công thức’. Có công thức chi tiết rồi thì chatGPT hay đứa con nít 10 tuổi cũng có thể chép ra rành code.
Các bước của Algorithmic thinking. chia vấn đề chính thành những vấn đề nhỏ. Với mỗi vấn đề, ta sẽ nhận input gì, và cần cho ra output gì. Tìm cách giải cho vấn đề. Kết nối các bước với nhau thành 1 hệ thống. Áp dụng hệ thống.
Một trong những việc thú vị của viết code là mình có thể quan sát quá trình tâm trí mình tưởng tượng, lục trí nhớ tìm những thuật toán tương tự hay liên quan tới vấn đề. Sau khi nhận ra cách tâm trí mình giải quyết vấn đề, thì mình mô tả nó cho máy tính để máy tính “do the dirty boring work”.
So với ngôn ngữ người, 1 từ có thể mang nhiều ý nghĩa, 1 cụm từ lại có thể mang nhiều ý nghĩa hơn nữa; thì ngôn ngữ máy tính rất cụ thể, nói A là A, nói B là B. Máy tính nói gì làm nấy chứ ko như người nói 1 đằng làm 1 nẻo.
Thế nên là đọc code của 1 người dễ hơn là đọc sách triết học. Từ đoạn code, mình có thể hiểu phần nào cách người đó hiểu vấn đề, và cách người đó suy nghĩ để giải quyết vấn đề.
AI có nhiều thứ thú vị. Dĩ nhiên điểm nổi bật của AI so với các thể loại programs khác là nó có thể “học”. Khi đọc về cách AI “học” thì ta sẽ hiểu đc cách programmers hiểu về vấn đề “học”, và cách mà programmers nghĩ về “học”.
Cách “học” của AI hiện nay thì có 3 mảng chính là supervised learning, unsupervised learning, và reinforcement learning. Bài này mình chém supervised learning thôi. Mà mình cũng chả chém về technical details như linear algebra, calculus.. Những thứ này là bản chất của AI, dành cho dân chuyên. mình chỉ chém về cách “học”
Các bước của supervised learning đơn giản là:
Nhận input, cho ra output
So sánh output với target, tính “khoảng cách” giữa output và target
Update weights (neurons) để output “gần” hơn với target
Repeat
So sánh với “học” ở người. Người thầy chỉ cho mình 1 kĩ thuật (1 món ăn, 1 chiêu thức vật, 1 cách vẽ 1 đồ vật…). Target là kĩ thuật của người thầy. Input là nguyên vật liệu và dụng cụ (nếu kĩ thuật là món ăn, vẽ tranh…); hoặc input là tư thế của mình và bạn tập (nếu kĩ thuật là chiêu thức võ thuật). Mình so sánh output của mình với target, và thay đổi 1 số chi tiết trong kĩ thuật của mình, để output của mình gần với target (kĩ thuậtcủa người thầy hơn). Có 1 người thầy cung cấp target, tính “khoảng cách” giữa output của mình và target, và chỉ cho mình chỗ update thì mọi việc sẽ dễ dàng hơn là tự mình làm hết mấy việc đó, và mình sẽ học nhanh hơn
Vung kiếm, đấm, đá… để master 1 move thì việc lặp đi lặp lại là quan trọng. Và lặp đi lặp lại 10000+ lần là bình thường. Nhưng quan trọng hơn là trong mỗi rep đó, mình có reflect, “như thế này đúng hơn”, “như thế kia ko đúng…” và với rep tiếp theo, mình có chịu sửa, từ bỏ chi tiết mình đang có, thử chi tiết mới.
“The definition of insanity is doing the same thing over and over and expecting different results.”
Part 2. Riding the waves
Từ góc nhìn của supervised learning, thì việc học đơn giản là thay đổi bản thân để output của mình gần với target hơn, minimize the distance between output and target. AI thì đơn giản hơn não người nhiều, nhưng có 1 số vấn đề khá thú vị mà AI gặp phải, và nó giúp mình hiểu vấn đề của mình hơn.
Vấn đề 0. Chọn targets
Bước đầu tiên để học là thấy nó đáng để làm. Mình phải muốn học, muốn thay đổi bản thân, để output của mình gần target hơn. Nếu ko có bước này thì mình chỉ đang giả bộ học, chứ ko thật sự học, ko thật sự thay đổi bản thân, mình chỉ lặp đi lặp lại hành động, chạy 1 cái loop và chẳng có gì thay đổi.
Mà bước trước cả bước đầu tiên này, là nhìn xem targets thật sự của mình là gì. Purpose của mình là gì, và targets của mình có align với cái purpose đó ko .
Bước này thì kiểu “trời cho”/thiên bẩm, tự mình ko quyết định lý do mình tồn tại, mà The Creator quyết định mình đc sinh ra để làm gì, và việc của mình chỉ là tuân theo cái purpose đó (bằng cách chạy theo targets). Tùy theo thời gian, nhận thức thay đổi, thì targets cũng thay đổi, nhưng targets luôn align with purpose.
Một điều khá rõ ràng, mà lại khó thấy. Purpose chung của cuộc sống chỉ đơn giản là tận hưởng cuộc sống, thông qua việc chơi/sáng tạo. Chơi/sáng tạo cái gì, thì đó là targets, tùy tâm và tầm của mỗi người. Ý này mình nói hoài, mà mình nghĩ là ai cũng biết điều này trong vô thức.
Lời khuyên của Joseph Campbell về việc follow your bliss: “All the time. It is miraculous. I even have a superstition that has grown on me as a result of invisible hands coming all the time––namely, that if you do follow your bliss you put yourself on a kind of track that has been there all the while, waiting for you, and the life that you ought to be living is the one you are living. When you can see that, you begin to meet people who are in your field of bliss, and they open doors to you. I say, follow your bliss and don’t be afraid, and doors will open where you didn’t know they were going to be”.
Follow your bliss, có thể hiểu là chơi game có tâm và đúng tầm của mình, làm điều ĐÁNG LÀM nhất, ở đây và ngay lúc này. Mình dùng từ “đáng làm”, vì nhiều khi thứ đáng làm ko mang lại khoái lạc hoặc ko phải thứ mình muốn làm. Mình chỉ biết là nếu làm thì output của mình gần với target hơn, và bản thân việc này mang lại bliss ko phụ thuộc vào pain và pleasure.
To be continued.
Art đẹp không biết nguồn