文章目录

  • 前言
  • 1 RNN
    • 1.1 引例导入
    • 1.2 RNN
    • 1.3 举例
  • 2 Long Short-term Memeory (LSTM)
    • 2.1 LSTM 基本组成
    • 2.2 LSTM实例
    • 2.3LSTM 结构
  • 3 RNN应用
    • 3.1 RNN局限
    • 3.2 应用

前言

李宏毅-机器学习课程-笔记


1 RNN

1.1 引例导入

引例:利用前馈神经网络(FFN)解决在空缺位置填充单词问题
\qquad FFN:Input:一个单词(一个向量表示一个单词)
\qquad     Output:输入单词属于空缺位置的概率分布

\qquad FNN缺点:神经网络没有记忆力,不考虑上下文,对于不同性质的空缺位置,输入单词的概率分布是相同的。
\qquad比如:第一句中TaipeiTaipeiTaipei是目的地,而在第二句中是出发地,那么在这两个空缺的地方,TaipeiTaipeiTaipei出现的概率不一定是相同的,而利用FNN计算之后TaipeiTaipeiTaipei的概率分布始终是不变的,不符合语义.

1.2 RNN

RNN:拥有记忆力,考虑上下文内容,相同输入不同概率分布输出的神经网络;
\qquad 隐藏层的输出存储在内存中,网络的输入不光考虑原始的输入也要考虑隐藏层的输出;
\qquad 换句话说就是将隐藏层的输出同时作为输入,影响输出.

1.3 举例

输入序列:
\qquad\qquad[11][11][22]......\left[\begin{array}{c} 1 \\ 1\\ \end{array}\right]\left[\begin{array}{c} 1 \\ 1\\ \end{array}\right]\left[\begin{array}{c} 2 \\ 2\\ \end{array}\right]... ...[11​][11​][22​]......
条件:所有权重www均为1;没有偏差biasbiasbias;所有激活函数均为线性函数.

  1. 按照上面的网络结构和输入序列,计算输出结果
  2. 使用RNN之前必须要给内存中a1a_1a1​ a2a_2a2​初始值,默认为0.

    (1) input:[11]input:\left[\begin{array}{c} 1 \\1 \end{array}\right]input:[11​],[a1a2]=[00]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 0 \\0 \end{array}\right][a1​a2​​]=[00​],

\qquad  经过网络后[h1h2]=[22]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][h1​h2​​]=[22​],

\qquad  ouput=[44]ouput=\left[\begin{array}{c} 4 \\4 \end{array}\right]ouput=[44​],并且将[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1​h2​​]赋值给[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1​a2​​],则[a1a2]=[22]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][a1​a2​​]=[22​],并且也作为下一次的输入.

\qquad(2) input:[11]input:\left[\begin{array}{c} 1 \\1 \end{array}\right]input:[11​],[a1a2]=[22]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][a1​a2​​]=[22​],

\qquad  经过网络后[h1h2]=[66]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 6 \\6 \end{array}\right][h1​h2​​]=[66​],

\qquad  ouput=[1212]ouput=\left[\begin{array}{c} 12 \\12 \end{array}\right]ouput=[1212​],并且将[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1​h2​​]赋值给[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1​a2​​],则[a1a2]=[66]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 6\\6 \end{array}\right][a1​a2​​]=[66​],并且也作为下一次的输入.

\qquad(3) input:[22]input:\left[\begin{array}{c} 2 \\2 \end{array}\right]input:[22​],[a1a2]=[1616]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 16 \\16 \end{array}\right][a1​a2​​]=[1616​],

\qquad  经过网络后[h1h2]=[66]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 6 \\6 \end{array}\right][h1​h2​​]=[66​],

\qquad  ouput=[3232]ouput=\left[\begin{array}{c} 32 \\32 \end{array}\right]ouput=[3232​],并且将[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1​h2​​]赋值给[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1​a2​​],则[a1a2]=[1616]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 16\\16 \end{array}\right][a1​a2​​]=[1616​],并且也作为下一次的输入.

\qquad如果改变输入序列的顺序就会改变输出结果,说明RNN会考虑输入数据的顺序问题,在预测当前结果时,也包括了之前的信息。
RNN 解决引例问题过程:
\qquad首先将句子当中的每一个单词转换为向量,例如arrive=x1arrive=x^1arrive=x1,将x1x^1x1放入RNN中得到a1a^1a1,根据a1a^1a1得到y1y^1y1,y1y^1y1是arrivearrivearrive在每一个空缺处的概率分布,a1a^1a1存储起来,同时与x2x^2x2作为预测TaipeiTaipeiTaipei概率分布的输入,说明预测TaipeiTaipeiTaipei,考虑到了前面是arrivearrivearrive的信息,以此类推。
\qquad图中的网络中并不是3个RNN,而是同一个RNN在不同的时间点,使用3次.

\qquad 所以当TaipeiTaipeiTaipei前面的单词不同时,那么通过x1x^1x1计算出来的a1a^1a1的值也是不同的,作为预测TaipeiTaipeiTaipei概率的输入也就不同,那么计算出来的概率就是不同的,不同上下文TaipeiTaipeiTaipei的概率就是不同的。

\qquad 可以将RNN结构设计为深度网络

RNN分类:
Elman Network :将隐藏单元的输出作为下一次预测的输入
Jordan Network:将上一次的预测输出作为下一次预测的输入
    由于中间隐藏层输出结果相对来是不可控,最后的输出结果更有意义,相对来说我们知道memory存的是什么信息,所以 Jordan Network比Elman Network性能更好.

    双向RNN(Bidirectional RNN):
    RNN可以从正向和反向读取信息,可以先处理xtx^txt,也可以先处理xt+2x^{t+2}xt+2,BiRNN输出中间结果yt+1y^{t+1}yt+1时,已经考虑前后两个范围,考虑的信息更多.

2 Long Short-term Memeory (LSTM)

比较长的短期记忆
3个门 4输入 1输出

2.1 LSTM 基本组成

LSTM:一个单元中,有4个输入和1个输出,4个输出=3个控制信号和1个输入

组成成分:

  • Input Gate:控制input数据输入
  • Forget Gate:控制是否保存中间结果
  • Output Gate:控制output数据输出

    输入:
    \qquadzoz_ozo​:输出门控制信号
    \qquadziz_izi​:输入门控制信号
    \qquadzfz_fzf​:遗忘门控制信号
    \qquadzzz:输入
    输出:
    \qquadaaa:输出
    \qquadfff:激活函数基本都是sigmoidsigmoidsigmoid函数,
    \qquad   值域在000和111之间,函数值决定所控制门的开关程度。值越大,门打开程度越大。
    \qquadccc:当前隐藏层输出值
    \qquadc′c^{\prime}c′:下一次隐藏层输出值
    c′=g(z)f(zi)+cf(zf)c^{\prime}=g(z)f(z_i)+cf(z_f)c′=g(z)f(zi​)+cf(zf​)
    \qquad\qquad当f(zi)=0f(z_i)=0f(zi​)=0时,不考虑输入g(z)g(z)g(z)
    \qquad\qquad当f(zi)=1f(z_i)=1f(zi​)=1时,g(z)g(z)g(z)全部考虑
    \qquad\qquad当f(zf)=0f(z_f)=0f(zf​)=0时,不考虑上一次的隐藏值ccc
    \qquad\qquad当f(zf)=1f(z_f)=1f(zf​)=1时,ccc全部考虑

    综合所有的成分计算输出:
    a=h(c′)f(zo)a=h(c^{\prime})f(z_o)a=h(c′)f(zo​)
    \qquad\qquad当f(zo)=0f(z_o)=0f(zo​)=0时,无法输出,输出的是000
    \qquad\qquad当f(zo)=1f(z_o)=1f(zo​)=1时,h(c′)h(c^{\prime})h(c′)全部输出

2.2 LSTM实例

\qquad输入:2维
\qquad输出:1维
\qquad控制门信号:
{x2=1x2的值存入memoryx2=−1重置memoryx3=1输出memory的值\begin{cases} x_2=1& x_2的值存入memory \\ x_2=-1&重置memory \\ x_3=1 & 输出memory的值 \end{cases}⎩⎨⎧​x2​=1x2​=−1x3​=1​x2​的值存入memory重置memory输出memory的值​


\qquad以第一个输入为例[310]\left[\begin{array}{c} 3 \\1\\0 \end{array}\right]⎣⎡​310​⎦⎤​,LSTM中一共4个输入,[310]\left[\begin{array}{c} 3 \\1\\0 \end{array}\right]⎣⎡​310​⎦⎤​分别乘以4个不同的权重和加上不同的偏差.
\qquad得到最后的输出y=0y=0y=0,这些参数是训练得到的.

2.3LSTM 结构

\qquad原始神经网络和LSTM网络联系
\qquad原始神经网络结构如图:

\qquadLSTM结构:用LSTM代替神经网络的神经元;
\qquad\qquad\qquad 输入乘以4组参数,作为输入进行计算.

\qquadLSTM 详细结构
\qquad\qquad输入:xtx_txt​
\qquad\qquad\qquadxtx_txt​分别乘以4个矩阵得到zfz^fzf,zzz,ziz^izi,zoz^ozo 4个输入向量
\qquad\qquad\qquadzfz^fzf:遗忘门控制信号向量
\qquad\qquad\qquadzzz:输入向量
\qquad\qquad\qquadziz^izi:输入门控制信号向量
\qquad\qquad\qquadzoz^ozo:输出们控制信号向量
\qquad\qquad 4个向量进入相应的输入口,进行计算,将向量的每一个维度的值放入LSTM的每一个单元。

取一个维度作为例,计算过程如下:
ct=ct−1f(zf)+g(z)f(zi)c^{t}=c^{t-1}f(z^f)+g(z)f(z^i)ct=ct−1f(zf)+g(z)f(zi)yt=f(zo)h(ct)y^t=f(z^o)h(c^t)yt=f(zo)h(ct)ht=yth^t=y^tht=yt


LSTM最终形态
将ctc^tct,hth^tht和xt+1x^{t+1}xt+1作为下一次的输入

并且设计多层LSTM

3 RNN应用

\qquad学习目标:令y1y^1y1与相应的向量越相似,交叉熵损失越小

\qquad训练:
\qquad\qquadRNN通过BPTT训练,根据梯度下降更新参数

3.1 RNN局限

RNN训练困难
原因:RNN的total loss函数有的地方非常平坦 有的地方陡峭
解决:Clipping 梯度大于某个值就等于这个值

为什么损失函数会出现这种情况?
原因:同样www在不同的时间点反复地使用
实例:www在很小的范围内,www的梯度会很大或很小

LSTM可以解决梯度消失的问题:
原因:Memory cell 和input是相加的关系,除非遗忘门关闭否则对memory的影响不会消失,换句话说遗忘门如果开着,则不会产生梯度消失的问题。如果遗忘门关着才会把memory存储的数据清洗掉,消除原来数据的影响.

3.2 应用

多对一:情绪分析Sentiment Analysis
通过阅读一篇文章,判断文章内容表达的情绪是正面或者负面

输入向量序列 输出一个向量

多对多:序列对序列 input长 output短 语音识别

CTC:解决叠字问题

CTC训练问题:

Seq2Seq 不同长度 机器翻译 训练不知道何时停止

添加一个“断” ,作为停止的标志.

超越序列
语法分析:得到文法的结构树

Seq2Seq Auto-encoder-Text
理解单词序列含义不能忽略单词之间的顺序

Seq2Seq Auto-encoder-Speech

语音->向量

RNN encoder和decoder 联合训练joinly train
训练目标 :输出和输入越来越接近.

李宏毅-机器学习-RNN-笔记相关推荐

  1. 李宏毅机器学习—读书笔记

    李宏毅机器学习笔记(LeeML-Notes) leeml-notes 机器学习 人工智慧(Artificial Intelligence)是我们想要达成的目标,希望机器可以跟人一样的聪明.机器学习(M ...

  2. 喜大普奔:Datawhale开源项目《李宏毅机器学习完整笔记》发布了!

    开源地址 https://github.com/datawhalechina/leeml-notes [导读]关于机器学习的学习资料从经典书籍.免费公开课到开源项目应有尽有,可谓是太丰富啦,给学习者提 ...

  3. 李宏毅机器学习完整笔记发布,AI界「最热视频博主」中文课程笔记全开源

    点上方"小詹学Python",选择"置顶公众号"第一时间获取干货分享!本文转自:Datawhale 提起李宏毅老师,熟悉机器学习的读者朋友一定不会陌生.很多人选 ...

  4. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!

    点击我爱计算机视觉标星,更快获取CVML新技术 [导读]关于机器学习的学习资料从经典书籍.免费公开课到开源项目应有尽有,可谓是太丰富啦,给学习者提供了极大的便利.但网上比比皆是的学习资料大部分都是英文 ...

  5. 2018-3-21李宏毅机器学习视频笔记(十二)--Backpropagation

    视频来源: 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av10590361/?p=14 复合函数求偏 ...

  6. 201-3-19李宏毅机器学习视频笔记七(游戏解释Gradient Descent)

    视频部分: 视频7:使用帝国时代游戏解释Gradient Descent 李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.co ...

  7. 2021李宏毅机器学习课程笔记——Recurrent Neural Network

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 I. Basic Idea 首先引入一个例子,槽填充(Slot Filling)问题: Input: I w ...

  8. [李宏毅机器学习2020笔记] 1.introduction

    1. 基本概念 ⚪李宏毅老师眼中机器学习的定义--自动找函数 无论是监督学习.非监督学习.强化学习 都是某种信息或者情境到一种结果的映射 ⚪根据函数映射结果的离散性和连续性,可以分为分类和回归问题 c ...

  9. 2021李宏毅机器学习课程笔记——Auto Encoder

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-d ...

  10. 2021李宏毅机器学习课程笔记——Explainable AI

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-d ...

最新文章

  1. matlab读入从文件中读取大量的数据
  2. 你知道event库吗?教你如何写一个自己的event库
  3. linux下批量修改文件名的方法
  4. java小票_Java编程打印购物小票实现代码
  5. Windows 10 Threshold 2 升级记录
  6. python 人数取整_在python中如何取整到10的最高倍数?
  7. python用户登录三次机会的注释_用户登录(三次错误机会)(示例代码)
  8. 在mysql中存储生日,php中计算今天是否为用户生日
  9. roboware studio教程_RoboWare-Studio
  10. steam怎么设公用计算机,steam家庭共享是什么?steam设置家庭共享的方法
  11. CSDN(Markdown编辑)怎样打出各种表情符号和文章目录【图文】
  12. android 点击 加qq群,Android一键加QQ群
  13. 装饰器(Decorator)模式
  14. 微信广告+视频号,营销能力全面盘点,视频号是否能做新突破?
  15. Spark streaming动态调整资源-调研报告
  16. 美国食品药品监督管理局宣布将研究区块链技术
  17. 三相交流电_百度百科
  18. 商品折扣java代码_java会员折扣代码
  19. “Python性能优化”讲稿分享
  20. 语音(二)——语音预处理

热门文章

  1. 工程量计算稿1.55安装步骤 v1.55pjb
  2. java.lang.String cannot be cast to com.rock.bpo.agent.base.LoginUser
  3. HbuilderX下载安装
  4. 周志明虚拟机最新版,大厂面试必备宝典
  5. PS合成图片#ps抠图#ps视频教程入门基础学习课程小白
  6. 计算机磁盘序列号是唯一的吗,磁盘id和硬盘序列号一样吗
  7. Miscellaneous Warning EPERM: EPERM: operation not permitted
  8. java蘑菇岛种子_比蘑菇岛更稀有的“蘑菇陆地”见过么?输入MC种子即可找到
  9. python 如何调试uc浏览器_Python爬虫教程-10-UserAgent和常见浏览器UA值
  10. 【AI全栈三】语音质量算法、评价指标 看一篇就够系列(附算法源码+干货)