KR20200140282A - 효율적인 컨볼루션 엔진 - Google Patents
효율적인 컨볼루션 엔진 Download PDFInfo
- Publication number
- KR20200140282A KR20200140282A KR1020207029190A KR20207029190A KR20200140282A KR 20200140282 A KR20200140282 A KR 20200140282A KR 1020207029190 A KR1020207029190 A KR 1020207029190A KR 20207029190 A KR20207029190 A KR 20207029190A KR 20200140282 A KR20200140282 A KR 20200140282A
- Authority
- KR
- South Korea
- Prior art keywords
- data storage
- storage element
- product
- electrically coupled
- data
- Prior art date
Links
- 238000013500 data storage Methods 0.000 claims description 382
- 238000000034 method Methods 0.000 claims description 22
- 229910052709 silver Inorganic materials 0.000 claims description 16
- 239000004332 silver Substances 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 7
- 230000001360 synchronised effect Effects 0.000 claims description 5
- 238000013527 convolutional neural network Methods 0.000 abstract description 9
- 230000036961 partial effect Effects 0.000 description 49
- 230000004913 activation Effects 0.000 description 33
- 238000004364 calculation method Methods 0.000 description 29
- 238000012545 processing Methods 0.000 description 28
- BQCADISMDOOEFD-UHFFFAOYSA-N Silver Chemical compound [Ag] BQCADISMDOOEFD-UHFFFAOYSA-N 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 239000011159 matrix material Substances 0.000 description 10
- 238000012549 training Methods 0.000 description 6
- 238000013145 classification model Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 241000282326 Felis catus Species 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000008450 motivation Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000001815 facial effect Effects 0.000 description 1
- 238000003709 image segmentation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
- G06N5/046—Forward inferencing; Production systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Lubrication Of Internal Combustion Engines (AREA)
- Image Processing (AREA)
Abstract
컨볼루션 신경망을 구현하기 위한 하드웨어 아키텍처.
Description
관련 출원
본 출원은 2018년 3월 13일에 출원된 미국 가출원 제 62/642,578호 및 2018년 7월 5일에 출원된 미국 가출원 제 62/694,290호를 우선권으로 주장한다.
발명의 분야
본 발명은 컨볼루션 엔진을 위한 하드웨어 아키텍처에 관한 것으로, 특히 컨볼루션 엔진의 유닛(컨볼버 유닛(convolver unit) 또는 기능 유닛이라고 함)을 계산하기 위해 데이터 값을 제공하는 효율적인 방법에 관한 것이다.
오늘날, 신경망(특히 컨볼루션 신경망)은 이미지 인식/분류, 객체 인식/분류 및 이미지 분할을 수행하기 위해 널리 사용된다. 다양한 출원(예를 들면, 자율-주행 자동차의 객체 식별, 소셜 네트워크용 안면 인식 등)이 있지만, 신경망은 집중적인 계산 프로세싱과 빈번한 메모리 액세스가 필요하다. 본 원에서 설명되는 것은 컨볼루션 신경망을 구현하기 위한 효율적인 하드웨어 아키텍처이다.
도 1은 신경망에서 모델 훈련 및 모델 적용의 개요를 제공하는 다이어그램을 도시한다.
도 2는 컨볼루션 연산의 입력, 단일 2차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 3은 2차원 필터를 사용하는 컨볼루션 연산의 계산을 설명하는 다이어그램을 도시한다.
도 4는 컨볼루션 연산의 입력, 복수의 2차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 5는 컨볼루션 연산의 입력, 단일 3차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 6은 3차원 필터를 사용하는 컨볼루션 연산의 계산을 설명하는 다이어그램을 도시한다.
도 7은 컨볼루션 연산의 입력, 복수의 3차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 8은 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터 및 컨볼버 유닛의 어레이를 포함하는 컨볼루션 엔진을 도시한다.
도 9a 및 도 9b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 9c 및 도 9d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 필터 가중치(filter weight)의 로딩을 도시한다.
도 10a 및 도 10b는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 0의 패딩 행(zero padding row)의 로딩을 도시한다.
도 10b 내지 도 10d는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 데이터 값의 로딩을 도시한다.
도 11a 및 도 11b는 본 발명의 일 실시예에 따른, 도 10d에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 11c는 본 발명의 일 실시예에 따른, 도 10d에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 12는 도 10d에 도시된 데이터 값의 공간적 배향에 비해, 2-D 시프트 레지스터의 일 행 아래로 시프트된 후의 데이터 값을 도시한다.
도 13a 내지 도 13d는 본 발명의 일 실시예에 따른, 도 12에 도시된 데이터 값의 공간적 배향을 위한 4개의 컨볼버 유닛의 프로세싱을 설명한다.
도 13e는 본 발명의 일 실시예에 따른, 도 12에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱 이후의 결과적인 부분 합을 도시한다.
도 14a 및 도 14b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 데이터 값 로딩을 도시한다.
도 14c 및 도 14d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 필터 가중치의 로딩을 도시한다.
도 15a 및 도 15b는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 0의 패딩 행의 로딩을 도시한다.
도 15b 내지 도 15d는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 데이터 값 로딩을 도시한다.
도 16a 및 도 16b는 본 발명의 일 실시예에 따른, 도 15d에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 16c는 본 발명의 일 실시예에 따른, 도 15d에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 17은 도 15d에 도시된 데이터 값의 공간적 배향에 비해 2-D 시프트 레지스터의 일 행 아래로 시프트된 후의 데이터 값을 도시한다.
도 18a 내지 도 18b는 본 발명의 일 실시예에 따른, 도 17에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 18c는 본 발명의 일 실시예에 따른, 도 17에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 19a 및 도 19b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 바이어스 값의 로딩을 도시한다.
도 20은 본 발명의 일 실시예에 따른, 부분 합이 바이어스 값으로 바이어스된 후의 컨볼버 유닛 각각의 출력을 도시한다.
도 21은 본 발명의 일 실시예에 따른, 컨볼버 유닛의 내부 구성 요소를 도시한다.
도 22는 본 발명의 일 실시예에 따른, 컨볼루션 연산의 스트라이드(stride)를 제어하기 위한 제어 회로를 도시한다.
도 23은 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터 및 기능 유닛의 어레이를 포함하는 일반화된 컨볼루션 엔진을 도시한다.
도 24는 본 발명의 일 실시예에 따른, 기능 유닛의 내부 구성 요소를 도시한다.
도 25는 본 발명의 일 실시예에 따른, 입력 채널로부터 컨볼버 유닛의 m개의 열을 갖는 컨볼루션 엔진으로 로딩되는 데이터 값의 세 가지 시나리오를 도시하며, 시나리오(a)는 데이터 값의 m개의 열을 갖는 입력 채널을 나타내며, 시나리오(b)는 데이터 값의 3m-4개의 열을 갖는 입력 채널을 나타내며, 시나리오 (c)는 데이터 값의 m/2개의 열을 갖는 입력 채널을 나타낸다.
도 26a 및 도 26b는 본 발명의 일 실시예에 따른, 시나리오(a)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 27a 내지 도 27c는 본 발명의 일 실시예에 따른, 시나리오(b)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 28은 본 발명의 일 실시예에 따른, 시나리오(c)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 29a 및 도 29b는 본 발명의 일 실시예에 따른, 시나리오(c)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 위한 대안적인 방식을 도시한다.
도 30은 본 발명의 일 실시예에 따른, 더 큰 시스템의 하나의 구성 요소로서 컨볼루션 엔진을 도시한다.
도 31은 본 발명의 일 실시예에 따른, 가중치가 컨볼버 유닛에 제공되기 전에 필터 가중치를 압축 해제하기 위한 구성 요소의 블록도를 도시한다.
도 2는 컨볼루션 연산의 입력, 단일 2차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 3은 2차원 필터를 사용하는 컨볼루션 연산의 계산을 설명하는 다이어그램을 도시한다.
도 4는 컨볼루션 연산의 입력, 복수의 2차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 5는 컨볼루션 연산의 입력, 단일 3차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 6은 3차원 필터를 사용하는 컨볼루션 연산의 계산을 설명하는 다이어그램을 도시한다.
도 7은 컨볼루션 연산의 입력, 복수의 3차원 필터를 포함하는 모델 매개 변수, 및 출력의 다이어그램을 도시한다.
도 8은 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터 및 컨볼버 유닛의 어레이를 포함하는 컨볼루션 엔진을 도시한다.
도 9a 및 도 9b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 9c 및 도 9d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 필터 가중치(filter weight)의 로딩을 도시한다.
도 10a 및 도 10b는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 0의 패딩 행(zero padding row)의 로딩을 도시한다.
도 10b 내지 도 10d는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 데이터 값의 로딩을 도시한다.
도 11a 및 도 11b는 본 발명의 일 실시예에 따른, 도 10d에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 11c는 본 발명의 일 실시예에 따른, 도 10d에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 12는 도 10d에 도시된 데이터 값의 공간적 배향에 비해, 2-D 시프트 레지스터의 일 행 아래로 시프트된 후의 데이터 값을 도시한다.
도 13a 내지 도 13d는 본 발명의 일 실시예에 따른, 도 12에 도시된 데이터 값의 공간적 배향을 위한 4개의 컨볼버 유닛의 프로세싱을 설명한다.
도 13e는 본 발명의 일 실시예에 따른, 도 12에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱 이후의 결과적인 부분 합을 도시한다.
도 14a 및 도 14b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 데이터 값 로딩을 도시한다.
도 14c 및 도 14d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 필터 가중치의 로딩을 도시한다.
도 15a 및 도 15b는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 0의 패딩 행의 로딩을 도시한다.
도 15b 내지 도 15d는 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터로의 데이터 값 로딩을 도시한다.
도 16a 및 도 16b는 본 발명의 일 실시예에 따른, 도 15d에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 16c는 본 발명의 일 실시예에 따른, 도 15d에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 17은 도 15d에 도시된 데이터 값의 공간적 배향에 비해 2-D 시프트 레지스터의 일 행 아래로 시프트된 후의 데이터 값을 도시한다.
도 18a 내지 도 18b는 본 발명의 일 실시예에 따른, 도 17에 도시된 데이터 값의 공간적 배향을 위한 2개의 컨볼버 유닛의 프로세싱을 도시한다.
도 18c는 본 발명의 일 실시예에 따른, 도 17에 도시된 데이터 값의 공간적 배향에 대한 모든 활성 컨볼버 유닛의 프로세싱에 따른 결과적인 부분 합을 도시한다.
도 19a 및 도 19b는 본 발명의 일 실시예에 따른, 컨볼루션 엔진으로의 바이어스 값의 로딩을 도시한다.
도 20은 본 발명의 일 실시예에 따른, 부분 합이 바이어스 값으로 바이어스된 후의 컨볼버 유닛 각각의 출력을 도시한다.
도 21은 본 발명의 일 실시예에 따른, 컨볼버 유닛의 내부 구성 요소를 도시한다.
도 22는 본 발명의 일 실시예에 따른, 컨볼루션 연산의 스트라이드(stride)를 제어하기 위한 제어 회로를 도시한다.
도 23은 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터 및 기능 유닛의 어레이를 포함하는 일반화된 컨볼루션 엔진을 도시한다.
도 24는 본 발명의 일 실시예에 따른, 기능 유닛의 내부 구성 요소를 도시한다.
도 25는 본 발명의 일 실시예에 따른, 입력 채널로부터 컨볼버 유닛의 m개의 열을 갖는 컨볼루션 엔진으로 로딩되는 데이터 값의 세 가지 시나리오를 도시하며, 시나리오(a)는 데이터 값의 m개의 열을 갖는 입력 채널을 나타내며, 시나리오(b)는 데이터 값의 3m-4개의 열을 갖는 입력 채널을 나타내며, 시나리오 (c)는 데이터 값의 m/2개의 열을 갖는 입력 채널을 나타낸다.
도 26a 및 도 26b는 본 발명의 일 실시예에 따른, 시나리오(a)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 27a 내지 도 27c는 본 발명의 일 실시예에 따른, 시나리오(b)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 28은 본 발명의 일 실시예에 따른, 시나리오(c)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 도시한다.
도 29a 및 도 29b는 본 발명의 일 실시예에 따른, 시나리오(c)에 대한 컨볼루션 엔진으로의 데이터 값의 로딩을 위한 대안적인 방식을 도시한다.
도 30은 본 발명의 일 실시예에 따른, 더 큰 시스템의 하나의 구성 요소로서 컨볼루션 엔진을 도시한다.
도 31은 본 발명의 일 실시예에 따른, 가중치가 컨볼버 유닛에 제공되기 전에 필터 가중치를 압축 해제하기 위한 구성 요소의 블록도를 도시한다.
바람직한 실시예에 대한 다음의 상세한 설명에서, 그 일부를 형성하고 본 발명이 실시될 수 있는 특정 실시예의 예시로서 도시된 첨부 도면을 참조한다. 다른 실시예가 이용될 수 있고 본 발명의 범위를 벗어나지 않고 구조적 변경이 이루어질 수 있음이 이해된다. 도면 중 어느 하나와 관련된 설명은 동일하거나 유사한 구성 요소/단계를 포함하는 다른 도면에 적용될 수 있다.
도 1은 신경망에서 훈련 단계 및 추론 단계의 개요를 제공하는 다이어그램을 도시한다. 훈련 단계에서는, 분류 모델(104)의 모델 매개 변수("가중치"라고도 함)를 훈련하기 위해 입력 및 공지된(또는 원하는) 출력 쌍이 제공될 수 있다. 간결함을 위해, 하나의 입력 및 출력 쌍(102, 106)만 도 1에 도시되지만, 실제로는 다수의 공지된 입력 및 출력 쌍이 분류 모델(104)을 훈련시키는데 사용될 것이다. 도 1의 예에서, 입력(102)은 숫자(이미지의 픽셀을 나타낼 수 있음)의 행렬이고 공지된 출력(106)은 분류 확률의 벡터이다(예를 들면, 입력 이미지가 고양이일 확률은 1, 입력 이미지가 개일 확률은 0, 그리고 입력 이미지가 사람일 확률은 0). 하나의 가능한 훈련 프로세스에서, 분류 확률은 사람에 의해 제공될 수 있다(예를 들면, 사람은 입력 이미지가 고양이를 묘사한다는 것을 인식하고 그에 따라 분류 확률을 할당할 수 있다). 모델 학습 프로세스가 끝나면, 모델 매개 변수가 추정된다(예를 들면, W1=1.2, W2=3.8, W3=2.7). 때때로, 모델 매개 변수를 해석하기 위한 직관적인 방법이 있을 수 있지만, 여러 번 직관이 연관되어 있지 않을 수 있으며 모델 매개 변수는 단순히 동시에 "모델 과적합(model overfitting)"을 회피하면서, 주어진 세트의 입력의 모델의 분류(또는 모델의 분류 확률)와 공지된 분류(또는 공지된 분류 확률) 사이의 오류를 최소화하는 매개 변수일 수 있다.
추론(또는 예측 또는 피드-포워드(feed-forward)) 단계에서, 훈련된 매개 변수(즉, 훈련 단계 동안 훈련된 매개 변수)를 갖는 분류 모델(104)이 입력 세트를 분류하는데 사용된다. 인스턴트 적용에서, 훈련된 분류 모델(104)은 입력(108)에 대한 응답에서 확률 벡터의 분류 출력(110)을 제공한다(예를 들어, 입력 이미지가 고양이일 확률은 0.3이고, 입력 이미지가 개일 확률은 0.6이고, 입력 이미지가 사람일 확률은 0.1임).
분류 모델(104)의 일 실시예는 컨볼루션 신경망이다. 컨볼루션 신경망의 기본 구성 요소는 도 2 내지 도 7에서 설명된 컨볼루션 연산이다. 아래에서 더 설명되는 바와 같이, 컨볼루션 연산은 2차원 입력과 2차원 필터를 이용한 2차원 컨볼루션 연산, 3차원 입력과 3차원 필터를 이용한 3차원 컨볼루션 연산, 등을 지칭할 수 있다.
도 2는 2차원 컨볼루션 연산의 입력, 모델 매개 변수, 및 출력의 다이어그램을 도시한다. 도 2의 예에서, 입력에는 숫자 값의 2차원 행렬이 포함된다(각각의 숫자 값은 추상적으로 ""로 표시됨). 도 2의 예에 있는 행렬은 4x4 행렬이지만 다른 입력은 다른 차원을 가질 수 있다(예를 들면, 100x100 정사각형 행렬, 20x70 직사각형 행렬 등일 수 있다). 나중에 제시된 예는 입력이 심지어 3차원 객체일 수도 있음을 보여준다. 사실, 입력은 여러 차원의 객체가 될 수 있다. 입력은 이미지의 픽셀 값을 나타내거나 이전 컨볼루션 연산의 출력을 나타낼 수 있다.
모델 매개 변수는 필터 및 바이어스를 포함할 수 있다. 도 2의 예에서, 필터는 3x3 행렬의 값(상기 값은 "가중치"라고도 함)이고 바이어스는 스칼라 값이다. 전형적으로, 각각의 필터와 관련된 하나의 바이어스가 있다. 도 2의 예에는 하나의 필터가 포함되어 있으므로, 하나의 해당 바이어스가 있다. 그러나, 특정 실시예에서, 5 개의 필터가 있다면, 각각의 필터에 대해 하나씩 5개의 연관된 바이어스가 있을 것이다.
컨볼루션 연산자(208)(약칭 "conv")는 입력(202) 및 모델 매개 변수(204, 206)를 수신하고 활성화 맵(activation map) 또는 특징 맵(feature map)이라고 하는 출력(210)을 생성한다. 활성화 맵의 각 값은 입력(202)과 필터(204)(입력(202)에 상대적인 특정 공간 위치에서)와 바이어스(206) 사이의 내적의 합으로 생성된다. 활성화 맵(210)에 도달하기 위한 계산은 아래 도 3에서 더 자세히 설명된다.
도 3의 제 1 행은 활성화 맵(210)의 위치(x=1, y=1)에 있는 요소의 계산을 설명한다. 제 1 행에 표시된 바와 같이, 필터(204)의 중심은 입력(202)의 위치(1, 1)에서 요소와 공간적으로 정렬된다. 이러한 계산은 입력(202)이 암시적으로 0의 경계에 의해 둘러싸이는 "0의 패딩(zero padding)"의 사용을 가정한다. 0의 패딩을 사용하는 장점은 입력(202) 및 출력 활성화 맵(210)의 차원이 3x3 필터를 사용할 때 일정하게 유지된다는 것이다. 내적은 필터(204)와 필터(204)와 공간적으로 정렬되는 입력(202)의 4개의 값 사이에서 계산된다. 내적은 이어서 활성화 맵(210)의 위치(1, 1)에 있는 요소에 도달하기 위해 바이어스(b)와 합산된다.
도 3의 제 2 행은 활성화 맵(210)의 위치(1, 2)에 있는 요소의 계산을 설명한다. 제 2 행에 도시된 바와 같이, 필터(204)의 중심은 입력(202)의 위치(1, 2)에 있는 요소와 공간적으로 정렬된다. 내적은 필터(204)와 필터(204)와 공간적으로 정렬하는 입력(202)의 6개 값 사이에서 계산된다. 이어서 내적은 바이어스(b)와 합산되어 활성화 맵(210)의 위치(1, 2)에서 요소에 도달한다.
도 3의 제 3 행은 활성화 맵(210)의 위치(1, 3)에 있는 요소의 계산을 설명한다. 제 3 행에 도시된 바와 같이, 필터(204)의 중심은 입력(202)의 위치(1, 3)에서 요소와 공간적으로 정렬된다. 내적은 필터(204)와 필터(204)와 공간적으로 정렬되는 입력(202)의 6개 값 사이에서 계산된다. 이어서 내적은 바이어스(b)와 합산되어 활성화 맵(210)의 위치(1, 3)에서 요소에 도달한다.
도 3의 제 4 행은 활성화 맵(210)의 위치(4, 4)에서 요소의 계산을 설명한다. 제 4 행에 도시된 바와 같이, 필터(204)의 중심은 입력(202)의 위치(4, 4)에서 요소와 공간적으로 정렬된다. 내적은 필터(204)와 필터(204)와 공간적으로 정렬되는 입력(202)의 4개의 값 사이에서 계산된다. 이어서, 내적은 바이어스(b)와 합산되어 활성화 맵(210)의 위치(4, 4)에서 요소에 도달한다. 일반적으로, 컨볼루션 연산은 복수의 시프트(또는 정렬), 내적, 및 바이어스(또는 합) 단계을 포함한다. 본 예에서, 필터는 내적 계산(단계 크기 또는 스트라이드라고 함) 사이에 1개의 공간 위치만큼 시프트되었지만, 2, 3 등의 다른 단계 크기도 가능하다.
도 4는 단일 필터(204), 단일 바이어스(206), 및 단일 활성화 맵(210) 대신에 F 필터(404), F 바이어스(406), 및 F 활성화 맵(410)이 있다는 점을 제외하고는 도 2와 유사하다. F 필터(404), F 바이어스(406), 및 F 활성화 맵(410) 사이의 관계는 다음과 같다: 필터(f1), 바이어스(b1), 및 입력(402)은 활성화 맵(y1)을 계산하는데 사용되고(필터(204), 바이어스(206), 및 입력(202)이 도 2에서 활상화 맵(210)을 계산하기 위해 사용된 것과 매우 동일한 방식으로); 필터(f2), 바이어스(b2), 및 입력(402)은 활성화 맵(y2)를 계산하는 데 사용된다; 등등.
도 5는, 2차원 입력(202) 및 2차원 필터(204) 대신에, 3차원 입력(502) 및 3차원 필터(504)가 사용된다는 점을 제외하고는, 도 2와 유사하다. 활성화 맵(510)에 도달하기 위한 계산은 도 6에서 아래에서 더 자세히 설명된다. 입력(502) 및 필터(504)는 3차원이지만, 도 6의 관련 설명에서 더 명확하게 되는 바와 같이, 활성화 맵(510)은 2차원이다. 필터(504)의 각각의 "슬라이스(slice)"(입력(502)의 "채널(channel)"과 유사 함)는 커널(kernel)이라고 부를 수 있다. 도 5에서, 필터(504)는 5 개의 커널로 구성되고 입력(502)은 5 개의 채널로 구성된다. 아직 분명하지 않다면, 필터(504)의 커널의 수(또는 필터(504)의 "z" 차원의 크기)는 입력(502)의 채널 수(또는 입력(502)의 "z" 차원의 크기)와 일치해야 한다. 컨볼루션 연산 동안, 입력(502)의 채널 1은 필터(504)의 커널 1과 정렬되고; 입력(502)의 채널 2는 필터(504)의 커널 2와 정렬된다; 등등. 일반적으로, 컨볼루션 작동 동안 z 차원에서 입력(502)에 대한 필터(504)의 변형(translation)이 없다.
도 6의 제 1 행은 활성화 맵(510)의 위치(x=1, y=1)에서의 요소의 계산을 설명한다. 제 1 행에 도시된 바와 같이, 필터(504)의 중심 축선(506)(중심 축선이 Z-축선에 대해 평행하게 그려짐) z 축에 평행)은 입력(502)의 z∈{1, ... , 5}에 대한 위치(1, 1, z)에서 요소와 정렬된다. 필터(504)와 필터(504)와 공간적으로 정렬되는 입력(502)의 20개 값(채널당 4개의 정렬된 값 x 5개의 채널) 사이에서 내적이 계산된다. 이어서, 내적은 바이어스(b)와 합산되어 활성화 맵(510)의 위치(1, 1)에서 요소에 도달한다.
도 6의 제 2 행은 활성화 맵(510)의 위치(1, 2)에서 요소의 계산을 설명한다. 제 2 행에 도시된 바와 같이, 필터(504)의 중심 축선(506)은 입력(502)의 z∈{1, ... , 5}에 대해 위치(1, 3, z)에서 요소와 정렬된다. 내적은 필터(504)와 필터(504)와 공간적으로 정렬되는 입력(502)의 30개 값(채널당 6개의 정렬된 값 x 5개 채널)사이에서 내적이 계산된다. 이어서, 내적은 바이어스(b)와 합산되어 활성화 맵(510)의 위치(1, 2)에서 요소에 도달한다.
도 6의 제 3 행은 활성화 맵(510)의 위치(1, 3)에서 요소의 계산을 설명한다. 제 3 행에 도시된 바와 같이, 필터(504)의 중심 축선(506)은 입력(502)의 z∈{1, ... , 5}에 대해 위치(1, 2, z)에서 요소와 정렬된다. 필터(504)와 필터(504)와 공간적으로 정렬되는 입력(502)의 30개 값(채널당 6개의 정렬된 값 x 5개 채널) 사이에서 내적이 계산된다. 이어서, 내적은 바이어스(b)와 합산되어 활성화 맵(510)의 위치(1, 3)에서 요소에 도달한다.
도 6의 제 4 행은 활성화 맵(510)의 위치(4, 4)에서 요소의 계산을 설명한다. 제 4 행에 도시된 바와 같이, 필터(504)의 중심 축선(506)은 입력(502)의 z∈{1, ... , 5}에 대해 위치(4, 4, z)에서 요소와 정렬된다. 필터(504)와 필터(504)와 공간적으로 정렬되는 입력 502의 20개 값(채널당 4개의 정렬된 값 x 5개 채널) 사이에 내적이 계산된다. 이어서 내적은 바이어스(b)와 합산되어 활성화 맵(510)의 위치(4, 4)에서 요소에 도달한다.
도 7은 단일 3차원 필터(504), 단일 바이어스(506), 및 단일 활성화 맵(510) 대신에, F 3차원 필터(704), F 바이어스(706), 및 F 활성화 맵(710)(F>1)이 있다는 것을 제외하고는, 도 5와 유사하다. F 3차원 필터(704), F 바이어스(706), 및 F 활성화 맵(710) 사이의 관계는 다음과 같다: 필터(f1), 바이어스(b1), 및 입력(702)은 활성화 맵(y1)을 계산하기 위해 사용되고(매우 필터(504), 바이어스(506), 및 입력(502)이 도 5의 활성화 맵(510)을 계산하기 위해 사용된 것과 매우 동일한 방식으로); 필터(f2), 바이어스(b2), 및 입력(702)은 활성화 맵(y2)를 계산하기 위해 사용된다; 등등.
다음의 도면은 도 7의 컨볼루션 연산을 수행하기 위한 하드웨어 아키텍처를 설명한다. 많은 예는 단순화를 위해 2개의 필터, F=2의 사용을 가정한다. 상기 예는 필터(704)가 3x3 커널(즉, 각각의 커널이 9개의 가중치로 구성됨)을 사용하여 구성된다고 추가로 가정한다. 그러나, 본원에서 설명된 개념/아키텍처는 다른 차원의 커널을 수용하도록 수정될 수 있음이 이해된다.
도 8은 본 발명의 일 실시예에 따른, 컨볼루션 엔진(708)을 도시한다. 컨볼루션 엔진(708)(도 8에 도시됨)은 컨볼루션 연산자("conv")(708)(도 7에 도시됨)의 하드웨어 아키텍처이다. 컨볼루션 엔진(708)은 데이터 저장 요소의 어레이를 갖는 2-D 시프트 레지스터를 포함할 수 있다:
도 8의 단순화된 예에서, 어레이는 4x4 어레이이다. 데이터 저장 요소들 각각은 복수의 D 플립-플롭(즉, 데이터 신호의 각각의 비트를 저장하기 위한 하나의 D 플립-플롭)에 의해 형성될 수 있다. 따라서, 데이터 저장 요소()가 8 비트를 저장한다면, 은 8 개의 D 플립-플롭으로부터 형성될 수 있다. 데이터 저장 요소 쌍 사이의 화살표 각각은 전기적 연결을 나타낸다(즉, 와이어로 구현될 수 있음). 예를 들어, 데이터 저장 요소()(도면부호 802)은 전기 연결부(804)를 통해 저장 요소()(참조 번호 802)에 전기적으로 결합될 수 있다. 또한 화살표는 데이터의 일-방향의 흐름을 나타낼 수 있다(즉, 데이터가 데이터 저장 요소()에서 데이터 저장 요소()로 전송되지만, d2,1에서 데이터 저장 요소()로 전송되지 않음). 다음 설명에서, 데이터 저장 요소의 제 1 행은 "헤더(header)"라고 할 수 있고 데이터 저장 요소의 마지막 행은 "푸터(footer)"라고 할 수 있다.
컨볼루션 엔진(708)은 컨볼버 유닛의 어레이를 더 포함할 수 있다:
간결함을 위해, 컨볼버 유닛의 어레이는 "컨볼버 어레이(convolver array)"라고 할 수 있다. 도 8의 단순화된 예에서, 컨볼버 어레이는 2x4 어레이이다. 컨볼버 유닛()은 도면부호 806(나중 논의를 용이하게 하기 위해)으로 표시되었다. 보다 전형적인 실시예가 도 30의 예시적인 실시예에서와 같이, 더 많은 컨볼버 유닛을 포함함이 이해된다. 2D 시프트 레지스터의 연산 및 컨볼버 유닛의 연산은 다음 도면에서 상세히 설명될 것이다.
도 9a는 본 발명의 일 실시예에 따른, 컨볼루션 엔진(708)으로의 데이터 값의 로딩을 도시한다. 입력의 각각의 채널은 직렬 방식으로 컨볼루션 엔진(708)에 로딩될 수 있다. 도 9a는 입력(702)의 제 1 채널(702a)을 컨볼루션 엔진(708)으로 로딩하는 것을 도시한다(채널이 좌측에서 우측 방향으로 1 내지 5로 넘버링된다고 가정). 도 10b 내지 도 10d에서 설명되는 바와 같이, 특정 채널의 행은 직렬 방식으로 컨볼루션 엔진(708)에 로딩될 수 있다. "행(row)" 및 "열(column)"과 같은 용어는 편의를 위해 그리고 도면에서 요소가 도시되는 방식과 관련하여 사용될 것이라는 점에 유의한다. 그럼에도 불구하고, 이러한 용어의 의미는 칩에 대한 뷰어(viewer)의 배향에 따라, 행이 열로 해석될 수 있거나 그 반대로 해석될 수 있는, 칩에 회로 요소가 배치되는 방식으로 해석되거나 해석되지 않을 수 있다.
단순화를 위해, 컨볼루션 엔진의 하드웨어 아키텍처를 설명하는 이러한 제 1 예는 입력 채널의 열 수가 컨볼버 어레이의 열 수와 동일한 경우를 취급할 것이다. 도 9b에서, 입력 채널(702a)의 열의 수는 컨볼버 어레이의 열의 수와 동일한 것으로 가정된다. 예를 들어, 입력 채널(702a)은 데이터 값의 10x4 행렬일 수 있다. 도 27a 내지 도 27c는 입력 채널의 열 수가 컨볼버 어레이의 열 수보다 더 큰 시나리오를 취급하는 방법을 설명한다. 도 28, 도 29a, 및 도 29b는 입력 채널의 열 수가 컨볼버 어레이의 열 수보다 적은 경우를 취급하기 위한 두 가지 방식을 설명한다.
일반적으로, 각각의 컨볼버 유닛의 메모리 제약으로 인해, 컨볼루션 엔진(708)은 출력이 저장될 필요가 있기 전에 데이터 값의 특정 수의 연속적인 행에 대한 컨볼루션 연산만을 계산할 수 있다(컨볼버 유닛과는 별도의 메모리 위치에 복사됨-도 30의 메모리(3002) 참조). 출력이 저장되면, 컨볼루션 엔진(708)은 다음 연속 행 세트로 계속할 수 있다. 특히, 각각의 컨볼버 유닛이 n 개의 누산기로 구성된다면, 컨볼루션 엔진(708)은 n 개의 연속적인 입력 행의 출력을 계산할 수 있다(아래에서 설명하는 2개의 패딩 행 추가). 설명의 편의를 위해, n개의 연속적인 입력 행은 데이터의 "수평 스트라이프(horizontal stripe)"라고 할 것이다. 도 9b의 단순화된 예에서, 2개의 수평 스트라이프(902a, 902b)가 있다(실제로, 임의의 수의 수평 스트라이프가 있을 수 있음이 이해된다). 컨볼버 유닛의 메모리 제약으로 인해, 컨볼루션 엔진(708)은 수평 스트라이프를 직렬로 처리할 수 있다. 도 9b의 예에서, 수평 스트라이프(902a)가 먼저 처리되고 이어서 수평 스트라이프(902b)가 처리된다.
아래에서 더 명백해질 이유 때문에, 외부 에지인 선행 행(즉, 로딩될 수평 스트라이프의 제 1 행)의 로딩은 0의 패딩 행의 로딩에 의해 선행될 수 있고(수평 스트라이프(902a)의 행(n)에서와 같이); 외부 에지인 후행 행(즉,로딩될 수평 스트라이프의 마지막 행)의 로딩은 0의 패딩 행(수평 스트라이프(902b)의 행(1)에서와 같이)의 로딩에 의해 후속될 수 있고; 내부 에지인 선행 행의 로딩은 데이터 패딩 행(수평 스트라이프(902b)의 행(n)에서와 같이)의 로딩에 의해 선행될 수 있고; 내부 에지인 후행 행의 로딩은 데이터 패딩 행(수평 스트라이프(902a)의 행(1)에서와 같이)의 로딩에 의해 후속될 수 있다. 아직 명확하지 않은 경우, "외부 에지(external edge)"는 입력 채널의 외부 경계를 형성하는 수평 스트라이프의 선행 또는 후행 행을 지칭하는 반면, 내부 에지는 입력 채널의 외부 경계의 부분이 아닌 수평 스트라이프의 선행 또는 후행 행을 지칭한다. 0 또는 데이터 패딩 행의 이유는 컨볼루션 출력을 계산하기 위해 관심있는 행의 위의 행 및 아래 행의 데이터를 필요로 하는 3x3 필터에 연결되어 있다. 5x5 필터에 대해, 두개의 패딩 행(스트라이프의 상단 행)과 두개의 패딩 행(스트라이프의 하단 행) 또는 총 네 개의 패딩 행이 필요했다.
도 9b의 특정 예에서, 굵은 점선 사각형 내의 n+2 행은 컨볼루션 엔진(708)에 로딩된다. n+2 행은 0의 패딩 행, n 행의 수평 스트라이프(902a), 및 데이터 패딩 행(수평 스트라이프(902b)의 행(n)에 해당)을 포함한다.
도 9c 및 도 9d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진(708)에 대한 필터 가중치의 로딩을 도시한다. 보다 구체적으로, 도 9c는 컨볼버 어레이의 제 1 행의 컨볼버 유닛(즉, , , 및 )의 각각의 컨볼버 유닛에 커널(704a)의 9개의 가중치의 로딩을 도시하고, 도 9d는 컨볼버 어레이의 제 2 행(즉, , , 및 )의 제 2 행의 각각의 컨볼버 유닛에 커널(704b)의 9개의 가중치의 로딩을 도시한다. 커널(704a)은 필터(f1)의 제 1 커널이며 각각의 가중치는 (필터(f1), 커널(1))의 약칭인, 위 첨자 "1,1"로 표시된다. 커널(704b)은 필터(f2)의 제 1 커널이며 각각의 가중치는 (필터(f2), 커널(1))의 약칭인 위 첨자 "2,1"로 표시된다.
도 10a 및 도 10b는 2-D 시프트 레지스터에 0의 값의 행의 로딩을 도시한다. 도 10b 및 도 10d는 제 1 입력 채널(702a)로부터 2-D 시프트 레지스터로의 데이터 값의 행별 로딩 및 2-D 시프트 레지스터를 통한 데이터 값의 행간 시프트를 도시한다. 데이터 값(, , , 및 )은 입력 채널(702a)의 수평 스트라이프(902a)의 행(n)으로부터 값을 나타낼 수 있다. 데이터 값(, , 및 )은 입력 채널(702a)의 수평 스프라이프(902a)의 행(n-1)으로부터 값을 나타낼 수 있다. 데이터 값(, , , 및 )은 입력 채널(702a)의 수평 스프라이프(902a)의 행(n-2)으로부터 값을 나타낼 수 있다.
수평 스트라이프(902a)의 행(n)이 데이터 저장 요소의 제 2 행(즉, , ,, 및 )에 로딩되면, 데이터 저장 요소의 제 2 행에 대응하는 컨볼버 유닛의 제 1 행(즉, , , , 및 이 활성화될 수 있다. 대응(corresponding)"에 의해, 컨볼러 유닛()과 데이터 저장 요소(), 컨볼버 유닛()과 데이터 저장 요소() 등의 사이의 논리적 대응이 있다. 데이터 저장 요소와 컨볼버 유닛 사이의 대응은 대응하는 컨볼버 유닛 내에 그려지는 데이터 저장 요소에 의해 도면에 표시된다. 많은 수의 컨볼버 유닛을 갖는 보다 전형적인 실시예에서, 대부분의 컨볼버 유닛은 대응하는 데이터 저장 요소 및 대응하는 데이터 저장 요소의 8개의 공간 이웃(즉, 데이터 저장 요소 이웃)으로부터 데이터 값을 수신할 것이다. 그러한 관계는 적은 수의 컨볼버 유닛이 있는 도 11a의 예시적인 컨볼루션 엔진으로부터 이해하기 더 어렵다.
활성 컨볼버 유닛은 도 11a에서 굵은 선으로 도시되는 반면, 비활성 컨볼버 유닛은 굵지 않은 선을 사용하여 도 11a에 도시된다. 일 실시예에서, "활성(active)"은 컨볼버 유닛의 전원이 켜진 것을 의미하고, "비활성(non-active)"은 전원을 절약하기 위해 컨볼버 유닛의 전원이 꺼진 것을 의미한다. 제어기(도 22에서 제어기(2202) 및 도 30에서 제어기(3006)로 표시되지만, 설명의 간결함을 위해 다른 도면에는 도시되지 않음)은 컨볼버 유닛의 전원을 켜고 끌 수 있다. 제어기는 수평 스트라이프의 행(n)으로부터의 데이터가 컨볼버 유닛의 행에 대응하는 데이터 저장 요소로 로딩되면 컨볼버 유닛의 행에 전원을 공급할 수 있다. 제어기는 수평 스트라이프의 행(1)으로부터의 데이터가 컨볼버 유닛의 행에 대응하는 데이터 저장 요소로부터 전달되면 컨볼버 유닛의 행의 전원이 꺼질 수 있다.
도 11a 및 도 11b는 도 10d에 도시된 데이터 값의 공간적 배향을 위한 4개의 활성 컨볼버 유닛 중 2개의 활성 컨볼버 유닛의 프로세싱을 설명한다. 2개의 컨볼버 유닛의 프로세싱이 2개의 개별 도면에 설명되어 있지만, 이러한 프로세싱은 일반적으로 클록 주기 당 계산 수를 증가시키기 위해 병렬로(즉, 동시에) 발생하는 것으로 이해된다.
도 11a에 도시된 바와 같이, (컨볼버 어레이의 좌측 및 우측 에지에 위치된 컨볼버 유닛에 대해 전형적인) 컨볼버 유닛()은 5 개의 인접 데이터 저장 요소로부터 데이터 및/또는 0의 값 및 컨볼버 유닛()에 대응하는 데이터 저장 요소로부터 하나의 데이터 값을 수신한다. 보다 구체적으로, 컨볼버 유닛()은 다음을 수신한다.
설명의 명확성을 위해 컨볼버 유닛과 데이터 저장 요소 사이의 전기적 상호 연결(즉, 굵은 화살표)은 논의가 필요할 때만 도시된다.
데이터 및/또는 0의 값이 수신되면, 컨볼버 유닛()은 (여기서, , , , 및 은 도 9c에 도시된 커널(704a)의 9개의 가중치 중 4개의 가중치이다)에 의해 정의된 부분 합()을 계산하고 컨볼버 유닛()의 누산기(1102a)에 부분 합()을 저장한다. 누산기(1102a)는 n개의 누산기의 선형 어레이의 일부일 수 있으며, 여기서 n은 수평 스트라이프(902a) 내의 행의 수이다. 누산기(1102a)는 수평 스트라이프의 행(n)에 대응하는 부분 합을 저장하도록 구성될 수 있으며; 누산기(1102b)는 수평 스트라이프의 행(n-1)에 대응하는 부분 합을 저장하도록 구성될 수 있다; 등등. 설명의 명확성을 위해, 컨볼버 유닛()의 하단 사례 및 컨볼버 유닛()의 상단 사례는 하나 및 동일한 컨볼버 유닛이고, 하단 사례는 상단 사례의 부가 세부 사항을 보여준다는 점에 유의한다.
도 11b에 도시된 바와 같이, 컨볼버 유닛()은 8개의 인접 데이터 저장 요소로부터 데이터 및/또는 0의 값을 수신하고 컨볼버 유닛()에 대응하는 데이터 저장 요소로부터 1개의 데이터 값을 수신한다. 더 구체적으로, 컨볼버 유닛()은 다음을 수신한다:
데이터 값이 수신되면, 컨볼버 유닛()은 (여기서, , , , , , 및 은 도 9c에 도시된 커널(704a)의 9개의 가중치 중 6개의 가중치이다)에 의해 정의된 부분 합()을 계산하고, 컨볼버 유닛()의 누산기(1104a)에 부분 합()을 저장한다.
및 에 의해 유사한 프로세싱이 수행되므로, 이러한 계산의 세부 사항은 간결성을 위해 생략되었다. 도 10d에 도시된 데이터 값의 공간적 배향에 대한 4개의 활성 컨볼버 유닛에 의한 프로세싱이 끝나면, 도 11c에 도시된 바와 같이, 4 개의 부분 합이 계산되어 누산기(1102a, 1104a, 1106a, 및 1108a)에 저장된다.
도 12는 데이터 및/또는 0의 값이 데이터 저장 요소의 일 행 아래로 시프트된 후의 2-D 시프트 레지스터를 도시하고 수평 스트라이프(902a)의 n-2 행으로부터 데이터 값(, , )이 2-D 시프트 레지스터로 로딩되어 있다. 수평 스트라이프(902a)의 행(n)이 데이터 저장 요소(, ,, 및 )로 로딩되면, 해당 컨볼버 유닛(, , , 및 )이 , , 및 에 부가하여 활성화된다(도 13a에 도시된 바와 같이).
도 13a 내지 도 13d는 본 발명의 일 실시예에 따른, 8개의 활성 컨볼버 유닛 중 4개의 활성 컨볼버 유닛의 프로세싱을 설명한다. 4개의 컨볼버 유닛의 프로세싱이 4개의 개별 도면에 설명되어 있지만, 이러한 프로세싱은 일반적으로 클록 주기 당 계산 수를 증가시키기 위해 병렬로(즉, 동시에) 발생하는 것으로 이해된다.
도 13a에 도시된 바와 같이, 컨볼버 유닛()은 5개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 값을 수신할 수 있다. 컨볼버 유닛(은 로 정의된 부분 합()을 계산할 수 있고 컨볼버 유닛()의 누산기(1102b)의 부분 합()을 저장할 수 있다.
도 13b에 도시된 바와 같이, 컨볼버 유닛()은 8개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 값을 수신할 수 있다. 컨볼버 유닛()은 에 의해 정의된 부분 합()을 계산할 수 있고 컨볼버 유닛()의 누산기(1104b)에 부분 합()을 저장할 수 있다.
도 13c에 도시된 바와 같이, 컨볼버 유닛()은 8개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 값을 수신할 수 있다. 컨볼버 유닛()은 에 의해 정의된 부분 합()을 계산할 수 있고, 컨볼버 유닛()의 누산기(1106b)에 부분 합()을 저장할 수 있다.
도 13d에 도시된 바와 같이, 컨볼버 유닛()은 5개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 및/또는 0의 값을 수신 할 수 있다. 컨볼버 유닛()은 (여기서, , , , 및 은 도 9d에 도시된 커널(704b)의 9개의 가중치 중 4개의 가중치이다)에 의해 정의된 부분 합()을 계산할 수 있고 컨볼버 유닛()의 누산기(1110a)에 부분 합()을 저장할 수 있다.
, , , 및 에 의해 유사한 처리가 수행될 수 있으므로, 이러한 계산의 세부 사항은 간결성을 위해 생략되었다. 도 12에 도시된 데이터 값의 공간적 배향에 대한 활성 컨볼버 유닛에 의한 프로세싱이 끝나면, 8개(추가) 부분 합이 계산되어 도 13e에 도시된 바와 같이, 누적기(1102b, 1104b, 1106b, 1108b, 1110a, 1112a, 1114a, 및 1116a)에 저장된다.
2-D 시프트 레지스터 및 복수의 컨볼루션 유닛의 프로세싱은 수평 스트라이프(902a)의 행(1)이 2-D 시프트 레지스터를 통해 시프트될 때까지 유사한 방식으로 계속된다. 이 시점에서, 다음 입력 채널의 데이터 값과 다음 입력 채널에 대응하는 커널의 매개 변수(즉, 가중치)가 도 14a 내지 도 14d에 도시된 바와 같이, 컨볼루션 엔진에 로딩될 수 있다.
도 14a는 본 발명의 일 실시예에 따른, 제 2 입력 채널(702b)로부터 컨볼루션 엔진(708)으로의 데이터 값의 로딩을 도시한다. 도 14b에 더 상세히 도시된 바와 같이, 제 2 입력 채널(702b)은 수평 스트라이프(904a 및 904b)를 포함할 수 있고, 수평 스트라이프(904a)는 수평 스트라이프(902a)가 로딩된 것과 유사한 방식으로 컨볼루션 엔진(708)에 로딩될 수 있다.
도 14c 및 도 14d는 본 발명의 일 실시예에 따른, 컨볼루션 엔진(708)으로의 필터 가중치의 로딩을 도시한다. 보다 구체적으로, 도 14c는 컨볼버 어레이의 제 1 행의 컨볼버 유닛(즉, , , , 및 )의 각각으로 커널(704c)의 9개의 가중치의 로딩을 도시하고 도 14d는 컨볼버 어레이의 제 2 행의 컨볼버 유닛(즉, , , , 및 )의 각각으로 커널(704b)의 9개의 중량의 로딩을 도시한다. 커널(704c)은 필터(f 1 )의 제 2 커널이고 이의 가중치의 각각은 (필터(f 1 ), 커널(2))의 약칭인 위첨자 "1, 2"로 라벨이 표시된다. 커널(704d)은 필터(f 2 )의 제 2 커널이고 이의 가중치의 각각은 (필터(f 2 ), 커널(2))의 약칭인 위 첨자 "2, 2"로 라벨이 표시된다.
도 15a 및 도 15b는 2-D 시프트 레지스터에 0의 값의 행의 로딩을 도시한다. 도 15b 내지 도 15d는 제 2 입력 채널(702b)로부터 2-D 시프트 레지스터로의 데이터 값의 행별 로딩 및 2-D 시프트 레지스터를 통한 데이터 값의 행간 시프트를 도시한다. 데이터 값(, , , 및 )은 입력 채널(702b)의 수평 스트라이프(904a)의 행(n)으로부터 값을 나타낼 수 있다. 데이터 값(, , )은 입력 채널(702b)의 수평 스트라이프(904a)의 행(n-1)으로부터의 값을 나타낸다. 데이터 값(, , , 및 )은 입력 채널(702b)의 수평 스트라이프(904a)의 행(n-2)으로부터 값을 나타낸다. 수평 스트라이프(904a)의 행(n)이 데이터 저장 요소의 제 2 행으로 로딩되면, 컨볼버 유닛의 제 1 행은 활성화될 수 있다(도 16a에 도시된 바와 같이).
도 16a 및 16b는 도 15d에 도시된 데이터 값의 공간적 배향에 대한 4 개의 활성 컨볼버 유닛 중 2 개의 컨볼버 유닛의 프로세싱을 설명한다. 도 16a에 도시된 바와 같이, 컨볼버 유닛()은 5개의 인접 데이터 저장 요소로부터 데이터 및/또는 0의 값 및 컨볼버 유닛()에 대응하는 데이터 저장 요소로부터 하나의 데이터 값을 수신할 수 있다. 데이터 값이 수신되면, 컨볼버 유닛( (여기서, , , , 및 은 도 14c에 도시된 커널(704c)의 9개의 가중치 중 4개의 가중치이다)에 의해 정의된 부분 합()을 계산할 수 있다. 부분 합()은 (행(n)에 대해 컨볼버 유닛()에 의해 이전에 계산된 부분 합)과 합산될 수 있고 새로운 부분 합(+ )은 누산기(1102a)에 저장될 수 있다.
도 16b에 도시된 바와 같이, 컨볼버 유닛()은 8개의 인접 데이터 저장 요소로부터 데이터 및/또는 0의 값 및 컨볼버 유닛()에 대응하는 데이터 저장 요소로부터 1개의 데이터 값을 수신할 수 있다. 데이터 및/또는 0의 값이 수신되면, 컨볼버 유닛( (여기서, , , , , , 및 은 도 14c에 도시된 커널(704c)의 9개의 가중치 중 6개의 가중치이다)에 의해 정의된 부분 합()을 계산할 수 있다. 부분 합()은 (행(n)에 대해 컨볼버 유닛()에 의해 이전에 계산된 부분 합)와 합산될 수 있고 새로운 부분 합(+ )은 누산기(1104a)에 저장될 수 있다.
유사한 프로세싱이 및 에 의해 수행되어, 이러한 계산의 세부 사항은 간결성을 위해 생략되었다. 도 15d에 도시된 데이터 값의 공간 배향에 대한 4개의 활성 컨볼버 유닛에 의한 프로세싱의 종결시, 4개의 부분 합이 도 16c에 도시된 바와 같이, 업데이트되어 누산기(1102a, 1104a, 1106a, 및 1108a)에 저장된다.
도 17은 데이터 및/또는 0의 값이 데이터 저장 요소의 일 행 아래로 시프트된 후의 2-D 시프트 레지스터를 도시하고 수평 스트라이프(904a)의 n-2 행으로부터의 데이터 값(, , , 및 )이 2-D 시프트 레지스터 내로 로딩된다. 수평 스프라이트(904a)의 행(n)이 데이터 저장 요소(, ,, 및 ) 내로 로딩되면, , , , 및 에 부가하여 대응하는 컨볼버 유닛(, , , 및 )이 활성화된다(도 18a에 도시된 바와 같이).
도 18a 및 도 18b는 본 발명의 일 실시예에 따른, 8개의 활성 컨볼버 유닛 중 2개의 컨볼버 유닛의 프로세싱을 설명한다. 도 18a에 도시된 바와 같이, 컨볼버 유닛()은 5개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 값을 수신할 수 있다. 이어서 컨볼버 유닛()은 에 의해 정의된 부분 합()을 계산할 수 있다. 부분 합()은 (행(n-1)에 대한 컨볼버 유닛()에 의해 이전에 계산된 부분 합)와 합산될 수 있으며 새로운 부분 합(+ )이 누산기(1102b)에 저장될 수 있다.
도 18b에 도시된 바와 같이, 컨볼버 유닛()은 8개의 인접 데이터 저장 요소 및 하나의 대응하는 데이터 저장 요소로부터 데이터 값을 수신할 수 있다. 컨볼버 유닛()은 이어서 에 의해 정의된 부분 합()을 계산할 수 있다. 부분 합()은 (행(n-1)에 대한 컨볼버 유닛()에 의해 이전에 계산된 부분 합)과 합산될 수 있고 새로운 부분 합(+ )이 누산기(1104b)에 저장될 수 있다.
유사한 프로세싱이 컨볼버 유닛(, , , , , 및 )에 의해 수행되어 이러한 계산의 세부 사항은 간결성을 위해 생략되었다. 도 17에 도시된 데이터 값의 공간적 배향에 대한 활성 컨볼버 유닛에 의한 프로세싱이 끝나면, 8개(추가) 부분 합이 도 18c에 도시된 바와 같이, 업데이트될 수 있고 누산기(1102b, 1104b, 1106b, 1108b, 1110a, 1112a, 1114a, 및 1116a)에 저장된다.
수평 스트라이프(904a)의 행(1)이 2-D 시프트 레지스터를 통해 시프트될 때까지 2-D 시프트 레지스터 및 복수의 컨볼루션 유닛의 프로세싱이 유사한 방식으로 계속된다. 이어서, 나머지 입력 채널 모두가 처음 두 입력 채널의 프로세싱과 유사한 방식으로 처리될 때까지 2-D 시프트 레지스터 및 복수의 컨볼루션 유닛의 프로세싱이 계속된다.
이 시점(또는 프로세스 초기)에서, 바이어스 값이 컨볼루션 유닛에 로딩될 수 있다. 보다 구체적으로, 도 19a는 컨볼버 유닛(, , , 및 )의 제 1 행 내로 바이어스 값(b 1 )의 로딩을 도시하고, 도 19b는 컨볼버 유닛(, , , 및 )의 제 2 행 내로 바이어스 값(b 2 )의 로딩을 도시한다. 컨볼버 유닛의 제 1 행에 의해 계산된 부분 합은 바이어스 값(b 1 )에 의해 바이어싱될 수 있고 컨볼버 유닛의 제 2 행에 의해 계산된 부분 합은 바이어스(b 2 )(도 20에 도시된 바와 같이)에 의해 바이어싱될 수 있어, 컨볼루션 연산의 출력을 산출한다.
지금까지의 예에서는, 컨볼버 어레이의 행의 수가 필터 수와 같다고 가정하였다. 그러나, 이 관계가 항상 유지되는 것은 아니다. 필터 수가 컨볼버 어레이의 행의 수보다 작으면, 컨볼버 어레이의 사용되지 않은 행이 비활성화될 수 있다. 필터 수가 컨볼버 어레이의 행의 수보다 많으면, 컨볼버 연산이 본질적으로 반복되는 것이 필요하다. 예를 들어, 6개의 필터와 단지 3개의 행의 컨볼버 유닛이 있으면, 필터(1 내지 3)에 대해 컨볼루션 연산이 수행될 수 있고, 필터(1 내지 3)가 필터(4 내지 6)로 대체되는 것을 제외하고, 일부의 컨볼루션 연산이 반복된다.
이제 위에서 설명한 컨볼루션 엔진의 아키텍처에 대한 몇 가지 동기가 제공된다. 아키텍처는 본질적으로 데이터 저장 요소의 팬-아웃(fan-out)(회로 구성 요소 크기 조정 관련)과 클럭 주기당 계산 수(계산 속도 관련) 사이의 균형을 맞추려고 한다. 클럭 주기당 계산만을 최대화하는 한 극단에서, 2-D 시프트 레지스터는 동일한 6개의 데이터 저장 요소에 와이어링된 , , , ...; 동일한 9개의 데이터 저장 요소로 와이어링된 , , , ...; 등으로 데이터 저장 요소의 3개의 행으로 감소되었다. 클럭 주기 당 계산은 위에서 설명한 아키텍처보다 클 수 있지만, 데이터 저장 요소의 팬-아웃은 훨씬 더 커진다(증가된 출력 커패시턴스를 구동하기 위해 더 큰 회로 구성 요소가 필요함). 팬-아웃만을 오로지 최소화하는 다른 극단에서는, 2-D 시프트 레지스터의 3개의 연속 행이 필터(1)에만 사용되었을 수 있으며, 2-D 시프트 레지스터의 3개의 연속 행은 필터(2)에만 사용되었을 수 있다, 등등. 팬-아웃은 위에서 설명한 아키텍처보다 낮지만 클럭 주기당 계산 수는 위에서 설명한 아키텍처와 비교하여, 본질적으로 2/3로 감소된다. 이 설명에 비추어 볼 때, 위에서 설명한 아키텍처에 대한 동기는 이제 데이터 저장 요소의 팬-아웃과 클럭주기 당 계산 수 사이의 균형을 유지하는 것으로 더욱 분명해진다.
도 21은 본 발명의 일 실시예에 따른, 컨볼버 유닛(806)(즉, )의 내부 구성 요소를 도시한다. 컨볼버 유닛(806)은 9개의 승수(2102a, ..., 2102i)를 포함할 수 있다. 각각의 승수는 데이터 저장 요소(즉, 2-D 시프트 레지스터의 데이터 저장 요소 중 하나)에 전기적으로 결합될 수 있고 대응하는 데이터 저장 요소에 저장된 데이터 값을 수신하도록 구성될 수 있다. 특히, 승수(2102a, 2102b, 2102c, 2102d, 2102e, 2102f, 2102g, 2102h 및 2102i)는 데이터 저장 요소(,, , , , , , , 및)에 전기적으로 결합되고 데이터 저장 요소(2102a, 2102b, 2102c, 2102d, 2102e, 2102f, 2102g, 2102h 및 2102i) 각각으로부터 데이터 값(,,,,,,,, 및)을 수신하도록 구성된다. 데이터 저장 요소에 저장된 데이터 값은 일반적으로 각 클럭 주기에 따라 변경된다. 예를 들어, 도 10C의 내용에서, 은 과 동일하고; 도 10d에서, 은 과 동일하다, 등등. 다른 데이터 값에 대해서도 동일하게 설명된다.
각각의 승수는 가중치를 수용하도록 추가로 구성된다. 특히 승수(2102a, 2102b, 2102c, 2102d, 2102e, 2102f, 2102g, 2102h 및 2102i)는 각각 가중치(, , , , , , , , 및)를 수신하도록 구성된다. 입력 데이터(702)의 각각의 채널에 대해 상이한 세트의 가중치가 로딩될 수 있다. 예를 들어, 도 9c의 내용에서, 은 과 동일하고; 도 14C의 내용에서, 은 와 동일하다; 등등.
각각의 승수는 두 값의 곱을 생성하기 위해 두 값을 곱할 수 있다. 특히, 승수(2102a, 2102b, 2102c, 2102d, 2102e, 2102f, 2102g, 2102h, 및 2102i)는 데이터 값(,,,,,,,, 및)을 가중치(, , , , , , , , 및) 로 곱해서 각각 곱(, , , , , , , , 및)을 생성한다. 신호 값(데이터 값 및 가중치 포함)이 로그 도메인에 표현되는 실시예에서, 비트-시프터 및 가산기(로그-대-선형 변환을 추가로 수행하는 특수화된 승수)를 사용하여 특수 승수가 구현될 수 있다. 이러한 구현에 대한 자세한 내용은 예를 들어 다이스케 미야시타(Daisuke Miyashita) 등의 "대수 데이터 표현을 사용하는 컨볼루션 신경망(Convolutional Neural Networks using Logarithmic Data Representation)" arXiv 프라프린트(preprint) arXiv: 1603.01025, 2016 참조. 따라서 명확성을 위해, 곱이 생성된다고 언급될 때, 이러한 계산은 승수 또는 비트-시프터 및 가산기의 조합을 사용하여 구현될 수 있음이 이해된다.
컨볼버 유닛(806)은 복수의 가산기를 더 포함할 수 있고 가산기에 의해 합산되는 값은 제어 신호(s1)에 종속할 수 있다. 데이터 값(, ..., )이 제 1 입력 채널(702a)로부터의 것일 때, 제어 신호(s1)는 0으로 설정될 수 있고, 출력 선택기(2106)가 가산기(2104h)에 0의 값을 전달하게 한다. 이 작동 모드에서는, 부분 합()이 계산되고, 어떠한 이전 부분 합도 기반으로 하지 않는다. 이어서 부분 합은 데이터 값이 나온 수평 스트라이프의 행에 따라 누산기(1104a, 1104b, 등) 중 하나에 저장된다. 데이터 값이 행(n)에서 나온 경우, 부분 합은 누산기(1104a)에 저장되고, 데이터 값이 행(n-1)에서 나온다면, 부분 합은 누산기(1104b)에 저장 될 것이다; 등등.
데이터 값(, ..., )이 후속 입력 채널(예를 들어, 702b 등) 중 하나에서 나온 경우, 제어 신호(s1)가 1로 설정되어, 출력 선택기(2106)가 이전에 계산된 부분 합을 가산기(2104h)에 전달할 수 있다. 특히, 데이터 값이 수평 스트라이프의 행(n)에서 나온 경우, 누적기(1104a)에 저장된 이전에 계산된 부분 합이 가산기(2104h)에 제공될 것이고; 데이터 값이 행(n-1)에서 나온 경우, 누산기(1104b)에 저장된 이전에 계산된 부분 합이 가산기(2104h)에 제공될 것이다; 등등.
제어 신호(s1)가 2로 설정될 때, 출력 선택기(2106)는 누산기로부터 부분 합을 바이어스(bk)와 합산하는, 가산기(2104j)로 부분 합을 전달하도록 구성될 수 있다. 결과 합은 부분 합이 판독된 누산기에 다시 저장될 수 있다. 효율적인 구현을 위해, 부분 합의 전체 벡터가 누산기 어레이(1104a, 1104b,…)에서 판독되고 바이어스(bk)로 합산될 수 있고, 벡터(이제 바이어스 포함)는 누산기 어레이에 다시 저장될 수 있다. 이러한 계산은 도 20의 에 대해 설명된 바이어싱 연산을 구현할 수 있다.
신호 값이 로그 도메인으로 표현되는 실시예에서, 특수 가산기(비교기, 비트-시프터, 및 가산기를 사용하여 구축됨)는 선형 도메인에서 두 개의 값을 수신할 수 있고(선행하는 특수 승수가 로그-대-선형 변환을 수행하였기 때문에) 결과 합을 로그 도메인에 반환된다. 이러한 특수 가산기에 대한 세부 사항은 다이스케 미야시타 등의 "대수 데이터 표현을 사용하는 컨볼루션 신경망" arXiv 프리프린트 arXiv: 1603.01025, 2016에서도 찾을 수 있다.
9개의 데이터 값(및 9 개의 가중치)을 수신하는 모든 컨볼버 유닛은 컨볼버 유닛()으로서 유사한 하드웨어 아키텍처를 가질 수 있으므로, 간결성을 위해 설명되지 않을 수 있다. 9 개 미만의 데이터 값을 수신하는 컨볼버 장치의 경우, 승수에 대한 일부 입력이 0의 값(데이터 입력 또는 가중치가 0의 값으로 설정될 수 있다)으로 고정될 수 있다는 점을 제외하면 컨볼버 유닛()의 하드웨어 아키텍처와 여전히 유사할 수 있다. 예를 들어 은 데이터 값(, , 및 )을 수신하고 않고 가중치(, , 및 )는 0으로 설정될 수 있다. 다른 실시예에서, 승수 중 일부는 생략될 수도 있다. 예를 들어, 은 데이터 값(, , 및 )을 수신하지 않기 때문에, 승수(2102a, 2102d, 및 2102g)는 생략될 수 있다.
본 발명의 일 실시예에서, 모든 9개의 승수(또는 로그 도메인에서 그들의 등가물) 및 9개의 가산기(또는 로그 도메인에서 그들의 등가물)의 계산은 모두 하나의 클록 주기 내에서 발생한다. 즉, 데이터 값이 클럭 주기(n)에 9개의 데이터 저장 요소에 저장되면, 부분 합이 클럭 주기(n+1)로 누산기에 저장된다. 또한, 증가된 처리량을 위해, 부분 합이 저장되는 동안 새로운 데이터 값이 클록 주기(n+1)에서 9개의 데이터 저장 요소에 저장될 수 있다. 따라서 새로운 부분 합의 계산은 매 클럭 주기 동안 수행될 수 있다.
이제 하드웨어 아키텍처를 사용하여 컨볼루션 연산의 스트라이드를 설정하는 방법에 대한 세부 사항이 제공된다. 스트라이드(또는 단계 크기)는 필터가 내적 연산간에 시프트되는 픽셀 또는 데이터 값의 수임을 기억하자. 도 22는 컨볼버 유닛의 모든 홀수 행과 모든 홀수 열이 활성이 되도록 설정하고 컨볼버 유닛의 모든 짝수 행과 짝수 열을 비활성화(제어기(2202)에 의해 제공되는 제어 신호에 의해)가 되도록 설정함으로써, 2의 스트라이드가 달성되는 것을 보여준다. 다른 스트라이드 값을 어떻게 설정할 수 있는지가 명백하게 된다. 3의 스트라이드에 대해, 컨볼버 유닛의 x∈{0, 1, 2, ...}에 대해 행(3x+1) 및 컨볼버 유닛의 x∈{0, 1, 2, ...}에 대해 행(3x+1)이 활성이 되도록 설정될 수 있고 모든 다른 행 및 열은 비-활성이 되도록 설정될 수 있다. 심지어 1 미만의 스트라이드도 가능하다. 예를 들어, 스트라이드가 ½ 인 경우, 입력(702)은 컨볼루션 엔진(708)에 로딩되기 전에 보간될 수 있다.
½의 스트라이드를 달성하기 위해 다음의 3x3 보간 행렬이 컨볼루션 엔진(708)에 입력으로 제공될 수 있다:
본 예에서는 선형 보간이 사용되었지만, 다른 형태의 보간(예를 들면, 다항식 보간, 스플라인 보간, 등)도 가능함이 이해된다.
지금까지의 논의는 컨볼루션 연산에 초점을 맞추고 있지만, 컨볼루션 신경망은 일반적으로 최대 풀 및 교정 연산자와 같은, 다른 유형의 연산을 포함한다. 이해의 편의를 위해 먼저 컨볼버 유닛이 제시되었지만, 이제는 "기능 유닛(functional unit)"이라 불리는, 컨볼버 유닛의 더 일반화된 형태가 컨볼루션 연산에 부가하여 컨볼루션 신경망에서 통상적인 다른 타입의 연산을 취급하기 위해 설명될 것이다.
도 23은 본 발명의 일 실시예에 따른, 2-D 시프트 레지스터 및 기능 유닛의 어레이를 포함하는 컨볼루션 엔진(2300)을 도시한다. 컨볼루션 엔진(2300)은 컨볼버 유닛이 기능 유닛으로 대체된 것을 제외하고는, 전술한 컨볼루션 엔진(708)과 유사하다. 기능 유닛 중 하나()는 2302로 라벨이 표시되어 있으며 하드웨어 아키텍처는 도 23으로 아래에서 설명되어 있다.
도 24는 본 발명의 일 실시예에 따른, 기능 유닛(2302)의 내부 구성 요소를 도시한다. 기능 유닛(2302)과 컨볼버 유닛(806) 사이에는 두 가지 주요 차이점이 있다. 첫째, 기능 유닛(2302)은 합의 최대 값을 계산하는 능력을 갖는다(최대 풀 연산을 수행하는 데 필요함). 둘째, 기능 유닛(2302)은 값의 교정을 계산하는 능력을 갖는다. 합의 최대 값을 계산하기 위해, 컨볼버 유닛의 9 개의 가산기(2104a,…, 2104i) 각각을 함수 선택기(2404a,..., 2404i)로 대체할 수 있다. 기능 선택기는 제어 신호(s2)를 수신하여, 가산기와 비교기 사이에서 선택을 허용한다(도 24의 삽입도 참조). 가산기가 선택되면, 기능 유닛은 대부분 컨볼버 유닛(806)의 하드웨어 아키텍처로 다시 변환되고, 기능 유닛(2302)은 전술된 컨볼루션 연산을 수행하도록 구성된다. 비교기가 선택되면, 기능 유닛(2302)은 제어 신호 s1이 0으로 설정될 때 를 계산하도록 구성되고 제어 신호 s1이 1로 설정된 경우 이전 부분합)를 계산하도록 구성된다. 따라서, 도 8 내지 도 18c와 유사한 방식으로 컨볼루션 엔진(2302)을 작동할 때, 비교기가 선택된 경우를 제외하고는 3 차원 입력 볼륨(즉, 도 6에 도시된 바와 같이, 필터와 정렬되는 입력의 볼륨)을 갖는 3 차원 필터(예를 들면, f 1 )의 점적 곱셈의 최대 값을 계산할 수 있다. 이제 최대 풀 연산자(max pool operator)는 선택된 기능 유닛의 비교기로 구현될 수 있으며 스트라이드 세트는 필터의 커널의 일차원 크기와 동일하다(예를 들면, 3x3 커널의 경우 스트라이드는 3으로 설정).
제어 신호(s1)가 2로 설정되면, 기능 유닛은 교정 연산을 수행하도록 구성된다. 제어 신호(s1)가 2로 설정되면 출력 선택기(2406)가 하나 또는 그 초과의 누산기(1104a, 1104b,…)에 저장된 값을 교정자(2408)에 제공하고, 다음 교정 연산을 수행한다:
데이터 값이 0 비트(데이터 값이 0인지 여부를 나타냄), 부호 비트(데이터 값이 양수인지 음수인지를 나타냄) 및 크기(데이터 값의 크기를 나타냄)로 표시되는 데이터 표현에서, 교정자(2408)는 부호 비트가 음수를 나타낼 때마다 또는 0 비트가 설정되면 0을 반환하고 그렇지 않으면 크기를 반환하도록 구성될 수 있다.
제어 신호(s1)가 3으로 설정될 때, 기능 유닛은 컨볼버 유닛(806)의 연산과 유사하게, 누산기(1104a, 1104b) 등에 저장된 데이터에 바이어스 값을 추가하도록 구성된다.
도 25는 입력 채널(702a)로부터 컨볼버 유닛의 m개의 열을 갖는 컨볼루션 엔진(708)으로 로딩되는 데이터 값의 세 가지 시나리오를 도시하며, 시나리오(a)는 데이터 값 m개의 열을 갖는 입력 채널(702a)을 예시하고, 시나리오(b)는 본 발명의 일 실시예에 따른,데이터 값의 3m-4개의 열을 채널(702a)을 예시하고, 시나리오(c)는 데이터 값의 m/2개의 열을 갖는 입력 채널(702a)을 예시한다. 시나리오(a)는 이전에 도 9b에서 설명되었지만 도 26a 및 도 26b에서 더 자세히 설명된다. 시나리오(b)는 입력 채널(702a)의 열의 수가 컨볼버 어레이의 열의 수보다 더 큰 예를 논의한다. 시나리오(c)는 입력 채널(702a)의 열의 수가 컨볼버 어레이의 열의 수보다 적은 예를 논의한다. 컨볼루션 엔진이 더 추상적으로 묘사되어 있지만, 컨볼루션 엔진의 아키텍처는 2-D 시프트 레지스터 및 컨볼버 어레이를 사용하여 이전에 설명한 예와 유사할 수 있음이 이해되어야 한다.
도 26a는 0의 패딩 행, 수평 스트라이프(902a), 및 데이터 패딩 행(수평 스트라이프(902b)의 행(n)에 대응함)을 컨볼루션 엔진(708)으로 로딩하는 것을 도시한다(아직 분명하지 않다면, 굵은 파선 직사각형은 입력 채널(702a)의 부분이 컨볼루션 엔진(708) 내로 로딩되는 것을 나타낸다). 보다 구체적으로, 0의 패딩 행은 먼저 컨볼루션 엔진(708)의 2-D 시프트 레지스터에 로딩되고, 수평 스트라이프(902a)의 행(n)에 의해 후속되고, 수평 스트라이프(902a)의 행(n-1)에 의해 후속되고, 수평 스트라이프(902a)의 행(1)에 의해 후속되고, 데이터 패딩 행에 의해 후속된다. 전술한 바와 같이, 데이터 저장 요소의 행이 수평 스트라이프의 데이터 저장 요소의 행(n)을 저장할 때마다, 데이터 저장 요소의 행에 대응하는 컨볼버 유닛이 활성화된다. 수평 스트라이프의 행(1)이 데이터 저장 요소의 행 밖으로 시프트될 때마다, 해당 행의 데이터 저장 요소에 해당하는 컨볼버 유닛이 비활성화된다.
도 26b는 하나의 데이터 패딩 행(수평 스트라이프(902a)의 행(1)에 대응), 수평 스트라이프(902b), 및 0의 패딩 행을 컨볼루션 엔진(708)으로 로딩하는 것을 도시한다. 보다 구체적으로, 데이터 패딩 행은 먼저 컨볼루션 엔진(708)의 2-D 시프트 레지스터로 로딩되고, 수평 스트라이프(902b)의 행(n)에 의해 후속되고, 수평 스트라이프(902b)의 행(n-1)에 의해 후속되고, 수평 스트라이프(902b)의 행(1)에 의해 후속되고, 0의 패딩 행에 의해 후속된다.
입력 채널(702a)이 입력 데이터(개념적으로 수평 스트라이프(902a 및 902b)의 경계에 위치함)를 통한 단일 "수평 절단선"의 개념을 설명하기 위해 2개의 수평 스트라이프를 포함했지만, 입력 채널은 수평 절단선이 더 많으면 더 많은 수평 스트라이프를 가지는 것이 이해된다. 다른 수평 스트라이프에 의해, 위와 아래에 경계를 이루는 수평 스트라이프에 대해, 상기 수평 스트라이프의 로딩이 데이터 패딩 행에 의해 선행되고 또 다른 데이터 패딩 행에 의해 후속된다.
도 27a 내지 도 27c는 입력 채널(702a)을 통한 "수직 절단선"이 필요한 시나리오 및 수직 절단선을 처리하는 방법을 도시한다. 일반적으로, 입력 채널의 열의 수가 컨볼버 어레이의 열의 수보다 클 때마다 수직 절단선이 필요하다. 이 예에서는 입력 채널의 열의 수가 3m-4개인 시나리오를 논의하며, 여기서 m은 컨볼버 어레이의 열의 수이다. 입력 채널의 열의 수가 m-2의 배수보다 2개 더 많을 때(이 예에서와 같이), 컨볼버 어레이는 효율적인 방식으로 사용되지만(사용하지 않는 컨볼버 유닛 없음), 이러한 관계가 유지되지 않는 경우, 아래에 설명된 개념이 여전히 적용되지만, 컨볼버 어레이는 덜 효율적인 방식으로 사용될 것이다(사용되지 않는 컨볼버 유닛이 있음). 또한, 예시 및 설명의 명확성을 위해, 수평 절단선, 0의 패딩 행, 데이터 패딩 행은 도 27a 내지 도 27C의 예에서 논의되지 않는다. 그럼에도 불구하고, 당업자는 수평 및 수직 절단선이 모두 있는 시나리오를 취급하기 위해 도 26a 및 도 26b 및 도 27a 및 도 27b의 개념을 조합할 수 있을 것으로 예상된다.
도 27a에서, 입력 채널(702a)은 수직 스트라이프(906a, 906b 및 906c)로 분할된다. 개념적으로, 수직 스트라이프(906a)를 수직 스트라이프(906b)로부터 분리하는 제 1 수직 절단선 및 수직 스트라이프(906b)를 수직 스트라이프(906c)로부터 분리하는 제 2 수직 절단선을 상상할 수 있다. 컨볼루션 엔진을 효율적으로 사용하기 위해, 내부 수직 스트라이프(906b와 같은)에는 m-2개의 열이 포함되는 반면, 외부 수직 스트라이프(906a 및 906c와 같은)에는 m-1개의 열이 포함된다. 도 27a는 컨볼루션 엔진(708)에 로딩되는 m개의 열(수직 스트라이프(906a)의 m-1개의 열 및 하나의 데이터 패딩 열을 포함함)을 도시한다. 이러한 컨볼버 유닛의 출력은 데이터 패딩 열을 외부 열로 취급하는 컨볼루션 출력을 생성했기 때문에(현재 시나리오에서는 사실이 아님), 컨볼버 유닛의 최우측 열(데이터 패딩 열과 정렬됨)은 비활성이다. 컨볼버 유닛의 나머지 m-1개의 열은 이전에 설명한 컨볼버 유닛과 유사한 방식으로 작동한다.
도 27b는 컨볼루션 엔진(708)에 로딩되는 m개의 열(데이터 패딩 열에 의해 좌우 측에 경계가 있는 수직 스트라이프(906b)의 m-2개의 열을 포함함)을 도시한다. 위에 제공된 것과 유사한 이유로, 컨볼버 유닛의 최 좌측 및 최 우측 열(데이터 패딩 열과 정렬됨)은 비활성 상태이다. 컨볼버 유닛의 나머지 m-2개의 열은 이전에 설명한 컨볼버 유닛과 유사한 방식으로 작동한다.
도 27c는 컨볼루션 엔진(708)에 로딩되는 m 개의 열(하나의 데이터 패딩 열 및 수직 스트라이프(906c)의 m-1개의 열 포함)을 도시한다. 위에 제공된 것과 유사한 이유로, 컨볼버 유닛의 최좌측 열(데이터 패딩 열과 정렬됨)은 비-활성이다. 컨볼버 유닛의 나머지 m-1개의 열은 이전에 설명한 컨볼버 유닛과 유사한 방식으로 작동된다.
도 28은 입력 채널(702a)의 열의 수가 m/2개인 시나리오를 설명하며, 여기서 m은 컨볼루션 엔진의 열의 수이다. 변수(m)는 도 28의 예에서 짝수로 가정되지만, 일반적으로 짝수일 필요는 없다. 입력 채널의 열의 수가 m의 제수(divisor)와 같을 때(이 예에서와 같이), 컨볼버 어레이는 효율적인 방식으로 사용되지만(즉, 사용되지 않는 컨볼버 유닛이 없음), 이러한 관계가 유지되지 않는 경우, 아래에 설명된 개념이 여전히 적용되지만, 컨볼버 어레이는 덜 효율적인 방식으로 활용된다(즉, 사용되지 않은 컨볼버 유닛이 있음).
도 28의 예는 컨볼루션 엔진(708)을 통한 "수직 절단선"의 개념을 예시하며, 여기서 영역(708a)(컨볼루션 엔진의 "열"의 제 1 반부를 포함함) 및 영역(708b)(컨볼루션 엔진의 "열"의 제 2 반부를 포함함) 사이의 데이터 전달이 없다. 컨볼루션 엔진의 내용으로 사용되는 경우, 용어 열(column)은 2-D 시프트 레지스터의 열과 컨볼루션 유닛의 해당 열을 포함한다. 개념적으로, 영역(708a)을 영역(708b)으로부터 분리하는 수직 절단선을 상상할 수 있다. 영역(708a)은 기본적으로 영역(708b)과 독립적으로 기능하여 영역(708a)이 제 1 필터 세트(예를 들면, 필터(1 내지 10))와 컨볼루션을 수행하도록 구성되고 영역(708b)이 제 2 필터 세트(필터(11 내지 20))와 컨볼루션을 수행하도록 구성될 수 있다. 설명의 명확성을 위해 필터의 수(각 영역에 10개)가 선택되었으며, 두 영역 중 하나 또는 둘 다에 다른 수의 필터가 있을 수 있음이 이해된다. 컨볼루션 엔진을 독립 영역으로 분할하면(이 경우, 2개의 영역이 있지만 다른 경우에는 더 많은 영역이 될 수 있음) 컨볼루션 엔진의 처리량을 증가시킬 수 있다(이 경우 처리량의 두 배).
구체적인 예로서, 컨볼루션 엔진이 컨볼버 유닛의 14개의 열을 갖는다고 가정하자. 필터(1)의 가중치는 컨볼버 유닛의 제 1 행의 각 컨볼버 유닛(1 내지 7)에 로딩되고, 필터(11)의 가중치는 컨볼버 유닛의 제 1 행의 컨볼버 유닛(8 내지 14) 각각에 로딩된다.
컨볼루션 엔진(708)을 "수직 절단선"으로 작동하도록 구성하기 위해, 영역(708a)의 최우측 열에 있는 컨볼버 유닛은 0으로 설정된 가중치(, , 및 )를 가지며(이러한 가중치가 필터 커널에서 나올 수 있는 것에 관계없이), 영역(708b)의 최좌측 열에 있는 컨볼버 유닛은 0으로 설정된 가중치(, , 및 )를 갖는다 (이러한 가중치가 필터 커널에서 나올 수 있는 것에 관계없이). 이러한 가중치 설정은 영역(708a)의 최우측 열에 있는 컨볼버 유닛이 "우측 이웃"으로부터 어떠한 데이터 값도 수신하지 않고 영역(708a)의 최좌측 열에 있는 컨볼버 유닛이 "좌측 이웃"으로부터 어떠한 데이터 값도 수신하지 않는, 도 28의 삽입도에 도시된 데이터 흐름을 초래한다.
입력 채널(702a)이 컨볼루션 엔진(708)에 로딩될 때, 입력 채널은 행별로 영역(708a)으로 로딩되고, 동시에 입력 채널은 행별로 영역(708b)으로 로딩된다. 컨볼루션 엔진(708)을 통한 데이터의 전파가 개념적으로 수직 방향으로 횡단하는 티커 시간(ticker time)으로 볼 수 있다면, 영역(708a)을 횡단하는 하나의 티커 테이프가 있을 것이고, 영역(708b)을 횡단하는 그 티커 테이프의 거울 이미지가 있을 것이다.
도 28은 컨볼루션 엔진을 통과하는 하나의 수직 절단선을 갖는 예를 도시하고 있지만, 다중 수직 절단선을 갖도록 컨볼루션 엔진이 수정될 수 있는 방법이 명백해야 한다. 또한, 예시 및 설명의 명확성을 위해, 수평 절단선, 0의 패딩 행, 데이터 패딩 행은 도 28의 예에서 논의되지 않았다. 그럼에도 불구하고, 당업자는 도 26a 및 도 26b 및 도 28의 개념을 함께 조합하여 수평 및 수직 절단선이 모두 있는 시나리오를 취급한다.
도 29a 및 도 29b는 입력 채널(702a)의 열의 수가 m/2인 시나리오를 취급하기 위한 또 다른 방식을 도시하며, 여기서 m은 컨볼루션 엔진(708)의 열의 수이다. 입력 데이터를 통한 수평 절단선의 개념(도 26a 및 도 26b에 설명됨)과 컨볼버 어레이를 통한 수직 절단선의 개념(도 28에 설명됨)의 조합을 설명한다. 도 26a 및 도 26b에서, 2 개의 수평 스트라이프가 차례로(즉, 연속적으로) 처리되었다. 그러나, 도 29a 및 도 29b의 예에서, 수평 스트라이프(908a 및 908b)는 영역(708a)에서 처리된 수평 스트라이프(908a) 및 영역(708b)에서 처리된 수평 스트라이프(908b)와 함께 병렬로 처리된다. 도 28의 방식과 달리, 동일한 필터가 영역(708a 및 708b)에 채워진다.
도 29a에는 여러 개의 겹치는 직사각형이 있기 때문에, 영역(708a) 및 영역(708b)에 로딩된 데이터를 보다 명확하게 보여주는, 도 29b에서 방식이 개념적으로 다시 그려진다. 아직 분명하지 않다면, 수평 스트라이프(908a)의 행(1)은 수평 스트라이프(908b)에 선행하는 데이터 패딩 행과 동일하고, 수평 스트라이프(908a)를 따르는 데이터 패딩 행은 수평 스트라이프(908b)의 행(n)과 동일하다는 점에 유의한다.
도 28의 방식과 유사하게, 도 29a 및 도 29b의 방식은 또한 처리량을 두 배로 증가시키는 효과를 갖는다. 이 시점에서, m/2 시나리오를 취급하기 위한 두 개의 가능한 방식이 있으므로, 어떤 방식이 더 바람직한지 궁금할 수 있다. 도 28의 방식과 도 29a 및 도 29b의 방식 사이의 한 가지 고려 사항은 필터의 수 대 입력 채널의 열의 수이다. 입력 채널의 행의 수보다 많은 필터가 있다면, 도 28의 방식이 선호되는 반면, 필터 수보다 입력 채널의 행이 더 많다면, 도 29a 및 도 29b의 방식이 선호될 수 있다. 직관적으로, 전자의 경우는 길고 가는 필터 열과 유사할 것인데, 이 경우 필터의 길고 가는 열을 반으로 자르는 것이 유리할 것인 반면(반은 영역(708a)에, 다른 반은 영역(708b)에 배치), 후자의 경우는 입력 데이터의 길고 가는 행과 유사하며, 여기서, 입력 데이터의 길고 가는 행을 반으로 자르고 입력 데이터의 두 개의 반부를 병렬로 처리하는 것이 유리하다.
하나의 방식을 다른 방식보다 선호하는 다른 고려 사항은 컨볼버 유닛의 행의 수에 대한 필터의 수를 포함할 수도 있다. 필터 수가 컨볼버 유닛의 행의 수보다 적으면, 도 29a 내지 도 29b의 방식이 선호되는 반면, 필터 수가 컨볼버 유닛의 행의 수보다 많으면, 도 28의 방식이 선호될 수 있다.
도 30은 본 발명의 일 실시예에 따른, 시스템(3000)의 하나의 구성 요소로서 컨볼루션 엔진(708)을 도시한다. 시스템(3000)은 메모리(3002), 시프트 및 포맷 모듈(3004), 컨볼루션 엔진(708), 및 제어기(3006)를 포함할 수 있다.
메모리(3002)는 정적 랜덤 액세스 메모리(SRAM)를 사용하여 구현될 수 있고, 입력 데이터(702) 및 컨볼루션 엔진(708)의 출력(예를 들어, 컨볼루션 출력, 최대 풀 출력, 교정된 출력 등)을 저장할 수 있다.
시프트 및 포맷 모듈(3004)은 메모리(3002)와 컨볼루션 엔진(708) 사이의 인터페이스이며 데이터를 시프트 및 포맷하도록 구성된다. 예를 들어, 도 29a의 예에서, 수평 스트라이프(908b)를 컨볼루션 엔진의 영역(708b)에 제공하는 것은 시프트 및 포맷 모듈(3004)에 의해 수행되는 하나의 작업이 될 것이다. ½의 스트라이드(또는 1 미만의 스트라이드)를 달성하는 것도 시프트 및 포맷 모듈(3004)을 포함할 수 있으며, 여기서, 전술한 보간은 시프트 및 포맷 모듈(3004)에 의해 수행될 수 있다.
도 30의 실시예에서, 컨볼루션 엔진(708)은 보다 일반적인 수의 데이터 저장 요소 및 컨볼버 유닛을 포함한다. 도 30은 2-D 시프트 레지스터로서 64 x 256 어레이의 컨볼버 유닛(806) 및 66 x 256 어레이의 데이터 저장 요소를 구비한 컨볼루션 엔진을 도시한다. 전술 한 실시예와 유사하게, 컨볼버 유닛의 제 1 행은 데이터 저장 요소의 제 2 행에 논리적으로 대응하고, 컨볼버 유닛의 마지막 행은 데이터 저장 요소의 제 2 내지 마지막 행에 논리적으로 대응한다.
제어기(3006)는 전술한 많은 제어 동작의 수행을 담당할 수 있다. 예를 들어, 제어기(3006)는 컨볼버 유닛을 활성 및 비활성 상태로 설정하는 제어 신호를 제공할 수 있다(따라서 위에서 설명한 제어기(2202)는 제어기(3006)의 일부일 수 있음). 제어기(3006)는 출력 선택기(2106 및 2406)의 출력을 제어하기 위한 제어 신호(s1)(도 21 및 도 24에서 설명됨)를 제공하는 것을 담당할 수 있다. 제어기(3006)는 기능 유닛이 컨볼루션 출력 또는 최대 풀 출력을 출력하도록 프로그래밍되었는지 여부를 제어하기 위해 제어 신호(s2)(도 24에 설명됨)를 제공하는 것을 담당할 수 있다. 제어기(3006)는 컨볼버 어레이의 치수에 대한 입력 채널의 치수를 기초하여 입력 채널을 수평 스트라이프, 수직 스트라이프(더 적절하게는 수직 및 수평 절단선이 있는 경우 청크(chunk)라고 함)로 논리적으로 분할할 수 있다. 제어기(3006)는 필요한 시프트 및 포맷 동작을 수행하기 위해 시프트 및 포맷 모듈(3004)을 제어할 수 있다. 제어기(3006)는 어떤 가중치가 어느 컨볼루션 유닛에 로딩될 것인지 결정할 수 있다. 제어기(3006)는 (도 28, 도 29a 및 도 29b에 도시된 바와 같이) 컨볼루션 엔진을 다수의 독립 영역으로 논리적으로 분할하기 위해 0의 값으로 필터 가중치를 무시할지 여부를 결정할 수 있다. 제어기(3006)는 또한 수평 스트라이프를 컨볼루션 엔진으로 로딩하기 위해 수평 스트라이프가 0의 패딩 행 또는 데이터 패딩 행에 의해 선행되는지 여부 및 수평 스트라이프가 0의 패딩 행 또는 데이터 패딩 행에 의해 후속되는지 여부를 결정하는 로직을 포함할 수 있다. 이들은 제어기(3006)에 의해 수행될 수 있는 기능의 일부 예일 뿐이다.
도 31은 본 발명의 일 실시예에 따른, 가중치가 컨볼버 유닛에 제공되기 전에 필터 가중치를 압축 해제하기 위한 가중치 압축 해제기(3100)의 블록도를 도시한다. 가중치 압축 해제기(3100)는 가중치를 압축 해제하기 위해 사전(3102)을 이용할 수 있다. 일 실시예에서, 압축된 가중치는 룩-업 테이블(사전의 일 실시예)에 대한 키(key)이고, 룩-업 테이블의 키에 대응하는 레코드는 압축 해제된 가중치이다. 256개의 컨볼버 유닛은 논리적으로 및/또는 물리적으로 16개의 그룹으로 그룹화될 수 있으며, 각 그룹은 16개의 컨볼버 유닛을 포함한다. 압축 해제된 가중치는 컨볼버 유닛의 16개 그룹 각각에 제공될 수 있다.
따라서, 효율적인 컨볼루션 엔진이 설명되었다. 일 실시예에서, 컨볼루션 엔진은 데이터 저장 요소의 3x4 어레이를 갖는 2차원 시프트 레지스터를 포함한다:
여기서 처음에,
다양한 실시예에서, 제 1 컨볼버 유닛은 항들의 합을 생성하도록 구성되고, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱() 및 을 포함하며, 여기서, 상기 은 바이어스 값이다. 또한, 제 2 컨볼버 유닛은 항들의 합을 계산하도록 구성될 수 있으며, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(),곱(), 곱(), 곱(), 및 을 포함하며, 여기서, 상기 은 바이어스 값이다.
일부 예에서,
본 발명의 다른 실시예는 4 x 4 어레이의 데이터 저장 요소를 갖는 2차원 시프트 레지스터를 포함하는 장치를 제공한다:
여기서, 처음에,
일부 실시예에서, 이 장치의 제 1 컨볼버 유닛은 항들의 합을 생성하도록 구성될 수 있고, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 및 을 포함하며, 여기서, 상기 은 바이어스 값이다. 또한, 제 2 컨볼버 유닛은 항들의 합을 계산하도록 구성될 수 있으며, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 및 을 포함하며, 여기서, 상기 은 바이어스 값이다.
또 다른 실시예에서, 제 3 컨볼버 유닛은 항들의 합을 계산하도록 구성될 수 있으며, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 및 을 포함하며, 여기서, 상기 은 바이어스 값이다. 또한, 제 4 컨볼버 유닛은 항들의 합을 계산하도록 구성될 수 있으며, 상기 항들은 적어도 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 곱(), 및 을 포함하며, 여기서, 상기 은 바이어스 값이다.
다양한 실시예에서:
본 발명의 또 다른 실시예는 데이터 저장 요소들의 p x q 어레이를 포함하는 2차원 동기 시프트 레지스터를 포함하는 장치를 제공한다:
여기서 데이터 저장 요소의 제 1 행(, ..., )은 각각의 클록 주기에서 q 데이터 값을 수신하고 데이터 저장 요소(, ..., )의 각각의 행은 에 대해, 각각의 클록 주기에서 데이터 저장 요소(, ..., )의 이전의 행으로부터 q 데이터 값을 수신하고; 컨볼버 어레이는 2차원 동기 시프트 레지스터에 저장된 데이터 값을 처리하도록 구성되고, 여기서, 컨볼버 어레이는 컨볼버 유닛의 X 어레이를 포함하며, 여기서, 컨볼버 유닛()에 대해, 및 :
상기 설명은 제한적인 것이 아니라 예시적인 것으로 의도된 것임을 이해해야 한다. 상기 설명을 검토하면 많은 다른 실시예가 당업자에게 명백하게 될 것이다. 따라서, 본 발명의 범위는 첨부된 청구 범위를 참조하여 그러한 청구 범위가 부여되는 등가물의 전체 범위와 함께 결정되어야 한다.
Claims (13)
- 아래와 같은 데이터 저장 요소의 3x4 어레이를 포함하는 2차원 시프트 레지스터로서,
처음에,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하는, 2차원 시프트 레지스터;
제 1 복수의 승수(,, , , , , , , 및 )를 포함하는 제 1 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 1 컨볼버 유닛; 및
제 2 복수의 승수(, ,, , , , , , , 및 )를 포함하는, 제 2 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 2 컨볼버 유닛을 포함하는, 장치. - 제 1 항에 있어서,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되는, 장치. - 아래와 같은 4 x 4 어레이의 데이터 저장 요소를 포함하는 2차원 시프트 레지스터로서,
처음에,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하고,
데이터 저장 요소()는 데이터 값()을 저장하는, 2차원 시프트 레지스터,
제 1 복수의 승수(,, , , , , , , 및)를 포함하는, 제 1 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 1 컨볼버 유닛;
제 2 복수의 승수(,, , , , , , , 및 )를 포함하는, 제 2 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 2 컨볼버 유닛;
제 3의 복수의 승수(,, , , , , , , 및 )를 포함하는, 제 3 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 3 컨볼버 유닛; 및
제 4의 복수의 승수(,, , , , , , , 및 )를 포함하는, 제 4 컨볼버 유닛으로서,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되고,
승수()가 데이터 저장 요소()에 전기적으로 결합되고 곱()을 생성하도록 데이터 값()을 가중치()와 곱하도록 구성되는, 제 4 컨볼버 유닛을 포함하는, 장치. - 제 5 항에 있어서,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되고,
데이터 저장 요소()는 데이터 저장 요소()에 전기적으로 결합되는, 장치. - 아래와 같은 데이터 저장 요소들의 p x q 어레이를 포함하는 2차원 동기 시프트 레지스터로서,
데이터 저장 요소의 제 1 행(, ..., )은 각각의 클록 주기에서 q 데이터 값을 수신하고 데이터 저장 요소의 각각의 행(, ..., )은 에 대해, 각각의 클록 주기에서 데이터 저장 요소의 이전의 행(, ..., )으로부터 q 데이터 값을 수신하는, 2차원 동기 시프트 레지스터; 및
2차원 동기 시프트 레지스터에 저장된 데이터 값을 처리하도록 구성되는, 컨볼버 어레이로서, 상기 컨볼버 어레이는 컨볼버 유닛의 x 어레이를 포함하며, 컨볼버 유닛()에 대해, 및 에서,
(ⅹ) 의 제 1 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹi) 의 제 2 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹii) 의 제 3 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹiii) 의 제 4 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹiⅴ) 의 제 5 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴ) 의 제 6 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴi) 의 제 7 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴii) 의 제 8 입력이 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴiii) 의 제 9 입력이 데이터 저장 요소()에 전기적으로 결합되는, 컨볼버 어레이를 포함하는, 장치. - 제 11 항에 있어서,
컨볼버 유닛()에 대해, 에서,
(ⅹ) 의 제 1 입력 또는 상기 제 1 입력과 관련된 가중치 중 적어도 하나가 논리적 0으로 설정되고,
(ⅹi) 의 제 2 입력 또는 상기 제 2 입력과 관련된 가중치 중 적어도 하나가 논리적 0으로 설정되고,
(ⅹii) 의 제 3 입력 또는 상기 제 3 입력과 관련된 가중치 중 적어도 하나가 논리적 0으로 설정되고,
(ⅹiii) 의 제 4 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹiⅴ) 의 제 5 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴ) 의 제 6 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹvi) 의 제 7 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴii) 의 제 8 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹⅴiii) 의 제 9 입력은 데이터 저장 요소()에 전기적으로 결합되는, 장치. - 제 11 항에 있어서,
컨볼버 유닛()에 대해, 에서,
(ⅹ) 의 제 1 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹi) 의 제 2 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹii) 의 제 3 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹiii) 의 제 4 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹiv) 의 제 5 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹv) 의 제 6 입력은 데이터 저장 요소()에 전기적으로 결합되고,
(ⅹvi) 의 적어도 제 7 입력 또는 상기 제 7 입력과 관련된 가중치는 논리적 0으로 설정되고,
(ⅹvii) 의 적어도 제 8 입력 또는 상기 제 8 입력과 관련된 가중치는 논리적 0으로 설정되고,
(ⅹviii) 의 적어도 제 9 입력 또는 상기 제 9 입력과 관련된 가중치는 논리적 0으로 설정되는, 장치.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862642578P | 2018-03-13 | 2018-03-13 | |
US62/642,578 | 2018-03-13 | ||
US201862694290P | 2018-07-05 | 2018-07-05 | |
US62/694,290 | 2018-07-05 | ||
PCT/US2019/017787 WO2019177735A1 (en) | 2018-03-13 | 2019-02-13 | Efficient convolutional engine |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200140282A true KR20200140282A (ko) | 2020-12-15 |
KR102516039B1 KR102516039B1 (ko) | 2023-03-30 |
Family
ID=65635810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207029190A KR102516039B1 (ko) | 2018-03-13 | 2019-02-13 | 효율적인 컨볼루션 엔진 |
Country Status (7)
Country | Link |
---|---|
US (6) | US11468302B2 (ko) |
EP (2) | EP3766020B1 (ko) |
JP (2) | JP7171883B2 (ko) |
KR (1) | KR102516039B1 (ko) |
CN (1) | CN112236783B (ko) |
IL (3) | IL295915A (ko) |
WO (1) | WO2019177735A1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11514136B2 (en) * | 2019-05-17 | 2022-11-29 | Aspiring Sky Co. Limited | Circuit for neural network convolutional calculation of variable feature and kernel sizes |
US11782310B2 (en) * | 2021-12-07 | 2023-10-10 | 3M Innovative Properties Company | Backlighting for display systems |
JP2023159945A (ja) * | 2022-04-21 | 2023-11-02 | 株式会社日立製作所 | 情報処理装置、情報処理方法、情報処理プログラム、ソフトウェア作成装置、ソフトウェア作成方法、及びソフトウェア作成プログラム |
US11762946B1 (en) * | 2022-09-23 | 2023-09-19 | Recogni Inc. | Systems for using shifter circuit and 3×3 convolver units to emulate functionality of larger sized convolver units |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4347580A (en) * | 1980-07-21 | 1982-08-31 | The United States Of America As Represented By The Secretary Of The Navy | Array convolver/correlator |
US5014235A (en) * | 1987-12-15 | 1991-05-07 | Steven G. Morton | Convolution memory |
US20160086078A1 (en) * | 2014-09-22 | 2016-03-24 | Zhengping Ji | Object recognition with reduced neural network weight precision |
US20160217369A1 (en) * | 2015-01-22 | 2016-07-28 | Qualcomm Incorporated | Model compression and fine-tuning |
US20160328646A1 (en) * | 2015-05-08 | 2016-11-10 | Qualcomm Incorporated | Fixed point neural network based on floating point neural network quantization |
KR20170126999A (ko) * | 2015-05-21 | 2017-11-20 | 구글 엘엘씨 | 신경망 프로세서에서 사용하기 위한 가중치들의 프리페칭 |
US20180007302A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5138695A (en) | 1989-10-10 | 1992-08-11 | Hnc, Inc. | Systolic array image processing system |
US5949920A (en) * | 1996-08-13 | 1999-09-07 | Hewlett-Packard Co. | Reconfigurable convolver circuit |
US10572824B2 (en) * | 2003-05-23 | 2020-02-25 | Ip Reservoir, Llc | System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines |
WO2009120232A1 (en) * | 2008-03-27 | 2009-10-01 | Ge Healthcare Bioscience Bioprocess Corp. | A method for preventing an unauthorized use of disposable bioprocess components |
US8533250B1 (en) * | 2009-06-17 | 2013-09-10 | Altera Corporation | Multiplier with built-in accumulator |
US8442927B2 (en) | 2009-07-30 | 2013-05-14 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
US9477999B2 (en) | 2013-09-20 | 2016-10-25 | The Board Of Trustees Of The Leland Stanford Junior University | Low power programmable image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US20160379109A1 (en) | 2015-06-29 | 2016-12-29 | Microsoft Technology Licensing, Llc | Convolutional neural networks on hardware accelerators |
KR102325602B1 (ko) | 2015-07-06 | 2021-11-12 | 삼성전자주식회사 | 데이터를 병렬적으로 처리하는 장치 및 방법 |
CN106203617B (zh) * | 2016-06-27 | 2018-08-21 | 哈尔滨工业大学深圳研究生院 | 一种基于卷积神经网络的加速处理单元及阵列结构 |
US10546211B2 (en) * | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
US20180046903A1 (en) * | 2016-08-12 | 2018-02-15 | DeePhi Technology Co., Ltd. | Deep processing unit (dpu) for implementing an artificial neural network (ann) |
JP2018067154A (ja) * | 2016-10-19 | 2018-04-26 | ソニーセミコンダクタソリューションズ株式会社 | 演算処理回路および認識システム |
US9779786B1 (en) * | 2016-10-26 | 2017-10-03 | Xilinx, Inc. | Tensor operations and acceleration |
WO2018103736A1 (en) | 2016-12-09 | 2018-06-14 | Beijing Horizon Information Technology Co., Ltd. | Systems and methods for data management |
WO2018138603A1 (en) * | 2017-01-26 | 2018-08-02 | Semiconductor Energy Laboratory Co., Ltd. | Semiconductor device and electronic device including the semiconductor device |
CN106951395B (zh) | 2017-02-13 | 2018-08-17 | 上海客鹭信息技术有限公司 | 面向压缩卷积神经网络的并行卷积运算方法及装置 |
CN106951961B (zh) | 2017-02-24 | 2019-11-26 | 清华大学 | 一种粗粒度可重构的卷积神经网络加速器及系统 |
US10489878B2 (en) | 2017-05-15 | 2019-11-26 | Google Llc | Configurable and programmable image processor unit |
WO2018211129A1 (en) * | 2017-05-19 | 2018-11-22 | Movidius Ltd. | Methods, systems and apparatus to improve convolution efficiency |
US10929746B2 (en) | 2017-11-27 | 2021-02-23 | Samsung Electronics Co., Ltd. | Low-power hardware acceleration method and system for convolution neural network computation |
KR20190066473A (ko) * | 2017-12-05 | 2019-06-13 | 삼성전자주식회사 | 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치 |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
US11256977B2 (en) * | 2017-12-29 | 2022-02-22 | Facebook, Inc. | Lowering hardware for neural networks |
-
2019
- 2019-02-12 US US16/273,616 patent/US11468302B2/en active Active
- 2019-02-13 CN CN201980028372.6A patent/CN112236783B/zh active Active
- 2019-02-13 KR KR1020207029190A patent/KR102516039B1/ko active IP Right Grant
- 2019-02-13 EP EP19708715.8A patent/EP3766020B1/en active Active
- 2019-02-13 JP JP2021500007A patent/JP7171883B2/ja active Active
- 2019-02-13 EP EP23166763.5A patent/EP4220488A1/en active Pending
- 2019-02-13 IL IL295915A patent/IL295915A/en unknown
- 2019-02-13 WO PCT/US2019/017787 patent/WO2019177735A1/en active Search and Examination
- 2019-02-13 IL IL301126A patent/IL301126A/en unknown
-
2020
- 2020-09-07 IL IL277197A patent/IL277197B2/en unknown
-
2022
- 2022-07-08 US US17/811,410 patent/US11593630B2/en active Active
- 2022-07-08 US US17/811,412 patent/US11694068B2/en active Active
- 2022-07-08 US US17/811,409 patent/US11580372B2/en active Active
- 2022-07-08 US US17/811,417 patent/US11694069B2/en active Active
- 2022-07-08 US US17/811,416 patent/US11645504B2/en active Active
- 2022-11-02 JP JP2022176260A patent/JP2023014091A/ja not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4347580A (en) * | 1980-07-21 | 1982-08-31 | The United States Of America As Represented By The Secretary Of The Navy | Array convolver/correlator |
US5014235A (en) * | 1987-12-15 | 1991-05-07 | Steven G. Morton | Convolution memory |
US20160086078A1 (en) * | 2014-09-22 | 2016-03-24 | Zhengping Ji | Object recognition with reduced neural network weight precision |
US20160217369A1 (en) * | 2015-01-22 | 2016-07-28 | Qualcomm Incorporated | Model compression and fine-tuning |
US20160328646A1 (en) * | 2015-05-08 | 2016-11-10 | Qualcomm Incorporated | Fixed point neural network based on floating point neural network quantization |
KR20170126999A (ko) * | 2015-05-21 | 2017-11-20 | 구글 엘엘씨 | 신경망 프로세서에서 사용하기 위한 가중치들의 프리페칭 |
US20180007302A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
Also Published As
Publication number | Publication date |
---|---|
US11468302B2 (en) | 2022-10-11 |
EP3766020C0 (en) | 2023-11-08 |
JP2021517702A (ja) | 2021-07-26 |
US20220351030A1 (en) | 2022-11-03 |
IL277197B (en) | 2022-10-01 |
US20220351029A1 (en) | 2022-11-03 |
IL277197A (en) | 2020-10-29 |
US20220351027A1 (en) | 2022-11-03 |
US11593630B2 (en) | 2023-02-28 |
US11580372B2 (en) | 2023-02-14 |
US11694069B2 (en) | 2023-07-04 |
EP3766020B1 (en) | 2023-11-08 |
US20190286975A1 (en) | 2019-09-19 |
JP7171883B2 (ja) | 2022-11-15 |
JP2023014091A (ja) | 2023-01-26 |
IL301126A (en) | 2023-05-01 |
KR102516039B1 (ko) | 2023-03-30 |
IL277197B2 (en) | 2023-02-01 |
EP4220488A1 (en) | 2023-08-02 |
EP3766020A1 (en) | 2021-01-20 |
CN112236783A (zh) | 2021-01-15 |
WO2019177735A1 (en) | 2019-09-19 |
CN112236783B (zh) | 2023-04-11 |
US20220351031A1 (en) | 2022-11-03 |
IL295915A (en) | 2022-10-01 |
US11645504B2 (en) | 2023-05-09 |
US20220351028A1 (en) | 2022-11-03 |
US11694068B2 (en) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20200140282A (ko) | 효율적인 컨볼루션 엔진 | |
EP4030302A1 (en) | Buffer addressing for a convolutional neural network | |
US20190095776A1 (en) | Efficient data distribution for parallel processing | |
US11562229B2 (en) | Convolution accelerator using in-memory computation | |
CN108629406B (zh) | 用于卷积神经网络的运算装置 | |
TW202123093A (zh) | 實行卷積運算的系統及方法 | |
US11763131B1 (en) | Systems and methods for reducing power consumption of convolution operations for artificial neural networks | |
US20200104669A1 (en) | Methods and Apparatus for Constructing Digital Circuits for Performing Matrix Operations | |
CN111819581A (zh) | 电子设备及其控制方法 | |
CN113918120A (zh) | 计算装置、神经网络处理设备、芯片及处理数据的方法 | |
US11599181B1 (en) | Systems and methods for reducing power consumption of convolution operations of artificial neural networks | |
US20230376733A1 (en) | Convolutional neural network accelerator hardware | |
CN116090518A (zh) | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 | |
US20220198243A1 (en) | Processing data for a layer of a neural network | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
EP4290395A1 (en) | Low power hardware architecture for handling accumulation overflows in a convolution operation | |
US11501147B1 (en) | Systems and methods for handling padding regions in convolution operations | |
US20240012871A1 (en) | Iteration engine for the computation of large kernels in convolutional accelerators | |
US20230075264A1 (en) | Methods and devices for efficient general deconvolution implementation on hardware accelerator | |
US20220300793A1 (en) | Method and Apparatus for Performing Convolution Neural Network Operations | |
US20040172437A1 (en) | Image processing device and image processing method | |
CN115600062A (zh) | 卷积处理方法、电路、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A302 | Request for accelerated examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |