CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
Lecture Notes: Part III
Neural Networks, Backpropagation
CS224n
RNN LSTM CNN
transformerbert问答要、成、模型
理解等前沿内容。
这组笔记介绍了单层和多层神经网络,以及如何将它们用于分类
目的。然后我们讨论如何使用一种称为反向传播的分布式梯度下
降技术来训练它们。我们将看到如何使用链式法则按顺序进行参
数更新。在对神经网络进行严格的数学讨论之后,我们将讨论一
些训练神经网络的实用技巧和技巧,包括:经元单元(线性)
Xavier Adagrad ,
我们将鼓励使用递归神经网络作为语言模型。
笔记核心词
Neural networks Forward omputation, Backward,
propagation, Neuron Units, Max-margin Loss, Gradient
checks, Xavier parameter initialization, Learning rates,
Adagrad
课程
全部料和
已整
任意
二维
获取!!
微信公众号
·全套资料
回复 CS224n
底部菜单栏
Bilibili
·课程视频
视频简介
置顶评论
GitHub
·项目代码
阅读 ReadMe
点击超链接
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
1. Neural Networks: Foundations
在前面的讨论中认为,因为大部分数据是线性不可分的所以需要
非线性分类器,不然的话线性分类器在这些数据上的表现是有限
的。神经网络就是如右图所示的一类具有非线性决策分界的分类
器。现在我们知道神经网络创建的决策边界,让我们看看这是如
何创建的。
神经的分
称为类。,人
经网比人经网有能更复因此最好要在
者之间画太多的相似点。
1.1 A Neuron
出。不同的神经元根据它们不同的参数(一般认为是神经元的权

称为
神经还与
维的重向 和一
相关
这个神经元的输出是:
=
1
1+((
+))
我们也可以把上面公式中的权值和偏置项结合在一起:
=
1
1+([
  
][
  
1])
这个公式可以以右图的形式可视化
神经络的
经元可以是许多允许非线性在网络中累积的函数之一。
2 sigmoid
x 是如何被放,求和添加到一个偏单元,然后传给挤
sigmoid 函数的。
1 Notes info.
课件/Slides
Lecture 3, P16
视频/Video
Lecture -, --:--
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeA
I
1.1 Notes info.
课件/Slides
Lecture 3, P17
视频/Video
Lecture 3, 28:30
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeA
I
1线
就是神经网络的威力。
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
1.2 A Single Layer of Neurons
的神经元的输入,如右图 3 所示。
{w
(1)
,...,w
(m)
}
{b
1
,...,b
m
}
和相对应的激活输出为
{a
1
,...,a
m
}
a
1
=
1
1+exp − w
(1)T
x+b
a
m
=
1
1+exp
− w
(m)T
x+b
让我们定义简化公式以便于更好地表达复杂的网络
σ z =
1
1+exp
z
1
1
1+exp
z
m
b=
b
1
b
m
m
W=
−w
(1)T
−w
(m)T
m×n
我们现在可以将缩放和偏差的输出写成:
=+
激活函数 sigmoid 可以变为如下形式
a
1
a
m
=σ z =σ Wx+b
那么这些激活的作用是什么呢?可以把这些激活看作是一些加权
特征组合存在的指标。然后我们可以使用这些激活的组合来执行
分类任务。
1.3 Feed-forward Computation

单元变换激活
。但这么直觉
是什么呢?让我们考虑一个 NLP 中的命名实体识别问题为例
MuseumsinParisareamazing
1.2 Notes info.
课件/Slides
Lecture 3, P18
视频/Video
Lecture -, --:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
3
sigmoid
这些单元都接收相同的输 x
1.3 Notes info.
课件/Slides
Lecture 3, P20
视频/Video
Lecture 3, 33:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation

下,我们很可能不仅想要捕捉窗口中单词的单词向量,还想要捕
便

是第一单词 第二单词的时候

才是
命名体。的非线 Softmax
1.2
分。,我使用个矩
×1
与激出计
得到未归一化的得分用于分类任务:
s=U
T
a=U
T
f(Wx+b)
其中 是激活函数(例如 sigmoid 函数)。
1.4 Maximum Margin Objective Function
类似很多的机器学习模型,神经网络需要一个优化目标函数,一
个我们想要最小化或最大化的误差。这里我们讨论一个常用的误
差度maximum margin objective 标函
使
得分要比标签数据的计算得分要高。
子 , 果 我 们 令

s
Not all museums in Paris
这个这个窗口 corrupt
然后们对大化
(
)
或者
(
)
。然
而,修改误差
>(
)>0
高于的都
>
则误
(
)
,否则为 0 。因此,我们的优化的目标函数现在为:
minimize J=max (s
c
s,0)
然而,上面的优化目标函数是有风险的,因为它不能创造一个安
全的。我数据据的大于
(
<)
算,是当 (
<0)算。我们化目
函数为:
minimize J=max (Δ+s
c
s,0)
我们可以把这个间隔缩放使得
=1
,让其他参数在优化过程中
自动进行调整,并且不会影响模型的表现。如果想更多地了解这
维度分析:
使 4
使 5
输入是
x
20
藏层使 8 sigmoid
W
8×20
b
8
U
8×1
s
1.4 Notes info.
课件/Slides
Lecture 3, P33
视频/Video
Lecture -, --:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
4图像
单的前馈网络如何计算它的输出。
向量机一起使用.
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
方面

中的
容。最后,我们定义在所有训练窗口上的优化目标函数为:
minimize J=max (1+s
c
s,0)
按照上面的公式有,
=
(
+)
=
(+)
1.5 Training with Backpropagation Elemental
1.4 模型
0
更新参数我们一使用梯度降(或者 SGD 这样变体
来更新参数,所以要知道在更新公式中需要的任意参数的梯度信
息:
(+1)
=
()

()
反向传播是一种利用微分链式法则来计算模型上任意参数的损失
梯度的方法。为了更进一步理解反向传播,我们先看右图的一个
简单的网络
这里我们使用只有单个隐藏层和单个输出单元的神经网络。现在
让我们先建立一些符号定义
x
i
是神经网络的输入
s
是神经网络的输出
每层(包括输入和输出层)的神经元都接收一个输入和生成
一个输出。第
k
层的
j
个神经元接收标量
z
j
(k)
和生
一个标量激活输出
a
j
(k)
我们把 z
j
(k)
计算出的反向传播误差定义 δ
j
(k)
1
1
x
j
(k)
=z
j
(k)
=
a
j
(k)
W
(k)
k
k+1
Section 1.3
W
(1)
=
W W
(2)
=U
J=(1+
s
c
s)
W
14
(1)
W
14
(1)
z
1
(2)
a
1
(2)
算。这点对于理解反向传播是非常重要的——反向传播的梯度只
受它所贡值的
a
1
(2)
在随的前算中
W
1
(2)
乘计算得分。我们可以从最大间隔损失看到:
Notes info.
课件/Slides
Lecture 4, P12
视频/Video
Lecture 3, 57:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
5 4-2-1
k j
()
,并产生激活输出
()
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation


=−

=−1
为了简化我们只分析


(1)
。所以,



(1)
=

(2)
(2)


(1)
=

(2)
(2)

(1)
=
(2)

(2)

(1)
(2)

(2)


(1)
=
(2)

(2)

(2)

(2)


(1)
=
(2)
 
(2)

(2)

(2)


(1)
=
(2)
'
(2)

(2)

(1)
=
(2)
'
(2)


(1)
(1)
+
1
(1)
1
(1)
+
2
(1)
2
(1)
+
3
(1)
3
(1)
+
4
(1)
4
(1)
=
(2)
'
(2)

(1)
(1)
+
(1)

(1)
=
(2)
'
(2)
(1)
=
(2)
(1)
a
(1)
δ
i
(2)
a
j
(1)
δ
i
(2)
2
i
向传播的差。
a
j
(1)
W
ij
相乘的结,输入第
2
层中 i个神
经元中。
我们以右为例,让们从差共/的来一下反
传播,现在我们要更新
W
14
(1)
1. 我们从
1
(3)
1 的误差信号开始反向传播。
2.
1
(3)
1
(3)
相乘在这子中 1 1
所以有
1
(3)
=1
3. 1
1
(3)
号使得误差的公平共享到达
1
(2)
4. 现在
1
(2)
的误差为
1
(3)
×
1
(2)
=
1
(2)
(在
1
(3)
的误差信
号为
1
(3)
)。因此在
1
(2)
的误差为
1
(2)
5. 与第 2
1
(2)
映射
1
(2)
的神
1
(2)
梯度
'(
1
(2)
)
6. 因此在
1
(2)
的误差是 '(
1
(2)
)
1
(2)
,我们将其定义为
1
(2)
7.
4
(1)
乘,把误差的误差共享分配到
14
(1)
6
W
ij
(1)
所需的网络的相关部分。
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
8. 所以,对于
14
(1)
的梯度损失可以计算为
4
(1)
'(
1
(2)
)
1
(2)
注意我们使用这个方法得到的结果是和之前微分的方法的结果是
完全一样的。因此,计算网络中的相应参数的梯度误差既可以使
用链式法则也可以使用误差共享和分配的方法——这两个方法能
得到相同结果,但是多种方式考虑它们可能是有帮助的。
b
1
(1)
z
1
(2)
1
因此在第 k 层的 i 经元的偏置的梯度 δ
i
(k)
。例如在上面
b
1
(1)
W
14
(1)
f'(z
1
(2)
)
W
1
(2)
δ
(k)
δ
(k−1)
反向传播的一般步骤:
我们有从
z
i
(k)
向后传播的误
δ
i
(k)
,如图 7所示
δ
i
(k)
W
ij
(k−1)
反向传播到
a
j
(k−1)
因此在
a
j
(k−1)
接收的误差是
δ
i
(k)
W
ij
(k−1)
然而,
a
j
(k−1)
在前向计算可能出右图的情况,会参与下一
k
m
差也要使用上一步方法将误差反向传播到
a
j
(k−1)
上。
因此现在在
a
j
(k−1)
接收的误差是 δ
i
(k)
W
ij
(k−1)
+δ
m
(k)
W
mj
(k−1)
实际上,我们可以把上面误差和简化
i
δ
i
(k)
W
ij
(k−1)
a
j
(k−1)
f'(z
j
(k−1)
)
传到
k1
j
经元上。
因此到达 z
j
(k−1)
的误差为 f'(z
j
(k−1)
)
i
δ
i
(k)
W
ij
(k−1)
1.6 Training with Backpropagation Vectorized
到目前为止,我们讨论了对模型中的给定参数计算梯度的方法。
这里会一般泛化上面的方法,让我们可以直接一次过更新权值矩
阵和偏置向量。注意这只是对上面模型的简单地扩展,这将有助
于更好理解在矩阵-向量级别上进行误差反向传播的方法。
W
ij
(k)
δ
j
(k+1)
a
j
(k)
W
(k)
a
(k)
z
(k+1)
个矩阵
W
(k)
的梯度误差为
7
δ
(k)
δ
(k−1)
误差
8
δ
(k)
δ
(k−1)
误差
1.6 Notes info.
课件/Slides
Lecture -, P-
视频/Video
Lecture3, 64:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeA
I
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
W
=
1
(+1)
1
()
2
(+1)
1
()
1
(+1)
2
()
2
(+1)
2
()
=
(+1)
1
()
因此我们可以将整个矩阵形式的梯度写为在矩阵中的反向传播的
误差向量和前向激活输出的外积。
δ
i
(k)
=f'(z
(k)
)
W
(k)T
δ
(k+1)
这是z
(k)
过激 f
产生激活
a
(k)
,然后通过传递矩阵
W
(k)
线性组合产生 z
(k+1)
现在我们来看看如何能够计算误差向量
(+1)
。我们从上面的例
()
='(
()
)
(+1)

