KR20240008747A - 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치 - Google Patents

데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치 Download PDF

Info

Publication number
KR20240008747A
KR20240008747A KR1020220085968A KR20220085968A KR20240008747A KR 20240008747 A KR20240008747 A KR 20240008747A KR 1020220085968 A KR1020220085968 A KR 1020220085968A KR 20220085968 A KR20220085968 A KR 20220085968A KR 20240008747 A KR20240008747 A KR 20240008747A
Authority
KR
South Korea
Prior art keywords
data
output
input
scale
channel
Prior art date
Application number
KR1020220085968A
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 KR1020220085968A priority Critical patent/KR20240008747A/ko
Priority to PCT/KR2022/021109 priority patent/WO2024014631A1/ko
Publication of KR20240008747A publication Critical patent/KR20240008747A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/10Machine learning using kernel methods, e.g. support vector machines [SVM]
    • 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/048Activation functions
    • 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

Landscapes

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

Abstract

입력 액티베이션을 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비하는 단계, 가중치 중 제1출력채널 및 제2출력채널을 각각 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터 및 제2세트의 제2스플릿 데이터를 준비하는 단계, 상기 제1세트의 제2스플릿 데이터 및 상기 제2세트의 제2스플릿 데이터를 각각 제1스케일 및 제2스케일로 표현한 값을 생성하는 단계, 상기 제1스케일로 표현된 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 제1출력채널의 콘볼루션 데이터를 생성하고, 상기 제2스케일로 표현된 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 제2출력채널의 콘볼루션 데이터를 생성하는 단계, 및 상기 제1출력채널의 콘볼루션 데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고 상기 제2출력채널의 콘볼루션 데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성하는 단계를 포함하는, 데이터 연산방법이 공개된다.

Description

데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치{Method for quantization of convolution data considering scale of data, hardware accelerator, and computing device for the same}
본 발명은 컴퓨팅 장치에서 연산을 수행하는 기술에 관한 것으로서, 숫자(number)의 스케일을 고려한 덧셈 연산 기술에 관한 것이며, 특히 예정되어 있는 후속 연산의 특성에 따라 콘볼루션 데이터를 양자화 하는 기술에 관한 것이다.
신경망 등 인공지능의 구현을 위해 이용되는 신호처리기술은 소프트웨어로 구현되거나 또는 빠른 처리를 위해 하드웨어 가속기로서 구현될 수 있다. 머신러닝을 위해 이용되는 신경망에서는 각종 연산을 수행하는 레이어들이 다수 존재하며, 각 레이어 에서는 많은 데이터들이 연산될 수 있다. 이러한 데이터 연산이 하드웨어 가속기에 의해 이루어지는 경우, 하드웨어 가속기 내부에 제공되는 내부 메모리 또는 내부 버퍼의 크기가 제한된다는 환경 때문에 문제가 발생할 수 있다. 즉, 연산의 대상이 되는 한 세트의 데이터의 크기가 내부 메모리 또는 내부 버퍼의 크기보다 작다면, 한 세트의 데이터를 2개의 서브세트로 나누어 각각 따로 계산하여 서브 결과 값들을 산출한 다음, 그 서브 결과 값들을 다시 결합하는 과정을 거쳐야 한다. 이때, 상기 서브 결과 값들이 내부 메모리 또는 내부 버퍼에 저장되었다가 다시 읽히는 과정을 거치는데, 이 과정에서 원하지 않는 데이터의 양자화 오차가 발생할 수 있다는 문제가 있다. 이러한 양자화 오차는 한 세트의 데이터를 2개의 서브세트로 나누어 따로 계산하지 않았더라면 발생하지 않는 오차일 수 있다.
신경망 기술에서 데이터의 양자화에 관련된 선행기술로는 대한민국 특허출원번호 1020217011986, 1020200110330, 1020170150707, 1020200082108, 및 1020207038081 등이 있다.
이하, 도 1 내지 도 5를 이용하여 본 발명의 이해를 위해 알아두어야 할 기술 내용을 간단히 설명한다. 이 내용들은 본 발명의 발명자가 알고 있는 사전지식으로서, 이 중 적어도 일부는 본 특허출원 시에 불특정인에게 공개되지 않은 내용일 수 있다.
본 발명은 컴퓨팅 장치가 사용하는 숫자 또는 데이터의 스케일이라는 개념을 이용한다. 컴퓨팅 장치는 이진수(binary number)를 이용한 N비트 숫자(N-bit number)의 형태로 숫자를 표현한다. 이때 상기 N비트 숫자는 MSB(Most Significant Bit) 및 LSB(Least Significant Bit)를 포함한다. 여기서 상기 N비트 숫자의 스케일은 상기 N비트 숫자의 LSB가 표현하는 수의 크기로 정의될 수 있다. 즉, 상기 N비트 숫자가 표현할 수 있는 0(영)이 아닌 최소 절대 값에 의해 정의될 수 있다. 상기 스케일이라는 개념의 이해를 돕기 위해, 예컨대 각각 2비트로 표현되는 두 개의 수인 '128' 및 '1'이라는 십진수들을 고려해 볼 수 있다. 여기서 상기 십진수 '128'은 이진수 표기법에 따라 '01'로 표현되고 상기 십진수 '1'은 이진수 표기법에 따라 '01'로 표현될 수 있다. 이때, 상기 십진수 '128'을 나타내는 2비트 숫자의 스케일인 제1스케일은 십진수 128에 비례하는 값이고, 상기 십진수 '1'을 나타내는 2비트 숫자의 스케일인 제2스케일은 십진수 1에 비례하는 값이다. 즉, 상기 제1스케일은 상기 제2스케일에 비하여 128배 만큼 크다.
도 1a는 본 발명에 따른 수학연산의 대상(object for mathematical operation) 중 하나인 입력 액티베이션(710)의 구성을 나타낸 것이다. 본 명세서에서 입력 액티베이션은 제1입력 데이터로 지칭될 수도 있다.
상기 입력 액티베이션(710)은 제1차원(a first dimension), 제2차원, 및 제3차원으로 이루어진 3차원 어레이일 수 있다. 상기 입력 액티베이션(710)의 상기 제1차원, 상기 제2차원, 및 상기 제3차원은 각각 입력채널 차원, 높이 차원, 및 폭 차원으로 지칭될 수 있다. 도 1a에 제시한 상기 입력 액티베이션(710)은 제1차원의 크기 ci, 제2차원의 크기 h, 및 제3차원의 크기 w가 각각 3, 2, 및 4인 예이다(ci=3, h=2, w=4). 도 1a에 제시한 상기 입력 액티베이션(710)의 데이터 크기는 ci*h*w에 비례한다.
본 명세서에서 상기 입력 액티베이션(710) 중 상기 입력채널의 인덱스가 k인 부분은 '입력 액티베이션[ci]=k'라고 표현할 수 있다. 도 1a에서 입력 액티베이션[ci]=1은 참조번호 711로 나타내고, 입력 액티베이션[ci]=2은 참조번호 712로 나타내고, 그리고 입력 액티베이션[ci]=3은 참조번호 713으로 나타낸다.
상기 입력 액티베이션[ci]=1(711), 상기 입력 액티베이션[ci]=2(712), 및 상기 입력 액티베이션[ci]=3(713)의 스케일은 서로 동일할 수 있다. 즉, 상기 입력 액티베이션(710)을 구성하는 모든 숫자들의 스케일은 서로 동일하며, 상기 스케일은 'sc_ai1'으로 표현될 수 있다. sc_ai1은 예컨대 십진수 1일 수도 있고, 또는 예컨대 십진수 128일 수도 있고, 또는 다른 값일 수 있다.
도 1b는 본 발명에 따른 수학연산의 대상 중 다른 하나인 가중치(740)의 구성을 나타낸 것이다.
본 명세서에서 상기 가중치(740)는 제2입력 데이터로 지칭될 수도 있다.
상기 가중치(740)는 제1차원(a first dimension), 제2차원, 제3차원, 및 제4차원으로 이루어진 4차원 어레이일 수 있다. 상기 가중치(740)의 상기 제1차원, 상기 제2차원, 상기 제3차원, 및 상기 제4차원은 각각 출력채널 차원, 입력채널 차원, 높이 차원, 및 폭 차원으로 지칭될 수 있다. 도 1b에 제시한 상기 가중치(740)는 제1차원의 크기 co, 제2차원의 크기 ci, 제3차원의 크기 r, 및 제4차원의 크기 s가 각각 2, 3, 2, 및 2인 예이다(co=2, ci=3, r=2, s=2). 도 1b에 제시한 상기 가중치(740)의 데이터 크기는 co*ci*r*s에 비례한다.
본 명세서에서 상기 가중치(740) 중 상기 출력채널의 인덱스가 k인 부분은 '가중치[co]=k'라고 표현할 수 있다. 도 1b에서 가중치[co]=1은 참조번호 741로 나타내고, 가중치[co]=2은 참조번호 742로 나타낸다.
상기 가중치[co]=1(741)를 구성하는 모든 숫자들의 스케일인 제1스케일은 서로 동일하며, 상기 제1스케일은 'sc_w1'으로 표현될 수 있다.
상기 가중치[co]=2(742)를 구성하는 모든 숫자들의 스케일인 제2스케일은 서로 동일하며, 상기 제2스케일은 'sc_w2'으로 표현될 수 있다.
상기 제1스케일 sc_w1과 상기 제2스케일 sc_w2는 서로 독립적으로 설정(set)될 수 있는 값이다.
상기 제1스케일 sc_w1은 예컨대 십진수 1에 비례하고, 상기 제2스케일 sc_w2는 예컨대 십진수 128에 비례할 수 있다.
도 1c 및 도 1d는, 도 1a 및 도 1b에 설명한 개념을 부연설명하기 위해 추가적으로 제시한 예이다.
도 1c는 입력 액티베이션(710)이 6개의 입력채널들(711~716)로 이루어진 예를 나타낸 것이다.
도 1d는 가중치(740)가 2개의 출력채널들(741, 742)로 이루어지고, 각 출력채널은 6개의 입력채널(ex: 7411~7416)로 이루어진 예를 나타낸 것이다.
도 2a 내지 도 2c는 상기 입력 액티베이션(710)과 상기 가중치(740) 간의 콘볼루션 연산을 설명하는 개념도이다.
도 2a 내지 도 2c 및 본 명세서에 제시된 기호로서, 문자 'x'를 감싸고 있는 원형의 기호는, 상기 기호의 왼쪽에 배치된 제1수학연산 대상과 상기 기호의 오른쪽에 배치된 제2수학연산 대상 간의 콘볼루션 연산을 나타내는 기호이다.
도 2a에 제시된 것과 같이, 상기 입력 액티베이션(710)과 상기 가중치(740)에 관한 콘볼루션 연산을 수행하면 출력 액티베이션(750)이 생성될 수 있다. 본 명세서에서 출력 액티베이션은 출력 데이터로 지칭될 수도 있다.
상기 출력 액티베이션(750)은 제1차원, 제2차원, 및 제3차원으로 이루어진 3차원 어레이일 수 있다. 상기 출력 액티베이션(750)의 상기 제1차원, 상기 제2차원, 및 상기 제3차원은 각각 출력채널 차원, 높이 차원, 및 폭 차원으로 지칭될 수 있다. 도 2a 내지 도 2c에 제시한 상기 출력 액티베이션(750)은 제1차원의 크기 co, 제2차원의 크기 ho, 및 제3차원의 크기 wo가 각각 2, 2, 및 3인 예이다(c0=2, ho=2, wo=3). 도 2a 내지 도 2c에 제시한 상기 출력 액티베이션(750)의 데이터 크기는 co*ho*wo에 비례한다.
본 명세서에서 상기 출력 액티베이션(750) 중 상기 출력채널의 인덱스가 k인 부분은 '출력 액티베이션[co]=k'라고 표현할 수 있다. 도 2a 내지 도 2c에서 출력 액티베이션[co]=1은 참조번호 751로 나타내고, 출력 액티베이션[co]=2은 참조번호 752로 나타낸다.
도 2b는 제1출력 액티베이션인 상기 출력 액티베이션[co]=1(751)을 생성하는 방법을 나타낸 것이다. 상기 출력 액티베이션[co]=1(751)은 상기 입력 액티베이션(710)과 제1출력에 대응하는 상기 가중치[co]=1(741)에 대한 콘볼루션 연산에 의해 생성된다.
도 2c는 제2출력 액티베이션인 상기 출력 액티베이션[co]=2(752)를 생성하는 방법을 나타낸 것이다. 상기 출력 액티베이션[co]=2(752)은 상기 입력 액티베이션(710)과 제2출력에 대응하는 상기 가중치[co]=2(742)에 대한 콘볼루션 연산에 의해 생성된다.
도 3a는 본 발명의 일 실시예에서 이용되는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
컴퓨팅 장치(1)는, DRAM(Dynamic Random Access Memory)(130), 하드웨어 가속기(110), DRAM(130)와 하드웨어 가속기(110)를 연결하는 버스(700), 및 버스(700)에 연결된 타 하드웨어들(99) 및 메인 프로세서(160)를 포함할 수 있다. 여기서 DRAM(130)은 메모리(130)로 지칭될 수 있다.
그 밖에 컴퓨팅 장치(1)는 도시되지 않은 전원부, 통신부, 사용자 인터페이스, 저장부(170), 및 주변 장치부들을 더 포함할 수 있다. 버스(700)는 상기 하드웨어 가속기(110)와 타 하드웨어들(99), 그리고 메인 프로세서(160)가 공유할 수도 있다.
상기 하드웨어 가속기(110)는 DMA부(Direct Memory Access part)(20), 제어부(40), 내부 메모리(30), 입력버퍼(650), 데이터 연산부(610), 및 출력버퍼(640)를 포함할 수 있다.
내부 메모리(30)에 임시 저장되는 데이터의 일부 또는 전부는 버스(700)를 통해 DRAM(130)으로부터 제공될 수 있다. 이때, DRAM(130)에 저장되어 있는 데이터를 내부 메모리(30)로 이동시키기 위하여, 제어부(40)와 DMA부(20)가 내부 메모리(30) 및 DRAM(130)을 제어할 수도 있다.
내부 메모리(30)에 저장되어 있던 데이터는 입력버퍼(650)를 통해 데이터 연산부(610)에게 제공될 수 있다.
상기 데이터 연산부(610)가 동작하여 생성된 출력값들은 출력버퍼(640)을 거쳐 상기 내부 메모리(30)에 저장될 수 있다. 상기 내부 메모리(30)에 저장된 상기 출력값들은 제어부(40) 및 DMA부(20)의 제어에 의해 DRAM(130)에 기록될 수도 있다.
제어부(40)는 DMA부(20), 내부 메모리(30), 및 상기 데이터 연산부(610)의 동작을 총괄하여 제어할 수 있다.
일 구현 예에서, 상기 데이터 연산부(610)는 제1시구간 동안에는 제1연산기능을 수행하고 제2시구간 동안에는 제2연산기능을 수행할 수 있다.
도 3a에는, 상기 데이터 연산부(610)는 상기 하드웨어 가속기(110) 내에 1개가 제시되어 있다. 그러나 도시하지 않은 변형된 일 실시예에서, 도 3a에 나타낸 상기 데이터 연산부(610)는 상기 하드웨어 가속기(110) 내에 복수 개 제공되어 각각 제어부(40)에 의해 요청된 연산을 병렬적으로 수행할 수도 있다.
일 구현 예에서, 상기 데이터 연산부(610)는 그 출력데이터를 한 번에 출력하지 않고 시간에 따라 주어진 순서에 따라 순차적으로 출력할 수 있다.
도 3b 내지 도 3e는 콘볼루션 연산을 위해 수학연산 대상을 저장하는 저장 공간의 크기와 상기 수학연산 대상의 크기를 비교한 것이다. 상기 버퍼는 도 3a에 제시한 내부메모리(30)의 일부일 수 있다. 예컨대, 상기 내부메모리(30)에는 입력 액티베이션(710)을 위해 할당된 제1저장 공간이 정의되어 있고, 그리고 가중치를 위해 할당된 제2저장 공간이 정의되어 있을 수 있다. 상기 제1저장 공간 및 상기 제2저장 공간의 크기는 한정되어 있을 수 있다.
도 3b에 나타낸 것과 같이, 상기 입력 액티베이션(710)의 크기가 상기 제1저장 공간의 크기보다 크면 상기 입력 액티베이션(710) 전체가 상기 제1저장 공간에 입력될 수 없다는 문제가 발생한다. 이러한 문제를 해결하기 위하여, 도 3c에 나타낸 것과 같이, 상기 입력 액티베이션(710)을 입력채널 별로 스플릿 하여, 예컨대 입력 액티베이션(711, 712)만을 상기 제1저장 공간에 저장하여 이용할 수 있다.
마찬가지로 도 3d에 나타낸 것과 같이, 상기 가중치(740)의 크기가 상기 제2저장 공간의 크기보다 크면 상기 가중치(740) 전체가 상기 제2저장 공간에 입력될 수 없다는 문제가 발생한다. 이러한 문제를 해결하기 위하여, 도 3e에 나타낸 것과 같이, 상기 가중치(740)을 입력채널 별로 스플릿 하여, 예컨대 제1출력채널의 입력 액티베이션(7411, 7412) 및 제2출력채널의 입력 액티베이션(7421, 7422)만을 상기 제2저장 공간에 저장하여 이용할 수 있다.
내부메모리의 크기가 작다는 이유 때문에, 상기 입력 액티베이션(710) 및 상기 가중치(740) 중 어느 하나를 입력채널 별로 스플릿하면, 다른 하나도 입력채널 별로 스플릿 해야 할 수 있다.
도 4는 콘볼루션 연산을 위해 가중치를 입력채널 별로 스플릿 하는 개념을 나타낸 것이다.
본 명세서에서 상기 가중치(740) 중 상기 출력채널 인덱스가 k이고 상기 입력채널 인덱스가 j인 부분은 '가중치[co]=k,[ci]=j'라고 표현할 수 있다. 도 4에서 가중치[co]=1,[ci]=1, 가중치[co]=1,[ci]=2, 가중치[co]=1,[ci]=3, 가중치[co]=2,[ci]=1, 가중치[co]=2,[ci]=2, 가중치[co]=2,[ci]=3은 각각 참조번호 7411, 7412, 7413, 7421, 7422, 및 7423으로 나타낸다.
도 5는 상기 스플릿 데이터를 이용하여 도 2의 (b)에 제시한 상기 출력 액티베이션(750)을 산출하는 방법을 나타낸 것이다.
도 5에 제시한 실시예에서, 상기 입력 액티베이션(710) 및 상기 가중치(740)가 입력채널 별로 스플릿 되었으므로 콘볼루션 연산에 필요한 버퍼의 크기를 충분히 큰 것으로 가정할 수 있다.
이하 도 5를 참조하여 설명한다.
상기 입력 액티베이션[ci]=1(711)과 상기 가중치[co]=1,[ci]=1(7411)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=1,[ci]=1(7511)을 산출할 수 있다.
상기 입력 액티베이션[ci]=2(712)과 상기 가중치[co]=1,[ci]=2(7412)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=1,[ci]=2(7512)을 산출할 수 있다.
상기 입력 액티베이션[ci]=3(713)과 상기 가중치[co]=1,[ci]=3(7413)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=1,[ci]=3(7513)을 산출할 수 있다.
상기 입력 액티베이션[ci]=1(711)과 상기 가중치[co]=2,[ci]=1(7421)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=2,[ci]=1(7521)을 산출할 수 있다.
상기 입력 액티베이션[ci]=2(712)과 상기 가중치[co]=2,[ci]=2(7422)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=2,[ci]=2(7522)을 산출할 수 있다.
상기 입력 액티베이션[ci]=3(713)과 상기 가중치[co]=2,[ci]=3(7423)에 대한 콘볼루션 연산을 수행하여 출력 액티베이션[co]=2,[ci]=3(7523)을 산출할 수 있다.
이제, 상기 출력 액티베이션[co]=1,[ci]=1(7511), 상기 출력 액티베이션[co]=1,[ci]=2(7512), 및 상기 출력 액티베이션[co]=1,[ci]=3(7513)에 대하여, 엘레먼트 별 덧셈 연산(element-wise adding operation)(P101)을 수행하여 상기 출력 액티베이션[co]=1(751)을 산출할 수 있다.
그리고 상기 출력 액티베이션[co]=2,[ci]=1(7521), 상기 출력 액티베이션[co]=2,[ci]=2(7522), 및 상기 출력 액티베이션[co]=2,[ci]=3(7523)에 대하여, 엘레먼트별 덧셈 연산(element-wise adding operation)(P102)을 수행하여 상기 출력 액티베이션[co]=2(752)을 산출할 수 있다.
그 다음, 상기 출력 액티베이션[co]=1(751)과 상기 출력 액티베이션[co]=2(752)를 결합하여 상기 출력 액티베이션(750)을 생성할 수 있다.
상술한 엘레먼트별 덧셈 연산(P101, P102) 과정에서, 각 출력 액티베이션[co]=k,[ci]=j을 버퍼에 기록하는 과정이 수행될 수 있는데, 이 과정에서 데이터의 양자화 오류가 발생할 수 있다.
입력 액티베이션(711~713)들은 제1스케일로 표현된 것이고, 제1출력채널의 가중치(7411~7413)들은 제2스케일로 표현된 것이고, 그리고 제2출력채널의 가중치(7421~7423)들은 제3스케일로 표현된 것일 수 있다. 여기서 상기 제1스케일, 상기 제2스케일, 및 상기 제3스케일은 서로에 대하여 독립적으로 설정된 값일 수 있다. 그 결과, 제1출력채널의 출력 액티베이션(751) 및 제2출력채널의 출력 액티베이션(752)은 서로 스케일로 표현된 것일 수 있다.
상술한 내용은 본 명세서에서 특허 받고자 하는 발명의 의해를 돕기 위하여 발명자가 이해하고 있는 내용을 제시한 것이다. 상술한 내용 중 일부는 본 발명의 특허출원 이전에 불특정인에게 공개되어 있지 않은 것일 수 있다.
본 발명에서는 하드웨어 가속기에서 데이터를 연산하거나 처리할 때에, 데이터를 2개 그룹 이상으로 나누어 처리하는 과정에서 발생하는 양자화 오류를 감소시키는 기술을 제공하고자 한다.
본 발명의 일 관점에 따라, 컴퓨팅 장치가, 제1입력 데이터와 제2입력 데이터로부터 제1출력채널의 출력데이터 및 제2출력채널의 출력데이터를 포함하는 출력 데이터를 생성하는 단계; 및 상기 컴퓨팅 장치가, 상기 제1출력채널의 출력데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 출력데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성하는 단계;를 포함하며, 상기 제1출력채널의 출력데이터와 상기 제2출력채널의 출력데이터는 서로 다른 스케일로 표현된 것을 특징으로 하는, 데이터 연산방법이 제공될 수 있다.
본 명세서에서 '제k출력채널의 출력데이터'는 '제k출력채널의 콘볼루션 데이터'라고 지칭할 수도 있다.
이때, 상기 제2입력 데이터는 상기 제1출력채널 및 상기 제2출력채널을 포함하는 복수 개의 출력채널들로 구성되어 있을 수 있다. 여기서 상기 복수 개의 출력채널들이란 상기 복수 개의 출력채널들을 구성하는 데이터들을 의미할 수 있다.
이때, 상기 출력 데이터를 생성하는 단계는, 상기 컴퓨팅 장치가, 상기 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비하는 제1단계; 상기 컴퓨팅 장치가, 상기 제2입력 데이터 중 상기 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비하고, 상기 제2입력 데이터 중 상기 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비하는 제2단계; 및 상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 출력데이터를 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 출력데이터를 생성하는 제3단계;를 포함하라 수 있다.
여기서, 상기 '제2입력 데이터 중 상기 제1출력채널'은 상기 제1출력채널에 해당하는 상기 제2입력 데이터의 일부분을 의미하고, 상기 '제2입력 데이터 중 상기 제2출력채널'은 상기 제2출력채널에 해당하는 상기 제2입력 데이터의 다른 일부분을 의미할 수 있다.
이때, 상기 제2단계는, 상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현하여 준비하고, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현하여 준비하는 단계를 포함할 수 있다.
이때, 상기 제3단계에서, 상기 제1출력채널의 출력데이터를 생성하기 위해, 상기 제1세트의 제1스플릿 데이터는 상기 제1스케일로 표현된 상기 제1세트의 제2스플릿 데이터와 콘볼루션 되고, 상기 제2출력채널의 출력데이터를 생성하기 위해, 상기 제1세트의 제1스플릿 데이터는 상기 제2스케일로 표현된 상기 제2세트의 제2스플릿 데이터와 콘볼루션 될 수 있다.
이때, 상기 제2연산함수에 입력되는 입력데이터의 상기 제2연산함수의 입력에 대한 출력의 평균변화율이 상기 제1연산함수에 입력되는 입력데이터의 상기 제1연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제2스케일은 상기 제1스케일보다 작은 값을 가질 수 있다.
이때, 상기 제1연산함수에 입력되는 입력데이터의 소정의 제1구간에서의 상기 제1연산함수의 입력에 대한 출력의 평균변화율이 상기 제2연산함수에 입력되는 입력데이터의 제2구간에서의 상기 제2연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 작은 값을 가지며, 상기 제1구간은 상기 제1출력채널의 출력데이터의 통계 값을 기초로 결정되고, 상기 제2구간은 상기 제2출력채널의 출력데이터의 통계 값을 기초로 결정될 수 있다.
이때, 상기 제1연산함수에 입력되는 입력데이터의 소정의 제1구간에서의 상기 제1연산함수의 입력에 대한 출력의 평균변화율이 상기 제2연산함수에 입력되는 입력데이터의 제2구간에서의 상기 제2연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 작은 값을 가질 수 있다.
그리고 상기 제1구간은 상기 제1출력채널의 출력데이터의 값들의 평균값을 포함하는 구간으로서 상기 제1출력채널의 출력데이터들 중 소정의 제1비율의 데이터들을 포함하는 구간일 수 있다. 예컨대 제1출력채널의 출력데이터들을 구성하는 값들이 총 100개이고, 상기 100개의 값들이 각각 소정의 값을 가질 수 있다. 이때 '상기 제1출력채널의 출력데이터의 값들의 평균값'은 상기 100개의 값들의 평균값이다. 그리고 상기 제1비율이 80%로 설정되었다면, 상기 '제1비율의 데이터들'은 상기 100개의 데이터들 중 80개의 데이터를 의미할 수 있다.
그리고 상기 제2구간은 상기 제2출력채널의 출력데이터의 값들의 평균값을 포함하는 구간으로서 상기 제2출력채널의 출력데이터들 중 소정의 제2비율의 데이터들을 포함하는 구간일 수 있다.
이때, 상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션이고, 상기 제2입력 데이터는 상기 신경망의 상기 특정 레이어에 입력되는 가중치 또는 커널일 수 있다.
이때, 상기 데이터 연산방법은, 상기 컴퓨팅 장치가, 상기 생성한 제1연산데이터 및 제2연산데이터를 휘발성 메모리 또는 비휘발성 메모리에 저장하는 단계; 상기 컴퓨팅 장치가, 상기 저장된 상기 제1연산데이터 및 상기 제2연산데이터를 이용하여 상기 신경망의 출력값을 산출하는 단계; 및 상기 컴퓨팅 장치가, 상기 산출된 상기 신경망의 출력값을 이용하여 상기 컴퓨팅 장치에 저장되어 있는 소정의 이미지를 변환하는 단계;를 더 포함할 수 있다.
이때, 상기 데이터 연산방법은, 상기 출력 데이터를 생성하는 단계 이전에, 상기 컴퓨팅 장치가, 상기 제1연산함수가 요구하는 입력데이터의 제1스케일 및 상기 제2연산함수가 요구하는 입력데이터의 스케일을 메모리로부터 탐색하여 획득하는 단계;를 더 포함하고, 상기 제1단계와 상기 제2단계 사이에, 상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 상기 제1스케일로 표현한 값을 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제2스케일로 표현한 값을 생성하는 단계를 더 포함할 수 있다.
본 발명의 일 관점에 따라, 휘발성 메모리를 포함하는 하드웨어 가속기 및 비휘발성 메모리를 포함하는 컴퓨팅 장치가 제공될 수 있다. 이때, 상기 하드웨어 가속기가, 상기 휘발성 메모리 및 상기 비휘발성 메모리 중 적어도 하나로부터 제1입력 데이터와 제2입력 데이터를 읽는 단계; 상기 제1입력 데이터와 상기 제2입력 데이터로부터 제1출력채널의 출력데이터 및 제2출력채널의 출력데이터를 포함하는 출력 데이터를 생성하는 단계; 및 상기 제1출력채널의 출력데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 출력데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성하는 단계;를 실행하도록 되어 있다. 그리고 상기 제1출력채널의 출력데이터와 상기 제2출력채널의 출력데이터는 서로 다른 스케일로 표현되어 있다.
이때, 상기 제2입력 데이터는 상기 제1출력채널 및 상기 제2출력채널을 포함하는 복수 개의 출력채널들로 구성되어 있을 수 있다. 그리고 상기 출력 데이터를 생성하는 단계는, 상기 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비하는 제1단계; 상기 제2입력 데이터 중 상기 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비하고, 상기 제2입력 데이터 중 상기 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비하는 제2단계; 및 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 출력데이터를 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 출력데이터를 생성하는 제3단계;를 포함할 수 있다.
이때, 상기 제2단계는, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현하여 준비하고, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현하여 준비하는 단계를 포함할 수 있다.
이때, 상기 제2연산함수에 입력되는 입력데이터의 상기 제2연산함수의 입력에 대한 출력의 평균변화율이 상기 제1연산함수에 입력되는 입력데이터의 상기 제1연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제2스케일은 상기 제1스케일보다 작은 값을 가질 수 있다.
이때, 상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션이고, 상기 제2입력 데이터는 상기 신경망의 상기 특정 레이어에 입력되는 가중치 또는 커널일 수 있다. 그리고 상기 하드웨어 가속기가, 상기 생성한 제1연산데이터 및 제2연산데이터를 상기 휘발성 메모리 및 상기 비휘발성 메모리 중 적어도 어느 하나에 저장하는 단계; 상기 저장된 상기 제1연산데이터 및 상기 제2연산데이터를 이용하여 상기 신경망의 출력값을 산출하는 단계; 및 상기 산출된 상기 신경망의 출력값을 이용하여 상기 컴퓨팅 장치에 저장되어 있는 소정의 이미지를 변환하는 단계;를 더 실행하도록 되어 있을 수 있다.
이때, 상기 제1연산함수의 비포화 구간의 크기가 상기 제2연산함수의 비포화 구간의 크기보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 클 수 있다.
이때, 상기 제1출력채널의 출력데이터를 표현하는 비트수와 상기 제2출력채널의 출력데이터를 표현하는 비트수와 동일할 수 있다.
본 발명에 따르면, 하드웨어 가속기에서 데이터를 연산하거나 처리할 때에, 데이터를 2개 그룹 이상으로 나누어 처리하는 과정에서 발생하는 양자화 오류를 감소시키는 기술을 제공할 수 있다.
도 1a는 본 발명에 따른 수학연산의 대상 중 하나인 입력 액티베이션의 구성을 나타낸 것이다.
도 1b는 본 발명에 따른 수학연산의 대상 중 다른 하나인 가중치의 구성을 나타낸 것이다.
도 1c는 입력 액티베이션이 6개의 입력채널들로 이루어진 예를 나타낸 것이다.
도 1d는 가중치가 2개의 출력채널들로 이루어지고, 각 출력채널은 6개의 입력채널로 이루어진 예를 나타낸 것이다.
도 2a 내지 도 2c는 상기 입력 액티베이션과 상기 가중치 간의 콘볼루션 연산을 설명하는 개념도이다.
도 3a는 본 발명의 일 실시예에서 이용되는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이고, 도 3b 내지 도 3e는 콘볼루션 연산을 위해 수학연산 대상을 저장하는 저장 공간의 크기와 상기 수학연산 대상의 크기를 비교한 것이다.
도 4는 콘볼루션 연산을 위해 가중치를 입력채널 별로 스플릿 하는 개념을 나타낸 것이다.
도 5는 상기 스플릿 데이터를 이용하여 도 2의 (b)에 제시한 상기 출력 액티베이션을 산출하는 방법을 나타낸 것이다.
도 6a은 도 5에서 설명한 출력 액티베이션을 이용한 후속 연산과정의 예를 나타낸 것이다.
도 6b는 도 6a에 제시한 개념을 확장한 것이다.
도 7a 및 도 7b는 본 발명의 일 실시예에 따라, 신경망의 특정 레이어가 출력한 출력 액티베이션의 각 출력채널에 서로 다른 연산함수가 적용되는 구조를 나타낸 것이다.
도 8a 및 도 8b는 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 8c, 도 8d, 및 도 8e는 각각, 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 9a는 본 발명의 일 실시예에 따라 입력 액티베이션을 연산하는 방법을 나타낸 순서도이다.
도 9b는 본 발명의 일 실시예에 따라 각 출력채널의 콘볼루션 데이터를 생성하는 방법을 나타낸 순서도이다.
도 10a 및 도 10b는 본 발명에서 예시로서 제공하는 서로 다른 연산함수들인 Sigmoid 함수와 Exponent 함수의 도함수를 나타낸 것이다.
도 11은 본 발명의 다른 실시예에 따라 입력 액티베이션을 연산하는 방법을 나타낸 순서도이다.
도 12는 본 발명의 일 실시예에 따라 제공되는 데이터 연산방법을 나타낸 순서도이다.
이하, 본 발명의 실시예를 첨부한 도면을 참고하여 설명한다. 그러나 본 발명은 본 명세서에서 설명하는 실시예에 한정되지 않으며 여러 가지 다른 형태로 구현될 수 있다. 본 명세서에서 사용되는 용어는 실시예의 이해를 돕기 위한 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다. 또한, 이하에서 사용되는 단수 형태들은 문구들이 이와 명백히 반대의 의미를 나타내지 않는 한 복수 형태들도 포함한다.
도 6a는 도 5에서 설명한 출력 액티베이션을 이용한 후속 연산과정의 예를 나타낸 것이다.
예컨대 도 5에 제시한 것과 같이, 상기 출력 액티베이션(750)은 제1출력채널의 출력 액티베이션(751) 및 제2출력채널의 출력 액티베이션(752)으로 구성될 수 있다.
일 실시예에서, 상기 제어부(40)는 상기 생성된 상기 출력 액티베이션(750)은 내부 메모리(SRAM) 또는 외부 메모리(DRAM)에 저장하고, 그 후 필요한 시점에 상기 출력 액티베이션(750)을 다시 읽어 이를 이용한 후속 연산을 수행할 수 있다.
또는 다른 실시예에서, 상기 제어부(40)는 상기 제1출력채널의 출력 액티베이션(751)과 상기 제2출력채널의 출력 액티베이션(752)을 내부 메모리(SRAM) 또는 외부 메모리(DRAM)에 저장하고, 그 후 필요한 시점에 상기 제1출력채널의 출력 액티베이션(751)과 상기 제2출력채널의 출력 액티베이션(752)을 다시 읽어 이를 이용한 후속 연산을 수행할 수 있다.
이때, 상기 후속 연산은 상기 두 개의 출력채널들 각각에 대하여 독립적으로 이루어질 수 있으며, 서로 다른 출력채널에 대해서는 서로 다른 연산이 이루어질 수 있다. 예컨대 상기 제1출력채널의 출력 액티베이션(751)에 대해서는 제1연산부(210)가 제공하는 제1연산함수에 의한 연산일 이루어질 수 있고, 상기 제2출력채널의 출력 액티베이션(752)에 대해서는 제2연산부(220)가 제공하는 제2연산함수에 의한 연산이 이루어질 수 있다. 상기 제1출력채널의 출력 액티베이션(751)이 상기 제1연산함수에 의해 처리되면 제1연산데이터(761)가 생성될 수 있고, 상기 제2출력채널의 출력 액티베이션(752)이 상기 제2연산함수에 의해 처리되면 제2연산데이터(762)가 생성될 수 있다.
이때, 상기 제1연산함수와 상기 제2연산함수가 서로 다르다면, 상기 제1연산부에 입력되는 제1입력데이터(ex 751)에 대해 요구되는 제1스케일(=제1해상도, 제1양자화 오류)과, 상기 제2연산부에 입력되는 제2입력데이터(ex 752)에 대해 요구되는 제2스케일(=제2해상도, 제2양자화 오류)은 서로 다를 수 있다. 즉, 상기 제1입력데이터가 표현 가능한 0이 아닌 최소 절대값은, 상기 제2입력데이터가 표현 가능한 0이 아닌 최소 절대값과 다를 수 있다.
도 6b는 본 발명의 바람직한 일 실시예에 따라 출력 액티베이션을 연산하는 방법을 나타낸 것으로서, 도 6a에 제시한 본 발명의 개념을 확장하여 예시한 것이다.
상기 출력 액티베이션(750)은 복수 개(ex: 5개)의 출력채널들(ex: 751~755)로 구성될 수 있다. 예컨대 도 6b에 제시한 것과 같이, 상기 출력 액티베이션(750)은 제1출력채널의 출력 액티베이션 내지 제5출력채널의 출력 액티베이션들((751, 752, 753, 754, 755)로 구성될 수 있다.
본 발명의 일 실시예에서, 상기 복수 개의 출력채널들의 출력 액티베이션(751~755) 중 제1그룹의 출력채널들의 출력 액티베이션(ex: 751~753)에 대해서는 제1연산부(210)가 제공하는 제1연산함수에 의한 연산일 이루어질 수 있고, 제2그룹의 출력채널들의 출력 액티베이션(754~755)에 대해서는 제2연산부(220)가 제공하는 제2연산함수에 의한 연산이 이루어질 수 있다. 여기서 상기 제1그룹과 상기 제2그룹은 각각 한 개 또는 복수 개의 출력채널들의 출력 액티베이션들로 구성될 수 있다.
이때, 상기 복수 개의 출력채널들의 출력 액티베이션들(ex: 751~755)은 최종적인 출력 액티베이션(750)으로 먼저 병합(merge)될 수 있다. 그 후 필요한 시점에, 상기 출력 액티베이션(750)은 상기 제1그룹의 출력채널들의 출력 액티베이션(ex: 751~753) 및 상기 제2그룹의 출력채널들의 출력 액티베이션(754~755)들로 분할될 수 있다.
상기 제1그룹의 출력채널들의 출력 액티베이션(751~753)이 상기 제1연산함수에 의해 처리되면 제1그룹의 연산데이터(761~763)가 생성될 수 있고, 상기 제2그룹의 출력채널들의 출력 액티베이션(754~755)이 상기 제2연산함수에 의해 처리되면 제2그룹의 연산데이터(764~765)가 생성될 수 있다.
이때, 상기 제1연산함수와 상기 제2연산함수가 서로 다르다면, 상기 제1연산부에 입력되는 제1입력데이터(ex 751~753)에 대해 요구되는 제1스케일(=제1해상도, 제1양자화 오류)과, 상기 제2연산부에 입력되는 제2입력데이터(ex 754~755)에 대해 요구되는 제2스케일(=제2해상도, 제2양자화 오류)은 서로 다를 수 있다. 즉, 상기 제1입력데이터가 표현 가능한 0이 아닌 최소 절대값은, 상기 제2입력데이터가 표현 가능한 0이 아닌 최소 절대값과 다를 수 있다.
도 6c는 본 발명의 바람직한 일 실시예에 따라 출력 액티베이션을 연산하는 방법을 나타낸 것으로서, 도 6b에 제시한 개념을 변형한 것이다.
도 6c의 방법에서는, 상기 복수 개의 출력채널들의 출력 액티베이션들(ex: 751~755)을 최종적인 출력 액티베이션(750)으로 병합(merge)하는 과정을 수행하지 않을 수 있다. 그 대신, 산출된 상기 제1그룹의 출력채널들의 출력 액티베이션(ex: 751~753)을 직접 상기 제1연산부(210)에 입력하고, 산출된 상기 제2그룹의 출력채널들의 출력 액티베이션(ex: 754~755)을 직접 상기 제2연산부(220)에 입력할 수 있다.
상기 제1그룹의 출력채널들의 출력 액티베이션(ex: 751~753)은 휘발성의 또는 비휘발성의 메모리에 먼저 저장될 수 있다. 그 다음, 상기 메모리로부터 출력된 상기 제1그룹의 출력채널들의 출력 액티베이션(ex: 751~753)들이 상기 제1연산부(210)에 입력될 수 있다.
마찬가지로, 제2그룹의 출력채널들의 출력 액티베이션(ex: 754~755)은 휘발성의 또는 비휘발성의 메모리에 먼저 저장될 수 있다. 그 다음, 상기 메모리로부터 출력된 상기 제2그룹의 출력채널들의 출력 액티베이션(ex: 754~755)들이 상기 제1연산부(210)에 입력될 수 있다.
도 6b와 도 6c에 나타낸 것과 같이, 생성된 모든 출력채널들 중 한 개 또는 복수 개의 출력채널들로 구성된 제1그룹의 출력채널들이 특정 연산부에 입력되고, 이와는 다른 한 개 또는 복수 개의 출력채널들로 구성된 제2그룹의 출력채널들이 또 다른 연산부에 입력될 수 있다.
도 7a에 나타낸 것과 같이, 예컨대, 제1연산부(210)가 제공하는 제1연산함수는 Sigmoid 연산함수일 수 있다.
도 7b에 나타낸 것과 같이, 예컨대, 제2연산부(220)가 제공하는 제2연산함수는 Exponent 연산함수일 수 있다.
Sigmoid 연산함수의 경우 입력데이터의 변화량인 입력변화량(Δi)에 대한 출력데이터의 변화량을 Δo1라고 표시할 수 있다. 그리고 Exponent 연산함수의 경우 입력데이터의 변화량인 입력변화량(Δi)에 대한 출력데이터의 변화량을 Δo2라고 표시할 수 있다.
이때, 도 7a 및 도 7b를 살펴보면, 동일한 입력변화구간(Δi)이 주어졌을 때에 상기 Δo2가 상기 Δo1보다 클 가능성이 더 크다. 즉, Exponent 연산함수는 Sigmoid 연산함수에 비하여, 그 출력 값이 입력의 변화량에 더 민감하다. 즉, 제1연산함수는 제2연산함수보다 그 출력 값이 입력의 변화량에 더 민감할 수 있다.
여기서, 특정 연산함수에 입력되는 입력데이터의 값에는 상기 입력데이터의 스케일에 따라 존재하는 양자화 오류가 포함되어 있을 수 있다. 상기 입력데이터의 양자화 오류는 상기 특정 연산함수가 출력하는 출력데이터에 전파된다. 주어진 연산함수의 입력에 대한 출력의 변화량이 더 커질수록, 상기 주어진 연산함수에 입력된 양자화 오류가 더 증폭되어 출력될 수 있다.
예컨대 Exponent 연산함수와 Sigmoid 연산함수에 각각, 동일한 스케일로 표현된 동일한 입력데이터를 입력하는 경우를 가정할 수 있다. 이때, 0보다 큰 값을 갖는 입력데이터의 거의 대부분에 대하여 Exponent 연산함수는 Sigmoid 연산함수에 비하여 입력데이터의 양자화 오류를 더 큰 폭으로 증폭시킬 수 있다. 이로 인해 Exponent 연산함수로 처리하는 제2출력채널의 출력 액티베이션(752)의 양자화 오류가 Sigmoid 연산함수로 처리하는 제1출력채널의 출력 액티베이션(751)의 양자화 오류보다 더 크게 증폭된다. 데이터의 양자화 오류가 출력채널 별로 서로 다른 크기로 증폭되어 전달되는 경우, 심각한 데이터 오류가 발생할 수 있다는 문제가 있다.
연산함수의 출력 단까지 전파된 오류를 출력채널 별로 평탄화하기(equalizing) 위해서는 각 출력채널의 출력 액티베이션에 적용되는 연산함수의 종류를 미리 파악할 필요가 있다. 그리고 각 연산함수 별로 요구되는, 각 연산함수에 입력되는 데이터인 입력데이터를 표현하는 스케일(=입력데이터의 LSB가 나타내는 값)을 미리 정의하여 둘 필요가 있다. 이때, 특정 연산함수에 대해 요구되는 입력데이터의 스케일은 특정 값으로 결정될 수도 있고, 일정 범위의 값으로 결정될 수도 있다.
예컨대 제1연산함수가 요구하는 입력데이터의 스케일이 제1값이고, 제2연산함수가 요구하는 입력데이터의 스케일이 제2값이라는 정보를 미리 저장해 둘 수 있다. 상기 제1값과 제2값을 서로 비교하여 상기 제1값과 제2값 중 어느 것이 더 큰지 확인할 수 있다.
또는 예컨대, 제1연산함수가 요구하는 입력데이터의 스케일이, 제2연산함수에 요구하는 입력데이터의 스케일과 동일한지, 또는 더 큰지, 또는 더 작은지를 미리 저장해 둘 수 있다.
본 발명의 일 실시예에 따르면, 상기 제2출력채널의 출력 액티베이션(752)의 스케일인 제2스케일이 상기 제1출력채널의 출력 액티베이션(751)의 스케일인 제1스케일보다 더 작을 필요가 있다면, 상기 제2스케일이 상기 제1스케일보다 더 작게 되도록, 상기 제2출력채널의 출력 액티베이션(752)의 산출 프로세스와 상기 제2출력채널의 출력 액티베이션(752)의 산출 프로세스를 제어할 수 있다.
컴퓨팅 장치(1)의 연산 파워와 메모리가 충분히 크다면, 상기 제1스케일과 상기 제2스케일의 상대적인 차이를 고려하지 않고, 상기 제1스케일과 상기 제2스케일을 매우 작은 동일한 값이 되도록 설계할 수 있다. 그러나 컴퓨팅 장치(1)의 연산 파워와 메모리가 충분히 크지 않다고 가정한다면, 상기 제1스케일과 제2스케일을 서로 다른 값으로 정의하는 것이 바람직하다.
도 8a 및 도 8b는 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 8a는 제1출력채널의 출력 액티베이션(751)이 제1연산부(210)가 제공하는 제1연산함수, 예컨대 Sigmoid 함수에 입력되는 상황을 나타낸 것이다. 이때, 제1출력채널의 출력 액티베이션(751)의 각 요소의 값을 문자 i로 나타낼 수 있다. 이때, 제1출력채널의 출력 액티베이션(751)의 각 요소가 제1스케일(S1)으로 표현된 경우와 제2스케일(S2)로 표현된 경우가 각각 도 8a의 중간(middle) 및 아래(bottom)에 제시되어 있다. 이때, 상기 제1스케일이 상기 제2스케일보다 큰 경우를 가정할 수 있다. 그리고 제1출력채널의 출력 액티베이션(751)의 각 요소가 4비트로 표현되어 총 16가지의 값을 표현할 수 있다고 가정할 수 있다. 도 8a의 각 그래프에 나타낸 16개의 점선들은 상기 16가지의 값들을 나타낸 것이다.
이제 도 8a의 중간에 배치된 그래프를 참조하여 설명한다. 제1출력채널의 출력 액티베이션(751)의 각 요소가 가질 수 있는 가장 큰 3개의 값들(R1)을 상기 Sigmoid 함수에 입력하였을 때에, Sigmoid 함수들로부터 출력되는 3개의 값들 간에는 큰 차이가 없다. 또한, 제1출력채널의 출력 액티베이션(751)의 각 요소가 가질 수 있는 가장 작은 3개의 값들(R2)을 상기 Sigmoid 함수에 입력하였을 때에, Sigmoid 함수들로부터 출력되는 3개의 값들 간에는 큰 차이가 없다. 즉, 소정의 양의 제1값보다 큰 입력값들이 Sigmoid 함수에 입력되는 경우 Sigmoid 함수가 출력하는 값들은 사실상 거의 동일하며, 소정의 음의 제2값보다 작은 입력값들이 Sigmoid 함수에 입력되는 경우 Sigmoid 함수가 출력하는 값들은 사실상 거의 동일하다. 따라서 Sigmoid 함수에 입력되는 입력값, 즉 제1출력채널의 출력 액티베이션(751)의 각 요소는 상기 소정의 양의 제1값보다 큰 값 및 상기 소정의 음의 제2값보다 작은 값을 표현할 필요가 없다. 따라서, 즉 제1출력채널의 출력 액티베이션(751)을 상기 제1스케일(S1)으로 표현할 필요가 없다.
그 보다는, 도 8a의 아래에 배치된 그래프와 같이, 즉 제1출력채널의 출력 액티베이션(751)을 상기 제1스케일(S1)보다 작은 제2스케일(S2)로 표현할 수 있다. 이렇게 하면, 동일한 4개의 비트를 이용하여 즉 제1출력채널의 출력 액티베이션(751)의 정밀도를 향상시킬 수 있을 뿐만 아니라, Sigmoid 함수가 출력하는 값들의 정밀도 역시 향상시킬 수 있다는 장점이 있다.
이와 같이, 예컨대 Sigmoid 함수에 입력되어야 하는 특정 출력채널의 출력 액티베이션은, 상대적으로 작은 스케일로 표현되는 것이 유리할 수 있다는 점을 이해할 수 있다.
도 8b는 제4출력채널의 출력 액티베이션(754)이 제2연산부(220)가 제공하는 제2연산함수, 예컨대 Exponent 함수에 입력되는 상황을 나타낸 것이다.
이때, 제4출력채널의 출력 액티베이션(754)의 각 요소가 제1스케일(S1)으로 표현된 경우와 제2스케일(S2)로 표현된 경우가 각각 도 8b의 중간(middle) 및 아래(bottom)에 제시되어 있다. 이때, 상기 제1스케일이 상기 제2스케일보다 큰 경우를 가정할 수 있다. 그리고 제4출력채널의 출력 액티베이션(754)의 각 요소가 4비트로 표현되어 총 16가지의 값을 표현할 수 있다고 가정할 수 있다. 도 8b의 각 그래프에 나타낸 16개의 점선들은 상기 16가지의 값들을 나타낸 것이다.
도 8a에 제시한 예와는 달리, 제4출력채널의 출력 액티베이션(754)이 입력되는 연산함수가 Exponent인 경우에는, 제4출력채널의 출력 액티베이션(754)을 상기 제1스케일 및 제2스케일 중 어떤 스케일로 표현하더라도 특별히 유리한 효과가 발생하지는 않는다. 다만, 제4출력채널의 출력 액티베이션(754)이 갖는 값들의 레인지에 따라 제4출력채널의 출력 액티베이션(754)을 표현하는 스케일의 값을 최적화할 수는 있다. 그러나 이러한 최적화는, 제4출력채널의 출력 액티베이션(754)이 갖는 값들의 레인지에 의한 것일 뿐, 제4출력채널의 출력 액티베이션(754)이 입력되는 연산함수에 의한 것은 아니다.
이러한 특징을 다른 관점으로 설명할 수 있다. 즉, 도 8a의 Sigmoid 함수의 경우, Sigmoid 함수의 출력값에 유의미한 변화를 주는 입력데이터의 관심영역은 R0에 한정될 수 있다. 이에 비하여, 도 8b의 Exponent 함수의 경우, Exponent 함수의 출력값에 유의미한 변화를 주는 입력데이터의 관심영역은 R0에 한정되지 않고, R1, R2 및 이 외의 영역으로 결정될 수 있다. 즉, 특정 연산함수의 출력값이 유의미한 변화를 주는 입력데이터의 관심영역이 그 작을수록, 상기 입력데이터를 표현하는 스케일을 더 작은 값으로 설정하는 것이 유리할 수 있다.
도 8a 및 도 8b와 함께 설명한 위 내용들을 살펴보면, 특정 출력채널의 출력 액티베이션이 입력되는 연산함수의 종류에 따라서는, 상기 연산함수의 특성에 근거하여 특정 출력채널의 출력 액티베이션의 스케일의 크기를 감소시키는 것이 유리할 수 있다는 점을 이해할 수 있다. 따라서 서로 다른 연산함수에 입력되는 서로 다른 출력 액티베이션들의 스케일을 서로 다른 값으로 설정할 필요가 있다는 점이 이해될 수 있다.
도 7a 및 도 7b에서 설명한 제1관점에 따르면, Exponent 함수에 입력되는 출력 액티베이션이 Sigmoid 함수에 입력되는 출력 액티베이션보다 더 작은 스케일을 갖는 것이 바람직하였다. 이에 비하여, 도 8a 및 도 8b에서 설명한 제2관점에 따르면, Sigmoid 함수에 입력되는 출력 액티베이션이 Exponent 함수에 입력되는 출력 액티베이션보다 더 작은 스케일을 갖는 것이 바람직하였다. 즉, 서로 다른 2개의 관점에 따라 결정된 스케일의 크기가 상반될 수 있음을 알 수 있다. 즉, 어떤 주어진 상황에서 제1연산함수에 입력되는 출력 액티베이션의 스케일을 제2연산함수에 입력되는 출력 액티베이션의 스케일보다 큰 값으로 설정할 것인지 아니면 작은 값으로 설정할 것인지는, 출력 액티베이션들을 표현하는 데이터의 비트수 및 출력 액티베이션들이 갖는 값들의 통계적 특성에 따라 변화할 수 있다.
도 8c는 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 8c의 상측부(top)는 제1출력채널의 출력 액티베이션(751)이 제1연산부(210)가 제공하는 제1연산함수 f1(i)에 입력되는 상황을 나타낸 것이고, 도 8c의 하측부(bottom)는 제2출력채널의 출력 액티베이션(754)이 제2연산부(220)가 제공하는 제2연산함수 f2(i)에 입력되는 상황을 나타낸 것이다.
이때, 상기 제1연산함수는 음의 입력값에 대하여 포화(saturation)될 뿐만 아니라 양의 입력값에 대하여도 포화되는 함수이다. 즉, 상기 제1연산함수는 양쪽 방향으로 포화되는 함수일 수 있다. 도 8c에서는 그 예시로서 f1(i)=Sigmoid(i)를 예시하였다.
또한, 상기 제2연산함수는 음의 입력값에 대하여 포화될 뿐만 아니라 양의 입력값에 대하여도 포화되는 함수이다. 즉, 상기 제2연산함수는 양쪽 방향으로 포화되는 함수일 수 있다. 도 8c에서는 그 예시로서 f2(i)=Sigmoid(2i)를 예시하였다.
이때, 상기 제1연산함수 및 제2연산합수에 모두에 대하여, 음의 입력에 대한 포화값을 osl이라고 표시하고, 양의 입력에 대한 포화값을 osr이라고 표시할 수 있다. 그리고, 음의 포화, 즉, 좌측 포화가 시작되는 입력값을 isl이라고 표현하고, 양의 포화, 즉, 우측 포화가 시작되는 입력값을 isr이라고 표현할 수 있다. 이때, 입력값을 isl은 포화값 osl로부터 소정의 차이를 갖는 출력값을 제공하는 입력값들 중 가장 큰 값일 수 있고, 입력값을 isr은 포화값 osr로부터 소정의 차이를 갖는 출력값을 제공하는 입력값들 중 가장 작은 값일 수 있다.
이때, 입력값 isl과 입력값 isr 사이의 입력구간을 비포화 구간이라고 지칭하고, 그 외의 구간을 포화 구간이라고 지칭할 수 있다. 상기 비포화 구간에서는 입력의 변화에 대한 출력의 변화가 일정 수준 이상이지만, 상기 포화 구간에서는 입력 변화에 대한 출력의 변화가 매우 작다. 따라서 상기 연산함수(제1연산함수 또는 제2연산함수)에 입력되는 입력값들 중 상기 포화 구간에 속하는 값들은 정확하게 표현하지 않더라도 상기 연산함수의 출력에 반영되는 영향은 무시할 수 있다는 점을 이해할 수 있다.
이때, 상기 각 연산합수에서, 입력값 isl과 입력값 isr 간의 차이값을 비포화 구간의 크기(Lns)로 정의할 수 있다. 도 8c에 제시한 예에서, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)는 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)보다 크다.
본 발명의 일 실시예에서, 제1출력채널의 출력 액티베이션(751)의 각 요소는 제1스케일(S1)으로 표현되고, 제2출력채널의 출력 액티베이션(754)의 각 요소는 제2스케일(S2)로 표현될 수 있다. 이때, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)가 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 크게 결정되는 것이 유리하다는 점을 이해할 수 있다. 이는, 특히, 제1출력채널의 출력 액티베이션(751)의 각 요소 및 제2출력채널의 출력 액티베이션(754)의 각 요소를 표현하는 비트수가 서로 동일한 경우에 유용하다.
도 8d는 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 8d의 상측부(top)는 제1출력채널의 출력 액티베이션(751)이 제1연산부(210)가 제공하는 제1연산함수 f1(i)에 입력되는 상황을 나타낸 것이고, 도 8d의 하측부(bottom)는 제2출력채널의 출력 액티베이션(754)이 제2연산부(220)가 제공하는 제2연산함수 f2(i)에 입력되는 상황을 나타낸 것이다.
이때, 상기 제2연산함수는 음의 입력값에 대하여 포화(saturation)될 뿐만 아니라 양의 입력값에 대하여도 포화되는 함수이다. 즉, 상기 제2연산함수는 양쪽 방향으로 포화되는 함수일 수 있다. 도 8d에서는 그 예시로서 f2(i)=Sigmoid(i)를 예시하였다.
그러나 상기 제1연산함수는 음의 입력값에 대하여 포화되지만 양의 입력값에 대하여는 포화되지 않는 함수이다. 즉, 상기 제1연산함수는 일측 방향으로만 포화되는 함수일 수 있다. 도 8d에서는 그 예시로서 f1(i)=Exponent(i)를 예시하였다.
이때, 상기 제2연산함수에 대하여, 도 8c에 설명한 것과 같이, 음의 입력에 대한 포화값 osl, 양의 입력에 대한 포화값 osr, 좌측 포화가 시작되는 입력값 isl, 그리고 우측 포화가 시작되는 입력값을 isr을 정의할 수 있다.
그러나 상기 제1연산함수에 대하여는 음의 입력에 대한 포화값 osl 및 좌측 포화가 시작되는 입력값 isl은 정의되지만, 양의 입력에 대한 포화값 osr 및 우측 포화가 시작되는 입력값 is은 정의되지 않는다.
도 8d에 제시한 예에서, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)는 무한대이다. 따라서 도 8d에 제시한 예에서, 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)는 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)보다 작다.
본 발명의 일 실시예에서, 제1출력채널의 출력 액티베이션(751)의 각 요소는 제1스케일(S1)으로 표현되고, 제2출력채널의 출력 액티베이션(754)의 각 요소는 제2스케일(S2)로 표현될 수 있다. 이때, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)가 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 크게 결정되는 것이 유리하다는 점을 이해할 수 있다. 이는, 특히, 제1출력채널의 출력 액티베이션(751)의 각 요소 및 제2출력채널의 출력 액티베이션(754)의 각 요소를 표현하는 비트수가 서로 동일한 경우에 유용하다.
도 8e는 서로 다른 출력채널의 출력 액티베이션이 서로 다른 스케일로 표현되어야 하는 또 다른 이유를 설명하기 위한 것이다.
도 8e의 상측부(top)는 제1출력채널의 출력 액티베이션(751)이 제1연산부(210)가 제공하는 제1연산함수 f1(i)에 입력되는 상황을 나타낸 것이고, 도 8e의 하측부(bottom)는 제2출력채널의 출력 액티베이션(754)이 제2연산부(220)가 제공하는 제2연산함수 f2(i)에 입력되는 상황을 나타낸 것이다.
이때, 상기 제2연산함수는 음의 입력값에 대하여 포화(saturation)될 뿐만 아니라 양의 입력값에 대하여도 포화되는 함수이다. 즉, 상기 제2연산함수는 양쪽 방향으로 포화되는 함수일 수 있다. 도 8e에서는 그 예시로서 f2(i)=Sigmoid(i)를 예시하였다.
그러나 상기 제1연산함수는 음의 입력값에 대하도 포화되지 않고 양의 입력값에 대하여는 포화되지 않는 함수이다. 도 8e에서는 그 예시로서 f1(i)=i를 예시하였다.
이때, 상기 제2연산함수에 대하여, 도 8c에 설명한 것과 같이, 음의 입력에 대한 포화값 osl, 양의 입력에 대한 포화값 osr, 좌측 포화가 시작되는 입력값 isl, 그리고 우측 포화가 시작되는 입력값을 isr을 정의할 수 있다.
그러나 상기 제1연산함수에 대하여는 음의 입력에 대한 포화값 osl, 양의 입력에 대한 포화값 osr, 좌측 포화가 시작되는 입력값 isl, 그리고 우측 포화가 시작되는 입력값을 isr이 정의되지 않는다.
도 8e에 제시한 예에서, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)는 무한대이다. 따라서 도 8e에 제시한 예에서, 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)는 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)보다 작다.
본 발명의 일 실시예에서, 제1출력채널의 출력 액티베이션(751)의 각 요소는 제1스케일(S1)으로 표현되고, 제2출력채널의 출력 액티베이션(754)의 각 요소는 제2스케일(S2)로 표현될 수 있다. 이때, 상기 제1연산함수 f1에 대한 상기 비포화 구간의 크기(Lns_f1)가 상기 제2연산함수 f2에 대한 상기 비포화 구간의 크기(Lns_f2)보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 크게 결정되는 것이 유리하다는 점을 이해할 수 있다. 이는, 특히, 제1출력채널의 출력 액티베이션(751)의 각 요소 및 제2출력채널의 출력 액티베이션(754)의 각 요소를 표현하는 비트수가 서로 동일한 경우에 유용하다.
도 9a는 본 발명의 일 실시예에 따라 입력 액티베이션을 연산하는 방법을 나타낸 순서도이다.
본 발명의 일 실시예에 따라 입력 액티베이션을 연산하는 방법은, 아래 단계들을 포함할 수 있다.
단계(S110)에서, 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비할 수 있다. 여기서 상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션을 의미할 수 있다.
단계(S121)에서, 복수 개의 출력채널들로 구성된 제2입력 데이터 중 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비할 수 있다. 여기서 상기 제2입력 데이터는 상기 특정 레이어에서 사용되는 커널, 또는 가중치일 수 있다.
단계(S122)에서, 상기 제2입력 데이터(커널, 또는 가중치) 중 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비할 수 있다.
단계(S131)에서, 상기 제1세트의 제1스플릿 데이터와 상기 제1세트의 제2스플릿 데이터를 입력채널 별로 콘볼루션 하여, 제1출력채널의 콘볼루션 데이터를 생성할 수 있다. 여기서 상기 제1출력채널의 콘볼루션 데이터는 상기 레이어가 출력하는 출력 액티베이션 중 제1출력채널의 출력 액티베이션을 의미할 수 있다.
단계(S132)에서, 상기 제1세트의 제1스플릿 데이터와 상기 제2세트의 제2스플릿 데이터를 입력채널 별로 콘볼루션 하여, 제2출력채널의 콘볼루션 데이터를 생성할 수 있다. 여기서 상기 제2출력채널의 콘볼루션 데이터는 상기 레이어가 출력하는 출력 액티베이션 중 제2출력채널의 출력 액티베이션을 의미할 수 있다.
단계(S141)에서, 상기 제1출력채널의 콘볼루션 데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성할 수 있다.
단계(S142)에서, 상기 제2출력채널의 콘볼루션 데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성할 수 있다.
이때, 상기 제1출력채널의 콘볼루션 데이터와 상기 제2출력채널의 콘볼루션 데이터는 상기 레이어가 출력하는 출력 액티베이션을 구성할 수 있다. 상기 출력 액티베이션은 상기 제1출력채널 및 상기 제2출력채널이 아닌 다른 출력채널의 콘볼루션 데이터를 포함할 수 있다.
상기 단계(S121)와 단계(S122)는 병렬로 처리될 수도 있다.
상기 단계(S131)와 단계(S132)는 병렬로 처리될 수도 있다.
상기 단계(S141)와 단계(S142)는 병렬로 처리될 수도 있다.
도 9b는 각 출력채널의 콘볼루션 데이터를 생성하는 방법을 나타낸 순서도이다.
상기 제1출력채널의 콘볼루션 데이터(=제1출력채널의 출력 액티베이션)를 생성하는 단계(S131)는, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현한 값을 생성하는 단계(S1311); 및 상기 제1스케일로 표현된 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 콘볼루션 데이터를 생성하는 단계(S1312)를 포함할 수 있다.
상기 제2출력채널의 콘볼루션 데이터(=제2출력채널의 출력 액티베이션)를 생성하는 단계(S132)는, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현한 값을 생성하는 단계(S1321); 및 상기 제2스케일로 표현된 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 콘볼루션 데이터를 생성하는 단계(S1322)를 포함할 수 있다.
이때, 상기 제1연산함수와 상기 제2연산함수는 서로 다른 연산함수이고, 상기 제1스케일과 상기 제2스케일은 서로 다른 값일 수 있다.
이때, 상기 제1연산함수에 입력되는 제1입력데이터(ex 751)에 대해 요구되는 스케일이, 상기 제2연산함수에 입력되는 제2입력데이터(ex 752)에 대해 요구되는 스케일보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 클 수 있다.
이와 달리, 상기 제1연산함수에 입력되는 제1입력데이터(ex 751)에 대해 요구되는 스케일이, 상기 제2연산함수에 입력되는 제2입력데이터(ex 752)에 대해 요구되는 스케일보다 작은 경우, 상기 제1스케일은 상기 제2스케일보다 작을 수 있다.
일 실시예에서, 상기 제1연산함수 또는 상기 제2연산함수와 같은 특정 연산함수에 입력되는 입력데이터에 대해 요구되는 스케일의 크기는 다음과 같은 특성을 가질 수 있다.
우선, 상기 제1입력데이터의 제1구간에 대하여 상기 제1연산함수의 도함수(derived function, derivatives)가 정의될 수 있다고 가정한다. 또한, 상기 제2입력데이터의 제2구간에 대하여 상기 제2연산함수의 도함수가 정의될 수 있다고 가정한다.
예컨대 도 7a에는 Sigmoid 함수와 이에 대한 도함수가 도시되어 있고, 도 7b에는 Exponent 함수와 이에 대한 도함수가 도시되어 있다. 도 10a도 상기 Sigmoid의 도함수가 도시되어 있고, 도 10b에도 상기 Exponent 함수의 도함수가 도시되어 있다.
일 실시예에서, 상기 제1구간은 상기 제1입력데이터의 대부분의 값이 몰려 있는 구간을 의미하고, 상기 제2구간은 상기 제2입력데이터의 대부분의 값이 몰려 있는 구간을 의미할 수 있다. 이에 대한 간단한 예를 도 10a 및 도 10b에 제시하였다.
도 10a는 상기 제1입력데이터의 분포를 예시한 것이다. 여기서 상기 제1입력데이터의 대부분이 값이 몰려 있는 구간은 [a1~a3]이다. 예컨대 상기 제1입력데이터가 총 1000개의 값들로 이루어져 있고, 이 중 x1%(ex: 90%)가 구간 [a1~a3]에 존재한다면, 상기 제1구간은 구간 [a1~a3]일 수 있다.
도 10b는 상기 제2입력데이터의 분포를 예시한 것이다. 여기서 상기 제2입력데이터의 대부분이 값이 몰려 있는 구간은 [-a1~a3]이다. 예컨대 상기 제2입력데이터가 총 1000개의 값들로 이루어져 있고, 이 중 x2%(ex: 90%)가 구간 [-a1~a3]에 존재한다면, 상기 제2구간은 구간 [-a1~a3]일 수 있다.
도 10a 및 도 10b와는 다른 실시예에서, 상기 제1구간 및 상기 제2구간은 상기 제1입력데이터 및 상기 제2입력데이터의 통계와 무관하게 미리 결정된 구간일 수도 있다.
이때, 상기 제1구간에서의 상기 제1도함수의 값의 절대 값의 적분 값을 제1적분 값이라고 정의할 수 있고(도 10a의 빗금부분 참고), 상기 제2구간에서의 상기 제2도함수의 값의 절대 값의 적분 값을 제2적분 값이라고 정의할 수 있다(도 10b의 빗금부분 참고).
이때, 도 10a 및 도 10b에 나타낸 예와 같이, 상기 제2적분 값이 상기 제1적분 값보다 크다면, 상기 제2구간에서의 상기 제2연산함수의 입력에 대한 출력의 변화율의 평균값(=평균 변화율, 평균 기울기)이 상기 제1구간에서의 제1연산함수의 입력에 대한 출력의 변화율의 평균값(=평균 변화율, 평균 기울기)보다 크다는 것을 의미할 수 있다. 즉, 상기 제1입력데이터 중 관심 있는 구간인 상기 제1구간에서의 상기 제1연산함수의 입출력 간 에러 증폭률보다, 상기 제2입력데이터 중 관심 있는 구간인 상기 제2구간에서의 상기 제2연산함수의 입출력 간 에러 증폭률이 더 크다는 것을 의미할 수 있다. 따라서 이러한 연산함수들의 출력값들이 갖는 양자화 에러의 수준을 평탄화하기 위하여, 상기 제2연산함수에 입력되는 입력데이터에 대해 요구되는 제2스케일의 크기를 상기 제1연산함수에 입력되는 입력데이터에 대해 요구되는 제1스케일의 크기보다 작은 값으로 결정할 수 있다.
도 10a 및 도 10b에 나타낸 예와는 달리, 상기 제1적분 값이 상기 제2적분 값보다 크다면, 상기 제1구간에서의 상기 제1연산함수의 입력에 대한 출력의 변화율의 평균값이 상기 제2구간에서의 제2연산함수의 입력에 대한 출력의 변화율의 평균값보다 크다는 것을 의미할 수 있다. 즉, 상기 제2입력데이터 중 관심 있는 구간인 상기 제2구간에서의 상기 제2연산함수의 입출력 간 에러 증폭률보다, 상기 제1입력데이터 중 관심 있는 구간인 상기 제1구간에서의 상기 제1연산함수의 입출력 간 에러 증폭률이 더 크다는 것을 의미할 수 있다. 따라서 이러한 연산함수들의 출력값들이 갖는 양자화 에러의 수준을 평탄화하기 위하여, 상기 제1연산함수에 입력되는 입력데이터에 대해 요구되는 제1스케일의 크기를 상기 제2연산함수에 입력되는 입력데이터에 대해 요구되는 제2스케일의 크기보다 작은 값으로 결정할 수 있다.
도 11은 본 발명의 다른 실시예에 따라 입력 액티베이션을 연산하는 방법을 나타낸 순서도이다.
단계(S200)에서, 제1연산함수가 요구하는 입력데이터의 스케일인 제1스케일 및 제2연산함수가 요구하는 입력데이터의 스케일인 제2스케일을 획득할 수 있다.
단계(210)에서, 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비할 수 있다. 여기서 상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션을 의미할 수 있다.
단계(S220)에서, 복수 개의 출력채널들로 구성된 제2입력 데이터 중 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비하고, 상기 제2입력 데이터 중 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비할 수 있다. 여기서 상기 제2입력 데이터는 상기 특정 레이어에서 사용되는 커널, 또는 가중치일 수 있다.
단계(S230)에서, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현한 값을 생성하고, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현한 값을 생성할 수 있다.
단계(240)에서, 상기 제1스케일로 표현된 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 콘볼루션 데이터를 생성하고, 상기 제2스케일로 표현된 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 콘볼루션 데이터를 생성할 수 있다.
단계(S250)에서, 상기 제1출력채널의 콘볼루션 데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 콘볼루션 데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성할 수 있다.
이때, 상기 제1출력채널의 콘볼루션 데이터와 상기 제2출력채널의 콘볼루션 데이터는 상기 레이어가 출력하는 출력 액티베이션을 구성할 수 있다. 상기 출력 액티베이션은 상기 제1출력채널 및 상기 제2출력채널이 아닌 다른 출력채널의 콘볼루션 데이터를 포함할 수 있다.
이때, 일 실시예에서, 상기 제1연산함수, 상기 제2연산함수, 상기 제1스케일, 및 상기 제2스케일은 다음과 같은 특성을 가질 수 있다.
주어진 제1구간에서, 상기 제1연산함수의 도함수인 제1도함수의 값의 절대 값의 적분 값을 제1적분 값이라고 정의할 수 있다. 그리고 주어진 제2구간에서, 상기 제2연산함수의 도함수인 제2도함수의 값의 절대 값의 적분 값을 제2적분 값이라고 정의할 수 있다.
이때, 상기 제2적분 값이 상기 제1적분 값보다 크다면, 상기 제1연산함수와 상기 제2연산함수의 출력값들이 갖는 양자화 에러의 수준을 평탄화하기 위하여, 상기 제2연산함수에 입력되는 입력데이터에 대해 요구되는 제2스케일의 크기를 상기 제1연산함수에 입력되는 입력데이터에 대해 요구되는 제1스케일의 크기보다 작은 값으로 결정할 수 있다.
이와 달리, 상기 제1적분 값이 상기 제2적분 값보다 크다면, 상기 제2연산함수와 상기 제1연산함수의 출력값들이 갖는 양자화 에러의 수준을 평탄화하기 위하여, 상기 제1연산함수에 입력되는 입력데이터에 대해 요구되는 제1스케일의 크기를 상기 제2연산함수에 입력되는 입력데이터에 대해 요구되는 제2스케일의 크기보다 작은 값으로 결정할 수 있다.
도 12는 본 발명의 일 실시예에 따라 제공되는 데이터 연산방법을 나타낸 순서도이다.
본 발명의 일 실시예에 따라 제공되는 데이터 연산방법은 이미지 변환방법일 수 있다. 상기 이미지 변환방법은 다음 단계들을 포함할 수 있다.
단계(S310)에서, 컴퓨팅 장치가, 제1입력 데이터와 제2입력 데이터로부터 제1출력채널의 출력데이터 및 제2출력채널의 출력데이터를 포함하는 출력 데이터를 생성할 수 있다.
단계(S320)에서, 상기 컴퓨팅 장치가, 상기 제1출력채널의 출력데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 출력데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성할 수 있다.
이때, 상기 제1출력채널의 출력데이터와 상기 제2출력채널의 출력데이터는 서로 다른 스케일로 표현된 것일 수 있다.
그리고 상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션이고, 상기 제2입력 데이터는 상기 신경망의 상기 특정 레이어에 입력되는 가중치 또는 커널일 수 있다.
단계(S330)에서, 상기 컴퓨팅 장치가, 상기 생성한 제1연산데이터 및 제2연산데이터를 휘발성 메모리 또는 비휘발성 메모리에 저장할 수 있다.
단계(S340)에서, 상기 컴퓨팅 장치가, 상기 저장된 상기 제1연산데이터 및 상기 제2연산데이터를 이용하여 상기 신경망의 출력값을 산출할 수 있다.
단계(S350)에서, 상기 컴퓨팅 장치가, 상기 산출된 상기 신경망의 출력값을 이용하여 상기 컴퓨팅 장치에 저장되어 있는 소정의 이미지를 변환할 수 있다.
상술한 본 발명의 실시예들을 이용하여, 본 발명의 기술분야에 속하는 자들은 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에 다양한 변경 및 수정을 용이하게 실시할 수 있을 것이다. 특허청구범위의 각 청구항의 내용은 본 명세서를 통해 이해할 수 있는 범위 내에서 인용관계가 없는 다른 청구항에 결합될 수 있다.

Claims (19)

  1. 컴퓨팅 장치가, 제1입력 데이터와 제2입력 데이터로부터 제1출력채널의 출력데이터 및 제2출력채널의 출력데이터를 포함하는 출력 데이터를 생성하는 단계; 및
    상기 컴퓨팅 장치가, 상기 제1출력채널의 출력데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 출력데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성하는 단계;
    를 포함하며,
    상기 제1출력채널의 출력데이터와 상기 제2출력채널의 출력데이터는 서로 다른 스케일로 표현된 것을 특징으로 하는,
    데이터 연산방법.
  2. 제1항에 있어서, 상기 제1연산함수의 비포화 구간의 크기가 상기 제2연산함수의 비포화 구간의 크기보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 큰 것을 특징으로 하는, 데이터 연산방법.
  3. 제2항에 있어서, 상기 제1출력채널의 출력데이터를 표현하는 비트수와 상기 제2출력채널의 출력데이터를 표현하는 비트수와 동일한 것을 특징으로 하는, 데이터 연산방법.
  4. 제1항에 있어서,
    상기 제2입력 데이터는 상기 제1출력채널 및 상기 제2출력채널을 포함하는 복수 개의 출력채널들로 구성되어 있으며,
    상기 출력 데이터를 생성하는 단계는,
    상기 컴퓨팅 장치가, 상기 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비하는 제1단계;
    상기 컴퓨팅 장치가, 상기 제2입력 데이터 중 상기 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비하고, 상기 제2입력 데이터 중 상기 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비하는 제2단계; 및
    상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 출력데이터를 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 출력데이터를 생성하는 제3단계;
    를 포함하는,
    데이터 연산방법.
  5. 제4항에 있어서,
    상기 제2단계는, 상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현하여 준비하고, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현하여 준비하는 단계를 포함하는,
    데이터 연산방법.
  6. 제5항에 있어서,
    상기 제3단계에서,
    상기 제1출력채널의 출력데이터를 생성하기 위해, 상기 제1세트의 제1스플릿 데이터는 상기 제1스케일로 표현된 상기 제1세트의 제2스플릿 데이터와 콘볼루션 되고,
    상기 제2출력채널의 출력데이터를 생성하기 위해, 상기 제1세트의 제1스플릿 데이터는 상기 제2스케일로 표현된 상기 제2세트의 제2스플릿 데이터와 콘볼루션 되는 것을 특징으로 하는,
    데이터 연산방법.
  7. 제5항에 있어서,
    상기 제2연산함수에 입력되는 입력데이터의 상기 제2연산함수의 입력에 대한 출력의 평균변화율이 상기 제1연산함수에 입력되는 입력데이터의 상기 제1연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제2스케일은 상기 제1스케일보다 작은 값을 갖는 것을 특징으로 하는,
    데이터 연산방법.
  8. 제5항에 있어서,
    상기 제1연산함수에 입력되는 입력데이터의 소정의 제1구간에서의 상기 제1연산함수의 입력에 대한 출력의 평균변화율이 상기 제2연산함수에 입력되는 입력데이터의 제2구간에서의 상기 제2연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 작은 값을 가지며,
    상기 제1구간은 상기 제1출력채널의 출력데이터의 통계 값을 기초로 결정되고, 상기 제2구간은 상기 제2출력채널의 출력데이터의 통계 값을 기초로 결정되는 것을 특징으로 하는,
    데이터 연산방법.
  9. 제5항에 있어서,
    상기 제1연산함수에 입력되는 입력데이터의 소정의 제1구간에서의 상기 제1연산함수의 입력에 대한 출력의 평균변화율이 상기 제2연산함수에 입력되는 입력데이터의 제2구간에서의 상기 제2연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 작은 값을 가지며,
    상기 제1구간은 상기 제1출력채널의 출력데이터의 값들의 평균값을 포함하는 구간으로서 상기 제1출력채널의 출력데이터들 중 소정의 제1비율의 데이터들을 포함하는 구간이며,
    상기 제2구간은 상기 제2출력채널의 출력데이터의 값들의 평균값을 포함하는 구간으로서 상기 제2출력채널의 출력데이터들 중 소정의 제2비율의 데이터들을 포함하는 구간인,
    데이터 연산방법.
  10. 제1항에 있어서,
    상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션이고,
    상기 제2입력 데이터는 상기 신경망의 상기 특정 레이어에 입력되는 가중치 또는 커널인 것을 특징으로 하는,
    데이터 연산방법.
  11. 제10항에 있어서,
    상기 컴퓨팅 장치가, 상기 생성한 제1연산데이터 및 제2연산데이터를 휘발성 메모리 또는 비휘발성 메모리에 저장하는 단계;
    상기 컴퓨팅 장치가, 상기 저장된 상기 제1연산데이터 및 상기 제2연산데이터를 이용하여 상기 신경망의 출력값을 산출하는 단계; 및
    상기 컴퓨팅 장치가, 상기 산출된 상기 신경망의 출력값을 이용하여 상기 컴퓨팅 장치에 저장되어 있는 소정의 이미지를 변환하는 단계;
    를 더 포함하는,
    데이터 연산방법.
  12. 제4항에 있어서,
    상기 출력 데이터를 생성하는 단계 이전에, 상기 컴퓨팅 장치가, 상기 제1연산함수가 요구하는 입력데이터의 제1스케일 및 상기 제2연산함수가 요구하는 입력데이터의 스케일을 메모리로부터 탐색하여 획득하는 단계;를 더 포함하고,
    상기 제1단계와 상기 제2단계 사이에, 상기 컴퓨팅 장치가, 상기 제1세트의 제2스플릿 데이터를 상기 제1스케일로 표현한 값을 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제2스케일로 표현한 값을 생성하는 단계를 더 포함하는,
    데이터 연산방법.
  13. 휘발성 메모리를 포함하는 하드웨어 가속기 및 비휘발성 메모리를 포함하는 컴퓨팅 장치로서,
    상기 하드웨어 가속기가,
    상기 휘발성 메모리 및 상기 비휘발성 메모리 중 적어도 하나로부터 제1입력 데이터와 제2입력 데이터를 읽는 단계;
    상기 제1입력 데이터와 상기 제2입력 데이터로부터 제1출력채널의 출력데이터 및 제2출력채널의 출력데이터를 포함하는 출력 데이터를 생성하는 단계; 및
    상기 제1출력채널의 출력데이터에 대하여 제1연산함수를 적용하여 제1연산데이터를 생성하고, 상기 제2출력채널의 출력데이터에 대하여 제2연산함수를 적용하여 제2연산데이터를 생성하는 단계;
    를 실행하도록 되어 있고,
    상기 제1출력채널의 출력데이터와 상기 제2출력채널의 출력데이터는 서로 다른 스케일로 표현된 것을 특징으로 하는,
    컴퓨팅 장치.
  14. 제13항에 있어서, 상기 제1연산함수의 비포화 구간의 크기가 상기 제2연산함수의 비포화 구간의 크기보다 큰 경우, 상기 제1스케일은 상기 제2스케일보다 큰 것을 특징으로 하는, 컴퓨팅 장치.
  15. 제14항에 있어서, 상기 제1출력채널의 출력데이터를 표현하는 비트수와 상기 제2출력채널의 출력데이터를 표현하는 비트수와 동일한 것을 특징으로 하는, 컴퓨팅 장치.
  16. 제13항에 있어서,
    상기 제2입력 데이터는 상기 제1출력채널 및 상기 제2출력채널을 포함하는 복수 개의 출력채널들로 구성되어 있으며,
    상기 출력 데이터를 생성하는 단계는,
    상기 제1입력 데이터를 입력채널 별로 스플릿 하여 얻은 제1세트의 제1스플릿 데이터를 준비하는 제1단계;
    상기 제2입력 데이터 중 상기 제1출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제1세트의 제2스플릿 데이터를 준비하고, 상기 제2입력 데이터 중 상기 제2출력채널을 상기 입력채널 별로 스플릿 하여 얻은 제2세트의 제2스플릿 데이터를 준비하는 제2단계; 및
    상기 제1세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제1출력채널의 출력데이터를 생성하고, 상기 제2세트의 제2스플릿 데이터를 상기 제1세트의 제1스플릿 데이터와 입력채널 별로 콘볼루션 하여 상기 제2출력채널의 출력데이터를 생성하는 제3단계;
    를 포함하는,
    컴퓨팅 장치.
  17. 제16항에 있어서,
    상기 제2단계는, 상기 제1세트의 제2스플릿 데이터를 제1스케일로 표현하여 준비하고, 상기 제2세트의 제2스플릿 데이터를 제2스케일로 표현하여 준비하는 단계를 포함하는,
    컴퓨팅 장치.
  18. 제17항에 있어서,
    상기 제2연산함수에 입력되는 입력데이터의 상기 제2연산함수의 입력에 대한 출력의 평균변화율이 상기 제1연산함수에 입력되는 입력데이터의 상기 제1연산함수의 입력에 대한 출력의 평균변화율보다 큰 경우, 상기 제2스케일은 상기 제1스케일보다 작은 값을 갖는 것을 특징으로 하는,
    컴퓨팅 장치.
  19. 제13항에 있어서,
    상기 제1입력 데이터는 신경망의 특정 레이어에 입력되는 입력 액티베이션이고, 상기 제2입력 데이터는 상기 신경망의 상기 특정 레이어에 입력되는 가중치 또는 커널이며,
    상기 하드웨어 가속기가,
    상기 생성한 제1연산데이터 및 제2연산데이터를 상기 휘발성 메모리 및 상기 비휘발성 메모리 중 적어도 어느 하나에 저장하는 단계;
    상기 저장된 상기 제1연산데이터 및 상기 제2연산데이터를 이용하여 상기 신경망의 출력값을 산출하는 단계; 및
    상기 산출된 상기 신경망의 출력값을 이용하여 상기 컴퓨팅 장치에 저장되어 있는 소정의 이미지를 변환하는 단계;
    를 더 실행하도록 되어 있는,
    컴퓨팅 장치.
