노드 그래프 아키텍처

Node graph architecture

노드 그래프 아키텍처노드 그래프의 개념을 중심으로 구성된 소프트웨어 설계다.사용자 인터페이스뿐만 아니라 소스 코드도 원자 기능 단위의 편집과 구성(또는 연결)을 중심으로 설계된다.

소프트웨어 응용 프로그램의 소스 코드는 노드라고 하는 원자 기능 단위로 구성된다.이는 일반적으로 모든 노드의 기본 클래스에서 파생된 클래스를 사용하여 수행된다.각 노드는 입력과 출력을 가질 수 있으며, 일반적으로 모든 입력과 출력에 대해 기본 클래스에서 파생된 클래스를 사용하여 구현된다.출력 및 입력은 일반적으로 다른 출력 또는 입력의 인스턴스에 대한 포인터를 잡음으로써 서로 참조할 수 있다.노드는 기능을 실행할 때 입력에 저장된 포인터를 따라 자신의 입력을 검색하여 다른 노드에 의한 데이터 출력을 검색한다.그런 다음 노드는 자체 출력을 생성하기 위해 이러한 입력에 대한 작동을 실행한다.이러한 방식으로 노드를 함께 연결하는 능력은 복잡한 작업이나 문제를 이해하기 쉬운 원자성 결절 단위로 세분할 수 있게 해준다.

소프트웨어 애플리케이션사용자 인터페이스는 종종 사용자에게 노드 그래프를 시각적으로 표시한다.이는 종종 GPU를 사용하여 사용자에게 바탕 화면에 표시되는 렌더링을 수행함으로써 이루어진다.GPU의 공통 APIOpenGLDirectX이다.노드는 직사각형으로 그려지는 경우가 많고, 노드 간의 연결은 선이나 스플라인으로 그려진다.

노드 그래프 구조의 사용은 1960년대에 시작되었다.[citation needed]오늘날 노드 그래프의 사용은 폭발적으로 증가했다.그래픽, 게임머신러닝 분야는 노드 그래프 아키텍처를 사용하는 도구가 대부분인 이 소프트웨어 설계의 주요 채택자들이다.[citation needed]

오늘날까지 시각적 프로그래밍과 노드 그래프 아키텍처의 이점에 대해 약간의 논쟁이 있다.옹호자들은 노드 그래프가 제공하는 추상화가 도구를 사용하기 쉽게 만드는 방법을 강조한다.비평가들은 비주얼 프로그래밍이 너무 제한적이고, 그들의 임무를 수행하기 위해 소스 코드나 스크립트를 수정하는데 어떻게 의존해야 하는지를 강조한다.

역사

대부분소프트웨어 애플리케이션에서 모든 노드 그래프 사용자 인터페이스의 스냅샷을 수집하려는 Eric Hosick의 노력이 계속되고 있다.노드 그래프 사용자 인터페이스의 초기 루트부터의 진화 및 폭발을 기록하기 위한 노력.이 비주얼 히스토리는 Visual Programming Language - Snapshots라는 블로그 페이지에서 호스팅된다.노드 그래프 구조와 시각 프로그래밍으로 이어지는 작업은 "인간-기계 통신"이라고 알려진 영역에서 1960년대에 시작된 것으로 보인다.

William Robert Sutherland의 MIT 논문(1966)에서 그는 2D 그림 언어를 중심으로 주제를 설명하고 분석한다.이는 데이터 흐름 기반 워크플로우 또는 프로그램에서의 첫 번째 조사 중 하나이다.그 이후로 그의 논문은 오늘날 데이터 흐름 아이디어에 대한 소송을 잠재우기 위해 "사전 예술"로 사용되어 왔다.그의 작품은 흔히 오늘날 컴퓨터 보조 디자인(CAD)으로 알려진 것에 대한 길을 이끈 것으로 여겨진다.

  1. 그림 프로그램은 평행 과정을 자연스럽게 표현하는 방법이다.그 언어의 2차원적 특성은 동시에 일어나는 많은 일들을 시각화하는 데 도움을 준다.[1]
  2. 디버깅 프로그램, 특히 병렬 프로그램들의 용이성은 화보 언어 형태에 의해 향상될 것이다.데이터 프로브를 부착할 수 있고 프로그램 실행을 볼 수 있다는 것은 다른 어떤 방법으로도 얻기 어려운 세부 사항을 파악할 수 있게 해준다.[1]
  3. 프로그램 실행은 일반적인 명시적 순차적 흐름 규약에 의해 통제될 필요는 없다.프로그램을 통한 데이터 이동이 그 작동을 결정할 수 있다.데이터 제어 관례는 그래픽 프로그램이 어떻게 작동해야 하는지에 대한 직관적인 아이디어에 근접하며, 또한 명시적인 흐름 지정 없이 병렬 프로그래밍을 허용한다.[1]

