2019秋招备战-深度学习基础

深度学习基础

激活函数

  • sigmoid

    • σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1
    • 容易出现梯度消失的现象;当激活函数接近饱和区时,变化太缓慢,导数接近0
    • Sigmoid 的 output 不是0均值; f=sigmoid(wx+b)为例, 假设输入均为正数(或负数),那么对w的导数总是正数(或负数),这样在反向传播过程中要么都往正方向更新,要么都往负方向更新
    • 幂运算相对耗时
  • tanh

    • t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x - e^{-x}}{e^{x} + e^{-x}} tanh(x)=ex+exexex
    • tanh函数将输入值压缩到 -1~1 的范围,因此它是0均值的,解决了Sigmoid函数的非zero-centered问题,但是它也存在梯度消失和幂运算的问题
  • relu

    • Relu(x) = max(0,x)
    • 优点:
      • SGD算法的收敛速度比 sigmoid 和 tanh(梯度不会饱和,解决了梯度消失问题)
      • 计算复杂度低,不需要进行指数运算;
    • 缺点:
      • ReLU的输出不是zero-centered
      • Dead ReLU Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)
      • ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张

parameters initialization

  • initialize weights ~Uniform(-r,r), r =
    6 / ( f a n i n + f a n o u t ) \sqrt{6/(fan_{in} + fan_{out})} 6/(fanin+fanout)
    其中 f a n i n fan_{in} fanin是前一层的维度, f a n o u t fan_{out} fanout是后一层的维度

CNN

  • 稀疏链接
  • 参数共享
  • 平移不变性

RNN

  • forward propagation

