• 作者:韩信子@ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/35
  • 本文地址:http://www.showmeai.tech/article-detail/225
  • 申明:版权所有,转载请分割平台与作者并注明出处

珍藏ShowMeAI查看更多精彩内容


本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在这里查看。

引言

在ShowMeAI前一篇文章 CNN利用:人脸识别和神经格调转换 中咱们对以下内容进行了介绍:

  • 人脸识别
  • Siamese网络
  • 三元组损失Triplet loss
  • 人脸验证
  • CNN表征
  • 神经网络格调迁徙
  • 1D与3D卷积

本篇内容开始咱们将对吴恩达老师的第5门课《Recurrent Neural Networks》进行总结梳理。这门课次要介绍循环神经网络(RNN)的基本概念、模型构造细节和具体利用。

自然语言(文本)和音频都是时序前后互相关联的数据,对于这些序列数据咱们会应用非凡的神经网络:循环神经网络(Recurrent Neural Network,RNN)来进行解决。应用RNN实现的利用包含下图中所示

  • 语音辨认
  • 音乐发生器
  • 情感分类
  • DNA序列剖析
  • 机器翻译
  • 视频动作辨认
  • 命名实体辨认

1.数学符号

咱们来看一个自然语言解决中「命名实体辨认」的例子,理解一下序列模型的数学符号命名规定。

示例语句为:王刚和李明去下班了

该句话蕴含9个字,简略地示意\( y\) 即为\( 1 \times 9\) 向量,每位对应字是否为人名的一部分,\( 1\) 示意是,\( 0\) 示意否。很显著,该句话中「王」,「刚」,「李」,「明」均是人名成分,所以,对应的输入\( y\) 可示意为:

$$y = \begin{bmatrix} 1\\ 1\\ 0\\ 1\\ 1\\ 0\\ 0\\ 0\\ 0\end{bmatrix} $$

用\( y^{\left \langle t \right \rangle}\) 示意序列对应地位的输入,应用\( T_y\) 示意输入序列长度,咱们有\( 1\leq t\leq T_y\) 。

咱们把输出\( x\) 示意为:

$$x = \begin{bmatrix} x^{\left \langle 1 \right \rangle}\\ x^{\left \langle 2 \right \rangle}\\ x^{\left \langle 3 \right \rangle}\\ x^{\left \langle 4 \right \rangle}\\ x^{\left \langle 5 \right \rangle}\\ x^{\left \langle 6 \right \rangle}\\ x^{\left \langle 7 \right \rangle}\\ x^{\left \langle 8 \right \rangle}\\ x^{\left \langle 9 \right \rangle}\end{bmatrix} $$

其中,\( x^{\left \langle t \right \rangle}\) 示意序列对应地位的输出,\( T_x\) 示意输出序列长度。留神,在以后序列标注示例汇总,\( T_x=T_y\) ,其余序列问题也存在\( T_x\neq T_y\) 的状况。

咱们用什么样的形式来示意\( x^{\left \langle t \right \rangle}\) 呢,在机器学习场景下咱们仍旧心愿是向量化的表征,一种办法是咱们会构建一个囊括大部分呈现的字的词汇库vocabulary。例如一个蕴含10000个字的词汇库为:

$$\left[\begin{matrix}我 \\你 \\\cdot \\\cdot \\\cdot \\王 \\\cdot \\\cdot \\\cdot \\刚 \\\cdot \\\cdot \\\cdot \\置\end{matrix}\right]$$

该词汇库可看成是\( 10000 \times 1\) 的向量。留神,在自然语言解决中,针对不同的问题,咱们构建的词汇库的根底元素是不一样的,命名实体辨认场景下会用字,有些场景下会用词(中文有分词操作),有些大型工作下的词汇库可达百万级别的词汇量。

构建了词汇库之后,能够基于one-hot编码,把居中每个\( x^{\left \langle t \right \rangle}\) 都示意成\( 10000 \times 1\) 的向量,词汇表中与\( x^{\left \langle t \right \rangle}\) 对应的地位为1,其它地位为0。有时候会呈现词汇表之外的单词,能够应用UNK或其余字符串来占位示意。

