Trong báo cáo này, nhóm tập trung xây dựng một mô hình Học máy tăng cường và sử dụng nó để huấn luyện, tạo ra một mô hình giúp điều khiển xe đua Deepracer có thể hoạt động trên đường đua
Trang 1KHOA CƠ HỌC KĨ THUẬT VÀ TỰ ĐỘNG HÓA
CÔNG TRÌNH THAM DỰ HỘI NGHỊ SINH VIÊN NGHIÊN CỨU KHOA HỌC CẤP KHOA
NĂM HỌC 2022 – 2023
Tên công trình: XÂY DỰNG BỘ THƯ VIỆN CHO XE ĐIỆN ĐUA TỰ
HÀNH AWS DEEPRACER
Họ và tên sinh viên:
Hồ Mạnh Tiến – Nam - Lớp K65AT - Khoa CHKT&TĐH
Nguyễn Văn Sơn – Nam - Lớp K65AT - Khoa CHKT&TĐH
Trần Mạnh Trường - Nam - Lớp K65AT - Khoa CHKT&TĐH
Nông Minh Phúc - Nam - Lớp K65AT - Khoa CHKT&TĐH
Nguyễn Quốc Trưởng - Nam - Lớp K65AT - Khoa CHKT&TĐH Giảng viên hướng dẫn: TS Seung Chul Jung, TS Đỗ Nam
Trang 2MỤC LỤC
1 2
2 4
2.1 Xây dựng mô hình cho xe đua AWS Deepracer 2 2.2 Huấn luyện mô hình cho xe đua AWS Deepracer 5
3 16
Trang 31 Đặt vấn đề
Ngày nay, công nghệ Trí tuệ nhân tạo AI, Học sâu Deep Learning hay Học máy Machine Learning là những từ khóa đang ngày càng phổ biến rộng rãi Ứng dụng của chúng xuất hiện và giúp ích trong rất nhiều lĩnh vực của đời sống con người như kinh tế, thương mại, nghiên cứu hay y tế, v.v Trong bối cảnh đó, Amazon đã phát triển chiếc xe tự hành điều khiển AWS Deepracer, một công cụ giúp cho việc làm quen với công nghệ Học máy một cách thú vị và dễ tiếp thu
AWS Deepracer là loại xe đua tự lái với tỉ lệ 1/18 có thể được đào tạo bằng công nghệ Học máy tăng cường Reinforcement Learning Chiếc xe được cung cấp trình mô phỏng để xây dựng các mô hình trong Amazon SageMaker, một dịch vụ được quản lý toàn phần cho phép các nhà phát triển xây dựng, đào tạo và triển khai các mô hình Machine Learning Việc các công cụ online và mô hình xe được xây dựng sẵn giúp người dùng dễ dàng làm quen và triển khai các mô hình mà mình mong muốn
Hình 1 Hình ảnh của xe AWS Deepracer
AWS Deepracer bao gồm các bộ phận như Hình 2:
1. Khung ô tô (bao gồm các modul máy tính và camera)
2. Vỏ bảo vệ
3. Ắc quy động cơ
4. Sạc ắc quy động cơ
5. Bộ đổi nguồn ắc quy động cơ
6. Pin (cung cấp nguồn cho các module máy tính)
7. Cáp kết nối của cục sạc dự phòng
8. Bộ đổi nguồn và dây nguồn
Trang 49. Các chốt cố định xe
10 Các chốt dự phòng
11 Cáp USB-A sang micro USB
Hình 2 Các bộ phận vật lý của xe đua Deepracer
Cấu hình chi tiết của xe đua AWS Deepracer được thể hiện như Hình 3
Hình 3 Cấu hình chi tiết của xe đua AWS Deepracer Trong bảng điều khiển các mô hình có thể được đào tạo và điều khiển bằng xe và đường đua ảo Amazon Web Services (AWS) quản lý toàn bộ cơ sở hạ tầng, bao gồm đào tạo mô hình và ảo hóa các mạch đua, với bảng điều khiển AWS Nó cũng tạo ra một giải đấu ảo cho mọi người có thể tham gia thi đấu với nhau trên mô phỏng
Trang 5AWS DeepRacer đi cùng với một môi trường đám mây được cấu hình sẵn để đào tạo các model Reinforcement Learning Nó được sử dụng chức năng Reinforcement Learning mới của Amazon, cũng như môi trường mô phỏng 3D do AWS RoboMaker điều khiển Mọi người có thể đào tạo một mô hình lái xe tự động trên nhiều đường đua được xây dựng sẵn
từ trước trong trình mô phỏng Sau đó, đánh giá kỹ thuật số hoặc tải xuống xe AWS DeepRacer và thử nghiệm trong thế giới thực
Trong báo cáo này, nhóm tập trung xây dựng một mô hình Học máy tăng cường và sử dụng
nó để huấn luyện, tạo ra một mô hình giúp điều khiển xe đua Deepracer có thể hoạt động trên đường đua AWS re:Invent 2018 như Hình 4
Hình 4 Sơ đồ đường đua được sử dụng để huấn luyện mô hình và đua thực tế
2 Giải quyết vấn đề
2.1 Xây dựng mô hình cho xe đua AWS Deepracer
Đối với một mô hình học máy tăng cường, việc xây dựng một hàm phần thưởng (reward function) là cần thiết và cốt lõi của chương trình Một hàm phần thưởng sẽ có vai trò giúp đối tượng cần được điều khiển học được điều gì cần phải thực hiện để tối đa điểm thưởng
và điều gì cần phải tránh thực hiện để không bị trừ điểm thưởng của mình Bằng cách lặp
đi lặp lại quá trình trên, đối tượng điều khiển dần học được cách phản ứng tối ưu trong các tình huống thực tế để tối đa hóa điểm phần thưởng của mình
Để tiến hành thực việc xây dựng và huấn luyện mô hình cho xe Deepracer của mình, người lập trình được cung cấp các tham số biểu diễn trạng thái của xe trong môi trường mô phỏng được trả về như Bảng 1 Các tham số dưới đây mang ý nghĩa biểu diễn trạng thái của xe
Trang 6Deepracer trong môi trường mô phỏng; từ đó, có thể xây dựng các hàm phần thưởng dựa trên trạng thái của xe trong từng thời điểm, nhằm tối ưu hóa hành vi của xe trên đường đua Bảng 1 Các tham số được trả về bởi Deepracer
Tham số Kiểu dữ liệu Ý nghĩa
"all_wheels_on_track" boolean Biểu thị xe vẫn đang trên đường đua
"x" float Tọa độ X của xe theo đơn vị mét
"y" float Tọa độ Y của xe theo đơn vị mét
"closest_objects" [int, int] Chỉ vị trí của 2 đối tượng gần xe nhất
"closest_waypoints" [int, int] Chỉ 2 tọa độ đường đua gần nhất
"distance_from_center" float Khoảng cách từ xe tới vạch giữa đường đua
theo đơn vị mét
"is_crashed" boolean Biểu thị xe đã bị va chạm hay chưa
"is_left_of_center" boolean Biểu thị xe trạng thái nằm bên trái so với vạch giữa đường đua
"is_offtrack" boolean Biểu thị xe đã ra khỏi đường đua
"is_reversed" boolean Biểu thị xe đã đi thuận hay ngược chiều kim đồng hồ
"heading" float Góc quay của trục dọc xe
"objects_distance" [float, ] Danh sách khoảng cách của các đối tượng trước mặt
"objects_heading" [float, ] Danh sách góc quay của các đối tượng trước mặt
"objects_left_of_center" [boolean, ]
Danh sách biểu thị trạng thái nằm bên trái vạch giữa đường đua của các đối tượng trước mặt
"objects_location" [(float, float), ] Danh sách tọa độ của các đối tượng trước mặt
"objects_speed" [float, ] Danh sách tốc độ của các đối tượng trước mặt
"progress" float Phần trăm hoàn thành đường đua
Trang 7"speed" float Tốc độ của xe (m/s)
"steering_angle" float Góc rẽ bánh của xe (độ)
"steps" int Số bước hoàn thành
"track_length" float Chiều dài của đường đua
"track_width" float Chiều rộng của đường đua
"waypoints" [(float, float), ] Danh sách các điểm mốc trên đường đua
Các tham số trên đều được sử dụng để hỗ trợ hoặc tham gia tính toán trực tiếp trong việc tính toán ở hàm phần thưởng đối với môi trường mô phỏng, các mô hình được xây dựng
để sử dụng trong học tập và thi đấu trên nền tảng mô phỏng có thể sử dụng tất cả các tham
số trạng thái trên mà không gặp vấn đề gì; tuy nhiên, một trong số các tham số được nêu trên lại không thể trích xuất trong điều kiện môi trường thực tế như tọa độ của các xe, phần trăm hoàn thành đường đua, v.v Vì vậy, trong việc xây dựng một mô hình có thể hoạt động tốt ở thế giới thực, nhóm sử dụng các tham số có thể đo lường và trả về được bởi xe mô hình xe AWS Deepracer vật lý như tốc độ xe, góc rẽ bánh và các trạng thái có thể trích xuất qua camera gắn trên xe
Đã có nhiều các phương pháp phát triển hàm phần thưởng (reward function) cho mô hình học tăng cường áp dụng trong xe AWS Deepracer dựa trên các cơ chế khác nhau và thu được những kết quả tốt, có thể kể đến như phương pháp bám đường giữa của đường đua, phương pháp bám đường giữa của đường đua khử zig-zag, phương pháp di chuyển giữ cho
xe ở trong đường đua, v.v Mỗi phương pháp đều có các thuộc tính về hiệu quả khác nhau
về tốc độ cũng như độ ổn định khi vận hành Từ ý tưởng muốn kết hợp các phương pháp này lại với nhau và khắc phục những vấn đề mà xe gặp phải khi vận hành ở thế giới thực
ở nhiều các mô hình trước, nhóm bắt đầu xây dựng một hàm phần thưởng cho mô hình học tăng cường gồm sự kết hợp của các phương pháp vận hành nhằm tối ưu tốc độ của xe, giúp giảm thời gian hoàn thành vòng đua trong các cuộc thi tính giờ (time-trial)
Điểm thưởng chính của xe khi hoạt động sẽ được thay đổi lần lượt thông qua một chuỗi các hàm phần thưởng con được thể hiện thứ tự như Hình 3
Trang 8Hình 5 Điểm thưởng chính của xe được tính toán thông qua
các hàm phần thưởng con Chương trình chính của mô hình được xây dựng chi tiết như sau
Khai báo các hằng số đầu vào:
INITIAL_REWARD = 1.0
MIN_REWARD = 0.001
DIRECTION_THRESHOLD = 10.0
ABS_STEERING_THRESHOLD = 30
Gán các tham số đầu vào mà mô hình cần sử dụng như trong Bảng 1:
# Các thông số đầu vào
on_track = params ['all_wheels_on_track']
distance_from_center = params ['distance_from_center']
keep_left = params ['is_left_of_center']
track_width = params ['track_width']
steering = abs ( params ['steering_angle']) # Chỉ cần góc lái tuyệt đối để tính toán
speed = params ['speed']
waypoints = params ['waypoints']
closest_waypoints = params ['closest_waypoints']
heading = params ['heading']
Xét hàm phần thưởng được khởi tạo ban đầu bằng:
reward = math exp (-6 * distance_from_center )
Trang 9Sau đó, ta xây dựng các hàm phần thưởng con được tính toán dựa trên định nghĩa:
●“on_track_reward()”: phần thưởng cho việc xe vẫn đang nằm trên đường đua, điểm thưởng sẽ bị đặt lại nếu xe chạy ra khỏi đường đua
def on_track_reward ( current_reward , on_track ):
if not on_track :
current_reward = MIN_REWARD
else:
current_reward = INITIAL_REWARD
return current_reward
●“distance_from_center_reward()”: phần thưởng cho khoảng cách giữa xe và vạch giữa đường đua, xe ở càng gần điểm thưởng càng cao
def distance_from_center_reward ( current_reward , track_width , distance_from_center ):
# Tính toán 4 điểm xa dần từ center line
marker_1 = 0.1 * track_width
marker_2 = 0.25 * track_width
marker_3 = 0.5 * track_width
# Thưởng càng cao nếu xe càng gần vạch giữa và ngược lại
if distance_from_center <= marker_1 :
current_reward *= 1.2
elif distance_from_center <= marker_2 :
current_reward *= 0.8
elif distance_from_center <= marker_3 :
current_reward *= 0.5
● “straight_line_reward()”: phần thưởng cho việc xe đi thẳng với tốc độ nhanh, giúp mô hình học được cách tăng tốc ở các đoạn đường thẳng
def straight_line_reward ( current_reward , steering , speed ):
#Tăng thưởng nếu xe đi thẳng với tốc độ nhanh
if abs ( steering ) < 0.1 and speed > 6
current_reward *= 1.5
elif abs ( steering ) < 0.2 and speed > 5
Trang 10current_reward *= 1.2
return current_reward
●“direction_reward()”: phần thưởng cho góc lệch giữa xe và đường đua, nếu lệch càng nhiều thì điểm bị trừ càng lớn
def direction_reward ( current_reward , waypoints , closest_waypoints , heading ):
'''
Tính toán hướng của đường trung tâm dựa trên các điểm tham chiếu gần nhất
'''
next_point = waypoints [ closest_waypoints [1]]
prev_point = waypoints [ closest_waypoints [0]]
# Tính hướng theo bán kính, arctan2(dy, dx), kết quả là (-pi, pi) theo radian
direction = math atan2 ( next_point [1] - prev_point [1], next_point [0] - prev_point [0])
# Chuyển sang độ
direction = math degrees ( direction )
# Tính toán sự khác biệt giữa hướng của đường đua và góc nghiêng của ô tô
direction_diff = abs ( direction - heading )
# Giảm thường khi góc chênh lệch quá lớn
if direction_diff > DIRECTION_THRESHOLD:
current_reward *= 0.75
return current_reward
●“steering_reward()”: phần thưởng cho việc xe rẽ bánh, bị trừ điểm nếu xe rẽ lái liên tục, hàm này giúp xe loại bỏ được hành vi rẽ bánh zig-zag liên tục
def steering_reward ( current_reward , steering ):
# Giảm thưởng nếu xe lái quá nhiều
if abs ( steering ) > ABS_STEERING_THRESHOLD:
current_reward *= 0.9
return current_reward
●“throttle_reward()”: hàm giúp mô hình học được cách đi chậm khi rẽ lái, giúp
xe không bị lật do chạy nhanh ở các đường cua
Trang 11
def throttle_reward ( current_reward , speed , steering ):
# Giảm ga khi đánh lái
if speed > 3.0 - (0.4 * abs ( steering )):
current_reward *= 0.8
return current_reward
●“speed_reward()”: phần thưởng khi xe chạy nhanh, chạy càng chậm thì thưởng càng ít
def speed_reward ( current_reward , progress ):
if speed < 4
current_reward *= 0.75
elif speed > 6
current_reward *= 1.25
return current_reward
Cuối cùng là tính toán tổng hợp lại các phần thưởng:
reward = on_track_reward ( reward , on_track )
reward = distance_from_center_reward ( reward , track_width , distance_from_center )
reward = straight_line_reward ( reward , steering , speed )
reward = direction_reward ( reward , waypoints , closest_waypoints , heading )
reward = steering_reward ( reward , steering )
reward = throttle_reward ( reward , speed , steering )
reward = speed_reward ( reward , speed )
Thông qua sự kết hợp giữa nhiều phương pháp tính hàm phần thưởng dựa trên các trạng thái vận hành cũng như các lỗi mà xe gặp phải, mô hình được kỳ vọng sẽ giúp cho xe khắc phục được các vấn đề mà nó gặp phải khi vận hành trên mô hình vật lý thực tế
2.2 Huấn luyện mô hình cho xe đua AWS Deepracer
Sau khi xây dựng được mô hình cho xe, kế đến ta cần thực hiện việc huấn luyện mô hình trên dựa trên tập dữ liệu online được cung cấp bởi Amazon Web Service thông qua môi trường mô phỏng
Thiết lập huấn luyện bao gồm việc chọn các siêu tham số - Hyperparameter Các siêu tham
số dành cho việc huấn luyện mô hình bao gồm lượng dữ liệu huấn luyện được sử dụng (số tập giữa từng khóa đào tạo Epoch - và quy mô lô - batch size), tác nhân có thể học nhanh như thế nào (tốc độ học - learning rate), phần thăm dò (entropy) Để làm cho việc đào tạo trở nên thiết thực, có thể muốn tăng tốc quá trình học tập Các biến ảnh hưởng đến quá
Trang 12trình đào tạo bao gồm tốc độ học tập - learning rate, kích thước lô - batch size, Epoch và Discount factor
Các biến ảnh hưởng đến quá trình đào tạo được gọi là siêu tham số Các siêu tham số này không phải là thuộc tính của mô hình cơ bản Và thật không may, các siêu tham số mang tính chất thực nghiệm Giá trị tối ưu của chúng không được biết cho tất cả các mục đích thực tế và yêu cầu hệ thống thí nghiệm để rút ra
Ở mục này, ta đi tìm hiểu về các siêu tham số - hyperparameter:
● Batch size: là một siêu tham số quy định số lượng của mẫu (sample) được sử dụng trong mỗi lần trước khi nâng cấp các tham số của mô hình Ví dụ dữ liệu đào tạo có
200 mẫu, batch size là 10, thì sẽ có 20 lần mô hình cập nhật lại các tham số Khi sử dụng batch size lớn sẽ giúp các bản cập nhật tham số ổn định và mượt mà hơn cho mạng neuron, nhưng quá trình đào tạo có thể chậm hơn
● Epoch: là số lần thuật toán học qua toàn bộ dữ liệu đào tạo Ví dụ dữ liệu đào tạo trên có số Epoch là 5, mô hình sẽ lặp lại quá trình đào tạo với bộ dữ liệu đúng 5 lần Khi số lượng epoch càng lớn đồng nghĩa với việc có nhiều cập nhật ổn định hơn cho
mô hình, nhưng cũng làm cho quá trình đào tạo lâu hơn
● Learning rate: (mức độ học) kiểm soát độ lớn của các bản cập nhật đối với mạng neuron Mức độ học tập lớn sẽ dẫn đến việc đào tạo nhanh hơn nhưng sẽ dẫn đến khó khăn tới sự hội tụ (convergence) Mức độ học nhỏ dẫn đến sự hội tụ ổn định nhưng sẽ mất nhiều thời gian hơn
● Exploration: là phương pháp được sử dụng để xác định khi nào nên thăm dò (exploration – lựa chọn ngẫu nhiên) hay khi nào nên khai thác (exploitation – sử dụng kinh nghiệm đã tích lũy được)
● Entropy: là mức độ không chắc chắn, hoặc tính ngẫu nhiên được thêm vào phân phối xác suất của không gian hành động (action space) Điều này giúp thúc đẩy việc lựa chọn các hành động ngẫu nhiên để khám phá không gian trạng thái hành động rộng hơn
● Discount factor: Một yếu tố xác định bao nhiêu phần thưởng trong tương lai đóng góp vào phần thưởng dự kiến Giá trị Discount factor càng lớn, phương tiện xem xét
để thực hiện một động thái càng xa và đào tạo càng chậm Với Discount factor là 0.9, phương tiện bao gồm phần thưởng từ đơn đặt hàng 10 bước trong tương lai để
di chuyển Với Discount factor là 0,999, chiếc xe xem xét phần thưởng từ một đơn đặt hàng 1000 bước trong tương lai để thực hiện một động thái Nhóm chọn giá trị discount facto88r là 0.88
● Loss type: Loại hàm mục tiêu được sử dụng để cập nhật trọng số mạng Một đào tạo tốt thuật toán sẽ thực hiện các thay đổi gia tăng đối với chiến lược của tác nhân
để nó dần dần chuyển từ thực hiện các hành động ngẫu nhiên sang thực hiện các hành động chiến lược để tăng phần thưởng Nhưng nếu nó tạo ra một sự thay đổi