Loading [MathJax]/extensions/TeX/boldsymbol.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >NLP教程(5) - 语言模型、RNN、GRU与LSTM

NLP教程(5) - 语言模型、RNN、GRU与LSTM

原创
作者头像
ShowMeAI
发布于 2022-05-07 16:20:04
发布于 2022-05-07 16:20:04
7820
举报
文章被收录于专栏:ShowMeAI研究中心ShowMeAI研究中心
语言模型、RNN、GRU与LSTM
语言模型、RNN、GRU与LSTM

本系列为斯坦福CS224n自然语言处理深度学习(Natural Language Processing with Deep Learning)》的全套学习笔记,对应的课程视频可以在 这里 查看。

循环神经网络与语言模型
循环神经网络与语言模型
梯度消失问题与RNN变种
梯度消失问题与RNN变种

ShowMeAI为CS224n课程的全部课件,做了中文翻译和注释,并制作成了 GIF动图!点击 第6讲-循环神经网络与语言模型第7讲-梯度消失问题与RNN变种 查看的课件注释与带学解读。更多资料获取方式见文末。

引言

CS224n是顶级院校斯坦福出品的深度学习与自然语言处理方向专业课程,核心内容覆盖RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。

本篇笔记对应斯坦福CS224n自然语言处理专项课程的知识板块:语言模型、循环神经网络RNN、变种RNN (LSTM、GRU等) 。首先介绍了语言模型及其应用场景,进而介绍循环神经网络RNN及优化后的变种LSTM和GRU模型。

笔记核心词

  • 语言模型
  • RNN
  • 循环神经网络
  • 双向RNN
  • 深度RNN
  • 长短时记忆网络
  • LSTM
  • GRU

1.语言模型

(语言模型部分内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章 深度学习教程 | 序列模型与RNN网络

1.1 简介

语言模型计算特定序列中多个单词以一定顺序出现的概率。一个 个单词的序列 的概率定义为 。单词 前有一定数量的单词,其特性会根据它在文档中的位置而改变, 一般只考虑前 个单词而不是考虑全部之前的单词。

上面的公式在语音识别机器翻译系统中有重要的作用,它可以辅助筛选语音识别和机器翻译的最佳结果序列。

在现有的机器翻译系统中,对每个短语/句子翻译,系统生成一些候选的词序列 (例如,) ,并对其评分以确定最可能的翻译序列。

在机器翻译中,对一个输入短语,通过评判每个候选输出词序列的得分的高低,来选出最好的词顺序。为此,模型可以在不同的单词排序或单词选择之间进行选择。它将通过一个概率函数运行所有单词序列候选项,并为每个候选项分配一个分数,从而实现这一目标。最高得分的序列就是翻译结果。例如:

  • 相比 small is the cat,翻译系统会给 the cat is small 更高的得分;
  • 相比 walking house after school,翻译系统会给 walking home after school 更高的得分。

1.2 n-gram语言模型

为了计算这些概率,每个 n-gram 的计数将与每个单词的频率进行比较,这个称为 n-gram 语言模型。

  • 例如,如果选择 bi-gram模型 (二元语言模型) ,每一个 bi-gram 的频率,通过将单词与其前一个单词相结合进行计算,然后除以对应的 uni-gram 的频率。
  • 下面的两个公式展示了 bi-gram 模型和 tri-gram 模型的区别。

上式 tri-gram 模型的关系主要是基于一个固定的上下文窗口 (即前个单词) 预测下一个单词。一般的取值为多大才好呢?

  • 在某些情况下,前面的连续的 个单词的窗口可能不足以捕获足够的上下文信息。
    • 例如,考虑句子 (类似完形填空,预测下一个最可能的单词)
    • Asthe proctor started the clock, the students opened their __。如果窗口只是基于前面的三个单词 the students opened their ,那么基于这些语料计算的下划线中最有可能出现的单词就是为 books ——但是如果 足够大,能包括全部的上下文,那么下划线中最有可能出现的单词会是 exam

这就引出了 n-gram 语言模型的两个主要问题:「稀疏性」和「存储」。

1) n-gram语言模型的稀疏性问题

n-gram 语言模型的问题源于两个问题。

① 对应公式中的分子,可能有稀疏性问题。

  • 如果 在语料中从未出现过,那么 的概率就是
  • 为了解决这个问题,在每个单词计数后面加上一个很小的 ,这就是平滑操作。

② 对应公式中的分母,可能有稀疏性问题。

  • 如果 在语料中从未出现过,那么 的概率将会无法计算。
  • 为了解决这个问题,这里可以只是单独考虑 ,这就是backoff 操作。

增加 会让稀疏问题更加严重,所以一般

2) n-gram语言模型的存储问题

我们知道需要存储在语料库中看到的所有 n-gram 的统计数。随着的增加(或语料库大小的增加),模型的大小也会增加。

1.3 基于文本滑窗的预估型语言模型 (NNLM)

Bengio 的论文《A Neural Probabilistic Language Model》中首次解决了上面所说的“维度灾难”,这篇论文提出一个自然语言处理的大规模的深度学习模型,这个模型能够通过学习单词的分布式表示,以及用这些表示来表示单词的概率函数。

下图展示了NNLM对应的神经网络结构,在这个模型中,输入向量在隐藏层和输出层中都被使用。

NNLM模型
NNLM模型

下面公式展示了由标准 tanh 函数 (即隐藏层) 组成的 softmax 函数的参数以及线性函数,捕获所有前面 个输入词向量。

注意权重矩阵是应用在词向量上 (上图中的绿色实线箭头) ,是应用在隐藏层 (也是绿色实线箭头) 和是应用在词向量 (绿色虚线箭头) 。

这个模型的简化版本如下图所示:

NNLM模型简化版本
NNLM模型简化版本
  • 蓝色的层表示输入单词的 embedding 拼接:
  • 红色的层表示隐藏层:
  • 绿色的输出分布是对词表的一个 softmax 概率分布:

2.循环神经网络 (RNN)

