1. Trang chủ
  2. » Luận Văn - Báo Cáo

công trình xây dựng bộ thư viện cho xe điện đua tự hành aws deepracer

18 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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 1

KHOA CƠ HỌC KĨ THUẬT VÀ TỰ ĐỘNG HÓA

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 2

MỤ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 3

1 Đặ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 4

9. 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 5

AWS 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 6

Deepracer 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 8

Hì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 9

Sau đó, 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

●“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

● “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 10

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)):

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 12

trì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

Trang 13

quá lớn thì việc đào tạo sẽ trở nên không ổn định và agent kết thúc không học Huber loss và Mean squared error loss hoạt động tương tự đối với các bản cập nhật nhỏ Nhưng khi các bản cập nhật trở nên lớn hơn, Huber loss có số gia nhỏ hơn so với Mean squared error loss Khi bạn có vấn đề hội tụ, sử dụng loại Huber loss Khi hội tụ tốt và bạn muốn luyện nhanh hơn thì dùng loại Mean squared error loss

● Số lượng của các espisode mỗi lần đào tạo: Kích thước của bộ đệm trải nghiệm được sử dụng để lấy dữ liệu đào tạo từ chính sách học tập trọng số mạng Một giai đoạn trải nghiệm (espisode) là một khoảng thời gian trong đó tác nhân bắt đầu từ một điểm xuất phát nhất định và kết thúc là hoàn thành đường đua hoặc đi chệch đường đua Nó bao gồm một chuỗi các kinh nghiệm Các tập khác nhau có thể có độ dài khác nhau Đối với các vấn đề học tăng cường đơn giản, một bộ đệm kinh nghiệm nhỏ có thể được đầy đủ và học tập là nhanh chóng Đối với các vấn đề phức tạp hơn có nhiều địa phương hơn cực đại, bộ đệm trải nghiệm lớn hơn là cần thiết để cung cấp nhiều dữ liệu không tương quan hơn điểm Trong trường hợp này, đào tạo chậm hơn nhưng ổn định hơn

Hình 4 Bảng các siêu tham số Hyperparameter cho huấn luyện mô hình

Sau khi bắt đầu thực hiện đào tạo mô hình với các thông số ở trên, một mục “Reward graph” cho phép kiểm tra các số liệu đào tạo về phần thưởng và cho phép theo dõi mức độ hoàn thành đường đua trong mỗi trải nghiệm (espisode) để xác định hiệu suất đào tạo mô hình đang được huấn luyện Trong bảng điều khiển AWS DeepRacer, Reward graph được hiển thị như dưới Hình 4

Ngày đăng: 20/04/2024, 00:04

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w