S t = σ ( W s S t − 1 + W x x t + b 1 ) S_t = \sigma(W_{s}S_{t-1} + W_{x}x_t+b_1) St=σ(WsSt1+Wxxt+b1)
y ^ t = s o f t m a x ( W o s t + b 2 ) \hat y_t = softmax(W_os_t+b_2) y^t=softmax(Wost+b2)

  • loss
    • The loss at time-step t t t
      J t ( θ ) = − ∑ j = 1 ∣ V ∣ y t , j l o g ( y ^ t , j ) J^t(\theta) = -\sum_{j=1}^{|V|}y_{t,j}log(\hat y_{t,j}) Jt(θ)=j=1Vyt,jlog(y^t,j)
    • total loss
      J = − 1 T ∑ t = 1 T J ( t ) ( θ ) = − 1 T ∑ t = 1 T ∑ j = 1 ∣ V ∣ y t , j l o g ( y ^ t , j ) J = -\frac {1}{T}\sum_{t=1}^TJ^{(t)}(\theta) = -\frac {1}{T}\sum_{t=1}^T\sum_{j=1}^{|V|}y_{t,j}log(\hat y_{t,j}) J=T1t=1TJ(t)(θ)=T1t=1Tj=1Vyt,jlog(y^t,j)
  • RNN梯度消失的原因
    假设时间序列只有三段, S 0 S_0 S0为给定值,神经元没有激活函数,RNN的前向传播过程如下:
    S 1 = W x X 1 + W s S 0 + b 1 S_1 = W_xX_1 + W_sS_0 + b_1 S1=WxX1+WsS0+b1
    y 1 ^ = W o S 1 + b 2 \hat{y_1} = W_oS_1 + b_2 y1^=WoS1+b2
    S 2 = W x X 2 + W s S 1 + b 1 S_2 = W_xX_2 + W_sS1 + b1 S2=WxX2+WsS1+b1
    y 2 ^ = W o S 2 + b 2 \hat{y_2} = W_oS_2 + b_2 y2^=WoS2+b2
    S 3 = W x X 3 + W s S 2 + b 1 S_3 = W_xX_3 + W_sS2 + b_1 S3=WxX3+WsS2+b1
    y 3 ^ = W o S 3 + b 2 \hat{y_3} = W_oS_3 + b_2 y3^=WoS3+b2
    假设在 t = 3 t=3 t=3时刻,损失函数为平方损失函数
    L 3 = 1 2 ( y 3 − y 3 ^ ) 2 L_3 = \frac{1}{2}(y_3 - \hat{y_3})^2 L3=21(y3y3^)2
    L t = 1 2 ( y t − y t ^ ) 2 L_t = \frac{1}{2}(y_t - \hat{y_t})^2 Lt=21(ytyt^)2
    则一次训练任务的损失函数为每一时刻损失值得累加
    L = ∑ t = 0 T L t L = \sum_{t=0}^TL_t L=t=0TLt
    使用随机梯度下降法训练RNN就是不断地对 W x W_x Wx W s W_s Ws, W o W_o Wo求偏导数,不断的调整这些参数使 L L L最小
    现在对 t 3 t_3 t3时刻的 W x W_x Wx W s W_s Ws, W o W_o Wo求偏导数
    这里写图片描述
    但是对于 W x W_{x} Wx W s W_{s} Ws 求偏导,会随着时间序列产生长期依赖。因为 S t S_{t} St 随着时间序列向前传播,而 S t S_{t} St 又是 W x W_{x} Wx W s W_{s} Ws的函数
    如果加上激活函数
    S j = t a n j ( W x X j + W s S j − 1 + b 1 ) S_j=tanj(W_xX_j + W_sS_{j-1} + b_1) Sj=tanj(WxXj+WsSj1+b1)
    ∏ j = k + 1 t ∂ S j ∂ S j − 1 = ∏ j = k + 1 t t a n h ′ W s \prod_{j=k+1}^t\frac{\partial{S_j}}{\partial{S_{j-1}}} = \prod_{j=k+1}^ttanh^{'}W_s j=k+1tSj1Sj=j=k+1ttanhWs
    而tanh的导数是一个小于1的数,所以容易出现梯度消失的现象。
    需要注意的是,梯度消失是随着层数增加逐渐消失的。就拿上面提到的对 t 3 t_3 t3时刻的 W x W_x Wx求偏导,其实是 t 3 t_3 t3, t 2 t_2 t2, t 1 t_1 t1时刻 L 3 L_3 L3 W x W_x Wx求偏导的累加,如果要求 L 3 L_3 L3 t 1 t_1 t1时刻 W x W_x Wx的梯度就要消失了
  • Solution to the Exploding & Vanishing Gradients
    • clips gradients to a small number whenever they explode
    • use the Rectified Linear Units (ReLU) instead of the sigmoid function(solve vanishing gradients)

LSTM解决梯度消失

LSTM有三个gate,分别是forget gate, input gate, output gate,通过下面 f t f_{t} ft, i t i_{t} it, o t o_{t} ot 三个函数来控制,因为 σ ( x ) \sigma(x) σ(x) 的值是介于0到1之间的,刚好用趋近于0时表示流入不能通过gate,趋近于1时表示流入可以通过gate。 g t 表 示 输 入 g_t表示输入 gt
f t = σ ( W f x X t + W f h h t − 1 + b f ) f_t = \sigma(W_{fx}X_t+W_{fh}h_{t-1} + b_f) ft=σ(WfxXt+Wfhht1+bf)
i t = σ ( W i x X t + W i h h t − 1 + b i ) i_t = \sigma(W_{ix}X_t+W_{ih}h_{t-1} + b_i) it=σ(WixXt+Wihht1+bi)
o t = σ ( W o x X t + W o h h t − 1 + b o ) o_t = \sigma(W_{ox}X_t +W_{oh}h_{t-1}+ b_o) ot=σ(WoxXt+Wohht1+bo)
g t = σ ( W g x X t + W g h h t − 1 + b g ) g_t = \sigma(W_{gx}X_t +W_{gh}h_{t-1}+ b_g) gt=σ(WgxXt+Wghht1+bg)
状态转移与RNN类似
S t = f t S t − 1 + i t ∗ . . . S_t = f_tS_{t-1} + i_t*... St=ftSt1+it...
类似于RNN,计算LSTM的 ∂ S t S t − 1 \frac{\partial{S_t}}{S_{t-1}} St1St
∂ S t S t − 1 = f t + . . . \frac{\partial{S_t}}{S_{t-1}} = f_t + ... St1St=ft+...
公式里其余的项不重要,这里就用省略号代替了**。可以看出当 f t = 1 f_t= 1 ft=1时,就算其余项很小,梯度仍然可以很好地传导到上一个时刻**,此时即使层数较深也不会发生 Gradient Vanish 的问题;当 f t = 0 f_t = 0 ft=0时,即上一时刻的信号不影响到当前时刻,则此项也会为0; f t f_t ft在这里控制着梯度传导到上一时刻的衰减程度,与它 Forget Gate 的功能一致。

  • Solution to the Exploding & Vanishing Gradients
    • clips gradients to a small number whenever they explode
    • use the Rectified Linear Units (ReLU) instead of the sigmoid function(solve vanishing gradients)

FTRL optimization

word2vec

word2vec主要有两种训练方式: CBOW(continue bag of words) 和 skip-gram

  • Cbow
    L = ∑ w ∈ C l o g ( p ( w ∣ C o n t e x t ( w ) ) L = \sum_{w \in C}log(p(w|Context(w)) L=wClog(p(wContext(w))
  • skipgram
    L = ∑ w ∈ C l o g ( p ( c o n t e x t ( w ) ∣ w ) ) L = \sum_{w \in C}log(p(context(w)|w)) L=wClog(p(context(w)w))
  • 模型加速方法
    • Negative sampling
      • 带权负采样。对于高频次,采样概率比较大;对于低频词,采样概率比较低
    • Huffman tree
      • 输出的是一个Huffman树形结构,每一次分支都可以视为进行了一次二分类
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值