
Handwired là gì?
Handwired biến mã JavaScript thông thường thành một phép tính giống mạng nơ-ron mà không cần huấn luyện. Thay vì biểu diễn chương trình dưới dạng luồng điều khiển thông thường, công cụ này chuyển đổi các logic như điều kiện, vòng lặp và trạng thái thành phép nhân ma trận kết hợp với các phép toán reglu trên các giá trị dấu phẩy động.
Chương trình tạo ra vẫn hoàn toàn khả vi, trong khi các trọng số được viết thủ công thay vì được học. Handwired có thể thực thi các phép tính này trong JavaScript hoặc bằng WebGPU.

Tại sao nên chuyển chương trình thành phép tính nơ-ron?
Handwired rút gọn hành vi của chương trình thành một tập hợp nhỏ các nguyên thủy toán học, chủ yếu là phép cộng, phép nhân và các phép toán kiểu ReLU. Cách tiếp cận này mang lại một số đặc tính đáng chú ý:
- Toàn bộ chương trình vẫn khả vi.
- Không cần huấn luyện trọng số vì chúng được viết thủ công.
- Các tối ưu hóa GPU như hợp nhất, độ thưa và sắp xếp lại phép toán có thể hoạt động với phép tính được đơn giản hóa.
- Mã JavaScript truyền thống về lý thuyết có thể đạt mức song song hóa tương đương GPU khi được biểu diễn theo dạng này.
Dự án cũng mở ra các khả năng thử nghiệm. Bạn có thể mở khóa các trọng số được định nghĩa thủ công để tìm hiểu quá trình huấn luyện tạo ra điều gì, hoặc gắn một chương trình bị đóng băng vào mạng nơ-ron tổng quát và huấn luyện toàn bộ hệ thống từ đầu đến cuối.
Thiết lập dự án
Handwired bao gồm các bản demo trực tiếp và mã nguồn cần thiết để khám phá cách triển khai trên máy cục bộ. Bạn cần cài đặt Bun trên hệ thống.
- Sao chép kho lưu trữ Handwired.
- Chuyển vào thư mục dự án.
- Cài đặt các phần phụ thuộc bằng
bun install. - Khởi động các bản demo cục bộ bằng
bun start.
git clone <handwired-repository-url>
cd handwired
bun install
bun startSau khi khởi động dự án, hãy sử dụng địa chỉ cục bộ được Bun in ra để xem các bản demo. Bạn cũng có thể thử các bản demo được lưu trữ tại chenglou.me/handwired.
Tìm hiểu phép biến đổi cốt lõi
Hãy xét một điều kiện JavaScript đơn giản:
const a = 5
const result = (a > 4) ? 10 : 12Handwired biểu diễn điều kiện bằng số học. Với một giá trị nguyên, hiệu của các phép ReLU sau tạo ra một bộ chọn bằng 1 khi a > 4 và bằng 0 khi a <= 4:
const a = 5
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
const result = above4 * 10 + (1 - above4) * 12Cả hai nhánh đều được tính, nhưng above4 chọn kết quả phù hợp. Với a = 5, bộ chọn bằng 1 nên giá trị cuối cùng là 10, khớp với biểu thức điều kiện ban đầu.
Cách biểu diễn toán học hoạt động
Ý tưởng cốt lõi là thay thế rẽ nhánh bằng các nguyên thủy số học liên tục. Một điều kiện trở thành sự kết hợp của:

- Các phép ReLU để tạo bộ chọn từ đầu vào.
- Phép nhân để áp dụng bộ chọn cho từng nhánh.
- Phép cộng để kết hợp kết quả của các nhánh.
Sau khi tập hợp các phép toán này, Handwired có thể biểu diễn phép tính dưới dạng một phép nhân ma trận lớn cùng các phép kích hoạt tương ứng. Sau đó, cùng một chương trình có thể được đánh giá bằng JavaScript hoặc WebGPU.
Cả hai nhánh đều được tính, còn bộ chọn quyết định kết quả nào đóng góp vào đầu ra.
Khám phá kho lưu trữ
Khi tìm hiểu dự án, hãy bắt đầu với các thư mục được nêu trong README:
docs/chứa tài liệu và nội dung giúp tìm hiểu dự án.src/chứa phần triển khai.template/cung cấp điểm khởi đầu để làm quen với dự án.lab/chứa các thử nghiệm cũ mà bạn có thể khám phá hoặc bỏ qua.
Một quy trình thực tế là chạy các bản demo trước, sau đó đối chiếu hành vi của chúng với những tệp mã nguồn liên quan. Cách này giúp kết nối các ví dụ trực quan với phép biến đổi cơ bản thành các phép toán ma trận.
Thử các bản demo
Bản demo được lưu trữ là cách nhanh nhất để xem Handwired hoạt động. Mô tả dự án đặc biệt nêu bật một bản demo tìm kiếm JSON xử lý 100.000 tài liệu trong vài mili giây. Bản demo cho thấy mục tiêu của dự án là mang khả năng song song hóa đáng kể đến mã vốn được viết theo phong cách đơn luồng truyền thống.
Hãy sử dụng các bản demo để quan sát sự khác biệt giữa cấu trúc chương trình ban đầu và biểu diễn toán học được tạo ra. Đây cũng là điểm khởi đầu hữu ích trước khi chỉnh sửa mã nguồn cục bộ.
Ý tưởng nâng cao
Thử nghiệm với trọng số có thể huấn luyện
Handwired thường sử dụng các trọng số được viết thủ công, vì vậy không cần huấn luyện để chương trình hoạt động. Một thử nghiệm được dự án gợi ý là mở khóa các trọng số đó và xem quá trình tối ưu hóa tạo ra kết quả gì.
Kết hợp chương trình bị đóng băng với mạng nơ-ron
Một khả năng khác là gắn một chương trình Handwired bị đóng băng cụ thể vào một mạng nơ-ron tổng quát, rồi huấn luyện toàn bộ hệ thống từ đầu đến cuối. Điều này có thể giúp mô hình giữ lại một chương trình được xác định chính xác trong khi học các hành vi khác.
Tư duy theo các phép toán nguyên thủy
Khi thiết kế thử nghiệm, hãy tập trung vào cách biểu diễn luồng điều khiển bằng phép cộng, phép nhân và các phép toán kiểu ReLU. Phép tính tạo ra càng đơn giản thì càng có thể hưởng lợi trực tiếp từ các kỹ thuật như hợp nhất, độ thưa và sắp xếp lại.
Kết luận
Handwired cho thấy cách viết lại logic JavaScript thông thường thành phép tính toán học khả vi. Bằng cách thay thế luồng điều khiển bằng các bộ chọn số học và rút gọn kết quả thành phép nhân ma trận cùng các phép toán kích hoạt, công cụ này giúp các chương trình truyền thống tương thích với các kỹ thuật mạng nơ-ron và việc thực thi bằng JavaScript hoặc WebGPU. Hãy cài đặt bằng Bun, khám phá các bản demo, sau đó xem docs/, src/ và template/ để bắt đầu thử nghiệm.