(循环神经网络部分内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与RNN网络

传统的统计翻译模型,只能以有限窗口大小的前 个单词作为条件进行语言模型建模,循环神经网络与其不同,RNN 有能力以语料库中所有前面的单词为条件进行语言模型建模。

下图展示的 RNN 的架构,其中矩形框是在一个时间步的一个隐藏层

循环神经网络 (RNN)
循环神经网络 (RNN)

每个这样的隐藏层都有若干个神经元,每个神经元对输入向量用一个线性矩阵运算然后通过非线性变化 (例如 tanh 函数) 得到输出。

  • 在每一个时间步,隐藏层都有两个输入
    • 前一个时间步的隐藏层
    • 当前时间步的输入
  • 前一个时间步的隐藏层 通过和权重矩阵 相乘和当前时间步的输入 和权重矩阵 相乘得到当前时间步的隐藏层
  • 和权重矩阵 相乘,接着对整个词表通过 softmax 计算得到下一个单词的预测结果 ,如下面公式所示:

每个神经元的输入和输出如下图所示:

RNN神经元的输入和输出
RNN神经元的输入和输出

在这里一个有意思的地方是在每一个时间步使用相同的权重。这样模型需要学习的参数就变少了,这与输入序列的长度无关——这从而解决了维度灾难。

以下是网络中每个参数相关的详细信息:

  • :含有 个单词的语料库对应的词向量
  • :每个时间步 的隐藏层的输出特征的计算关系
  • :在时间步 的输入词向量
  • :输入词向量 对应的权重矩阵
  • :上一个时间步的输出 对应的权重矩阵
  • :上一个时间步 的非线性函数输出。 是在时间步 的隐藏层的一个初始化向量
  • :非线性函数 (这里是 sigmoid 函数)
  • :在每个时间步 全部单词的概率分布输出。本质上 是给定文档上下文分数 (例如 ) 和最后观测的词向量 ,对一个出现单词的预测。这里 ,其中 是词汇表的大小。

一个 RNN 语言模型的例子如下图所示。

RNN语言模型
RNN语言模型

图中的符号有一些的不同:

  • 等同于
  • 等同于
  • 等同于
  • 表示单词输入 转化为

在 RNN 中常用的损失函数是在之前介绍过的交叉熵误差。下面的公式是这个函数在时间步 全部单词的求和。最后计算词表中的 softmax 计算结果展示了基于前面所有的单词对输出单词 的不同选择的概率分布。这时的输入可以比4到5个单词更长。

2.1 RNN损失与困惑度

RNN 的损失函数一般是交叉熵误差。

在大小为的语料库上的交叉熵误差的计算如下:

2.2 RNN的优缺点及应用

RNN 有以下优点

  • 它可以处理任意长度的序列
  • 对更长的输入序列不会增加模型的参数大小
  • 对时间步 的计算理论上可以利用前面很多时间步的信息
  • 对输入的每个时间步都应用相同的权重,因此在处理输入时具有对称性

但是 RNN 也有以下不足

  • 计算速度很慢——因为它每一个时间步需要依赖上一个时间步,所以不能并行化
  • 在实际中因为梯度消失和梯度爆炸,很难利用到前面时间步的信息

运行一层 RNN 所需的内存量与语料库中的单词数成正比。

例如,我们把一个句子是为一个 mini batch,那么一个有 个单词的句子在内存中就会占用 个词向量的存储空间。同时,RNN必须维持两对 矩阵。然而 的可能是非常大的,它的大小不会随着语料库的大小而变化 (与传统的语言模型不一样) 。对于具有个循环层的RNN,矩阵的大小为而与语料库大小无关。

RNN可以应用在很多任务,例如:

  • 标注任务 (词性标注、命名实体识别)
  • 句子分类 (情感分类)
  • 编码模块 (问答任务,机器翻译和其他很多任务)

在后面的两个任务,我们希望得到对句子的表示,这时可以通过采用该句子中时间步长的所有隐藏状态的的最大值或平均值来获得。

下图是一些资料中对 RNN 模型的另外一种表示。它将 RNN 的每个隐层用一个环来表示。

RNN随时间步长循环的图示
RNN随时间步长循环的图示

2.3 梯度消失与梯度爆炸问题

(梯度消失和梯度爆炸部分内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 深度学习的实用层面

RNN 从一个时间步传播权值矩阵到下一个时间步。回想一下,RNN 实现的目标是通过长距离的时间步来传播上下文信息。例如,考虑以下两个句子:

场景1

Jane walked into the room. John walked in too. Jane said hi to __

场景2

Jane walked into the room. John walked in too. It was late in the day, and everyone was walking home after a long day at work. Jane said hi to __

对上面的两个句子,根据上下文,都可以知道空白处的答案是John,第二个在两个句子的上下文中均提及了好几次的人。

迄今为止我们对 RNN 的了解,在理想情况下,RNN 也是能够计算得到正确的答案。然而,在实际中,RNN 预测句子中的空白处答案正确可能性,第一句要比第二句高。这是因为在反向传播的阶段的过程中,从前面时间步中回传过来的梯度值会逐渐消失。因此,对于长句子,预测到 John 是空白处的答案的概率会随着上下文信息增大而减少。

下面,我们讨论梯度消失问题背后的数学原因。

考虑公式在时间步 ,计算RNN误差 ,然后我们把每个时间步的误差都加起来。也就是说,计算并累积每个时间步长

通过将微分链式法则应用于以下公式来计算每个时间步长的误差

下列公式展示对应的微分计算。注意 对之前所有的 个时间步的偏导数。

下式展示了计算每个 的关系;这是在时间间隔 内对所有的隐藏层的应用一个简单的微分链式法则。

因为 ,每个 的Jacobian矩阵的元素:

将公式合起来,我们有以下关系。

下式展示了Jacobian矩阵的范数。这里的 是这两个矩阵范数的上界值。因此通过公式所示的关系计算在每个时间步 的部分梯度范数。

计算这两个矩阵的L2范数。在给定的非线性函数sigmoid下, 的范数只能等于1。

足够大和 远远小于1或者远远大于1,指数项 的值就很容易变得非常小或者非常大。

由于单词之间的距离过大,用一个很大的 评估交叉熵误差可能会出现问题。在反向传播的早期就出现梯度消失,那么远处单词对在时间步长预测下一个单词中,所起到的作用就会变得很小。

在实验的过程中:

  • 一旦梯度的值变得非常大,会导致在运行过程中容易检测到其引起的溢出 (即NaN) ;这样的问题称为「梯度爆炸」问题。
  • 当梯度接近为0的时候,梯度近乎不再存在,同时降低模型对语料库中的远距离的单词的学习质量;这样的问题称为「梯度消失」问题。
    • 如果相对梯度消失问题的有更直观的了解,你可以访问这个 样例网站

2.4 梯度消失与爆炸解决方法

现在我们知道了梯度消失问题的本质以及它在深度神经网络中如何表现出来,让我们使用一些简单实用的启发式方法来解决这些问题。

2.4.1 梯度爆炸解决方法

为了解决梯度爆炸的问题,Thomas Mikolov 等人首先提出了一个简单的启发式解决方案,每当梯度大于一个阈值的时候,将其截断为一个很小的值,具体如下面算法中的伪代码所示。

❐ Algorithm : Pseudo-code for norm clipping in the gradients whenever they explode【范数梯度裁剪的伪代码】

下图可视化了梯度截断的效果。它展示了一个权值矩阵为 和偏置项为 的很小的RNN神经网络的决策界面。该模型由一个单一单元的循环神经网络组成,在少量的时间步长上运行;实心箭头阐述了在每个梯度下降步骤的训练过程。

渐变爆炸剪裁可视化
渐变爆炸剪裁可视化

当在梯度下降的过程中,模型碰到目标函数中的高误差壁时,梯度被推到决策面上的一个遥远的位置。截断模型生成了虚线,在那里它将误差梯度拉回到靠近原始梯度的地方。

2.4.2 梯度消失解决方法

为了解决梯度消失问题,研究人员提出两个技术:

  • 第一个技术是不去随机初始化 ,而是初始化为单位矩阵。
  • 第二个技术是使用Rectified Linear (ReLU) 单元代替 sigmoid 函数。ReLU 的导数是 或者 。这样梯度传回神经元的导数是,而不会在反向传播了一定的时间步后梯度变小。

2.5 深度双向循环神经网络

前面部分我们讲解了用 RNN 如何使用过去的词来预测序列中的下一个单词。同理,可以通过令 RNN 模型向反向读取语料库,根据未来单词进行预测。

Irsoy 等人展示了一个双向深度神经网络;在每个时间步 ,这个网络维持两个隐藏层,一个是从左到右传播,而另外一个是从右到左传播。

为了在任何时候维持两个隐藏层,该网络要消耗的两倍存储空间来存储权值和偏置参数。最后的分类结果,是结合由两个 RNN 隐藏层生成的结果得分产生。

下图展示了双向 RNN 的网络结构

双向RNN模型
双向RNN模型

而下式展示了给出了建立双向RNN隐层的数学公式。两个公式之间唯一的区别是递归读取语料库的方向不同。最后一行展示了通过总结过去和将来的单词表示,显示用于预测下一个单词的分类关系:

RNN也可以是多层的。下图展示一个多层的双向 RNN,其中下面的隐藏层传播到下一层。

如图所示,在该网络架构中,在时间步 ,每个中间神经元从前一个时间步 (在相同的 RNN 层) 接收一组参数和前一个 RNN 隐藏层的两组参数;这两组参数一组是从左到右的 RNN 输入,另外一组是从右到左的 RNN 输入。

具有三个RNN层的深双向RNN
具有三个RNN层的深双向RNN

为了构建一个 L 层的深度 RNN,上述的关系要修改为在公式中的关系,其中在第 层的每个中间神经元的输入是在相同时间步 的RNN第 层的输出。最后的输出 ,每个时间步都是输入参数通过所有隐层传播的结果。

2.6 应用:基于RNN的翻译系统

(神经机器翻译部分内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | Seq2Seq序列模型和注意力机制

传统的翻译模型是非常复杂的:它们包含很多应用在语言翻译流程的不同阶段的机器学习算法。这里讲解采用 RNN 作为传统翻译模型的替代方法。

考虑下图中展示的 RNN 模型:其中德语短语 Echt dicke Kiste 翻译为 Awesome sauce。

基于RNN的翻译模型
基于RNN的翻译模型

首先,前三个时间步的隐藏层编码德语单词为一些语言的单词特征 () 。后面两个时间步解码 为英语单词输出。下式分别展示了编码阶段和解码阶段(后两行)。

一般可以认为使用交叉熵函数的RNN模型可以生成高精度的翻译结果。在实际中,在模型中增加一些扩展方法可以提升翻译的准确度表现。

扩展 1:在训练 RNN 的编码和解码阶段时,使用不同的权值。这使两个单元解耦,让两个 RNN 模块中的每一个进行更精确的预测。这意味着在公式中 函数里使用的是不同的 矩阵。

扩展 2:使用三个不同的输入计算解码器中的每个隐藏状态

使用三个不同的输入计算解码器中的每个隐藏状态
使用三个不同的输入计算解码器中的每个隐藏状态
  • 前一个隐藏状态 (标准的)
  • 编码阶段的最后一个隐藏层 (上图中的)
  • 前一个预测的输出单词

将上述的三个输入结合将之前公式的解码函数中的 函数转换为下式的 函数。上图展示了这个模型。

扩展 3:使用多个 RNN 层来训练深度循环神经网络。神经网络的层越深,模型的就具有更强的学习能力从而能提升预测的准确度。当然,这也意味着需要使用大规模的语料库来训练这个模型。

扩展 4:训练双向编码器,提高准确度。

扩展 5:给定一个德语词序列,它的英语翻译是。在训练时不使用,而是使用。这么处理的原因是更有可能被翻译成。因此对前面讨论的梯度消失问题,反转输入句子的顺序有助于降低输出短语的错误率。

3.Gated Recurrent Units (GRU模型)

(GRU模型的讲解也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与RNN网络

除了迄今为止讨论的扩展方法之外,我们已经了解到 RNN 通过使用更复杂的激活单元来获得表现更好。到目前为止,我们已经讨论了从隐藏状态转换的方法,使用了一个仿射转换和的非线性转换。

研究者通过调整门激活函数的结构完成对 RNN 结构的修改。

虽然理论上 RNN 能捕获长距离信息,但实际上很难训练网络做到这一点。门控制单元可以让 RNN 具有更多的持久性内存,从而更容易捕获长距离信息。让我们从数学角度上讨论 GRU 如何使用 来生成下一个隐藏状态。然后我们将深入了解 GRU 架构。

Update gate

Reset gate

New memory

Hidden state

上述的共识可以认为是 GRU 的四个基本操作阶段,下面对这些公式作出更直观的解释,下图展示了 GRU 的基本结构和计算流程:

GRU的详细内部结构
GRU的详细内部结构
  • 新记忆生成:一个新的记忆 是由一个新的输入单词 和过去的隐藏状态 共同计算所得。这个阶段是将新输入的单词与过去的隐藏状态 相结合,根据过去的上下文来总结得到向量
  • 重置门:复位信号 是负责确定 对总结 的重要程度。如果确定 与新的记忆的计算无关,则复位门能够完全消除过去的隐藏状态 (即忽略之前隐藏的信息) 。
  • 更新门:更新信号 负责确定有多少 可以向前传递到下一个状态。例如,如果 ,然后 几乎是完全向前传递到下一个隐藏状态。反过来,如果 ,然后大部分的新的记忆 向前传递到下一个隐藏状态。
  • 隐状态:利用更新门的建议,使用过去的隐藏输入 和新生成的记忆 生成隐藏状态

需要注意的是,为了训练GRU,我们需要学习所有不同的参数:。这些参数同样是通过反向传播算法学习所得。

4.长短时记忆网络 (LSTM)

(LSTM模型的讲解也可以参考ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与RNN网络

Long-Short-Term-Memories 是和 GRU 有一点不同的另外一种类型的复杂激活神经元。它的作用与 GRU 类似,但是神经元的结构有一点区别。我们首先来看看 LSTM 神经元的数学公式,然后再深入了解这个神经元的设计架构:

输入门/Input gate

遗忘门/Forget gate

输出门/Output/Exposure gate

新记忆生成/New memory cell

最终记忆合成/Final memory cell

下图是LSTM的计算图示

LSTM的详细内部结构
LSTM的详细内部结构

我们可以通过以下步骤了解 LSTM 的架构以及这个架构背后的意义:

  • 新记忆生成:这个阶段是类似于 GRU 生成新的记忆的阶段。我们基本上是用输入单词 和过去的隐藏状态来生成一个包括新单词 的新的记忆
  • 输入门:我们看到在生成新的记忆之前,新的记忆的生成阶段不会检查新单词是否重要——这需要输入门函数来做这个判断。输入门使用输入词和过去的隐藏状态来决定输入值是否值得保存,从而用来进入新内存。因此,它产生它作为这个信息的指示器。
  • 遗忘门:这个门与输入门类似,只是它不确定输入单词的有用性——而是评估过去的记忆是否对当前记忆的计算有用。因此,遗忘门查看输入单词和过去的隐藏状态,并生成
  • 最终记忆合成:这个阶段首先根据忘记门 的判断,相应地忘记过去的记忆 。类似地,根据输入门 的判断,相应地输入新的记忆 。然后将上面的两个结果相加生成最终的记忆
  • 输出门:这是GRU中没有明确存在的门。这个门的目的是从隐藏状态中分离最终的记忆。最终的记忆 包含很多不需要存储在隐藏状态的信息。隐藏状态用于LSTM的每个单个门,因此,该门是要评估关于记忆单元 的哪些部分需要显露在隐藏状态 中。用于评估的信号是 ,然后与 通过 运算得到最终的

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从加密到验证,全方位保障您应用的通讯安全
在一个完美的世界上,没有人需要用到密码。每个人都高度自律,心无邪念;每件快递都能不经拦截准确送达收件人;而每个寄件者都是值得信赖的。但是我们并不在这样完美的世界中生存。过去的数十年间,密码学已经发展到不仅可以通过加密来保障机密性,还可以确保消息的完整性、身份验证,以及不可否认性——所有的一切都是为了保证消息私密、真实和可靠。
Android 开发者
2022/03/09
4530
非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。 但是对于其原理大部分同学应该都是一知半解,今天就来分析下经典的非对称加密算法 - RSA算法。 通过本文的分析,可以更好的理解非对称加密原理,可以让我们更好的使用非对称加密技术。 题外话: 并博客一直有打算写一系列文章通俗的密码学,昨天给站点上https, 因其中使用了RSA算法,就查了一下,发现现在网上介绍RSA算法的文章都写的太难理
Tiny熊
2018/06/21
1.6K0
RSA 算法简述
数字签名是实现安全的核心技术之一,它的实现基础就是RSA加密技术,它是RSA的典型应用。 以往的书信或文件是通过亲笔签名或印章证明其真实性的,但在计算机网络中,要解决报文的验证问题,就要使用数字签名,其必须保证以下几点:
IT茂茂
2020/03/05
2.5K0
RSA 算法简述
量子算法与实践——Shor算法
RSA加密是一种非对称通信加密技术,通常广泛应用于通信安全要求较高的场景。RSA算法加密的安全性强度依赖于对极大整数做因数分解的难度。该难度主要体现在经典计算机对极大整数做因数分解耗费的时间成本与信息价值不成正比。例如计算机学科的学者们认为经典计算机不可能实际分解超过2048位数字,而已有科学家已展示仅用2000万个量子比特8小时就能完成2048位数字的分解。尽管可实现2000万量子比特的量子计算机遥不可及,但减少算法运行所需资源等优化研究还在不断进行。下文将从RSA加密基础知识与原理方面介绍RSA加密算法。
量子发烧友
2023/02/24
3.9K0
量子算法与实践——Shor算法
密码学小白必知必会
本文是以介绍密码学基本概念为目的,面向密码学小白或者新人的文章。包含的内容主要是一些课本知识,个人理解,还有一些实例及代码。下面,将从密码学的基础,应用,及实例等几个方面对密码学进行简单的介绍。
zenlu
2024/02/20
6600
密码学小白必知必会
【腾讯TMQ】从 wireshark 抓包开始学习 https
腾讯移动品质中心TMQ
2017/02/22
6.7K0
非对称加密和混合密码系统
非对称加密算法的特点是,密钥分为加密密钥和解密密钥,并且这两个密钥是不一样的(非对称)。发送者用加密密钥对消息进行加密,接受者用解密密钥对密文进行解密。
linjinhe
2018/06/06
1.1K0
加密算法的前世今生
本文讨论的加密算法要解决的主要是信息传输中的加密和解密问题。要假设数据传输过程是不安全的,所有信息都在被窃听的,所以发送端要把信息加密,接收方收到信息之后,肯定得知道如何解密。
帅地
2020/02/21
8080
加密算法的前世今生
【密码学(1)】-“公钥密码体制”
公共密钥密码体制于 1976 年提出,其原理是加密密钥和解密密钥分离。密码体制的基本模型如图 所示。
帆说区块链
2022/04/27
1.6K0
【密码学(1)】-“公钥密码体制”
Java - 深入理解加密解密和签名算法
Java应用接口安全性问题可能来源于多个方面,包括但不限于数据加密、身份验证、访问控制、输入验证等。下面我会对这些问题进行详细分析,并提供相应的解决方案和最佳实践。
小小工匠
2024/05/25
4640
Java - 深入理解加密解密和签名算法
加密总结 原
DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
wuweixiang
2018/08/14
6840
非对称加密的应用
估计有人看到这篇文章标题的时候会有很多的疑惑,非对称加密是干什么的,"非对称"大致很好理解,意思和对称相反,加密也能理解,但是非对称加密是个什么玩意儿。这东西有什么应用呢?
挥刀北上
2019/09/02
2.1K0
非对称加密的应用
网络协议(十一):单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书
Java微观世界
2025/01/21
1990
网络协议(十一):单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书
安全多方计算(1):不经意传输协议
在安全多方计算系列的首篇文章(安全多方计算之前世今生)中,我们提到了百万富翁问题,并提供了百万富翁问题的通俗解法,该通俗解法可按图1简单回顾。
绿盟科技研究通讯
2021/12/05
3.2K0
安全多方计算(1):不经意传输协议
openssl基础应用
一、前言 什么是openssl?讲 openssl之前我们先了解下什么是ssl?ssl是secure socket layer的简称,其使用对称加密解密,非对称加密解密(公钥加密解密),单向加密解密结合证书实现数据传输安全。openssl默认是在系统安装时就安 装上去的。 二、加密解密基础 2.1.1、对称加密 对称加密解密使用同一个口令,它将明文分割成固定大小的块,逐个进行加密解密。对称加密可以使用加密算法实现,如DES,3DES,AES,RC6等。基本上基于口令加密都容易遭到暴力破解,特别是弱口令。
小小科
2018/05/04
1.8K0
openssl基础应用
Web安全概述
互联网刚开始是安全的,但是伴随着黑客(Hacker)的诞生,互联网变得越来越不安全。任何一个事情都有两面性,黑客也有好有坏,好的黑客叫白帽子,坏的黑客叫黑帽子。与此同时,随着Web技术发展越来越成熟,而非Web服务(如Windows操作系统)越来越少的暴露在互联网上,现在互联网安全主要指的是Web安全。
木可大大
2018/04/06
1.4K10
Web安全概述
16.计算机科学导论之网络信息安全学习笔记
此部分包含第15、16、17和18章,包含了计算机中传输的数据压缩(有损与无损)、网络数据在传输过程中如何保证其数据安全, 讨论计算理论,即哪些是可计算的,哪些是不可计算的,最后介绍当前热门的人工智能(AI)的观点,加深我们对计算机数据处理的的认识,为后续学习扩展基础认识。
全栈工程师修炼指南
2023/02/20
6030
16.计算机科学导论之网络信息安全学习笔记
关于公钥与私钥,以及利用它们进行加密和认证
下一篇,我即将详细分析windows vista下的EFS加密技术。在这之前,先分析一下相关的公钥与私钥、以及相关的加密与认证技术。
williamwong
2018/07/24
1.8K0
关于公钥与私钥,以及利用它们进行加密和认证
只用10分钟,一次性搞懂公钥和私钥
关于什么是公钥和私钥,网上有一篇很经典的文章:http://www.youdzone.com/signature.html
zhanyd
2024/05/17
1.8K0
只用10分钟,一次性搞懂公钥和私钥
图解|什么是RSA算法
前阵子闲来无事看了会儿《数学之美》,其中第17章讲述了由电视剧《暗算》展开的密码学背后的一些数学原理。
五分钟学算法
2020/09/07
2.7K0
图解|什么是RSA算法
相关推荐
从加密到验证,全方位保障您应用的通讯安全
更多 >
LV.1
AmazonSDE II
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档