KR20240017797A - 커널 확장 및 텐서 누적을 이용한 컨볼루션 - Google Patents

커널 확장 및 텐서 누적을 이용한 컨볼루션 Download PDF

Info

Publication number
KR20240017797A
KR20240017797A KR1020237040205A KR20237040205A KR20240017797A KR 20240017797 A KR20240017797 A KR 20240017797A KR 1020237040205 A KR1020237040205 A KR 1020237040205A KR 20237040205 A KR20237040205 A KR 20237040205A KR 20240017797 A KR20240017797 A KR 20240017797A
Authority
KR
South Korea
Prior art keywords
kernel
convolution
tensors
tensor
kernels
Prior art date
Application number
KR1020237040205A
Other languages
English (en)
Inventor
제이미 멘제이 린
야쉬 산제이 발가트
에드윈 종우 박
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Priority claimed from PCT/US2022/072709 external-priority patent/WO2022256814A1/en
Publication of KR20240017797A publication Critical patent/KR20240017797A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 개시내용의 특정 양상들은 커널 확장을 위한 기법들을 제공한다. 입력 데이터 텐서는 뉴럴 네트워크의 제1 계층에서 수신되고, 제1 커널에 대해 제1 컨볼루션이 수행되며, 제1 커널은 선호되는 사이즈보다 큰 사이즈를 갖는다. 제1 컨볼루션을 수행하는 것은, 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것 및 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 복수의 중간 텐서들을 누적하는 것을 포함한다.

Description

