吴恩达深度学习笔记

你将学习本系列课程(专业):

  1. 神经网络和深度学习
  2. 改进深度神经网络:超参数调优、正则化和优化
  3. 构建你的机器学习项目吨/德
  4. 卷积神经网络端到端
  5. 自然语言处理:建立序列模型RNN,LSTM

我的目标

理解深度学习基本原理 常用算法 流程 常用术语 不求算术推导 不求算术推导 不求算术推导 使用深度学习框架

入门介绍

例1 房价预测模型

输入映射输出

监督学习有价值的

图像卷积序列 CNN

时间序列 语言序列 RNN RNNS

深度学习神经网络

数据量和质量处于第一序列胜过算法

算法主要加速学习速率如

sigmod 函数转化为ReLU 函数 梯度下降更快

规模推动深度学习进步 1数据2算力3算法

所以 算法 只是第三重要的

课程安排

本课程大纲第一周:介绍

第2周:神经网络编程基础

第3周:一个隐层神经网络

第4周:深度神经网络

算法 logisttic 回归 解决二二分类 (二元分类)

最小的神经网络

二元分类(二分类): 输入特征向量 输出 0 or 1

例2:有猫吗预测

训练集合样本
$$
traing = {(x1,y1),(.)......}
$$

$$
测试集合样本

logisttic 回归 函数 sigmoid 是一个方程 S形的
$$

$$
y^{—} = \frac{(w^T+B)}{z} 0<=y<01
$$

image-20220412154143054
$$
w 和b是参数 我们通常将其分开作为一个向量参数
$$

$$
\Theta = \left[\begin{array}{c} b \w_0\w_1\w_2\... \end{array} \right]
$$

$$
\hat{y} 预测值对应的是训练样本的输出
$$

logisttic 的成本函数 回归损失函数

损失函数

衡量了单个个训练样本上的表现

效果近似于方差但后面更好维护
$$
\delta(\hat{y},y) = -(ylog\hat(y)+(1-y)log(1-\hat{y}))
近似于 \frac{1}{2}(\hat{y}-y)^2 样本值\hat{y} 真实值y
$$

成本函数

衡量了全体训练样本上的表现
$$
J(w,b) = -\frac{1}{2}\sum{m}_{i=1}yilog\hat{y}^i+(1-\hat{y})
$$
image-20220412163025256

梯度下降法

找到凸函数的最低点 即最优解

image-20220412163209138

学习率a

导数即函数的斜率即高除宽

J 成本函数

image-20220412164202690
$$
w := w-\alpha\frac{dJ(w)}{dw}
$$

反向传播 backpagagations

反向传播就是求导

导数

导数大多时候就是斜率 即高除宽

image-20220412165120471

$$
\frac{d}{da}f(a)
$$
导数例子

导数时刻变得

计算图

image-20220413093135222

流程图从左到右

计算图求导

image-20220413094742086

反向求导

链式法则

image-20220413100037669

dvar 表示导数

logistic (逻辑)回归中的梯度下降法

计算偏导数,导数流程图计

算梯度

logistic 回归公式

$$
z = w^Tx+b 单个样本 成本函数
\
\hat{y}=a=\delta(z) 成本函数
\
L(a,y)=-(ylog(a)+(1-y)log(1-a)) 损失函数
$$

image-20220413103227978

dz =a-y

梯度更新过程

m个样本的梯度下降

image-20220413110105746

向量化

摆脱for 循环的低效率 加速运算

image-20220413141545876

向量计算会比for 循环快300 倍

用numpy 就是np

是在做并行计算

原因SIMD 单指令流多数据流 single instruct mult data

image-20220413142740266

其他向量化例子

这里指的就是numpy 的其他函数

np.log
np.abs
np.max
np.exp。。。。。。
np.zeros(n-x,1)

向量化logistic 回归的梯度输出

将数据集也向量化

db = 1/m *np.sum(dz)

python 中的广播

