-
Trình Thực Thi
Trình biên dịch Python Trình biên dịch C++ Trình biên dịch C Trình biên dịch Matplotlib Trình thông dịch Node.js Trình thông dịch PHP Trình biên dịch C# / .NET Trình biên dịch Rust Ruby Interpreter Trình biên dịch Java Trình biên dịch Go Trình biên dịch Kotlin Trình biên dịch Swift Trình biên dịch TypeScript
-
Học lập trình
Học Python Ví dụ chạy được, NumPy, pandas và nhiều nội dung khác Học AIMạng nơ-ron, học máy và LLM từ đầu Học C và C++ Con trỏ, bộ nhớ, STL và C++ hiện đại Học C#C# cơ bản, OOP, LINQ, async và bài tập .NET Học MatplotlibBiểu đồ đường, cột, phân tán và tròn với visualizer tương tác Thuật toán Python Tìm kiếm, sắp xếp, đệ quy và trình mô phỏng O(n) Thuật toán C và C++ So sánh cách cài đặt bằng C và C++ Lập trình cho trẻ em Vừa chơi vừa học lập trình!
- Thử tháchMới
- Cho giáo viênMới
- Cập Nhật mới nhất
- Mời mình một ly cà phê
Multi-head attention cho phép Transformer chú ý đến nhiều thứ cùng lúc. Với đầu vào X (n token × d cột) và các ma trận trọng số kích thước d × d:
- Q = X × w_q, K = X × w_k, V = X × w_v
- Chia d cột thành
num_headsđầu, mỗi đầu gồm d_k = d / num_heads cột liên tiếp (đầu h dùng các cột từ h×d_k đến (h+1)×d_k - 1). - Với mỗi đầu, chạy scaled dot-product attention trên các cột của nó: với token i, score_j = (Q_i · K_j) / √d_k trên các cột của đầu đó, softmax trên cả n token j, và đầu ra = Σ weight_j × V_j (các cột của đầu đó).
- Đặt đầu ra của các đầu vào đúng cột của chúng (ghép lại) rồi nhân với w_o.
Hãy cài đặt multi_head_attention(x, w_q, w_k, w_v, w_o, num_heads).
Đầu vào
x: Ma trận đầu vào n × d.
w_q, w_k, w_v, w_o: Các ma trận trọng số d × d.
num_heads: Số đầu (d chia hết cho số này).
Đầu ra
Trả về ma trận đầu ra n × d.
Ràng buộc
1 ≤ n ≤ 30, 1 ≤ d ≤ 32, 1 ≤ num_heads ≤ d và d chia hết cho num_heads
-5 ≤ mỗi giá trị ≤ 5
Ví dụ
Ví dụ 1
Đầu vào:
x = [
[1.0, 0.0],
[0.0, 1.0]
]
w_q = [
[0.0, 0.0],
[0.0, 0.0]
]
w_k = [
[1.0, 0.0],
[0.0, 1.0]
]
w_v = [
[1.0, 0.0],
[0.0, 1.0]
]
w_o = [
[1.0, 0.0],
[0.0, 1.0]
]
num_heads = 1
Kết quả mong đợi:
[
[0.5, 0.5],
[0.5, 0.5]
]
Giải thích
w_q toàn số 0, nên mọi điểm bằng 0 và mỗi token lấy trung bình các hàng value: V = X, nên cả hai hàng đều thành [0.5, 0.5].
Ví dụ 2
Đầu vào:
x = [
[2.0, 4.0]
]
w_q = [
[1.0, 0.0],
[0.0, 1.0]
]
w_k = [
[1.0, 0.0],
[0.0, 1.0]
]
w_v = [
[1.0, 0.0],
[0.0, 1.0]
]
w_o = [
[0.0, 1.0],
[1.0, 0.0]
]
num_heads = 2
Kết quả mong đợi:
[
[4.0, 2.0]
]
Giải thích
Chỉ có một token nên mỗi đầu chỉ chú ý đến chính nó, đầu ra ghép lại là V = [2, 4]. w_o hoán đổi hai cột: [4, 2].
Tham khảo
-
Ví dụ 1 Chưa chạyĐầu vào:
x = [ [1.0, 0.0], [0.0, 1.0] ] w_q = [ [0.0, 0.0], [0.0, 0.0] ] w_k = [ [1.0, 0.0], [0.0, 1.0] ] w_v = [ [1.0, 0.0], [0.0, 1.0] ] w_o = [ [1.0, 0.0], [0.0, 1.0] ] num_heads = 1Kết quả mong đợi:[ [0.5, 0.5], [0.5, 0.5] ]Kết quả của bạn -
Ví dụ 2 Chưa chạyĐầu vào:
x = [ [2.0, 4.0] ] w_q = [ [1.0, 0.0], [0.0, 1.0] ] w_k = [ [1.0, 0.0], [0.0, 1.0] ] w_v = [ [1.0, 0.0], [0.0, 1.0] ] w_o = [ [0.0, 1.0], [1.0, 0.0] ] num_heads = 2Kết quả mong đợi:[ [4.0, 2.0] ]Kết quả của bạn
Có 4 kiểm tra ẩn sẽ chạy khi bạn nộp bài. Nếu code chưa vượt qua một bài, bạn sẽ thấy bài đó. Giải xong thử thách để xem tất cả.
Trình chạy JavaScript online
Viết, chạy và gỡ lỗi JavaScript hoặc Node.js trực tuyến trong IDE đầy đủ tính năng. Làm việc với nhiều tệp và package, lưu workspace và cộng tác theo thời gian thực.
🚀 339,661 tổng số lượt thực thi (665 trong tháng này)
Luyện JavaScript với thử thách lập trình
Giải các bài tập thực tế ngay trên trình soạn thảo này: chạy kiểm thử mẫu, nộp bài và nhận đánh giá code từ AI.
⚡ Giới thiệu về Trình thực thi JavaScript (Node.js) trực tuyến này
Trình thực thi JavaScript của CodeUtility cho phép bạn viết và chạy mã JavaScript hiện đại ngay trên trình duyệt - tức thì và không cần cấu hình. Công cụ sử dụng môi trường Node.js thực để chạy mã của bạn an toàn trong container sandbox, hỗ trợ các phiên bản 16, 18 và 20.
Công cụ này rất phù hợp để kiểm thử các đoạn mã Node.js, khám phá cú pháp ES6+, hoặc học các khái niệm lập trình JavaScript cốt lõi như vòng lặp, hàm, mảng, promise và hành vi async/await.
Bạn cũng có thể dùng nó để kiểm chứng thuật toán, gỡ lỗi các tập lệnh nhỏ, hoặc thử nghiệm logic runtime mà không cần cài Node cục bộ. Rất lý tưởng cho người học, lập trình viên backend, hoặc bất kỳ ai cần cách chạy JavaScript nhanh gọn ngay trên trình duyệt.
Không chỉ là công cụ chạy mã
Sử dụng trình soạn thảo nhiều tệp, terminal thực thi biệt lập, thư viện riêng theo môi trường chạy, không gian làm việc lâu dài, tính năng chia sẻ và cộng tác theo thời gian thực ngay trong cùng một trình thực thi.
Cách sử dụng trình thực thi này?
Chọn môi trường chạy, mở hoặc tạo tệp, viết mã rồi nhấn Chạy. Kết quả xuất hiện trong terminal; người dùng đã đăng nhập có thể lưu tệp trong không gian làm việc, cài thư viện và cộng tác qua liên kết chia sẻ.
- Chọn phiên bản rồi chỉnh sửa tệp hiện tại hoặc mở một tệp khác trong không gian làm việc.
- Chạy mã, nhập dữ liệu trong terminal khi được yêu cầu và xem lại lịch sử chạy đã lưu.
- Sử dụng thư viện, công cụ không gian làm việc, chia sẻ và trò chuyện khi tác vụ cần nhiều hơn một đoạn mã.
💡 Hướng dẫn cơ bản Node.js cho người mới bắt đầu
1. Khai báo biến và hằng số
Dùng let hoặc const cho biến có phạm vi khối. const dùng cho hằng số.
let x = 10;
const PI = 3.14;
let name = "Alice";
let isActive = true;
2. Cấu trúc điều kiện (if / switch)
Dùng if, else if, else hoặc switch để điều khiển luồng.
let x = 2;
if (x === 1) {
console.log("Một");
} else if (x === 2) {
console.log("Hai");
} else {
console.log("Khác");
}
switch (x) {
case 1:
console.log("Một");
break;
case 2:
console.log("Hai");
break;
default:
console.log("Khác");
}
3. Vòng lặp
Dùng for, while và forEach để lặp qua dữ liệu.
for (let i = 0; i < 3; i++) {
console.log(i);
}
let n = 3;
while (n > 0) {
console.log(n);
n--;
}
4. Mảng
Dùng mảng để lưu danh sách giá trị có thứ tự. Truy cập bằng chỉ số.
let fruits = ["apple", "banana", "cherry"];
console.log(fruits[0]);
console.log(fruits.length);
5. Thao tác mảng
Dùng các phương thức như push, pop, slice và reverse.
fruits.push("kiwi");
fruits.pop();
console.log(fruits.slice(0, 2));
console.log(fruits.reverse());
let squares = [1, 2, 3, 4, 5].map(x => x * x);
console.log(squares);
6. Nhập/Xuất console
Dùng console.log để xuất và mô-đun readline để nhập.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Tên bạn là gì? ", name => {
console.log(`Xin chào, ${name}`);
rl.close();
});
7. Hàm
Hàm có thể được khai báo hoặc viết dưới dạng biểu thức. Hàm mũi tên thường được dùng trong JavaScript hiện đại.
function greet(name) {
return `Xin chào, ${name}`;
}
const add = (a, b) => a + b;
console.log(greet("Alice"));
console.log(add(2, 3));
8. Đối tượng (Map)
Đối tượng lưu cặp khóa-giá trị. Chúng tương tự như dictionary hoặc map.
let person = { name: "Bob", age: 25 };
console.log(person.name);
console.log(person["age"]);
// Map trong ES6
const map = new Map();
map.set("a", 1);
console.log(map.get("a"));
9. Xử lý ngoại lệ
Dùng try, catch và finally để xử lý lỗi an toàn.
try {
throw new Error("Đã có sự cố xảy ra");
} catch (e) {
console.log(e.message);
} finally {
console.log("Dọn dẹp nếu cần");
}
10. I/O tệp
Dùng mô-đun fs của Node.js để đọc và ghi tệp.
const fs = require("fs");
fs.writeFileSync("test.txt", "Hello File");
const data = fs.readFileSync("test.txt", "utf8");
console.log(data);
11. Xử lý chuỗi
Dùng các phương thức như trim(), toUpperCase(), replace() và split().
let text = " Hello World ";
console.log(text.trim());
console.log(text.toUpperCase());
console.log(text.replace("Hello", "Hi"));
console.log(text.split(" "));
12. Lớp & Đối tượng
ES6+ hỗ trợ OOP với cú pháp class.
class Person {
constructor(name) {
this.name = name;
}
greet() {
return `Xin chào, tôi là ${this.name}`;
}
}
const p = new Person("Alice");
console.log(p.greet());
13. Tham chiếu
Đối tượng và mảng trong JavaScript được truyền theo tham chiếu.
function update(arr) {
arr.push("changed");
}
let data = ["original"];
update(data);
console.log(data); // ["original", "changed"]