.../비메모리반도체

Verilog HDL을 활용한 뉴런의 설계

JAEHYEOKHO 2024. 8. 21. 20:45

 

뉴런을 설계할 수 있는 방법과 모델은 다양하게 존재하지만, 그 중 integrate-and-fire model을 FPGA를 사용하는 방법

 

이전의 포스팅에서도 말했지만 XOR problem이 있다.

위의 문제를 풀어야 함 (bias 포함)

 

  • 가장 중요한 내용은 학습 알고리즘을 통한 bias와 weights의 조절이며, back
    propagation learning이 일반적으로 사용됨.
  • 기대값과 실제 출력값과의 차이를 통해 weights를 보정하는 방법임.
  • Unsupervised learning 방법에 STDP가 있으며, 이는 입력과 동일한 출력을 얻
    거나 pattern 인식 분야에 효과적임.
  • Learning 알고리즘 구현은 추후에 검토. (실제 응용에서는 학습은 CPU-GPU가
    수행하고, FPGA는 inference로 사용되는 것이 일반적임.)
  • 대신 아래의 동작을 수행하는 뉴런을 설계하고자 함 (XOR의 경우 여러 가지
    해법이 가능함).

 


뉴런 동작 조건

  • Multiplier 기능이 필요.
  • Adder 기능이 필요.
  • Sigmoid 기능이 필요. (Activation function)
  • STDP 등의 구현과 저전력 동작을 위해서는 spiking에 따른 frequency가 정보를 담고 있어야 함.
  • 2 input neuron의 기본적인 형태 (sigmoid 함수 대신 step 함수 사용)

  • 2 input neuron의 기본적인 형태 (sigmoid 함수 대신 step 함수 사용)
  • 입력이 signed 8-bit이며 일정 시간이 지남에 따라 output이 pulse 형태로 출력
    됨을 알 수 있음. Leaky integrate-and-fire의 기본 형태임.

  • Multiplier와 Adder의 성능이 중요하며, 많은 부분을 차지하게 됨. (실제 FPGA에서 구현되는 경우 DSP로 변환되거나 LUT로 변환됨.)


XOR 동작을 위한 뉴런

  • 입력은 1-bit이며, weights와 bias는 signed digit이어야 함.
  • 단순 입력이 출력에 반영되는 combinational logic 형태임.

다른 형태로 뉴런 설계.

  • 입력은 1-bit이며, weights와 bias는 signed digit이어야 함.
  • MUX 형태로 곱셈을 구현하므로, 회로 영역이 작아짐.

XOR 동작을 위한 뉴럴 네트워크

  • 은닉층을 포함하여 3개의 뉴런으로 구성됨.

  • Input stimulus는 아래와 같음.

  • 동작 결과는 아래와 같음.


  • A project dedicated to developing a hardware Integrated Circuit (IC) for a Spike Neural Network (SNN), powered by the RTL code generated by ChatGPT-4 with advanced optimizations.
  • Energy Efficiency, Real-time Processing, Biomimetic Computation.
  • RISC-V and SNNs

참고 링크: https://github.com/edabk-hust/edabk_brain_soc

  • Membrane potential

 

  • Vivado, HLS로 설계 -> IP 제작 -> Vitis (Hardwaresoftware co-simulation)

  • Weights를 저장
    • Weights를 저장하기 위한 용도로 사용되며, 뉴런의 수가 적은 경우에는 차지하
      는 영역이 적지만, 뉴런의 수가 많아지면 급격히 증가하게 됨.
    • 대부분 memory를 사용하여 디지털 시냅스를 구성함.
    • 간단한 사용은 register처럼 사용하는 것임.
      • reg [39:0] mem1 [0:255]; //256 40-bit register
        initial $readmemb(“file1”, mem1);
    • $readmemb(2진수 포맷), $readmemh(16진수 포맷)
    • $readmemb(“파일명”, 메모리명, 시작주소, 마지막주소)
    • Xilinx의 경우에는 다양한 block ram 등을 제공해 줌.
    • 기본적인 사용은 RAMB16BWER (18 Kb)과 RAMB8BWER (9 Kb)의
      primitive cell을 정의해서 사용함.


  • Back propagation
    • 뉴로모픽 시스템의 경우 학습이 중요하지만 계산량이 많아 대부분 외부에서 수행하는 경우가 많음. FPGA에서는 inference만 수행.
    • 현재 가장 많이 사용되는 방식이 back propagation 방식임.

  • 뉴로모픽 시스템에 학습을 구현하기 위해 간단한 형태로 구현하며, OR gate를
    구현하는 것이 목표임.
  • 학습 알고리즘을 위해 실수를 사용 (1bit –sign, 15bit – 정수, 16bit – 소수).
  • Adder, multiplier, sigmoid 함수 사용, error는 RMS로 정의.

 

  • 위 식을 참고하여 간단한 연산만으로 back propagation 알고리즘의 구현이 가능함.

 

참고 링크: https://github.com/yashaelfaith/dnnbp

참고 링크:  https://github.com/ChFrenkel/ODIN online-learning digital spiking neural network (SNN)


  • STDP
    • STDP 알고리즘의 경우 spike의 생성에 입력이 기인한 경우에는 연결을 강화하고, 그렇지 않은 경우에는 연결을 약화시키는 방법임.
    • Unsupervised learning의 대표적인 경우이며, 패턴 인식 등에 효과적임.
    •  

728x90

'... > 비메모리반도체' 카테고리의 다른 글

hls4ml  (0) 2024.08.22
Vivado HLS 사용  (0) 2024.08.22
Verilog HDL(Level of Modeling)  (0) 2024.07.25
Verilog HDL(Instantiation)  (0) 2024.07.25
Verilog HDL(Operators)  (0) 2024.07.25