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

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

Info

Publication number
KR20190066473A
KR20190066473A KR1020170166203A KR20170166203A KR20190066473A KR 20190066473 A KR20190066473 A KR 20190066473A KR 1020170166203 A KR1020170166203 A KR 1020170166203A KR 20170166203 A KR20170166203 A KR 20170166203A KR 20190066473 A KR20190066473 A KR 20190066473A
Authority
KR
South Korea
Prior art keywords
bit
operands
operand
weight
feature map
Prior art date
Application number
KR1020170166203A
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 KR1020170166203A priority Critical patent/KR20190066473A/ko
Priority to US16/158,660 priority patent/US20190171930A1/en
Priority to CN201811297789.6A priority patent/CN109871936B/zh
Priority to JP2018221393A priority patent/JP7304148B2/ja
Priority to EP18208489.7A priority patent/EP3496008B1/en
Publication of KR20190066473A publication Critical patent/KR20190066473A/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/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

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

Abstract

뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치는, 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 오퍼랜드들을 결정하고, 결정된 오퍼랜드들로부터 조합된 오퍼랜드 쌍들을 컨볼루션 연산기 내 곱셈기들에 디스패치하고, 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 출력들을 생성하고, 생성된 출력들에 기초하여 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득한다.

Description

뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치 {Method and apparatus for processing convolution operation in neural network}
뉴럴 네트워크에서 피처맵과 커널 간의 컨볼루션 연산을 처리하는 방법 및 장치에 관한다.
뉴럴 네트워크(neural network)는 생물학적 뇌를 모델링한 컴퓨터 과학적 아키텍쳐(computational architecture)를 참조한다. 최근 뉴럴 네트워크(neural network) 기술이 발전함에 따라, 다양한 종류의 전자 시스템에서 뉴럴 네트워크를 활용하여 입력 데이터를 분석하고 유효한 정보를 추출하는 연구가 활발히 진행되고 있다. 뉴럴 네트워크를 처리하는 장치는 복잡한 입력 데이터에 대한 많은 양의 연산을 필요로 한다. 따라서, 뉴럴 네트워크를 이용하여 대량의 입력 데이터를 실시간으로 분석하여, 원하는 정보를 추출하기 위해서는 뉴럴 네트워크에 관한 연산을 효율적으로 처리할 수 있는 기술이 요구된다. 한편, 뉴럴 네트워크의 학습을 통해 적은 비트 수만으로도 일정한 정확도를 유지하거나 정확도를 보다 높일 수 있고, 뉴럴 네트워크를 처리하는 연산기에서 이용되는 비트 수는 구동 중에 다양하게 변경될 수 있다. 이와 같은 뉴럴 네트워크의 성질과 뉴럴 네트워크에서 수행되는 연산들의 병렬성을 함께 이용할 수 있다면, 뉴럴 네트워크의 다양한 연산들을 효율적으로 처리할 수 있을 것이다.
뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치를 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법은, 상기 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정하는 단계(m 및 n은 자연수); 상기 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치하는 단계; 상기 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성하는 단계; 및 상기 생성된 m x n 개의 출력들에 기초하여 상기 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득하는 단계를 포함한다.
다른 측면에 따르면, 장치는, 적어도 하나의 프로그램이 저장된 메모리; 및 상기 적어도 하나의 프로그램을 실행함으로써 뉴럴 네트워크의 컨볼루션 연산을 처리하는 프로세서를 포함하고, 상기 프로세서는, 상기 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정하고(m 및 n은 자연수), 상기 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 상기 상기 프로세서의 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치하고, 상기 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성하고, 상기 생성된 m x n 개의 출력들에 기초하여 상기 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득한다.
도 1은 일 실시예에 따른 뉴럴 네트워크의 아키텍처를 설명하기 위한 도면이다.
도 2a 및 도 2b는 뉴럴 네트워크의 컨볼루션 연산을 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 뉴럴 네트워크 장치의 하드웨어 구성을 도시한 블록도이다.
도 4a 및 도 4b는 16비트(16bit x 16bit) 곱셈기에서 서로 다른 정밀도들(또는 비트 폭들)에 따른 곱셈기 활용도들을 비교하기 위한 도면들이다.
도 5a 및 도 5b는 16비트 곱셈기에서 4개의 8비트 오퍼랜드들을 병렬적으로 처리할 경우 곱셈기 활용도를 설명하기 위한 도면이다.
도 6은 곱셈기 종류에 따른 회로 면적, 에너지 소모를 비교하기 위한 표이다.
도 7a는 일 실시예에 따른 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들의 곱셈 연산의 방식을 설명하기 위한 도면이다.
도 8a는 일 실시예에 따라 뉴럴 네트워크의 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들이 조합된 오퍼랜드 쌍들에 대한 곱셈 연산을 설명하기 위한 도면이다.
도 8b는 일 실시예에 따라 뉴럴 네트워크의 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들이 조합된 오퍼랜드 쌍들에 대한 곱셈 연산을 설명하기 위한 도면이다.
도 9a 내지 도 9d는 일 실시예들에 따라 뉴럴 네트워크에서 병렬성을 이용한 컨볼루션 연산을 수행하기 위하여 결정될 오퍼랜드 쌍의 종류들을 설명하기 위한 도면들이다.
도 10은 일 실시예에 따라 뉴럴 네트워크의 컨볼루션 연산에 이용되는 오퍼랜드들의 병렬성을 설명하기 위한 도면이다.
도 11은 다른 실시예에 따라 뉴럴 네트워크의 컨볼루션 연산에 이용되는 오퍼랜드들의 병렬성을 설명하기 위한 도면이다.
도 12는 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 과정을 설명하기 위한 도면이다.
도 13은 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 것을 설명하기 위한 도면이다.
도 14는 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 것을 설명하기 위한 도면이다.
도 15는 일 실시예에 따라 일부 오퍼랜드가 제로인 경우에 수행될 컨볼루션 연산을 설명하기 위한 도면이다.
도 16은 일 실시예에 따라 제로 오퍼랜드를 판단하는 것을 설명하기 위한 도면이다.
도 17은 일 실시예에 따른 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법의 흐름도이다.
본 실시예들에서 사용되는 용어는 본 실시예들에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 기술분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 임의로 선정된 용어도 있으며, 이 경우 해당 실시예의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서, 본 실시예들에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 실시예들의 전반에 걸친 내용을 토대로 정의되어야 한다.
실시예들에 대한 설명들에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 구성요소를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
본 실시예들에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 도는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
하기 실시예들에 대한 설명은 권리범위를 제한하는 것으로 해석되지 말아야 하며, 해당 기술분야의 당업자가 용이하게 유추할 수 있는 것은 실시예들의 권리범위에 속하는 것으로 해석되어야 할 것이다. 이하 첨부된 도면들을 참조하면서 오로지 예시를 위한 실시예들을 상세히 설명하기로 한다.
도 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)에서 대응 위치의 각 엘리먼트의 웨이트 간의 곱셈을 하여 획득된 값들을 모두 합산하여, 출력 피처맵(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이 결정된다.
즉, 하나의 입력 피처맵(210)과 하나의 원본 커널(220) 간의 컨볼루션 연산은 입력 피처맵(210) 및 원본 커널(220)에서 서로 대응하는 각 엘리먼트의 값들의 곱셈 및 곱셈 결과들의 합산을 반복적으로 수행함으로써 처리될 수 있고, 컨볼루션 연산의 결과로서 출력 피처맵(230)이 생성된다.
한편, 도 2a에서는 2차원 컨볼루션 연산에 대하여 설명되었으나, 컨볼루션 연산은 복수의 채널들의 입력 피처맵들, 커널들, 출력 피처맵들이 존재하는 3차원 컨볼루션 연산에 해당될 수 있다. 이에 대해서는 도 2b를 참고하여 설명하도록 한다.
도 2b를 참고하면, 입력 피처맵들(201)은 X개의 채널들이 존재하고, 각 채널의 입력 피처맵은 H행 W열의 크기를 가질 수 있다 (X, W, H는 자연수). 커널들(202) 각각은 R행 S열의 크기를 갖고, 커널들(202)은 입력 피처맵들(201)의 채널 수(X) 및 출력 피처맵들(203)의 채널 수(Y)에 대응하는 개수의 채널들을 가질 수 있다 (R, S, Y는 자연수). 출력 피처맵들(203)은 입력 피처맵들(201)과 커널들(202) 간의 3차원 컨볼루션 연산을 통해 생성되고, 컨볼루션 연산에 따라 Y개의 채널들이 존재할 수 있다.
하나의 입력 피처맵과 하나의 커널 간의 컨볼루션 연산을 통해 출력 피처맵이 생성되는 과정은 앞서 도 2a에서 설명된 바와 같으며, 도 2a에서 설명된 2차원 컨볼루션 연산이 전체 채널들의 입력 피처맵들(201)과 전체 채널들의 커널들(202) 간에 반복적으로 수행됨으로써, 전체 채널들의 출력 피처맵들(203)이 생성될 수 있다.
도 3은 일 실시예에 따른 뉴럴 네트워크 장치의 하드웨어 구성을 도시한 블록도이다.
뉴럴 네트워크 장치(10)는 PC(personal computer), 서버 디바이스, 모바일 디바이스, 임베디드 디바이스 등의 다양한 종류의 디바이스들로 구현될 수 있고, 구체적인 예로서 뉴럴 네트워크를 이용한 음성 인식, 영상 인식, 영상 분류 등을 수행하는 스마트폰, 태블릿 디바이스, AR(Augmented Reality) 디바이스, IoT(Internet of Things) 디바이스, 자율주행 자동차, 로보틱스, 의료기기 등에 해당될 수 있으나, 이에 제한되지 않는다. 나아가서, 뉴럴 네트워크 장치(10)는 위와 같은 디바이스에 탑재되는 전용 하드웨어 가속기(HW accelerator)에 해당될 수 있고, 뉴럴 네트워크 장치(10)는 뉴럴 네트워크 구동을 위한 전용 모듈인 NPU(neural processing unit), TPU(Tensor Processing Unit), Neural Engine 등과 같은 하드웨어 가속기일 수 있으나, 이에 제한되지 않는다.
도 3을 참고하면, 뉴럴 네트워크 장치(10)는 프로세서(110) 및 외부 메모리(120)를 포함한다. 도 3에 도시된 뉴럴 네트워크 장치(10)에는 본 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 뉴럴 네트워크 장치(10)에는 도 3에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음은 당해 기술분야의 통상의 기술자에게 자명하다.
프로세서(110)는 뉴럴 네트워크 장치(10)에서 뉴럴 네트워크를 구동하기 위한 전반적인 기능들을 제어하는 역할을 한다. 예를 들어, 프로세서(110)는 뉴럴 네트워크 장치(10) 내의 외부 메모리(120)에 저장된 프로그램들을 실행함으로써, 뉴럴 네트워크 장치(10)를 전반적으로 제어한다. 프로세서(110)는 뉴럴 네트워크 장치(10) 내에 구비된 CPU(central processing unit), GPU(graphics processing unit), AP(application processor) 등으로 구현될 수 있으나, 이에 제한되지 않는다.
외부 메모리(120)는 뉴럴 네트워크 장치(10) 내에서 처리되는 각종 데이터들을 저장하는 하드웨어로서, 외부 메모리(120)는 뉴럴 네트워크 장치(10)에서 처리된 데이터들 및 처리될 데이터들을 저장할 수 있다. 또한, 외부 메모리(120)는 뉴럴 네트워크 장치(10)에 의해 구동될 애플리케이션들, 드라이버들 등을 저장할 수 있다. 외부 메모리(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)는 내부에 구비된 컨볼루션 연산기(convolution operator)를 구동시켜, 출력 피처맵에 관한 데이터를 생성하기 위한 입력 피처맵과 커널 간의 컨볼루션 연산을 반복적으로 수행한다. 이때, 입력 피처맵의 채널 수, 커널의 채널 수, 입력 피처맵의 크기, 커널의 크기, 값의 정밀도(precision) 등의 다양한 팩터들에 의존하여 컨볼루션 연산의 연산량이 결정될 수 있다. 도 1에 도시된 뉴럴 네트워크(1)와 달리, 뉴럴 네트워크 장치(10)에서 구동되는 실제 뉴럴 네트워크는 보다 복잡한 아키텍처로 구현될 수 있다. 이에 따라 프로세서(110)는 수억에서 수백억에 다다를 정도로 매우 많은 연산량(operation count)의 컨볼루션 연산들을 수행하게 되고, 프로세서(110)가 컨볼루션 연산을 위해 외부 메모리(120)에 액세스하는 빈도가 함께 비약적으로 증가될 수 밖에 없다. 비교적 처리 성능이 낮은 스마트폰, 태블릿, 웨어러블 디바이스 등과 같은 모바일 디바이스, 임베디드(embedded) 디바이스 등에서는 이와 같은 연산량 부담을 줄이기 위한 방안들이 요구되고 있다.
프로세서(110)는 프로세싱 기능을 담당하는 프로세싱 유닛(112)과 캐시(cache) 기능을 담당하는 온-칩(on-chip) 메모리(114)를 포함할 수 있다.
프로세싱 유닛(112)은 외부 메모리(120)로부터 온-칩 메모리(114)로 저장된(또는 버퍼링된) 입력 피처맵들의 픽셀 값들, 커널들의 웨이트들 등을 이용하여 입력 피처맵 및 커널 간의 컨볼루션 연산을 처리한다. 프로세서(110) 내에서 프로세싱 유닛(112) 및 온-칩 메모리(114) 각각은 하나 이상씩 구비될 수 있으며, 하나 이상의 프로세싱 유닛(112) 및 온-칩 메모리(114) 각각은 병렬적으로, 독립적으로 컨볼루션 연산을 처리하는데 이용됨으로써 컨볼루션 연산이 효율적으로 처리될 수 있다.
프로세서(110)의 프로세싱 유닛(112) 내에는 컨볼루션 연산을 위한 컨볼루션 연산기(convolution operator)를 구현한 로직 회로가 구비될 수 있다. 컨볼루션 연산기는 곱셈기(multiplier), 덧셈기(adder) 및 누산기(accumulator)의 조합으로 구현된 연산기이다. 컨볼루션 연산기 내에서 곱셈기는 다수의 서브-곱셈기들의 조합으로 구현될 수 있고, 또한 덧셈기도 다수의 서브-덧셈기들의 조합으로 구현될 수 있다.
프로세싱 유닛(112)은 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정한다 (m 및 n은 자연수). 여기서, m과 n은 같거나 서로 다른 자연수일 수 있고, 제1비트의 값 및 제2비트의 값도 같거나 서로 다른 자연수일 수 있다.
프로세싱 유닛(112)은 병렬 처리가 가능한 입력 피처맵들의 픽셀 값들 및 커널들의 웨이트들에 기초하여 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들을 결정할 수 있다.
예를 들어, 결정된 피처맵 오퍼랜드들은 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들에 기초한 것일 수 있고, 이때 결정된 웨이트 오퍼랜드들은 커널들 중 하나의 입력 피처맵의 입력 채널이면서 서로 다른 출력 채널들의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것이거나, 또는 커널들 중 하나의 입력 피처맵의 입력 채널 및 어느 하나의 출력 채널의 참조를 갖는 어느 하나의 커널에서 서로 다른 위치들의 웨이트들에 기초한 것일 수 있다.
다른 예로서, 결정된 피처맵 오퍼랜드들은 입력 피처맵들 중 서로 다른 입력 채널들의 참조들을 갖는 서로 다른 입력 피처맵들에서 서로 대응하는 픽셀 위치들의 픽셀 값들에 기초한 것일 수 있고, 이때 결정된 웨이트 오퍼랜드들은 커널들 중 서로 다른 입력 채널들이면서 어느 하나의 출력 채널의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것이거나, 또는 커널들 중 서로 다른 입력 채널들이면서 서로 다른 출력 채널들의 참조를 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것일 수 있다.
다만, 위와 같은 예시들은 프로세싱 유닛(112)에 의해 결정될 수 있는 오퍼랜드들의 일부 종류들에 불과할 뿐, 프로세싱 유닛(112)은 이 밖에도 다양한 종류들의 오퍼랜드들을 입력 피처맵들 및 커널들로부터 결정할 수 있다.
프로세싱 유닛(112)은 컨볼루션 연산기 내 곱셈기의 정밀도, 덧셈기의 정밀도, 누산기의 정밀도 등과 결정된 오퍼랜드들의 정밀도들을 판단하고, 결정된 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들의 정밀도(비트 폭)에 기초하여 컨볼루션 연산기 내 곱셈기, 덧셈기, 누산기 등을 어떠한 방식(예를 들어, 어떠한 정밀도(비트 폭))으로 분해(decompose)할 것인지를 판단할 수 있다.
예를 들어, 컨볼루션 연산기가 k비트의 최대 정밀도(full precision)를 갖는 k비트 곱셈기를 포함하는 경우 (k는 자연수), k비트 곱셈기는 k비트 곱셈기의 서브 로직들에 해당하는 서브-곱셈기들 각각으로 논리적 또는 물리적으로 분해될 수 있다. 여기서, 앞서 설명된 오퍼랜드들의 비트 수인 제1비트 및 제2비트 각각은 k비트보다 작고, 분해된 서브-곱셈기들 각각은 제1비트의 곱셈기 또는 제2비트의 곱셈기에 해당할 수 있다. 하지만, 본 실시예들은 이에 제한되지 않는다.
프로세싱 유닛(112)은 결정된 오퍼랜드들을 온-칩 메모리(114)에 저장한다. 그리고 나서, 프로세싱 유닛(112)은 온-칩 메모리(114)에 저장되어 있는, 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치한다.
예를 들어, 제1비트 피처맵 오퍼랜드들 및 제2비트 웨이트 오퍼랜드들이 k/2비트 오퍼랜드들에 해당하고, 분해된 서브-곱셈기들 각각이 k/2비트 곱셈기에 해당할 수 있다. 이와 같은 경우, 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 오퍼랜드 쌍들 각각이 디스패치된다.
다른 예로서, 분해된 서브-곱셈기들 각각이 k/2비트 곱셈기에 해당하고, 제1비트 피처맵 오퍼랜드들이 k/2비트 오퍼랜드들이고 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB(most significant bit)가 서로 매핑된 오퍼랜드 쌍들과 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드에서 k/2비트의 LSB(least significant bit)가 서로 매핑된 오퍼랜드 쌍들이 디스패치될 수 있다.
또 다른 예로서, 분해된 서브-곱셈기들 각각이 k/2비트 곱셈기에 해당하고, 제1비트 피처맵 오퍼랜드들이 k비트 오퍼랜드들이고 제2비트 웨이트 오퍼랜드들이 k/2비트 오퍼랜드들인 경우, 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 오퍼랜드 쌍들과 제1비트 피처맵 오퍼랜드에서 k/2비트의 LSB 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 오퍼랜드 쌍들이 디스패치될 수 있다.
또 다른 예로서, 분해된 서브-곱셈기들 각각이 k/2비트 곱셈기에 해당하고, 제1비트 피처맵 오퍼랜드들 및 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 LSB와 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB 및 LSB가 서로 매핑된 오퍼랜드 쌍들이 디스패치될 수 있다.
다만, 위와 같은 오퍼랜드 디스패치 패턴들은 예시적일 뿐이고, 프로세싱 유닛(112)은 이 밖에도 다양한 패턴들로 오퍼랜드들을 서브-곱셈기들에 디스패치할 수 있다.
프로세싱 유닛(112)은 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성한다.
프로세싱 유닛(112)은 생성된 m x n 개의 출력들에 기초하여 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득한다.
한편, 프로세싱 유닛(112)은 디스패치된 m x n개의 오퍼랜드 쌍들 중 제로 오퍼랜드가 존재하는 경우, 제로 스킵핑(zero skipping)을 위하여 제로 오퍼랜드가 디스패치된 서브-곱셈기의 곱셈 연산을 클럭-게이팅(clock-gating)할 수 있다.
프로세싱 유닛(112)은 컨볼루션 연산기에 입력 피처맵들의 픽셀 값들, 커널들의 웨이트들 등과 같은 다양한 오퍼랜드들(operand)을 앞서 설명한 바와 같이 디스패치하기 위한 디스패처(dispatcher)를 구비할 수 있다. 디스패처는 외부 메모리(120)에 저장되어 있는 입력 피처맵들의 픽셀 값들, 커널들의 웨이트들 등의 데이터로부터 프로세싱 유닛(112)이 수행할 컨볼루션 연산에 필요한 픽셀 값들, 웨이트들 등의 오퍼랜드들을 온-칩 메모리(114)에 디스패치한다. 그리고 나서, 디스패처는 온-칩 메모리(114)에 디스패치된 오퍼랜드들을 컨볼루션 연산을 위해 컨볼루션 연산기에 다시 디스패치한다.
한편, 뉴럴 네트워크에서 이용되는 픽셀 값들, 웨이트들 등의 오퍼랜드들은 다양한 정밀도(precision)(또는 비트 폭(bit width))를 갖는 데이터에 해당될 수 있다. 따라서, 프로세싱 유닛(112) 및 온-칩 메모리(114)는 이와 같은 다양한 정밀도들(또는 비트 폭들)의 데이터를 이용한 컨볼루션 연산이 가능하도록, 프로세싱 유닛(112)의 컨볼루션 연산기 및 온-칩 메모리(114)에 디스패치될 오퍼랜드의 정밀도(또는 비트 폭)를 가변적이면서 동적으로 조절할 수 있다.
프로세싱 유닛(112)은 뉴럴 네트워크에서 처리될 개별 컨볼루션 연산의 병렬성(parallelism)과 개별 오퍼랜드의 정밀도(또는 비트 폭)에 따른 디스패치 패턴을 적절하게 이용함으로써, 뉴럴 네트워크의 컨볼루션 연산을 효율적으로 처리할 수 있다.
도 4a 및 도 4b는 16비트(16bit x 16bit) 곱셈기에서 서로 다른 정밀도들(또는 비트 폭들)에 따른 곱셈기 활용도들을 비교하기 위한 도면들이다.
도 4a를 참고하면, 컨볼루션 연산을 수행할 픽셀 값(401) 및 웨이트(402)가 모두 16비트 오퍼랜드들에 해당되는 경우, 컨볼루션 연산기 내 16비트 곱셈기(403)에서는 16비트 피처맵 오퍼랜드(즉, 픽셀 값)과 16비트 웨이트 오퍼랜드 간의 곱셈 연산이 수행된다. 따라서, 도 4a의 경우, 16비트 곱셈기(403)의 활용도는 100%에 해당한다.
도 4b를 참고하면, 컨볼루션 연산을 수행할 픽셀 값(411) 및 웨이트(412)가 모두 8비트 오퍼랜드들에 해당되는 경우, 컨볼루션 연산기 내 16비트 곱셈기(413)에서는 8비트 피처맵 오프랜드(즉, 픽셀 값)과 8비트 웨이트 오퍼랜드 간의 곱셈 연산이 수행된다. 따라서, 도 4b의 경우, 도 4a와 달리 16비트 곱셈기(413)의 활용도는 25%에 불과하다. 즉, 16비트 곱셈기(413)의 나머지 75% 리소스는 유휴(idle) 상태에 머무르게 되고, 이에 따라 컨볼루션 연산기의 연산 효율이 낮아지게 될 수 있다.
도 5a 및 도 5b는 16비트 곱셈기에서 4개의 8비트 오퍼랜드들을 병렬적으로 처리할 경우 곱셈기 활용도를 설명하기 위한 도면이다.
도 5a를 참고하면, 8비트의 피처맵 오퍼랜드(즉, 픽셀 값)(501)와 웨이트 오퍼랜드(511)의 오퍼랜드 쌍(operand pair)과 8비트의 피처맵 오퍼랜드(즉, 픽셀 값)(503)와 웨이트 오퍼랜드(513)의 오퍼랜드 쌍이 병렬적인 컨볼루션 연산을 위해 16비트 곱셈기(521)에 디스패치될 수 있다. 그렇다 할지라도, 16비트 곱셈기(521)에서는 50%의 리소스들(522, 523)만 이용될 뿐이다.
도 5b를 참고하면, 8비트의 피처맵 오퍼랜드(501)는 입력 채널 1의 입력 피처맵에서 (0,0) 위치의 픽셀 값(F1(0,0))(542)에 해당하고, 8비트의 피처맵 오퍼랜드(503)는 입력 채널 0의 입력 피처맵에서 (0,0) 위치의 픽셀 값(F0(0,0))(543)에 해당하고, 8비트의 웨이트 오퍼랜드(511)는 입력 채널 1 및 출력 채널 0의 커널에서 (0,0) 위치의 웨이트(W01(0,0))(552)에 해당하고, 8비트의 웨이트 오퍼랜드(513)는 입력 채널 0 및 출력 채널 0의 커널에서 (0,0) 위치의 웨이트(W00(0,0))(553)에 해당할 수 있다. 16비트 곱셈기(561) 내 서브-곱셈기(562)에는 픽셀 값(F0(0,0))(543) 및 웨이트(W00(0,0))(553)가 디스패치되고, 서브-곱셈기(562)는 픽셀 값(F0(0,0))(543) 및 웨이트(W00(0,0))(553)의 곱셈 연산을 수행한다. 그리고, 서브-곱셈기(563)에는 픽셀 값(F1(0,0))(542) 및 웨이트(W01(0,0))(552)가 디스패치되고, 서브-곱셈기(563)는 픽셀 값(F1(0,0))(542) 및 웨이트(W01(0,0))(552)의 곱셈 연산을 수행한다. 서브-곱셈기(562) 및 서브-곱셈기(563)의 각 연산 결과는 독립적으로 처리되고, 최종적으로는 각각 출력 채널 0의 출력 피처맵의 픽셀 값(O0(0,0)) 및 출력 채널 1의 출력 피처맵의 픽셀 값(O1(0,0))으로 출력된다.
즉, 4개의 8비트 오퍼랜드들(501, 503, 511, 513)이 16비트 곱셈기(521)에 입력되었으나, 2개의 출력들(O0(0,0), O1(0,0)) 밖에 출력되지 않았으므로, 16비트 곱셈기(521)의 모든 리소스가 사용되지 못하였고, 이에 따라 컨볼루션 연산기의 연산 효율이 낮아지게 될 수 있다.
결국, 도 4b, 도 5a 및 도 5b에 따르면, 곱셈기의 최대 비트 폭(예를 들어, 16비트)을 활용하지 못하기 때문에, 곱셈기 활용도 및 컨볼루션 연산기의 효율이 낮아지게 될 수 있다. 도 4a의 경우, 뉴럴 네트워크에서 모든 오퍼랜드들이 16비트로 고정되어 있지 않기 때문에, 16비트 곱셈기가 항상 최대 비트 폭으로 활용되지 못할 수 있다. 그러므로, 곱셈기의 최대 비트 폭 내에서 오퍼랜드들을 효율적으로 디스패치하여 곱셈기의 활용도를 높이는 방안이 요구되고, 이를 통해 컨볼루션 연산의 효율이 증대될 수 있다.
도 6은 곱셈기 종류에 따른 회로 면적, 에너지 소모를 비교하기 위한 표이다.
도 6을 참고하면, 4비트(4x4) 곱셈기에 비하여 8비트(8x8) 곱셈기는 대략적으로 4배의 회로 면적을 차지하고, 에너지 소모도 5배나 높을 수 있다. 또한, 4비트 곱셈기에 비하여 16비트 곱셈기는 대략적으로 15배의 회로 면적을 차지하고, 에너지 소모도 21배나 높을 수 있다. 즉, 곱셈기의 정밀도(비트 폭)가 증가할수록 회로 면적이 증가할 뿐만 아니라 에너지 소모도 막대하게 증가한다. 따라서, 컨볼루션 연산기 내에 높은 정밀도의 곱셈기가 구현될 경우에는, 곱셈기의 모든 리소스를 최대한 활용할 수 있어야 컨볼루션 연산기의 연산 성능을 높일 수 있다.
도 7a는 일 실시예에 따른 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들의 곱셈 연산의 방식을 설명하기 위한 도면이다.
도 7a를 참고하면, 프로세서(도 3의 110)는 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 제1비트 피처맵 오퍼랜드들 및 제2비트 웨이트 오퍼랜드들을 결정한다. 예를 들어, 제1비트 및 제2비트는 모두 8비트에 해당하는 것으로 가정하여 설명하겠으나, 이에 제한되지 않고 제1비트 및 제2비트는 다른 비트 수에 해당할 수도 있다.
구체적으로, 프로세서(110)의 프로세싱 유닛(도 3의 112)은 결정된 8비트 피처맵 오퍼랜드들 및 8비트 웨이트 오퍼랜드들을 외부 메모리(도 3의 120)로부터 리드하고 이들을 온-칩 메모리(도 3의 114)에 디스패치(저장)한다. 이때, 프로세싱 유닛(112)은 온-칩 메모리(114)에 할당된, 피처맵 오퍼랜드들을 위한 16비트 저장 영역(701)에 8비트 제1피처맵 오퍼랜드 및 8비트 제2피처맵 오퍼랜드를 디스패치(저장)할 수 있다. 또한, 프로세싱 유닛(112)은 온-칩 메모리(114)에 할당된, 웨이트 오퍼랜드들을 위한 16비트 저장 영역(711)에 8비트 제1웨이트 오퍼랜드 및 8비트 제2웨이트 오퍼랜드를 디스패치(저장)할 수 있다.
제1피처맵 오퍼랜드와 제1웨이트 오퍼랜드의 오퍼랜드 쌍, 제1피처맵 오퍼랜드와 제2웨이트 오퍼랜드의 오퍼랜드 쌍, 제2피처맵 오퍼랜드와 제1웨이트 오퍼랜드의 오퍼랜드 쌍 및 제2피처맵 오퍼랜드와 제2웨이트 오퍼랜드의 오퍼랜드 쌍 각각은, 입력 피처맵 및 커널 간의 컨볼루션 연산에서 처리되어야 할 오퍼랜드 쌍들에 해당할 수 있다. 나아가서, 이와 같은 오퍼랜드 쌍들 각각은 컨볼루션 연산에서 병렬 처리가 가능한 오퍼랜드 쌍들에 해당할 수 있다.
즉, 뉴럴 네트워크의 컨볼루션 연산의 병렬성을 최대한 활용할 수 있도록 오퍼랜드들이 디스패치되고, 이 오퍼랜드들의 쌍들이 컨볼루션 연산기 내 곱셈기 리소스를 최대한 사용할 수 있도록 곱셈기에 디스패치된다면, 효율적인 컨볼루션 연산이 처리될 수 있다.
도 7b는 일 실시예에 따라 오퍼랜드들의 다양한 정밀도들에 따른 곱셈기의 성능들을 비교하기 위한 도면이다. 도 7b를 참고하면, 16비트 곱셈기에서 16비트 오퍼랜드 쌍이 처리될 경우에는, 하나의 출력(1X throughput)만이 획득될 수 있으나, 도 7a와 같이 16비트 곱셈기에서 4개의 8비트 오퍼랜드 쌍들이 처리될 경우에는 4개의 독립적인 출력들(4X throughput)이 획득될 수 있다.
도 8a는 일 실시예에 따라 뉴럴 네트워크의 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들이 조합된 오퍼랜드 쌍들에 대한 곱셈 연산을 설명하기 위한 도면이다.
도 8a를 참고하면, 피처맵 오퍼랜드들(F0(0,0), F0(0,1)) 및 웨이트 오퍼랜드들(W00(0,0), W01(0,0))이 모두 8비트에 해당하고, 16비트 곱셉기에서 곱셈 연산이 수행되는 경우를 가정한다. 한편, 16비트 곱셈기는 4개의 독립적인 서브-곱셈기들(811, 812, 813, 814)로 분해(decompose)될 수 있다.
피처맵 오퍼랜드(F0(0,0)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍, 피처맵 오퍼랜드(F0(0,0)) 및 웨이트 오퍼랜드(W10(0,0))의 오퍼랜드 쌍, 피처맵 오퍼랜드(F0(0,1)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍 및 피처맵 오퍼랜드(F0(0,1)) 및 웨이트 오퍼랜드(W10(0,0))의 오퍼랜드 쌍 각각은, 입력 피처맵 및 커널 간의 컨볼루션 연산에서 처리되어야 할 오퍼랜드 쌍들에 해당할 수 있다.
4개의 오퍼랜드 쌍들 각각은, 분해된 4개의 서브-곱셈기들(811, 812, 813, 814) 각각에 디스패치되고, 서브-곱셈기들(811, 812, 813, 814) 각각은 독립적으로 오퍼랜드 쌍에 대한 곱셈 연산을 수행한다. 곱셈 연산 이후에 덧셈 연산 또는 누적(accumulate) 연산을 통해 4개의 독립적인 출력들(O0(0,0), O0(0,1), O1(0,0), O1(0,1))이 획득될 수 있다. 즉, 도 5b에서는 2개의 오퍼랜드 쌍에 대해서만 곱셈 연산을 수행함으로써 2개의 출력들(O0(0,0), O1(0,0))만이 획득되었으나, 도 8a에서와 같이 뉴럴 네트워크의 컨볼루션 연산의 병렬성을 최대한 활용할 수 있도록 서브-곱셈기들에 오퍼랜드 쌍들이 적절히 디스패치된다면, 효율적인 컨볼루션 연산이 처리될 수 있다.
도 8b는 일 실시예에 따라 뉴럴 네트워크의 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들이 조합된 오퍼랜드 쌍들에 대한 곱셈 연산을 설명하기 위한 도면이다.
도 8b를 참고하면, 피처맵 오퍼랜드들(F0(0,0), F0(0,1), F0(0,2), F0(0,3))이 모두 4비트에 해당하고, 웨이트 오퍼랜드(W00(0,0))가 16비트에 해당하고, 16비트 곱셉기에서 곱셈 연산이 수행되는 경우를 가정한다. 한편, 16비트 곱셈기는 4개의 독립적인 8비트(8x8) 서브-곱셈기들(821, 822, 823, 824)로 분해될 수 있다.
피처맵 오퍼랜드(F0(0,0)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍, 피처맵 오퍼랜드(F0(0,1)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍, 피처맵 오퍼랜드(F0(0,2)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍 및 피처맵 오퍼랜드(F0(0,3)) 및 웨이트 오퍼랜드(W00(0,0))의 오퍼랜드 쌍 각각은, 입력 피처맵 및 커널 간의 컨볼루션 연산에서 처리되어야 할 오퍼랜드 쌍들에 해당할 수 있다.
마찬가지로, 4개의 오퍼랜드 쌍들 각각은, 분해된 4개의 서브-곱셈기들(821, 822, 823, 824) 각각에 디스패치되고, 서브-곱셈기들(811, 812, 813, 814) 각각은 독립적으로 오퍼랜드 쌍에 대한 곱셈 연산을 수행함으로써, 4개의 독립적인 출력들이 획득될 수 있다. 즉, 도 8a에서와 같이, 뉴럴 네트워크의 컨볼루션 연산의 병렬성을 최대한 활용하여 곱셈기의 효율을 최대화함으로써 효율적인 컨볼루션 연산이 처리될 수 있다.
도 9a 내지 도 9d는 일 실시예들에 따라 뉴럴 네트워크에서 병렬성을 이용한 컨볼루션 연산을 수행하기 위하여 결정될 오퍼랜드 쌍의 종류들을 설명하기 위한 도면들이다.
도 9a를 참고하면, 프로세서(도 3의 110)의 프로세싱 유닛(도 3의 112)에 의해 병렬 처리가 가능한 것으로 결정된 피처맵 오퍼랜드들은, 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들(911)(Pixel 1, Pixel 2, Pixel 3, Pixel 4)에 기초한 것일 수 있다. 그리고, 결정된 웨이트 오퍼랜드들은, 커널들 중 해당 입력 피처맵의 입력 채널 및 어느 하나의 출력 채널의 참조(reference)를 갖는 어느 하나의 커널에서 서로 다른 위치들의 웨이트들(912)(Weight 1, Weight 2, Weight 3, Weight 4)에 기초한 것일 수 있다.
곱셈기는 서브-곱셈기들로 분해된다. 프로세싱 유닛(도 3의 112)에 구비된 디스패처는 각각의 서브-곱셈기에, 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 4개의 오퍼랜드 쌍들(Pixel 1과 Weight 1, Pixel 2와 Weight 2, Pixel 3과 Weight 3, Pixel 4와 Weight 4)을 디스패치한다. 디스패치된 각 오퍼랜드 쌍에 대해서는 독립적이고 병렬적인 곱셈 연산이 수행될 수 있다.
도 9b를 참고하면, 프로세서(110)의 프로세싱 유닛(112)에 의해 병렬 처리가 가능한 것으로 결정된 피처맵 오퍼랜드들은, 입력 피처맵들 중 서로 다른 입력 채널들의 참조들을 갖는 서로 다른 입력 피처맵들에서의 어느 픽셀 위치들의 픽셀 값들(921)(Pixel 1, Pixel 2, Pixel 3, Pixel 4)에 기초한 것일 수 있다. 그리고, 결정된 웨이트 오퍼랜드들은, 커널들 중 서로 다른 입력 채널들이면서 어느 하나의 출력 채널의 참조들을 갖는 서로 다른 커널들에서 어느 위치들의 웨이트들(922)(Weight 1, Weight 2, Weight 3, Weight 4)에 기초한 것일 수 있다.
프로세싱 유닛(112)에 구비된 디스패처는 각각의 서브-곱셈기에, 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 4개의 오퍼랜드 쌍들(Pixel 1과 Weight 1, Pixel 2와 Weight 2, Pixel 3과 Weight 3, Pixel 4와 Weight 4)을 디스패치하고, 각 서브-곱셈기는 디스패치된 각 오퍼랜드 쌍에 대해서 독립적이고 병렬적인 곱셈 연산을 수행할 수 있다.
도 9c를 참고하면, 프로세서(110)의 프로세싱 유닛(112)에 의해 병렬 처리가 가능한 것으로 결정된 피처맵 오퍼랜드들은, 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들(931)(Pixel 1, Pixel 2, Pixel 3, Pixel 4)에 기초한 것일 수 있다. 여기서, 서로 다른 픽셀 위치들은 입력 피처맵에서 서로 겹치지 않는 슬라이딩 윈도우에서 대응하는 픽셀 위치들일 수 있으나, 이에 제한되지 않는다. 그리고, 결정된 웨이트 오퍼랜드들은, 커널들 중 해당 입력 피처맵의 입력 채널 및 어느 하나의 출력 채널의 참조를 갖는 어느 하나의 커널에서 어느 하나의 웨이트(932)(Weight 1)에 기초한 것일 수 있다.
프로세싱 유닛(112)에 구비된 디스패처는 각각의 서브-곱셈기에, 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 4개의 오퍼랜드 쌍들(Pixel 1과 Weight 1, Pixel 2와 Weight 1, Pixel 3과 Weight 1, Pixel 4와 Weight 1)을 디스패치하고, 각 서브-곱셈기는 디스패치된 각 오퍼랜드 쌍에 대해서 독립적이고 병렬적인 곱셈 연산을 수행할 수 있다.
도 9d를 참고하면, 프로세서(110)의 프로세싱 유닛(112)에 의해 병렬 처리가 가능한 것으로 결정된 피처맵 오퍼랜드들은, 어느 하나의 입력 피처맵에서 어느 하나의 픽셀 위치의 픽셀 값(941)(Pixel 1)에 기초한 것일 수 있다. 그리고, 결정된 웨이트 오퍼랜드들은, 커널들 중 해당 입력 피처맵의 입력 채널 및 서로 다른 출력 채널들의 참조들을 갖는 서로 다른 커널들에서 어느 위치들의 웨이트들(942)(Weight 1, Weight 2, Weight 3, Weight 4)에 기초한 것일 수 있다.
프로세싱 유닛(112)에 구비된 디스패처는 각각의 서브-곱셈기에, 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 4개의 오퍼랜드 쌍들(Pixel 1과 Weight 1, Pixel 1과 Weight 2, Pixel 1과 Weight 3, Pixel 1과 Weight 4)을 디스패치하고, 각 서브-곱셈기는 디스패치된 각 오퍼랜드 쌍에 대해서 독립적이고 병렬적인 곱셈 연산을 수행할 수 있다.
도 9a 내지 도 9d에서 설명된 뉴럴 네트워크에서 컨볼루션 연산의 병렬성을 이용하기 위해 결정된 오퍼랜드들은 예시적인 것들일 뿐이고, 이 밖에도 다양한 오퍼랜드들이 병렬적인 컨볼루션 연산을 위해 결정될 수 있다. 즉, 프로세서(110)는 병렬 처리가 가능한 오퍼랜드 조합 내에서 다양한 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들을 결정할 수 있다. 프로세서(110)는 병렬 처리가 가능한 오퍼랜드들의 조합을 결정하고, 이와 같은 오퍼랜드 쌍들을 앞서 설명된 도 8a, 도 8b 또는 이와 유사한 방식으로 서브-곱셈기들에 디스패치함으로써 컨볼루션 연산의 처리를 효율화할 수 있다.
도 10은 일 실시예에 따라 뉴럴 네트워크의 컨볼루션 연산에 이용되는 오퍼랜드들의 병렬성을 설명하기 위한 도면이다.
도 10을 참고하면, 입력 피처맵의 픽셀 값들 및 커널의 웨이트들은 모두 8비트의 오퍼랜드들에 해당하는 것으로 가정한다. 그러나, 이는 설명의 편의를 위한 것일 뿐, 이에 제한되지 않고 픽셀 값들 및 웨이트들은 다른 비트 폭의 데이터에 해당할 수 있다. 한편, 컨볼루션 연산기에 구비된 곱셈기는 16비트(16x16) 곱셈기에 해당하는 것으로 가정하나, 이에 제한되지 않고 곱셈기는 다른 정밀도의 곱셈기에 해당할 수도 있다.
프로세서(도 3의 110)는 입력 피처맵들의 픽셀 값들 및 커널들의 웨이트들 중에서 병렬 처리가 가능한 오퍼랜드들을 결정한다.
도 10에 도시된 바와 같이, 프로세서(110)는 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들에 기초하여 피처맵 오퍼랜드들을 결정할 수 있고, 커널들 중 해당 입력 피처맵의 입력 채널이면서 서로 다른 출력 채널들의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초하여 웨이트 오퍼랜드들을 결정할 수 있다.
구체적으로, 입력 피처맵들 및 커널들 간의 컨볼루션 연산들이 수행될 때, F0(0,0)의 픽셀 값은 W00(0,0)의 웨이트와의 곱셈 연산과 W10(0,0)의 웨이트와의 곱셈 연산에 각각 이용된다. 그리고, F0(0,1)의 픽셀 값도 W00(0,0)의 웨이트와의 곱셈 연산과 W10(0,0)의 웨이트와의 곱셈 연산에 각각 이용된다. 결국, F0(0,0)의 픽셀 값 및 W00(0,0)의 웨이트의 오퍼랜드 쌍, F0(0,0)의 픽셀 값 및 W10(0,0)의 웨이트의 오퍼랜드 쌍, F0(0,1)의 픽셀 값 및 W00(0,0)의 웨이트의 오퍼랜드 쌍 및 F0(0,1)의 픽셀 값 및 W10(0,0)의 웨이트의 오퍼랜드 쌍 각각은 입력 피처맵들 및 커널들 간의 컨볼루션 연산에 모두 필요한 오퍼랜드 쌍들이면서, 병렬적으로 처리가 가능한 오퍼랜드 쌍들에 해당한다.
따라서, 프로세서(110)는 4개의 8비트 오퍼랜드 쌍들 각각을 16비트 곱셈기로부터 분해된 4개의 8비트 서브-곱셈기들 각각에 디스패치한다. 이로써, 병렬적으로 처리 가능한 4레인(lane)의 컨볼루션 연산들이 독립적으로 수행될 수 있다. 나아가서, 4레인의 컨볼루션 연산들의 결과로서 출력 피처맵의 픽셀 값들의 계산을 위한 4개의 출력들이 보다 빠르게 획득될 수 있으므로, 연산 속도의 효율화가 가능하다.
한편, 본 명세서 전체에서, 참조 FX(i,j)에서 X는 입력 피처맵 채널을 의미하고, (i,j)는 입력 피처맵에서 픽셀 위치를 의미한다. 그리고, WY,X(i,j)에서 X는 입력 피처맵 채널을 의미하고, Y는 출력 피처맵 채널을 의미하고, (i,j)는 커널에서 픽셀 위치를 의미한다.
도 11은 다른 실시예에 따라 뉴럴 네트워크의 컨볼루션 연산에 이용되는 오퍼랜드들의 병렬성을 설명하기 위한 도면이다.
도 11을 참고하면, 입력 피처맵의 픽셀 값들 및 커널의 웨이트들은 모두 8비트의 오퍼랜드들에 해당하는 것으로 가정한다. 그러나, 이는 설명의 편의를 위한 것일 뿐, 이에 제한되지 않고 픽셀 값들 및 웨이트들은 다른 비트 폭의 데이터에 해당할 수 있다. 한편, 컨볼루션 연산기에 구비된 곱셈기는 16비트 곱셈기에 해당하는 것으로 가정하나, 이에 제한되지 않고 곱셈기는 다른 정밀도의 곱셈기에 해당할 수도 있다.
프로세서(도 3의 110)는 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들에 기초하여 피처맵 오퍼랜드들을 결정할 수 있고, 커널들 중 해당 입력 피처맵의 입력 채널이면서 어느 하나의 출력 채널의 참조를 갖는 어느 하나의 커널에서 서로 다른 위치들의 웨이트들에 기초하여 웨이트 오퍼랜드들을 결정할 수 있다.
구체적으로, 입력 피처맵들 및 커널들 간의 컨볼루션 연산들이 수행될 때, F0(2,0)의 픽셀 값은 W00(0,0)의 웨이트와의 곱셈 연산과 W00(1,0)의 웨이트와의 곱셈 연산에 각각 이용된다. 그리고, F0(2,1)의 픽셀 값도 W00(0,0)의 웨이트와의 곱셈 연산과 W00(1,0)의 웨이트와의 곱셈 연산에 각각 이용된다. 결국, F0(2,0)의 픽셀 값 및 W00(0,0)의 웨이트의 오퍼랜드 쌍, F0(2,0)의 픽셀 값 및 W00(1,0)의 웨이트의 오퍼랜드 쌍, F0(2,1)의 픽셀 값 및 W00(0,0)의 웨이트의 오퍼랜드 쌍 및 F0(2,1)의 픽셀 값 및 W00(1,0)의 웨이트의 오퍼랜드 쌍 각각은 입력 피처맵들 및 커널들 간의 컨볼루션 연산에 모두 필요한 오퍼랜드 쌍들이면서, 병렬적으로 처리가 가능한 오퍼랜드 쌍들에 해당한다.
따라서, 프로세서(110)는 4개의 8비트 오퍼랜드 쌍들 각각을 16비트 곱셈기로부터 분해된 4개의 8비트 서브-곱셈기들 각각에 디스패치하고, 프로세서(110)는 병렬적으로 처리 가능한 4레인의 컨볼루션 연산들을 독립적으로 수행한다. 그러므로, 4 단위의 컨볼루션 연산들의 결과로서 출력 피처맵의 픽셀 값들의 계산을 위한 4개의 출력들이 보다 빠르게 획득될 수 있으므로, 연산 속도의 효율화가 가능하다.
도 10 내지 도 11에서 설명된, 병렬성을 이용하기 위해 결정된 오퍼랜드들은 예시적인 것들일 뿐이고, 이 밖에도 다양한 오퍼랜드들이 병렬적인 컨볼루션 연산을 위해 결정될 수 있다. 즉, 프로세서(110)는 입력 피처맵들 및 커널들 내에서 병렬 처리가 가능한 다양한 피처맵 오퍼랜드들 및 웨이트 오퍼랜드들을 결정할 수 있다. 이와 같이 결정된 오퍼랜드들의 정밀도들(또는 비트 폭들)은 곱셈기의 정밀도(또는 비트 폭)에 따라 논리적 또는 물리적으로 분해된 서브-곱셈기들의 정밀도들(또는 비트 폭들)에 대응할 수 있고, 이로 인하여 곱셈기의 곱셈 연산의 활용도가 증대될 수 있다.
도 12는 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 과정을 설명하기 위한 도면이다.
1201 단계에서, 프로세서(도 3의 110)에 구비된 픽셀 디스패처(1211) 및 웨이트 디스패처(1212)는 각각 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m비트 피처맵 오퍼랜드들 및 n비트 웨이트 오퍼랜드들을 결정한다. 그리고 나서, 프로세서(110)의 픽셀 디스패처(1211) 및 웨이트 디스패처(1212)는 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 컨볼루션 연산기 내 분해된 서브-곱셈기들 각각에 디스패치한다. 예를 들어, m비트 피처맵 오퍼랜드들은 각각 F0(i,j) 참조 및 F0(i,j+1) 참조를 갖는 오퍼랜드들이고, n비트 웨이트 오퍼랜드들은 각각 W00(0,0) 참조 및 W10(0,0) 참조를 갖는 오퍼랜드들일 수 있으나, 이에 제한되지 않는다. 여기서, m비트 및 n비트는 모두 8비트에 해당할 수 있으나, 이에 제한되지 않는다.
1202 단계에서, 프로세서(110)는 내부에 구비된 컨볼루션 연산기가 k비트의 최대 정밀도(full precision)를 갖는 k비트 곱셈기를 포함하는 경우, k비트 곱셈기를 서브-로직에 해당하는 서브-곱셈기들(1213)로 논리적 또는 물리적으로 분해한다. 이때, k비트 곱셈기가 16비트 곱셈기에 해당하는 경우, 서브-곱셈기들(1213)은 8비트(=k/2) 곱셈기들에 해당할 수 있다.
픽셀 디스패처(1211)에 의해, F0(i,j) 참조를 갖는 피처맵 오퍼랜드는 도 12에서 첫 번째 서브-곱셈기(1213) 및 세 번째 서브-곱셈기(1213)에 디스패치되고, F0(i,j+1) 참조를 갖는 피처맵 오퍼랜드는 도 12에서 두 번째 서브-곱셈기(1213) 및 네 번째 서브-곱셈기(1213)에 디스패치될 수 있다. 웨이트 디스패처(1212)에 의해, W00(0,0) 참조를 갖는 웨이트 오퍼랜드는 도 12에서 첫 번째 서브-곱셈기(1213) 및 세 번째 서브-곱셈기(1213)에 디스패치되고, W10(0,0) 참조를 갖는 피처맵 오퍼랜드는 도 12에서 두 번째 서브-곱셈기(1213) 및 네 번째 서브-곱셈기(1213)에 디스패치될 수 있다.
1203 단계에서, 서브-곱셈기들(1213)에 의해 수행된 각각의 곱셈 연산의 결과는 덧셈 연산을 위하여 16 x N비트 덧셈기들(1214)(N은 자연수)로 각각 출력된다. 컨볼루션 연산기는 덧셈기들(1214)을 더 포함한다. 덧셈 연산이 완료된 경우, 16 x N비트 덧셈기들에 의해 수행된 각각의 덧셈 연산의 결과는 누적 연산을 위해 누적 연산기(1215)로 출력되어 누적 연산이 수행된다.
1204 단계에서, 누적 연산기(1215)는 최종적으로 4 단위의 컨볼루션 연산의 결과에 해당하는 4개의 출력들 O0(i,j), O0(i,j+1), O1(i,j) 및 O1(i,j+1)을 제공한다.
도 13은 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 것을 설명하기 위한 도면이다.
도 13을 참고하면, F0(i,j) 참조를 갖는 피처맵 오퍼랜드는 16비트 오퍼랜드이고, W00(0,0) 참조 및 W10(0,0) 참조를 갖는 웨이트 오퍼랜드들은 각각 8비트 오퍼랜드들이고, 이와 같은 오퍼랜드들이 16비트 곱셈기로부터 분해된 8비트 서브-곱셈기들로 디스패치되는 경우에 대해 설명하도록 한다.
픽셀 디스패처(1311)는, F0(i,j) 참조를 갖는 16비트 피처맵 오퍼랜드에서 8비트의 MSB를 도 13에서 첫 번째 서브-곱셈기 및 세 번째 서브-곱셈기에 디스패치하고, F0(i,j) 참조를 갖는 16비트 피처맵 오퍼랜드에서 8비트의 LSB를 도 13에서 두 번째 서브-곱셈기 및 네 번째 서브-곱셈기에 디스패치한다. 그리고, 웨이트 디스패처(1312)는 W00(0,0) 참조를 갖는 웨이트 오퍼랜드를 도 13에서 첫 번째 서브-곱셈기 및 세 번째 서브-곱셈기에 디스패치하고, W10(0,0) 참조를 갖는 피처맵 오퍼랜드를 도 13에서 두 번째 서브-곱셈기 및 네 번째 서브-곱셈기에 디스패치한다.
컨볼루션 연산기의 곱셈기(8비트 서브-곱셈기들), 16 x N비트 덧셈기 및 누산기에 의한 연산 결과로서, 최종적으로 2개의 출력들 O0(i,j) 및 O1(i,j)이 제공된다.
도 14는 일 실시예에 따라 컨볼루션 연산기에서 오퍼랜드들의 컨볼루션 연산을 수행하는 것을 설명하기 위한 도면이다.
도 14를 참고하면, 도 13과 달리 F0(i,j) 참조를 갖는 피처맵 오퍼랜드 및 W00(0,0) 참조를 갖는 웨이트 오퍼랜드가 모두 16비트 오퍼랜드들이고, 이와 같은 오퍼랜드들이 16비트 곱셈기로부터 분해된 8비트 서브-곱셈기들로 디스패치되는 경우에 대해 설명하도록 한다.
픽셀 디스패처(1411)는, F0(i,j) 참조를 갖는 16비트 피처맵 오퍼랜드에서 8비트의 MSB를 도 14에서 첫 번째 서브-곱셈기 및 세 번째 서브-곱셈기에 디스패치하고, 16비트 피처맵 오퍼랜드에서 8비트의 LSB를 도 14에서 두 번째 서브-곱셈기 및 네 번째 서브-곱셈기에 디스패치한다. 그리고, 웨이트 디스패처(1412)는 W00(0,0) 참조를 갖는 16비트 웨이트 오퍼랜드에서 8비트의 MSB를 도 14에서 첫 번째 서브-곱셈기 및 두 번째 서브-곱셈기에 디스패치하고, 16비트 피처맵 오퍼랜드에서 8비트의 LSB를 도 14에서 세 번째 서브-곱셈기 및 네 번째 서브-곱셈기에 디스패치한다.
컨볼루션 연산기에 구비된 곱셈기(8비트 서브-곱셈기들), 16 x N비트 덧셈기 및 누산기에 의한 연산 결과로서, 최종적으로 1개의 출력 O0(i,j)이 제공된다.
앞서 설명된 바와 같이, 컨볼루션 연산의 오퍼랜드 쌍들의 병렬성을 이용함으로써, 다양한 정밀도(또는 비트 폭)를 지원하는 곱셈기라 할지라도, 곱셈기의 활용도를 증대시킬 수 있다.
도 15는 일 실시예에 따라 일부 오퍼랜드가 제로인 경우에 수행될 컨볼루션 연산을 설명하기 위한 도면이다.
도 15를 참고하면, 일부 서브-곱셈기에 디스패치된 오퍼랜드가 제로인 경우(1500)가 발생될 수 있다. 디스패치된 어느 오퍼랜드가 제로인 경우(1500)에는 곱셈 연산, 덧셈 연산 등이 수행된다 할지라도, 그 결과는 제로이다. 따라서, 이와 같은 경우(1500), 곱셈 연산, 덧셈 연산 등을 수행하는 것은 하드웨어 리소스의 낭비에 해당될 수 있다. 따라서, 디스패처(픽셀 디스패처 및 웨이트 디스패처)는 디스패치될 오퍼랜드들 중에 제로에 해당하는 오퍼랜드가 존재하는지 여부를 판단하고, 제로인 오퍼랜드가 존재하는 경우에는 해당 오퍼랜드가 디스패치될 서브-곱셈기, 덧셈기 및 누산기의 동작이 클럭-게이팅되도록 제어할 수 있다.
도 16은 일 실시예에 따라 제로 오퍼랜드를 판단하는 것을 설명하기 위한 도면이다.
도 16을 참고하면, 프로세서(도 3의 110)는 피처맵 오퍼랜드들과 웨이트 오퍼랜드들 중에 제로 오퍼랜드가 존재하는지 여부를 판단할 수 있다. 이때, 프로세서(110)는 m비트의 픽셀 값(피처맵 오퍼랜드) 또는 n비트의 웨이트(웨이트 오퍼랜드)의 전체 비트들이 제로에 해당되는지 판단할 수 있다. 또는, 프로세서(110)는 m비트의 픽셀 값 또는 n비트의 웨이트가 일정한 비트 폭으로 분할되어 별개의 독립적인 피처맵 오퍼랜드 또는 웨이트 오퍼랜드로서 디스패치되는 경우, 그 중 일부 비트들(서브-비트들)(1701)이 제로에 해당하는지 판단할 수 있다.
VGG16의 레이어 출력 데이터에서 각 4비트 서브-데이터가 제로일 확률
Data[15:12] Data[11:8] Data[7:4] Data[3:0]
99% 84% 56% 50%
16비트 데이터 전체 값이 제로일 확률: 47.1%
실험적으로, VGG-16 기반 뉴럴 네트워크를 예로 들면, 표 1에 도시된 바와 같이 어느 레이어의 16비트 출력 데이터를 4비트의 서브-비트들로 분할한 경우, 4비트의 MSB가 제로일 확률은 99%이고, 4비트의 MSB에 뒤이은 4비트가 제로일 확률은 84%이다. 따라서, 이와 같은 실험 결과에 비추어 볼 때, 프로세서(110)가 m비트의 픽셀 값 또는 n비트의 웨이트를 일정 비트 폭으로 분할하여 서브-곱셈기에 디스패치할 경우에는, 제로 오퍼랜드들의 개수가 많아질 확률이 높아지므로, 많은 클럭-게이팅에 의해 프로세서(110)의 처리 속도가 증대될 수 있다.
도 17은 일 실시예에 따른 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법의 흐름도이다. 도 17에 도시된, 뉴럴 네트워크의 컨볼루션 연산 처리 방법은, 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 17의 방법에도 적용될 수 있다.
1701 단계에서, 프로세서(도 3의 110)는 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정한다(m 및 n은 자연수).
1702 단계에서, 프로세서(110)는 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치한다.
1703 단계에서, 프로세서(110)는 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성한다.
1704 단계에서, 프로세서(110)는 생성된 m x n 개의 출력들에 기초하여 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득한다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (24)

  1. 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법에 있어서,
    상기 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정하는 단계(m 및 n은 자연수);
    상기 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치하는 단계;
    상기 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성하는 단계; 및
    상기 생성된 m x n 개의 출력들에 기초하여 상기 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 피처맵 오퍼랜드들 및 상기 웨이트 오퍼랜드들은
    병렬 처리가 가능한 상기 입력 피처맵들의 픽셀 값들 및 상기 커널들의 웨이트들에 기초하여 결정되는, 방법.
  3. 제 2 항에 있어서,
    상기 결정된 피처맵 오퍼랜드들은
    상기 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들에 기초한 것인, 방법.
  4. 제 3 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 하나의 입력 피처맵의 입력 채널이면서 서로 다른 출력 채널들의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것인, 방법.
  5. 제 3 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 하나의 입력 피처맵의 입력 채널 및 어느 하나의 출력 채널의 참조를 갖는 어느 하나의 커널에서 서로 다른 위치들의 웨이트들에 기초한 것인, 방법.
  6. 제 2 항에 있어서,
    상기 결정된 피처맵 오퍼랜드들은
    상기 입력 피처맵들 중 서로 다른 입력 채널들의 참조들을 갖는 서로 다른 입력 피처맵들에서 서로 대응하는 픽셀 위치들의 픽셀 값들에 기초한 것인, 방법.
  7. 제 6 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 서로 다른 입력 채널들이면서 어느 하나의 출력 채널의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것인, 방법.
  8. 제 6 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 서로 다른 입력 채널들이면서 서로 다른 출력 채널들의 참조를 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것인, 방법.
  9. 제 1 항에 있어서,
    상기 컨볼루션 연산기가 k비트의 최대 정밀도(full precision)를 갖는 k비트 곱셈기를 포함하는 경우, 상기 분해된 서브-곱셈기들 각각은 상기 k비트 곱셈기의 서브 로직들에 해당하고,
    상기 제1비트 및 상기 제2비트 각각은 상기 k비트보다 작고,
    상기 분해된 서브-곱셈기들 각각은 상기 제1비트의 곱셈기 또는 상기 제2비트의 곱셈기에 해당하는, 방법.
  10. 제 9 항에 있어서,
    상기 제1비트 피처맵 오퍼랜드들 및 상기 제2비트 웨이트 오퍼랜드들은 k/2비트 오퍼랜드들에 해당하고,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 분해된 서브-곱셈기들 각각에는 상기 제1비트 피처맵 오퍼랜드 및 상기 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들 각각이 디스패치되는, 방법.
  11. 제 9 항에 있어서,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 제1비트 피처맵 오퍼랜드들이 k/2비트 오퍼랜드들이고 상기 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB(most significant bit)가 서로 매핑된 상기 오퍼랜드 쌍들과 상기 제1비트 피처맵 오퍼랜드 및 상기 제2비트 웨이트 오퍼랜드에서 k/2비트의 LSB(least significant bit)가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되고,
    상기 제1비트 피처맵 오퍼랜드들이 k비트 오퍼랜드들이고 상기 제2비트 웨이트 오퍼랜드들이 k/2비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들과 상기 제1비트 피처맵 오퍼랜드에서 k/2비트의 LSB 및 상기 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되는, 방법.
  12. 제 9 항에 있어서,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 제1비트 피처맵 오퍼랜드들 및 상기 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 LSB와 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB 및 LSB가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되는, 방법.
  13. 제 1 항에 있어서,
    상기 디스패치된 m x n개의 오퍼랜드 쌍들 중 제로 오퍼랜드가 존재하는 경우, 제로 스킵핑을 위하여 상기 제로 오퍼랜드가 디스패치된 서브-곱셈기의 곱셈 연산을 클럭-게이팅하는 단계를 더 포함하는, 방법.
  14. 장치에 있어서,
    적어도 하나의 프로그램이 저장된 메모리; 및
    상기 적어도 하나의 프로그램을 실행함으로써 뉴럴 네트워크의 컨볼루션 연산을 처리하는 프로세서를 포함하고,
    상기 프로세서는,
    상기 컨볼루션 연산을 수행할 입력 피처맵들 및 커널들에서 m개의 제1비트 피처맵 오퍼랜드들 및 n개의 제2비트 웨이트 오퍼랜드들을 결정하고(m 및 n은 자연수),
    상기 결정된 오퍼랜드들로부터 조합된 피처맵 오퍼랜드 및 웨이트 오퍼랜드의 m x n개의 오퍼랜드 쌍들 각각을 상기 상기 프로세서의 컨볼루션 연산기 내 분해된(decomposed) 서브-곱셈기들 각각에 디스패치하고,
    상기 분해된 서브-곱셈기들 각각에서 수행된 곱셈 연산 결과들에 대한 덧셈 및 누적 연산들을 수행함으로써 m x n 개의 출력들을 생성하고,
    상기 생성된 m x n 개의 출력들에 기초하여 상기 컨볼루션 연산의 결과에 대응하는 출력 피처맵들의 픽셀 값들을 획득하는, 장치.
  15. 제 14 항에 있어서,
    상기 피처맵 오퍼랜드들 및 상기 웨이트 오퍼랜드들은
    병렬 처리가 가능한 상기 입력 피처맵들의 픽셀 값들 및 상기 커널들의 웨이트들에 기초하여 결정되는, 장치.
  16. 제 15 항에 있어서,
    상기 결정된 피처맵 오퍼랜드들은
    상기 입력 피처맵들 중 어느 하나의 입력 피처맵에서 서로 다른 픽셀 위치들의 픽셀 값들에 기초한 것인, 장치.
  17. 제 16 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 하나의 입력 피처맵의 입력 채널이면서 서로 다른 출력 채널들의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것이거나, 또는
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 하나의 입력 피처맵의 입력 채널 및 어느 하나의 출력 채널의 참조를 갖는 어느 하나의 커널에서 서로 다른 위치들의 웨이트들에 기초한 것인, 장치.
  18. 제 15 항에 있어서,
    상기 결정된 피처맵 오퍼랜드들은
    상기 입력 피처맵들 중 서로 다른 입력 채널들의 참조들을 갖는 서로 다른 입력 피처맵들에서 서로 대응하는 픽셀 위치들의 픽셀 값들에 기초한 것인, 장치.
  19. 제 18 항에 있어서,
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 서로 다른 입력 채널들이면서 어느 하나의 출력 채널의 참조들을 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것이거나, 또는
    상기 결정된 웨이트 오퍼랜드들은
    상기 커널들 중 상기 서로 다른 입력 채널들이면서 서로 다른 출력 채널들의 참조를 갖는 서로 다른 커널들에서 서로 대응하는 위치들의 웨이트들에 기초한 것인, 장치.
  20. 제 14 항에 있어서,
    상기 컨볼루션 연산기가 k비트의 최대 정밀도(full precision)를 갖는 k비트 곱셈기를 포함하는 경우, 상기 분해된 서브-곱셈기들 각각은 상기 k비트 곱셈기의 서브 로직들에 해당하고,
    상기 제1비트 및 상기 제2비트 각각은 상기 k비트보다 작고,
    상기 분해된 서브-곱셈기들 각각은 상기 제1비트의 곱셈기 또는 상기 제2비트의 곱셈기에 해당하는, 장치.
  21. 제 20 항에 있어서,
    상기 제1비트 피처맵 오퍼랜드들 및 상기 제2비트 웨이트 오퍼랜드들은 k/2비트 오퍼랜드들에 해당하고,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들 각각이 디스패치되는, 장치.
  22. 제 20 항에 있어서,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 제1비트 피처맵 오퍼랜드들이 k/2비트 오퍼랜드들이고 상기 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드 및 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB(most significant bit)가 서로 매핑된 상기 오퍼랜드 쌍들과 상기 제1비트 피처맵 오퍼랜드 및 상기 제2비트 웨이트 오퍼랜드에서 k/2비트의 LSB(least significant bit)가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되고,
    상기 제1비트 피처맵 오퍼랜드들이 k비트 오퍼랜드들이고 상기 제2비트 웨이트 오퍼랜드들이 k/2비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들과 상기 제1비트 피처맵 오퍼랜드에서 k/2비트의 LSB 및 상기 제2비트 웨이트 오퍼랜드가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되는, 장치.
  23. 제 20 항에 있어서,
    상기 분해된 서브-곱셈기들 각각은 k/2비트 곱셈기에 해당하고,
    상기 제1비트 피처맵 오퍼랜드들 및 상기 제2비트 웨이트 오퍼랜드들이 k비트 오퍼랜드들인 경우, 상기 분해된 서브-곱셈기들 각각에는 제1비트 피처맵 오퍼랜드에서 k/2비트의 MSB 및 LSB와 제2비트 웨이트 오퍼랜드에서 k/2비트의 MSB 및 LSB가 서로 매핑된 상기 오퍼랜드 쌍들이 디스패치되는, 장치.
  24. 제 14 항에 있어서,
    상기 프로세서는
    상기 디스패치된 m x n개의 오퍼랜드 쌍들 중 제로 오퍼랜드가 존재하는 경우, 제로 스킵핑을 위하여 상기 제로 오퍼랜드가 디스패치된 서브-곱셈기의 곱셈 연산을 클럭-게이팅하는, 장치.
KR1020170166203A 2017-12-05 2017-12-05 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치 KR20190066473A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020170166203A KR20190066473A (ko) 2017-12-05 2017-12-05 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치
US16/158,660 US20190171930A1 (en) 2017-12-05 2018-10-12 Method and apparatus for processing convolution operation in neural network
CN201811297789.6A CN109871936B (zh) 2017-12-05 2018-11-01 用于处理神经网络中的卷积运算的方法和装置
JP2018221393A JP7304148B2 (ja) 2017-12-05 2018-11-27 ニューラルネットワークにおいてコンボリューション演算を処理する方法及びその装置
EP18208489.7A EP3496008B1 (en) 2017-12-05 2018-11-27 Method and apparatus for processing convolution operation in neural network

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170166203A KR20190066473A (ko) 2017-12-05 2017-12-05 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20190066473A true KR20190066473A (ko) 2019-06-13

Family

ID=64500207

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170166203A KR20190066473A (ko) 2017-12-05 2017-12-05 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치

Country Status (5)

Country Link
US (1) US20190171930A1 (ko)
EP (1) EP3496008B1 (ko)
JP (1) JP7304148B2 (ko)
KR (1) KR20190066473A (ko)
CN (1) CN109871936B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210082081A (ko) * 2019-12-24 2021-07-02 서울대학교산학협력단 음수값을 갖는 활성화 함수에서 제로 스키핑을 제공하는 방법 및 장치
KR20230023269A (ko) 2021-08-10 2023-02-17 고려대학교 산학협력단 3 전극 대각 멤트랜지스터 시스템, 이를 이용한 컨볼루션 네트워크 연산 장치 및 방법
WO2023033360A1 (ko) * 2021-09-02 2023-03-09 삼성전자 주식회사 영상 처리 장치 및 그 동작 방법

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US11468302B2 (en) 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
US11676371B2 (en) * 2018-08-17 2023-06-13 Fotonation Limited Apparatus for processing a neural network
US11222092B2 (en) * 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
EP4006777A4 (en) * 2019-07-30 2022-08-24 Huawei Technologies Co., Ltd. IMAGE CLASSIFICATION METHOD AND APPARATUS
US20210049474A1 (en) * 2019-08-13 2021-02-18 Samsung Electronics Co., Ltd. Neural network method and apparatus
KR20210071473A (ko) * 2019-12-06 2021-06-16 삼성전자주식회사 연산 장치, 그것의 동작 방법 및 뉴럴 네트워크 프로세서
CN111738424B (zh) * 2020-06-29 2023-12-26 湖南国科微电子股份有限公司 神经网络处理方法、装置、电子设备及存储介质
US11587345B2 (en) * 2020-07-22 2023-02-21 Honda Motor Co., Ltd. Image identification device, method for performing semantic segmentation, and storage medium
WO2022028666A1 (en) * 2020-08-03 2022-02-10 Huawei Technologies Co., Ltd. Using non-uniform weight distribution to increase efficiency of fixed-point neural network inference
WO2023248309A1 (ja) * 2022-06-20 2023-12-28 日本電信電話株式会社 データ処理装置、データ処理プログラム、及びデータ処理方法
US20240080423A1 (en) * 2022-09-02 2024-03-07 Samsung Electronics Co., Ltd. Fusion techniques for combining most significant bits and least significant bits of image data in image processing or other applications

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
JP5911165B2 (ja) 2011-08-05 2016-04-27 株式会社メガチップス 画像認識装置
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
EP3035204B1 (en) * 2014-12-19 2018-08-15 Intel Corporation Storage device and method for performing convolution operations
US10417555B2 (en) * 2015-05-29 2019-09-17 Samsung Electronics Co., Ltd. Data-optimized neural network traversal
CN107153873B (zh) * 2017-05-08 2018-06-01 中国科学院计算技术研究所 一种二值卷积神经网络处理器及其使用方法
CN107392314A (zh) * 2017-06-30 2017-11-24 天津大学 一种基于确定性丢弃连接的深层卷积神经网络方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210082081A (ko) * 2019-12-24 2021-07-02 서울대학교산학협력단 음수값을 갖는 활성화 함수에서 제로 스키핑을 제공하는 방법 및 장치
KR20230023269A (ko) 2021-08-10 2023-02-17 고려대학교 산학협력단 3 전극 대각 멤트랜지스터 시스템, 이를 이용한 컨볼루션 네트워크 연산 장치 및 방법
WO2023033360A1 (ko) * 2021-09-02 2023-03-09 삼성전자 주식회사 영상 처리 장치 및 그 동작 방법

Also Published As

Publication number Publication date
JP7304148B2 (ja) 2023-07-06
CN109871936B (zh) 2024-03-08
JP2019102084A (ja) 2019-06-24
EP3496008A1 (en) 2019-06-12
EP3496008B1 (en) 2023-10-18
US20190171930A1 (en) 2019-06-06
CN109871936A (zh) 2019-06-11

Similar Documents

Publication Publication Date Title
KR20190066473A (ko) 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치
JP7132824B2 (ja) ニューラルネットワークにおいてデコンボルーション演算を実行する装置及びその方法
JP6900487B2 (ja) ハードウェアにおける平均プーリングの実行
KR102452953B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US9886377B2 (en) Pipelined convolutional operations for processing clusters
JP7234185B2 (ja) データを処理する方法及びその装置
JP6823495B2 (ja) 情報処理装置および画像認識装置
CN111915001B (zh) 卷积计算引擎、人工智能芯片以及数据处理方法
CN108629406B (zh) 用于卷积神经网络的运算装置
US20220083857A1 (en) Convolutional neural network operation method and device
KR102452951B1 (ko) 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
KR20200081044A (ko) 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
KR20210039197A (ko) 데이터를 처리하는 방법 및 장치
JP2020126651A (ja) ニューラルネットワークのコンボルーション演算を処理する方法及び装置
TWI775210B (zh) 用於卷積運算的資料劃分方法及處理器
US11636569B1 (en) Matrix transpose hardware acceleration
CN118043821A (zh) 混合稀疏压缩
JP2024516514A (ja) 畳み込みニューラル・ネットワーク実行のための活性化のメモリ・マッピング
KR102372869B1 (ko) 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
WO2020063225A1 (zh) 一种数据处理方法和装置
US11681915B2 (en) Neural network method and apparatus
KR20200023154A (ko) 컨볼루션 뉴럴 네트워크를 처리하는 방법 및 장치
EP3832551B1 (en) Method and apparatus for processing data
US20220309126A1 (en) Approximation of matrices for matrix multiply operations

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal