一. 吴恩达深度学习第五课序列模型第一周
1.1 为什么选择序列模型
语音识别:给出一段语音,要求输出对应的文本。
语音识别,音乐生成,情感分类,DNA序列分析,机器翻译,视频行为识别,名字实体识别。
1.2 数学符号
1.3 循环神经网络
标准神经网络存在的问题:
输入和输出在不同的样本中有不同的长度;通过文本的不同位置不能够共享学习到的特征。
单向循环神经网络只能记录上文信息,而不能利用下文信息,为了解决这个问题,可以采取双向循环神经网络。
1.4 通过时间的反向传播
穿越时间的反向传播,图上做的是名字实体识别任务,判断一个单词是否是名字,则每个对应的
y
^
<
i
>
\hat{y}^{<i>}
y^?<i>是一个概率值。
1.5 不同类型的循环神经网络
情感分类,多对一结构的RNN:
音乐生成,一对多结构的RNN:
机器翻译,不同长度多对多结构的RNN:
汇总:
1.6 语言模型和序列生成
语言模型是RNN的应用之一,就是用来训练语料库,生成新序列。
此处的第一个输入为零向量,使输出逼近cat使,之后的每一个输入都是前一个词向量,注意不是指
y
^
\hat{y}
y^?,而是真实值y。
1.7 新序列采样
采样的意思就是利用已经训练好的模型来生成序列。
基于字符的语言模型训练成本较高,且不如基于词汇的语言模型可以捕捉长范围的关系。
1.8 带有神经网络的梯度消失
普通的RNN不擅长捕获长距离依赖关系。反向传播时最后神经元的梯度的影响很难传到最前面几个神经元。
梯度爆炸可以很明显被发现,使用梯度修剪可以解决。
1.9 GRU单元
画红线的加号左边表示加入多少新的候选值,右边表示保留多少上个记忆细胞的值。因为变量经过sigmoid函数操作后输出的函数值十分接近零或者一,所以sigmoid函数就可以控制保留还是剔除。加入这个记忆门gamma很好地解决了梯度消失的问题,因为gamma如果一直接近零时,记忆细胞的值可以长距离传输。
GRU的另一种变形,Full GRU,加入gamma_r用来控制上一层记忆细胞的值有多少传输给这一层记忆细胞候选值。
1.10 长短期记忆网络(LSTM)
GRU的模型结构更简单,更适合去组建复杂的网络。LSTM更加灵活和强大。
1.11双向神经网络
双向传播,注意不是那个正宗的反向传播。a1 - a2- a3-a4-a3-a2-a1。
疑问:这个传播的参数,都是用的相同的吗?上面的式子为啥不加输入变量x?
1.12 深层循环神经网络
二. CCF CSP201903
- 小中大
#include <iostream>
#include <set>
#include <utility>
#include <algorithm>
# include <algorithm>
using namespace std;
const int MAX = 100010;
int n;
int x,y;
int amount[10];
int max_v,min_v,mid_v;
int a[MAX];
int flag = 0;
int main(){
scanf("%d",&n);
for(int i = 1; i<=n;i++) scanf("%d",&a[i]);
if(a[n] > a[1]){
max_v = a[n];
min_v = a[1];
}else{
max_v = a[1];
min_v = a[n];
}
if(n%2!=0){
mid_v = a[n/2 + 1];
}else{
if((a[n/2] +a[n/2 +1])%2 ==0){
mid_v = (a[n/2] +a[n/2 +1])/2;
}else{
flag = 1;
mid_v = (a[n/2] +a[n/2 +1])/2;
}
}
if(!flag){
printf("%d %d %d",max_v,mid_v,min_v);
}else{
printf("%d %d.5 %d",max_v,mid_v,min_v);
}
return 0;
}
|