커널 확장 및 텐서 누적을 이용한 컨볼루션
[0001] 본 출원은, 2021년 6월 2일자로 출원된 미국 가특허 출원 제63/196,122호에 대한 이익 및 우선권을 주장하는, 2022년 6월 1일자로 출원된 미국 특허 출원 제17/805,021호에 대한 우선권을 주장하며, 상기 출원들의 전체 내용들은 인용에 의해 본원에 포함된다.
[0002] 본 개시내용의 양상들은 기계 학습 기법들에 관한 것이다.
[0003] 컨볼루션은 CNN(convolutional neural network) 모델들의 일부로서 포함하는, 아주 다양한 기계 학습 모델 아키텍처들에 사용되는 대중적인 기계 학습 프로세싱 연산이다. 예컨대, 컨볼루션들은, 특징들(feature)을 추출하기 위해 그리고 신호 프로세싱, 컴퓨터 비전, 자연어 프로세싱을 포함하는 아주 다양한 태스크(task)들을 가능하게 하기 위해 사용되었다.
[0004] CNN들은 통상적으로 (일부 경우들에서 필터들로 또한 지칭되는) 컨볼루션 커널(kernel)들의 세트를 사용하며, 여기서 각각의 커널은 입력 데이터 텐서(input data tensor)(또는 CNN 내의 특징 텐서들)에 적용되어, 대응하는 출력을 생성한다. 일반적으로, 더 큰 커널 사이즈들을 사용하는 것은 더 넓은 수용 필드를 초래하며, 이는 일부 응용들에서, 개선된 특징 추출을 초래할 수 있다.
[0005] 그러나, 컨볼루션은 상당한 수의 연산들(예컨대, 곱셈들 및 덧셈들)을 요구하는 계산-집약적인(compute-intensive) 프로세스이다. 커널 사이즈가 증가함에 따라, 컨볼루션 프로세스의 전력 소비 및 계산 복잡성도 증가한다.
[0006] 특정 하드웨어 컴포넌트들은 특정 커널 사이즈들에 대해 효율적으로 수행되도록 최적화되었지만, 일반적으로 이러한 컴포넌트들은 좁은 최적의 범위의 커널 사이즈들 이외의 커널 사이즈들의 경우 효율성이 훨씬 떨어지거나 심지어 호환성이 없다.
[0007] 따라서, 더 넓은 범위의 커널 사이즈들로 효율적인 기계 학습을 수행하기 위한 기법들이 필요하다.
[0008] 특정 양상들은 방법을 제공하며, 이 방법은, 뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신하는 단계; 및 제1 커널에 대해 제1 컨볼루션을 수행하는 단계 ― 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ― 를 포함하며, 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는, 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 단계, 및 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 복수의 중간 텐서들을 누적하는 단계를 포함한다.
[0009] 다른 양상들은, 전술된 방법들뿐만 아니라 본원에 설명된 방법들을 수행하도록 구성된 프로세싱 시스템들; 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 프로세싱 시스템으로 하여금, 전술된 방법들뿐만 아니라 본원에 설명된 방법들을 수행하게 하는 명령들을 포함하는 비일시적 컴퓨터 판독 가능 매체들; 전술된 방법들뿐만 아니라 본원에 추가로 설명된 방법들을 수행하기 위한 코드를 포함하는 컴퓨터 판독 가능 저장 매체 상에 구현된 컴퓨터 프로그램 제품; 및 전술된 방법들뿐만 아니라 본원에 추가로 설명된 방법들을 수행하기 위한 수단을 포함하는 프로세싱 시스템을 제공한다.
[0010] 다음의 설명 및 관련된 도면들은 하나 이상의 양상들의 특정한 예시적인 특징들을 상세하게 기술한다.
[0011] 첨부된 도면들은 하나 이상의 양상들의 특정 양상들을 도시하므로, 본 개시내용의 범위를 제한하는 것으로 간주되어서는 안 된다.
[0012] 도 1은 커널 확장을 사용한 예시적인 컨볼루션을 도시한다.
[0013] 도 2는 비중첩 커널 확장을 위한 예시적인 기법을 도시한다.
[0014] 도 3a는 중간 커널들을 이용한 커널 확장 및 누적을 위한 예시적인 기법을 도시한다.
[0015] 도 3b는 중간 커널들을 이용한 텐서 볼륨 시프팅 및 커널 확장을 위한 예시적인 기법을 도시한다.
[0016] 도 3c는 중간 커널들을 이용한 포인트별 누적(pointwise accumulation) 및 커널 확장을 위한 예시적인 기법을 도시한다.
[0017] 도 4a, 도 4b, 및 도 4c는 다양한 커널 사이즈들에 대한 예시적인 커널 확장들을 도시한다.
[0018] 도 5는 차원 변환(dimensionality transformation)을 사용한 커널 확장을 위한 예시적인 기법을 도시한다.
[0019] 도 6은 더 작은 커널 사이즈들에 최적화된 하드웨어를 사용하여 커널 컨볼루션을 수행하기 위한 방법을 예시하는 예시적인 흐름 다이어그램이다.
[0020] 도 7은 중간 커널들을 사용하여 컨볼루션을 수행하기 위한 방법을 예시하는 예시적인 흐름 다이어그램이다.
[0021] 도 8은 본 개시내용의 다양한 양상들을 수행하도록 구성되는 예시적인 프로세싱 시스템을 도시한다.
[0022] 이해를 용이하게 하기 위해, 가능한 경우, 도면들에 공통인 동일한 엘리먼트들을 지정하기 위해 동일한 참조 번호들이 사용되었다. 일 양상의 엘리먼트들 및 특징들이 추가 언급 없이 유리하게 다른 양상들에 포함될 수 있다는 것이 고려된다.
[0023] 본 개시내용의 양상들은, 큰 커널들이 더 작은 커널들을 위해 설계된 하드웨어 상에서 효율적으로 실행되는 것이 가능하게 하는 커널 확장을 위한 기법들을 제공한다.
[0024] 적어도 부분적으로는 큰 커널들을 사용하는 계산 복잡성으로 인해, 많은 기존 CNN들은 사이즈가 3(예컨대, 3×3) 또는 사이즈가 5(예컨대, 5×5)인 커널들에 대체로 의존한다. 따라서, 모델들이 데이터를 효율적으로 프로세싱할 수 있도록 보장하기 위해, 다양한 하드웨어 컴포넌트들이 이러한 일반적인 커널 사이즈들에 맞게 설계 및 최적화되었다. 그러나, 증가된 수용 필드들(및 일부 구현들에서는 개선된 정확성)을 달성하기 위해, 더 큰 커널들(예컨대, 7×7 또는 9×9)을 사용하는 것이 바람직할 수 있다.
[0025] 일부 기존 시스템들은 개별 커널 사이즈들에 대해 독립적인 하드웨어(예컨대, 산술 계산 데이터 경로들)를 배정함으로써 다수의 커널 사이즈들을 지원하려고 시도한다. 그러나, 이는 시스템에 대한 비용을 추가시키고, 일반적으로 추가 논리 게이트들(및 그에 따라 더 큰 하드웨어 또는 칩 면적)을 요구하지만, 또한 논리 게이트들에 대한 활용률을 저하시키고, 더 높은 전력 소비를 요구한다.
[0026] 다른 기존 접근법은 하드웨어에서 지원되는 다른(일반적으로 더 작은) 커널 사이즈를 이용하여 주어진(더 큰) 커널 사이즈에 대한 컨볼루션 근사치를 강제로 적용하여, 동일하지 않은 산술 함수들로 이어진다. 이는 성능을 저하시킬 수 있고, 일반적으로 통상적인 사용 사례들에서 바람직하지 않다.
[0027] 본 개시내용의 양상들은 특정의 선호되는 커널 사이즈에 대해 설계된 하드웨어가 다양한 커널 사이즈들(더 큰 커널들을 포함함)을 효율적으로 지원하는 것을 가능하게 하기 위해 커널 확장과 관련된 다양한 기법들을 제공한다. 즉, 본 개시내용의 양상들은 하드웨어 컴포넌트들에 의해 선호되는 더 작은 커널들이 더 큰 커널 사이즈들을 커버하도록 효율적이고 효과적으로 확장될 수 있게 한다. 일부 양상들에서, 고도로 최적화된 산술 데이터 경로들은 공통(하드웨어 선호) 컨볼루션 커널들(예컨대, 2×2, 3×3, 4×4, 또는 5×5)에 대해 배정되지만, 추가 경량 논리(light-weight logic)는 더 크거나 확장된 커널들(예컨대, 7×7, 9×9 등)에 대한 동일한 산술을 지원하는 데 사용된다.
[0028] 본 개시내용의 양상들은 작은 수의 추가 컴포넌트들만을 요구할 수 있기 때문에, 칩 면적 및 전력 소비는 낮게 유지되는 반면 시스템 유연성은 상당히 개선된다(더 큰 컨벌루션 커널들의 사용을 가능하게 함). 따라서, 더 넓은 어레이의 기계 학습 모델 아키텍처들이 구현될 수 있으며, 이는 (그러한 모델 아키텍처들을 구현하는 디바이스들 상에서) 디바이스 성능을 개선시킬 뿐만 아니라, 요즘 인기있는 것들과 비교하여 상이한 사이즈의 커널들을 사용할 수 있는 진화하는 아키텍처 설계들에 대해 그러한 디바이스들을 "미래 대비(future-proof)"를 돕는다.
[0029] 따라서, 본원에 설명된 양상들은 컨볼루션 하드웨어로 종래의 제한들을 극복하고, 다양한 기계 학습 모델들 및 시스템들의 성능을 개선한다.
커널 확장을 사용한 예시적인 컨볼루션
[0030] 도 1은 예시적인 컨볼루션 프로세스를 도시한다. 예시된 워크플로우(workflow)(100)에서, 컨볼루션 커널(115)은 출력 텐서(120)를 생성하기 위해 입력 텐서(105)와 컨볼루션된다(convolved). 일부 양상들에서, 입력 텐서(105)는 특징 맵 또는 특징 텐서(예컨대, 모델의 이전 계층으로부터 출력되는 경우)로 지칭될 수 있다. 이러한 입력 텐서(105)는 CNN의 이전 계층으로부터 수신될 수 있거나, CNN 모델에 대한 원래 입력으로 수신될 수 있다. 예시된 예에서, 입력 텐서(105) 내의 개별 엘리먼트들은 사각형들의 그리드에 의해 반영(reflect)된다. 이러한 예에서, 입력 텐서(105)는 10의 공간적 차원(spatial dimensionality)(예컨대, 높이 및 폭)을 갖는다. 그러나, 다양한 양상들에서, 입력 텐서(105)는 임의의 공간적 사이즈일 수 있고, 또한 깊이(예컨대, 채널) 차원(예컨대, 1 이상인 깊이)을 포함할 수 있다.
[0031] 예시된 바와 같이, 컨볼루션 프로세스는 일반적으로, 출력 텐서(120) 내의 대응하는 엘리먼트를 생성하기 위해, 커널(115)을 사용하여 입력 텐서(105) 내의 데이터 엘리먼트들의 세트를 프로세싱하는 것을 포함할 수 있다. 이러한 프로세스는 일부 양상들에서 입력 텐서(105)(또는 그의 엘리먼트들의 서브세트)를 커널(115)과 "컨볼루션하는 것(convolving)"으로 지칭될 수 있다. 예시된 예에서, 엘리먼트들의 세트(110)(일부 양상들에서 패치 또는 수용 필드로 또한 지칭됨)는 출력 엘리먼트(125)를 생성하기 위해 커널(115)과 컨볼루션된다. 일부 양상들에서, 컨볼루션 프로세스는 엘리먼트들의 세트(110) 내의 각각의 엘리먼트를 커널(115) 내의 대응하는 엘리먼트와 곱하는 것을 포함한다.
[0032] 본원에 사용되는 바와 같이, 대응하는 엘리먼트들은, 커널(115)의 현재 포지션에 따라 정렬되는 입력 텐서(105) 내의 엘리먼트(또는 엘리먼트들의 세트(110)) 및 커널(115) 내의 엘리먼트로 지칭한다. 예컨대, 엘리먼트들의 세트(110) 내의 제7 엘리먼트(예시된 예에서 "a"로 라벨링됨)는 커널(115) 내의 제7 엘리먼트(예시된 예에서 "b"로 라벨링됨)와 곱해질 수 있다. 그런 다음, 그러한 각각의 곱셈의 결과적인 곱들이 출력 엘리먼트(125)를 생성하기 위해 합산되거나 그렇지 않으면 집계될 수 있다.
[0033] 일부 양상들에서, 커널(115)은 출력 텐서(120)를 생성하기 위해 입력 텐서(105)와 상이한 엘리먼트들의 세트들에 반복적으로(순차적으로 또는 병렬로) 적용될 수 있다. 이는 일반적으로 입력 텐서(105)에 걸쳐 커널(115)을 "스트라이드(striding)"하는 것으로 지칭될 수 있다.
[0034] 예시된 예에서, 커널(115)이 3×3이므로, 입력 텐서(105)의 패치에 커널(115)을 적용하는 것은 9 회의 곱셈들을 요구한다. 일부 하드웨어는 그러한 커널들 상에서 효율적으로 연산(예컨대, 9 회의 곱셈들을 병렬로 수행함)하도록 최적화되거나 그렇지 않으면 설계될 수 있다. 그러나, 커널(115)이 더 크면(예컨대, 5×5), 3×3 커널들 상에서 연산하도록 설계된 그러한 하드웨어는 상당한 비효율성을 갖고 수행될 수 있다(또는 전혀 수행되지 못할 수 있음). 예컨대, 하드웨어 컴포넌트들은 통상적으로 이용 가능한 자원들의 수(예컨대, 승수들, 레지스터 접근들 등)에 대한 제한을 갖는다.
[0035] 따라서, 본 개시내용의 양상들에서, 시스템은 컨볼루션이 선호되는 사이즈의 중간 커널들을 사용하여 수행될 수 있도록 하기 위해 커널을 더 작은 계산 프로세스들의 세트로 분해하거나 그렇지 않으면 세분할 수 있다. 다양한 양상들에서, 이는 일반적으로 중간 텐서들의 세트를 초래할 수 있으며, 이는 그런 다음 누적되어 컨볼루션 프로세스를 위한 최종 출력 텐서를 생성할 수 있다. 하드웨어에 대해 선호되는 커널 사이즈가 더 큰 커널 사이즈들로 효과적으로 확장되므로, 이는 일부 양상들에서 "커널 확장(kernel expansion)"으로 지칭될 수 있다.
[0036] 예컨대, 일 양상에서, 시스템은 비중첩 커널 확장을 사용하여 커널의 상이한 서브세트들을 순차적으로 또는 병렬로 프로세싱할 수 있다. 그러한 양상은 도 2를 참조하여 아래에서 더 상세하게 설명된다. 일 양상에서, 시스템은 도 3a-도 3c 및 도 4a-도 4c를 참조하여 아래에서 더 상세하게 설명되는 바와 같이, 더 작은 중간 커널들의 세트를 통해 (적소에(in place) 또는 포인트별 컨볼루션들을 사용하여) 커널 확장 및 누적을 사용할 수 있다. 일 양상에서, 시스템은 도 5를 참조하여 아래에서 더 상세하게 설명되는 바와 같이, 차원 변환들을 사용하여 커널의 차원을 수정할 수 있다.
비중첩 커널 확장을 위한 예시적인 기법
[0037] 도 2는 비중첩 커널 확장을 위한 예시적인 기법을 도시한다. 예시된 워크플로우(200)에서, 각각의 공간적 차원에서 사이즈가 5(예컨대, 5×5)인 컨볼루션 커널(205)이 특정 컨볼루션 단계에서 사용된다. 즉, 커널(205)은 CNN의 특정 계층에서 입력 텐서(예컨대, 입력 텐서(105))와 컨벌루션될 수 있다. 예시된 예는 5×5 커널(205)을 포함하지만, 워크플로우(200)의 양상들은 임의의 사이즈의 커널들에 쉽게 적용 가능하다.
[0038] 예시된 예에서, 컨볼루션을 수행할 것인 하드웨어의 선호되는 사이즈는 일반적으로 5×5보다 작을 수 있다. 예컨대, 하드웨어는 3×3 커널들 상에서 연산하도록 설계되거나 의도될 수 있다. 따라서, 일 양상에서, 시스템은 커널(205)을 다수의 서브프로세스들로 분해할 수 있다.
[0039] 예시된 양상에서, 시스템은 커널(205)을 2 개의 엘리먼트 세트들, 즉, 세트(210) 및 세트(215)로 분해하고, 각각의 세트(210 및 215)를 개별적으로 사용하여 입력 패치를 프로세싱할 수 있다. 2 개의 세트들(210 및 215)이 도시되지만, 시스템은 커널(205)을 임의 수의 엘리먼트 세트들로 분해할 수 있다.
[0040] 예컨대, 예시된 바와 같이, 커널(205)의 각각의 적용은 세트(210)를 사용하여 9 개의 곱셈들을 수행하는 것뿐만 아니라 세트(215)를 사용하여 16 개의 곱셈들을 수행하는 것을 요구할 것이다. 그런 다음, 위에서 논의된 바와 같이, 각각에 대한 결과 곱들이 합산되거나 집계되어 출력 텐서 내의 엘리먼트를 생성할 수 있다. 일 양상에서, 커널(205)은 그런 다음, 입력 엘리먼트들의 다음 세트로 스트라이드될 수 있고, 워크플로우(200)이 반복될 수 있다.
[0041] 일부 양상들에서, 시스템은 시스템의 하드웨어 지원에 적어도 부분적으로 기초하여 커널(205)을 중간 커널들(예컨대, 세트들(210 및 215))로 분해한다. 즉, 시스템은 하드웨어가 주어진 시간에 효율적으로 수행할 수 있는 연산들의 수(예컨대, 병렬로 수행될 수 있는 곱셈들의 수)에 기초하여 그러한 각각의 세트가 적절한 수의 엘리먼트들을 갖도록 보장할 수 있다. 예컨대, 관련 하드웨어가 9 개의 곱셈들을 병렬로 수행하도록 구성되면(예컨대, 3×3 커널들의 경우), 시스템은 커널(205)을 각각의 세트 내의 9 개 이하의 엘리먼트들을 갖는 엘리먼트들의 세트들로 분해할 수 있다.
[0042] 예시된 예는 커널(205)을 2개의 세트들, 즉, 중심 엘리먼트들(세트(210)) 및 주변 엘리먼트들(세트(215))로 분해하는 것을 도시하고 있지만, 커널(205)은 임의의 적합한 패턴들 또는 기준들에 따라 분할될 수 있다. 예컨대, 커널(205)은 커널(205)의 좌측 상단 코너 내의 9 개의 엘리먼트들에 대응하는 하나의 세트 및 나머지 엘리먼트들에 대한 하나 이상의 세트들로 분해될 수 있다.
[0043] 일부 양상들에서, 특정 하드웨어 구현 팩터들에 따라, 워크플로우(200)에 대한 다양한 비효율성들 또는 변경들이 도입될 수 있다. 예컨대, 커널(205) 및/또는 엘리먼트들의 세트(215)가 행 및/또는 열별로 효율적으로 연산하도록 설계되는 하드웨어를 사용하여 프로세싱될 것으로 가정하기로 한다. 그러한 일부 양상들에서, 세트(215)에 대해 단지 16 개의 곱셈들만이 필요하지만, 시스템은 각각의 행/열에서 5 개의 곱셈들을 사용할 수 있으며, 그에 따라 (요구되는 16 개 대신에) 총 20 개의 곱셈들을 수행할 수 있다. 일부 양상들에서, 커널(205)의 특정 서술은 그러한 하드웨어 고려사항들에 따라 변할 수 있다.
커널 확장 및 누적을 위한 예시적인 기법
[0044] 도 3a는 중간 커널들을 이용한 커널 확장 및 누적을 위한 예시적인 기법을 도시한다. 워크플로우(300A)에서, 각각의 공간적 차원에서 사이즈가 5(예컨대, 5×5)인 커널(305)이 중간 커널들(310A-D)의 세트로 분해된다. 예시된 예는 5×5 커널(305)을 포함하지만, 워크플로우(300)의 양상들은 임의의 사이즈의 커널들에 쉽게 적용 가능하다.
[0045] 추가로, 예시된 예에서, 하드웨어 선호 커널 사이즈는 3×3일 수 있다. 즉, 커널(305)을 사용하여 컨볼루션을 수행하는 데 사용되는 하드웨어는 3×3 커널들에 대해 설계되거나 최적화될 수 있다. 따라서, 시스템은 커널(305)을 각각이 사이즈가 3×3인 중간 커널들(310A-D)의 세트로 분해할 수 있다. 그러한 4 개의 중간 커널들(310A-D)을 사용함으로써, 더 큰 커널(305)은 더 작은 커널들에 대해 설계된 하드웨어 상에서 효율적으로 컨볼루션될 수 있다.
[0046] 예시된 워크플로우(300A)에서, 커널(305)의 중심은 오각형(306)으로 표시된다. 각각의 중간 커널(310A-D)에서, 오각형이 포함되어 커널(305)의 중심에 대한 중간 커널(310A-D)의 포지션을 표시한다. 예시된 예에서, 중간 커널(310A)은 커널(305)의 좌측 상단 부분에 대응하고, 중간 커널(310B)은 커널(305)의 우측 상단 부분에 대응하고, 중간 커널(310C)은 커널(305)의 좌측 하단 부분에 대응하고, 중간 커널(310D)은 커널(305)의 우측 하단 부분에 대응한다.
[0047] 예시된 예들에서, 중간 커널들(310)은 중첩된다. 그러나, 일부 양상들에서, 중간 커널들(310)은 그러한 중첩을 회피하도록 배열될 수 있다. 예컨대, 중간 커널들(310B, 310C, 및 310D)의 중심은 각각 원래 커널(305)의 개개의 코너들에 더 가깝게 각각 배치되어, 커널 중첩을 회피할 수 있다. 일반적으로, 중간 커널들(310)은 커널(305)의 엘리먼트들을 커버하기 위해 임의의 적합한 패턴으로 타일링되거나 모자이크화(tessellate)될 수 있다. 그러한 일부 양상들에서, 원래 커널(305)의 에지들을 넘어 확장되는 중간 커널들(310)의 부분들은 불필요한 곱셈들을 회피하기 위해 0으로 세팅된다(또는 그렇지 않으면 비어 있는 것으로 지정됨). 적어도 하나의 양상에서, 아래에서 더 상세하게 논의되는 바와 같이, 시스템은 중첩을 정정하기 위해(즉, 0 값들을 갖는 엘리먼트들을 사용하여 중첩을 수학적으로 취소하거나 마스킹하기 위해) 하나 이상의 중간 커널들 내의 하나 이상의 엘리먼트들을 0으로 세팅할 수 있다(또는 그렇지 않으면 이들을 비어 있는 것으로 지정함). 예컨대, 원래 커널의 단일 엘리먼트에 각각 대응하는 2 개 이상의 중간 커널들 내의 중첩 엘리먼트들의 세트로부터, 시스템은 이러한 엘리먼트들 중 하나를 제외한 모든 엘리먼트들을 0으로 세팅할 수 있어, (중첩 엘리먼트들의 세트로부터의) 0이 아닌 유일한 엘리먼트가 원래 커널 내의 원래 엘리먼트를 대체할 수 있게 한다. 일부 양상들에서, 시스템은 이러한 제로 패딩된(zero-padded)(빈) 엘리먼트들을 프로세싱하거나 곱하는 것을 억제할 수 있다. 즉, (예컨대, 중첩으로 인해) 0(들)이 추가된 중간 커널을 적용하는 동안, 시스템은 불필요한 계산 비용 및 전력 소비를 발생시키는 것을 회피하기 위해 이러한 엘리먼트들을 스킵할 수 있다(결과적인 값은 항상 0이 될 것이기 때문에). 이는 일부 양상들에서 "제로-스킵핑(zero-skipping)"으로 지칭될 수 있다.
[0048] 일부 양상들에서, 중첩 엘리먼트들의 세트 중 하나를 제외한 모든 엘리먼트를 0으로 세팅하는 것에 추가하여 또는 그 대신에, 시스템은 중첩을 고려하기 위해 다른 값들을 사용할 수 있다. 그러한 하나의 양상에서, 시스템은 다수의 중간 커널들의 대응 엘리먼트들에 걸쳐 임의의 중첩된 커널 엘리먼트들의 가중치들을 분배하거나 분할할 수 있다. 예컨대, 오각형(306)으로 표시된 커널(305) 내의 중심 엘리먼트는 4 개의 중간 커널들(310) 모두에 존재한다. 일부 양상들에서, 시스템은 2 개 이상의 중간 커널들(310) 내의 대응하는 엘리먼트들(예컨대, 중간 커널(310A)의 우측 하부 엘리먼트, 중간 커널(310B)의 좌측 하부 엘리먼트, 중간 커널(310C)의 우측 상부 엘리먼트, 및/또는 중간 커널(310D)의 좌측 상부 엘리먼트)에 걸쳐 이러한 엘리먼트(예컨대, 가중치)의 값을 분배하여, 이들의 합이 커널(305) 내의 원래 값과 동일하도록 할 수 있다. 이는 0의 값들을 삽입하지 않고도 동등한 컨볼루션을 허용할 수 있다.
[0049] 중간 커널들(310)을 사용하고, 결과들을 누적함으로써(아래에서 더 상세하게 논의되는 바와 같음), 시스템은 더 낮은 하드웨어 선호도에도 불구하고 커널(305)을 사용하여 효과적으로 컨볼루션한다.
커널 확장 및 볼륨 시프팅을 위한 예시적인 기법
[0050] 도 3b는 중간 커널들을 이용한 텐서 볼륨 시프팅 및 커널 확장을 위한 예시적인 기법을 도시한다. 일 양상에서, 워크플로우(300B)은 도 3a에 예시된 중간 커널들(310)을 사용하여 생성된 중간 텐서들을 프로세싱하고 누적하는 방법을 도시한다.
[0051] 예시된 워크플로우(300B)에서, 각각의 중간 텐서(315A-D)는 도 3a의 대응하는 중간 커널(310A-D)의 적용에 대응한다. 그러한 각각의 텐서(315A-D)에서, 검정색 정사각형은 대응하는 중간 커널 적용의 중심을 표시하는 데 사용되고, 점선 박스는 중간 커널의 수용 필드를 도시하는 데 사용되는 반면, 오각형은 원래 5×5 커널의 중심을 표시하는 데 사용된다. 이러한 방식으로, 원래 커널(예컨대, 오각형의 로케이션으로 표시됨)의 각각의 적용의 경우, 다수의 중간 텐서들이 생성된다.
[0052] 일부 양상들에서, 시스템은 각각의 중간 컨볼루션 연산을 수행하여 원래 커널의 현재 포지션에 대한 모든 중간 텐서들을 생성한 다음, 이러한 텐서들을 누적하여 다음 커널 포지션으로 이동하기 이전에(예컨대, 원래 커널을 스트라이드하기 이전에) 출력 텐서 내의 하나 이상의 엘리먼트들을 생성할 수 있다. 이는 일부 양상들에서 단계적 누적으로 지칭될 수 있다.
[0053] 다른 양상에서, 시스템은 전체 입력 텐서를 커버하기 위해 각각의 중간 커널을 다수 회 사용하여(적절하게 스트라이드함), 전체 입력 텐서를 커버하는 더 큰 중간 텐서들을 초래한다. 결과적인 중간 텐서들은 (예컨대, 시스템 메모리 또는 타이트하게(tightly) 커플링된 메모리에) 유지되고, 각각의 중간 텐서의 모든 적용들이 완료된 이후에 누적될 수 있다. 이는 일부 양상들에서 배치(batch) 누적으로 지칭될 수 있다.
[0054] 일부 양상들에서, 시스템은 (예컨대, 추가 컨볼루션들 또는 다른 프로세스들을 요구하지 않고) 중간 텐서들을 적소에 효율적으로 누적할 수 있도록 텐서 볼륨 시프팅을 수행한다. 텐서 볼륨 시프팅은 일반적으로, 텐서들을 정렬하기 위해 하나 이상의 텐서들의 엘리먼트들을 시프팅하는 것을 포함하며, 이는 엘리먼트별 합산(element-wise summation)이 쉽게 적용될 수 있게 한다. 화살표들(320A, 320B, 및 320C)로 표시된 바와 같이, 시스템은 중간 커널(310A)을 사용하여 중간 텐서(315A)를 생성하고, 시스템의 구성에 기초하여 정의된 오프셋을 사용하여 이러한 중간 텐서를 시프팅할 수 있다.
[0055] 예컨대, 시스템은 연산 을 수행할 수 있으며, 여기서 는 중간 텐서(315)이고, 는 x 차원(예컨대, 폭)에서 시프팅될 엘리먼트들의 수이고, 는 y 차원(예컨대, 높이)에서 시프팅될 엘리먼트들의 수이고, x 및 y는 중간 텐서(315)를 생성하는 데 사용되는 현재 중간 커널의 중심 좌표이다.
[0056] 예시된 예에서, 중간 커널(310A)을 사용하여 중간 텐서(315A)를 생성한 이후, 시스템은 중간 텐서(315A)를 두 엘리먼트 우측으로 볼륨 시프팅할 수 있다. 중간 커널(310B)을 적용하여 중간 텐서(315B)를 생성한 이후, 시스템은 이러한 텐서들을 누적하기 위해 엘리먼트별 덧셈을 효율적으로 사용할 수 있다. 예컨대, 시스템은 연산 을 수행할 수 있는데, 여기서 는 제1 중간 텐서(예컨대, 중간 텐서(315A))이고, 는 제2 중간 텐서(예컨대, 중간 텐서(315B))이다. 일부 양상들에서, 위에서 논의된 바와 같이, 중간 커널(들)(310)의 제로 패딩을 사용하여, 텐서 누적이 정확한 출력 텐서를 초래하도록 보장하기 위해 임의의 중첩 엘리먼트들이 수학적으로 취소된다.
[0057] 일부 양상들에서, 그러한 누적 이전에, 시스템은 중간 텐서들 중 하나 이상에 대해 적절한 볼륨 시프팅을 수행한다. 그런 다음, 볼륨 시프팅된 중간 텐서는 엘리먼트별 합산을 사용하여 효율적으로 누적될 수 있다. 유리하게, 그러한 적소(in-place) 누적을 사용하여, 시스템은 입력 텐서의 채널들의 수를 변경하거나 중간 텐서들을 상이한 채널들로 리캐스트(recast)할 필요가 없다(이는 아래에서 더 상세하게 논의되는 바와 같이, 다른 누적 기법들을 사용하는 경우 요구될 수 있음). 즉, 각각의 중간 텐서는 일 채널의 깊이를 가질 수 있고, 이들은 단일 채널에서 적소에 누적될 수 있다.
[0058] 일부 양상들에서, 누적 및 볼륨 시프트 연산들은 스킵 및 메인 분기들의 교차점과 같은 CNN의 다양한 단계에서 수행될 수 있다.
커널 확장 및 포인트별 누적을 위한 예시적인 기법
[0059] 도 3c는 중간 커널들을 이용한 포인트별 누적 및 커널 확장을 위한 예시적인 기법을 도시한다. 일 양상에서, 워크플로우(300C)는 도 3a에 도시된 중간 커널들(310)을 사용하여 생성된 중간 텐서들을 프로세싱하고 누적하는 방법을 도시한다. 워크플로우(300B)은 엘리먼트별 합산을 통한 적소 누적을 사용한 반면, 워크플로우(300C)은 포인트별 컨볼루션을 통한 누적에 대응한다.
[0060] 예시된 워크플로우(300C)에서, 각각의 중간 텐서(315A-D)는 도 3a로부터의 대응하는 중간 커널(310A-D)의 적용에 대응한다. 위에서 논의된 바와 같이, 중간 텐서들(315A-D)은 각각의 중간 커널의 단일 적용에 대응할 수 있거나(예컨대, 단계적 누적으로 지칭되는, 원래 커널의 단일 적용의 경우), 각각의 중간 커널의 일련의 적용들에 대응할 수 있다(배치 누적(batch accumulation)으로 지칭되는, 원래 커널의 모든 적용들을 고려하기 위해). 일부 양상들에서, 중간 텐서들(315)은 위에서 논의된 바와 같이, 각각의 중간 커널 적용의 오프셋 로케이션들을 고려하기 위해 볼륨 시프팅될 수 있다. 즉, 중간 텐서들(315)은 각각의 개개의 텐서에 대해 동일한 좌표에 포인트별 컨볼루션이 적용되도록 보장하기 위해 볼륨 시프팅될 수 있다.
[0061] 예시된 바와 같이, 적소 누적(예컨대, 도 3b를 참조하여 위에서 논의된 바와 같은 엘리먼트별 합산)을 사용하기 보다는, 시스템은 중간 텐서들을 누적하고 출력 텐서를 생성하기 위해 포인트별 컨볼루션(320)을 사용할 수 있다. 즉, 시스템은 각각의 중간 텐서(315)를 개개의 채널에 매핑하고(그에 의해 원래 채널 수 C를 활성화 메모리 내의 nC로 확장하며, 여기서 n은 중간 커널들의 수임), 포인트별 컨볼루션 연산 을 사용함으로써(여기서 는 포인트별 컨볼루션임) 이러한 채널들을 출력 텐서에 대한 단일 채널로 누적할 수 있다.
[0062] 적어도 하나의 양상에서, (위에서 논의된 바와 같이) 텐서 볼륨 시프팅을 수행하기 보다는, 시스템은 활성화 메모리에 기록하거나 또는 활성화 메모리로부터 판독할 때 어드레스 시프트들을 사용할 수 있다. 일부 양상들에서, 텐서 볼륨 시프팅은 어드레스 시프팅을 사용하여 달성된다. 적어도 하나의 양상에서, 필요한 물리적 어드레스 오프셋들은 중간 텐서들 사이에서 (엘리먼트별로) 고정된다. 즉, 주어진 텐서 는 임의의 i 및 j 값들에 대해 텐서 로부터의 고정된 어드레스 오프셋을 가질 수 있다. 그러한 양상에서, 사전 정의된 어드레스 오프셋들은 누적을 위해 텐서들을 정렬하기 위해 텐서들을 시프팅하는 데 사용될 수 있다.
[0063] 다양한 양상들에서, 워크플로우(300B 또는 300C)는 이용 가능한 특정 하드웨어 컴포넌트들에 따라 중간 텐서들을 누적하기 위해 대안으로 사용될 수 있다.
예시적인 커널 확장들
[0064] 도 4a, 도 4b, 및 도 4c는 다양한 커널 사이즈들에 대한 예시적인 커널 확장들을 도시한다. 구체적으로, 도 4a, 도 4b, 및 도 4c는 3×3 커널(예컨대, 예시적인 하드웨어 컴포넌트의 예시적인 선호되는 커널 사이즈)을 더 큰 사이즈로 확장하기 위한 다양한 기법들을 도시한다. 도 4a에서, 더 큰 커널(400A)은 5×5이고, 도 4b에서, 더 큰 커널(400B)은 7×7이고, 도 4c에서, 더 큰 커널(400C)은 9×9이다.
[0065] 도 4a에 예시된 바와 같이, 커널(400A)은 오각형(406)으로 표시된 중심을 갖고, 커널(400A)은 4 개의 중간 3×3 커널들(405A, 405B, 405C, 및 405D)로 분해될 수 있으며, 이들 각각은 개개의 검정색 정사각형으로 표시된 중심을 갖는다. 예시된 예에서, 다양한 패턴들 및 빗금은 (커널(400A)로부터) 중간 커널들(405)로의 엘리먼트들의 분배를 표시한다.
[0066] 예시된 예는 개념적인 명확함을 위해 특정 커널 중심들을 포함하지만, 커널 중심들은 다양한 구현들에서 오프셋될 수 있다는 것을 이해해야 한다. 예컨대, 중간 커널(405D)은 커널(400A)의 우측 하단 4 개의 엘리먼트들만을 커버할 필요가 있으므로, 중간 커널(405D)의 중심은 이러한 4 개의 엘리먼트들 중 임의의 하나에 로케이팅될 수 있다.
[0067] 일부 양상들에서, 주어진 중간 커널(405)이 원래 커널(400A)의 경계들을 넘어 도달하면(또는 다른 중간 커널(405)과 중첩됨), 컨볼루션들을 수행할 때 대응하는 엘리먼트들이 0으로 세팅되며, 이는 계산들을 감소시키고, 그에 의해 효율성 및 전력 소비를 개선할 수 있다. 예시된 예에서, 중간 커널(405C)이 3×3 커널이라고 가정하기로 한다. 중간 커널(405C)을 사용할 때, 커널(405A)과 중첩되는 엘리먼트들(박스(407)로 표시됨)은 0으로 세팅될 수 있다. 대안적으로, 중간 커널(405C)은 이러한 엘리먼트들 내의 0이 아닌 값들을 사용할 수 있고, 커널(405A) 내의 대응하는 엘리먼트들은 0으로 세팅될 수 있다. 추가적으로, 예시된 바와 같이, 중심 엘리먼트(오각형(406)으로 표시됨)는 (예컨대, 중간 커널(405A)에 대한 원래 값 및 커널들(405B, 405C, 및 405D) 내의 0의 값들을 사용하여) 중간 커널(405) 중 하나를 제외한 모든 커널들에서 0으로 세팅될 수 있다. 중간 커널(405C)의 중심이 예시된 중심 바로 아래의 엘리먼트에 배치되면, 이러한 중간 커널(405C)(이는 원래 커널(400A)의 가장자리를 넘어 확장됨)의 최하부 3 개의 엘리먼트들은 유사하게 0으로 세팅될 수 있다. 이는 연산들의 중복을 방지할 수 있으며, 그에 의해 정확한 결과들 및 개선된 계산 효율성을 보장한다.
[0068] 적어도 일부 양상들에서, 제로 패딩을 사용하기보다는, 시스템은 선택적으로 더 작은 중간 커널들을 적절하게 사용할 수 있다. 예컨대, 3×3 중간 커널(405C)을 사용하기보다는(제로-스킵핑을 이용하거나 제로-스킵핑을 이용하지 않고), 시스템은 2×3 커널을 사용할 수 있다. 유사하게, 3×3 중간 커널(405B)보다는, 3×2 커널이 사용될 수 있다. 추가적으로, 중간 커널(405D)에 대해 2×2 커널이 사용될 수 있다.
[0069] 특히, 5×5 커널(400A)은 이 예에서 4 개의 3×3 중간 커널들(405A-D)(또는 하나의 3×3 커널, 하나의 3×2 커널, 하나의 2×3 커널, 및 하나의 2×2 커널)을 사용할 수 있지만, 4 개의 3×3 중간 커널들(405A-D)은 또한 5×5와 비교하여 추가 연산들 없이 6×6 커널을 대체하는 데 사용될 수 있다(제로-스킵핑이 사용되지 않는다고 가정). 따라서, 일부 양상들에서, 시스템(또는 사용자)은 사용될 것인 모델(들)의 아키텍처 및 하드웨어의 특정 구성에 따라, 일부 양상들에서 더 큰 컨볼루션들을 사용하도록 선택할 수 있다. 예컨대, 하드웨어가 3×3 커널들에 최적화되고, CNN 아키텍처가 5×5 컨볼루션을 필요로 한다고 가정하기로 한다. 일 양상에서, 시스템(또는 사용자)은 추가 계산 오버헤드를 요구하지 않고 수용 필드를 증가시키기 위해, 5×5보다는 6×6 컨볼루션을 사용하여 모델을 훈련하고 사용하도록 선택할 수 있다.
[0070] 도 4b에 예시된 바와 같이, 7×7 커널(400B)은 오각형(411)으로 표시된 중심을 갖고, 커널(400B)은 9 개의 중간 커널들(410A-410I)로 분해될 수 있으며, 이들 각각은 개개의 검정색 정사각형으로 표시된 중심을 갖는다. 예시된 예는 위에서 논의된 바와 같이, 개념적인 명확함을 위해 특정 커널 중심들을 포함하지만, 커널 중심들은 다양한 구현들에서 오프셋될 수 있다는 것을 이해해야 한다.
[0071] 위에서 논의된 바와 같이, 일부 양상들에서, 주어진 중간 커널(410)이 원래 커널(400B)의 경계들을 넘어 도달하면(또는 다른 중간 커널(410)과 중첩됨) 컨볼루션들을 수행할 때 대응하는 엘리먼트들이 0으로 세팅될 수 있다. 이는 연산들의 중복을 방지할 수 있으며, 그에 의해 정확한 결과들 및 개선된 계산 효율성을 보장한다. 유사하게, 위에서와 같이, 시스템은 더 작은 커널들(예컨대, 중간 커널들(410C 및 410F)에 대한 3×1 커널들, 중간 커널들(410G 및 410H)에 대한 1×3 커널들, 및 중간 커널(410I)에 대한 1×1 커널들)을 선택적으로 사용할 수 있다.
[0072] 추가적으로, 7×7 커널(400B)은 9 개의 3×3 중간 커널들(410A-I)(또는 위와 같이, 4 개의 3×3 커널들 및 5 개의 더 작은 커널들)의 사용을 요구하지만, 9 개의 3×3 중간 커널들(410A-I)은 또한 8×8 커널 또는 9×9 커널을 대체하는 데 사용될 수 있으며, 각각은 7×7 커널(400B)과 비교하여 추가 연산들을 갖는다.
[0073] 9×9 커널(400C)을 9 개의 중간 커널들(415A-I)로 분해하는 일 예가 도 4c에 도시된다. 예시된 바와 같이, 9×9 커널(400C) 및 7×7 커널(400B)은 모두 9 개의 3×3 중간 커널들을 사용하여 구현될 수 있다.
[0074] 위에서 논의된 바와 같이, 일부 양상들에서, 시스템(또는 사용자)은 유사하게, 사용될 것인 모델(들)의 아키텍처 및 하드웨어의 특정 구성에 따라, 더 큰 컨볼루션 커널들을 사용하도록 선택할 수 있다. 예컨대, 시스템(또는 사용자)은 추가 계산 오버헤드를 요구하지 않고 수용 필드를 증가시키기 위해, 7×7보다는 9×9 컨볼루션을 사용하여 CNN 모델을 훈련하고 사용하도록 선택할 수 있다.
차원 변환을 통한 커널 확장을 위한 예시적인 기법
[0075] 도 5는 차원 변환을 사용한 커널 확장을 위한 예시적인 기법을 도시한다. 워크플로우(500)은 원래 입력 텐서(505)의 공간적 차원을 감소시켜 깊이(예컨대, 채널들의 수)가 증가된 텐서(515)를 생성하기 위한 공간-깊이 차원 변환(510)의 사용을 구체적으로 도시한다. 일 양상에서, 차원 변환(510)은 입력 텐서를 의 차원으로부터 의 차원으로 재배열하며, 여기서 C는 원래 채널들의 수이고, H 및 W는 공간적 차원들(예컨대, 높이 및 폭 각각)이고, r은 깊이 확장비이다.
[0076] 차원 변환(510)은, (예컨대, 데이터 리어드레싱(re-addressing)을 사용하여) 하드웨어에서 수행될 수 있는 엘리먼트들의 리셔플링(reshuffling)만을 포함하므로, 빠르고 효율적으로 수행될 수 있다.
[0077] 예시된 예는 4×4 원본 커널을 사용하고, 차원 변환(510)은 입력 텐서의 4×4×1 패치들을 2×2×4 텐서들로 변경하기 위해 사용되어, 2×2 중간 커널들의 효율적인 적용을 허용한다. 그러나, 워크플로우(500)은 다양한 커널 사이즈들에 쉽게 적용될 수 있다.
[0078] 적어도 하나의 양상에서, 워크플로우(500)을 사용하여, 시스템은 하나 이상의 중간 커널들(예컨대, 2×2 또는 3×3 중간 커널들)을 사용하여 5×5 컨볼루션 커널을 구현할 수 있으며, 이들 각각은 원래 커널의 가장자리를 넘어 확장되는 하나 이상의 엘리먼트들에 채워지는 0들을 가질 수 있다. 예컨대, 원래 5×5 커널, 6×6×1 패치들의 경우, 입력 텐서는 3×3×2 텐서들로 변환할 수 있으며, 그런 다음, 이는 3×3 커널들과 효율적으로 컨볼루션될 수 있다(3×3 중간 커널들의 최하부 및 최우측 행들은 0으로 채워짐). 유사하게, 원래 6×6 커널, 6×6×1 패치들의 경우, 입력 텐서는 3×3×2 텐서들로 변환할 수 있으며, 이는 그런 다음, 3×3 커널들과 효율적으로 컨볼루션될 수 있다.
[0079] 원래 5×5 커널보다 더 큰 수용 필드를 갖는 6×6 커널은 위에서 논의된 바와 같이, 메모리 또는 계산 연산들을 증가시키지 않고 일부 양상들에서 대체될 수 있다는 것을 인식해야 한다.
[0080] 일 양상에서, 워크플로우(500)은 차원 변환(510) 이후 동등한 3×3 그룹별 컨볼루션(그룹들의 수 = )을 사용함으로써, (차원 변환 이전에) 차원 을 갖는 입력 텐서에 대해 6×6 볼륨 또는 깊이별 컨볼루션을 수행하는 데 사용될 수 있다. 따라서, 일부 양상들에서, 컨볼루션 커널(들)의 적용 이전에, 입력 텐서의 각각의 채널은 r2 채널들로 변환될 수 있다. 적어도 하나의 양상에서, 깊이 확장비 r은 원래 커널 사이즈 및/또는 하드웨어에 대한 선호되는 커널 사이즈에 부분적으로 기초하여 정의된다.
[0081] 특히, 일부 양상들에서, 입력 텐서의 각각의 채널에 대해 이러한 컨볼루션을 수행하기 위해 r2 중간 커널들이 요구될 수 있다. 예컨대, 예시된 워크플로우(500)에서, 4 개의 2×2 중간 커널들은 원래 4×4 컨볼루션을 수행하는 데 사용될 수 있다. 입력 텐서가 2 개의 채널들을 가지면, 8 개의 2×2 중간 커널들이 사용될 수 있다.
[0082] 일 양상에서, 원래(예컨대, 6×6 또는 5×5) 컨볼루션 커널이 깊이 확장비 r로 나눌 수 있는 스트라이드 s를 가지면, 대응하는 3×3 그룹별 컨볼루션(중간 커널들을 사용함)은 의 스트라이드를 사용할 수 있다. 원래 컨볼루션이 깊이 확장비 r로 나눌 수 없는 스트라이드 s를 가지면, 시스템은 모든 그룹에서 채널들의 고정된 리셔플링(또는 리어드레싱)을 사용할 수 있다. 이는 하드웨어로 프로그래밍될 수 있다.
[0083] 위에서 논의된 바와 같이, 차원 변환 기법들은 또한, 다른 더 큰 커널 사이즈들에 대해 확장될 수 있다. 예컨대, 7×7 원래 커널은 최하부 및 최우측 행들에 0들이 채워진 8×8 커널을 사용하여 구현될 수 있다. 그러한 8×8 커널의 경우, 입력 텐서는 더 작은(예컨대, 2×2 또는 4×4) 커널들과 컨볼루션될 차원 변환(510)을 사용하여 변환될 수 있다. 위와 같이, 더 큰 수용 필드를 갖는 8×8 커널은 메모리 또는 계산 요건들을 증가시키지 않고 대체될 수 있다(제로-스킵핑이 사용되지 않는다고 가정)는 점에 유의한다. 적어도 하나의 양상에서, 커널 사이즈들에 따라 상이한 r 값들이 사용될 수 있다. 예컨대, 7×7 커널의 경우, r 값 4가 사용될 수 있다.
최적화된 하드웨어를 사용한 컨볼루션을 위한 예시적인 방법
[0084] 도 6은 더 작은 커널 사이즈들에 최적화된 하드웨어를 사용하여 커널 컨볼루션을 수행하기 위한 방법(600)을 예시하는 예시적인 흐름 다이어그램이다. 다양한 양상들에서, 방법(600)은 모델의 훈련 동안(예컨대, 순방향 전달 동안)뿐만 아니라 훈련된 모델을 사용한 추론 동안 사용될 수 있다.
[0085] 방법(600)은 블록(605)에서 시작되며, 여기서 데이터 텐서가 컨볼루션을 위해 수신된다. 예컨대, 데이터 텐서는 뉴럴 네트워크(예컨대, CNN)의 제1 또는 후속 계층들에 대한 입력으로서 역할을 할 수 있다.
[0086] 블록(610)에서, 시스템은 수신된 데이터 텐서와 컨벌루션될 대응하는 컨볼루션 커널을 식별한다. 예컨대, CNN 모델 아키텍처는 주어진 계층에서 수신된 텐서들에 적용될 커널을 특정할 수 있다.
[0087] 방법(600)은 블록(615)으로 계속되며, 여기서 시스템은 식별된 커널을 2 개 이상의 중간 커널들로 분해한다. 일부 양상들에서, 중간 커널들은 컨볼루션을 수행하는 데 사용되는 하드웨어의 선호되는 커널 사이즈(예컨대, 3×3 또는 5×5)에 기초하여 생성된다. 적어도 하나의 양상에서, 시스템은 커널 사이즈가 선호되는 커널 사이즈(또는 하드웨어 제한 커널 사이즈)를 초과한다고 결정할 시에만 커널을 분해한다.
[0088] 예컨대, 위에서 논의된 바와 같이, 시스템은 커널의 상이한 서브세트들을 순차적으로 또는 병렬로 프로세싱하기 위한 비중첩 커널 확장(예컨대, 도 2를 참조하여 위에서 설명된 바와 같음), 더 작은 중간 커널들의 세트를 통한 커널 확장 및 누적(예컨대, 도 3a-도 3c 및 도 4a-도 4c를 참조하여 위에서 설명된 바와 같음), 커널 또는 텐서의 차원을 수정하기 위한 차원 변환들(예컨대, 도 5를 참조하여 위에서 설명된 바와 같음) 등을 사용할 수 있다.
[0089] 블록(620)에서, 시스템은 중간 커널 사이즈에 대해 설계 및/또는 최적화된 이용 가능한 하드웨어를 사용하여 중간 커널들에 대한 컨볼루션들의 세트를 수행한다. 이는 상당히 증가된 유연성을 허용하면서 시스템의 효율성을 개선시킬 수 있다.
[0090] 블록(625)에서, 시스템은 식별된 컨볼루션 커널에 대한 출력 텐서를 생성하기 위해 결과적인 중간 텐서들을 누적할 수 있다. 다양한 양상들에서, 이러한 누적은 위에서 논의된 바와 같이, (예컨대, 엘리먼트별 합산을 통한) 적소 누적 또는 포인트별 컨볼루션을 제한 없이 포함할 수 있다. 유사하게, 누적은 배치 누적(예컨대, 전체 입력 텐서에 걸쳐 있기 위해 각각의 중간 커널을 다수 회 프로세싱함) 또는 단계적 누적(예컨대, 결과들을 누적하기 이전에 각각의 중간 커널을 1 회 사용하고 원래 커널의 다음 적용으로 진행함)을 사용하여 수행될 수 있다.
중간 커널들을 사용한 컨볼루션을 위한 예시적인 방법
[0091] 도 7은 중간 커널들을 사용하여 컨볼루션을 수행하기 위한 방법(700)을 예시하는 예시적인 흐름 다이어그램이다.
[0092] 블록(705)에서, 시스템은 뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신한다.
[0093] 블록(710)에서, 시스템은 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성한다.
[0094] 일부 양상들에서, 선호되는 사이즈는 컴퓨터의 하나 이상의 하드웨어 컴포넌트들에 대응한다.
[0095] 블록(715)에서, 시스템은 제1 커널을 사용하여 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 복수의 중간 텐서들을 누적하며, 여기서 제1 커널은 선호되는 사이즈보다 큰 사이즈를 갖는다.
[0096] 일부 양상들에서, 제1 커널에 대해 제1 컨볼루션을 수행하는 것은, 데이터 텐서의 중앙 영역 내의 엘리먼트들의 세트에 대해 제1 중간 컨볼루션을 수행하는 것, 및 데이터 텐서의 주변 상의 엘리먼트들의 세트에 대해 제2 중간 컨볼루션을 수행하는 것을 포함한다.
[0097] 일부 양상들에서, 방법(700)은 복수의 중간 텐서들을 누적하기 이전에, 복수의 중간 텐서들 각각을 볼륨 시프팅하는 것을 더 포함한다.
[0098] 일부 양상들에서, 복수의 중간 텐서들을 누적하는 것은, 상기 복수의 중간 텐서들에 대해 엘리먼트별 합산을 수행하는 것을 포함한다.
[0099] 일부 양상들에서, 복수의 중간 텐서들을 누적하는 것은, 복수의 중간 텐서들에 대해 포인트별 누적을 수행하는 것을 포함한다.
[0100] 일부 양상들에서, 복수의 중간 커널들 중 적어도 제1 중간 커널은 하나 이상의 빈(empty) 엘리먼트들을 포함하고, 제1 중간 커널을 사용하여 중간 컨볼루션을 수행하는 것은 하나 이상의 빈 엘리먼트들 각각을 프로세싱하는 것을 억제하는 것을 포함한다.
[0101] 일부 양상들에서, 제1 커널에 대해 제1 컨볼루션을 수행하는 것은, 깊이 확장비 r에 기초하여 데이터 텐서의 깊이를 증가시키고 데이터 텐서의 공간적 차원을 감소시킴으로써, 복수의 중간 텐서들을 생성하기 위해 공간-대-깊이(space-to-depth) 기법을 적용하는 것을 더 포함한다.
[0102] 일부 양상들에서, 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 있음 ― , 복수의 중간 컨볼루션들은 와 동일한 스트라이드를 사용하여 수행된다.
[0103] 일부 양상들에서, 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 없음 ― , 복수의 중간 컨볼루션들은 복수의 중간 텐서들에서 채널들의 고정된 리셔플링 또는 리어드레싱을 사용하여 수행된다.
[0104] 일부 양상들에서, 제1 커널에 대해 제1 컨볼루션을 수행하는 것은, 복수의 중간 단계적(in-step) 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것, 복수의 중간 텐서들 각각에 대해 단계적 활성화 시프팅을 수행하는 것, 및 시프팅된 복수의 중간 텐서들의 단계적 활성화 누적을 수행하는 것을 포함하는 단계적 누적을 사용하여 수행된다.
커널 확장을 위한 예시적인 프로세싱 시스템
[0105] 일부 양상들에서, 도 1-도 7을 참조하여 설명된 워크플로우들, 기법들, 및 방법들은 하나 이상의 디바이스들 또는 시스템들 상에서 구현될 수 있다. 도 8은 예컨대, 도 1-도 7과 관련하여 설명된 기법들 및 방법들을 포함하여, 본 개시내용의 다양한 양상들을 수행하도록 구성되는 예시적인 프로세싱 시스템(800)을 도시한다.
[0106] 프로세싱 시스템(800)은, 일부 예들에서 멀티코어 CPU일 수 있는 CPU(central processing unit)(802)를 포함한다. CPU(802)에서 실행되는 명령들은 예컨대, CPU(802)와 연관된 프로그램 메모리로부터 로드될 수 있거나 또는 메모리 파티션(824)으로부터 로드될 수 있다.
[0107] 또한, 프로세싱 시스템(800)은 GPU(graphics processing unit)(804), DSP(digital signal processor)(806), NPU(neural processing unit)(808), 멀티미디어 프로세싱 유닛(810), 및 무선 연결 컴포넌트(812)와 같은, 특정 기능들에 맞춰진 추가 프로세싱 컴포넌트들을 포함한다.
[0108] 808과 같은 NPU는 일반적으로, ANN(artificial neural network)들, DNN(deep neural network)들, RF(random forest)들 등을 프로세싱하기 위한 알고리즘들과 같은 기계 학습 알고리즘들을 실행하기 위해 필요한 모든 제어 및 산술 논리를 구현하도록 구성되는 특수 회로이다. 대안적으로, NPU는, 때때로 NSP(neural signal processor), TPU(tensor processing unit)들, NNP(neural network processor), IPU(intelligence processing unit), 또는 VPU(vision processing unit) 또는 그래프 프로세싱 유닛으로 지칭될 수 있다.
[0109] 808과 같은 NPU는 이미지 분류, 기계 번역, 오브젝트 검출, 및 다른 다양한 예측 모델들과 같은 일반적인 기계 학습 태스크들의 성능을 가속화하도록 구성된다. 일부 예들에서, 복수의 NPU들은 SoC(system on a chip)와 같은 단일 칩에서 인스턴스화될 수 있는 반면, 다른 예들에서, 이들은 전용 뉴럴 네트워크 가속기 일부일 수 있다.
[0110] NPU들은 훈련 또는 추론에 최적화될 수 있거나 또는 일부 경우들에서, 둘 사이의 성능 균형을 맞추도록 구성될 수 있다. 훈련 및 추론 둘 모두를 수행할 수 있는 NPU들의 경우, 두 태스크들은 여전히 일반적으로 독립적으로 수행될 수 있다.
[0111] 훈련을 가속화하도록 설계된 NPU들은 일반적으로, 새로운 모델들의 최적화를 가속화하도록 구성되며, 이는 모델 성능을 개선하기 위해, (흔히 라벨링되거나 또는 태깅된) 기존 데이터세트를 입력하는 것, 데이터세트를 반복하는 것, 및 그런 다음, 가중치들 및 바이어스들과 같은 모델 파라미터들을 조정하는 것을 수반하는 고도로 계산-집약적인(compute-intensive) 연산이다. 일반적으로, 잘못된 예측에 기초하여 최적화하는 것은 모델의 레이어들을 통해 다시 전파하는 것 및 예측 에러를 감소시키기 위해 그래디언트(gradient)들을 결정하는 것을 수반한다.
[0112] 추론을 가속화하도록 설계된 NPU들은 일반적으로, 완전한 모델들 상에서 연산하도록 구성된다. 따라서, 그러한 NPU들은 새로운 데이터 조각을 입력하고 이를 이미 훈련된 모델을 통해 신속하게 프로세싱하여 모델 출력(예컨대, 추론)을 생성하도록 구성될 수 있다.
[0113] 일 구현에서, NPU(808)는 CPU(802), GPU(804), 및/또는 DSP(806) 중 하나 이상의 일부이다.
[0114] 일부 예들에서, 무선 연결 컴포넌트(812)는 예컨대, 3세대(3G) 연결, 4세대(4G) 연결(예컨대, 4G LTE), 5세대 연결(예컨대, 5G 또는 NR), Wi-Fi 연결, Bluetooth 연결, 및 다른 무선 데이터 송신 표준들에 대한 서브컴포넌트들을 포함할 수 있다. 무선 연결 프로세싱 컴포넌트(812)는 하나 이상의 안테나들(814)에 추가로 연결된다.
[0115] 또한, 프로세싱 시스템(800)은 임의의 방식의 센서와 연관된 하나 이상의 센서 프로세싱 유닛들(816), 임의의 방식의 이미지 센서와 연관된 하나 이상의 ISP(image signal processor)들(818), 및/또는 위성 기반 포지셔닝 시스템 컴포넌트들(예컨대, GPS 또는 GLONASS)뿐만 아니라 관성 포지셔닝 시스템 컴포넌트들을 포함할 수 있는 내비게이션 프로세서(820)를 포함할 수 있다.
[0116] 또한, 프로세싱 시스템(800)은 스크린들, 터치 감지 표면들(터치 감지 디스플레이들을 포함함), 물리적 버튼들, 스피커들, 마이크들 등과 같은 하나 이상의 입력 및/또는 출력 디바이스들(822)을 포함할 수 있다.
[0117] 일부 예들에서, 프로세싱 시스템(800)의 프로세서들 중 하나 이상은 ARM 또는 RISC-V 명령 세트에 기초할 수 있다.
[0118] 또한, 프로세싱 시스템(800)은 동적 랜덤 액세스 메모리, 플래시 기반 정적 메모리 등과 같은 하나 이상의 정적 및/또는 동적 메모리들을 표현하는 메모리(824)를 포함한다. 이 예에서, 메모리(824)는 프로세싱 시스템(800)의 전술된 프로세서들 중 하나 이상에 의해 실행될 수 있는 컴퓨터 실행 가능 컴포넌트들을 포함한다.
[0119] 특히, 이러한 예에서, 메모리(824)는 컨볼루션 컴포넌트(824A), 텐서 시프트 컴포넌트(824B), 및 누적 컴포넌트(824C)를 포함한다. 또한, 메모리(824)는 모델 파라미터들(824D), 중간 커널(들)(824E), 및 중간 텐서(들)(824F)를 포함한다. 도시된 컴포넌트들 및 도시되지 않은 다른 컴포넌트들은 본원에 설명된 기법들의 다양한 양상들을 수행하도록 구성될 수 있다. 도 8에서는 개념적인 명확함을 위해 개별 컴포넌트들로서 도시되지만, 컨볼루션 컴포넌트(824A), 텐서 시프트 컴포넌트(824B), 및 누적 컴포넌트(824C)는 다양한 양상들에서 집합적으로 또는 개별적으로 구현될 수 있다.
[0120] 프로세싱 시스템(800)은 컨볼루션 회로(826), 텐서 시프트 회로(828), 및 누적 회로(830)를 더 포함한다. 도시된 회로들 및 도시되지 않은 다른 컴포넌트들은 본원에 설명된 기법들의 다양한 양상들을 수행하도록 구성될 수 있다.
[0121] 예컨대, 컨볼루션 컴포넌트(824A) 및 컨볼루션 회로(826)는 커널들을 입력 텐서들과 컨볼루션하는 데 사용될 수 있고, 텐서 시프트 컴포넌트(824B) 및 텐서 시프트 회로(828)는 누적 이전에 중간 텐서들을 시프팅하는 데 사용될 수 있으며, 누적 컴포넌트(824C) 및 누적 회로(830)는 출력 텐서를 생성하기 위해 중간 텐서들을 누적하는 데 사용될 수 있다.
[0122] 도 8에서는 명확함을 위해 별개의 컴포넌트들 및 회로들로 도시되었지만, 컨볼루션 회로(826), 텐서 시프트 회로(828), 및 누적 회로(830)는 프로세싱 시스템(800)의 다른 프로세싱 디바이스들에서, 이를테면, CPU(802), GPU(804), DSP(806), NPU(808) 등 내에서 집합적으로 또는 개별적으로 구현될 수 있다.
[0123] 일반적으로, 프로세싱 시스템(800) 및/또는 이의 컴포넌트들은 본원에 설명된 방법들을 수행하도록 구성될 수 있다.
[0124] 특히, 다른 양상들에서, 이를테면, 프로세싱 시스템(800)이 서버 컴퓨터 등인 경우, 프로세싱 시스템(800)의 양상들은 생략될 수 있다. 예컨대, 멀티미디어 컴포넌트(810), 무선 연결(812), 센서들(816), ISP들(818), 및/또는 내비게이션 컴포넌트(820)는 다른 양상들에서 생략될 수 있다. 추가로, 프로세싱 시스템(800)의 양상들이 다수의 디바이스들 사이에서 분산될 수 있다.
예시적인 조항들
[0125] 조항 1: 방법으로서, 뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신하는 단계; 및 제1 커널에 대해 제1 컨볼루션을 수행하는 단계 ― 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ― 를 포함하며, 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는, 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 단계; 및 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 복수의 중간 텐서들을 누적하는 단계를 포함하는, 방법.
[0126] 조항 2: 조항 1에 있어서, 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는, 입력 데이터 텐서의 중앙 영역 내의 엘리먼트들의 세트에 대해 제1 중간 컨볼루션을 수행하는 단계; 및 입력 데이터 텐서의 주변 상의 엘리먼트들의 세트에 대해 제2 중간 컨볼루션을 수행하는 단계를 포함하는, 방법.
[0127] 조항 3: 조항 1 또는 조항 2에 있어서, 복수의 중간 텐서들을 누적하기 이전에, 복수의 중간 텐서들 각각을 볼륨 시프팅하는 단계를 더 포함하는, 방법.
[0128] 조항 4: 조항 1 내지 조항 3 중 어느 한 조항에 있어서, 복수의 중간 텐서들을 누적하는 단계는, 복수의 중간 텐서들에 대해 엘리먼트별 합산을 수행하는 단계를 포함하는, 방법.
[0129] 조항 5: 조항 1 내지 조항 4 중 어느 한 조항에 있어서, 복수의 중간 텐서들을 누적하는 단계는, 복수의 중간 텐서들에 대해 포인트별 누적을 수행하는 단계를 포함하는, 방법.
[0130] 조항 6: 조항 1 내지 조항 5 중 어느 한 조항에 있어서, 복수의 중간 커널들 중 적어도 제1 중간 커널은 하나 이상의 빈 엘리먼트들을 포함하고, 제1 중간 커널을 사용하여 중간 컨볼루션을 수행하는 것은 하나 이상의 빈 엘리먼트들 각각을 프로세싱하는 것을 억제하는 것을 포함하는, 방법.
[0131] 조항 7: 조항 1 내지 조항 6 중 어느 한 조항에 있어서, 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는, 깊이 확장비 에 기초하여 입력 데이터 텐서의 깊이를 증가시키고 입력 데이터 텐서의 공간적 차원을 감소시킴으로써, 복수의 중간 텐서들을 생성하기 위해 공간-대-깊이 기법을 적용하는 단계를 더 포함하는, 방법.
[0132] 조항 8: 조항 1 내지 조항 7 중 어느 한 조항에 있어서, 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 있음 ― ; 그리고 복수의 중간 컨볼루션들은 와 동일한 스트라이드를 사용하여 수행되는, 방법.
[0133] 조항 9: 조항 1 내지 조항 8 중 어느 한 조항에 있어서, 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 없음 ― ; 그리고 복수의 중간 컨볼루션들은 복수의 중간 텐서들에서 채널들의 고정된 리셔플링 또는 리어드레싱을 사용하여 수행되는, 방법.
[0134] 조항 10: 조항 1 내지 조항 9 중 어느 한 조항에 있어서, 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는, 복수의 중간 단계적 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것; 복수의 중간 텐서들 각각에 대해 단계적 활성화 시프팅을 수행하는 것; 및 시프팅된 복수의 중간 텐서들의 단계적 활성화 누적을 수행하는 것을 포함하는 단계적 누적을 사용하여 수행되는, 방법.
[0135] 조항 11: 조항 1 내지 조항 10 중 어느 한 조항에 있어서, 선호되는 사이즈는 컴퓨터의 하나 이상의 하드웨어 컴포넌트들에 대응하는, 방법.
[0136] 조항 12: 시스템으로서, 컴퓨터 실행 가능 명령들을 포함하는 메모리; 및 컴퓨터 실행 가능 명령들을 실행하고, 프로세싱 시스템으로 하여금, 조항 1 내지 조항 11 중 어느 한 조항에 따른 방법을 수행하게 하도록 구성되는 하나 이상의 프로세서들을 포함하는, 시스템.
[0137] 조항 13: 시스템으로서, 조항 1 내지 조항 11 중 어느 한 조항에 따른 방법을 수행하기 위한 수단을 포함하는, 시스템.
[0138] 조항 14: 컴퓨터 실행 가능 명령들을 포함하는 비일시적 컴퓨터 판독 가능 매체로서, 컴퓨터 실행 가능 명령들은, 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 프로세싱 시스템으로 하여금, 조항 1 내지 조항 11 중 어느 한 조항에 따른 방법을 수행하게 하는, 비일시적 컴퓨터 판독 가능 매체.
[0139] 조항 15: 컴퓨터 판독 가능 저장 매체 상에 구현되는 컴퓨터 프로그램 제품으로서, 조항 1 내지 조항 11 중 어느 한 조항에 따른 방법을 수행하기 위한 코드를 포함하는, 컴퓨터 프로그램 제품.
추가 고려사항들
[0140] 이전 설명은 임의의 당업자가 본원에 설명된 다양한 양상들을 실시하는 것을 가능하게 하도록 제공된다. 본원에서 논의된 예들은 청구항들에서 기술된 범위, 적용 가능성, 또는 양상들의 제한이 아니다. 이러한 양상들에 대한 다양한 수정들은 당업자들에게 자명할 것이고, 본원에서 정의된 일반적인 원리들은 다른 양상들에 적용될 수 있다. 예컨대, 본 개시내용의 범위로부터 벗어나지 않으면서 논의된 엘리먼트들의 기능 및 어레인지먼트(arrangement)에 변경들이 이루어질 수 있다. 다양한 예들은 다양한 프로시저들 또는 컴포넌트들을 적절하게 생략, 대체 또는 추가할 수 있다. 예컨대, 설명된 방법들은 설명된 것과 상이한 순서로 수행될 수 있으며, 다양한 단계들이 추가, 생략 또는 조합될 수 있다. 또한, 일부 예들에 대해 설명된 특징들이 일부 다른 예들에서 조합될 수 있다. 예컨대, 본원에 기술된 임의의 수의 양상들을 사용하여 장치가 구현될 수 있거나 또는 방법이 실시될 수 있다. 또한, 본 개시내용의 범위는 본원에 기술된 개시내용의 다양한 양상들에 추가로 또는 이 양상들 이외의 다른 구조, 기능, 또는 구조 및 기능을 사용하여 실시되는 그러한 장치 또는 방법을 커버하는 것으로 의도된다. 본원에 개시된 개시내용의 임의의 양상은 청구항의 하나 이상의 엘리먼트들에 의해 구현될 수 있다는 것을 이해해야 한다.
[0141] 본원에서 사용되는 바와 같이, "예시적인"이라는 단어는 "예, 사례, 또는 예시로서 제공되는"을 의미한다. "예시적인"으로서 본원에 설명된 임의의 양상은 반드시 다른 양상들에 비해 바람직하거나 또는 유리한 것으로서 해석되는 것은 아니다.
[0142] 본원에서 사용되는 바와 같이, 항목들의 목록 중 "적어도 하나"를 지칭하는 문구는 단일 멤버들을 포함하여, 이러한 항목들의 임의의 조합을 지칭한다. 예로서, "a, b, 또는 c 중 적어도 하나"는 a, b, c, a-b, a-c, b-c 및 a-b-c뿐만 아니라 동일한 엘리먼트의 집합들(multiples)과의 임의의 조합(예컨대, a-a, a-a-a, a-a-b, a-a-c, a-b-b, a-c-c, b-b, b-b-b, b-b-c, c-c, 및 c-c-c 또는 a, b 및 c의 임의의 다른 순서)을 커버하는 것으로 의도된다.
[0143] 본원에서 사용되는 바와 같이, "결정하는"이라는 용어는 아주 다양한 동작들을 망라한다. 예컨대, "결정하는"은 계산하는, 컴퓨팅하는, 프로세싱하는, 도출하는, 조사하는, 룩업(look up)(예컨대, 표, 데이터베이스 또는 또 다른 데이터 구조에서 룩업)하는, 확인하는 등을 포함할 수 있다. 또한, "결정하는"은 수신하는(예컨대, 정보를 수신하는), 액세스하는(예컨대, 메모리 내의 데이터에 액세스하는) 등을 포함할 수 있다. 또한, "결정하는"은 해결하는, 선택하는, 선정하는, 설정하는 등을 포함할 수 있다.
[0144] 본원에서 사용되는 바와 같이, 본원에 설명된 엘리먼트들 사이에 전자 신호들 및 데이터를 공유하는 맥락에서, "~에 연결된"이라는 용어는 일반적으로, 서로 연결된 개개의 엘리먼트들 사이의 데이터 통신 중이라는 것을 의미할 수 있다. 일부 경우들에서, 엘리먼트들은, 이를테면, 서로 직접적으로 연결된 개개의 엘리먼트들 사이에서 신호들 및/또는 데이터를 반송할 수 있는 하나 이상의 전도성 트레이스들, 라인들, 또는 다른 전도성 캐리어들을 통해, 서로 직접적으로 연결될 수 있다. 다른 경우들에서, 엘리먼트들은, 이를테면, 서로 간접적으로 연결된 개개의 엘리먼트들 사이에서 신호들 및/또는 데이터를 통신하기 위한 하나 이상의 데이터 버스들 또는 유사한 공유 회로부 및/또는 집적 회로 엘리먼트들을 통해, 서로 간접적으로 연결될 수 있다.
[0145] 본원에 개시된 방법들은 방법들을 달성하기 위한 하나 이상의 단계들 또는 동작들을 포함한다. 방법 단계들 및/또는 동작들은 청구항들의 범위를 벗어나지 않으면서 서로 상호 교환될 수 있다. 다시 말해서, 단계들 또는 동작들의 특정 순서가 특정되지 않는 한, 특정 단계들 및/또는 동작들의 순서 및/또는 사용은 청구항들의 범위를 벗어나지 않으면서 수정될 수 있다. 추가로, 위에서 설명된 방법들의 다양한 동작들은 대응하는 기능들을 수행할 수 있는 임의의 적합한 수단에 의해 수행될 수 있다. 수단은, 회로, ASIC(application specific integrated circuit) 또는 프로세서를 포함하는(그러나, 이들에 제한되지 않음) 다양한 하드웨어 및/또는 소프트웨어 컴포넌트(들) 및/또는 모듈(들)을 포함할 수 있다. 일반적으로, 도면들에서 예시된 동작들이 존재하는 경우, 이러한 동작들은 유사한 번호를 갖는 대응하는 상응적(counterpart) 수단-플러스-기능 컴포넌트들을 가질 수 있다.
[0146] 다음의 청구항들은 본원에 나타내는 양상들에 제한되는 것으로 의도되는 것이 아니라, 청구항 문언과 일치하는 전체 범위를 따르는 것이다. 청구항 내에서, 단수의 엘리먼트에 대한 참조는, 구체적으로 언급되지 않으면, "하나 이상"을 의미하는 것이 아니라 "하나 및 단지 하나"를 의미하는 것으로 의도되는 것이 아니다. 구체적으로 달리 서술되지 않으면, "일부"라는 용어는 하나 이상을 지칭한다. 청구항 엘리먼트가 "~하기 위한 수단"이라는 문구를 사용하여 명백하게 기술되거나, 또는 방법 청구항의 경우, 엘리먼트가 "~하기 위한 단계"라는 문구를 사용하여 기술되지 않는 한, 어떠한 청구항 엘리먼트도 35 U.S.C.§112(f)의 조문들 하에서 해석되어야 하는 것은 아니다. 당업자들에게 알려져 있거나 또는 향후에 알려질 본 개시내용의 전반에 걸쳐 설명된 다양한 양상들의 엘리먼트들에 대한 모든 구조적 그리고 기능적 등가물들은 인용에 의해 본원에 명백하게 포함되고, 청구항들에 의해 망라되는 것으로 의도된다. 더욱이, 본원에 개시된 어떠한 것도, 그러한 개시내용이 청구항들에서 명시적으로 인용되는지 여부에 관계없이 공중에 전용되는 것으로 의도되는 것은 아니다.

Claims (30)

  1. 컴퓨터로 구현되는 방법(computer-implemented method)으로서,
    뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서(input data tensor)를 수신하는 단계; 및
    제1 커널(kernel)에 대해 제1 컨볼루션(convolution)을 수행하는 단계 ― 상기 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ―
    를 포함하며,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는,
    상기 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 단계; 및
    상기 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 상기 복수의 중간 텐서들을 누적하는 단계
    를 포함하는, 컴퓨터로 구현되는 방법.
  2. 제1 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는,
    상기 입력 데이터 텐서의 중앙 영역 내의 엘리먼트들의 세트에 대해 제1 중간 컨볼루션을 수행하는 단계; 및
    상기 입력 데이터 텐서의 주변 상의 엘리먼트들의 세트에 대해 제2 중간 컨볼루션을 수행하는 단계
    를 포함하는, 컴퓨터로 구현되는 방법.
  3. 제1 항에 있어서,
    상기 복수의 중간 텐서들을 누적하기 이전에, 상기 복수의 중간 텐서들 각각을 볼륨 시프팅(volume shift)하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법.
  4. 제1 항에 있어서,
    상기 복수의 중간 텐서들을 누적하는 단계는,
    상기 복수의 중간 텐서들의 엘리먼트별 합산(element-wise summation)을 수행하는 단계, 또는
    상기 복수의 중간 텐서들의 포인트별 누적(pointwise accumulation)을 수행하는 단계
    중 적어도 하나를 포함하는, 컴퓨터로 구현되는 방법.
  5. 제1 항에 있어서,
    상기 선호되는 사이즈는 컴퓨터의 하나 이상의 하드웨어 컴포넌트들에 대응하는, 컴퓨터로 구현되는 방법.
  6. 제1 항에 있어서,
    상기 복수의 중간 커널들 중 적어도 제1 중간 커널은 하나 이상의 빈(empty) 엘리먼트들을 포함하고, 그리고
    상기 제1 중간 커널을 사용하여 중간 컨볼루션을 수행하는 것은 상기 하나 이상의 빈 엘리먼트들 각각을 프로세싱하는 것을 억제하는 것을 포함하는, 컴퓨터로 구현되는 방법.
  7. 제1 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는,
    깊이 확장비 r에 기초하여 상기 입력 데이터 텐서의 깊이를 증가시키고 상기 입력 데이터 텐서의 공간적 차원(spatial dimensionality)을 감소시킴으로써, 상기 복수의 중간 텐서들을 생성하기 위해 공간-대-깊이(space-to-depth) 기법을 적용하는 단계
    를 더 포함하는, 컴퓨터로 구현되는 방법.
  8. 제7 항에 있어서,
    상기 제1 컨볼루션은 s와 동일한 스트라이드(stride)를 사용하여 수행되고 ― s는 r로 나눌 수 있음 ― ; 그리고
    상기 복수의 중간 컨볼루션들은 와 동일한 스트라이드를 사용하여 수행되는, 컴퓨터로 구현되는 방법.
  9. 제7 항에 있어서,
    상기 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 없음 ― ; 그리고
    상기 복수의 중간 컨볼루션들은 상기 복수의 중간 텐서들에서 채널들의 고정된 리셔플링(reshuffling) 또는 리어드레싱(re-addressing)을 사용하여 수행되는, 컴퓨터로 구현되는 방법.
  10. 제1 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 단계는,
    복수의 중간 단계적(in-step) 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것;
    상기 복수의 중간 텐서들 각각에 대해 단계적 활성화 시프팅을 수행하는 것; 및
    상기 시프팅된 복수의 중간 텐서들의 단계적 활성화 누적을 수행하는 것
    을 포함하는 단계적 누적을 사용하여 수행되는,
    컴퓨터로 구현되는 방법.
  11. 프로세싱 시스템으로서,
    컴퓨터 실행 가능 명령들을 포함하는 메모리; 및
    하나 이상의 프로세서들
    을 포함하며,
    상기 하나 이상의 프로세서들은, 상기 컴퓨터 실행 가능 명령들을 실행하고, 상기 프로세싱 시스템으로 하여금, 동작을 수행하게 하도록 구성되며,
    상기 동작은,
    뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신하는 것; 및
    제1 커널에 대해 제1 컨볼루션을 수행하는 것 ― 상기 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ―
    을 포함하며,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    상기 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것; 및
    상기 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 상기 복수의 중간 텐서들을 누적하는 것
    을 포함하는, 프로세싱 시스템.
  12. 제11 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    상기 입력 데이터 텐서의 중앙 영역 내의 엘리먼트들의 세트에 대해 제1 중간 컨볼루션을 수행하는 것; 및
    상기 입력 데이터 텐서의 주변 상의 엘리먼트들의 세트에 대해 제2 중간 컨볼루션을 수행하는 것
    을 포함하는, 프로세싱 시스템.
  13. 제11 항에 있어서,
    상기 동작은, 상기 복수의 중간 텐서들을 누적하기 이전에, 상기 복수의 중간 텐서들 각각을 볼륨 시프팅하는 것을 더 포함하는, 프로세싱 시스템.
  14. 제11 항에 있어서,
    상기 복수의 중간 텐서들을 누적하는 것은, 상기 복수의 중간 텐서들에 대해 엘리먼트별 합산을 수행하는 것을 포함하는, 프로세싱 시스템.
  15. 제11 항에 있어서,
    상기 복수의 중간 텐서들을 누적하는 것은, 상기 복수의 중간 텐서들에 대해 포인트별 누적을 수행하는 것을 포함하는, 프로세싱 시스템.
  16. 제11 항에 있어서,
    상기 복수의 중간 커널들 중 적어도 제1 중간 커널은 하나 이상의 빈 엘리먼트들을 포함하고, 그리고
    상기 제1 중간 커널을 사용하여 중간 컨볼루션을 수행하는 것은 상기 하나 이상의 빈 엘리먼트들 각각을 프로세싱하는 것을 억제하는 것을 포함하는, 프로세싱 시스템.
  17. 제11 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    깊이 확장비 r에 기초하여 상기 입력 데이터 텐서의 깊이를 증가시키고 상기 입력 데이터 텐서의 공간적 차원을 감소시킴으로써, 상기 복수의 중간 텐서들을 생성하기 위해 공간-대-깊이 기법을 적용하는 것
    을 더 포함하는, 프로세싱 시스템.
  18. 제17 항에 있어서,
    상기 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 있음 ― ; 그리고
    상기 복수의 중간 컨볼루션들은 와 동일한 스트라이드를 사용하여 수행되는, 프로세싱 시스템.
  19. 제17 항에 있어서,
    상기 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 없음 ― ; 그리고
    상기 복수의 중간 컨볼루션들은 상기 복수의 중간 텐서들에서 채널들의 고정된 리셔플링 또는 리어드레싱을 사용하여 수행되는, 프로세싱 시스템.
  20. 제11 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    복수의 중간 단계적 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것;
    상기 복수의 중간 텐서들 각각에 대해 단계적 활성화 시프팅을 수행하는 것; 및
    상기 시프팅된 복수의 중간 텐서들의 단계적 활성화 누적을 수행하는 것
    을 포함하는 단계적 누적을 사용하여 수행되는, 프로세싱 시스템.
  21. 컴퓨터 실행 가능 명령들을 포함하는 비일시적 컴퓨터 판독 가능 저장 매체로서,
    상기 컴퓨터 실행 가능 명령들은, 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 상기 프로세싱 시스템으로 하여금, 동작을 수행하게 하며,
    상기 동작은,
    뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신하는 것; 및
    제1 커널에 대해 제1 컨볼루션을 수행하는 것 ― 상기 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ―
    을 포함하며,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    상기 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것; 및
    상기 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 상기 복수의 중간 텐서들을 누적하는 것
    을 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  22. 제21 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    상기 입력 데이터 텐서의 중앙 영역 내의 엘리먼트들의 세트에 대해 제1 중간 컨볼루션을 수행하는 것; 및
    상기 입력 데이터 텐서의 주변 상의 엘리먼트들의 세트에 대해 제2 중간 컨볼루션을 수행하는 것
    을 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  23. 제21 항에 있어서,
    상기 동작은, 상기 복수의 중간 텐서들을 누적하기 이전에, 상기 복수의 중간 텐서들 각각을 볼륨 시프팅하는 것을 더 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  24. 제21 항에 있어서,
    상기 복수의 중간 텐서들을 누적하는 것은, 상기 복수의 중간 텐서들에 대해 엘리먼트별 합산을 수행하는 것을 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  25. 제21 항에 있어서,
    상기 복수의 중간 텐서들을 누적하는 것은, 상기 복수의 중간 텐서들에 대해 포인트별 누적을 수행하는 것을 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  26. 제21 항에 있어서,
    상기 복수의 중간 커널들 중 적어도 제1 중간 커널은 하나 이상의 빈 엘리먼트들을 포함하고, 그리고
    상기 제1 중간 커널을 사용하여 중간 컨볼루션을 수행하는 것은 상기 하나 이상의 빈 엘리먼트들 각각을 프로세싱하는 것을 억제하는 것을 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  27. 제21 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    깊이 확장비 r에 기초하여 상기 입력 데이터 텐서의 깊이를 증가시키고 상기 입력 데이터 텐서의 공간적 차원을 감소시킴으로써, 상기 복수의 중간 텐서들을 생성하기 위해 공간-대-깊이 기법을 적용하는 것
    을 더 포함하는, 비일시적 컴퓨터 판독 가능 저장 매체.
  28. 제27 항에 있어서,
    상기 제1 컨볼루션은 s와 동일한 스트라이드를 사용하여 수행되고 ― s는 r로 나눌 수 있음 ― ; 그리고
    상기 복수의 중간 컨볼루션들은 와 동일한 스트라이드를 사용하여 수행되는, 비일시적 컴퓨터 판독 가능 저장 매체.
  29. 제21 항에 있어서,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하는 것은,
    복수의 중간 단계적 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하는 것;
    상기 복수의 중간 텐서들 각각에 대해 단계적 활성화 시프팅을 수행하는 것; 및
    상기 시프팅된 복수의 중간 텐서들의 단계적 활성화 누적을 수행하는 것
    을 포함하는 단계적 누적을 사용하여 수행되는, 비일시적 컴퓨터 판독 가능 저장 매체.
  30. 프로세싱 시스템으로서,
    뉴럴 네트워크의 제1 계층에서 입력 데이터 텐서를 수신하기 위한 수단; 및
    제1 커널에 대해 제1 컨볼루션을 수행하기 위한 수단 ― 상기 제1 커널은 선호되는 사이즈보다 큰 사이즈를 가짐 ―
    을 포함하며,
    상기 제1 커널에 대해 제1 컨볼루션을 수행하기 위한 수단은,
    상기 선호되는 사이즈의 사이즈를 갖는 복수의 중간 커널들을 사용하여 복수의 중간 컨볼루션들을 수행함으로써 복수의 중간 텐서들을 생성하기 위한 수단; 및
    상기 제1 컨볼루션에 대한 출력 텐서를 생성하기 위해 상기 복수의 중간 텐서들을 누적하기 위한 수단
    을 포함하는, 프로세싱 시스템.
