关于 NLP 深度学习的核心流程

news2024/9/21 12:55:41

在这里插入图片描述

基本流程实现的先后顺序(每一步都包含很多技术点):

选定语言模型结构

关于语言模型:

  • 作用
    判断那一句话相对更合理,相对不合理的会得到较底的分值:
    挑选成句概率分值最高的
  • 评价指标:PPL(Perplexity) 困惑度
    • 评估一个语言模型在给定数据集上的预测效果
    • PPL 值与成句概率成反比(PPL 越小,成句概率越高)
  • 模型分类
    • SLM 统计语言模型
      ngram
    • NLM 神经语言模型(2003)
      RNN(循环神经网络)
      LSTM(RNN 进阶版)
      CNN(卷积神经网络)
      GRU
    • PLM 预训练语言模型(2018)
      • 基于 Transformer 架构
        • BERT(预训练模型)
          生成式任务是逐词预测,bert 是预测缺失的词或者句子前后关系
        • GPT
          生成式模型
        • 一系列类 bert 模型
    • LLM 大语言模型(2023)
      GhatGPT

收集标注数据

  • 样本数据
  • 预测数据

forward 正向传播

  1. 模型超参数随机初始化
  • 训练轮数:epoch_num
  • 每次训练样本个数:batch_size
  • 样本文本长度:window_size
  • 学习率:lr
  • 隐藏层:hidden_size
  • 模型层数:layer_num
  1. 构建词表
    load_vocab

  2. 构建数据集
    dataset

  3. 模型组成

    1. 离散值连续化(可选)

      • Padding(可选)
        • 将不同长度的文本补齐或截断到统一长度
        • 使得不同长度的文本可以放在同一个batch内运算
        • 补齐所使用的token需要有对应的embedding向量
      • embedding 层
        • 作用:
          • 将字符转为向量
            将离散型的输入数据(如单词、类别等)映射到连续的向量空间中
          • 核心
            将离散值转化为向量
        • 形状:[vocab_dim, hidden_size]
          hidden_size 是embedding 的下一层模型的输入形状
    2. 模型结构处理连续数据

    3. pooling 池化层
      embedding 结果要先转置后才能 pooling
      embedding.transpose(1,2)

      • 作用
        • 降低后续网络层的输入维度
        • 缩减模型大小
          -提高计算速度
        • 提高鲁棒性,防止过拟合
      • 分类
        • 平均池化
        • 最大池化
    4. 全连接层

      • 作用
        1. 将前面层提取到的特征进行组合和加权
        2. 参数可通过反向传播学习,适应不同数据和任务
        3. 提高模型的表示能力
          • 更好地捕捉数据中的复杂模式和关系
          • 通过堆叠多个全连接层,结合非线性激活函数,模型就可以学习更复杂的非线性映射
        4. 分类与回归
          • 分类任务中
            1. 将特征映射到不同类别的概率分布上
            2. 方便模型对输入进行分类
          • 回归任务中
            生成连续值的预测
      • 参数
        1. 权重(Weights)
          • 是模型中每个神经元或连接的参数
          • 权重矩阵定义了输入和输出之间的关系
        2. 偏置(Biases)
          额外参数,与权重一起用于计算激活函数的输入
    5. 激活函数(可选)
      不会改变输入内容的形状

      • 作用
        1. 引入非线性变换
          • 全连接层仅可线性变换
          • 将激活函数结果传递给下一个全连接层,可在学习复杂任务时,更好的表达数据的抽象特征
        2. 约束输出范围
        3. 提高模型的数值稳定性
      • 常用激活函数
        • Sigmoid
        • tanh
          RNN 自带一个 tanh
        • Relu
          可以防止梯度消失问题
        • Gelu
    6. Normalization 归一化层(可选)
      对输入数据进行归一化处理,使其具有零均值和单位方差,加速模型训练过程,提高模型稳定性和收敛速度

    • 代码
      from torch.nn import BatchNorm1d
      self.bn1 = BatchNorm1d(50)
    • 分类
      • 批量归一化 batch normalization
        对每一层的向量求平均,再求标准差,之后进行公式计算,获得可训练参数
        • 样本与其他样本归一化,适合 cv
        • 适合两张图片之间相似度评价
      • 层归一化 layer normalization
        纵向向量求平均,再求标准差,之后进行公式计算,获得可训练参数
        • 样本内进行归一化,适合 nlp
        • 适合文本
    1. dropout 层(可选)
      • 代码
        from torch.nn import Dropout
        self.dropout = Dropout(0.5)
      • 是一种常用的正则化技术
        • 作用
          • 减少神经网络的过拟合
          • 提高模型的泛化能力
          • 强制网络学习更加健壮和泛化的特征
          • 减少神经元之间的依赖关系
          • 使得网络更加鲁棒
        • 在训练期间
          • 随机“丢弃”一些神经元
            以一定的概率(通常在0.2到0.5之间)随机地将隐藏单元的输出置为零
          • 保持总体期望值不变
            将其余值按比例进行缩放
        • 在测试期间
          Dropout不会应用,而是将所有神经元的输出乘以保留概率,以保持输出的期望值
  4. 获取预测值

  5. 计算 loss
    是指预测值与样本真实值之间的loss计算。

    • 常见 loss 函数
      • 均方差(MSE)
        回归场景
      • 交叉熵(Cross Entropy)
        分类场景
      • BCE 0/1损失
        分类场景,一般输入为 sigmod 的输出
      • 指数损失
      • 对数损失
      • Hinge损失

backward 反向传播

  1. Optimizer 优化器
    • Adam

      • SGD 进阶版
      • 在模型的权重没有收敛之前(没有训练到预期结果之前),不断循环计算,历史每轮的梯度都参与计算。
      • 可无脑选择使用的优化器。是非常好的baseLine,一般出问题,不会因为adam 出问题。
      • 特点
        在这里插入图片描述
      • 实现
        在这里插入图片描述
        • 一阶动量
          历史 n 轮梯度差值
        • 二阶动量
          历史 n 轮梯度的平方差
        • 避免由于一阶动量与二阶动量初始值为零向量,引起参数估计偏向于 0 的问题
          • 一阶动量偏差修正
            一阶动量历史累计值/(1-超参数 t 次方)
          • 二阶动量偏差修正
            二阶动量历史累计值/(1-超参数 t 次方)
        • 权重更新
    • SGD
      计算逻辑:新权重 = 旧权重 - 学习率 * 梯度

    1. optmi->梯度归零
      optimizer.zero_grad()
    2. loss->反向传播,计算梯度
      loss.backward()
    3. optim->更新权重
      optimizer.step()

使用模型预测真实场景

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个能同时to B和to C、批发零售一体化的需求分析和系统设计

一些企业纠结自己的模式是to B还是to C,一些企业在to B和to C中转型,还有一些企业在做着to B的业务,也在做to C的代发,这些企业在不停地变更着业务,更换着系统,给企业带来巨大的资金和时间成本,…

ssrf攻击fastcgi复现及环境搭建

目录 一、环境 二、开始操作 一、环境 网上自己找vulhub-master.zip,我这里没用docker,本地自己搭建的 二、开始操作 很明显的ssrf漏洞 很明显我们之前的协议file dict 很明显9000端口是开放的 我们还是用gopherus生成一下 我们环境机上很明显有PEAR…

ESP8266+DHT11+Python制作一个物联网温湿度传感器

ESP8266是一款低功耗、高集成度的Wi-Fi SOC(System on Chip,系统级芯片),这款芯片专为物联网(IoT)应用而设计,常见开发ESP8266的环境可以使用Arduino或者ESP8266 RTOS SDK、NodeMCU,…

乐观锁、悲观锁及死锁

乐观锁、悲观锁 1.概念 悲观锁(悲观锁定):具有强烈的独占和排他特性。在整个执行过程中,将处于锁定状态。悲观锁在持有数据的时候总会把资源或者数据锁住,这样其他线程想要请求这个资源的时候就会阻塞,直到等到悲观锁把资源释放为…

QFramework v1.0 使用指南 更新篇:20240919. 新增 BindableDictionary

虽然笔者目前还不知道 BindableDictionary 能用在什么使用场景下,但是还是应童鞋的要求实现了 BindableDictionary。 基本使用如下: using System.Linq; using UnityEngine;namespace QFramework.Example {public class BindableDictionaryExample : MonoBehaviou…

《让手机秒变超级电脑!ToDesk云电脑、易腾云、青椒云移动端评测》

前言 科技发展到如今2024年,可以说每一年都在发生翻天覆地的变化。而云上这个词时常都被大家提起,从个人设备连接到云端在如今在也不是梦了。而云电脑这个市场近年来迅速发展,无需购买和维护额外的硬件就可以体验到电脑端顶配的性能和体验&am…

Adams与Matlab通过FMI联合仿真

Adams与Matlab的联合仿真通过Adams/Controls中的接口功能已经很早就实现,具体是通过Adams安装路径下的支持文件,利用Adams/Controls中的导出功能,将Adams模型生成模型文件以及同Matlab的接口文件*.m,然后在Matlab中执行该*.m文件后…

使用SoapUI、Postman工具调用Webservice方法

SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称,输入wsdl地址: 在左侧列表找到方法名,双击“Request 1”, 在请求数据中,添加对应的参数,然…

Linux文件IO(五)-三种进程退出方法及空洞文件

1.三种进程退出方法 return 当程序在执行某个函数出错的时候,如果此函数执行失败会导致后面的步骤不能在进行下去时,应该在出错时终止程序运行,不应该让程序继续运行下去,那么如何退出程序、终止程序运行呢?有过编程…

面试面经|大模型算法岗常见面试题100道

本文提供了一份全面的大模型算法岗位面试题清单,包括基础理论、模型结构、训练微调策略、应用框架、分布式训练和模型推理等方面的知识点,旨在帮助求职者准备相关技术面试。 一、基础篇 1、目前主流的开源模型体系有哪些? Transformer体系&a…

RTX NVIDIA 3090卡配置对应pytorch,CUDA版本,NVIDIA驱动过程及问题整理

买了两块3090卡闲置很长时间了,之前tf 1.12.0版本用习惯了不想转工具。这段时间闲下来转了之后有些环境不适配,在雷神帮助下安装完毕,虽然出了点怪东西,整体还好。 原环境CUDA为11.4 其他配置如下 之前conda install的pytorch实为…

智慧仓储-AI销量预测

1、预测系统技术选型 基础层: Hbase、ClickHouse、Hdfs 用来做数据存储 框架层: 以 Spark RDD、Spark SQL、Hive 为主, MapReduce 程序占一小部分,是原先遗留下来的,目前正逐步替换成 Spark RDD。 选择 Spark 除了对…

【hot100-java】【每日温度】

R8-栈篇 印象题:单调栈的使用 参考本人博客&#xff1a;单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int numtemperatures.length;int [] retnew int[num];Stack<Integer>stnew Stack<>();for (int i0;i<num;i){while(!st.…

vscode 配置rust格式化的正确方法

vscode 配置rust格式化的正确方法&#xff1a; 在settings.json里输入&#xff1a; "[rust]": {"editor.defaultFormatter": "rust-lang.rust-analyzer","editor.formatOnSave": true}

揭露大模型本质,大模型入门必看的12本书!看完我直接跪了

敢不敢用一年时间读完这12本书&#xff0c;模型入门必看的12本书&#xff01;建议收藏&#xff01;&#xff01; 第一本&#xff1a; 《基于GPT-3,ChatGPT,GPT-4等Transformer架构的自然语言处理》 主要内容 了解用于解决复杂语言问题的新技术。将GPT-3与T5、GPT-2和基于BE…

[Linux]基础操作指令

开机/重启/登录/注销 进入xhsell 或者虚拟系统中, 右键桌面打开终端, 在终端执行命令, 重启或关机linux系统 建议使用普通账号登录, 如果权限不够时, 使用 su - 用户名 命令切换到超管, 然后再使用 logout命令退回到普通账号, logout 不能在图形界面的终端中使用 用户管理 Li…

【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作的秘密

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;Linux Shell &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux基础IO &#x1f4d2;1. …

python源代码编译exe 防止反编译的问题

1&#xff09;使用pyinstaller 打包为exe, 记住是版本是5.*&#xff0c;我用的是5.13.2 &#xff0c;不能是6.* 这是第一步。 pyinstaller -F -i d:\whs.ico packer.py -w 2&#xff09;使用pyarmor 再次加密,我使用的版本是8.3.11&#xff0c;不是7.*&#xff0c;这是第二步…

[深度学习]神经网络

1 人工神经网络 全连接神经网络 2 激活函数 隐藏层激活函数由人决定输出层激活函数由解决的任务决定: 二分类:sigmoid多分类:softmax回归:不加激活(恒等激活identify)2.1 sigmoid激活函数 x为加权和小于-6或者大于6,梯度接近于0,会出现梯度消失的问题即使取值 [-6,6] ,…

C++速通LeetCode中等第16题-环形链表II(快慢指针)

算法思路&#xff08;主要是数学推导&#xff09;&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detectCycle(ListNo…