KR20210026191A - 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법 - Google Patents

컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법 Download PDF

Info

Publication number
KR20210026191A
KR20210026191A KR1020190106638A KR20190106638A KR20210026191A KR 20210026191 A KR20210026191 A KR 20210026191A KR 1020190106638 A KR1020190106638 A KR 1020190106638A KR 20190106638 A KR20190106638 A KR 20190106638A KR 20210026191 A KR20210026191 A KR 20210026191A
Authority
KR
South Korea
Prior art keywords
data
bit
input activation
vector
weight
Prior art date
Application number
KR1020190106638A
Other languages
English (en)
Other versions
KR102345409B1 (ko
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 KR1020190106638A priority Critical patent/KR102345409B1/ko
Priority to JP2020132496A priority patent/JP7071451B2/ja
Priority to EP20193178.9A priority patent/EP3792834A1/en
Priority to US17/004,733 priority patent/US11443134B2/en
Publication of KR20210026191A publication Critical patent/KR20210026191A/ko
Application granted granted Critical
Publication of KR102345409B1 publication Critical patent/KR102345409B1/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/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/217Validation; Performance evaluation; Active pattern learning techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 방법에 있어서, 입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하는 단계; 상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득하는 단계; 상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하는 단계; 상기 이진화 입력 액티베이션 벡터와 상기 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계; 및 상기 내적 연산으로 수행된 결과를 출력 액티베이션 데이터로 저장하는 단계를 포함할 수 있다.

Description

컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법{Processor Accelerating Convolutional Computation in Convolutional Neural Network AND OPERATING METHOD FOR THE SAME}
컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 프로세서 및 프로세서의 동작 방법에 관한 것이다.
컨볼루션 뉴럴 네트워크(CNN: Convolutional Neural Network)는 인공 뉴럴 네트워크(ANN: Artificial Neural Network) 중의 한 종류이고, 복수의 레이어가 적층되어 구성될 수 있다.
영상 시스템은 컨볼루션 뉴럴 네트워크를 통해 실시간으로 영상을 인식 및 감지할 수 있다. 컨볼루션 뉴럴 네트워크의 정확도는 컨볼루션 레이어가 많이 적층될수록 높아질 수 있다. 그러나, 컨볼루션 레이어가 많이 적층될수록 컨볼루션 연산량이 증가되어 컨볼루션 뉴럴 네트워크에서 영상을 처리하는 시간이 증가될 수 있다. 특히, 모바일 장치와 같이 리소스가 제한된 환경에서 컨볼루션 뉴럴 네트워크를 통해 영상을 실시간으로 처리하는 데에 어려움이 있을 수 있다.
따라서, 리소스가 제한된 환경에서도 컨볼루션 뉴럴 네트워크를 통해 컨볼루션 연산을 가속하는 기술이 요구된다.
하드웨어 리소스가 제한된 환경에서 컨볼루션 연산의 정확도 및 속도를 높이고자 한다.
일측에 따르면, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 방법에 있어서, 입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하는 단계; 상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득하는 단계; 상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하는 단계; 상기 이진화 입력 액티베이션 벡터와 상기 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계; 및 상기 내적 연산으로 수행된 결과를 출력 액티베이션 데이터로 저장하는 단계를 포함할 수 있다.
다른 일측에 따르면, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 장치에 있어서, 적어도 하나의 프로그램이 저장된 메모리; 및 상기 적어도 하나의 프로그램이 실행됨으로써, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 프로세서를 포함하고, 상기 프로세서는, 입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하고, 상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득하고, 상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하고, 상기 이진화 입력 액티베이션 벡터와 상기 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하고, 상기 내적 연산으로 수행된 결과를 상기 메모리에 출력 액티베이션 데이터로 저장할 수 있다.
또 다른 일측에 따르면, 제1 비트로 양자화된 입력 액티베이션 데이터 및 제2 비트로 양자화된 가중치 데이터의 내적 연산으로 수행된 결과를 나타내는 출력 액티베이션 데이터를 저장할 주소를 로딩하는 단계; 상기 입력 액티베이션 데이터 내의 컴포넌트가 이진화된 이진화 입력 액티베이션 벡터를 로딩하는 단계; 상기 이진화 입력 액티베이션 벡터와 상기 가중치 데이터 내의 컴포넌트가 이진화된 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계; 상기 내적 연산으로 수행된 결과를 상기 로딩된 주소에 상기 출력 액티베이션 데이터로 저장하는 단계를 포함하는, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 방법을 프로세서와 결합되어 실행시키기 위해 매체에 저장된 컴퓨터 프로그램이 제공된다.
컨볼루션 뉴럴 네트워크를 통해 컨볼루션 연산을 수행하는 전용 하드웨어 뿐만 아니라, 일반적인 프로세서도 소정의 이진 연산을 이용하여 컨볼루션 연산의 정확도 및 속도를 높일 수 있다.
본 발명은, 다음의 자세한 설명과 그에 수반되는 도면들의 결합으로 쉽게 이해될 수 있으며, 참조 번호(reference numerals)들은 구조적 구성요소(structural elements)를 의미한다.
도 1은 일실시예에 따른 컨볼루션 뉴럴 네트워크를 나타내는 블록도이다.
도 2는 일실시예에 따른 컨볼루션 연산을 수행하는 장치의 구성을 나타낸 블록도이다.
도 3은 일실시예에 따라, 컨볼루션 연산을 수행하는 장치가 컨볼루션 연산을 수행하는 과정을 설명하기 위한 도면이다.
도 4는 일실시예에 따라, 8비트로 양자화된 데이터의 컨볼루션 연산을 가속하는 방법을 설명하기 위한 도면이다.
도 5는 일실시예에 따라, 입력 액티베이션 블록과 가중치 블록을 채널 방향으로 분할하고, 분할된 서브 블록들을 이용하여 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 6는 일실시예에 따라, 프로세서가 8비트 SIMD MAC 동작을 통해 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 7은 일실시예에 따라, 입력 액티베이션 블록이 폭 방향으로 분할된 서브 블록들과 가중치 블록이 분할된 서브 블록들을 이용하여 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 8은 일실시예에 따라, 프로세서가 소정의 이진 연산을 통해 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 9는 일실시예에 따라, 데이터의 비트수 및 거리 벡터에 기초하여 양자화된 데이터를 획득하는 방법을 설명하기 위한 도면이다.
도 10은 일실시예에 따라, 입력 액티베이션 데이터가 1 비트이고, 가중치 데이터가 1 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
도 11은 일실시예에 따라, 입력 액티베이션 데이터가 2 비트이고, 가중치 데이터가 1 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
도 12는 일실시예에 따라, 입력 액티베이션 데이터가 2 비트이고, 가중치 데이터가 2 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
도 13은 일실시예에 따라, 컨볼루션 연산을 수행하는 방법을 설명하기 위한 흐름도이다.
이하에서는 도면을 참조하여 다양한 실시예들을 상세히 설명한다. 이하에서 설명되는 실시예들은 여러 가지 상이한 형태로 변형되어 실시될 수도 있다. 실시예들의 특징을 보다 명확히 설명하기 위하여 이하의 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 널리 알려져 있는 사항들에 관해서 자세한 설명은 생략한다.
한편, 본 명세서에서 어떤 구성이 다른 구성을 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한, 그 외 다른 구성을 제외하는 것이 아니라 다른 구성들 더 포함할 수도 있다는 것을 의미한다.
또한, 본 명세서에서 사용되는 '제 1' 또는 '제 2' 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용할 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다.
도 1은 일실시예에 따른 컨볼루션 뉴럴 네트워크를 나타내는 블록도이다.
컨볼루션 뉴럴 네트워크(CNN: Convolutional Neural Network)는 인공 뉴럴 네트워크(ANN: Artificial Neural Network) 중의 한 종류이고, 주로 매트릭스(Matrix) 데이터나 이미지 데이터의 특징을 추출하는 데에 이용될 수 있다. 컨볼루션 뉴럴 네트워크는 입력 데이터로부터 특징을 학습하는 알고리즘일 수 있다.
컨볼루션 뉴럴 네트워크 상에서, 프로세서는 제1 컨볼루션 레이어(120)를 통해 입력 이미지(110)에 필터를 적용하여 특징을 획득할 수 있다. 프로세서는 제1 풀링 레이어(130)를 통해 필터 처리된 이미지를 서브 샘플링하여 크기를 줄일 수 있다. 프로세서는 제2 컨볼루션 레이어(140) 및 제2 풀링 레이어(150)를 통해 이미지를 필터 처리하여 특징을 추출하고, 필터 처리된 이미지를 서브 샘플링하여 크기를 줄일 수 있다. 이후에, 프로세서는 히든 레이어(160)를 통해 처리된 이미지를 완전 연결하여 출력 데이터(170)를 획득할 수 있다.
컨볼루션 뉴럴 네트워크에서 컨볼루션 레이어(120, 140)는 3차원 입력 데이터인 입력 액티베이션 데이터(input activation data)와 학습 가능한 파라미터를 나타내는 4차원 데이터인 가중치 데이터(weight data) 간의 컨볼루션 연산을 수행하여 3차원 출력 데이터인 출력 액티베이션 데이터(output activation data)를 획득할 수 있다. 여기서, 획득된 출력 액티베이션 데이터는 다음 레이어에서 입력 액티베이션 데이터로 이용될 수 있다.
한편, 3차원 출력 데이터인 출력 액티베이션 데이터 상의 하나의 픽셀을 연산하는 데에 수천 개의 곱셈과 덧셈 연산이 필요하기 때문에 컨볼루션 뉴럴 네트워크 상에서 데이터가 처리되는 시간의 대부분이 컨볼루션 레이어에서 소요된다. 도 2 내지 도 13에서는, 컨볼루션 연산을 수행하는 장치 또는 프로세서가 컨볼루션 연산을 가속하기 위해 수행하는 동작을 설명한다.
도 2는 일실시예에 따른 컨볼루션 연산을 수행하는 장치의 구성을 나타낸 블록도이다.
도 2를 참고하면, 컨볼루션 연산을 수행하는 장치(10)(이하, 컨볼루션 연산 장치)는 프로세서(210), 및 메모리(220)를 포함할 수 있다. 본 실시예와 관련된 기술분야에서 통상의 지식을 가진 자라면 도 2에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 알 수 있다.
프로세서(210)는 컨볼루션 연산 장치(10)의 전체적인 동작을 제어하며, CPU 등과 같은 적어도 하나의 프로세서를 포함할 수 있다. 프로세서(210)는 각 기능에 대응되는 특화된 프로세서를 적어도 하나 포함하거나, 하나로 통합된 형태의 프로세서일 수 있다.
메모리(220)는 컨볼루션 뉴럴 네트워크에서 수행되는 컨볼루션 연산과 관련된 프로그램, 데이터, 또는 파일을 저장할 수 있다. 메모리(220)는 프로세서(210)에 의해 실행 가능한 명령어들을 저장할 수 있다. 프로세서(210)는 메모리(220)에 저장된 프로그램을 실행시키거나, 메모리(220)에 저장된 데이터 또는 파일을 읽어오거나, 새로운 데이터를 저장할 수 있다. 또한, 메모리(220)는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합으로 저장할 수 있다.
프로세서(210)는 고 정밀도(high-precision) 연산기(예를 들면, 32 비트 연산기)가 계층 구조로 설계되어 복수의 저 정밀도(low-precision) 연산기(예를 들면, 8 비트 연산기)를 포함할 수 있다. 이 경우, 프로세서(210)는 고 정밀도 연산을 위한 명령어 및 저 정밀도 연산을 위한 SIMD(Single Instruction Multiple Data) 명령어를 지원할 수 있다. 비트 폭(bit-width)이 저 정밀도 연산기의 입력에 맞도록 양자화(quantization) 된다면, 프로세서(210)는 동일 시간 내에 비트 폭이 큰 연산을 수행하는 대신에 비트 폭이 작은 복수의 연산을 병렬적으로 수행함으로써, 컨볼루션 연산을 가속시킬 수 있다. 프로세서(210)는 소정의 이진 연산을 통해 컨볼루션 뉴럴 네트워크 상에서 컨볼루션 연산을 가속시킬 수 있다.
프로세서(210)는 입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득할 수 있다. 예를 들면, 프로세서(210)는 제1 비트와 동일한 거리를 갖는 제1 거리 벡터에 기초하여, 제1 비트로 표현되는 이진수를 양자화된 데이터에 매핑할 수 있다. 예를 들면, 제1 비트는 프로세서(210)에서 지원되지 않는 정밀도에 대응되는 비트일 수 있다. 프로세서(210)에서 지원되는 정밀도에 대응되는 비트가 32 비트, 16 비트, 8비트인 경우, 제1 비트는 1 비트와 8 비트 사이의 임의의 비트일 수 있다. 프로세서(210)는 매핑된 결과 및 컨볼루션 연산의 단위에 기초하여, 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득할 수 있다.
프로세서(210)는 제2 비트로 양자화된 가중치 데이터를 획득할 수 있다. 여기서, 가중치 데이터는 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타낼 수 있다. 예를 들면, 프로세서(210)는 제2 비트와 동일한 거리를 갖는 제2 거리 벡터에 기초하여, 제2 비트로 표현되는 이진수를 양자화된 데이터에 매핑할 수 있다. 예를 들면, 제2 비트는 프로세서(210)에서 지원되지 않는 정밀도에 대응되는 비트일 수 있다. 프로세서(210)에서 지원되는 정밀도에 대응되는 비트가 32 비트, 16 비트, 8비트인 경우, 제2 비트는 1 비트와 8 비트 사이의 임의의 비트일 수 있다. 프로세서(210)는 매핑된 결과 및 컨볼루션 연산의 단위에 기초하여, 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값으로부터 제2 비트로 양자화된 가중치 데이터를 획득할 수 있다. 또한, 제1 비트는 제2 비트와 동일한 비트일 수 있고, 다른 비트일 수도 있다.
프로세서(210)는 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득할 수 있다.
예를 들면, 프로세서(210)는 입력 액티베이션 데이터 내의 컴포넌트를 이진화하고, 이진화된 컴포넌트 각각에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤n-1, i는 정수, 제1 비트는 n비트)를 획득할 수 있다. 또한, 프로세서(210)는 가중치 데이터 내의 컴포넌트를 이진화하고, 이진화된 컴포넌트 각각에서 j번째 비트로 구성된 제j 이진화 가중치 벡터(0≤j≤m-1, j는 정수, 제2 비트는 m비트)를 획득할 수 있다.
프로세서(210)는 이진화 입력 액티베이션 벡터와 이진화 가중치 벡터 간의 이진 연산을 수행할 수 있다. 프로세서(210)는 제1 비트 및 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들을 획득할 수 있다. 프로세서(210)는 이진화 입력 액티베이션 벡터와 이진화 가중치 벡터 간의 이진 연산 및 거리 벡터에 기초하여, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
예를 들면, 프로세서(210)는 제i 이진화 입력 액티베이션 벡터와 제j 이진화 가중치 벡터 간에 XNOR 연산을 수행하여 n x m 개의 제1 연산 벡터를 획득할 수 있다. 프로세서(210)는 n x m 개의 제1 연산 벡터에 popcount 연산을 수행하여 n x m 개의 제2 연산값을 획득할 수 있다. 프로세서(210)는 n x m 개의 제2 연산값 및 n x m 개의 제1 연산 벡터에 대응되는 거리 벡터에 기초하여, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
구체적으로, 프로세서(210)는 n x m 개의 제2 연산값 각각에서 2를 곱하고, 입력 액티베이션 데이터의 길이를 차감하는 연산을 수행하여 n x m 개의 제3 연산값을 획득할 수 있다. 프로세서(210)는 n x m 개의 제3 연산값 각각을 획득하는 데에 기초가 된 거리 벡터들의 값들을 n x m 개의 제3 연산값과 곱하고, n x m 개의 곱한 값들을 합산함으로써, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
프로세서(210)는 입력 이미지로부터 획득되는 소정 개수의 입력 액티베이션 데이터에 대하여, 내적 연산을 수행함으로써, 소정 개수의 출력 액티베이션 데이터를 획득할 수 있다.
프로세서(210)는 컨볼루션 뉴럴 네트워크 상의 제1 레이어에서 출력된 소정 개수의 출력 액티베이션 데이터를 컨볼루션 뉴럴 네트워크 상의 제2 레이어의 입력 액티베이션 데이터로 적용할 수 있다.
프로세서(210)는 내적 연산으로 수행된 결과를 출력 액티베이션 데이터로 메모리(220)에 저장할 수 있다.
도 3은 일실시예에 따라, 컨볼루션 연산을 수행하는 장치가 컨볼루션 연산을 수행하는 과정을 설명하기 위한 도면이다.
도 3을 참고하면, 프로세서(210)는 컨볼루션 레이어를 통해 컨볼루션 연산을 수행할 수 있다. 예를 들면, 컨볼루션 레이어는 입력 데이터로 입력 액티베이션 데이터 및 가중치 데이터를 획득할 수 있다. 입력 액티베이션 데이터는 3차원 데이터인 I[Ck][Wi][Hi]로 표현될 수 있다. 가중치 데이터는 4차원 데이터인 W[Co][Ck][Wk][Hk]로 표현될 수 있다. 프로세서(210)는 컨볼루션 레이어를 통해 입력 액티베이션 데이터와 가중치 데이터 간의 컨볼루션 연산을 수행하고, 출력 데이터로 출력 액티베이션 데이터를 획득할 수 있다. 출력 액티베이션 데이터는 O[Co] [Wo][Ho]로 표현될 수 있다.
도 3의 이미지(310)은 출력 액티베이션 제1 평면(50) 상의 첫번째 픽셀(51)에 대한 컨볼루션 연산값을 계산하는 과정을 설명하기 위한 도면이다. 프로세서(210)는 입력 액티베이션 데이터(30) 내의 제1 입력 액티베이션 데이터(31)인 3차원 블록(Wk x Hk x Ck)과 제1 가중치 데이터(41)인 3차원 블록(Wk x Hk x Ck) 간의 내적을 계산함으로써, 출력 액티베이션 제1 평면(Wo x Ho)(50) 상의 첫번째 픽셀(51)값을 획득할 수 있다. 여기서, 픽셀(51)값은 제1 입력 액티베이션 데이터(31)와 제1 가중치 데이터(41)인 간의 컨볼루션 값일 수 있다.
도 3의 이미지(320)은 출력 액티베이션 제1 평면(50) 상의 두번째 픽셀(52)에 대한 컨볼루션 연산값을 계산하는 과정을 설명하기 위한 도면이다. 프로세서(210)는 제1 입력 액티베이션 데이터(31)인 3차원 블록(Wk x Hk x Ck)을 2차원 평면 (Wi x Hi)방향으로 소정 보폭(stride)만큼 이동시켜 입력 액티베이션 데이터(30) 내의 제2 입력 액티베이션 데이터(32)인 3차원 블록(Wk x Hk x Ck)을 획득할 수 있다. 프로세서(210)는 제2 입력 액티베이션 데이터(32)인 3차원 블록(Wk x Hk x Ck)과 제1 가중치 데이터(41)인 3차원 블록(Wk x Hk x Ck) 간의 내적을 계산함으로써, 출력 액티베이션 제1 평면(Wo x Ho)(50) 상의 두번째 픽셀(52)값을 획득할 수 있다.
프로세서(210)는 출력 액티베이션 제1 평면(50) 상의 첫번째 픽셀(51)에 대한 컨볼루션 연산값 및 두번째 픽셀(52)에 대한 컨볼루션 연산값을 획득하기 위한 연산을 병렬적으로 수행할 수 있다. 또한, 프로세서(210)는 입력 액티베이션 데이터(30) 내에서 3차원 블록(Wk x Hk x Ck)을 2차원 평면 (Wi x Hi)방향으로 소정 보폭(stride)만큼 이동시켜 획득된 소정의 입력 액티베이션 데이터와 제1 가중치 데이터(41)인 3차원 블록(Wk x Hk x Ck) 간의 내적 연산을 반복 수행함으로써, 출력 액티베이션 제1 평면(Wo x Ho)(50) 상의 모든 픽셀들에 대한 픽셀값을 획득할 수 있다.
또한, 프로세서(210)는 출력 액티베이션 3차원 좌표(Wo x Ho x Co) 상의 출력 액티베이션 제2 평면(Wo x Ho)(60) 상의 모든 픽셀들에 대한 픽셀값도 출력 액티베이션 제1 평면(Wo x Ho)(50) 상의 모든 픽셀들에 대한 픽셀값을 획득하기 위한 방법과 동일한 방법으로 획득할 수 있다.
도 3의 이미지(330)은 출력 액티베이션 제2 평면(60) 상의 첫번째 픽셀(61)에 대한 컨볼루션 연산값을 계산하는 과정을 설명하기 위한 도면이다. 프로세서(210)는 입력 액티베이션 데이터(30) 내의 제1 입력 액티베이션 데이터(31)인 3차원 블록(Wk x Hk x Ck)과 제2 가중치 데이터(42)인 3차원 블록(Wk x Hk x Ck) 간의 내적을 계산함으로써, 출력 액티베이션 제2 평면(Wo x Ho)(60) 상의 첫번째 픽셀(61)값을 획득할 수 있다.
또한, 출력 액티베이션 제2 평면(Wo x Ho)(60) 상의 모든 픽셀들에 대한 픽셀값 및 출력 액티베이션 제1 평면(Wo x Ho)(50) 상의 모든 픽셀들에 대한 픽셀값을 획득하기 위한 연산은 병렬적으로 수행될 수 있다. 프로세서(210)는 모든 출력 액티베이션 평면 상의 픽셀값을 획득함으로써, 출력 액티베이션 3차원 좌표(Wo x Ho x Co) 상의 픽셀값을 획득할 수 있다.
도 4는 일실시예에 따라, 8비트로 양자화된 데이터의 컨볼루션 연산을 가속하는 방법을 설명하기 위한 도면이다.
도 4의 이미지(410)을 참고하면, 프로세서(210)는 32 비트 입력 A, B, C에 대하여 MAC(multiplication and accumulation) operation을 수행할 수 있다. 프로세서(210)는 32 비트 입력 A, B, C에 대하여 A X B + C =D 를 연산하여 64 비트 출력 D를 생성할 수 있다. 여기서, 프로세서(210)는 한번의 MAC operation을 수행함으로써, 하나의 출력 D를 획득할 수 있다.
도 4의 이미지(420)을 참고하면, 프로세서(210)는 입력 A, B, C를 8 비트 데이터 4개로 구성된 32 비트 벡터로 획득할 수 있다. 프로세서(210)는 8 비트 SIMD(Single Instruction Multiple Data) operation을 수행할 수 있다. 프로세서(210)는 8 비트 SIMD operation을 수행함으로써, 8 비트 데이터 4개로 구성된 32 비트 벡터인 입력 A, B, C에 대해 A[i] X B[i] + C[i] =D[i] (단, i=0,1,2,3)를 병렬적으로 연산하여 16 비트 데이터 4개로 구성된 64 비트 벡터 D를 획득할 수 있다. 여기서, 프로세서(210)는 32 비트 데이터를 8비트로 양자화하고, SIMD operation을 수행함으로써, MAC operation을 수행할 때보다 데이터 처리의 속도를 4배 향상시킬 수 있다.
도 5는 일실시예에 따라, 입력 액티베이션 블록과 가중치 블록을 채널 방향으로 분할하고, 분할된 서브 블록들을 이용하여 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 5는 프로세서(210)가 SIMD MAC operation을 이용하여 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
예를 들면, 프로세서(210)는 입력 액티베이션 블록(510) 내의 제1 입력 액티베이션 블록(511)(IB ∈ R16x1x8)을 획득할 수 있다. 프로세서(210)는 제1 입력 액티베이션 블록(511) (IB ∈ R16x1x8)을 채널 방향으로 분할하여 8개의 서브 블록(ISB[0] ~ ISB[7])을 획득할 수 있다. 또한, 프로세서(210)는 제1 가중치 블록(520) (WB ∈ R1x1x8)을 획득할 수 있다. 프로세서(210)는 제1 가중치 블록(520) (WB ∈ R1x1x8)을 채널 방향으로 분할하여 8개의 서브 블록(WSB[0] ~ WSB[7])을 획득할 수 있다. 프로세서(210)는 8개의 입력 액티베이션 서브 블록(ISB[0] ~ ISB[7])과 8개의 가중치 서브 블록(WSB[0] ~ WSB[7]) 간의 SIMD MAC operation을 수행함으로써, 16개의 픽셀의 부분합(OB = OB + ISB[i] x WSB x16 [i], i=0,1,2, 3, 4, 5, 6, 7)을 획득할 수 있다. 프로세서(210)는 모든 채널에 대하여 SIMD MAC operation을 반복적으로 수행함으로써, 16개 픽셀(531)에 대한 컨볼루션 값을 획득할 수 있다. 또한, 프로세서(210)는 입력 액티베이션 블록(510)과 제1 가중치 블록(520) 간의 컨볼루션 연산을 통해 출력 액티베이션 데이터(530)에 대한 컨볼루션 값을 획득할 수 있다. 한편, 프로세서(210)는 연산을 수행함에 있어서, 가중치 블록(WSB)을 n개 복사하여 벡터로 생성된 WSB x n을 이용할 수 있다.
도 6는 일실시예에 따라, 프로세서(210)가 8비트 SIMD MAC 동작을 통해 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
예를 들면, 프로세서(210)의 파이프라인은 한 번에 128비트의 출력을 처리할 수 있다고 가정한다. 프로세서(210)가 16 비트의 데이터에 대해 로드 또는 저장하는 연산을 수행할 때, 프로세서(210)는 8 개의 데이터를 한번에 로드 또는 저장할 수 있다. 한편, 프로세서(210)는 8 비트 SIMD MAC operation을 수행함에 있어서, 가중치 블록(WSB)을 8개 복사하여 벡터로 생성된 WSB x 8을 이용할 수 있다.
도 6의 코드(610)의 라인 2-3을 참고하면, 프로세서(210)는 제1 출력 액티베이션의 16개 픽셀(OB ∈ R16x1x1)을 로딩할 수 있다.
코드(610)의 라인 4를 참고하면, 프로세서(210)는 컨볼루션 연산에 이용되는 제1 입력 액티베이션 블록의 서브 블록(ISB [i] [0] ~ ISB[i] [15]))을 로딩할 수 있다.
코드(610)의 라인 5-6을 참고하면, 프로세서(210)는 제1 입력 액티베이션 블록의 서브 블록(ISB [i])과 가중치 서브 블록(WSB [i]) 간의 곱셈을 수행하고, 제1 출력 액티베이션 블록의 16개 픽셀의 부분합을 더하는 MAC operation(OB = OB + ISB[i] x WSB x16 [i])을 수행할 수 있다. 프로세서(210)는 MAC(ISB [i], WSBx16[i], OB[i])을 수행하고, 수행된 결과값을 OB[i]에 저장할 수 있다.
코드(610)의 라인 7-8을 참고하면, 프로세서(210)는 제1 출력 액티베이션 블록의 16개 픽셀(OB ∈ R16x1x1)의 부분합을 저장할 수 있다.
따라서, 루프(loop) 당 7개의 명령어(instruction)을 8번 반복하므로, 총 56 사이클이 소요된다.
도 7은 일실시예에 따라, 입력 액티베이션 블록이 폭 방향으로 분할된 서브 블록들과 가중치 블록이 분할된 서브 블록들을 이용하여 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
예를 들면, 프로세서(210)는 입력 액티베이션 블록(710) 내의 제1 입력 액티베이션 블록(711)(IB ∈ R16x1x8)을 획득할 수 있다. 프로세서(210)는 제1 입력 액티베이션 블록(711)(IB ∈ R16x1x8)을 폭 방향으로 분할하여 8 비트 데이터로 이루어진 16 개의 제1 입력 액티베이션 서브 블록(711-0, 711-2, ??., 711-15)을 획득할 수 있다. ISB2[0](711-0), ISB2[1](711-1), ISB2[2](711-2), ??????, ISB2[15](711-15)는 각각 폭 방향으로 분할되어 8비트로 이루어진 16개의 서브 블록일 수 있다. ISB2[0][i]~ ISB2[15][i]는 각 서브 블록의 i번째 비트로 구성된 데이터일 수 있다.
또한, 프로세서(210)는 제1 가중치 블록(720) (WB ∈ R1x1x8)을 획득할 수 있다. 프로세서(210)는 제1 가중치 블록(720) (WB ∈ R1x1x8)으로부터 1개의 제1 가중치 서브 블록(WSB2[0])을 획득할 수 있다. WSB2[j]는제1 가중치 서브 블록의 데이터의 j 번째 비트로 구성된 서브 블록일 수 있다. 프로세서(210)는 16 개의 제1 입력 액티베이션 서브 블록(711-0, 711-2, ??., 711-15)과 8개의 제1 가중치 서브 블록 간의 컨볼루션 연산을 수행함으로써, 출력 액티베이션 평면(730) 상의 16 개의 픽셀(731)의 컨벌루션 값을 획득할 수 있다. 입력 액티베이션 블록과 가중치 블록 간의 컨볼루션 연산은 도 8에서 설명한다.
도 8은 일실시예에 따라, 프로세서(210)가 소정의 이진 연산을 통해 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 8의 코드(810)의 라인 1-2를 참고하면, 프로세서(210)는 제1 출력 액티베이션의 16개 픽셀(OB ∈ R16x1x1)의 부분합을 로딩할 수 있다.
코드(810)의 라인 5를 참고하면, 프로세서(210)는 소정 컨볼루션 연산에 이용되는 i 번째 비트로 이루어진 16 개의 입력 액티베이션 벡터(ISB2 [0][i] ~ ISB2[15][i]))을 로딩할 수 있다.
코드(810)의 라인 6-7을 참고하면, 프로세서(210)는 16 개의 입력 액티베이션 벡터(ISB2 [0][i] ~ ISB2[15][i])와 가중치 벡터(WSB2x8 [j]) 간에 XNOR 연산을 수행할 수 있다. 한편, 프로세서(210)는 소정 컨볼루션 연산을 수행함에 있어서, 가중치 블록(WSB2)을 n개 복사하여 벡터로 생성된 WSB2xn 을 이용할 수 있다. 프로세서(210)는 XNOR 연산을 수행한 결과 M0, M1을 획득할 수 있다. M0, M1 각각은 64비트(8x8)일 수 있다. 프로세서(210)에서 128 비트 처리가 가능한 경우, 프로세서(210)는 M0를 획득하기 위한 XNOR 연산과 M1을 획득하기 위한 XNOR 연산을 병렬적으로 수행할 수 있다.
코드(810)의 라인 8-9을 참고하면, 프로세서(210)는 XNOR 연산 결과에 popcount 연산을 수행할 수 있다. P0, P1 각각은 64비트(8x8)일 수 있다. 프로세서(210)에서 128 비트 처리가 가능한 경우, 프로세서(210)는 P0를 획득하기 위한 popcount 연산과 P1을 획득하기 위한 popcount 연산을 병렬적으로 수행할 수 있다.
코드(810)의 라인 10-11를 참고하면, 프로세서(210)는 popcount 연산값과 거리 벡터를 이용하여 MAC operation을 수행할 수 있다. 거리 벡터(D[i][j])는, 도 12의 블록(1250)에 기재된 바와 같이, d[i] x d[j]가 계산된 값일 수 있다. 또한, 프로세서(210)는 D[i][j]를 8개 복사하여 벡터로 생성된 Dx8[i][j]을 획득하고, popcount 연산값과 Dx8[i][j]을 이용하여 MAC operation을 수행할 수 있다.
코드(810)의 라인 12-13을 참고하면, 프로세서(210)는 제1 출력 액티베이션 블록의 16개 픽셀(OB ∈ R16x1x1)의 부분합을 저장할 수 있다.
예를 들면, 입력 액티베이션 데이터의 비트가 2 비트이고, 가중치 데이터의 비트가 1 비트인 경우, 루프 당 5 개의 명령어(도 8의 코드(810)의 라인 5-11, 라인 6-7의 연산은 병렬적으로 처리, 라인 8-9의 연산은 병렬적으로 처리)를 2번 반복하고, 출력 액티베이션 데이터를 로드 및 저장하는 데에 4 개의 명령어를 수행하므로, 총 14(5 x 2 + 4 = 14) 사이클이 소요된다. 따라서, 도 8의 코드(810)에 의한 컨볼루션 연산의 성능이 도 6의 코드(610)에 의한 컨볼루션 연산의 성능보다 4배 정도 향상될 수 있다.
또한, 입력 액티베이션 데이터의 비트가 3 비트이고, 가중치 데이터의 비트가 1 비트인 경우, 총 19(5 x 3 + 4 = 19) 사이클이 소요된다. 이 경우, 컨볼루션 연산의 성능은 2.9배 정도 향상될 수 있다.
또한, 입력 액티베이션 데이터의 비트가 2 비트이고, 가중치 데이터의 비트가 2 비트인 경우, 총 24(5 x 2 x 2+ 4 = 24) 사이클이 소요된다. 이 경우, 컨볼루션 연산의 성능은 2.3배 정도 향상될 수 있다.
도 9는 일실시예에 따라, 데이터의 비트수 및 거리 벡터에 기초하여 양자화된 데이터를 획득하는 방법을 설명하기 위한 도면이다.
프로세서(210)는 데이터의 소정 비트와 동일한 거리를 갖는 거리 벡터에 기초하여, 소정 비트로 표현되는 이진수를 양자화된 데이터에 매핑할 수 있다. 예를 들면, 블록(910)을 참고하면, 데이터가 n 비트인 경우, 거리 벡터는 [1, 2, ??, 2n-1]일 수 있다. 데이터가 2 비트인 경우, 거리 벡터는 [1, 2]일 수 있다. 또한, 데이터가 1 비트인 경우, 거리 벡터는 [1]일 수 있다.
블록(920)을 참고하면, 데이터가 2 비트인 경우, 2 비트로 표현되는 이진수는 00(2), 01(2), 10(2), 11(2) 일 수 있다. 프로세서(210)는 거리 벡터의 각 컴포넌트에 1 또는 -1을 곱한 값들의 합에 기초하여, 2 비트로 표현되는 이진수에 대응되는 양자화된 데이터를 획득할 수 있다. 예를 들면, 2 비트로 표현되는 이진수의 제1 컴포넌트의 값이 0인 경우, 제1 컴포넌트에 대응되는 거리 벡터의 컴포넌트의 값에 -1을 곱할 수 있다. 또한, 2 비트로 표현되는 이진수의 제2 컴포넌트의 값이 1인 경우, 제2 컴포넌트에 대응되는 거리 벡터의 컴포넌트의 값에 1을 곱할 수 있다.
따라서, 2 비트로 표현되는 이진수가 00(2)인 경우, 프로세서(210)는 1번째 비트의 값이 0이므로 거리 벡터의 1번째 컴포넌트 값인 2에 -1을 곱하여 -2를 획득할 수 있다. 프로세서(210)는 0번째 비트의 값이 0이므로, 거리 벡터의 0번째 컴포넌트 값인 1에 -1을 곱하여 -1을 획득할 수 있다. 프로세서(210)는 -2와 -1을 합산하여 -3을 획득할 수 있다. 이진수가 00(2)이면, 프로세서(210)는 양자화된 데이터 -3을 획득할 수 있다.
마찬가지의 방법으로, 이진수가 01(2)이면, 프로세서(210)는 양자화된 데이터 -1을 획득할 수 있다. 이진수가 10(2)이면, 프로세서(210)는 양자화된 데이터 1을 획득할 수 있다. 이진수가 11(2)이면, 프로세서(210)는 양자화된 데이터 3을 획득할 수 있다.
블록 (930)을 참고하면, 데이터가 1 비트인 경우, 1 비트로 표현되는 이진수는 0(2), 1(2) 일 수 있다. 프로세서(210)는 거리 벡터의 컴포넌트에 1 또는 -1을 곱한 값에 기초하여, 2 비트로 표현되는 이진수에 대응되는 양자화된 데이터를 획득할 수 있다.
따라서, 이진수가 0(2) 이면, 프로세서(210)는 양자화된 데이터 -1을 획득할 수 있다. 이진수가 1(2) 이면, 프로세서(210)는 양자화된 데이터 1을 획득할 수 있다.
도 10은 일실시예에 따라, 입력 액티베이션 데이터가 1 비트이고, 가중치 데이터가 1 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
블록(1010)을 참고하면, 입력 액티베이션 데이터 및 가중치 데이터가 1 비트이면, 입력 액티베이션 데이터 및 가중치 데이터 각각에 대한 거리 벡터는 [1]일 수 있다.
블록(1020)을 참고하면, 프로세서(210)는 1 비트로 양자화된 입력 액티베이션 데이터 및 1 비트로 양자화된 가중치 데이터를 획득할 수 있다. 예를 들어, 1 비트로 양자화된 입력 액티베이션 데이터(Aoriginal)는 8개의 벡터로 구성된 [1, 1, 1, 1, -1, -1, 1, -1]일 수 있다. 1 비트로 양자화된 가중치 데이터(Woriginal)는 8개의 벡터로 구성된 [-1, 1, -1, 1, -1, 1, -1, 1]일 수 있다.
블록(1030)을 참고하면, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal) 및 가중치 데이터(Woriginal)를 각각 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin) 및 이진화 가중치 벡터(Wbin)를 획득할 수 있다.
예를 들어, 1 비트의 데이터가 거리 벡터(d=[1])에 의해 양자화된 경우, 프로세서(210)는 양자화된 데이터인 -1을 0(2)로 이진화할 수 있고, 양자화된 데이터인 1을 1(2)로 이진화할 수 있다.
따라서, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal)인 [1, 1, 1, 1, -1, -1, 1, -1]을 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin)인 [1, 1, 1, 1, 0, 0, 1, 0]를 획득할 수 있다. 또한, 프로세서(210)는 가중치 데이터(Woriginal)인 [-1, 1, -1, 1, -1, 1, -1, 1]을 이진화하여 이진화 가중치 벡터(Wbin)인 [0, 1, 0, 1, 0, 1, 0, 1]를 획득할 수 있다.
블록(1040)을 참고하면, 프로세서(210)는 이진화 입력 액티베이션 데이터 벡터(Abin)와 이진화 가중치 벡터(Wbin) 간에 XNOR 연산을 수행하여 제1 연산 벡터를 획득할 수 있다. 제1 연산 벡터(M)는 [0, 1, 0, 1, 1, 0, 0, 0]일 수 있다. XNOR 연산이 수행된 후, 프로세서(210)는 제1 연산 벡터(M)에 popcount 연산을 수행하여 제2 연산값(P)을 획득할 수 있다. 여기서, 제2 연산값(P)은 3이다.
블록(1050)을 참고하면, 프로세서(210)는 제2 연산값(P) 및 제1 연산 벡터(M)에 대응되는 거리 벡터에 기초하여, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다.
구체적으로, 프로세서(210)는 제2 연산값(P)에 2를 곱하고, 입력 액티베이션 데이터(Aoriginal)의 길이를 차감하는 연산을 수행하여 제3 연산값을 획득할 수 있다. 여기서, 입력 액티베이션 데이터(Aoriginal)의 길이는 8이고, 제3 연산값은 -2이다. 프로세서(210)는 제3 연산값에 거리 벡터(d[0]=1)를 곱하여 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다. 내적 연산 값은 -2이다.
블록(1050)에서 계산된 상기 내적 연산 값 -2는, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산의 결과와 동일한 것을 알 수 있다.
도 11은 일실시예에 따라, 입력 액티베이션 데이터가 2 비트이고, 가중치 데이터가 1 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
블록(1110)을 참고하면, 입력 액티베이션 데이터가 2 비트이면, 입력 액티베이션 데이터에 대한 거리 벡터(da)는 [1, 2]일 수 있다. 가중치 데이터가 1 비트이면, 가중치 데이터에 대한 거리 벡터(dw)는 [1]일 수 있다.
블록(1120)을 참고하면, 프로세서(210)는 2 비트로 양자화된 입력 액티베이션 데이터 및 1 비트로 양자화된 가중치 데이터를 획득할 수 있다. 예를 들어, 2 비트로 양자화된 입력 액티베이션 데이터(Aoriginal)는 8개의 벡터로 구성된 [1, 3, 3, 1, -3, -1, 1, -1]일 수 있다. 1 비트로 양자화된 가중치 데이터(Woriginal)는 8개의 벡터로 구성된 [-1, 1, -1, 1, -1, 1, -1, 1]일 수 있다.
블록(1130)을 참고하면, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal) 및 가중치 데이터(Woriginal)를 각각 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin) 및 이진화 가중치 벡터(Wbin)를 획득할 수 있다.
예를 들어, 1 비트의 데이터가 거리 벡터(d=[1])에 의해 양자화된 경우, 프로세서(210)는 양자화된 데이터인 -1을 0(2)로 이진화할 수 있고, 양자화된 데이터인 1을 1(2)로 이진화할 수 있다. 또한, 2 비트의 데이터가 거리 벡터(d=[1, 2])에 의해 양자화된 경우, 프로세서(210)는 양자화된 데이터인 -3을 00(2)로 이진화할 수 있고, 양자화된 데이터인 -1을 01(2)로 이진화할 수 있고, 양자화된 데이터인 1을 10(2)로 이진화할 수 있고, 양자화된 데이터인 3을 11 (2)로 이진화할 수 있다.
따라서, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal)인 [1, 3, 3, 1, -3, -1, 1, -1]을 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin)인 [10(2), 11(2), 11(2), 10(2), 00(2), 01(2), 10(2), 01(2)]를 획득할 수 있다. 프로세서(210)는 이진화 입력 액티베이션 데이터 벡터(Abin)에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤1, i는 정수)를 획득할 수 있다. 여기서, 0 번째 비트로 구성된 이진화 입력 액티베이션 벡터(Abin [0])는 [0, 1, 1, 0, 0, 1, 0, 1]이다. 또한, 1 번째 비트로 구성된 이진화 입력 액티베이션 벡터(Abin [1])는 [1, 1, 1, 1, 0, 0, 1, 0]이다. 또한, 프로세서(210)는 가중치 데이터(Woriginal)인 [-1, 1, -1, 1, -1, 1, -1, 1]을 이진화하여 이진화 가중치 벡터(Wbin)인 [0, 1, 0, 1, 0, 1, 0, 1]를 획득할 수 있다.
블록(1140)을 참고하면, 프로세서(210)는 제i 이진화 입력 액티베이션 데이터 벡터(Abin[i], i=0, 1)와 이진화 가중치 벡터(Wbin) 간에 XNOR 연산을 수행하여 제1 연산 벡터(M[k], k=0, 1)를 획득할 수 있다. 제1 연산 벡터(M[k])의 개수는 입력 액티베이션 데이터가 양자화된 비트수와 기중치 데이터가 양자화된 비트수를 곱한 값이다. 여기서, 제1 연산 벡터(M[k])의 개수는 2 x 1 = 2이다. 프로세서(210)는 Abin [0]와 Wbin간에 XNOR를 연산하여 M[0]를 획득할 수 있다. 여기서, M[0]는 [1, 1, 0, 0, 1, 1, 1, 1]이다. 또한, 프로세서(210)는 Abin [1]와 Wbin간에 XNOR를 연산하여 M[1]를 획득할 수 있다. 여기서, M[1]은 [0, 1, 0, 1, 1, 0, 0, 0]이다. XNOR 연산이 수행된 후, 프로세서(210)는 2개의 제1 연산 벡터(M[k]) 각각에 popcount 연산을 수행하여 2개의 제2 연산값(P(k), k=0, 1)을 획득할 수 있다. P(0)는 6이고, P(1)는 3이다.
블록(1150)을 참고하면, 프로세서(210)는 제2 연산값(P) 및 제1 연산 벡터(M)에 대응되는 거리 벡터에 기초하여, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다.
구체적으로, 프로세서(210)는 제2 연산값(P(k), i=0, 1)에 2를 곱하고, 입력 액티베이션 데이터(Aoriginal)의 길이를 차감하는 연산을 수행하여 2개의 제3 연산값을 획득할 수 있다. 프로세서(210)는 제3 연산값 각각에 제3 연산값을 획득하는 데에 기초가 된 거리 벡터(d[i], i=0, 1)를 곱한 값들을 합산함으로써, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다. 블록(1150)를 참고하면, 내적 연산 값은 0이다.
블록(1150)에서 계산된 상기 내적 연산 값 0은, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산의 결과와 동일한 것을 알 수 있다.
도 12는 일실시예에 따라, 입력 액티베이션 데이터가 2 비트이고, 가중치 데이터가 2 비트인 경우, 내적 연산 값을 획득하는 과정을 설명하기 위한 도면이다.
블록(1210)을 참고하면, 입력 액티베이션 데이터 및 가중치 데이터가 2 비트이면, 입력 액티베이션 데이터에 대한 거리 벡터(da)는 [1, 2]이고, 가중치 데이터에 대한 거리 벡터(dw)는 [1, 2]일 수 있다.
블록(1220)을 참고하면, 프로세서(210)는 2 비트로 양자화된 입력 액티베이션 데이터 및 2 비트로 양자화된 가중치 데이터를 획득할 수 있다. 예를 들어, 2 비트로 양자화된 입력 액티베이션 데이터(Aoriginal)는 8개의 벡터로 구성된 [1, 3, 3, 1, -3, -1, 1, -1]일 수 있다. 2 비트로 양자화된 가중치 데이터(Woriginal)는 8개의 벡터로 구성된 [-1, 1, -1, -3, 3, 1, 3, 1]일 수 있다.
블록(1230)을 참고하면, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal) 및 가중치 데이터(Woriginal)를 각각 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin) 및 이진화 가중치 벡터(Wbin)를 획득할 수 있다.
예를 들어, 도 11에서 설명한 바와 같이, 2 비트의 데이터가 거리 벡터(d=[1, 2])에 의해 양자화된 경우, 프로세서(210)는 양자화된 데이터인 -3을 00(2)로 이진화할 수 있고, 양자화된 데이터인 -1을 01(2)로 이진화할 수 있고, 양자화된 데이터인 1을 10(2)로 이진화할 수 있고, 양자화된 데이터인 3을 11 ( 2)로 이진화할 수 있다.
따라서, 프로세서(210)는 입력 액티베이션 데이터(Aoriginal)인 [1, 3, 3, 1, -3, -1, 1, -1]을 이진화하여 이진화 입력 액티베이션 데이터 벡터(Abin)인 [10(2), 11(2), 11(2), 10(2), 00(2), 01(2), 10(2), 01(2)]를 획득할 수 있다. 프로세서(210)는 이진화 입력 액티베이션 데이터 벡터(Abin)에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤1, i는 정수)를 획득할 수 있다. 여기서, 0 번째 비트로 구성된 이진화 입력 액티베이션 벡터(Abin [0])는 [0, 1, 1, 0, 0, 1, 0, 1]이다. 또한, 1 번째 비트로 구성된 이진화 입력 액티베이션 벡터(Abin [1])는 [1, 1, 1, 1, 0, 0, 1, 0]이다.
마찬가지로, 프로세서(210)는 가중치 데이터(Woriginal)인 [-1, 1, -1, -3, 3, 1, 3, 1]을 이진화하여 이진화 가중치 벡터(Wbin)인 [01(2), 10(2), 01(2), 00(2), 11(2), 10(2), 11(2), 10(2)]를 획득할 수 있다. 프로세서(210)는 이진화 가중치 벡터(Wbin)에서, j 번째 비트로 구성된 제j 이진화 가중치 벡터(0≤j≤1, j는 정수)를 획득할 수 있다. 여기서, 0 번째 비트로 구성된 이진화 가중치 벡터(Wbin [0])는 [1, 0, 1, 0, 1, 0, 1, 0]이다. 또한, 1 번째 비트로 구성된 이진화 가중치 벡터(Wbin [1])는 [0, 1, 0, 0, 1, 1, 1, 1]이다.
블록(1240)을 참고하면, 프로세서(210)는 제i 이진화 입력 액티베이션 데이터 벡터(Abin[i], i=0, 1)와 이진화 가중치 벡터(Wbin[j], j=0, 1) 간에 XNOR 연산을 수행하여 제1 연산 벡터(M[k], k=0, 1, 2, 3)를 획득할 수 있다. 제1 연산 벡터(M[k])의 개수는 입력 액티베이션 데이터가 양자화된 비트수와 기중치 데이터가 양자화된 비트수를 곱한 값이다. 여기서, 제1 연산 벡터(M[k])의 개수는 2 x 2 = 4이다.
프로세서(210)는 Abin [0]와 Wbin[0] 간에 XNOR를 연산하여 M[0]를 획득할 수 있다. 여기서, M[0]는 [0, 0, 1, 1, 0, 0, 0, 0]이다. 프로세서(210)는 Abin [0]와 Wbin[1] 간에 XNOR를 연산하여 M[1]를 획득할 수 있다. 여기서, M[1]은 [1, 1, 0, 1, 0, 1, 0, 1]이다. 프로세서(210)는 Abin [1]와 Wbin[0] 간에 XNOR를 연산하여 M[2]를 획득할 수 있다. 여기서, M[2]는 [1, 0, 1, 0, 0, 1, 1, 1]이다. 프로세서(210)는 Abin [1]와 Wbin[1] 간에 XNOR를 연산하여 M[3]를 획득할 수 있다. 여기서, M[3]는 [0, 1, 0, 0, 0, 0, 1, 0]이다.
XNOR 연산이 수행된 후, 프로세서(210)는 4개의 제1 연산 벡터(M[k] , k=0, 1, 2, 3) 각각에 popcount 연산을 수행하여 4개의 제2 연산값(P(k), k=0, 1, 2, 3)을 획득할 수 있다. P(0)는 2이고, P(1)는 5이고, P(2)는 5이고, P(3)는 2이다.
블록(1250)을 참고하면, 프로세서(210)는 제2 연산값(P) 및 제1 연산 벡터(M)에 대응되는 거리 벡터에 기초하여, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다.
구체적으로, 프로세서(210)는 제2 연산값(P(k), i=0, 1, 2 ,3)에 2를 곱하고, 입력 액티베이션 데이터(Aoriginal)의 길이를 차감하는 연산을 수행하여 4개의 제3 연산값을 획득할 수 있다. 프로세서(210)는 제3 연산값 각각에 제3 연산값을 획득하는 데에 기초가 된 거리 벡터(d[i], i=0, 1, d[j], j=0, 1)를 곱한 값들을 합산함으로써, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산을 수행할 수 있다. 블록(1250)을 참고하면, 내적 연산 값은 -12이다.
블록(1250)에서 계산된 상기 내적 연산 값 -12는, 입력 액티베이션 데이터(Aoriginal)와 가중치 데이터(Woriginal) 간의 내적 연산의 결과와 동일한 것을 알 수 있다.
도 13은 일실시예에 따라, 컨볼루션 연산을 수행하는 방법을 설명하기 위한 흐름도이다.
도 13을 참고하면, 단계 S1310에서, 컨볼루션 연산을 수행하는 장치(이하, 컨볼루션 연산 장치(10))는 입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득할 수 있다.
예를 들면, 컨볼루션 연산 장치(10)는 제1 비트와 동일한 거리를 갖는 제1 거리 벡터에 기초하여, 제1 비트로 표현되는 이진수를 양자화된 데이터에 매핑할 수 있다. 컨볼루션 연산 장치(10)는 매핑된 결과를 메모리(220)에 저장할 수 있다. 컨볼루션 연산 장치(10)는 매핑된 결과 및 컨볼루션 연산의 단위에 기초하여, 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득할 수 있다.
단계 S1320에서, 컨볼루션 연산 장치(10)는 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득할 수 있다.
예를 들면, 컨볼루션 연산 장치(10)는 제2 비트와 동일한 거리를 갖는 제2 거리 벡터에 기초하여, 제2 비트로 표현되는 이진수를 양자화된 데이터에 매핑할 수 있다. 컨볼루션 연산 장치(10)는 매핑된 결과를 메모리(220)에 저장할 수 있다. 컨볼루션 연산 장치(10)는 매핑된 결과 및 컨볼루션 연산의 단위에 기초하여, 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값으로부터 제2 비트로 양자화된 가중치 데이터를 획득할 수 있다.
단계 S1330에서, 컨볼루션 연산 장치(10)는 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득할 수 있다.
컨볼루션 연산 장치(10)는 입력 액티베이션 데이터 내의 컴포넌트를 이진화하고, 이진화된 컴포넌트 각각에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤n-1, i는 정수, 제1 비트는 n비트)를 획득할 수 있다.
또한, 컨볼루션 연산 장치(10)는 가중치 데이터 내의 컴포넌트를 이진화하고, 이진화된 컴포넌트 각각에서 j번째 비트로 구성된 제j 이진화 가중치 벡터(0≤j≤m-1, j는 정수, 제2 비트는 m비트)를 획득할 수 있다.
단계 S1340에서, 컨볼루션 연산 장치(10)는 이진화 입력 액티베이션 벡터와 이진화 가중치 벡터 간의 소정의 이진 연산을 수행할 수 있다. 컨볼루션 연산 장치(10)는 제1 비트 및 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들을 획득할 수 있다. 컨볼루션 연산 장치(10)는 이진화 입력 액티베이션 벡터와 이진화 가중치 벡터 간의 소정의 이진 연산 및 거리 벡터들에 기초하여, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
컨볼루션 연산 장치(10)는 제i 이진화 입력 액티베이션 벡터와 제j 이진화 가중치 벡터 간에 XNOR 연산을 수행하여 n x m 개의 제1 연산 벡터를 획득할 수 있다. 컨볼루션 연산 장치(10)는 n x m 개의 제1 연산 벡터에 popcount 연산을 수행하여 n x m 개의 제2 연산값을 획득할 수 있다. 컨볼루션 연산 장치(10)는 n x m 개의 제2 연산값 및 n x m 개의 제1 연산 벡터에 대응되는 거리 벡터에 기초하여, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
구체적으로, 컨볼루션 연산 장치(10)는 n x m 개의 제2 연산값 각각에서 2를 곱하고, 입력 액티베이션 데이터의 길이를 차감하는 연산을 수행하여 n x m 개의 제3 연산값을 획득할 수 있다. 컨볼루션 연산 장치(10)는 n x m 개의 제3 연산값 각각을 획득하는 데에 기초가 된 거리 벡터들의 값들을 n x m 개의 제3 연산값과 곱하고, n x m 개의 곱한 값들을 합산함으로써, 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행할 수 있다.
컨볼루션 연산 장치(10)는 입력 이미지로부터 획득되는 소정 개수의 입력 액티베이션 데이터에 대하여, 내적 연산을 수행함으로써, 소정 개수의 출력 액티베이션 데이터를 획득할 수 있다.
컨볼루션 연산 장치(10)는 컨볼루션 뉴럴 네트워크 상의 제1 레이어에서 출력된 소정 개수의 출력 액티베이션 데이터를 컨볼루션 뉴럴 네트워크 상의 제2 레이어의 입력 액티베이션 데이터로 적용할 수 있다.
단계 S1350에서, 컨볼루션 연산 장치(10)는 내적 연산으로 수행된 결과를 출력 액티베이션 데이터로 저장할 수 있다.
한편, 상술한 컨볼루션 연산을 수행하는 방법에 관한 실시예들은, 컨볼루션 연산 장치(10)에서, 컨볼루션 연산을 수행하는 방법을 수행할 수 있도록 컴퓨터 판독가능 저장매체에 저장된 컴퓨터 프로그램 형태로 제공될 수 있다. 컴퓨터 판독가능 저장매체는 read-only memory (ROM), random-access memory (RAM), flash memory, CD-ROMs, CD-Rs, CD+Rs, CD-RWs, CD+RWs, DVD-ROMs, DVD-Rs, DVD+Rs, DVD-RWs, DVD+RWs, DVD-RAMs, BD-ROMs, BD-Rs, BD-R LTHs, BD-REs, 마그네틱 테이프, 플로피 디스크, 광자기 데이터 저장 장치, 광학 데이터 저장 장치, 하드 디스크, 솔리드-스테이트 디스크(SSD), 그리고 명령어 또는 소프트웨어, 관련 데이터, 데이터 파일, 및 데이터 구조들을 저장할 수 있고, 프로세서나 컴퓨터가 명령어를 실행할 수 있도록 프로세서나 컴퓨터에 명령어 또는 소프트웨어, 관련 데이터, 데이터 파일, 및 데이터 구조들을 제공할 수 있는 어떠한 장치라도 될 수 있다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.

