Tôi đã chơi với một thuật toán học cách chơi tictactoe. Mã giả cơ bản là:
repeat many thousand times {
repeat until game is over {
if(board layout is unknown or exploring) {
move randomly
} else {
move in location which historically gives highest reward
}
}
for each step in the game {
determine board layout for current step
if(board layout is unknown) {
add board layout to memory
}
update reward for board layout based on game outcome
}
}
now play a human and win :-)
Thăm dò: ban đầu thuật toán khám phá một cách tích cực và điều này làm giảm tuyến tính. Sau khi nói một ngàn trò chơi, nó chỉ khám phá trong 10% số lần di chuyển. Tất cả các động thái khác được dựa trên khai thác các phần thưởng trước đó.
Phần thưởng: nếu trò chơi dẫn đến chiến thắng, sau đó thưởng 10 điểm. Nếu trò chơi dẫn đến kết quả hòa, 0 điểm, nếu không -5 điểm. Trên thực tế, những phần thưởng này có thể được "điều chỉnh", do đó, nếu trò chơi ngắn hơn và giành chiến thắng, sau đó trao nhiều điểm hơn hoặc nếu nó được trao giải thưởng ít điểm hơn. Bằng cách này, thuật toán thích chiến thắng một cách nhanh chóng. Điều đó có nghĩa là nó học cách chiến thắng càng sớm càng tốt, thay vì nhắm đến chiến thắng sau này. Điều đó rất quan trọng để nó không bỏ lỡ chiến thắng ngay lập tức - nếu nó bỏ lỡ một động tác như vậy, đối thủ có thể sẽ a) di chuyển đến đó để tránh cho AI chiến thắng lần sau và b) nghĩ rằng thuật toán là ngu ngốc vì nó đã bỏ lỡ một "điều hiển nhiên " thắng lợi.
Thuật toán này thực sự học, vì vậy tôi có thể xếp nó thành thuật toán học máy.
Tôi nghĩ, nhưng tôi không chắc chắn, đó là một thuật toán học tập được củng cố. Tuy nhiên, theo https://www.cse.unsw.edu.au/~cs9417ml/RL1/tdlearning.html đó không phải là học tập khác biệt theo thời gian, vì nó không ước tính phần thưởng cho đến khi kết thúc và nên ước tính phần thưởng khi nó đi cùng. Điều đó có thể có nghĩa là nó không được củng cố việc học.
Câu hỏi 1: Tôi có thể lập luận thành công rằng tôi đang ước tính phần thưởng dựa trên lịch sử và vẫn cho rằng thuật toán được học tăng cường hoặc thậm chí là học hỏi không?
Câu hỏi 2: Nếu tôi thay thế tra cứu phần thưởng dựa trên bố trí bảng, bằng mạng thần kinh, trong đó bố trí bảng là đầu vào và phần thưởng là đầu ra, thuật toán có thể được coi là học tăng cường sâu không?
Câu hỏi 3: Tôi không nghĩ rằng tôi có tỷ lệ học tập hoặc yếu tố giảm giá. Nó rất quan trọng?
Tôi nhận thấy rằng thuật toán này khá vô dụng trừ khi tôi huấn luyện nó với ít nhất mọi động tác mà đối thủ cố gắng. Vì vậy, theo một cách nào đó, nó cảm thấy như nó sử dụng vũ lực hơn là thực sự "học hỏi". Điều này khiến tôi đặt câu hỏi liệu máy học tictactoe có thực sự học hay không. Tôi đồng ý rằng việc sử dụng mạng thần kinh để học nhận dạng hình ảnh có thể được phân loại là học vì khi nhìn thấy hình ảnh không xác định, nó có thể nêu ra phân loại của nó. Nhưng điều đó khá vô dụng đối với các trò chơi như tictactoe khi bố trí bảng tương tự hoàn toàn không liên quan (một cái có thể dẫn đến một chiến thắng, cái còn lại có thể dẫn đến thua cuộc). Vì thế...
Câu hỏi 4: Các thuật toán tictactoe có thể được phân loại là học thực sự chứ không chỉ đơn giản là vũ lực?
Cập nhật: liên quan đến phần thưởng ... khi thuật toán quyết định nơi sẽ đi, nó sẽ tìm ra phần thưởng cho từng vị trí như sau:
var total = winRewards + drawRewards + lossRewards;
move.reward = (100*(winRewards/total)) + (10*(drawRewards/total)) + (-1*(lossRewards/total));
Tôi chia cho tổng số điểm (cho mỗi lần di chuyển), bởi vì nếu không thì dường như biết rằng một nơi là TUYỆT VỜI và không cho người khác cơ hội. Bằng cách này, chúng tôi tính ra tỷ lệ thắng bất kể tần suất được chơi như thế nào. Nó được chuẩn hóa so với những người khác.
Mã có sẵn ở đây: https://github.com/maxant/tictactoe/blob/master/ai.js
CẬP NHẬT # 2: Tôi đã nhận ra rằng thuật toán này không thể được phân loại là sử dụng vũ lực bởi vì nó không thực sự học được nhiều trò chơi đó trước khi trở thành một chuyên gia. Chi tiết tại đây: http://blog.maxant.co.uk/pebble/2018/04/11/1523468336936.html