Đồ thị tính toán động là gì?


19

Các khung như PyTorch và TensorFlow thông qua TensorFlow Fold hỗ trợ Đồ thị tính toán động và đang nhận được sự chú ý từ các nhà khoa học dữ liệu.

Tuy nhiên, dường như thiếu nguồn lực để hỗ trợ hiểu đồ thị tính toán động.

Ưu điểm của Đồ thị tính toán động dường như bao gồm khả năng thích ứng với số lượng khác nhau trong dữ liệu đầu vào. Có vẻ như có thể tự động lựa chọn số lượng lớp, số lượng tế bào thần kinh trong mỗi lớp, chức năng kích hoạt và các tham số NN khác, tùy thuộc vào từng trường hợp thiết lập đầu vào trong quá trình đào tạo. Đây có phải là một đặc tính chính xác?

Những lợi thế của mô hình động so với mô hình tĩnh là gì? Có phải đó là lý do tại sao DCG đang nhận được nhiều sự chú ý? Tóm lại, DCG là gì và những ưu và nhược điểm sử dụng của chúng là gì?

Câu trả lời:


8

Hai câu trả lời ngắn

Câu trả lời ngắn từ góc độ lý thuyết là ...

Biểu đồ tính toán động là một hệ thống có thể thay đổi được biểu diễn dưới dạng biểu đồ hướng dữ liệu giữa các hoạt động. Nó có thể được hình dung như các hình dạng chứa văn bản được kết nối bởi các mũi tên, theo đó các đỉnh (hình dạng) biểu thị các hoạt động trên dữ liệu chảy dọc theo các cạnh (mũi tên).

Lưu ý rằng biểu đồ như vậy xác định các phụ thuộc trong luồng dữ liệu nhưng không nhất thiết là thứ tự thời gian của ứng dụng hoạt động, có thể trở nên mơ hồ trong việc duy trì trạng thái theo các đỉnh hoặc chu kỳ trong biểu đồ mà không có cơ chế bổ sung để xác định ưu tiên tạm thời.

Câu trả lời ngắn từ góc độ phát triển ứng dụng là ...

Khung đồ thị tính toán động là một hệ thống các thư viện, giao diện và các thành phần cung cấp giao diện thời gian chạy linh hoạt, có lập trình, tạo điều kiện cho việc xây dựng và sửa đổi các hệ thống bằng cách kết nối một bộ hoạt động hữu hạn nhưng có thể mở rộng.

Khung PyTorch

PyTorch là sự tích hợp của khung Torch với cấu trúc dữ liệu và ngôn ngữ Python. Torch cạnh tranh với Theano, TensorFlow và các khung xây dựng hệ thống tính toán năng động khác.


---   Các phương pháp bổ sung để hiểu   ---

Cấu trúc tính toán tùy ý của các thang đo rời rạc tùy ý

Một trong những thành phần có thể được sử dụng để xây dựng một hệ thống tính toán là một yếu tố được thiết kế để được kết nối với nhau để tạo ra các mạng thần kinh. Sự sẵn có của những điều này hỗ trợ việc xây dựng học tập sâu và truyền lại mạng lưới thần kinh. Một loạt các hệ thống khác liên quan đến việc lắp ráp các thành phần hoạt động với dữ liệu đa chiều có khả năng trong các cấu trúc tính toán được xác định tùy ý cũng có thể được xây dựng.

Dữ liệu có thể là các giá trị vô hướng, chẳng hạn như số dấu phẩy động, số nguyên hoặc chuỗi hoặc tập hợp trực giao của các giá trị này, chẳng hạn như vectơ, ma trận, hình khối hoặc siêu khối. Các hoạt động về khái quát hóa các dạng dữ liệu này là các thang đo rời rạc và các cấu trúc được tạo ra từ việc lắp ráp các hoạt động tenxơ vào các hệ thống làm việc là các luồng dữ liệu.

Điểm tham chiếu để hiểu khái niệm tính toán động