1969년, T. O. 엘리스, J. F.Heafner와 W. L. Sibley는 GRAIL (Graphical Input Language)에 관한 논문을 발표했다.이들의 작업은 이반 서덜랜드가 태블릿에 직접 컴퓨터 명령을 쓸 수 있는 시스템인 스케치패드에 대한 연구로 시작된 랜드 태블릿과 관련이 있었다.GRAIL 시스템은 플로우차트 기반의 그래픽 프로그래밍 언어를 사용했으며 손으로 쓴 글자와 제스처를 인식할 수 있었다.[2]Alan KayGRAIL 시스템에 대해 많은 데모를 주었지만, 그는 이 시스템의 생성에 관여하지 않았다.

  1. GRAIL 시스템에서 중요한 조직 개념은 제어의 순차적 흐름, 서브루틴의 계층, 그리고 처음 두 개념의 개념 안에서 조직을 그림으로 연관시키기 위한 언어(흐름도)이다.[2]
  2. 제어의 순차적 특성은 남자가 특정 기능에 적응하는 격리된 프로세스를 상상할 수 있게 한다. 즉, 조직자는 관리 가능한 하위 파트의 관점에서 전체 프로그램을 생각할 수 있게 한다.[2]
  3. 서브루틴 계층 구조는 고립된 프로세스의 개념을 더욱 강하게 강조한다.[2]
  4. 흐름도는 이러한 상호관계를 2차원으로 표현함으로써 인간이 자신의 제어 옵션과 프로세스 간의 관계를 그려내는 데 도움을 준다.[2]
블렌더 노드 그래프, 2006

노드 그래프 아키텍처의 최근 사용 중 일부는 2005년경에 시작되었다.이 시간대의 노드 그래프는 노드 그래프의 복잡성을 다루기 위한 패러다임을 개발하기 시작한다.그래프의 노드와 링크 수가 증가함에 따라 복잡성이 증가하였다.복잡성을 다루는 주요 아이디어 중 하나는 그룹이나 패키지 노드의 개념으로, 그 안에 노드를 숨기고 그룹의 입력과 출력만 노출하는 것이었다.

추상화 및 복잡성

소프트웨어 아키텍처의[3] 계층적 작은 세계라는 논문에서 저자인 Sergi Valverde는 대부분의 대형 소프트웨어 시스템은 모듈형, 계층형 방식으로 구축되며 노드 그래프를 사용하여 대형 소프트웨어 시스템을 분석할 수 있다고 주장한다.다른 많은 소프트웨어 분석 논문은 노드 그래프를 사용하여 대형 소프트웨어 시스템을 분석하는 경우가 많은데, 노드 그래프가 소프트웨어의 내부 구조와 작동에 좋은 모델임을 시사한다.[4]

비주얼 프로그래밍 토론

노드 그래프는 보다 광범위한 비주얼 프로그래밍 언어의 하위 집합이다.노드 그래프를 사용하면 소스 코드 작성 대신 시각적이고 구조적인 방식으로 프로그램을 설계할 수 있다.영화비디오 게임 산업에서 노드 그래프는 시각 프로그래밍과 동의어다.현재 노드 그래프와 시각 프로그래밍 언어의 힘, 추상화, 필요성에 대한 논쟁이 있다.

  • 비주얼 프로그래밍의 옹호자들은 그것이 어떻게 프로그래밍을 단순화하는지 강조한다. 왜냐하면 그것은 많은 세부사항을 추상화하고 그들의 영역에 필요한 통제만을 노출하기 때문이다.[5]이러한 제어는 동작과 노드 사이의 링크를 제어하는 노드의 매개변수다.
  • 비주얼 프로그래밍 비평가들은 일반적으로 어떻게 그것이 충분한 제어를 제공하지 않는지, 그리고 어떻게 더 복잡한 작업을 위해 소스 코드를 작성하는 것이 필요하게 되는지를 강조한다.[6]그러나 이러한 보다 복잡한 작업은 노드 그래프의 의도된 용도나 도메인을 벗어나는 경우가 많다.

