李宏毅 深度学习

news/2024/5/15 22:38:10/文章来源:https://blog.csdn.net/weixin_45837404/article/details/130394330

目录

  • 深度学习与自然语言处理 | 斯坦福CS224n · 课程带学与全套笔记解读(NLP通关指南·完结)
    • pytorch快速入门
        • csdn快速入门
        • OS包
        • PIL包
        • Opencv包
        • Dataset类
        • Tensorboard的使用
        • torchvision.transforms 的使用
        • torchvision中数据集的使用
        • DataLoader的使用(torch.utils.data)
        • 神经网络的搭建nn.Module
  • 深度学习 李宏毅
    • Chatgpt(2023)
      • 1 研究方向
      • 2 Chatgpt学习的步骤
      • 3 Fine tune vs. Prompt
        • 期待一 |成为专才, 加外挂 or fine tune or Adapter
        • 期待二|成为通才
        • chain of thought (COT )Promptting
  • [一、 Regression回归](https://youtu.be/fegAeph9UaA)
    • 1.1 Overfitting and Regularization
      • 误差error是哪里来的?——寻找调整方法
      • 注意不要这样做!——数据集的划分
    • 1.2 Gradient Descent
      • 1. learning rate 的调整
      • 2 SGD 随机梯度下降(Stochastic Gradient Descent
      • 3 Feature Scaling 特征缩放
      • 4 数学原理
      • 5 GD的一些限制limitation
    • 1.3 HW1
  • 二、Classification 分类
    • 2.1 生成式模型(generative *model*)
      • 2.1.1协方差矩阵(Covariance Matrix)
    • 2.2 逻辑回归 判别式模型(*discriminative* model)
      • 2.2.1 function set
      • 2.2.2 Goodness of function 好坏
      • 2.2.3 find the best function 寻找参数
    • 2.3 辨别模型VS生成模型
    • 2.4 Multi-class Classification
    • 2.5Limitation of Logistic Regression
      • 2.5.1 f eature transformation
  • 三、DL 深度学习简介
    • 3.1 DL的步骤
      • 3.1.1 Fully Connected Feedforward Network 全连接前向传播神经网络、前馈神经网络
      • 3.1.2 定义一个function goodness 好坏— cross entropy 交叉熵
    • 3.2 Backpropagation 反向传播
      • 3.2.1 Chain Rule 链式求导
      • 3.2.2 BP过程推导
    • 3.3 机器学习任务攻略
      • 3.3.1 在training data 上loss 过大? 过小?
      • 3.3.2 N-fold Cross Validation
    • 3.4 神经网络训练不起来怎么办?
      • 3.4.1 local minima 局部最小值和 saddle point 鞍点
      • 3.4.2 超参数 batch size
      • 3.4.3 momentum 动量——走出local minima
      • 3.4.4 自动调整学习率 Adaptive Learning rate
        • **Adam (RMSProp + Momentum)**
        • “乱喷”的现象——learning rate decay 、 Warm up
        • 总结 Optimization
        • 3.4.5 loss function 也可能有影响
  • 四、CNN
    • 4.1 全连接神经网络->CNN卷积神经网络
      • 4.1.1 receptive field 感受野—局部感知
      • 4.1.2 共享权重
      • 4.1.3 另一种介绍CNN的方式
      • 4.1.4 两种介绍CNN的总结
      • 4.1.5 Pooling 池化——下采样
      • 4.1.6 Flatten 拉直
      • 4.1.7 CNN的应用和局限
    • 4.2 为什么用了Validation set 还是overfitting?(2022补充)
    • 4.3 [鱼与熊掌可以兼得的机器学习](https://www.bilibili.com/video/BV1Wv411h7kN?p=33)——为什么要用Deep Learning(2022补充)
      • 4.3.1 Piecewise Linear function的表示
      • 4.3.2 为什么Deep 而不是 Fat?
    • 4.4 Spatial Transformer Layer
  • 五、self—attention 自注意力机制
    • 5.1 Sequence Labeling
      • 5.1.1 self-attention运算过程
      • 5.1.2 从矩阵乘法角度理解运算过程
      • 5.1.3 multi-head self- attention 多头自注意力机制
      • 5.1.4 Positional Encoding 位置编码
      • 5.1.5 自注意力机制的 应用
      • 5.1.6 self- attention VS cnn
      • 5.1.7 self- attention VS Rnn
    • 5.2 变式
      • 5.2.1 如何让self-attention Efficient?
      • 5.2.2 Skip Some Calculations with Human Knowledge
      • 5.2.3 focus on Critical Parts
      • 5.2.4 产生比较小的attention matrix —— Linformer
      • 5.2.5 简化计算运算量
      • 5.2.6 Synthesizer ——一定需要q k 计算attention吗?
      • 5.2.7各种self-attention总结
  • 六、RNN(选修)
  • 七、GNN(选修)
  • 八、Transformer
    • 8.1 Seq2seq model
      • 8.1.1 seq2seq model 的一些应用举例
    • 8.2 Encoder
    • 8.3 Decoder
      • 8.3.1 Autoregressive Decoder 自回归
      • 8.3.2 NAT Decoder —— Non-Autogressive Model (选修)
    • 8.4 Encoder 和 Decoder 传递信息——Cross attention
    • 8.5 训练
      • 8.5.1 Copy Mechanism
      • 8.5.2 Guided Attention
      • 8.5.3 Beam Serch 束搜索
      • 8.5.4 Optimizing Evaluation Metrics?

深度学习与自然语言处理 | 斯坦福CS224n · 课程带学与全套笔记解读(NLP通关指南·完结)

https://blog.csdn.net/ShowMeAI/article/details/124495575

pytorch快速入门

csdn快速入门

https://blog.csdn.net/PolarisRisingWar/article/details/116069338

  • 工具箱dir() 、help() 或者 类名??、 ipython交互式操作
  • pycharm 的好处就是可以看到实时变量的值

OS包

  • os.path.join() 拼接路径
  • os.listdir( ) 返回目录下的文件列表

PIL包

  • from PIL import Image 导入
  • Image.open(path) 读取图片,读出的图片类型是JepgImageFile类型
  • img.show() 显示

Opencv包

  • import cv2
  • cv2.imread() 读出的图片类型是numpy

Dataset类

  • 自定义的data类要继承Dataset类

  • self相当于一个全局变量,以便类中每个函数共享使用,否则就不需要写

    eg 数据集url蚂蚁蜜蜂分类数据集和下载连接https://download.pytorch.org/tutorial/hymenoptera_data.zip

    from torch.utils.data import Dataset
    from PIL import Image
    import os
    class MyData(Dataset):def __init__(self,root_dir,label_dir):self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(self.root_dir,self.label_dir)self.img_path=os.listdir(self.path)#img_path='/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg'def __getitem__(self,idx):img_name = self.img_path[idx]img_item_path = os.path.join(self.root_dir,self.label_dir,img_name)img =Image.open(img_item_path)label = self.label_dirreturn img,labeldef __len__(self):return len(self.img_path)ants_dataset =MyData('/Users/fanzhilin/Downloads/hymenoptera_data/train','ants')
    print(len(ants_dataset))#ants训练集长度 
    

Tensorboard的使用

需要先转换成tensor类型才能显示

  • add_scalar()

    eg 画出y=2x图

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")# 放在当前目录logs目录,可以自己改名字# 画出 y =2x 
for i in range(100):writer.add_scalar("y=2x",2*i,i) writer.close()

打开logs文件,在终端运行 tensorboard --logdir=logs ,也可以指定端口–port 6007, 便可以通过网页访问

  • add_image()、add_images()一次添加多个图片

查看def,需要传入 (torch.Tensor, numpy.array, or string/blobname)类型的y轴数据,需要把图片类型转换一下,从PIL到numpy arrary,需要传入参数dataformats=‘HWC’ 指定每一维的含义

eg

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")
img_path="/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg"
img_PIL =Image.open(img_path)
img_arrary = np.array(img_PIL)
print(img_arrary.shape)
writer.add_image("ant",img_arrary,1,dataformats='HWC')#从PIL到numpy arrary,需要传入参数dataformats='HWC' 指定每一维的含义# 画出 y =2x 
for i in range(100):writer.add_scalar("y=2x",2*i,i) writer.close()

torchvision.transforms 的使用

就是一个工具箱

image-20230318160812381

使用注意点⚠️

image-20230318203251123
  • ToTensor类 ,为什么需要转换?包含了一些dl的参数

  • Normalize类,归一化

  • Resize类

    transforms.Resize(x)等比例缩放,将图片短边缩放至size,长宽比保持不变,i.e,如果高度>宽度,则图像将被重新缩放为(size*高度/宽度,size)将图片短边缩放至x,长宽比保持不变 transforms.Resize(x)

  • Compose 就是将函数进行组合,需要提供一个转换的列表,相对应合并执行

  • RandomCrop 随机裁剪 ,用于数据增强

    from torchvision import transforms
    from PIL import Image
    from torch.utils.tensorboard import SummaryWriter
    img_path="/Users/fanzhilin/Downloads/hymenoptera_data/train/ants/0013035.jpg"
    img=Image.open(img_path)
    writer=SummaryWriter("logs")#ToTensor
    trans_tensor = transforms.ToTensor()# 创建对象
    img_tensor=trans_tensor(img)#变为tensor
    writer.add_image("Totensor",img_tensor,0 )#Normalize
    print(img_tensor[0][0][0])
    trans_norm = transforms.Normalize([0.5,0.5,0.5],[2,1,1])
    img_norm=trans_norm(img_tensor)
    print(img_norm[0][0][0])
    writer.add_image("Normalize",img_norm,0 )#Resize
    print(img.size)
    trans_resize=transforms.Resize((512,512))
    img_resize = trans_resize(img)#PIL 类型
    img_resize=trans_tensor(img_resize)#想要在tensorboard显示需要变成tensor类型
    writer.add_image("Resize",img_resize,0)
    print(img_resize.size())# Compose resize 结合
    trans_resize2 = transforms.Resize(512)
    trans_compose = transforms.Compose([trans_resize2,trans_tensor])
    img_resize2 = trans_compose(img)
    writer.add_image("Resize",img_resize2,1)#RandomCrop
    trans_random=transforms.RandomCrop(400) #(h,w)传入也可以
    trans_compose2= transforms.Compose([trans_random,trans_tensor])
    for i in range(10):#随机裁剪10个img_crop = trans_compose2(img)writer.add_image("RandomCrop",img_crop,i)writer.close()

torchvision中数据集的使用

  • datasets

    官网数据集https://pytorch.org/vision/stable/datasets.html

    可以吧url拷贝,用迅雷下载image-20230318204747333

import torchvision dataset_trans=torchvision.transforms.Compose([torchvision.transforms.ToTensor()]
)#把数据集每一个全变成tensor,方便使用tensorboard显示
train_set = torchvision.datasets.CIFAR10(root='./dataset',train=True,transform=dataset_trans,download=True)
test_set = torchvision.datasets.CIFAR10(root='./dataset',train=False,transform=dataset_trans,download=True)
#如果root没有目录会自动建立,建议设置download=true,如果没有回下载到本地,并且会自动解压
print(train_set[0])#第一条
print(train_set.classes)#labelimg,traget=train_set[0]#打印查看格式,前一个是img,后一个是label
print(img)
print(traget)
print(test_set.classes[traget])
img.show()

DataLoader的使用(torch.utils.data)

类似抽牌

image-20230318210645834
import torchvision 
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
test_data = torchvision.datasets.CIFAR10(root='./dataset',train=False,transform=torchvision.transforms.ToTensor())test_loader  = DataLoader(dataset=test_data,batch_size=4,shuffle=True,num_workers=0,drop_last=False)
#batch_size = 4  从dataset取4个数据,打包返回
#shuffle = True 每次抽取都是随机的
#drop_last=False,最后一次取如果不够取不舍去
img,target = test_data[0]
print(img.shape)
print(target)writer = SummaryWriter("dataloader")for epoch in range(2):step=0for data in  test_loader:imgs,targets = data# print(imgs.shape)#打包返回的数据torch.Size([4, 3, 32, 32]) 4数据 3通道rgb h w# print(targets)#tensor([5, 9, 2, 4]) 是label writer.add_images("Epoch :{}".format(epoch),imgs,step)step=step+1writer.close()
image-20230319142145568

神经网络的搭建nn.Module

Eg 简单的nn

from torch import nn
import torch.nn.functional as F
import torch
class Model(nn.Module):def __init__(self):super().__init__()
#nn.module内的call方法里调用了forward,通过打断点也可以知道!def forward(self,input):return input+1nn1=Model()
x= torch.tensor(1)
print(nn1(x))

卷积操作

深度学习 李宏毅

2022太乱了,去youtube看2020了,妈的没弹幕看着难受

http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML20.html

python 多环境管理pyenv

https://github.com/pyenv/pyenv

https://zhuanlan.zhihu.com/p/36402791

Chatgpt(2023)

1 研究方向

1如何精准提出需求

  • 如何调教

2 如何更正错误

  • chatgpt的预训练资料只有2021年9月之前的
  • 如何让机器修改一个错误而不弄错别的地方?——Neural editing

3 判断是否ai生成的物件

4是否会泄漏隐私

  • 但是可以绕着弯问他,当问到一定特定问题,让机器忘记Machine Unlearning

2 Chatgpt学习的步骤

由InstructGPT 推测

  • 1学习文字接龙,学到的是几率分布,然后随机抽取一个词出来。但实际每次输出的结果都不同

    GPT在网络上大量搜集网络数据,不需要人介入

  • 2人类来引导接龙的方向,并提供正确答案,

  • 3模仿人类的喜欢

  • 4用增强式学习 强化学习学习 reward

3 Fine tune vs. Prompt

两个方向:成为通才 或 专才

image-20230322112742011
  • 所有自然语言处理的问题都是 问答QA的问题

    image-20230321213303203

    https://arxiv.org/abs/1806.08730

  • 让chatgpt自己说说如何针对特定任务产生prompt

    image-20230321220827330

期待一 |成为专才, 加外挂 or fine tune or Adapter

BERT,类似文字填空的模型

image-20230322113007782

对预训练模型进行改造

  1. 加外挂Head

    image-20230322113106703

  2. 微调参数 fine tune

    微调Adapter 的参数( efficient finetune)

    语言模型本身不动,只finetune微调adapter参数

    image-20230322113301682

期待二|成为通才

image-20230322113656348

in-context learning 范例学习

image-20230322114157563
  • 可能范例学习只对大型模型有明显效果
image-20230322114354759

题目叙述学习Instruct learning、 instruction tuning

  • T0模型

    image-20230322114936039

  • FLAN paper

    image-20230322115011277

chain of thought (COT )Promptting

  • 在给机器范例同时,顺便给出推论过程,给出答案

    image-20230322115310148

  • zero - shot COT 甚至直接可以一句话:Lets think step by step

    有的时候人也不知道解答的过程是什么

    image-20230322115402586

  • Self—consistency 解决每次结果都不一样

    image-20230322115536362

  • Leat - to - most promptting

    把复杂的问题拆解,把难的问题简化,看到数学问题,让机器做in context learing

    image-20230322115838147

让机器找prompt

  • soft prompt 我们给机器的prompt 是向量,可以train,类似于adapter

    image-20230322115953453
  • 用reinforcement learning

    image-20230322120307349
  • 直接用大型LM 去自己找prompt

    把输入 输出 给他 ,让LM去给出prompt ,自己催眠自己😵‍💫

    image-20230322120339665

一、 Regression回归

1.1 Overfitting and Regularization

  • loss function 加上正则化项,不需要考虑bias b的大小

    我们要找一个比较平滑的f,而调整b的大小与f的平滑没关系,只是上下移动

  • lamda越大,train 损失越大,在test 可能越小

    lamda越大,说明越偏向考虑w本来的数值,而减少考虑error;

    我们喜欢较为smooth的function,但不能太平滑

  • 正则化在loss func再加上一个item, 会希望你的参数越小越好,希望曲线越平滑越好,w权重代表希望有多平滑

误差error是哪里来的?——寻找调整方法

来源于一个bias 一个variance

类似于射击,f*是预估的func 、f bar— 是期望、 f hat 是真实值

image-20230322143346630

跟据bias和varience大小关系,有underfitting 、overfitting,

image-20230323204937776

  • 如果undercutting ,则bias大

    • 添加更多的feature
    • 设计更复杂的model
  • 如果overfitting,则variance大

    • 收集更多的data、数据增强
    • 正则化Regularization

注意不要这样做!——数据集的划分

image-20230328110315777

真正的测试数据集是没见过的,你在test set的loss不能真实反映

引入validation验证集,解决方法如下

Cross Validation

image-20230328110729594

N-fold Cross Validation

image-20230328111612298

1.2 Gradient Descent

复习

image-20230328154851689

image-20230328155006655

1. learning rate 的调整

  • 1 普通的调整方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYiFuOni-1682513307005)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230328164435356.png)]

    一个learning rate ,越来越小,才能收敛

  • 2 Adagrad —adaptive learning rate

    不同参数的learning rate不一样

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i2tly3db-1682513307005)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230328180147015.png)]

    每一个参数都有一个learning rate

    • η \eta η 是学习率,是constant 常量

    • g 是偏微分的值,是gradient 梯度 斜率

    • σ \sigma σ 是w过去所有 偏微分值的均方根(先取平均值,然后开根号 root mean square)

    • t 代表第t次更新

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J1u4FGz6-1682513307005)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401201113476.png)]

    • 简化adagrad

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAGPlkvp-1682513307005)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401201227539.png)]

      解释为什么要除以g?应该是g越大step要越大,应该是成正比啊?

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DygDFkXo-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401201601336.png)]

      直观解释,除是为了看看反差有多大

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eYS7qt69-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401201538408.png)]

      详细解释:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QUNjskuS-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401230936384.png)]

