Xin chào và chào mừng bạn đến với hướng dẫn Python này.
Vì vậy, chúng ta hãy làm điều này.
Hãy tạo vòng lặp for này, bắt đầu từ bên phải và sang bên trái.
Và để làm điều này, chúng tôi sẽ thêm bốn.
Vì vậy, lần này, biến được lặp lại sẽ là bước của chúng ta bởi vì chúng ta sẽ đi từ bước
cuối cùng đến bước đầu tiên của chuỗi chuyển đổi và tiếp tục là bước.
Và bây giờ mẹo để đi từ bên phải sang bên trái là sử dụng bốn bước vào, đảo ngược, đảo ngược.
Và bây giờ chúng ta chỉ cần nhập một chuỗi.
Và chuỗi này tất nhiên sẽ là chuỗi của chúng ta.
Vì vậy, chúng tôi nhập chuỗi của chúng tôi.
Nhưng như bạn có thể thấy trong bài báo, chúng ta đi từ T trừ một đến T bắt đầu.
Vì vậy, chúng tôi không đi từ bước cuối cùng, cuối cùng.
Đó là trạng thái đầu cuối, nhưng trạng thái trước đó, đó là t trừ đi một.
Nhưng hai để bắt đầu đó là bước đầu tiên.
Và vì vậy ở đây để đi từ không phải trạng thái cuối cùng mà là trạng thái trước đó, chúng ta cần thêm vào trong dấu ngoặc, cột
trừ đi một.
Tôi chắc rằng đối với những bạn đã theo học máy móc và khóa học học
sâu, bạn biết đấy, mẹo này, Colin, trừ đi một, có nghĩa là bạn đang đi đến phần tử trước phần tử cuối cùng, nhưng
không phải phần tử cuối cùng.
Và do đó chúng tôi nhận được trình tự chúng tôi muốn.
Đó là chúng ta sẽ đi từ phần tử trước phần tử cuối cùng cho đến phần tử đầu tiên, và chúng tôi làm những việc
để đảo ngược nó, để đi từ bên phải sang bên trái.
Được rồi.
Vì vậy, chúng tôi đã sẵn sàng để nhập vòng lặp đầy đủ.
Và bên trong vòng lặp for này, chúng ta sẽ làm gì?
Chà, chúng ta sẽ làm chính xác như trong báo cáo.
Chúng tôi sẽ cập nhật phần thưởng tích lũy bằng cách nhân nó với Gamma và thêm phần thưởng nhận được trong
bước hiện tại trong bước của vòng lặp for.
Được rồi, hãy làm điều này, quay lại Python.
Và vì vậy, trước tiên chúng tôi muốn cập nhật phần thưởng tích lũy của mình theo cách sau.
Nhân nó lên.
Tạm biệt, Gemma.
Chúng ta bắt đầu.
Ở đây chúng tôi nhân nó với Gemma.
Và sau đó chúng tôi muốn thêm phần thưởng của.
Bước mà chúng ta có thể truy cập theo cách này với cấu trúc đặc biệt.
Hãy nhớ rằng phần thưởng là một thuộc tính của đối tượng bước.
Và vì vậy, ở đây, tất nhiên, chúng tôi thêm một điểm cộng.
Được rồi.
Vì vậy, phần thưởng tích lũy tương đương với phần thưởng của bước chúng ta đang ở ngay bây giờ, vòng lặp cộng với Gamma Times, phần
thưởng tích lũy trước đó trước khi nó được cập nhật.
Hoàn hảo.
Vì vậy, bây giờ tôi nghĩ chúng tôi tốt.
Chúng tôi đang theo sát thuật toán một cách triệt để.
Và bây giờ là thời gian cho các bước tiếp theo.
Vâng, bây giờ nó sẽ trở nên khá dễ dàng.
Chúng ta quay lại vòng lặp for đầu tiên, vì vòng lặp for này chỉ để tính toán phần thưởng tích lũy biết đi từ
bên phải sang bên trái bằng cách cập nhật theo cách này, tuân theo thuật toán.
Và bây giờ, như bạn nhớ, mục tiêu của việc làm tất cả những điều này là chuẩn bị đầu vào của chúng tôi sẵn sàng và các mục tiêu của chúng tôi đã sẵn sàng
để chúng tôi có thể giảm thiểu sự khác biệt bình phương giữa hai mục tiêu cho khóa đào tạo.
Và vì vậy ngay bây giờ, điều duy nhất chúng ta phải làm là chuẩn bị sẵn sàng các đầu vào và mục tiêu này.
Vì vậy, chúng ta hãy làm điều này đầu tiên.
Những gì chúng ta cần làm là thêm trạng thái đầu tiên của chuỗi trong danh sách đầu vào của chúng tôi.
Cho đến nay, trạng thái đầu vào này nằm trong biến đầu vào này, nhưng đó chỉ là để tính toán đầu ra.
Vì vậy, chúng ta sẽ nhận được trạng thái đầu vào này của bước đầu tiên một cách riêng biệt vì đó chính xác là những gì chúng ta
cần thêm vào danh sách đầu vào của mình.
Vì vậy, chúng ta hãy nhận điều này một cách riêng biệt.
Do đó, chúng ta sẽ gọi nó là trạng thái.
Và giống hệt như ở đây.
Chúng ta có thể lấy nó theo cách này bằng cách lấy chỉ mục đầu tiên của chuỗi chứa chuyển đổi đầu tiên, sau đó thêm
trạng thái đó để có được trạng thái của chuyển đổi đầu tiên này.
Vì vậy, đó là thứ chúng ta cần sau đó cũng vậy.
Chúng tôi sẽ nhận riêng mục tiêu được liên kết với trạng thái đầu vào này của quá trình chuyển đổi đầu tiên.
Và vì vậy tôi đang giới thiệu một biến mới ở đây mục tiêu sẽ bằng giá trị Q của bước đầu tiên.
Và vì giá trị Q được trả về bởi mạng nơ-ron nên nó được chứa trong đầu ra.
Và vì đầu ra là đầu ra được liên kết với đầu vào này chứa phần tử đầu tiên của quá trình chuyển đổi, nên chúng
ta có thể nhận được giá trị Q này của trạng thái đầu tiên bằng cách lấy đầu ra ở đây và lấy chỉ số bằng không.
Và sau đó, chúng tôi thêm dữ liệu dấu chấm sẽ chỉ đơn giản là lấy cho chúng tôi giá trị Q của trạng thái đầu vào của quá trình chuyển đổi đầu tiên.
Và đó chính xác là giá trị Q mục tiêu.
Vì vậy, đó là lý do tại sao chúng tôi đang sử dụng nó.
Sau đó, chúng tôi sẽ cập nhật biến mục tiêu này, nhưng chỉ cho hành động đã được chọn trong bước
đầu tiên của chuỗi.
Và để truy cập bước đầu tiên này của chuỗi, chúng ta cần lấy chuỗi số 0 đầu tiên vì đây chính
xác là bước đầu tiên của chuỗi số 0.
Và để truy cập hành động tương ứng với bước đầu tiên này của loạt bài.
Chà, chúng ta cần thêm vào đây.
Hành động chấm.
Một lần nữa, đó là cấu trúc thuộc tính này mà chúng tôi đang sử dụng.
Hành động là một thuộc tính của bước đầu tiên của chuỗi.
Đó là lần chuyển đổi đầu tiên của loạt phim vì mỗi lần chuyển đổi của loạt phim đều có cấu trúc như sau,
hành động trạng thái, phần thưởng và hành động được thực hiện ở đây.
Hành động thuộc tính này ở đây có nghĩa là chúng tôi chỉ đơn giản là nhận được hành động của ngày đầu tiên này.
Và do đó, mục tiêu cho hành động cụ thể của bước đầu tiên chính xác là những gì cần được cập nhật bởi
phần thưởng tích lũy.
Vì vậy, về cơ bản ở đây chúng tôi sẽ viết rằng mục tiêu liên quan đến hành động được thực hiện
trong bước đầu tiên của loạt bài này là phần thưởng tích lũy mà chúng tôi vừa tính toán.
Được rồi.
Và bây giờ chúng tôi cuối cùng đã sẵn sàng cập nhật thông tin đầu vào của mình bằng cách thêm trạng thái đầu vào đầu tiên này tại đây và mục tiêu đầu tiên
này tại đây.
Đối với bước đầu tiên, chúng ta chỉ cần cập nhật bước đầu tiên của loạt bài này vì bạn biết đấy,
chúng ta luyện mắt về mười bước và do đó đầu vào là bước đầu tiên trong mười bước.
Và chúng ta cũng đạt được mục tiêu trong bước đầu tiên này, nhưng sau đó chúng ta không cần nhận bất kỳ đầu vào
hoặc bất kỳ mục tiêu nào trong các bước tiếp theo của mười bước, bởi vì về cơ bản việc học diễn ra sau mười bước.
Vì vậy, đó là lý do tại sao ngay bây giờ chúng tôi chỉ nhận được trạng thái và mục tiêu của bước đầu tiên của loạt phim.
Vì vậy, điều quan trọng là phải hiểu điều đó.
Và do đó, nếu chúng ta hiểu điều đó, thì bây giờ chúng ta hiểu rằng chúng ta phải nhập chúng vào danh sách đầu
vào và danh sách mục tiêu của chúng ta.
Vì vậy, chúng ta hãy làm điều này đầu tiên.
Hãy nối các trạng thái vào đầu vào của chúng ta.
Vì vậy, chúng tôi lấy danh sách đầu vào của mình và chúng tôi sử dụng hàm append để thêm trạng thái ghi nhớ trạng thái đầu
vào của bước đầu tiên của chuỗi.
Và sau đó chúng tôi sẽ thêm mục tiêu của bước đầu tiên vào danh sách mục tiêu của chúng tôi.
Và để làm điều này, chúng tôi lấy danh sách các mục tiêu và cũng như chúng tôi sử dụng hàm append để nối thêm mục tiêu đầu
tiên này.
Chúng ta bắt đầu.
Sắp xong.
Và bây giờ chúng ta cần trả lại những thứ cuối cùng, tất nhiên là những thứ chúng ta cần.
Đó là những gì chúng tôi đã nói ở phần đầu của hướng dẫn.
Các đầu vào và mục tiêu hiện đã được cập nhật.
Vì vậy, chúng tôi sẽ thêm ở đây trở lại.
Sau đó, chúng tôi sẽ nhận đầu vào của chúng tôi trước.
Nhưng sau đó vẫn vậy.
Trước tiên, chúng ta cần chuyển đổi chúng thành một mảng numpy, sau đó thực hiện chuyển đổi kiểu
để đảm bảo rằng chúng ta có một kiểu duy nhất với kiểu D là bằng và P float 30 giống nhau.
Và sau đó chúng tôi chuyển đổi nó thành một máy căng đuốc vì tất nhiên chúng tôi đang làm việc với PyTorch, vì vậy điều
đó hoàn toàn bắt buộc.
Và vì vậy tôi đang sử dụng ngọn đuốc từ NumPy.
Chức năng một lần nữa.
Và điều đó cung cấp cho chúng tôi đầu vào của chúng tôi.
Hoàn hảo.
Và bây giờ chúng ta hãy làm tương tự cho mục tiêu.
Bây giờ chúng ta sẽ sử dụng thủ thuật này, thủ thuật này nhanh hơn.
Chúng ta sẽ xếp các mục tiêu lại với nhau.
Và để làm điều này, trước tiên chúng ta cần sử dụng thư viện ngọn đuốc của mình, bởi vì chúng ta sẽ sử dụng hàm ngăn
xếp bằng ngọn đuốc để xếp chồng các mục tiêu.
Được rồi.
Và vì vậy, về cơ bản dòng mã này trả về các đầu vào và mục tiêu mà chúng tôi vừa cập nhật thông qua thuật
toán nguồn theo dõi tính đủ điều kiện này hoặc chúng ta có thể gọi nó là học từng bước.
Và bây giờ xin chúc mừng, chúng tôi đã sẵn sàng để thực hiện khóa đào tạo cuối cùng vì về cơ
bản khóa đào tạo bao gồm giảm thiểu sự khác biệt bình phương giữa dự đoán đầu vào của chúng tôi và mục tiêu.
Vì vậy, hãy làm cho AI của chúng ta trở nên thông minh.
Nó sẽ trở nên thông minh trong hướng dẫn tiếp theo.
Và như vậy cho đến lúc đó, hãy tận hưởng tôi.