RNN入门
一,RNN的释义
循环神经网络,顾名思义,表示了一种含有循环神经元的神经网络.RNN之所以被发明,主要原因是因为能够克服传统CNN不能克服的时序问题.但是在某些任务中,时序包含了重要的信息.如下图所示,如果用CNN来处理判断句子语气的任务,会丢失时序信息:
CNN中的全连接结构,并不能很好理解因为句子顺序带来的意思上的变化,而循环神经网络则可以通过时序,理解其意思的不同.
二,其他相关技术
1. one shot code
将不同形式信息编码为用来神经网络输入,该功能要做到不重不漏。如根据hell预测o这个任务,只需要编码能覆盖这四个字母即可:h=[1,0,0,0]Th = [1, 0, 0, 0]^Th=[1,0,0,0]T , e=[0,1,0,0]Te = [0, 1, 0, 0]^Te=[0,1,0,0]T, h=[0,0,1,0]Th = [0, 0, 1, 0]^Th=[0,0,1,0]T, $ o = [0, 0, 0, 1]^T$.
2. 时间步
在RNN中,一个时间步表示的是一次输入的处理过程。
3. 前向传播
前向传播是从输入,到神经元结构,到权重,直到输出,最后获得误差的过程.
4. 后向传播
是从误差,反算回来,获得每个神经元偏导数的过程.
前向传播的一个简单例子如下:
输入为x, 输出为y,假设此时有一个训练样本(x,y) = (1, 10),初始化权重为w = 0;
那么前向传播计算残差f的过程如下:
f=(y−xw)2 f = (y - xw)^2f=(y−xw)2
通过前向传播,马上就能计算出第一次训练的误差为f=(10−1)2=81f= (10 - 1)^2 = 81f=(10−1)2=81
根据反向传播:
k=∂f/∂w=2(y−xw)(−x)k = \partial f/\partial w = 2(y-xw)(-x)k=∂f/∂w=2(y−xw)(−x)
根据梯度下降法:
−(y−xw)2=kΔw-(y-xw)^2 = k\Delta w−(y−xw)2=kΔw
因为此处为一维的例子,因此可以得到Δw\Delta wΔw的更新公式为:
(y−xw)/(2x)=Δw(y-xw)/(2x) = \Delta w(y−xw)/(2x)=Δw
第一次训练得到的Δw=5\Delta w = 5Δw=5, 因此w1=5w^1 = 5w1=5
第二次训练得到的Δw=2.5\Delta w = 2.5Δw=2.5, 因此w2=7.5w^2 = 7.5w2=7.5
第三次训练得到的Δw=1.25\Delta w = 1.25Δw=1.25, 因此w3=8.75w^3 = 8.75w3=8.75
第四次训练得到的Δw=0.625\Delta w = 0.625Δw=0.625, 因此w4=9.375w^4 = 9.375w4=9.375
第五次训练得到的Δw=0.3125\Delta w = 0.3125Δw=0.3125, 因此w5=9.6875w^5 = 9.6875w5=9.6875
第六次训练得到的Δw=0.15625\Delta w = 0.15625Δw=0.15625, 因此w6=9.84375w^6 = 9.84375w6=9.84375
如上,继续训练将得到一个非常接近理想参数的值.
二,RNN实践,二维速度估计
1. 环境构造
以一个正方形(或者曲线形态)的点作为feature,构造一个环境,如下图所示:
上图中,中心线为车辆行驶的路径,而两边的点为landmark。
2. 观测构造
以激光点云的形式,在每一个点位可以观察到环境中的每一个点,在上图中,一共有100个姿态,其中70个作为训练集,30个作为验证集