CS224D 课程学习笔记 L06

Lecture 6. Neural Tips and Tricks


Lecture 6主要介绍了深度学习应用的一些小技巧,例如多任务训练、梯度检测、正则化、多种激活函数、参数初始化、学习速率等。

多任务学习(也叫权重共享)

对比上节课我们学到的神经网络,多任务学习就是在输出层用softmax分类器取代标量得分。训练方法依然采用后向传播。

神经网络和传统机器学习方法的不同在于,深度学习需要同时学习词向量和权重。

主要思想:我们在训练多种不同NLP任务(例如NER和POS),可以共享两个任务的词向量和隐藏层的权重,只有输出层的softmax权重不同。损失函数是不同任务损失函数相加,例如:

δ t o t a l = δ P O S + δ N E R \delta^{total} = \delta^{POS} + \delta^{NER} δtotal=δPOS+δNER

参考论文《NLP(almost from scratch, Collobert et al.2011)》

成功的神经网络的通用步骤是这样的:

  1. 选择合适的网络框架
    1. 框架:单个词、固定窗口、词袋、循环神经网络、递归神经网络、CNN等;
    2. 非线性神经单元
  2. 用梯度检测器检查实现代码是否存在bug
  3. 参数初始化
  4. 优化技巧
  5. 检查模型是否强大到过拟合
    1. 如果没有过拟合,改变模型框架或者模型调大
    2. 如果过拟合,请用正则化

下面我们根据这些步骤分别介绍使用技巧。

梯度检测

梯度检测我们在第一次作业中用过,从导数的本质上求得参数的梯度,和我们用后向传播计算得到的梯度对比。公式如下:

f ′ ( θ ) ≈ J ( θ ( i + ) ) − J ( θ ( i − ) ) 2 ϵ f\prime (\theta) \approx \frac{J(\theta^{(i+)}) - J(\theta^{(i-)})}{2\epsilon} f(θ)2ϵJ(θ(i+))J(θ(i))

其中, θ ( i + ) = θ + ϵ × e i \theta^{(i+)} = \theta + \epsilon \times e_i θ(i+)=θ+ϵ×ei

简单的代码实现为:

old_value = x[ix]
x[ix] = old_value + h 
fxh = f(x) 
x[ix] = old_value
grad[ix] = (fxh - fx) / h

如果梯度检测失败了应该怎么做?修改代码确定没有bug!

正则化

正则化前面课程提到的次数也很多,和大多数分类器一样,神经网络也需要避免过拟合,使得验证集和测试集能够获得良好的表现。正则化后的损失函数为:

J R = J + λ ∑ i = 1 L ∣ ∣ W ( i ) ∣ ∣ F J_R = J + \lambda\sum_{i=1}^L||W^{(i)}||_F JR=J+λi=1LW(i)F

上式中, ∣ ∣ W ( i ) ∣ ∣ F ||W^{(i)}||_F W(i)F是矩阵 W ( i ) W^{(i)} W(i) F F F范数, λ \lambda λ是正则化选项的相对权重。

非线性神经元

目前为止我们讨论的非线性神经元有sigmoid,然而在很多应用中有更好的激活函数。常用的有:

Sigmoid

公式:

σ ( z ) = 1 1 + e x p ( − z ) ∈ ( 0 , 1 ) \sigma(z) = \frac{1}{1+exp(-z)} \in (0,1) σ(z)=1+exp(z)1(0,1)

梯度:

σ

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值