다음을 통해 공유


Machine Learning Studio(클래식)용 Net# 신경망 사양 언어 가이드

적용 대상: 적용 대상Machine Learning Studio(클래식) 미적용 대상Azure Machine Learning

Important

Machine Learning Studio(클래식)에 대한 지원은 2024년 8월 31일에 종료됩니다. 해당 날짜까지 Azure Machine Learning으로 전환하는 것이 좋습니다.

2021년 12월 1일부터 새로운 Machine Learning Studio(클래식) 리소스를 만들 수 없습니다. 2024년 8월 31일까지는 기존 Machine Learning Studio(클래식) 리소스를 계속 사용할 수 있습니다.

ML Studio(클래식) 설명서는 사용 중지되며 나중에 업데이트되지 않을 수 있습니다.

Net#은 심층 신경망 또는 임의 차원의 복잡한 신경망 아키텍처를 정의하는 데 사용되는 Microsoft에서 개발한 언어입니다. 복잡한 구조를 사용하여 이미지, 비디오 또는 오디오와 같은 데이터에 대한 학습을 개선할 수 있습니다.

Machine Learning Studio(클래식)의 모든 신경망 모듈에서 Net# 아키텍처 사양을 사용할 수 있습니다.

이 문서에서는 Net#을 사용하여 사용자 지정 신경망을 개발하는 데 필요한 기본 개념과 구문을 설명합니다.

  • 신경망 요구 사항 및 기본 구성 요소를 정의하는 방법
  • Net# 사양 언어의 구문 및 키워드
  • Net을 사용하여 만든 사용자 지정 신경망의 예#

신경망 기본 사항

신경망 구조는 계층으로 구성된 노드와 노드 간의 가중 연결(또는 에지)으로 구성됩니다. 연결은 방향성이 있고 각 연결에는 원본 노드와 대상 노드가 있습니다.

학습 가능한 각 계층(숨겨진 계층 또는 출력 계층)에는 하나 이상의 연결 번들이 있습니다. 연결 번들은 원본 계층과 해당 원본 계층의 연결 사양으로 구성됩니다. 지정된 번들의 모든 연결은 원본 및 대상 계층을 공유합니다. Net#에서 연결 번들은 번들의 대상 계층에 속하는 것으로 간주합니다.

Net#에서는 입력이 숨겨진 계층 및 출력에 매핑되는 방법을 사용자 지정할 수 있는 다양한 종류의 연결 번들을 지원합니다.

기본 또는 표준 번들은 원본 계층의 각 노드가 대상 계층의 모든 노드에 연결되는 전체 번들입니다.

또한 Net#에서는 다음 네 가지 고급 연결 번들을 지원합니다.

  • 필터링된 번들. 원본 계층 노드 및 대상 계층 노드의 위치를 사용하여 조건자를 정의할 수 있습니다. 조건자가 True일 때마다 노드가 연결됩니다.

  • 나선형 번들. 사용자는 원본 계층에서 작은 노드 환경을 정의할 수 있습니다. 대상 계층의 각 노드는 원본 계층에 있는 노드의 한 이웃에 연결됩니다.

  • 번들 풀 링 및 응답 정규화 번들. 이러한 번들은 사용자가 원본 계층에서 작은 노드 환경을 정의하는 나선형 번들과 비슷합니다. 차이점은 이러한 번들에서 가장자리의 가중치는 학습할 수 없다는 것입니다. 대신 미리 정의된 함수가 원본 노드 값에 적용되어 대상 노드 값을 결정합니다.

지원되는 사용자 지정

Machine Learning Studio(클래식)에서 만드는 신경망 모델의 아키텍처는 Net#을 사용하여 광범위하게 사용자 지정할 수 있습니다. 마케팅 목록의 구성원을 관리할 수 있습니다.

  • 숨겨진 레이어를 만들고 각 계층의 노드 수를 제어합니다.
  • 계층이 서로 연결되는 방법을 지정합니다.
  • 나선형 및 가중치 공유 번들 같은 특수 연결 구조를 정의합니다.
  • 여러 가지 활성화 함수를 지정합니다.

사양 언어 구문에 대한 자세한 내용은 구조 사양을 참조하세요.

간단한 작업에서 복잡한 작업까지 몇 가지 일반적인 기계 학습 작업에 대한 신경망을 정의하는 예제는 예제를 참조 하세요.

일반 요구 사항

  • 정확히 하나의 출력 계층, 하나 이상의 입력 계층 및 0개 이상의 숨겨진 계층이 있어야 합니다.
  • 각 계층에는 임의의 차원의 사각형 배열에 개념적으로 정렬된 고정된 수의 노드가 있습니다.
  • 입력 계층에는 연결된 학습된 매개 변수가 없으며 인스턴스 데이터가 네트워크에 들어오는 지점을 나타냅니다.
  • 학습 가능한 계층(숨겨진 계층 및 출력 계층)에는 가중치 및 바이어스라고 하는 관련 학습된 매개 변수가 있습니다.
  • 원본 및 대상 노드는 별도의 계층에 있어야 합니다.
  • 연결은 순환적이어야 합니다. 즉, 초기 원본 노드로 다시 이어지는 연결 체인이 있을 수 없습니다.
  • 출력 계층은 연결 번들의 원본 계층일 수 없습니다.

구조 사양

신경망 구조 사양은 세 가지 섹션인 상수 선언, 계층 선언, 연결 선언으로 구성됩니다. 선택적 공유 선언 섹션도 있습니다. 섹션은 순서대로 지정할 수 있습니다.

상수 선언

상수 선언은 선택 사항입니다. 신경망 정의의 다른 곳에서 사용되는 값을 정의하는 방법을 제공합니다. 선언문은 식별자, 등호, 값 식 순으로 구성됩니다.

예를 들어 다음 문은 상수 x()를 정의합니다.

Const X = 28;

둘 이상의 상수는 동시에 정의하려면 식별자 이름과 값을 중괄호로 묶고 세미콜론을 사용하여 구분합니다. 예시:

Const { X = 28; Y = 4; }

각 대입 식의 오른쪽은 정수, 실수, 부울 값(True 또는 False) 또는 수학 식일 수 있습니다. 예시:

Const { X = 17 * 2; Y = true; }

레이어 선언

계층 선언이 필요합니다. 연결 번들 및 특성을 포함하여 계층의 크기와 원본을 정의합니다. 선언문은 계층 이름(input, hidden 또는 output)으로 시작하고 계층 차원(양의 정수 튜플)이 뒤따릅니다. 예시:

input Data auto;
hidden Hidden[5,20] from Data all;
output Result[2] from Hidden all;
  • 차원의 곱은 계층의 노드 수입니다. 이 예제에 있는 차원 두 개 [5,20]은 계층에 노드 100개가 있음을 의미합니다.
  • 한 가지 예외를 제외하고 계층을 순서대로 선언할 수 있습니다. 둘 이상의 입력 계층이 정의된 경우 선언되는 순서는 입력 데이터의 기능 순서와 일치해야 합니다.

레이어의 노드 수를 자동으로 결정하도록 지정하려면 키워드를 auto 사용합니다. 키워드는 auto 계층에 따라 다른 효과를 줍니다.

  • 입력 계층 선언에서 노드 수는 입력 데이터의 기능 수입니다.
  • 숨겨진 계층 선언에서 노드 수는 숨겨진 노드 수에 대한 매개 변수 값으로 지정된 수입니다.
  • 출력 계층 선언에서 노드 수는 2클래스 분류의 경우 2, 회귀의 경우 1이며 다중 클래스 분류의 출력 노드 수와 같습니다.

예를 들어 다음 네트워크 정의를 사용하면 모든 계층의 크기를 자동으로 확인할 수 있습니다.

input Data auto;
hidden Hidden auto from Data all;
output Result auto from Hidden all;

학습 가능 계층(숨겨진 계층 또는 출력 계층)에 대한 계층 선언은 선택적으로 활성화 함수라는 출력 함수를 포함할 수 있습니다(기본값: 분류 모델의 경우 sigmoid, 회귀 모델의 경우 linear). 기본값을 사용하는 경우에도 명확성을 위해 원하는 경우 활성화 함수를 명시적으로 지정할 수 있습니다.

다음 출력 함수가 지원됩니다.

  • sigmoid
  • linear
  • softmax
  • rlinear
  • square
  • sqrt
  • srlinear
  • abs
  • tanh
  • brlinear