多样本的状况,以上序列模型对应的命名规定可示意为:\( X^{(i){\left \langle t \right \rangle}}\) ,\( y^{(i){\left \langle t \right \rangle}}\) ,\( T_x^{(i)}\) ,\( T_y^{(i)}\) 。其中,\( i\) 示意第\( i\) 个样本。不同样本的\( T_x^{(i)}\) 或\( T_y^{(i)}\) 都有可能不同。

2.循环神经网络模型

对于序列模型,如果应用规范的神经网络,其模型构造如下:

应用规范的神经网络模型存在两个问题:

不同样本的输出序列长度或输入序列长度不同,即\( T_x^{(i)}\neq T_x^{(j)}\) ,\( T_y^{(i)}\neq T_y^{(j)}\) ,造成模型难以对立

  • 解决办法之一是设定一个最大序列长度,对每个输出和输入序列补零并对立到最大长度。然而这种做法实际效果并不现实。

规范神经网络构造无奈共享序列不同\( x^{\left \langle t \right \rangle}\) 之间的特色

  • 例如,如果某个\( x^{\left \langle t \right \rangle}\) 即「王」是人名成分,那么句子其它地位呈现了「王」,也很可能也是人名。这是共享特色的后果,如同CNN网络特点一样。然而,上图所示的网络不具备共享特色的能力。
  • 共享特色还有助于缩小神经网络中的参数数量,肯定水平上减小了模型的计算复杂度。例如上图所示的规范神经网络,假如每个\( x^{\left \langle t \right \rangle}\) 扩大到最大序列长度为100,且词汇表长度为10000,则输出层就曾经蕴含了\( 100 \times 10000\) 个神经元了,权重参数很多,运算量将是宏大的。

综上,咱们理解到规范神经网络和CNN都不适宜解决序列建模问题,而有一类神经网络:循环神经网络(Recurrent Neural Network,RNN)十分善于解决序列建模问题的。它的典型构造如下:

这是一个沿着序列从左到右顺次传递(开展)的模型。下面的例子中,输入输出长度间接有\( T_x=T_y\) 的关系。模型里\( x^{\left \langle t \right \rangle}\) 与\( \hat{y}^{\left \langle t \right \rangle}\) 之间是暗藏神经元。\( a^{\left \langle t \right \rangle}\) 会传入到第\( t+1\) 个元素中,作为输出。初始的\( a^{{\left \langle t \right \rangle}}\) 个别为零向量。

RNN蕴含三类权重系数\( W_{ya},W_{aa},W_{ax}\) 且每个工夫步是共享这3组权重的。如下图所示:

2.1 前向流传(Forward Propagation)

咱们来开展看看RNN,下图是每个工夫步的神经元开展的内部结构:

前向流传过程的计算公式如下:

公式中:

  • \( g_1\) 是激活函数,通常抉择\( tanh\) ,有时也用ReLU。
  • \( g_2\) 可选sigmoid或Softmax,取决于解决的问题和须要的输入类型。
  • 图示中RNN Cell的函数,是上方公式的一个特例,是最罕用的原始状态RNN。

咱们简化一下公式,把\( W_{aa}\) 、\( W_{ax}\) 程度并列为一个矩阵\( W_a\) ,同时\( a^{\left \langle t-1 \right \rangle}\) 和\( x^{\left \langle t \right \rangle}\) 重叠成一个矩阵。能够失去如下的简化版前向流传计算公式:

$$W_a = [W_{aa}, W_{ax}]$$

$$a^{\left \langle t \right \rangle} = g_1(W_a [a^{\left \langle t-1 \right \rangle}; x^{\left \langle t \right \rangle}] + b_a)$$

$$\hat{y}^{\left \langle t \right \rangle} = g_2(W_{ya}a^{\left \langle t \right \rangle} + b_y)$$

咱们下面介绍到的RNN为单向RNN,依照工夫步从左到右单向顺次运算失去后果,\( \hat{y}^{\left \langle t \right \rangle}\) 只与前序的元素无关。但有些状况下\( \hat {y}^{\left \langle t \right \rangle}\) 也与后续元素无关。如下例,单凭后面的字,无奈确定「王」是否为人名的一部分,而增加后续(右侧)的信息能够无效辅助判断。

  • 他说,「王刚曾经来到学校了」
  • 他说,「王府内曾经没有差事可做了」

依赖两侧信息的RNN叫做「双向RNN」,简称为BRNN(Bidirectional RNN)前面的内容局部会再介绍到。

2.2 反向流传(Backpropagation)

咱们先为RNN场景定义一个损失函数。如果咱们的问题是判断序列以后输出的字是否是人名的一部分,这是典型的二分类问题,咱们采纳穿插熵损失函数,计算公式如下所示:

$$L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) = -y^{\left \langle t \right \rangle}log\hat {y}^{\left \langle t \right \rangle} - (1 - y^{\left \langle t \right \rangle})log(1-\hat {y}^{\left \langle t \right \rangle})$$

咱们沿着序列把每个地位的损失函数相加,失去整个序列的老本函数如下:

$$J = L(\hat {y}, y) = \sum^{T_x}_{t=1} L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle})$$

因为损失函数自身计算依赖时序上每个工夫点,RNN的反向流传也被称为沿着工夫的反向流传(Backpropagation through time),这里的反向流传从右向左计算的过程就像是沿着工夫倒推。

具体的计算公式如下所示:

$$a^{\left \langle t \right \rangle}=\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)$$

$$\frac{\partial \tanh (x)}{\partial x}=1-\tanh (x)^{2}$$

$$\frac{\partial a^{\left \langle t \right \rangle}}{\partial W_{a x}}=\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) x^{ T}$$

$$\frac{\partial a^{\left \langle t \right \rangle}}{\partial W_{a a}}=\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right) a^{T}$$

$$\frac{\partial a^{\left \langle t \right \rangle}}{\partial b}=\sum_{b a t c h}\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right)$$

$$\frac{\partial a^{\left \langle t \right \rangle}}{\partial x^{\left \langle t \right \rangle}}=W_{a x}{ }^{T} \cdot\left(1-\tanh \left(W_{a x} x^{\left \langle t \right \rangle}+W_{a a} a^{\left \langle t-1 \right \rangle}+b\right)^{2}\right)$$

$$\frac{\partial a^{\left \langle t \right \rangle}}{\partial a^{\left \langle t-1 \right \rangle}}=W_{a a}{ }^{T} \cdot\left(1-\tanh \left(W_{a x} x^{\left \langle t-1 \right \rangle}+W_{a a} a^{(t-1\rangle}+b\right)^{2}\right)$$

2.3 RNN不同构造

后面咱们提到的RNN,都是满足输入输出长度统一的,即\( T_x=T_y\) ,但理论有很多类型的RNN输出长度和输入长度不统一。依据输出及输入长度关系,RNN能够分为以下构造:

  • 一对一(One to one):\( T_x=1,T_y=1\)
  • 一对多(One to many):\( T_x=1,T_y>1\)
  • 多对一(Many to one):\( T_x>1,T_y=1\)
  • 多对多(Many to many):\( T_x=T_y\)
  • 多对多(Many to many):\( T_x\neq T_y\)

3.语言模型

语言模型(Language Model)是自然语言解决(NLP)中最根本和最重要的工作之一。即便到明天大家看到很多新型神经网络模型训练应用的根底工作之一都还是语言模型。RNN模型能比拟好地建设语言模型。

咱们以一个例子来解释一下什么是语言模型。咱们用算法进行语音辨认时,一句语音有两种辨认后果:

  • 历史总是一直重演
  • 力使总事一直虫眼

咱们都能判断,第二句话更有可能是正确的辨认后果。语言模型是一个能够计算出这两句话各自的呈现概率的模型。比方预估第一句话概率为\( 10^{-13}\) ,第二句话概率为\( 10^{-10}\) 。

在语音辨认的场景下,咱们就能够利用语言模型失去各自语句的概率,抉择概率最大的语句作为正确的辨认后果。概率计算的表达式为:

$$P(y^{\left \langle 1 \right \rangle},y^{\left \langle 2 \right \rangle},\cdots,y^{\left \langle T_y \right \rangle})$$

那么这个有用的语言模型如何构建呢,又和咱们这里提到的RNN有什么关系呢,咱们会依照如下步骤来操作:

  • ① 采集数据构建一个足够大的训练集(以后很多大模型都是以千万和亿为数据量级的),训练集由大量的语句语料库(corpus)形成。
  • ② 对语料库的句子进行切分词(tokenize)。对英文能够做单词归一化和切分单词,中文依照字或者词做切分(词用得更多)。
  • ③ 基于分词过后的句库,建设vocabulary,对每个字/词进行one-hot编码。

例如上面这句话:

我爱吃油泼辣子彪彪面,滋味十分好。

咱们会给每句话完结开端,加上< EOS >作为语句结束符。如果语句中遇到词汇表中没有的单词,用< UNK >示意。假如单词「彪」不在词汇表中,则下面这句话可示意为:

我爱吃油泼辣子 < UNK > < UNK >面,滋味十分好。< EOS >

将标记化后的训练集用于训练RNN,过程如下图所示:

训练过程解析

① 第1个工夫步中,输出的\( a^{\left \langle 0 \right \rangle}\) 和\( x^{\left \langle 1 \right \rangle}\) 都是零向量,\( \hat {y}^{\left \langle 1 \right \rangle}\) 是通过Softmax预测出的字典中每个词作为第一个词呈现的概率;

② 第2个工夫步中,输出的\( x^{\left \langle 2 \right \rangle}\) 是训练样本的标签中的第一个单词\( y^{\left \langle 1 \right \rangle}\) (即「我」)和上一层的激活项\( a^{\left \langle 1 \right \rangle}\) ,输入的\( y^{\left \langle 2 \right \rangle}\) 示意的是通过Softmax预测出的、词语「我」前面呈现字典中的其余每个词的条件概率。

③ 以此类推,最初就能够失去整个句子呈现的概率。

定义损失函数为:

$$L(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle}) = -\sum_t y_i^{\left \langle t \right \rangle} log \hat {y}^{\left \langle t \right \rangle}$$

老本函数为:

$$J = \sum_t L^{\left \langle t \right \rangle}(\hat {y}^{\left \langle t \right \rangle}, y^{\left \langle t \right \rangle})$$

4.采样-序列生成

对于训练好的语言模型,能够通过采样(Sample)构建新的序列(对应上例就是产出新的句子),也能够进而理解这个模型学习到了一些什么。

具体过程如下:

① 第1个工夫步输出\( a^{\left \langle 0 \right \rangle}\) 和\( x^{\left \langle 1 \right \rangle}\) 为零向量,输入预测出的字典中每个词作为第一个词呈现的概率,依据Softmax的散布进行随机采样(np.random.choice)

② 将上一步采样失去的\( \hat {y}^{\left \langle 1 \right \rangle}\) 作为第二个工夫步的输出\( x^{\left \langle 2 \right \rangle}\) 。

③ 以此类推,直到采样到EOS,至此基于语言模型生成的一个残缺句子序列生成结束。

咱们能够通过模型生成的句子,了解模型通过语料库学习到的常识(词语组合与散布)。

以中文为例,下面构建语言模型,很多时候会基于「词」来构建,但因为中文词汇十分多,难免会呈现未知标识(UNK)。

一种解决形式是能够基于「字」粒度建模,因为字总体数量无限得多,呈现地位标识的可能性也更小。但这种办法也有毛病:失去的序列过多过长,且训练老本更高。

总体来说,大家看到基于词汇构建的语言模型更为罕用。

5.RNN 梯度隐没与梯度爆炸

梯度隐没与梯度爆炸是深度神经网络中很重要的问题,对于RNN而言,序列较长也容易有对应的问题,咱们来对这两个问题做一点开展解说。

5.1 梯度隐没

序列数据的特点是:可能存在间隔上跨度很大的依赖关系,在咱们后面提到的语言模型例子中,体现的就是某个词对与其相距较远的一个词有强依赖。如下有2句英文句子:

The cat, which already ate a bunch of food, was full.

The cats, which already ate a bunch of food, were full.

很显然两句话里,主语数量级和对应的be动词是互相对应的:was受cat影响;were受cats影响。而它们之间都相隔了很多单词。而个别的RNN模型每个元素受其四周左近的影响较大,不善于捕捉这种长期依赖关系。下面两句话的这种依赖关系,因为跨度很大,一般的RNN网络容易呈现梯度隐没,捕获不到它们之间的依赖,造成语法错误。

一般RNN里的梯度隐没问题比拟难解决,能够应用调整结构的GRU和LSTM (下文会介绍到)作为缓解梯度隐没问题的计划。

5.2 梯度爆炸

在反向流传时,随着层数的增多,梯度不仅可能指数型降落,也有可能指数型回升,即梯度爆炸。不过梯度爆炸比拟容易发现,因为参数会急剧收缩到数值溢出(可能显示为 NaN)。

对于梯度爆炸,罕用的解决方法是采纳梯度修剪(Gradient Clipping):察看梯度向量,如果它大于某个阈值,则缩放梯度向量以保障其不会太大。

6.GRU(门控循环单元)

GRU(Gated Recurrent Units, 门控循环单元)改善了RNN的暗藏层,使其能够更好地捕获深层连贯,并改善了梯度隐没问题。

仍旧以后面提到的这个句子为例:

The cat, which already ate a bunch of food, was full.

模拟人类从左到右读下面这个句子的形式:

  • GRU单元有一个新的变量称为\( c\) ,代表记忆细胞(Memory Cell),其作用是提供记忆的能力,记住例如前文主语是复数还是复数等信息。在工夫\( t\) ,记忆细胞的值\( c^{\left \langle t \right \rangle}\) 等于输入的激活值\( a^{\left \langle t \right \rangle}\) ;\( \tilde{c}^{\left \langle t \right \rangle}\) 代表下一个\( c\) 的候选值。
  • \( \Gamma_r\) 代表相干门(Relevance Gate),示意\( \tilde{c}^{\left \langle t \right \rangle}\) 和\( c^{\left \langle t \right \rangle}\) 的相关性。
  • \( \Gamma_u\) 代表更新门(Update Gate),用于决定什么时候更新记忆细胞的值。

以上构造的具体公式为:

$$\Gamma _r = \sigma(W_r[c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_r)$$

$$\Gamma _u = \sigma(W_u[c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_u)$$

$$\tilde{c}^{\left \langle t \right \rangle} = tanh(W_c[\Gamma _r \ast c^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_c)$$

$$c^{\left \langle t \right \rangle} = (1 - \Gamma _u) \times c^{\left \langle t-1 \right \rangle} + \Gamma _u \times \tilde{c}^{\left \langle t \right \rangle}$$

$$a^{\left \langle t \right \rangle} = c^{\left \langle t \right \rangle}$$

当应用sigmoid作为激活函数\( \sigma\) 来失去\( \Gamma_u\) 时,\( \Gamma_u\) 的值在0到1的范畴内,且大多数工夫十分靠近于0或1。当\( \Gamma _u = 1\) 时,\( c^{\left \langle t \right \rangle}\) 被更新为\( \tilde{c}^{\left \langle t \right \rangle}\) ,否则放弃为\( c^{\left \langle t-1 \right \rangle}\) 。因为\( \Gamma_u\) 能够很靠近0,因而\( c^{\left \langle t \right \rangle}\) 简直就等于\( c^{\left \langle t-1 \right \rangle}\) 。在通过很长的序列后,\( c\) 的值仍然被维持,从而实现「记忆」的性能。

相干论文:

Cho et al., 2014. On the properties of neural machine translation: Encoder-decoder approaches

Chung et al., 2014. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling

7.LSTM(长短期记忆)

LSTM(Long Short Term Memory,长短期记忆)网络比GRU更加灵便和弱小,它额定引入了忘记门(Forget Gate)\( \Gamma _f\) 和输入门(Output Gate)\( \Gamma_o\) 。其结构图和公式如下:

$$\Gamma _u = \sigma(W_u[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_u)$$

$$\Gamma _f = \sigma(W_f[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_f)$$

$$\tilde{c}^{\left \langle t \right \rangle} = tanh(W_c[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_c)$$

$$c^{\left \langle t \right \rangle} = \Gamma^{\left \langle t \right \rangle}_u \times \tilde{c}^{\left \langle t \right \rangle} + \Gamma^{\left \langle t \right \rangle}_f \times {c}^{\left \langle t-1 \right \rangle}$$

$$\Gamma_o = \sigma(W_o[a^{\left \langle t-1 \right \rangle}, x^{\left \langle t \right \rangle}] + b_o)$$

$$a^{\left \langle t \right \rangle} = \Gamma _o^{\left \langle t \right \rangle} \times tanh(c^{\left \langle t \right \rangle})$$

以上为1个LSTM单元的构造,多个LSTM单元按工夫秩序连接起来,就失去LSTM网络。

下面讲到的是简化版的LSTM。在更为罕用的版本中,几个门值不仅取决于\( a^{\left \langle t-1 \right \rangle}\) 和\( x^{\left \langle t \right \rangle}\) ,有时也能够关联上一个记忆细胞输出的值\( c^{\left \langle t-1 \right \rangle}\) ,这被称为窥视孔连贯(Peephole Connection)。这时,和GRU不同,\( c^{\left \langle t-1 \right \rangle}\) 和门值是一对一的。

\( c^{0}\) 常被初始化为零向量。

相干论文:Hochreiter & Schmidhuber 1997. Long short-term memory

8.双向循环神经网络(BRNN)

咱们后面提到了,单向的RNN在某一时间步只能应用之前输出的序列信息。双向循环神经网络(Bidirectional RNN,BRNN)能够在序列的任意地位应用之前和之后的数据。其工作原理是减少一个反向循环层,构造如下图所示:

因而,有\( \hat{y}^{\left \langle t \right \rangle}= g(W_y[\overrightarrow{a}^{\left \langle t \right \rangle}, \overleftarrow{a}^{\left \langle t \right \rangle}] + b_y)\)

这个改良的办法不仅能用于根本的RNN,也能够用于GRU或LSTM。毛病是须要残缺的序列数据,能力预测任意地位的后果。例如构建语音识别系统,须要期待用户说完并获取整个语音表白,能力解决这段语音并进一步做语音辨认。因而,理论利用会有更加简单的模块。

9.深度循环神经网络(DRNN)

为了进一步晋升模型的学习能力,咱们能够在RNN的每个工夫步上,也减少隐层数量,构建深度循环神经网络(Deep RNN)。构造如下图所示:

以\( a^{[2]\left \langle 3 \right \rangle}\) 为例,有\( a^{[2]\left \langle 3 \right \rangle} = g(W_a^{[2]}[a^{[2]\left \langle 2 \right \rangle}, a^{[1]\left \langle 3 \right \rangle}] + b_a^{[2]})\) 。

参考资料

  • Cho et al., 2014. On the properties of neural machine translation: Encoder-decoder approaches
  • Chung et al., 2014. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
  • Hochreiter & Schmidhuber 1997. Long short-term memory

ShowMeAI系列教程举荐

  • 图解Python编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解AI数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读

举荐文章

  • 深度学习教程 | 深度学习概论
  • 深度学习教程 | 神经网络根底
  • 深度学习教程 | 浅层神经网络
  • 深度学习教程 | 深层神经网络
  • 深度学习教程 | 深度学习的实用层面
  • 深度学习教程 | 神经网络优化算法
  • 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
  • 深度学习教程 | AI利用实际策略(上)
  • 深度学习教程 | AI利用实际策略(下)
  • 深度学习教程 | 卷积神经网络解读
  • 深度学习教程 | 经典CNN网络实例详解
  • 深度学习教程 | CNN利用:指标检测
  • 深度学习教程 | CNN利用:人脸识别和神经格调转换
  • 深度学习教程 | 序列模型与RNN网络
  • 深度学习教程 | 自然语言解决与词嵌入
  • 深度学习教程 | Seq2seq序列模型和注意力机制