Đạo hàm thời gian trong Python

Đạo hàm là một trong những khái niệm cơ bản nhất trong giải tích. Chúng mô tả những thay đổi trong biến đầu vào ảnh hưởng như thế nào đến đầu ra của chức năng. Mục tiêu của bài viết này là cung cấp phần giới thiệu cấp cao về tính toán đạo hàm trong PyTorch cho những người mới sử dụng khuôn khổ này. PyTorch cung cấp một cách thuận tiện để tính đạo hàm cho các hàm do người dùng định nghĩa

Trong khi chúng ta luôn phải xử lý backpropagation [một thuật toán được biết đến là xương sống của mạng nơ-ron] trong mạng nơ-ron, giúp tối ưu hóa các tham số để giảm thiểu lỗi nhằm đạt được độ chính xác phân loại cao hơn;

Sau khi xem qua hướng dẫn này, bạn sẽ học được

  • Cách tính đạo hàm trong PyTorch
  • Cách sử dụng autograd trong PyTorch để thực hiện phân biệt tự động trên tensor
  • Giới thiệu về biểu đồ tính toán bao gồm các nút và lá khác nhau, cho phép bạn tính toán độ dốc theo cách đơn giản nhất có thể [sử dụng quy tắc chuỗi]
  • Cách tính đạo hàm riêng trong PyTorch
  • Cách thực hiện đạo hàm của hàm đối với nhiều giá trị

Bắt đầu nào

Tính toán đạo hàm trong PyTorch
Ảnh của Jossuha Théophile. Một số quyền được bảo lưu.

Sự khác biệt trong Autograd

Autograd – mô-đun phân biệt tự động trong PyTorch – được sử dụng để tính toán đạo hàm và tối ưu hóa các tham số trong mạng thần kinh. Nó chủ yếu dành cho tính toán gradient

Trước khi bắt đầu, hãy tải lên một số thư viện cần thiết mà chúng ta sẽ sử dụng trong hướng dẫn này

1

2

nhập matplotlib. pyplot as plt

nhập đuốc

Bây giờ, hãy sử dụng một tensor đơn giản và đặt tham số requires_grad thành true. Điều này cho phép chúng tôi thực hiện phân biệt tự động và cho phép PyTorch đánh giá các công cụ phái sinh bằng cách sử dụng giá trị đã cho, trong trường hợp này là 3. 0

1

2

x = ngọn đuốc. tensor[3. 0, requires_grad = True]

print["tạo một tensor x. ", x]

1

tạo ra một tensor x. tenxơ[3. , yêu cầu_grad=True]

Chúng ta sẽ sử dụng một phương trình đơn giản $y=3x^2$ làm ví dụ và lấy đạo hàm đối với biến x. Vì vậy, hãy tạo một tenxơ khác theo phương trình đã cho. Ngoài ra, chúng tôi sẽ áp dụng một phương pháp gọn gàng .backward trên biến y tạo thành biểu đồ tuần hoàn lưu trữ lịch sử tính toán và đánh giá kết quả bằng .grad cho giá trị đã cho

1

2

3

4

y = 3 * x ** 2

in["Kết quả của phương trình là. ", y]

y. lùi lại[]

in["Đạo hàm của phương trình tại x = 3 là. ", x. grad]

1

2

Result of the equation is:  tensor[27., grad_fn=]

Đạo hàm của phương trình tại x = 3 là. tenxơ[18. ]

Như bạn có thể thấy, chúng tôi đã nhận được giá trị là 18, giá trị này đúng

đồ thị tính toán

PyTorch tạo ra các dẫn xuất bằng cách xây dựng một biểu đồ ngược đằng sau hậu trường, trong khi các hàm tensor và ngược là các nút của biểu đồ. Trong biểu đồ, PyTorch tính toán đạo hàm của một tenxơ tùy thuộc vào việc nó có phải là lá hay không

PyTorch sẽ không đánh giá đạo hàm của tensor nếu thuộc tính leaf của nó được đặt thành True. Chúng tôi sẽ không đi sâu vào chi tiết về cách tạo và sử dụng biểu đồ ngược, bởi vì mục tiêu ở đây là cung cấp cho bạn kiến ​​thức cấp cao về cách PyTorch sử dụng biểu đồ để tính đạo hàm

Vì vậy, hãy kiểm tra xem các tenxơ xy trông như thế nào bên trong sau khi chúng được tạo ra. Cho 1

1

2

3

4

5

in['thuộc tính dữ liệu của tensor. ',x. dữ liệu]

in['grad thuộc tính của tenxơ. ',x. grad]

print[thuộc tính 'grad_fn của tensor. ',x. grad_fn]

in["thuộc tính is_leaf của tensor. ",x. is_leaf]

print["requires_grad thuộc tính của tensor. ",x. requires_grad]

1

2

3

4

5

thuộc tính dữ liệu của tensor. tenxơ[3. ]

thuộc tính grad của tensor. tenxơ[18. ]

thuộc tính grad_fn của tensor. Không có

thuộc tính is_leaf của tensor. Thật

thuộc tính require_grad của tensor. Thật

và cho y

1

2

3

4

5

in['thuộc tính dữ liệu của tensor. ',y. dữ liệu]

in['grad thuộc tính của tenxơ. ',y. grad]

print[thuộc tính 'grad_fn của tensor. ',y. grad_fn]

in["thuộc tính is_leaf của tensor. ",y. is_leaf]

print["requires_grad thuộc tính của tensor. ",y. requires_grad]

1

2

3

4

5

print['thuộc tính dữ liệu của tensor. ',y. dữ liệu]

print['thuộc tính grad của tensor. ',y. tốt nghiệp]

print['grad_fn thuộc tính của tensor. ',y. grad_fn]

print["thuộc tính is_leaf của tensor. ",y. is_leaf]

print["thuộc tính request_grad của tensor. ",y. yêu cầu_grad]

Như bạn có thể thấy, mỗi tensor đã được gán với một bộ thuộc tính cụ thể

Thuộc tính data lưu trữ dữ liệu của tenxơ trong khi thuộc tính x0 cho biết về nút trong biểu đồ. Tương tự như vậy, thuộc tính .grad giữ kết quả của đạo hàm. Bây giờ bạn đã học được một số kiến ​​thức cơ bản về autograd và đồ thị tính toán trong PyTorch, hãy lấy một phương trình phức tạp hơn một chút $y=6x^2+2x+4$ và tính đạo hàm. Đạo hàm của phương trình được cho bởi

$$\frac{dy}{dx} = 12x+2$$

Đánh giá đạo hàm tại $x = 3$,

$$\left. \frac{dy}{dx}\right\vert_{x=3} = 12\times 3+2 = 38$$

Bây giờ, hãy xem PyTorch làm điều đó như thế nào,

1

2

3

4

5

x = ngọn đuốc. tensor[3. 0, requires_grad = True]

y = 6 * x ** 2 + 2 * x + 4

in["Kết quả của phương trình là. ", y]

y. lùi lại[]

in["Đạo hàm của phương trình tại x = 3 là. ", x. grad]

1

2

Result of the equation is:  tensor[64., grad_fn=]

Đạo hàm của phương trình tại x = 3 là. tenxơ[38. ]

Đạo hàm của phương trình là 38, đúng

Triển khai đạo hàm riêng của hàm

PyTorch cũng cho phép chúng ta tính đạo hàm riêng của các hàm. Ví dụ: nếu chúng ta phải áp dụng đạo hàm riêng cho hàm sau,

$$f[u,v] = u^3+v^2+4uv$$

Đạo hàm của nó đối với $u$ là,

$$\frac{\partial f}{\partial u} = 3u^2 + 4v$$

Tương tự, đạo hàm đối với $v$ sẽ là,

$$\frac{\partial f}{\partial v} = 2v + 4u$$

Bây giờ, hãy thực hiện theo cách của PyTorch, trong đó $u = 3$ và $v = 4$

Chúng ta sẽ tạo các tenxơ x2, x3 và x4 và áp dụng thuộc tính .backward trên x4 để tính đạo hàm. Cuối cùng, chúng tôi sẽ đánh giá đạo hàm bằng cách sử dụng .grad đối với các giá trị của x2 và x3

1

2

3

4

5

6

7

8

9

10

11

12

u = ngọn đuốc. tensor[3. , requires_grad=True]

v = ngọn đuốc. tensor[4. , requires_grad=True]

 

f = u**3 + v**2 + 4*u*v

 

in[u]

in[v]

in[f]

 

f. lùi lại[]

in["Đạo hàm riêng theo u. ", u. grad]

in["Đạo hàm riêng theo v. ", v. grad]

1

2

3

4

5

tenxơ[3. , yêu cầu_grad=True]

tenxơ[4. , yêu cầu_grad=True]

tensor[91., grad_fn=]

đạo hàm riêng theo u. tenxơ[43. ]

đạo hàm riêng theo v. tenxơ[20. ]

Đạo hàm của các hàm có nhiều giá trị

Điều gì sẽ xảy ra nếu chúng ta có một hàm có nhiều giá trị và chúng ta cần tính đạo hàm đối với nhiều giá trị của nó? . Đây là cách chúng ta có thể thấy 'hàm so với. đồ thị phái sinh

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# tính đạo hàm của hàm nhiều giá trị

x = ngọn đuốc. linspace[-20, 20, 20, requires_grad = True]

Y = x ** 2

y = ngọn đuốc. tổng[Y]

y. lùi lại[]

 

# vẽ đồ thị hàm số và đạo hàm

function_line, = plt. âm mưu[x. tách[]. numpy[], Y . .tách[]. numpy[], nhãn = 'Function']

function_line. set_color["đỏ"]

derivative_line, = plt. âm mưu[x. tách[]. numpy[], x . .grad. tách[]. numpy[], nhãn = 'Derivative']

derivative_line. set_color["green"]

plt. xlabel['x']

plt. chú thích[]

plt. hiển thị[]

Trong hai hàm .backward0 ở trên, chúng tôi trích xuất các giá trị từ các tenxơ PyTorch để chúng tôi có thể hình dung chúng. Phương pháp .backward1 không cho phép biểu đồ theo dõi thêm các hoạt động. Điều này giúp chúng ta dễ dàng chuyển đổi một tensor thành một mảng có nhiều mảng

Chủ Đề