Đồ thị tính toán động không phải là một khái niệm đặc biệt mới, mặc dù thuật ngữ này tương đối mới. Sự quan tâm đến DCG giữa các nhà khoa học máy tính không phải là mới như thuật ngữ Nhà khoa học dữ liệu. Tuy nhiên, câu hỏi nêu chính xác rằng có rất ít tài nguyên được viết tốt (trừ các ví dụ mã) từ đó người ta có thể tìm hiểu khái niệm tổng thể xung quanh sự xuất hiện và sử dụng của chúng.

Một điểm tham chiếu có thể bắt đầu để hiểu DCG là mẫu thiết kế Command, một trong nhiều mẫu thiết kế được phổ biến bởi những người đề xuất thiết kế hướng đối tượng. Mẫu thiết kế lệnh coi các hoạt động như các đơn vị tính toán các chi tiết được ẩn khỏi các đối tượng lệnh kích hoạt chúng. Mẫu thiết kế lệnh thường được sử dụng cùng với mẫu thiết kế Phiên dịch.

Trong trường hợp của DCG, các mẫu thiết kế hỗn hợp và Mặt tiền cũng được tham gia để tạo điều kiện thuận lợi cho các hoạt động tenxơ rời rạc cắm và chạy có thể được lắp ráp với nhau trong các mẫu để tạo thành các hệ thống.

Sự kết hợp đặc biệt này của các mẫu thiết kế để tạo thành các hệ thống thực sự là một sự trừu tượng hóa phần mềm gần giống với ý tưởng cấp tiến dẫn đến sự xuất hiện của kiến ​​trúc Von Neumann, trung tâm của hầu hết các máy tính ngày nay. Đóng góp của Von Neumann cho sự xuất hiện của máy tính là ý tưởng cho phép các thuật toán tùy ý chứa logic Boolean, số học và phân nhánh được biểu diễn và lưu trữ dưới dạng dữ liệu - một chương trình.

Một tiền thân khác của DCG là các công cụ biểu thức. Các công cụ biểu thức có thể đơn giản như các công cụ số học và phức tạp như các ứng dụng như Mathicala. Công cụ quy tắc hơi giống với DCG ngoại trừ công cụ quy tắc là quy tắc khai báo và quy tắc meta cho công cụ quy tắc hoạt động trên các khai báo đó.

Chương trình Thao tác Chương trình

Những gì chúng có điểm chung với DCG là luồng dữ liệu và hoạt động được áp dụng có thể được xác định khi chạy. Cũng như DCG, một số thư viện và ứng dụng phần mềm này có API hoặc các cơ chế khác để cho phép các hoạt động được áp dụng cho các chi tiết chức năng. Nó thực chất là ý tưởng của một chương trình cho phép thao tác của một chương trình khác.

Một điểm tham chiếu khác để hiểu nguyên tắc này ở cấp độ nguyên thủy là câu lệnh chuyển đổi trường hợp có sẵn trong một số ngôn ngữ máy tính. Đó là một cấu trúc mã nguồn, theo đó, lập trình viên về cơ bản thể hiện, "Chúng tôi không chắc chắn những gì phải được thực hiện, nhưng giá trị của biến này sẽ cho mô hình thực thi thời gian thực phải làm gì từ một tập hợp các khả năng."

Tuyên bố trường hợp chuyển đổi là một sự trừu tượng mở rộng ý tưởng trì hoãn quyết định theo hướng tính toán cho đến thời gian chạy. Đây là phiên bản phần mềm của những gì được thực hiện bên trong bộ điều khiển của CPU hiện đại và là phần mở rộng của khái niệm trì hoãn một số chi tiết thuật toán. Một bảng hàm functor (con trỏ hàm) trong C hoặc đa hình trong C ++, Java hoặc Python là các ví dụ nguyên thủy khác.

Tính toán động đưa sự trừu tượng hơn nữa. Họ trì hoãn hầu hết nếu không phải tất cả các đặc điểm kỹ thuật tính toán và các mối quan hệ giữa chúng để chạy thời gian. Tổng quát hóa toàn diện này mở rộng khả năng sửa đổi chức năng trong thời gian chạy.

