동적 계산 그래프 란 무엇입니까?


19

TensorFlow Fold를 통한 PyTorch 및 TensorFlow와 같은 프레임 워크는 동적 계산 그래프를 지원하며 데이터 과학자의 관심을 받고 있습니다.

그러나 동적 계산 그래프를 이해하는 데 도움이되는 리소스가 부족한 것 같습니다.

동적 계산 그래프의 장점은 입력 데이터의 다양한 수량에 적응하는 기능을 포함하는 것으로 보입니다. 훈련 중 각 입력 세트 인스턴스에 따라 레이어 수, 각 레이어의 뉴런 수, 활성화 기능 및 기타 NN 매개 변수가 자동으로 선택되는 것처럼 보입니다. 이것이 정확한 특성입니까?

정적 모델에 비해 동적 모델의 장점은 무엇입니까? DCG가 많은 관심을 받고있는 이유입니까? 요약하면, DCG 란 무엇이며 장단점은 무엇입니까?

답변:


8

두 개의 짧은 답변

이론적 인 관점에서 짧은 대답은 ...

다이나믹 계산 그래프 (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를 사용하는 것은 아니지만, 임의의 계산 구조를 체계적이고 지속적으로 조작하는 것이 런타임 요구 사항 인 경우 종종 좋은 선택입니다.


" PyTorch는 Python 언어를위한 Torch 프레임 워크의 통합입니다. "–이 문장은 " PyTorch는 Python 언어를위한 Torch 프레임 워크를위한 래퍼 라이브러리 "로 잘못 해석 될 수 있습니다 . 아마 그것을 바꿔야 할 것입니다.
nbro

" 동적 계산 그래프 프레임 워크를 사용하면 컴파일러의 스위치 케이스 문 또는 중간 AST 모델과 달리 작업을 조작 할 수 있습니다. "... " 번역합니다 "– "번역 작업"이란 무엇입니까?
nbro

1

요컨대, 동적 계산 그래프는 정적 훈련이 할 수 없거나 배치 훈련을 허용하지 않아 비효율적 인 문제를 해결할 수 있습니다.

보다 구체적으로 말하면, 현대 신경 네트워크 훈련은 일반적으로 배치로 수행됩니다. 한 번에 하나 이상의 데이터 인스턴스를 처리하는 . 일부 연구원은 32, 128과 같은 배치 크기를 선택하는 반면 다른 연구원은 10,000보다 큰 배치 크기를 사용합니다. 단일 인스턴스 교육은 일반적으로 하드웨어 병렬 처리의 이점을 얻을 수 없기 때문에 매우 느립니다.

예를 들어 Natural Language Processing에서 연구원들은 길이가 다른 문장으로 신경망을 훈련시키고 싶어합니다. 정적 계산 그래프를 사용하면 일반적으로 먼저 패딩을 수행해야합니다 . 즉, 짧은 문장의 시작 또는 끝에 의미없는 기호를 추가하여 동일한 길이의 모든 문장을 만듭니다. 이 작업은 훈련을 복잡하게 만듭니다 (예 : 마스킹 필요, 평가 지표 재정의, 패딩 된 기호에 상당한 시간의 계산 시간 낭비). 동적 계산 그래프를 사용하면 패딩이 더 이상 필요하지 않거나 각 배치 내에서만 필요합니다.

더 복잡한 예는 구문 분석 트리를 기반으로 문장을 처리하기 위해 신경망을 사용하는 것입니다. 각 문장에는 고유 한 구문 분석 트리가 있으므로 각각 다른 계산 그래프가 필요합니다. 즉 정적 계산 그래프를 사용한 훈련은 단일 인스턴스 훈련 만 허용합니다. 이와 유사한 예는 재귀 신경망 입니다.


0

많은 심층 신경망에는 정적 데이터 흐름 그래프가 있는데, 이는 계산 구조 (계산 그래프)가 다른 입력에 대해 안정적으로 유지됨을 의미합니다. 이는 미니 배치 (한 번에 많은 입력을 처리)와 같은 성능을 위해이 기능을 활용할 수 있기 때문에 좋습니다.

그러나 일부 신경망은 각 입력마다 다른 계산 그래프를 가질 수 있습니다. 이로 인해 일부 문제 (배치 어려움, 그래프 구성이 계산 비용이 많이 소요됨)가 발생하므로 이러한 네트워크를 사용하기가 약간 어렵습니다.

연결하는 논문은 여러 계산 그래프를 하나로 묶을 수있는 방법을 제안하여이 문제를 극복합니다. 그런 다음 일반적인 NN 기술을 수행 할 수 있습니다.

이점은 속도 향상으로 연구원들이 다른 구조를 탐색하고 더 창의적으로 만들도록 장려합니다.

동적 계산 그래프의 장점은 입력 데이터의 다양한 수량에 적응하는 기능을 포함하는 것으로 보입니다. 훈련 중 각 입력 세트 인스턴스에 따라 레이어 수, 각 레이어의 뉴런 수, 활성화 기능 및 기타 NN 매개 변수가 자동으로 선택되는 것처럼 보입니다. 이것이 정확한 특성입니까?

이것은 올바르지 않습니다.


0

동적 계산 그래프는 더 높은 추상화 수준으로 간단하게 수정 된 CG입니다. 'Dynamic'이라는 단어는 모두 설명합니다. 그래프를 통해 데이터가 흐르는 방식은 입력 구조에 따라 다릅니다. 즉 DCG 구조는 변경 가능하며 정적이 아닙니다. 중요한 응용 프로그램 중 하나는 NLP 신경망에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.