Claims (15)

  1. 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 방법에 있어서,
    입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하는 단계;
    상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득하는 단계;
    상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하는 단계;
    상기 이진화 입력 액티베이션 벡터와 상기 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계; 및
    상기 내적 연산으로 수행된 결과를 출력 액티베이션 데이터로 저장하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 입력 액티베이션 데이터를 획득하는 단계는,
    상기 제1 비트와 동일한 거리를 갖는 제1 거리 벡터에 기초하여, 상기 제1 비트로 표현되는 이진수를 양자화된 데이터에 매핑하는 단계; 및
    상기 매핑된 결과 및 상기 컨볼루션 연산의 단위에 기초하여, 상기 이미지로부터 상기 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하는 단계를 포함하는, 방법.
  3. 제1항에 있어서,
    상기 가중치 데이터를 획득하는 단계는,
    상기 제2 비트와 동일한 거리를 갖는 제2 거리 벡터에 기초하여, 상기 제2 비트로 표현되는 이진수를 양자화된 데이터에 매핑하는 단계; 및
    상기 매핑된 결과 및 상기 컨볼루션 연산의 단위에 기초하여, 상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값으로부터 상기 제2 비트로 양자화된 가중치 데이터를 획득하는 단계를 포함하는, 방법.
  4. 제1항에 있어서,
    상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하는 단계는,
    상기 입력 액티베이션 데이터 내의 컴포넌트를 이진화하고, 상기 이진화된 컴포넌트 각각에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤n-1, i는 정수, 상기 제1 비트는 n비트)를 획득하는 단계; 및
    상기 가중치 데이터 내의 컴포넌트를 이진화하고, 상기 이진화된 컴포넌트 각각에서 j번째 비트로 구성된 제j 이진화 가중치 벡터(0≤j≤m-1, j는 정수, 상기 제2 비트는 m비트)를 획득하는 단계를 포함하는, 방법.
  5. 제4항에 있어서,
    상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계는,
    상기 제i 이진화 입력 액티베이션 벡터와 상기 제j 이진화 가중치 벡터 간에 XNOR 연산을 수행하여 n x m 개의 제1 연산 벡터를 획득하는 단계;
    상기 n x m 개의 제1 연산 벡터에 popcount 연산을 수행하여 n x m 개의 제2 연산값을 획득하는 단계; 및
    상기 n x m 개의 제2 연산값 및 상기 n x m 개의 제1 연산 벡터에 대응되는 거리 벡터에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계를 포함하는, 방법.
  6. 제5항에 있어서,
    상기 n x m 개의 제2 연산값 및 상기 n x m 개의 제1 연산 벡터에 대응되는 거리 벡터에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계는,
    상기 n x m 개의 제2 연산값 각각에서 2를 곱하고, 상기 입력 액티베이션 데이터의 길이를 차감하는 연산을 수행하여 n x m 개의 제3 연산값을 획득하는 단계; 및
    상기 n x m 개의 제3 연산값 각각을 획득하는 데에 기초가 된 거리 벡터들의 값들을 상기 n x m 개의 제3 연산값과 곱하고, n x m 개의 곱한 값들을 합산함으로써, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계를 포함하는, 방법.
  7. 제1항에 있어서,
    상기 입력 이미지로부터 획득되는 소정 개수의 입력 액티베이션 데이터에 대하여, 상기 내적 연산을 수행함으로써, 소정 개수의 출력 액티베이션 데이터를 획득하는 단계를 더 포함하는, 방법.
  8. 제7항에 있어서,
    상기 컨볼루션 뉴럴 네트워크 상의 제1 레이어에서 출력된 상기 소정 개수의 출력 액티베이션 데이터를 상기 컨볼루션 뉴럴 네트워크 상의 제2 레이어의 입력 액티베이션 데이터로 적용하는 단계를 더 포함하는, 방법.
  9. 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 장치에 있어서,
    적어도 하나의 프로그램이 저장된 메모리; 및
    상기 적어도 하나의 프로그램이 실행됨으로써, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 프로세서를 포함하고,
    상기 프로세서는,
    입력 이미지로부터 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하고,
    상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값을 나타내는, 제2 비트로 양자화된 가중치 데이터를 획득하고,
    상기 입력 액티베이션 데이터 및 가중치 데이터 각각을 이진화하여 이진화 입력 액티베이션 벡터 및 이진화 가중치 벡터를 획득하고,
    상기 이진화 입력 액티베이션 벡터와 상기 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하고,
    상기 내적 연산으로 수행된 결과를 상기 메모리에 출력 액티베이션 데이터로 저장하는, 장치.
  10. 제9항에 있어서,
    상기 프로세서는,
    상기 제1 비트와 동일한 거리를 갖는 제1 거리 벡터에 기초하여, 상기 제1 비트로 표현되는 이진수를 양자화된 데이터에 매핑하고,
    상기 매핑된 결과 및 상기 컨볼루션 연산의 단위에 기초하여, 상기 이미지로부터 상기 제1 비트로 양자화된 입력 액티베이션 데이터를 획득하는, 장치.
  11. 제9항에 있어서,
    상기 프로세서는,
    상기 제2 비트와 동일한 거리를 갖는 제2 거리 벡터에 기초하여, 상기 제2 비트로 표현되는 이진수를 양자화된 데이터에 매핑하고,
    상기 매핑된 결과 및 상기 컨볼루션 연산의 단위에 기초하여, 상기 컨볼루션 뉴럴 네트워크를 통해 학습된 파라미터의 값으로부터 상기 제2 비트로 양자화된 가중치 데이터를 획득하는, 장치.
  12. 제9항에 있어서,
    상기 프로세서는,
    상기 입력 액티베이션 데이터 내의 컴포넌트를 이진화하고, 상기 이진화된 컴포넌트 각각에서 i 번째 비트로 구성된 제i 이진화 입력 액티베이션 벡터(0≤i≤n-1, i는 정수, 상기 제1 비트는 n비트)를 획득하고,
    상기 가중치 데이터 내의 컴포넌트를 이진화하고, 상기 이진화된 컴포넌트 각각에서 j번째 비트로 구성된 제j 이진화 가중치 벡터(0≤j≤m-1, j는 정수, 상기 제2 비트는 m비트)를 획득하는, 장치.
  13. 제12항에 있어서,
    상기 프로세서는,
    상기 제i 이진화 입력 액티베이션 벡터와 상기 제j 이진화 가중치 벡터 간에 XNOR 연산을 수행하여 n x m 개의 제1 연산 벡터를 획득하고,
    상기 n x m 개의 제1 연산 벡터에 popcount 연산을 수행하여 n x m 개의 제2 연산값을 획득하고,
    상기 n x m 개의 제2 연산값 및 상기 n x m 개의 제1 연산 벡터에 대응되는 거리 벡터에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는, 장치.
  14. 제13항에 있어서,
    상기 프로세서는,
    상기 n x m 개의 제2 연산값 각각에서 2를 곱하고, 상기 입력 액티베이션 데이터의 길이를 차감하는 연산을 수행하여 n x m 개의 제3 연산값을 획득하고,
    상기 n x m 개의 제3 연산값 각각을 획득하는 데에 기초가 된 거리 벡터들의 값들을 상기 n x m 개의 제3 연산값과 곱하고, n x m 개의 곱한 값들을 합산함으로써, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는, 장치.
  15. 제1 비트로 양자화된 입력 액티베이션 데이터 및 제2 비트로 양자화된 가중치 데이터의 내적 연산으로 수행된 결과를 나타내는 출력 액티베이션 데이터를 저장할 주소를 로딩하는 단계;
    상기 입력 액티베이션 데이터 내의 컴포넌트가 이진화된 이진화 입력 액티베이션 벡터를 로딩하는 단계;
    상기 이진화 입력 액티베이션 벡터와 상기 가중치 데이터 내의 컴포넌트가 이진화된 이진화 가중치 벡터 간의 이진 연산 및 상기 제1 비트 및 상기 제2 비트 각각과 동일한 길이를 갖는 거리 벡터들에 기초하여, 상기 입력 액티베이션 데이터 및 가중치 데이터의 내적 연산을 수행하는 단계; 및
    상기 내적 연산으로 수행된 결과를 상기 로딩된 주소에 상기 출력 액티베이션 데이터로 저장하는 단계를 포함하는, 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 수행하는 방법을 프로세서와 결합되어 실행시키기 위해 매체에 저장된 컴퓨터 프로그램.
