Nothing Special   »   [go: up one dir, main page]

KR20230040990A - 가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들 - Google Patents

가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들 Download PDF

Info

Publication number
KR20230040990A
KR20230040990A KR1020237001467A KR20237001467A KR20230040990A KR 20230040990 A KR20230040990 A KR 20230040990A KR 1020237001467 A KR1020237001467 A KR 1020237001467A KR 20237001467 A KR20237001467 A KR 20237001467A KR 20230040990 A KR20230040990 A KR 20230040990A
Authority
KR
South Korea
Prior art keywords
convolution
loop
layer
bottleneck block
loops
Prior art date
Application number
KR1020237001467A
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 KR20230040990A publication Critical patent/KR20230040990A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 개시의 일 양태에서, 방법은 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 단계; 루프들의 수의 각각의 루프에 대해: 컨볼루션 가중치들의 루프 특정 세트를 로딩하는 단계; 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하는 단계; 및 루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하는 단계; 및 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 단계를 포함한다.

Description

가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들
관련 건들에 대한 상호참조
본 출원은 2021년 7월 19일자로 출원된 미국 특허출원 제17/379,833호, 및 2020년 7월 20일자로 출원된 미국 가특허출원 제63/054,147호의 이익 및 우선권을 주장하며, 이들 출원들의 전체 내용들은 본 명세서에 참조에 의해 통합된다.
본 개시의 양태들은 머신 러닝 (machine learning) 에 관한 것이다.
머신 러닝은, 선험적으로 공지된 트레이닝 데이터의 세트에 대한 일반화된 적합성 (fit) 을 나타내는 트레이닝된 모델 (예컨대, 인공 뉴럴 네트워크, 트리, 또는 다른 구조들) 을 생성할 수도 있다. 트레이닝된 모델을 새로운 데이터에 적용하는 것은 추론들을 생성하며, 이는 새로운 데이터에 대한 통찰력들을 얻는데 사용될 수도 있다. 일부 경우들에서, 모델을 새로운 데이터에 적용하는 것은 새로운 데이터에 대해 "추론을 실행하는 것" 으로서 설명된다.
머신 러닝 모델들은 분류, 검출 및 인식 작업들에서의 사용을 위한 것을 포함하여 무수한 도메인들에 걸친 채택이 증가하고 있다. 예를 들어, 머신 러닝 모델들은 이미지들 내의 특징들 (예컨대, 얼굴들) 을 자동으로 분류하는 것과 같이, 그러한 디바이스들에 탑재된 하나 이상의 센서들에 의해 제공된 센서 데이터에 기초하여 전자 디바이스들 상에서 복잡한 작업들을 수행하는데 사용되고 있다.
머신 러닝 능력들은 종종, 트레이닝 및 추론을 포함한 머신 러닝 작업들을 수행하기 위한 전용 하드웨어에 의해 향상된다. 예를 들어, 전용 추론 프로세서들은 모델 입력 데이터에 기초하여 신속한 추론을 수행하기 위해 최적화될 수도 있다. 하지만, 프로세싱 디바이스들 - 특히, 모바일 디바이스들, 올웨이즈-온 (always-on) 디바이스, 에지 프로세싱 디바이스들 등과 같은 사이즈 및 전력-제한 디바이스들에 들어가는 모든 하드웨어와 마찬가지로, 전체 제품 사양들을 충족시키는데 필요한 설계 제약들 및 타협들이 존재한다.
예를 들어, 특히, 집적 회로 (IC) 또는 주문형 집적 회로 (ASIC) 칩의 형태인 전용 추론 프로세서는 버퍼/메모리 사이즈, 데이터 경로의 사이즈, 벡터 및/또는 매트릭스 승산 유닛의 능력 등과 같은 물리 리소스 용량들에 의해 제약될 수도 있다. 결과적으로, 전용 추론 프로세서가 구현할 수 있는 모델의 사이즈도 마찬가지로 제한된다. 일 예로서, 딥 러닝 모델은, 프로세싱 하드웨어의 물리적 제약들에 기초하여 컨볼루션 계층에서 지원되는 채널들의 수에 있어서 제한될 수도 있다.
이 문제는, 머신 러닝 모델들이 더 능력이 많아짐에 따라 더 커지는 경향에 의해 더욱 복잡해진다. 따라서, 필드 프로세싱 하드웨어는 신속하게 최신 모델들을 구현할 수 없게 되어, 기존의 프로세싱 하드웨어의 유용성을 크게 감소시킬 수도 있다.
전용 머신 러닝 하드웨어 (예컨대, 추론 프로세서) 가 특정 모델, 또는 모델의 특정 컨텍스트 또는 이용 케이스에 대해 오버사이즈될 경우에 유사한 문제가 발생하고, 따라서, 더 작은 모델이 오버사이즈된 하드웨어에 의해 프로세싱될 경우에 프로세싱 사이클들, 전력 등이 낭비될 수도 있다. 일반적으로, 모델 사이즈 및 하드웨어 구성의 고정된 본성은 머신 러닝 모델 아키텍처와 머신 러닝 프로세싱 하드웨어 사이의 빈번한 비효율적인 페어링을 초래한다.
이에 따라, 하드웨어의 물리적 능력들을 변경하지 않고 머신 러닝 모델들 사이즈들의 동적 범위를 다루기 위해 기존의 프로세싱 하드웨어의 능력을 개선하기 위한 시스템들 및 방법들이 필요하다.
특정 양태들은 방법을 제공하며, 그 방법은 탄력적 보틀넥 (elastic bottleneck) 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 단계; 루프들의 수의 각각의 루프에 대해: 컨볼루션 가중치들의 루프 특정 세트를 로딩하는 단계; 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하는 단계; 및 루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하는 단계; 및 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 단계를 포함한다.
추가의 양태들은 방법을 제공하며, 그 방법은 탄력적 보틀넥 블록이 기본 모드에서 동작하도록 가중치들의 제 1 세트를 트레이닝하는 단계로서, 기본 모드에서, 탄력적 보틀넥 블록의 각각의 컨볼루션 계층은 한번 루핑하도록 구성되는, 상기 가중치들의 제 1 세트를 트레이닝하는 단계; 탄력적 보틀넥 블록이 확장 모드에서 동작하도록 가중치들의 제 2 세트를 트레이닝하는 단계로서, 확장 모드에서, 탄력적 보틀넥 블록의 하나 이상의 컨볼루션 계층들은 한번 초과로 루핑하도록 구성되는, 상기 가중치들의 제 2 세트를 트레이닝하는 단계; 및 가중치들의 제 1 세트 및 가중치들의 제 2 세트를 탄력적 보틀넥 블록에 액세스가능한 메모리에 저장하는 단계를 포함한다.
다른 양태들은 전술한 방법들 뿐만 아니라 본 명세서에서 설명된 방법들을 수행하도록 구성된 프로세싱 시스템들; 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 경우, 프로세싱 시스템으로 하여금 전술한 방법들 뿐만 아니라 본 명세서에서 설명된 방법들을 수행하게 하는 명령들을 포함하는 비일시적 컴퓨터 판독가능 매체들; 전술한 방법들 뿐만 아니라 본 명세서에서 추가로 설명된 방법들을 수행하기 위한 코드를 포함하는 컴퓨터 판독가능 저장 매체 상에 수록된 컴퓨터 프로그램 제품; 및 전술한 방법들 뿐만 아니라 본 명세서에서 추가로 설명된 방법들을 수행하기 위한 수단을 포함하는 프로세싱 시스템을 제공한다.
다음의 설명 및 관련 도면들은 하나 이상의 양태들의 특정한 예시적인 특징들을 상세히 기술한다.
첨부 도면들은 하나 이상의 양태들의 특정 양태들을 도시하며, 따라서, 본 개시의 범위를 제한하는 것으로 간주되지 않아야 한다.
도 1 은 탄력적 보틀넥 블록의 일 예를 도시한다.
도 2a 는 3 계층 보틀넥 블록을 사용하는 기본 및 확장 컨볼루션 모드들에 대한 예시적인 플로우들을 도시한다.
도 2b 는 확장된 포인트별 (pointwise) 컨볼루션 프로세싱의 일 예를 도시한다.
도 3 은 기본 컨볼루션 모드 프로세싱 플로우와 확장 컨볼루션 모드 프로세싱 플로우의 비교를 도시한다.
도 4 는 탄력적 보틀넥 블록을 사용하여 추론하기 위한 예시적인 방법을 도시한다.
도 5 는 탄력적 보틀넥 블록을 트레이닝하기 위한 예시적인 방법을 도시한다.
도 6 은 본 명세서에서 설명된 다양한 양태들을 수행하기 위한 예시적인 프로세싱 시스템을 도시한다.
이해를 용이하게 하기 위해, 동일한 참조 부호들은, 가능할 경우, 도면들에 공통인 동일한 엘리먼트들을 지정하도록 사용되었다. 일 양태의 엘리먼트들 및 피처들은 추가 기재없이도 다른 양태들에 유익하게 통합될 수도 있음이 고려된다.
본 개시의 양태들은 스케일러블 머신 러닝 모델 아키텍처를 제공하며, 이는 머신 러닝 모델을 프로세싱하는데 할당된 프로세싱 하드웨어에 이용가능한 기초 물리 리소스들 (예컨대, 메모리 사이즈, 컨볼루션 채널들의 수, 비트 폭 등) 을 변경하지 않고 가변 머신 러닝 모델 표현력을 인에이블한다. 특히, 본 명세서에서 설명된 스케일러블 머신 러닝 모델 아키텍처들은, 하드웨어 사용이 최적화되고 하드웨어 설계가 고정 사이즈의 머신 러닝 모델 아키텍처들에 비해 덜 제약되도록 컨텍스트들, 이용 케이스들, 및 조건들에 기초하여 모델을 확장 또는 축소하도록 구성될 수도 있는 탄력적 보틀넥 블록들을 구현한다. 유익하게, 탄력적 보틀넥 블록들은 (예컨대, 런타임 시에) 동적으로 뿐만 아니라 (예컨대, 모델 설계 동안) 정적으로 구성될 수도 있다.
보틀넥 블록들은, 효율을 개선하기 위해 다수의 머신 러닝 모델 아키텍처들에서 사용된 컨볼루션 구조들이다. 종래의 보틀넥 블록들은, 효율적인 포인트별 컨볼루션들 (예컨대, 1 × 1 사이즈의 커널을 갖는 컨볼루션들) 을 사용하여 컨볼루션 연산들 동안 채널들의 수를 감소시키는데 사용될 수도 있다 (따라서, 정보 "보틀넥" 으로서 작용함). 예를 들어, 보틀넥 블록에서의 초기 포인트별 컨볼루션 계층은 (예컨대, 3 × 3 컨볼루션 커널을 사용하여) 후속 심도별 (depthwise) 컨볼루션 계층에 대한 채널들의 수를 감소시킬 수도 있다. 보틀넥 블록에서의 중간 계층들에 대한 채널들의 수를 감소시키는 것은 중간 계층들에 요구되는 파라미터들의 수를 감소시키고, 이에 의해, 일반적으로 성능에서의 최소의 손실로 (파라미터들을 프로세싱하기 위한) 계산 비용 및 (파라미터들의 저장을 위한) 메모리 사용을 감소시킨다. 일반적으로, 보틀넥 블록의 최종 포인트별 컨볼루션은 블록 출력에서 출력 채널들의 수를 설정하는데 사용될 수도 있으며, 이는 구성에 의존하여 보틀넥 블록에 대한 입력과 동일하거나 상이할 수도 있다. 종래에, 보틀넥 블록들은 고정된 수의 파라미터들, 따라서, 고정된 표현력을 갖는다. 그러한 종래의 보틀넥 블록들은 "비탄력적 보틀넥 블록들" 로서 지칭될 수도 있다.
본 명세서에서 설명된 양태들은, 머신 러닝 모델의 동적 표현력을 인에이블하기 위해 머신 러닝 모델의 보틀넥 블록들에서 계산들의 동적 스케일링을 인에이블하는 "탄력적" 보틀넥 블록 아키텍처들에 관련된다. 유익하게, 탄력적 보틀넥 블록들은, 이들 네트워크 아키텍처들에 대한 추가의 수정없이 MobileNetV2, MobileNetV3, EfficientNet 등과 같은 다중적인 컨볼루셔널 뉴럴 네트워크 (CNN) 아키텍처들의 기존 보틀넥 블록들을 대체할 수도 있으며, 이에 의해, 이들 네트워크들의 능력들을 향상시킬 수도 있다. 추가로, 탄력적 보틀넥 블록들은 종래의 접근법들에 비해 성능을 개선하기 위해 다른 및 새로운 모델 아키텍처들에서 구현될 수도 있다.
하기에서 더 상세히 설명되는 바와 같이, 탄력적 보틀넥 블록 아키텍처의 유연한 본성은 탄력적 보틀넥 블록 내의 프로세싱을 선택적으로 확장 또는 축소함으로써 달성될 수도 있다. 추가로, 탄력적 보틀넥 블록은 기존의 모델 아키텍처에서의 기존의 보틀넥 블록을 대체하기 위하여 입력 및 출력 사이즈들 (예컨대, 채널들의 수) 을 제약하도록 구성될 수도 있다.
다양한 양태들에서, 탄력적 보틀넥 블록 내의 프로세싱을 확장 또는 축소하는 것은 보틀넥 블록에서의 다양한 모델 계층들을 통해 구성된 수의 "루프들" 에서 추가적인 데이터를 직렬로 프로세싱함으로써 가능하게 된다. 일반적으로, 프로세싱에 루프들을 추가하는 것은 각각의 추가적인 루프에서 추가적인 가중치들로 추가적인 데이터를 프로세싱하는 것을 허용한다. 루프들의 수는 기초 하드웨어를 변경할 필요없이 유연성 및 효율성을 인에이블하기 위해 런타임 시에 컨텍스트, 이용 케이스, 또는 다른 조건들에 기초하여 증가 또는 감소될 수도 있다. 일부 경우들에서, 루프들의 수는 프로세싱을 위해 선택된 데이터의 채널들의 수에 기초할 수도 있다.
추가로, 일부 양태들에서, 입력 데이터의 채널들은 (예컨대, 트레이닝 동안) 분석될 수도 있고, 최종 모델 출력에 대한 중요도 또는 효과에 의해 랭킹 및/또는 소팅될 수도 있으며, 이용가능한 입력 데이터의 채널들의 총 세트의 서브세트는 프로세싱을 위해 런타임 시에 선택될 수도 있다. 구성가능한 루핑은 탄력적 보틀넥 블록에 의한 프로세싱을 위해 채널들의 수를 확장 및 축소하기 위한 효율적인 메커니즘을 인에이블한다.
본 명세서에서 설명된 탄력적 보틀넥 블록 아키텍처들에 대한 다수의 이용 케이스들이 존재한다. 일반적으로, 머신 러닝 모델의 프로세싱 요건들이 멀티-모달이거나 조건적인 임의의 이용 케이스 또는 컨텍스트는 탄력적 보틀넥 블록 아키텍처들로부터 이익을 얻을 수 있다.
예를 들어, 완전 또는 반자율주행 차량과 같은 멀티-센서 시스템에서, 모든 센서들이 항상 필요하거나 이용 가능한 것은 아니다. 예로서, 맑은 날씨에서 주행할 경우, 차량은 내비게이션을 보조하기 위해 카메라 데이터 및 LiDAR 데이터를 사용할 수도 있다. 하지만, 궂은 날씨에서, 차량은 레이더 데이터와 같은 추가적인 데이터를 사용할 수도 있다. 조건들에 기초하여 사용되는 추가적인 센서 데이터는 기존의 머신 러닝 모델 프로세싱 하드웨어의 설계 제약들을 초과하거나, 또는 더 강력한 하드웨어를 요구할 수도 있어서, 가능한 모든 입력 데이터가 항상 프로세싱될 필요가 있고, 이는 비효율적이다. 대조적으로, 탄력적 보틀넥 블록 아키텍처들의 사용은, 조건들 (예컨대, 맑은 또는 궂은 날씨) 에 기초하여 필요에 따라, 추가적인 또는 불필요한 데이터를 설명하기 위해 보틀넥 블록에서의 동작들을 동적으로 확장 또는 축소함으로써 추가적인 데이터를 선택적으로 사용할 능력을 허용한다. 따라서, 기존의 프로세싱 하드웨어의 능력들은 기초 하드웨어 변경없이 확장되며, 프로세싱 시스템 하드웨어의 효율 및 능력이 크게 개선된다.
전술한 예 및 다른 예들에서 프로세싱 시스템의 개선된 효율은, 몇가지 이점들을 들자면, 감소된 전력 사용, 감소된 열 발생, 감소된 메모리 사용, 더 긴 배터리 수명, 공유 프로세싱 환경에서의 다른 시스템들에 대한 프로세싱 사이클들의 개선된 이용가능성, 추가적인 디바이스 이용가능성, 및 더 넓은 모델 배치 가능성들을 야기할 수도 있다. 추가로, 프로세싱 시스템의 개선된 효율은, 머신 러닝이 계속 진화함에 따라, 더 다양하고 더 새로운 머신 러닝 모델 아키텍처들의 프로세싱을 허용할 수도 있다. 따라서, 기존의 프로세싱 하드웨어는 그 성능이 개선되고 그 유용한 수명이 연장될 수도 있으며, 새로운 하드웨어는, 그후 이용가능한 모델 아키텍처들에 기초하여 더 적은 제약들로 설계될 수도 있다.
탄력적 보틀넥 블록의 예
도 1 은 탄력적 보틀넥 블록 (101) 을 포함하는 탄력적 보틀넥 블록 아키텍처 (100) 의 일 예를 도시한다.
이 예에서, 탄력적 보틀넥 블록 (101) 은 포인트별 컨볼루션 커널 (111) 을 사용하여 입력 데이터 (X) 를 프로세싱하도록 구성된 제 1 포인트별 컨볼루션 계층 (110) 을 포함한다. 일부 경우들에서, 포인트별 컨볼루션 계층 (110) 은 심도별 컨볼루션의 효율을 개선하기 위하여 심도별 컨볼루션 계층 (114) 에 대한 데이터의 차원을 감소시키는데 사용될 수도 있다. 포인트별 컨볼루션 계층 (110) 의 출력은, 일부 예들에서 ReLU 블록과 같은 비선형 활성화 블록일 수도 있는 비선형 또는 산술 연산 블록 (112) 에 대해 입력된다. 블록 (112) 의 출력은 심도별 컨볼루션 커널 (113) 을 사용하여 데이터를 프로세싱하도록 구성된 K × K 심도별 컨볼루션 계층 (114) 에 대해 입력되며, 여기서, K > 1 이다. 컨볼루션 계층 (114) 의 출력은, 마찬가지로 비선형 활성화 블록일 수도 있는 다른 비선형 또는 산술 블록 (116) 에 대해 입력된다. 블록 (116) 의 출력은 포인트별 컨볼루션 커널 (115) 을 사용하여 입력 데이터를 프로세싱하도록 구성된 제 2 포인트별 컨볼루션 계층 (118) 에 대해 입력된다. 포인트별 컨볼루션 계층 (118) 의 출력은, 비선형 활성화 블록일 수도 있는 다른 비선형 또는 산술 연산 블록 (120) 에 대해 입력된다. 블록 (120) 의 출력은 풀링 (pooling) 계층 (122) (예컨대, 최대 풀링, 평균 풀링 등) 에 대해 입력된다. 마지막으로, 풀링 계층 (122) 의 출력은 누산기 (130) 에 제공된다. 누산기 (130) 는 중간 컨볼루션 출력 데이터를 활성화 메모리 (106) 에 저장된 다른 중간 컨볼루션 출력 데이터에 추가하기 위한 합산 연산자 (예컨대, 포인트별 합산 연산자) 로서 작용할 수도 있다. 특히, 이는 탄력적 보틀넥 블록의 단지 하나의 예일 뿐이며, 상이한 계층 배열들 및 구조들을 갖는 다른 예들이 가능하다.
도 1 의 예에서, 컨볼루션 계층들 (110, 114, 및 118) 의 각각은 로컬 버퍼 (124, 126, 및 128) 와 각각 연관된다. 이들 버퍼들은 일반적으로, 모든 로컬 계산들 또는 누산들을 유지하기 위해 그들의 개별 계층을 위해 예비된 "스크래치 공간" 으로서 사용가능하다. 하기에서 더 상세히 설명되는 바와 같이, 로컬 버퍼들 (124, 126, 및 128) 은, 계층을 통해 다수회 루핑할 경우, 입력 데이터 및 가중치들과 같은 데이터를 저장하는데 사용될 수 있다. 이들 버퍼들은, 예를 들어, 가중치 메모리 (104) 및 활성화 메모리 (106) 로부터 데이터를 수신할 수도 있다.
탄력적 보틀넥 블록 (101) 은 (예컨대, 호스트 시스템 메모리 및 DMA (102) 에 의해) 컨볼루션 계층들 (110, 114, 및 118) 에 대한 가중치들을 제공하기 위한 가중치 메모리 (104) 뿐만 아니라 탄력적 보틀넥 블록 (101) 의 출력을 저장하기 위한 활성화 메모리 (106) 와 데이터 통신한다.
탄력적 보틀넥 블록 (101) 은 또한, 탄력적 보틀넥 블록 (101) 의 실행을 위한 제어 및 핸들링 로직을 포함하는 모드 제어기 (108) 와 데이터 통신한다. 예를 들어, 제어 로직은, 각각의 계층에 대해, (하기에서 더 상세히 설명되는 바와 같이) 루프 파라미터들과 같은 파라미터들에 기초하여 계층들 (110, 114, 및 118) 에서의 컨볼루션 연산들을 명시하고 제어할 수도 있다. 하기에서 추가로 설명되는 바와 같이, 모드 제어기 (108) 는 탄력적 보틀넥 블록 (101) 을, 종래의 동작들을 위한 "기본" 모드로, 또는 모델의 가변 표현성 (expressivity) 을 위한 루핑 및/또는 채널 선택을 구현하는 하나 이상의 확장 모드들로 구성할 수도 있다.
탄력적 보틀넥 블록 (101) 과 같은 단일 보틀넥 블록에 대한 컨볼루션 연산들은 일반적으로, 다음과 같이 설명될 수도 있으며, 여기서, 특정 연산들 (예컨대, 배치 놈 (batch norm), 비선형성 등) 은 단순화를 위해 수학적 설명으로부터 생략되지만, 이들 비-컨볼루션 연산들은 실제 실행에 포함된다.
포인트별 컨볼루션 계층들 (110 및 118) 에서 수행되는 것과 같은 포인트별 컨볼루션은 Y = WX 로서 수학적으로 모델링될 수도 있으며, 여기서,
Figure pct00001
는 사이즈 (Cin) 의 입력 벡터이고,
Figure pct00002
는 가중치 매트릭스를 나타내고,
Figure pct00003
는 사이즈 (Cout) 의 출력 벡터를 나타내고, C 는 일반적으로, 계층의 내부 (Cin) 또는 외부 (Cout) 에서의 채널들의 수를 나타낸다.
포인트별 컨볼루션에 대한 수학적 공식화는, 커널 엔트리 인덱싱을 사용함으로써, 계층 (114) 에서와 같이, K × K 커널들 (대안적으로, 필터들로서 지칭됨) 과의 심도별 컨볼루션들로 확장될 수도 있으며, 여기서, K > 1 이다. 예를 들어, K = 3 에 대해, 채널에 대한 모든 9개의 가중치 엔트리들은 0 으로부터 K2 - 1 = 8 로 인덱싱되고 (이 예에서는 0-기반 인덱싱을 사용하지만, 다른 인덱싱이 동일하게 적합함), 벡터 포맷으로 표현될 수도 있다. 따라서, 커널 엔트리 인덱싱은 심도별 컨볼루션에 대한 수학적 모델이, 그럼에도 불구하고, Y = WX 의 형태를 유지하게 한다.
탄력적 보틀넥 블록들에서의 계층 루핑
여전히 도 1 을 참조하면, 탄력적 보틀넥 블록 (101) 의 유연한 본성은 블록 (101) 내의 프로세싱을 선택적으로 확장 또는 축소하는 것, 및 탄력적 보틀넥 블록 (101) 에 의해 프로세싱된 데이터의 입력 (X) 및 출력 (Y) 사이즈들을 제약하는 것에 의해 일부 양태들에서 달성되며, 여기서, 탄력적 보틀넥 블록 (101) 은 기존의 보틀넥 블록을 설정된 입력 및 출력 사이즈들로 대체하도록 의도된다.
탄력적 보틀넥 블록 (101) 의 프로세싱 능력들을 확장하기 위하여, 계층 루핑 (layer looping) 이 구현될 수도 있다. 계층 루핑은 일반적으로, 계층에 걸쳐 일부 횟수로 루프백함으로써 주어진 계층에서 입력 및 가중치 데이터의 1초과의 세트를 프로세싱하는 개념이다. 이러한 루핑은, 계층의 사이즈를 변경하지 않고도 계층에 의해 프로세싱되는 데이터의 양을 확장하는 것을 허용한다. 계층 루핑은, 101 과 같은 탄력적 보틀넥 블록에서의 컨볼루션 계층들의 일부 또는 전부에 적용될 수도 있다.
계층 루핑이 표현성을 증가시키기 위하여, 상이한 가중치들이 계층의 각각의 프로세싱 루프에 적용될 수도 있다. 예를 들어, 각각의 루프가 인덱싱될 수도 있고, 가중치들의 루프 특정 세트 (
Figure pct00004
) 가 루프 인덱스에 기초하여 로딩될 수도 있다. 예로서,
Figure pct00005
Figure pct00006
는 제로 기반 인덱싱 방식 (다른 예들에서, 그 인덱싱은 대신, 1 기반일 수도 있음) 을 위한 계층 "1" 의 루프 인덱스 "0" 및 "1" 에 대해 사용될 가중치들에 대응한다. 따라서, 계층 루핑은, 각각의 계층에 대한 가중치들의 1 초과의 세트 (예컨대, 주어진 계층의 루프 당 상이한 가중치들) 를 사용하여 동일한 입력 데이터 (X) 의 프로세싱을 허용한다. 각각의 루프의 중간 출력들이 저장되고 누산될 수도 있기 때문에, 기초 하드웨어 (예컨대, 버퍼 사이즈들 등) 는 추가적인 프로세싱 능력을 수용하기 위해 변경될 필요가 없다. 그 다음, 가변 표현성이, 탄력적 보틀넥 블록 (예컨대, 101) 의 다양한 계층들의 루핑 특성들을 변경함으로써 달성될 수도 있다는 결론에 이르게 된다.
101 과 같은 탄력적 보틀넥 블록 내의 계층들의 루핑은 계층마다 구성될 수도 있다. 일부 양태들에서, 루핑은 주어진 컨볼루션 계층에 대한 루프 파라미터를 설정함으로써 구성될 수도 있으며, 이는 주어진 컨볼루션이 "루프"백될 횟수에 대응한다. 예를 들어, 포인트별 컨볼루션 계층 (예컨대, 110) 은 n회 루핑될 수도 있고, 그 다음, 포인트별 컨볼루션 계층 (110) 의 n번째 루프의 최종 실행의 출력은 비선형 또는 산술 연산 블록 (112) 에 의해 프로세싱될 수도 있으며, 이는, 그 다음, 컨볼루션 계층 (114) 에 대한 입력이 된다. 일부 양태들에서, 루프 파라미터는 모드 제어기 (108) 에 의해 해석되고 구현될 수도 있다. 일부 양태들에서, 루프 파라미터는 탄력적 보틀넥 블록 (101) 의 프로세싱 동안 로컬 계층 버퍼 (예컨대, 124, 126, 또는 128) 에 저장될 수도 있다.
상기와 같이, 계층 루핑은, 예를 들어, 도 1 에서의 모드 제어기 (108) 에 의해 제어될 수도 있다. 예를 들어, 모드 제어기 (108) 는, 각각의 계층 (예컨대, 도 1 의 110, 114, 및 118) 에 의해 얼마나 많은 루프들이 수행되어야 하는지를 구성할 수도 있고, 루핑, 입력의 인덱싱 등 동안 다양한 계층들의 바이패싱을 제어할 수도 있다.
루핑된 계층 출력들을 사용하는 확장 컨벌루션 모드들
상기와 같이, 계층 루핑은 추가적인 중간 활성화들을 생성하는 것을 허용하며, 이는, 유익하게, 기초 하드웨어 능력들을 확장하지 않고 확장된 컨볼루션 연산에 사용될 수 있다.
탄력적 보틀넥 블록 (예컨대, 도 1 에서의 101) 을 사용하여 확장된 컨볼루션 연산을 수행할 경우, 제 1 컨볼루션 계층에 대한 (예컨대, 이 예에서 채널들의 관점에서) 입력 사이즈 (C1,in) 는 기본 컨볼루션 모드에서와 동일하게 유지될 수도 있다. 하지만, 출력 채널들의 수 (C1,out) 는 확장된 컨볼루션을 인에이블하기 위해 기본 컨볼루션 모드에 비해 C* 1,out 으로 확장될 수도 있다 (예컨대, 채널 카운트가 증가될 수도 있음). 유익하게, 확장된 출력 사이즈 (C* 1,out) 는, C* 1,out > C1,out 이기 때문에, X 의 입력 사이즈를 변경하지 않고 탄력적 보틀넥 블록의 중간 프로세싱에 새로운 입력 데이터를 주입하는 것을 허용한다.
제 2 컨볼루션 계층에 대해, 2개의 가능한 중간 계층 모드들이 존재한다. 제 1 중간 계층 모드에서, 계층에 대한 입력 채널들의 수 (C2,in) 는 C* 1,out 과 동일하게 설정되고 (즉, C2,in = C* 1,out), 계층으로부터의 출력 채널들의 수 (C2,out) 는 기본 컨볼루션 모드로부터 변경되지 않은 채로 유지된다. 따라서, 이러한 제 1 중간 계층 모드에서, 컨볼루션의 확장은 제 1 컨볼루션 계층과 제 2 컨볼루션 계층 사이의 중간 연산들로 한정된다. 이는 계층 채널 출력 정적 모드로서 지칭될 수도 있다.
대안적으로, 제 2 중간 계층 모드에서, 계층에 대한 입력 채널들의 수 (C2,in) 는 이전 계층으로부터 출력된 채널들의 수 (C1,out) 와 동일하게 설정되고, 출력 채널들의 수 (C2,out) 는 기본 컨볼루션 모드로부터 C* 2,out 으로 확장되며, 여기서, C* 2,out > C2,out 이다. 제 2 중간 계층 모드는 일반적으로, 계층 채널 출력 확장 모드로서 지칭될 수도 있다. 출력 채널들의 수를 확장하는 것은 일반적으로, 더 많은 데이터가 프로세싱될 수 있기 때문에 모델의 표현성을 증가시킬 수도 있다.
예를 들어, 추가적인 데이터가 이용가능한 경우, 그 데이터는 채널들의 수를 확장함으로써 프로세싱될 수도 있거나, 또는 데이터가 이용가능하지 않게 되는 경우, 채널들의 수는 축소될 수도 있다. 다른 예로서, 디바이스가 배터리-전력공급 조건으로부터 메인-전력공급 조건으로 가는 것과 같이, 프로세싱 디바이스의 동작 조건들이 변경된 경우, 전력 효율이 그러한 조건에서 모델 성능을 위해 트레이드될 수도 있기 때문에 채널들의 수가 확장될 수도 있고, 그 반대도 마찬가지일 수도 있다. 또 다른 예로서, 프로세싱 시스템이 과열된 온도로부터 정상 동작 온도로 가면, 채널들의 수가 확장될 수도 있거나, 그 반대도 마찬가지일 수도 있다. 특히, 이들은 단지 몇몇 예들이며, 다수의 다른 예들이 가능하다.
그 다음, 제 3 컨볼루션 계층에 대해, 계층에 대한 입력 채널들의 수 (C3,in) 는 이전 계층의 출력 채널들의 수 (C* 2,out) 와 동일하게 설정될 수도 있다. 탄력적 보틀넥 블록 (101) 에서와 같이, 제 3 컨볼루션 계층이 보틀넥 블록의 마지막 계층이면, C3,out 은 기본 모드에서와 동일하게 남겨질 수도 있고, 따라서, 출력 사이즈는, 중간 사이즈들이 변경되었더라도, 보틀넥 블록에 대해 변경되지 않는다. 한편, 제 3 컨볼루션 계층이 보틀넥 블록의 마지막 컨볼루션 계층이 아니면, 상기와 같이, 중간 계층 모드들의 동일한 선택물이 선택될 수도 있다.
Clayer,in 또는 Clayer,out 이 계층에 대한 기본 컨볼루션 모드로부터 증가될 경우, 다중의 대응하는 가중치 서브매트릭스들 (예컨대,
Figure pct00007
Figure pct00008
) 은 도 1 의 가중치 메모리 (104) 와 같이 가중치들을 저장하는 버퍼의 메모리로부터 로딩되고, 이들 가중치 서브매트릭스들은 루프들에서 개별적으로 프로세싱된다. 특히, 도 1 에서의 130 과 같은 누산기들은 확장 컨볼루션 모드로부터 확장된 데이터를 유지하기에 충분히 사이징될 수도 있다.
다음의 수학식들은, 탄력적 보틀넥 블록 (101) 의 예시적인 아키텍처를 사용하여 기본 컨볼루션 모드와 확장 컨볼루션 모드를 비교한다. 이는 단지 하나의 예일 뿐이며, 다수의 다른 예들이 다른 보틀넥 블록 아키텍처들에 기초하여 가능함을 유의한다.
도 1 의 예시적인 아키텍처를 사용하는 기본 컨볼루션 모드의 예시적인 수학적 모델은 다음과 같다:
Figure pct00009
상기의 표기법들에 있어서 윗첨자들은 루프 인덱스를 나타내고, 아랫첨자들은 계층 인덱스를 나타내며, 예컨대,
Figure pct00010
Figure pct00011
이다. 특히, 상기의 예는 루핑이 존재하지 않는 컨볼루션의 기본 모드에 관련되기 때문에, 루프 인덱스는 모든 동작들에 대해 동일하다 (0). 추가로, 상기의 식들에서,
Figure pct00012
는 일반적으로, ReLU 와 같은 비선형 활성화 함수와 같은 비선형성 연산을 표기하기 위해 사용된다. 하지만, 비선형성이 필요하지 않거나 적용되지 않는 경우에서, 대응하는
Figure pct00013
는 Y = f(X) = X 와 같이 식별 함수로서 대신 정의될 수도 있어서, 동일한 수학적 디스크립션이 유지될 수도 있다. 전술한 식들은, 각각의 식을 프로세싱하는 머신 러닝 모델 프로세서의 전체 물리적 용량의 사용을 가정할 수도 있다.
따라서, 컨볼루션의 기본 모드에서, 각각의 컨볼루션 계층은 계층에 대해 정확히 1 루프를 실행하도록 구성될 수도 있다. 즉, 탄력적 보틀넥 블록 (101) 은, 각각의 계층이 오직 한번만 루핑하도록 설정될 경우 종래의 보틀넥 블록으로서 작용하도록 구성될 수도 있고, 컨볼루션 계층들 중 하나 이상에 대해 단일 루프 초과로 인에이블함으로써 블록의 표현성을 향상시키도록 구성될 수 있으며, 여기서, 각각의 루프는 (예컨대, 루프 인덱스 번호에 의해 연관되는 바와 같이) 그 루프에 특정한 가중치들의 연관된 세트를 가질 수도 있다.
대조적으로, 도 1 의 예시적인 아키텍처를 사용하는 확장 컨볼루션 모드의 예시적인 수학적 모델은 다음과 같고, 여기서, * 심볼들은 기본 컨볼루션 모드와 비교하여 프로세싱을 위한 확장된 데이터를 나타낸다:
Figure pct00014
특히, 확장 컨볼루션 모드에 대한 전술한 식들은 머신 러닝 모델 프로세서의 동일한 물리적 용량을 사용하는 더 복잡한 (따라서, 더 표현적인) 모델을 허용한다. 이는,
Figure pct00015
,
Figure pct00016
, 및
Figure pct00017
이 기본 모드에서 지원되는 최대 차원의 가중치 매트릭스들인 반면, 확장 모드는,
Figure pct00018
,
Figure pct00019
,
Figure pct00020
, 및
Figure pct00021
을 포함하는 추가적인 특징 데이터와 연관된 추가적인 가중치 매트릭스들을 프로세싱하는 것을 허용한다는 사실에 의해 입증된다.
추가로, (상기의
Figure pct00022
,
Figure pct00023
, 및
Figure pct00024
과 같이) 확장 컨볼루션 모드들에 사용되는 가중치 매트릭스들 자체는, 모델 용량 (또는 표현력) 이 대응하는 계층에 대해 추가로 확장될 수 있도록 하나 이상의 서브-매트릭스들을 포함할 수도 있다.
예를 들어, 확장된 가중치 매트릭스는 다음과 같이 정의될 수도 있다:
Figure pct00025
따라서,
Figure pct00026
다른 예에서, 확장된 가중치 매트릭스는 다음과 같이 정의될 수도 있다:
Figure pct00027
Figure pct00028
따라서,
Figure pct00029
이고,
여기서, P > 1 및 Q > 1 은 전술한 식에서 정수들이다.
즉, 확장된 컨볼루션 계층들에 대한 (예컨대, 가중치 매트릭스들의 형태의) 추가적인 가중치들은 오직 하나의 세트 (예컨대, 하나의 매트릭스) 로 제한되지 않지만, 하나 이상의 서브세트들 (예컨대, 하나 이상의 매트릭스들 또는 서브-매트릭스들) 로 구성될 수도 있다.
일부 경우들에서, 확장 컨볼루션 모드들에 대한 가중치들은 모델 출력에 대한 가중치의 유의성에 기초하여 선택될 수도 있다. 예를 들어, 그 유의성은, 일부 경우들에서, 가중치의 절대값에 기초할 수도 있다.
확장 컨볼루션 모드는, 예를 들어, 도 1 에서의 모드 제어기 (108) 에 의해 제어될 수도 있다. 예를 들어, 모드 제어기 (108) 는 확장된 계층 입력 및/또는 출력 사이즈들, 각각의 중간 계층에 대한 중간 계층 모드들 등을 구성할 수도 있다.
탄력적 보틀넥 블록들의 확장된 컨볼루션 능력들
도 2a 는 도 1 의 예시적인 보틀넥 블록 (101) 과 같은 3 계층 보틀넥 블록 (200) 을 사용하여 기본 및 확장 컨볼루션 모드들에 대한 예시적인 플로우들을 도시한다. 도 2a 의 예에서, 스킵 (또는 "아이덴티티") 연결 (208) 이 입력으로부터 최종 출력 합산에 포함된다.
도시된 예에서, 블록들 (202A-C) (제 1 크로스-해칭 패턴으로 도시됨) 은 임의의 중간 계층의 확장없이 기본 컨볼루션 모드에 대한 프로세싱 경로를 나타낸다.
블록 (204) (제 2 크로스-해칭 패턴으로 도시됨) 은 제 1 중간 계층 모드에 대해 상기 설명된 바와 같은 단일 계층 입력의 확장을 나타낸다. 이에 따라, 확장 컨볼루션의 제 1 예에서, 블록들 (202A-C 및 204) 은 X 의 입력 데이터 사이즈 또는 Y 의 출력 사이즈를 변경하지 않고 출력 (Y) 을 생성하도록 프로세싱된다. 이는 블록들 (202A-C) 에 의해 제공되는 보틀넥 용량에서의 증가를 나타낸다.
블록들 (206A-D) (제 3 크로스-해칭 패턴으로 도시됨) 은 제 2 중간 계층 모드에 대해 상기 설명된 바와 같은 1 초과의 계층 입력 및/또는 출력의 확장을 나타낸다. 이에 따라, 확장 컨볼루션의 제 2 예에서, 블록들 (202A-C, 204, 및 206A-D) 모두는, 다시, X 의 입력 데이터 사이즈 또는 Y 의 출력 사이즈를 변경하지 않고 출력 (Y) 을 생성하도록 프로세싱된다. 이는 블록들 (202A-C) 에 의해 제공되는 보틀넥 용량에서의 다른 증가를 나타낸다.
따라서, 도 2a 는 탄력적 보틀넥 블록들 내의 컨볼루션 모드들의 "탄력적인" 본성을 도시하며, 이는 보틀넥 블록 아키텍처, 루핑 구성, 및 중간 계층 모드들 (이들 모두는 가변 표현성을 초래함) 에 의존하여 기본 모드로, 또는 다중의 확장 모드들로 구성될 수 있다. 루핑 및 계층 확장을 갖는 탄력적 보틀넥 아키텍처는 심도-우선 데이터 및 실행 파이프라인에 기초하여 더 많은 가중치들, 더 정교한 컨볼루션들, 및 (예컨대, 더 비선형적인 연산들 (
Figure pct00030
) 에 의한) 더 많은 비선형성을 갖는 증가된 모델 표현력을 인에이블하는 것이 명백하다. 왜냐하면 인공 뉴럴 네트워크에서의 비선형 연산은 컴퓨터 프로그램에서의 분기화 로직과 유사하기 때문이다. 따라서, 더 많은 비선형성은 인공 뉴럴 네트워크 모델의 더 큰 표현력을 암시한다.
탄력적 보틀넥 아키텍처는, 따라서, 딥 뉴럴 네트워크 모델들에 대한 조건부 멀티-모달/멀티-소스 프로세싱을 인에이블한다. 예를 들어, 추론 엔진 상에서 이미 그 전체 물리 리소스들을 사용하고 있는 설계를 고려한다. 추가적인 타입들의 센서 소스들 (멀티-모달 감지) 또는 센서 소스들의 추가적인 인스턴스들 (멀티-소스 감지) 로부터와 같이, 더 많은 수의 특징들을 핸들링할 조건부의 또는 가끔씩의 필요가 있었다면, 탄력적 보틀넥 아키텍처는, 상기 설명된 바와 같이, 중간 계층 확장을 통해 추가적인 특징들을 수용하는데 사용될 수도 있다. 그리고 그러한 추가적인 특징들은 특징 특정 가중치 세트들을 사용하여 유익하게 트레이닝될 수도 있다.
예를 들어, 도 2a 에서와 같이,
Figure pct00031
는 새로운 입력 데이터 특징이 이용가능할 경우에 제 1 확장 컨볼루션 모드에서 선택적으로 사용될 수도 있다. 추가로,
Figure pct00032
,
Figure pct00033
,
Figure pct00034
, 및
Figure pct00035
는, 추가의 입력 데이터 특징들이 이용가능할 경우에 제 2 확장 컨볼루션 모드에서 선택적으로 사용될 수도 있다. 이 예에서, 어떤 입력 데이터가 이용가능한지에 기초하여 보틀넥 블록의 표현성의 적어도 3개의 상이한 레벨들이 존재하며, 이들은 조건들에 기초하여 선택될 수도 있다. 따라서, 보틀넥 블록은, 소망될 경우에 추가적인 데이터를 활용하도록 확장되거나, 또는 데이터가 이용가능하지 않거나 필요하지 않을 경우에 축소할 수도 있다. 상기와 같이, 이는 모델 추론 엔진과 같은 머신 러닝 모델 프로세서의 물리 리소스들을 추가하거나 확장할 필요없이 달성된다.
도 2b 는 확장된 포인트별 컨볼루션 프로세싱의 일 예 (250) 를 도시한다.
도시된 예에서, 입력 데이터 (252) (X) 는 H × W × 256 (C1,in = 256) 의 차원을 가지며, 이는 탄력적 보틀넥 블록에서의 프로세싱을 위해 이용가능한 데이터 채널들의 총량을 나타낼 수도 있다. 이 예에서, 모든 데이터 채널들은, 예컨대, 도 1 에서의 모드 제어기 (108) 에 의한 프로세싱을 위해 선택되지만, 기초 프로세싱 하드웨어는 128개의 채널들로 제한되거나 최적화될 수도 있으며, 이는 기본 동작 모드에서 탄력적 보틀넥 블록에 대한 표준 입력 사이즈일 수도 있다. 이 예에서 추가적인 데이터를 프로세싱하기 위하여, 입력 데이터 (252) 는 블록 (253) 에서 입력 데이터 서브세트들 (X1 및 X2) 로 분할되며, 이들 각각은 H × W × 128 의 차원을 갖는다.
그 다음, 컨볼루션 프로세싱이, 가중치들의 4개의 별개의 세트들 (
Figure pct00036
,
Figure pct00037
,
Figure pct00038
, 및
Figure pct00039
) 로, 블록들 (256A 내지 256D) 에서 입력 데이터 서브세트들 (X1 및 X2) 에 대해 수행된다. 그 다음, 컨볼루션 프로세싱 블록들 (256A 내지 256D) 의 결과들이 누산되어 (256A 와 256C, 및 256B 와 256D), 중간 출력들 (258A (Y1) 및 258B (Y2)) 을 생성한다.
마지막으로, 중간 결과들이 연접되어, 256 채널들에 대한 출력 (260) (Y) 채널 차원 (C1,out) 을 리턴한다. 다른 예들에서, 예 (250) 에서의 프로세싱이 탄력적 보틀넥 블록에서의 제 1 포인트별 컨볼루션 계층인 경우와 같이, 출력 차원이 감소될 수도 있음을 유의한다. 예를 들어, 도 1 에서의 122 와 같은 풀링 계층이 출력을 다운샘플링하는데 사용될 수도 있다.
도 3 은 기본 컨볼루션 모드 프로세싱 플로우 (302) 및 확장 컨볼루션 모드 프로세싱 플로우 (304) 의 다른 비교를 도시하며, 여기서, 탄력적 보틀넥 블록들의 폭들은 각각의 보틀넥 블록의 상대적 표현력을 표시하는데 사용된다 (더 넓은 것이 더 표현적임). 추가로, 각각의 플로우 (302 및 304) 는, 전체 모델 아키텍처를 프로세싱할 경우에 탄력적 보틀넥 블록의 이점이 다수회 누산될 수도 있음을 입증하기 위해 다중의 탄력적 보틀넥 블록들을 포함한다. 추가로, 상이한 보틀넥 블록이 상이한 수들의 계층들 및 채널들을 포함할 수도 있기 때문에, 각각의 플로우에서의 탄력적 보틀넥 블록들은 상이한 폭들로서 표시된다.
도시된 바와 같이, 기본 컨볼루션 모드 (302) 에서, 표현성은 일반적으로, 종래의 보틀넥 블록 아키텍처에서와 같이 제한될 수도 있으며, 그 아키텍처 자체는, 모델이 배치되고 있는 디바이스의 하드웨어 제한 주위로 설계될 수도 있다. 대조적으로, 확장 컨볼루션 모드 (304) 에서, 탄력적 보틀넥 블록들의 하나 이상의 계층들은 상기에서 설명된 바와 같이 확장되어 추가적인 데이터를 고려할 수도 있으며, 이는 표현성을 증가시킨다.
유사하게, 프로세싱 시스템은 (예컨대, 예시적인 플로우 (304) 에서와 같이) 최대로 확장된 컨볼루션 모드에서 시작하고, 컨텍스트, 이용 케이스, 및/또는 조건들에 기초하여 (예컨대, 예시적인 플로우 (302) 에서와 같이) 기본 모드를 향해 다시 이동할 수도 있다. 즉, 탄력적 보틀넥 블록이 항상 기본 모드에서 시작한 다음 확장될 필요는 없으며, 오히려, 탄력적 보틀넥 블록은 조건 기반 모드 선택 화살표 (306) 에 의해 표시된 바와 같이, 컨텍스트, 이용 케이스, 및/또는 조건들에 기초하여 확장 상태에서 시작하여 상태들을 스텝 다운 (예컨대, 덜 표현적이게) 또는 스텝 업 (예컨대, 더 표현적이게) 할 수도 있다. 상기와 같이, 모델의 확장 또는 축소는, 각각의 보틀넥 블록에 대해 구성된 입력 데이터의 양 (예컨대, 채널들의 수) 및 루프들의 수에 기초하여 달성될 수도 있다. 따라서, 도 3 은 프로세싱 플로우들 (302 및 304) 을 통해 2개의 예시적인 모드들을 도시하지만, 이들은 컨텍스트, 이용 케이스, 조건들 등에 기초하여 임의의 수의 중간 모드들이 정의될 수도 있는 스펙트럼의 단부들로 간주될 수도 있다.
탄력적 보틀넥 블록 및 확장 컨볼루션을 사용한 예시적인 추론 방법
도 4 는 도 1 및 도 2 에 관하여 상기에서 도시되고 설명된 것과 같은 탄력적 보틀넥 블록을 사용하여 추론하기 위한 예시적인 방법 (400) 을 도시한다.
방법 (400) 은 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 단계 402 에서 시작한다. 상기 설명된 바와 같이, 루프들의 수는 탄력적 보틀넥 블록의 입력 사이즈 또는 출력 사이즈를 변경하지 않는다. 일부 양태들에서, 루프들의 수는 도 1 에서의 108 과 같은 모드 제어기에 의해 구성되는 루핑 파라미터에 기초할 수도 있다.
그 다음, 방법 (400) 은 컨볼루션 가중치들의 루프 특정 세트를 로딩하는 단계 404 로 진행한다. 예를 들어, 탄력적 보틀넥 블록의 제 2 계층의 제 2 루프에 대한 가중치들 (
Figure pct00040
) 이 로딩될 수도 있다. 일부 양태들에서, 컨볼루션 가중치들의 루프 특정 세트는 도 1 에서의 가중치 메모리 (104) 와 같은 가중치 메모리 또는 버퍼로부터 로딩될 수도 있다. 일부 양태들에서, 가중치들은 도 1 에서의 버퍼 (124, 126, 또는 128) 와 같은 계층 특정 버퍼에 저장될 수도 있다.
그 다음, 방법 (400) 은 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하는 단계 406 으로 진행한다.
그 다음, 방법 (400) 은 루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하는 단계 408 로 진행한다. 일부 양태들에서, 로컬 메모리는 도 1 의 버퍼 (124, 126, 또는 128) 와 같은 버퍼일 수도 있다.
그 다음, 방법 (400) 은 루프들의 수에 기초하여 현재 루프가 마지막 루프인지를 결정하는 단계 410 으로 진행한다. 현재 루프가 마지막 루프가 아니면, 프로세스는 단계 404 로 리턴할 수도 있고; 그렇지 않고 마지막 루프이면, 프로세스는 단계 412 로 진행할 수도 있다.
예를 들어, 현재 루프 수가 컨볼루션 계층에 대해 구성된 루프들의 수보다 낮으면, 방법 (400) 은 단계 404 로 리턴하여 컨볼루션 계층의 다른 루프를 시작한다. 현재 루프 수가 컨볼루션 계층에 대해 구성된 루프들의 수와 동일하면, 방법 (400) 은 단계 412 로 진행한다.
단계 412 에서, 방법 (400) 은, 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 것으로 진행한다. 예를 들어, 도 1 에서의 버퍼 (124, 126, 또는 128) 와 같은 로컬 버퍼에 저장된 중간 결과들이 누산된 다음, 다음 계층에 대한 입력으로서 제공될 수도 있다.
일부 양태들에서, 방법 (400) 은 루프 특정 컨볼루션 결과들을, 로컬 메모리에 저장된 현재 컨볼루션 결과 값에 누산하는 단계를 더 포함한다.
일부 양태들에서, 방법 (400) 은 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 중간 계층 모드를 결정하는 단계; 및 중간 계층 모드에 기초하여 루프 파라미터를 구성하는 단계를 더 포함하고, 여기서, 루프 파라미터는 루프들의 수를 구성한다. 예를 들어, 계층 모드는, 상기에서 설명된 바와 같이, 계층 채널 출력 정적 모드 또는 계층 채널 출력 확장 모드일 수도 있다.
일부 양태들에서, 방법 (400) 은 중간 활성화 데이터를 생성하기 위해 컨볼루션 계층의 출력에 대해 비선형 연산을 수행하는 단계; 및 탄력적 보틀넥 블록에서의 제 2 컨볼루션 계층에 대한 입력으로서 중간 활성화 데이터를 제공하는 단계를 더 포함한다. 예를 들어, 도 1 에 도시된 바와 같이, 비선형 또는 산술 연산 블록 (112) 은 컨볼루션 계층 (114) 에 대한 중간 활성화 데이터를 생성하기 위해 컨볼루션 계층 (110) 의 출력에 대해 ReLU 와 같은 비선형 연산을 수행할 수도 있다.
일부 양태들에서, 방법 (400) 은 보틀넥 블록 구성 데이터를 로딩하는 단계; 및 구성 데이터에 기초하여 탄력적 보틀넥 블록의 복수의 컨볼루션 계층들을 구성하는 단계를 더 포함한다. 방법 (400) 의 일부 양태들에서, 복수의 컨볼루션 계층들은 컨볼루션 계층을 포함하고, 보틀넥 블록 구성 데이터는 복수의 컨볼루션 계층들의 각각의 개별 계층에 대한 루프 파라미터를 구성하고, 보틀넥 블록 구성 데이터는 복수의 컨볼루션 계층들의 각각의 컨볼루션 계층에 대한 입력 사이즈 및 출력 사이즈를 구성한다.
일부 양태들에서, 방법 (400) 은 컨볼루션 계층의 입력으로부터의 스킵 연결 및 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 단계를 더 포함한다.
방법 (400) 의 일부 양태들에서, 컨볼루션 계층은, 도 1 의 예에서 도시된 바와 같은 탄력적 보틀넥 블록에서의 복수의 컨볼루션 계층들 중 하나이다.
방법 (400) 의 일부 양태들에서, 컨볼루션 계층은 도 1 의 포인트별 컨볼루션 계층들 (110 및 118) 과 같은 포인트별 컨볼루션 계층을 포함한다.
방법 (400) 의 일부 양태들에서, 컨볼루션 계층은 도 1 에서의 심도별 컨볼루션 계층 (114) 과 같은 심도별 컨볼루션 계층을 포함한다.
방법 (400) 의 일부 양태들에서, 루프들의 수는 컨볼루션 계층에 대해 이용가능한 입력 데이터 소스들의 수에 기초한다. 예를 들어, 상기에서 설명된 바와 같이, 입력 데이터 소스들의 수는 자율 주행 시스템과 같은 멀티-모달 프로세스에 대한 센서 데이터 입력들의 수와 관련될 수도 있다.
방법 (400) 의 일부 양태들에서, 탄력적 보틀넥 블록은 비-컨볼루션 계층들을 포함한다. 예를 들어, 탄력적 보틀넥 블록은 도 1 에서의 풀링 계층 (122) 과 같은 풀링 계층을 더 포함할 수도 있다.
일부 양태들에서, 단계 402 에서와 같이, 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 것은 모델 성능 구성을 구현하기 위하여 프로세싱될 채널들의 선택된 수에 기초할 수도 있다. 예를 들어, 컨텍스트, 이용 케이스, 또는 조건들이 감소된 전력 사용 또는 프로세싱 시간을 요구하는 경우, 데이터의 모든 가능한 채널들의 세트로부터의 채널들의 서브세트가 프로세싱을 위해 선택될 수도 있다. 이는, 차례로, 루프들의 수를 결정하는데 사용될 수도 있다.
일부 경우들에서, 루프들의 수는 프로세싱을 위해 선택된 채널들의 수 뿐만 아니라 프로세싱 디바이스의 하드웨어 구성에 기초할 수도 있다. 예를 들어, 프로세싱 디바이스가 입력 데이터의 64개 채널들의 효율적인 프로세싱을 위해 구성되는 경우, 선택된 채널들의 수는 64 의 팩터일 수도 있으며, 이는, 그 다음, 짝수개의 루프들을 제공한다. 따라서, 1 루프는 64개 채널들을 위한 것이고, 2 루프는 128개 채널들을 위한 것 등등이다. 선택된 채널들의 수가 항상 하드웨어 구성의 짝수 팩터일 필요는 없지만, 프로세싱 효율을 위해 이를 행하는 것이 바람직할 수도 있음을 유의한다.
일부 양태들에서, 채널들의 선택은, 모델 출력에 대한 표현성 또는 유의성에 기초하여 이용가능한 채널들의 랭킹된 및/또는 소팅된 순서화에 기초할 수도 있다. 그러한 순서화는, 일 예에서, 도 1 의 가중치 메모리 (104) 에 가중치들과 함께 저장될 수도 있다. 예를 들어, 더 효율적인 프로세싱이 소망되는 경우, 더 낮게 랭킹된 채널들은 프로세싱을 위해 선택된 서브세트로부터 생략될 수도 있으며, 이러한 생략은 단계 402 에서 결정되는 루프들의 수에 영향을 미칠 수도 있다. 마찬가지로, 더 정확한 프로세싱이 소망되고 모델이 모든 이용가능한 입력 데이터를 사용하여 현재 있지 않은 경우, 추가적인 채널들이, 예를 들어, 상기에서 설명된 바와 같은 확장 컨볼루션 모드들을 사용하는 것을 이용하여 프로세스를 위해 선택된 서브세트에 추가될 수도 있다. 이는, 마찬가지로, 단계 402 에서 결정되는 루프들의 수에 영향을 미칠 수도 있다.
도 1 의 100 과 같은 보틀넥 블록 아키텍처가 이 실시예 전반에 걸쳐 사용되었지만, 방법 (400) 은 물론, 다른 탄력적 보틀넥 블록 아키텍처들로도 확장가능함을 유의한다.
탄력적 보틀넥 블록 및 확장 컨볼루션을 위한 예시적인 트레이닝 방법
도 5 는 탄력적 보틀넥 블록을 트레이닝하기 위한 예시적인 방법 (500) 을 도시한다.
방법 (500) 은 탄력적 보틀넥 블록이 기본 모드에서 동작하도록 가중치들의 제 1 세트를 트레이닝하는 단계 502 에서 시작하며, 여기서, 기본 모드에서, 탄력적 보틀넥 블록의 각각의 컨볼루션 계층은 한번 루핑하도록 구성된다.
일부 양태들에서, 가중치들의 제 1 세트를 트레이닝하는 단계는 도 4 에 관하여 설명된 방법 (400) 에 따라 추론 컨볼루션 연산들을 수행하는 단계를 포함할 수도 있으며, 여기서, 탄력적 보틀넥 블록에서의 각각의 컨볼루션 계층에 대한 루프 수는 1 로 설정된다. 그 다음, 가중치들의 제 1 세트는 역 전파 (back propagation) 및 손실 함수와 같은 트레이닝 알고리즘에 기초하여 업데이트될 수도 있다.
그 다음, 방법 (500) 은 탄력적 보틀넥 블록이 확장 모드에서 동작하도록 가중치들의 제 2 세트를 트레이닝하는 단계 504 로 진행하고, 여기서, 확장 모드에서, 탄력적 보틀넥 블록의 하나 이상의 컨볼루션 계층들은 한번 초과로 루핑하도록 구성된다. 일부 양태들에서, 도 1 의 모드 제어기 (108) 와 같은 모드 제어기는 확장 모드에서 탄력적 보틀넥 블록을 설정할 수도 있다.
일부 양태들에서, 가중치들의 제 2 세트를 트레이닝하는 단계는 도 4 에 관하여 설명된 방법 (400) 에 따라 추론 컨볼루션 연산들을 수행하는 단계를 포함할 수도 있으며, 여기서, 탄력적 보틀넥 블록의 적어도 하나의 컨볼루션 계층에 대한 루프 수는 1 보다 크다. 그 다음, 가중치들의 제 2 세트는 역 전파 및 손실 함수와 같은 트레이닝 알고리즘에 기초하여 업데이트될 수도 있다.
그 다음, 방법 (500) 은 가중치들의 제 1 세트 및 가중치들의 제 2 세트를 탄력적 보틀넥 블록에 액세스가능한 메모리에 저장하는 단계 506 으로 진행한다. 예를 들어, 가중치들의 제 1 및 제 2 세트들은 도 1 에서의 104 와 같은 가중치 메모리에 저장될 수도 있다.
그 다음, 옵션적으로, 방법 (500) 은 가중치들의 제 2 세트를 표현성에 의해 랭킹시키는 단계 508 로 진행한다. 일부 경우들에서, 표현성은, 각각의 가중치의 전체 모델 출력에 대한 영향에 의해 결정될 수도 있다. 다른 경우들에서, 표현성은 가중치의 절대값에 의해 결정될 수도 있다. 다른 방법들이 가능하다.
그 다음, 옵션적으로, 방법 (500) 은 가중치 랭킹들을, 도 1 에서의 가중치 메모리 (104) 와 같은 탄력적 보틀넥 블록에 액세스가능한 메모리에 저장하는 단계 510 으로 진행한다. 일부 경우들에서, 가중치 랭킹들은 가중치 값들에 의한 가중치들의 순서화된 리스트로서 저장된다. 그 후, 가중치 랭킹들은, 가중치들의 서브세트가 조건들에 기초하여 사용될 경우 탄력적 보틀넥 블록에 의해 액세스될 수도 있다.
도 5 의 예에서, 트레이닝 단계들 (502 및 504) 에서 일 예로서 가중치들의 2개의 세트들이 사용됨을 유의한다. 하지만, 임의의 수의 가중치들의 세트들이 트레이닝될 수도 있고, 상기에서 설명된 이들 예들과 같이 상이한 컨텍스트들, 이용 케이스들, 또는 조건들과 연관될 수도 있다. 가중치들의 다중의 세트들을 트레이닝하는 것은, 상기에서 설명된 바와 같이, 모델에서 탄력적 보틀넥 블록을 확장 또는 축소하기 위한 다중의 단계들과 같은 모델 성능의 다중의 단계들을 갖는 것을 허용한다.
예시적인 프로세싱 시스템들
도 6 은 도 4 및 도 5 에 관하여 설명된 방법들과 같은 본 명세서에서 설명된 다양한 양태들을 수행하기 위한 예시적인 프로세싱 시스템 (600) 을 도시한다.
프로세싱 시스템 (600) 은, 일부 예들에서 멀티-코어 CPU 일 수도 있는 중앙 프로세싱 유닛 (CPU) (602) 을 포함한다. CPU (602) 에서 실행된 명령들은, 예를 들어, CPU (602) 와 연관된 프로그램 메모리로부터 로딩될 수도 있거나, 또는 메모리 (624) 로부터 로딩될 수도 있다.
프로세싱 시스템 (600) 은 또한, 그래픽스 프로세싱 유닛 (GPU) (604), 디지털 신호 프로세서 (DSP) (606), 뉴럴 프로세싱 유닛 (NPU) (608), 멀티미디어 프로세싱 유닛 (610), 및 무선 접속성 컴포넌트 (612) 와 같은 추가적인 프로세싱 컴포넌트들을 포함한다. 특히, 이들은 단지 일부 예들이며, 다른 예들이 가능하다.
608 과 같은 NPU 는 일반적으로, 인공 뉴럴 네트워크들 (ANN들), 딥 뉴럴 네트워크들 (DNN들), 랜덤 포레스트들 (RF들) 등을 프로세싱하기 위한 동작들과 같은 머신 러닝 동작들을 실행하기 위한 모든 필요한 제어 및 산술 로직을 구현하도록 구성된 특수화 회로이다. NPU 는, 때때로 대안적으로, 뉴럴 신호 프로세서 (NSP), 텐서 프로세싱 유닛들 (TPU), 뉴럴 네트워크 프로세서 (NNP), 지능 프로세싱 유닛 (IPU), 비전 프로세싱 유닛 (VPU), 또는 그래프 프로세싱 유닛으로서 지칭될 수도 있다.
608 과 같은 NPU들은 이미지 분류, 기계 번역, 오브젝트 검출, 및 다양한 다른 작업들과 같은 공통 머신 러닝 작업들의 수행을 가속화하도록 구성된다. 일부 예들에서, 복수의 NPU들은 SoC (system on a chip) 와 같은 단일 칩 상에서 인스턴스화될 수도 있는 한편, 다른 예들에서, 이들은 전용 뉴럴 네트워크 가속기의 부분일 수도 있다.
NPU들은 트레이닝 또는 추론을 위해 최적화될 수도 있거나, 또는 일부 경우들에서, 그 양자 사이의 성능을 밸런싱하도록 구성될 수도 있다. 트레이닝 및 추론 양자 모두를 수행할 수 있는 NPU들에 대해, 2개의 작업들은 여전히 일반적으로, 독립적으로 수행될 수도 있다.
트레이닝을 가속화하도록 설계된 NPU들은 일반적으로, 새로운 모델들의 최적화를 가속화하도록 구성되며, 이는, 모델 성능을 개선하기 위하여, 기존의 데이터세트 (종종, 라벨링되거나 태깅됨) 를 입력하는 것, 데이터세트에 걸쳐 반복하는 것, 및 그 다음, 가중치들 및 바이어스들과 같은 모델 파라미터들을 조정하는 것을 수반하는 고도의 계산 집약적인 동작이다. 일반적으로, 잘못된 예측에 기초하여 최적화하는 것은 모델의 계층들을 통해 역으로 전파하는 것, 및 예측 에러를 감소시키기 위해 그래디언트들을 결정하는 것을 수반한다.
추론을 가속화하도록 설계된 NPU들은 일반적으로, 완전한 모델들 상에서 동작하도록 구성된다. 따라서, 그러한 NPU들은 데이터의 새로운 피스를 입력하고, 이미 트레이닝된 모델을 통해 그것을 신속하게 프로세싱하여 모델 출력 (예컨대, 추론) 을 생성하도록 구성될 수도 있다.
일 구현에서, NPU (608) 는 CPU (602), GPU (604), 및/또는 DSP (606) 중 하나 이상의 부분으로서 통합될 수도 있다.
일부 예들에서, 무선 접속성 컴포넌트 (612) 는, 예를 들어, 제 3 세대 (3G) 접속성, 제 4 세대 (4G) 접속성 (예컨대, 4G LTE), 제 5 세대 접속성 (예컨대, 5G 또는 NR), Wi-Fi 접속성, 블루투스 접속성, 및 다른 무선 데이터 송신 표준들을 위한 서브컴포넌트들을 포함할 수도 있다. 무선 접속성 프로세싱 컴포넌트 (612) 는 하나 이상의 안테나들 (614) 에 추가로 접속된다.
프로세싱 시스템 (600) 은 또한, 임의의 방식의 센서와 연관된 하나 이상의 센서 프로세싱 유닛들 (616), 임의의 방식의 이미지 센서와 연관된 하나 이상의 이미지 신호 프로세서들 (ISP들) (618), 및/또는 위성 기반 포지셔닝 시스템 컴포넌트들 (예컨대, GPS 또는 GLONASS) 뿐만 아니라 관성 포지셔닝 시스템 컴포넌트들을 포함할 수도 있는 내비게이션 프로세서 (620) 를 포함할 수도 있다.
프로세싱 시스템 (600) 은 또한, 스크린들, 터치 감응형 표면들 (터치 감응형 디스플레이들을 포함함), 물리적 버튼들, 스피커들, 마이크로폰들 등과 같은 하나 이상의 입력 및/또는 출력 디바이스들 (622) 을 포함할 수도 있다.
일부 예들에서, 프로세싱 시스템 (600) 의 프로세서들 중 하나 이상은 ARM 또는 RISC-V 명령 세트에 기반할 수도 있다.
프로세싱 시스템 (600) 은 또한, 동적 랜덤 액세스 메모리 (DRAM), 플래시 기반 정적 메모리 등과 같은 하나 이상의 정적 및/또는 동적 메모리들을 나타내는 메모리 (624) 를 포함한다. 이 예에서, 메모리 (624) 는, 프로세싱 시스템 (600) 의 전술된 프로세서들 중 하나 이상에 의해 실행될 수도 있는 다양한 컴퓨터 실행가능 컴포넌트들을 포함한다.
특히, 이 예에서, 메모리 (624) 는 결정 컴포넌트 (624A), 계층 프로세싱 컴포넌트 (624B), 가중치 취출 컴포넌트 (624C), 비선형 연산 컴포넌트 (624D), 가중치 랭킹 컴포넌트 (624E), 모델 구성 컴포넌트 (624F), 모델 파라미터들 (624G), 모드 제어 컴포넌트 (624H), 트레이닝 컴포넌트 (624I) 및 채널 선택 컴포넌트 (624J) 를 포함한다. 도시된 컴포넌트들 및 도시되지 않은 다른 컴포넌트들은 본 명세서에서 설명된 방법들의 다양한 양태들을 수행하도록 구성될 수도 있다.
일반적으로, 프로세싱 시스템 (600) 및/또는 그 컴포넌트들은 본 명세서에서 설명된 방법들을 수행하도록 구성될 수도 있다. 하지만, 프로세싱 시스템이 주로 트레이닝을 위해 의도되는 경우와 같은 일부 양태들에서 (예컨대, 도 5 와 일치함), 도 6 에 도시된 예시적인 컴포넌트들 중 특정 컴포넌트는 생략될 수도 있다. 예를 들어, 트레이닝을 위해 구성된 프로세싱 시스템의 대안적인 양태는 CPU (602), GPU (604), DSP (606), NPU (608) 와 같은 다양한 프로세싱 유닛들을 포함할 수도 있지만, 무선 접속성 (612), 센서들 (616), ISP들 (618), 멀티미디어 (610), 및 내비게이션 (620) 과 같은 다른 양태들을 생략할 수도 있다.
예시적인 조항들
구현 예들이 다음의 넘버링된 조항들에서 기술된다:
조항 1: 방법은 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 단계; 루프들의 수의 각각의 루프에 대해: 컨볼루션 가중치들의 루프 특정 세트를 로딩하는 단계; 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하는 단계; 및 루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하는 단계; 및 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 단계를 포함한다.
조항 2: 조항 1 의 방법은, 루프들의 수의 각각의 루프에 대해, 루프 특정 컨볼루션 결과들을, 로컬 메모리에 저장된 현재 컨볼루션 결과 값에 누산하는 단계를 더 포함한다.
조항 3: 조항 1 내지 조항 2 중 어느 하나의 방법은 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 중간 계층 모드를 결정하는 단계; 및 중간 계층 모드에 기초하여 루프 파라미터를 구성하는 단계를 더 포함하고, 여기서, 루프 파라미터는 루프들의 수를 구성한다.
조항 4: 조항 1 내지 조항 3 중 어느 하나의 방법은 중간 활성화 데이터를 생성하기 위해 컨볼루션 계층의 출력에 대해 비선형 연산을 수행하는 단계; 및 탄력적 보틀넥 블록에서의 제 2 컨볼루션 계층에 대한 입력으로서 중간 활성화 데이터를 제공하는 단계를 더 포함한다.
조항 5: 조항 1 내지 조항 4 중 어느 하나의 방법에 있어서, 루프들의 수는 탄력적 보틀넥 블록의 입력 사이즈 또는 출력 사이즈를 변경하지 않는다.
조항 6: 조항 1 내지 조항 5 중 어느 하나의 방법은 보틀넥 블록 구성 데이터를 로딩하는 단계; 및 보틀넥 블록 구성 데이터에 기초하여 탄력적 보틀넥 블록의 복수의 컨볼루션 계층들을 구성하는 단계를 더 포함하고, 여기서, 복수의 컨볼루션 계층들은 컨볼루션 계층을 포함하고, 보틀넥 블록 구성 데이터는 복수의 컨볼루션 계층들의 각각의 개별 계층에 대한 루프 파라미터를 구성하고, 보틀넥 블록 구성 데이터는 복수의 컨볼루션 계층들의 각각의 컨볼루션 계층에 대한 입력 사이즈 및 출력 사이즈를 구성한다.
조항 7: 조항 1 내지 조항 6 중 어느 하나의 방법은 컨볼루션 계층의 입력으로부터의 스킵 연결 및 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 컨볼루션 계층의 출력을 결정하는 단계를 더 포함한다.
조항 8: 조항 1 내지 조항 7 중 어느 하나의 방법에 있어서, 컨볼루션 계층은 탄력적 보틀넥 블록에서의 복수의 컨볼루션 계층들 중 하나이다.
조항 9: 조항 8 의 방법에 있어서, 컨볼루션 계층은 포인트별 컨볼루션 계층을 포함한다.
조항 10: 조항 8 의 방법에 있어서, 컨볼루션 계층은 심도별 컨볼루션 계층을 포함한다.
조항 11: 조항 1 내지 조항 10 중 어느 하나의 방법에 있어서, 루프들의 수는 컨볼루션 계층에 대해 이용가능한 입력 데이터 소스들의 수에 기초한다.
조항 12: 조항 1 내지 조항 11 중 어느 하나의 방법은 입력 데이터 채널들의 세트로부터 입력 데이터 채널들의 서브세트를 선택하는 단계를 더 포함하고, 여기서, 루프들의 수는 입력 데이터 채널들의 선택된 서브세트의 수에 기초한다.
조항 13: 방법은 탄력적 보틀넥 블록이 기본 모드에서 동작하도록 가중치들의 제 1 세트를 트레이닝하는 단계로서, 기본 모드에서, 탄력적 보틀넥 블록의 각각의 컨볼루션 계층은 한번 루핑하도록 구성되는, 상기 가중치들의 제 1 세트를 트레이닝하는 단계; 및 탄력적 보틀넥 블록이 확장 모드에서 동작하도록 가중치들의 제 2 세트를 트레이닝하는 단계로서, 확장 모드에서, 탄력적 보틀넥 블록의 하나 이상의 컨볼루션 계층들은 한번 초과로 루핑하도록 구성되는, 상기 가중치들의 제 2 세트를 트레이닝하는 단계를 포함한다.
조항 14: 조항 13 의 방법은 가중치들의 제 1 세트 및 가중치들의 제 2 세트를, 탄력적 보틀넥 블록에 액세스가능한 메모리에 저장하는 단계를 더 포함한다.
조항 15: 조항 14 의 방법은 표현성 메트릭에 기초하여 가중치들의 제 2 세트를 랭킹시키는 단계를 더 포함한다.
조항 16: 조항 15 의 방법에 있어서, 표현성 메트릭은 가중치의 절대값을 포함한다.
조항 17: 조항 15 의 방법은 가중치들의 제 2 세트와 연관된 가중치 랭킹들을 메모리에 저장하는 단계를 더 포함한다.
조항 18: 프로세싱 시스템은 컴퓨터 실행가능 명령들을 포함하는 메모리; 및 컴퓨터 실행가능 명령들을 실행하고 프로세싱 시스템으로 하여금 조항 1 내지 조항 17 중 어느 하나에 따른 방법을 수행하게 하도록 구성된 하나 이상의 프로세서들을 포함한다.
조항 19: 프로세싱 시스템은 조항 1 내지 조항 17 중 어느 하나에 따른 방법을 수행하기 위한 수단을 포함한다.
조항 20: 컴퓨터 실행가능 명령들을 포함하는 비일시적 컴퓨터 판독가능 매체로서, 컴퓨터 실행가능 명령들은, 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 경우, 프로세싱 시스템으로 하여금 조항 1 내지 조항 17 중 어느 하나에 따른 방법을 수행하게 한다.
조항 21: 컴퓨터 판독가능 저장 매체 상에 수록된 컴퓨터 프로그램 제품으로서, 컴퓨터 판독가능 저장 매체는 조항 1 내지 조항 17 중 어느 하나에 따른 방법을 수행하기 위한 코드를 포함한다.
추가적인 고려사항들
전술한 설명은 당업자로 하여금 본 명세서에서 설명된 다양한 양태들을 실시할 수 있게 하도록 제공된다. 본 명세서에서 논의된 예들은 청구항들에 기재된 범위, 적용가능성, 또는 양태들을 한정하는 것은 아니다. 이들 양태들에 대한 다양한 수정들은 당업자에게 용이하게 자명할 것이며, 본 명세서에서 정의된 일반적인 원리들은 다른 양태들에 적용될 수도 있다. 예를 들어, 본 개시의 범위로부터 일탈함없이 논의된 엘리먼트들의 기능 및 배열에 있어서 변경들이 행해질 수도 있다. 다양한 예들은 다양한 절차들 또는 컴포넌트들을 적절하게 생략, 치환, 또는 추가할 수도 있다. 예를 들어, 설명된 방법들은 설명된 것과 상이한 순서로 수행될 수도 있으며, 다양한 단계들이 추가, 생략, 또는 결합될 수도 있다. 또한, 일부 예들에 관하여 설명된 특징들은 일부 다른 예들에서 결합될 수도 있다. 예를 들어, 본 명세서에 기재된 임의의 수의 양태들을 이용하여 일 장치가 구현될 수도 있거나 또는 일 방법이 실시될 수도 있다. 부가적으로, 본 개시의 범위는, 본 명세서에 기재된 본 개시의 다양한 양태들에 부가한 또는 그 이외의 다른 구조, 기능성, 또는 구조 및 기능성을 이용하여 실시되는 그러한 장치 또는 방법을 커버하도록 의도된다. 본 명세서에서 개시된 본 개시의 임의의 양태는 청구항의 하나 이상의 엘리먼트들에 의해 구현될 수도 있음이 이해되어야 한다.
본 명세서에서 사용된 바와 같이, 단어 "예시적인" 은 "예, 사례, 또는 예시로서 기능함" 을 의미한다. "예시적인" 것으로서 본 명세서에서 설명된 임의의 양태는 다른 양태들에 비해 반드시 선호되거나 유리한 것으로서 해석될 필요는 없다.
본 명세서에서 사용된 바와 같이, 아이템들의 리스트 "중 적어도 하나" 를 지칭하는 어구는 단일 멤버들을 포함하여 그 아이템들의 임의의 조합을 지칭한다. 일 예로서, "a, b, 또는 c 중 적어도 하나" 는 a, b, c, a-b, a-c, b-c, 및 a-b-c 뿐 아니라 동일한 엘리먼트의 배수들과의 임의의 조합 (예컨대, a-a, a-a-a, a-a-b, a-a-c, a-b-b, a-c-c, b-b, b-b-b, b-b-c, c-c, 및 c-c-c 또는 a, b, 및 c 의 임의의 다른 순서화) 을 커버하도록 의도된다.
본 명세서에서 사용된 바와 같이, 용어 "결정하는 것" 은 매우 다양한 액션들을 포괄한다. 예를 들어, "결정하는 것" 은 계산하는 것, 컴퓨팅하는 것, 프로세싱하는 것, 도출하는 것, 조사하는 것, 검색하는 것 (예컨대, 표, 데이터베이스, 또는 다른 데이터 구조에서 검색하는 것), 확인하는 것 등을 포함할 수도 있다. 또한, "결정하는 것" 은 수신하는 것 (예컨대, 정보를 수신하는 것), 액세스하는 것 (예컨대, 메모리 내 데이터에 액세스하는 것) 등을 포함할 수도 있다. 또한, "결정하는 것" 은 해결하는 것, 선택하는 것, 선출하는 것, 확립하는 것 등을 포함할 수도 있다.
본 명세서에서 개시된 방법들은 그 방법들을 달성하기 위한 하나 이상의 단계들 또는 액션들을 포함한다. 그 방법 단계들 및/또는 액션들은 청구항들의 범위로부터 일탈함없이 서로 상호교환될 수도 있다. 즉, 단계들 또는 액션들의 특정 순서가 명시되지 않으면, 특정 단계들 및/또는 액션들의 순서 및/또는 그 사용은 청구항들의 범위로부터 일탈함없이 수정될 수도 있다. 추가로, 상기 설명된 방법들의 다양한 동작들은 대응하는 기능들을 수행 가능한 임의의 적합한 수단들에 의해 수행될 수도 있다. 그 수단들은 회로, 주문형 집적 회로 (ASIC), 또는 프로세서를 포함하지만 이에 한정되지 않는 다양한 하드웨어 및/또는 소프트웨어 컴포넌트(들) 및/또는 모듈(들)을 포함할 수도 있다. 일반적으로, 도면들에 예시된 동작들이 존재하는 경우, 그 동작들은 유사한 넘버링을 갖는 대응하는 상대의 수단-플러스-기능 컴포넌트들을 가질 수도 있다.
다음의 청구항들은 본 명세서에 나타낸 양태들로 한정되도록 의도되지 않지만, 청구항들의 언어와 부합하는 전체 범위를 부여받아야 한다. 청구항 내에서, 단수로의 엘리먼트에 대한 언급은, 구체적으로 그렇게 서술되지 않는 한 "하나 및 오직 하나" 를 의미하도록 의도되지 않고 오히려 "하나 이상" 을 의미하도록 의도된다. 명확하게 달리 서술되지 않으면, 용어 "일부" 는 하나 이상을 지칭한다. 어떠한 청구항 엘리먼트도 그 엘리먼트가 어구 "~하는 수단" 을 사용하여 명백하게 기재되지 않는다면, 또는 방법 청구항의 경우, 그 엘리먼트가 어구 "~하는 단계" 를 사용하여 기재되지 않는다면, 35 U.S.C.§112(f) 의 규정 하에서 해석되지 않아야 한다. 당업자에게 공지되거나 나중에 공지되게 될 본 개시 전반에 걸쳐 설명된 다양한 양태들의 엘리먼트들에 대한 모든 구조적 및 기능적 균등물들은 본 명세서에 참조에 의해 명백히 통합되며 청구항들에 의해 포괄되도록 의도된다. 더욱이, 본 명세서에 개시된 어떤 것도, 그러한 개시가 청구항들에 명시적으로 기재되는지 여부와 무관하게 공중에 전용되도록 의도되지 않는다.