KR1020220085968A 2022-07-12 2022-07-12 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치 KR20240008747A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020220085968A KR20240008747A (ko) 2022-07-12 2022-07-12 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치
PCT/KR2022/021109 WO2024014631A1 (ko) 2022-07-12 2022-12-22 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220085968A KR20240008747A (ko) 2022-07-12 2022-07-12 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치

Publications (1)

Publication Number Publication Date
KR20240008747A true KR20240008747A (ko) 2024-01-19

Family

ID=89536782

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220085968A KR20240008747A (ko) 2022-07-12 2022-07-12 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치

Country Status (2)

Country Link
KR (1) KR20240008747A (ko)
WO (1) WO2024014631A1 (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3637325A4 (en) * 2017-05-23 2020-05-27 Shanghai Cambricon Information Technology Co., Ltd TREATMENT METHOD AND ACCELERATION DEVICE
KR102562320B1 (ko) * 2018-12-24 2023-08-01 삼성전자주식회사 비트 연산 기반의 뉴럴 네트워크 처리 방법 및 장치
KR102152615B1 (ko) * 2019-12-26 2020-09-08 주식회사 마크애니 활성화 함수를 사용하는 딥러닝 모델의 안정적인 학습을 위한 가중치 초기화 방법 및 장치
KR102395744B1 (ko) * 2021-09-16 2022-05-09 오픈엣지테크놀로지 주식회사 데이터 스케일을 고려한 덧셈 연산 방법 및 이를 위한 하드웨어 가속기, 이를 이용한 컴퓨팅 장치

Also Published As

Publication number Publication date
WO2024014631A1 (ko) 2024-01-18

Similar Documents

Publication Publication Date Title
US10096134B2 (en) Data compaction and memory bandwidth reduction for sparse neural networks
CN108009640B (zh) 基于忆阻器的神经网络的训练装置及其训练方法
US10664271B2 (en) Dot product engine with negation indicator
JP6921079B2 (ja) ニューラルネットワーク装置、車両制御システム、分解処理装置、及びプログラム
US11853846B2 (en) Acceleration of model/weight programming in memristor crossbar arrays
JP7325158B2 (ja) ニューラル・ネットワーク・コアにおける動的精度のためのデータ表現
CN110413255B (zh) 人工神经网络调整方法和装置
US11853594B2 (en) Neural network computing chip and computing method
US11341400B1 (en) Systems and methods for high-throughput computations in a deep neural network
US20200104669A1 (en) Methods and Apparatus for Constructing Digital Circuits for Performing Matrix Operations
KR20190140841A (ko) 확률 적응적 자원 할당을 통한 신경망 하드웨어 가속
CN115186802A (zh) 基于卷积神经网络的块稀疏方法、装置及处理单元
KR20190089685A (ko) 데이터를 처리하는 방법 및 장치
CN114418105A (zh) 一种基于量子线路处理量子应用问题的方法及装置
Kim et al. Algorithm/hardware co-design for in-memory neural network computing with minimal peripheral circuit overhead
CN113657595A (zh) 神经网络实时剪枝方法、系统及神经网络加速器
KR20240008747A (ko) 데이터 스케일을 고려한 콘볼루션 데이터의 양자화 방법, 이를 위한 하드웨어 가속기, 및 이를 이용한 컴퓨팅 장치
WO2019182059A1 (ja) モデル生成装置、モデル生成方法及びプログラム
KR102395744B1 (ko) 데이터 스케일을 고려한 덧셈 연산 방법 및 이를 위한 하드웨어 가속기, 이를 이용한 컴퓨팅 장치
US20220138282A1 (en) Computing device and computing method
JP2020166674A (ja) 情報処理装置、情報処理方法、情報処理プログラム
US20210406682A1 (en) Quantization of neural network models using data augmentation
CN114418104A (zh) 一种量子应用问题的处理方法及装置
KR20200023155A (ko) 뉴럴 네트워크의 학습을 가속하는 방법 및 뉴럴 네트워크 시스템
KR20200135059A (ko) 데이터를 처리하는 방법 및 장치