2 SGD 随机梯度下降(Stochastic Gradient Descent

随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于训练机器学习模型。与传统的梯度下降算法不同,SGD在每次更新模型参数时,只使用一小部分随机样本来计算梯度,而不是使用所有训练样本。这使得SGD比传统梯度下降更快速地收敛,特别是在大规模数据集上。

具体地说,SGD的算法流程如下:

  1. 从训练数据中随机选择一小批样本(通常称为minibatch);
  2. 计算这个minibatch中样本的梯度;
  3. 使用梯度来更新模型参数;
  4. 重复1-3步骤,直到满足停止条件(例如达到最大迭代次数或梯度变化很小)。

SGD通常具有更好的泛化性能,因为在每次迭代中,它都会使用不同的训练样本进行更新。此外,SGD通常可以处理更大的数据集,因为它不需要在每次迭代中使用所有的训练数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NN8PoqsR-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401231714549.png)]

3 Feature Scaling 特征缩放

让不同的feature 的scale 一样

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sg7YCsV8-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401231914179.png)]

  • 为什么要这样做?

    w1对y的影响比较小,对loss影响小,有比较小的微分,w1方向比较平滑!!

    GD时没有向着圆心,效率不高

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hRnhVDLl-1682513307006)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401232239402.png)]

  • 如何做feature scaling

    涉及到均值和方差

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6ItZRKZ-1682513307007)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401232356938.png)]有两种常见的特征缩放方法:

  1. 归一化(Normalization):归一化通常是将特征值调整到 [0, 1] 范围内。公式如下:

    x_normalized = (x - min(x)) / (max(x) - min(x))

    其中 x 是待归一化的特征值,min(x) 和 max(x) 分别表示特征值的最小值和最大值。

  2. 标准化(Standardization):标准化是将特征值调整为均值为 0,标准差为 1 的分布。这样处理后的特征值服从标准正态分布。公式如下:

    x_standardized = (x - mean(x)) / std(x)

    其中 x 是待标准化的特征值,mean(x) 表示特征值的平均值,std(x) 表示特征值的标准差。

