KR20200095300A - 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 - Google Patents

뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 Download PDF

Info

Publication number
KR20200095300A
KR20200095300A KR1020190038606A KR20190038606A KR20200095300A KR 20200095300 A KR20200095300 A KR 20200095300A KR 1020190038606 A KR1020190038606 A KR 1020190038606A KR 20190038606 A KR20190038606 A KR 20190038606A KR 20200095300 A KR20200095300 A KR 20200095300A
Authority
KR
South Korea
Prior art keywords
feature map
kernel
input feature
processing units
value
Prior art date
Application number
KR1020190038606A
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 to US16/564,215 priority Critical patent/US12014505B2/en
Priority to CN201911321489.1A priority patent/CN111507456A/zh
Priority to EP20152834.6A priority patent/EP3690757A1/en
Priority to JP2020015497A priority patent/JP2020126651A/ja
Publication of KR20200095300A publication Critical patent/KR20200095300A/ko

Links

Images

Classifications

    • 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
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology

Landscapes

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

Abstract

프로세싱 유닛들이 공통적으로 공유할 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정하고, 결정된 공유 오퍼랜드를 기초로 병렬화된 연산들을 수행하는 방법 및 이를 위한 뉴럴 네트워크 장치를 제공한다.

Description

뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 {Method and apparatus for processing convolution operation of neural network}
뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치에 관한다.
뉴럴 네트워크(neural network)는 생물학적 뇌를 모델링한 컴퓨터 과학적 아키텍쳐(computational architecture)를 참조한다. 최근 뉴럴 네트워크 기술이 발전함에 따라, 다양한 종류의 전자 시스템에서 뉴럴 네트워크 장치를 사용하여 입력 데이터를 분석하고 유효한 정보를 추출하고 있다.
뉴럴 네트워크 장치는 입력 데이터에 대한 많은 양의 연산을 수행한다. 이러한 뉴럴 네트워크 연산을 효율적으로 처리할 수 있는 기술이 연구되고 있다.
뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치를 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따라, 뉴럴 네트워크 장치는, 적어도 하나의 프로그램이 저장된 메모리; 및 적어도 하나의 프로그램을 실행함으로써 입력 피처맵(input feature map) 및 커널(kernal) 간의 컨볼루션 연산을 처리하는 프로세서를 포함하고, 프로세서는, 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정하는 컨트롤러; 및 결정된 공유 오퍼랜드를 기초로 병렬화된 연산들을 수행하는 프로세싱 유닛들을 포함할 수 있다.
다른 측면에 따라, 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법은, 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정하는 단계; 및 결정된 공유 오퍼랜드를 기초로 병렬화된 연산들을 수행하는 단계를 포함할 수 있다.
또 다른 측면에 따라, 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체가 제공된다.
본 실시예들에 따르면, 컨볼루션 연산을 위한 병렬화된 연산들에 공유될 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있는 바, 컨볼루션 연산의 병렬성(parallelism)을 보다 효과적으로 구현할 수 있다.
또한, 본 실시예들에 따르면, 3차원의 크기를 갖는 입력 피처맵 및 4차원의 크기를 갖는 커널 간의 3차원 컨볼루션 연산을 수행함에 있어서, 입력 피처맵과 커널 간의 차원이 서로 다르더라도, 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나를 공유 오퍼랜드로 결정하여 병렬화된 연산들을 수행할 수 있는 하드웨어 구조를 구현할 수 있다.
또한, 본 실시예들에 따르면, 프로세싱 유닛들의 공유 오퍼랜드에 대한 제로 여부, 또는 프로세싱 유닛들의 나머지 오퍼랜드들 모두에 대한 제로 여부를 통해 제로 스킵핑을 구현하는 바, 제로 스킵핑을 위한 단순화된 하드웨어 구조를 구현할 수 있다.
도 1은 일 실시예에 따른 뉴럴 네트워크의 아키텍처를 설명하기 위한 도면이다.
도 2a 및 도 2b는 뉴럴 네트워크의 컨볼루션 연산의 예시들을 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 뉴럴 네트워크 장치의 하드웨어 구성을 도시한 블록도이다.
도 4는 컨트롤러 및 프로세싱 유닛들의 구체적인 실시예를 나타낸다.
도 5는 프로세싱 유닛들이 공유 오퍼랜드에 기초하여 병렬화된 연산들을 수행하는 실시예들을 나타낸다.
도 6은 컨트롤러가 입력 피처맵의 형상에 기초하여 공유 오퍼랜드를 결정하는 실시예를 나타낸다.
도 7은 프로세싱 유닛들이 공유 오퍼랜드인 입력 피처맵의 픽셀값에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
도 8은 프로세싱 유닛들이 공유 오퍼랜드인 입력 피처맵의 픽셀값들에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
도 9는 프로세싱 유닛들이 공유 오퍼랜드인 커널의 웨이트값에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
도 10은 프로세싱 유닛들이 공유 오퍼랜드인 커널의 웨이트값들에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
도 11은 프로세싱 유닛들이 제로인 공유 오퍼랜드에 기초하여 제로 스킵핑을 수행하는 일 실시예를 나타낸다.
도 12는 프로세싱 유닛들이 제로인 공유 오퍼랜드에 기초하여 제로 스킵핑을 수행하는 다른 실시예를 나타낸다.
도 13은 일 실시예에 따라, 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 도면이다.
실시 예들에서 사용되는 용어는 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 명세서에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 명세서의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에 기재된 "??부", "??모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 실시예들은 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치에 관한 것으로서 이하의 실시예들이 속하는 기술 분야에서 통상의 지식을 가진 자에게 널리 알려져 있는 사항들에 관해서는 자세한 설명을 생략한다.
도 1은 일 실시예에 따른 뉴럴 네트워크의 아키텍처를 설명하기 위한 도면이다.
도 1을 참고하면, 뉴럴 네트워크(1)는 딥 뉴럴 네트워크(Deep Neural Network, DNN) 또는 n-계층 뉴럴 네트워크(n-layers neural networks)의 아키텍처일 수 있다. DNN 또는 n-계층 뉴럴 네트워크는 컨볼루션 뉴럴 네트워크(Convolutional Neural Networks, CNN), 리커런트 뉴럴 네트워크(Recurrent Neural Networks, RNN), Deep Belief Networks, Restricted Boltzman Machines 등에 해당될 수 있다. 예를 들어, 뉴럴 네트워크(1)는 컨볼루션 뉴럴 네트워크(CNN)로 구현될 수 있으나, 이에 제한되지 않는다. 도 1에서는 뉴럴 네트워크(1)의 예시에 해당하는 컨볼루션 뉴럴 네트워크에서 일부의 컨볼루션 레이어가 도시되었지만, 컨볼루션 뉴럴 네트워크는 도시된 컨볼루션 레이어 외에도, 풀링 레이어(pooling layer), 풀리 커넥티드(fully connected) 레이어 등을 더 포함할 수 있다.
뉴럴 네트워크(1)는 입력 이미지, 피처맵들(feature maps) 및 출력을 포함하는 복수 레이어들을 갖는 아키텍처로 구현될 수 있다. 뉴럴 네트워크(1)에서 입력 이미지는 커널(kernel)이라 불리는 필터와의 컨볼루션 연산이 수행되고, 그 결과 피처맵들이 출력된다. 이때 생성된 출력 피처맵들은 입력 피처맵들로서 다시 커널과의 컨볼루션 연산이 수행되고, 새로운 피처맵들이 출력된다. 이와 같은 컨볼루션 연산이 반복적으로 수행된 결과, 최종적으로는 뉴럴 네트워크(1)를 통한 입력 이미지의 특징들에 대한 인식 결과가 출력될 수 있다.
예를 들어, 도 1의 뉴럴 네트워크(1)에 24x24 픽셀 크기의 이미지가 입력된 경우, 입력 이미지는 커널과의 컨볼루션 연산을 통해 20x20 픽셀 크기를 갖는 4채널의 피처맵들로 출력될 수 있다. 이후에도, 20x20 피처맵들은 커널과의 반복적인 컨볼루션 연산을 통해 크기가 줄어들면서, 최종적으로는 1x1 픽셀 크기의 특징들이 출력될 수 있다. 뉴럴 네트워크(1)는 여러 레이어들에서 컨볼루션 연산 및 서브-샘플링(또는 풀링) 연산을 반복적으로 수행함으로써 입력 이미지로부터 이미지 전체를 대표할 수 있는 강인한 특징들을 필터링하여 출력하고, 출력된 최종 특징들을 통해 입력 이미지의 인식 결과를 도출할 수 있다.
도 2a 및 도 2b는 뉴럴 네트워크의 컨볼루션 연산의 예시들을 설명하기 위한 도면이다.
도 2a의 예시에서, 입력 피처맵(210)은 6x6 픽셀 크기이고, 커널(220)은 3x3 픽셀 크기이고, 출력 피처맵(230)은 4x4 픽셀 크기인 것으로 가정하나, 이에 제한되지 않고 뉴럴 네트워크는 다양한 크기의 피처맵들 및 커널들로 구현될 수 있다. 또한, 입력 피처맵(210), 커널(220) 및 출력 피처맵(230)에 정의된 값들은 모두 예시적인 값들일 뿐이고, 본 실시예들은 이에 제한되지 않는다.
커널(220)은 입력 피처맵(210)에서 3x3 픽셀 크기의 영역(또는 타일) 단위로 슬라이딩하면서 컨볼루션 연산을 수행한다. 컨볼루션 연산은 입력 피처맵(210)의 어느 영역의 각 픽셀 값 및 커널(220)에서 대응 위치의 각 엘리먼트의 웨이트(weight) 간의 곱셈을 하여 획득된 값들을 모두 합산하여, 출력 피처맵(230)의 각 픽셀 값을 구하는 연산을 의미한다. 구체적으로, 커널(220)은 먼저 입력 피처맵(210)의 제 1 영역(211)와 컨볼루션 연산을 수행한다. 즉, 제 1 영역(211)의 각 픽셀 값 1, 2, 3, 4, 5, 6, 7, 8, 9는 각각 커널(220)의 각 엘리먼트의 웨이트 -1, -3, +4, +7, -2, -1, -5, +3, +1과 각각 곱해지고, 그 결과로서 -1, -6, 12, 28, -10, -6, -35, 24, 9가 획득된다. 다음으로, 획득된 값들 1, -6, 12, 28, -10, -6, -35, 24, 9를 모두 더한 결과인 15가 계산되고, 출력 피처맵(230)의 1행1열의 픽셀 값(231)은 15로 결정된다. 여기서, 출력 피처맵(230)의 1행1열의 픽셀 값(231)은 제 1 영역(211)에 대응된다. 마찬가지 방식으로, 입력 피처맵(210)의 제 2 영역(212)와 커널(220) 간의 컨볼루션 연산이 수행됨으로써 출력 피처맵(230)의 1행2열의 픽셀 값(232)인 4가 결정된다. 최종적으로, 입력 피처맵(210)의 마지막 윈도우인 제 16 영역(213)과 커널(220) 간의 컨볼루션 연산이 수행됨으로써 출력 피처맵(230)의 4행4열의 픽셀 값(233)인 11이 결정된다.
한편, 도 2a에서는 2차원 컨볼루션 연산에 대하여 설명되었으나, 컨볼루션 연산은 복수의 채널들의 입력 피처맵들, 커널들, 출력 피처맵들이 존재하는 3차원 컨볼루션 연산에 해당될 수 있다. 이에 대해서는 도 2b를 참고하여 설명하도록 한다.
도 2b를 참고하면, 입력 피처맵(201)은 3차원의 크기를 가질 수 있으며, X개의 입력 채널들이 존재하고, 각 입력 채널의 2차원 입력 피처맵은 H행 W열의 크기를 가질 수 있다(X, W, H는 자연수). 커널(202)은 4차원의 크기를 가질 수 있으며, R행 S열의 크기를 갖는 2차원의 커널이 X개의 입력 채널 및 Y개의 출력 채널 만큼 존재할 수 있다.(R, S, Y는 자연수). 다시 말해, 커널(202)은 입력 피처맵(201)의 입력 채널 수(X) 및 출력 피처맵(203)의 출력 채널 수(Y)에 대응하는 개수의 채널들을 가질 수 있으며, 각 채널의 2차원 커널은 R행 S열의 크기를 가질 수 있다. 출력 피처맵(203)은 3차원 입력 피처맵(201)과 4차원 커널(202) 간의 3차원 컨볼루션 연산을 통해 생성되고, 3차원 컨볼루션 연산 결과에 따라 Y개의 채널들이 존재할 수 있다.
하나의 2차원 입력 피처맵과 하나의 2차원 커널 간의 컨볼루션 연산을 통해 출력 피처맵이 생성되는 과정은 앞서 도 2a에서 설명된 바와 같으며, 도 2a에서 설명된 2차원 컨볼루션 연산이, X개의 입력 채널들의 입력 피처맵(201)과 X개의 입력 채널들 및 Y개의 출력 채널들의 커널(202) 간에 반복적으로 수행됨으로써, Y개의 출력 채널들의 출력 피처맵(203)이 생성될 수 있다.
도 3은 일 실시예에 따른 뉴럴 네트워크 장치의 하드웨어 구성을 도시한 블록도이다.
뉴럴 네트워크 장치(100)는 PC(personal computer), 서버 디바이스, 모바일 디바이스, 임베디드 디바이스 등의 다양한 종류의 디바이스들로 구현될 수 있고, 구체적인 예로서 뉴럴 네트워크를 이용한 음성 인식, 영상 인식, 영상 분류 등을 수행하는 스마트폰, 태블릿 디바이스, AR(Augmented Reality) 디바이스, IoT(Internet of Things) 디바이스, 자율주행 자동차, 로보틱스, 의료기기 등에 해당될 수 있으나, 이에 제한되지 않는다. 나아가서, 뉴럴 네트워크 장치(100)는 위와 같은 디바이스에 탑재되는 전용 하드웨어 가속기(HW accelerator)에 해당될 수 있고, 뉴럴 네트워크 장치(100)는 뉴럴 네트워크 구동을 위한 전용 모듈인 NPU(neural processing unit), TPU(Tensor Processing Unit), Neural Engine 등과 같은 하드웨어 가속기일 수 있으나, 이에 제한되지 않는다.
도 3을 참고하면, 뉴럴 네트워크 장치(100)는 프로세서(110) 및 메모리(120)를 포함한다. 도 3에 도시된 뉴럴 네트워크 장치(100)에는 본 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 뉴럴 네트워크 장치(100)에는 도 3에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음은 당해 기술분야의 통상의 기술자에게 자명하다.
프로세서(110)는 뉴럴 네트워크 장치(100)에서 뉴럴 네트워크를 구동하기 위한 전반적인 기능들을 제어하는 역할을 한다. 예를 들어, 프로세서(110)는 뉴럴 네트워크 장치(100) 내의 메모리(120)에 저장된 프로그램들을 실행함으로써, 뉴럴 네트워크 장치(100)를 전반적으로 제어한다. 프로세서(110)는 뉴럴 네트워크 장치(100) 내에 구비된 CPU(central processing unit), GPU(graphics processing unit), AP(application processor) 등으로 구현될 수 있으나, 이에 제한되지 않는다.
메모리(120)는 뉴럴 네트워크 장치(100) 내에서 처리되는 각종 데이터들을 저장하는 하드웨어로서, 메모리(120)는 뉴럴 네트워크 장치(100)에서 처리된 데이터들 및 처리될 데이터들을 저장할 수 있다. 또한, 메모리(120)는 뉴럴 네트워크 장치(100)에 의해 구동될 애플리케이션들, 드라이버들 등을 저장할 수 있다. 메모리(120)는 DRAM(dynamic random access memory), SRAM(static random access memory) 등과 같은 RAM(random access memory), ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory), CD-ROM, 블루레이 또는 다른 광학 디스크 스토리지, HDD(hard disk drive), SSD(solid state drive), 또는 플래시 메모리를 포함할 수 있다.
프로세서(110)는 메모리(120)로부터 뉴럴 네트워크 데이터, 예를 들어 이미지 데이터, 피처맵 데이터, 커널 데이터 등을 리드/라이트(read/write)하고, 리드/라이트된 데이터를 이용하여 뉴럴 네트워크를 실행한다. 뉴럴 네트워크가 실행될 때, 프로세서(110)는 내부에 구비된 컨볼루션 연산을 위한 프로세싱 유닛을 구동시켜, 출력 피처맵에 관한 데이터를 생성하기 위한 입력 피처맵과 커널 간의 컨볼루션 연산을 반복적으로 수행한다. 이때, 입력 피처맵의 채널 수, 커널의 채널 수, 입력 피처맵의 크기, 커널의 크기, 값의 정밀도(precision) 등의 다양한 팩터들에 의존하여 컨볼루션 연산의 연산량이 결정될 수 있다.
프로세서(110)는, 메모리(120)로부터 입력 피처맵 및 커널을 획득할 수 있고, 입력 피처맵 및 커널 간의 컨볼루션 연산을 처리할 수 있다. 프로세서(110)는 컨볼루션 연산을 처리하기 위해 프로세싱 유닛들(112)을 포함할 수 있다. 프로세싱 유닛들(112) 각각은 병렬적으로 컨볼루션 연산을 처리할 수 있고, 프로세싱 유닛들(112) 각각은 컨볼루션 연산을 위한 로직 회로를 포함할 수 있다. 구체적으로, 프로세싱 유닛들(112) 각각은 곱셈기(multiplier), 덧셈기(adder) 및 누산기(accumulator)의 조합으로 구현된 연산기를 포함할 수 있다. 또한, 곱셈기는 다수의 서브-곱셈기들의 조합으로 구현될 수 있고, 또한 덧셈기도 다수의 서브-덧셈기들의 조합으로 구현될 수 있다.
프로세서(110)는 컨볼루션 연산을 처리하기 위해 캐시(cache) 기능을 담당하는 온-칩(on-chip) 메모리, 및 입력 피처맵의 픽셀값들 또는 커널들의 웨이트값들과 같은 다양한 오퍼랜드(operand)들을 디스패치하기 위한 디스패처(dispatcher)를 더 포함할 수 있다. 구체적으로, 디스패처는 메모리(120)에 저장되어 있는 입력 피처맵들의 픽셀 값들, 커널들의 웨이트값들 등의 데이터로부터 프로세싱 유닛이 수행할 연산에 필요한 픽셀값들 및 웨이트값들 등의 오퍼랜드들을 온-칩 메모리에 디스패치한다. 그리고 나서, 디스패처는 온-칩 메모리에 디스패치된 오퍼랜드들을 컨볼루션 연산을 위해 프로세싱 유닛에 다시 디스패치한다.
프로세서(110)는, 프로세싱 유닛들(112)이 처리할 오퍼랜드(operand)를 결정하는 컨트롤러(114)를 포함할 수 있다. 컨트롤러(114)는, 입력 피처맵과 커널 간의 컨볼루션 연산 시, 프로세싱 유닛들(112)이 수행할 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 컨트롤러(114)는, 일 예에 따라, 제 1 입력 피처맵과 제 1 커널 간의 컨볼루션 연산 시, 공유 오퍼랜드를 제 1 입력 피처맵의 픽셀값으로 결정할 수 있고, 다른 예에 따라, 제 2 입력 피처맵과 제 2 커널 간의 컨볼루션 연산 시, 공유 오퍼랜드를 제 2 커널의 웨이트값으로 결정할 수 있다.
컨트롤러(114)는 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 구체적으로, 컨트롤러(114)는, 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율, 커널 내에서 제로값을 갖는 웨이트들의 비율, 및 입력 피처맵의 형상 중 적어도 하나에 기초하여, 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 일 예에 따라, 컨트롤러(114)는 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율이 기 설정된 임계값 이상인 경우, 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정할 수 있다. 컨트롤러(114)는, 이전 레이어의 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율을 고려하여, 현재 레이어의 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율을 결정할 수 있다. 다른 예에 따라, 컨트롤러(114)는 커널 내에서 제로값을 갖는 웨이트의 비율이 기 설정된 임계값 이상인 경우, 공유 오퍼랜드를 커널의 웨이트값으로 결정할 수 있다. 또 다른 예에 따라, 컨트롤러(114)는 입력 피처맵의 입력 채널들의 개수가 많거나 및 각 입력 채널의 2차원 입력 피처맵의 크기가 작은 경우, 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정할 수 있다.
컨트롤러(114)는 뉴럴 네트워크의 레이어마다 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 예를 들어, 제 1 레이어의 입력 피처맵과 제 1 레이어의 커널 간의 컨볼루션 연산 시, 컨트롤러(114)는 제 1 레이어의 공유 오퍼랜드를 제 1 레이어의 입력 피처맵의 픽셀값으로 결정할 수 있다. 또한, 제 2 레이어의 입력 피처맵과 제 2 레이어의 커널 간의 컨볼루션 연산 시, 컨트롤러(114)는 제 2 레이어의 공유 오퍼랜드를 제 2 레이어의 커널의 웨이트값으로 결정할 수 있다. 다시 말해, 컨트롤러(114)는, 레이어가 변경될 때마다, 공유 오퍼랜드를 입력 피처맵의 픽셀값에서 커널의 웨이트로 변경하거나, 공유 오퍼랜드를 커널의 웨이트에서 입력 피처맵의 픽셀값으로 변경할 수 있다.
프로세싱 유닛들(112)은 컨트롤러(114)에 의해 결정된 공유 오퍼랜드에 기초하여 병렬화된 연산들을 수행할 수 있다. 일 예로, 제 1 입력 피처맵의 픽셀값이 공유 오퍼랜드로 결정되는 경우, 프로세싱 유닛들(112)은, 오퍼랜드 쌍(operand pair) 중 하나로써, 공통적으로 제 1 입력 피처맵의 픽셀값을 오퍼랜드로 입력받을 수 있고, 오퍼랜드 쌍 중 나머지 하나로써, 제 1 커널의 서로 다른 웨이트값들을 입력받을 수 있다. 다른 예로, 제 1 커널의 웨이트값이 공유 오퍼랜드로 결정되는 경우, 프로세싱 유닛들(112)은, 오퍼랜드 쌍(operand pair) 중 하나로써, 공통적으로 제 1 커널의 웨이트값을 오퍼랜드로 입력받을 수 있고, 오퍼랜드 쌍 중 다른 하나로써, 제 1 입력 피처맵의 서로 다른 픽셀값들을 입력받을 수 있다. 따라서, 프로세싱 유닛들(112)은 공유 오퍼랜드를 공통적으로 입력 받아 병렬화된 연산들을 수행하므로 스칼라-벡터(scalar-vector) 곱셈 연산을 구현할 수 있다. 프로세싱 유닛들(112)은 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있고, 출력값들은 출렵 피처맵에 누산될 수 있다.
뉴럴 네트워크 장치(100)는, 공유 오퍼랜드를 프로세싱 유닛들(112) 각각에서 공유하도록 제어할 수 있으므로, 프로세싱 유닛들(112) 각각에 대한 동일한 제어가 가능하므로, 하드웨어 구조를 단순화하고 하드웨어 비용을 절감할 수 있다. 또한, 뉴럴 네트워크 장치(100)는, 프로세싱 유닛들(112)의 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있는 바, 컨볼루션 연산의 병렬성(parallelism)을 보다 효과적으로 이용하기 위한 측면에서 공유 오퍼랜드를 선택할 수 있다. 일 예에 따라, 뉴럴 네트워크 장치(100)는, 제로 스킵핑(zero skipping)을 보다 효과적으로 구현하기 위한 측면에서, 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 구체적인 실시예는 도 11 및 12에서 살펴보기로 한다. 다른 예에 따라, 뉴럴 네트워크 장치(100)는, 일 레이어의 입력 피처맵의 형상에 따라, 프로세싱 유닛들(112)의 병렬화된 연산들을 보다 효과적으로 구현하기 위한 공유 오퍼랜드를 선택할 수 있다. 구체적인 실시예는 도 6에서 살펴보기로 한다.
또한, 뉴럴 네트워크 장치(100)는, 3차원의 크기를 갖는 입력 피처맵 및 4차원의 크기를 갖는 커널 간의 3차원 컨볼루션 연산을 수행함에 있어서, 입력 피처맵과 커널 간의 차원이 서로 다르더라도, 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나를 공유 오퍼랜드로 결정하여 병렬화된 연산들을 수행할 수 있는 하드웨어 구조를 구현할 수 있다.
도 4는 컨트롤러 및 프로세싱 유닛들의 구체적인 실시예를 나타낸다.
컨트롤러(114)는 메모리(120)로부터 입력 피처맵 및 커널을 획득할 수 있다. 컨트롤러(114)는 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 프로세싱 유닛들(112)이 공통적으로 공유할 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다.
컨트롤러(114)는 입력 피처맵의 픽셀값 및 커널의 웨이트값이 프로세싱 유닛들(112)에 입력되도록 제어할 수 있고, 특히, 기 결정된 공유 오퍼랜드가 프로세싱 유닛들(112) 각각에 공통적으로 입력되도록 제어할 수 있다. 일 예에 따라, 입력 피처맵의 픽셀값이 공유 오퍼랜드로 결정되는 경우, 컨트롤러(114)는 입력 피처맵의 픽셀값이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 커널의 서로 다른 웨이트값들 각각이 서로 다른 프로세싱 유닛에 입력되도록 제어할 수 있다. 다시 말해, 컨트롤러(114)는 커널의 서로 다른 웨이트값들 각각이 오퍼랜드1 내지 오퍼랜드n으로써 서로 다른 프로세싱 유닛에 입력되도록 제어할 수 있다. 다른 예에 따라, 커널의 웨이트값이 공유 오퍼랜드로 결정되는 경우, 컨트롤러(114)는 커널의 웨이트값이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 입력 피처맵의 서로 다른 픽셀값들 각각이 서로 다른 프로세싱 유닛에 입력되도록 제어할 수 있다. 다시 말해, 컨트롤러(114)는 입력피처맵의 서로 다른 픽셀값들 각각이 오퍼랜드1 내지 오퍼랜드n으로써 서로 다른 프로세싱 유닛에 입력되도록 제어할 수 있다. 컨트롤러(114)의 제어에 따라, 프로세서(110)의 디스패처는 공유 오퍼랜드를 포함하는 오퍼랜드 쌍을 프로세싱 유닛들(112) 각각에 디스패치할 수 있다.
프로세싱 유닛들(112) 각각은 곱셈기, 덧셈기 및 누산기의 조합으로 구현되는 바, 입력되는 오퍼랜드 쌍에 대한 곱셈 및 덧셈 연산을 통해 출력값들(출력1 내지 출력n)을 출력할 수 있고, 출력값들(출력1 내지 출력n)은 출력 피처맵에 누산될 수 있다. 또한, 프로세싱 유닛들(112) 각각은 공유 오퍼랜드와 서로 다른 오퍼랜드 간의 연산을 수행하는 바, 프로세싱 유닛들(112)은 스칼라(공유 오퍼랜드)와 벡터(오퍼랜드1, 오퍼랜드2 ,...,오퍼랜드n) 간의 곱셈 연산을 구현하는 1Ⅹn 하드웨어 구조를 구현할 수 있다.
도 5는 프로세싱 유닛들이 공유 오퍼랜드에 기초하여 병렬화된 연산들을 수행하는 실시예들을 나타낸다.
도 5의 (a)에서, 컨트롤러(114)는 커널의 제 1 웨이트값(w_1)을 프로세싱 유닛들(112)의 공유 오퍼랜드로써 결정할 수 있다. 이어서, 컨트롤러(114)는 제 1 웨이트값(w_1)이 16개의 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 입력 피처맵의 16개의 픽셀값들(IFM1 ~ IFM16) 각각이 16개의 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 예를 들어, 도 5의 (a)에서 도시된 16개의 픽셀값들(IFM1 ~ IFM16)은 입력 피처맵(IFM)의 제 1 입력 채널에 해당하는 픽셀값들일 수 있다. 16개의 프로세싱 유닛들(112) 각각은 입력되는 오퍼랜드 쌍에 대한 연산을 수행하여, 16개의 출력값들을 출력할 수 있고, 16개의 출력값들은 출력 피처맵(OFM)에 누산될 수 있다.
도 5의 (b)에서, 컨트롤러(114)는 입력 피처맵의 제 1 픽셀값(IFM1)을 프로세싱 유닛들(112)의 공유 오퍼랜드로써 결정할 수 있다. 이어서, 컨트롤러(114)는 제 1 픽셀값(IFM1)이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 커널의 16개의 웨이트값들(w_1 ~ w_16) 각각이 16개의 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 예를 들어, 커널의 16개의 웨이트값들(w_1 ~ w_16)은 커널의 16개의 출력 채널들 각각의 웨이트값일 수 있다. 16개의 프로세싱 유닛들(112) 각각은 입력되는 오퍼랜드 쌍에 대한 연산을 수행하여, 16개의 출력값들을 출력할 수 있고, 16개의 출력값들은 출력 피처맵(OFM)에 누산될 수 있다.
도 5의 (a) 및 (b)에서는, 입력 피처맵의 하나의 입력 채널의 픽셀들의 개수, 커널의 출력 채널들의 개수, 및 프로세싱 유닛들(112)의 개수가 모두 16개로 동일한 것으로 도시되었으나, 이는 일 예시일 뿐 이에 제한 해석되지 않는다.
도 6은 컨트롤러가 입력 피처맵의 형상에 기초하여 공유 오퍼랜드를 결정하는 실시예를 나타낸다.
컨트롤러(114)는 입력 피처맵의 형상에 기초하여 프로세싱 유닛들(112)의 공유 오퍼랜드를 결정할 수 있다. 예를 들어, 컨트롤러(114)는 입력 피처맵의 입력 채널들의 개수 또는 각 입력 채널의 2차원 입력 피처맵의 크기를 고려하여, 프로세싱 유닛들(112)의 공유 오퍼랜드를 결정할 수 있다.
일 예에 따라, 컨트롤러(114)는, 입력 피처맵(610)의 채널들의 개수가 적다고 판단되고 입력 피처맵(610)의 일 채널의 2차원 입력 피처맵의 크기가 크다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 커널의 웨이트값으로 결정하는 경향성을 가질 수 있다. 다시 말해, 입력 피처맵(610)의 넓이값(WⅩH)이 크고 깊이값(c)이 작다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 커널의 웨이트값으로 결정하는 경향성을 가질 수 있다. 입력 피처맵(610)의 넓이값(WⅩH)이 크고 깊이값(c)이 작을수록, 커널의 웨이트값을 재사용(reuse)하여 컨볼루션 연산을 수행하는 것이 프로세싱 유닛들(112)의 병렬화된 연산을 보다 효과적으로 구현할 수 있으므로, 컨트롤러(114)는 커널의 웨이트값을 공유 오퍼랜드로 결정할 수 있다. 예를 들어, 컨트롤러(114)는 입력 피처맵(610)의 넓이값(WⅩH)이 기 설정된 임계값보다 크거나 깊이값(c)이 기 설정된 임계값보다 작다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 커널의 웨이트값으로 결정할 수 있다.
컨트롤러(114)는, 입력 피처맵(610)의 입력 채널들의 개수가 많다고 판단되고 입력 피처맵(610)의 일 채널의 2차원 입력 피처맵의 크기가 작다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정하는 경향성을 가질 수 있다. 다시 말해, 컨트롤러(114)는, 입력 피처맵(620)의 넓이값(WⅩH)이 작고 깊이값(c)이 크다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정하는 경향성을 가질 수 있다. 입력 피처맵(610)의 넓이값(WⅩH)이 작고 깊이값(c)이 클수록, 입력 피처맵의 픽셀값을 재사용(reuse)하여 컨볼루션 연산을 수행하는 것이 프로세싱 유닛들(112)의 병렬화된 연산들을 보다 효과적으로 구현할 수 있으므로, 컨트롤러(114)는 입력 피처맵의 픽셀값을 공유 오퍼랜드로 결정할 수 있다. 예를 들어, 컨트롤러(114)는 입력 피처맵(620)의 넓이값(WⅩH)이 기 설정된 임계값보다 작거나 깊이값(c)이 기 설정된 임계값보다 크다고 판단되는 경우, 프로세싱 유닛들(112)의 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정할 수 있다.
뉴럴 네트워크의 레이어들에 대한 컨볼루션 연산이 순차적으로 진행됨에 따라, 뉴럴 네트워크의 초반 레이어의 입력 피처맵은 도 6의 입력 피처맵(610)과 유사한 형상을 가지며, 뉴럴 네트워크의 후반 레이어의 입력 피처맵은 도 6의 입력 피처맵(620)과 유사한 형상을 가질 수 있다. 따라서, 컨트롤러(114)는, 뉴럴 네트워크의 초반 레이어에서, 프로세싱 유닛들(112)의 공유 오퍼랜드를 커널의 웨이트값으로 결정할 수 있고, 뉴럴 네트워크의 후반 레이어에서, 프로세싱 유닛들(112)의 공유 오퍼랜드를 입력 피처맵의 픽셀값으로 결정할 수 있다.
도 7은 프로세싱 유닛들이 공유 오퍼랜드인 입력 피처맵의 픽셀값에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
컨트롤러(114)는 공유 오퍼랜드를 입력 피처맵(IFM)의 픽셀값으로 결정할 수 있다. 따라서, 컨트롤러(114)는 입력 피처맵(IFM)의 픽셀값이 프로세싱 유닛들(112) 각각에 공통적으로 입력되도록 제어할 수 있다.
구체적으로, 컨트롤러(114)는 입력 피처맵(IFM)의 제 1 픽셀값(IFM1)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 제 1 픽셀값(IFM1)은, 입력 피처맵(IFM)의 제 0 입력채널의 (0,0) 위치에 해당하는 픽셀값일 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각은 커널(Kernal)의 m개의 출력 채널들 각각에서 제 0 입력채널의 (0,0) 위치에 해당하는 웨이트값들일 수 있다.
프로세싱 유닛들(112) 중 제 1 프로세싱 유닛은 제 1 픽셀값(IFM1)과 웨이트값(w_1) 간의 곱셈 및 덧셈 연산을 수행하여 출력값(O0(0,0))을 출력할 수 있고, 프로세싱 유닛들(112) 중 제 m 프로세싱 유닛은 제 1 픽셀값(IFM1)과 웨이트값(w_m) 간의 곱셈 및 덧셈 연산을 수행하여 출력값(Om-1(0,0))을 출력할 수 있다. 다시 말해, 프로세싱 유닛들(112)은 스칼라와 벡터 간의 곱셈 연산으로써, 제 1 픽셀값(IFM1)과 웨이트값들(w_1, w_2, ..., w_m) 간의 곱셈 연산을 수행하여, 출력값들(O0(0,0),O1(0,0),...,Om-1(0,0))을 출력할 수 있다. 또한, 출력값들(O0(0,0),O1(0,0),...,Om-1(0,0)) 각각은 출력 피처맵(OFM)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각에 누산될 수 있다.
마찬가지로, 컨트롤러(114)는 입력 피처맵(IFM)의 다른 픽셀값을 공유 오퍼랜드로써 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 커널(kernal)의 다른 웨이트값들 각각이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 이어서, 프로세싱 유닛들(112)은 입력 피처맵(IFM)의 다른 픽셀값과 커널(Kernal)의 다른 웨이트값들 간의 곱셈 연산을 수행하여 출력값들을 출력할 수 있으며, 출력값들은 출력 피처맵(OFM)에 누산될 수 있다.
도 8은 프로세싱 유닛들이 공유 오퍼랜드인 입력 피처맵의 픽셀값들에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
컨트롤러(114)는 공유 오퍼랜드를 입력 피처맵(IFM)의 제 1 픽셀값(IFM1), 제 2 픽셀값(IFM2), 제 3 픽셀값(IFM3), 및 제 4 픽셀값(IFM4)으로 결정할 수 있다. 제 1 픽셀값(IFM1), 제 2 픽셀값(IFM2), 제 3 픽셀값(IFM3), 및 제 4 픽셀값(IFM4)은, 입력 피처맵(IFM)의 제 0 입력채널의 (0,0), (0,1), (1,0), 및 (1,1) 위치에 해당하는 픽셀값들일 수 있다. 컨트롤러(114)는, 제 1 픽셀값(IFM1)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 1 프로세싱 유닛들(171) 각각에 입력되도록 제어할 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각이 제 1 프로세싱 유닛들(171) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 2 픽셀값(IFM2)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 2 프로세싱 유닛들(172) 각각에 입력되도록 제어할 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각이 제 2 프로세싱 유닛들(172) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 3 픽셀값(IFM3)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 3 프로세싱 유닛들(173) 각각에 입력되도록 제어할 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각이 제 3 프로세싱 유닛들(173) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 4 픽셀값(IFM4)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 4 프로세싱 유닛들(174) 각각에 입력되도록 제어할 수 있고, 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m) 각각이 제 4 프로세싱 유닛들(174) 각각에 입력되도록 제어할 수 있다. 예를 들어, 컨트롤러(114)는, 버퍼(IFM Buffer(0,0) 내지 IFM Buffer(1,1))로부터 제 1 픽셀값(IFM1) 내지 제 4 픽셀값(IFM1) 각각이 제 1 프로세싱 유닛들(171) 내지 제 4 프로세싱 유닛들(174) 각각에 입력되도록 제어할 수 있으며, 버퍼(Weight Buffer)로부터 웨이트값들(w_1, w_2, ..., w_m)이 제 1 프로세싱 유닛들(171) 내지 제 4 프로세싱 유닛들(174) 각각에 입력되도록 제어할 수 있다.
제 1 프로세싱 유닛들(171)은 제 1 픽셀값(IFM1)과 웨이트값들(w_1, w_2, ..., w_m) 간의 곱셈 연산을 수행하여, 출력값들(O0(0,0), O1(0,0),..., Om-1(0,0))을 출력할 수 있다. 또한, 제 2 프로세싱 유닛들(172)은 제 2 픽셀값(IFM2)과 웨이트값들(w_1, w_2, ..., w_m) 간의 곱셈 연산을 수행하여, 출력값들(O0(0,1), O1(0,1),..., Om-1(0,1))을 출력할 수 있다. 또한, 제 3 프로세싱 유닛들(173)은 제 3 픽셀값(IFM3)과 웨이트값들(w_1, w_2, ..., w_m) 간의 곱셈 연산을 수행하여, 출력값들(O0(1,0), O1(1,0),..., Om-1(1,0))을 출력할 수 있다. 또한, 제 4 프로세싱 유닛들(174)은 제 4 픽셀값(IFM4)과 웨이트값들(w_1, w_2, ..., w_m) 간의 곱셈 연산을 수행하여, 출력값들(O0(1,1), O1(1,1),..., Om-1(1,1))을 출력할 수 있다. 따라서, 제 1 프로세싱 유닛들(171) 내지 제 4 프로세싱 유닛들(174)에 의해 출력된 출력값들(O0~m-1(0,0),O0~m-1(0,1),O0~m-1(1,0), O0~m-1(1,1))은 출력 피처맵(OFM)에 누산될 수 있다.
도 7 및 도 8에서 도시된 H
Figure pat00001
W의 크기를 갖고, n개의 입력 채널들로 구성된 입력 피처맵(IFM), Ti
Figure pat00002
Tr의 크기를 갖고, n개의 입력 채널들 및 m개의 출력 채널들로 구성된 커널(Kernal), 및 Tr
Figure pat00003
Tc의 크기를 갖고 m개의 출력 채널들로 구성된 출력 피처맵(OFM)의 각 수치들은 일 예시일 뿐, 이에 한정 해석되지 않는다. 또한, 도 7 및 도 8에서 도시된 입력 피처맵(IFM)의 제 1 픽셀값 내지 제 4 픽셀값의 위치, 및 커널(Kernal)의 웨이트값들(w_1, w_2, ..., w_m)의 위치는 일 예시일 뿐 이에 한정 해석되지 않는다.
도 9는 프로세싱 유닛들이 공유 오퍼랜드인 커널의 웨이트값에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
컨트롤러(114)는 공유 오퍼랜드를 커널(Kernal)의 웨이트값으로 결정할 수 있다. 따라서, 컨트롤러(114)는 커널(Kernal)의 웨이트값이 프로세싱 유닛들(112) 각각에 공통적으로 입력되도록 제어할 수 있다.
구체적으로, 컨트롤러(114)는 커널(Kernal)의 제 1 웨이트값(w_1)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 픽셀값들(IFM1,IFM2,IFM3,IFM4) 각각이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 커널(Kernal)의 제 1 웨이트값(w_1)은 커널(Kernal)의 제 0 출력 채널 및 제 0 입력 채널의 (0,0) 위치에 해당하는 웨이트값일 수 있다. 제 1 픽셀값(IFM1), 제 2 픽셀값(IFM2), 제 3 픽셀값(IFM3), 및 제 4 픽셀값(IFM4)은, 입력 피처맵(IFM)의 제 0 입력채널의 (0,0), (0,1), (1,0), 및 (1,1) 위치에 해당하는 픽셀값들일 수 있다.
프로세싱 유닛들(112) 중 제 1 프로세싱 유닛은 제 1 웨이트값(w_1)과 제 1 픽셀값(IFM1) 간의 곱셈 및 덧셈 연산을 수행하여 출력값(O0(0,0))을 출력할 수 있다. 마찬가지로, 프로세싱 유닛들(112) 중 제 2 프로세싱 유닛 내지 제 4 프로세싱 유닛은, 제 1 웨이트값(w_1)과 제 2 픽셀값(IFM2) 간의 곱셈 및 덧셈 연산, 제 1 웨이트값(w_1)과 제 3 픽셀값(IFM3) 간의 곱셈 및 덧셈 연산, 및 제 1 웨이트값(w_1)과 제 4 픽셀값(IFM4) 간의 곱셈 및 덧셈 연산을 수행하여, 출력값(O0(0,1)), 출력값(O0(1,0)), 및 출력값(O0(1,1))을 출력할 수 있다. 다시 말해, 프로세싱 유닛들(112)은 스칼라와 벡터 간의 곱셈 연산으로써, 제 1 웨이트값(w_1)과 픽셀값들(IFM1,IFM2,IFM3,IFM4) 간의 곱셈 연산을 수행하여, 출력값들(O0(0,0),O0(0,1),O0(1,0),O0(1,1))을 출력할 수 있다. 또한, 출력값들(O0(0,0),O0(0,1),O0(1,0),O0(1,1)) 각각은 출력 피처맵(OFM)에 누산될 수 있다.
마찬가지로, 컨트롤러(114)는 커널(Kernal)의 다른 웨이트값을 공유 오퍼랜드로써 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 다른 픽셀값들 각각이 프로세싱 유닛들(112) 각각에 입력되도록 제어할 수 있다. 이어서, 프로세싱 유닛들(112)은 커널(Kernal)의 다른 웨이트값과 입력 피처맵의 다른 픽셀값들 간의 곱셈 연산을 수행하여 출력값들을 출력할 수 있으며, 출력값들은 출력 피처맵(OFM)에 누산될 수 있다.
도 10은 프로세싱 유닛들이 공유 오퍼랜드인 커널의 웨이트값들에 기초하여 병렬화된 연산들을 수행하는 실시예를 나타낸다.
컨트롤러(114)는 공유 오퍼랜드를 커널(Kernal)의 제 1 웨이트값(w_1), 제 2 웨이트값(w_2), 제 3 웨이트값(w_3), 및 제 4 웨이트값(w_4)으로 결정할 수 있다. 제 1 웨이트값(w_1), 제 2 웨이트값(w_2), 제 3 웨이트값(w_3), 및 제 4 웨이트값(w_4)은 제 0 출력 채널 내지 제 3 출력 채널 각각에 대응되는 제 0 입력 채널의 (0,0) 위치에 해당하는 웨이트값일 수 있다. 컨트롤러(114)는, 제 1 웨이트값(w_1)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 1 프로세싱 유닛들(191) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 픽셀값들(IFM1,IFM2,IFM3,IFM4) 각각이 제 1 프로세싱 유닛들(191) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 2 웨이트값(w_2)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 2 프로세싱 유닛들(192) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 픽셀값들(IFM1,IFM2,IFM3,IFM4) 각각이 제 2 프로세싱 유닛들(192) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 3 웨이트값(w_3)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 3 프로세싱 유닛들(193) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 픽셀값들(IFM1,IFM2,IFM3,IFM4) 각각이 제 3 프로세싱 유닛들(193) 각각에 입력되도록 제어할 수 있다. 마찬가지로, 컨트롤러(114)는, 제 4 웨이트값(w_4)을 공유 오퍼랜드로써 프로세싱 유닛들(112) 중 제 4 프로세싱 유닛들(194) 각각에 입력되도록 제어할 수 있고, 입력 피처맵(IFM)의 픽셀값들(IFM1,IFM2,IFM3,IFM4) 각각이 제 4 프로세싱 유닛들(194) 각각에 입력되도록 제어할 수 있다.
제 1 프로세싱 유닛들(191)은 제 1 웨이트값(w_1)과 픽셀값들(IFM1,IFM2,IFM3,IFM4) 간의 곱셈 연산을 수행하여, 출력값들(O0(0,0),O0(0,1),O0(1,0),O0(1,1))을 출력할 수 있다. 또한, 제 2 프로세싱 유닛들(192)은 제 2 웨이트값(w_2)과 픽셀값들(IFM1,IFM2,IFM3,IFM4) 간의 곱셈 연산을 수행하여, 출력값들(O1(0,0),O1(0,1),O1(1,0),O1(1,1))을 출력할 수 있다. 또한, 제 3 프로세싱 유닛들(193)은 제 3 웨이트값(w_3)과 픽셀값들(IFM1,IFM2,IFM3,IFM4) 간의 곱셈 연산을 수행하여, 출력값들(O2(0,0),O2(0,1),O2(1,0),O2(1,1))을 출력할 수 있다. 또한, 제 4 프로세싱 유닛들(194)은 제 4 웨이트값(w_4)과 픽셀값들(IFM1,IFM2,IFM3,IFM4) 간의 곱셈 연산을 수행하여, 출력값들(O3(0,0),O3(0,1),O3(1,0),O3(1,1))을 출력할 수 있다. 따라서, 제 1 프로세싱 유닛들(191) 내지 제 4 프로세싱 유닛들(194)에 의해 출력된 출력값들(O0(0~1,0~1),O1(0~1,0~1),O2(0~1,0~1), O3(0~1,0~1))은 출력 피처맵(OFM)에 누산될 수 있다.
도 8 및 도 9에서 도시된 H
Figure pat00004
W의 크기를 갖고, n개의 입력 채널들로 구성된 입력 피처맵(IFM), Ti
Figure pat00005
Tr의 크기를 갖고, n개의 입력 채널들 및 m개의 출력 채널들로 구성된 커널(Kernal), 및 Tr
Figure pat00006
Tc의 크기를 갖고 m개의 출력 채널들로 구성된 출력 피처맵(OFM)의 각 수치들은 일 예시일 뿐, 이에 한정 해석되지 않는다. 또한, 도 8 및 도 9에서 도시된 제 1 웨이트값(w_1) 내지 제 4 웨이트값(w_4)의 위치 및 픽셀값(IFM1,IFM2,IFM3, 또는 IFM4)의 위치는 일 예시일 뿐, 이에 한정 해석되지 않는다.
다시 도 3을 참조하면, 프로세싱 유닛들(112)은 컨트롤러(114)에 의해 결정된 공유 오퍼랜드에 기초하여 병렬화된 연산들을 수행할 수 있다. 이 때, 공유 오퍼랜드가 제로인 경우, 프로세싱 유닛들(112)은 병렬화된 연산들을 생략(skip)할 수 있다. 다시 말해, 프로세싱 유닛들(112)은 공유 오퍼랜드에 기초한 제로 스킵핑(zero skipping)을 구현할 수 있다.
컨트롤러(114)는 입력 피처맵의 픽셀값을 공유 오퍼랜드로 결정할 수 있다. 일 예에 따라, 제 1 픽셀값이 제로인 경우, 프로세싱 유닛들(112)은 제 1 픽셀값과 커널의 제 1 웨이트값들 간의 병렬화된 연산들을 생략할 수 있다. 따라서, 프로세싱 유닛들(112)은, 제로인 제 1 픽셀값 대신 비제로(non-zero)인 제 2 픽셀값과 커널의 제 2 웨이트값들 간의 병렬화된 연산들을 수행할 수 있다. 다른 예에 따라, 커널의 제 1 웨이트값들 모두가 제로인 경우, 프로세싱 유닛들(112)은, 제 1 픽셀값과 커널의 제 1 웨이트값들 간의 병렬화된 연산들을 생략하고, 제 2 픽셀값과 커널의 제 2 웨이트값들 간의 병렬화된 연산들을 수행할 수 있다.
컨트롤러(114)는 커널의 웨이트값을 공유 오퍼랜드로 결정할 수 있다. 일 예에 따라, 제 1 웨이트값이 제로인 경우, 프로세싱 유닛들(112)은 제 1 웨이트값과 입력 피처맵의 제 1 픽셀값들 간의 병렬화된 연산들을 생략할 수 있다. 따라서, 프로세싱 유닛들(112)은, 제로인 제 1 웨이트값 대신 비제로(non-zero)인 제 2 웨이트값과 제 2 픽셀값들 간의 병렬화된 연산들을 수행할 수 있다. 다른 예에 따라, 입력 피처맵의 제 1 픽셀값들 모두가 제로인 경우, 프로세싱 유닛들(112)은, 제 1 웨이트값과 제 1 픽셀값들 간의 병렬화된 연산들을 생략하고, 제 2 웨이트값과 제 2 픽셀값들 간의 병렬화된 연산들을 수행할 수 있다.
뉴럴 네트워크 장치(100)는, 프로세싱 유닛들(112)의 공유 오퍼랜드에 대한 제로 여부, 또는 프로세싱 유닛들(112)의 나머지 오퍼랜드들 모두에 대한 제로 여부를 통해 제로 스킵핑을 구현하는 바, 제로 스킵핑을 위한 단순화된 하드웨어 구조를 구현할 수 있다.
도 11은 프로세싱 유닛들이 제로인 공유 오퍼랜드에 기초하여 제로 스킵핑을 수행하는 일 실시예를 나타낸다.
프로세싱 유닛들(112)은, (N-1)번째 사이클(cycle)에서, 공유 오퍼랜드인 입력 피처맵(IFM)의 제 1 픽셀값(IFM1)을 기초로 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 구체적으로, 프로세싱 유닛들(112)은, 입력 피처맵(IFM)의 제 0 입력 채널의 (0,0)에 위치한 제 1 픽셀값(IFM1)과, 커널(Kernal)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각에 대응되는 제 0 입력 채널의 (0,0)에 위치한 웨이트값들 간의 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 이러한 출력값들 각각은, 출력 피처맵(OFM)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각의 (0,0) 위치인 O0~m-1(0,0)에 누산될 수 있다.
이어서, 프로세싱 유닛들(112)은, N번째 사이클에서, 입력 피처맵(IFM)의 제 2 픽셀값(IFM2)을 기초로 병렬화된 연산들을 수행할 수 있다. 다만, 제 2 픽셀값(IFM2)이 제로인 경우, 프로세싱 유닛들(112)은 제 2 픽셀값(IFM2)과 웨이트값들 간의 병렬화된 연산들을 생략할 수 있다. 구체적으로, 프로세싱 유닛들(112)은 입력 피처맵(IFM)의 제 1 입력 채널의 (0,0)에 위치한 제 2 픽셀값(IFM2)과, 커널(Kernal)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각에 대응되는 제 1 입력 채널의 (0,0)에 위치한 웨이트값들 간의 병렬화된 연산들을 생략할 수 있다.
이어서, 프로세싱 유닛들(112)은, N번째 사이클에서, 입력 피처맵(IFM)의 제 3 픽셀값(IFM3)을 기초로 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 구체적으로, 프로세싱 유닛들(112)은, 입력 피처맵(IFM)의 제 2 입력 채널의 (0,0)에 위치한 제 3 픽셀값(IFM3)과, 커널(Kernal)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각에 대응되는 제 2 입력 채널의 (0,0)에 위치한 웨이트값들 간의 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 이러한 출력값들 각각은, 출력 피처맵(OFM)의 제 0 출력 채널 내지 제 m-1 출력 채널 각각의 (0,0) 위치인 O0~m-1(0,0)에 누산될 수 있다.
결과적으로, 제 2 픽셀값(IFM2)이 제로인 경우, 프로세싱 유닛들(112)은 제 1 픽셀값(IFM1)에 이어 제 3 픽셀값(IFM3)을 기초로 병렬화된 연산들을 수행할 수 있으며, 제 1 픽셀값(IFM1)에 기초한 출력값들을 누산하는 위치들 및 제 3 픽셀값(IFM3)에 기초한 출력값들을 누산하는 위치들 모두 출력 피처맵(OFM)의 동일한 위치들이 될 수 있다. 따라서, 뉴럴 네트워크 장치(100)는 제로 스킵핑을 통해 컨볼루션 연산의 연산량 및 연산 시간을 감소시키면서도, 출력값들이 누산되는 위치를 동일하게 유지할 수 있으므로, 뉴럴 네트워크의 컨볼루션 연산을 효율적으로 처리할 수 있다.
도 12는 프로세싱 유닛들이 제로인 공유 오퍼랜드에 기초하여 제로 스킵핑을 수행하는 다른 실시예를 나타낸다.
프로세싱 유닛들(112)은, (N-1)번째 사이클(cycle)에서, 공유 오퍼랜드인 커널(Kernal)의 제 1 웨이트값(w_1)을 기초로 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 구체적으로, 프로세싱 유닛들(112)은, 커널(Kernal)의 제 0 출력 채널 및 제 0 입력 채널의 (0,0)에 위치한 제 1 웨이트값(w_1)과, 입력 피처맵(IFM)의 제 0 입력 채널의 (0~1,0~1)에 위치한 픽셀값들 간의 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 이러한 출력값들 각각은, 출력 피처맵(OFM)의 제 0 출력 채널의 (0~1,0~1)인 O0(0~1,0~1)에 누산될 수 있다.
이어서, 프로세싱 유닛들(112)은, N번째 사이클에서, 커널(Kernal)의 제 2 웨이트값(w_2)을 기초로 병렬화된 연산들을 수행할 수 있다. 다만, 제 2 웨이트값(w_2)이 제로인 경우, 프로세싱 유닛들(112)은 제 2 웨이트값(w_2)과 픽셀값들 간의 병렬화된 연산들을 생략할 수 있다. 구체적으로, 프로세싱 유닛들(112)은 커널(Kernals)의 제 0 출력 채널 및 제 1 입력 채널의 (0,0)에 위치한 제 2 웨이트값(w_2)과, 입력 피처맵(IFM)의 제 1 입력 채널의 (0~1,0~1)에 위치한 픽셀값들 간의 병렬화된 연산들을 생략할 수 있다.
이어서, 프로세싱 유닛들(112)은, N번째 사이클에서, 커널(Kernal)의 제 3 웨이트값(w_3)을 기초로 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 구체적으로, 프로세싱 유닛들(112)은, 커널(Kernals)의 제 0 출력 채널 및 제 2 입력 채널의 (0,0)에 위치한 제 3 웨이트값(w_3)과, 입력 피처맵(IFM)의 제 2 입력 채널의 (0~1,0~1)에 위치한 픽셀값들 간의 병렬화된 연산들을 수행하여 출력값들을 출력할 수 있다. 이러한 출력값들 각각은, 출력 피처맵(OFM)의 제 0 출력 채널의 (0~1,0~1)인 O0(0~1,0~1)에 누산될 수 있다.
결과적으로, 제 2 웨이트값(w_2)이 제로인 경우, 프로세싱 유닛들(112)은 제 1 웨이트값(w_1)에 이어 제 3 웨이트값(w_3)을 기초로 병렬화된 연산들을 수행할 수 있으며, 제 1 웨이트값(w_1)에 기초한 출력값들을 누산하는 위치들 및 제 3 웨이트값(w_3)에 기초한 출력값들을 누산하는 위치들 모두 출력 피처맵(OFM)의 동일한 위치들이 될 수 있다. 따라서, 뉴럴 네트워크 장치(100)는 제로 스킵핑을 통해 컨볼루션 연산의 연산량 및 연산 시간을 감소시키면서도, 출력값들이 누산되는 위치를 동일하게 유지할 수 있으므로, 뉴럴 네트워크의 컨볼루션 연산을 효율적으로 처리할 수 있다.
도 13은 일 실시예에 따라, 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 도면이다.
도 13에 도시된 방법은, 도 3 내지 도 12의 뉴럴 네트워크 장치(100)의 각 구성요소에 의해 수행될 수 있고, 중복되는 설명에 대해서는 생략한다.
단계 1310에서, 뉴럴 네트워크 장치(100)는 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 뉴럴 네트워크 장치(100)는, 일 예에 따라, 제 1 입력 피처맵과 제 1 커널 간의 컨볼루션 연산 시, 공유 오퍼랜드를 제 1 입력 피처맵의 픽셀값으로 결정할 수 있고, 다른 예에 따라, 제 2 입력 피처맵과 제 2 커널 간의 컨볼루션 연산 시, 공유 오퍼랜드를 제 2 커널의 웨이트값으로 결정할 수 있다.
뉴럴 네트워크 장치(100)는 입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 구체적으로, 뉴럴 네트워크 장치(100)는, 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율, 커널 내에서 제로값을 갖는 웨이트들의 비율, 및 입력 피처맵의 형상 중 적어도 하나에 기초하여, 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다.
뉴럴 네트워크 장치(100)는 뉴럴 네트워크의 레이어마다 공유 오퍼랜드를 입력 피처맵의 픽셀값 또는 커널의 웨이트값 중 어느 하나로 결정할 수 있다. 예를 들어, 제 1 레이어의 입력 피처맵과 제 1 레이어의 커널 간의 컨볼루션 연산 시, 뉴럴 네트워크 장치(100)는 제 1 레이어의 공유 오퍼랜드를 제 1 레이어의 입력 피처맵의 픽셀값으로 결정할 수 있다. 또한, 제 2 레이어의 입력 피처맵과 제 2 레이어의 커널 간의 컨볼루션 연산 시, 뉴럴 네트워크 장치(100)는 제 2 레이어의 공유 오퍼랜드를 제 2 레이어의 커널의 웨이트값으로 결정할 수 있다.
단계 1320에서, 뉴럴 네트워크 장치(100)는 공유 오퍼랜드를 기초로 병렬화된 연산들을 수행할 수 있다. 일 예로, 제 1 입력 피처맵의 픽셀값이 공유 오퍼랜드로 결정되는 경우, 뉴럴 네트워크 장치(100)는 제 1 입력 피처맵의 픽셀값과 제 1 커널의 웨이트값들 간의 병렬화된 연산들을 수행할 수 있다. 다른 예로, 제 1 커널의 웨이트값이 공유 오퍼랜드로 결정되는 경우, 뉴럴 네트워크 장치(100)는 제 1 커널의 웨이트값과 제 1 입력 피처맵의 픽셀값들 간의 병렬화된 연산들을 수행할 수 있다. 뉴럴 네트워크 장치(100)는 병렬화된 연산들을 통해 출력된 출력값들을 출력 피처맵에 누산할 수 있다.
뉴럴 네트워크 장치(100)은 기 결정된 공유 오퍼랜드가 제로인 경우, 병렬화된 연산들을 생략(skip)할 수 있다. 일 예에 따라, 제 1 픽셀값이 제로인 경우, 뉴럴 네트워크 장치(100)는 제 1 픽셀값과 커널의 제 1 웨이트값들 간의 병렬화된 연산들을 생략할 수 있다. 따라서, 뉴럴 네트워크 장치(100)는, 제로인 제 1 픽셀값 대신 비제로(non-zero)인 제 2 픽셀값과 커널의 제 2 웨이트값들 간의 병렬화된 연산들을 수행할 수 있다. 다른 예에 따라, 제 1 웨이트값이 제로인 경우, 뉴럴 네트워크 장치(100)는 제 1 웨이트값과 입력 피처맵의 제 1 픽셀값들 간의 병렬화된 연산들을 생략할 수 있다. 따라서, 뉴럴 네트워크 장치(100)는, 제로인 제 1 웨이트값 대신 비제로(non-zero)인 제 2 웨이트값과 제 2 픽셀값들 간의 병렬화된 연산들을 수행할 수 있다.
한편, 상술한 방법은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 방법에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 램, USB, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
본 실시예와 관련된 기술 분야에서 통상의 지식을 가진 자는 상기된 기재의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 방법들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 하며, 권리 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점을 포함하는 것으로 해석되어야 할 것이다.

Claims (20)

  1. 뉴럴 네트워크 장치에 있어서,
    적어도 하나의 프로그램이 저장된 메모리; 및
    상기 적어도 하나의 프로그램을 실행함으로써 입력 피처맵(input feature map) 및 커널(kernal) 간의 컨볼루션 연산을 처리하는 프로세서를 포함하고,
    상기 프로세서는,
    상기 입력 피처맵의 특징 및 상기 커널의 특징 중 적어도 하나에 기초하여, 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 상기 입력 피처맵의 픽셀값 또는 상기 커널의 웨이트값 중 어느 하나로 결정하는 컨트롤러; 및
    상기 결정된 공유 오퍼랜드를 기초로 상기 병렬화된 연산들을 수행하는 프로세싱 유닛들을 포함하는, 뉴럴 네트워크 장치.
  2. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 입력 피처맵의 픽셀값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 입력 피처맵의 픽셀값과 상기 커널의 웨이트값들 각각 간의 연산을 병렬적으로 수행하는, 뉴럴 네트워크 장치.
  3. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 입력 피처맵의 제 1 픽셀값 및 제 2 픽셀값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 입력 피처맵의 제 1 픽셀값과 상기 커널의 웨이트값들 각각 간의 연산을 병렬적으로 수행하는 제 1 프로세싱 유닛들; 및
    상기 입력 피처맵의 제 2 픽셀값과 상기 커널의 웨이트값들 각각 간의 연산을 병렬적으로 수행하는 제 2 프로세싱 유닛들을 포함하는, 뉴럴 네트워크 장치.
  4. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 커널의 웨이트값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 커널의 웨이트값과 상기 입력 피처맵의 픽셀값들 각각 간의 연산을 병렬적으로 수행하는, 뉴럴 네트워크 장치.
  5. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 커널의 제 1 웨이트값 및 제 2 웨이트값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 커널의 제 1 웨이트값과 상기 입력 피처맵의 픽셀값들 각각 간의 연산을 병렬적으로 수행하는 제 1 프로세싱 유닛들; 및
    상기 커널의 제 2 웨이트값과 상기 입력 피처맵의 픽셀값들 각각 간의 연산을 병렬적으로 수행하는 제 2 프로세싱 유닛들을 포함하는, 뉴럴 네트워크 장치.
  6. 제 1 항에 있어서,
    상기 컨트롤러는,
    제 1 레이어의 입력 피처맵의 특징 및 상기 제 1 레이어의 커널의 특징 중 적어도 하나에 기초하여, 상기 제 1 레이어의 공유 오퍼랜드를 상기 제 1 레이어의 입력 피처맵의 픽셀값 또는 상기 제 1 레이어의 커널의 웨이트값 중 어느 하나로 결정하고,
    제 2 레이어의 입력 피처맵의 특징 및 상기 제 2 레이어의 커널의 특징 중 적어도 하나에 기초하여, 상기 제 2 레이어의 공유 오퍼랜드를 상기 제 2 레이어의 입력 피처맵의 픽셀값 또는 상기 제 2 레이어의 커널의 웨이트값 중 어느 하나로 결정하는, 뉴럴 네트워크 장치.
  7. 제 1 항에 있어서,
    상기 입력 피처맵의 특징은,
    상기 입력 피처맵 내에서 제로값을 갖는 픽셀들의 비율 및 상기 입력 피처맵의 형상 중 적어도 하나를 포함하고,
    상기 커널의 특징은,
    상기 커널 내에서 제로값을 갖는 웨이트들의 비율을 포함하는, 뉴럴 네트워크 장치.
  8. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 커널 내에서 제로값을 갖는 웨이트들의 비율이 기 설정된 임계값보다 큰 경우, 상기 공유 오퍼랜드를 상기 커널의 웨이트값으로 결정하는, 뉴럴 네트워크 장치.
  9. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 공통적으로 공유하는 프로세싱 유닛들 개수는,
    상기 입력 피처맵의 입력 채널의 픽셀들의 개수와 동일하거나, 상기 커널의 출력 채널들의 개수와 동일한, 뉴럴 네트워크 장치.
  10. 제 1 항에 있어서,
    상기 프로세서는,
    3차원의 크기를 갖는 입력 피처맵과 4차원의 크기를 갖는 커널 간의 3차원 컨볼루션 연산을 수행하는, 뉴럴 네트워크 장치.
  11. 제 1 항에 있어서,
    상기 프로세싱 유닛들은,
    상기 공유 오퍼랜드가 제로인 경우, 상기 병렬화된 연산들을 생략(skip)하는, 뉴럴 네트워크 장치.
  12. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 입력 피처맵의 픽셀값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 입력 피처맵의 제 1 픽셀값이 제로(zero)인 경우, 상기 제 1 픽셀값과 상기 커널의 제 1 웨이트값들 간의 병렬화된 연산을 생략(skip)하고,
    상기 입력 피처맵의 제 2 픽셀값과 상기 커널의 제 2 웨이트값들 간의 연산을 수행하는, 뉴럴 네트워크 장치.
  13. 제 1 항에 있어서,
    상기 컨트롤러는,
    상기 공유 오퍼랜드를 상기 커널의 웨이트값으로 결정하고,
    상기 프로세싱 유닛들은,
    상기 커널의 제 1 웨이트값이 제로인 경우, 상기 제 1 웨이트값과 상기 입력 피처맵의 제 1 픽셀값들 간의 병렬화된 연산들을 생략하고,
    상기 커널의 제 2 웨이트값과 상기 입력 피처맵의 제 2 픽셀값들 간의 병렬화된 연산들을 수행하는, 뉴럴 네트워크 장치.
  14. 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법에 있어서,
    입력 피처맵의 특징 및 커널의 특징 중 적어도 하나에 기초하여, 병렬화된 연산들 각각에 공통적으로 공유될 공유 오퍼랜드(shared operand)를 상기 입력 피처맵의 픽셀값 또는 상기 커널의 웨이트값 중 어느 하나로 결정하는 단계; 및
    상기 결정된 공유 오퍼랜드를 기초로 상기 병렬화된 연산들을 수행하는 단계를 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 결정하는 단계는,
    상기 공유 오퍼랜드를 상기 입력 피처맵의 픽셀값으로 결정하고,
    상기 수행하는 단계는,
    상기 입력 피처맵의 픽셀값과 상기 커널의 웨이트값들 각각 간의 연산을 병렬적으로 수행하는, 방법.
  16. 제 14 항에 있어서,
    상기 결정하는 단계는,
    상기 공유 오퍼랜드를 상기 커널의 웨이트값으로 결정하고,
    상기 수행하는 단계는,
    상기 커널의 웨이트값과 상기 입력 피처맵의 픽셀값들 각각 간의 연산을 병렬적으로 수행하는, 방법.
  17. 제 14 항에 있어서,
    상기 수행하는 단계는,
    상기 공유 오퍼랜드가 제로인 경우, 상기 병렬화된 연산들을 생략(skip)하는 단계를 포함하는, 방법.
  18. 제 14 항에 있어서,
    상기 결정하는 단계는,
    상기 공유 오퍼랜드를 상기 입력 피처맵의 픽셀값으로 결정하고,
    상기 수행하는 단계는,
    상기 입력 피처맵의 제 1 픽셀값이 제로(zero)인 경우, 상기 제 1 픽셀값과 상기 커널의 제 1 웨이트값들 간의 병렬화된 연산을 생략(skip)하고,
    상기 입력 피처맵의 제 2 픽셀값과 상기 커널의 제 2 웨이트값들 간의 연산을 수행하는, 방법.
  19. 제 14 항에 있어서,
    상기 결정하는 단계는,
    상기 공유 오퍼랜드를 상기 커널의 웨이트값으로 결정하고,
    상기 수행하는 단계는,
    상기 커널의 제 1 웨이트값이 제로인 경우, 상기 제 1 웨이트값과 상기 입력 피처맵의 제 1 픽셀값들 간의 병렬화된 연산들을 생략하고,
    상기 커널의 제 2 웨이트값과 상기 입력 피처맵의 제 2 픽셀값들 간의 병렬화된 연산들을 수행하는, 방법.
  20. 제 14 항 내지 19 항 중에 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체.
KR1020190038606A 2019-01-31 2019-04-02 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 KR20200095300A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US16/564,215 US12014505B2 (en) 2019-01-31 2019-09-09 Method and apparatus with convolution neural network processing using shared operand
CN201911321489.1A CN111507456A (zh) 2019-01-31 2019-12-19 具有卷积神经网络处理的方法和装置
EP20152834.6A EP3690757A1 (en) 2019-01-31 2020-01-21 Method and apparatus with convolution neural network processing
JP2020015497A JP2020126651A (ja) 2019-01-31 2020-01-31 ニューラルネットワークのコンボルーション演算を処理する方法及び装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201962799190P 2019-01-31 2019-01-31
US62/799,190 2019-01-31

Publications (1)

Publication Number Publication Date
KR20200095300A true KR20200095300A (ko) 2020-08-10

Family

ID=72049472

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190038606A KR20200095300A (ko) 2019-01-31 2019-04-02 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치

Country Status (2)

Country Link
JP (1) JP2020126651A (ko)
KR (1) KR20200095300A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230106732A (ko) * 2020-08-21 2023-07-13 주식회사 딥엑스 양자화된 인공신경망 모델을 구동하도록 구성된 신경망프로세싱 유닛
WO2024010437A1 (ko) * 2022-07-08 2024-01-11 주식회사 딥엑스 신경 프로세싱 유닛 및 이의 동작 방법

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112101284A (zh) * 2020-09-25 2020-12-18 北京百度网讯科技有限公司 图像识别方法、图像识别模型的训练方法、装置及***
WO2022195891A1 (ja) * 2021-03-19 2022-09-22 三菱電機株式会社 構成変換装置、構成変換方法、および構成変換プログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230106732A (ko) * 2020-08-21 2023-07-13 주식회사 딥엑스 양자화된 인공신경망 모델을 구동하도록 구성된 신경망프로세싱 유닛
KR20230106734A (ko) * 2020-08-21 2023-07-13 주식회사 딥엑스 프루닝된 인공신경망 모델을 구동하도록 구성된 신경망프로세싱 유닛
US11977916B2 (en) 2020-08-21 2024-05-07 Deepx Co., Ltd. Neural processing unit
WO2024010437A1 (ko) * 2022-07-08 2024-01-11 주식회사 딥엑스 신경 프로세싱 유닛 및 이의 동작 방법

Also Published As

Publication number Publication date
JP2020126651A (ja) 2020-08-20

Similar Documents

Publication Publication Date Title
JP7132824B2 (ja) ニューラルネットワークにおいてデコンボルーション演算を実行する装置及びその方法
EP3789892A1 (en) Method and apparatus for processing data
KR102452953B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US20200285887A1 (en) Neural network method and apparatus
KR20200095300A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
KR102452951B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
KR20190066473A (ko) 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치
KR20200081044A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
US11836971B2 (en) Method and device with convolution neural network processing
EP3800585A1 (en) Method and apparatus with data processing
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
JP6955598B2 (ja) 複数の畳み込みウィンドウ内の画像データの並行抽出方法、装置、機器及びコンピュータ可読記憶媒体
EP3690757A1 (en) Method and apparatus with convolution neural network processing
US11636569B1 (en) Matrix transpose hardware acceleration
KR20200023154A (ko) 컨볼루션 뉴럴 네트워크를 처리하는 방법 및 장치
EP3832551B1 (en) Method and apparatus for processing data
KR20210082970A (ko) 컨볼루션 연산을 수행하는 방법 및 장치
CN114462586A (zh) 数据处理装置、卷积处理器、芯片、以及计算机设备

Legal Events

Date Code Title Description
E902 Notification of reason for refusal