training are the same with BDNN, then after forward propagation, each real number neuron of training equals to the corresponding binary neuron of BDNN (by using conversion function $C$), including the output neurons. As a result, we can train the BDNN with real numbers. After training, we just need to convert the real number weights into binary values and then a trained BDNN is obtained.

After the forward propagation of training is solved, the next problem is the backpropagation. In order to use gradient descent algorithm, we must define two partial derivatives: the $\dfrac{\partial y'}{\partial x_i'}$ and $\dfrac{\partial y'}{\partial w_i'}$. With such two partial derivatives, the backpropagation can be conducted.

Assume $x_k'$ is a certain neuron from $\bm{\vec x'}$ and $w_k'$ (let $w_k'>0$) is its corresponding weight. Let $l$ take the form $$l = \dfrac{ \sum_{i=1, i\neq k}^{n}\dfrac{x_i' w_i'}{\left|x_i' w_i'\right|} }{ n }.$$ Then, we have $$y' = l+\dfrac{ x_k' w_k' }{ n\left|x_k' w_k'\right| }.$$ It is obvious that $l$ and $w_k'$ are independent. Thus we can draw a curve of $y'$ by $w_k'$, which is shown in Fig. \[curve\] (a). This curve is not continuous. We can see that the $\dfrac{\partial y'}{\partial x_k'}$ is $+\infty$ at $x_k'=0$ and $0$ 