예를 들어 다음 선언에서는 softmax 함수를 사용합니다.

output Result [100] softmax from Hidden all;

연결 선언

학습 가능한 계층을 정의한 직후 정의한 계층 간에 연결을 선언해야 합니다. 연결 번들 선언은 키워드 from로 시작하고, 그 다음에는 번들의 원본 계층 이름과 만들 연결 번들의 종류가 옵니다.

현재 5가지 종류의 연결 번들이 지원됩니다.

  • 키워드로 표시된 전체 번들 all
  • 키워드where로 표시된 필터링된 번들 및 조건자 식
  • 키워드convolve로 표시된 컨볼루션 번들 뒤에 컨볼루션 특성이 잇습니다.
  • 최대 풀 또는 평균 풀 키워드로 표시된 풀 번들
  • 응답 표준 키워드로 표시된 응답 정규화 번들

전체 번들

전체 연결 번들은 원본 계층의 각 노드에서 대상 계층의 각 노드로의 연결을 포함합니다. 기본 네트워크 연결 유형입니다.

필터링된 번들

필터링된 연결 번들 사양은 구문상 C# 람다 식과 훨씬 비슷하게 표현된 조건자를 포함합니다. 다음 예제에서는 필터링된 두 번들을 정의합니다.

input Pixels [10, 20];
hidden ByRow[10, 12] from Pixels where (s,d) => s[0] == d[0];
hidden ByCol[5, 20] from Pixels where (s,d) => abs(s[1] - d[1]) <= 1;
  • 조건자ByRow에서 입력 s 계층의 노드 사각형 배열에 대한 인덱스를 나타내는 매개 변수이며 d 숨겨진 PixelsByRow계층의 노드 배열에 대한 인덱스를 나타내는 매개 변수입니다. sd 유형은 둘 다 길이가 2인 정수의 튜플입니다. 개념적으로, s 모든 정수 쌍 0 <= s[0] < 10 과 정수의 범위, d 0 <= s[1] < 20모든 정수 쌍에 대한 범위 및 0 <= d[0] < 10 0 <= d[1] < 12

  • 조건자 식의 오른쪽에는 조건이 있습니다. 이 예제에서는 조건이 True인 d 모든 값 s 에 대해 원본 계층 노드에서 대상 계층 노드로의 가장자리가 있습니다. 따라서 이 필터 식은 번들에 정의된 s 노드에서 s[0]이 d[0]인 모든 경우에 정의된 d 노드에 대한 연결이 포함되어 있음을 나타냅니다.

필요에 따라 필터링된 번들에 대한 가중치 집합을 지정할 수 있습니다. Weights 특성의 값은 번들에 의해 정의된 연결 수와 일치하는 길이가 있는 부동 소수점 값의 튜플이어야 합니다. 기본적으로 가중치는 임의로 생성됩니다.

가중치 값은 대상 노드 인덱스별로 그룹화됩니다. 즉, 첫 번째 대상 노드가 K 원본 노드에 연결된 경우 Weights 튜플의 첫 번째 K 요소는 원본 인덱스 순서의 첫 번째 대상 노드에 대한 가중치입니다. 나머지 대상 노드에도 동일하게 적용됩니다.

가중치를 상수 값으로 직접 지정할 수 있습니다. 예를 들어 이전에 가중치를 학습한 경우 다음 구문을 사용하여 상수로 지정할 수 있습니다.

const Weights_1 = [0.0188045055, 0.130500451, ...]

나선형 번들

학습 데이터에 동질적인 구조가 있는 경우 일반적으로 나선형 연결은 데이터의 상위 수준 기능을 학습하는 데 사용됩니다. 예를 들어 이미지, 오디오 또는 비디오 데이터에서 공간 또는 임시 차원은 상당히 균일할 수 있습니다.

나선형 번들은 차원을 통해 미끄러지는 사각형 커널 을 사용합니다. 기본적으로 각 커널은 로컬 환경에 적용되는 커널 애플리케이션이라는 가중치 집합을 정의합니다. 각 커널 애플리케이션은 원본 계층의 노드에 해당하며 중앙 노드라고 합니다. 커널의 가중치는 여러 연결 간에 공유됩니다. 나선형 번들에서 각 커널은 직사각형이며 모든 커널 애플리케이션의 크기는 동일합니다.

나선형 번들은 다음 특성을 지원합니다.

InputShape 는 이 나선형 번들의 목적을 위해 원본 계층의 차원을 정의합니다. 값은 양의 정수 튜플이어야 합니다. 정수의 곱은 원본 계층의 노드 수와 같아야 하지만 그렇지 않으면 원본 계층에 대해 선언된 차원과 일치할 필요가 없습니다. 이 튜플의 길이는 나선형 번들의 경도 값이 됩니다. 일반적으로 인자 수는 함수가 사용할 수 있는 인수 또는 피연산자 수를 나타냅니다.

커널의 셰이프와 위치를 정의하려면 KernelShape, Stride, Padding, LowerPad, UpperPad 특성을 사용합니다.

  • KernelShape: (필수) 나선형 번들에 대한 각 커널의 차원을 정의합니다. 값은 번들의 진수와 같은 길이를 가진 양의 정수 튜플이어야 합니다. 이 튜플의 각 구성 요소는 InputShape해당 구성 요소보다 크지 않아야 합니다.

  • Stride: (선택 사항) 중앙 노드 사이의 거리인 나선형의 슬라이딩 단계 크기(각 차원에 대해 한 단계 크기)를 정의합니다. 값은 번들의 진수인 길이를 가진 양의 정수 튜플이어야 합니다. 이 튜플의 각 구성 요소는 KernelShape의 해당하는 구성 요소보다 크지 않아야 합니다. 기본값은 모든 구성 요소가 1인 튜플입니다.

  • 공유: (선택 사항) 나선형의 각 차원에 대한 가중치 공유를 정의합니다. 값은 단일 부울 값 또는 길이가 번들 인자 수인 부울 값 튜플일 수 있습니다. 단일 부울 값은 모든 구성 요소가 지정된 값과 같은 올바른 길이의 튜플로 확장됩니다. 기본값은 모든 True 값으로 구성된 튜플입니다.

  • MapCount: (선택 사항) 나선형 번들에 대한 기능 맵 수를 정의합니다. 값은 단일 양의 정수이거나 길이가 번들 인자 수인 양의 정수 튜플일 수 있습니다. 단일 정수 값은 첫 번째 구성 요소가 지정된 값과 같고 나머지 모든 구성 요소가 1과 같은 올바른 길이의 튜플로 확장됩니다. 기본값은 1입니다. 기능 맵의 총 수는 튜플 구성 요소의 곱입니다. 전체 구성 요소에서 이 총 맵 수를 인수 분해하여 대상 노드에서 기능 맵 값을 그룹화하는 방법을 결정합니다.

  • 가중치: (선택 사항) 번들에 대한 초기 가중치를 정의합니다. 이 값은 이 문서의 뒷부분에서 정의한 대로 커널당 가중치의 횟수의 커널 수인 길이가 있는 부동 소수점 값의 튜플이어야 합니다. 기본 가중치는 임의로 생성됩니다.

안쪽 여백을 제어하는 두 가지 속성 집합이 있습니다. 속성은 상호 배타적입니다.

  • Padding: (선택 사항) 기본 패딩 체계를 사용하여 입력의 안쪽 여백을 지정해야 할지를 결정합니다. 값은 단일 부울 값이거나 번들의 진수인 길이가 있는 부울 값의 튜플일 수 있습니다.

    단일 부울 값은 모든 구성 요소가 지정된 값과 같은 올바른 길이의 튜플로 확장됩니다.

    차원의 값이 True이면 원본은 해당 차원의 첫 번째 및 마지막 커널의 중앙 노드가 원본 계층에서 해당 차원의 첫 번째 및 마지막 노드가 되도록 추가 커널 애플리케이션을 지원하기 위해 값이 0인 셀이 있는 해당 차원에 논리적으로 패딩됩니다. 따라서 각 차원의 "더미" 노드 수는 패딩된 원본 계층에 정확히 (InputShape[d] - 1) / Stride[d] + 1 커널을 맞추기 위해 자동으로 결정됩니다.

    차원의 값이 False이면 커널이 정의되므로 각 쪽에서 제외된 노드 수가 동일합니다(최대 1의 차이). 이 특성의 기본값은 모든 구성 요소가 False와 같은 튜플입니다.

  • UpperPadLowerPad: (선택 사항) 사용할 안쪽 여백의 양을 더 크게 제어할 수 있습니다. 중요: 위의 패딩 속성이 정의되지 않은 경우에만 이러한 특성을 정의할 수 있습니다. 값은 번들의 진수인 길이가 있는 정수 반환 튜플이어야 합니다. 이러한 특성을 지정하면 "더미" 노드가 입력 계층에 있는 각 차원의 아래쪽 및 위쪽 끝에 추가됩니다. 각 차원의 아래쪽 및 상한에 추가된 노드 수는 LowerPad[i] 및 UpperPad[i]에 의해 각각 결정됩니다.

    커널이 "더미" 노드가 아닌 "실제" 노드에만 해당하도록 하려면 다음 조건을 충족해야 합니다.

    • LowerPad각 구성 요소는 엄격하게 .보다 KernelShape[d]/2작아야 합니다.

    • UpperPad각 구성 요소는 을 초과KernelShape[d]/2하지 않아야 합니다.

    • 이러한 특성의 기본값은 모든 구성 요소가 0인 튜플입니다.

      Padding = true로 설정하면 최대한 많은 안쪽 여백을 사용하여 "실제" 입력 내 커널의 "중심"을 유지할 수 있습니다. 그러면 출력 크기를 계산하기 위한 수학이 약간 변경되었습니다. 일반적으로 출력 크기 D는 입력 크기, I 커널 S 크기, K 보폭 및 / 정수 나누기(0으로 반올림)로 D = (I - K) / S + 1계산됩니다. UpperPad = [1, 1]을 설정하면 입력 크기 I 가 효과적으로 29이므로 D = (29 - 5) / 2 + 1 = 13. 그러나 Padding = true인 경우 기본적으로 IK - 1만큼 증가합니다. 따라서 D = ((28 + 4) - 5) / 2 + 1 = 27 / 2 + 1 = 13 + 1 = 14입니다. UpperPad 및 LowerPad에 대한 값을 지정하면 Padding = true를 설정한 경우보다 안쪽 여백을 훨씬 더 잘 제어할 수 있습니다.

나선형 네트워크 및 해당 애플리케이션에 대한 자세한 내용은 다음 문서를 참조하세요.

풀링 번들

풀링 번들은 나선형 연결과 비슷한 기하 도형에 적용되지만 원본 노드 값에 대한 미리 정의된 함수를 사용하여 대상 노드 값을 도출합니다. 따라서 풀링 번들에는 학습 가능한 상태(가중치 또는 바이어스)가 없습니다. 풀링 번들은 공유, MapCount가중치를 제외한 모든 나선형 특성을 지원합니다.

일반적으로 인접 풀링 단위로 요약된 커널은 겹치지 않습니다. 각 차원에서 Stride[d]가 KernelShape[d]와 같으면 얻은 계층은 일반적으로 나선형 신경망에서 적용되는 기존 로컬 풀링 계층입니다. 각 대상 노드에서는 원본 계층에 있는 커널 활동의 최대값이나 평균을 계산합니다.

다음 예제에서는 풀링 번들을 보여 줍니다.

hidden P1 [5, 12, 12]
  from C1 max pool {
  InputShape  = [ 5, 24, 24];
   KernelShape = [ 1,  2,  2];
   Stride      = [ 1,  2,  2];
  }
  • 번들의 진부성은 3입니다. 즉, 튜플InputShapeKernelShape의 길이 및 Stride.
  • 원본 계층의 노드 수는 .입니다 5 * 24 * 24 = 2880.
  • KernelShapeStride가 같으므로 이는 기존 로컬 풀링 계층입니다.
  • 대상 계층의 노드 수는 .입니다 5 * 12 * 12 = 1440.

풀링 계층에 대한 자세한 내용은 다음 문서를 참조하세요.

응답 정규화 번들

응답 정규화는 딥 컨볼루션 신경망을 사용한 ImageNet 분류 논문에서 제프리 힌튼(Geoffrey Hinton 등)이 처음 도입한 로컬 정규화 체계입니다.

응답 정규화는 신경망에서 일반화를 지원하는 데 사용됩니다. 하나의 뉴런이 매우 높은 활성화 수준에서 발사되는 경우 로컬 응답 정규화 계층은 주변 뉴런의 활성화 수준을 억제합니다. 이 작업은 세 개의 매개 변수(α, β및) 및 k나선형 구조체(또는 이웃 모양)를 사용하여 수행됩니다. 대상 계층 y의 모든 뉴런은 원본 계층의 뉴런 x에 해당합니다. y의 활성화 수준은 다음 수식에 의해 지정됩니다. 여기서 f 뉴런 Nx 의 활성화 수준은 커널(또는 x의 인근에 있는 뉴런을 포함하는 집합)이며, 다음 나선형 구조에 의해 정의됩니다.

나선형 구조에 대한 수식

응답 정규화 번들은 공유, MapCount가중치를 제외한 모든 나선형 특성을 지원합니다.

  • 커널에서 x와 동일한 맵에 신경이 포함되면, 이 정규화 체계를 동일 맵 정규화라고 합니다. 동일한 맵 정규화를 정의하려면 InputShape의 첫 번째 좌표에 값 1이 있어야 합니다.

  • 커널에서 x와 동일한 공간 위치에 신경이 포함되지만 신경이 다른 맵에 있으면, 이 정규화 체계를 맵 간 정규화라고 합니다. 이 응답 정규화 유형은 실제 신경에 있는 유형에서 영향을 받은 측면 억제 형태를 구현하여 여러 맵에서 계산된 신경 출력 가운데 큰 활성화 수준에 대한 경쟁을 조성합니다. 지도 정규화를 통해 정의하려면 첫 번째 좌표가 1보다 크고 맵 수보다 크지 않은 정수여야 하며 나머지 좌표에는 값 1이 있어야 합니다.

응답 정규화 번들은 대상 노드 값을 결정하기 위해 소스 노드 값에 미리 정의된 함수를 적용하므로 학습 가능한 상태(가중치 또는 바이어스)가 없습니다.

참고 항목

대상 계층의 노드는 커널의 중앙 노드인 뉴런에 해당합니다. 예를 들어 KernelShape[d]가 홀수이면 KernelShape[d]/2는 중앙 커널 노드에 해당합니다. 짝수이면 KernelShape[d] 중앙 노드는 .에 있습니다 KernelShape[d]/2 - 1. 따라서 Padding[d]가 False이면 첫 번째 및 마지막 KernelShape[d]/2 노드에 해당하는 노드가 대상 계층에 없습니다. 이 상황을 방지하려면 Padding을 [true, true, ..., true]로 정의합니다.

앞에서 설명한 네 가지 특성 외에도 응답 정규화 번들은 다음 특성도 지원합니다.

  • 알파: (필수) 이전 수식에 해당하는 부동 소수점 값을 지정합니다 α .
  • Beta: (필수) 위의 공식에서 β에 해당하는 부동 소수점 값을 지정합니다.
  • 오프셋: (선택 사항) 이전 수식에 해당하는 부동 소수점 값을 지정합니다 k . 기본값은 1입니다.

다음 예제에서는 이러한 특성을 사용하여 응답 정규화 번들을 정의합니다.

hidden RN1 [5, 10, 10]
from P1 response norm {
  InputShape  = [ 5, 12, 12];
  KernelShape = [ 1,  3,  3];
  Alpha = 0.001;
  Beta = 0.75;
  }
  • 원본 계층에는 각각 12x12의 차원이 있는 5개의 맵이 포함되어 있으며 총 1440개의 노드가 있습니다.
  • KernelShape은 이 계층이 동일한 지도 정규화 계층임을 나타내며, 여기서 이웃은 3x3 사각형입니다.
  • Padding기본값은 False이므로 대상 계층에는 각 차원에 10개의 노드만 있습니다. 원본 계층의 모든 노드에 해당하는 하나의 노드를 대상 계층에 포함하려면 Padding = [true, true, true]를 추가합니다. RN1의 크기를 [5, 12, 12]로 변경합니다.

공유 선언

Net#은 필요에 따라 공유 가중치를 사용하여 여러 번들 정의를 지원합니다. 구조가 동일한 경우 두 번들의 가중치를 공유할 수 있습니다. 다음 구문은 공유 가중치가 있는 번들을 정의합니다.

share-declaration:
  share    {    layer-list    }
  share    {    bundle-list    }
  share    {    bias-list    }

  layer-list:
    layer-name    ,    layer-name
    layer-list    ,    layer-name

  bundle-list:
    bundle-spec    ,    bundle-spec
    bundle-list    ,    bundle-spec

  bundle-spec:
    layer-name    =>     layer-name

  bias-list:
    bias-spec    ,    bias-spec
    bias-list    ,    bias-spec

  bias-spec:
    1    =>    layer-name

  layer-name:
    identifier

예를 들어 다음 공유 선언은 계층 이름을 지정하여 가중치 및 편차를 둘 다 공유하도록 지정합니다.

Const {
  InputSize = 37;
  HiddenSize = 50;
  }
input {
  Data1 [InputSize];
  Data2 [InputSize];
  }
hidden {
  H1 [HiddenSize] from Data1 all;
  H2 [HiddenSize] from Data2 all;
  }
output Result [2] {
  from H1 all;
  from H2 all;
  }
share { H1, H2 } // share both weights and biases
  • 입력 기능은 두 개의 동일한 크기의 입력 계층으로 분할됩니다.
  • 숨겨진 계층은 두 입력 계층에서 더 높은 수준의 기능을 계산합니다.
  • 공유 선언은 개별 입력에서 같은 방법으로 H1H2를 계산하도록 지정합니다.

또는 다음과 같이 두 개의 개별 공유 선언으로 지정할 수 있습니다.

share { Data1 => H1, Data2 => H2 } // share weights
<!-- -->
    share { 1 => H1, 1 => H2 } // share biases

계층에 단일 번들이 포함되어 있을 때만 약식 양식을 사용할 수 있습니다. 일반적으로 관련 구조가 동일한 경우에만 공유가 가능합니다. 즉, 크기가 같고 나선형 기하 도형이 같아야 합니다.

Net# 사용의 예

이 섹션에서는 Net#을 사용하여 숨겨진 레이어를 추가하고, 숨겨진 레이어가 다른 레이어와 상호 작용하는 방식을 정의하고, 나선형 네트워크를 빌드하는 방법에 대한 몇 가지 예를 제공합니다.

간단한 사용자 지정 신경망 정의: "헬로 월드" 예제

이 간단한 예제에서는 숨겨진 레이어가 하나 있는 신경망 모델을 만드는 방법을 보여 줍니다.

input Data auto;
hidden H [200] from Data all;
output Out [10] sigmoid from H all;

이 예제에서는 다음과 같은 몇 가지 기본 명령을 보여 줍니다.

  • 첫 번째 줄은 입력 계층(이름) Data을 정의합니다. auto 키워드를 사용하는 경우 신경망에 입력 예제의 모든 기능 열이 자동으로 포함됩니다.
  • 두 번째 줄은 숨겨진 레이어를 만듭니다. 이름은 H 200개의 노드가 있는 숨겨진 계층에 할당됩니다. 이 계층은 입력 계층에 완전히 연결됩니다.
  • 세 번째 줄에서는 이름이 Out이고 출력 노드 10개가 포함된 출력 계층을 정의합니다. 신경망이 분류에 사용되는 경우 클래스당 하나의 출력 노드가 있습니다. 시그모이드 키워드는 출력 함수가 출력 계층에 적용됨을 나타냅니다.

숨겨진 여러 레이어 정의: Computer Vision 예제

다음 예제에서는 여러 사용자 지정 숨겨진 계층을 사용하여 약간 더 복잡한 신경망을 정의하는 방법을 보여 줍니다.

// Define the input layers
input Pixels [10, 20];
input MetaData [7];

// Define the first two hidden layers, using data only from the Pixels input
hidden ByRow [10, 12] from Pixels where (s,d) => s[0] == d[0];
hidden ByCol [5, 20] from Pixels where (s,d) => abs(s[1] - d[1]) <= 1;

// Define the third hidden layer, which uses as source the hidden layers ByRow and ByCol
hidden Gather [100]
{
from ByRow all;
from ByCol all;
}

// Define the output layer and its sources
output Result [10]
{
from Gather all;
from MetaData all;
}

이 예제에서는 신경망 사양 언어의 몇 가지 기능을 보여 줍니다.

  • 구조체에는 두 개의 입력 계층과 Pixels MetaData.
  • 계층은 Pixels 대상 계층과 두 개의 연결 번들에 대한 원본 계층 ByRow 입니다 ByCol.
  • 계층 및 Gather Result 여러 연결 번들의 대상 계층입니다.
  • 출력 계층 Result은 두 연결 번들의 대상 계층입니다. 하나는 두 번째 수준의 숨겨진 계층을 대상 계층 Gather 으로, 다른 하나는 입력 계층을 대상 계층 MetaData 으로 사용합니다.
  • 숨겨진 계층 및 ByRow ByCol조건자 식을 사용하여 필터링된 연결을 지정합니다. 보다 정확하게, [x, y]에 있는 ByRow의 노드는 첫 번째 인덱스 좌표가 노드의 첫 번째 좌표인 x와 동일한 Pixels의 노드에 연결됩니다. 이와 마찬가지로 [x, y]에 있는 ByCol의 노드는 두 번째 인덱스 좌표가 노드의 두 번째 좌표인 y 중 하나 내에 있는 Pixels의 노드에 연결됩니다.

다중 클래스 분류를 위한 나선형 네트워크 정의: 숫자 인식 예제

숫자를 인식하도록 고안된 다음 네트워크 정의에서는 신경망 사용자 지정을 위한 몇 가지 고급 기법을 보여 줍니다.

input Image [29, 29];
hidden Conv1 [5, 13, 13] from Image convolve
  {
  InputShape  = [29, 29];
  KernelShape = [ 5,  5];
  Stride      = [ 2,  2];
  MapCount    = 5;
  }
hidden Conv2 [50, 5, 5]
from Conv1 convolve
  {
  InputShape  = [ 5, 13, 13];
  KernelShape = [ 1,  5,  5];
  Stride      = [ 1,  2,  2];
  Sharing     = [false, true, true];
  MapCount    = 10;
  }
hidden Hid3 [100] from Conv2 all;
output Digit [10] from Hid3 all;
  • 구조에는 단일 입력 계층인 Image가 있습니다.

  • 키워드 convolve 는 이름이 지정 Conv1 되고 Conv2 나선형 계층임을 나타냅니다. 이러한 각 계층 선언 뒤에는 나선형 특성 목록이 표시됩니다.

  • 그물에는 두 번째 숨겨진 계층 Hid3에 완전히 연결된 세 번째 숨겨진 계층 Conv2이 있습니다.

  • 출력 계층 Digit은 세 번째 숨겨진 계층 Hid3에만 연결됩니다. 키워드 all 는 출력 계층이 .에 완전히 연결되어 Hid3있음을 나타냅니다.

  • 나선 인자 수는 3이며, 튜플의 길이는 InputShape, KernelShape, Stride, Sharing입니다.

  • 커널당 가중치 수는 .입니다 1 + KernelShape\[0] * KernelShape\[1] * KernelShape\[2] = 1 + 1 * 5 * 5 = 26. 또는 26 * 50 = 1300.

  • 다음과 같이 숨겨진 각 계층의 노드를 계산할 수 있습니다.

    NodeCount\[0] = (5 - 1) / 1 + 1 = 5 NodeCount\[1] = (13 - 5) / 2 + 1 = 5 NodeCount\[2] = (13 - 5) / 2 + 1 = 5

  • 다음과 같이 계층의 선언된 차원([50, 5, 5])을 사용하여 총 노드 수를 계산할 수 있습니다. MapCount * NodeCount\[0] * NodeCount\[1] * NodeCount\[2] = 10 * 5 * 5 * 5

  • Sharing[d] 에 대해서만 d == 0False이므로 커널 수는 .입니다MapCount * NodeCount\[0] = 10 * 5 = 50.

승인

신경망 아키텍처를 사용자 지정하기 위한 Net# 언어는 Shon Katzenberger(설계자, Machine Learning) 및 Alexey Kamenev(소프트웨어 엔지니어, Microsoft Research)가 Microsoft에서 개발했습니다. 이미지 검색에서 텍스트 분석에 이르는 기계 학습 프로젝트 및 애플리케이션에 내부적으로 사용됩니다. 자세한 내용은 Machine Learning 스튜디오의 신경망 - Net 소개를 참조 하세요.#