이것은 오늘날까지 공개 포럼에서 새로운 논의가 일어나고 있는 활발한 토론 영역으로 남아 있다.다음은 현재까지 가장 큰 몇 가지 논의 사항이다.

연구 연구는 이러한 논의에 대해 더 많은 세부사항을 제시하고 노드 그래프의 장단점을 더 많이 부각시키는 경향이 있다.그들은 새로운 사용자들에게 노드 그래프와 시각적 프로그래밍은 이해하기 쉽지만, 사용자들이 더 복잡한 작업으로 이동함에 따라 텍스트 소스 코드를 작성하는 것에 의존할 필요가 있다는 것을 나타낸다.[7]또 다른 조사에서는 전문 프로그래머들이 시각 프로그래밍에 가장 회의적이라는 것을 발견한 시각 프로그래밍의 인지적 효과에 대한 사람들의 믿음에 초점을 맞추고 있다.[8]다른 연구들은 심리학적 실험에서 시각적 프로그래밍이 인지 과제의 수행에 상당한 긍정적인 영향을 미칠 수 있다는 것을 보여주었다.[9]

노드 그래프

예제 노드 그래프

소프트웨어 아키텍처의 맥락에서 노드 그래프는 노드라고 알려진 원자 단위로 소프트웨어 기능성의 조직을 말하며, 노드는 링크를 통해 서로 연결될 수 있다.노드 그래프의 노드와 링크의 조작은 프로그램 가능한 API나 마우스를 이용하여 시각적 인터페이스를 통해 이루어질 수 있는 경우가 많다.위의 다이어그램에서 노드 그래프가 오른쪽에 나타난다.

현대의 용어로 "노드 그래프"라는 용어는 개방된 복합어다.그러나, 오래된 소프트웨어에서는 그것을 닫힌 합성어인 "노드그래프"라고 불렀다.

노드

노드는 어떤 종류의 계산을 수행한다.그들은 이 실행 가능한 기능을 캡슐화하며 종종 실행의 부산물로서 입력을 취하고 출력을 생산한다.간단한 예로 두 개의 숫자를 함께 추가하는 노드를 들 수 있다.입력은 추가할 두 개의 숫자와 출력은 두 개의 숫자의 합이다.

노드는 다음 형태의 수학적 함수와 유사하다.

여기서 d (는) 노드의 연산이며, t d A 은(는) 노드의 입력 값과 p u u t d 의 벡터다.은(는) 노드의 출력 값의 벡터다.

시각적 노드는 직사각형으로 표현되는 경우가 많다.그러나 이는 모든 신청이 따르는 규약이 아니다.위의 다이어그램에는 "비디오", "별 추가" 및 "원 추가"라는 세 개의 노드가 표시되어 있다.

노드 매개 변수

노드에는 종종 실행을 정의하는 추가 매개 변수가 있다.이러한 매개변수는 노드의 소스 코드에 있는 데이터 유형에 의해 백업된다.

수학적으로 그것들은 노드의 계산 기능에 대한 추가 입력값으로 생각할 수 있다.유일한 차이점은 이러한 값들이 실행의 부산물로 다른 노드에 의해 출력되는 대신 사용자에 의해 직접 제어된다는 것이다.예를 들어, 위의 간단한 예에서, 두 개의 숫자를 추가하는 노드에 대한 바이어스 파라미터를 도입하여 노드가 추가 고정 숫자를 합에 추가할 수 있도록 할 수 있다.

시각적으로 노드의 매개변수는 사용자가 노드를 클릭한 후 노출되는 경우가 많다.이렇게 하면 노드 그래프를 시각적으로 복잡하게 만드는 것을 줄일 수 있다.위의 다이어그램에서 "별 추가" 노드 옆에 파라미터 창이 열리는 것을 볼 수 있다.

노드 입력 및 출력

