상세 CNNLDR 3.3
2908 단어 FPGA로그추가DeepLearning
배경
Deep Learning에서는 계산 정밀도를 어느 정도 떨어뜨려도 추론 정밀도에 크게 영향을 주지 않고 동작하는 것으로 알려져 있어 각종 소비트에서의 실험이 이루어지고 있습니다. 특히 "Convolutional Neural Networks using Logarithmic Data Representation"에서는 가중치와 활성화를 5비트 로그로 표현하여 FP32와 크게 다르지 않은 추론 정확도를 달성합니다.
로그를 사용하면 곱셈을 가산으로 대체 할 수있는 이점이 있습니다. 이는 계산 회로에 곱셈기가 필요하지 않음을 의미합니다.
대수 베이스로 생각했을 경우, 곱해 연산으로 생각해야 하는 것은 곱셈보다는 오히려 가산이며, 즉 $\log(a+b)$ 를 어떻게 계산할까,입니다. 로그의 성질로서 지수 법칙보다
$$\log ab =\log a +\log b$$
성립하는 것은 널리 알려져 있지만,
$$\log(a+b)$$
의 효과적인 계산 방법은 잘 알려져 있지 않습니다.
Miyashita 등은 상기 논문 중 3.3. Accumulation in log domain (이하, CNNLDR 3.3)에 있어서 아래 그림과 같은 근사적 계산 방법을 제안하고 있습니다만, 대수의 계산에 상세한 사람이 아니라고 이해는 어렵다고 생각했습니다 . (적어도 나는 고생했습니다 w) 이 문장에서는 그 계산 방법에 대해 자세하게 해설합니다.
해설
전제
첫째,
a+b = a\times (1+\frac{b}{a}) \tag{1}\\
ただし 0 < b \le a
한다. 그러면 $ 1 < n $에 대해
\begin{align}
\log_n(a+b) &=\log_n(a \times (1+\frac{b}{a})) \\
&=\log_n a + \log_n(1+\frac{b}{a}) \\
&=\log_n a + \log_n(1+n^{\log_n b - \log_n a}) \tag{2}\\
\end{align}
바닥이 $2$이고 $0\leq X\leq 1$일 때
\log_2(1+X)\simeq X \tag{3} \\
와 근사할 수 있다. (아래 그래프 참조)
또한 $ (1) $의 조건에서
0 < \frac{b}{a} = n^{\log_n b - \log_n a} \leq 1\\
따라서 $(2)$, $(3)$ 보다
\begin{align}
\log_2 (a+b)
&\simeq \log_2 a + 2^{\log_2 b - \log_2 a} \tag{4}\\
\end{align}
근사식 유도
CNNLDR 3.3의 정의에서
\begin{align}
\tilde{s}_2 &= \log_2(s_2) \\
&= \log_2(w_1x_1 + w_2x_2) \\
&= \log_2(2^{\log_2 w_1 + \log_2 x_1}+2^{\log_2 w_2 + \log_2 x_2}) \tag{5}\\
&= \log_2(2^{{\tilde{w}_1}+{\tilde{x}_1}}+2^{{\tilde{w}_2}+{\tilde{x}_2}}) \\
&= \log_2(2^{\tilde{p}_1} + 2^{\tilde{p}_2}) \\
\end{align}
그리고 $ (4) $에서
\tilde{s}_2 \simeq \tilde{p}_1 + 2^{{\tilde{p}_2}-{\tilde{p}_1}}
와 근사할 수 있다. 이것은 컴퓨터에서
\mathrm{max}({\tilde{p}_1}, {\tilde{p}_2}) + \mathrm{Bitshift}(1, -|{\tilde{p}_2} - {\tilde{p}_1}|)
로 계산할 수 있다. 해설 끝.
바닥이 $\sqrt{2} $이면 $(3)$
\log_\sqrt{2}(1+X) \simeq 2X \tag{3'}
근사식:
\mathrm{Bitshift}\bigl(\mathrm{max}(\tilde{p}_1, \tilde{p}_2) + \mathrm{Bitshift}(1, -|\tilde{p}_2 - \tilde{p}_1|), 1 \bigr)
Reference
이 문제에 관하여(상세 CNNLDR 3.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sin00b/items/1bfcf215ee532803df32
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
전제
첫째,
a+b = a\times (1+\frac{b}{a}) \tag{1}\\
ただし 0 < b \le a
한다. 그러면 $ 1 < n $에 대해
\begin{align}
\log_n(a+b) &=\log_n(a \times (1+\frac{b}{a})) \\
&=\log_n a + \log_n(1+\frac{b}{a}) \\
&=\log_n a + \log_n(1+n^{\log_n b - \log_n a}) \tag{2}\\
\end{align}
바닥이 $2$이고 $0\leq X\leq 1$일 때
\log_2(1+X)\simeq X \tag{3} \\
와 근사할 수 있다. (아래 그래프 참조)
또한 $ (1) $의 조건에서
0 < \frac{b}{a} = n^{\log_n b - \log_n a} \leq 1\\
따라서 $(2)$, $(3)$ 보다
\begin{align}
\log_2 (a+b)
&\simeq \log_2 a + 2^{\log_2 b - \log_2 a} \tag{4}\\
\end{align}
근사식 유도
CNNLDR 3.3의 정의에서
\begin{align}
\tilde{s}_2 &= \log_2(s_2) \\
&= \log_2(w_1x_1 + w_2x_2) \\
&= \log_2(2^{\log_2 w_1 + \log_2 x_1}+2^{\log_2 w_2 + \log_2 x_2}) \tag{5}\\
&= \log_2(2^{{\tilde{w}_1}+{\tilde{x}_1}}+2^{{\tilde{w}_2}+{\tilde{x}_2}}) \\
&= \log_2(2^{\tilde{p}_1} + 2^{\tilde{p}_2}) \\
\end{align}
그리고 $ (4) $에서
\tilde{s}_2 \simeq \tilde{p}_1 + 2^{{\tilde{p}_2}-{\tilde{p}_1}}
와 근사할 수 있다. 이것은 컴퓨터에서
\mathrm{max}({\tilde{p}_1}, {\tilde{p}_2}) + \mathrm{Bitshift}(1, -|{\tilde{p}_2} - {\tilde{p}_1}|)
로 계산할 수 있다. 해설 끝.
바닥이 $\sqrt{2} $이면 $(3)$
\log_\sqrt{2}(1+X) \simeq 2X \tag{3'}
근사식:
\mathrm{Bitshift}\bigl(\mathrm{max}(\tilde{p}_1, \tilde{p}_2) + \mathrm{Bitshift}(1, -|\tilde{p}_2 - \tilde{p}_1|), 1 \bigr)
Reference
이 문제에 관하여(상세 CNNLDR 3.3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sin00b/items/1bfcf215ee532803df32텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)