KR1020190106638A 2019-08-29 2019-08-29 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법 KR102345409B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020190106638A KR102345409B1 (ko) 2019-08-29 2019-08-29 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법
JP2020132496A JP7071451B2 (ja) 2019-08-29 2020-08-04 コンボリューションニューラルネットワークでコンボリューション演算を加速させるプロセッサ、及び該プロセッサの動作方法
EP20193178.9A EP3792834A1 (en) 2019-08-29 2020-08-27 Processor for accelerating convolutional operation in convolutional neural network and operating method thereof
US17/004,733 US11443134B2 (en) 2019-08-29 2020-08-27 Processor for accelerating convolutional operation in convolutional neural network and operating method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190106638A KR102345409B1 (ko) 2019-08-29 2019-08-29 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법

Publications (2)

Publication Number Publication Date
KR20210026191A true KR20210026191A (ko) 2021-03-10
KR102345409B1 KR102345409B1 (ko) 2021-12-30

Family

ID=72290799

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190106638A KR102345409B1 (ko) 2019-08-29 2019-08-29 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법

Country Status (4)

Country Link
US (1) US11443134B2 (ko)
EP (1) EP3792834A1 (ko)
JP (1) JP7071451B2 (ko)
KR (1) KR102345409B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220153854A (ko) * 2021-05-12 2022-11-21 한국외국어대학교 연구산학협력단 고속 연산이 가능한 딥러닝 신경망 장치
WO2024014632A1 (ko) * 2022-07-12 2024-01-18 오픈엣지테크놀로지 주식회사 신경망 설계방법 및 이를 위한 장치

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11854536B2 (en) 2019-09-06 2023-12-26 Hyperconnect Inc. Keyword spotting apparatus, method, and computer-readable recording medium thereof
TWI737228B (zh) * 2020-03-20 2021-08-21 國立清華大學 基於記憶體內運算電路架構之量化方法及其系統
US20230143430A1 (en) * 2021-11-05 2023-05-11 Adobe Inc. Image Localizability Classifier
KR20230173840A (ko) 2022-06-20 2023-12-27 동국대학교 산학협력단 효율적인 미분 계산을 이용한 이진 뉴럴 네트워크 학습 방법 및 장치

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100911725B1 (ko) 2007-08-09 2009-08-10 한국과학기술원 언어청정로봇
US10762894B2 (en) 2015-03-27 2020-09-01 Google Llc Convolutional neural networks
US10311342B1 (en) * 2016-04-14 2019-06-04 XNOR.ai, Inc. System and methods for efficiently implementing a convolutional neural network incorporating binarized filter and convolution operation for performing image classification
US10089577B2 (en) 2016-08-05 2018-10-02 Xilinx, Inc. Binary neural networks on progammable integrated circuits
US10224058B2 (en) 2016-09-07 2019-03-05 Google Llc Enhanced multi-channel acoustic models
CN107169563B (zh) * 2017-05-08 2018-11-30 中国科学院计算技术研究所 应用于二值权重卷积网络的处理系统及方法
KR102283972B1 (ko) 2017-07-14 2021-08-02 주식회사 하이퍼커넥트 통신 장치, 서버 및 동작 방법
US20210166106A1 (en) * 2017-12-12 2021-06-03 The Regents Of The University Of California Residual binary neural network
US11315570B2 (en) 2018-05-02 2022-04-26 Facebook Technologies, Llc Machine learning-based speech-to-text transcription cloud intermediary
US20200097818A1 (en) * 2018-09-26 2020-03-26 Xinlin LI Method and system for training binary quantized weight and activation function for deep neural networks
US20200210759A1 (en) * 2018-12-31 2020-07-02 Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA "Iluvatar CoreX Inc. Nanjing") Methods and apparatus for similar data reuse in dataflow processing systems
US11669585B2 (en) * 2019-06-25 2023-06-06 Apple Inc. Optimizing binary convolutional neural networks
US11854536B2 (en) 2019-09-06 2023-12-26 Hyperconnect Inc. Keyword spotting apparatus, method, and computer-readable recording medium thereof

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Taylor Simons et al., "A Review of Binarized Neural Networks," Electronics (2019.06.12.)* *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220153854A (ko) * 2021-05-12 2022-11-21 한국외국어대학교 연구산학협력단 고속 연산이 가능한 딥러닝 신경망 장치
WO2024014632A1 (ko) * 2022-07-12 2024-01-18 오픈엣지테크놀로지 주식회사 신경망 설계방법 및 이를 위한 장치

Also Published As

Publication number Publication date
KR102345409B1 (ko) 2021-12-30
US20210064920A1 (en) 2021-03-04
US11443134B2 (en) 2022-09-13
JP7071451B2 (ja) 2022-05-19
EP3792834A1 (en) 2021-03-17
JP2021034036A (ja) 2021-03-01

Similar Documents

Publication Publication Date Title
KR102345409B1 (ko) 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법
US11698773B2 (en) Accelerated mathematical engine
US11797865B2 (en) System and method for performing fast computations using quantum counting and pseudo-random sets
US20180121789A1 (en) Data processing method and apparatus
JP5957126B1 (ja) 秘密計算装置、秘密計算方法、およびプログラム
CN112673383A (zh) 神经网络核中动态精度的数据表示
TW202119293A (zh) 對人工神經網路進行量化的方法及系統以及人工神經網路設備
US9412074B2 (en) Optimized trotterization via multi-resolution analysis
CN114118384A (zh) 神经网络模型的量化方法、可读介质和电子设备
US9151842B2 (en) Method and apparatus for time of flight sensor 2-dimensional and 3-dimensional map generation
KR102075848B1 (ko) 다항식 연산 최적화 처리 장치, 다항식 연산 최적화 처리 방법 및 기록매체
EP2254041B1 (en) Cordic operational circuit and method
US20230051237A1 (en) Determining material properties based on machine learning models
CN114579079A (zh) 用于常数乘法的集成电路、操作其的方法和包括其的装置
US10230376B2 (en) Apparatus and method for performing division
JP6367959B2 (ja) 部分文字列位置検出装置、部分文字列位置検出方法及びプログラム
US20170244923A1 (en) Data extraction method and apparatus
JPWO2020094586A5 (ko)
US10915385B2 (en) Residue prediction of packed data
Asim et al. Centered Symmetric Quantization for Hardware-Efficient Low-Bit Neural Networks.
WO2023165290A1 (zh) 数据处理方法及装置、电子设备和存储介质
Moses et al. FPGA accelerated partial volume interpolation
KR20230169432A (ko) 완전 동형 평가를 위한 컴퓨테이션 네트워크 변환
CN118153646A (zh) 计算设备及其操作方法
KR20240001245A (ko) 클리포드 대수학의 유니터리 연산자의 양자 회로로서의 효율적인 구현을 위한 방법 및 선형 대수학과 기계 학습에 대한 적용

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant