深度学习笔记

概念

x1=i=1Nxi||x||_1 = \sum_{i=1}^N|x_i|

即向量元素绝对值之和,matlab调用函数 norm(x, 1)

C\nabla C 念 nabla C
η\eta 念 eta
参考教程:http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B

反向传播算法

  1. 输入x, 要计算激活值 ala^l
  2. 正向传播,对每个 l = 2, 3, ..., L, 计算 zl=wlal1+blz^l = w^la^{l - 1} + b^lal=σ(zl)a^l = \sigma({z^l})
  3. 计算输出误差,δL=aCσ(zL)\delta^L = \nabla_aC \odot \sigma^\prime({z^L})
  4. 将误差反向传播,对每个 l = L - 1, L - 2, ..., 2,计算 δl=((wl+1)Tδl+1)σ(zl)\delta^l = ((w^{l + 1})^T\delta^{l + 1}) \odot \sigma^\prime({z^l})
  5. 输出2个值,都是梯度:Cwjkl=akl1δjl\frac{\partial C}{\partial w^l_{jk}} = a^{l-1}_k \delta^l_j , Cbil=δjl\frac{\partial C}{\partial b_i^l} = \delta_j^l

CNN

LeNet

AlexNet

VGG

RNN

比如hello这个单词,预测e后面是l,则除了输入e外,h到e的隐藏层输出也作为它的输入

LSTM

由于rnn的层数太多,会导致反向传播时权重传回去趋近于0或无穷大,出现梯度消失和梯度爆炸的情况。

上面的现象可能并不意味着无法学习,但是即便可以,也会非常非常的慢。为了有效的利用梯度下降法学习,我们希望使不断相乘的梯度的积(the product of derivatives)保持在接近1的数值。

一种实现方式是建立线性自连接单元(linear self-connections)和在自连接部分数值接近1的权重,叫做leaky units。但Leaky units的线性自连接权重是手动设置或设为参数,而目前最有效的方式gated RNNs是通过gates的调控,允许线性自连接的权重在每一步都可以自我变化调节。LSTM就是gated RNNs中的一个实现。