Biểu diễn đồ thị có tính toán

Đó là mô hình tính toán động. Bây giờ cho phần đồ thị.

Khi một người quyết định trì hoãn lựa chọn các hoạt động được tạo thành trước cho đến khi chạy, một cấu trúc được yêu cầu để giữ các hoạt động, mối quan hệ phụ thuộc của chúng và có lẽ là các tham số ánh xạ. Một đại diện như vậy không chỉ là một cây cú pháp (chẳng hạn như một cây đại diện cho hệ thống phân cấp của mã nguồn). Không giống như một chương trình hợp ngữ hoặc mã máy, nó phải dễ dàng và tùy ý thay đổi. Nó phải chứa nhiều thông tin hơn biểu đồ luồng dữ liệu và nhiều hơn bản đồ bộ nhớ. Cấu trúc dữ liệu đó phải xác định cấu trúc tính toán trông như thế nào?

May mắn thay, bất kỳ thuật toán tùy ý, hữu hạn, giới hạn có thể được biểu diễn dưới dạng biểu đồ hướng phụ thuộc giữa các hoạt động được chỉ định. Trong biểu đồ như vậy, các đỉnh (thường được biểu thị dưới dạng các nút có hình dạng khác nhau khi được hiển thị) thể hiện các hoạt động được thực hiện trên dữ liệu và các cạnh (thường được biểu thị dưới dạng mũi tên khi được hiển thị) là các biểu diễn kỹ thuật số của thông tin bắt nguồn từ một số thao tác (hoặc đầu vào hệ thống) và dựa vào đó các hoạt động khác (hoặc đầu ra hệ thống) phụ thuộc.

Hãy nhớ rằng đồ thị có hướng không phải là một thuật toán (trong đó một chuỗi hoạt động chính xác được chỉ định) cũng không phải là một khai báo (trong dữ liệu đó có thể được lưu trữ rõ ràng và các vòng lặp, các nhánh, hàm và mô-đun có thể được xác định và lồng vào nhau).

Hầu hết các khung và thư viện đồ họa tính toán động này cho phép các thành phần thực hiện tính toán trên đầu vào thành phần hỗ trợ học máy. Các đỉnh trong đồ thị có hướng có thể là mô phỏng của các nơ-ron để xây dựng mạng lưới thần kinh hoặc các thành phần hỗ trợ tính toán vi phân. Các khung này trình bày các khả năng của các cấu trúc có thể được sử dụng cho việc học sâu theo nghĩa tổng quát hơn.

Trong bối cảnh lịch sử máy tính

Một lần nữa, không có gì được đề cập cho đến nay là mới đối với khoa học máy tính. LISP cho phép các sơ đồ tính toán được sửa đổi bằng các thuật toán khác. Và kích thước và số lượng đầu vào tổng quát được tích hợp vào một số giao diện và giao thức plug-and-play lâu đời. Ý tưởng về một khuôn khổ cho việc học bắt đầu từ cùng thời kỳ giữa thế kỷ XX.

Điểm mới và phổ biến là sự kết hợp đặc biệt của các tính năng tích hợp và tập hợp thuật ngữ liên quan, tổng hợp các thuật ngữ hiện có cho từng tính năng, dẫn đến cơ sở hiểu biết rộng hơn bởi những người đã nghiên cứu và làm việc trong ngành công nghiệp phần mềm .

  • Hương vị hiện đại (hợp thời) của giao diện API
  • Hướng đối tượng
  • Hỗ trợ tenor rời rạc
  • Biểu đồ trừu tượng có hướng
  • Khả năng tương tác với các ngôn ngữ và gói phổ biến hỗ trợ dữ liệu lớn, khai thác dữ liệu, học máy và phân tích thống kê
  • Hỗ trợ xây dựng mạng lưới thần kinh tùy ý và có hệ thống
  • Khả năng thích ứng cấu trúc mạng thần kinh động (tạo điều kiện cho thử nghiệm về độ dẻo thần kinh)

Nhiều trong số các khung này hỗ trợ khả năng thích ứng với việc thay đổi kích thước đầu vào (số lượng kích thước và phạm vi của từng kích thước).

Tương tự với cây biểu tượng trừu tượng trong trình biên dịch

Một biểu đồ phụ thuộc của đầu vào và đầu ra của các hoạt động cũng xuất hiện trong các cây ký hiệu trừu tượng (AST), mà một số trình biên dịch tiến bộ hơn xây dựng trong quá trình giải thích cấu trúc mã nguồn. AST sau đó được sử dụng để tạo các lệnh biên dịch chương trình biên dịch hoặc lệnh máy trong quá trình liên kết với các thư viện và tạo thành một tệp thực thi. AST là một biểu đồ có hướng đại diện cho cấu trúc dữ liệu, các hoạt động được thực hiện và luồng điều khiển được chỉ định bởi mã nguồn.

Luồng dữ liệu chỉ đơn giản là tập hợp các phụ thuộc giữa các hoạt động, vốn phải có trong AST để AST được sử dụng để tạo các lệnh thực thi trong trình biên dịch mã hoặc mã máy theo chính xác thuật toán được chỉ định trong mã nguồn.

Các khung đồ thị tính toán động, không giống như các câu lệnh chuyển đổi hoặc mô hình AST trong trình biên dịch, có thể được thao tác trong thời gian thực, được tối ưu hóa, điều chỉnh (như trong trường hợp lưới nhân tạo bằng nhựa), đảo ngược, biến đổi bằng tenxơ, decimated, sửa đổi để thêm hoặc xóa entropy, bị đột biến theo một bộ quy tắc, hoặc được dịch thành các hình thức phái sinh. Chúng có thể được lưu trữ dưới dạng tệp hoặc luồng và sau đó lấy từ chúng.

Đây là một khái niệm tầm thường cho các lập trình viên LISP hoặc những người hiểu bản chất của khuyến nghị của John von Neumann để lưu trữ các thông số kỹ thuật vận hành dưới dạng dữ liệu. Theo nghĩa sau này, một chương trình là một luồng dữ liệu để hướng dẫn, thông qua trình biên dịch và hệ điều hành, một hệ thống tính toán động được triển khai trong mạch kỹ thuật số VLSI.

Đạt được kích thước và số lượng thích nghi

Trong câu hỏi là nhận xét mà người ta không nói, "Cần phải có tập dữ liệu - rằng tất cả các trường hợp trong đó có cùng số lượng đầu vào cố định." Tuyên bố đó không thúc đẩy sự hiểu biết chính xác. Có nhiều cách rõ ràng hơn để nói điều gì là đúng về khả năng thích ứng đầu vào.

Giao diện giữa DCG và các thành phần khác của một hệ thống tổng thể phải được xác định, nhưng các giao diện này có thể có kích thước động hoặc số được tích hợp trong chúng. Đó là một vấn đề trừu tượng.

Ví dụ, một loại đối tượng tenor rời rạc trình bày một giao diện phần mềm cụ thể, tuy nhiên một tenxơ là một khái niệm toán học động xung quanh mà một giao diện chung có thể được sử dụng. Một tenxơ rời rạc có thể là vô hướng, vectơ, ma trận, khối lập phương hoặc siêu khối và phạm vi của các biến phụ thuộc cho mỗi thứ nguyên có thể thay đổi.

Có thể là số lượng các nút trong một lớp của hệ thống được xác định trong Đồ thị tính toán động có thể là hàm của số lượng đầu vào của một loại cụ thể và đó cũng có thể là một tính toán được hoãn lại theo thời gian.

Khung có thể được lập trình để chọn cấu trúc lớp (một phần mở rộng của mô hình trường hợp chuyển đổi một lần nữa) hoặc tính toán các tham số xác định kích thước cấu trúc và độ sâu hoặc kích hoạt. Tuy nhiên, các tính năng tinh vi này không phải là những gì đủ điều kiện của khung làm khung Đồ thị tính toán động.