KR1020237040205A 2021-06-02 2022-06-02 커널 확장 및 텐서 누적을 이용한 컨볼루션 KR20240017797A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202163196122P 2021-06-02 2021-06-02
US63/196,122 2021-06-02
US17/805,021 2022-06-01
US17/805,021 US20220391702A1 (en) 2021-06-02 2022-06-01 Convolution with kernel expansion and tensor accumulation
PCT/US2022/072709 WO2022256814A1 (en) 2021-06-02 2022-06-02 Convolution with kernel expansion and tensor accumulation

Publications (1)

Publication Number Publication Date
KR20240017797A true KR20240017797A (ko) 2024-02-08

Family

ID=84284254

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237040205A KR20240017797A (ko) 2021-06-02 2022-06-02 커널 확장 및 텐서 누적을 이용한 컨볼루션

Country Status (5)

Country Link
US (1) US20220391702A1 (ko)
EP (1) EP4348510A1 (ko)
KR (1) KR20240017797A (ko)
CN (1) CN117413280A (ko)
BR (1) BR112023024455A2 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102690970B1 (ko) * 2023-06-23 2024-08-05 오픈엣지테크놀로지 주식회사 신경망 액티베이션의 채널별 크기를 감소시키고 채널의 총 개수를 증가시키는 액티베이션 변환방법, 및 이를 위한 하드웨어 가속장치와 컴퓨팅 장치

