吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(一)

1. RNN

首先思考这样一个问题:在处理序列学习问题时,为什么不使用标准的神经网络(建立多个隐藏层得到最终的输出)解决,而是提出了RNN这一新概念?

标准神经网络如下图所示:

标准神经网络在解决序列问题时,存在两个问题:

  • 难以解决每个训练样例子输入输出长度不同的情况,因为序列的长度代表着输入层、输出层的维度,不可能每训练一个样例就改变一次网络结构。
  • 标准的神经网络不能共享从文本不同位置上学到的特征。举例说明:如果Harry作为人名位于一个训练例子中的第一个位置,而当Harry出现在其他例子的不同位置时,我们希望模型依然能识别其为人名,而不是只能识别位于第一个位置的Harry。

1.1 前向传播

以NLP中“命名实体识别“任务为例,序列中每一个输入字符对应一个输出,即\(T_y=T_x\):

  • \(a^{<0>}\)是初始的隐状态,一般置为零向量。
  • \(a^{<i>}\)代表输入序列中第\(i\)个输入所隐含的信息,即时间步\(i\)的激活值。
  • \(x^{<i>}\)代表输入序列中第i个字符,输入序列的长度为\(T_x\) 。
  • \(\hat{y}^{<i>}\)代表与\(x^{<i>}\)相对应的输出值。

RNN在进行前向传播时,不光考虑当前时刻的输入\(x^{<i>}?\),也会考虑包含上一时刻的信息(激活值\(a^{<i-1>}?\))。计算公式如下:

\[a^{<t>}=g(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)\]

\[\hat{y}^{<t>}=g(W_{ya}a^{<t>}+b_y)\]

为了方便记忆,可以将公式进行简化,其中\(W_{aa}\), \(W_{ax}\)合并为\(W_a\),\(a^{<t-1>}\)与\(x^{<t>}\)合并为新的矩阵\([a^{<t-1>},x^{<t>}]\)。举例说明:假定激活值\(a^{<t-1>}\)(也可以成为隐状态)为\(100\)维,输入值\(x^{<t>}\)为\(10000\)维。那么权重矩阵\(W_{aa}\)为\(100\times 100\)维,\(W_{ax}\)为\(100\times 10000\)维。

合并后的新权重矩阵为\(W_a\)为\(100\times (100+10000)\)维,合并后的新输入\([a^{<t-1>},x^{<t>}]\)为\((100+10000)\)维向量,即将\(a^{<t-1>}\)堆叠(stack)在\(x^{<t>}\)上方。

  • 简化的原理为:

    \[\begin{bmatrix}W_{aa}&W_{ax}\end{bmatrix}\begin{bmatrix}a^{<t-1>}\\ x^{<t>}\end{bmatrix}=W_{aa}a^{<t-1>}+W_{ax}x^{<t>}\]

  • 简化后的计算公式为:

    \[a^{<t>}=g(W_{a}[a^{<t-1>},x^{<t>}]+b_a)\]

    \[\hat{y}^{<t>}=g(W_{y}a^{<t>}+b_y)\]

原文地址:https://www.cnblogs.com/szxspark/p/8451915.html

时间: 2024-10-09 18:29:39

吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(一)的相关文章

吴恩达 深度学习笔记+作业 (一)

1.1.2 Building basic functions with numpy 1.1.2.2 numpy.exp, sigmoid, sigmoid gradient import numpy as np def sigmoid(x): s = 1/(1+np.exp(-x)) return s # 设sigmoid为s, s' = s*(1-s) def sigmoid_derivative(x): s = 1/(1+np.exp(-x)) ds = s*(1-s) return ds

吴恩达深度学习课程第二课-改善深层神经网络

第一周 深度学习的实用层面 1.1 训练,配置,测试训练集 学习完如何构建神经网络,接下来学习如何高效运行神经网络 数据集划分: train,dev,test: 在train中训练模型,利用dev选择最佳模型,利用test测试最终模型 1.2 偏差Bias,方差Variance 欠拟合(高偏差),过拟合(高方差) 1.3 处理欠拟合,过拟合方案 1.4 正则化Regularization 原文地址:https://www.cnblogs.com/nrocky/p/12114269.html

吴恩达深度学习笔记(deeplearning.ai)之卷积神经网络(二)

经典网络 LeNet-5 AlexNet VGG Ng介绍了上述三个在计算机视觉中的经典网络.网络深度逐渐增加,训练的参数数量也骤增.AlexNet大约6000万参数,VGG大约上亿参数. 从中我们可以学习到: 随着网络深度增加,模型的效果能够提升. 另外,VGG网络虽然很深,但是其结构比较规整.每经过一次池化层(过滤器大小为2,步长为2),图像的长度和宽度折半:每经过一次卷积层,输出数据的channel数量加倍,即卷积层中过滤器(filter)的数量. 残差网络(ResNet) 由于存在梯度消

吴恩达深度学习:1.2什么是神经网络

写在开头的话,本博客内容全部来自吴恩达深度学习教学课程,插图均来自吴恩达课件,在此说明来处,不喜勿喷! 一.什么是神经网络 1.我们从一个房屋加个预测的例子开始,假设有一个6间房间的数据集,已知房屋的面积单位是平方米或者平方英尺,已知房屋加个,现在想要找到一个函数,根据房屋面积来预测房屋价格的函数.如果有机器学习的只是,可以用线性回归得到这样的一条直线: 但是我们知道,价格永远不可能为一个负值,所以用一个直线的线性回归进行预测不太合适,我们可以在size轴将预测线弯曲一点,让他结束于0,我们所要

吴恩达-深度学习-课程笔记-6: 深度学习的实用层面( Week 1 )

1 训练/验证/测试集( Train/Dev/test sets ) 构建神经网络的时候有些参数需要选择,比如层数,单元数,学习率,激活函数.这些参数可以通过在验证集上的表现好坏来进行选择. 前几年机器学习普遍的做法: 把数据分成60%训练集,20%验证集,20%测试集.如果有指明的测试集,那就用把数据分成70%训练集,30%验证集. 现在数据量大了,那么验证集和数据集的比例会变小.比如我们有100w的数据,取1w条数据来评估就可以了,取1w做验证集,1w做测试集,剩下的用来训练,即98%的训练

吴恩达-深度学习-课程笔记-7: 优化算法( Week 2 )

1 Mini-batch梯度下降 在做梯度下降的时候,不选取训练集的所有样本计算损失函数,而是切分成很多个相等的部分,每个部分称为一个mini-batch,我们对一个mini-batch的数据计算代价,做完梯度下降,再对下一个mini-batch做梯度下降.比如500w个数据,一个mini-batch设为1000的话,我们就做5000次梯度下降(5000个mini-batch,每个mini-batch样本数为1000,总共500w个样本). 对于batch梯度下降(每次计算所有的样本),随着迭代

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下

吴恩达深度学习专项课程3学习笔记/week1/Setting up ML Application

应用ML是一个高度迭代的过程 Idea->Code->Experment->... 去不断地调整超参数. Train/Dev/Test sets 通常将数据集划分为Train/Dev/Test集. Training set: 用于模型的训练 Hold-out cross validation set/Developmet set: 用于测试,调整模型超参数 Test set: 用于最终评估 以前的ML问题:数据规模在w级,通常70/30划分Train/Test集或者60/20/20比例划

吴恩达“机器学习”——学习笔记五

朴素贝叶斯算法(Naive Bayes)(续学习笔记四) 两个朴素贝叶斯的变化版本 x_i可以取多个值,即p(x_i|y)是符合多项式分布的,不是符合伯努利分布的.其他的与符合伯努利的情况一样.(同时也提供一种思路将连续型变量变成离散型的,比如说房间的面积可以进行离散分类,然后运用这个朴素贝叶斯算法的变形). 第二个朴素贝叶斯的变化形式专门用来处理文本文档,即对序列进行分类,被称为朴素贝叶斯的事件模型(event model).这将使用一种不同的方式将邮件转化为特征向量. 之前的特征向量是:向量