Điều gì đủ điều kiện một Khung để hỗ trợ đồ thị tính toán động?

Để đủ điều kiện làm khung đồ thị tính toán động, khung này chỉ đơn thuần hỗ trợ cho việc xác định thuật toán để chạy thời gian, do đó mở ra một loạt các hoạt động trên các phụ thuộc tính toán và luồng dữ liệu trong thời gian chạy. Khái niệm cơ bản của các hoạt động được hoãn lại phải bao gồm đặc tả, thao tác, thực thi và lưu trữ các biểu đồ được định hướng đại diện cho các hệ thống hoạt động.

Nếu đặc tả của thuật toán KHÔNG được hoãn lại cho đến khi chạy mà được biên dịch thành tệp thực thi được thiết kế cho một hệ điều hành cụ thể chỉ với tính linh hoạt truyền thống được cung cấp bởi các ngôn ngữ cấp thấp như if-then-other, case-switch, đa hình, mảng của functor và các chuỗi có độ dài thay đổi, nó được coi là một thuật toán tĩnh.

Nếu các hoạt động, sự phụ thuộc giữa chúng, luồng dữ liệu, chiều của dữ liệu trong luồng và khả năng thích ứng của hệ thống với số lượng và chiều của đầu vào đều biến đổi theo thời gian để tạo ra một hệ thống thích ứng cao, sau đó thuật toán là động theo những cách này.

Một lần nữa, các chương trình LISP hoạt động trên các chương trình LISP, công cụ quy tắc có khả năng quy tắc meta, công cụ biểu thức, thư viện đối tượng tenor rời rạc và thậm chí các mẫu thiết kế lệnh tương đối đơn giản đều có động, theo một số đặc điểm để chạy thời gian. DCG linh hoạt và toàn diện trong khả năng của mình để hỗ trợ các cấu trúc tính toán tùy ý theo cách tạo ra một môi trường phong phú để thử nghiệm học tập sâu và triển khai hệ thống.

Khi nào nên sử dụng đồ thị tính toán động

Những ưu và nhược điểm của DCG là hoàn toàn cụ thể. Nếu bạn điều tra các khái niệm lập trình động khác nhau ở trên và các khái niệm khác có thể được liên kết chặt chẽ với chúng trong tài liệu liên quan, nó sẽ trở nên rõ ràng cho dù bạn có cần Đồ thị tính toán động hay không.

Nói chung, nếu bạn cần biểu diễn một mô hình tính toán tùy ý và thay đổi để tạo điều kiện thuận lợi cho việc triển khai hệ thống học tập sâu, hệ thống thao tác toán học, hệ thống thích ứng hoặc phần mềm linh hoạt và phức tạp khác xây dựng bản đồ cho mô hình DCG, thì đó là một bằng chứng về khái niệm sử dụng khung Đồ thị tính toán động là bước đầu tiên tốt để xác định kiến ​​trúc phần mềm của bạn cho giải pháp của vấn đề.

Không phải tất cả các phần mềm học tập đều sử dụng DCG, nhưng chúng thường là một lựa chọn tốt, khi thao tác có hệ thống và có thể liên tục của một cấu trúc tính toán tùy ý là một yêu cầu về thời gian chạy.


" PyTorch là sự tích hợp của khung Torch cho ngôn ngữ Python " - Tôi nghĩ rằng tuyên bố này có thể bị hiểu sai là " PyTorch là một thư viện bao bọc cho khung Torch cho ngôn ngữ Python ", đây sẽ là một tuyên bố sai. Bạn có lẽ nên viết lại nó.
nbro

" Với các khung đồ thị tính toán động, không giống như các câu lệnh chuyển đổi hoặc các mô hình AST trung gian trong trình biên dịch, người ta có thể thao tác các hoạt động " ... " dịch chúng " - Ý của bạn là gì khi "dịch các hoạt động"?
nbro

1