Claims (30)

  1. 탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하는 단계;
    상기 루프들의 수의 각각의 루프에 대해:
    컨볼루션 가중치들의 루프 특정 세트를 로딩하는 단계;
    상기 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하는 단계; 및
    루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하는 단계; 및
    상기 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 상기 컨볼루션 계층의 출력을 결정하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 루프들의 수의 각각의 루프에 대해, 상기 루프 특정 컨볼루션 결과들을, 상기 로컬 메모리에 저장된 현재 컨볼루션 결과 값에 누산하는 단계를 더 포함하는, 방법.
  3. 제 1 항에 있어서,
    상기 탄력적 보틀넥 블록의 상기 컨볼루션 계층에 대한 중간 계층 모드를 결정하는 단계; 및
    상기 중간 계층 모드에 기초하여 루프 파라미터를 구성하는 단계를 더 포함하고,
    상기 루프 파라미터는 상기 루프들의 수를 구성하는, 방법.
  4. 제 1 항에 있어서,
    중간 활성화 데이터를 생성하기 위해 상기 컨볼루션 계층의 출력에 대해 비선형 연산을 수행하는 단계; 및
    상기 탄력적 보틀넥 블록에서의 제 2 컨볼루션 계층에 대한 입력으로서 상기 중간 활성화 데이터를 제공하는 단계를 더 포함하는, 방법.
  5. 제 1 항에 있어서,
    상기 루프들의 수는 상기 탄력적 보틀넥 블록의 입력 사이즈 또는 출력 사이즈를 변경하지 않는, 방법.
  6. 제 1 항에 있어서,
    보틀넥 블록 구성 데이터를 로딩하는 단계; 및
    상기 보틀넥 블록 구성 데이터에 기초하여 상기 탄력적 보틀넥 블록의 복수의 컨볼루션 계층들을 구성하는 단계를 더 포함하고,
    상기 복수의 컨볼루션 계층들은 상기 컨볼루션 계층을 포함하고,
    상기 보틀넥 블록 구성 데이터는 상기 복수의 컨볼루션 계층들의 각각의 개별 계층에 대한 루프 파라미터를 구성하고,
    상기 보틀넥 블록 구성 데이터는 상기 복수의 컨볼루션 계층들의 각각의 컨볼루션 계층에 대한 입력 사이즈 및 출력 사이즈를 구성하는, 방법.
  7. 제 1 항에 있어서,
    상기 컨볼루션 계층의 입력으로부터의 스킵 연결 및 상기 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 상기 합산에 기초하여 상기 컨볼루션 계층의 출력을 결정하는 단계를 더 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 컨볼루션 계층은 상기 탄력적 보틀넥 블록에서의 복수의 컨볼루션 계층들 중 하나인, 방법.
  9. 제 8 항에 있어서,
    상기 컨볼루션 계층은 포인트별 컨볼루션 계층을 포함하는, 방법.
  10. 제 8 항에 있어서,
    상기 컨볼루션 계층은 심도별 컨볼루션 계층을 포함하는, 방법.
  11. 제 1 항에 있어서,
    상기 루프들의 수는 상기 컨볼루션 계층에 대해 이용가능한 입력 데이터 소스들의 수에 기초하는, 방법.
  12. 제 1 항에 있어서,
    입력 데이터 채널들의 세트로부터 입력 데이터 채널들의 서브세트를 선택하는 단계를 더 포함하고,
    상기 루프들의 수는 상기 입력 데이터 채널들의 선택된 서브세트의 수에 기초하는, 방법.
  13. 프로세싱 시스템으로서,
    컴퓨터 실행가능 명령들을 포함하는 메모리; 및
    하나 이상의 프로세서들을 포함하고,
    상기 하나 이상의 프로세서들은 상기 컴퓨터 실행가능 명령들을 실행하고 그리고 상기 프로세싱 시스템으로 하여금
    탄력적 보틀넥 블록의 컨볼루션 계층에 대한 루프들의 수를 결정하게 하고;
    상기 루프들의 수의 각각의 루프에 대해:
    컨볼루션 가중치들의 루프 특정 세트를 로딩하게 하고;
    상기 컨볼루션 가중치들의 루프 특정 세트를 사용하여 컨볼루션 연산을 수행하게 하고; 그리고
    루프 특정 컨볼루션 결과들을 로컬 메모리에 저장하게 하고; 그리고
    상기 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 합산에 기초하여 상기 컨볼루션 계층의 출력을 결정하게 하도록
    구성되는, 프로세싱 시스템.
  14. 제 13 항에 있어서,
    상기 하나 이상의 프로세서들은 추가로, 상기 프로세싱 시스템으로 하여금, 상기 루프들의 수의 각각의 루프에 대해, 상기 루프 특정 컨볼루션 결과들을, 상기 로컬 메모리에 저장된 현재 컨볼루션 결과 값에 누산하게 하도록 구성되는, 프로세싱 시스템.
  15. 제 13 항에 있어서,
    상기 하나 이상의 프로세서들은 추가로, 상기 프로세싱 시스템으로 하여금
    상기 탄력적 보틀넥 블록의 상기 컨볼루션 계층에 대한 중간 계층 모드를 결정하게 하고; 그리고
    상기 중간 계층 모드에 기초하여 루프 파라미터를 구성하게 하도록
    구성되고,
    상기 루프 파라미터는 상기 루프들의 수를 구성하는, 프로세싱 시스템.
  16. 제 13 항에 있어서,
    상기 하나 이상의 프로세서들은 추가로, 상기 프로세싱 시스템으로 하여금
    중간 활성화 데이터를 생성하기 위해 상기 컨볼루션 계층의 출력에 대해 비선형 연산을 수행하게 하고; 그리고
    상기 탄력적 보틀넥 블록에서의 제 2 컨볼루션 계층에 대한 입력으로서 상기 중간 활성화 데이터를 제공하게 하도록
    구성되는, 프로세싱 시스템.
  17. 제 13 항에 있어서,
    상기 루프들의 수는 상기 탄력적 보틀넥 블록의 입력 사이즈 또는 출력 사이즈를 변경하지 않는, 프로세싱 시스템.
  18. 제 13 항에 있어서,
    상기 하나 이상의 프로세서들은 추가로, 상기 프로세싱 시스템으로 하여금
    보틀넥 블록 구성 데이터를 로딩하게 하고; 그리고
    상기 보틀넥 블록 구성 데이터에 기초하여 상기 탄력적 보틀넥 블록의 복수의 컨볼루션 계층들을 구성하게 하도록
    구성되고,
    상기 복수의 컨볼루션 계층들은 상기 컨볼루션 계층을 포함하고,
    상기 보틀넥 블록 구성 데이터는 상기 복수의 컨볼루션 계층들의 각각의 개별 계층에 대한 루프 파라미터를 구성하고,
    상기 보틀넥 블록 구성 데이터는 상기 복수의 컨볼루션 계층들의 각각의 컨볼루션 계층에 대한 입력 사이즈 및 출력 사이즈를 구성하는, 프로세싱 시스템.
  19. 제 13 항에 있어서,
    상기 하나 이상의 프로세서들은 추가로, 상기 프로세싱 시스템으로 하여금 상기 컨볼루션 계층의 입력으로부터의 스킵 연결 및 상기 루프들의 수의 각각의 루프와 연관된 루프 특정 컨볼루션 결과들의 상기 합산에 기초하여 상기 컨볼루션 계층의 출력을 결정하게 하도록 구성되는, 프로세싱 시스템.
  20. 제 13 항에 있어서,
    상기 컨볼루션 계층은 상기 탄력적 보틀넥 블록에서의 복수의 컨볼루션 계층들 중 하나인, 프로세싱 시스템.
  21. 제 20 항에 있어서,
    상기 컨볼루션 계층은 포인트별 컨볼루션 계층을 포함하는, 프로세싱 시스템.
  22. 제 20 항에 있어서,
    상기 컨볼루션 계층은 심도별 컨볼루션 계층을 포함하는, 프로세싱 시스템.
  23. 제 13 항에 있어서,
    상기 루프들의 수는 상기 컨볼루션 계층에 대해 이용가능한 입력 데이터 소스들의 수에 기초하는, 프로세싱 시스템.
  24. 제 13 항에 있어서,
    입력 데이터 채널들의 세트로부터 입력 데이터 채널들의 서브세트를 선택하는 것을 더 포함하고,
    상기 루프들의 수는 상기 입력 데이터 채널들의 선택된 서브세트의 수에 기초하는, 프로세싱 시스템.
  25. 탄력적 보틀넥 블록이 기본 모드에서 동작하도록 가중치들의 제 1 세트를 트레이닝하는 단계로서, 상기 기본 모드에서, 상기 탄력적 보틀넥 블록의 각각의 컨볼루션 계층은 한번 루핑하도록 구성되는, 상기 가중치들의 제 1 세트를 트레이닝하는 단계; 및
    상기 탄력적 보틀넥 블록이 확장 모드에서 동작하도록 가중치들의 제 2 세트를 트레이닝하는 단계로서, 상기 확장 모드에서, 상기 탄력적 보틀넥 블록의 하나 이상의 컨볼루션 계층들은 한번 초과로 루핑하도록 구성되는, 상기 가중치들의 제 2 세트를 트레이닝하는 단계를 포함하는, 방법.
  26. 제 25 항에 있어서,
    상기 가중치들의 제 1 세트 및 상기 가중치들의 제 2 세트를, 상기 탄력적 보틀넥 블록에 액세스가능한 메모리에 저장하는 단계를 더 포함하는, 방법.
  27. 제 26 항에 있어서,
    표현성 메트릭에 기초하여 상기 가중치들의 제 2 세트를 랭킹시키는 단계를 더 포함하는, 방법.
  28. 제 27 항에 있어서,
    상기 표현성 메트릭은 가중치의 절대값을 포함하는, 방법.
  29. 제 27 항에 있어서,
    상기 가중치들의 제 2 세트와 연관된 가중치 랭킹들을 상기 메모리에 저장하는 단계를 더 포함하는, 방법.
  30. 프로세싱 시스템으로서,
    컴퓨터 실행가능 명령들을 포함하는 메모리; 및
    하나 이상의 프로세서들을 포함하고,
    상기 하나 이상의 프로세서들은 상기 컴퓨터 실행가능 명령들을 실행하고 그리고 상기 프로세싱 시스템으로 하여금
    탄력적 보틀넥 블록이 기본 모드에서 동작하도록 가중치들의 제 1 세트를 트레이닝하게 하는 것으로서, 상기 기본 모드에서, 상기 탄력적 보틀넥 블록의 각각의 컨볼루션 계층은 한번 루핑하도록 구성되는, 상기 가중치들의 제 1 세트를 트레이닝하게 하고; 그리고
    상기 탄력적 보틀넥 블록이 확장 모드에서 동작하도록 가중치들의 제 2 세트를 트레이닝하게 하는 것으로서, 상기 확장 모드에서, 상기 탄력적 보틀넥 블록의 하나 이상의 컨볼루션 계층들은 한번 초과로 루핑하도록 구성되는, 상기 가중치들의 제 2 세트를 트레이닝하게 하도록
    구성되는, 프로세싱 시스템.
