KR20230038509A - 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램 - Google Patents

뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램 Download PDF

Info

Publication number
KR20230038509A
KR20230038509A KR1020237004217A KR20237004217A KR20230038509A KR 20230038509 A KR20230038509 A KR 20230038509A KR 1020237004217 A KR1020237004217 A KR 1020237004217A KR 20237004217 A KR20237004217 A KR 20237004217A KR 20230038509 A KR20230038509 A KR 20230038509A
Authority
KR
South Korea
Prior art keywords
coefficient
zero
variable
value
matrix
Prior art date
Application number
KR1020237004217A
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 소니그룹주식회사
Publication of KR20230038509A publication Critical patent/KR20230038509A/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/045Combinations of networks
    • G06N3/0455Auto-encoder networks; Encoder-decoder networks
    • 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/0495Quantised networks; Sparse networks; Compressed networks
    • 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/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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
    • 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

Landscapes

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

Abstract

메모리량을 삭감한다. 뉴럴 네트워크 처리 장치는, 계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하는 복호부(41)와, 상기 복호부에 의해 복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 곱합 회로(116)를 구비하고, 상기 복호부는, 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 계수 행렬을 복호한다.

Description

뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램
본 기술은, 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램에 관한 것이다.
종래, 음성 인식이나 화자(話者) 식별, 환경음(環境音) 식별 등의 오디오 데이터에 대한 식별 처리나, 화상 인식 등의 화상 데이터에 대한 식별 처리라는 자동 식별 기술이 알려져 있다.
이와 같은 식별 처리를 행하기 위한 방법으로서 선형 식별이나, 결정목, 서포트 벡터 머신, 뉴럴 네트워크 등을 이용한 방법이 제안되어 있다(예를 들면, 비특허 문헌 1 및 비특허 문헌 2 참조).
예를 들면 뉴럴 네트워크를 이용한 식별 처리에서는, 미리 학습에 의해 얻어진 뉴럴 네트워크 구조의 식별기에 대해 데이터가 입력되고, 식별기에 의해 데이터에 대한 컨벌루션 처리나 풀링 처리, 레지스터 듀얼 처리 등의 연산이 행해진다. 그리고, 식별기에 의한 연산 결과가, 입력된 데이터에 대한 식별 결과로서 출력된다.
비특허 문헌 1: Kevin P. Murphy, Machine Learning: A Probabilistic Perspective, The MIT Press, 2012 비특허 문헌 2: I An Goodfellow, Yoshua Beng io, and Aaron Courville, Deep Learning, The MIT Press, 2016
그런데, 근래에는 자동 식별에 관한 기능을 스마트폰이나 헤드폰 등의 포터블 기기에 탑재하고 싶다는 요망도 있고, 그 때문에 뉴럴 네트워크 등을 이용한 식별 처리를 행할 때에 필요하게 되는 메모리량의 삭감이 요망되고 있다.
본 개시는, 메모리량을 삭감하는 것이 가능한 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램을 제안한다.
실시 형태에 관한 뉴럴 네트워크 처리 장치는, 계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하는 복호부와, 상기 복호부에 의해 복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 곱합 회로를 구비하고, 상기 복호부는, 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 계수 행렬을 복호한다.
도 1은 뉴럴 네트워크에 관해 설명하는 도면.
도 2는 컨벌루션 처리 및 풀링 처리에 관해 설명하는 도면.
도 3은 프레임 처리에 관해 설명하는 도면.
도 4는 제1 실시 형태에 관한 뉴럴 네트워크 구조의 식별기에 관해 설명하는 도면.
도 5는 제1 실시 형태에 관한 뉴럴 네트워크 구조의 식별기에 관해 설명하는 도면.
도 6은 제1 실시 형태에 관한 필터 계수의 압축 부호화에 관해 설명하는 도면.
도 7은 제1 실시 형태에 관한 뉴럴 네트워크 처리 장치의 구성례를 도시하는 도면.
도 8은 제1 실시 형태에 관한 식별 처리를 설명하는 플로우차트.
도 9는 제1 실시 형태에 관한 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트.
도 10은 제1 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면.
도 11은 도 10에 도시는 구체례에서의 위상 포인터 및 비제로 계수 큐 포인터의 움직임을 설명하기 위한 도면.
도 12는 제2 실시 형태에 관한 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트.
도 13은 제2 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면.
도 14는 제3 실시 형태에 관한 프라이어리티 인코더를 설명하기 위한 도면.
도 15는 제3 실시 형태에 관한 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트.
도 16은 제3 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면.
도 17은 도 16에 도시하는 구체례에서의 위상 포인터, 비제로 계수 큐 포인터 및 변수 큐 포인터의 움직임을 설명하기 위한 도면.
도 18은 제4 실시 형태에 관한 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트.
도 19는 제4 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면.
도 20은 도 19에 도시하는 구체례에서의 위상 포인터, 비제로 계수 큐 포인터 및 변수 큐 포인터의 움직임을 설명하기 위한 도면(그 1).
도 21은 도 19에 도시하는 구체례에서의 위상 포인터, 비제로 계수 큐 포인터 및 변수 큐 포인터의 움직임을 설명하기 위한 도면(그2).
도 22는 비교례에 관한 곱합 결과의 메모리에의 기록을 설명하기 위한 도면.
도 23은 제5 실시 형태에 관한 부호화부의 개략 구성례를 도시하는 회로도.
도 24는 제6 실시 형태에 관한 부호화부의 개략 구성례를 도시하는 회로도.
도 25는 도 24에 도시하는 부호화부의 동작례를 설명하기 위한 도면.
도 26은 제6 실시 형태에 관한 제1 변형례를 설명하기 위한 모식도.
도 27은 제6 실시 형태에 관한 제1 및 제2 변형례를 조합시킨 제3 변형례를 설명하기 위한 모식도.
도 28은 제1 적용례를 설명하기 위한 도면.
도 29는 제1 적용례의 변형례를 설명하기 위한 도면.
도 30은 제2 적용례에 관한 정보 처리 시스템의 개략 구성례를 도시하는 블록도.
도 31은 제3 적용례에 관한 전자 기기의 하나인 자율 로봇의 개략 구성례를 도시하는 모식도.
도 32는 제4 적용례에 관한 전자 기기의 하나인 텔레비전의 개략 구성례를 도시하는 모식도.
도 33은 본 기술에 관한 컴퓨터의 구성례를 도시하는 도면.
이하에, 본 개시의 실시 형태에 관해 도면에 의거하여 상세히 설명한다. 또한, 이하의 각 실시 형태에서, 같은 부위에는 같은 부호를 붙임에 의해 중복되는 설명을 생략한다.
또한, 이하에 나타내는 항목 순서에 따라 본 개시를 설명한다.
0. 본 기술에 관해
1. 제1 실시 형태
1. 1 뉴럴 네트워크 구조의 식별기에 의한 식별 처리의 구체례
1. 2 뉴럴 네트워크 구조의 예측기를 이용한 회귀 처리의 구체례
1. 3 필터 계수의 압축 부호화에 관해
1. 4 데이터 압축에 의한 처리량 삭감에 관해
1. 5 학습 수법에 관해
1. 6 뉴럴 네트워크 처리 장치의 구성례
1. 7 식별 처리의 설명
1. 8 계수 행렬의 스파스 표현화에 의한 효과
1. 9 스파스 표현 계수의 복호에 알맞는 복호부
1. 9. 1 복호부가 실행하는 복호 처리
1. 9. 2 복호 처리의 구체례
1. 10 작용·효과
2. 제2 실시 형태
2. 1 스파스 표현 계수의 복호에 알맞는 복호부
2. 1. 1 복호부가 실행하는 복호 처리
2. 1. 2 복호 처리의 구체례
2. 2 작용·효과
3. 제3 실시 형태
3. 1 제로 계수에 대한 곱합 연산의 생략에 관해
3. 2 스파스 표현 계수의 복호에 알맞는 복호부
3. 2. 1 복호부가 실행하는 복호 처리
3. 2. 2 복호 처리의 구체례
3. 3 작용·효과
4. 제4 실시 형태
4. 1 스파스 표현 계수의 복호에 알맞는 복호부
4. 1. 1 복호부가 실행하는 복호 처리
4. 1. 2 복호 처리의 구체례
4. 2 작용·효과
5. 제5 실시 형태
5. 1 비교례
5. 2 부호화부
5. 3 작용·효과
6. 제6 실시 형태
6. 1 부호화부
6. 2 동작례
6. 3 작용·효과
6. 4 변형례
6. 4. 1 제1 변형례
6. 4. 2 제2 변형례
6. 4. 3 제3 변형례
7. 본 기술의 적용례
7. 1 제1 적용례
7. 2 제2 적용례
7. 3 제3 적용례
7. 4 제4 적용례
8. 컴퓨터의 구성례
0. 본 기술에 관해
본 기술은, 뉴럴 네트워크를 이용한 식별 처리나 회귀 처리를 실현하는 경우에, 입력된 데이터에 대해 프레임 단위로 컨벌루션 처리 등의 연산 처리를 행할 때에, 현(現) 프레임과 과거의 프레임과의 연산 처리의 처리 경계를 일치시킴으로써 메모리량을 삭감할 수 있도록 하는 것이다.
우선, 도 1 및 도 2를 참조하여, 어느 시간 구간의 오디오 데이터를 입력으로 하고, 뉴럴 네트워크를 이용하여, 그 오디오 데이터에 대한 식별 처리를 행하는 식별기에 관해 설명한다. 또한, 도 1 및 도 2에서, 서로 대응하는 부분에는 동일한 부호를 붙이고 있고, 그 설명은 적절히 생략한다.
도 1은, 입력된 오디오 데이터에 대한 식별 처리를 행하여, 그 식별 결과를 출력하는 뉴럴 네트워크 구조의 식별기의 구성을 도시하고 있다.
도 1에서는, 각 사각형은 데이터의 형상을 나타내고 있고, 특히 각 데이터에서의 도면 중, 종방향은 시간 방향을 나타내고 있고, 도면 중, 횡방향은 차원을 나타내고 있다. 또한 도면 중, 횡방향의 화살표는 데이터의 변환을 나타내고 있다. 여기서, 각 데이터의 데이터 형상은, 데이터의 차원수와 각 차원에서의 데이터수(데이터 샘플수)에 의해 정해지는 것이다.
예를 들면 도면 중, 좌측의 단(端)에 있는 사각형의 입력 데이터(DT11)는, 뉴럴 네트워크 구조의 식별기에 입력되는 오디오 데이터이다.
여기서는 입력 데이터(DT11)에서의 도면 중, 종방향은 시간 방향을 나타내고 있고, 도면 중, 횡방향은 차원을 나타내고 있다. 특히, 입력 데이터(DT11)에서의 도면 중, 하방향이 보다 새로운 시각의 방향(미래 방향)으로 되어 있다.
입력 데이터(DT11)는, 7910샘플분의 시간 구간의 1채널분의 오디오 데이터로 되어 있다. 환언하면, 입력 데이터(DT11)는 7910개의 샘플(시간 샘플)의 샘플값으로 이루어지는 1채널분의 오디오 데이터이다.
따라서 여기서는 오디오 데이터의 채널이 입력 데이터(DT11)의 차원에 대응하고 있고, 입력 데이터(DT11)의 형상은 1차원×7910샘플이 된다. 또한, 입력 데이터(DT11)의 도면 중, 상측에 있는 샘플일수록 과거의 샘플이 된다.
도 1에 도시하는 식별기에서는, 입력 데이터(DT11)를 입력으로 하여 5개의 각 레이어(계층)에서 연산 처리로서 데이터 변환이 행해지고, 도면 중, 우측의 단에 있는 식별 결과 데이터(DT16)가 출력으로서 얻어진다. 환언하면, 컨벌루션 레이어(1)으로부터 컨벌루션 레이어(3)까지의 사이에서 합계 5회의 데이터 변환을 행함으로써, 입력 데이터(DT11)로부터 식별 결과 데이터(DT16)가 산출된다.
이 식별 결과 데이터(DT16)는, 식별기에 의한 식별 결과를 나타내는 1×1(1차원×1샘플)의 데이터이다. 보다 상세하게는 식별 결과 데이터(DT16)는, 예를 들면 입력 데이터(DT11)에 의거한 음성이 미리 정해진 특정한 음성일 확률을 나타내는 데이터로 되어 있다.
도 1에 도시하는 식별기에서는, 우선 컨벌루션 레이어(1)에서 입력 데이터(DT11)에 대해 4종류의 필터마다 필터 처리가 행해진다. 환언하면, 4종류의 필터마다, 필터를 구성하는 필터 계수와, 입력 데이터(DT11)와의 컨벌루션 처리가 행해진다.
컨벌루션 레이어(1)에서 행해지는 컨벌루션 처리에서 이용되는 각 필터는, 20×1탭의 필터로 되어 있다. 환언하면, 각 필터의 탭수, 즉 필터 계수의 수는 20×1로 되어 있다. 또한, 각 필터로의 컨벌루션 처리에서는, 10샘플 전진(前進)의 필터 처리가 행해진다.
이와 같은 컨벌루션 레이어(1)에서의 컨벌루션 처리에 의해, 입력 데이터(DT11)는 중간 데이터(DT12)로 변환된다.
이 중간 데이터(DT12)는 4차원×790샘플의 데이터로 되어 있다. 즉, 중간 데이터(DT12)는 도면 중, 횡방으로 나열하는 4개의 각 차원의 데이터로 이루어지고, 각 차원의 데이터는 790개의 샘플, 즉 도면 중, 종방으로 나열하는 790개의 데이터로 구성된다.
계속해서, 2번째의 레이어인 풀링 레이어(1)에서는, 컨벌루션 레이어(1)에서 얻어진 중간 데이터(DT12)에 대해, 10샘플 폭의 데이터 영역을 대상으로 하고, 그 데이터 영역에서 최대치를 픽(추출)하는 처리가 10샘플 전진으로 행해진다.
환언하면, 풀링 레이어(1)에서는, 10샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 10샘플 전진의 풀링 처리가 중간 데이터(DT12)에 대해 행해진다.
이와 같은 풀링 처리에 의해, 중간 데이터(DT12)가 중간 데이터(DT13)로 변환된다. 여기서는, 중간 데이터(DT13)는 4차원의 데이터로 되어 있고, 각 차원의 데이터는 79개의 샘플(데이터)로 이루어진다.
여기서, 도 2를 참조하여 컨벌루션 레이어(1)에서의 컨벌루션 처리와, 풀링 레이어(1)에서의 풀링 처리에 관해 설명한다.
예를 들면 도 2의 좌측에 도시하는 바와 같이, 컨벌루션 레이어(1)에서의 하나의 필터에 의한 컨벌루션 처리에서는, 입력 데이터(DT11)에서의 샘플(SP11)이나 샘플(SP12), 샘플(SP13)을 포함하는 20개의 샘플과 필터 계수가 컨벌루션된다.
즉, 데이터 영역(W11) 내 포함되어 있는, 시간 방향으로 연속해서 나열하는 샘플(SP11)부터 샘플(SP13)까지의 20개의 각 샘플과, 필터를 구성하는 필터 계수를 집어넣는 컨벌루션 처리가 행해진다. 그리고, 데이터 영역(W11)을 대상으로 한 컨벌루션 처리에 의해 얻어진 값이, 중간 데이터(DT12)의 도면 중, 좌하의 샘플(SP21)의 샘플값이 된다.
데이터 영역(W11)이 1차원×20샘플의 영역이 되는 것은, 컨벌루션 레이어(1)에서의 컨벌루션 처리에 이용되는 필터가 20×1탭의 필터이기 때문이다.
또한, 컨벌루션 레이어(1)에서의 컨벌루션 처리의 샘플 전진수는 10이기 때문에, 즉 10샘플 전진의 컨벌루션 처리이기 때문에, 데이터 영역(W11)을 대상으로 한 컨벌루션 처리의 다음에 행해지는 컨벌루션 처리에서는, 데이터 영역(W12)이 처리 대상의 영역이 된다.
이 데이터 영역(W12)은, 데이터 영역(W11)의 선두에 있는 샘플(SP11)에서 보아, 10샘플만큼 전에 있는 샘플(SP12)을 선두로 하는, 연속해서 나열하는 20개의 샘플로 이루어지는 영역이다. 즉, 데이터 영역(W12)은, 데이터 영역(W11)을 과거 방향으로 10샘플만큼 비킨 영역이다. 여기서는, 데이터 영역(W12)은, 샘플(SP12)로부터 샘플(SP14)까지의 영역으로 되어 있다.
데이터 영역(W12)를 대상으로 한 컨벌루션 처리에서는, 데이터 영역(W11)에서의 경우와 마찬가지로, 입력 데이터(DT11)에서의 샘플(SP12)부터 샘플(SP14)까지의 20개의 각 샘플과 필터 계수가 컨벌루션된다. 그리고, 데이터 영역(W12)을 대상으로 한 컨벌루션 처리에 의해 얻어진 값이, 중간 데이터(DT12)의 도면 중, 좌하로부터 상방향으로 2번째의 샘플(SP22)의 샘플값이 된다.
컨벌루션 레이어(1)에서는, 4개의 필터마다, 처리 대상으로 하는 데이터 영역을 10샘플씩 비켜 가는 컨벌루션 처리가 반복하여 행해지고, 중간 데이터(DT12)가 생성된다. 중간 데이터(DT12)에서의 4개 차원의 데이터의 각각은, 컨벌루션 레이어(1)에서의 4개의 필터에 의한 컨벌루션 처리에서 얻어진 데이터의 각각이다.
또한, 풀링 레이어(1)에서는, 1번째 차원의 샘플(SP21)부터 샘플(SP23)까지의 종방향으로 연속해서 나열하는 10개의 샘플로 이루어지는 데이터 영역(W21)을 처리 대상으로 하고, 최대치를 추출하는 처리가 행해진다.
즉, 데이터 영역(W21) 내 있는 10개의 샘플의 샘플값 중의 최대치가, 중간 데이터(DT13)의 도면 중, 좌하의 샘플(SP31)의 샘플값이 된다.
데이터 영역(W21)을 대상으로 하여 최대치를 추출하는 처리가 행해지면, 다음에 데이터 영역(W21)의 선두에 있는 샘플(SP21)에서 보아, 10샘플만큼 전(前)에 있는 샘플을 선두로 하는, 연속해서 나열하는 10개의 샘플로 이루어지는 영역이 다음의 데이터 영역이 된다. 즉, 풀링 레이어(1)에서의 풀링 처리의 샘플 전진수는 10이기 때문에, 처리 대상으로 하는 데이터 영역이 10샘플분만큼 비켜진다.
그리고, 그와 같이 하여 얻어진 새로운 데이터 영역을 대상으로 하여 최대치를 추출하는 처리가 행해지고, 이후에도 같은 처리가 행해져 가서, 중간 데이터(DT12)가 중간 데이터(DT13)로 변환된다.
도 1의 설명으로 돌아와, 풀링 레이어(1)에서의 풀링 처리에 의해 중간 데이터(DT13)가 얻어지면, 3번째의 레이어인 컨벌루션 레이어(2)에서는, 8종류의 필터가 이용되어, 컨벌루션 레이어(1)에서의 경우와 마찬가지의 컨벌루션 처리가 행해진다.
즉, 컨벌루션 레이어(2)에서는, 탭수가 10×4인, 즉 10×4탭인 서로 다른 8개의 필터가 이용되어, 그들의 필터마다 1샘플 전진의 컨벌루션 처리(필터 처리)가 행해진다.
이에 의해, 중간 데이터(DT13)가 8차원×70샘플의 중간 데이터(DT14)로 변환된다. 즉, 중간 데이터(DT14)는 8차원의 데이터로 되어 있고, 각 차원의 데이터는 70개의 샘플(데이터)로 이루어진다.
4번째의 레이어인 풀링 레이어(2)에서는, 10샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 10샘플 전진의 풀링 처리가 중간 데이터(DT14)에 대해 행해진다. 이에 의해, 중간 데이터(DT14)가 8차원×7샘플의 중간 데이터(DT15)로 변환된다.
또한, 5번째의 레이어인 컨벌루션 레이어(3)에서는, 1종류의 필터가 이용되어, 컨벌루션 레이어(1)에서의 경우와 마찬가지의 컨벌루션 처리가 행해진다.
즉, 컨벌루션 레이어(3)에서는, 7×8탭의 1개의 필터가 이용되어, 1샘플 전진의 컨벌루션 처리(필터 처리)가 행해진다.
이에 의해, 중간 데이터(DT15)가 식별기의 출력인 1차원×1샘플의 식별 결과 데이터(DT16)로 변환되고, 이와 같이 하여 얻어진 식별 결과 데이터(DT16)가, 입력 데이터(DT11)에 대한 식별 처리의 결과(식별 결과)로서 출력된다.
이상과 같은 컨벌루션 레이어(1)로부터 컨벌루션 레이어(3)까지의 5개의 레이어에서의 연산 처리가, 뉴럴 네트워크 구조의 식별기에 의해 행해진다.
그런데, 이와 같은 뉴럴 네트워크 구조의 식별기에 의한 각 레이어에서는, 직전의 레이어에서의 연산 처리에서 얻어진 데이터 전부를 대상으로 하고, 현 레이어에서의 연산 처리를 행할 필요가 있기 때문에, 연산 처리의 처리량이나 연산 처리에 필요해지는 메모리의 메모리량이 많아져 버린다.
여기서, 도 1에 도시한 뉴럴 네트워크 구조의 식별기에 의한 처리에 대해 프레임 처리를 적용하는 것을 생각한다고 한다.
프레임 처리란, 입력 데이터에 대해 프레임을 단위로 하여 처리를 행하는 것, 즉 입력 데이터의 프레임의 선두 또는 말미의 위치를 처리의 시작 위치로 하여 처리를 행하는 것을 말한다. 프레임 처리는, 주로 연산 처리를 위한 메모리량을 삭감하거나, 예를 들면 입력 데이터 1024샘플에 대해 1회의 출력을 행하는 등, 뉴럴 네트워크의 출력을 산출하는 빈도를 조정하거나 하는 것을 목적으로 하여 적용된다.
예를 들면 도 3에 도시하는 바와 같이, 도 1에서의 경우와 마찬가지의 뉴럴 네트워크 구성으로, 식별기에 의해 행해지는 처리에 대해 프레임 처리를 적용한다고 한다. 즉, 입력 데이터(DT11)의 1프레임분인 1024샘플에 대해, 1회의 빈도로 식별 결과 데이터(DT16)를 산출하는 프레임 처리를 행한다고 한다. 또한, 도 3에서 도 1에서의 경우와 대응하는 부분에는 같은 부호를 붙이고 있고, 그 설명은 적절히 생략한다.
도 3에서, 입력 데이터(DT11)에서의 시간적으로 가장 새로운 프레임을 현 프레임으로 한다. 현 프레임은, 입력 데이터(DT11)에서의 도면 중, 가장 하측에 연속해서 나열하는 1024개의 샘플로 이루어지는 구간으로 되어 있고, 도 3에서는 입력 데이터(DT11)에서의 현 프레임의 부분에는 사선(해치)가 시행되어 있다.
입력 데이터(DT11)의 현 프레임에 대해 하나의 식별 결과 데이터(DT16)를 산출하려고 하면, 컨벌루션 레이어(1)에서는 데이터 영역(W41)을 처리 대상으로 한 컨벌루션 처리가 행해지게 된다.
데이터 영역(W41)은, 현 프레임을 구성하는 1024개의 샘플과, 그 현 프레임의 시간적으로 직전의 프레임(이하, 직전 프레임이라고도 칭한다)에서의 최후의 6개의 샘플이 되는 합계 1030개의 샘플로 이루어지는 구간으로 되어 있다.
이때, 입력 데이터(DT11)에서의 현 프레임에서의 처리 대상 이외의 데이터(구간)에 대한 컨벌루션은, 과거의 프레임에서 행해지도록 할 수 있으면, 점선으로 그려진 데이터 영역(W42) 부분에 관한 연산 처리와, 그 연산 처리를 위한 메모리량을 삭감할 수 있다.
그렇지만, 도 3에 도시하는 뉴럴 네트워크의 구성에서는, 그와 같은 처리량과 메모리량의 삭감을 행할 수가 없다. 이것은 현 프레임의 처리 경계와, 직전 프레임의 처리 경계가 일치하지 않기 때문이다.
여기서 프레임의 처리 경계란, 예를 들면 그 프레임에 관한 연산 처리를 시작해야 할 데이터의 샘플 위치, 즉 프레임의 선두 또는 말미의 위치나, 그 프레임에 관한 연산 처리가 종료된 후, 다음의 연산 처리를 시작해야 할 데이터의 샘플 위치이다.
예를 들면 현 프레임에 관한 처리 경계(境界)는, 현 프레임의 연산 처리가 종료된 후, 다음의 연산 처리를 시작해야 할 입력 데이터(DT11)의 샘플 위치이다. 이 샘플 위치가 현 프레임과 인접하는 직전 프레임에 관한 연산 처리가 시작되는 입력 데이터(DT11)의 샘플 위치, 즉 직전 프레임의 처리 경계인, 직전 프레임의 말미(최후)의 샘플 위치와 일치하지 않으면 연산량이나 메모리량을 삭감할 수가 없다.
구체적으로는, 예를 들면 입력 데이터(DT11) 중, 도 3 중, 가장 하측에 있는 샘플로부터 n(단 1∼n)번째에 있는 샘플을 n번째의 샘플이라고 한다. 따라서 예를 들면 입력 데이터(DT11)의 도면 중, 가장 하측에 있는 샘플, 즉 가장 새로운 시각의 샘플이 1번째의 샘플이다.
이 경우, 컨벌루션 레이어(1)에서는, 현 프레임에서, 우선 입력 데이터(DT11) 중의 1번째의 샘플부터 20번째의 샘플에 대해, 20×1탭의 필터에 의한 컨벌루션 처리가 행해진다.
또한, 컨벌루션 레이어(1)에서의 전진수(샘플 전진수)는 10샘플이기 때문에, 다음에, 11번째의 샘플부터 30번째의 샘플에 대해 20×1탭의 필터에 의한 컨벌루션 처리가 행해진다.
그 후, 마찬가지의 컨벌루션 처리가 반복하여 행해져, 현 프레임에서는, 최종적으로는 입력 데이터(DT11) 중의 1011번째의 샘플부터 1030번째의 샘플에 대해 20×1탭의 필터에 의한 컨벌루션 처리가 행해진다.
지금까지가 컨벌루션 처리의 처리 대상이 된 데이터 영역이, 입력 데이터(DT11)에서의 데이터 영역(W41)이고, 현 프레임에서는 이 데이터 영역(W41)이 처리 대상의 영역이 되어 컨벌루션 처리가 행해진다.
또한, 1011번째의 샘플부터 1030번째의 샘플에 대한 컨벌루션 처리가 행해지면, 그 다음은, 1021번째의 샘플부터 1040번째의 샘플이 컨벌루션 처리의 대상으로 되기 때문에, 컨벌루션 처리의 현 프레임의 처리 경계는 1021번째의 샘플이 된다.
이 경우, 현 프레임의 직전에 있는 직전 프레임에서는, 1021번째의 샘플부터 1040번째의 샘플에 대해 컨벌루션 처리가 행해지지 않으면 안되는 것이다.
그러나, 실제로는 그와 같은 컨벌루션 처리는 행해지지 않고, 프레임 처리를 행하는 경우, 즉 프레임을 단위로 하여 처리를 행하는 경우, 직전 프레임에서는, 현 프레임의 프레임 경계인 1025번째의 샘플부터 컨벌루션 처리가 행해지게 된다.
즉, 직전 프레임의 처리 경계는 1025번째의 샘플이고, 이 1025번째의 샘플과, 현 프레임의 처리 경계인 1021번째의 샘플은 일치하지 않는다.
그 때문에, 상술한 현 프레임에서의 처리 대상 이외의 데이터(구간)에 대한 컨벌루션, 즉 여기서는 1021번째의 샘플로부터의 컨벌루션이, 직전 프레임에서 행해지도록 할 수가 없고, 그 결과, 처리량과 메모리량의 삭감을 행할 수가 없다.
게다가 도 3의 예에서는, 프레임 처리를 적용했기 때문에 컨벌루션 레이어(1)에서의 컨벌루션 처리는, 도 1을 참조하여 설명한 컨벌루션 레이어(1)에서의 컨벌루션 처리와는 다른 처리가 되어 버린다. 즉, 도 1을 참조하여 설명한 예와는 다른 데이터 영역에 대한 컨벌루션 처리가 행해져 버린다.
그렇게 하면, 결국, 도 1을 참조하여 설명한 예와 같은 컨벌루션 처리가 행해지도록 하기 위해서는, 1프레임분인 1024샘플마다, 입력 데이터(DT11) 전부에 대해 도 1을 참조하여 설명한 처리를 행할 필요가 있고, 결과로서 많은 처리량과 메모리량이 필요해진다.
그래서 이하의 실시 형태에서는, 입력 데이터에 대해 프레임 단위로 연산 처리를 행하는 프레임 처리를 적용하고, 뉴럴 네트워크의 구조를 프레임 처리에서 현 프레임과 과거 프레임의 처리 경계가 일치하는 구조로 함으로써, 적어도 메모리량을 삭감할 수 있도록 했다.
구체적으로는, 적어도 하나의 레이어에서, 그 레이어에서 프레임에 대해 행해지는 연산 처리의 처리 단위 또는 샘플 전진수가, 입력 데이터의 형상에 의해 정해지는 크기 또는 전진수로 되어 있는 뉴럴 네트워크 구조의 식별기가 이용된다.
환언하면, 이하의 실시 형태를 적용한 뉴럴 네트워크 구조의 식별기에서는, 서로 인접하는 프레임의 처리 경계가 일치하도록, 각 레이어에서의 연산 처리의 처리 단위나 샘플 전진수, 프레임 길이(프레임의 샘플수)가 정해져 있다.
또한, 뉴럴 네트워크 구조의 식별기로 프레임 처리가 행해지고, 1프레임의 크기(프레임 길이)가 미리 정해져 있는 경우에는, 입력 데이터의 형상뿐만 아니라(1) 프레임의 크기(프레임 길이)도 고려되어 레이어에서 행해지는 연산 처리의 처리 단위나 샘플 전진수가 정해지도록 하면 좋다.
여기서, 데이터의 형상(데이터 형상)은, 상술한 바와 같이 데이터의 차원수와 각 차원에서의 데이터수(데이터 샘플수)에 의해 정해진다.
예를 들면 도 1에 도시한 입력 데이터(DT11)는, 1차원의 7910샘플로 이루어지는 데이터이기 때문에, 1차원×7910샘플의 데이터 형상의 데이터가 된다. 또한, 예를 들면 도 1에 도시한 중간 데이터(DT12)는, 4차원×790샘플의 데이터 형상의 데이터가 된다.
또한, 레이어에서 행해지는 연산 처리의 처리 단위의 크기란, 그 레이어에서 1프레임분의 연산 처리가 행해질 때의 처리의 최소 단위이다. 즉, 예를 들면 하나의 레이어에서 처리 대상이 되는 데이터 영역이 비켜지면서 같은 처리가 복수회 반복 행해질 때의 데이터 영역의 크기, 즉 데이터 영역 내에 포함되는 샘플의 샘플수가 처리 단위의 크기이다.
구체적으로는, 예를 들면 도 1을 참조하여 설명한 컨벌루션 레이어(1)라면, 처리 단위란 한번에 컨벌루션 처리(필터 처리)가 행해지는 20개의 샘플로 이루어지는 데이터 영역이고, 이 데이터 영역은 필터의 탭수에 의해 정해진다.
또한, 예를 들면 도 1을 참조하여 설명한 풀링 레이어(1)라면, 처리 단위란 최대치의 추출 대상이 되는 10개의 샘플로 이루어지는 데이터 영역이고, 이 데이터 영역은 샘플 폭에 의해 정해진다.
이와 같이 입력 데이터의 형상이나 프레임 길이에 대해 정해지는 탭수나, 샘플 폭(데이터 영역의 크기), 샘플 전진수로 레이어의 연산 처리가 행해지는 뉴럴 네트워크 구조(구성)의 식별기를 이용한 식별 처리가 행해지도록 하면, 서로 인접하는 프레임에서의 연산 처리의 처리 경계를 일치시킬 수 있다. 이에 의해, 적어도 연산 처리시에 일시적으로 필요해지는 메모리의 메모리량을 삭감할 수 있고, 보다 효율 좋게 식별을 행할 수가 있다.
이하의 실시 형태에 의하면, 예를 들면 수프레임분의 입력 데이터(DT11)가 있는 상태에서, 현 프레임으로부터 시간적으로 과거 방향으로 프레임 단위로 순번대로 처리를 행해 가는 경우에도, 입력 데이터(DT11)가 프레임 단위로 순서대로 입력되어, 현 프레임으로부터 시간적으로 미래 방향으로 프레임 단위로 순번대로 처리를 행해 가는 경우에도, 인접하는 프레임에서의 연산 처리의 처리 경계를 일치시킬 수 있다. 또한, 프레임에 대한 연산 처리의 시작 위치는, 프레임 선두의 샘플이라도 좋고, 프레임 말미의 샘플이라도 좋다.
또한, 여기서는 입력 데이터의 형상이나 프레임 길이에 대해 탭수나, 샘플 폭, 샘플 전진수가 정해지는 예에 관해 설명한다. 그러나, 서로 인접하는 프레임에서의 연산 처리의 처리 경계가 일치하도록, 입력 데이터의 형상에 대해 데이터의 프레임 길이, 즉 프레임을 구성하는 샘플수(데이터수)가 정해지도록 하여도 좋다. 그와 같은 경우에도 서로 인접하는 프레임에서의 연산 처리의 처리 경계를 일치시켜, 보다 효율 좋게 식별을 행할 수가 있다.
1. 제1 실시 형태
이하, 본 기술의 제1 실시 형태에 관해, 도면을 참조하여 상세히 설명한다.
1. 1 뉴럴 네트워크 구조의 식별기에 의한 식별 처리의 구체례
우선, 본 실시 형태에 관한 뉴럴 네트워크 구조의 식별기에 의한 식별 처리의 구체례에 관해 설명한다.
본 실시 형태에 관한 뉴럴 네트워크 구조의 식별기에서는, 예를 들면 도 4에 도시하는 바와 같이 각 레이어에서의 처리가 행해진다.
즉, 도 4에 도시하는 예에서는, 식별기에 의한 식별 처리로서 5개의 각 레이어의 처리가 순번대로 행해지고, 오디오 데이터인 1차원(1채널)의 입력 데이터(DT11')로부터, 최종적인 식별 결과인 식별 결과 데이터(DT16')가 산출된다.
특히, 여기서는 프레임을 단위로 하여 시간 방향으로 과거의 프레임으로부터 미래의 프레임을 향하여 순번대로, 각 프레임에 관해 5개의 각 레이어의 처리가 순번대로 행해지고, 프레임마다 식별 결과 데이터(DT16')가 출력되는 프레임 처리가 행해진다. 이 예에서는 1프레임은 1024개의 샘플에 의해 구성되어 있고, 하나의 프레임의 처리에서는 입력 데이터(DT11')가 식별기의 입력이 되고, 하나의 식별 결과 데이터(DT16')가 출력된다.
또한, 도 4에서 각 사각형은 데이터를 나타내고 있다. 또한, 각 데이터에서의 도면 중, 종방향은 시간 방향을 나타내고 있고, 도면 중, 횡방향은 차원을 나타내고 있다. 특히, 각 데이터에서의 도면 중, 하방향이 보다 새로운 시각의 방향(미래 방향)으로 되어 있다.
또한, 도면 중, 횡방향의 화살표는 데이터의 변환을 나타내고 있다. 여기서는, 1번째의 레이어는 컨벌루션 레이어(1')로 되어 있고, 2번째의 레이어는 풀링 레이어(1)로 되어 있고, 3번째의 레이어는 컨벌루션 레이어(2)로 되어 있다. 또한, 4번째의 레이어는 풀링 레이어(2)로 되어 있고, 5번째의 레이어는 컨벌루션 레이어(3)로 되어 있다.
이들 5개의 레이어 중, 2번째의 풀링 레이어(1)로부터 5번째의 컨벌루션 레이어(3)까지의 각 레이어의 처리는, 도 1을 참조하여 설명한 2번째의 풀링 레이어(1)으로부터 5번째의 컨벌루션 레이어(3)까지의 각 레이어의 처리와 같기 때문에, 그 설명은 적절히 생략한다.
이 예에서는, 입력 데이터(DT11')는, 도 1에 도시한 7910샘플로 이루어지는 입력 데이터(DT11) 중의 가장 새로운 시각의 샘플인 1번째의 샘플부터 1036번째의 샘플까지의 부분의 데이터로 되어 있다.
여기서, 1프레임이 1024샘플로 이루어진다고 하면, 입력 데이터(DT11')에서의 1번째의 샘플부터 1024번째의 샘플까지의 구간이 하나의 프레임이 되고, 이하에서는 이 프레임을 현 프레임으로 하는 것으로 한다.
또한, 입력 데이터(DT11')에서의 1025번째의 샘플부터 1036번째의 샘플까지의 각 샘플은, 현 프레임의 시간적으로 직전에 있는 직전 프레임의 샘플이 된다.
컨벌루션 레이어(1')에서는, 이와 같은 현 프레임의 데이터(샘플)와, 직전 프레임의 일부의 데이터로 이루어지는 입력 데이터(DT11')가 입력으로 되어 컨벌루션 처리가 행해지고, 입력 데이터(DT11')가 중간 데이터(DT12')로 변환되다. 또한, 보다 상세하게는 현 프레임에서의 컨벌루션 레이어(1')의 컨벌루션 처리에서는, 4차원×790샘플의 중간 데이터(DT12') 중의 일부의 데이터(PDT1)만을 얻을 수 있고, 나머지 데이터(PDT2)의 부분은 과거의 프레임에서의 컨벌루션 처리에서 얻어진 것으로 되어 있다.
컨벌루션 레이어(1')에서의 컨벌루션 처리에서는, 입력 데이터(DT11')에 대해 탭수가 20×1인, 즉 20×1탭인 4종류의 필터가 이용되어, 그들의 필터마다 8샘플 전진의 컨벌루션 처리(필터 처리)가 행해진다.
특히 컨벌루션 레이어(1')에서는, 프레임을 단위로 하는 프레임 처리가 행해진다. 즉, 컨벌루션 레이어(1')에서는 프레임마다, 4종류의 20×1탭의 필터의 필터 계수를 이용한 8샘플 전진의 컨벌루션 처리(필터 처리)가, 프레임에 대한 연산 처리로서 행해진다.
이 경우, 현 프레임에 대한 처리에서는, 현 프레임의 모든 샘플이 포함되는 데이터 영역이 대상 영역이 되어 컨벌루션 처리가 행해진다. 그리고, 그 컨벌루션 처리의 시간적으로 전의 타이밍에서는, 컨벌루션 레이어(1')의 연산 처리로서, 직전 프레임의 모든 샘플이 포함되는 데이터 영역이 대상 영역이 되어 컨벌루션 처리가 행해지고 있다.
또한, 2번째의 레이어인 풀링 레이어(1)에서는, 10샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 10샘플 전진의 풀링 처리가 중간 데이터(DT12')에 대해 행해진다. 이에 의해, 중간 데이터(DT12')가 4차원×79샘플의 중간 데이터(DT13')로 변환된다.
3번째의 레이어인 컨벌루션 레이어(2)에서는, 탭수가 10×4인 서로 다른 8개의 필터가 이용되어, 그들의 필터마다 1샘플 전진의 컨벌루션 처리(필터 처리)가 행해진다. 이에 의해, 중간 데이터(DT13')가 8차원×70샘플의 중간 데이터(DT14')로 변환된다.
또한, 4번째의 레이어인 풀링 레이어(2)에서는, 10샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 10샘플 전진의 풀링 처리가 중간 데이터(DT14')에 대해 행해진다. 이에 의해, 중간 데이터(DT14')가 8차원×7샘플의 중간 데이터(DT15')로 변환된다.
최후에 5번째의 레이어인 컨벌루션 레이어(3)에서는, 탭수가 7×8인 1개의 필터가 이용되어 1샘플 전진의 컨벌루션 처리가 행해지고, 중간 데이터(DT15')가 1차원×1샘플의 식별 결과 데이터(DT16')로 변환된다. 이와 같이 하여 얻어진 식별 결과 데이터(DT16')가, 입력 데이터(DT11')에 대한 식별 처리의 결과(식별 결과)로서 출력된다.
여기서, 컨벌루션 레이어(1')에서의 컨벌루션 처리와, 도 1을 참조하여 설명한 컨벌루션 레이어(1)에서의 컨벌루션 처리를 비교하면, 컨벌루션 레이어(1)에서는 샘플 전진수가 10이었음 대해, 컨벌루션 레이어(1')에서는 샘플 전진수가 8로 되어 있다.
이와 같이 샘플 전진수를 8로 하면, 현 프레임에서는 1번째의 샘플부터 20번째의 샘플까지의 데이터 영역이 대상이 되어 컨벌루션 처리가 행해지고, 계속해서 9번째의 샘플부터 28번째의 샘플까지의 데이터 영역이 대상이 되어 컨벌루션 처리가 행해진다.
그리고, 그 이후에도 데이터 영역이 8샘플씩 비켜지면서 컨벌루션 처리가 행해져 가고, 최후에(1017)번째의 샘플부터 1036번째의 샘플까지의 데이터 영역이 대상이 되어 컨벌루션 처리가 행해진다.
이 경우, 최후의 컨벌루션 처리가 행해지는 데이터 영역의 선두는 1017번째의 샘플이기 때문에, 그 샘플로부터 시간 방향으로 8샘플 전에 있는 1025번째의 샘플은 현 프레임에서의 처리 경계가 된다.
여기서는 1프레임은 1024샘플이고, 이 1025번째의 샘플은 직전 프레임의 말미(최후)의 샘플이 되기 때문에, 1025번째의 샘플은 직전 프레임에서의 처리 경계가 된다. 따라서 도 4의 예에서는 서로 인접하는 현 프레임에서의 처리 경계와, 직전 프레임에서의 처리 경계가 일치하게 된다. 특히 이 예에서는, 프레임의 처리 경계의 위치는 프레임의 경계 위치가 된다. 이에 의해, 현 프레임에서의 처리 대상 이외의 데이터(구간)에 대한 컨벌루션은, 과거의 프레임에서의 행해지게 된다.
보다 구체적으로는, 이 예에서는 프레임 처리가 행해지기 때문에, 입력 데이터(DT11)의 1024샘플의 입력에 대해, 하나의 식별 결과 데이터(DT16')가 산출된다.
이 경우, 현 프레임에서는 입력 데이터(DT11) 중의 입력 데이터(DT11')의 부분이 처리 대상의 데이터 영역이 되어 컨벌루션 레이어(1')의 컨벌루션 처리가 행해진다.
그 때문에, 현 프레임에서는, 입력 데이터(DT11)에서의 점선으로 그려진 데이터 영역(W51)의 부분에 관해서는 컨벌루션 처리를 행할 필요가 없고, 그 정도 만큼 컨벌루션 처리의 처리량과, 그 컨벌루션 처리를 위해 입력 데이터(DT11)의 데이터 영역(W51) 부분의 데이터 등을 유지해 두는 메모리의 메모리량을 삭감할 수 있다.
또한, 이 경우, 현 프레임에서의 컨벌루션 레이어(1')의 컨벌루션 처리에서는, 중간 데이터(DT12')에서의 도 4 중, 하측의 4차원×128샘플 부분의 데이터(PDT1)만을 얻을 수 있고, 중간 데이터(DT12')의 나머지 부분의 데이터(PDT2)는 얻어지지 않는다.
그러나, 데이터(PDT2)에 관해서는, 현 프레임보다도 시간적으로 과거의 복수의 프레임에서의 컨벌루션 레이어(1')의 컨벌루션 처리에서 이미 얻어져 있기 때문에, 그들의 컨벌루션 처리에서 얻어진 데이터(PDT2)를 유지해 두면 좋다. 그러면 현 프레임에서의 컨벌루션 레이어(1')의 컨벌루션 처리가 종료된 시점에서 중간 데이터(DT12')를 얻을 수 있기 때문에, 그 후, 곧 풀링 레이어(1)의 처리를 시작할 수 있다.
또한, 도 4에서는 컨벌루션 레이어(1')만, 인접하는 각 프레임에서의 처리 경계가 일치하는 뉴럴 네트워크 구조의 식별기를 이용하는 경우에 관해 설명했다. 그러나, 컨벌루션 레이어(1')의 후의 레이어에서도 인접하는 각 프레임에서의 처리 경계가 일치하도록 하여도 좋다.
그와 같은 경우, 본 실시 형태에 관한 뉴럴 네트워크 구조의 식별기에서는, 예를 들면 도 5에 도시하는 바와 같이 각 레이어에서의 처리가 행해진다. 또한, 도 5에서 도 4에서의 경우와 대응하는 부분에는 동일한 부호를 붙이고 있고, 그 설명은 적절히 생략한다.
도 5에 도시하는 예에서는, 식별기에 의한 식별 처리로서 5개의 각 레이어의 처리가 순번대로 행해지고, 오디오 데이터인 1차원(1채널)의 입력 데이터(DT11')로부터, 최종적인 식별 결과인 식별 결과 데이터(DT25)가 산출된다.
특히, 여기서는 프레임을 단위로 하여 시간 방향에서 과거의 프레임으로부터 미래의 프레임을 향하여 순번대로, 각 프레임에 관해 5개의 각 레이어의 처리가 순번대로 행해지고, 프레임마다 식별 결과 데이터(DT25)가 출력되는 프레임 처리가 행해진다.
또한, 도 5에서 각 사각형은 데이터를 나타내고 있다. 또한, 각 데이터에서의 도면 중, 종방향은 시간 방향을 나타내고 있고, 도면 중, 횡방향은 차원을 나타내고 있다. 특히, 각 데이터에서의 도면 중, 하방향이 보다 새로운 시각의 방향(미래 방향)으로 되어 있다.
또한, 도면 중, 횡방향의 화살표는 데이터의 변환을 나타내고 있다. 여기서는, 1번째의 레이어는 컨벌루션 레이어(1')로 되어 있고, 2번째의 레이어는 풀링 레이어(1')로 되어 있고, 3번째의 레이어는 컨벌루션 레이어(2')로 되어 있다. 또한, 4번째의 레이어는 풀링 레이어(2')로 되어 있고, 5번째의 레이어는 컨벌루션 레이어(3')로 되어 있다.
이들 5개의 레이어 중, 1번째의 레이어인 컨벌루션 레이어(1')에서는, 도 4를 참조하여 설명한 컨벌루션 레이어(1')에서의 경우와 완전히 같은 처리가 행해지기 때문에, 그 설명은 적절히 생략한다.
도 5에 도시하는 뉴럴 네트워크 구조는, 도 1에 도시한 뉴럴 네트워크 구조에서의 각 레이어에서의 샘플 전진수나 탭수를 미약하게 변경함으로써, 각 레이어에서 인접하는 프레임에서의 처리 경계가 일치하도록 한 것이다.
이와 같이 도 5에 도시하는 뉴럴 네트워크 구조는, 도 1에 도시한 뉴럴 네트워크 구조를 미약하게 변경했을 뿐의 것이기 때문에, 이와 같은 뉴럴 네트워크 구조의 변화가 식별 성능에 주는 영향은 거의 없다.
이 예에서는, 도 4를 참조하여 설명한 경우와 마찬가지로, 컨벌루션 레이어(1')에서는 입력 데이터(DT11')를 입력으로 하여 프레임 처리가 행해진다.
즉, 컨벌루션 레이어(1')에서는 현 프레임의 처리로서, 입력 데이터(DT11')에 대해, 탭수가 20×1인 4종류의 필터가 이용되어, 그들의 필터마다 8샘플 전진의 컨벌루션 처리가 행해진다. 이에 의해, 입력 데이터(DT11')가 4차원×128샘플의 중간 데이터(DT21)로 변환된다. 이 중간 데이터(DT21)는, 도 4에 도시한 데이터(PDT1) 그 자체이다.
이와 같은 컨벌루션 레이어(1')에서의 컨벌루션 처리에서는, 도 4에서의 경우와 마찬가지로, 프레임 처리를 적용하지 않는 경우와 비교하여 데이터 영역(W61)의 분만큼 처리량과 메모리량을 삭감할 수 있다.
또한, 2번째의 레이어인 풀링 레이어(1')에서는, 8샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 8샘플 전진의 풀링 처리가 중간 데이터(DT21)에 대해 행해진다. 이에 의해, 중간 데이터(DT21)가 4차원×16샘플의 중간 데이터(PDT21)로 변환된다.
여기서는, 풀링 레이어(1')에서의 샘플 폭과 샘플 전진수가, 입력 데이터(DT11')의 데이터 형상이나 프레임 길이, 컨벌루션 레이어(1')에서의 처리, 즉 컨벌루션 레이어(1')의 구성(구조)에 대해 정해지는 것으로 되어 있다. 그 때문에, 풀링 레이어(1')에서는 중간 데이터(DT21)에서의 서로 인접하는 프레임의 처리 경계를 일치시킬 수 있고, 그 결과, 풀링 레이어(1')에서는 프레임 처리를 적용하지 않는 경우와 비교하여 데이터 영역(W62)의 분만큼 처리량과 메모리량을 삭감할 수 있다.
3번째의 레이어인 컨벌루션 레이어(2')에서는, 탭수가 10×4인 서로에게 다른 8개의 필터가 이용되어, 그들의 필터마다 2샘플 전진의 컨벌루션 처리가 행해진다.
그 때문에, 컨벌루션 레이어(2')에서는, 입력이 되는 데이터의 형상, 환언하면 처리 대상이 되는 데이터 영역은, 4차원×24샘플이 되지만, 현 프레임의 풀링 레이어(1')에서의 처리에서 얻어진 중간 데이터(PDT21)는 4차원×16샘플의 데이터이다.
그러나, 현 프레임의 시간적으로 하나 전의 직전 프레임에서의 풀링 레이어(1')에서 얻어진 중간 데이터 중의 반분의 데이터인 4차원×8샘플의 중간 데이터(PDT22)를 유지해 두면, 중간 데이터(PDT21)와 중간 데이터(PDT22)로부터 4차원×24샘플의 중간 데이터(DT22)를 얻을 수 있다.
컨벌루션 레이어(2')에서는, 이와 같은 중간 데이터(DT22)에 대해, 탭수가 10×4인 서로에게 다른 8개의 필터가 이용되어, 그들의 필터마다 2샘플 전진의 컨벌루션 처리가 행해진다. 이에 의해, 중간 데이터(DT22)가 8차원×8샘플에 중간 데이터(DT23)로 변환된다.
컨벌루션 레이어(2')에서의 탭수와 샘플 전진수는, 입력 데이터(DT11')의 데이터 형상이나 프레임 길이, 컨벌루션 레이어(2')보다도 전의 각 레이어의 구성(구조)에 대해 정해지는 것으로 되어 있다. 그 때문에, 컨벌루션 레이어(2')에서는 중간 데이터(DT22)에서의 인접하는 프레임의 처리 경계를 일치시킬 수 있고, 그 결과, 컨벌루션 레이어(2')에서는 프레임 처리를 적용하지 않는 경우와 비교하여 데이터 영역(W63)의 분만큼 처리량과 메모리량을 삭감할 수 있다.
4번째의 레이어인 풀링 레이어(2')에서는, 8샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 8샘플 전진의 풀링 처리가 중간 데이터(DT23)에 대해 행해진다. 이에 의해, 중간 데이터(DT23)가 8차원×1샘플의 중간 데이터(PDT31)로 변환된다.
여기서는, 풀링 레이어(2')에서의 샘플 폭과 샘플 전진수가, 입력 데이터(DT11')의 데이터 형상이나 프레임 길이, 풀링 레이어(2')보다도 전의 각 레이어의 구성(구조)에 대해 정해지는 것으로 되어 있다. 그 때문에, 풀링 레이어(2')에서는, 중간 데이터(DT23)에서의 서로 인접하는 프레임의 처리 경계를 일치시킬 수 있고, 그 결과, 풀링 레이어(2')에서는 프레임 처리를 적용하지 않는 경우와 비교하여 데이터 영역(W64)의 분만큼 처리량과 메모리량을 삭감할 수 있다.
5번째의 레이어인 컨벌루션 레이어(3')에서는, 탭수가 8×8인 하나의 필터가 이용되어, 1샘플 전진의 컨벌루션 처리가 행해진다.
그 때문에, 컨벌루션 레이어(3')에서는, 입력이 되는 데이터의 형상, 환언하면 처리 대상이 되는 데이터 영역은, 8차원×8샘플이 되지만, 현 프레임의 풀링 레이어(2')에서의 처리에서 얻어진 중간 데이터(PDT31)는 8차원×1샘플의 데이터이다.
그러나, 현 프레임의 시간적으로 전의 7개의 과거 프레임에서의 풀링 레이어(2')에서 얻어진 중간 데이터로 이루어지는 8차원×7샘플의 중간 데이터(PDT32)를 유지해 두면, 중간 데이터(PDT31)와 중간 데이터(PDT32)로부터 8차원×8샘플의 중간 데이터(DT24)를 얻을 수 있다.
컨벌루션 레이어(3')에서는, 이와 같은 중간 데이터(DT24)에 대해, 탭수가 8×8인 필터가 이용되어, 1샘플 전진의 컨벌루션 처리가 행해진다. 이에 의해, 중간 데이터(DT24)가 1차원×1샘플의 식별 결과 데이터(DT25)로 변환된다. 이와 같이 하여 얻어진 식별 결과 데이터(DT25)가, 입력 데이터(DT11')에 대한 식별 처리의 결과(식별 결과)로서 출력된다.
컨벌루션 레이어(3')에서의 탭수와 샘플 전진수는, 입력 데이터(DT11')의 데이터 형상이나 프레임 길이, 컨벌루션 레이어(3')보다도 전의 각 레이어의 구성(구조)에 대해 정해지는 것으로 되어 있다. 그 때문에, 컨벌루션 레이어(3')에서는 중간 데이터(DT24)에서의 서로 인접하는 프레임의 처리 경계를 일치시킬 수 있다.
이상과 같이 도 5를 참조하여 설명한 뉴럴 네트워크 구조의 식별기를 이용하여 식별 처리를 행하면, 도 1에서의 경우와 비교하여, 개략 동등한 성능으로 처리량과 메모리량을 약 6분의1 정도로 삭감할 수 있다.
또한, 도 5에서는 1024샘플(1프레임)에 대해 하나의 식별 결과 데이터(DT25)가 출력되는 경우를 예로서 설명했지만, 도 5에 도시한 뉴럴 네트워크 구조의 식별기에서의 식별 결과 데이터(DT25)의 출력 빈도는, 수프레임에 1번(度) 등으로 하여도 좋다. 이 경우에도 데이터 영역(W61) 내지 데이터 영역(W64)의 분만큼, 처리량과 메모리량을 삭감할 수 있다.
또한, 도 4나 도 5에서는, 설명을 간단하게 하기 위해, 비교적 단순하고 규모가 작은 뉴럴 네트워크를 이용하는 경우를 예로서 설명했지만, 뉴럴 네트워크의 규모, 즉 레이어수 등은 어떤 규모라도 좋다. 본 실시 형태에서는, 뉴럴 네트워크가 복잡하고 대규모가 될 수록 처리량과 메모리량의 삭감률은 높아진다.
또한, 여기서는 뉴럴 네트워크의 레이어에서 행해지는 처리로서, 컨벌루션 처리와 풀링 처리를 예로서 설명했지만, 그 밖에, 레지스터 듀얼 처리 등, 어떤 연산 처리가 행해져도 좋다. 레지스터 듀얼 처리는, 현 레이어의 입력으로 하는 데이터에 그 현 레이어보다도 전의 레이어의 출력을 가산하여 현 레이어의 출력으로 하는 데이터 변환 처리이다.
그 밖에, 본 실시 형태는, 음성 인식이나 화자 식별, 환경음 식별 등의 오디오 데이터의 자동 식별 기술뿐만 아니라, 뉴럴 네트워크를 이용한 여러가지의 기술에 적용 가능하다.
1. 2 뉴럴 네트워크 구조의 예측기를 이용한 회귀 처리의 구체례
예를 들면 이상(以上)에서는 뉴럴 네트워크 구조의 식별기를 이용한 식별 처리에 본 실시 형태를 적용하는 예에 관해 설명했지만, 뉴럴 네트워크 구조의 예측기를 이용한 예측 처리, 즉 회귀 처리에 본 실시 형태를 적용하는 것도 가능하다.
그와 같은 경우, 예측기의 출력이 회귀 처리에 의한 예측 결과를 나타내는 확률이 되는데, 예측기의 각 레이어에서는, 식별기의 각 레이어에서의 경우와 마찬가지의 처리가 행해진다.
구체적인 예로서, 예를 들면 본 실시 형태는 오디오 신호(오디오 데이터)의 저역(低域) 신호에 의거하여, 오디오 신호의 고역 신호를 뉴럴 네트워크를 이용하여 생성하는 대역 확장 기술에 적용 가능하다.
대역 확장 기술로서, 예를 들면 국제 공개 제2015/79946호(이하, 참조 특허 문헌이라고 칭한다)에는, 오디오 신호로부터 얻어지는 복수의 저역 서브 밴드의 저역 서브 밴드 파워로부터, 그 오디오 신호의 고역 성분인 고역 신호를 생성하는 것이 개시되어 있다.
즉, 참조 특허 문헌에서는, 오디오 신호의 저역 서브 밴드 파워가 복수의 저역 서브 밴드마다 구해지고, 그들 복수의 저역 서브 밴드 파워에 의거하여, 오디오 신호의 고역측의 복수의 고역 서브 밴드의 고역 서브 밴드 파워의 추정치가 의사 고역 서브 밴드 파워로서 구해진다. 그리고, 그들의 의사 고역 서브 밴드 파워에 의거하여, 고역 신호가 생성된다.
여기서, 참조 특허 문헌에서는 의사 고역 서브 밴드 파워의 산출은, 참조 특허 문헌의 식(2)에 표시되는 바와 같이, 복수의 저역 서브 밴드 파워를 설명 변수로 하고, 복수의 고역 서브 밴드 파워를 피(被)설명 변수로 했다, 최소제곱법을 이용한 회귀 분석에 의해 미리 구해진 계수가 이용되어 행해지고 있다.
이에 대해, 본 실시 형태를 의사 고역 서브 밴드 파워의 산출에 적용하면, 뉴럴 네트워크를 이용함으로써, 보다 고정밀도에 의사 고역 서브 밴드 파워를 산출하는 것이 가능하다.
그와 같은 경우, 뉴럴 네트워크 구조의 예측기의 입력은, 오디오 신호의 복수 프레임의 각각에서의 복수의 저역 서브 밴드 파워 등으로 이루어진다. 또한, 뉴럴 네트워크 구조의 예측기의 출력은, 1프레임분의 오디오 신호에서의 복수의 고역 서브 밴드의 고역 서브 밴드 파워(의사 고역 서브 밴드 파워) 등으로 이루어진다.
보다 구체적으로는, 예를 들면 뉴럴 네트워크 구조의 예측기의 입력은, 16프레임의 4개의 저역 서브 밴드의 저역 서브 밴드 파워 등이 되고, 또한, 예측기의 출력은, 1프레임의 8개의 고역 서브 밴드의 고역 서브 밴드 파워 등으로 이루어진다.
이 경우, 예측기의 입력은 16행4열의 행렬, 즉 4차원×16샘플의 입력 데이터가 되고, 입력 데이터의 각 샘플은 하나의 저역 서브 밴드에서의 저역 서브 밴드 파워를 나타내고 있다. 또한, 예측기의 출력은 1행8열의 행렬, 즉 8차원×1샘플의 식별 결과 데이터가 되고, 식별 결과 데이터의 각 샘플은 하나의 고역 서브 밴드에서의 고역 서브 밴드 파워를 나타내고 있다.
이와 같이, 뉴럴 네트워크를 이용한 대역 확장 기술에서도, 본 실시 형태를 적용하는 것이 가능하다. 이와 마찬가지로, 뉴럴 네트워크를 이용한 화상이나 영상의 인식 기술이나 물체 영역의 추출 기술 등에도 본 실시 형태는 적용 가능하다.
1. 3 필터 계수의 압축 부호화에 관해
그런데, 뉴럴 네트워크 구조의 식별기가 컨벌루션 레이어의 처리를 행하는 경우, 미리 정해진 필터의 필터 계수가 이용되기 때문에, 그들의 필터 계수를 유지해 두기 위한 메모리가 필요해진다.
구체적으로는, 컨벌루션 레이어에서는, 탭수×필터 종류수분(數分)의 수만큼 필터 계수를 유지해 둘 필요가 있다. 즉, 컨벌루션을 행하는 1 또는 복수의 필터마다 탭수분의 필터 계수를 유지해 둘 필요가 있다.
그 때문에, 컨벌루션 레이어의 수나, 컨벌루션 레이어에서 이용하는 필터의 수가 많아지면, 그 정도 만큼 필터 계수를 유지해 두기 위한 메모리량도 많아져 버린다.
그래서, 본 실시 형태에서는 필터 계수를 압축 부호화함으로써, 필터 계수를 유지해 두기 위한 메모리의 메모리량을 삭감하도록 했다.
본 실시 형태에서는, 값이 0인 필터 계수, 즉 제로 계수의 위치를 나타내는 제로 계수 위치 테이블과, 제로 계수 이외의 필터 계수의 값을 나타내는 비제로 계수 테이블의 2개의 테이블을 유지함으로써 필터 계수의 데이터량의 압축이 실현된다.
구체적으로는, 예를 들면 도 6의 화살표(Q11)에 도시하는 바와 같이, 4×4탭의 필터 계수로 이루어지는 계수 행렬이 있다고 한다. 이 예에서는, 화살표(Q11)로 나타내는 계수 행렬에서 사각형이 필터 계수를 나타내고 있고, 그 사각형 내의 수치가 필터 계수의 값을 나타내고 있다.
본 실시 형태에서는, 이와 같은 계수 행렬이 압축 부호화되어, 화살표(Q12)로 나타내는 제로 계수 위치 테이블과, 화살표(Q13)로 나타내는 비제로 계수 테이블로 변환된다.
화살표(Q12)로 나타내는 제로 계수 위치 테이블은, 원래의 계수 행렬의 탭수와 같은 4×4의 테이블로 되어 있고, 제로 계수 위치 테이블에서의 사각형 내의 수치는, 그 사각형과 같은 위치 관계에 있는 계수 행렬의 필터 계수의 값이 0(제로)인지의 여부를 나타내고 있다.
즉, 제로 계수 위치 테이블에서의 사각형 내의 수치가 0인 경우, 그 사각형과 같은 위치 관계에 있는 계수 행렬의 필터 계수의 값은 0인 것을 나타내고 있다. 따라서 예를 들면 제로 계수 위치 테이블의 도면 중, 좌상의 사각형 내의 값「O」은, 같은 위치 관계에 있는, 계수 행렬의 도면 중, 좌상의 필터 계수의 값이 「O」인 것을 나타내고 있다.
이에 대해, 제로 계수 위치 테이블에서의 사각형 내의 수치가 1인 경우, 그 사각형과 같은 위치 관계에 있는 계수 행렬의 필터 계수의 값은 0이 아닌 것을 나타내고 있다. 따라서 예를 들면 제로 계수 위치 테이블의 도면 중, 가장 좌측의 위로부터 2번째의 사각형 내의 값「1」은, 같은 위치 관계에 있는, 계수 행렬의 도면 중, 가장 좌측의 위로부터 2번째의 필터 계수의 값이 「O」이 아닌 것을 나타내고 있다.
또한, 화살표(Q13)로 나타내는 비제로 계수 테이블은, 원래의 계수 행렬에서의 제로 계수가 아닌 필터 계수의 값을 나타내는 테이블로 되어 있고, 비제로 계수 테이블에서의 하나의 사각형 내의 값은, 계수 행렬에서의 제로 계수가 아닌 하나의 필터 계수의 값을 나타내고 있다.
이 예에서는, 비제로 계수 테이블에서는, 계수 행렬의 도면 중, 좌상의 필터 계수를 시점으로 한 래스터 스캔 순서로, 제로 계수가 아닌 필터 계수의 값, 즉 제로 계수 위치 테이블에서의 값이 「1」인 필터 계수의 값이 나열되어 있다.
예를 들면 비제로 계수 테이블에서의 도면 중, 좌단의 사각형 내의 수치「3」은, 계수 행렬의 최상단의 좌단(左端)부터 3번째에 있는 필터 계수의 값이 「3」인 것을 나타내고 있다.
이와 같이 계수 행렬 그 자체를 유지하는 것이 아니고, 계수 행렬을 압축 부호화하여 얻어진 제로 계수 위치 테이블과 비제로 계수 테이블을 유지함으로써, 필터 계수를 얻기 위한 정보를 유지해 두기 위한 메모리의 메모리량을 삭감할 수 있다. 또한, 이하의 설명에서는, 「계수 행렬(필터 계수)를 압축 부호화하여 제로 계수 위치 테이블과 비제로 계수 테이블을 생성하는」것을 「계수 행렬(필터 계수)를 스파스 표현한다」라고도 칭하고, 이 「압축 부호화에 의해 얻어진 제로 계수 위치 테이블 및 비제로 계수 테이블」을 「스파스 표현된 계수 행렬(필터 계수)」이라고도 칭한다. 또한, 「제로 계수 위치 테이블」을 「스파스 행렬」이라고도 칭하고, 「비제로 계수 테이블」을 「비제로 데이터 큐」라고도 칭한다.
예를 들면 도 6에 도시하는 예에서는, 하나의 필터 계수가 8비트라고 하면, 계수 행렬은 16개의 필터 계수로 구성되기 때문에, 계수 행렬의 데이터량은 128(=16×8)비트가 된다.
이에 대해, 제로 계수 위치 테이블에서의, 하나의 필터 계수가 제로 계수인지의 여부를 나타내는 값이 1비트라고 하면, 제로 계수 위치 테이블의 데이터량은 16(=16×1)비트가 된다.
또한, 비제로 계수 테이블에서, 하나의 필터 계수의 값이 8비트라고 하면, 여기서는 제로 계수가 아닌 필터 계수의 수는 5개이기 때문에, 비제로 계수 테이블의 데이터량은 40(=5×8)비트가 된다.
그렇게 하면, 제로 계수 위치 테이블의 데이터량과 비제로 계수 테이블의 데이터량의 합계는 56(=40+16)비트가 되기 때문에, 원래의 계수 행렬의 데이터량인 128비트에 비하여 데이터량, 즉 메모리량이 약 2분의 1로 압축되어 있는 것을 알 수 있다. 필터 계수로 이루어지는 계수 행렬의 압축률은, 제로 계수의 수가 많아질수록 높아진다.
1. 4 데이터 압축에 의한 처리량 삭감에 관해
또한, 본 실시 형태에서는 계수 행렬을 압축 부호화함으로써, 컨벌루션 레이어에서의 처리를 행하는 경우에서의 처리량도 삭감하는 것이 가능하다.
예를 들면 계수 행렬을 이용한 컨벌루션 처리에서는, 그 계수 행렬을 이용한 행렬 연산이 된다. 그 때문에, 필터 계수가 제로 계수인지의 여부에 의하지 않고, 모든 필터 계수에 관해, 필터 계수와 컨벌루션 대상의 데이터와의 곱(승산 처리)이나, 그들 곱의 합(가산 처리)의 연산이 행해지게 된다.
한편, 계수 행렬을 압축 부호화한 경우, 우선 제로 계수 위치 테이블과 비제로 계수 테이블에 의거한 복호 처리가 행해지고, 그 결과 얻어진 필터 계수가 이용되어 컨벌루션 처리가 행해지게 된다.
이때, 복호 처리에서는 제로 계수 위치 테이블의 값이 0이 아닌 위치에 관해서만, 비제로 계수 테이블로부터 필터 계수를 로드하면 좋기 때문에, 예를 들면 하프만 부호화 등의 다른 압축 방식과 비교한다면 복호시의 처리량이 적어도 된다.
또한, 복호 처리 후의 컨벌루션 처리에서도, 로드한 필터 계수에 관해서만 컨벌루션 대상의 데이터와의 곱(승산 처리)과, 그들 곱의 합(가산 처리)의 연산을 행하면 좋기 때문에, 컨벌루션 처리 자체의 처리량을 삭감할 수 있다.
결과로서, 제로 계수가 많으면, 복호 처리와 컨벌루션 처리의 연산의 합계의 처리량은, 계수 행렬을 그대로 이용한 때가 컨벌루션 처리의 처리량보다도 적어지고, 제로 계수의 수가 많아지면 많아질수록, 처리량의 삭감률은 높아진다.
1. 5 학습 수법에 관해
또한, 계수 행렬에서의 제로 계수의 수는, 뉴럴 네트워크의 계수의 학습에서, 예를 들면 L1 정칙화(正則化)나 L2 정칙화, 그것들에 준하는 정칙화 수법에 의해 늘리는 것이 가능하다. 따라서 뉴럴 네트워크 구조의 식별기의 학습시에 있어서, 정칙화에 의해 제로 계수의 수를 적절하게 조정해 두면, 필터 계수를 압축 부호화함에 의해, 처리량 및 메모리량을 삭감할 수 있다.
또한, 뉴럴 네트워크의 계수의 학습시에 있어서의 정칙화에 관해서는, 예를 들면 「Ian Goodfellow, Yoshua Bengio, and Aaron Courville, Deep Learning, The MIT Press, 2016」 등에 상세히 기재되어 있다.
1. 6 뉴럴 네트워크 처리 장치의 구성례
다음에, 이상에서 설명한 본 실시 형태에 관한 뉴럴 네트워크 처리 장치에 관해 설명한다.
도 7은, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치의 한 실시의 형태의 구성례를 도시하는 도면이다.
도 7에 도시하는 뉴럴 네트워크 처리 장치(11)는, 입력 데이터의 형상이나 프레임 길이에 대해 정해지는 탭수나, 샘플 폭, 샘플 전진수로 레이어의 연산 처리가 행해지는 뉴럴 네트워크 구조의 식별기로 이루어지는 정보 처리 장치이다.
뉴럴 네트워크 처리 장치(11)는, 공급된 입력 데이터에 의거하여 뉴럴 네트워크의 각 레이어의 연산 처리를 행함으로써, 입력 데이터를 대상으로 하는 식별 처리를 행하여, 그 식별 결과를 나타내는 식별 결과 데이터를 출력한다.
또한, 여기서는 뉴럴 네트워크 처리 장치(11)가 도 5를 참조하여 설명한 뉴럴 네트워크 구조의 식별기인 예에 관해 설명한다.
뉴럴 네트워크 처리 장치(11)는, 컨벌루션 처리부(21), 풀링 처리부(22), 컨벌루션 처리부(23), 풀링 처리부(24), 및 컨벌루션 처리부(25)를 갖고 있다.
이 경우, 컨벌루션 처리부(21) 내지 컨벌루션 처리부(25)에 의해, 도 5를 참조하여 설명한 뉴럴 네트워크 구조의 식별기가 구성되게 된다. 환언하면, 컨벌루션 처리부(21) 내지 컨벌루션 처리부(25)에 의해 뉴럴 네트워크가 구성되어 있다.
컨벌루션 처리부(21)는, 공급된 입력 데이터에 대해 컨벌루션 레이어(1')의 처리를 행하여, 그 결과 얻어진 중간 데이터를 풀링 처리부(22)에 공급한다.
컨벌루션 처리부(21)는, 복호부(41), 메모리(42), 및 계수 유지부(43)를 갖고 있다.
예를 들면 계수 유지부(43)는 불휘발성의 메모리로 이루어진다. 이 계수 유지부(43)에는, 미리 학습에 의해 얻어진 탭수가 20×1인 서로 다른 4개 종류의 필터에 관해, 필터의 필터 계수를 압축 부호화하여 얻어진 제로 계수 위치 테이블과 비제로 계수 테이블이 유지되어 있다.
복호부(41)는, 각 필터의 제로 계수 위치 테이블과 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행하여, 각 필터의 제로 계수가 아닌 필터 계수를 얻는다. 메모리(42)는, 예를 들면 휘발성의 메모리로 이루어지고, 공급된 입력 데이터나 연산 중의 데이터를 일시적으로 유지한다.
풀링 처리부(22)는, 컨벌루션 처리부(21)로부터 공급된 중간 데이터에 대해 풀링 레이어(1')의 처리를 행하여, 그 결과 얻어진 중간 데이터를 컨벌루션 처리부(23)에 공급한다. 풀링 처리부(22)는 메모리(51)를 갖고 있다. 메모리(51)는, 예를 들면 휘발성의 메모리로 이루어지고, 컨벌루션 처리부(21)로부터 공급된 중간 데이터나 연산 중의 데이터를 일시적으로 유지한다.
컨벌루션 처리부(23)는, 풀링 처리부(22)로부터 공급된 중간 데이터에 대해 컨벌루션 레이어(2')의 처리를 행하여, 그 결과 얻어진 중간 데이터를 풀링 처리부(24)에 공급한다.
컨벌루션 처리부(23)는, 복호부(61), 메모리(62), 및 계수 유지부(63)를 갖고 있다.
예를 들면 계수 유지부(63)는 불휘발성의 메모리로 이루어진다. 이 계수 유지부(63)에는, 미리 학습에 의해 얻어진 탭수가 10×4인 서로에게 다른 8개의 종류의 필터에 관해, 필터의 필터 계수를 압축 부호화하여 얻어진 제로 계수 위치 테이블과 비제로 계수 테이블이 유지되어 있다.
복호부(61)는, 각 필터의 제로 계수 위치 테이블과 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행하여, 각 필터의 제로 계수가 아닌 필터 계수를 얻는다. 메모리(62)는, 예를 들면 휘발성의 메모리로 이루어지고, 풀링 처리부(22)로부터 공급된 중간 데이터나 연산 중의 데이터를 일시적으로 유지한다.
풀링 처리부(24)는, 컨벌루션 처리부(23)로부터 공급된 중간 데이터에 대해 풀링 레이어(2')의 처리를 행하여, 그 결과 얻어진 중간 데이터를 컨벌루션 처리부(25)에 공급한다. 풀링 처리부(24)는 메모리(71)를 갖고 있다. 메모리(71)는, 예를 들면 휘발성의 메모리로 이루어지고, 컨벌루션 처리부(23)로부터 공급된 중간 데이터나 연산 중의 데이터를 일시적으로 유지한다.
컨벌루션 처리부(25)는, 풀링 처리부(24)로부터 공급된 중간 데이터에 대해 컨벌루션 레이어(3')의 처리를 행하여, 그 결과 얻어진 식별 결과 데이터를 출력한다.
컨벌루션 처리부(25)는, 복호부(81), 메모리(82), 및 계수 유지부(83)를 갖고 있다.
예를 들면 계수 유지부(83)는 불휘발성의 메모리로 이루어진다. 이 계수 유지부(83)에는, 미리 학습에 의해 얻어진 탭수가 8×8인 필터의 필터 계수를 압축 부호화하여 얻어진 제로 계수 위치 테이블과 비제로 계수 테이블이 유지되어 있다.
복호부(81)는, 필터의 제로 계수 위치 테이블과 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행하여, 필터의 제로 계수가 아닌 필터 계수를 얻는다. 메모리(82)는, 예를 들면 휘발성의 메모리로 이루어지고, 풀링 처리부(24)로부터 공급된 중간 데이터나 연산 중의 데이터를 일시적으로 유지한다.
또한, 여기서는 뉴럴 네트워크 처리 장치(11)가, 도 5를 참조하여 설명한 뉴럴 네트워크 구조의 식별기에 의해 구성된 예에 관해 설명했다. 그러나, 뉴럴 네트워크 처리 장치(11)가, 도 4를 참조하여 설명한 뉴럴 네트워크 구조의 식별기에 의해 구성되도록 하여도 좋다.
그와 같은 경우, 컨벌루션 처리부(21)에 의해 컨벌루션 레이어(1')의 처리가 행해지고, 풀링 처리부(22)에 의해 풀링 레이어(1)의 처리가 행해지고, 컨벌루션 처리부(23)에 의해 컨벌루션 레이어(2)의 처리가 행해지고, 풀링 처리부(24)에 의해 풀링 레이어(2)의 처리가 행해지고, 컨벌루션 처리부(25)에 의해 컨벌루션 레이어(3)의 처리가 행해진다.
1. 7 식별 처리의 설명
다음에, 뉴럴 네트워크 처리 장치(11)의 동작에 관해 설명한다. 즉, 이하, 도 8의 플로우차트를 참조하여, 뉴럴 네트워크 처리 장치(11)에 의한 식별 처리에 관해 설명한다. 또한, 이 식별 처리는 입력 데이터의 프레임마다 행해진다.
스텝 S11에서, 컨벌루션 처리부(21)의 복호부(41)는, 계수 유지부(43)로부터 제로 계수 위치 테이블과 비제로 계수 테이블을 판독하여, 그들의 제로 계수 위치 테이블 및 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행한다. 또한, 컨벌루션 처리부(21)의 메모리(42)는, 공급된 입력 데이터를 일시적으로 기록한다.
스텝 S12에서, 컨벌루션 처리부(21)는, 스텝 S11의 처리에 의해 얻어진 4개의 필터의 필터 계수에 의거하여, 메모리(42)에 기록되어 있는 입력 데이터에 대해, 필터마다 8샘플 전진의 컨벌루션 처리를 행한다. 예를 들면 스텝 S12에서는, 제로 계수가 아닌 필터 계수만이 이용되어 컨벌루션 처리가 행해진다.
컨벌루션 처리부(21)는, 컨벌루션 처리에 의해 얻어진 중간 데이터를, 풀링 처리부(22)의 메모리(51)에 공급하고, 일시적으로 기록시킨다.
이와 같은 컨벌루션 처리에 의해, 도 5의 데이터 영역(W61)의 분만큼, 컨벌루션 처리의 처리량과 메모리(42)의 메모리량을 삭감할 수 있다. 또한, 제로 계수의 분만큼 연산 처리의 처리량을 더욱 삭감할 수 있다.
스텝 S13에서, 풀링 처리부(22)는, 메모리(51)에 기록되어 있는 중간 데이터에 대해, 8샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 8샘플 전진의 풀링 처리를 행한다. 풀링 처리부(22)는, 풀링 처리에 의해 얻어진 중간 데이터를 컨벌루션 처리부(23)의 메모리(62)에 공급하고, 일시적으로 기록시킨다.
이와 같은 풀링 처리에 의해, 도 5의 데이터 영역(W62)의 분만큼, 풀링 처리의 처리량과 메모리(51)의 메모리량을 삭감할 수 있다.
스텝 S14에서, 컨벌루션 처리부(23)의 복호부(61)는, 계수 유지부(63)로부터 제로 계수 위치 테이블과 비제로 계수 테이블을 판독하고, 그들의 제로 계수 위치 테이블 및 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행한다.
스텝 S15에서, 컨벌루션 처리부(23)는, 스텝 S14의 처리에 의해 얻어진 8개의 필터의 필터 계수에 의거하여, 메모리(62)에 기록되어 있는 중간 데이터에 대해, 필터마다 2샘플 전진의 컨벌루션 처리를 행한다. 예를 들면 스텝 S15에서는, 제로 계수가 아닌 필터 계수만이 이용되어 컨벌루션 처리가 행해진다.
컨벌루션 처리부(23)는, 컨벌루션 처리에 의해 얻어진 중간 데이터를, 풀링 처리부(24)의 메모리(71)에 공급하고, 일시적으로 기록시킨다.
이와 같은 컨벌루션 처리에 의해, 도 5의 데이터 영역(W63)의 분만큼, 컨벌루션 처리의 처리량과 메모리(62)의 메모리량을 삭감할 수 있다. 또한, 제로 계수의 분만큼 연산 처리의 처리량을 더욱 삭감할 수 있다.
스텝 S16에서, 풀링 처리부(24)는, 메모리(71)에 기록되어 있는 중간 데이터에 대해, 8샘플 폭의 데이터 영역을 대상으로 하여 최대치를 추출하는 8샘플 전진의 풀링 처리를 행한다. 풀링 처리부(24)는, 풀링 처리에 의해 얻어진 중간 데이터를 컨벌루션 처리부(25)의 메모리(82)에 공급하고, 일시적으로 기록시킨다.
이와 같은 풀링 처리에 의해, 도 5의 데이터 영역(W64)의 분만큼, 풀링 처리의 처리량과 메모리(71)의 메모리량을 삭감할 수 있다.
스텝 S17에서, 컨벌루션 처리부(25)의 복호부(81)는, 계수 유지부(83)로부터 제로 계수 위치 테이블과 비제로 계수 테이블을 판독하고, 그들의 제로 계수 위치 테이블 및 비제로 계수 테이블에 의거하여 필터 계수의 복호 처리를 행한다.
스텝 S18에서, 컨벌루션 처리부(25)는, 스텝 S17의 처리에 의해 얻어진 하나의 필터의 필터 계수에 의거하여, 메모리(82)에 기록되어 있는 중간 데이터에 대해 1샘플 전진의 컨벌루션 처리를 행한다. 예를 들면 스텝 S18에서는, 제로 계수가 아닌 필터 계수만이 이용되어 컨벌루션 처리가 행해진다. 이와 같은 컨벌루션 처리에 의해, 제로 계수의 분만큼 연산 처리의 처리량을 삭감할 수 있다.
컨벌루션 처리부(25)는, 컨벌루션 처리에 의해 얻어진 식별 결과 데이터를 출력하고, 식별 처리는 종료한다.
이상과 같이 하여 뉴럴 네트워크 처리 장치(11)는, 입력 데이터의 형상이나 프레임 길이에 대해 정해지는 탭수나, 샘플 폭, 샘플 전진수로 각 레이어의 연산 처리를 행하여, 식별 결과 데이터를 생성한다. 이와 같이 함으로써, 처리량과 메모리량을 삭감하고, 보다 효율 좋게 식별을 할 수가 있다.
또한, 뉴럴 네트워크 처리 장치(11)는, 미리 유지하고 있는 제로 계수 위치 테이블 및 비제로 계수 테이블에 의거하여 복호 처리를 행하여, 그 결과 얻어진 필터 계수를 이용하여 컨벌루션 처리를 행한다. 이와 같이 함으로써, 필터 계수를 유지해 두는 메모리의 메모리량을 삭감할 수 있음과 함께, 제로 계수 부분의 곱합 연산을 생략하여 컨벌루션 처리의 처리량도 삭감할 수 있다.
또한, 뉴럴 네트워크 처리 장치(11)가, 상술한 대역 확장을 위한 고역 서브 밴드 파워(의사 고역 서브 밴드 파워)를 예측하는 예측기가 되도록 하여도 좋다.
그와 같은 경우, 컨벌루션 처리부(21)에는 입력 데이터로서 저역 서브 밴드 파워가 입력되고, 컨벌루션 처리부(25)는, 컨벌루션 처리의 처리 결과(연산 결과)를, 고역 서브 밴드 파워의 예측 결과로서 출력한다. 단, 이 경우, 각 레이어에서는 도 5를 참조하여 설명한 처리와는 다른 처리가 행해진다.
1. 8 계수 행렬의 스파스 표현화에 의한 효과
상술에서는, 뉴럴 네트워크의 학습 과정에서 제로를 많이 포함하는 계수 행렬을 발생시키는 학습 수법(1. 5 학습 수법에 관해) 및 그 압축 부호화 방법(1. 3 필터 계수의 압축 부호화에 관해), 및, 데이터 압축에 의한 처리량의 삭감 수법(1. 4 데이터 압축에 의한 처리량 삭감에 관해)에 관해 설명했다.
여기서, 본 실시 형태에서는, 계수 행렬의 압축 부호화는, 계수 행렬을 제로 계수 위치 테이블과 비제로 계수 테이블로 분리하여 기억하는 것, 즉, 계수 행렬을 스파스 표현함에 의해 실현하고 있다. 이 수법을 실제의 뉴럴 네트워크를 이용한 추론 과제에 적용한 경우, 계수 행렬에 제로 계수를 많이 포함하는 네트워크가 형성되고, 그 추론 처리일 때에는 계수 행렬의 메모리량이 1/4 이하로 삭감되는 것을 확인할 수 있다.
이와 같은 결과는, 정밀도나 속도를 유지한 채로 메모리량을 삭감할 수 있는 것이나, 메모리량의 증가를 억제하면서 뉴럴 네트워크의 사이즈를 수배로 확대할 수 있는 것을 시사하고 있다. 예를 들면, 외음(外音) 인식 등 리얼타임성이 거론되는 네트워크에서, 지금까지는 뉴럴 네트워크의 사이즈를 제한하지 않으면 처리의 리얼타임성을 확보할 수가 없었던 것에 대해 본 실시 형태를 적용함으로써, 메모리량의 증가를 억제하면서, 뉴럴 네트워크의 사이즈를 2배∼4배로 확대하는 것이 가능해진다. 또한, 메모리량이 정해진 조립 시스템에 대해 본 실시 형태를 적용함으로써, 시스템의 물리적인 구성을 바꾸는 일 없이 뉴럴 네트워크에 의한 추론 태스크를 추가로 실장하는 것도 가능해지기 때문에, 보다 복잡한 인식 처리가 가능해지도록 시스템을 업데이트하는 것이 가능해진다.
이와 같이, 뉴럴 네트워크의 학습에 정칙화 수법을 취입함으로써, 전체로서 제로 계수를 많이 발생하는 학습 모델을 생성할 수 있다. 그리고, 그와 같이 발생시킨 계수 행렬을 제로 계수 위치 테이블과 비제로 계수 테이블로 나누어 기록하는 스파스 표현 수법을 이용함으로써, 계수 행렬을 압축하여 메모리량을 삭감하는 것이 가능해진다.
1. 9 스파스 표현 계수의 복호에 알맞는 복호부
스파스 표현된 계수 행렬은, 소프트웨어에서 신장하는 것도 가능하지만, 하드웨어에서 신장하는 것도 가능하다. 이하의 설명에서는, 하드웨어 구성으로서 실장된 복호부에 관해, 구체례를 들어 설명한다.
1. 9. 1 복호부가 실행하는 복호 처리
도 9는, 본 실시 형태에 관한 복호부가 실행하는 동작, 즉 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트이다. 도 9에서는, 명확화를 위해, 복호부가 실행하는 복호 처리를 플로우차트화하여 설명하지만, 실제로는, 도 9에 관한 복호 알고리즘이 도 7에 예시한 뉴럴 네트워크 처리 장치(11)의 복호부(41, 61 및 81)에 하드웨어 구성으로서 실장되어도 좋다. 또한, 이하의 설명에서는, 간략화를 위해, 복호부(41, 61 및 81)을 구별하지 않는 경우, 그 부호를 "101"로 하고, 메모리(42, 62 및 82)를 구별하지 않는 경우, 그 부호를 "102"로 하고, 계수 유지부(43, 63 및 83)를 구별하지 않는 경우, 그 부호를 "103"으로 한다.
도 9에 도시하는 바와 같이, 복호부(101)는, 우선, 계수 유지부(103)로부터 제로 계수 위치 테이블(SpMat)(Q12) 및 비제로 계수 테이블(Q13)을 판독한다(LOAD SpMat)(스텝 S101). 판독된 제로 계수 위치 테이블(Q12) 및 비제로 계수 테이블(Q13)은, 예를 들면, 복호부(101)의 메모리(102)에서의 기지의 어드레스에 격납된다.
다음에, 복호부(101)는, 제로 계수 위치 테이블(Q12) 내의 계수(W)의 위치를 나타내는 위상 포인터(p)를 초기화한다(p←0)(스텝 S102).
또한, 복호부(101)는, 비제로 계수 테이블(Q13) 내의 위치를 나타내는 비제로 계수 큐 포인터(wadr)에, 메모리(102) 내의 비제로 계수 테이블(Q13)에서 선두에 위치하는 계수(W)(비제로 계수)를 지시하는 어드레스(이하, 선두 어드레스라고 한다)를 세트한다(wadr←init)(스텝 S103).
다음에, 복호부(101)는, 메모리(102) 내의 제로 계수 위치 테이블(Q12)에 대해 위상 포인터(p)가 지시하는 값이 "0"인지 "1"인지를 판정한다(SpMat[p])(스텝 S104). 또한, "0"은 예를 들면 청구의 범위에서의 제1 값에 상당할 수 있고, "1"은 예를 들면 청구의 범위에서의 제2 값에 상당할 수 있다.
위상 포인터(p)가 지시하는 값이 "1"인 경우(스텝 S104의 "1"), 복호부(101)는, 메모리(102) 내의 비제로 계수 테이블(Q13)로부터 비제로 계수 큐 포인터(wadr)가 지시하는 비제로 계수(WQue[wadr])를 판독하고(LOAD WQue[wadr])(스텝 S105), 판독된 비제로 계수(WQue[wadr])를 계수 버퍼(Wbuf)(114)에서의 소정의 위치에 격납한다(PUSH WQue to Wbuf)(스텝 S106). 또한, 계수 버퍼(114)란, 복호 과정에서 계수 행렬(Q11)이 순차적으로 조립되는 버퍼이고, 그 소정의 위치란, 계수 행렬(Q11)에서 위상 포인터(p)가 지시하는 위치에 상당하는 위치이면 좋다.
그 후, 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 인크리먼트, 즉, 비제로 계수 큐 포인터(wadr)에 다음의 비제로 계수가 격납되어 있는 어드레스를 세트하고(wadr++)(스텝 S107), 스텝 S109에 진행한다.
한편, 스텝 S104에서, 위상 포인터(p)가 지시하는 값이 "0"인 경우(스텝 S104의 "0"), 복호부(101)는, 제로의 값을 계수 버퍼(114)에서의 소정의 위치에 격납하고(PUSH Zero to Wbuf)(스텝 S108), 스텝 S109에 진행한다.
스텝 S109에서는, 복호부(101)는, 위상 포인터(p)를 1 인크리먼트, 즉, 위상 포인터(p)에 다음의 계수(W)의 위치를 세트한다(p++).
그 후, 복호부(101)는, 인크리먼트 후의 위상 포인터(p)가 제로 계수 위치 테이블(Q12)의 말미를 나타내는 위상 포인터(p)의 최대치(pmax)를 초과하고 있는지의 여부를 판정하고(p>pmax?)(스텝 S110), 초과하고 있는 경우(스텝 S110의 YES), 본 동작을 종료한다. 한편, 초과하지 않은 경우(스텝 S110의 NO), 복호부(101)는, 스텝 S104에 리턴하여, 이후의 동작을 실행한다.
이상과 같이 동작함으로써, 계수 버퍼(114) 내에는, 계수 행렬(Q11)이 복원된다.
1. 9. 2 복호 처리의 구체례
계속해서, 본 실시 형태에 관한 복호부(101)가 실행하는 복호 처리의 구체례를, 도 10 및 도 11을 참조하면서, 도 9에 예시한 플로우차트에 따라 설명한다. 도 10은, 본 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면이다. 도 11은, 도 10에 도시하는 구체례에서의 위상 포인터 및 비제로 계수 큐 포인터의 움직임을 설명하기 위한 도면이다. 또한, 도 10 및 도 11에는, 계수 행렬(Q11)이 1행8열의 구성을 하고 있고, 그 3열째와 5열째와 8열째에 비제로 계수가 격납되어 있는 경우가 예시되어 있다. 또한, 3열째의 비제로 계수는 0.1이고, 5열째의 비제로 계수는 -0.8이고, 8열째의 비제로 계수는 0.6이라고 한다.
도 10에 도시하는 바와 같이, 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 생성 및 관리하는 어드레스 생성부(111)와, 위상 포인터(p)가 지시하는 값에 응하여 "비제로 계수(WQue[wadr])" 및 "0"의 어느 하나를 출력하는 셀렉터(112)와, 셀렉터(112)로부터 출력된 값을 순차적으로, 계수 버퍼(114)에 격납함으로써, 계수 버퍼(114) 내 계수 행렬(Q11)을 복원하는 곱합기(113)와, 복원된 계수 행렬(Q11)을 격납하는 계수 버퍼(114)를 구비한다.
도 10에 도시하는 구성에서, 복호부(101)는, 우선, 제로 계수 위치 테이블(Q12)(="00101001") 및 비제로 계수 테이블(Q13)(="0.1", "-0.8", "0.6")를 계수 유지부(103)로부터 취득한다(도 9의 스텝 S101에 상당). 또한, 복호부(101)는, 최초의 반복(itr=0)에서는, 위상 포인터(p)를 0에 초기화함과 함께, 어드레스 생성부(111)에서 관리되는 비제로 계수 큐 포인터(wadr)에 선두 어드레스를 세트한다(도 9의 스텝 S102 및 S103에 상당). 그에 의해, 도 11에 도시하는 바와 같이, 위상 포인터(p)는, 제로 계수 위치 테이블(Q12)에서의 가장 좌(선두)의 "0"을 지시하고, 비제로 계수 큐 포인터(wadr)는 비제로 계수 테이블(Q13)에서의 선두의 값 "0.1"을 지시하게 된다.
다음에, 복호부(101)는, 현재, 위상 포인터(p)가 지시하는 값이 "0"인지 "1"인지를 판정한다(도 9의 스텝 S104에 상당). 상술한 바와 같이, itr=0에서는, 위상 포인터(p)는 "0"을 지시하고 있다. 그 때문에, 셀렉터(112)의 제어 단자에는, "0"이 입력되어 있다. 그 경우(도 9의 스텝 S104의 "0"에 상당), 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력된다. 이에 대해, 곱합기(113)는, 입력된 값 "0"을, 선두의 계수(W)로서 계수 버퍼(114)에 격납한다(도 9의 스텝 S108에 상당).
그 후, 복호부(101)는, 위상 포인터(p)를 1 인크리먼트하고(도 9의 스텝 S109에 상당), 다음의 반복(itr=1)에 이행한다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=1에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 9의 스텝 S104의 "0"에 상당). 그 때문에, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 2번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 9의 스텝 S108에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트되고(도 9의 스텝 S109에 상당), 다음의 반복(itr=2)이 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=2에서는, 위상 포인터(p)가 지시하는 값이 "1"이다. 그 때문에, 셀렉터(112)의 제어 단자에는, "1"이 입력되어 있다. 그 경우(도 9의 스텝 S104의 "1"에 상당), 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 9의 스텝 S105의 일부, 도 10의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.1))을 비제로 계수 테이블(Q13)로부터 취출하여, 셀렉터(112)에 입력한다(도 9의 스텝 S105의 일부, 도 10의 스텝 S105b에 상당). 이에 대해, 셀렉터(112)는, 제어 단자에의 입력치가 "1"이기 때문에, 입력된 비제로 계수(WQue[wadr])(=0.1)를 곱합기(113)에 입력한다. 그리고, 곱합기(113)는, 입력된 비제로 계수(WQue[wadr])(=0.1)를, 3번째의 계수(W)로서 계수 버퍼(114)에 격납한다(도 9의 스텝 S106에 상당).
그 후, 어드레스 생성부(111)에서 다음의 비제로 계수(W)를 지시하는 어드레스에 비제로 계수 큐 포인터(wadr)가 인크리먼트됨과 함께(도 9의 스텝 S107에 상당), 위상 포인터(p)가 1 인크리먼트되고(도 9의 스텝 S109에 상당), 다음의 반복(itr=3)이 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=3에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 9의 스텝 S104의 "0"에 상당). 그 때문에, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 4번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 9의 스텝 S108에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트되고(도 9의 스텝 S109에 상당), 다음의 반복(itr=4)이 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=4에서는, 위상 포인터(p)가 지시하는 값이 "1"이다(도 9의 스텝 S104의 "1"에 상당). 그 때문에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 9의 스텝 S105의 일부, 도 10의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 비제로 계수(WQue[wadr])(=-0.8)를 취출하고 셀렉터(112)에 입력한다(도 9의 스텝 S105의 일부, 도 10의 스텝 S105b에 상당). 그리고, 취출된 비제로 계수(WQue[wadr])(=-0.8)가 셀렉터(112)를 통하여 곱합기(113)에 입력되고, 5번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 9의 스텝 S106에 상당). 그 후, 비제로 계수 큐 포인터(wadr) 및 위상 포인터(p)가 1 인크리먼트되고(도 9의 스텝 S107 및 S109에 상당), 다음의 반복(itr=5, 6)가 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=5, 6에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 9의 스텝 S104의 "0"에 상당). 그 때문에, itr=5, 6 각각에서는, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 6번째 및 7번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 9의 스텝 S108에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트되고(도 9의 스텝 S109에 상당), 다음의 반복(itr=7)이 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=7에서는, 위상 포인터(p)가 지시하는 값이 "1"이다(도 9의 스텝 S104의 "1"에 상당). 그 때문에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 9의 스텝 S105의 일부, 도 10의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 비제로 계수(WQue[wadr])(=0.6)를 취출하고 셀렉터(112)에 입력한다(도 9의 스텝 S105의 일부, 도 10의 스텝 S105b에 상당). 그리고, 취출된 비제로 계수(WQue[wadr])(=0.6)가 셀렉터(112)를 통하여 곱합기(113)에 입력되고, 8번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 9의 스텝 S106에 상당).
그 후, 비제로 계수 큐 포인터(wadr) 및 위상 포인터(p)가 1 인크리먼트되지만(도 9의 스텝 S107 및 S109에 상당), 인크리먼트 후의 위상 포인터(p)는 최대치(pmax)를 초과하게 된다(도 9의 스텝 S110의 YES), 그 때문에, 복호부(101)는, 다음의 반복에 이행하는 일 없이, 본 동작을 종료한다.
이상과 같이 동작함으로써, 처리 완료 후의 계수 버퍼(114) 내에는, "0", "0", "0.1", "0", "-0.8", "0", "0", "0.6"으로 구성된 계수 행렬(Q11)이 복원된다. 또한, 계수 버퍼(114)에 복원된 계수 행렬(Q11)은, 계수 버퍼(114)로부터 적절히 판독되고, 복호부(101)가 실행한 컨벌루션 처리에 사용되어 좋다.
이상과 같은 복호 알고리즘은, 상술한 바와 같이, 복호부(101)에 하드웨어 실장될 수 있다. 위상 포인터(p)가 1 인크리먼트될 때까지의 처리에 필요로 하는 클록수를 1클록(CLK)으로 한 순서 회로를 구성한 경우, 제로 계수 위치 테이블(Q12)의 판독에 1CLK, 디코드값 "0", "0", "0.1", "0", "-0.8", "0", "0", "0.6"을 얻는데 8CLK, 각각 필요로 하기 때문에, 합계 9CLK로 계수 행렬(Q11)을 디코드할 수 있다.
1. 10 작용·효과
이상과 같이, 본 실시 형태에 의하면, 계수 행렬(Q11)이 스파스 표현에 의해 압축 부호화되어 메모리(102)에 격납되기 때문에, 필요한 메모리량을 삭감하는 것이 가능해진다. 또한, 이와 같은 메모리량의 삭감을 가능하게 하는 복호부(101)를 하드웨어에 의해 실현하는 것이 가능해진다.
2. 제2 실시 형태
상술한 제1 실시 형태에 관한 컨벌루션 처리에서는, 연산 대상인 변수(X)와 계수(W)와의 대응 관계를 유지하면서, 컨벌루션 연산을 행할 필요가 있다. 따라서 복호부(101)를 하드웨어 구성으로 실현하는 경우, 컨벌루션 대상의 변수 행렬에서의 변수(X)의 위치와, 계수 행렬(Q11)에서의 계수(W)의 위치를 정돈하여, 곱합 연산을 행하는 곱합 회로에 입력할 필요가 있다.
여기서, 제의 1 실시 형태에서는, 계수(W)가 스파스 표현된 상태에서 메모리(102)(및 계수 유지부(103))에 격납되어 있음에 대해, 변수(X)는 통상 표현, 즉 압축되지 않은 상태에서 메모리(102)에 격납되어 있다. 그 때문에, 변수(X)와 계수(W)와의 동기(同期)를 고려하면서, 계수 행렬(Q11)의 복호와 변수(X)의 판독을 행할 필요가 있다. 그래서 본 실시 형태에서는, 변수(X)와 계수(W)의 동기를 가능하게 하는 복호부에 관해, 예를 들어 설명한다.
또한, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치는, 제1 실시 형태에서 도 7 등을 이용하여 설명한 뉴럴 네트워크 처리 장치(11)와 같은 구성이면 좋기 때문에, 여기서는 상세한 설명을 생략한다. 또한, 이하의 설명에서, 컨벌루션 대상의 변수 행렬(Q14)은, 컨벌루션 처리에 이용되는 계수 행렬(Q11)과 같은 데이터 길이 및 데이터 구조를 구비하고 있는 것으로 한다.
2. 1 스파스 표현 계수의 복호에 알맞는 복호부
변수(X)와의 동기를 도모하면서 계수 행렬을 복호하는 복호부는, 소프트웨어로서 실장하는 것도 가능하며, 하드웨어로서 실장하는 것도 가능하다. 이하의 설명에서는, 하드웨어 구성으로서 실장된 복호부에 관해, 구체례를 들어 설명한다.
2. 1. 1 복호부가 실행하는 복호 처리
도 12는, 본 실시 형태에 관한 복호부가 실행하는 동작, 즉 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트이다. 도 12에서는, 명확화를 위해, 복호부가 실행하는 복호 처리를 플로우차트화하여 설명하지만, 실제로는, 도 12에 관한 복호 알고리즘이 도 7에 예시한 뉴럴 네트워크 처리 장치(11)의 복호부(41, 61 및 81)에 하드웨어 구성으로 실장되어도 좋다. 또한, 도 12에서, 도 9에 예시한 동작과 같은 동작에 관해서는, 그것을 인용함으로써, 그 상세한 설명을 생략한다.
도 12에 도시하는 바와 같이, 복호부(101)는, 우선, 도 9의 스텝 S101∼S103과 동작을 실행함으로써, 계수 유지부(103)로부터 제로 계수 위치 테이블(SpMat)(Q12) 및 비제로 계수 테이블(Q13)을 판독함과 함께, 위상 포인터(p)를 초기화하고, 비제로 계수 큐 포인터(wadr)에 선두 어드레스를 세트한다.
또한, 본 실시 형태에서는, 복호부(101)는, 처리 대상인 변수(X)가 배열하는 변수 행렬(Q14) 내의 위치를 나타내는 변수 큐 포인터(xadr)에, 메모리(102) 내의 변수 행렬(Q14)에서의 선두에 위치한 변수(X)를 지시하는 선두 어드레스를 세트한다(xadr←init)(스텝 S201).
다음에, 복호부(101)는, 도 9의 스텝 S104와 마찬가지로, 메모리(102) 내의 제로 계수 위치 테이블(Q12)에 대해 위상 포인터(p)가 지시하는 값이 "0"인지 "1"인지를 판정하고, "1"이라면, 도 9의 스텝 S105∼S107과 마찬가지로, 메모리(102) 내의 비제로 계수 테이블(Q13)로부터 비제로 계수(WQue[wadr])를 판독하고 계수 버퍼(Wbuf)에서의 소정의 위치에 격납함과 함께, 비제로 계수 큐 포인터(wadr)를 인크리먼트하고, "0"이라면, 도 9의 스텝 S108과 마찬가지로, 제로의 값을 계수 버퍼(Wbuf)에서의 소정의 위치에 격납한다.
다음에, 복호부(101)는, 메모리(102) 내의 변수 행렬(Q14)로부터 변수 큐 포인터(xadr)가 지시하는 변수(XQue[xadr])를 판독하고(LOAD XQue[xadr])(스텝 S202), 판독된 변수(XQue[xadr])를 변수 버퍼(Xbuf)(115)에서의 소정의 위치에 격납하다(PUSH XQue to Xbuf)(스텝 S203). 또한, 변수 버퍼(115)란, 복호 과정에서 변수 행렬(Q14)이 계수 행렬(Q11)의 복원에 동기하여 판독되는 버퍼이고, 그 소정의 위치란, 변수 행렬(Q14)에서 변수 큐 포인터(xadr)가 지시하는 위치에 상당하는 위치면 좋다.
그 후, 복호부(101)는, 변수 큐 포인터(xadr)를 인크리먼트, 즉, 변수 큐 포인터(xadr)에 다음의 변수(X)가 격납되어 있는 어드레스를 세트하고(xadr++)(스텝 S204), 스텝 S110에 진행한다.
스텝 S110에서는, 복호부(101)는, 도 9의 스텝 S110과 마찬가지로, 인크리먼트 후의 위상 포인터(p)가 제로 계수 위치 테이블(Q12)의 말미를 나타내는 위상 포인터(p)의 최대치(pmax)를 초과하고 있는지의 여부를 판정하고, 초과하고 있는 경우(스텝 S110의 YES), 본 동작을 종료한다. 한편, 초과하지 않은 경우(스텝 S110의 NO), 복호부(101)는, 스텝 S104에 리턴하여, 이후의 동작을 실행한다.
이상과 같이 동작함으로써, 계수 버퍼(114) 내는 계수 행렬(Q11)이 복원되고, 변수 버퍼(115) 내는 처리 대상의 변수 행렬(Q14)이 판독된다.
2. 1. 2 복호 처리의 구체례
계속해서, 본 실시 형태에 관한 복호부(101)가 실행하는 복호 처리의 구체례를, 도 13 및 도 11을 이용하면서, 도 12에 예시한 플로우차트에 따라 설명한다. 도 13은, 본 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면이다. 또한, 도 13에는, 도 10 및 도 11과 마찬가지로, 계수 행렬(Q11)이 1행8열의 구성을 하고 있고, 그 3열째와 5열째와 8열째에 비제로 계수가 격납되어 있는 경우가 예시되어 있다. 또한, 3열째의 비제로 계수는 0.1이고, 5열째의 비제로 계수는 -0.8이고, 8열째의 비제로 계수는 0.6이라고 한다. 또한, 도 13에서는, 변수 행렬(Q14)이 계수(X0)∼계수(X7)의 8개의 계수(X)가 1행8열로 배열한 구성을 하고 있는 것으로 한다.
도 13에 도시하는 바와 같이, 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 생성 및 관리하는 어드레스 생성부(111a)와, 변수 큐 포인터(xadr)를 생성 및 관리하는 어드레스 생성부(111b)와, 위상 포인터(p)가 지시하는 값에 응하여 "비제로 계수(WQue[wadr])" 및 "0"의 어느 하나를 출력하는 셀렉터(112)와, 셀렉터(112)로부터 출력된 값을 순차적으로, 계수 버퍼(114)에 격납함으로써, 계수 버퍼(114) 내 계수 행렬(Q11)을 복원하는 곱합기(113)와, 복원된 계수 행렬(Q11)을 격납하는 계수 버퍼(114)와, 메모리(102)로부터 판독된 변수(X)를 순차적으로 격납함으로써 변수 행렬(Q14)을 유지하는 변수 버퍼(115)를 구비한다.
도 13에 도시하는 구성에서, 복호부(101)는, 우선, 제로 계수 위치 테이블(Q12)(="00101001") 및 비제로 계수 테이블(Q13)(="0.1", "-0.8", "0.6")을 계수 유지부(103)로부터 취득한다(도 12의 스텝 S101에 상당). 또한, 복호부(101)는, 최초의 반복(itr=0)에서는, 위상 포인터(p)를 0에 초기화함과 함께, 어드레스 생성부(111a)에서 관리되는 비제로 계수 큐 포인터(wadr)에 선두 어드레스를 세트한다(도 12의 스텝 S102 및 S103에 상당). 그에 의해, 도 11에 도시하는 바와 같이, 위상 포인터(p)는, 제로 계수 위치 테이블(Q12)에서의 가장 좌(선두)의 "0"을 지시하고, 비제로 계수 큐 포인터(wadr)는 비제로 계수 테이블(Q13)에서의 선두의 값 "0.1"을 지시하게 된다.
또한, 최초의 반복(itr=0)에서는, 복호부(101)는, 어드레스 생성부(111b)에서 관리되는 변수 큐 포인터(xadr)에 선두 어드레스를 세트한다(도 12의 스텝 S201에 상당). 그에 의해, 변수 큐 포인터(xadr)는 변수 행렬(Q14)에서의 선두의 값(X0)을 지시하게 된다.
다음에, 복호부(101)는, 현재, 위상 포인터(p)가 지시하는 값이 "0"인지 "1"인지를 판정한다(도 12의 스텝 S104에 상당). 상술한 바와 같이, itr=0에서는, 위상 포인터(p)는 "0"을 지시하고 있다. 그 때문에, 셀렉터(112)의 제어 단자에는, "0"이 입력되어 있다. 그 경우(도 12의 스텝 S104의 "0"에 상당), 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력된다. 이에 대해, 곱합기(113)는, 입력된 값 "0"을, 선두의 계수(W)로서 계수 버퍼(114)에 격납한다(도 12의 스텝 S108에 상당).
또한, 복호부(101)는, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)을 참조하여(도 12의 스텝 S202의 일부, 도 13의 스텝 S202a에 상당), 변수 큐 포인터(xadr)가 지시하는 값(XQue[xadr])(=X0)을 변수 행렬(Q14)로부터 취출하여, 변수 버퍼(115)에 격납한다(도 12의 스텝 S203에 상당).
그 후, 복호부(101)는, 위상 포인터(p)를 1 인크리먼트하고(도 12의 스텝 S109에 상당), 다음의 반복(itr=1)에 이행한다(도 12의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=1에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 12의 스텝 S104의 "0"에 상당). 그 때문에, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 2번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 12의 스텝 S108에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(X0Que[xadr])(=X1)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트됨과 함께(도 12의 스텝 S109에 상당), 어드레스 생성부(111b)에서 다음의 변수(X2)를 지시하는 어드레스에 변수 큐 포인터(xadr)가 인크리먼트되고(도 12의 스텝 S204에 상당), 다음의 반복(itr=2)이 실행된다(도 12의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=2에서는, 위상 포인터(p)가 지시하는 값이 "1"이다. 그 때문에, 셀렉터(112)의 제어 단자에는, "1"이 입력되어 있다. 그 경우(도 12의 스텝 S104의 "1"에 상당), 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 12의 스텝 S105의 일부, 도 13의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.1)를 비제로 계수 테이블(Q13)로부터 취출하여, 셀렉터(112)에 입력한다(도 12의 스텝 S105의 일부, 도 13의 스텝 S105b에 상당). 이에 대해, 셀렉터(112)는, 제어 단자에의 입력치가 "1"이기 때문에, 입력된 비제로 계수(WQue[wadr])(=0.1)를 곱합기(113)에 입력한다. 그리고, 곱합기(113)는, 입력된 비제로 계수(WQue[wadr])(=0.1)를, 3번째의 계수(W)로서 계수 버퍼(114)에 격납한다(도 12의 스텝 S106에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(XQue[xadr])(=X2)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당).
그 후, 어드레스 생성부(111a)에서 다음의 비제로 계수(W)를 지시하는 어드레스에 비제로 계수 큐 포인터(wadr)가 인크리먼트되고(도 12의 스텝 S107에 상당), 위상 포인터(p)가 1 인크리먼트됨과 함께(도 12의 스텝 S109에 상당), 어드레스 생성부(111b)에서 다음의 변수(X3)를 지시하는 어드레스에 변수 큐 포인터(xadr)가 인크리먼트되고(도 12의 스텝 S204에 상당), 다음의 반복(itr=3)이 실행된다(도 12의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=3에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 12의 스텝 S104의 "0"에 상당). 그 때문에, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 4번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 12의 스텝 S108에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(XQue[xadr])(=X3)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트됨과 함께(도 12의 스텝 S109에 상당), 어드레스 생성부(111b)에서 다음의 변수(X4)를 지시하는 어드레스에 변수 큐 포인터(xadr)가 인크리먼트되고(도 12의 스텝 S204에 상당), 다음의 반복(itr=4)이 실행된다(도 12의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=4에서는, 위상 포인터(p)가 지시하는 값이 "1"이다(도 12의 스텝 S104의 "1"에 상당). 그 때문에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 12의 스텝 S105의 일부, 도 13의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 비제로 계수(WQue[wadr])(=-0.8)를 취출하고 셀렉터(112)에 입력한다(도 12의 스텝 S105의 일부, 도 12의 스텝 S105b에 상당). 그리고, 취출된 비제로 계수(WQue[wadr])(=-0.8)가 셀렉터(112)를 통하여 곱합기(113)에 입력되고, 5번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 12의 스텝 S106에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(XQue[xadr])(=X4)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당). 그 후, 비제로 계수 큐 포인터(wadr), 위상 포인터(p) 및 변수 큐 포인터(xadr)가 인크리먼트되고(도 12의 스텝 S107, S109 및 S204에 상당), 다음의 반복(itr=5, 6)이 실행된다(도 9의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=5, 6에서는, itr=0과 마찬가지로 위상 포인터(p)가 지시하는 값이 "0"이다(도 12의 스텝 S104의 "0"에 상당). 그 때문에, itr=5, 6 각각에서는, 복호부(101)가 비제로 계수 테이블(Q13)로부터 값을 취출하는 일 없이, 셀렉터(112)로부터 값 "0"이 곱합기(113)에 입력되고, 이 값 "0"이 6번째 및 7번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 12의 스텝 S108에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(XQue[xadr])(=X5, X6)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당). 그리고, 위상 포인터(p)가 1 인크리먼트됨과 함께(도 12의 스텝 S109에 상당), 어드레스 생성부(111b)에서 다음의 변수(X7)를 지시하는 어드레스에 변수 큐 포인터(xadr)가 인크리먼트되고(도 12의 스텝 S204에 상당), 다음의 반복(itr=7)이 실행된다(도 12의 스텝 S110의 NO에 상당).
도 11에 도시하는 바와 같이, itr=7에서는, 위상 포인터(p)가 지시하는 값이 "1"이다(도 12의 스텝 S104의 "1"에 상당). 그 때문에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 12의 스텝 S105의 일부, 도 13의 스텝 S105a에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 비제로 계수(WQue[wadr])(=0.6)를 취출하고 셀렉터(112)에 입력한다(도 12의 스텝 S105의 일부, 도 13의 스텝 S105b에 상당). 그리고, 취출된 비제로 계수(WQue[wadr])(=0.6)가 셀렉터(112)를 통하여 곱합기(113)에 입력되고, 8번째의 계수(W)로서 계수 버퍼(114)에 격납된다(도 12의 스텝 S106에 상당). 또한, 현재의 변수 큐 포인터(xadr)에 의거하여 메모리(102) 내의 변수 행렬(Q14)이 참조되고, 이에 의해 취득된 변수(XQue[xadr])(=X7)가 변수 버퍼(115)에 격납된다(도 12의 스텝 S202∼S203에 상당).
그 후, 비제로 계수 큐 포인터(wadr), 위상 포인터(p) 및 변수 큐 포인터(xadr)가 인크리먼트되는데(도 12의 스텝 S107, S109 및 S204에 상당), 인크리먼트 후의 위상 포인터(p)는 최대치(pmax)를 초과하게 된다(도 12의 스텝 S110의 YES). 그 때문에, 복호부(101)는, 다음의 반복에 이행하는 일 없이, 본 동작을 종료한다.
이상과 같이 동작함으로써, 처리 완료 후의 계수 버퍼(114) 내에는, "0", "0", "0.1", "0", "-0.8", "0", "0", "0.6"로 구성된 계수 행렬(Q11)이 복원되고, 변수 버퍼(115) 내에는, "X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7"로 구성된 변수 행렬(Q14)이 배치된다. 또한, 계수 버퍼(114)에 복원된 계수 행렬(Q11) 및 변수 버퍼(115) 내 배치된 변수 행렬(Q14)은, 각각의 선두로부터 차례로 순차적으로 판독되어 곱합 회로(116)에 입력됨으로써, 곱합 연산에 의한 컨벌루션 처리가 실행된다.
이상과 같은 복호 알고리즘은, 복호부(101)에 하드웨어 실장될 수 있다. 위상 포인터(p)가 1 인크리먼트될 때까지의 처리에 필요로 한 클록수를 1클록(CLK)으로 하는 순서 회로를 구성한 경우, 제로 계수 위치 테이블(Q12)의 판독에 1CLK, 디코드값 "0", "0", "0.1", "0", "-0.8", "0", "0", "0.6"을 얻는데 8CLK, 각각 필요로 하기 때문에, 합계 9CLK로 계수 행렬(Q11)을 디코드할 수 있다.
2. 2 작용·효과
이와 같이, 위상 포인터(p)를 1 인크리먼트하는 타이밍에 변수 큐 포인터(xadr)도 인크리먼트함으로써, 변수 큐 포인터(xadr)가 지시하는 변수 행렬(Q14)상의 위치와, 비제로 계수 큐 포인터(wadr)가 지시하는 계수 행렬(Q11)상의 위치를 동기시키는 것이 가능해진다. 그에 의해, 계수 버퍼(114) 내의 계수(W) 및 변수 버퍼(115) 내의 변수(X)의 배열을, 연산 순서대로의 배열로 하는 것이 가능해지기 때문에, 곱합 회로(116)에의 계수(W) 및 변수(X)의 입력을 용이화하는 것이 가능해진다. 그때, 계수 버퍼(114) 및 변수 버퍼(115)를 FIFO(First-In First-Out)로서 구성함으로써, 계수 버퍼(114) 및 변수 버퍼(115)에의 모든 계수(W) 및 변수(X)의 격납이 완료되기 전에, 곱합 회로(116)에의 계수(W) 및 변수(X)의 순차 입력이 가능해지기 때문에, 계수 행렬(Q11)의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 보다 단축하는 것이 가능해진다.
그 밖의 구성, 동작 및 효과는, 상술한 실시 형태와 같으면 좋기 때문에, 여기서는 상세한 설명을 생략한다.
3. 제3 실시 형태
상술한 실시 형태에 관한 컨벌루션 처리에서는, 계수(W)가 제로 계수인지 비제로 계수인지를 묻지 않고, 모든 계수(W)에 대해 변수(X)가 곱합 연산됐다. 단, 제로 계수에 관해서는, 어떠한 값의 변수(X)를 승산해도, 그 결과는 제로이다. 그래서 본 실시 형태에서는, 제로 계수에 관해서는 연산 처리를 생략함으로써, 전체로서의 스루풋을 향상하여, 계수 행렬(Q11)의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 보다 단축하는 것을 가능케 하는 경우에 관해, 예를 들어 설명한다.
또한, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치는, 제1 실시 형태에서 도 7 등을 이용하여 설명하는 뉴럴 네트워크 처리 장치(11)와 같은 구성이면 좋기 때문에, 여기서는 상세한 설명을 생략한다. 또한, 이하의 설명에서, 컨벌루션 대상의 변수 행렬(Q14)은, 컨벌루션 처리에 이용된 계수 행렬(Q11)과 같은 데이터 길이 및 데이터 구조를 구비하고 있는 것으로 한다.
3. 1 제로 계수에 대한 곱합 연산의 생략에 관해
곱합 연산에서 제로 계수에 대한 연산을 생략하여 비제로 계수에 대한 연산을 실행하기 위한 구성으로서는, 예를 들면, 프라이어리티 인코더를 이용할 수 있다. 도 14는, 본 실시 형태에 관한 프라이어리티 인코더를 설명하기 위한 도면이다.
일반적인 프라이어리티 인코더는, "1"이 된 입력에 대응하는 값을 출력하는 회로이다. 본 실시 형태에서는, 복수의 입력이 "1"이 된 경우에도 하나의 값을 출력하도록, 프라이어리티 인코더가 구성되어 있을 필요가 있다. 그래서 본 실시 형태에서는, 프라이어리티 인코더(104)의 복수의 입력에 대해 우선순위가 설정된다.
도 14에 도시하는 바와 같이, 본 실시 형태에서, 프라이어리티 인코더(104)에서의 액티브한 입력의 수는, 제로 계수 위치 테이블(Q12)을 구성하는 "0" 및 "1"의 수, 즉 계수 행렬(Q11)을 구성하는 계수(W)의 수(도 14에서는 8개)와 동수이다. 각 입력에는, 제로 계수 위치 테이블(Q12)에서의 배열대로 "0" 또는 "1"의 값이 입력된다. 그래서 본 실시 형태에서는, 제로 계수 위치 테이블(Q12)에서의 값의 배열에 따라, 프라이어리티 인코더(104)의 각 입력에 우선순위를 설정한다.
도 14에 도시하는 예에서는, 프라이어리티 인코더(104)가 "a0"∼"a7"의 8개의 입력을 구비하고, 제로 계수 위치 테이블(Q12)에서의 선두의 값이 입력되는 입력 "a0"에 대해 가장 높은 우선순위가 설정되고, 말미의 값이 입력되는 입력 "a7"에 대해 가장 낮은 우선순위가 설정되고, "a"에 부속하는 숫자가 커짐에 따라 낮아지는 우선순위가 설정된다. 또한, 본 설명에서는, 각 입력 "a0"∼"a7"에는, 각각의 "a"에 부속하는 숫자에 대응하는 값(q)이 설정되어 있는 것으로 한다.
프라이어리티 인코더(104)에서의 이네이블 단자(en)는, 입력 "a0"∼"a7"의 적어도 하나에 "1"이 입력됐는지의 여부를 출력하는 단자면 좋다. 예를 들면, 입력 "a0"∼"a7"에의 입력이 전부 "0"인 경우, 프라이어리티 인코더(104)는, 예를 들면 "1"의 이네이블 신호를 출력해도 좋다. 그 경우, 곱합 회로(116)로부터는, 곱합 연산 결과로서 "0"이 출력되면 좋다. 한편, 입력 "a0"∼"a7"의 적어도 하나에 "1"이 입력된 경우, 프라이어리티 인코더(104)는, 예를 들면 "0"의 이네이블 신호를 출력해도 좋다. 그 경우, 곱합 회로(116)로부터는, 계수 버퍼(114)에 격납된 계수(W)와 변수 버퍼(115)에 격납된 변수(X)를 곱합 연산함으로써 얻어진 값이 출력되면 좋다.
이와 같은 프라이어리티 인코더(104)에 대해, 예를 들면, "00101001"의 제로 계수 위치 테이블(Q12)이 입력되면, 프라이어리티 인코더(104)의 8개의 입력 "a0"∼"a7" 중, 입력 "a0", "a1", "a3", "a5", "a6"에는 "0"이 입력되고, 입력 "a2", "s5", "a8"에는 "1"이 입력된다. 그 경우, 입력 "a2", "s5", "a8" 중에서 가장 우선순위가 높은 입력이 입력 "a2"이기 때문에, 프라이어리티 인코더(104)의 출력(o)으로부터는, 입력 "a2"에 설정된 값(q)=2가 출력된다.
프라이어리티 인코더(104)로부터 출력된 값(q)은, 예를 들면, 변수 행렬(Q14)로부터 판독하는 변수(X)의 위치를 나타내는 위상 포인터(q)의 설정에 사용된다. 예를 들면, 프라이어리티 인코더(104)로부터 출력된 값이 "2"인 경우에는, 위상 포인터(q)가 변수 행렬(Q14)에서의 선두로부터 헤아려서 3번째의 변수(X2)를 지시하도록, 위상 포인터(q)에 "2"가 설정된다. 마찬가지로, 프라이어리티 인코더(104)로부터 출력된 값이 "4"인 경우에는, 위상 포인터(q)가 변수 행렬(Q14)에서의 선두로부터 헤아려서 5번째의 변수(X4)를 지시하도록, 위상 포인터(q)에 "4"가 설정된다.
또한, 프라이어리티 인코더(104)의 출력에 응하여 위상 포인터(q)의 값을 설정한 후는, 출력(o)으로서 사용한 입력에 대응하는 제로 계수 위치 테이블(Q12)상의 값이, 예를 들면 복호부(101)에 의해 "1"로부터 "0"으로 재기록된다. 예를 들면, itr=0인 경우에 "00101001"의 제로 계수 위치 테이블(Q12)이 입력되고, 프라이어리티 인코더(104)로부터 입력 "a2"에 설정된 "2"가 출력되어 위상 포인터(q)가 설정된 경우에는, 제로 계수 위치 테이블(Q12)이 복호부(101)에 의해 "00001001"에 재기록되다. 그에 의해, 프라이어리티 인코더(104)의 입력 "a0"∼"a7"에 입력되는 값이 "00001001"이 되고, 다음에 프라이어리티 인코더(104)로부터 출력되는 값이 입력 "a4"에 설정된 "4"가 된다. 그 결과, itr=1에서는, 위상 포인터(q)가 변수 행렬(Q14)에서의 선두로부터 헤아려서 5번째의 변수(X4)를 지시하도록, 위상 포인터(q)가 갱신된다.
3. 2 스파스 표현 계수의 복호에 알맞는 복호부
본 실시 형태에 관한 복호부(101)도, 상술한 실시 형태에 관한 복호부(101)와 마찬가지로, 소프트웨어로서 실장하는 것도 가능하며, 하드웨어로서 실장하는 것도 가능하다. 이하의 설명에서는, 하드웨어 구성으로서 실장된 복호부에 관해, 구체례를 들어 설명한다.
3. 2. 1 복호부가 실행하는 복호 처리
도 15는, 본 실시 형태에 관한 복호부가 실행하는 동작, 즉 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트이다. 도 15에서는, 명확화를 위해, 복호부가 실행하는 복호 처리를 플로우차트화하여 설명하지만, 실제로는, 도 15에 관한 복호 알고리즘이 도 7에 예시한 뉴럴 네트워크 처리 장치(11)의 복호부(41, 61 및 81)에 하드웨어 구성으로서 실장되면 좋다. 또한, 도 15에서, 도 9 또는 도 12에 예시한 동작과 같은 동작에 관해서는, 그것을 인용함으로써, 그 상세한 설명을 생략한다.
도 15에 도시하는 바와 같이, 복호부(101)는, 우선, 도 9의 스텝 S101 및 S103과 마찬가지로, 계수 유지부(103)로부터 제로 계수 위치 테이블(SpMat)(Q12) 및 비제로 계수 테이블(Q13)을 판독함과 함께, 비제로 계수 큐 포인터(wadr)에 선두 어드레스를 세트한다. 또한, 복호부(101)는, 도 12의 스텝 S201과 마찬가지로, 변수 큐 포인터(xadr)에 선두 어드레스를 세트한다.
다음에, 복호부(101)에 의해 판독된 제로 계수 위치 테이블(Q12)을 프라이어리티 인코더(104)에 입력하여 평가함으로써, "1"이 입력된 입력 중에서 가장 우선순위가 높은 입력(즉, 제로 계수 위치 테이블(Q12)에서의 최초의 "1"에 대응하는 입력)를 특정하고(P. E. SpMat), 특정된 입력에 설정된 값을 위상 포인터(q)에 설정하다(q←1st nonzero)(스텝 S301).
다음에, 복호부(101)는, 도 9의 스텝 S105∼S106과 마찬가지로, 메모리(102) 내의 비제로 계수 테이블(Q13)로부터 비제로 계수(WQue[wadr])를 판독하여 계수 버퍼(Wbuf)에서의 소정의 위치에 격납한다.
다음에, 복호부(101)는, 메모리(102) 내의 변수 행렬(Q14)에서의, 변수 큐 포인터(xadr)(초기 어드레스)로부터 위상 포인터(q)분만큼 시프트시킨 어드레스(xadr+q)에 격납된 변수(XQue[xadr+q])를 판독하고(LOAD XQue[xadr+q])(스텝 S302), 판독된 변수(XQue[xadr+q])를 변수 버퍼(Xbuf)(115)에서의 소정의 위치에 격납하다(PUSH XQue to Xbuf)(스텝 S303).
다음에, 복호부(101)는, 도 9의 스텝 S107과 마찬가지로, 비제로 계수 큐 포인터(wadr)를 인크리먼트한다.
다음에, 복호부(101)는, 제로 계수 위치 테이블(Q12)에서의, 스텝 S301에서 특정된 입력에 대응하는 값을 "0"으로 재기록한다(SpMat[q])(스텝 S304).
그 후, 복호부(101)는, 스텝 S304에서 업데이트후의 제로 계수 위치 테이블(Q12)의 값이 전부 "0"인지의 여부를 판정하고(SpMat==0?)(스텝 S305), 전부 "0"인 경우(스텝 S305의 YES), 본 동작을 종료한다. 한편, 제로 계수 위치 테이블(Q12)가 "1"을 포함하고 있는 경우(스텝 S305의 NO), 복호부(101)는, 스텝 S301에 리턴하여, 이후의 동작을 실행한다.
이상과 같이 동작함으로써, 계수 버퍼(114) 내에는, 계수 행렬(Q11)로부터 추출된 비제로 계수(W)가 격납되고, 변수 버퍼(115) 내에는, 계수 버퍼(114) 내에 격납된 비제로 계수(W)와 대응하는 변수(X)가 격납된다. 그에 의해, 곱합 회로(116)가 실행하는 계수(W)와 변수(X)와의 승산 횟수를 대폭적으로 삭감하는 것이 가능해지기 때문에, 계수 행렬의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 대폭적으로 단축하는 것이 가능해진다.
3. 2. 2 복호 처리의 구체례
계속해서, 본 실시 형태에 관한 복호부(101)가 실행하는 복호 처리의 구체례를, 도 16 및 도 17을 이용하면서, 도 15에 예시한 플로우차트에 따라 설명한다. 도 16은, 본 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면이다. 도 17은, 도 16에 지시하는 구체례에서의 위상 포인터, 비제로 계수 큐 포인터 및 변수 큐 포인터의 움직임을 설명하기 위한 도면이다. 또한, 도 16 및 도 17에는, 도 10 및 도 11과 마찬가지로, 계수 행렬(Q11)이 1행8열의 구성을 하고 있고, 그 3열째와 5열째와 8열째에 비제로 계수가 격납되어 있는 경우가 예시되어 있다. 또한, 3열째의 비제로 계수는 0.1이고, 5열째의 비제로 계수는 -0.8이고, 8열째의 비제로 계수는 0.6이라고 한다. 또한, 도 16 및 도 17에서는, 도 13과 마찬가지로, 변수 행렬(Q14)이 계수(X0)∼계수(X7)의 8개의 계수(X)가 1행8열로 배열한 구성을 하고 있는 것으로 한다.
도 16에 도시하는 바와 같이, 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 생성 및 관리하는 어드레스 생성부(111a)와, 변수 큐 포인터(xadr)를 생성 및 관리하는 어드레스 생성부(111b)와, 메모리(102)로부터 판독된 계수(W)를 순차적으로 격납함으로써 비제로 계수(W)로 이루어지는 계수 행렬(Q21)을 유지하는 계수 버퍼(114)와, 메모리(102)로부터 판독된 변수(X)를 순차적으로 격납함으로써 비제로 계수(W)와 승산된 변수(X)로 이루어지는 변수 행렬(Q24)을 유지하는 변수 버퍼(115)를 구비한다.
도 16에 도시하는 구성에서, 복호부(101)는, 우선, 제로 계수 위치 테이블(Q12)(="00101001") 및 비제로 계수 테이블(Q13)(="0.1", "-0.8", "0.6")을 계수 유지부(103)로부터 취득한다(도 15의 스텝 S101에 상당). 또한, 복호부(101)는, 최초의 반복(itr=0)에서는, 어드레스 생성부(111a)에서 관리되는 비제로 계수 큐 포인터(wadr) 및 어드레스 생성부(111b)에서 관리되는 변수 큐 포인터(xadr)에 선두 어드레스를 세트한다(도 15의 스텝 S103 및 S201에 상당). 그에 의해, 도 17에 도시하는 바와 같이, 비제로 계수 큐 포인터(wadr)는 비제로 계수 테이블(Q13)에서의 선두의 값 "0.1"을 지시하고, 변수 큐 포인터(xadr)는 변수 행렬(Q14)에서의 선두의 변수(X0)을 지시하게 된다.
다음에, 복호부(101)는, 판독한 제로 계수 위치 테이블(Q12)을 프라이어리티 인코더(104)에 입력하여, 선두의 "1"의 위치, 즉 계수 행렬(Q11)에서의 선두의 비제로 계수(W)의 위치를 특정한다. 상술한 바와 같이, itr=0에서는, 제로 계수 위치 테이블(Q12)은 "00101001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a2)에 설정된 값(p)=2를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(q)=2를 위상 포인터(q)에 설정한다(도 15의 스텝 S301에 상당).
다음에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 15 및 도 16의 스텝 S105에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.1)를 비제로 계수 테이블(Q13)로부터 취출하여, 계수 버퍼(114)에 격납한다(도 15 및 도 16의 스텝 S106에 상당).
또한, 복호부(101)는, 현재의 변수 큐 포인터(xadr)와 위상 포인터(q)에 의거하여 변수 행렬(Q14)을 참조하여(도 15 및 도 16의 스텝 S302에 상당), 변수 큐 포인터(xadr)로부터 위상 포인터(q)분만큼 말미측에 시프트시킨 어드레스에 격납되어 있는 변수(XQue[wadr+q])(=X2)를 변수 행렬(Q14)로부터 취출하여, 변수 버퍼(115)에 격납한다(도 15 및 도 16의 스텝 S303에 상당).
그 후, 어드레스 생성부(111a)에서 다음의 비제로 계수(W)를 지시하는 어드레스에 비제로 계수 큐 포인터(wadr)가 인크리먼트됨과 함께(도 15의 스텝 S107에 상당), 제로 계수 위치 테이블(Q12)에서 현재의 위상 포인터(q)가 지시하는 값 "1"이 "0"으로 갱신된다(도 15의 스텝 S304에 상당). 계속해서, 복호부(101)에 의해 제로 계수 위치 테이블(Q12)의 모든 값이 "0"인지의 여부가 판정되고(도 15의 스텝 S305에 상당), 다음의 반복(itr=1)이 실행된다(도 15의 스텝 S305의 NO에 상당).
도 17에 도시하는 바와 같이, itr=1에서는, 제로 계수 위치 테이블(Q12)은 "00001001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a4)에 설정된 값(p)=4를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(q)=4를 위상 포인터(q)에 설정한다(도 15의 스텝 S301에 상당).
다음에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 15 및 도 16의 스텝 S105에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=-0.8)을 비제로 계수 테이블(Q13)로부터 취출하여, 계수 버퍼(114)에 격납한다(도 15 및 도 16의 스텝 S106에 상당).
또한, 복호부(101)는, 현재의 변수 큐 포인터(xadr)와 위상 포인터(q)에 의거하여 변수 행렬(Q14)을 참조하여(도 15 및 도 16의 스텝 S302에 상당), 변수 큐 포인터(xadr)로부터 위상 포인터(q)분만큼 말미측에 시프트시킨 어드레스에 격납되어 있는 변수(XQue[wadr+q])(=X4)를 변수 행렬(Q14)로부터 취출하여, 변수 버퍼(115)에 격납한다(도 15 및 도 16의 스텝 S303에 상당).
그 후, 어드레스 생성부(111a)에서의 다음의 비제로 계수(W)를 지시하는 어드레스에 비제로 계수 큐 포인터(wadr)가 인크리먼트됨과 함께(도 15의 스텝 S107에 상당), 제로 계수 위치 테이블(Q12)에서 현재의 위상 포인터(q)가 지시하는 값 "1"이 "0"으로 갱신된다(도 15의 스텝 S304에 상당). 계속해서, 복호부(101)에 의해 제로 계수 위치 테이블(Q12)의 모든 값이 "0"인지의 여부가 판정되고(도 15의 스텝 S305에 상당), 다음의 반복(itr=2)이 실행된다(도 15의 스텝 S305의 NO에 상당).
도 17에 도시하는 바와 같이, itr=2에서, 제로 계수 위치 테이블(Q12)은 "00000001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a7)에 설정된 값(p)=7을 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(q)=7을 위상 포인터(q)에 설정한다(도 15의 스텝 S301에 상당).
다음에, 복호부(101)는, 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 15 및 도 16의 스텝 S105에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.6)을 비제로 계수 테이블(Q13)로부터 취출하여, 계수 버퍼(114)에 격납한다(도 15 및 도 16의 스텝 S106에 상당).
또한, 복호부(101)는, 현재의 변수 큐 포인터(xadr)와 위상 포인터(q)에 의거하여 변수 행렬(Q14)을 참조하여(도 15 및 도 16의 스텝 S302에 상당), 변수 큐 포인터(xadr)로부터 위상 포인터(q)분만큼 말미측에 시프트시킨 어드레스에 격납되어 있는 변수(XQue[wadr+q])(=X7)를 변수 행렬(Q14)로부터 취출하여, 변수 버퍼(115)에 격납한다(도 15 및 도 16의 스텝 S303에 상당).
그 후, 어드레스 생성부(111a)에서 다음의 비제로 계수(W)를 지시하는 어드레스에 비제로 계수 큐 포인터(wadr)가 인크리먼트됨과 함께(도 15의 스텝 S107에 상당), 제로 계수 위치 테이블(Q12)에서 현재의 위상 포인터(q)가 지시하는 값 "1"이 "0"으로 갱신되는데(도 15의 스텝 S304에 상당), 이 갱신에 의해, 제로 계수 위치 테이블(Q12)의 모든 값이 "0"으로 되기 때문에(도 15의 스텝 S305의 YES), 다음의 반복이 실행되지 않고, 본 동작이 종료된다.
3. 3 작용·효과
이상과 같이 동작함으로써, 처리 완료 후의 계수 버퍼(114) 내에는, 비제로 계수(W)로 구성된 계수 행렬(Q21)이 복원되고, 변수 버퍼(115) 내에는, 비제로 계수(W)에 대응하는 변수(X)로 구성된 변수 행렬(Q24)이 배치된다. 그에 의해, 계수 행렬(Q21)의 작성에 필요로 하는 클록 수를 계수 행렬(Q11)의 복원에 필요로 하는 클록 수(예를 들면 8클록)보다도 적은 클록 수(예를 들면 3클록)로 저감하는 것이 가능해진다. 또한, 곱합 연산에서 제로 계수(W)와 변수(X)를 승산하는 처리를 생략하는 것도 가능해진다. 그 결과, 전체로서의 스루풋이 향상되기 때문에, 계수 행렬(Q11)의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 대폭적으로 단축하는 것이 가능해지다. 또한, 계수 버퍼(114)에 복원된 계수 행렬(Q21) 및 변수 버퍼(115) 내 배치된 변수 행렬(Q24)은, 각각의 선두로부터 차례로 순차적으로 판독되어 곱합 회로(116)에 입력됨으로써, 곱합 연산에 의한 컨벌루션 처리가 실행된다.
또한, 곱합 연산에 필요한 계수(W) 및 변수(X)를 메모리(102)로부터 선택적으로 판독하는 것이 가능해지기 때문에, 버스 트래픽의 저감이나 내부 버퍼(계수 버퍼(114), 변수 버퍼(115) 등)의 규모 저감 등의 효과를 이루는 것도 가능해진다.
또한, 제2 실시 형태와 마찬가지로, 계수 버퍼(114) 및 변수 버퍼(115)를 FIFO로서 구성함으로써, 계수 버퍼(114) 및 변수 버퍼(115)에의 모든 계수(W) 및 변수(X)의 격납이 완료되기 전에, 곱합 회로(116)에의 계수(W) 및 변수(X)의 순차적 입력이 가능해지기 때문에, 계수 행렬(Q11)의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 보다 단축하는 것도 가능하다. 단, 제3 실시 형태에서는, 계수(W)와 변수(X)를 승산하는 횟수가 제로 계수 위치 테이블(Q12)에 포함된 "1"의 수에 의존하여 변동한다. 그래서 본 실시 형태에서는, 제로 계수 위치 테이블(Q12)에 포함되는 "1"의 수와 같은 횟수, 곱합 회로(116)에 연산을 실행시키기 위한 구성이나, FIFO 제어에서 데이터의 종료가 곱합 회로(116)에 통지하는 구성 등이 부가되면 좋다.
그 밖의 구성, 동작 및 효과는, 상술한 실시 형태와 같으면 좋기 때문에, 여기서는 상세한 설명을 생략한다.
4. 제4 실시 형태
상술한 실시 형태에서는, 변수 행렬(Q14)이 압축 부호화되지 않은 경우에 관해 예시했지만, 변수 행렬(Q14)을 압축 부호화함으로써, 더한층의 메모리량의 삭감을 도모하는 것도 가능하다. 또한, 계수 행렬(Q11)과 변수 행렬(Q14)의 양방이 스파스 표현에 압축 부호화되어 있는 경우, 계수(W)와 변수(X)와의 양방이 정돈되어 있는 부분 이외의 부분의 연산을 생략하는 것이 가능해지기 때문에, 처리량의 삭감이나 처리 시간의 단축 등도 가능하게 된다. 그래서 제4 실시 형태에서는, 계수 행렬(Q11)에 더하여, 변수 행렬(Q14)도 스파스 표현에 의해 압축 부호화되어 있는 경우에 관해, 예를 들어 설명한다.
또한, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치는, 제3 실시 형태에서 도 7 등을 인용하여 설명한 뉴럴 네트워크 처리 장치(11)와 같은 구성이면 좋기 때문에, 여기서는 상세한 설명을 생략한다. 또한, 이하의 설명에서, 컨벌루션 대상의 변수 행렬(Q14)은, 컨벌루션 처리에 이용되는 계수 행렬(Q11)과 같은 데이터 길이 및 데이터 구조를 구비하고 있는 것으로 한다.
또한, 본 실시 형태에서는, 계수 행렬(Q11)과 마찬가지로, 변수 행렬(Q14)이, 도 6에 예시한 바와 같은, 제로 변수 위치 테이블(Q32)과, 비제로 변수 테이블(Q33)에 압축 부호화되어 있는 것으로 한다. 또한, 제로 변수 위치 테이블(Q32)은, 원래의 변수 행렬(Q14)의 탭수와 같은 탭수의 테이블로 되어 있고, 각 탭의 수치는, 변수 행렬(Q14)에서 그 탭과 대응하는 위치에 있는 변수(X)의 값이 0(제로)인지의 여부를 나타내고 있어도 좋다. 또한, 비제로 변수 테이블(Q33)은, 원래의 변수 행렬(Q14)에서의 제로 변수가 아닌 변수(X)의 값을 나타내는 테이블로 되어 있고, 비제로 변수 테이블(Q33)에서의 각 탭의 값은, 변수 행렬(Q14)에서의 제로 변수가 아닌 하나의 변수(X)의 값이면 좋다.
4. 1 스파스 표현 계수의 복호에 알맞는 복호부
본 실시 형태에 관한 복호부(101)도, 상술한 실시 형태에 관한 복호부(101)와 마찬가지로, 소프트웨어로서 실장하는 것도 가능하며, 하드웨어로서 실장하는 것도 가능하다. 이하의 설명에서는, 하드웨어 구성으로서 실장된 복호부에 관해, 구체례를 들어 설명한다.
4. 1. 1 복호부가 실행하는 복호 처리
도 18은, 본 실시 형태에 관한 복호부가 실행하는 동작, 즉 스파스 표현 계수를 복호할 때의 처리의 한 예를 도시하는 플로우차트이다. 도 18에서는, 명확화를 위해, 복호부가 실행하는 복호 처리를 플로우차트화하여 설명하지만, 실제로는, 도 18에 관한 복호 알고리즘이 도 7에 예시한 뉴럴 네트워크 처리 장치(11)의 복호부(41, 61 및 81)에 하드웨어 구성으로서 실장되면 좋다. 또한, 도 18에서, 도 9, 도 12 또는 도 15에 예시한 동작과 같은 동작에 관해서는, 그것을 인용함으로써, 그 상세한 설명을 생략한다.
도 18에 도시하는 바와 같이, 복호부(101)는, 우선, 계수 유지부(103)로부터 제로 계수 위치 테이블(SpMatW)(Q12) 및 비제로 계수 테이블(Q13)을 판독함과 함께(스텝 S401), 소정의 메모리 영역에 격납되어 있는 스파스 표현된 변수 행렬(SpMatX), 즉, 제로 변수 위치 테이블(SpMatX)(32) 및 비제로 변수 테이블(Q33)을 판독한다(스텝 S402). 판독된 제로 계수 위치 테이블(Q12) 및 비제로 계수 테이블(Q13)과, 제로 변수 위치 테이블(Q32) 및 비제로 변수 테이블(Q33)이란, 예를 들면, 복호부(101)의 메모리(102)에서의 기지의 어드레스에 격납된다.
다음에, 복호부(101)는, 제로 계수 위치 테이블(Q12)과 제로 변수 위치 테이블(Q32)에 대해, 대응하는 값끼리의 논리곱(AND)을 취함으로써, 계수 행렬(Q11)과 변수 행렬(Q14)의 쌍방에서 비제로의 값이 존재하는 탭의 위치를 나타내는 비제로 위치 테이블(SpMat)(Q40)을 생성한다(스텝 S403).
다음에, 복호부(101)는, 도 9의 스텝 S103과 마찬가지로, 비제로 계수 큐 포인터(wadr)에 선두 어드레스를 세트함과 함께, 도 12의 스텝 S201과 마찬가지로, 변수 큐 포인터(xadr)에 선두 어드레스를 세트한다.
다음에, 복호부(101)는, 스텝 S403에서 생성한 비제로 위치 테이블(Q40)을 프라이어리티 인코더(104)에 입력하여 평가함으로써, "1"이 입력된 입력 중에서 가장 우선순위가 높은 입력(즉, 비제로 위치 테이블(Q40)에서의 최초의 "1"에 대응하는 입력)를 특정하고(P. E. SpMat), 특정된 입력에 설정된 값을 위상 포인터(q)에 설정한다(q←1st nonzero)(스텝 S404).
계속해서, 복호부(101)는, 도 18에 도시하는 스텝 S410∼S107의 동작과, 스텝 S420∼S426의 동작을 실행하는데, 이들의 동작은 하드웨어상에서 병렬로 실행되면 좋기 때문에, 도 18의 플로우차트에서는, 이들을 병렬로 기재한다.
스텝 S410∼S107의 동작에서는, 복호부(101)는, 우선, 스텝 S401에서 판독한 제로 계수 위치 테이블(SpMatW)(Q12)을 프라이어리티 인코더(104)에 입력하여 평가함으로써, "1"이 입력된 입력 중에서 가장 우선순위가 높은 입력(즉, 제로 계수 위치 테이블(Q12)에서의 최초의 "1"에 대응하는 입력)을 특정하고(P. E. SpMatW), 특정된 입력에 설정된 값을 위상 포인터(qw)에 설정한다(qw←1st nonzero)(스텝 S410).
다음에, 복호부(101)는, 스텝 S404에서 세트한 비제로 위치 테이블(Q40)에 대한 위상 포인터(q)와, 스텝 S410에서 세트한 제로 계수 위치 테이블(Q12)에 대한 위상 포인터(qw)가 같은 값인지의 여부를 판정한다(qw==q?)(스텝 S411). 위상 포인터(qw)와 위상 포인터(q)가 같은 값이 아닌 경우(스텝 S411의 False), 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 인크리먼트함과 함께(wadr++)(스텝 S412), 제로 계수 위치 테이블(Q12)에서의 위상 포인터(qw)가 지시하는 값을 "1"로부터 "0"으로 재기록하고(SpMatW[qw]←0)(스텝 S413), 스텝 S410에 리턴한다. 한편, 위상 포인터(qw)와 위상 포인터(q)가 같은 값인 경우(스텝 S411의 True), 복호부(101)는, 도 9의 스텝 S105∼S107과 마찬가지로, 메모리(102) 내의 비제로 계수 테이블(Q13)로부터 비제로 계수(WQue[wadr])를 판독하여 계수 버퍼(Wbuf)에서의 소정의 위치에 격납함과 함께, 비제로 계수 큐 포인터(wadr)를 인크리먼트하고, 그 후, 스텝 S431에 이행한다.
이에 대해, 스텝 S410∼S107에 대해 병행하여 실행되는 스텝 S420∼S426의 동작에서는, 복호부(101)는, 우선, 스텝 S402에서 판독한 제로 변수 위치 테이블(SpMatX)(Q32)을 프라이어리티 인코더(104)에 입력하여 평가함으로써, "1"이 입력된 입력 중에서 가장 우선순위가 높은 입력(즉, 제로 변수 위치 테이블(Q32)에서의 최초의 "1"에 대응하는 입력)을 특정하고(P. E. SpMatX), 특정된 입력에 설정된 값을 위상 포인터(qx)에 설정한다(qx←1st nonzero)(스텝 S420).
다음에, 복호부(101)는, 스텝 S404에서 세트한 비제로 위치 테이블(Q40)에 대한 위상 포인터(q)와, 스텝 S420에서 세트한 제로 변수 위치 테이블(Q32)에 대한 위상 포인터(qx)가 같은 값인지의 여부를 판정한다(qx==q?)(스텝 S421). 위상 포인터(qx)와 위상 포인터(q)가 같은 값이 아닌 경우(스텝 S421의 False), 복호부(101)는, 변수 큐 포인터(xadr)를 인크리먼트함과 함께(xadr++)(스텝 S422), 제로 변수 위치 테이블(Q32)에서의 위상 포인터(qx)가 지시하는 값을 "1"로부터 "0"으로 재기록하고(SpMatX[qx]←0)(스텝 S423), 스텝 S420에 리턴한다. 한편, 위상 포인터(qx)와 위상 포인터(q)가 같은 값인 경우(스텝 S421의 True), 복호부(101)는, 메모리(102) 내의 비제로 변수 테이블(Q33)로부터 비제로 변수(XQue[xadr])를 판독하고(스텝 S424), 판독된 비제로 변수(XQue[xadr])를 변수 버퍼(Xbuf)에서의 소정의 위치에 격납함과 함께(스텝 S425), 비제로 변수 큐 포인터(xadr)를 인크리먼트하고(스텝 S426), 그 후, 스텝 S431에 이행한다.
이와 같이, 스텝 S410∼S107에 나타내는 동작과, 스텝 S420∼S426에 나타내는 동작을 병렬로 실행함으로써, 계수 버퍼(114) 및 변수 버퍼(115)에, 계수(W)와 변수(X)의 양방이 정돈되어 있는 계수(W) 및 변수(X)를 격납하는 것이 가능해진다.
스텝 S431에서는, 복호부(101)는, 비제로 위치 테이블(Q40)에서, 스텝 S404에서 특정된 입력에 대응하는 값을 "0"으로 재기록한다(SpMat[q]). 그리고, 복호부(101)는, 스텝 S431에서 갱신 후의 비제로 위치 테이블(Q40)의 값이 전부 "0"인지의 여부를 판정하고(SpMat==0?)(스텝 S432), 전부 "0"인 경우(스텝 S432의 YES), 본 동작을 종료한다. 한편, 비제로 위치 테이블(Q40)이 "1"을 포함하고 있는 경우(스텝 S432의 NO), 복호부(101)는, 스텝 S404에 리턴하여, 이후의 동작을 실행한다.
이상과 같이 동작함으로써, 계수 버퍼(114) 및 변수 버퍼(115) 내에는, 계수(W)와 변수(X)의 양방이 정돈되어 있는, 즉, 계수(W)와 변수(X)의 어느것도 제로가 아닌 것이 격납되기 때문에, 메모리량의 삭감을 도모하는 것이 가능하다. 또한, 계수(W)와 변수(X)의 양방이 정돈되어 있는 부분 이외의 부분의 연산을 생략하는 것이 가능해지기 때문에, 처리량의 삭감이나 처리 시간의 단축 등도 가능하게 된다. 그에 의해, 곱합 회로(116)가 실행하는 계수(W)와 변수(X)의 승산 횟수를 대폭적으로 삭감하는 것이 가능해지기 때문에, 계수 행렬의 복호 시작부터 컨벌루션 처리의 완료까지 필요로 하는 시간을 대폭적으로 단축하는 것이 가능해진다.
4. 1. 2 복호 처리의 구체례
계속해서, 본 실시 형태에 관한 복호부(101)가 실행하는 복호 처리의 구체례를, 도 19 및 도 20 및 도 21을 이용하면서, 도 18에 예시한 플로우차트에 따라 설명한다. 도 19는, 본 실시 형태에 관한 복호부가 실행하는 복호 처리의 구체례를 설명하기 위한 도면이다. 도 20 및 도 21은, 도 19에 도시하는 구체례에서의 위상 포인터, 비제로 계수 큐 포인터 및 변수 큐 포인터의 움직임을 설명하기 위한 도면이다. 또한, 도 19∼도 21에는, 도 10 및 도 11과 마찬가지로, 계수 행렬(Q11)이 1행8열의 구성을 하고 있고, 그 3열째와 5열째와 8열째에 비제로 계수가 격납되어 있는 경우가 예시되어 있다. 또한, 3열째의 비제로 계수는 0.1이고, 5열째의 비제로 계수는 -0.8이고, 8열째의 비제로 계수는 0.6이라고 한다. 또한, 도 19∼도 21에서는, 도 13과 마찬가지로, 변수 행렬(Q14)이 계수(X0)∼계수(X7)의 8개의 계수(X)가 1행8열로 배열한 구성을 하고 있는 것으로 한다.
도 19에 도시하는 바와 같이, 복호부(101)는, 비제로 계수 큐 포인터(wadr)를 생성 및 관리하는 어드레스 생성부(111a)와, 변수 큐 포인터(xadr)를 생성 및 관리하는 어드레스 생성부(111b)와, 메모리(102)로부터 판독된 계수(W)를 순차적으로 격납함으로써 비제로 계수(W)로 이루어지는 계수 행렬(Q21)을 유지하는 계수 버퍼(114)와, 메모리(102)로부터 판독된 변수(X)를 순차적으로 격납함으로써 비제로 계수(W)와 승산되는 변수(X)로 이루어지는 변수 행렬(Q24)을 유지하는 변수 버퍼(115)를 구비한다.
도 19에 도시하는 구성에서, 복호부(101)는, 우선, 제로 계수 위치 테이블(SpMatW)(Q12)(="00101001") 및 비제로 계수 테이블(Q13)(="0.1", "-0.8", "0.6")을 계수 유지부(103)로부터 취득함과 함께(도 18의 스텝 S401에 상당), 제로 변수 위치 테이블(SpMatX)(Q32) 및 비제로 변수 테이블(Q33)을 소정의 메모리 영역에서 취득한다(도 18의 스텝 S402에 상당). 그리고, 복호부(101)는, 제로 계수 위치 테이블(Q12)과 제로 변수 위치 테이블(Q32)의 논리곱을 취함으로써, 계수(W)와 변수(X)와의 양방이 정돈되어 있는 위치를 나타내는 비제로 위치 테이블(SpMat)(Q40)을 생성한다(도 18의 스텝 S403에 상당).
또한, 복호부(101)는, 최초의 반복(itr=0)에서는, 어드레스 생성부(111a)에서 관리되는 비제로 계수 큐 포인터(wadr) 및 어드레스 생성부(111b)에서 관리되는 변수 큐 포인터(xadr)에 선두 어드레스를 세트한다(도 18의 스텝 S103 및 S201에 상당). 그에 의해, 도 20에 도시하는 바와 같이, 비제로 계수 큐 포인터(wadr)는 비제로 계수 테이블(Q13)에서의 선두의 값 "0.1"을 지시하고, 변수 큐 포인터(xadr)는 비제로 변수 테이블(Q33)에서의 선두의 변수(X0)을 지시하게 된다.
다음에, 복호부(101)는, 판독 비제로 위치 테이블(Q40)을 프라이어리티 인코더(104)에 입력하여, 선두의 "1"의 위치, 즉 계수(W)와 변수(X)의 양방이 정돈된 위치에서의 선두를 특정한다. 상술한 바와 같이, itr=0에서는, 비제로 위치 테이블(Q40)은 "00100001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a2)에 설정된 값(p)=2를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(q)=2를 위상 포인터(q)에 설정한다(도 18의 스텝 S404에 상당).
다음에, 복호부(101)는, 도 18에서의 스텝 S410∼S107의 동작과, 스텝 S420∼S426의 동작을 병렬로 실행한다.
도 18에서의 스텝 S410∼S107의 동작에서는, 복호부(101)는, 스텝 S401에서 판독한 제로 계수 위치 테이블(Q12)을 프라이어리티 인코더(104)에 입력하여, 선두의 "1"의 위치, 즉 계수 행렬(Q11)에서의 선두의 비제로 계수(W)의 위치를 특정한다. 도 20에 도시하는 바와 같이, itr=0에서는, 제로 계수 위치 테이블(Q12)은 "00101001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a2)에 설정된 값(pw)=2를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(qw)=2를 위상 포인터(qw)에 설정한다(도 18의 스텝 S410에 상당).
계속해서, 복호부(101)는, 위상 포인터(qw)=2와 위상 포인터(q)=2를 비교하여(도 18의 스텝 S411에 상당), 양자가 일치하고 있음으로(도 18의 스텝 S411의 True에 상당), 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 18 및 도 19의 스텝 S105에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.1)를 비제로 계수 테이블(Q13)로부터 취출하여, 계수 버퍼(114)에 격납한다(도 18 및 도 19의 스텝 S106에 상당). 그리고, 복호부(101)는, 어드레스 생성부(111a)에서 관리되어 있는 비제로 계수 큐 포인터(wadr)를 인크리먼트한다(도 18의 스텝 S107에 상당).
한편, 도 18에서의 스텝 S420∼S426의 동작에서는, 복호부(101)는, 스텝 S402에서 판독한 제로 변수 위치 테이블(Q32)을 프라이어리티 인코더(104)에 입력하여, 선두의 "1"의 위치, 즉 변수 행렬(Q14)에서의 선두의 비제로 변수(X)의 위치를 특정한다. 도 20에 도시하는 바와 같이, itr=0에서는, 제로 변수 위치 테이블(Q32)은 "10100111"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a0)에 설정된 값(qx)=0을 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(qx)=0을 위상 포인터(qx)에 설정한다(도 18의 스텝 S420에 상당).
계속해서, 복호부(101)는, 위상 포인터(qx)=0와 위상 포인터(q)=2를 비교하여(도 18의 스텝 S421에 상당), 양자가 일치하지 않기 때문에(도 18의 스텝 S421의 False에 상당), 도 20에 도시하는 바와 같이, 비제로 변수 큐 포인터(xadr)를 인크리먼트함과 함께(도 18의 스텝 S422에 상당), 제로 변수 위치 테이블(Q32)에서의 현재의 위상 포인터(qx)가 지시하는 값을 "0"으로 재기록하고(도 18의 스텝 S423에 상당), 재기록 후의 제로 변수 위치 테이블(Q32)를 재차 프라이어리티 인코더(104)에 입력한다(도 18의 스텝 S420에 상당).
도 20에 도시하는 바와 같이, 재기록 후의 제로 계수 위치 테이블(Q12)은 "00100111"의 행렬이기 때문에, 프라이어리티 인코더(104)로부터는, 값(qx)=2가 출력(o)으로서 출력된다. 이에 대해, 복호부(101)는, 위상 포인터(qx)와 위상 포인터(q)가 일치하고 있음으로(도 18의 스텝 S421의 True에 상당), 현재의 비제로 변수 큐 포인터(xadr)에 의거하여 비제로 변수 테이블(Q33)을 참조하여(도 18 및 도 19의 스텝 S424에 상당), 비제로 변수 큐 포인터(xadr)가 지시하는 값(비제로 변수)(XQue[xadr])(=X2)를 비제로 변수 테이블(Q33)으로부터 취출하여, 변수 버퍼(115)에 격납한다(도 18 및 도 19의 스텝 S425에 상당). 그리고, 복호부(101)는, 어드레스 생성부(111b)에서 관리되어 있는 비제로 변수 큐 포인터(xadr)를 인크리먼트한다(도 18의 스텝 S426에 상당).
그 후, 복호부(101)는, 비제로 위치 테이블(Q40)에서의 현재의 위상 포인터(q)가 지시하는 값 "1"이 "0"으로 갱신된다(도 18의 스텝 S431에 상당). 계속해서, 복호부(101)에 의해 비제로 위치 테이블(Q40)의 모든 값이 "0"인지의 여부가 판정되고(도 18의 스텝 S432에 상당), 다음의 반복(itr=1)이 실행된다(도 18의 스텝 S432의 NO에 상당).
도 21에 도시하는 바와 같이, itr=1에서는, 비제로 위치 테이블(Q40)은 "00000001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a7)에 설정된 값(p)=7을 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(q)=7을 위상 포인터(q)에 설정한다(도 18의 스텝 S404에 상당).
다음에, 복호부(101)는, 도 18에서의 스텝 S410∼S107의 동작에서, 스텝 S401에서 판독한 제로 계수 위치 테이블(Q12)을 프라이어리티 인코더(104)에 입력하고, 선두의 "1"의 위치를 특정한다. 도 21에 도시하는 바와 같이, itr=1에서는, 제로 계수 위치 테이블(Q12)은 "00001001"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a4)에 설정된 값(pw)=4를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(qw)=4를 위상 포인터(qw)에 설정한다(도 18의 스텝 S410에 상당).
계속해서, 복호부(101)는, 위상 포인터(qw)=4와 위상 포인터(q)=7을 비교하고(도 18의 스텝 S411에 상당), 양자가 일치하지 않기 때문에(도 18의 스텝 S411의 False에 상당), 도 21에 도시하는 바와 같이, 비제로 계수 큐 포인터(wadr)를 인크리먼트함과 함께(도 18의 스텝 S412에 상당), 제로 계수 위치 테이블(Q12)에서 현재의 위상 포인터(qw)가 지시하는 값을 "0"으로 재기록하고(도 18의 스텝 S413에 상당), 재기록 후의 제로 계수 위치 테이블(Q12)을 재차 프라이어리티 인코더(104)에 입력한다(도 18의 스텝 S410에 상당).
도 21에 도시하는 바와 같이, 재기록 후의 제로 계수 위치 테이블(Q12)은 "00000001"의 행렬이기 때문에, 프라이어리티 인코더(104)로부터는, 값(qx)=7이 출력(o)으로서 출력된다. 이에 대해, 복호부(101)는, 위상 포인터(qw)와 위상 포인터(q)가 일치하고 있음으로(도 18의 스텝 S411의 True에 상당), 현재의 비제로 계수 큐 포인터(wadr)에 의거하여 비제로 계수 테이블(Q13)을 참조하여(도 18 및 도 19의 스텝 S105에 상당), 비제로 계수 큐 포인터(wadr)가 지시하는 값(비제로 계수)(WQue[wadr])(=0.6)를 비제로 계수 테이블(Q13)로부터 취출하여, 계수 버퍼(114)에 격납한다(도 18 및 도 19의 스텝 S106에 상당). 그리고, 복호부(101)는, 어드레스 생성부(111a)에서 관리되어 있는 비제로 계수 큐 포인터(wadr)를 인크리먼트한다(도 18의 스텝 S107에 상당).
한편, 도 18에서의 스텝 S420∼S426의 동작에서는, 복호부(101)는, 스텝 S402에서 판독한 제로 변수 위치 테이블(Q32)을 프라이어리티 인코더(104)에 입력하고, 선두의 "1"의 위치를 특정한다. 도 21에 도시하는 바와 같이, itr=1에서는, 제로 변수 위치 테이블(Q32)은 "00000111"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a5)에 설정된 값(qx)=5를 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(qx)=5를 위상 포인터(qx)에 설정한다(도 18의 스텝 S420에 상당).
계속해서, 복호부(101)는, 위상 포인터(qx)=5와 위상 포인터(q)=2를 비교하여(도 18의 스텝 S421에 상당), 양자가 일치하지 않기 때문에(도 18의 스텝 S421의 False에 상당), 도 21에 도시하는 바와 같이, 비제로 변수 큐 포인터(xadr)를 인크리먼트함과 함께(도 18의 스텝 S422에 상당), 제로 변수 위치 테이블(Q32)에서의 현재의 위상 포인터(qx)가 지시하는 값을 "0"으로 재기록하고(도 18의 스텝 S423에 상당), 재기록 후의 제로 변수 위치 테이블(Q32)을 재차 프라이어리티 인코더(104)에 입력한다(도 18의 스텝 S420에 상당).
도 21에 도시하는 바와 같이, 재기록 후의 제로 계수 위치 테이블(Q12)은 "00000011"의 행렬이기 때문에, 프라이어리티 인코더(104)는, 입력(a6)에 설정된 값(qx)=6을 출력(o)으로서 출력한다. 이에 대해, 복호부(101)는, 프라이어리티 인코더(104)로부터 출력된 값(qx)=6을 위상 포인터(qx)에 설정한다(도 18의 스텝 S420에 상당).
계속해서, 복호부(101)는, 위상 포인터(qx)=6과 위상 포인터(q)=2를 비교하여(도 18의 스텝 S421에 상당), 양자가 일치하지 않기 때문에(도 18의 스텝 S421의 False에 상당), 도 21에 도시하는 바와 같이, 비제로 변수 큐 포인터(xadr)를 인크리먼트함과 함께(도 18의 스텝 S422에 상당), 제로 변수 위치 테이블(Q32)에서의 현재의 위상 포인터(qx)가 지시하는 값을 "0"으로 재기록하고(도 18의 스텝 S423에 상당), 재기록 후의 제로 변수 위치 테이블(Q32)을 재차 프라이어리티 인코더(104)에 입력한다(도 18의 스텝 S420에 상당).
도 21에 도시하는 바와 같이, 재기록 후의 제로 계수 위치 테이블(Q12)은 "00000001"의 행렬이기 때문에, 프라이어리티 인코더(104)로부터는, 값(qx)=7이 출력(o)으로서 출력된다. 이에 대해, 복호부(101)는, 위상 포인터(qx)와 위상 포인터(q)가 일치하고 있음으로(도 18의 스텝 S421의 True에 상당), 현재의 비제로 변수 큐 포인터(xadr)에 의거하여 비제로 변수 테이블(Q33)을 참조하여(도 18 및 도 19의 스텝 S424에 상당), 비제로 변수 큐 포인터(xadr)가 지시하는 값(비제로 변수)(XQue[xadr])(=X7)을 비제로 변수 테이블(Q33)로부터 취출하여, 변수 버퍼(115)에 격납한다(도 18 및 도 19의 스텝 S425에 상당). 그리고, 복호부(101)는, 어드레스 생성부(111b)에서 관리되어 있는 비제로 변수 큐 포인터(xadr)를 인크리먼트한다(도 18의 스텝 S426에 상당).
그 후, 비제로 위치 테이블(Q40)에서 현재의 위상 포인터(q)가 지시하는 값 "1"이 "0"으로 갱신되는데(도 18의 스텝 S431에 상당), 이 갱신에 의해, 비제로 위치 테이블(Q40)의 모든 값이 "0"으로 되기 때문에(도 18의 스텝 S432의 YES), 다음의 반복이 실행되지 않고, 본 동작이 종료된다.
4. 2 작용·효과
이상과 같이 동작함으로써, 처리 완료 후의 계수 버퍼(114) 및 변수 버퍼(115) 내에는, 계수(W)와 변수(X)와의 양방이 정돈되어 있는 것이 격납된다. 그에 의해, 곱합 연산에서 실질적으로 기여하지 않는 계수(W) 및 변수(X)가 계수 버퍼(114) 및 변수 버퍼(115)에 격납되지 않기 때문에, 더한층의 메모리량의 삭감을 도모하는 것도 가능하다. 또한, 계수(W)와 변수(X)의 양방이 정돈되어 있는 부분 이외의 부분의 연산을 생략하는 것이 가능해지기 때문에, 처리량의 삭감이나 처리 시간의 단축 등도 가능하게 된다.
그 밖의 구성, 동작 및 효과는, 상술한 실시 형태와 같으면 좋기 때문에, 여기서는 상세한 설명을 생략한다.
5. 제5 실시 형태
상술한 실시 형태에서는, 스파스 표현에 의해 압축 부호화된 계수 행렬(및 변수 행렬)을 복호하는 경우에 관해 예시했다. 그에 대해, 제5 실시 형태에서는, 컨벌루션 처리의 결과로서 얻어진 곱합 결과, 즉 변수 행렬을 스파스 표현에 의해 압축 부호화하여 메모리에 기록하는 경우에 관해, 예를 들어 설명한다.
또한, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치는, 제1 실시 형태에서 도 7을 이용하여 설명한 뉴럴 네트워크 처리 장치(11)와 같은 구성이면 좋기 때문에, 여기서는 상세한 설명을 생략한다. 또한, 이하의 설명에서, 컨벌루션 대상의 변수 행렬(Q14)은, 컨벌루션 처리에 이용되는 계수 행렬(Q11)과 같은 데이터 길이 및 데이터 구조를 구비하고 있는 것으로 한다.
5. 1 비교례
도 22는, 비교례에 관한 곱합 결과의 메모리에의 기록을 설명하기 위한 도면이다. 도 22에 도시하는 바와 같이, 비교례에서는, 컨벌루션 처리부(21/23/25)의 곱합 회로(116)로부터 곱합 연산의 단위마다 출력된 곱합 연산 결과인 변수(X0∼X7)가, 각 변수(X0∼X7)의 값에 관계 없이, 다음 단(段)의 풀링 처리부(22/24)의 메모리(51/71)에 순차적으로 기록된다. 여기서, 상술한 실시 형태에서 예시한 변수 행렬(Q14)과 같이, 예를 들면 변수(X1, X3, X4)가 제로였던 경우, 변수 행렬(Q14)을 스파스 표현에 의해 압축 부호화한 다음의 메모리(51/71)에 기록함으로써, 메모리(51/71)상의 데이터량을 삭감하는 것이 가능해진다.
5. 2 부호화부
도 23은, 본 실시 형태에 관한 부호화부의 개략 구성례를 도시하는 회로도이다. 또한, 도 23에 예시한 부호화부(200)는, 예를 들면, 도 7에 예시한 뉴럴 네트워크 처리 장치(11)의 각 컨벌루션 처리부(21/23/25)에서의 곱합 결과의 출력단에 배치되면 좋다.
도 23에 도시하는 바와 같이, 본 실시 형태에 관한 부호화부(200)는, 예를 들면, 버퍼 회로(201)와, 판정 회로(202)와, 셀렉터(203)와, 지연 회로(204)와, 스파스 행렬 버퍼(SpMat Buf)(제1 버퍼)(205)와, 기록 버퍼(제2 버퍼)(206)를 구비한다.
또한, 곱합 회로(116)는, 상술한 실시 형태와 같으면 좋고, 예를 들면, 변수(X)와 계수(W)를 승산하는 승산기(161)와, 이 승산 결과를 가산하는 가산기(162)와, 이 가산 결과를 곱합 연산의 단위마다 유지하는 어큐뮬레이터(163)를 구비하고 있다.
부호화부(200)의 버퍼 회로(201)에는, 1회의 곱합 연산이 완료될 때마다, 어큐뮬레이터(163)로부터 그 결과가 입력된다. 또한, 버퍼 회로(201)의 이네이블 단자(en)에는, 1회의 곱합 연산이 완료된될 때마다, 예를 들면 곱합 회로(116) 또는 복호부(101)로부터 곱합 종료 통지가 입력된다. 버퍼 회로(201)는, 곱합 종료 통지가 입력되면, 유지하고 있는 곱합 연산의 결과, 즉 변수(X)를 판정 회로(202) 및 기록 버퍼(206)에 출력한다.
판정 회로(202)는, 입력된 변수(X)에 관해, 그 값이 제로인지 비제로인지를 판정한다. 변수(X)의 값이 제로인 경우(T: True), 판정 회로(202)는, 변수(X)가 제로였던 것을 나타내는 제어 신호를 셀렉터(203)에 출력한다. 한편, 변수(X)의 값이 비제로인 경우(F: False), 판정 회로(202)는, 변수(X)가 비제로였던 것을 나타내는 제어 신호를 기록 버퍼(206)에 출력한다.
셀렉터(203)는, 판정 회로(202)로부터 입력된 제어 신호에 따라, "0" 또는 "1"의 값을 스파스 행렬 버퍼(205)에 입력한다. 예를 들면, 셀렉터(203)는, 변수(X)가 제로였던 것을 나타내는 제어 신호가 입력되어 있는 경우, 스파스 행렬 버퍼(205)에 "0"을 출력하고, 이 제어 신호가 입력되지 않은 경우, "1"을 출력해도 좋다. 또한, 판정 회로(202)는 변수(X)가 비제로였던 것을 나타내는 제어 신호를 셀렉터(203)에 출력하고, 셀렉터(203)가 이 제어 신호를 받아 스파스 행렬 버퍼(205)에 "1"을 출력하도록 구성되어도 좋다.
스파스 행렬 버퍼(205)에는, 곱합 종료 통지가 타이밍을 맞추기 위한 지연 회로(204)를 통하여 입력된다. 스파스 행렬 버퍼(205)는, 셀렉터(203)로부터 입력된 "0" 또는 "1"의 값을, 곱합 종료 통지의 레벨 천이에 따라 순차적으로 유지한다. 이에 의해, 스파스 행렬 버퍼(205) 내에는, 곱합 연산 결과로서의 제로 변수 위치 테이블(Q52)이 구축된다. 그 후, 예를 들면 복호부(101) 등으로부터 맵 종료 통지가 입력되면, 스파스 행렬 버퍼(205)에 유지되어 있는 제로 변수 위치 테이블(Q52)이, 다음 단의 풀링 처리부(22/24)의 메모리(51/71)에 기록되고, 스파스 행렬 버퍼(205) 내의 제로 변수 위치 테이블(Q52)이 클리어된다. 또한, 맵이란, 1회가 컨벌루션 처리의 대상이 되는 데이터 전체를 의미하고 있어도 좋다.
기록 버퍼(206)에는, 상술한 바와 같이, 버퍼 회로(201)로부터 출력된 변수(X)와, 판정 회로(202)로부터 출력된 제어 신호가 입력된다. 또한, 기록 버퍼(206)에는, 비제로 변수(X)를 기록하는 메모리 영역의 선두 어드레스도 입력된다. 기록 버퍼(206)는, 판정 회로(202)로부터 변수(X)가 비제로였던 것을 나타내는 제어 신호가 입력되면, 버퍼 회로(201)로부터 입력된 변수(X)를 일시 유지한다. 그리고, 예를 들면, 하나의 맵에 대한 압축 부호화 처리가 완료되는 시점에서, 유지하고 있는 변수(X)의 행렬, 즉 비제로 변수 테이블(Q53)을, 예를 들면 FIFO 제어에 따라, 선두 어드레스로부터 순번대로 다음 단의 풀링 처리부(22/24)의 메모리(51/71) 내에 격납한다. 이에 의해, 메모리(51/71) 내는, 곱합 연산 결과로서의 비제로 변수 테이블(Q53)이 격납된다. 또한, 기록 버퍼(206)는, 각 비제로 변수(X)의 기록처 어드레스를 비제로 변수(X)의 값과 동기하여 유지하고, 그 후, 기록처 어드레스에 따라 비제로 변수(X)를 메모리(51/71) 내 기록해도 좋다.
5. 3 작용·효과
이상과 같은 부호화부(200)를 각 컨벌루션 처리부(21/23/25)의 출력단에 배치함으로써, 컨벌루션 처리의 결과로서 얻어진 곱합 결과, 즉 변수 행렬(Q14)을 스파스 표현에 의해 압축 부호화하여 메모리에 기록하는 것이 가능해진다. 그에 의해, 메모리(51/71)상의 데이터량을 삭감하는 것이 가능해진다.
그 밖의 구성, 동작 및 효과는, 상술한 실시 형태와 같으면 좋기 때문에, 여기서는 상세한 설명을 생략한다.
6. 제6 실시 형태
상술한 제5 실시 형태에서, 변수(X)를 스파스 표현화하면서 메모리(51/71) 기록할 때에, 다음의 컨벌루션 처리부(23/25)에 있어서 컨벌루션 처리(이하, 단지 차(次) 레이어라고 칭한다)의 계수(W)의 제로 계수 위치를 가미함으로써, 더욱 메모리 용량의 저감을 도모하는 것이 가능해진다. 이것은, 「차 레이어의 곱합 처리에서, 당해 차 레이어의 제로 계수 위치 테이블로부터 계수(W)가 제로인 것을 사전에 알고 있는 위치의 변수(X)에 관해서는, 당해 차 레이어의 곱합 처리에서 연산 처리를 생략할 수 있기 때문에, 현 레이어에서의 메모리에의 기록이 불필요하다」라는 생각에 의거하고 있다. 이것은 변수(X)를 비키면서 참조하는 CNN(Convolutional Nural Network)에서도, 후반의 풀 커넥션층에서도 유효하다. 그래서, 제6 실시 형태에서는, 차 레이어의 제로 계수 위치 테이블로부터 계수(W)가 제로인 것이 사전에 알고 있는 위치의 변수(X)에 관해서는 메모리에의 기록을 생략할 수 있는 구성에 관해, 예를 들어 설명한다.
또한, 본 실시 형태에 관한 뉴럴 네트워크 처리 장치는, 제5 실시 형태에서 도 7 등을 참조하여 설명한 뉴럴 네트워크 처리 장치(11)와 같은 구성이면 좋기 때문에, 여기서는 상세한 설명을 생략한다. 또한, 이하의 설명에서, 컨벌루션 대상의 변수 행렬(Q14)은, 컨벌루션 처리에 이용되는 계수 행렬(Q11)과 같은 데이터 길이 및 데이터 구조를 구비하고 있는 것으로 한다.
6. 1 부호화부
도 24는, 본 실시 형태에 관한 부호화부의 개략 구성례를 도시하는 회로도이다. 도 24에 도시하는 바와 같이, 본 실시 형태에 관한 부호화부(300)는, 제5 실시 형태에서 도 23을 이용하여 설명한 부호화부(200)와 같은 구성에서, 2개의 AND 회로(301 및 302)와, 레지스터(303)가 추가된 구성을 구비한다. 또한, 도 24에서는, 설명의 간략화를 위해, 컨벌루션부(21, 23, 25)에서의 메모리(102)와, 풀링 처리부(22, 24)에서의 메모리(51, 71)가 연속한 메모리 영역(304)상에 배치되어 있는 경우를 예시한다.
레지스터(303)에는, 메모리 영역(304)(차 레이어의 메모리(102))로부터 사전에 판독된 차 레이어의 제로 계수 위치 테이블(Q62)이 격납된다. 레지스터(303)는, 곱합 종료 통지의 천이에 따라, 제로 계수 위치 테이블(Q62)을 구성하는 값 "0" 또는 "1"을 하나씩, 2개의 AND 회로(301 및 302) 각각에 출력한다.
AND 회로(301)는, 판정 회로(202)로부터 출력된 변수(X)가 제로 변수였던 것을 나타내는 제어 신호 "1"과, 레지스터(303)로부터 출력된 계수(W)가 제로 계수인지 비제로 계수인지를 나타내는 값("0" 또는 "1")과의 논리곱을 취하고, 그 결과를 셀렉터(203)의 제어 단자에 입력한다.
이에 대해, 셀렉터(203)는, AND 회로(301)로부터 입력된 값이 "1"인 경우, 즉, 버퍼 회로(201)로부터 입력된 변수(X)가 비제로 변수(X)이고 또한 차 레이어의 계수 행렬에서의 대응하는 계수(W)가 비제로 계수(W)인 경우에 "1"을 출력하고, AND 회로(301)로부터 입력된 값이 "1"인 경우, 즉, 변수(X)와 차 레이어에서의 계수(W)의 적어도 하나의 값이 제로인 경우에 "0"을 출력한다. 이에 의해, 스파스 행렬 버퍼(SpMat Buf)(205) 내에, 차 레이어의 곱합 연산에서 유효하게 활용되는 비제로 변수(X)의 위치를 나타내는 제로 변수 위치 테이블(Q52)이 구축된다.
AND 회로(302)는, 판정 회로(202)로부터 출력된 변수(X)가 비제로 변수였던 것을 나타내는 제어 신호 "1"과, 레지스터(303)로부터 출력된 계수(W)가 제로 계수인지 비제로 계수인지를 나타내는 값("0" 또는 "1")과의 논리곱을 취하고, 그 결과를 기록 버퍼(206)에 입력한다.
이에 대해, 기록 버퍼(206)는, AND 회로(302)로부터 입력된 값이 "1"인 경우에, 즉, 버퍼 회로(201)로부터 입력된 변수(X)가 비제로 변수(X)이고 또한 차 레이어의 계수 행렬에서의 대응하는 계수(W)가 비제로 계수(W)인 경우에, 버퍼 회로(201)로부터 출력된 변수(X)를 격납한다. 이에 의해, 기록 버퍼(206) 내 또는 메모리 영역(207)(메모리(51/71)) 내에, 차 레이어의 곱합 연산에서 유효하게 활용되는 비제로 변수(X)로 구성된 비제로 변수 테이블(Q53)이 구축된다.
6. 2 동작례
계속해서, 도 24에 도시하는 부호화부(300)의 동작에 관해 설명한다. 도 25는, 도 24에 도시하는 부호화부의 동작례를 설명하기 위한 도면이다. 또한, 도 25에서는, 설명의 사정 상, 현재 처리 중의 레이어(이하, 현(現) 레이어라고 한다)의 변수(X)를 X0n(n은 자연수)로 하고, 차 레이어의 변수(X)를 X1n로 한다. 또한, 설명의 간략화를 위해, 현 레이어에서의 변수 행렬(Q14)의 제로 계수 위치 테이블(Q12)과 계수 행렬(Q11)의 제로 변수 위치 테이블의 비제로의 값의 논리곱을 취한 행렬, 즉 변수 행렬(Q54)의 비제로의 위치를 나타내는 행렬이 "10100111"이라고 하고, 변수 행렬(Q14)이 스파스 표현화되지 않은 경우를 예시한다. 단, 이것으로 한정되지 않고, 변수 행렬(Q14)은 스파스 표현에 의해 압축 부호화되어 있어도 좋다.
도 25에 도시하는 바와 같이, 곱합 회로(116)로부터는, 현 레이어의 변수 행렬(Q14)과 계수 행렬(Q11)을 승산함에 의해 얻어진 변수 행렬(Q54)이 출력된다. 도 24에 도시하는 기록 버퍼(206)는, AND 회로(302)로부터 출력된, 변수(X1n)와 차 레이어의 제로 계수 위치 테이블(Q62)에서의 대응하는 값과의 논리곱의 결과에 의거하여, 차 레이어에서 유효한 변수(X1n)를 메모리 영역(304)에 기록한다. 또한, 메모리 영역(304)에는, 스파스 행렬 버퍼(205)에 유지되어 있는 제로 변수 위치 테이블(Q52)도 격납된다.
6. 3 작용·효과
이상과 같은 부호화부(300)를 각 컨벌루션 처리부(21/23/25)의 출력단에 배치함으로써, 메모리(51/71)에 기록된 변수 행렬의 데이터량을 더욱 삭감하는 것이 가능해진다.
그 밖의 구성, 동작 및 효과는, 상술한 실시 형태와 같으면 좋기 때문에, 여기서는 상세한 설명을 생략한다.
6. 4 변형례
또한, 차 레이어에서 처리해야 할 맵이 복수 있는 경우, 예를 들면, 판독해야 할 차 레이어의 제로 계수 위치 테이블(Q62)이 복수 있는 경우, 이하와 같은 변화를 채택할 수 있다.
6. 4. 1 제1 변형례
도 26은, 제1 변형례를 설명하기 위한 모식도이다. 도 26에 도시하는 바와 같이, 각 레이어에서의 처리 대상의 데이터가 복수의 맵(변수 행렬(Q14a∼Q14c))로 구성되고, 각각에 대해 다른 필터 계수(계수 행렬)가 설정되어 있는 경우, 차 레이어에서의 전 맵분의 제로 계수 위치 테이블(Q62a∼Q62c)의 논리합을 취함으로써 얻어진 제로 계수 위치 테이블(Q72)을 도 24의 레지스터(303)에 등록하여 이용하는 것도 가능하다.
6. 4. 2 제2 변형례
또한, 제1 변형례와 같이, 각 레이어에서의 처리 대상의 데이터가 복수의 맵(변수 행렬(Q14a∼Q14c))으로 구성되고, 각각에 대해 다른 필터 계수(계수 행렬)가 설정되어 있는 경우, 차 레이어에서의 각 맵분의 제로 계수 위치 테이블(Q62a∼Q62c)을 도 24의 레지스터(303)에 등록해 둠으로써, 맵마다의 곱합 연산 결과를 다중으로 출력하도록 구성하는 것도 가능하다.
6. 4. 3 제3 변형례
상술한 제1 및 제2 변형례는, 조합시키는 것이 가능하다. 도 27은, 제1 및 제2 변형례를 조합시킨 제3 변형례를 설명하기 위한 모식도이다. 도 27에 도시하는 바와 같이, 제3 변형례에서는, 차 레이어에서의 복수의 필터 계수(계수 행렬)가 복수의 그룹에 그룹 분류되고, 각 그룹에서, 제로 계수 위치 테이블의 논리합이 취해진다. 도 27에 도시하는 예에서는, 그룹화된 계수 행렬(Q62b 및 Q62c)의 논리합이 취해지고 제로 계수 위치 테이블(Q82b)이 생성되고, 레지스터(303)에 등록된다. 단, 그룹 내 하나의 제로 계수 위치 테이블(Q62a)밖에 존재하지 않는 경우, 그 제로 계수 위치 테이블(Q62a)이 그대로 레지스터(303)에 등록되면 좋다.
7. 본 기술의 적용례
다음에, 상술한 실시 형태에 관한 뉴럴 네트워크 처리 장치(11)의 적용례에 관해, 몇가지 예를 들어 설명한다.
7. 1 제1 적용례
도 28은, 제1 적용례를 설명하기 위한 도면이다. 도 28에 도시하는 바와 같이, 제1 적용례에서는, 뉴럴 네트워크 처리 장치(11)를, 정보 처리 장치(프로세서라고도 한다)(1000)에 조립된 DNN 엔진(액셀러레이터)(1001)으로서 구성하는 것을 나타낸다. DNN 엔진(1001)은, 정보 처리 장치(1000)에서의 프로세서 코어(단지 코어라고도 하다)(1002)에 버스(1003)를 통하여 접속된다. 이에 의해, 프로세서 코어(1002)와 DNN 엔진(1001)이 조밀하게 연휴한 처리를 실현하는 것이 가능하다.
또한, 도 29에 예시한 정보 처리 장치(1000A)와 같이, 하나의 프로세서 코어(1002)에 대해 복수의 DNN 엔진(1001A, 1001b, 1001c, …)이 버스(1003)를 통하여 접속되어도 좋다.
7. 2 제2 적용례
도 30은, 제2 적용례에 관한 IoT(Internet of Things) 에지 AI(Artificial Intelligence) 시스템(정보 처리 시스템이라고도 한다)의 개략 구성례를 도시하는 블록도이다. 도 30에 도시하는 바와 같이, 제1 적용례에 관한 뉴럴 네트워크 처리 장치(11)를 탑재한 정보 처리 장치(1000a∼1000c)는, 다양하는 것에 탑재된 다양한 센서(1111∼1114)에 무선 또는 유선으로 접속된 IoT 에지 AI 시스템(1100)에 조립되어도 좋다.
7. 3 제3 적용례
도 31은, 제3 적용례에 관한 전자 기기의 하나인 자율 로봇의 개략 구성례를 도시하는 모식도이다. 도 31에 도시하는 바와 같이, 제1 적용례에 관한 정보 처리 장치(1000)는, 예를 들면, 자율 로봇(1200)의 눈에 상당하는 이미지 센서(1211)에서 취득된 데이터를 처리하는 처리부(1201)나, 귀에 상당하는 마이크로폰(1212)에서 취득된 데이터를 처리하는 처리부(1202)에 적용할 수 있다. 또한, 제2 변형례에 관한 IoT 에지 AI 시스템(1100)은, 자율 로봇(1200)의 팔이나 다리에 탑재된 각종 센서에서 얻어진 정보를 처리하는 처리부(1203)에 적용할 수 있다. 또한, 제2변형례에 관한 IoT 에지 AI 시스템(1100)은, 자율 로봇(1200) 전체를 제어하는 제어부(1204)에도 적용할 수 있다.
또한, 이미지 센서(1211)에서 취득된 데이터를 처리하는 처리부(1201)에 적용하는 경우에는, 이미지 센서(1211)의 칩과 정보 처리 장치(1000)의 칩이, 서로 접합된 적층 칩 구조를 갖고 있어도 좋다.
7. 4 제4 적용례
도 32는, 제4 적용례에 관한 전자 기기의 하나인 텔레비전의 개략 구성례를 도시하는 모식도이다. 도 32에 도시하는 바와 같이, 제1 적용례에 관한 정보 처리 장치(1000) 및 제2 적용례에 관한 IoT 에지 AI 시스템(1100)은, 텔레비전(1300)이 설치된 공간(방 등)의 환경 인식을 위한 서브시스템에 적용하는 것이 가능하다.
제1 적용례에 관한 정보 처리 장치(1000)는, 예를 들면, 텔레비전(1300)의 주위를 촬상하는 이미지 센서(1311)에서 취득된 데이터를 처리하는 처리부(1301)나, 텔레비전(1300)의 주위의 상황을 취득하는 센서, 예를 들면, ToF(Time-of-Flight) 센서나 초음파 센서나 저해상도 카메라나 마이크로폰 어레이 등에서 취득된 데이터를 처리하는 처리부(1302)에 적용할 수 있다.
또한, 이미지 센서(1311)에서 취득된 데이터를 처리하는 처리부(1301)에 적용하는 경우에는, 이미지 센서(1211)의 칩과 정보 처리 장치(1000)의 칩이, 서로 접합된 적층 칩 구조를 갖고 있어도 좋다.
8. 컴퓨터의 구성례
그런데, 상술한 실시 형태에 관한 일련의 처리는, 하드웨어에 의해 실행할 수도 있고, 소프트웨어에 의해 실행할 수도 있다. 일련의 처리를 소프트웨어에 의해 실행하는 경우에는, 그 소프트웨어를 구성하는 프로그램이, 컴퓨터에 인스톨된다. 여기서, 컴퓨터에는, 전용의 하드웨어에 조립되어 있는 컴퓨터나, 각종의 프로그램을 인스톨함으로써, 각종의 기능을 실행하는 것이 가능한, 예를 들면 범용의 퍼스널 컴퓨터 등이 포함된다.
도 33은, 상술한 일련의 처리를 프로그램에 의해 실행하는 컴퓨터의 하드웨어의 구성례를 도시하는 블록도이다.
컴퓨터에서, CPU(Central Processing Unit)(2001), ROM(Read Only Memory)(2002), RAM(Random Access Memory)(2003)는, 버스(2004)에 의해 서로 접속되어 있다.
버스(2004)에는, 또한, 입출력 인터페이스(2005)가 접속되어 있다. 입출력 인터페이스(2005)에는, 입력부(2006), 출력부(2007), 기록부(2008), 통신부(2009), 및 드라이브(2010)가 접속되어 있다.
입력부(2006)는, 키보드, 마우스, 마이크로폰, 촬상 소자 등으로 이루어진다. 출력부(2007)는, 디스플레이, 스피커 등으로 이루어진다. 기록부(2008)는, 하드 디스크나 불휘발성의 메모리 등으로 이루어진다. 통신부(2009)는, 네트워크 인터페이스 등으로 이루어진다. 드라이브(2010)는, 자기 디스크, 광디스크, 광자기 디스크, 또는 반도체 메모리 등의 리무버블 기록 매체(2011)를 구동한다.
이상과 같이 구성된 컴퓨터에서는, CPU(2001)가, 예를 들면, 기록부(2008)에 기록되어 있는 프로그램을, 입출력 인터페이스(2005) 및 버스(2004)를 통하여, RAM(2003)에 로드하여 실행함에 의해, 상술한 일련의 처리가 행해진다.
컴퓨터(CPU(2001))가 실행하는 프로그램은, 예를 들면, 패키지 미디어 등으로서의 리무버블 기록 매체(2011)에 기록하여 제공할 수 있다. 또한, 프로그램은, 근거리 통신망, 인터넷, 디지털 위성 방송이라는, 유선 또는 무선의 전송 매체를 통하여 제공할 수 있다.
컴퓨터에서는, 프로그램은, 리무버블 기록 매체(2011)를 드라이브(2010)에 장착함에 의해, 입출력 인터페이스(2005)를 통하여, 기록부(2008)에 인스톨할 수 있다. 또한, 프로그램은, 유선 또는 무선의 전송 매체를 통하여, 통신부(2009)에서 수신하고, 기록부(2008)에 인스톨할 수 있다. 그 밖에, 프로그램은, ROM(2002)이나 기록부(2008)에, 미리 인스톨해 둘 수 있다.
또한, 컴퓨터가 실행하는 프로그램은, 본 명세서에서 설명하는 순서에 따라 시계열로 처리가 행해지는 프로그램이라도 좋고, 병렬로, 또는 호출이 행해진 때 등의 필요한 타이밍에 처리가 행해지는 프로그램이라도 좋다.
또한, 상술한 실시 형태는, 상술한 실시의 형태로 한정되는 것이 아니고, 본 기술의 요지를 일탈하지 않는 범위에서의 여러가지의 변경이 가능하다.
예를 들면, 본 기술은, 하나의 기능을 네트워크를 통하여 복수의 장치에서 분담, 공동으로 처리하는 클라우드 컴퓨팅의 구성을 취할 수 있다.
또한, 상술한 플로우차트에서 설명한 각 스텝은, 하나의 장치로 실행하는 외에, 복수의 장치에서 분담하여 실행할 수 있다.
또한, 하나의 스텝에 복수의 처리가 포함되는 경우에는, 그 하나의 스텝에 포함되는 복수의 처리는, 하나의 장치에서 실행하는 외에, 복수의 장치에서 분담하여 실행할 수 있다.
이상, 본 개시의 실시 형태에 관해 설명했지만, 본 개시의 기술적 범위는, 상술한 각 실시 형태 그대로로 한정되는 것이 아니고, 본 개시의 요지를 일탈하지 않는 범위에서의 여러가지의 변경이 가능하다. 또한, 다른 실시 형태 및 변형례에 걸치는 구성 요소를 적절히 조합하여도 좋다.
또한, 본 명세서에 기재된 각 실시 형태에서 효과는 어디까지나 예시이고 한정되는 것이 아니라, 다른 효과가 있어도 좋다.
또한, 본 기술은, 이하의 구성으로 하는 것도 가능하다.
(1)
제1 계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 제1 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제1 제로 계수 위치 테이블과, 상기 제1 계수 행렬에서의 상기 제2 계수를 유지하는 제1 비제로 계수 테이블에 부호화된 상기 제1 계수 행렬을 복호하는 복호부와,
상기 복호부에 의해 복호된 상기 제1 계수 행렬과, 제1 변수 행렬의 컨벌루션 처리를 실행하는 곱합 회로를 구비하고,
상기 복호부는, 상기 제1 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 제1 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 제1 계수 행렬을 복호하는 뉴럴 네트워크 처리 장치.
(2)
상기 복호부는,
제어 단자에 입력된 값이 상기 제1 값인 경우, 제로를 출력하고, 상기 제2 값인 경우, 당해 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제2 계수를 출력하는 셀렉터와,
상기 셀렉터로부터 입력된 상기 제로와 상기 제2 계수를 배열함으로써 상기 제1 계수 행렬을 복원하는 곱합기를 구비하고,
상기 복호부는, 상기 제1 제로 계수 위치 테이블을 구성하는 값을 차례로 상기 셀렉터에 입력하는 상기 (1)에 기재된 뉴럴 네트워크 처리 장치.
(3)
상기 복호부는, 상기 제1 제로 계수 위치 테이블을 구성하는 값을 차례로 상기 셀렉터에 입력할 때에, 상기 셀렉터에 입력하는 상기 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제1 변수 행렬상의 위치에 격납된 변수를 취득하는 상기 (2)에 기재된 뉴럴 네트워크 처리 장치.
(4)
상기 복호부는, 상기 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제2 계수를 취득함과 함께, 상기 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제1 변수 행렬상의 위치에 격납된 변수를 취득하고, 취득한 상기 제2 계수와 상기 변수를 상기 곱합 회로에 입력하고,
상기 곱합 회로는, 상기 복호부로부터 입력된 상기 제2 계수와 상기 변수를 차례로 승산하여 가산함으로써, 상기 제1 계수 행렬과 상기 제1 변수 행렬의 상기 컨벌루션 처리를 실행하는 상기 (1)에 기재된 뉴럴 네트워크 처리 장치.
(5)
상기 복호부는, 각각 우선순위가 설정된 복수의 입력을 가지고, 상기 제2 값이 입력된 1 이상의 상기 입력 중 가장 상기 우선순위가 높은 상기 입력에 설정된 값을 출력하는 프라이어리티 인코더를 구비하고,
상기 복호부는, 상기 복수의 입력에 대해 상기 제1 제로 계수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 제1 비제로 계수 테이블로부터 상기 제2 계수를 취득하는 상기 (4)에 기재된 뉴럴 네트워크 처리 장치.
(6)
상기 제1 변수 행렬은, 당해 제1 변수 행렬에서의 값이 제로인 제1 변수의 위치를 상기 제1 값으로 나타내고, 상기 제1 변수 행렬에서의 값이 제로가 아닌 제2 변수의 위치를 상기 제2 값으로 나타내는 제1 제로 변수 위치 테이블과, 상기 제1 변수 행렬에서의 상기 제2 변수를 유지하는 비제로 변수 테이블에 부호화되어 있고,
상기 복호부는, 상기 제1 제로 계수 위치 테이블을 구성하는 값과 상기 제1 제로 변수 위치 테이블을 구성하는 값을 논리 연산하고, 당해 논리 연산의 결과에 의거하여, 서로에 승산한 결과가 제로로 되지 않는 상기 제2 계수와 상기 제2 변수를 상기 제1 비제로 계수 테이블 및 상기 비제로 변수 테이블로부터 취득하고, 취득한 상기 제2 계수와 상기 제2 변수를 상기 곱합 회로에 입력하는 상기 (1)에 기재된 뉴럴 네트워크 처리 장치.
(7)
상기 복호부는,
각각 우선순위가 설정된 복수의 입력을 가지고, 상기 제2 값이 입력된 1 이상의 상기 입력 중 가장 상기 우선순위가 높은 상기 입력에 설정된 값을 출력하는 프라이어리티 인코더를 구비하고,
상기 복호부는,
상기 복수의 입력에 대해 상기 제1 제로 계수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 제1 비제로 계수 테이블로부터 상기 제2 계수를 취득하고,
상기 복수의 입력에 대해 상기 제1 제로 변수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 비제로 변수 테이블로부터 상기 제2 변수를 취득하는 상기 (6)에 기재된 뉴럴 네트워크 처리 장치.
(8)
상기 곱합 회로로부터 출력된 제2 변수 행렬을, 당해 제2 변수 행렬에서의 값이 제로인 제1 변수의 위치를 상기 제1 값으로 나타내고, 상기 제2 변수 행렬에서의 값이 제로가 아닌 제2 변수의 위치를 상기 제2 값으로 나타내는 제2 제로 변수 위치 테이블과, 상기 제2 변수 행렬에서의 상기 제2 계수를 유지하는 제2 비제로 계수 테이블에 부호화한 부호화부를 더 구비하는 상기 (1)∼(7)의 어느 하나에 기재된 뉴럴 네트워크 처리 장치.
(9)
상기 부호화부는,
입력된 값이 제로인지의 여부를 판정하는 판정 회로와,
상기 판정 회로에 의해 값이 제로라고 판정된 경우에 상기 제1 값을 격납하고, 제로가 아니라고 판정된 경우에 상기 제2 값을 격납하는 제1 버퍼와, 상기 판정 회로에 의해 값이 제로가 아니라고 판정된 경우에 상기 제2 변수를 격납하는 제2 버퍼를 구비하고,
상기 부호화부는, 상기 판정 회로에 상기 제2 변수 행렬을 구성하는 변수를 차례로 입력하는 상기 (8)에 기재된 뉴럴 네트워크 처리 장치.
(10)
상기 부호화부는, 차 레이어가 컨벌루션 처리에서 사용되는 제2 제로 계수 위치 테이블이 격납되는 레지스터를 더 구비하고,
상기 제1 버퍼는, 상기 판정 회로에 의해 제로가 아니라고 판정된 변수의 상기 제2 변수 행렬상의 위치에 대응하는 상기 제2 제로 계수 위치 테이블상의 위치에 격납된 값이 상기 제1 값인 경우, 상기 제2 값에 대신하여 상기 제1 값을 격납하고,
상기 제2 버퍼는, 상기 판정 회로에 의해 제로가 아니라고 판정된 상기 변수 중, 당해 변수의 상기 제2 변수 행렬상의 위치에 대응하는 상기 제2 제로 계수 위치 테이블상의 위치에 격납된 값이 상기 제1 값인 경우, 당해 변수를 격납하지 않는 상기 (9)에 기재된 뉴럴 네트워크 처리 장치.
(11)
상기 레지스터는, 상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블을 논리합함으로써 얻어진 제3 제로 계수 위치 테이블을 격납하는 상기 (10)에 기재된 뉴럴 네트워크 처리 장치.
(12)
상기 레지스터는, 상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블을 격납하는 상기 (10)에 기재된 뉴럴 네트워크 처리 장치.
(13)
상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블은, 1 이상의 그룹으로 그룹화되고,
상기 레지스터는, 상기 그룹마다 상기 제2 제로 계수 위치 테이블을 논리합함으로써 얻어진 제3 제로 계수 위치 테이블을 격납하는 상기 (10)에 기재된 뉴럴 네트워크 처리 장치.
(14)
상기 (1)∼(13)의 어느 하나에 기재된 뉴럴 네트워크 처리 장치와,
상기 뉴럴 네트워크 처리 장치와 버스를 통하여 접속된 프로세서 코어를 구비하는 정보 처리 장치.
(15)
청구항 14에 기재된 정보 처리 장치와,
상기 정보 처리 장치에 접속된 1 이상의 센서를 구비하는 정보 처리 시스템.
(16)
상기 (14)에 기재된 정보 처리 장치를 구비하는 전자 기기.
(17)
계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하고,
복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 것을 포함하고,
상기 계수 행렬은, 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써 복호되는 뉴럴 네트워크 처리 방법.
(18)
컴퓨터에,
계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하는 복호 처리와,
상기 복호 처리에 의해 복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 곱합 처리를 실행시키고,
상기 복호 처리는, 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 계수 행렬을 복호하는 프로그램.
11: 뉴럴 네트워크 처리 장치
21, 23, 25: 컨벌루션 처리부
22, 24: 풀링 처리부
41, 61, 81, 101: 복호부
42, 51, 62, 71, 82, 102: 메모리
43, 63, 83, 103: 계수 유지부
104: 프라이어리티 인코더
111, 111a, 111b: 어드레스 생성부
112, 203: 셀렉터
113: 곱합기
114: 계수 버퍼
115: 변수 버퍼
116: 곱합 회로
200, 300: 부호화부
201: 버퍼 회로
202: 판정 회로
204: 지연 회로
205: 스파스 행렬 버퍼
206: 기록 버퍼
301, 302: AND 회로
303: 레지스터
304: 메모리 영역
1000, 1000A, 1000a, 1000b, 1000c: 정보 처리 장치(프로세서)
1001, 1001a, 1001b, 1001c: DNN 엔진(액셀러레이터)
1002: 프로세서 코어
1003: 버스
1100: IoT 에지 AI 시스템
1111∼1114: 센서
1200: 자율 로봇
1211: 이미지 센서
1212: 마이크로폰
1201, 1202, 1203, 1301, 1302: 처리부
1204: 제어부
1300: 텔레비전

Claims (18)

  1. 제1 계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 제1 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제1 제로 계수 위치 테이블과, 상기 제1 계수 행렬에서의 상기 제2 계수를 유지하는 제 1 비제로 계수 테이블에 부호화된 상기 제1 계수 행렬을 복호하는 복호부와,
    상기 복호부에 의해 복호된 상기 제1 계수 행렬과, 제1 변수 행렬의 컨벌루션 처리를 실행하는 곱합 회로를 구비하고,
    상기 복호부는 상기 제1 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 제1 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 제1 계수 행렬을 복호하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  2. 제1항에 있어서,
    상기 복호부는
    제어 단자에 입력된 값이 상기 제1 값인 경우, 제로를 출력하고, 상기 제2 값인 경우, 당해 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제2 계수를 출력하는 셀렉터와,
    상기 셀렉터로부터 입력된 상기 제로와 상기 제2 계수를 배열함으로써 상기 제1 계수 행렬을 복원하는 곱합기를 구비하고,
    상기 복호부는 상기 제1 제로 계수 위치 테이블을 구성하는 값을 차례로 상기 셀렉터에 입력하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  3. 제2항에 있어서,
    상기 복호부는 상기 제1 제로 계수 위치 테이블을 구성하는 값을 차례로 상기 셀렉터에 입력할 때에, 상기 셀렉터에 입력하는 상기 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제1 변수 행렬상의 위치에 격납된 변수를 취득하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  4. 제1항에 있어서,
    상기 복호부는 상기 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제2 계수를 취득함과 함께, 상기 제2 값의 상기 제1 제로 계수 위치 테이블상의 위치에 대응하는 상기 제1 변수 행렬상의 위치에 격납된 변수를 취득하고, 취득한 상기 제2 계수와 상기 변수를 상기 곱합 회로에 입력하고,
    상기 곱합 회로는 상기 복호부로부터 입력된 상기 제2 계수와 상기 변수를 차례로 승산하여 가산함으로써, 상기 제1 계수 행렬과 상기 제1 변수 행렬의 상기 컨벌루션 처리를 실행하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  5. 제4항에 있어서,
    상기 복호부는 각각 우선순위가 설정된 복수의 입력을 가지고, 상기 제2 값이 입력된 1 이상의 상기 입력 중 가장 상기 우선순위가 높은 상기 입력에 설정된 값을 출력하는 프라이어리티 인코더를 구비하고,
    상기 복호부는 상기 복수의 입력에 대해 상기 제1 제로 계수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 제1 비제로 계수 테이블로부터 상기 제2 계수를 취득하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  6. 제1항에 있어서,
    상기 제1 변수 행렬은 당해 제1 변수 행렬에서의 값이 제로인 제1 변수의 위치를 상기 제1 값으로 나타내고, 상기 제1 변수 행렬에서의 값이 제로가 아닌 제2 변수의 위치를 상기 제2 값으로 나타내는 제1 제로 변수 위치 테이블과, 상기 제1 변수 행렬에서의 상기 제2 변수를 유지하는 비제로 변수 테이블에 부호화되어 있고,
    상기 복호부는 상기 제1 제로 계수 위치 테이블을 구성하는 값과 상기 제1 제로 변수 위치 테이블을 구성하는 값을 논리 연산하고, 당해 논리 연산의 결과에 의거하여, 서로에 승산한 결과가 제로로 되지 않는 상기 제2 계수와 상기 제2 변수를 상기 제1 비제로 계수 테이블 및 상기 비제로 변수 테이블로부터 취득하고, 취득한 상기 제2 계수와 상기 제2 변수를 상기 곱합 회로에 입력하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  7. 제6항에 있어서,
    상기 복호부는
    각각 우선순위가 설정된 복수의 입력을 가지고, 상기 제2 값이 입력된 1 이상의 상기 입력 중 가장 상기 우선순위가 높은 상기 입력에 설정된 값을 출력하는 프라이어리티 인코더를 구비하고,
    상기 복호부는
    상기 복수의 입력에 대해 상기 제1 제로 계수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 제1 비제로 계수 테이블로부터 상기 제2 계수를 취득하고,
    상기 복수의 입력에 대해 상기 제1 제로 변수 위치 테이블을 구성하는 값을 병렬로 입력하고, 당해 입력에 대해 상기 프라이어리티 인코더로부터 출력된 값에 의거하여 상기 비제로 변수 테이블로부터 상기 제2 변수를 취득하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  8. 제1항에 있어서,
    상기 곱합 회로로부터 출력된 제2 변수 행렬을, 당해 제2 변수 행렬에서의 값이 제로인 제1 변수의 위치를 상기 제1 값으로 나타내고, 상기 제2 변수 행렬에서의 값이 제로가 아닌 제2 변수의 위치를 상기 제2 값으로 나타내는 제2 제로 변수 위치 테이블과, 상기 제2 변수 행렬에서의 상기 제2 계수를 유지하는 제2 비제로 계수 테이블에 부호화하는 부호화부를 더 구비하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  9. 제8항에 있어서,
    상기 부호화부는
    입력된 값이 제로인지의 여부를 판정하는 판정 회로와,
    상기 판정 회로에 의해 값이 제로라고 판정된 경우에 상기 제1 값을 격납하고, 제로가 아니라고 판정된 경우에 상기 제2 값을 격납하는 제1 버퍼와,
    상기 판정 회로에 의해 값이 제로가 아니라고 판정된 경우에 상기 제2 변수를 격납하는 제2 버퍼를 구비하고,
    상기 부호화부는 상기 판정 회로에 상기 제2 변수 행렬을 구성하는 변수를 차례로 입력하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  10. 제9항에 있어서,
    상기 부호화부는 차 레이어가 컨벌루션 처리에서 사용되는 제2 제로 계수 위치 테이블이 격납되는 레지스터를 더 구비하고,
    상기 제1 버퍼는 상기 판정 회로에 의해 제로가 아니라고 판정된 변수의 상기 제2 변수 행렬상의 위치에 대응하는 상기 제2 제로 계수 위치 테이블상의 위치에 격납된 값이 상기 제1 값인 경우, 상기 제2 값에 대신하여 상기 제1 값을 격납하고,
    상기 제2 버퍼는 상기 판정 회로에 의해 제로가 아니라고 판정된 상기 변수 중, 당해 변수의 상기 제2 변수 행렬상의 위치에 대응하는 상기 제2 제로 계수 위치 테이블상의 위치에 격납된 값이 상기 제1 값인 경우, 당해 변수를 격납하지 않는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  11. 제10항에 있어서,
    상기 레지스터는 상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블을 논리합함으로써 얻어진 제3 제로 계수 위치 테이블을 격납하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  12. 제10항에 있어서,
    상기 레지스터는 상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블을 격납하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  13. 제10항에 있어서,
    상기 차 레이어가 컨벌루션 처리에서 사용되는 복수의 상기 제2 제로 계수 위치 테이블은 1 이상의 그룹으로 그룹화되고,
    상기 레지스터는 상기 그룹마다 상기 제2 제로 계수 위치 테이블을 논리합함으로써 얻어진 제3 제로 계수 위치 테이블을 격납하는 것을 특징으로 하는 뉴럴 네트워크 처리 장치.
  14. 재1항에 기재된 뉴럴 네트워크 처리 장치와,
    상기 뉴럴 네트워크 처리 장치와 버스를 통하여 접속된 프로세서 코어를
    구비하는 것을 특징으로 하는 정보 처리 장치.
  15. 제14항에 기재된 정보 처리 장치와,
    상기 정보 처리 장치에 접속된 1 이상의 센서를 구비하는 것을 특징으로 하는 정보 처리 시스템.
  16. 제14항에 기재된 정보 처리 장치를 구비하는 것을 특징으로 하는 전자 기기.
  17. 계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하고,
    복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 것을 포함하고,
    상기 계수 행렬은 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써 복호되는 것을 특징으로 하는 뉴럴 네트워크 처리 방법.
  18. 컴퓨터에,
    계수 행렬에서의 값이 제로인 제1 계수의 위치를 제1 값으로 나타내고, 상기 계수 행렬에서의 값이 제로가 아닌 제2 계수의 위치를 제2 값으로 나타내는 제로 계수 위치 테이블과, 상기 계수 행렬에서의 상기 제2 계수를 유지하는 비제로 계수 테이블에 부호화된 상기 계수 행렬을 복호하는 복호 처리와,
    상기 복호 처리에 의해 복호된 상기 계수 행렬과, 변수 행렬의 컨벌루션 처리를 실행하는 곱합 처리를 실행시키고,
    상기 복호 처리는 상기 제로 계수 위치 테이블에서의 상기 제2 값으로 나타난 위치에 상기 비제로 계수 테이블에 격납된 상기 제2 계수를 격납함으로써, 상기 계수 행렬을 복호하는 것을 특징으로 하는 프로그램.
KR1020237004217A 2020-07-17 2021-07-09 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램 KR20230038509A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JPJP-P-2020-123312 2020-07-17
JP2020123312 2020-07-17
PCT/JP2021/025989 WO2022014500A1 (ja) 2020-07-17 2021-07-09 ニューラルネットワーク処理装置、情報処理装置、情報処理システム、電子機器、ニューラルネットワーク処理方法およびプログラム

Publications (1)

Publication Number Publication Date
KR20230038509A true KR20230038509A (ko) 2023-03-20

Family

ID=79555419

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237004217A KR20230038509A (ko) 2020-07-17 2021-07-09 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램

Country Status (6)

Country Link
US (1) US20230267310A1 (ko)
EP (1) EP4184392A4 (ko)
JP (1) JPWO2022014500A1 (ko)
KR (1) KR20230038509A (ko)
CN (1) CN115843365A (ko)
WO (1) WO2022014500A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023128263A (ja) * 2022-03-03 2023-09-14 ソニーグループ株式会社 情報処理装置及び情報処理方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015079946A1 (ja) 2013-11-29 2015-06-04 ソニー株式会社 周波数帯域拡大装置および方法、並びにプログラム
CN107239823A (zh) * 2016-08-12 2017-10-10 北京深鉴科技有限公司 一种用于实现稀疏神经网络的装置和方法
US10360163B2 (en) * 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US20180330235A1 (en) * 2017-05-15 2018-11-15 National Taiwan University Apparatus and Method of Using Dual Indexing in Input Neurons and Corresponding Weights of Sparse Neural Network
WO2019146398A1 (ja) * 2018-01-23 2019-08-01 ソニー株式会社 ニューラルネットワーク処理装置および方法、並びにプログラム
US10644721B2 (en) * 2018-06-11 2020-05-05 Tenstorrent Inc. Processing core data compression and storage system

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
비특허 문헌 1: Kevin P. Murphy, Machine Learning: A Probabilistic Perspective, The MIT Press, 2012
비특허 문헌 2: I An Goodfellow, Yoshua Beng io, and Aaron Courville, Deep Learning, The MIT Press, 2016

Also Published As

Publication number Publication date
JPWO2022014500A1 (ko) 2022-01-20
EP4184392A1 (en) 2023-05-24
CN115843365A (zh) 2023-03-24
WO2022014500A1 (ja) 2022-01-20
EP4184392A4 (en) 2024-01-10
US20230267310A1 (en) 2023-08-24

Similar Documents

Publication Publication Date Title
JP7379524B2 (ja) ニューラルネットワークモデルの圧縮/解凍のための方法および装置
KR102095097B1 (ko) 생성적 적대 네트워크를 이용한 비디오 시퀀스 생성 시스템 및 그 방법
KR20200089635A (ko) 다수의 상이한 비트레이트로 영상 압축을 하기 위한 시스템들 및 방법들
KR20210023006A (ko) 딥러닝 기반 이미지 압축 효율 향상을 위한 방법 및 시스템
WO2023132919A1 (en) Scalable framework for point cloud compression
KR20230038509A (ko) 뉴럴 네트워크 처리 장치, 정보 처리 장치, 정보 처리 시스템, 전자 기기, 뉴럴 네트워크 처리 방법 및 프로그램
CN114298295A (zh) 芯片、加速卡以及电子设备、数据处理方法
WO2019131880A1 (ja) 符号化方法、復号方法、情報処理方法、符号化装置、復号装置、及び、情報処理システム
JP7200950B2 (ja) ニューラルネットワーク処理装置および方法、並びにプログラム
US8787686B2 (en) Image processing device and image processing method
CN114041292A (zh) 用于神经网络模型压缩的三维(3d)树编解码的方法和装置
CN115018059B (zh) 数据处理方法及装置、神经网络模型、设备、介质
JP7064644B2 (ja) 動画像符号化装置
CN117012223A (zh) 音频分离方法、训练方法、装置、设备、存储介质及产品
EP3186781B1 (en) Extension of the mpeg/sc3dmc standard to polygon meshes
US8861880B2 (en) Image processing device and image processing method
CN115086658A (zh) 点云数据的处理方法、装置、存储介质及编解码设备
CN115604465B (zh) 基于相空间连续性的光场显微图像无损压缩方法及装置
EP4340361A1 (en) Video decoding device, operating method thereof, and video system
KR20230096525A (ko) 1d 컨볼루션을 이용한 오디오 신호 분석 방법 및 오디오 신호 분석 장치
CN117061770A (zh) 一种点云处理方法、装置、设备、存储介质及产品
CN117079653A (zh) 语音识别方法、语音识别模型的训练方法、设备及介质
WO2023113917A1 (en) Hybrid framework for point cloud compression
CN116016951A (zh) 点云处理方法、装置、设备及存储介质
CN117291246A (zh) 神经网络模型的压缩方法、装置和存储介质

Legal Events

Date Code Title Description
A201 Request for examination