开始分析RNNoise的C代码细节。

RNNoise用到3种**函数,分别是tanh(x)、sigmoid(x)和ReLU(x)。

RNNoise代码分析1——神经网络**函数

RNNoise代码分析1——神经网络**函数

1、tanh用到了查表法,查表法一般使用线性插值方法,此处使用泰勒级数展开。推导过程如下:

tanh(x) = (exp(x) − exp(−x))/(exp(x) + exp(−x))

tanh(x)' = 1-(tanh(x))^2

RNNoise代码分析1——神经网络**函数

泰勒级数取前三项得f(x) = f(x0)+f’(x0)*(x-x0) +1/2*f’’(x0)*(x-x0)^2。

 

设y = f(x0), dy = f’(x0), 

则dy=1-y*y, f’’(x0)=-2y*dy.

f(x) = y + dy*(x-x0) + 1/2*(-2y*dy)*(x-x0)^2

      = y + dy*(x-x0) - y*dy*(x-x0)^2

      = y+ dy*(x-x0)*[1-y*(x-x0)]

2、sigmoid(x)没有调用exp(x),而是调用tanh(x)。推导过程如下:

sigmoid(x)=1/(1+exp(-x))

tanh(x)=(1-exp(-2x))/(1+exp(-2x))

            =2/(1+exp(-2x))-1

            =2*sigmoid(2x)-1

最终得到sigmoid(x)=0.5+0.5*tanh(x/2)。

更多内容,请关注微信公众号“音频算法与工程实践”。

RNNoise代码分析1——神经网络**函数

 

相关文章: