KR102544623B1 - 프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들 - Google Patents

프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들 Download PDF

Info

Publication number
KR102544623B1
KR102544623B1 KR1020197006427A KR20197006427A KR102544623B1 KR 102544623 B1 KR102544623 B1 KR 102544623B1 KR 1020197006427 A KR1020197006427 A KR 1020197006427A KR 20197006427 A KR20197006427 A KR 20197006427A KR 102544623 B1 KR102544623 B1 KR 102544623B1
Authority
KR
South Korea
Prior art keywords
layer
circuit
neurons
logic
inputs
Prior art date
Application number
KR1020197006427A
Other languages
English (en)
Other versions
KR20190035856A (ko
Inventor
야만 우무로글루
미카엘라 브로트
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20190035856A publication Critical patent/KR20190035856A/ko
Application granted granted Critical
Publication of KR102544623B1 publication Critical patent/KR102544623B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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/0495Quantised networks; Sparse networks; Compressed 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/02Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components
    • H03K19/173Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components
    • H03K19/177Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits using specified components using elementary logic circuits as components arranged in matrix form
    • H03K19/17724Structural details of logic blocks
    • H03K19/17732Macroblocks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computer Hardware Design (AREA)
  • Neurology (AREA)
  • Logic Circuits (AREA)
  • Image Analysis (AREA)

Abstract

일 예에서, 집적 회로(IC)에 구현되는 뉴럴 네트워크의 회로는 하드웨어 뉴런들(124)의 계층(120)을 포함하며, 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하고, 하드웨어 뉴런들 각각은, 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로(302); 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로(304); 및 카운트 신호를 수신하는 입력 및 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로(306)를 포함하며; 여기서, 하드웨어 뉴런들 각각의 비교 회로에 의해 출력된 로직 신호는 복수의 출력들의 각각의 출력으로서 제공된다.

Description

프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들
본 개시내용의 예들은 일반적으로 전자 회로들에 관한 것으로, 더 상세하게는 프로그래밍가능 집적 회로(IC)들 상의 바이너리 뉴럴 네트워크들에 관한 것이다.
뉴럴 네트워크들을 배치하기 위해 필드 프로그래밍가능 게이트 어레이(FPGA)들과 같은 프로그래밍가능 집적 회로(IC)들을 사용하는 것에 대한 새로워진(renewed) 관심이 존재한다. 뉴럴 네트워크들의 현재의 FPGA 구현들은 시스톨릭 어레이(systolic array) 아키텍처에 통상적으로 기반하는 부동 소수점(floating point) 또는 고정 소수점(fixed-point) 곱셈-누산에 포커싱된다. 최근에, 크고 현대적인 머신 러닝 문제점들도 높은 정확도를 달성하면서 가중들 및 활성화들에 대한 바이너리 표현들을 사용하는 뉴럴 네트워크들을 이용하여 해결될 수 있다는 것을 보여준다. 그러나, 바이너리 뉴럴 네트워크들의 구현들은 지금까지는 소프트웨어에 제약되었다.
프로그래밍가능 집적 회로(IC)들 상에서 바이너리 뉴럴 네트워크들을 구현하기 위한 기법들이 설명된다. 일 예에서, 집적 회로(IC)에 구현되는 뉴럴 네트워크의 회로는 하드웨어 뉴런들의 계층을 포함하며, 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하고, 하드웨어 뉴런들 각각은, 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로; 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로; 및 카운트 신호를 수신하는 입력 및 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로를 포함하며; 여기서, 하드웨어 뉴런들 각각의 비교 회로에 의해 출력된 로직 신호는 복수의 출력들의 각각의 출력으로서 제공된다.
다른 예에서, 집적 회로(IC)로 뉴럴 네트워크를 구현하는 방법은, IC에 하드웨어 뉴런들의 계층을 구현하는 단계 ― 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함함 ―; 그리고 복수의 뉴런들 각각에서: 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하고, 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 단계; 제2 로직 신호들을 수신하고, 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 단계; 및 카운트 신호를 수신하고, 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 단계를 포함한다.
다른 예에서, 프로그래밍가능 집적 회로(IC)는, 하드웨어 뉴런들의 계층을 구현하도록 구성된 프로그래밍가능 패브릭(fabric)을 포함하며, 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함한다. 하드웨어 뉴런들 각각은, 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로; 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로; 및 카운트 신호를 수신하는 입력 및 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로를 포함한다. 하드웨어 뉴런들 각각의 비교 회로에 의해 출력된 로직 신호는 복수의 출력들의 각각의 출력으로서 제공된다.
이들 및 다른 양상들은 다음의 상세한 설명을 참조하여 이해될 수 있다.
위에서 언급된 특성들이 상세히 이해될 수 있는 방식으로, 위에서 간략하게 요약된 더 구체적인 설명이 예시적인 구현들을 참조하여 이루어질 수 있으며, 그 예시적인 구현들 중 일부는 첨부된 도면들에 예시되어 있다. 그러나, 첨부된 도면들이 통상적인 예시적인 구현들만을 예시하는 것이므로, 그 구현들의 범위를 제한하는 것으로 간주되지 않아야 한다는 것이 주목되어야 한다.
도 1은 일 예에 따른, 프로그래밍가능 집적 회로(IC)에서 하드웨어 구현으로의 바이너리 뉴럴 네트워크의 맵핑을 도시한 블록 다이어그램이다.
도 2는 일 예에 따른 뉴럴 네트워크 회로의 계층 회로를 도시한 블록 다이어그램이다.
도 3은 일 예에 따른 하드웨어 뉴런을 도시한 블록 다이어그램이다.
도 4는 일 예에 따른 뉴럴 네트워크 회로의 계층 회로를 도시한 블록 다이어그램이다.
도 5는 일 예에 따른 하드웨어 뉴런의 특수화를 도시한 블록 다이어그램이다.
도 6은 매크로-레벨 상에서 바이너리 뉴럴 네트워크의 계층들을 폴딩(fold)하는 ("매크로-레벨 폴딩"으로 지칭됨) 일 예를 도시한 블록 다이어그램이다.
도 7은 일 예에 따른, 매크로-레벨 폴딩 방법을 도시한 흐름도이다.
도 8은 마이크로-레벨 상에서 바이너리 뉴럴 네트워크의 뉴런들을 폴딩하는 ("마이크로-레벨 폴딩"으로 지칭됨) 일 예를 도시한 블록 다이어그램이다.
도 9는 일 예에 따른, 뉴럴 네트워크 구현의 하드웨어 계층들을 갖는 필드 프로그래밍가능 게이트 어레이(FPGA)의 아키텍처를 예시한다.
이해를 용이하게 하기 위하여, 동일한 참조 번호들은 가능한 경우, 도면들에 공통적인 동일한 엘리먼트들을 지정하기 위해 사용되었다. 일 예의 엘리먼트들이 다른 예들에 유리하게 통합될 수 있다는 것이 고려된다.
다양한 특성들이 도면들을 참조하여 아래에서 설명된다. 도면들이 실척대로 도시될 수 있거나 또는 도시되지 않을 수 있으며, 유사한 구조들 또는 기능들의 엘리먼트들이 도면들 전반에 걸쳐 유사한 참조 번호들에 의해 표현됨을 유의해야 한다. 도면들이 특성들의 설명을 용이하게 하기 위해서만 의도되는 것임을 유의해야 한다. 그들은 청구된 발명의 완전한 설명 또는 청구된 발명의 범위에 대한 제한으로 의도되지 않는다. 부가적으로, 예시된 예는 도시된 모든 양상들 또는 이점들을 가질 필요는 없다. 특정한 예와 함께 설명된 양상 또는 이점은 반드시 그 예로 제한되지는 않으며, 그렇게 예시되지 않거나 또는 그렇게 명시적으로 설명되지 않더라도 임의의 다른 예들로 실시될 수 있다.
본 개시내용은 바이너리 뉴럴 네트워크의 매우 효율적인 하드웨어 구현을 설명한다. 일 예에서, 하드웨어 구현은 필드 프로그래밍가능 게이트 어레이(FPGA)와 같은 프로그래밍가능 집적 회로(IC)의 아키텍처에 맵핑된다. 구현은 높은 계산 세기로 입력 데이터를 프로세싱하는 많은 수의 뉴런들을 맵핑시킨다. 예컨대, 완전한 뉴럴 네트워크가 FPGA 내에서 완전히 전개될 수 있다고 가정하면, 뉴럴 네트워크는 클록 주파수에서 인입 데이터 세트들(예컨대, 이미지들)을 분류할 수 있다. 100MHz의 보수적인(conservative) 클록 주파수를 가정하면, 그러한 뉴럴 네트워크 구현은 초당 1억개의 데이터 세트들(예컨대, 초당 이미지들)로 입력 데이터 세트들을 분류할 수 있다. 다른 예들에서, 뉴럴 네트워크를 구현하기 위해 특정한 양의 폴딩이 수행된다. 본 명세서에서 설명된 뉴럴 네트워크의 하드웨어 구현은 제너릭(generic) 프로세싱 엔진들의 시스톨릭 어레이들 상으로 부동 소수점 뉴럴 네트워크들을 맵핑시키는 FPGA들의 이전의 구현들과 근본적으로 상이하다. 그러한 부동 소수점 구현들은 현재, 초당 100 내지 300개의 데이터 세트들을 프로세싱한다. 더욱이, 본 명세서에서 설명된 뉴럴 네트워크 구현은, FPGA들의 이전의 부동 소수점 구현들보다 그리고 그래픽 프로세싱 유닛(GPU)들을 사용하는 구현들에 비해 더 작은 전력을 소비한다.
본 명세서에서 추가로 설명되는 바와 같이, 바이너리 뉴럴 네트워크들의 이점은, 표준 부동 소수점 곱셈 누산 연산들이 배타적 NOR 및 비트 카운트 연산들이 된다는 것이다. 기본 아키텍처는 완전히-연결되거나 부분적으로 연결될 수 있는 다수의 계층들을 포함한다(예컨대, 콘볼루셔널(convolutional), 풀링(pooling) 등). 각각의 계층은 다수의 하드웨어 뉴런들을 포함한다. 각각의 하드웨어 뉴런은 모든 데이터 입력들과 대응하는 가중치들의 XNOR로서 뉴런을 계산하고, 결과에서 로직 "1" 비트들의 수를 카운팅하며, 카운트를 임계치와 비교한다. 하드웨어 뉴런은, 비트 카운트가 임계치보다 큰 경우 참(로직 "1")을 리턴하고, 그렇지 않으면 거짓(로직 "0")을 리턴한다. 완전히-연결된 계층 및 부분적으로-연결된 계층은, 하드웨어 뉴런들이 입력 데이터를 어떻게 수신하는지에서 상이하다. 완전히-연결된 계층들의 경우, 입력은 모든 하드웨어 뉴런들로 브로드캐스팅된다. 부분적으로-연결된 계층들의 경우, 각각의 하드웨어 뉴런은 입력 데이터의 일부에 대해 연산한다. 예컨대, 콘볼루셔널 계층에서, 각각의 하드웨어 뉴런은 입력 데이터의 일부들의 시퀀스에 대해 연산하여, 활성화들의 대응하는 시퀀스를 생성한다. 구현에 의존하여, 풀링 계층들(예컨대, 최대 풀링 계층들)은 이전의 계층의 출력을 다운-샘플링하는 데 사용될 수 있다.
몇몇 구현들에서, 가중치들 및 임계치들은 빈번하지 않게 (예컨대, 네트워크들이 리트레이닝(retrain)된 이후에만) 업데이트될 수 있다. 따라서, 가중치들 및/또는 임계치들은 특수화된 하드웨어 뉴런들을 생성하기 위해 "강화"될 수 있다. 네트워크의 특수화는 XNOR 연산들 및/또는 비교 연산들과 연관된 모든 리소스 요건들을 제거해야 한다. 더욱이, FPGA에서 구현될 경우, 네트워크를 특수화하는 것은 비-특수화된 네트워크 구현보다 상당히 더 작은 라우팅 리소스들을 소비할 수 있다.
몇몇 구현들에서, 큰 네트워크들은 리소스 제약들로 인해, 완전히 전개된 구현이 가능하지 않을 수 있다. 예컨대, FPGA의 라우팅 제한들은 많은 수의 시냅스들을 갖는 큰 완전히-연결된 계층의 효율적인 구현을 방지할 수 있다. 따라서, 몇몇 예들에서, 네트워크는 하드웨어 아키텍처 상으로 폴딩될 수 있다. 폴딩은 가변 입도를 이용하여 달성될 수 있다. 매크로-레벨 상에서, 전체 계층들은 아키텍처 상으로 반복적으로 폴딩될 수 있다. 대안적으로, 몇몇 뉴런들은 동일한 하드웨어 뉴런 상으로 폴딩될 수 있고, 몇몇 시냅스들은 동일한 연결들 상으로 폴딩될 수 있다(라우팅 요건들을 감소시킴). 바이너리 뉴럴 네트워크 구현의 이들 및 추가적인 양상들이 도면들을 참조하여 아래에서 설명된다.
도 1은 일 예에 따른, 프로그래밍가능 집적 회로(IC)에서 하드웨어 구현으로의 바이너리 뉴럴 네트워크(101)의 맵핑을 도시한 블록 다이어그램이다. 바이너리 뉴럴 네트워크는 하나 이상의 계층들(102)을 포함한다. 각각의 계층(102)은 시냅스들(106)(예컨대, 입력들) 및 활성화들(108)(예컨대, 출력들)을 갖는 뉴런들(104)을 포함한다. 계층(들)(102)에 대한 입력들은 바이너리 입력들(110), 바이너리 가중치들(112), 및 임계치 값들(114)을 포함한다. 계층(들)(102)의 출력들은 바이너리 출력들(116)을 포함한다. 각각의 바이너리 입력(110)은 1비트 값(예컨대, 로직 "0" 또는 로직 "1")이다. 유사하게, 각각의 바이너리 가중치(112)는 1비트 값이다. 각각의 임계치 값(114)은 정수이다. 각각의 바이너리 출력(116)은 1비트 값이다. 각각의 뉴런(104)은 각각의 하나 이상의 시냅스들(106)을 통해 하나 이상의 바이너리 입력들(110)을 수신한다. 각각의 뉴런(104)은 또한, 시냅스들(106)에 대한 하나 이상의 바이너리 가중치들(112) 및 임계치 값(114)을 수신한다. 각각의 뉴런(104)은 활성화(108)를 통해 바이너리 출력(116)을 공급한다. 뉴런(104)은, 그의 바이너리 입력(들), 바이너리 가중치(들), 및 임계치 값이 그의 바이너리 출력으로 하여금 어써팅(assert)되게 할 경우(예컨대, 로직 "1"), "활성화"된다.
몇몇 계층들(102)은 예컨대, 도 2에 도시된 바와 같이, "완전히-연결"될 수 있다. 완전히-연결된 계층에서, 이전의 계층으로부터의 주어진 세트의 바이너리 입력들(110) 또는 주어진 세트의 활성화들(108)이 모든 뉴런들(104)로 브로드캐스팅된다. 즉, 각각의 뉴런(104)은 동일한 세트의 입력들에 대해 연산한다. 몇몇 계층들(102)은 "부분적으로-연결"된다. 부분적으로-연결된 계층에서, 각각의 뉴런(104)은 이전의 계층으로부터의 주어진 세트의 바이너리 입력들(110) 또는 주어진 세트의 활성화들(108) 중 일부에 대해 연산한다. 상이한 뉴런들(104)은 입력 세트의 동일한 또는 상이한 부분들에 대해 연산할 수 있다. 바이너리 입력들(110)은 하나 이상의 데이터 세트들, 이를테면 하나 이상의 이미지들을 표현할 수 있다. 이미지 예에서, 완전히-연결된 계층에 대한 입력은 전체 이미지이고, 부분적으로-연결된 계층에 대한 입력은 이미지의 일부이다. 몇몇 계층들(102)은 "콘볼루셔널" 계층들일 수 있다. 콘볼루셔널 계층에서, 각각의 뉴런(104)은 이전의 계층으로부터의 주어진 세트의 바이너리 입력들(110) 또는 주어진 세트의 활성화들(108) 중 일부들의 시퀀스에 대해 연산한다.
예에서, 바이너리 뉴럴 네트워크(101)는 프로그래밍가능 IC(118) 내의 하드웨어에 맵핑된다. 예시적인 프로그래밍가능 IC는 필드 프로그래밍가능 게이트 어레이(FPGA)이다. FPGA의 예시적인 아키텍처는 아래에서 설명된다. 바이너리 뉴럴 네트워크(101)가 프로그래밍가능 IC 내의 하드웨어에 맵핑되는 것으로 설명되지만, 바이너리 뉴럴 네트워크(101)가 임의의 타입의 IC(예컨대, 주문형 집적 회로(ASIC)) 내의 하드웨어에 맵핑될 수 있음을 이해할 것이다.
바이너리 뉴럴 네트워크(101)의 하드웨어 구현은 계층 회로들(120)을 포함한다. 각각의 계층 회로(120)는 입력 연결들(122), 하드웨어 뉴런들(124), 및 출력 연결들(126)을 포함한다. 계층(들)(102)은 계층 회로(들)(120)에 맵핑된다. 시냅스들(106)은 입력 연결들(122)에 맵핑된다. 뉴런들(104)은 하드웨어 뉴런들(124)에 맵핑된다. 활성화들(108)은 출력 연결들(126)에 맵핑된다. 계층 회로(들)(120)는 계층(들)(102)을 설명하는 규격들에 기반하여 컴퓨터 시스템 상에서 실행되는 회로 설계 툴을 사용하여 생성될 수 있다. 회로 설계 툴은 프로그래밍가능 IC(118)에서 계층 회로(들)(120)를 구성하기 위한 구성 데이터를 생성할 수 있다. 대안적으로, 비-프로그래밍가능 IC(예컨대, ASIC)의 경우, 회로 설계 툴은 계층 회로(들)(120)를 갖는 IC를 제조하기 위한 마스크-데이터를 생성할 수 있다.
예컨대 도 3에 도시된 바와 같이, 프로그래밍가능 IC(118)는, 메모리 회로(들)(128) 및 제어 회로(130)를 포함하여, 계층 회로(들)(120)의 동작을 용이하게 하기 위한 회로들을 포함한다. 메모리 회로(들)(128)는, 계층 회로(들)(120)에 대한 바이너리 입력들, 바이너리 가중치들, 임계치 값들, 및 바이너리 출력들을 저장할 수 있다. 메모리 회로(들)(128)는 레지스터들, FIFO(first-in-first-out) 회로들 등을 포함할 수 있다. 제어 회로(130)는 메모리 회로(들)(128)로의 기입 및 메모리 회로(들)(128)로부터의 판독을 제어할 수 있다. 다른 예들에서, 바이너리 입력들은 외부 회로들로부터 직접 발신(come)될 수 있고, 출력들은 외부 회로들에 직접 송신될 수 있다. 가중치들 및 임계치들은, 도 5에 도시된 바와 같이 계층들을 특수화시킬 경우 로직의 일부로서 하드-코딩될 수 있다. 메모리 회로(들)(128)는 온-칩 또는 오프-칩일 수 있다.
도 2는 일 예에 따른 뉴럴 네트워크 회로의 계층 회로(120A)를 도시한 블록 다이어그램이다. 계층 회로(120A)는 완전히 연결된 계층의 일 예이며, 도 1에 도시된 계층 회로들(120) 중 임의의 계층 회로로서 사용될 수 있다. 계층 회로(120A)는 하드웨어 뉴런들(202-1 내지 202-Y)(일반적으로, 하드웨어 뉴런(202) 또는 하드웨어 뉴런들(202)로 지칭됨)을 포함하며, 여기서 Y는 양의 정수이다. 하드웨어 뉴런들(202) 각각의 데이터 입력들(예컨대, 시냅스들)은 바이너리 입력들을 공급하는 로직 신호들을 수신한다. 바이너리 입력들은 이전의 계층으로부터의 바이너리 입력들(110)의 세트 또는 활성화들의 세트일 수 있다. 예에서, 각각의 하드웨어 뉴런(202)은 X개의 로직 신호들을 수신하기 위한 X개의 데이터 입력들(예컨대, X개의 시냅스들)을 포함하며, 여기서, X는 양의 정수이다. X개의 로직 신호들 각각은 단일 바이너리 입력을 제공한다.
하드웨어 뉴런들(202) 각각은 바이너리 가중치들을 공급하는 로직 신호들을 수신하는 가중치 입력들을 포함한다. 각각의 뉴런(202)은 동일한 또는 상이한 세트의 바이너리 가중치들을 수신할 수 있다. 각각의 하드웨어 뉴런(202)은 X개의 데이터 입력들에 대응하는 X개의 바이너리 가중치들을 수신한다. 각각의 하드웨어 뉴런(202)은 또한, 다른 하드웨어 뉴런들(202)로부터의 것과 동일하거나 상이할 수 있는 임계치 값을 수신한다. 하드웨어 뉴런들(202) 각각은 로직 신호를 출력(예컨대, 1비트 출력)으로서 생성한다. 하드웨어 뉴런들(202-1 내지 202-Y)은 Y개의 바이너리 출력들(예컨대, Y개의 활성화들)을 제공하는 Y개의 로직 신호들을 집합적으로 출력한다.
도 3은 일 예에 따른 하드웨어 뉴런(202)을 도시한 블록 다이어그램이다. 하드웨어 뉴런(202)은 배타적 NOR(XNOR) 회로(302), 카운트 회로(304), 및 비교 회로(306)를 포함한다. XNOR 회로(302)는, 바이너리 입력들을 공급하는 X개의 로직 신호들 및 바이너리 가중치들을 공급하는 X개의 로직 신호들을 수신한다. XNOR 회로(302)는, 바이너리 입력들과 바이너리 가중치들의 각각의 XNOR 결과들을 공급하는 X개의 로직 신호들을 출력한다. 카운트 회로(304)는, 미리 정의된 로직 상태를 갖는, XNOR 회로(302)에 의해 출력된 X개의 로직 신호들의 수(예컨대, XNOR 회로(302)에 의해 출력된 로직 "1들"의 수)를 카운팅하도록 구성된다. 카운트 회로(304)는 카운트 값을 공급하는 카운트 신호를 출력한다. 카운트 신호의 비트들의 수는 log2(X) + 1이다. 예컨대, X가 256이면, 카운트 신호는 9개의 비트들을 포함한다. 비교 회로(306)는 카운트 신호, 및 임계치 값을 공급하는 임계치 신호를 수신한다. 임계치 신호는 카운트 신호와 동일한 폭(예컨대, log2(X)+1)을 갖는다. 비교 회로(306)는 1비트 출력 값을 공급하는 로직 신호를 출력한다. 비교 회로(306)는, 카운트 값이 임계치 값보다 큰 경우 출력 로직 신호를 어써팅(예컨대, 출력 로직 신호를 로직 "1"로 셋팅)하고, 그렇지 않으면 출력 로직 신호를 디-어써팅(예컨대, 출력 로직 신호를 로직 "0"으로 셋팅)한다.
계층의 각각의 하드웨어 뉴런은 계층의 타입에 관계없이 동일하게 연산한다. 도 3에 도시된 바와 같이, 각각의 하드웨어 뉴런은 XNOR 회로(302)를 사용하여 바이너리 입력들과 바이너리 가중치들 사이의 XNOR을 계산한다. 카운트 회로(304)는 XNOR 연산의 결과들에서, 미리 정의된 로직 상태들의 수(예컨대, 로직 "1들"의 수)를 카운팅한다. 비교 회로(306)는 카운트 값을 임계치 값과 비교하고, 그에 따라 그의 출력을 어써팅 또는 디-어써팅한다.
도 4는 일 예에 따른 뉴럴 네트워크 회로의 계층 회로(120B)를 도시한 블록 다이어그램이다. 계층 회로(120B)는 부분적으로 연결된 계층 또는 콘볼루셔널 계층의 일 예이며, 도 1에 도시된 계층들(120) 중 임의의 계층으로서 사용될 수 있다. 도 4의 예는, 하드웨어 뉴런들(202) 각각이 바이너리 입력들의 개별 세트를 수신한다(즉, 바이너리 입력들은 하드웨어 뉴런들(202) 모두에게 브로드캐스팅되지 않는다)는 점에서 도 3의 예와 상이하다. 바이너리 입력들의 각각의 세트는 이전의 계층으로부터의 바이너리 입력들(110)의 세트의 일부 또는 활성화들의 세트의 일부일 수 있다. 각각의 하드웨어 뉴런(202)에 대한 임계치 값 입력은 명확화를 위해 도 4로부터 생략된다. 도 4에 도시된 하드웨어 뉴런들(202)은 도 3에 도시된 것과 동일한 구조를 갖는다.
예컨대, 계층 회로(120B)는 콘볼루셔널 계층으로서 사용될 수 있다. 그러한 예에서, 입력 데이터 세트(예컨대, 이미지)는, 높이 H 및 폭 W를 각각 갖는 N개의 입력 피처 맵들의 세트로 분할될 수 있다. 대응하는 바이너리 가중치들은, K*K개의 바이너리 가중치 값들을 각각 갖는 N*M개의 세트들로 분할될 수 있다. 그러한 예에서, 값 X는 K*K로 셋팅될 수 있고, 값 Y는 M*W*H로 셋팅될 수 있다. 바이너리 입력 세트들의 시퀀스는 콘볼루션들의 시퀀스를 구현하기 위해 하드웨어 뉴런들(202) 각각에 제공된다. 시퀀싱은 메모리 회로(들)(128)의 제어를 통하여 제어 회로(130)에 의해 제어될 수 있다.
도 5는 일 예에 따른 하드웨어 뉴런의 특수화를 도시한 블록 다이어그램이다. 일 예에서, XNOR 회로(302)는 X개의 데이터 입력들 각각에 대한 XNOR 게이트를 포함한다. i번째 XNOR 게이트는 결과[i]=입력[i] XNOR 가중치[i]를 출력한다. 다른 예에서, XNOR 회로(302)는 가중치들을 강화시킴으로써 특수화될 수 있다. 가변 가중치들을 갖기보다는, 가중치들은 고정될 수 있으며, XNOR 게이트들은 각각의 가중치 값의 고정된 상태에 의존하여 아이덴티티 게이트(identity gate)(예컨대, 패스 스루 게이트(pass through gate)) 또는 NOT 게이트(예컨대, 인버터) 중 어느 하나로 감소될 수 있다. 도 5에 도시된 바와 같이, XNOR 회로(302)는 데이터 입력 값을 공급하는 로직 신호를 각각 수신하는 회로들(502-1 내지 502-X)을 포함할 수 있다. 각각의 회로(502)는 각각의 가중치 값에 의존하여 아이덴티티 게이트 또는 NOT 게이트 중 어느 하나이다. 예컨대, i번째 가중치가 로직 "1"이면, i번째 회로(502-i)는 NOT 게이트이다(예컨대, 가중치[i]=로직 "1"을 이용하여 XNOR 기능을 구현하기 위해, 데이터 입력[i]이 로직 "1"인 경우, 결과[i]는 로직 "0"이고, 그 반대의 경우도 마찬가지이다). i번째 가중치가 로직 "0"이면, i번째 회로(502-i)는 아이덴티티 게이트이다(예컨대, 가중치[i]=로직 "0"을 이용하여 XNOR 기능을 구현하기 위해, 데이터 입력[i]이 로직 "1"인 경우, 결과[i]는 로직 "1"이고, 그 반대의 경우도 마찬가지이다). 하드웨어 뉴런의 그러한 특수화는, 가중치 값들이 선험적으로 알려진 경우 구현될 수 있다.
예들에서, 바이너리 뉴럴 네트워크(101)는 폴딩 없이(예컨대, "언폴딩됨") 계층 회로(들)(120)를 사용하여 구현된다. 폴딩된 경우, 바이너리 뉴럴 네트워크(101)의 각각의 계층(102)은 프로그래밍가능 IC(118)의 대응하는 계층 회로(120)를 사용하여 구현된다. 다른 예들에서, 바이너리 뉴럴 네트워크(101)는 몇몇 타입의 폴딩을 사용하여 구현된다.
도 6은 매크로-레벨 상에서 바이너리 뉴럴 네트워크(101)의 계층들(102)을 폴딩하는 ("매크로-레벨 폴딩"으로 지칭됨) 일 예를 도시한 블록 다이어그램이다. 도시된 예에서, 프로그래밍가능 IC(118)는 단일 계층 회로(120)를 포함하고, 바이너리 뉴럴 네트워크(101)는 n개의 계층들(102-1 내지 102-n)을 포함하며, 여기서, n은 1보다 큰 정수이다. 계층들(102-1 내지 102-n)은 계층 회로(120) 상으로 시간-멀티플렉싱된다. 즉, 계층 회로(120)는, 계층(102-n)을 구현할 때까지 계층(102-1), 이어서 계층(102-2) 등을 구현하도록 구성된다. 계층 회로(120)에 의해 생성된 결과들은 계층(102)의 다음 구현에 대한 입력으로서 사용되도록 저장된다. 다른 예들에서, 프로그래밍가능 IC(118)는 1개 초과의 계층 회로(120)를 포함할 수 있고, 계층들(102)은 다수의 계층 회로들(120)에 걸쳐 폴딩된다.
도 7은 일 예에 따른, 매크로-레벨 폴딩 방법(700)을 도시한 흐름도이다. 방법(700)은 도 1에 도시된 바와 같이 프로그래밍가능 IC(118)를 사용하여 구현될 수 있다. 방법(700)은 단계(702)에서 시작하며, 여기서, 제어 회로(130)는 계층 회로(들)(120)에 의한 사용을 위해, 바이너리 뉴럴 네트워크(101)의 제1 계층에 대응하는 바이너리 가중치들의 제1 세트 및 임계치 값들의 제1 세트를 메모리 회로(들)(128)로 로딩한다. 단계(704)에서, 계층 회로(들)(120)는 그에 대한 바이너리 입력들을 프로세싱한다. 단계(706)에서, 제어 회로(130)는 계층 회로(들)(120)의 출력들을 메모리 회로(들)(128)에 저장한다. 단계(708)에서, 제어 회로(130)는 계층 회로(들)(120)에 의한 사용을 위해, 바이너리 뉴럴 네트워크(101)의 다음의 계층에 대응하는 바이너리 가중치들의 다음의 세트 및 임계치 값들의 다음의 세트를 메모리 회로(들)(120)로 로딩한다. 단계(710)에서, 계층 회로(들)(120)는 이전의 계층에 대하여 계층 회로(들)(120)에 의해 생성된 바이너리 출력들을 프로세싱한다. 단계(712)에서, 제어 회로(130)는 구현될 바이너리 뉴럴 네트워크(101)의 더 많은 계층들(102)이 존재하는지 여부를 결정한다. 존재한다면, 방법(700)은 단계(706)로 리턴되고 반복된다. 그렇지 않으면, 방법(700)은 단계(714)로 진행하며, 여기서, 계층 회로(들)(120)의 바이너리 출력들은 최종 출력들로서 제공된다.
도 8은 마이크로-레벨 상에서 바이너리 뉴럴 네트워크(101)의 뉴런들(104)을 폴딩하는 ("마이크로-레벨 폴딩"으로 지칭됨) 일 예를 도시한 블록 다이어그램이다. 도시된 예에서, 바이너리 입력들, 바이너리 가중치들, 및 임계치 값들의 다수의 세트들이 입력(예컨대, 입력들의 n개의 세트들)으로서 하드웨어 뉴런(124)에 제공된다. 즉, n개의 뉴런들(104)은 하드웨어 뉴런(124) 상으로 폴딩된다. n개의 뉴런들 각각은 바이너리 입력들, 바이너리 가중치들, 및 임계치 값들의 주어진 세트에 의해 표현된다. 하드웨어 뉴런(124)은 입력들의 각각의 세트에 대한 바이너리 출력 세트(예컨대, n개의 입력 세트들에 대한 n개의 바이너리 출력 세트들)를 생성한다.
도 9는, 멀티-기가비트 트랜시버("MGT")들(1), 구성가능한 로직 블록("CLB")들(2), 랜덤 액세스 메모리 블록("BRAM")들(3), 입력/출력 블록("IOB")들(4), 구성 및 클록킹 로직("CONFIG/CLOCKS")(5), 디지털 신호 프로세싱 블록("DSP")들(6), 특수화된 입력/출력 블록들("I/O")(7)(예컨대, 구성 포트들 및 클록 포트들), 및 다른 프로그래밍가능 로직(8), 이를테면 디지털 클록 관리자들, 아날로그-투-디지털 변환기들, 시스템 모니터링 로직 등을 포함하는 많은 수의 상이한 프로그래밍가능 타일들을 포함하는 FPGA(900)의 아키텍처를 예시한다. 몇몇 FPGA들은 또한, 전용 프로세서 블록들("PROC")(10)을 포함한다. FPGA(900)는 도 1에 도시된 프로그래밍가능 IC(118)로서 사용될 수 있다. 그러한 경우, 계층 회로(들)(120)는 FPGA(900)의 프로그래밍가능 패브릭을 사용하여 구현된다.
몇몇 FPGA들에서, 각각의 프로그래밍가능 타일은 도 11의 최상부에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그래밍가능 로직 엘리먼트의 입력 및 출력 단자들(20)에 대한 연결들을 갖는 적어도 하나의 프로그래밍가능 상호연결 엘리먼트("INT")(11)를 포함할 수 있다. 각각의 프로그래밍가능 상호연결 엘리먼트(11)는 또한, 동일한 타일 또는 다른 타일(들)에서 인접한 프로그래밍가능 상호연결 엘리먼트(들)의 세그먼트들(22)을 상호연결시키기 위한 연결들을 포함할 수 있다. 각각의 프로그래밍가능 상호연결 엘리먼트(11)는 또한, 로직 블록들(도시되지 않음) 사이에서 일반적인 라우팅 리소스들의 세그먼트들(24)을 상호연결시키기 위한 연결들을 포함할 수 있다. 일반적인 라우팅 리소스들은, 상호연결 세그먼트들(예컨대, 상호연결 세그먼트들(24))의 트랙들을 포함하는 로직 블록들(도시되지 않음)과 상호연결 세그먼트들을 연결시키기 위한 스위치 블록들(도시되지 않음) 사이의 라우팅 채널들을 포함할 수 있다. 일반적인 라우팅 리소스들의 상호연결 세그먼트들(예컨대, 상호연결 세그먼트들(24))은 하나 이상의 로직 블록들에 걸쳐 있을 수 있다. 일반적인 라우팅 리소스들과 함께 취해진 프로그래밍가능 상호연결 엘리먼트들(11)은 예시된 FPGA에 대한 프로그래밍가능 상호연결 구조("프로그래밍가능 상호연결")를 구현한다.
예시적인 구현에서, CLB(2)는, 사용자 로직 플러스 단일 프로그래밍가능 상호연결 엘리먼트("INT")(11)를 구현하도록 프로그래밍될 수 있는 구성가능한 로직 엘리먼트("CLE")(12)를 포함할 수 있다. BRAM(3)은 하나 이상의 프로그래밍가능 상호연결 엘리먼트들에 부가하여 BRAM 로직 엘리먼트("BRL")(13)를 포함할 수 있다. 통상적으로, 타일에 포함된 상호연결 엘리먼트들의 수는 타일의 높이에 의존한다. 도시된 예에서, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예컨대, 4)이 또한 사용될 수 있다. DSP 타일(6)은 적절한 수의 프로그래밍가능 상호연결 엘리먼트들에 부가하여 DSP 로직 엘리먼트("DSPL")(14)를 포함할 수 있다. IOB(4)는, 예컨대, 프로그래밍가능 상호연결 엘리먼트(11)의 하나의 인스턴스에 부가하여 입력/출력 로직 엘리먼트("IOL")(15)의 2개의 인스턴스들을 포함할 수 있다. 당업자들에게 자명할 바와 같이, 예컨대, I/O 로직 엘리먼트(15)에 연결된 실제 I/O 패드들은 통상적으로, 입력/출력 로직 엘리먼트(15)의 영역으로 한정되지 않는다.
도시된 예에서, (도 11에 도시된) 다이의 중심 근방의 수평 영역은 구성, 클록 및 다른 제어 로직에 대해 사용된다. 이러한 수평 영역 또는 열(column)로부터 연장되는 수직 열들(9)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용된다.
도 9에 예시된 아키텍처를 이용하는 몇몇 FPGA들은 FPGA의 많은 부분을 구성하는 일반적인 열 구조를 방해하는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그래밍가능 블록들 및/또는 전용 로직일 수 있다. 예컨대, 프로세서 블록(10)은 CLB들 및 BRAM들의 수개의 열들에 걸쳐 있다. 프로세서 블록(10)은 단일 마이크로프로세서로부터 마이크로프로세서(들), 메모리 제어기들, 주변기기들 등의 완전한 프로그래밍가능 프로세싱 시스템까지의 범위에 있는 다양한 컴포넌트들을 포함할 수 있다.
도 9가 예시적인 FPGA 아키텍처만을 예시하도록 의도됨을 유의한다. 예컨대, 행 내의 로직 블록들의 수, 행들의 상대적인 폭, 행들의 수 및 순서, 행들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적인 사이즈들, 및 도 9의 최상부에 포함된 상호연결/로직 구현들은 순수하게 예시적이다. 예컨대, 실제 FPGA에서, CLB들이 등장하는 곳마다, 사용자 로직의 효율적인 구현을 용이하게 하기 위해 CLB들의 1개 초과의 인접한 행이 통상적으로 포함되지만, 인접한 CLB 행들의 수는 FPGA의 전체 사이즈에 따라 변한다.
일 예에서, 집적 회로(IC)에 구현되는 뉴럴 네트워크의 회로가 제공된다. 그러한 회로는 하드웨어 뉴런들의 계층을 포함할 수 있으며, 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하고, 하드웨어 뉴런들 각각은, 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로; 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로; 및 카운트 신호를 수신하는 입력 및 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로를 포함하며; 여기서, 하드웨어 뉴런들 각각의 비교 회로에 의해 출력된 로직 신호는 복수의 출력들의 각각의 출력으로서 제공될 수 있다.
몇몇 그러한 회로에서, 하드웨어 뉴런들 각각의 로직 회로에 입력된 제1 로직 신호들은 계층에 대한 복수의 입력들일 수 있다.
몇몇 그러한 회로에서, 계층은 복수의 가중치들을 공급하는 복수의 가중치 신호들을 수신하도록 구성될 수 있고, 하드웨어 뉴런들 각각 내의 로직 회로는 XNOR 회로일 수 있다.
몇몇 그러한 회로에서, 하드웨어 뉴런들 중 적어도 일부 내의 로직 회로는, 복수의 가중치들 각각에 대한 고정된 값에 기반하여 패스 회로(pass circuit) 또는 인버터 중 어느 하나일 수 있다.
몇몇 그러한 회로에서, 뉴럴 네트워크는 복수의 계층들을 포함할 수 있으며, 여기서, 회로는, 시간에 걸쳐 순차적으로 복수의 계층들 각각을 하드웨어 뉴런들의 계층에 맵핑시키도록 구성된 제어 회로를 더 포함한다.
몇몇 그러한 회로는, 시간에 걸쳐 순차적으로 입력 데이터의 복수의 세트들 각각을 계층의 복수의 입력들에 공급하도록 구성된 제어 회로를 더 포함할 수 있다.
몇몇 그러한 회로는, 시간에 걸쳐 순차적으로 가중치들의 복수의 세트들 각각을 계층의 복수의 가중치들로서 공급하도록 구성된 제어 회로를 더 포함할 수 있다.
몇몇 그러한 회로에서, 하드웨어 뉴런들의 계층은 하드웨어 뉴런들의 제1 계층일 수 있으며, 여기서, 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들은 각각 제1 복수의 입력들, 제1 복수의 출력들, 제1 복수의 가중치들, 및 제1 복수의 임계치 값들이고, 회로는 하드웨어 뉴런들의 제2 계층을 더 포함하고, 제2 계층은 제2 복수의 입력들, 제2 복수의 출력들, 제2 복수의 가중치들, 및 제2 복수의 임계치 값들을 포함하고; 제2 계층의 제2 복수의 입력들은 제1 계층의 제1 복수의 출력들일 수 있다.
몇몇 그러한 회로는, 제1 계층의 제1 복수의 출력들과 제2 계층의 제2 복수의 입력들 사이에 배치된 메모리 회로를 더 포함할 수 있다.
다른 예에서, 집적 회로(IC)로 뉴럴 네트워크를 구현하는 방법이 제공될 수 있다. 그러한 방법은, IC에서 하드웨어 뉴런들의 계층을 구현하는 단계 ― 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함함 ―; 복수의 뉴런들 각각에서: 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하고, 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 단계; 제2 로직 신호들을 수신하고, 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 단계; 및 카운트 신호를 수신하고, 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 단계를 포함할 수 있다.
몇몇 그러한 방법에서, 하드웨어 뉴런들 각각에 입력된 제1 로직 신호들은 계층에 대한 복수의 입력들일 수 있다.
몇몇 그러한 방법에서, 계층은 복수의 가중치들을 공급하는 복수의 가중치 신호들을 수신하도록 구성될 수 있고, 하드웨어 뉴런들 각각은 XNOR 회로를 포함한다.
몇몇 그러한 방법에서, 하드웨어 뉴런들 중 적어도 일부는, 복수의 가중치들 각각에 대한 고정된 값에 기반하여 패스 회로 또는 인버터 중 어느 하나를 포함한다.
몇몇 그러한 방법에서, 뉴럴 네트워크는 복수의 계층들을 포함하며, 방법은, 시간에 걸쳐 순차적으로 복수의 계층들 각각을 하드웨어 뉴런들의 계층에 맵핑시키는 단계를 더 포함한다.
몇몇 그러한 방법은, 시간에 걸쳐 순차적으로 입력 데이터의 복수의 세트들 각각을 계층의 복수의 입력들에 공급하는 단계를 더 포함할 수 있다.
몇몇 그러한 방법은, 시간에 걸쳐 순차적으로 가중치들의 복수의 세트들 각각을 계층의 복수의 가중치들로서 공급하는 단계를 더 포함할 수 있다.
몇몇 그러한 방법에서, 하드웨어 뉴런들의 계층은 하드웨어 뉴런들의 제1 계층일 수 있으며, 여기서, 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들은 각각 제1 복수의 입력들, 제1 복수의 출력들, 제1 복수의 가중치들, 및 제1 복수의 임계치 값들이고, 방법은,
하드웨어 뉴런들의 제2 계층을 구현하는 단계를 더 포함하며, 제2 계층은 제2 복수의 입력들, 제2 복수의 출력들, 제2 복수의 가중치들, 및 제2 복수의 임계치 값들을 포함하고; 제2 계층의 제2 복수의 입력들은 제1 계층의 제1 복수의 출력들일 수 있다.
몇몇 그러한 방법은, 제1 계층의 제1 복수의 출력들과 제2 계층의 제2 복수의 입력들 사이에 배치된 메모리 회로를 더 포함할 수 있다.
다른 예에서, 프로그래밍가능 집적 회로(IC)가 제공된다. 그러한 IC는,
하드웨어 뉴런들의 계층을 구현하도록 구성된 프로그래밍가능 패브릭을 포함할 수 있으며, 계층은 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하고, 하드웨어 뉴런들 각각은, 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 복수의 가중치들 중 적어도 일부와 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로; 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로; 및 카운트 신호를 수신하는 입력 및 카운트 신호와 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로를 포함하며; 여기서, 하드웨어 뉴런들 각각의 비교 회로에 의해 출력된 로직 신호는 복수의 출력들의 각각의 출력으로서 제공될 수 있다.
몇몇 그러한 IC에서, 계층은 복수의 가중치들을 공급하는 복수의 가중치 신호들을 수신하도록 구성될 수 있고, 하드웨어 뉴런들 각각 내의 로직 회로는 XNOR 회로일 수 있다.
전술한 것이 특정한 예들에 관한 것이지만, 다른 및 추가적인 예들은 본 개시내용의 기본적인 범위를 벗어나지 않으면서 고안될 수 있으며, 본 개시내용의 범위는 후속하는 청구항들에 의해 결정된다.

Claims (15)

  1. 집적 회로(IC)에 구현되는 바이너리 뉴럴 네트워크의 회로로서,
    상기 바이너리 뉴럴 네트워크의 계층이 맵핑되는 계층 회로를 포함하며,
    상기 계층은 뉴런들, 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하고, 상기 뉴런들은 상기 계층 회로의 하드웨어 뉴런들에 맵핑되고,
    상기 하드웨어 뉴런들 각각은,
    상기 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하는 입력들 및 상기 복수의 가중치들 중 적어도 일부와 상기 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 출력들을 갖는 로직 회로;
    상기 제2 로직 신호들을 수신하는 입력들 및 미리 정의된 로직 상태를 갖는 상기 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 출력을 갖는 카운터 회로; 및
    상기 카운트 신호를 수신하는 입력 및 상기 카운트 신호와 상기 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 출력을 갖는 비교 회로를 포함하며,
    상기 하드웨어 뉴런들 각각의 상기 비교 회로에 의해 출력된 로직 신호는 상기 복수의 출력들의 각각의 출력으로서 제공되는, 바이너리 뉴럴 네트워크의 회로.
  2. 제1항에 있어서,
    상기 하드웨어 뉴런들 각각의 로직 회로에 입력된 제1 로직 신호들은 상기 계층에 대한 복수의 입력들인, 바이너리 뉴럴 네트워크의 회로.
  3. 제1항 또는 제2항에 있어서,
    상기 계층은 상기 복수의 가중치들을 공급하는 복수의 가중치 신호들을 수신하도록 구성되며,
    상기 하드웨어 뉴런들 각각 내의 로직 회로는 XNOR 회로인, 바이너리 뉴럴 네트워크의 회로.
  4. 제1항에 있어서,
    상기 하드웨어 뉴런들 중 적어도 일부 내의 로직 회로는, 상기 복수의 가중치들 각각에 대한 고정된 값에 기반하여 패스 회로(pass circuit) 또는 인버터 중 어느 하나인, 바이너리 뉴럴 네트워크의 회로.
  5. 제1항에 있어서,
    상기 바이너리 뉴럴 네트워크는 복수의 계층들을 포함하며,
    상기 회로는, 시간에 걸쳐 순차적으로 상기 복수의 계층들 각각을 상기 계층 회로에 맵핑시키도록 구성된 제어 회로를 더 포함하는, 바이너리 뉴럴 네트워크의 회로.
  6. 제1항에 있어서,
    시간에 걸쳐 순차적으로 입력 데이터의 복수의 세트들 각각을 상기 계층의 복수의 입력들에 공급하도록 구성된 제어 회로를 더 포함하는, 바이너리 뉴럴 네트워크의 회로.
  7. 제1항에 있어서,
    시간에 걸쳐 순차적으로 가중치들의 복수의 세트들 각각을 상기 계층의 복수의 가중치들로서 공급하도록 구성된 제어 회로를 더 포함하는, 바이너리 뉴럴 네트워크의 회로.
  8. 제1항에 있어서,
    상기 계층은 제1 계층이며,
    상기 뉴런들, 상기 복수의 입력들, 상기 복수의 출력들, 상기 복수의 가중치들, 및 상기 복수의 임계치 값들은 각각 제1 뉴런들, 제1 복수의 입력들, 제1 복수의 출력들, 제1 복수의 가중치들, 및 제1 복수의 임계치 값들이고,
    상기 바이너리 뉴럴 네트워크는 제2 계층을 포함하며,
    상기 제2 계층은 제2 뉴런들, 제2 복수의 입력들, 제2 복수의 출력들, 제2 복수의 가중치들, 및 제2 복수의 임계치 값들을 포함하고, 상기 제2 계층은 상기 계층 회로에 맵핑되고, 상기 제2 뉴런들은 상기 하드웨어 뉴런들에 맵핑되고; 그리고
    상기 제2 계층의 제2 복수의 입력들은 상기 제1 계층의 제1 복수의 출력들인, 바이너리 뉴럴 네트워크의 회로.
  9. 집적 회로(IC)에 바이너리 뉴럴 네트워크를 구현하는 방법으로서,
    상기 IC에서 계층 회로를 구현하는 단계 ― 상기 바이너리 뉴럴 네트워크는 뉴런들, 복수의 입력들, 복수의 출력들, 복수의 가중치들, 및 복수의 임계치 값들을 포함하는 계층을 포함하고, 상기 뉴런들은 상기 계층 회로의 하드웨어 뉴런들에 매핑됨 ―;
    상기 하드웨어 뉴런들 각각에서:
    상기 복수의 입력들 중 적어도 일부로부터 제1 로직 신호들을 수신하고, 상기 복수의 가중치들 중 적어도 일부와 상기 제1 로직 신호들의 배타적 NOR(XNOR)에 대응하는 제2 로직 신호들을 공급하는 단계;
    상기 제2 로직 신호들을 수신하고, 미리 정의된 로직 상태를 갖는 상기 제2 로직 신호들의 수를 표시하는 카운트 신호를 공급하는 단계; 및
    상기 카운트 신호를 수신하고, 상기 카운트 신호와 상기 복수의 임계치 값들 중 일정 임계치 값 사이의 비교를 표시하는 로직 상태를 갖는 로직 신호를 공급하는 단계를 포함하는, 바이너리 뉴럴 네트워크를 구현하는 방법.
  10. 제9항에 있어서,
    상기 하드웨어 뉴런들 각각에 입력된 제1 로직 신호들은 상기 계층에 대한 복수의 입력들인, 바이너리 뉴럴 네트워크를 구현하는 방법.
  11. 제9항에 있어서,
    상기 계층은 상기 복수의 가중치들을 공급하는 복수의 가중치 신호들을 수신하도록 구성되며,
    상기 하드웨어 뉴런들 각각은 XNOR 회로를 포함하는, 바이너리 뉴럴 네트워크를 구현하는 방법.
  12. 제9항에 있어서,
    상기 하드웨어 뉴런들 중 적어도 일부는, 상기 복수의 가중치들 각각에 대한 고정된 값에 기반하여 패스 회로 또는 인버터 중 어느 하나를 포함하는, 바이너리 뉴럴 네트워크를 구현하는 방법.
  13. 제9항에 있어서,
    상기 바이너리 뉴럴 네트워크는 복수의 계층들을 포함하며,
    상기 방법은, 시간에 걸쳐 순차적으로 상기 복수의 계층들 각각을 상기 계층 회로에 맵핑시키는 단계를 더 포함하는, 바이너리 뉴럴 네트워크를 구현하는 방법.
  14. 제9항에 있어서,
    시간에 걸쳐 순차적으로 입력 데이터의 복수의 세트들 각각을 상기 계층의 복수의 입력들에 공급하는 단계; 및
    시간에 걸쳐 순차적으로 가중치들의 복수의 세트들 각각을 상기 계층의 복수의 가중치들로서 공급하는 단계를 더 포함하는, 바이너리 뉴럴 네트워크를 구현하는 방법.
  15. 제9항에 있어서,
    상기 계층 회로는 제1 계층이며,
    상기 뉴런들, 상기 복수의 입력들, 상기 복수의 출력들, 상기 복수의 가중치들, 및 상기 복수의 임계치 값들은 각각 제1 뉴런들, 제1 복수의 입력들, 제1 복수의 출력들, 제1 복수의 가중치들, 및 제1 복수의 임계치 값들이고,
    상기 방법은, 상기 바이너리 뉴럴 네트워크의 제2 계층을 구현하는 단계를 더 포함하며,
    상기 제2 계층은 제2 뉴런들, 제2 복수의 입력들, 제2 복수의 출력들, 제2 복수의 가중치들, 및 제2 복수의 임계치 값들을 포함하고, 상기 제2 뉴런들은 상기 하드웨어 뉴런들에 맵핑되고; 그리고
    상기 제2 계층의 제2 복수의 입력들은 상기 제1 계층의 제1 복수의 출력들인, 바이너리 뉴럴 네트워크를 구현하는 방법.
