인프런 커뮤니티 질문&답변
FC layer weight 관련 질문
해결된 질문
작성
·
355
2
안녕하세요,
이번 강의에서는 fully connected core에게 weight와 input 값을 정수 값만 주고 있습니다.
하지만 실제로 DNN의 weight값들은 보통 되게 작은 소수점을 가지는 값이 도출 된다고 알고 있습니다.
또한 실제로는 fully connected layer core에서 나온 output을 activation function (ex. sigmoid 함수)에 통과시켜야합니다.
궁금한 점은 아래와 같습니다.
1) 실제로는 소수점을 가지는 숫자를 fully connected core에 넣어줘야하는데 그때는 어떤 방식을 더 거쳐야하는지, 혹은 알려진 방법 중의 하나인 fixed point를 사용하는지,
2)현업에서 소수점을 다룰 때 단순히 fixed point로의 변환을 거쳐 이번 강의에서 만든 fully connected core와 같은 AI core를 통과시키는지, 아니면 다른 더 좋은 방법이 있는지,
3) activation function (시그모이드 함수)도 core로 구현하여 이번 강의에서 소개해주신 FC core 뒤에 붙이는지, 아니면 다른 현명한 방법이 있는지,
궁금합니다.
양질의 수업 항상 감사합니다.
답변 1
1
설계독학맛비
지식공유자
안녕하세요 :)
먼저 알고계신 내용은 맞습니다. (서론에 적어주신 내용)
1) 실제로는 소수점을 가지는 숫자를 fully connected core에 넣어줘야하는데 그때는 어떤 방식을 더 거쳐야하는지, 혹은 알려진 방법 중의 하나인 fixed point를 사용하는지,
먼저 케바케! 이다 말씀을 드리고 시작할께요.
그리고 Float point 연산이 Fixed point 연산보다 복잡하다 (몇배인지는 잘..) 라는 가정하겠습니다.
<Hardwired 구현>
FPGA 는 아시다시피, re programable 이 가능합니다.
즉, weight 값을 fix 시킬 수 있다는 이야기 이죠. 소수점도 정해져 있다는 뜻이구요. 그러면 굳이 Float 을 사용할 이유가 없어집니다. Fixed 로 bit 수에 따라 Quant 하면서 최적의 bit 를 찾아서 연산하는 것이 Float 보다 더 적은 Resource 를 사용하기 때문이죠. (Float 과 Fixed 의 정확도가 큰 차이가 없다면)
ASIC 에서도 Fixed 를 사용했었구요.ASIC 의 특성상 Bit width 는 고정이겠지만, 소수점은 정할 수 있도록 (자유도) 해줄 수 있어요. (shift 의 여부) 이때는 User Weight 업데이트가 가능하도록 설계했었습니다.
결론은 Hardwired (고정된 로직) 에서는 주로!! Fixed Point 를 사용합니다.
<General Type 지원 구현>
대표적으로 어떤것이나 돌릴 수 있는 GPU, NPU 등등이 있을거구요.
이때는 Float32,16. INT8,4 등등 모든 Type 지원이 가능해야겠죠.
어쩔 수 없이? Float 을 주로!! 사용합니다.
2)현업에서 소수점을 다룰 때 단순히 fixed point로의 변환을 거쳐 이번 강의에서 만든 fully connected core와 같은 AI core를 통과시키는지, 아니면 다른 더 좋은 방법이 있는지,
강의에서 다룬 내용은 Fixed point 가 아니죠. 하지만, 소수점만 잘찍어주면 Fixed point 구현이 가능합니다. (비록 다루진 않았지만)
강의에서 만든 Core 는 단순 예입니다. loop 를 어떻게 돌릴 것인가에 따라서 정말로 다양한 Core 를 만들 수 있습니다. 더 좋은 방법은 논문보시고 혹은 현업오셔서 연구하시면 됩니다 :)
3) activation function (시그모이드 함수)도 core로 구현하여 이번 강의에서 소개해주신 FC core 뒤에 붙이는지, 아니면 다른 현명한 방법이 있는지,
activation function 은 시그모이드를 이제는 잘 사용하진 않지만 (추세가), 굳이 사용해야 한다면 구현하겠죠.
activation function 은 당연히 output 내기 전, 즉 layer 안에서 마지막에 붙여야 겠죠.
현업에서는 제가 드린 FC Core 를 그대로 사용하진 않습니다.
현명한 방법..? 은 연구해보세요
답은 진리의 케바케 입니다. (이 문장이면 사실 다 끝났죠..? ㅎ)
즐공하세요 :)





