【深度学习】嘿马深度学习系统性知识教程第9篇:卷积神经网络,循环神经网络【附代码文档】

🏆🏆🏆教程全知识点简介:1.1 深度学习介绍 深度学习与神经网络 1.2 神经网络基础 1.3 浅层神经网络 2.1 多分类与 TensorFlow 5、得出每次训练的准确率(通过真实值和预测值进行位置比较,每个样本都比较) 2.2 梯度下降算法改进 2.3.4 其它正则化方法 2.4 BN 与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 4.1 循环神经网络 4.1.4 GRU(门控循环单元) 4.1.5 LSTM(长短记忆网络) 4.2 词嵌入与 NLP 学习目标 4.2.2 词嵌入 4.2.3 Word2Vec案例 4.3 seq2seq 与 Attention机制 4.3.2 注意力机制 4.3.3 机器翻译案例 4.3.4 集束搜索(Beam Search) 4.3.5 BLEU-机器翻译的自动评估方法 4.7.3.6 完整代码 5.1 生成对抗网络(GAN) 5.2 自动编码器

📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458605 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458605 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458605 中查看
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
卷积神经网络
了解卷积神经网络的构成
记忆卷积的原理以及计算过程
了解池化的作用以及计算过程
知道LeNet-5网络结构
了解经典的分类网络结构
知道NIN中1x1卷积原理以及作用
知道Inception的作用
了解迁移学习以及技巧
应用卷积神经网络进行手势识别
循环神经网络
了解序列模型相关概念
掌握循环神经网络原理
应用RNN原理手写一个RNN的前向和反向传播过程
了解词嵌入的优势
掌握词嵌入的训练gensim库的使用
掌握编解码网络的原理
掌握Attention机制
4.1 循环神经网络
学习目标
-
目标
-
了解序列模型相关概念
-
掌握循环神经网络原理
-
应用
-
应用RNN原理手写一个RNN的前向和反向传播过程
4.1.1 序列模型
[XGBoost 文档]
4.1.1.1 定义
- 通常在自然语言、音频、视频以及其它序列数据的模型。
催生了自然语言理解、语音识别、音乐合成、聊天机器人、机器翻译等领域的诸多应用。
4.1.1.2 类型
- 语音识别,输入一段语音输出对应的文字
- 情感分类,输入一段表示用户情感的文字,输出情感类别或者评分
- 机器翻译,两种语言的互相翻译
4.1.1.3 为什么在序列模型使用CNN等神经网络效果不好
-
序列数据前后之间是有很强的关联性
-
如:曾经有一份真挚的感情,摆在我面前,我没有去?_
-
序列数据的输入输出长度不固定
4.1.2 循环神经网络
循环(递归)神经网络(RNN)是神经网络的一种。RNN将状态在自身网络中循环传递,可以接受时间序列结构输入。
4.1.2.1 类型
- 一对一:固定的输入到输出,如图像分类
- 一对多:固定的输入到序列输出,如图像的文字描述
- 多对一:序列输入到输出,如情感分析,分类正面负面情绪
- 多对多:序列输入到序列的输出,如机器翻译,称之为编解码网络
- 同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类,也称之为序列生成
这是循环神经网络的一些结构以及场景,那么 接下来以基础的一种结构来看具体RNN怎么做的?
4.1.2.2 基础循环网络介绍
- xtx_txt
- oto_tot
- sts_tst
- 中间的小圆圈代表隐藏层的一个unit(单元)
- 所有单元的参数共享
通用公式表示:
-
s0=0s_0=0s0=0
-
st=g1(Uxt+Wst−1+ba)s_{t} = g1(Ux_t + Ws_{t-1} + b_{a})st=g1(Uxt+Wst−1+ba)
-
ot=g2(Vst+by)o_{t} = g2(V{s_t}+b_{y})ot=g2(Vst+by)
g1,g2g1,g2g1,g2
循环神经网络的输出值oto_totxt−1,xt,xt+1x_{t-1},x_{t},x_{t+1}xt−1,xt,xt+1
4.1.2.3 序列生成案例
通常对于整个序列给一个开始和结束标志,start,end标志。
- s 我 昨天 上学 迟到 了 e
输入到网络当中的是一个个的分词结果,每一个词的输入是一个时刻。
[Bottle 文档]
4.1.2.4 词的表示
[Matplotlib 文档]
为了能够让整个网络能够理解 的输入(英文/中文等),需要将词进行用向量表示。
[invoke 文档]
- 建立一个包含所有序列词的词典包含(开始和标志的两个特殊词,以及没有出现过的词用等),每个词在词典里面有一个唯一的编号。
- 任意一个词都可以用一个N维的one-hot向量来表示。其中,N是词典中包含的词的个数
就得到了一个高维、稀疏的向量(稀疏是指绝大部分元素的值都是0)。
4.1.2.4 输出的表示-softmax
RNN这种模型,每一个时刻的输出是下一个最可能的词,可以用概率表示,总长度为词的总数长度:
- 每一个时刻的输出sts_tst
4.1.2.5 矩阵运算表示
假设以上面的例子:对于网络当中某一时刻的公式中
1、st=relu(Uxt+Wst−1)\mathrm{s}t=relu(U\mathrm{x}_t+W\mathrm{s})st=relu(Uxt+Wst−1)
2、ot=softmax(Vst)o_{t} = softmax(V{s_t})ot=softmax(Vst)
-
1、形状表示:[n, m] x [m, 1] +[n, n] x [n, 1] = [n, 1]
-
则矩阵U的维度是n x m,矩阵W的维度是n x n
- m:词的个数,n:为输出s的维度
注:此步骤可以简化:[u,w] x [xs\frac{x}{s}sx
-
2、形状表示:[m, n] x [n, 1] = [m, 1]
-
矩阵V维度:[m, n]
总结:其中的nnn
4.1.2.6 交叉熵损失
[Flask 官方文档]
总损失定义:
- 一整个序列(一个句子)作为一个训练实例,总误差就是各个时刻词的误差之和。
Et(yt,yt^)=−ytlog(yt^)E_{t}(y_{t},\hat{y_{t}}) = -y_{t}log(\hat{y_{t}}) Et(yt,yt^)=−ytlog(yt^)
E(y,y^)=∑tEt(yt,yt^)=−∑tytlog(yt^)E(y,\hat{y}) = \sum_{t}E_{t}(y_{t},\hat{y_{t}})=-\sum_{t}y_{t}log(\hat{y_{t}}) E(y,y^)=∑tEt(yt,yt^)=−∑tytlog(yt^)
在这里,yty_tyty^t \hat y_{t}y^t
[aiomysql 文档]
4.1.2.7 时序反向传播算法(BPTT)(重要)
对于RNN来说有一个时间概念,需要把梯度沿时间通道传播的 BP 算法,所以称为Back Propagation Through Time-BPTT
的目标是计算误差关于参数U、V和W以及两个偏置bx,by的梯度,然后使用梯度下降法学习出好的参数。由于这三组参数是共享的, 需要将一个训练实例在每时刻的梯度相加。
- 1、要求:每个时间的梯度都计算出来t=0,t=1,t=2,t=3,t=4,然后加起来的梯度, 为每次W更新的梯度值。
-
2、求不同参数的导数步骤:
-
最后一个cell:
- 计算最后一个时刻交叉熵损失对于s_t的梯度,记忆交叉熵损失对于s^t,V,by的导数
- 按照图中顺序计算
-
最后一个前面的cell:
- 第一步:求出当前层损失对于当前隐层状态输出值st s^{t} st+++sts^{t}st
- 第二步:计算tanh激活函数的导数
- 第三步:计算Uxt+Wst−1+baUx_t + Ws_{t-1} + b_{a}Uxt+Wst−1+ba