术语广播描述了NumPy在算术运算期间如何处理具有不同形状的数组。受某些限制,较小的阵列在较大的阵列中“广播”,以便它们具有兼容的形状。广播提供了一种将数组操作矢量化的方法,这样循环就可以在C语言而不是Python语言中发生。这样做时不会产生不必要的数据拷贝,通常会导致高效的算法实现。然而,在某些情况下,广播是一个坏主意,因为它会导致内存使用效率低下,从而降低计算速度。

NumPy操作通常是在逐元素的基础上对数组进行的。在最简单的情况下,两个数组必须具有完全相同的形状,如下例所示:

broadcasting

卡路里计算

image-20220413150105236

A = np.array([[56,0,4.4,68],[1.2,104,52,8],[1.8,135,99,0.9]])
print(A)

cal = A.sum(axis=0)# 竖直方向
cal_ = A.sum(axis=1)# 横向
print(cal)

percentage = 100*A/(cal.reshape(1,4))
print(percentage)

python_numpy 向量说明

减少BUG 减少一维的向量

image-20220413153202644

Jupyter_ipython 指南

logistic 损失函数

image-20220413154627795

神经网络概述

多层级结构

image-20220413154952138

image-20220413155302581

神将网络表示

输入层为第零层 有时候也不考虑进去

image-20220413155607900

计算神经网络的输出

层数和节点数

image-20220413160320583

神经网络的每一个隐层有多个节点的输出看作logistic 的输入到下一层

image-20220413160949216

多个样本的向量化--模拟神经网络

image-20220413162310711

激活函数:节点函数

$$
z{[1]}=WX+B^{[1]}\
a{[1]}=\sigma(z)\
z{[2]}=Wa{[1]}+b\
a{[2]}=\sigma(z)
$$

向量化实现的解释

数据转化向量

激活函数

神经网络中处理上一层输出转化为下一层输入的函数

$$
\sigma 函数 输出层使用 因为介于0-1
$$
image-20220413171541196

tanh 函数效果更好
$$

$$

image-20220413171622108

ReLU函数 和带泄露(leaky)的ReLU函数
$$

image-20220413172119220

激活函数为了是梯度快速下降

image-20220413172405776

斜率越小梯度下降越慢

为什么要用非线性激活函数

为什么不把输出值直接输出要使用激活函数处理?

image-20220413172755276

若使用恒等激活函数,或者线性激活函数,隐藏层会失效不如去掉神经网络无法成立--事实证明?

只有机器学习的回归问题可以使用线性方程如房价预测输出的是一个实数,隐藏层就是不能用线性

激活函数的导数

激活函数求导过程 略😢

神经网络的梯度下降法

训练模型随机初始化参数很重要

梯度下降更新 步伐根据学习率

直观理解反向传播

前向传播(Forward Propagation)前向传播就是从input,经过一层层的layer,不断计算每一层的z和a,最后得到输出y^ 的过程,计算出了y^,就可以根据它和真实值y的差别来计算损失(loss)。

反向传播(Backward Propagation)反向传播就是根据损失函数L(y^,y)来反方向地计算每一层的z、a、w、b的偏导数(梯度),从而更新参数

正向传播 反向传播(求导)

image-20220413180008546

image-20220413180908268

image-20220413182109427

随机初始化

参数w 偏置项b

w 不要是0会使节点单元变得一样 b可以

image-20220414093352269

W 不宜太大可能一开始就饱和

减慢学习效率 0.01 左右是合理的

深层网络中的前向传播

image-20220414141036444

核对矩阵的维数

image-20220414142028743

搭建深层神经网络块

image-20220414145219940

参数& 超参数

超参数:控制参数的参数

如学习率 a 循环的数量 隐层的数量等控制 W和b 的参数 还有momentum ,batch size等

image-20220414152014496

调参很多就是调超参数

和大脑的关系

image-20220414152711834

一个类比蹭热度用的,也许有收到一些生物学的启发吧

一些大佬经验讲解分享

ReLU向后传播

训练__开发__测试集

训练集 验证集(开发集合) 测试集

验证集一般用于进一步确定模型中的超参数(例如正则项系数、神经网络中隐层的节点个数,k值等),而测试集只是用于评估模型的精确度(即泛化能力)。

传统6 -2 -2 ,8 -1 -1

大数据(百万级别)

98 - 1 -1

测试集 也可以 并入验证集 就没有无偏评估集合了

偏差_方差

image-20220414173849084

高偏差

image-20220414174325745

image-20220414174051748

拟合的数据不会是线性的

机器学习基础

计算偏差 太高训练集都不行的话 换一个网络架构训练

高偏差和高方差是完全不同的情况。解决方法也不一样

偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据,如下图第二行所示。

方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,如下图右列所示。

正则化--降低方差

正则化是为了降低方差

过度拟合了数据即存在高方差问题

解决方案

1 正则化

2 准备更多训练数据

image-20220418102923876

L2 范数正则化也被称为“权重衰减”

为什么正则化可以减少过拟合

image-20220418135731232

经验后的结果--惩罚函数

image-20220418135930798

image-20220418140135464

Dropount 正则化

随机失活

image-20220418140408966

消除一些节点?

image-20220418140946763

理解dropout

不太理解

其他正则化方法

1 数据扩增----造数据

image-20220418142329597

2 early stopping

提早停止训练

image-20220418143011487

归一化(标准化)输入--加速训练

加速训练的方法,优化代价函数J

image-20220418143417883

归一化前后对比

前者学习率很低

image-20220418144502772

梯度消失与梯度爆炸

需要更聪明的随机初始化权重

W 激活函数

W 比1 的结果是指数爆炸增大

W 比1 小一点的结果是指数递减

image-20220418145453105

神经网络的权重初始化

解决但不能完全解决梯度消失与梯度爆炸

image-20220418150258813

梯度的数值逼近

双边误差不使用单边公差

image-20220418151000402

梯度检验

向量化 W 矩阵

执行循环 计算双边误差

計算兩個向量的距离 欧式距离,他是误差平方之和

不明白哦

image-20220418151534770

关于梯度检验实现的标记

Mini-batch梯度下降算法

不用等整个数据集处理完再执行下一步

Mini-batch梯度下降算法就是在分割数据的同时分批次执行梯度下降

深度学习高度依赖经验

算法优化

条件一 向量化计算

当数据很大是 流程如下 处理500w 数据进入下一层 处理500w 数据进入下一层 就会很慢

需要梯度下降法处理一部分

处理思路分割数据集 这些子集被称之为Mini-batch 如一次1000 个数据 一组一组进去 ,有5000 组

image-20220418155218127

需要遍历数据集了 ,遍历还是少不了的😄

image-20220418155903394

理解mini-batch size梯度下降

遍历让每次迭代的成本降低了

每次迭代都是训练不同数据

每次计算成本下降

image-20220418160332667

举个例子

image-20220418160824582

随机梯度下降 size = 1 随机梯度下降 等于一个接着一个计算没有向量计算了 low

梯度下降 size = m 全部向量化 数据多了顶不住 low

所以选择size 很重要

指数加权平均(指数加权移动平均)

比梯度下降快的算法需要用到

调整贝塔 参数 调参数调参数

image-20220418162659015

理解指数加权平均

image-20220418170256585

用之前数据对之后的数据影响有多大

image-20220418180439000

指数加权平均的偏差修正

一些算法

为了加速训练

局部最优的问题

导数接近0下降很慢了

调试处理

超参数选择--玄学

为超参数选择合适的范围

随机均匀取值

image-20220421111644529

超参数训练的实践:Pandas VS Caviar

超参数调整 可能是一直要调整的

image-20220422170124153

两种策略 1 不停迭代一个模型持续优化 2 大量模型一起训练 的最优的

正则化网络的激活函数

image-20220422171131595

将Batch Norm (Batch 归一化)拟合进神经网络

加速学习

拟合就是把平面上一系列的点,用一条光滑的曲线连接起来。因为这条曲线有无数种可能,从而有各种拟合方法。

image-20220425105016327

Bath Norm 为什么奏效

测试时的Batch Norm

image-20220425114142290

Softmax 回归

分类器 用来决定边界

image-20220425114739583

训练一个Softmax 分类器

对应的是 hardmax 即输出的是一个概率

image-20220425115108682

深度学习框架

专注于正向传播框架计算反向传播

数据参数是对的其他自动了

image-20220425115425611

TensorFlow

只需要清楚的正向传播流程

框架实现反向传播和梯度计算

import numpy as np
import tensorflow as tf
w = tf.Variable  # w 我们要优化的参数 tensor 变量
coefficients = np.array([[1.],[-10.][25.]])

x = tf.placeholder(tf.float32,[3,1]) # 定义 引入参数x 稍后把把常量放入
# cost = tf.add(tf.add(w**2,tf.multiply(-10,w)),25) # 定义损失函数
# cost = w**2 - 10*w +25 # 定义损失函数 (w-5)**2
cost = x[0][0]*w**2 +x[1][0]*w +x[2][0] # 定义损失函数
train = tf.train.GradientDescentOptimizer(0,0.01).minimize(cost)
init = tf.global_variables_initializer()


session = tf.Session() # with  tf.Session() as session
session.run(init)
print(session.run(w)) # 什么都没做 -->0
session.run(train) # 运行下一步的梯度下降法
print(session.run(w)) # -->0.1
迭代1000次
for i in range(1000):
    session.run(train,feed_dict={x:coefficients})
    # 把不同的mini_batch 放入 损失函数需要的地方
print(session.run(w)) # -->4.99999


访谈大佬二

1 研究方向有无监督 产品化有监督 六个月入行没问题 计算机和数学的知识 概率代数最优化微积分

2 PaddlePaddle 之类的平台提供资源

为什么是 ML策略

当准确率不够了 1 更多的数据 2 数据的多样性 3 训练的再久一点 4 算法更新 5网络更新

正交化

每个维度负责一个方向

超参数解耦

image-20220426155915591

1 先到能接受的程度

单一数字评估指标

image-20220426161051359

参数分类指标可视化

满足和优化指标

训练 - 开发- 测试集划分

image-20220426162642840

设立开发集和目标

开发集合测试集的大小

image-20220426163254254

没有单独的测试集合也可以

测试集合和开发集合合并为开发集合(数据大的时候)

image-20220426163727481

什么时候该改变开发-测试集和指标

业务 错误率

分类器

为什么是人的表现

根据用户实际情况修改数据

可避免偏差

理解人的表现

贝叶斯错误替代

image-20220426171428466

超过人的表现

改善模型的表现

image-20220426173131532

image-20220426173240893

进行误差分析

消除标注错误的数据

先看错误率

快速搭建你的第一个系统,并进行迭代

在不同的划分上进行训练并测试

语音识别

不匹配数据划分的偏差和方差

数据不匹配 开发集错误

image-20220426185839629

解决数据不匹配

数据增强 造数据

迁移学习

不同场景可以复用 串行学习?

预训练和微调学习来源的权重

从一个任务中学习,然后迁移到不同任务中去

多任务学习

多个任务中并行学习而不是串行

多任务学习不同任务的数据量要对等

区别 迁移学习:一次解决 多个任务而不是试图用A 的解决B

image-20220427104036157

迁移学习使用频率更高一些

场景 有一个好的网络 少量的数据 现在可以使用迁移学习了,迭代训练

什么是端到端的深度学习

忽略所有中间阶段 一个神经网络代替它

例子1 语音识别 x --> y

传统的 x --> 特征提取 --> 算法找音位(基本单位)—> 中间件 一步一步 找到 y

端到端

x -> y

大数据使用端到端效果 比传统还好

例子2 人脸识别门禁

输入的数据其实是多步的 1 检测器找人脸位置 2 放大人脸剪裁到居中位置

这个例子中 没有使用端到端 因为 拆分之后获取数据,训练更简单 ,如果可以拆成多个简单的任务效果也会比端到端好

