学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/248
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!
本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。
现在,我们正在为你准备成为 DL+NLP 研究人员/实践者
课程不会总是有所有的细节
作业的设计是为了应付项目的真正困难
《Natural Language Processing with PyTorch: Build Intelligent Language Applications Using Deep Learning》
(卷积神经网络相关内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章 深度学习教程 | 卷积神经网络解读
循环神经网络不能捕获没有前缀上下文的短语
经常在最终向量中捕获的信息太多来自于最后的一些词汇内容
例如:softmax通常只在最后一步计算
CNN / Convnet 的主要思路:
例如:tentative deal reached to keep government open
计算的向量为
不管短语是否合乎语法
在语言学上或认知上不太可信
然后将它们分组 (很快)
一维离散卷积一般为:(f∗g)[n]=∑Mm=−Mf[n−m]gm[n]=∑m=−MMf[n−m]g[m](f \ast g)[n]=\sum_{m=-M}^{M} f[n-m] g[m]
卷积通常地用于从图像中提取特征
二维示例:
输入长度为 LLL 的词序列
多个channel,则最终得到多个 channel 的输出,关注的文本潜在特征也不同
| | batch\_size= 16 |
| | word\_embed\_size= 4 |
| | seq\_len= 7 |
| | input = torch.randn(batch\_size, word\_embed\_size, seq\_len) |
| | conv1 = Conv1d(in\_channels=word\_embed\_size, out\_channels=3, kernel\_size=3) # can add: padding=1 |
| | hidden1 = conv1(input) |
| | hidden2 = torch.max(hidden1, dim=2) # max pool |
扩张卷积 / 空洞卷积
补充讲解 / Summary
ci=f(wTxi:i+h−1+b)ci=f(wTxi:i+h−1+b)c_{i}=f\left(\mathbf{w}^{T} \mathbf{x}_{i : i+h-1}+b\right)
池化:max-over-time pooling layer
想法:捕获最重要的激活(maximum over time)
从feature map中 c=[c1,c2,…,cn−h+1]∈Rn−h+1c=[c1,c2,…,cn−h+1]∈Rn−h+1\mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1}
池化得到单个数字 c=max{c}c=max{c}\hat{c}=\max {\mathbf{c}}
使用多个过滤器权重 www
不同窗口大小 hhh 是有用的
由于最大池化 c=max{c}c=max{c}\hat{c}=\max {\mathbf{c}},和 ccc 的长度无关
c=[c1,c2,…,cn−h+1]∈Rn−h+1c=[c1,c2,…,cn−h+1]∈Rn−h+1\mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1}
静态
首先是一个卷积,然后是一个最大池化
为了获得最终的特征向量 z=[c1,…,cm]z=[c1,…,cm]\mathbf{z}=\left[\hat{c}_{1}, \dots, \hat{c}_{m}\right]
最终是简单的 softmax layer y=softmax(W(S)z+b)y=softmax(W(S)z+b)y=\operatorname{softmax}\left(W^{(S)} z+b\right)
补充讲解
filter_size : (2,3,4)
,并且每个 size 都是用两个 filter,获得两个 channel 的 feature,即共计 6 个 filter使用 Dropout:使用概率 ppp (超参数) 的伯努利随机变量(只有0 1并且 ppp 是为 111 的概率)创建 mask 向量 rrr
训练过程中删除特征
y=softmax(W(S)(r∘z)+b)y=softmax(W(S)(r∘z)+b)y=\operatorname{softmax}\left(W^{(S)}(r \circ z)+b\right)
W(S)=pW(S)W(S)=pW(S)\hat{W}^{(S)}=p W^{(S)}
Dropout 提供了 2−4%2−4%2 - 4 % 的精度改进
但几个比较系统没有使用 Dropout,并可能从它获得相同的收益
仍然被视为一个简单架构的显著结果
与我们在前几节课中描述的窗口和 RNN 架构的不同之处:池化、许多过滤器和 Dropout
这些想法中有的可以被用在 RNNs 中
词袋模型 / Bag of Vectors:对于简单的分类问题,这是一个非常好的基线。特别是如果后面有几个 ReLU 层 (See paper: Deep Averaging Networks)
词窗分类 / Window Model:对于不需要广泛上下文的问题 (即适用于 local 问题),适合单字分类。例如 POS、NER
卷积神经网络 / CNN:适合分类,较短的短语需要零填充,难以解释,易于在 gpu 上并行化
循环神经网络 / RNN:从左到右的认知更加具有可信度,不适合分类 (如果只使用最后一种状态),比 CNNs 慢得多,适合序列标记和分类以及语言模型,结合注意力机制时非常棒
补充讲解
我们在 LSTMs 和 GRUs 中看到的 门/跳接 是一个普遍的概念,现在在很多地方都使用这个概念
你还可以使用 **纵向**
的门
实际上,关键的概念——用快捷连接对候选更新求和——是非常深的网络工作所需要的
Note:添加它们时,请将 xxx 填充成conv一样的维度,再求和
常用于 CNNs
通过将激活量缩放为零均值和单位方差,对一个 mini-batch 的卷积输出进行变换
使用 BatchNorm 使模型对参数初始化的敏感程度下降,因为输出是自动重新标度的
PyTorch:nn.BatchNorm1d
1x1的卷积有作用吗?是的。
1x1 卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为1的卷积内核
1x1 卷积提供了一个跨通道的全连接的线性层
它可以用于从多个通道映射到更少的通道
1x1 卷积添加了额外的神经网络层,附加的参数很少
Recurrent Continuous Translation Models
整个系统和视觉神经网络模型中的 VGG 和 ResNet 结构有点像
不太像一个典型的深度学习 NLP 系统
结果是固定大小,因为文本被截断或者填充成统一长度了
每个阶段都有局部池化操作,特征数量 double
补充讲解
ztftot=tanh(W1zxt−1+W2zxt)=σ(W1fxt−1+W2fxt)=σ(W1oxt−1+W2oxt)zt=tanh(Wz1xt−1+Wz2xt)ft=σ(Wf1xt−1+Wf2xt)ot=σ(Wo1xt−1+Wo2xt)\begin{aligned}
\mathbf{z}_{t} &=\tanh \left(\mathbf{W}_{z}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{z}^{2} \mathbf{x}_{t}\right) \
\mathbf{f}_{t} &=\sigma\left(\mathbf{W}_{f}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{f}^{2} \mathbf{x}_{t}\right) \
\mathbf{o}_{t} &=\sigma\left(\mathbf{W}_{o}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{o}^{2} \mathbf{x}_{t}\right)
\end{aligned}
ZFO=tanh(Wz∗X)=σ(Wf∗X)=σ(Wo∗X)Z=tanh(Wz∗X)F=σ(Wf∗X)O=σ(Wo∗X)\begin{aligned}
\mathbf{Z} &=\tanh \left(\mathbf{W}_{z} * \mathbf{X}\right) \
\mathbf{F} &=\sigma\left(\mathbf{W}_{f} * \mathbf{X}\right) \
\mathbf{O} &=\sigma\left(\mathbf{W}_{o} * \mathbf{X}\right)
\end{aligned}
ht=ft⊙ht−1+(1−ft)⊙ztht=ft⊙ht−1+(1−ft)⊙zt\mathbf{h}_{t}=\mathbf{f}_{t} \odot \mathbf{h}_{t-1}+\left(1-\mathbf{f}_{t}\right) \odot \mathbf{z}_{t}
对于字符级的 LMs 并不像 LSTMs 那样有效
通常需要更深入的网络来获得与 LSTM 一样好的性能
我们希望能够并行加速,但 RNN 是串行的
尽管 GRUs 和 LSTMs,RNNs 通过注意力机制可以捕捉到长时依赖,但随着序列增长,需要计算的路径也在增长
如果注意力机制本身可以让我们关注任何位置的信息,可能我们不需要 RNN?
可以点击 B站 查看视频的【双语字幕】版本
【双语字幕+资料下载】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)