Tóm lại, đồ thị tính toán động có thể giải quyết một số vấn đề mà các tĩnh không thể hoặc không hiệu quả do không cho phép đào tạo theo lô.

Để cụ thể hơn, đào tạo mạng thần kinh hiện đại thường được thực hiện theo đợt , tức là xử lý nhiều hơn một trường hợp dữ liệu cùng một lúc. Một số nhà nghiên cứu chọn kích thước lô như 32, 128 trong khi những người khác sử dụng cỡ lô lớn hơn 10.000. Đào tạo đơn lẻ thường rất chậm vì không thể hưởng lợi từ sự song song phần cứng.

Ví dụ, trong Xử lý ngôn ngữ tự nhiên, các nhà nghiên cứu muốn đào tạo mạng lưới thần kinh với các câu có độ dài khác nhau. Sử dụng các biểu đồ tính toán tĩnh, trước tiên họ thường phải thực hiện đệm , tức là thêm các ký hiệu vô nghĩa vào đầu hoặc cuối của các câu ngắn hơn để tạo ra tất cả các câu có cùng độ dài. Hoạt động này làm phức tạp việc đào tạo rất nhiều (ví dụ cần che dấu, xác định lại các số liệu đánh giá, lãng phí một lượng thời gian tính toán đáng kể cho các ký hiệu đệm đó). Với biểu đồ tính toán động, phần đệm không còn cần thiết (hoặc chỉ cần trong mỗi lô).

Một ví dụ phức tạp hơn là (sử dụng mạng thần kinh để) xử lý các câu dựa trên các cây phân tích cú pháp của nó. Vì mỗi câu có một cây phân tích cú pháp riêng, mỗi câu yêu cầu một biểu đồ tính toán khác nhau, có nghĩa là đào tạo với biểu đồ tính toán tĩnh chỉ có thể cho phép đào tạo một trường hợp đơn lẻ. Một ví dụ tương tự như thế này là Mạng nơ ron đệ quy .


0

Nhiều mạng nơ ron sâu có biểu đồ luồng dữ liệu tĩnh, điều đó có nghĩa là cấu trúc tính toán của nó (biểu đồ tính toán của nó) vẫn ổn định trên các đầu vào khác nhau. Điều này là tốt vì chúng ta có thể tận dụng tính năng này cho hiệu suất, chẳng hạn như bằng cách tạo khối nhỏ (xử lý một loạt các đầu vào cùng một lúc).

Nhưng một số mạng thần kinh có thể có một biểu đồ tính toán khác nhau cho mỗi đầu vào. Điều này gây ra một số vấn đề (khó khăn theo đợt, xây dựng đồ thị tốn kém về mặt tính toán) và do đó các mạng này hơi khó sử dụng.

Bài viết mà bạn liên kết khắc phục vấn đề này bằng cách đề xuất một phương pháp có thể bó một số biểu đồ tính toán thành một. Sau đó, chúng ta có thể làm các kỹ thuật NN thông thường của chúng tôi.

Lợi ích là tăng tốc, khuyến khích các nhà nghiên cứu khám phá các cấu trúc khác nhau và sáng tạo hơn tôi đoán.

Ưu điểm của Đồ thị tính toán động dường như bao gồm khả năng thích ứng với số lượng khác nhau trong dữ liệu đầu vào. Có vẻ như có thể tự động lựa chọn số lượng lớp, số lượng tế bào thần kinh trong mỗi lớp, chức năng kích hoạt và các tham số NN khác, tùy thuộc vào từng trường hợp thiết lập đầu vào trong quá trình đào tạo. Đây có phải là một đặc tính chính xác?

Điều này là không chính xác.


0

Đồ thị tính toán động là các CG được sửa đổi đơn giản với mức độ trừu tượng cao hơn. Từ 'Động' giải thích tất cả: cách dữ liệu chảy qua biểu đồ phụ thuộc vào cấu trúc đầu vào, tức là cấu trúc DCG có thể thay đổi và không tĩnh. Một trong những ứng dụng quan trọng của nó là trong các mạng thần kinh NLP.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.