두 개의 짧은 답변
이론적 인 관점에서 짧은 대답은 ...
다이나믹 계산 그래프 (Dynamic Computational Graph)는 오퍼레이션 사이의 데이터 흐름에 대한 유 방향 그래프로 표시되는 변경 가능한 시스템입니다. 화살표로 연결된 텍스트를 포함하는 모양으로 시각화 할 수 있습니다. 정점 (모양)은 가장자리 (화살표)를 따라 흐르는 데이터의 작업을 나타냅니다.
이러한 그래프는 데이터 흐름의 종속성을 정의하지만 반드시 작업 적용의 시간 순서는 아니지만 시간 우선 순위를 지정하는 추가 메커니즘없이 그래프의 정점 또는주기에서 상태를 유지하는 데 모호해질 수 있습니다.
응용 프로그램 개발 관점에서 짧은 대답은 ...
Dynamic Computational Graph 프레임 워크는 유연하지만 프로그래밍 가능한 런타임 인터페이스를 제공하는 라이브러리, 인터페이스 및 구성 요소 시스템으로, 유한하지만 확장 가능한 일련의 작업을 연결하여 시스템의 구성 및 수정을 용이하게합니다.
PyTorch 프레임 워크
PyTorch는 Torch 프레임 워크를 Python 언어 및 데이터 구조와 통합 한 것입니다. Torch는 Theano, TensorFlow 및 기타 동적 계산 시스템 구성 프레임 워크와 경쟁합니다.
——— 이해에 대한 추가 접근법 ———
임의 이산 텐서의 임의 계산 구조
계산 시스템을 구성하는 데 사용할 수있는 구성 요소 중 하나는 신경망을 만들기 위해 상호 연결되도록 설계된 요소입니다. 이것들의 가용성은 건설 딥 러닝 및 역 전파 신경 네트워크를 지원합니다. 임의로 정의 된 계산 구조에서 잠재적으로 다차원 데이터와 함께 작동하는 구성 요소 어셈블리와 관련된 다양한 다른 시스템도 구성 할 수 있습니다.
데이터는 부동 소수점 숫자, 정수 또는 문자열과 같은 스칼라 값이거나 벡터, 행렬, 큐브 또는 하이퍼 큐브와 같은 이들의 직교 집계 일 수 있습니다. 이러한 데이터 형식의 일반화에 대한 조작은 이산 텐서이며 텐서 조작의 어셈블리에서 작업 시스템으로 작성된 구조는 데이터 플로우입니다.
동적 계산 개념을 이해하기위한 참조 지점
동적 계산 그래프는 용어가 상대적으로 새롭지 만 특별히 새로운 개념은 아닙니다. 컴퓨터 과학자들 사이에서 DCG에 대한 관심은 데이터 과학자라는 용어만큼 새로운 것이 아닙니다. 그럼에도 불구하고,이 질문은 (예제 이외의) 잘 쓰여진 자료가 거의 없으며, 여기에서 그들의 출현과 사용을 둘러싼 전반적인 개념을 배울 수있는 자료가 거의 없다고 정확하게 지적합니다.
DCG에 대한 이해를 시작하기위한 하나의 가능한 기준점은 명령 지향 패턴이며, 이는 객체 지향 설계의 지지자에 의해 대중화 된 많은 설계 패턴 중 하나입니다. 명령 디자인 패턴은 연산을 계산 단위로 간주하여 세부 사항이 트리거되는 명령 오브젝트에서 숨겨집니다. 명령 디자인 패턴은 종종 인터프리터 디자인 패턴과 함께 사용됩니다.
DCG의 경우, 컴포지트 및 Facade 디자인 패턴은 패턴으로 함께 조립되어 시스템을 형성 할 수있는 정의 플러그 앤 플레이 이산 텐서 작동을 용이하게하기 위해 포함됩니다.
시스템을 형성하기위한 이러한 특정 디자인 패턴 조합은 실제로 오늘날 대부분의 컴퓨터의 중심 인 Von Neumann 아키텍처의 출현으로 이어진 근본적인 아이디어와 실질적으로 유사한 소프트웨어 추상화입니다. Von Neumann의 컴퓨터 출현에 대한 기여는 부울 논리, 산술 및 분기를 포함하는 임의의 알고리즘을 데이터로 표현하여 프로그램 (프로그램)으로 저장하는 것입니다.
DCG의 또 다른 선구자는 표현 엔진입니다. 식 엔진은 산술 엔진처럼 간단하고 Mathematica와 같은 응용 프로그램처럼 복잡 할 수 있습니다. 규칙 엔진은 규칙 엔진이 선언적이고 규칙 엔진의 메타 규칙이 해당 선언에서 작동한다는 점을 제외하면 DCG와 비슷합니다.
프로그램 조작 프로그램
DCG와 공통점이있는 것은 적용 할 데이터 흐름과 작업을 런타임에 정의 할 수 있다는 것입니다. DCG와 마찬가지로 이러한 소프트웨어 라이브러리 및 애플리케이션 중 일부에는 기능 세부 사항에 조작을 적용 할 수있는 API 또는 기타 메커니즘이 있습니다. 본질적으로 다른 프로그램의 조작을 허용하는 프로그램의 아이디어입니다.
기본 수준에서이 원칙을 이해하기위한 또 다른 기준은 일부 컴퓨터 언어에서 사용 가능한 switch-case 문입니다. 이것은 프로그래머가 본질적으로 "무엇을해야할지 확실하지 않지만이 변수의 값은 실시간 실행 모델에 일련의 가능성으로부터 무엇을해야하는지 알려줄 것"이라는 소스 코드 구조입니다.
switch-case 문은 계산 방향에 대한 결정을 런타임까지 연기하는 아이디어를 확장하는 추상화입니다. 최신 CPU의 제어 장치 내에서 수행되는 소프트웨어 버전이며 일부 알고리즘 세부 사항을 지연시키는 개념의 확장입니다. C의 functor (함수 포인터) 또는 C ++, Java 또는 Python의 다형성은 다른 기본 예제입니다.
동적 계산은 추상화를 더욱 발전시킵니다. 계산의 모든 스펙과 실행 시간 간의 관계를 모두 지연 시키지는 않습니다. 이 포괄적 인 일반화는 런타임시 기능 수정 가능성을 넓 힙니다.
계산의 지시 된 그래프 표현
이것이 바로 동적 계산 모델입니다. 이제 그래프 부분입니다.
런타임까지 수행 할 작업 선택을 연기하기로 결정하면 작업, 해당 종속성 관계 및 매핑 매개 변수를 보유하는 구조가 필요합니다. 이러한 표현은 구문 트리 (예 : 소스 코드의 계층 구조를 나타내는 트리) 이상입니다. 어셈블리 언어 프로그램이나 기계 코드와 달리 쉽고 임의로 변경할 수 있어야합니다. 데이터 플로우 그래프보다 많은 정보와 메모리 맵보다 많은 정보를 포함해야합니다. 계산 구조를 지정하는 데이터 구조는 어떤 모양이어야합니까?
다행스럽게도 임의의 유한 한 경계 알고리즘은 지정된 작업 간의 종속성에 대한 유 방향 그래프로 표현할 수 있습니다. 이러한 그래프에서 정점 (종종 표시 될 때 다양한 모양의 노드로 표시됨)은 데이터에 대해 수행 된 작업을 나타내고 모서리 (종종 표시 될 때 화살표로 표시됨)는 일부 작업 (또는 시스템 입력)에서 발생하는 정보의 디지털 표현입니다. 다른 작업 (또는 시스템 출력)에 따라 달라집니다.
유 방향 그래프는 알고리즘 (정확한 연산 순서가 지정되어 있음)이나 선언 (데이터가 명시 적으로 저장 될 수 있고 루프, 분기, 함수 및 모듈이 정의 가능하고 중첩 될 수 있음)이 아님을 명심하십시오.
이러한 동적 계산 그래프 프레임 워크 및 라이브러리의 대부분은 구성 요소가 기계 학습을 지원하는 구성 요소 입력에서 계산을 수행 할 수 있도록합니다. 유 방향 그래프의 정점은 신경망 또는 시차 미적분을 지원하는 구성 요소의 구성을위한 뉴런의 시뮬레이션 일 수 있습니다. 이러한 프레임 워크는보다 일반적인 의미로 딥 러닝에 사용될 수있는 구문의 가능성을 제시합니다.
컴퓨터 역사의 맥락에서
다시 말하지만, 지금까지 언급 된 것은 컴퓨터 과학에 새로운 것이 아닙니다. LISP는 다른 알고리즘으로 계산 회로도를 수정할 수 있습니다. 그리고 일반화 된 입력 치수 및 수는 수많은 플러그 앤 플레이 인터페이스 및 프로토콜에 내장되어 있습니다. 학습을위한 틀의 개념은 20 세기 중반으로 거슬러 올라갑니다.
새롭고 인기가있는 것은 통합 기능과 관련 용어 집합, 각 기능에 대한 기존 용어의 집합, 소프트웨어 업계에서 이미 공부하고 일하는 사람들에 의해 이해의 폭이 넓어졌습니다. .
- API 인터페이스의 최신 (유행) 특징
- 객체 방향
- 이산 텐서 지원
- 유 방향 그래프 추상화
- 빅 데이터, 데이터 마이닝, 기계 학습 및 통계 분석을 지원하는 널리 사용되는 언어 및 패키지와의 상호 운용성
- 임의적이고 체계적인 신경망 구축 지원
- 동적 신경망 구조적 적응 가능성 (신경 가소성 실험 촉진)
이러한 많은 프레임 워크는 변화하는 입력 차원 (치수 및 각 범위)에 대한 적응성을 지원합니다.
컴파일러의 추상 심볼 트리와의 유사성
연산의 입력 및 출력에 대한 종속성 그래프는 AST (Abstract Symbol Tree) 내에도 나타나며, 일부 진보적 인 컴파일러는 소스 코드 구조를 해석하는 동안 구성됩니다. 그런 다음 AST를 사용하여 라이브러리와 연결하고 실행 파일을 작성하는 과정에서 어셈블러 명령어 또는 기계 명령어를 생성합니다. AST는 데이터 구조, 수행 된 작업 및 소스 코드로 지정된 제어 흐름을 나타내는 방향 그래프입니다.
데이터 흐름은 단순히 작업 간의 종속성 집합으로, 소스 코드에 지정된 알고리즘을 정확하게 따르는 어셈블러 또는 머신 코드에서 실행 명령을 만드는 데 AST를 사용하려면 AST에 내재되어 있어야합니다.
스위치 케이스 명령문 또는 컴파일러의 AST 모델과 달리 동적 계산 그래프 프레임 워크는 실시간 조작, 최적화, 튜닝 (플라스틱 인공 그물의 경우와 같이), 반전, 텐서에 의해 변환, 소멸, 추가 또는 제거를 위해 수정 가능 엔트로피, 일련의 규칙에 따라 돌연변이되거나 달리 파생 형태로 변환됩니다. 파일이나 스트림으로 저장 한 다음 검색 할 수 있습니다.
이것은 LISP 프로그래머 나 조작 사양을 데이터로 저장하라는 John von Neumann의 권고의 특성을 이해하는 LISP 프로그래머에게는 사소한 개념입니다. 이러한 의미에서 프로그램은 컴파일러와 운영 체제를 통해 VLSI 디지털 회로에 구현 된 동적 계산 시스템을 지시하는 데이터 스트림입니다.
적응 가능한 차원과 숫자 달성
문제는 "데이터 세트가 필요하다-데이터 내의 모든 인스턴스는 동일한 고정 된 수의 입력을 갖는다"는 의견이 없다는 것이다. 그 진술은 정확한 이해를 촉진하지 않습니다. 입력 적응성에 대해 진실을 말하는 명확한 방법이 있습니다.
DCG와 전체 시스템의 다른 구성 요소 사이의 인터페이스를 정의해야하지만 이러한 인터페이스에는 동적 치수 나 수치가 내장되어있을 수 있습니다. 그것은 추상화의 문제입니다.
예를 들어, 불연속 텐서 객체 유형은 특정 소프트웨어 인터페이스를 나타내지 만 텐서는 일반적인 인터페이스를 사용할 수있는 동적 수학 개념입니다. 이산 텐서는 스칼라, 벡터, 행렬, 큐브 또는 하이퍼 큐브 일 수 있고, 각 차원에 대한 종속 변수의 범위는 가변적 일 수있다.
동적 계산 그래프에 정의 된 시스템 계층의 노드 수는 특정 유형의 입력 수의 함수일 수 있으며 런타임에 지연되는 계산 일 수도 있습니다.
프레임 워크는 계층 구조 (스위치 케이스 패러다임의 확장)를 선택하거나 구조 크기와 깊이 또는 활성화를 정의하는 파라미터를 계산하도록 프로그래밍 될 수 있습니다. 그러나 이러한 정교한 기능은 프레임 워크를 동적 계산 그래프 프레임 워크로 규정하지 않습니다.
동적 계산 그래프를 지원하는 프레임 워크의 자격은 무엇입니까?
Dynamic Computational Graph 프레임 워크로 자격을 갖추려면 프레임 워크가 런타임에 알고리즘 결정을 연기하는 것을 지원해야하므로 런타임시 계산 종속성 및 데이터 흐름에 대한 과다한 조작의 문을 열어야합니다. 지연된 작업의 기본 사항에는 작업 시스템을 나타내는 지시 된 그래프의 사양, 조작, 실행 및 저장이 포함되어야합니다.
알고리즘 사양이 런타임까지 지연되지 않고 if-then-else, switch-case, polymorphism, arrays 등의 저수준 언어로 제공되는 기존의 유연성만으로 특정 운영 체제 용으로 설계된 실행 파일로 컴파일 된 경우 함수 및 가변 길이 문자열은 정적 알고리즘으로 간주됩니다.
작업, 작업 간의 종속성, 데이터 흐름, 흐름 내 데이터의 차원 및 입력 숫자 및 차원에 대한 시스템의 적응성이 모두 매우 적응적인 시스템을 만드는 방식으로 런타임에 모두 가변적이라면, 알고리즘은 이러한 방식으로 동적입니다.
다시 말하지만 LISP 프로그램에서 작동하는 LISP 프로그램, 메타 규칙 기능이있는 규칙 엔진, 표현식 엔진, 이산 텐서 객체 라이브러리 및 비교적 간단한 명령 디자인 패턴은 모두 어떤 의미에서는 동적이므로 런타임에 일부 특성이 지연됩니다. DCG는 딥 러닝 실험 및 시스템 구현을위한 풍부한 환경을 조성 할 수있는 방식으로 임의의 계산 구성을 지원하는 기능이 유연하고 포괄적입니다.
동적 계산 그래프를 사용하는 경우
DCG의 장단점은 전적으로 문제에 따라 다릅니다. 위의 다양한 동적 프로그래밍 개념과 관련 문헌에서 이들과 밀접하게 연관되어있는 다른 동적 프로그래밍 개념을 조사하면 동적 계산 그래프가 필요한지 여부가 분명해집니다.
일반적으로 DCG 패러다임에 잘 매핑되는 딥 러닝 시스템, 수학 조작 시스템, 적응 시스템 또는 기타 유연하고 복잡한 소프트웨어 구조의 구현을 용이하게하기 위해 임의의 변화하는 계산 모델을 나타내야하는 경우 증거 동적 계산 그래프 프레임 워크를 사용하는 개념은 문제 해결을위한 소프트웨어 아키텍처를 정의하는 첫 번째 단계입니다.
모든 학습 소프트웨어가 DCG를 사용하는 것은 아니지만, 임의의 계산 구조를 체계적이고 지속적으로 조작하는 것이 런타임 요구 사항 인 경우 종종 좋은 선택입니다.