노드에는 위에서 설명한 것처럼 입력과 출력이 있는 경우가 많다.입력과 출력은 노드의 소스 코드에 있는 데이터 유형에 의해 뒷받침된다.입력과 출력은 노드의 실행 전후에 값을 저장하는 데 중요하다.

수학적으로 노드의 입력과 출력은 함수의 입력과 출력 값과 유사하다.

여기서 d (는) 노드의 연산이며, t d A 은(는) 노드의 입력 값과 p u u t d 의 벡터다.은(는) 노드의 출력 값의 벡터다.

시각적으로 노드의 입력과 출력은 종종 원으로 표현된다.

노드 링크

링크는 데이터 유형에 저장된 값을 서로 다른 노드 간에 전송한다.그것들은 수학적 구성과 유사하다.예를 들어, 노드 A가 노드 B에 출력을 공급하고 있다면, 이는 다음과 같이 수학적으로 표현될 수 있다.

u t = B( d ( s A)

여기서 d }은(는) 노드 B와 노드 A가 수행하는 작업으로, p t n d 은(는) 노드 A의 입력값의 벡터, u t n d 은 노드 B의 출력값의 벡터다.

노드 유형

노드 유형은 실행될 때 수행할 컴퓨팅 작업을 나타낸다.노드 그래프에는 여러 가지 노드 유형이 포함되는 경우가 많다.몇 가지 예는 다음과 같다.

  • 인기 있는 시각 효과 합성 프로그램인 Nuke에는 수백 개의 노드가 포함되어 있다.[10]컴포지팅과 관련된 각각의 특정한 작업을 수행한다.
  • 인기 있는 룩과 조명 소프트웨어인 카타나에는 수백 개의 노드가 포함되어 있다.[11]조명 컴퓨터 그래픽 씬(scene)과 관련된 특정 작업을 수행하는 각 작업
  • 인기 있는 3D 페인팅 소프트웨어인 Mari는 수백 개의 노드를 포함하고 있다.[12]3D 도장과 관련된 특정 작업을 수행하는 각 작업.

복잡성 관리를 위한 가장 중요한 노드 유형은 그룹 노드다.이 노드 유형은 소프트웨어 코드를 다른 노드와 동일하게 실행하지 않는다.이 노드는 단순히 연결된 노드의 서브셋을 함께 그룹화하고 그룹 내외부의 입력과 출력을 관리한다.이것은 그룹 노드 내부의 복잡성을 숨기고 그룹 외부의 다른 노드와의 결합을 제한한다.이는 작은 그래프가 그룹 노드에 포함된 계층 구조로 이어진다.다음은 연결된 노드의 서브셋을 그룹화하고 그래프를 단순화하는 데 사용되는 그룹 노드의 예들이다.

  • Nuke의 그룹 노드.[13]
  • 카타나의 그룹 노드.[14]

사용자 인터페이스

노드 그래프 아키텍처를 사용하는 소프트웨어 애플리케이션은 일반적으로 노드 그래프를 시각적으로 또는 그래픽으로 사용자에게 노출시켜 사용자가 노드 그래프를 변경할 수 있게 한다.사용자는 일반적으로 마우스를 사용하여 다음을 수행할 수 있다.

  • 새 노드 생성
  • 노드의 매개 변수 편집
  • 노드를 함께 연결하십시오.
  • 그래프를 특정 노드까지 평가
  • 노드의 현재 출력 값 보기

노드 그래프의 사용이 증가함에 따라, 현재 사용자 친화적인 인터페이스를 만드는 것에 대한 관심이 증가하고 있다.종종 이러한 새로운 인터페이스는 사용자 인터페이스 전문가와 그래픽 디자이너에 의해 설계되고 있다.다음은 아티스트와 디자이너가 설계한 일부 사용자 인터페이스다.

지시된 Acyclic 그래프

지시된 활성 그래프 예제

그래프 이론의 많은 이론적 결과는 특히 위상에 관한 노드 그래프에 적용된다.Nodes가 함께 연결되어 그래프를 형성하는 이 주제 영역은 잘 연구된다.

노드 그래프 평가 중 특정 관심 영역은 사이클이다.노드 그래프에 사이클이 존재할 경우, 다음 링크를 통해 노드가 지속적으로 실행되므로 평가가 결코 끝나지 않는다.이러한 문제를 피하기 위해 많은 노드 그래프 아키텍처는 지시된 반복 그래프라고 알려진 그래프의 하위 집합으로 스스로를 제한한다.

컴퓨터 그래픽에서 사용

노드 그래프 기반 사용자 인터페이스의 예

소프트웨어 디자인에서 노드 그래프 아키텍처를 사용하는 것은 특히 영화비디오 게임 산업에서 인기가 있다.위 도표는 비디오 편집 및 제작을 위한 예술적 도구를 위한 간단한 사용자 인터페이스를 보여준다.노드는 직사각형으로 표시되며 곡선을 통해 서로 연결된다(베지어 곡선).이 소프트웨어의 운영 모델에서, 비디오 시퀀스가 라인을 통과하여 다음 노드로 전달되고 있으며, 각 노드는 비디오 시퀀스에 대해 약간의 추가 수정을 수행한다.이 예에서 한 비디오는 2D로 번역되고, 다른 비디오는 픽셀화되며, 마지막으로 두 스트림이 병합된다.

다음은 영화 및 비디오 게임 산업에서 노드 그래프 아키텍처를 사용하는 소프트웨어의 몇 가지 예들이다.

기계 학습에 사용

단순 신경망층

소프트웨어 설계에서 노드 그래프 아키텍처의 사용은 최근 머신러닝 애플리케이션에서 매우 인기를 끌고 있다.위의 도표는 3개의 층으로 구성된 단순한 신경망을 보여준다.3개의 레이어는 입력 레이어, 숨겨진 레이어, 출력 레이어다.각 층의 원소는 가중치로서 다른 층의 가중치와 연결되어 있다.추론 중에 기계 학습 알고리즘은 이전 계층의 가중치에 대한 기능 평가 순서를 통해 출력 계층의 가중치를 평가한다.훈련 중에 기계학습 알고리즘은 손실 함수를 최소화하기 위해 최적화를 사용하며, 여기서 손실 함수는 출력 계층의 가중치와 기대값의 차이에 따라 달라진다.노드 그래프는 이러한 신경망 레이어를 시각화, 구성 및 디버그하는 데 사용된다.

노드 그래프의 그래픽 인터페이스가 없는 노드 그래프 아키텍처를 이용머신러닝 소프트웨어의 예는 다음과 같다.

노드 그래프 아키텍처를 이용머신러닝 소프트웨어의 몇 가지 예는 다음과 같다.

메모들

  1. ^ a b c Sutherland, William Robert (1966). The on-line graphical specification of computer procedures (Thesis). Massachusetts Institute of Technology. hdl:1721.1/13474?show=full.
  2. ^ a b c d e "GRAIL Graphical Input Language" (PDF).
  3. ^ Valverde, Sergi; Sole, Ricard V. (11 July 2003). "Hierarchical Small Worlds in Software Architecture". arXiv:cond-mat/0307278.
  4. ^ "Representation and Analysis of Software". CiteSeerX 10.1.1.394.4865. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  5. ^ "Visual Programming Doesn't Suck".
  6. ^ "Visual Programming - Why it's a Bad Idea". October 2018.
  7. ^ "Strengths and weaknesses of a visual programming language in a learning context with children" (PDF).
  8. ^ "Visual programming: the outlook from academia and industry". 1997. doi:10.1145/266399.266415. S2CID 18983760. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  9. ^ Blackwell, A.F. (1996). "Metacognitive theories of visual programming: what do we think we are doing?". Proceedings 1996 IEEE Symposium on Visual Languages. pp. 240–246. doi:10.1109/VL.1996.545293. ISBN 0-8186-7508-X. S2CID 36822160.
  10. ^ "Nuke Reference Guide". learn.foundry.com. Retrieved 2020-12-21.
  11. ^ "Katana Reference Guide". learn.foundry.com. Retrieved 2020-12-21.
  12. ^ "Mari Reference Guide". learn.foundry.com. Retrieved 2020-12-21.
  13. ^ "Nuke: Grouping Nodes with the Group Node". learn.foundry.com. Retrieved 2020-12-21.
  14. ^ "Katana: Grouping Nodes". learn.foundry.com. Retrieved 2020-12-21.

참조