()
阵的形式:
()
='(
()
)
()
(+1)
×
)。
element-wise vector-wise
MATLAB
Python使用 Numpy / Scipy
非常高的。因此在实际中应该使用向量化运算。
此外,我们也要减少反向传播中的多余的计算——例如,注意到
δ
(k)
δ
(k+1)
使
δ
(k+1)
W
(k)
δ
(k+1)
δ
(k)
- (k
1)...(1)
层的时候复上的步骤。样的递归是使得反
传播成为计算上可负担的过程。
误差k+1
播到k层:
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
2. Neural Networks: Tips and Tricks
2.1 Gradient Check
在上一部分中,我们详细地讨论了如何用基于微积分的方法计算
神经网络中的参数的误差梯更新。这里我们介绍一种用数值
近似这些梯度的方法——虽然在计算上的低效不能直接用于训练
此,它可以作为对导数的正确性的有用的检查。给定一个模型的
θ
J
θ
i
central
difference formula 得出:
'()
(
(+)
)(
(−)
)
2
ϵ
1
e
−5
使
θ
i
J(
θ
(i+)
)。相似地,我们使
−ϵ
扰动参
θ
的第 i元素时
就可 J(θ
(i−)
)。因
播,我们可以估计在模型中任意给定参数的梯度。我们注意到数
值梯度的定义和导数的定义很相似,其中,在标量的情况下:
'()
+ −
当然,还是有一点不同——面的定义仅仅在正向扰动
x
计算梯
使
central difference formula
们在两个方向都对参数扰动。为了更好地逼近一个点附近的导数
/斜率我们 f'
使 central difference formula
ϵ
2
误差,这相当小,而导数定义更容易出错。
现在你可能会产生疑问,如果这个方法这么准确,为什么我们不
用它而不是用反向传播来计算神经网络的梯度?
这是因为效率的问题——每当我们想计算一个元素的梯度,需要
在网络中做两次前向传播,这样是很耗费计算资源的。再者,很
多大规模的神经网络含有几百万的参数,对每个参数都计算两次
明显不是个好的择。同时例如 SGD 的优化术中
我们需要通过数千次的迭代来计算梯度,使用这样的方法很快会
变得难以应付。这种低效性是我们只使用梯度检验来验证我们的
分析梯度的正确性的原因。梯度检验的实现如下所示:
2.1 Notes info.
课件/Slides
Lecture 4, P47
视频/Video
Lecture 4, 57:30
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeA
I
使
算:
f'(θ)
J(θ
(i+)
)J(θ
(i−)
)
J(
θ
(i+)
) J(
θ
(i−)
)使
过程进行评估。
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
def eval_numerical_gradient(f, x):
"""
a naive implementation of numerical gradient of f at x
- f should be a function that takes a single argument
- x is the point (numpy array) to evaluate the gradient at
"""
f(x) = f(x) # evaluate function value at original point
grad = np.zeros(x.shape)
h = 0.00001
# iterate over all indexes in x
it = np.nditer(x, flags=['
multi_index
',op_flags=['
readwrite
'])
while not it.finished:
# evaluate function at x+h
ix = it.multi_index
old_value = x[ix]
x[ix] = old_value + h # increment by h
fxh_left = f(x) # evaluate f(x + h)
x[ix] = old_value - h # decrement by h
fxh_right = f(x) # evaluate f(x - h)
# restore to previous value (very important!)
x[ix] = old_value
# compute the partial derivative
# the slope
grad[ix] = (fxh_left - fxh_right) / (2 * h)
it.iternext() # step to next dimension
return grad
2.2 Regularization
和很多机器学习的模型一样,神经网络很容易过拟合,这令到模
型在训练集上能获得近乎完美的表现,但是却不能泛化到测试集
使
L2
正则。我需要
J
上增一个项,
在的损失函数如下:
J
R
=J+λ
i=1
L
||W
(i)
||
F
在上面的公式中 ||
W
(i)
||
F
是矩阵
W
(i)
(在神经网络中的第 i
Frobenius
,
λ
值的大小。
||U||
F
=
i
l
U
il
2
Notes info.
课件/Slides
Lecture 4, P50
视频/Video
Lecture 4, 61:30
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeAI
矩阵
U
Frobenius
范数的定义
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
J
R
失函
时候,惩罚数值太大的权值(让权值的数值分配更加均衡,防止
出现部分权特别大的情况)。由于
Frobenius
范数的二次
质(矩阵的平),
L2
正则效地模型
的灵活性和因此减少出现过拟合的可能性。增加这样一个约束可
以使用贝叶斯派的思想解释,这个正则项是对模型的参数加上一
个先验分布,优化权值使其接近于 0——多接近是取决于 λ
值。选择一个合适的 λ值是很重要的,并且需要通过超参数调整
λ
0
在训练集上学习到有意义的东西,经常在训练、验证和测试集上
λ
——尝试去思考一下为什么。
实际有时会使其他的正,例
L1
正则
对参数元素的绝对值(而不是平方)求和。然而,这在实践中不
太常用,因为它会导致参数权重稀疏。在下一节中,我们将讨
dropout,它有效作为另一正则化形,通过在向传递中
随机丢弃(即设置为零)神经元。
下面摘录已有的三条回答
首先正则化主要是为了防止过拟合,而过拟合一般表现为模
型对于输入的微小改变产生了输出的较大差异,这主要是由
w 系, ||W||
||b||
的,结果中, b
是不输入大还 b
只是加个偏置而已。
举个例子,果你在训练集中,w b 都表现得很,但
b
w
的加权。或者说,模型对于输入的微小改变产生了输出的较
型的
w b b
掉的)。
项?
使
响,因此不需要正则化偏置项。
[
则?]
(https://www.zhihu.com/question/6
6894061)
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
息,神经网络倾向于较小的权重以便更好地泛化,但是对偏
置就没有这样一致的先验知识。另外,很多神经网络更倾向
于区分方向信息(对应于权重),而不是位置信息(对应于
偏置),所以对偏置加正则化项对控制过拟合的作用是有限
的,相反很可能会因为不恰当的正则强度影响神经网络找到
最优点。
过拟合会使得模型对异常点很敏感,即准确插入异常点,导
线线
高),而偏置对模型的曲率没有贡献(对多项式模型进行求
W 线
义。
有时会用正则例如
L1
正则
将参数素的绝对值全部加起-然而,在实际中很少会用
L1
dropout
在前向传播过程随机将神经元设为 0
Dropout
部分 unit 这些冻结 unit 不是把它们设 0
,而是对于该迭代,网络假定它们为 0 unit
会为此次迭代更新。
2.3 Dropout
Dropout 一个非常强大正则化技术 Srivastava 在论
Dropout: A Simple Way to Prevent Neural Networks from
Overtting dropout
经网络上。
这个想法是简单而有效的——训练过程中,在每次的前向反向
传播们按概率
(1)
随机 drop 神经
然后,在测试阶段,我们将使用全部的神经元来进行预测。使用
Dropout
少出现过拟合和通常在现今的任务上获得更高的整体表现。这种
dropout
一次以指数形式训练许多较小的网络,并对其预测进行平均。
Dropout applied to an artificial
neural network. Image credits to
Srivastava et al. Dropout
Srivastava 等人。】
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
使 dropout
0 。然后,在反向传播中我们仅对在前向传播中激活的神经元回
传梯度。最后,在测试过程,我们使用神经网络中全部的神经元
使
dropout
阶段大致相同——否则输出的大小可能会有很大的不同,网络的
表现已经不再明确了。因此,我们通常必须在测试阶段将每个神
经元的输出除以某个值——这留给读者作为练习来确定这个值应
便
于 《 [https://nndl.github.io/]
P190
目的:缓解过拟合问题,一定程度上达到正则化的效果
效果:减少下层节点对其的依赖,迫使网络去学习更加鲁棒
的特征
集成学习的解
络。 神经
n
个神共可
2
n
个子网络。每次迭代都相当于训练一个不同的子网络
这些子网络都共享原始网络的参数。那么,最终的网络可以
近似看作是集成了指数级个不同网络的组合模型。
贝叶斯学习的解释
丢弃法可以解释为种贝叶斯学习的近似。用
y=f(x,θ)
来表贝叶习是
θ
为随
向量,并且先验分布为
q(θ)
,贝叶斯方法的预测为
()
[] =
(,)()
1
=1
,
f(x,
θ
m
) m
θ
m
为对全部参数
θ
的一次采样。
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
RNN 中的变分 Dropout Variational Dropout
Dropout一般是针对神经元进行随机丢弃,但是也可以扩展
丢弃。
RNN
弃,这样会损害循环网络在时间维度上记忆能力。
一种简单的方法是对非时间维度的连接(即非循环连接)进
行随机丢失。如图所示,虚线边表示进行随机丢弃,不同的
颜色表示不同的丢弃掩码。
θ
样。每次采样的参数需要在每个时刻保持不变。因此,在对
循环神经网络上使用丢弃法时,需要对参数矩阵的每个元素
进行随机丢弃,并在所有时刻都使用相同的丢弃掩码。这种
VariationalDropout 7.12
使
码。
2.4 Neuron Units
sigmoidalneurons线
的神经网络。但是在很多应用中,使用其他激活函数可以设计更
好的神经网络。下面列出一些常见的激活函数和激活函数的梯度
定义,它们可以和前面讨论过的 sigmoidal函数互相替换
2.4 Notes info.
课件/Slides
Lecture 4, P53
视频/Video
Lecture 4, 68:00
GitHub·代码
实时在线查阅文档
Bilibili·视频
中英字幕课程视频
Stanford University X ShowMeA
I
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
Sigmoid:这是我们讨论过的常用选择,激活函数 σ为:
σ(z)=
1
1+exp(z)
其中
σ(z)(0,1)
σ(z)的梯度为
σ
'
(z)=
−exp(−z)
1+exp(−z)
=σ(z)
1σ(z)
Tanh
tanℎ
函数
sigmoid
函数的另择,际中
它能更快地收敛。
tanℎ
sigmoid
的主要不同在
tanℎ
的输
范围在 -1 1 ,而
sigmoid
的输出范围在 0 1
ℎ()
()()
()+()
=2(2)
其中 ℎ()(1,1)
ℎ()
的梯度为:

'
()=
()()
()+()
2
=1
2
()
Hard tanh ard tan
tanℎ
为优先,因为它的计算量更小。然而当
z
的值大
1
时,函数的
1ℎard tanℎ
为:
ℎardtanℎ(z)=
−1 :z<1
z
:1z1
1 :z>1
ℎard tanℎ
这个函数的微分也可以用分段函数的形式表示:
ℎardtanℎ(z) =
1 :1z1
0 :otℎerwise
Soft sign soft sign数是另外种非线激活函数可以
tanℎ
的另种选 ℎard clipped functions
不会过早地饱和:
softsign(z)=
z
1+|z|
soft sign
函数的微分表达式为:
soft sign
'
z =
sgn(z)
1+z
2
其中
sgn
是符号函数,根据
z
的符号返回 1或者 -1
rect'(z) =
1 :z>1
0 :otℎerwise
Figure 9: The response of a
sigmoid nonlinearity 9:sigmoid
非线性的响应】
Figure 10: The response of a
tanh nonlinearity 10:tanh 线
性的响应】
Figure 11: The response of a
hard tanh nonlinearity 11hard
tanh 非线性的响应】
Figure 12: The response of a
soft sign nonlinearity 12
号非线性的响应】
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
ReLU
ReLU
Rectified Linear Unit
一个常见的选择,当 z值特别大的时候它也不会饱和。在计算
机视觉应用中取得了很大的成功:
rect(z)=max(z,0)
ReLU
函数的微分是一个分段函数
rect'(z) =
1 :z>1
0 :otℎerwise
Leaky ReLU
ReLU
单元 z值小 0,是
leaky ReLU
z
0
然会有一个很小的误差反向传播回去
leaky
z
=max z,kz
其中
0<k<1
leaky ReLU函数的微分是一个分段函数
leaky'(z) =
1 :z>0
k :otℎerwise
2.5 Data Preprocessing
与机器学习模型的一般情况一样,确保模型在当前任务上获得合
理性能的一个关键步骤是对数据执行基本的预处理。下面概述了
一些常见的技术。
Mean Subtraction
X
X
X
来使数据零中心化。在实践中很重要的一点是,只计算训练集的
平均值,而且在训练集,验证集和测试集都是减去同一平均值。
Normalization
mean Subtraction
每个输入特征维度缩小,让每个输入特征维度具有相似的幅度范
量,但是最初的时候我们经常认为所有的特征同样重要。实现方
法是将特征除以它们各自在训练集中计算的标准差
Whitening
相比上述的两个方法, whitening 有那么常用,它本质上是
据经过转换后,特征之间相关性较低,所有特征具有相同的方差
(协方差阵为 1 )。首先对数据进 Mean Subtraction
Figure 13: The response of a
ReLU nonlinearity 13:ReLU
非线性的响应】
Figure 14: The response of a
leaky ReLU nonlinearity 14
泄漏 ReLU 非线性的响应】
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
X'
X'
U
,
S
,
V
UX'
X'
U
果的每个维度除以
S
中的相应奇异值,从而适当地缩放我们的数
0
替)。
2.6 Parameter Initialization
0
- Understanding
the difficulty of training deep feedforward neural networks
(2010), Xavier
training dynamics 验结 sigmoid
tanh
W
n
(l+1)
×
n
(l)
匀分布的方式随机初始化,能够实现更快的收敛和得到更低的误
差:
WU
6
n
(l)
+n
(l+1)
,
6
n
(l)
+n
(l+1)
n
(l)
W(fanin)
n
(l+1)
W(fanout)
的输出单元数。在这个参数初始化方案中,偏置单元是初始化为
0 。这种方法是尝试保持跨层之间的激活方差以及反向传播梯度
方差。如果没有这样的初始化,梯度方差(当中含有纠正信息)
通常随着跨层的反向传播而衰减。
2.7 Learning Strategies
训练速率/使用学
在最简单的梯度下降公式中
α
是学习率:
θ
new
=θ
old
α∇
θ
J
t
θ
α
——然而,在更快的收敛速度下并不能保证更快的收敛。实际
上,如果学习率非常高,我们可能会遇到损失函数难以收敛的情
点,如右图所示。在非凸模型中(我们很多时候遇到的模型都是
非凸),高学习率的结果是难以预测的,但是损失函数难以收敛
的可能性是非常高的。
Figure 15: Here we see that
updating parameter w2 with a large
learning rate can lead to divergence
of the error.【图 15这里,我
w2
导致错误的发散。】
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
避免损失函数难以收敛的一个简答的解决方法是使用一个很小的
学习率,让模型谨慎地在参数空间中迭代——当然,如果我们使
敛,或者会困在局部最优点。因此,与任何其他超参数一样,学
习率必须有效地调整。
深度学习系统中最消耗计算资源的是训练阶段,一些研究已在尝
Ronan Collobert
fanin
(n
(l)
)
W
ij
(
W
n
(l+1)
×n
(l)
) 的学习率。
还有他已证明的技-法叫 annealing 退
在多次迭代之后,学习率以以下方式降低:保证以一个高的的学
习率开始训练和快速逼近最小值;当越来越接近最小值时,开始
降低学习率,让我们可以在更细微的范围内找到最优值。一个常
annealing
n
个因子 x来降低学习率
α
t α(t)=
α
0
e
−kt
,其中
α
0
是初始的学习率和
k
是超参数。
还有另外一种方法是允许学习率随着时间减少:
α(t)=
α
0
τ
max(t,τ)
在上
α
0
是一始的
τ也是个可调参,表示学率应该时间点始减少。
实际中,这个方法是很有效的。在下一部分我们讨论另外一种不
需要手动设定学习率的自适应梯度下降的方法。
2.8 Momentum Updates
动量方法,灵感来自于物理学中的对动力学的研究,是梯度下降
使种更
方案。动量更新的伪代码如下所示:
# Computes a standard momentum update
# on parameters x
v = mu * v - alpha * grad_x
x += v
CS224n | Natural Language Processing with Deep Learning Stanford University
Lecture Notes: Part III - Neural Networks, Backpropagation
2.9 Adaptive Optimization Methods
AdaGrad ( SGD )
一点关键的不同:对每个参数学习率是不同的。每个参数的学习
率取决于每个参数梯度更新的历史,参数的历史更新越小,就使
用更大的学习率加快更新。即,过去没有更新太大的参数,现在
更有可能有更高的学习率。
θ
t,i
=
θ
t−1,i
α
τ=1
t
g
τ,i
2
g
t,i
 wℎere g
t,i
=
∂θ
i
t
J
t
(θ)
在这个术中,我们看到如果度的历史 RMS 低,那么学习
率会非常高。这个技术的一个简单的实现如下所示
# Assume the gradient dx and parameter vector x
cache += dx ** 2
x += -learning_rate * dx / np.sqrt(cache + 1e-8)
适应 RMSProp Adam
下:
# Update rule for RMS prop
cache = decay_rate * cache + (1 - decay_rate) * dx *
* 2
x += -learning_rate * dx / (np.sqrt(cache) + eps)
# Update rule for Adam
m = beta * m + (1 - beta1) * dx
v = beta * v + (1 - beta2) * (dx ** 2)
x += -learning_rate * m / (np.sqrt(v) + eps)
RMSProp 利用动平 AdaGrad
一个变——实际上, AdaGrad 不一样,它的更新不
单调变小。
Adam RMSProp
动量更新。
2.10 More reference
如果希望了解以上的梯度优化算法
的具体细节,可以阅读这篇文章:
An overview of gradient
descent optimization
algorithms)
系列内容
Awesome AI Courses Notes Cheat Sheets
@
ShowMeAI
Lecture Notes: Part III - Neural Networks, Backpropagation
机器学习
深度学习
自然语言处
计算机视觉
知识图谱
Machine Learning
Deep Learning
Natural Language Processing
Computer Vision
Knowledge Graphs
Stanford · CS229
Stanford · CS230
Stanford · CS224n
Stanford · CS231n
Stanford · CS520
# 系列内容 Awesome AI Courses Notes Cheatsheets
图机器学习
深度强化学
自动驾驶
Machine Learning with Graphs
Deep Reinforcement Learning
Deep Learning for Self-Driving Cars
Stanford · CS224W
UCBerkeley · CS285
MIT · 6.S094
...
...
...
CS224n | Natural Language Processing with Deep Learning Stanford University
21
ShowMeAI 的分覆盖知名TOP20+ AI 旨在学习一整
高品质中文学习笔记和速查表。
斯坦(Stanford University) Natural Language Processing with Deep Learning (CS224n)
系列的第三门产出。
课程版本 2019 Winter,核深度(transformerbert答、摘要文本生成)当前(2021 )
业界和研究界依旧是前沿的方法。最新版课程的笔记生产已在规划中,也敬请期待。
笔记内容经由深度加工整合,以 5 个部分构建起完整的CS224n 容世界”,并依托 GitHub 建了汇总
页。快扫描二维码,跳转进入吧!有任何建议和反馈,也欢迎通过下方渠道和我们联络 (*3)~