Also Published As

Publication number Publication date
EP4348510A1 (en) 2024-04-10
BR112023024455A2 (pt) 2024-02-06
CN117413280A (zh) 2024-01-16
US20220391702A1 (en) 2022-12-08

Similar Documents

Publication Publication Date Title
US11886536B2 (en) Methods and systems for implementing a convolution transpose layer of a neural network
KR102261768B1 (ko) 대안적인 루프 제한
CN109871936B (zh) 用于处理神经网络中的卷积运算的方法和装置
JP6961640B2 (ja) データ処理のシステムおよび方法
EP4024290A1 (en) Implementing fully-connected neural-network layers in hardware
US11164032B2 (en) Method of performing data processing operation
US20240303837A1 (en) Method and apparatus with convolution neural network processing
US11120328B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
JP2023541350A (ja) 表畳み込みおよびアクセラレーション
CN114792124A (zh) 在硬件中实施扩张卷积
CN115600662A (zh) 在硬件中实施池化和反池化或反向池化
KR20240017797A (ko) 커널 확장 및 텐서 누적을 이용한 컨볼루션
EP3690757B1 (en) Method and apparatus with convolution neural network processing
US20230065725A1 (en) Parallel depth-wise processing architectures for neural networks
KR20230018375A (ko) 구조화된 콘볼루션들 및 연관된 가속
WO2022256814A1 (en) Convolution with kernel expansion and tensor accumulation
US20210303987A1 (en) Power reduction for machine learning accelerator background
CN113672612A (zh) 索引源数组中的元素
GB2604924A (en) Methods and systems for generating the gradients of a loss function with respectto the weights of a convolution layer
CN110610227B (zh) 人工神经网络调整方法及神经网络计算平台
CN110765413A (zh) 矩阵求和结构及神经网络计算平台
KR20240037233A (ko) 뉴럴 네트워크 가속기에서의 데이터-재사용을 위한 활성화 버퍼 아키텍처
GB2602494A (en) Implementing fully-connected neural-network layers in hardware
WO2023158912A1 (en) Dimensionality transformation for efficient bottleneck processing
GB2623140A (en) Methods and systems for performing a sparse submanifold convolution using an NNA