KR1020197006427A 2016-08-05 2017-07-24 프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들 KR102544623B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/230,164 US10089577B2 (en) 2016-08-05 2016-08-05 Binary neural networks on progammable integrated circuits
US15/230,164 2016-08-05
PCT/US2017/043515 WO2018026560A1 (en) 2016-08-05 2017-07-24 Binary neural networks on progammable integrated circuits

Publications (2)

Publication Number Publication Date
KR20190035856A KR20190035856A (ko) 2019-04-03
KR102544623B1 true KR102544623B1 (ko) 2023-06-15

Family

ID=59523269

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197006427A KR102544623B1 (ko) 2016-08-05 2017-07-24 프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들

Country Status (6)

Country Link
US (1) US10089577B2 (ko)
EP (1) EP3494521B1 (ko)
JP (1) JP7012073B2 (ko)
KR (1) KR102544623B1 (ko)
CN (1) CN109804385A (ko)
WO (1) WO2018026560A1 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6708044B2 (ja) * 2016-07-28 2020-06-10 富士通株式会社 画像認識装置、画像認識プログラム、画像認識方法および認識装置
US10762420B2 (en) * 2017-08-03 2020-09-01 Xcelsis Corporation Self repairing neural network
US10839286B2 (en) * 2017-09-14 2020-11-17 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
CN110245749B (zh) * 2018-03-08 2024-06-14 三星电子株式会社 用于执行同或运算的计算单元、神经网络及方法
US10461751B2 (en) * 2018-03-08 2019-10-29 Samsung Electronics Co., Ltd. FE-FET-based XNOR cell usable in neuromorphic computing
US11461631B2 (en) 2018-03-22 2022-10-04 Amazon Technologies, Inc. Scheduling neural network computations based on memory capacity
JP7108702B2 (ja) 2018-03-22 2022-07-28 アマゾン テクノロジーズ インコーポレイテッド 複数の入力データセットのための処理
US11475306B2 (en) 2018-03-22 2022-10-18 Amazon Technologies, Inc. Processing for multiple input data sets
US11615300B1 (en) 2018-06-13 2023-03-28 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
EP3591584B1 (en) 2018-07-03 2024-02-07 Robert Bosch GmbH Probabilistic training for binary neural networks
US10643705B2 (en) 2018-07-24 2020-05-05 Sandisk Technologies Llc Configurable precision neural network with differential binary non-volatile memory cell structure
US11328204B2 (en) 2018-07-24 2022-05-10 Sandisk Technologies Llc Realization of binary neural networks in NAND memory arrays
US10643119B2 (en) 2018-07-24 2020-05-05 Sandisk Technologies Llc Differential non-volatile memory cell for artificial neural network
US11170290B2 (en) 2019-03-28 2021-11-09 Sandisk Technologies Llc Realization of neural networks with ternary inputs and binary weights in NAND memory arrays
US11151769B2 (en) * 2018-08-10 2021-10-19 Intel Corporation Graphics architecture including a neural network pipeline
CN109325582B (zh) * 2018-09-07 2020-10-30 中国科学院计算技术研究所 面向二值神经网络的计算装置及方法
CN109308517B (zh) * 2018-09-07 2021-08-24 中国科学院计算技术研究所 面向二值神经网络的二值化装置、方法及应用
US20200117978A1 (en) * 2018-10-12 2020-04-16 Alibaba Group Holding Limited Systems and methods for efficiently mapping neural networks to programmable logic devices
KR20200053886A (ko) 2018-11-09 2020-05-19 삼성전자주식회사 뉴럴 프로세싱 유닛, 뉴럴 프로세싱 시스템, 및 어플리케이션 시스템
US20220004857A1 (en) * 2018-11-15 2022-01-06 Leapmind Inc. Neural network processing apparatus, neural network processing method, and neural network processing program
US11354888B2 (en) 2018-11-16 2022-06-07 GM Global Technology Operations LLC Method and apparatus for a neural network
US10657617B1 (en) 2018-11-26 2020-05-19 GM Global Technology Operations LLC Method and apparatus for memory access management for data processing
US20200175351A1 (en) * 2018-11-30 2020-06-04 Robert Bosch Gmbh Bit interpretation for convolutional neural network input layer
EP3674982A1 (en) * 2018-12-27 2020-07-01 IMEC vzw Hardware accelerator architecture for convolutional neural network
US11531869B1 (en) 2019-03-28 2022-12-20 Xilinx, Inc. Neural-network pooling
CN110070178B (zh) * 2019-04-25 2021-05-14 北京交通大学 一种卷积神经网络计算装置及方法
US10964362B2 (en) 2019-04-25 2021-03-30 Marvell Asia Pte, Ltd. Three-port memory cell and array for in-memory computing
US10789402B1 (en) 2019-05-01 2020-09-29 Xilinx, Inc. Compiler and hardware abstraction layer architecture for a neural network accelerator
US11704535B1 (en) 2019-05-17 2023-07-18 Xilinx, Inc. Hardware architecture for a neural network accelerator
KR102345409B1 (ko) * 2019-08-29 2021-12-30 주식회사 하이퍼커넥트 컨볼루션 뉴럴 네트워크에서 컨볼루션 연산을 가속하는 프로세서 및 프로세서의 동작 방법
US10872295B1 (en) 2019-09-19 2020-12-22 Hong Kong Applied Science and Technology Institute Company, Limited Residual quantization of bit-shift weights in an artificial neural network
US11568200B2 (en) 2019-10-15 2023-01-31 Sandisk Technologies Llc Accelerating sparse matrix multiplication in storage class memory-based convolutional neural network inference
US11625586B2 (en) 2019-10-15 2023-04-11 Sandisk Technologies Llc Realization of neural networks with ternary inputs and ternary weights in NAND memory arrays
KR20220078655A (ko) 2019-10-18 2022-06-10 후아웨이 테크놀러지 컴퍼니 리미티드 오류 정정 코드를 이용한 이진 뉴런 및 이진 신경망의 설계 및 트레이닝
US11657259B2 (en) 2019-12-20 2023-05-23 Sandisk Technologies Llc Kernel transformation techniques to reduce power consumption of binary input, binary weight in-memory convolutional neural network inference engine
US11397885B2 (en) 2020-04-29 2022-07-26 Sandisk Technologies Llc Vertical mapping and computing for deep neural networks in non-volatile memory
US11544547B2 (en) 2020-06-22 2023-01-03 Western Digital Technologies, Inc. Accelerating binary neural networks within latch structure of non-volatile memory devices
US11568228B2 (en) 2020-06-23 2023-01-31 Sandisk Technologies Llc Recurrent neural network inference engine with gated recurrent unit cell and non-volatile memory arrays
US11663471B2 (en) 2020-06-26 2023-05-30 Sandisk Technologies Llc Compute-in-memory deep neural network inference engine using low-rank approximation technique
CN112263262B (zh) * 2020-10-26 2022-05-06 生物岛实验室 健康监测设备
KR20220116757A (ko) 2021-02-15 2022-08-23 삼성전자주식회사 Mtj 소자를 기반으로 한 프로세싱 장치 및 그 장치를 포함하는 전자 시스템

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161203A (en) * 1981-08-06 1992-11-03 Buckley B Shawn Self-organizing circuits
JP2679731B2 (ja) * 1988-08-31 1997-11-19 富士通株式会社 パイプライン処理を用いたニューラルアーキテクチュア
JP2679730B2 (ja) * 1988-08-31 1997-11-19 富士通株式会社 階層構造ニューラルネット
JPH02264354A (ja) * 1989-04-05 1990-10-29 Takayama:Kk データ処理装置
US5553196A (en) * 1989-04-05 1996-09-03 Yozan, Inc. Method for processing data using a neural network having a number of layers equal to an abstraction degree of the pattern to be processed
US5073867A (en) * 1989-06-12 1991-12-17 Westinghouse Electric Corp. Digital neural network processing elements
JP3549569B2 (ja) * 1993-04-27 2004-08-04 ソニー エレクトロニクス インコーポレイテッド 映像内の目標パターン探知方法
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
DE69815390T2 (de) 1997-12-19 2004-05-13 Bae Systems Plc, Farnborough Neuronale netzwerke
JP3703390B2 (ja) 2000-12-01 2005-10-05 Necマイクロシステム株式会社 論理検証装置
JP4750313B2 (ja) 2001-05-31 2011-08-17 キヤノン株式会社 信号処理回路
WO2008067676A1 (en) 2006-12-08 2008-06-12 Medhat Moussa Architecture, system and method for artificial neural network implementation
US9092736B2 (en) * 2010-07-07 2015-07-28 Qualcomm Incorporated Communication and synapse training method and hardware for biologically inspired networks

Also Published As

Publication number Publication date
US20180039886A1 (en) 2018-02-08
WO2018026560A1 (en) 2018-02-08
CN109804385A (zh) 2019-05-24
EP3494521B1 (en) 2024-05-01
US10089577B2 (en) 2018-10-02
JP7012073B2 (ja) 2022-01-27
EP3494521A1 (en) 2019-06-12
JP2019531535A (ja) 2019-10-31
KR20190035856A (ko) 2019-04-03

Similar Documents

Publication Publication Date Title
KR102544623B1 (ko) 프로그래밍가능 집적 회로들 상의 바이너리 뉴럴 네트워크들
US7428721B2 (en) Operational cycle assignment in a configurable IC
JP6773568B2 (ja) 演算システムおよびニューラルネットワークの演算方法
US9041430B2 (en) Operational time extension
US20070245272A1 (en) Concurrent optimization of physical design and operational cycle assignment
JP3798451B2 (ja) 事前装填回路
CN111133456A (zh) 在集成电路中实现神经网络的系统和方法
JP4150748B2 (ja) プログラマブル・ゲート・アレイの操作方法
US10224934B1 (en) Method and apparatus for implementing configurable streaming networks
US9117022B1 (en) Hierarchical arbitration
Wang et al. Error-adaptive classifier boosting (EACB): Exploiting data-driven training for highly fault-tolerant hardware
Glette et al. Lookup table partial reconfiguration for an evolvable hardware classifier system
US20230237014A1 (en) 3D Convolutional Neural Network (CNN) Implementation on Systolic Array-Based FPGA Overlay CNN Accelerator
CN106024056B (zh) 基于复用器的三态内容寻址存储器
US7681160B1 (en) Weight based look up table collapsing for programmable logic devices
US20240192918A1 (en) Sorting
Yao et al. Efficient design methodology for adaptive system based on direct bitstream evolution
Lawal et al. Architecture driven memory allocation for fpga based real-time video processing systems
Megumi et al. Circuit Optimization of Ternary Sparse Neural Net
Gies et al. Increasing interconnection network connectivity for reducing operator complexity in asynchronous vision systems
US9235671B1 (en) Combining logic elements into pairs in a circuit design system
Dhanasekaran et al. Fault tolerant dynamic antenna array in smart antenna system using evolved virtual reconfigurable circuit
Reddy et al. Noval approach image processing algorithms on hardware implementation for surveillance systems
Di Federico et al. PWL cores for nonlinear array processing
Hikawa Vector Quantization System Based on Scalar SOM/AND-OR Hybrid Network

Legal Events

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