当前位置: 首页 > news >正文

深度学习DAY3:FFNNLM前馈神经网络语言模型

1 神经网络语言模型NNLM的提出

文章:自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT)
https://www.cnblogs.com/robert-dlut/p/9824346.html

语言模型不需要人工标注语料(属于自监督模型),所以语言模型能够从无限制的大规模语料中,学习到丰富的语义知识。
在这里插入图片描述

1.1 n-gram模型问题:

①模型高度依赖训练语料,泛化能力差,也就是不同文本之间的n-gram差异很大

②模型估算概率时遇到的数据稀疏,平滑后效果也不好

在这里插入图片描述

  • 点—— 用n-gram语料库训练出来的每个词序列的出现的概率
  • 平滑曲线——所有词序列概率相乘所得的P(S),也就是有这些词序列所组成的句子的出现概率

在这里插入图片描述

  • 离散点与曲线的距离——点1是词序列1的概率,但是离散词序列点1没在平滑曲线L上面,也就是n-gram模型会将该离散词序列1附近的另一个词序列2(在平滑曲线上)的概率作为离散词序列点1的概率去建立模型。而词序列2不一定在语料库中有出现
    因此,n-gram所建立的模型对某个句子进行预测时,会有较大的概率损失。
    这是无论怎么平滑都无法避免的,因为建立模型的概率点是离散的。
    特别是差异很大的异常点,会对模型的结果造成比较大的影响

③n元模型无法建立长期联系

④n-gram以离散符号为统计单元,无法体现语义相似性

在这里插入图片描述
由于数据是离散的,如果特别能没有在语料库出现过,而在语料库中的出现概率很大但是特别能和能意思相近,那么根据n-gram的计算原理,两个已经意思相近的句子的出现概率可能一个为0,一个很大,而实际上两个句子的出现概率差不多,因此会有很大的概率损失误差。

1.2 NNLM 的提出

神经网络NN

为了解决这个问题,我们在将神经网络(NN)引入到了连续空间的语言建模中。NN 包括前馈神经网络(FFNN)、循环神经网络(RNN)、卷积神经网络(CNN)可以自动学习特征和连续的表征。因此,人们希望将 NN 应用于 LM,甚至其他的 NLP 任务,从而考虑自然语言的离散性、组合性和稀疏性。

n-gram学出了离散词序列出现频率点,而深度学习的神经网络语言模型直接学习出了平滑曲线

也就是不同于n-gram里面的平滑曲线是“模糊的拟合”,深度学习的平滑曲线是“更细粒度的拟合”。

NNLM可以联系长期上下文
在这里插入图片描述

2 前馈神经网络FFNN

别称多层感知器(multilayer perceptrons)

2.1 包含两层隐藏层的前馈神经网络

  • 每一个箭头都带着权重,表示其输入变量的重要程度
  • 隐藏层中每个圆圈代表一个神经元,神经元对应着某个函数,通常都是一个非线性函数σ(sigmoid最常用,也有换成ReUL、tanh的),该类非线性函数在NN中被称为激活函数。

激活函数之sigmoid“S型函数”

激活函数之tanhh“双曲正切”函数

激活函数之ReLU“线性整流函数”

  • 隐藏层的结果会通过线性加权组合变成下一个层的输入
  • 输出层神经元的个数取决的任务的分类类别个数
  • 一些层是没有线性激活函数的,比如sigmoid函数

2.2 神经元

每个神经元都是一个函数。
在这里插入图片描述

2.2.1 公式:

y = σ( Σ(Wi * Xi) + b)

输入:x
输出:y
权重:Xi对应权重Wi
激活函数σ:sigmoid、tanh、ReLU

参数b:表示偏置/阈值,b是一个常数。b与加权求和值相加,然后再经过激活函数。这有助于调整神经元的灵敏度和响应特定类型的输入。

在神经元网络中,偏置是一种可学习的参数,用于调整神经元的激活值。

意义:
调整神经元的激活函数在输入为零时的截距位置。

2.2.2 神经元处理步骤:

1 对输入加权求和,加上偏置b

得到初步的点估计值

h =(Σ(W * X)+b)

意义:

  • 特征加权重要性:权重(weights)表示了每个输入特征的重要性,它们决定了每个特征在神经元的决策中所占的比重。通过适当调整权重,神经元可以学习到哪些特征对于问题的解决更为关键,从而提高网络的性能。

  • 偏置项引入平移:偏置项(bias)是一个常数,它的作用是引入一个平移,允许神经元在没有任何输入信号时也能发出非零的响应。这对于模型的表达能力很重要,因为它允许神经元不仅仅依赖于输入的线性组合,还能引入非线性决策。

实例:

房价预测

假设我们正在构建一个神经网络来预测房价。我们有三个 输入特征:房屋面积(Area)、卧室数量(Bedrooms)、和附近学校的评分(School_Rating)。每个特征都有对应的权重,用来衡量它们在预测房价中的重要性。

  • 权重1(w1)对应房屋面积,表示房屋面积对房价的影响程度。
  • 权重2(w2)对应卧室数量,表示卧室数量对房价的影响程度。
  • 权重3(w3)对应附近学校的评分,表示学校评分对房价的影响程度。

假设偏置项(b)为-10000,这意味着即使所有输入特征都为零,房价预测也不会降到零,因为偏置项引入了一个平移。这是因为即使房屋没有面积、没有卧室、学校评分为零,房价仍然有一个基本价值。

通过对这些输入进行加权求和,加上偏置项,神经元可以计算一个房价的初始估计值。然后,这个初始估计值将被送入激活函数,例如线性激活函数、Sigmoid函数或ReLU函数,以引入非线性性质并产生最终的房价预测。

2 激活函数映射——引入非线性性质

将h的值通过激活函数σ映射到一个特定的输出范围内的一个值,通常是[0, 1]或[-1, 1]

σ(h)

在这里插入图片描述
意义:引入非线性性质,使神经网络能够适应更加复杂的数据模式和问题。

例子

二元分类

假设我们有一个二元分类问题,要根据一些特征来预测一封电子邮件是垃圾邮件(标记为1)还是非垃圾邮件(标记为0)。神经网络的最后一层输出单元通常需要产生一个在[0, 1]范围内的值,表示某封邮件属于垃圾邮件的概率。这时,Sigmoid激活函数非常适合用于最后一层,因为它可以将加权求和值映射到[0, 1]之间的范围。

例如,如果某封邮件的加权求和值为0,经过Sigmoid激活后,输出为0.5,表示该邮件属于垃圾邮件和非垃圾邮件的概率相等。如果加权求和值远远大于0,例如10,经过Sigmoid激活后,输出接近于1,表示邮件极有可能是垃圾邮件。反之,如果加权求和值远远小于0,例如-10,经过Sigmoid激活后,输出接近于0,表示邮件很可能是非垃圾邮件。

这样,我们可以利用Sigmoid函数将连续的加权求和值映射到概率值,方便进行分类决策。

3 前馈神经网络语言模型FFNNLM

(Feed Forward Neural Language Model )

前馈神经网络语言模型(FFNNLM)由 Bengio 等人于 2003 年提出,它通过学习一个单词的分布式表征将单词表征为一个被称为「嵌入」的低维向量)来克服维数诅咒。FFNNLM 的性能要优于 N 元语言模型。

该语言模型使用了一个三层前馈神经网络来进行建模。其中有趣的发现了第一层参数,用做词表示不仅低维紧密,而且能够蕴涵语义,也就为现在大家都用的词向量(例如word2vec)打下了基础

Word2Vec是Google公司于2013年发布的一个开源词向量工具包。该项目的算法理论参考了Bengio 在2003年设计的神经网络语言模型。由于此神经网络模型使用了两次非线性变换(tanh、softmax),网络参数很多,训练缓慢,因此不适合大语料。Mikolov团队对其做了简化,实现了Word2Vec词向量模型。 ——《NLP汉语自然语言处理原理与实践》

在这里插入图片描述
在这里插入图片描述
右上方橙色表格为词向量矩阵,对应下面的"V"
NNLM北语讲解

3.2 LSTM-RNNLM长短期记忆循环神经网络模型

Mikolov 等人于 2010 年提出了 RNN 语言模型(RNNLM),理论上可以记忆无限个单词,可以看作"无穷元语法" (∞-gram)。
RNN解决了学习长期依赖问题,能够联系上下文
在这里插入图片描述

是否三元或者四元甚至更高阶的模型就能覆盖所有的语言现象呢?答案显然是否定的。因为自然语言中,上下文之间的相关性可能跨度非常大,甚至可以从一个段落跨到另一个段落。因此,即使模型的阶数再提高,对这种情况也无可奈何,这就是马尔可夫假设的局限性,这时就要采用其他一些长程的依赖性(Long DistanceDependency)来解决这个问题了。——《数学之美》

参考

自然语言处理NLP中的N-gram模型

简单理解 n-gram

语言模型(N-Gram
N-gram的简单的介绍
N-Gram语言模型
语言模型(LM)和循环神经网络(RNNs
自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT
【研究前沿】神经网络语言模型综述_单词
NLP:n-gram模型
前馈网络

相关文章:

深度学习DAY3:FFNNLM前馈神经网络语言模型

1 神经网络语言模型NNLM的提出 文章:自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT) https://www.cnblogs.com/robert-dlut/p/9824346.html 语言模型不需要人工标注语料(属于自监督模型),所以语言…...

JavaSE学习值之--String类

💕"不要同情自己,同情自己是卑劣懦夫的勾当!"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--String类 目录 前言: 一.String类 1.String类的属性 2.字符串的构造 注意&#xf…...

【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题

文章目录 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题⛅前言员工的直属部门🔒题目🔑题解 判断三角形🔒题目🔑题解 连续出现的数字🔒题目🔑题解 指定日期的产品价格🔒题目&am…...

基于单片机的汽车智能仪表的设计

基于单片机的汽车智能仪表的设计 摘要:汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象,本次设计的基础核心的模块就是单片机,其应用的核心的控制单元就是stc89c52单片机,用到的测速模块是霍尔传感器&#xff0c…...

【Docker 内核详解】namespace 资源隔离(一):进行 namespace API 操作的 4 种方式

namespace 资源隔离(一):进行 namespace API 操作的 4 种方式 1.通过 clone() 在创建新进程的同时创建 namespace2.查看 /proc/[pid]/ns 文件3.通过 setns() 加入一个已经存在的 namespace4.通过 unshare() 在原先进程上进行 namespace 隔离5…...

【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案

摘要:针对原子力显微镜对真空度和气氛环境精密控制要求,本文提出了精密控制解决方案。解决方案基于闭环动态平衡法,在低真空控制时采用恒定进气流量并调节排气流量的方法,在高真空和超高真空控制时则采用恒定排气流量并调节进气流…...

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上,提供了一种集中管理应用程序状态的方式。使用Vuex,您可以将应用程序的状态存储在一个单一的位置(即“存储”)中,…...

python经典百题之简单加密数据

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 程序分析 对于…...

登陆认证权限控制(1)——从session到token认证的变迁 session的问题分析 + CSRF攻击的认识

前言 登陆认证,权限控制是一个系统必不可少的部分,一个开放访问的系统能否在上线后稳定持续运行其实很大程度上取决于登陆认证和权限控制措施是否到位,不然可能系统刚刚上线就会夭折。 本篇博客回溯登陆认证的变迁历史,阐述sess…...

单点接地、多点接地、混合接地

有三种基本的信号接地方式:浮地、单点接地、多点接地。 浮地:目的是使电路或设备与公共地线可能引起环流的公共导线隔离起来,浮地还使不同电位的电路之间配合变得容易。缺点:容易出现静电积累引起强烈的静电放电。折中方案:接入泄…...

【C++初阶(一)】学习前言 命名空间与IO流

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...

flask vue跨域问题

问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…...

stm32(二十)IAP升级优化(双缓存,可恢复)

这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能, 主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中,必…...

HDLbits:Exams/ece241 2013 q4

本题是一个实际的应用问题,一个水库,有三个传感器S1、S2、S3提供输入,经过控制电路,四个输出给到四个流量阀。也就是说,本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state,答案是&…...

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Response Status Code 301、302

目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况: codeinformation301(Moved Permanently) 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时,服务器会返回这个…...

import { ref, onMounted, reactive } from ‘vue‘

ref, onMounted, reactive 用于创建和操作响应式数据、生命周期钩子。 1.ref 用来创建一个响应式的引用(Reactive Reference)的函数,主要用于创建基本数据类型(如数字、字符串等)的响应式数据。 通过 ref 创建的变…...

【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB

功能: 1 超声波测距显示 2 按键设置报警上下限 3 蜂鸣器报警 原理图: PCB样式: 实物: 代码: https://github.com/xddun/blog_code_search...

npm install报错

在命令提示符窗口下载npm,报错如下: $npm install报错信息如下: npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must…...

Flutter自定义model实体类

在某些场景下,我们可能需要自定义Flutter model实体类,来创建更加结构化和有组织的代码,提高代码的可重用性,并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时,可能需要定义自定义数据类型来…...

java项目实现不停服更新的4种方案(InsCode AI 创作助手)

文章目录 1. Blue-Green 部署2. 滚动更新3. 使用负载均衡器4. 灰度发布 在软件开发和维护中,不停机更新是确保应用程序持续可用的关键任务之一。以下是四种常见的不停机更新策略及其示例: 1. Blue-Green 部署 概念: Blue-Green 部署是一种部…...

7.1 yolov5优化模型时,自动标注xml数据

yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码: 注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行…...

开发者职场“生存状态”大调研报告分析 - 第一版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...

在MySQL中使用!=还能走索引吗?

在MySQL中使用!还能走索引吗? 一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询,索引还能发挥他的作用吗&#xf…...

【算法题】2897. 对数组执行操作使平方和最大

题目: 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 : 选择两个互不相同的下标 i 和 j ,同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...

2023年中国划船机产量、销量及市场规模分析[图]

划船机是一种健身器材,它模拟了划船的运动,可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成,使用者可以通过拉动把手来模拟划船的动作,从而达到锻炼身体的目的。 划船机产业链 资料来源&#xff…...

Kafka和RabbitMQ的对比

Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...

ffmpeg从一个视频中提取音频

ffmpeg -i ~/video/video.mp4 -vn -acodec copy ~/video/audioFile.m4a 从video.mp4中提取音频到文件audioFile.m4a中 查看提取的音频文件 ffprobe ~/video/audioFile.m4a...

CCF CSP题解:坐标变换(其一)(202309-1)

链接 OJ链接&#xff1a;传送门 AC代码 #include <iostream>using namespace std;int n, m;int dx 0, dy 0;int main() {cin >> n >> m;for (int i 0; i < n; i) {int x, y;cin >> x >> y;dx x;dy y;}for (int i 0; i < m; i) {i…...

跳表C语言

【C语言】算法学习跳表_c语言跳表-CSDN博客 leetcode原题&#xff0c;代码如下 #define MAX(a, b) ((a) > (b) ? (a) : (b)) const int MAX_LEVEL 32; const int P_FACTOR RAND_MAX >> 2;typedef struct SkiplistNode {int val;int maxLevel;struct SkiplistNode…...