Tổng quan đề tài
Bài tiểu luận sẽ khám phá ứng dụng của kỹ thuật Học tăng cường (Reinforcement Learning) trong việc dạy trí tuệ nhân tạo (Artificial Intelligence) chơi trò chơi rắn săn mồi (Snake game) Học tăng cường là một phương pháp học máy (Machine Learning) cho phép tác nhân (agent) tương tác với môi trường (environment) nhằm đạt được mục tiêu cụ thể (objective) Mục tiêu của trí tuệ nhân tạo trong trò chơi này là điều khiển con rắn di chuyển và ăn mồi một cách hiệu quả, đồng thời tránh va chạm với các tường hoặc chính nó.
Bài tiểu luận này sẽ trình bày mô hình học tăng cường trong trò chơi rắn săn mồi, tập trung vào các yếu tố như quyết định hành động, bộ nhớ và chiến lược học tối ưu Đồng thời, bài viết cũng sẽ giới thiệu một số kỹ thuật và thủ thuật nhằm nâng cao hiệu quả của trí tuệ nhân tạo trong trò chơi này.
Bài tiểu luận sẽ trình bày chi tiết quá trình áp dụng Học tăng cường để dạy AI chơi trò chơi rắn săn mồi, sử dụng các thư viện học máy và ngôn ngữ lập trình phổ biến như Python, đồng thời đánh giá hiệu quả của kỹ thuật này dựa trên kiến thức và kinh nghiệm trong lĩnh vực.
Lý do chọn đề tài
Bài tiểu luận này tập trung vào việc áp dụng Học tăng cường để dạy AI chơi trò chơi rắn săn mồi, minh họa cho ứng dụng thực tiễn của phương pháp này Học tăng cường là một kỹ thuật học máy quan trọng, được sử dụng rộng rãi trong nhiều lĩnh vực như trò chơi điện tử, robot tự động, tự động hóa sản xuất, tài chính và y tế.
Trò chơi rắn săn mồi là một trò chơi thú vị và phổ biến, được yêu thích trên nhiều nền tảng Việc áp dụng Học tăng cường để dạy trí tuệ nhân tạo chơi trò này không chỉ mang lại sự thú vị mà còn giúp chúng ta hiểu rõ hơn về cách thức hoạt động của hệ thống Học tăng cường.
Bài tiểu luận sẽ trình bày chi tiết cách áp dụng Học tăng cường trong việc dạy trí tuệ nhân tạo chơi trò chơi rắn săn mồi, dựa trên kiến thức và kinh nghiệm về Học tăng cường cùng các thư viện học máy và ngôn ngữ lập trình phổ biến Qua đó, bài viết sẽ đánh giá hiệu quả của kỹ thuật này.
Mục tiêu nghiên cứu
Nghiên cứu này nhằm mục đích sử dụng mô hình ResNet để phân loại đối tượng trong ảnh với độ chính xác cao, đồng thời thực hiện các thí nghiệm để đánh giá hiệu quả của mô hình Bên cạnh đó, nghiên cứu cũng tìm hiểu sâu về cấu trúc và cơ chế hoạt động của mô hình ResNet trong việc xử lý ảnh.
Đối tượng nghiên cứu
Bài tiểu luận này nghiên cứu về việc áp dụng trí tuệ nhân tạo trong trò chơi rắn săn mồi, tập trung vào các phương pháp và kỹ thuật học tăng cường nhằm dạy cho trí tuệ nhân tạo cách chơi trò chơi này.
Giới thiệu về học máy(Machine Learning)
Học máy (Machine Learning) là một nhánh của trí tuệ nhân tạo (AI) tập trung vào phát triển các thuật toán giúp máy tính tự động học hỏi và cải thiện hiệu suất từ dữ liệu Thay vì lập trình các quy tắc cụ thể, học máy cho phép máy tính học từ ví dụ và điều chỉnh mô hình để tối ưu hóa kết quả Ứng dụng của học máy rất phong phú, bao gồm phân loại hình ảnh, dự đoán giá cổ phiếu và tự động lái xe.
Hình 1.học máy(Machine Learning)
Giới thiệu về Học sâu (Deep Learning)
Học sâu là một phương pháp trong học máy, dựa trên các mạng neuron nhân tạo, cho phép hệ thống học hỏi và tự điều chỉnh thông qua các lớp ẩn sâu.
Mục tiêu của học sâu là giải quyết các bài toán phức tạp với đầu vào từ dữ liệu lớn và đa dạng như hình ảnh, âm thanh, văn bản và video Công nghệ này được áp dụng rộng rãi trong nhiều lĩnh vực, bao gồm xử lý ngôn ngữ tự nhiên, nhận dạng giọng nói, phân loại hình ảnh, tự động lái xe và nhận dạng đối tượng trong video.
Học sâu được phát triển dựa trên các thuật toán học máy như hồi quy tuyến tính, phân loại, rừng ngẫu nhiên, máy vector hỗ trợ và bộ phân loại naive Bayes Tuy nhiên, học sâu cho phép mô hình hóa các mối quan hệ phức tạp hơn trong dữ liệu thông qua các lớp ẩn sâu, giúp tăng cường sức mạnh và độ chính xác so với các phương pháp học máy truyền thống.
Hình 2 Học sâu (Deep Learning)
Học tăng cường(Reinforcement Learning)
Học tăng cường là một nhánh của Machine Learning, trong đó các mô hình học cách tương tác với môi trường nhằm đạt được mục tiêu thông qua hành động và phản hồi Lĩnh vực này tập trung vào việc nghiên cứu cách các tác nhân thông minh tương tác với môi trường để tối đa hóa phần thưởng.
Trong học tăng cường, mô hình tương tác với môi trường để nhận phản hồi về hành động thực hiện Mục tiêu là tối đa hóa phần thưởng thông qua việc học cách thực hiện các hành động Các hành động được đưa ra dựa trên một chính sách, được phát triển thông qua các phương pháp như Q-Learning hoặc Policy Gradient.
Học tăng cường được áp dụng phổ biến trong nhiều lĩnh vực, bao gồm trò chơi điện tử, robot, quản lý tự động và nhiều ứng dụng khác trong cuộc sống hàng ngày.
PyTorch
PyTorch là một công cụ mạnh mẽ và hiệu quả cho việc xây dựng các mô hình học máy Được thiết kế với tính dễ sử dụng và khả năng mở rộng cao, PyTorch có thể chạy trên nhiều nền tảng khác nhau Nó cung cấp một phương pháp thân thiện cho các nhà phát triển trong việc triển khai và tinh chỉnh các mô hình học máy phức tạp.
Pygame
Pygame là thư viện Python miễn phí và mã nguồn mở, cho phép người dùng tạo ra trò chơi và ứng dụng đa phương tiện tương tác Thư viện này cung cấp công cụ xử lý đồ họa, âm thanh và sự kiện từ người dùng như bàn phím và chuột Ngoài ra, Pygame còn được sử dụng phổ biến trong giáo dục để giảng dạy lập trình cho học sinh và sinh viên.
Các nghiên cứu trong nước
Bài báo "Sử dụng học tăng cường trong điều khiển robot di động" của Tạ Quang Trường và Đặng Thanh Hải nghiên cứu ứng dụng học tăng cường trong điều khiển robot di động Tác giả đề xuất một phương pháp mới dựa trên thuật toán Q-Learning và xây dựng mô hình mạng nơ-ron để phân loại hành động Kết quả thực nghiệm cho thấy phương pháp này đạt hiệu quả cao hơn so với các phương pháp truyền thống.
Học tăng cường trong hệ thống điều khiển robot bằng tay
Bài báo "Học tăng cường trong hệ thống điều khiển robot bằng tay" của Nguyễn Thành Nam và đồng nghiệp nghiên cứu việc áp dụng học tăng cường nhằm nâng cao hiệu quả điều khiển robot bằng tay Tác giả đề xuất sử dụng phương pháp Q-Learning kết hợp với mô hình mạng nơ-ron để cải thiện khả năng học tập của robot Kết quả thực nghiệm chỉ ra rằng phương pháp này đạt hiệu quả vượt trội so với các phương pháp truyền thống.
Các nghiên cứu ngoài nước
Playing Atari with Deep Reinforcement Learning
Tác giả: Volodymyr Mnih, et al.
Bài báo này trình bày một phương pháp mới kết hợp mạng nơ-ron sâu với học tăng cường để giải quyết bài toán chơi game Atari Phương pháp này đã đạt được kết quả vượt trội so với các kỹ thuật học có giám sát và học không giám sát Nghiên cứu này mở ra tiềm năng mới cho việc áp dụng học tăng cường trong các lĩnh vực như tự động lái xe, robot tự học và hệ thống hỗ trợ quyết định.
End-to-end training of deep visuomotor policies
Tác giả: Sergey Levine, et al.
Bài báo này trình bày một phương pháp mới trong việc huấn luyện mạng nơ-ron sâu nhằm thực hiện các tác vụ visuomotor, kết hợp thông tin thị giác và chuyển động Phương pháp này áp dụng học tăng cường để đào tạo mạng nơ-ron sâu, giúp robot học cách điều khiển và thực hiện các tác vụ một cách hiệu quả.
Kết quả thực nghiệm cho thấy phương pháp này đạt được kết quả rất tốt và có thể áp dụng cho nhiều tác vụ khác nhau trong robot học.
Các thuật toán sử dụng trong bài báo cáo
Trong dự án này, chúng tôi áp dụng thuật toán Q-learning để huấn luyện mô hình trí tuệ nhân tạo chơi game rắn Q-learning là một thuật toán học tăng cường đơn giản, giúp mô hình của chúng tôi cải thiện khả năng chơi game.
Chúng ta sử dụng các thư viện Python như PyTorch và Pygame để đào tạo và hiển thị trò chơi PyTorch, một thư viện học máy mã nguồn mở do Facebook phát triển, cho phép tạo và huấn luyện các mô hình học máy Trong khi đó, Pygame là thư viện hỗ trợ phát triển trò chơi bằng Python.
Chuẩn bị
Để huấn luyện AI chơi trò chơi Rắn bằng thuật toán học tăng cường, việc chuẩn bị dữ liệu phù hợp là rất quan trọng, giúp mô hình học hỏi và cải thiện hiệu suất sau mỗi vòng chơi.
Bước đầu tiên trong việc chuẩn bị dữ liệu cho mô hình là xây dựng trò chơi Rắn và ghi lại các trạng thái của nó Chúng ta sử dụng thư viện Pygame để tạo cửa sổ trò chơi và điều khiển con rắn bằng phím mũi tên Sau mỗi lần di chuyển, trạng thái của trò chơi được lưu lại, bao gồm tọa độ của con rắn, tọa độ của thức ăn và trạng thái của các ô trên bản đồ.
Sau khi thu thập dữ liệu về trạng thái trò chơi, chúng ta cần tính toán giá trị điểm số mà con rắn nhận được khi ăn thức ăn Nếu con rắn va chạm với tường hoặc tự đâm vào cơ thể mình, giá trị phần thưởng sẽ trở thành âm.
Sau khi tính toán giá trị phần thưởng, chúng ta áp dụng thuật toán Q-learning để học cách thực hiện các hành động tối ưu trong trò chơi Rắn Trong Q-learning, giá trị Q được tính cho mỗi cặp trạng thái và hành động, và giá trị này sẽ được cập nhật sau mỗi lần chơi thông qua một công thức cụ thể.
Q(s, a) là Q-value khi thực hiện action a tại state s; r(s, a) là reward nhận được; s' là state kế tiếp γ là hệ số discount, đảm bảo càng "xa" đích Q-value càng nhỏ
Quy trình
Để xây dựng mô hình học tăng cường (reinforcement learning), chúng ta cần:
+ Xây dựng môi trường game: trong bài viết này, chúng ta sử dụng Pygame để tạo ra môi trường chơi rắn.
Mô hình Q-network là một mạng nơ-ron nhân tạo được sử dụng để ước tính giá trị Q cho các hành động trong một trạng thái cụ thể Bài viết này trình bày việc sử dụng một mạng nơ-ron tuyến tính đơn giản với hai lớp tuyến tính.
Trong bài viết này, chúng ta sẽ xác định các siêu tham số, bao gồm việc giảm dần tốc độ học (learning rate) và áp dụng hàm mất mát MSE (Mean Squared Error).
+ Xác định thuật toán huấn luyện: Trong bài viết này, chúng ta sử dụng thuật toán Q-
Chúng ta áp dụng thuật toán Q-learning để huấn luyện mô hình, thông qua việc lặp lại quá trình chơi game và cập nhật giá trị Q dựa trên kinh nghiệm thu được từ các trận đấu.
Mô hình
Đây là các bước của mô hình áp dụng thuật toán tăng cường vào việc huấn luyện AI chơi rắn săn mồi:
Chuẩn bị dữ liệu đầu vào: đây là thông tin về trạng thái của trò chơi, bao gồm vị trí
Chuẩn bị đầu vào Thiết lập mô hình
Thiết lập bộ tối ưu hóa
Kiểm tra và sử dụng mô hình Huấn luyện mô hình
Thiết lập mô hình mạng nơ-ron bao gồm việc định nghĩa cấu trúc của mô hình, xác định số lượng lớp, kích thước đầu vào và đầu ra, cũng như thiết lập hệ số học tập để tối ưu hóa quá trình học.
Để mô hình có khả năng học hỏi và cải thiện sau mỗi lần chơi, việc thiết lập một bộ tối ưu hóa là rất quan trọng Bộ tối ưu hóa này bao gồm hàm mất mát và thuật toán tối ưu, giúp nâng cao hiệu suất của mô hình.
Huấn luyện mô hình là quá trình cung cấp dữ liệu đầu vào và đầu ra cho mô hình, giúp nó học cách dự đoán phản hồi tối ưu trong từng trạng thái của trò chơi.
Sau khi hoàn tất quá trình huấn luyện, mô hình có thể được sử dụng để tham gia vào trò chơi và kiểm tra kết quả Ngoài ra, mô hình cũng có thể được lưu trữ và áp dụng cho các mục đích khác.
Tính toán giá trị Q
Sau khi thu thập dữ liệu cho mô hình, bước tiếp theo là tính toán giá trị Q (Q-value) cho các hành động trong trò chơi rắn Giá trị Q được xác định thông qua công thức Bellman, một công thức then chốt trong lý thuyết học tăng cường.
Giá trị Q cho một trạng thái và hành động được tính bằng tổng phần thưởng hiện tại và giá trị tối đa của Q cho trạng thái tiếp theo, điều chỉnh bởi hệ số chiết khấu γ Để tính toán giá trị Q, bảng Q cần được cập nhật sau mỗi lượt chơi, giúp AI học cách thực hiện các hành động tối ưu Thuật toán Q-learning được sử dụng để thực hiện tính toán này, với bảng Q lưu trữ giá trị cho từng trạng thái và hành động Mỗi lần AI chơi game, bảng Q được cập nhật theo công thức Bellman.
AI được đào tạo lại trên các dữ liệu mới để cải thiện khả năng chơi của nó.
Tóm lại, tính toán giá trị Q là một bước quan trọng trong việc xây dựng mô hình dạy
AI chơi game rắn sử dụng thuật toán tăng cường thông qua PyTorch và Pygame Việc tính toán giá trị Q cho phép AI học cách thực hiện các hành động tối ưu trong từng trạng thái, từ đó nâng cao khả năng chơi game của nó.
Lựa chọn hành động tối ưu
Sau khi thu thập dữ liệu cho mô hình, bước tiếp theo là tính toán giá trị Q (Q-value) cho các hành động trong game rắn Giá trị Q được xác định thông qua công thức Bellman, một công thức then chốt trong lý thuyết học tăng cường.
Giá trị Q cho một trạng thái và hành động được xác định bằng tổng giá trị phần thưởng hiện tại và giá trị tối đa của Q cho trạng thái tiếp theo, với sự điều chỉnh của hệ số chiết khấu γ Để tính toán giá trị Q cho từng trạng thái và hành động, việc cập nhật bảng là cần thiết.
Trong quá trình đào tạo AI, giá trị Q được sử dụng để cập nhật bảng Q, giúp AI học cách đưa ra các hành động tối ưu trong từng trạng thái Để tính toán giá trị Q, chúng ta áp dụng thuật toán Q-learning, sử dụng bảng Q để lưu trữ giá trị cho từng trạng thái và hành động Mỗi lần AI chơi game, bảng Q được cập nhật theo công thức Bellman sau mỗi lượt chơi.
AI được đào tạo lại trên các dữ liệu mới để cải thiện khả năng chơi của nó.
Tóm lại, tính toán giá trị Q là một bước quan trọng trong việc xây dựng mô hình dạy
AI chơi game rắn sử dụng thuật toán tăng cường thông qua PyTorch và Pygame Việc tính toán giá trị Q cho phép AI học cách thực hiện các hành động tối ưu trong từng trạng thái, từ đó nâng cao khả năng chơi game của nó.
Huấn luyện và cập nhật mô hình
Đầu tiên, chúng ta cần thiết lập trạng thái ban đầu của trò chơi Tiếp theo, mô hình sẽ lựa chọn một hành động dựa trên chiến lược đã được học từ quá trình tính toán giá trị.
Q Hành động này được thực hiện và trò chơi sẽ trả về trạng thái mới và điểm thưởng tương ứng.
Mô hình sẽ tính toán lại giá trị Q cho trạng thái cũ và hành động đã thực hiện theo công thức Q-learning Giá trị Q mới được cập nhật vào bộ nhớ dài hạn, giúp mô hình học cách ưu tiên các hành động dẫn đến trạng thái tốt hơn và đạt điểm số cao hơn.
Tiếp tục lặp lại quá trình huấn luyện cho đến khi trò chơi kết thúc hoặc đạt đủ số lần lặp cần thiết Qua quá trình này, mô hình sẽ cải thiện khả năng chơi rắn và đạt được điểm số cao hơn.
Sau khi hoàn tất quá trình huấn luyện, chúng ta có thể lưu trữ mô hình để sử dụng trong tương lai hoặc áp dụng cho các trò chơi khác Ngoài ra, việc điều chỉnh các tham số của mô hình cũng giúp nâng cao hiệu suất hoạt động.
Thiết lập môi trường game Snake
Để thiết lập môi trường game Snake, trước tiên cần cài đặt thư viện Pygame Tiếp theo, chúng ta sẽ tạo một class SnakeGame, trong đó bao gồm các phương thức để di chuyển con rắn, tạo thức ăn, và kiểm tra va chạm với tường hoặc chính mình.
Lớp này sẽ bao gồm phương thức để truy xuất trạng thái hiện tại của môi trường game và xử lý hành động được chọn bởi mô hình học máy Cuối cùng, chúng ta sẽ xây dựng một hàm main để khởi động trò chơi Snake và hiển thị kết quả.
- Nhập thư viện cần thiết
+ pygame: thư viện hỗ trợ tạo game trên Python.
+ random: thư viện sinh số ngẫu nhiên.
Enum là một lớp liệt kê giúp định nghĩa các hằng số có thể sử dụng trong chương trình Trong khi đó, namedtuple là một lớp cho phép tạo ra kiểu dữ liệu mới tương tự như tuple, nhưng cho phép truy cập các thuộc tính bằng tên, giúp tạo ra các bản ghi nhỏ gọn, dễ đọc và dễ sử dụng.
+ numpy: thư viện tính toán khoa học trên Python.
- Khởi tạo màng hình chơi: def init (self, wd0, hH0): self.w = w self.h = h
# khởi tạo hiển thị self.display = pygame.display.set_mode((self.w, self.h)) pygame.display.set_caption('Snake')
Hàm init () được sử dụng để khởi tạo các thuộc tính quan trọng của trò chơi, bao gồm chiều rộng và chiều cao của màn hình, điểm số, mảng con rắn, thức ăn và đồng hồ.
- Bắt đầu trạng thái trò chơi def reset(self):
# bắt đầu trạng thái trò chơi self.direction = Direction.RIGHT self.head = Point(self.w/2, self.h/2) self.snake = [self.head,
Point(self.head.x-BLOCK_SIZE, self.head.y),
The `reset()` function is utilized to restart the game, resetting the initial values of variables such as the score, snake direction, snake position, and food placement.
The method `def _place_food(self)` generates random coordinates for food placement within the game area It calculates the x and y positions by using random integers, ensuring they align with the grid defined by `BLOCK_SIZE` After determining the food's location, it checks if the food overlaps with the snake's position If there is an overlap, the method recursively calls itself to find a new position for the food.
Hàm _place_food() được sử dụng để tạo ra thức ăn mới cho rắn bằng cách sinh ngẫu nhiên tọa độ x, y Nếu thức ăn được đặt trùng với vị trí đã có trong đường đi của rắn, hàm sẽ tự động gọi lại chính nó để tìm vị trí khác cho thức ăn.
- Bước chơi của trò chơi rắn def play_step(self, action): self.frame_iteration += 1
# 1 thu thập đầu vào của người dùng for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit()
The function `self._move(action)` updates the position of the snake by inserting the new head at the beginning of the list If a collision is detected or the frame iteration exceeds 100 times the length of the snake, the game ends, resulting in a reward of -10 The function then returns the reward, game status, and current score.
# 4 đặt thức ăn mới hoặc chỉ cần di chuyển if self.head == self.food: self.score += 1 reward = 10 self._place_food() else: self.snake.pop()
# 5 cập nhật giao diện người dùng và đồng hồ self._update_ui() self.clock.tick(SPEED)
Hàm play_step() được sử dụng để thực hiện một lượt chơi trong trò chơi, dựa trên hành động do mô hình trí tuệ nhân tạo đưa ra Hàm này di chuyển rắn, đặt lại thức ăn khi cần thiết, và trả về giá trị thưởng, trạng thái kết thúc và điểm số.
+ Bước 1: Lấy input từ người dùng Trong trường hợp này, ta không sử dụng input từ người dùng mà sử dụng model để dự đoán hành động tiếp theo.
Bước 2: Di chuyển rắn bằng cách thay đổi thuộc tính self.direction để xác định hướng di chuyển Vị trí đầu rắn sẽ được cập nhật theo hướng này, và đầu rắn sẽ được thêm vào danh sách các điểm của rắn.
Bước 3: Kiểm tra kết thúc trò chơi khi rắn va chạm với tường hoặc thân của nó Chúng ta cũng giới hạn số bước đi tối đa của rắn (độ dài của rắn nhân 100) Nếu trò chơi kết thúc, trả về reward là -10 và game_over là True.
Nếu đầu rắn ăn được thức ăn, ta tăng điểm lên 1, đặt lại vị trí của thức ăn và trả về reward là 10 Ngược lại, nếu không ăn được, ta sẽ loại bỏ phần đuôi của rắn.
+ Bước 5: Cập nhật giao diện người dùng và đồng hồ.
+ Bước 6: Trả về reward, game_over và số điểm của người chơi.
- Va chạm if pt.x > self.w - BLOCK_SIZE or pt.x < 0 or pt.y > self.h - BLOCK_SIZE or pt.y < 0: return True
Hàm `is_collision()` được sử dụng để kiểm tra xem rắn đã va chạm với tường hoặc chính nó hay chưa Nếu phần đầu của rắn chạm vào bất kỳ phần nào của cơ thể rắn (ngoại trừ phần đầu), hàm sẽ trả về giá trị True.
The method `_update_ui` is responsible for refreshing the game interface by filling the display with a black background It iterates through the snake's segments, drawing each segment in blue, with a smaller blue rectangle inside for detail The food is represented by a red rectangle, and the current score is displayed in white text at the top left corner of the screen Finally, the updated display is rendered with `pygame.display.flip()`.
_update_ui() : Hàm này được sử dụng để cập nhật giao diện người dùng (hiển thị các đối tượng trên màn hình) và điểm số.
- Cài đặt hướng di chuyển cho rắn def _move(self, action):
The code snippet defines a directional movement system using a clockwise array of directions: right, down, left, and up It determines the current direction's index and updates the direction based on the provided action If the action indicates no change, the direction remains the same If the action signals a right turn, the index is incremented, cycling through the directions Conversely, a left turn decrements the index The new direction is then applied to update the head's position, adjusting the x or y coordinates based on the current direction.
Khởi tạo mô hình Neural Network và thuật toán Q-learning
Mô hình này được phát triển dựa trên lớp kế thừa từ nn.Module, bao gồm hai lớp tuyến tính (Linear) với kích thước của các lớp được xác định bởi input_size, hidden_size và output_size.
Hàm forward trong mô hình được sử dụng để thực hiện quá trình truyền tiến dữ liệu qua các lớp và cung cấp đầu ra Lớp đầu tiên áp dụng hàm kích hoạt ReLU để tính toán giá trị đầu ra, sau đó chuyển tiếp đến lớp thứ hai Lớp thứ hai sẽ tính toán giá trị đầu ra cuối cùng của mô hình.
The model includes a save function that stores its weights in a file named "model.pth" This function utilizes the os module to check for the existence of a "model" directory and creates it if it does not exist The class Linear_QNet, which inherits from nn.Module, defines a forward method that applies a ReLU activation function to the output of the first linear layer before passing it to the second linear layer The save method constructs the file path and saves the model's state dictionary using torch.save.
Huấn luyện mô hình
Class QTrainer được sử dụng để huấn luyện mô hình học tăng cường, nhằm xác định các hành động tối ưu trong từng tình huống Để khởi tạo QTrainer, cần chỉ định các tham số như mô hình học tăng cường, tỷ lệ học (lr) và hệ số chiết khấu (gamma).
Phương thức train_step() thực hiện một bước huấn luyện trong học tăng cường, trong đó các trạng thái, hành động, phần thưởng, trạng thái tiếp theo và trạng thái kết thúc được chuyển đổi sang định dạng tensor của PyTorch trước khi bắt đầu.
Bước đầu tiên trong quá trình tính toán là xác định giá trị Q dự đoán của mô hình dựa trên trạng thái hiện tại Tiếp theo, chúng ta tạo một tensor target với giá trị sao chép từ pred ban đầu Đối với mỗi trạng thái tiếp theo, giá trị Q mới được tính toán bằng công thức \$Q_{new} = r + y \cdot \max(\text{next predicted Q value})\$ nếu trạng thái tiếp theo không phải là trạng thái kết thúc, trong đó \$r\$ là phần thưởng và \$y\$ là hệ số chiết khấu Cuối cùng, các giá trị này được gán vào tensor target.
To calculate the error, we utilize the MSELoss function from PyTorch, comparing the predicted values with the target values We then apply the backpropagation algorithm to compute the derivatives of the loss function with respect to the model parameters Finally, we employ the Adam optimizer to update the model parameters, advancing to the next stage of the training process The QTrainer class initializes with the model, learning rate, and gamma, setting up the optimizer and loss criterion The train_step method processes the state, action, reward, and next state, converting them into tensors for training.
# (1, x) state = torch.unsqueeze(state, 0) next_state = torch.unsqueeze(next_state, 0) action = torch.unsqueeze(action, 0) reward = torch.unsqueeze(reward, 0) done = (done, )
# 1: giá trị Q dự đoán với trạng thái hiện tại pred = self.model(state) target = pred.clone() for idx in range(len(done)):
Q_new = reward[idx] if not done[idx]:
Q_new = reward[idx] + self.gamma * torch.max(self.model(next_state[idx])) target[idx][torch.argmax(action[idx]).item()] = Q_new
# 2: Q_new = r + y * max(next_predicted Q value) -> chỉ làm điều này nếu không được thực hiện # pred.clone()
# preds[argmax(action)] = Q_new self.optimizer.zero_grad() loss = self.criterion(target, pred) loss.backward() self.optimizer.step()
Kiểm tra và đánh giá mô hình
The code snippet utilizes Matplotlib to visualize training progress by plotting scores and mean scores over the number of games played It sets the title and labels for the axes, ensuring the y-axis starts at zero The final scores are annotated on the graph for clarity, and the plot is displayed with a brief pause to enhance the viewing experience.
Hàm plot được sử dụng để vẽ biểu đồ điểm số của các ván chơi trong quá trình huấn luyện và biểu đồ điểm số trung bình.
Hàm này nhận hai đối số: scores, chứa điểm số của các ván chơi, và mean_scores, lưu trữ giá trị trung bình của điểm số trong một số ván chơi gần đây.
Hàm plot sẽ xóa hiển thị hiện tại và vẽ một biểu đồ mới với trục x là số lần chơi và trục y là điểm số Biểu đồ này bao gồm hai đường: đường màu xanh lá cây thể hiện điểm số của từng ván chơi và đường màu cam thể hiện giá trị trung bình của điểm số trong các ván chơi gần đây.
Hàm plot sẽ hiển thị điểm số của ván chơi hiện tại cùng với điểm số trung bình ở cuối đồ thị Sau đó, hàm tiếp tục cập nhật đồ thị mới nhất mà không làm chặn trình duyệt, đồng thời tạm dừng chương trình trong 0,1 giây để tránh việc hiển thị đồ thị quá nhanh.
Kết luận
Trong bài tiểu luận này, chúng tôi đã trình bày việc áp dụng học tăng cường để giúp một con rắn chơi trò chơi săn mồi thông minh, từ đó làm rõ các khái niệm cơ bản và cách thức hoạt động của học tăng cường Chúng tôi đã giải thích quy trình thiết kế môi trường, tạo dữ liệu huấn luyện và xây dựng mô hình học tăng cường bằng PyTorch và Pygame Ngoài ra, bài viết cũng đề cập đến một số kỹ thuật học tăng cường khác nhau, như giải thuật Q-learning và Deep Q-Network (DQN).
Học tăng cường ngày càng được áp dụng rộng rãi trong thực tiễn, mang lại hiệu quả cao trong việc giải quyết các bài toán tối ưu hóa và ra quyết định trong môi trường động và không chắc chắn Sự phát triển của trí tuệ nhân tạo đã thúc đẩy việc ứng dụng học tăng cường trong nhiều lĩnh vực, bao gồm công nghiệp, y tế, giáo dục, tài chính và nhiều lĩnh vực khác.
Hướng phát triển
Chúng em nghĩ ra một số hướng phát triển đơn giản như là:
+ Tăng cường tính tương tác của con rắn với môi trường: Để tăng khả năng chơi game