总结来说没有足够的数据来支撑端到端就使用分阶段解决的方式

image-20220427112906228

是否要用端到端的深度学习

1 好处是只要数据 不要过程

2 坏处是没有过程

还是分步的更有前景因为端到端的数据太难收集了

大佬访问3

1 机器学习是人工智能的优雅实现 输入数据代码自动修正 深度学习 监督学习效果真好 ---知道底层不要随便抽象化。从0开始实现一遍不要一开始就用Tensorflow

2 算力提升 推动了 预训练到标准反向传播的转变

计算机视觉

目标检测

风格迁移

图片 数据量【x*y*3】 3 个通道

image-20220427141244272

卷积运算使得处理图片不需要如此巨大的内存

边缘检测实例---卷积运算

检测边缘 -> 局部-> 整体

image-20220427141609762

过滤器 卷积核

image-20220427141919905

每个对应位置相乘加起来

过滤器(卷积核)在 原图上计算 得到新的结果 使原图变小

Keras

为什么卷积可以做垂直边缘检测

垂直边缘检测

image-20220427143401852

更多边缘检测内容

水平边缘检测

image-20220427144057325

各种滤波器

image-20220427144511299

九个数字当成参数 自定义各种滤波器

Padding (填充)-- 一个基本卷积操作

image-20220427150809649

卷积生成公式

$$
nn 卷 ff(过滤器) = n-f+1 * n-f+1 \
66 * 33 = 4*4
$$

卷积的缺点

1 输出缩小:图片多次卷积之后会不断缩小最终 1*1

2 信息丢失:最边缘的像素 只被一次使用 (一些图片处理中会造成毛边)

Padding(填充)解决这两个问题

在图像边缘填充一层像素

image-20220427152916614

$$
n+2p-f+1 * n+2p-f+1 填充之后的
$$

Valid(不填充) 和 Same(相同) convolution(卷积)

image-20220427155350811

为了保障 输出后的图片等于原图
$$
n+2p-f+1 = n --> p = \frac{f-1}{2}
$$

f 大都是奇数 原因

1 偶数只能填充不对称了

2 奇数 的卷积核会有一个中点像素,相邻关系更好计算

image-20220427160911256

卷积步长

当步长为二

!image-20220427164715802

image-20220427165645138

商不是整数向下取整,原因是过滤器移动到超出原图的位置就不要操作了

地板除 [z] = floor(z)
$$
[\frac{n+2p-f}{s} +1] * [\frac{n+2p-f}{s} +1] 卷积结果
$$

卷积的结果需要镜像&反转

image-20220427170618164

image-20220428150018250

互相关(卷积) 反转可以省略

三维卷积

三维计算

image-20220428170041546

image-20220428170351065

立体卷积真的很有用

单层卷积网络

过滤器 填充层 步幅

image-20220428171458089

image-20220428171930861

简单卷积网络实力

!image-20220428172829147

池化层

保留特征输出

image-20220428173631097

image-20220428173845766

image-20220429101109521

卷积层和池化层区别

卷积层
功能 提取特征
操作 对于三维数据比如RGB图像(3通道),卷积核的深度必须同输入的通道数,输出的通道数等于卷积核的个数。卷积操作会改变输入特征图的通道数。

特性 权值共享:减少了参数的数量,并利用了图像目标的平移不变性。稀疏连接:输出的每个值只依赖于输入的部分值。

池化层

功能 压缩特征图,提取主要特征

操作 池化只是在二维数据上操作的,因此不改变输入的通道数。对于多通道的输入,这一点和卷积区别很大。

全链接卷积神经网络事例

image-20220429102748918

这里一个卷基层包含一个卷基层和一个池化层

Conv1 + POOL1 作为Layer1

image-20220429102956667

尽量不要自己设置超参数,看被人用的什么(好家伙又省了一步)

卷积层 + 池化层 + 全连接层

为什么要使用卷积

卷积层的两个优势(对比只有全连接层)

参数共享 减少计算量

没有卷积,参数很多(1200w )训练量

加入过滤器 参数很少了(5*5)

稀疏连接

元素连接的关系 不是所有关联的

如下图中的一个框个过滤器 映射到结果中的一个格子 和其他的没有关联关系了,特征于特征(格子和格子)之间没有过多的关联

image-20220429112649007

image-20220429113214559

为什么要进行事例研究

视觉方向的网络迁移很简单

1 如 识别猫的网络 迁移到 识别狗 ,人,车

下面一章就可以开始看论文了

Classic networks(经典网络)

每一次卷积池化图像都会缩小

LeNet-5

结构

image-20220429114900411

AlexNet

结构

image-20220429115611026

VGG

结构

image-20220429141655160

ResNet 残差网络

很深的网络很难训练因为存在梯度消失和梯度爆炸

CNN中深度可能有几种情况,这儿总结一下。

  1. 深度:指的是网络的层数,有时也称为网络的深度
  2. 卷积层的深度:卷积核个数。需要和通道数做区别,通道数指的是层数,一个卷积核的通道数与它进行卷积的输入必须是相同。

远眺连接

image-20220429142549573

ResNet 模型 何凯明 使得 模型可以很多层的叠加

正常的达到峰值后继续迭代错误会增多效果会更差ResNet 模型 解决了这个问题

通过残差块

image-20220429153158965

残差网络为什么有用?

image-20220429155941393

底层原因:残差学习恒等函数非常容易,可以提升网络性能

对比

image-20220429160024102

网络中的网络以及1*1 卷积

image-20220429161802449

1*1 的卷积单元可以理解为 全部应用了一个神经网络

谷歌Inception 网络

1*1 卷积构建Inception 网络

image-20220429164647362

压缩信道

image-20220429165626558

作用:不想决定池化层是使用1*1 3*3 还是 5*5 的过滤器 就使用Inception 使用各种类型的过滤器 只需要把输出连接起来

Inception 网络

image-20220429170829778

这些分支的作用 给最后的softmax(推理层) 层做一个补充

使用开源的实现方案

gitHup 使用

迁移学习

使用预训练模型 别人训练好的模型

冻结一部分网络 训练 如果数据少 如果多的话少冻结一些

image-20220429173909954

数据扩充

1 镜像对称和随机剪裁

2 色彩转换

image-20220429174652153

计算机视觉现状

少数据的地方应用到大数据的地方 ---> 泛化

image-20220429175347694

没有标注数据的时候考虑手工工程

10-corp 造数据

目标定位

例子: 车辆预测 分类模型

image-20220505104030245

输出类型外还有输出位置框 bx,by,bh,bw

image-20220505104241517

回归任务

特征点检测

神经网络识别 特征的坐标

列子: 人脸特征点检测 129 个特征点检测

image-20220505105617475

批量添加输出单元,输出要识别的各个特征点的坐标

目标检测

滑动窗口目标检测

1 先输入剪裁过只有车的图片

2 检测框卷积滑动

image-20220505110826078

3 加大检测框

image-20220505111041138

缺点:计算成本

滑动窗口目标检测实践

第一 全连接层转化为卷积层

image-20220505111713818

输出层在左上角

image-20220505113530773

Bounding Box 预测

比卷积滑动窗口更快 ,但不能输出最精准的边界框

YOLO 算法得到更精准的框

网格分割 图片

image-20220505114910363

交并比---IOU

下图中红框为标注部分,紫框是模型检测部分

IOU Intersection over Union

计算两个边界框交际并集只比
$$
\frac{交集}{并集}
$$

image-20220505134225090

一般IOU 大于0.5 就是检测正确 完美情况为1

非极大值抑制

通过算法高亮正确的检测框去变暗去除多余的检测框

Anchor Boxes

一个格子可以检测多个对象的方法

一个横向一个纵向的框

image-20220505140630206

YOLO算法

image-20220505141841880

推理预测

image-20220505142054689

候选区域

R-CNN 带区域的卷积网络 :先通过 分割算法 分割去除一些肯定没有的区域

什么是人脸识别

验证和识别

人脸验证有一定难度在于准确率 在于一次学习问题

One-Shot 学习

image-20220505144918999

人脸相似度计算 设定阈值 大于阈值不是一个人小于则是一个人

Siamese 网络

人脸图片编码

Triplet 损失

三元组损失

image-20220505150409066

面部验证与二分类

人脸识别问题转化为二分类问题

image-20220505154822696

什么是神经风格转换

图片风格迁移 --- 相片滤镜

image-20220505160528466

卷积提取特征

什么是深度卷积网络

image-20220505161126241

寻找接受域

每一层的卷积的范围不断放大

第一层检测边缘 第二层 检测质地 第三层一些复杂 。。。。。

image-20220505161405755

代价函数

需要定义一个代价函数

定义带教函数

$$
J(G) = \alpha J_{content}(C,G) + \beta J_{style}(S,G)
$$

使用预训练的卷积模型 比如VGG模型

image-20220505164120814

风格代价函数

检查风格图片相关性 比如垂直风格

image-20220505165434962

一维到三位推广

一些总结

为什么选择序列模型

序列模型也有很多不同的类型

数学符号

例子: NLP

词典建立

3w-5w 词小型的 大型最大可能100w

image-20220505182728694

one-hot

image-20220505183027943

这里用了一个10000 维的向量表示一个一万的词的词典

每个词在指定位置有对应关系 0 不存在 1 存在 UNK 未收录单词 全部为后面矩阵计算做准备

循环神经网络 RNN

循环神经网络 广泛用于NLP方向

image-20220505184207783

比如说需要得到 Teddy 这个人名 需要通过时序模型结合上下文看

激活函数&损失函数

$$
a^1 = g(w{aa}0+w_{ax}1+b)
\\hat{y}^1 = h(w_{ya}^1+b_y)
$$

image-20220505184843482

image-20220505184945935

image-20220505185325552

通过时间的反向传播

框架中反向传播是自动进行的,但还是了解一下最好

image-20220506095102059

通过时间(穿越时间)的反向传播

不同类型的循环神经网络 -RNN

循环神经网络不合理的有效性

基本的RNN 一个输入对应一个输出

例子: 语言翻译 输入句子和输出句子长度很可能不一致

不再每个节点上有输入而是RNN 网络读完整个句子

多个输入一个输出

或者一个输入多个输出

image-20220506101943437

总结各个结构的RNN

一对一 标准的网络结构 不需要RNN 也可

一对多 如音乐生成 序列生成

多对一 如情感分类

多对多 机器翻译

image-20220506102328720

语言模型和序列生成

语音识别系统

image-20220506104438262

image-20220506104930482

softmax 预测每个词的概率

image-20220506105647270

新序列采样

image-20220506110150563

将语音转化为新的字符序列 从字符字典中取到对应的放入

但现在更多的是基于词汇的而不是基于字符字母的词典

image-20220506110400064

带有神经网络的梯度消失

命名识别识别

RNN 有着巨大缺陷

梯度消失& 梯度爆炸 --很深的网络会有这个问题

image-20220506111131529

梯度爆炸比较鲁棒的解决方案

梯度裁剪

GRU 单元 门循环控制单元

改善梯度消失

在保留长期序列信息下减少梯度消失问题

$$
\Gamma 表示门 大写的\gamma
$$

门控循环单元 改变了隐藏层 捕捉深层链接 改善了梯度消失问题

记忆细胞 GRU 输出激活值

image-20220506114742382

GRU 输入上一个时间单元

image-20220506134754856

image-20220506135033397

长短期记忆(LSTM) 更优的选择

比GRU 更有效 是GRU 的更强大的通用版本

GRU 有两个门 LSTM 是三个门

结合更新和遗忘门的概念

update forget output

对比

image-20220506141307393

流程

image-20220506141642064

bidirectional RNN 双向RNN BRNN

更好的构建RNN 方法 BRNN

不仅可以获得过去的数据还能获得未来的数据

在仅根据之前的数据无法进行预测的时候可以加入后面的数据一起预测

对比

原始RNN 都是向前的只能获得前面的数据

image-20220506145821034

**BRNN **

加入了一个反向序列

image-20220506150230470

深层循环神经网络 Deep RNN

另一种RNN 升级版

有三个隐层的网络

image-20220506153029068

因为RNN 包含时间序列所以无法有太多的隐层结构 计算资源很大

词汇表征

one-hot 表示法

每个词都是字典里面唯一的,用向量表示

缺点 每个词是孤立的,对相关词的泛化性不强

image-20220506161027950

词的相关性 权重

image-20220506161307350

特征可视化算法 t-SNE算法

词嵌入

image-20220506162023043

使用词嵌入

词嵌入是NLP 的重要概念

作用 可以将同类的词聚类使用

通过大量无标签的文本进行词嵌入 (无监督?)

image-20220506162804838

词嵌入和人脸编码之前有一些关联

人脸编码 : 通过比对128 维的比对是否是一个人

image-20220506163718387

词嵌入的特性

帮助类比推理

image-20220506164253953

词向量

image-20220506164652263

余弦相似度

余弦相似度对这种类比工作效果很不错 欧式距离也可以不过没有余弦用的多

image-20220506165257320

嵌入矩阵

词嵌入实现 ---> 嵌入矩阵

image-20220506165821351

计算实现效率很低 ,因为 one-hot 矩阵的维度非常多,并且基本所有元素都是0,所以矩阵相乘效率很低

学习词嵌入

image-20220506174123022

Word2Vec

一种简单=高效的计算方式

预测

image-20220506183217752

分类器提速 树形结构

image-20220506183810832

如何对上下文c 进行采样?

1 均匀且随机地采样 有问题 停用词那些

负采样

巧妙的进行采样

一个监督学习模型

核心作用降低学习成本将其转化为 二分类问题

image-20220506185538673

下载他人的词向量是一个很好的方法

GloVe 词向量 算法

用的不是很多

image-20220507100245129

情绪分类

NLP 的重要方向

如根据评价评星

image-20220507100651801

问题

标记的训练集没有那么多

使用词向量更准确

image-20220507101007312

使用RNN

image-20220507101919366

词嵌入除偏

大量的数据学习可能学到一些不好的东西 比如 男性--> 医生 女性---> 护士 黑人--> 穷 白人---> 富

偏见趋势

image-20220507103135331

基础模型

sequence2sequence(序列2序列) model

如翻译模型

image-20220507104011892

imahe2sequence 图像2序列

image-20220507104137519

选择 最可能的句子

对比语言模型和机器翻译

几乎一样

image-20220507104638905

算法搜索最大可能性

image-20220507105033068

第一 每次挑选一个最佳值 局部最优全局可能不是

image-20220507105443992

第二 计算量大

定向搜索 -- 集束搜索

例子语音识别

集束宽

每次考虑多值 得到概率

image-20220507110554770

改进定向搜索

image-20220507113754903

改变束宽的大小

定向搜索的误差分析

评估误差 来自RNN 还是束搜索算法

Case1 是束搜索算法 的问题

Case 2 是RNN 的问题

image-20220507115354975

Bleu 得分

机器翻译的准确性怎么衡量? 没有固定值

通过Bleu 来衡量

观察输出的每一个词

image-20220507151431445

注意力模型直观理解

使得RNN 运行得更好

不同块上放不同注意力

image-20220507153014431

使用注意力机制 计算注意力

image-20220507153918223

语音辨识

seq2seq 模型在语音识别方面的应用很有生肖

语音转文本

音位构建的系统被end-to-end 端到端模型取代

注意力机制应用其中

image-20220507155826219

CTC 做语音识别

Connectionist temporal classification)

image-20220507162521168

触发字检测

语音设备的唤醒词 语音助手

image-20220507163109733

总结

image-20220507163302119

posted @ 2022-05-07 16:51  貌似大家  阅读(137)  评论(0编辑  收藏  举报