DeepLearning-Notes


Logo

在线阅读>>

代码案例 · 参考资料

深度学习实战

在深度学习篇中,我们将了解深度学习的历史与理论。深度学习的起点即是所谓的神经网络(Neural Network

mindmap

NN |神经网络基础

神经网络层的基本组成成员为神经元,神经元包含两部分,一部分是上一层网络输出和当前网络层参数的一个线性乘积,另外一部分是线性乘积的非线性转换;如果缺少非线性转换,则多层线性乘积可以转化为一层的线性乘积。

$$ \begin{array}{l}{\mathrm{H}(\mathrm{in})=\Sigma=\mathrm{W}{1} \star \mathrm{x}{1}+\mathrm{W}{2} \star \mathrm{x}{2}+\mathrm{W}{3} \star \mathrm{x}{3}+\mathrm{b}} \ {\mathrm{H}(\mathrm{out})=\sigma(\Sigma)}\end{array} $$

一个神经网络结构通常包含输入层,隐藏层,输出层。输入层是我们的 特征(features,输出层是我们的预测(prediction。神经网络的目的是拟合一个函数$f*: features -> prediction$,在训练期间,通过减小prediction和 实际label的差异的这种方式,来更改网络参数,来使当前的网络能逼近于理想的函数$f*$。而对于仅有单个隐藏层的神经网络,我们称为浅层神经网络:

相对于浅层网络结构,有两层,三层及以上隐藏层的我们就可以称为深度网络:

在通常的理解中,一个足够宽的网络,是能够拟合任何函数的。而一个深层网络,则能够用更少的参数来拟合该函数,因为深层的神经元可以获取比浅层神经元更复杂的特征表示。

而根据网络层级间不同的反馈方式,我们又可以将其区分为前馈神经网络、反馈神经网络、双向神经网络以及循环神经网络等:

CNN |卷积网络

前文中提及的神经网络,不同层间的神经元之间两两皆有关联,隐藏层的神经元会和上一层所有的神经元输出相关。和全连接网络相对应的,是只和上一层部分神经元输出连接的网络,如卷积网络。

卷积网络神经元只和上一层的部分神经元输出是连接的,在直觉上,是因为人的视觉神经元触突只对局部信息敏感,而不是全局所有信息都对同一个触突产生等价作用。

同一个卷积核从左到右,从上到下和输入做乘积,得到了不同强度的输出。从直觉上来理解,卷积核对原始数据的不同数据分布的敏感度是不一样的。如果把卷积核理解为是某种模式,那么符合这种模式 的数据分布会得到比较强的输出,而不符合这种模式 的输出则得到弱的,甚至是不输出。

一个卷积核是一个模式提取器,多个卷积核就是多个模式提取器。通过多个特征提取器对原始数据做特征提取转换,就构成了一层卷积。

Alex Net,因为GPU内存的原因,Alex使用了两块GPU对模型做了切割,本质上的卷积层是用于特征提取,最大池化层用于提取强特征及减少参数,全连接层则是所有高级特征参与到最后分类决策中去。

RNN |循环神经网络

CNN是对空间上特征的提取,RNN则是对时序上特征的提取。在直觉上,我们理解RNN网络是一个可模拟任何函数的一个神经网络(action),加上同时有一份自己的历史存储(memory)action+memory两者让RNN成为了一个图灵机器。

RNN中,$x_1$, $x_2$, $x_3$, $x_t$是在时序上不一样的输入,而$V$,$U$,$W$三个矩阵则是共享。同时RNN网络中保存了自己的状态$S$$S$随着输入而改变,不同的输入/不同时刻的输入或多或少影响RNN网络的状态$S$。而RNN网络的状态$S$则决定最后的输出。

LSTM |长短期记忆网络

RNN的问题是非线性操作$σ$的存在且每一步间通过连乘操作传递,会导致长序列历史信息不能很好的传递到最后,而有了LSTM网络。

LSTM Cell中,包含了通常意义上的遗忘门(点乘,决定什么要从状态中去除,输入更新门(按位相加,决定什么要添加到状态中去,输出门(点乘,决定状态的输出是什么

LSTM本质上是矩阵的运算,后续LSTM的变种GRU如下:

NLP |自然语言处理

TextCNN |文本卷积网络

CNN在计算机识别领域中应用广泛,其捕捉局部特征的能力非常强,为分析和利用图像数据的研究者提供了极大的帮助。TextCNN2014KimEMNLP上提出将CNN应用于NLP的文本分类任务中。

从直观上理解,TextCNN通过一维卷积来获取句子中n-gram的特征表示。TextCNN对文本浅层特征的抽取能力很强,在短文本领域如搜索、对话领域专注于意图分类时效果很好,应用广泛,且速度快,一般是首选;对长文本领域,TextCNN主要靠filter窗口抽取特征,在长距离建模方面能力受限,且对语序不敏感。

文本卷积与图像卷积的不同之处在于只在文本序列的一个方向做卷积。对句子单词每个可能的窗口做卷积操作得到特征图(feature map)

$$ \mathrm{c}=\left[\mathrm{c}{1}, \mathrm{c}{2}, \ldots, \mathrm{c}_{\mathrm{n}-\mathrm{h}+1}\right] $$

其中$\mathrm{c} \in \mathrm{R}^{n-h+1}$,对feature map做最大池化(max-pooling)操作,取中最大值 max{c} 作为filter提取出的feature。通过选择每个feature map的最大值,可捕获其最重要的特征。每个filter卷积核产生一个feature,一个TextCNN网络包括很多不同窗口大小的卷积核,如常用的 filter size ∈ {3,4,5} 每个filterfeature maps=100

Transformer

Attention此前就被用于众多NLP的任务,用于定位关键token或者特征,比如在文本分类的最后加一层Attention来提高性能。Transformer起源自注意力机制(Attention,完全抛弃了传统的RNN,整个网络结构完全是由Attention机制组成。Transformer可以通过堆叠Transformer Layer进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值的新高。

N=2示例,Encoder阶段:输入“Thinking Machines”,对应词向量,叠加位置向量Positional Encoding,对每个位置做Self-Attention得到; Add&Norm分两步,residual connection,layer Normalization得到新的,对每个位置分别做feed forward全连接和Add&Norm,得到一个Encoder Layer的输出,重复堆叠2次,最后将Encoder Layer输出到DecoderEncoder-Decoder Layer层。

Decoder阶段:先是对Decoder的输入做Masked Self-Attention Layer,然后将Encoder阶段的输出与Decoder第一级的输出做Encoder-Decoder Attention,最后接FFN全连接,堆叠2Decoder,最后接全连接+Softmax输出当前位置概率最大的的词。

Transformer的优点:

  • 并行计算,提高训练速度。这是相比LSTM很大的突破,LSTM在训练的时候,当前步的计算要依赖于上一步的隐状态,这是一个连续过程,每次计算都需要等之前的计算完成才能展开,限制模型并行能力。而Transformer不用LSTM结构, Attention机制的每一步计算只是依赖上一层的输出,并不依赖上一词的信息,因而词与词之间是可以并行的,从而训练时可以并行计算,提高训练速度。

  • 一步到位的全局联系捕捉。顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力。Transformer使用了Attention机制,从而将序列中的任意两个位置之间的距离是缩小为1,这对解决NLP中棘手的长期依赖问题是非常有效的。

总结对比CNNRNNSelf-Attention

  • CNN:只能看到局部领域,适合图像,因为在图像上抽象更高层信息仅仅需要下一层特征的局部区域,文本的话强在抽取局部特征,因而更适合短文本。

  • RNN:理论上能看到所有历史,适合文本,但是存在梯度消失问题。

  • Self-Attention:相比RNN不存在梯度消失问题。对比CNN更加适合长文本,因为能够看到更远距离的信息,CNN叠高多层之后可以看到很远的地方,但是CNN本来需要很多层才能完成的抽象,Self-Attention在很底层就可以做到,这无疑是非常巨大的优势。

BERT

BERT (Bidirectional Encoder Representations from Transformers)本质来讲是NLP领域最底层的语言模型,通过海量语料预训练,得到序列当前最全面的局部和全局特征表示。

BERT网络结构如下所示,BERTTransformerEncoder网络结构完全相同。假设Embedding向量的维度是,输入序列包含ntoken,则BERT模型一个layer的输入是一个的矩阵,而它的输出也同样是一个的矩阵,所以这样NBERT layer就可以很方便的首尾串联起来。BERTlarge model使用了N=24层这样的Transformer block

BERT的主要贡献有以下几个方面

  • 预训练的有效性:这方面来说BERT改变了游戏规则,是因为相比设计复杂巧妙的网络结构,在海量无监督数据上预训练得到的BERT语言表示+少量训练数据微调的简单网络模型的实验结果取得了很大的优势。

  • 网络深度:基于DNN语言模型(NNLMCBOW)获取词向量的表示已经在NLP领域获得很大成功,而BERT预训练网络基于TransformerEncoder,可以做的很深。

  • 双向语言模型:在BERT之前,ELMoGPT的主要局限在于标准语言模型是单向的,GPT使用TransformerDecoder结构,只考虑了上文的信息。ELMo从左往右的语言模型和从右往左的语言模型其实是独立开来训练的,共享embedding,将两个方向的LSTM拼接并不能真正表示上下文,其本质仍是单向的,且多层LSTM难训练。

  • 目标函数:对比语言模型任务只做预测下一个位置的单词,想要训练包含更多信息的语言模型,就需要让语言模型完成更复杂的任务,BERT主要完成完形填空和句对预测的任务,即两个loss:一个是Masked Language Model,另一个是Next Sentence Prediction

Nav |关联导航

About |关于

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Acknowledgements

  • Awesome-Lists: 📚 Guide to Galaxy, curated, worthy and up-to-date links/reading list for ITCS-Coding/Algorithm/SoftwareArchitecture/AI. 💫 ITCS-编程/算法/软件架构/人工智能等领域的文章/书籍/资料/项目链接精选。

  • Awesome-CS-Books: :books: Awesome CS Books/Series(.pdf by git lfs) Warehouse for Geeks, ProgrammingLanguage, SoftwareEngineering, Web, AI, ServerSideApplication, Infrastructure, FE etc. :dizzy:优秀计算机科学与技术领域相关的书籍归档。

笔者所有文章遵循知识共享 署名-非商业性使用-禁止演绎4.0国际许可协议,欢迎转载,尊重版权。您还可以前往 NGTE Books 主页浏览包含知识体系、编程语言、软件工程、模式与架构、Web与大前端、服务端开发实践与工程架构、分布式基础架构、人工智能与深度学习、产品运营与创业等多类目的书籍列表:

NGTE Books