赞
踩
李宏毅-机器学习课程-笔记
引例:利用前馈神经网络(FFN)解决在空缺位置填充单词问题
\qquad
FFN:Input:一个单词(一个向量表示一个单词)
\qquad
Output:输入单词属于空缺位置的概率分布
\qquad
FNN缺点:神经网络没有记忆力,不考虑上下文,对于不同性质的空缺位置,输入单词的概率分布是相同的。
\qquad
比如:第一句中
T
a
i
p
e
i
Taipei
Taipei是目的地,而在第二句中是出发地,那么在这两个空缺的地方,
T
a
i
p
e
i
Taipei
Taipei出现的概率不一定是相同的,而利用FNN计算之后
T
a
i
p
e
i
Taipei
Taipei的概率分布始终是不变的,不符合语义.
RNN:拥有记忆力,考虑上下文内容,相同输入不同概率分布输出的神经网络;
\qquad
隐藏层的输出存储在内存中,网络的输入不光考虑原始的输入也要考虑隐藏层的输出;
\qquad
换句话说就是将隐藏层的输出同时作为输入,影响输出.
输入序列:
\qquad
\qquad
[
1
1
]
[
1
1
]
[
2
2
]
.
.
.
.
.
.
\left[
条件:所有权重
w
w
w均为1;没有偏差
b
i
a
s
bias
bias;所有激活函数均为线性函数.
\qquad
经过网络后
[
h
1
h
2
]
=
[
2
2
]
\left[
\qquad
o
u
p
u
t
=
[
4
4
]
ouput=\left[
\qquad
(2)
i
n
p
u
t
:
[
1
1
]
input:\left[
\qquad
经过网络后
[
h
1
h
2
]
=
[
6
6
]
\left[
\qquad
o
u
p
u
t
=
[
12
12
]
ouput=\left[
\qquad
(3)
i
n
p
u
t
:
[
2
2
]
input:\left[
\qquad
经过网络后
[
h
1
h
2
]
=
[
6
6
]
\left[
\qquad
o
u
p
u
t
=
[
32
32
]
ouput=\left[
\qquad
如果改变输入序列的顺序就会改变输出结果,说明RNN会考虑输入数据的顺序问题,在预测当前结果时,也包括了之前的信息。
RNN 解决引例问题过程:
\qquad
首先将句子当中的每一个单词转换为向量,例如
a
r
r
i
v
e
=
x
1
arrive=x^1
arrive=x1,将
x
1
x^1
x1放入RNN中得到
a
1
a^1
a1,根据
a
1
a^1
a1得到
y
1
y^1
y1,
y
1
y^1
y1是
a
r
r
i
v
e
arrive
arrive在每一个空缺处的概率分布,
a
1
a^1
a1存储起来,同时与
x
2
x^2
x2作为预测
T
a
i
p
e
i
Taipei
Taipei概率分布的输入,说明预测
T
a
i
p
e
i
Taipei
Taipei,考虑到了前面是
a
r
r
i
v
e
arrive
arrive的信息,以此类推。
\qquad
图中的网络中并不是3个RNN,而是同一个RNN在不同的时间点,使用3次.
\qquad
所以当
T
a
i
p
e
i
Taipei
Taipei前面的单词不同时,那么通过
x
1
x^1
x1计算出来的
a
1
a^1
a1的值也是不同的,作为预测
T
a
i
p
e
i
Taipei
Taipei概率的输入也就不同,那么计算出来的概率就是不同的,不同上下文
T
a
i
p
e
i
Taipei
Taipei的概率就是不同的。
\qquad
可以将RNN结构设计为深度网络
RNN分类:
Elman Network :将隐藏单元的输出作为下一次预测的输入
Jordan Network:将上一次的预测输出作为下一次预测的输入
由于中间隐藏层输出结果相对来是不可控,最后的输出结果更有意义,相对来说我们知道memory存的是什么信息,所以 Jordan Network比Elman Network性能更好.
双向RNN(Bidirectional RNN):
RNN可以从正向和反向读取信息,可以先处理
x
t
x^t
xt,也可以先处理
x
t
+
2
x^{t+2}
xt+2,BiRNN输出中间结果
y
t
+
1
y^{t+1}
yt+1时,已经考虑前后两个范围,考虑的信息更多.
比较长的短期记忆
3个门 4输入 1输出
LSTM:一个单元中,有4个输入和1个输出,4个输出=3个控制信号和1个输入
组成成分:
\qquad
输入:2维
\qquad
输出:1维
\qquad
控制门信号:
{
x
2
=
1
x
2
的值存入
m
e
m
o
r
y
x
2
=
−
1
重置
m
e
m
o
r
y
x
3
=
1
输出
m
e
m
o
r
y
的值
\qquad
以第一个输入为例
[
3
1
0
]
\left[
\qquad
得到最后的输出
y
=
0
y=0
y=0,这些参数是训练得到的.
\qquad
原始神经网络和LSTM网络联系
\qquad
原始神经网络结构如图:
\qquad
LSTM结构:用LSTM代替神经网络的神经元;
\qquad
\qquad
\qquad
输入乘以4组参数,作为输入进行计算.
\qquad
LSTM 详细结构
\qquad
\qquad
输入:
x
t
x_t
xt
\qquad
\qquad
\qquad
x
t
x_t
xt分别乘以4个矩阵得到
z
f
z^f
zf,
z
z
z,
z
i
z^i
zi,
z
o
z^o
zo 4个输入向量
\qquad
\qquad
\qquad
z
f
z^f
zf:遗忘门控制信号向量
\qquad
\qquad
\qquad
z
z
z:输入向量
\qquad
\qquad
\qquad
z
i
z^i
zi:输入门控制信号向量
\qquad
\qquad
\qquad
z
o
z^o
zo:输出们控制信号向量
\qquad
\qquad
4个向量进入相应的输入口,进行计算,将向量的每一个维度的值放入LSTM的每一个单元。
取一个维度作为例,计算过程如下:
c
t
=
c
t
−
1
f
(
z
f
)
+
g
(
z
)
f
(
z
i
)
c^{t}=c^{t-1}f(z^f)+g(z)f(z^i)
ct=ct−1f(zf)+g(z)f(zi)
y
t
=
f
(
z
o
)
h
(
c
t
)
y^t=f(z^o)h(c^t)
yt=f(zo)h(ct)
h
t
=
y
t
h^t=y^t
ht=yt
LSTM最终形态
将
c
t
c^t
ct,
h
t
h^t
ht和
x
t
+
1
x^{t+1}
xt+1作为下一次的输入
并且设计多层LSTM
\qquad
学习目标:令
y
1
y^1
y1与相应的向量越相似,交叉熵损失越小
\qquad
训练:
\qquad
\qquad
RNN通过BPTT训练,根据梯度下降更新参数
RNN训练困难
原因:RNN的total loss函数有的地方非常平坦 有的地方陡峭
解决:Clipping 梯度大于某个值就等于这个值
为什么损失函数会出现这种情况?
原因:同样
w
w
w在不同的时间点反复地使用
实例:
w
w
w在很小的范围内,
w
w
w的梯度会很大或很小
LSTM可以解决梯度消失的问题:
原因:Memory cell 和input是相加的关系,除非遗忘门关闭否则对memory的影响不会消失,换句话说遗忘门如果开着,则不会产生梯度消失的问题。如果遗忘门关着才会把memory存储的数据清洗掉,消除原来数据的影响.
多对一:情绪分析Sentiment Analysis
通过阅读一篇文章,判断文章内容表达的情绪是正面或者负面
输入向量序列 输出一个向量
多对多:序列对序列 input长 output短 语音识别
CTC:解决叠字问题
CTC训练问题:
Seq2Seq 不同长度 机器翻译 训练不知道何时停止
添加一个“断” ,作为停止的标志.
超越序列
语法分析:得到文法的结构树
Seq2Seq Auto-encoder-Text
理解单词序列含义不能忽略单词之间的顺序
Seq2Seq Auto-encoder-Speech
语音->向量
RNN encoder和decoder 联合训练joinly train
训练目标 :输出和输入越来越接近.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。