保研专业课复习

记录一下 每天翻一翻

计算机组成原理

https://blog.csdn.net/z4909801/article/details/77976626

机器学习

深度学习中数学基础

https://blog.csdn.net/z4909801/article/details/78360004(概率与统计)
https://blog.csdn.net/z4909801/article/details/78359952(线性代数)

深度学习的python相关

https://blog.csdn.net/z4909801/category_7255195.html
https://blog.csdn.net/qq_33200967/article/details/79759284(numpy)

机器学习知识结构

https://blog.csdn.net/z4909801/article/details/78324459

Attention

https://blog.csdn.net/hahajinbu/article/details/81940355
https://www.leiphone.com/news/201709/8tDpwklrKubaecTa.html

经典RNN(N VS N)

序列形数据 x1 x2 x3 x4
如:

  • 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。

  • 语音处理。此时,x1、x2、x3……是每帧的声音信号。

  • 时间序列问题。例如每天的股票价格等等
    为了建模序列问题,RNN引入了**隐状态h(hidden state)**的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:
    保研专业课复习_第1张图片
    保研专业课复习_第2张图片
    计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记。
    保研专业课复习_第3张图片
    RNN输出
    保研专业课复习_第4张图片
    一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。
    最经典的RNN结构,输入和输出序列必须要是等长的。
    经典RNN的适用范围比较小,但也有一些问题适合用经典的RNN结构建模,如:

  • 计算视频中每一帧的分类标签。因为要对每一帧进行计算,因此输入和输出序列等长。

  • 输入为字符,输出为下一个字符的概率。这就是著名的Char RNN。

N VS 1

输入是一个序列,输出是一个单独的值
保研专业课复习_第5张图片
通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

1 VS N

保研专业课复习_第6张图片
OR 输入信息X作为每个阶段的输入:
保研专业课复习_第7张图片
1 VS N的结构可以处理的问题有:

  • 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子

  • 从类别生成语音或音乐等

N VS M(Seq2Seq)

RNN最重要的一个变种:N vs M。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。
原始的N vs N RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

为此,Encoder-Decoder结构先将输入数据编码成一个上下文向量c
保研专业课复习_第8张图片
把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中:
保研专业课复习_第9张图片
还有一种做法是将c当做每一步的输入
保研专业课复习_第10张图片
这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

  • 机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的

  • 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。

  • 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。

  • 语音识别。输入是语音信号序列,输出是文字序列。

Attention机制

在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。
Attention机制通过在每个时间输入不同的c来解决这个问题。
保研专业课复习_第11张图片
**每一个c会自动去选取与当前所要输出的y最合适的上下文信息。**具体来说,我们用aij衡量Encoder中第j阶段的hj和解码时第i阶段的相关性,最终Decoder中第i阶段的输入的上下文信息ci就来自于所有hj对aij的加权和。
保研专业课复习_第12张图片
输入的序列是“我爱中国”,因此,Encoder中的h1、h2、h3、h4就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文c1应该和“我”这个字最相关,因此对应的a11就比较大,而相应的a12、a13、a14就比较小。c2应该和“爱”最相关,因此对应的a22就比较大。最后的c3和h3、h4最相关,因此a33 a34的值就比较大。
至此,关于Attention模型,我们就只剩最后一个问题了,那就是:这些权重 aij 是怎么来的?
事实上, aij同样是从模型中学出的,它实际和Decoder的第i-1阶段的隐状态、Encoder第j个阶段的隐状态有关。
同样还是拿上面的机器翻译举例, a1j 的计算(此时箭头就表示对h’和hj同时做变换):
保研专业课复习_第13张图片
a2j 的计算:
保研专业课复习_第14张图片

attention的一个通用定义

按照Stanford大学课件上的描述,attention的通用定义如下:

  • 给定一组向量集合values,以及一个向量query,attention机制是一种根据该query计算values的加权求和的机制。

  • attention的重点就是这个集合values中的每个value的“权值”的计算方法。

  • 有时候也把这种attention的机制叫做query的输出关注了(或者说叫考虑到了)原文的不同部分。(Query attends to the values)

举例:刚才seq2seq中,哪个是query,哪个是values?
each decoder hidden state attends to the encoder hidden states (decoder的第t步的hidden state----st是query,encoder的hidden states是values)
从定义来看Attention的感性认识:

The weighted sum is a selective summary of the information contained in the values, where the query determines which values to focus on.
换句话说,attention机制就是一种根据某些规则或者某些额外信息(query)从向量表达集合(values)中抽取特定的向量进行加权组合(attention)的方法。简单来讲,只要我们从部分向量里面搞了加权求和,那就算用了attention。

你可能感兴趣的:(保研)