KR1020237001467A 2020-07-20 2021-07-20 가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들 KR20230040990A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063054147P 2020-07-20 2020-07-20
US63/054,147 2020-07-20
US17/379,833 2021-07-19
US17/379,833 US20220019873A1 (en) 2020-07-20 2021-07-19 Elastic bottleneck architectures for variable convolution operations
PCT/US2021/042424 WO2022020386A1 (en) 2020-07-20 2021-07-20 Elastic bottleneck architectures for variable convolution operations

Publications (1)

Publication Number Publication Date
KR20230040990A true KR20230040990A (ko) 2023-03-23

Family

ID=79292582

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237001467A KR20230040990A (ko) 2020-07-20 2021-07-20 가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들

Country Status (6)

Country Link
US (1) US20220019873A1 (ko)
EP (1) EP4182852A1 (ko)
KR (1) KR20230040990A (ko)
CN (1) CN116157807A (ko)
BR (1) BR112023000162A2 (ko)
WO (1) WO2022020386A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230259773A1 (en) * 2022-02-17 2023-08-17 Qualcomm Incorporated Dimensionality transformation for efficient bottleneck processing

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963390B2 (en) * 2018-08-21 2021-03-30 Neuchips Corporation Memory-adaptive processing method for convolutional neural network and system thereof
US12099913B2 (en) * 2018-11-30 2024-09-24 Electronics And Telecommunications Research Institute Method for neural-network-lightening using repetition-reduction block and apparatus for the same
JP7353772B2 (ja) * 2019-03-07 2023-10-02 キヤノン株式会社 データ処理装置及びその方法、プログラム
US20200372337A1 (en) * 2019-05-21 2020-11-26 Nvidia Corporation Parallelization strategies for training a neural network
US11669733B2 (en) * 2019-12-23 2023-06-06 Marvell Asia Pte. Ltd. Processing unit and method for computing a convolution using a hardware-implemented spiral algorithm
CN111416743B (zh) * 2020-03-19 2021-09-03 华中科技大学 一种卷积网络加速器、配置方法及计算机可读存储介质
US11443013B2 (en) * 2020-03-23 2022-09-13 Meta Platforms, Inc. Pipelined pointwise convolution using per-channel convolution operations
TWI766568B (zh) * 2020-04-17 2022-06-01 神盾股份有限公司 用於執行卷積神經網路運算的處理裝置與其操作方法
JP6834097B1 (ja) * 2020-05-15 2021-02-24 エッジコーティックス ピーティーイー. リミテッド 推論のニューラルネットワークアクセラレータのハードウェア固有分割