4 数学原理

https://www.youtube.com/watch?v=yKKNr-QKz2Q 50分处

5 GD的一些限制limitation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1oIHZvFK-1682513307007)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230401234026897.png)]

1.3 HW1

[“ML2022Spring_HW1_ipynb”的副本 (1).ipynb](…/Downloads/“ML2022Spring_HW1_ipynb”的副本 (1).ipynb)

二、Classification 分类

2.1 生成式模型(generative model)

https://www.bilibili.com/video/BV1Wv411h7kN?p=16&spm_id_from=pageDriver&vd_source=1fef0ac13db9fd03e4b2ae788361b5c4 神奇宝贝预测

高斯分布

朴素贝叶斯法(Naive Bayes model)

2.1.1协方差矩阵(Covariance Matrix)

协方差矩阵(Covariance Matrix),用于描述多个随机变量之间的协方差关系。协方差是一个衡量两个随机变量线性相关程度和它们各自变化程度的指标。具体来说,如果两个变量的协方差为正值,说明它们随着各自的增加而同增或同减;如果协方差为负值,则表示一个变量的增加对应另一个变量的减小,反之亦然;如果协方差接近于零,说明两个变量之间没有显著的线性关系。

对于 n 个随机变量(X₁,X₂,…,Xₙ),它们的协方差矩阵是一个 n×n 的矩阵,其中第 i 行第 j 列的元素表示随机变量 Xᵢ 和 Xⱼ 之间的协方差,记作 Cov(Xᵢ, Xⱼ)。协方差矩阵可以表示为:

Cov(X) = [Cov(X₁, X₁)  Cov(X₁, X₂) ... Cov(X₁, Xₙ)][Cov(X₂, X₁)  Cov(X₂, X₂) ... Cov(X₂, Xₙ)][   ...          ...     ...    ...    ][Cov(Xₙ, X₁)  Cov(Xₙ, X₂) ... Cov(Xₙ, Xₙ)]

协方差矩阵的对角线上的元素表示每个随机变量的方差(即该变量与自身的协方差),而其他元素表示不同随机变量之间的协方差。协方差矩阵是对称的,即 Cov(Xᵢ, Xⱼ) = Cov(Xⱼ, Xᵢ)。

在多元统计分析、信号处理、金融风险管理等领域,协方差矩阵常用于分析多个随机变量之间的线性关系。此外,在机器学习和数据挖掘中,协方差矩阵也用于特征选择、降维(如主成分分析,PCA)和判别分析等任务。

2.2 逻辑回归 判别式模型(discriminative model)

2.2.1 function set

前面讲了概率问题,简化直接找wb

posterior probability:后验概率

image-20230402162106016

逻辑回归其实就是一种神经网络

image-20230402162227263

2.2.2 Goodness of function 好坏

  • 最大似然估计MLE 找到一组w b 以最大化Lwb 即机率

    注意这里的L不是损失函数而是似然函数,是让这个training data 在现有概率下找到一组参数,最能拟合这种现有情况

    image-20230402162635208

    做一个数学转换,找最大转为找最小,让计算容易

    image-20230402163137216

  • 二分类交叉熵你Cross entropy

    代表的是这两个distribution 有多接近

    image-20230402163533790

  • 总结对比

    image-20230402163725922

    为什么逻辑回归的损失函数不用均方误差MSE?

    ——左边的推导基础是最大似然函数,而最大似然函数最大化的对象就是概率的乘积,为什么是乘积呢?多个独立事件同时发生的概率就是乘积。所以,左边的loss function求最大值的基础是最大似然函数的求解

    从loss图像理解

    image-20230402164713446

    用cross entropy 可以让train更顺,更新参数更快些,因为离目标远的话微分大、跨的步子也大

2.2.3 find the best function 寻找参数

很奇妙,更新参数的式子与线性回归是一样的

总结:

image-20230402164327350

只不过逻辑回归的 y ^ \hat{y} y^ 是1 或者0

2.3 辨别模型VS生成模型

logistic=discriminative,gaussian=generative,逻辑回归是特殊的Gaussian

image-20230402170826682

  • 判别式模型和生成式模型,一个根据与目标函数的损失函数来直接找最合适的w和b,一个根据w和b的生成方式先计算相关参数间接的计算出合适的w和b

  • 虽然是来自同一个function set ,两种模型找到的不是同一组wb

    右侧等于直接给定了一个从概率上考量的最佳的w,b。而左侧是随便给你个w,b初值,然后用梯度下降找最优解

  • discriminative model 的performance 一般会更好一些,但不一定所有情况

    解释:

    比如朴素贝叶斯naive bayes,他会先脑补

    逻辑回归可直接建模预测P(c|x), 概率模型先假定满足某种分布,然后建模,用先验概率(prior probability)求其后验概率

    =》可以理解为,逻辑回归自动学习特征之间的关系。概率模型假定特征之间符合某种关系

    生成式模型基于假设分布不断修正,在data少的时候performance好一些

    image-20230403103546822

2.4 Multi-class Classification

归一化函数softmax =》max指的是对最大值进行强化!

image-20230403113336951

  • 多分类流程总结如下:

image-20230403113631267

交叉熵:用于计算两个模型之间的相似度,完全相同的熵为0

y ^ \hat{y} y^ :这样编码的好处就不像123 这样有距离远近问题

2.5Limitation of Logistic Regression

  • 有的时候逻辑回归有限制image-20230403113904984

    因为逻辑回归在二分类问题找的是一个直线的boundary,

    image-20230403114034430

2.5.1 f eature transformation

  • 解决方法:

    1 feature transformation特征转换

    image-20230403114211537

    但我们人工不好去做这件, 能不能自动做?

    2 .cascading logistics regression models 级联逻辑回归模型

    image-20230403230616420

    eg 3个逻辑回归接在一起,可以模拟边界

    image-20230403231013296

    image-20230403232641364

    这就是引入神经网络了,多层感知器。svm就是利用核技巧。两种方式都可以解决这个问题

三、DL 深度学习简介

3.1 DL的步骤

image-20230402150527989

3.1.1 Fully Connected Feedforward Network 全连接前向传播神经网络、前馈神经网络

  • 一个神经元就可以看做一个function

    image-20230402144817209

    如果没有固定的参数叫做function set ,就是我们要找的


    当每一层有好多神经元时候

  • 整个神经网络的运算过程—矩阵运算

    image-20230402145345043

    矩阵运算可以用GPU运算加速


    hidden 层对feature进行了提取,最后经过softmax:归一化函数输出分类结果

    image-20230402145641713

3.1.2 定义一个function goodness 好坏— cross entropy 交叉熵

  • 对于手写1 -10 识别

    image-20230402150714149

    我们去计算 y y y y ^ \hat{y} y^的cross entropy C n C^n Cn ,调整网络参数,让total loss最小

    这是一个居中的独立公式:
    E = m c 2 E = mc^2 E=mc2
    image-20230402150841437

  • 用GD 梯度下降找参数

    下面的 μ \mu μ 是学习率

    image-20230402151353888

    如何算微分?因为参数很多,利用toolkit 如pytorch ——backpropagation 是一种有效的方式

为什么要用deep neural network?

image-20230402151856498

3.2 Backpropagation 反向传播

  • 为什么需要bp?

    方便计算神经网络参数的微分

    image-20230402152005990

3.2.1 Chain Rule 链式求导

image-20230402152133884

3.2.2 BP过程推导

  • 对于total loss 我们只要算出一笔data的C对w微分,然后sum 起来就行全部的

    image-20230402155519257

    我们先分析一个神经元的情况,对w求偏微分,b同理,根据chain rule

    先看第一部分forward pass :z对w求偏导,得出的值就是上一个神经元的输出的值,秒算

    image-20230402154224853


    第二部分backward pass :

    C是cost 总的代价函数、 σ \sigma σ 是activation function 激活函数

    image-20230402155816053

    假设上面?已经算出来,可以写作

    image-20230402155907574

    想象一下,有这样一个类似于神经元的东西

    image-20230402160032655

    如何计算这两项?

    • 如果后面紧接着就是输出层 显然好算

    image-20230402160417633

    • 如果后面还有很多层,继续往后走 ,得算出后面的才能知道当前的

    image-20230402160549913

    为了有效率,我们从后往前算,先把后面的算出来

  • Bp总结

    image-20230402161015137

3.3 机器学习任务攻略

3.3.1 在training data 上loss 过大? 过小?

  • Genral Guide

image-20230404142236704

  • 在training 上loss 大

    不一定是overfitting啊!

    model bias:指的是一层神经网络上的神经元个数不够,不能拟合出适合的函数。

    training loss 大,判断到底是model bias 还是optimization 的问题?image-20230404141809180

    下面一些情况是Optimization 的问题

    image-20230404142124209

  • 在training data的 loss 小

    在testing data loss大 ,是过拟合overfiting,机器并没有学到真正的function

    image-20230404142743920

    如何解决overfitting?

      1. 搜集更多资料,但是不建议

      2. data augmentation 数据增强

      3. constrained model 限制模型、更少神经元、共享参数、半失活神经元来减少过拟合

      4. 正则化 regularization

      5. 更少的feature

      6. dropout

        image-20230404143139211

3.3.2 N-fold Cross Validation

在做HW时,遵循下面的方法,引入验证集

测试集参与参数选择,导致结果有偏,不具有参考价值。所以引入验证集。

image-20230404144042377

不要根据测试集调模型,永远不要让测试集参与模型训练,不然会overfit到testing set上,不用管public testing set 结果,用validation set 上loss最小的model就行

Nfold Cross Validation N折交叉验证

image-20230404144333901

交叉验证是为了降低验证集随机取的,正好是都不够靠近描述函数的值的可能性

3.4 神经网络训练不起来怎么办?

3.4.1 local minima 局部最小值和 saddle point 鞍点

  • training loss 不下降的原因

    image-20230404151414661

  • 梯度为0只能说明是critical point!如何判断是哪一种情况?

    泰勒展开式逼近

    H海塞矩阵 hessian Hij 代表 θ i \theta~i θ i 对L做微分 , θ j \theta~j θ j 对L做微分 ,做两次微分就可以得到

    image-20230404155823335

    如何判断到底是哪种?

    image-20230404160244784

    我们只要算出H矩阵,看他的eigen value 特征值情况

    矩阵的特征值 λ \lambda λ 的正负!

  • 例子

    image-20230404162607051

  • 遇到了鞍点,不要害怕!

    一种解决方法:H告诉了我们参数更新的方向,找到负的特征值对应的一个特征向量u,来更新theta,就可以让loss变小

    image-20230404163842819

    例子:

    image-20230404164103001

    但是的确实不用看,计算量实在是太大

  • 一般我们训练都是卡在了saddlepoint

    下面的例子说明最终在loss不动了时候,特征值也不是全是正的

    image-20230404164915678

3.4.2 超参数 batch size

  • 什么是batch、epochimage-20230404165117157

  • 为什么要用batch?

    从技能冷却角度想象

    image-20230404170823351

  • Small batch vs。 Large Batch

    注意 large batch并不一定慢,考虑到GPU有并行运算,可以一次性算出来

    image-20230407210838447

    但是,large batch 往往training的结果越差 ,因为用的model都是一样的,不是bias的问题,所以是=》Optimization Fails(增大不确定性反而会优化问题,这个思想和马尔可夫决策过程里面的一步很相似

    image-20230407211152886

  • 为什么samll batch size 表现更好一些?

    因为我们每次选择的是不同的batch 、不同的数据,我们每次更新参数用的loss function 都是略有差异的,不同的batch对应略微不同的L ,不容易被stuck住!(因为梯度值的计算一般来说是和输入数据有关系的,反向传播的时候对某个参数求偏导的结果常常就是某个输入数据

    image-20230407213336722

  • batch 大小选择的 总结

    image-20230407213939651

3.4.3 momentum 动量——走出local minima

  • 在物理上球并不会被 峡谷 卡住

    image-20230407214227028

  • 一般的Vanilla Gradient Descent

    沿着梯度的反方向更新参数

    image-20230407214539149

  • GD+Momentum

    不只是看梯度的方向,还要考虑前一次前进的方向 movement,走二者的折中

    image-20230407214758266

    从式子来看,不只是考虑现在的梯度,而是过去梯度的总和来决定下一步走向

    image-20230407214916626

    因此在critical point时 ,虽然梯度为0,但是原先梯度的总和还在,因此可以走出峡谷!

    image-20230407223839289

3.4.4 自动调整学习率 Adaptive Learning rate

  • 当train 时 ,loss不再下降,不一定是卡在了鞍点或局部最小值!我们画出梯度向量的范数(长度)

    image-20230407224234631
  • 即使没有critical points ,training 也可能很困难,eg

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQ1TJbk6-1682513307019)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230407225705177.png)]

    这种情况下学习率太小了,提前停止训练了,太大会反复横跳,要客制化学习率

    如果某一方向很平坦,lr 要大一些 ,如果某个方向比较陡峭,lr要小一些,步子要小一点

  • adagard的方法 前面讲过

    image-20230407233721872

    可以这样理解:我们需要的是学习率与梯度成反比;这样=》梯度大则需要很小的学习率;梯度小则需要很大的学习率,在我们的等高线图上就可以体现

  • 但就算同一个参数的lr 也可能会跟着时间的变化而改变,同一个参数的同一个方向的gradient也不一样大,希望lr 可以动态调增,如下面的bnana图image-20230408151329923

  • RMSProp

    可以调整之前的梯度g 在新的 σ \sigma σ 里的占比、占的影响力

    image-20230408151643272

    在下坡的时候,gradient变大了,如果是原先的adagrad,反应比较慢,而RMSP Prop ,把 α \alpha α 调小一点,这样g的影响变大了,可以让sigma 变大这样更新变慢,步子变小了,踩了刹车 ,不然lr很大 g很大,会飞出去

    image-20230408152234287

Adam (RMSProp + Momentum)

momentum是解决卡在鞍点的, RMSPROP是解决梯度学习率不随机调整的问题,这样可能会卡在山谷两边震荡

image-20230408152701802

直接用pytorch中预设的超参数即可


“乱喷”的现象——learning rate decay 、 Warm up

  • 应用举例

    用Adagrad,会出现 左右乱喷的现象

    image-20230408155207717

    上下方向积累了很多很小的值,除数变小,学习率就变大了,就啪一下,出去了

    喷的地方是从平滑突然到了陡峭的区域,斜率变大的同时学习率不能及时下降引发的问题

  • learning rate decay 学习率衰减

    一开始我们离终点很远,lr可以大,随着更新,越来越近,lr要变小,这样可以踩刹车

    image-20230408155437334

  • Warm Up 黑科技

    让 lr 先变大后变小

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJGi10rq-1682513307021)(/Users/fanzhilin/Library/Application Support/typora-user-images/image-20230408155920664.png)]

    image-20230408155757676

  • 为什么要用warm up? 一种可能的解释

    在我们用adagrad、rmsprop 、adam 时,我们需要计算 σ \sigma σ ,他是一个统计的结果,告诉我们某一个方向有多陡、多平滑,统计的结果要看够多的数据才能足够精准!所以一开始统计是不精准的,所以一开始lr比较小,让它探索、搜集有关sigma的统计数据 ,等其比较精准后再慢慢减小

总结 Optimization

image-20230408160654477

虽然 sigma 和 momentum 都用到了梯度g,但m 还考虑到了方向,是一个向量,而sigma只是标量

3.4.5 loss function 也可能有影响

四、CNN

4.1 全连接神经网络->CNN卷积神经网络

问题:对于一张image,如果用FCNN,每一个神经元的的参数太多了,容易over fitting

很多重要的pattern只需要看小范围就知道了!

image-20230421211626147

4.1.1 receptive field 感受野—局部感知

让神经元仅关注部分区域

image-20230421211513373 image-20230421210404240
  • 一般的使用方法

    Kernel size 3乘3

    stride 步长

    padding 补值

    image-20230421210641107

4.1.2 共享权重

问题2: 相同的pattern在图片不同的区域

image-20230421211000687
  • 共享参数

    image-20230421210905578

    虽然参数一样,但是输入不一样,输出不一样

  • 常用的设置

    image-20230421211245255

    filter就是一组weight,这里一个神经元就是一个滤波器

总结:CNN的由来

image-20230421211448792

4.1.3 另一种介绍CNN的方式

用filter去图片里面抓取pattern

image-20230421211938440

filter的数值,是用GD找出来的,假设是已经知道的,我们利用每一个filter去侦测image里的pattern,如下

image-20230421212128032

得到特征图谱feature map可以看作另一张图片,只是channel不是rgb 3个channel了,而是filter的个数,每一个channel对应一个filter

image-20230421212431714

注意:第二层卷积层的filter的高度不再是3了,而是64,因为作为第二层卷积层的输入是一个64channel的imge

  • 问题:一直用3乘3的filter,会不会不好侦测比较大范围的pattern?

    解释:第二层卷积层,我们的filter如果设置3*3,我们其实看的是输入图片的5 * 5的范围,因此,CNN够深,不用担心!

    image-20230421212757874

4.1.4 两种介绍CNN的总结

image-20230421213053634
  • 共享权重就是把filter扫过一张图片,就是不同的receptive filed 共用参数,就是卷积这件事!!

    image-20230421213216268
image-20230421213242934

4.1.5 Pooling 池化——下采样

就是把图片变小!就是一种操作Operateor,不是learn

  • Max Pooling 方法

    image-20230421213510737
  • 卷积结束后,做池化

    image-20230421213544994

但是如果运算能力可以,不用池化,池化就是为了减少运算量

4.1.6 Flatten 拉直

整个CNN的一般结构

image-20230421213650671

4.1.7 CNN的应用和局限

对于语音、文字辨识要慎重

image-20230421214212065

不适合处理图片旋转、放缩=》需要做数据增强

image-20230421214317875

4.2 为什么用了Validation set 还是overfitting?(2022补充)

选择在validation set上loss最小的model ,用validation loss 选model,其实也可以看作一种training

image-20230421214728498

什么情况在validation set看到的结果会很坏?当你拿到的validation set 不好的时候,什么情况下不好? 一个是validation set的大小、一个是模型的复杂度太大

image-20230421215003407

4.3 鱼与熊掌可以兼得的机器学习——为什么要用Deep Learning(2022补充)

H太大,理想与现实差距很大,但loss较小;H太小,理想与现实差距小,但loss大

image-20230421215216004

这个地方可以这样理解,相当于我们希望能在更小范围的H中找到最好的h使得Loss最小

兼得→最简单的网络&最优的拟合方式

4.3.1 Piecewise Linear function的表示

image-20230421215444697 image-20230421215410624

image-20230421215435884

每一个neural 都可以制作一个hard sigmoid的function

image-20230421215540945

另一种hard sigmoid function的构造是 relu

image-20230421220135144

4.3.2 为什么Deep 而不是 Fat?

4.4 Spatial Transformer Layer

  • 如何旋转一个 image 或者 feature map ?

    image-20230422160710472 image-20230422160625254
  • image transformation的做法

    image-20230422160837430

    image Rotation 旋转

  • 注意老师没写反,这是一种“反向映射”技术,在实践中,一般都是由l层反推回去对应l-1层的哪一个像素的,这样子才能保证第l层每一个像素都能对应有值

image-20230422161157374

不可以用GD求参数

不可以用gradient descent,当我们的weight是小数时,因为你四舍五入之后,output都没有改变,loss是0,微分是0

  • Interpolation 插值法

    不要把a22 直接设成跟他最近的value ,比如上一层l-1的a22,会变得无法微分

    image-20230422161817317 image-20230422161902303

    选择,当这6个参数有细微变化,l-1 的index会有变化,这样第l层的a22会有细微的变化,因此有loss,可以对loss微分了,不是0了

  • 论文图片 ST的作用

image-20230422162359158

这里的UV是图形学的UV变换

image-20230422163047323

1.门牌号识别(使用ST效果会好)image-20230422162914092image里面最多只有5个数字,ouput 55维是意思是每11维对应一个数字,其中前10维度对于0-9 ,最后一维代表没有数字。如果这55维有3个11维是null,剩下的就是output答案

2.bird recognition

image-20230422163215118

五、self—attention 自注意力机制

问题:输入是一个序列、大小不一样,而不是一个向量了

image-20230422163549464

一种输出,N to N

image-20230422164059695

三种常见的输出(N to N ,N to 1 ,seq2seq )

image-20230422164137725

5.1 Sequence Labeling

  • 各个击破,但是有一个问题:如何让FC考虑更多的上下文image-20230422170526125如果我的任务需要考虑整个sequence的资讯, 不希望window太长怎么办?——self attentionimage-20230422170736882

5.1.1 self-attention运算过程

image-20230422170945975
  • 怎么计算两个向量的关联程度?image-20230422171103749dot product 两个向量点乘(dot-product)之后,结果的大小可以判断两个向量的相似度。这个算法用的是这个原理

    wq,wk是参数,开始给它们一个初始值,后面通过bp进行不断更新,是学出来的

得到的分数做一个normalization或者softmax

image-20230422171300401

个人理解,计算自相关度,设为一个参考值;其他的alpha值与这个值越接近说明相关度越高

根据求出的a,1,1抽取sequence里面重要的资讯,我们知道哪些向量跟a1 是最有关系的,根据得到分数抽取资讯

image-20230422171524930

b1-b4是并行计算的

image-20230422171708740

5.1.2 从矩阵乘法角度理解运算过程

Wq Wk Wv 是learn出来的,参数共享

image-20230422172135369

计算得分的矩阵操作:

q是query k 是key

image-20230422172331789

得到b的矩阵操作:

image-20230422172527016

总结:

image-20230422172647297

5.1.3 multi-head self- attention 多头自注意力机制

我们用q去找相关的k,但是相关这件事有很多种不同的形式,不同的定义,也许我们应该有多个q,不同的q负责不同种类的相关性

image-20230422173021517 image-20230422173058114

5.1.4 Positional Encoding 位置编码

告诉self - attention 位置的资讯

image-20230422173332436

文献:尚待研究的问题。。。。

image-20230422173355605

5.1.5 自注意力机制的 应用

  • 语音识别image-20230422173732672但是 attention matrix可能会很大。truncated self- attention,不要看一整句话,而是一个范围内的资讯,加快运算速度。这个我觉得和卷积的思想很像啊,一开始只看一小段信息,随着层数加深,越看范围越广

  • image

    一张图片可以看作一个vector set ,rgb图像中可以把每一个位置的pixel看作3dim的向量,整张图片就是5 *10的向量

    image-20230422173918913 image-20230422173940269
  • Graph 也可以看做一堆向量=》一种GNN

    我们可以只计算有相连的node之间的分数,没有相连,没有关系

    image-20230422175221652
  • Self-attention的变形综述。。。尚待研究,如何解决运算量的关系

    image-20230422175303901

5.1.6 self- attention VS cnn

当你看一个pixel,产生query,其他的pixel产生key,中做dot product 考虑整张image 而不是cnn的receptive field , 自注意力比CNN考虑的结构更大,模型弹性更大

image-20230422174249587

cnn就是self- attention的特例

image-20230422174337614

self attention 比较flexible 的model,弹性大的模型,需要更多的data,否则容易over fitting,如下面的论文

image-20230422174604059

5.1.7 self- attention VS Rnn

rnn考虑前一个时刻的影响,容易遗忘,不能并行运算

image-20230422175019344

5.2 变式

5.2.1 如何让self-attention Efficient?

最大的bottleneck:瓶颈:会计算N * N 的attention Matrix

image-20230426183346189

注意:当输入的序列N非常长的话,Self-attention的运算量才会对整体有影响,比如image 处理,下面的变型也是基于N非常大的情况才食用

image-20230426183536160

5.2.2 Skip Some Calculations with Human Knowledge

image-20230426184607095

组合使用

image-20230426184700867
  • Local Attention 、Truncated Attention

    类似CNN

    image-20230426183822591
  • Stride Attention

    空洞卷积

    看3步之外发生什么事情?

    image-20230426183910745
  • Global Attention

    加入一个特殊的token符号

    在下面的attention matrix中,每一列代表key,每一行代表query,前两行代表前两个special token的query要attend到所有的key上;前两个列代表除了special token 以外的token他们的query都会attend 到前两个位置,其他位置不管彼此发生了什么事~

    image-20230426184542597

5.2.3 focus on Critical Parts

我们计算那些有可能有比较大的值

image-20230426184812039
  • clustering ——基于人类理解,要不要计算weight

    把query和key聚类

    image-20230426184859745

    只有当query 和key处于相同的一个类中,我们才计算他的attention weight,不属于同一个cluster 的不去计算,set 0,从而加快计算

    image-20230426185038166
  • Sinkhorn Sorting Network

    Learnable Patterns ——让机器学习哪里需要计算attention

再学一个网络来指导哪里需要计算attention,但是network输出是连续值,需要转换成binary的值才能转化成注意力矩阵(为什么要做成两步?没必要)

image-20230426185505423

5.2.4 产生比较小的attention matrix —— Linformer

  • Linformer

    image-20230426195354468
  • 做法:

    从N个key挑出K个代表性的Key;

    如何产生output?从N个value中挑出来K个,

    image-20230422172647297

    为什么不选代表性的query, 会导致输出序列长度改变,如果需要每一个位置都需要label,不适合

    image-20230426195851887
  • 如何选出有代表性的key?Reduce Number of Keys

    两种方法:

    • Cnn
    • 乘以N *K的矩阵,利用和之前秩的观点很自洽
    image-20230426200018925

5.2.5 简化计算运算量

  • 自注意力机制就是3个矩阵乘法

    image-20230426200148512

    我们可以简化这个操作

    先把那个有最大的中间的那个消掉,计算量小。d’N Nd 中的N大,先这俩相乘

    线性代数

    image-20230426200303676

    我们改变矩阵相成计算的顺序(我们拿掉softmax)

    image-20230426200443786
  • 另一种方法

    数学推导很繁琐2333

    image-20230426201425479 image-20230426201438328

    怎么理解呢?线性变化 基向量

    如何拆开?读文献

    image-20230426203413952

5.2.6 Synthesizer ——一定需要q k 计算attention吗?

我们把attention变成network的参数

image-20230426203713626

  • 一定需要attention吗?

    image-20230426204207037

5.2.7各种self-attention总结

image-20230426204304213

六、RNN(选修)

七、GNN(选修)

八、Transformer

8.1 Seq2seq model

所有的NLP任务可以看做QA Question Answering ,而QA可以用seq2seq来解决

image-20230422202151437

任务客制化结果模型更好,各式各样的任务最好的模型

image-20230422202219845

8.1.1 seq2seq model 的一些应用举例

seq2seq for syntacitc paresing 文法分析

硬用seq2seq来做文法分析

image-20230422202348547

论文:把文法分析看做翻译的问题,把文法当做另外一种语言

image-20230422202430871

8.1.2 seq2seq for Multi-label Classification 多标签分类

由机器自己觉得输出几个东西,输出的sequence的长度是多少,机器帮我们决定class的数目

image-20230422202718234

8.1.3 seq2seq for Object Dectection

image-20230422202744209

8.1.2 model 结构

image-20230422202939576

8.2 Encoder

  • 作用就是给一排向量,输出另一排向量image-20230422203102956每一个Block不是一层layer 是多个layer

  • 在transformer中,block的结构如下

    image-20230422203647139

    详细如下:

    残差结构 residual connnection

    layer normalization,不是batch normalizaiton,同一个example不同的feature(即不同的dim)做mean。

    batch norm是列标准化,layer norm是行标准化(看李沐)

    都是让模型更容易学习的trick

    image-20230422203505529 image-20230422204005405
  • 但是transform的架构不一定要这样设计,还有其他论文?

    为什么不用batch normalization?

    image-20230422204112272

8.3 Decoder

8.3.1 Autoregressive Decoder 自回归

image-20230422204551693

Decoder结构

image-20230422204719497

注意:decoder的attention有个mask的处理,消除了某些维度;最后做了一个softmax,让输出变成几率


Mask的意思:就只能看到已知序列的内容,Encoder部分是整个序列看做一个句子 Decode的时候产生结果就有先后时序了

image-20230422204815648

模型不知道输出的长度是多少,需要加stop token

image-20230422205158021

8.3.2 NAT Decoder —— Non-Autogressive Model (选修)

AT VS NAT

NAT 输入一排begin,输出是同时产生的,但是不知道输出长度是多少?

可以比如输出end,end之后就扔掉;

或者可以有一个classifier,决定NAT Decoder 输出的长度

image-20230422205749758

选修:

image-20230422205810183

8.4 Encoder 和 Decoder 传递信息——Cross attention

image-20230422211204804

Cross Attention运作如下:

image-20230422211445410

softmax就是一种normalization; 所以decoder就是产生一个q,去encoder这边抽取资讯出来,当作接下来的decoder里面的FCN fully connective network 的输入

  • 论文 但不是transfomer结构

    image-20230422211818980横坐标是时间,不是one-hot encoding的值

  • 论文:cross attention的变形、

    image-20230426172039720

8.5 训练

每一次decoder在产生一个中文字的时候就是做了一次分类的操作,我们decoder的输出是一个distribution,是一个机率的分类,我们希望该分布与one -hot的向量越接近越好,我们会计算cross entropy 交叉熵

image-20230426172345292

我们发现,decoder的输入是ground truth 正确答案,我们称作Teacher Forcing

8.5.1 Copy Mechanism

  • chat bot
image-20230426172726837
  • summarization
image-20230426172807918
  • 详情看
image-20230426172840529

8.5.2 Guided Attention

语音合成中输入有些东西机器没看见,漏字了,对机器学习进行限制,如Monotonic Attention1 、 Location-aware attenion

image-20230426173123631

8.5.3 Beam Serch 束搜索

假设decoder就只能产生两个字 A B,去寻找一个接近solution的路径cs224n讲的不错https://blog.csdn.net/ShowMeAI/article/details/124495575

image-20230426180408303

但对于decoder有的时候并不一定找出最好的路最好

=》一句话 辨识结果beamsearch比较有帮助

随机性对于tts text to speech 任务比较好

image-20230426181401306

8.5.4 Optimizing Evaluation Metrics?

  • bleu分数

BLEU根据匹配数和 相似度计算得分。 该评分系统的范围在 0 和 1 之间。如果匹配完整且完美,则 BLEU 的值等于 1。如果根本没有匹配,则 BLEU 分配的分数为 0。 获得等于 1 的结果 几乎是不可能的,因为这意味着机器翻译结果与专业翻译的结果完全相同

  • 技巧:

    当不知道如何做优化,当成RL,硬train一发!

    遇到无法optimize的loss function 当成RL的reward,Decoder当成agent

image-20230426181817414
  • exposure bias 暴露偏差

    给decoder输入一点错误的东西,反而会学的更好

    image-20230426182951622

    Scheduled Sampling

    image-20230426183024108

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_104264.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git在工作中的使用流程

Git中的分支 master分支:所有用户可见的正式版本,都从master发布(也是用于部署生产环境的分支,确保master分支稳定性)。主分支作为稳定的唯一代码库,不做任何开发使用。master 分支一般由develop以及hotfi…

从“恰当”的项目管理工具中,了解自己的缺点

项目管理工具是为了帮助管理者,但管理者需要了解自己在特定情况下的“缺点”,才能从“恰当”的工具中获得“恰当”的帮助。如果你不知道在某个特定项目中自己(作为项目经理)的缺点,也不知道自己需要利用哪些好用的项目…

记录-因为写不出拖拽移动效果,我恶补了一下Dom中的各种距离

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 最近在项目中要实现一个拖拽头像的移动效果,一直对JS Dom拖拽这一块不太熟悉,甚至在网上找一个示例,都看得云里雾里的,发现遇到最大的拦路虎就是JS…

2022年NOC大赛创客智慧编程赛道Python初赛题,包含答案

目录 一、单选题 二、多选题 三、判断题 下载文档打印做题: NOC Python 初赛考题 一、单选题 <

【大数据之Hadoop】十八、MapReduce之压缩

1 概述 优点&#xff1a;减少磁盘IO、减少磁盘存储空间。 缺点&#xff1a;因为压缩解压缩都需要cpu处理&#xff0c;所以增加CPU开销。 原则&#xff1a;运算密集型的Job&#xff0c;少用压缩&#xff1b;IO密集型的Job&#xff0c;多用压缩。 2 压缩算法对比 压缩方式选择时…

IDEA 新版安装教程

目录 一、安装IDEA 1、双击安装&#xff0c;然后下一步 2、修改默认安装路径&#xff0c;自定义目录。(建议所有开发工具都放在同一个盘符) 3、改为自定义安装路径&#xff0c;下一步。&#xff08;不用使用中文或空格&#xff09; 4、创建桌面图标等 5、点击安装&#x…

面板数据进行熵值法

面板数据熵值法分析流程如下&#xff1a; 一、案例背景 当前有9家公司连续5年&#xff08;2018-2022年&#xff09;的财务指标数据&#xff0c;想要通过这份数据&#xff0c;确定各个财务指标的权重。熵值法根据指标离散程度确定赋权大小&#xff0c;客观公正准确度高。本次收…

DJ4-5 路由和选路

目录 一、路由与转发的相互作用 二、路由的基本概念 1. 默认路由器 2. 路由算法 三、网络的抽象模型 1. 节点图 2. 费用 Cost 四、路由算法分类 1. 静态路由算法 2. 动态路由算法 3. 全局路由算法 4. 分布式路由算法 一、路由与转发的相互作用 二、路由的基本概念 …

【1G-6G】移动通信技术发展

移动通信技术发展 1G 早在1947年&#xff0c;贝尔实验室的科学家就提出了蜂窝通信的概念&#xff0c;在20世纪60年代对此进行了系统的实验。20世纪60年代末、70年代初开始出现了第一个蜂窝&#xff08;Cellular&#xff09;系统。蜂窝的意思是将一个大区域划分为若干个相邻的…

通过使用生成对抗市场模型改进基于强化学习的交易的泛化

Improving Generalization in Reinforcement Learning–Based Trading by Using a Generative Adversarial Market Model | IEEE Journals & Magazine | IEEE Xplore Improving Generalization in Reinforcement Learning–Based Trading by Using a Generative Adversaria…

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…

内网渗透的一些tips

声明&#xff1a;文中涉及到的技术和工具&#xff0c;仅供学习使用&#xff0c;禁止从事任何非法活动&#xff0c;如因此造成的直接或间接损失&#xff0c;均由使用者自行承担责任。 每周不定时持续分享各种干货。 众亦信安&#xff0c;中意你啊&#xff01; 一.密码抓取 平…

C++的异常

文章目录 1. C语言传统的处理错误的方式2. C异常概念3. 异常的使用3.1 异常的抛出和匹配原则 4. C标准库的异常体系5. 自定义异常体系6. 异常的重新抛出7. 函数调用链中异常栈展开匹配原则8. 异常安全9. 异常规范10. 异常的优缺点 1. C语言传统的处理错误的方式 传统的错误处理…

2023北京新一代信息技术应用融合创新人才发展峰会暨鲲鹏开发者创享日·北京站成功举办

以技术创新促产业发展&#xff0c;以开放使能筑人才根基 4月25日&#xff0c;由北京市经济和信息化局、北京市朝阳区人民政府、国家工业信息安全发展研究中心与华为技术有限公司联合主办&#xff0c;北京鲲鹏联合创新中心、北京市中小企业公共服务平台、中国软件行业协会承办的…

几何算法——7.Blending(倒角)的调研、设计及算法

几何算法——7.Blending&#xff08;倒角&#xff09;的调研、设计及算法 1 Parasolid的Blending1.1 关于Parasolid的BlendSurface1.2 Edge Blending1.2.1 Rolling-ball blends1.2.2 Variable rolling-ball blends1.2.3 Chamfers1.2.3.1 face offset chamfers1.2.3.2 apex-rang…

表情迁移 - 2D人像动起来(附带生成web服务提供api接口)

左边原图,右边是渲染后的视频文件 开源地址:https://github.com/AliaksandrSiarohin/first-order-model 官方模型下载地址(需科学上网): google-driveyandex-disk本文docker容器已自带人脸模型 若还需要行为、物品、动画等追踪模型需下载后拷贝至容器内即可使用 API请求…

类对象的大小---this指针

如何计算类对象的大小 问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f;如何计算一个类的大小&#xff1f; 类对象的存储方式 只保存成员变量&#xff0c;成员函数存放在公共的代码段 结论&#xf…

boot-admin整合Quartz实现动态管理定时任务

淄博烧烤爆红出了圈&#xff0c;当你坐在八大局的烧烤摊&#xff0c;面前是火炉、烤串、小饼和蘸料&#xff0c;音乐响起&#xff0c;啤酒倒满&#xff0c;烧烤灵魂的party即将开场的时候&#xff0c;你系统中的Scheduler&#xff08;调试器&#xff09;&#xff0c;也自动根据…

电视盒子什么牌子好?数码博主盘点2022电视盒子排行榜

网络电视盒子是电视机的标配&#xff0c;开放性的安卓系统能观看海量视频资源&#xff0c;我每年也会进行电视盒子的测评&#xff0c;今天要来分享五款最热门的网络电视盒子推荐&#xff0c;跟着我一起看看网络电视盒子哪个好。 一&#xff1a;泰捷WEBOX60Pro电视盒子 年度…

RocketMq消息

消息发送 发送同步消息 public class SyncProducer {public static void main(String[] args) throws Exception{DefaultMQProducer producernew DefaultMQProducer(/*please_rename_unique_group_name*/"group1");producer.setNamesrvAddr("localhost:9876&q…