深度学习DL
深度学习(deep learning)是机器学习的一个分支,是伴随着大数据与云计算技术的崛起而快速发展起来的,并在计算机视觉、语言等感知领域迅速取得成功。DL源于对人工神经网络的研究,起源算法是感知机(perceptron)。深度学习网络通过神经元从输入数据中提取特征,并通过组合低层特征形成更加抽象的高层特征(表示),以发现数据的分布式特征,从而达到人们对数据进行分类、回归的目的。
深度学习的几种基本结构:卷积神经网络(CNN)、循环神经网络(RNN)、编码器-解码器框架(Encoder-Decoder)、注意力机制(Attention)。
CNN是一种多层神经网络,擅长处理图像,特别是大图像的ML问题,它通过一系列方法使数据量庞大的图像识别问题不断降维最终将其训练。CNN包含卷积计算单元,通过不断滑动卷积核的位置,对相应数据区域进行加权求和,常见的卷积计算单元有一位卷积CNN1D、二维卷积CNN2D,通常CV领域用CNN2D,NLP领域用CNN1D。CNN最早最经典的网络是LeNet,包含数据输入层、卷积计算层、激活层、池化层和全连接层。数据在进入网络前要预处理,一般为去均值、归一化、PCA/白化等。
卷积层完成特征抽取,池化层降低数据维度,抽取最关键或者综合地特征信息,有平均池化和最大池化。卷积层和池化层通过配合组成多个卷积组,并逐层提取特征,最终通过若干个全连接层完成分类。全连接层指层中每个节点都会连接它下一层的所有节点,它对提取的特征进行线性组合以得到输出,本身不具备特征提取能力,而是利用现有的高阶特征完成学习目标。激活层主要用于为网络层增加非线性变换,一般是非线性函数,对卷积层的输出进行非线性映射,进而给CNN非线性映射学习能力,进行表达更复杂的信息特征。
RNN中每一个循环单元除了要接收该位置的信息,还要接收将上一个循环单元的输出作为输入,计算对应当前时刻的预测概率并将传递给下一时刻的信息作为输出。这种方式使RNN保持了长距离额上下文信息,天然符合序列任务,很适用于NLP。在训练过程中,由于使用了反向传播算法(本质就是链式规则,大大简化了求梯度的过程,因为梯度下降过程中需要大量的梯度运算),梯度值在不同的时刻会以乘法的形式进行累积,最终会出现梯度爆炸或梯度消失的问题(可以采用梯度裁剪方法缓解)。
针对这些问题,人们提出LSTM(Long Short Term Memory)和GRU(Gate Recurrent Unit)等结构。LSTM在RNN基础上增加了细胞状态(cell state),来直接传递相邻时刻之间的信息。
由于细胞状态下反向传播的梯度不会消失,因此缓解了梯度消失问题,同时LSTM还引入了采用Sigmoid激活的门控机制(遗忘门、输入门与输出门),来分别控制上一时刻的细胞状态、输入信息及输出信息的进一步传递,从而实现长短期记忆。GRU对LSTM进行了简化,将细胞状态和隐藏状态合并,将遗忘门与输入门合二为一,降低了计算复杂度,由于LSTM和GRU的门控单元是信息经过多次Sigmoid激活(导数小于1),所以缓解了梯度爆炸问题。RNN还提供了多对一和多对多的任务结构。但是RNN保持的长距离信息有时不是我们想要的,如何选择性地保留信息是进一步优化的关键。
编码器-解码器框架(Encoder-Decoder) 也被称为Seq2Seq模型,其中编码器负责对输入序列进行编码,计算特征张量;解码器接收特征张量,输出目标序列。两者通常都使用RNN。
为了选择性保留信息,注意力机制(Attention) 应运而生。它首先将编码器的全部隐藏状态(bs,len,dim)与t时刻输入解码器的词向量(bs,dim)做矩阵乘法,并在进行SoftMax归一化后,得到注意力权重(bs,len)。然后,将注意力权重与编码器的全部隐藏状态(bs,len,dim)再做矩阵乘法,得到上下文向量(bs,dim)。
最后,该向量与t时刻输入解码器的词向量进行拼接,再被输入解码器的RNN进行训练。通过注意力机制,解码器可以选择性地获得编码器的隐藏状态信息,提高训练效率。使用稠密向量计算注意力权重的称为软注意力机制,使用独热编码向量的称为硬注意力机制。
计算机视觉CV
计算机视觉即利用计算机来模拟人的视觉,是计算机的“看”,官方定义是:基于感知图像做出对客观对象和场景有用的决策。CV处理的对象是图像和视频,本质就是图像,因为视频就是图像组成的。CV的主要任务有5种:图像分类、目标检测、目标跟踪、语义分割、实例分割。
现代的CV方法基本都由深度神经网络组成,尤其是卷积神经网络。大名鼎鼎的ImageNet数据集是CV的重要推动者,改变了AI领域人们对数据集的认识。以往CV一般采用梯度方向直方图(HOG)、尺度不变特征变换(SIFT)等传统的特征提取与浅层模型组合的方法。如今在AI的浪潮下,CV逐渐转向以CNN为代表的端到端DL模型。
一般的视频处理过程是先分帧得到图片,对图片进行处理(灰度处理、高清分辨率重建等),再将处理后的图片合成视频。小常识,图片中每个像素的颜色有红绿蓝三个颜色变量来调节(RGB),当R=G=B时图片变成灰度图片,灰度图像显示从最暗的黑色到最亮的白色的灰度,一般有256阶(因为RBG分别由8位数表示,所以R=G=B有2的8次方种组合),最简单的灰度处理方法就是RGB三值都取(R+G+B)/3。超分辨率处理算法传统使用双线性插值,即利用目标像素周围的四个点来做预测,且离目标位置越近的点的权重越大,为了更加精确,预测模型会很复杂,上万个模型参数必须依靠ML方法来优化,常用的有SRCNN、FSRCNN、ESPCN。
自然语言处理NLP
自然语言处理主要研究实验人和计算机之间用自然语言进行有效通信的各种理论和方法,涉及语言学、计算机科学、逻辑学等等,主要任务包括自然语言理解NLU和自然语言生成NLG。
字和词是人类语言的基本单位,为了让计算机理解人类语言,就必须考虑如何在计算机系统中表示字和词。通常,将字和词映射为一组反映其语义特征的实数向量,称为词向量,有独热表示和分布表示。独热编码相当于给每个字词分配一个唯一的id,这种稀疏编码不能反映字词背后蕴含的语义信息,而且占用大量内存。
分布表示将字词表示为一个定长的稠密向量,由于稠密向量之间可以进行距离计算(相似度计算),因此可以反映字词背后的语义信息。当然,稠密向量不是随意设置的,需要从句子、文档中不断学习得到,因此还需要对句子进行建模,即语言模型。
语言模型是对句子进行建模,并求解句子的概率分布。
传统语言模型包括词袋模型和n-gram模型。词袋模型中数值只反映字词出现的频数,与字词的顺序无关,通常字词的频率反映了其在句子中的重要性。n-gram模型能更好地反映语义。某个单词的概率是由其前面所有出现的单词决定的,马尔可夫假设某个时刻的状态之和其之前的(n-1)个状态有关,这将大大简化计算。n-gram模型通常采用极大似然估计来计算,只需要统计每个n-gram在训练集中的频数即可。
神经语言模型通过神经网络训练得到词的分布,通常称为词嵌入。首先网络通过SoftMax层输出每个位置的全词表分布,然后取对应位置最大的概率输出,并采用交叉熵作为损失函数训练。其中常用负采样技术,即先不进行全词表上的参数更新,而只对正样本随机选取的负样本进行采样,然后根据这些采样负样本和正样本计算损失函数,从而更新正样本的参数。经典的神经语言模型有Skip-Gram模型和CBOW模型。
Skip-Gram模型通过中心词预测上下文窗口中的词,它接受将处理为单词索引的句子作为输入,经过Embedding层将索引转换为对应的词向量。假设中心词的上下文范围为C窗口大小,则分别计算中心词隐层张量与C个上下文词对应的损失,最终求和作为该中心词的损失,并反向传播回对应的词向量,从而进行词向量的学习与更新。
CBOW模型与Skip-Gram模型相反,它通过上下文中全部词预测中心词。计算上下文求和的隐层张量与中心词对应的㲳,并反向传播回对应的C个上下文词向量,从而进行词向量的学习与更新。谷歌发布了提供Skip-Gram和CBOW训练的word2vec工具,可以高效计算静态词向量,挖掘词之间的关系。