Also Published As

Publication number Publication date
WO2022020386A1 (en) 2022-01-27
US20220019873A1 (en) 2022-01-20
CN116157807A (zh) 2023-05-23
EP4182852A1 (en) 2023-05-24
BR112023000162A2 (pt) 2023-01-31

Similar Documents

Publication Publication Date Title
US20240386261A1 (en) Neural network architecture using convolution engines
US20220043886A1 (en) Hardware Implementation of Convolutional Layer of Deep Neural Network
EP4024290A1 (en) Implementing fully-connected neural-network layers in hardware
GB2568102A (en) Exploiting sparsity in a neural network
KR20220013896A (ko) 프로세서의 신경망 아키텍처를 결정하기 위한 방법 및 장치
GB2608791A (en) Neural network comprising matrix multiplication
CN114792124A (zh) 在硬件中实施扩张卷积
KR20230040990A (ko) 가변 컨볼루션 연산들을 위한 탄력적 보틀넥 아키텍처들
US11281376B2 (en) Operation circuit and method of operation for use in operations that are performed in parallel using multiple operators
KR20240036594A (ko) 인-메모리 연산을 위한 부분 합 관리 및 재구성가능 시스톨릭 플로우 아키텍처들
US20230086802A1 (en) Eliminating memory bottlenecks for depthwise convolutions
Abd El-Maksoud et al. FPGA design of high-speed convolutional neural network hardware accelerator
US20210374537A1 (en) Structured convolutions and associated acceleration
GB2582868A (en) Hardware implementation of convolution layer of deep neural network
GB2602493A (en) Implementing fully-connected neural-network layers in hardware
US20230259773A1 (en) Dimensionality transformation for efficient bottleneck processing
Vajgl Reduced ifam weight matrix representation using sparse matrices
GB2602494A (en) Implementing fully-connected neural-network layers in hardware
CN119474002A (zh) 粗粒度可重构处理器算子内存数据复用设计方法

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20230112

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20240704

Comment text: Request for Examination of Application