用心努力
- 反向传播
- 语义表达
- 序列建模
一、反向传播
1、前情提要
神经网络的模型:
y=f(x)=σ(WL...σ(W2σ(W1x+b)))
不同的W,b对应着不同的模型,重新定义模型为
f(x,θ)
θ={W1,b1,W2,b2,...WL,bL}
Wl=⎧⎩⎨⎪⎪wl11wl21...wl12wl22............⎫⎭⎬⎪⎪
bl=⎧⎩⎨⎪⎪bl1bl2...⎫⎭⎬⎪⎪
最好的模型参数:
θ∗=argminθC(θ)
从
θ0
开始迭代:
θ1←θ0−η∂C(θ0)∂θ
…
θi+1←θi−η∂C(θi)∂θ
Mini-Batch SGD
现在模型,损失函数,算法都有,那要怎么求偏导,太麻烦了,引出backprogation方法。
2、引言
a) 什么是forward progation呢?
信息从input X通过神经网络流向output Y的过程就是forward progation,所以在训练的时候,有一层一旦发生变化就会影响下一层,直到影响到最后的输出
C(θ)
。
总得来说就是从Input来,最终通过网络层流向最后output。
b) 什么是back progation呢?
刚好和forward相反,信息从最后的output C(θ) 回推到前面,用于计算偏导。
c) chain rule
Δw ⇒ Δx ⇒ Δy ⇒ Δz
∂z∂w=∂z∂y∂y∂x∂x∂w
公式太长了不写了。记点重要的。
∂C(θ)∂wlij=∂C(θ)∂zli∂zli∂wlij
δli
:
∂C(θ)∂zli
表明损失函数往上传播给第l层的相应梯度。每一层都有相应的该值。
有效率的方法应当是先算出最后层梯度然后一个往前推。
算法:
- 从L到1来算 δ
- 初始化:计算 δL , δLi=∂C∂zLi=∂C∂yiσ′(zLi) ,其中 ∂C∂yi 由损失函数决定。 δL=σ′(zLi)⨀∂C∂y
- 基于 δl 计算 δl+1 : δli=σ′(zi)Σwl+1kiσl+1k , δl=σ′(zl)⨀(Wl+1)Tδl+1
小结:
二、语义表达
我们怎么表示文字上的语义呢?
1、什么叫语义?
- 由词语、短语等表达的想法
- 一个人用言语,叹息等来表达的想法
- 写作、艺术作品等要表达的想法
word representations:捕获词语之间的关系
- Knowledge-based representation
- Corpus-based representation
- Atomic symbol
- Neighbors
- High-dimensional sparse word vector
- Low-dimensional dense word vector
- Method 1 – dimension reduction
- Method 2 – direct learning
2、Knowledge-based representation
非常传统的word representation。Hypernyms (is-a上位词) relationships of WordNet,类似于分类吧。
这种方法有很多问题:
- 每天都有很多新的词汇诞生,这种方法很不实际
- 太过主观
- 注释开销太大
- 难于计算词语间的相似性
3 、Atomic symbol
one-hot编码不就是这样的嘛。
这种方法也有问题:难于计算词语间的相似性。因为从设计层面讲,两个词语就已经完全独立的了。
4、 High-dimensional sparse word vector
Neighbors这种方法类似于做阅读理解,根据上下文去猜这个词到底什么意思,因此将统计的邻近词个数作为非常传统的word representation。Hypernyms (is-a上位词) relationships of WordNet,类似于分类吧。可以构造一个co-occurrence matrix。
有两种Neighbors方法:
- full document:从全文构造co-occurrence matrix,给出一般主题,像财经,科技,政治等与词语之间的关系
- windows:从一定段落构造co-occurrence matrix,给出语义、语法等与词语之间的关系,焦点在这个词的本身
co-occurrence matrix的例子:
co-occurrence matrix可以看做:词语(n样本个数)*邻近词(m特征数)
这种方法也有很多问题:
- 词越多矩阵递增
- 高维度
- 注释开销太大
- 矩阵稀疏
总的来说,产生了一个值相对较多,但分布十分散乱的矩阵,这种矩阵计算复杂度要增加。
5、 Low-dimensional dense word vector – dimension reduction
利用SVD分解co-occurrence matrix,然后取前K个奇异值和其相应的特征向量,再重新相乘并相加,构造一个由前K个重要奇异值组成的co-occurrence matrix,这样矩阵就能从High-dimensional sparse变成Low-dimensional dense。
这种方法也有很多问题:
- 一次SVD的复杂度为 o(mn2)
- 每个新的词汇诞生,都要SVD一次
6、Low-dimensional dense word vector – direct learning
既然先学到一个high-dimensional的路那么不好走,那就直接学一个Low-dimensional的word vectors吧。
具有代表性的方法有word2vec和glove,统称word embedding词嵌入。
word2vec的目的:能够预测给定词的周围会出现的词语。
word2vec的优点:快,能轻易的加入新词汇或新句子。
word2vec的目标函数:最大化这个给定词汇,周围文中出现词分布的似然率
利用相似度来表征center word周围的outside word出现的条件概率。相似度有很多理解,不能太片面,比如说,给定一组词汇也就是context,判断它的主题,那么日本、中国和守卫、南海的相似度就很大,但判断的是词性,相似度就变小了。相似度是由内积再求平均得到,该相似度的定义也很形象了。相似度来代表某词出现的概率,将已有context结构的似然率最大化。
因此模型也是动态的,会随着context的不同,model要随时更新。神经网络的原理刚好符合,信息前向传播,误差后向传播,信息不同,模型不同。
三、序列建模
a) network能随便选?
network也是需要根据input和output的domain来进行选择的,并且很影响最后的效果
b) 长一点的语句怎么表达?
那么我们肯定是希望把这个长一点的语句也映射到之间建立的word vector 空间里去。
c) Word Embedding的优点
词库可以是unlabel的,但是最后能为每一个词生成一个vector来表征语义信息。这个vector也是很有用的:
- 计算词的相似度
- 为NLP打基础
- 实时更新
d) Sequence Modeling
- 一般方法: average, sum
- Neural combination
- Recursive neural network (RvNN)
- Recurrent neural network (RNN)
- Convolutional neural network (CNN)