高级加密标准AES
鉴于DES可以被破解和加密效率不高的缺陷,NIST于1997年开始公开征集新的高级加密标准AES选拔标准是分组长度为128位的分组密码、支持128/192/256三种长度的密钥、软硬件效率高2000年Rijmen提出的Rijndael算法被NIST选为高级加密标准AES,并于2001年正式发布
AES的基础是有限域$GF(2^8)$上的运算,其中选择的素多项式是$m(x)=x^8+x^4+x^3+x+1$有关有限域的基本概念可以参考 密码学的近世代数基础
AES总体结构如图所示AES共有N轮迭代,除最后一轮迭代外,每一轮迭代包含字节代替、行位移、列混淆和轮密钥加4个部分,而最后一轮则不包含列混淆,此外第1轮迭代前有一次轮密钥加
密钥经过密钥扩展算法后,按顺序每4个字(16字节)作为一次迭代的密钥
AES的迭代轮数N是于密钥长度相关的,若密钥为128位(4个字),则扩展为44字,对应10轮;若密钥为192位则对应12轮;若为256位则对应14轮
此外加密过程中消息和密钥是矩阵形式,明文/密钥的16字节将按列存储到一个4×4矩阵中,上述轮密钥加就是用消息矩阵和密钥矩阵按对应位置直接异或
...
密码学的近世代数基础
近世代数作为理论数学的一个完整分支,其对群、环、域等的研究非常复杂,此处仅总结一些与密码学相关的概念和基础
群首先定义代数运算
定义集合M上的一个法则 $\cdot$ ,若对于M上的每一组有序对$(a,b)$,$a,b\in M$,总存在唯一的$d\in M$使得$a\cdot b=d$成立,即满足封闭性,则法则 $\cdot$ 被称为M上的一个代数运算
设G是一个定义了代数运算 $\cdot$ 的非空集合,当满足如下条件时称G对代数运算 $\cdot$ 做成一个群
结合律:若$a,b,c\in G$,则$a\cdot(b\cdot c)=(a\cdot b)\cdot c$
存在左单位元:存在一个元素$e\in G$,使得对G中任意元素$a$,都有$e\cdot a=a$成立
存在左逆元:对G中任意元素$a$,在G中都有元素$a^{-1}$,使得$a^{-1}\cdot a=e$
群有一些重要定理
群G的左单位元也是右单位元,即有$e\cdot a=a\cdot e=a$,且单位元是唯一的
群G中任意元素$a$的左逆元$a^{-1}$也是其右逆元,即有$a\cdot a^ ...
古典加密概述
替代密码Caesar密码Caesar密码是最早的替代密码,其方法很简单,即对每个字母用字母表中它之后第3个字母代替它
其加密、解密的一般形式分别为 $C=E(k,p)=(p+k)\mod 26$ 和 $p=D(k,C)=(C-k)\mod 26$
其中k表示字母在字母表中位移的位数
单表代替密码单表代替密码即建立大小相同的明文字符集合到密文字符集合的一一映射,Caesar密码就是一种特殊的单表代替密码
显然具有$n$个元素的字符集合可以定义出$n!$种不同的加密
单表代替密码可以抵御穷举攻击,但却可以被统计频率攻击轻松攻破
假设我们已知明文语言为英语,那么我们可以统计出如图所示的字母出现频率假设截获的密文长度足够,则可根据其字符频率很容易的分析出明文
Playfair密码应对单表代替密码统计频率攻击的一种方法是对明文中多个字母一起加密
Playfair算法基于密钥词构造一个5×5的字母矩阵,构造方法为按从左到右、从上到下的顺序,先填充密钥词,再按顺序填充其他字母,其中I、J视为同一个字母
以密钥词monarchy为例,构造的矩阵如下
M
O
N
A
R
C
H
Y
B ...
Perceptual Loss
论文链接:Perceptual Losses for Real-Time Style Transfer and Super-Resolution
Perceptual Loss的提出对于众多Image Transfermation任务来说,最典型的方法就是使用per-pixel loss训练一个前馈网络
这种方法有一个明显缺点,就是无法捕获感知差异(Perceptual Differences)
例如两张仅偏移1个像素的图片,感知上他们是相同的,但per-pixel loss却可能很大
而Gatys等人在论文 A neural algorithm of artistic style 中提出了另一种方法,即使用从预训练卷积神经网络中提取的高级图像特征之间的差异作为Perceptual Loss
该方法可以生成十分高质量的图像,然而其网络的inference非常慢,因为网络参数的optimization是与inference一同进行的
基于上述工作,改论文的作者提出了Perceptual Loss的预训练前馈网络版本,以实现inference阶段实时生成高质量图像
Perceptual L ...
神经风格迁移
什么是神经风格迁移图像风格迁移一直是cv领域的一个难题传统图像处理中有很多针对该问题的非参数化算法,这些算法的局限都在于只能提取图像的低层特征
2015年Gatys等人提出了基于神经网络的图像风格迁移算法,即神经风格迁移神经风格迁移使用预训练的深度CNN提取图像高层特征,独立构造出了图像的内容/风格表示该算法表现十分优异,使得图像风格迁移在神经网络研究中流行起来
论文链接:
A neural algorithm of artistic style
Image Style Transfer Using Convolutional Neural Networks
自己训练的模型效果如下
内容与风格的提取深度内容表达以VGG为例,为了将深度CNN模型每一层学得的特征可视化我么可以将一张随机噪声图和一张正常照片同时输入网络,计算网络第l层输出的两张特征图之间的loss,再对噪声图进行梯度下降
即设$\vec{p},\vec{x}$分别为输入的原图和噪声图,$P^l,F^l$分别为他们在网络第$l$层的输出特征图,其尺寸为$(H_l,W_l,C_l)$,则有square-error
\mat ...
SpeechTransformer
论文链接:Speech-Transformer——A No-Recurrence Sequence-to-Sequence Model for Speech Recognition
Speech Transformer即应用于语音识别的Transformer如下图所示其结构与普通Transformer结构基本完全一致不了解Transformer的可以看这篇博客Transformer——Attention is all you need详解,此处不再赘述
Speech Transformer的亮点在于encoder中的2D Multi-Head Attention因为语音识别的输入一般是2D频谱图,若用普通的attention则只能提取时间方向的特征
如图所示,因为是self-attention层,所以其输入只有一个,是尺寸为(height, width, channels)的特征图首先对输入应用三个不同的卷积得到Query、Key和Value再对Q,K,V分别进行filter数为c的卷积,c即表示head数,记为Q’,K’,V’
对Q’,K’,V’的c个通道分别进行Scaled Do ...
seq2seq语音识别——LAS
LAS的提出语音识别的研究中端到端的模型正在逐渐取代将声学(acoustic)、发音(pronunciation)和语言(language)模型分别单独训练的方法
端到端的模型主要有两中,一种是CTC,另一种是带有Attention机制的seq2seqCTC的局限在于其假设输出label是相互条件独立的,而seq2seq则还没有端到端的语音识别
LAS(Attend Listen and Spell)是首个将带Attention的seq2seq应用于端到端的语音识别模型
论文链接:Listen, Attend and Spell
模型结构LAS中的Encoder称为Listener,Decoder称为Speller,其结构如图所示
Listener是金字塔型双向LSTM(pyramid BLSTM)每一层通过将相邻timestep输出concat成一个向量使序列长度减半(个人认为也可以通过1D池化达到相同效果)
金字塔型LSTM的作用是减少Attention的计算量,加速收敛
Speller与普通的带Attention的seq2seq Decoder完全一样
这里贴一下金字塔型RNN ...
DeepSpeech2论文解读
DeepSpeech2是由Baidu AI LaB于2015年发布的语音识别模型DeepSpeech2和初版DeepSpeech一样是端到端的模型,新论文相较于初版改进主要有
修改了模型,引入卷积层和BatchNorm,以及新设计的Lookahead Convolution
增加了对中文语音识别的讨论
基于HPC的多GPU训练加速
论文链接:
DeepSpeech—— Deep Speech - Scaling up end-to-end speech recognitionDeepSpeech2—— Deep Speech 2 - End-to-End Speech Recognition in English and Mandarin
模型结构DeepSpeech2结构如下图所示
模型输入是频谱图(spectrogram),接下来先是多层1D或2D卷积层,论文实验结果表明1D卷积的效果不大,2D卷积在noisy data上效果明显,但在clean data上效果不大
然后是多个(双向)RNN层,论文实验表明在Batchnorm的帮助下普通RNN(Vanilla RNN)效果也 ...
预训练语言模型GPT
论文链接:GPT: Improving Language Understanding by Generative Pre-TrainingGPT-2:Language Models are Unsupervised Multitask LearnersGPT-3:Language Models are Few-Shot Learners
GPT-2和GPT-3都主要是增大了模型规模,下面讲解的是原GPT论文GPT实现只需要稍微修改Transformer的代码,下面不贴代码了,可以到我的GitHub看GPT.py
GPT是第一个取得显著成功的学习高层次语义特征的预训练语言模型此前的预训练语言模型一般都是单词级的,即预训练词嵌入,再设计任务特定的网络结构而GPT在预训练之后则只用引入较少参数来适应特定任务(往往只有一个全连接分类层)
此外以往的预训练模型往往采用RNN,使得预测范围很小而GPT选择使用Transformer Decoder结构避免了这种问题
GPT是多个Transformer Block堆叠的结构,每个Block的Attention层使用了Future Mask,但是没 ...
双向预训练语言模型BERT详解
BERT的提出在之前的研究中,预训练语言模型已被证明对各类NLP问题都十分有效然而BERT作者认为已有的技术仍然限制了预训练的效果,因为他们都是单向的
例如GPT,使用了Transformer Decoder,其中的future mask使得它只能单向,且预训练任务也只是简单的句子生成以及ELMo,只是简单的将独立训练的left-to-right和right-to-left模型拼接在一起
因此作者提出了BERT(Bidirectional Encoder Representations from Transformers)利用Transformer Encoder以及MLM和NSP任务实现在于训练中学得双向的语言表达
论文链接:BERT: Pre-training of Deep Bidirectional Transformers for Language UnderstandingBERT MLM任务的简单实现 BERT_MLM.py
BERT结构bert结构十分简单,就是多个Transformer Encoder块的堆叠如果输入是句子对(A, B),那么将两个句子拼接在一起并用特 ...