一、机器学习
机器学习,又叫传统机器学习(统计学习)。其理论基础来自于统计学,相关算法涉及大量统计学概念,从某种意义上讲,机器学习本质是概率学习。
统计学有两大(江湖)门派:频率(概率)学派和贝叶斯学派。
|
机器学习途径
机器学习的途径有几类:监督学习(Supervised Learning,数据有答案),无监督学习(Unsupervised Learning,数据无答案)、半监督学习(Semi-Supervised Learning)以及强化学习(Reinforcement Learning, 目前还不成熟)。不同的学习途径适用于不同的任务:监督学习用于分类和回归,无监督学习用于聚类和降维。
机器学习算法机器学习的模型(算法)从概念上分为概率模型和非概率模型。以将动物图像分为五类(狗、猫、鹿、狮子、兔子)的任务为例—输入一张(狗的)图像。概率模型将输出 (狗 (0.6), 猫 (0.2), 鹿(0.1), 狮子(0.04), 兔子(0.06)),而非概率模型只会输出“狗”。主要算法如下:
1. 概率模型
- 概率图模型Probabilistic Graphical Model(PGM)
- 贝叶斯网络Bayesian Network (有向图)
- 动态贝叶斯网络
- 隐马尔科夫模型Hidden Markov Model (HMM)
- 马尔科夫网络(无向图)
- 马尔科夫随机场Markov Random Field (MRF)
- 条件随机场Conditional Random Field (CRF)
- 人工神经网络(输出层采用softmax激活函数)
- 决策树
2. 非概率模型
- 线性模型Linear Model:感知机、线性支持向量机、k近邻、k均值
- 非线性模型Non-linear Model:核函数支持向量机、人工神经网络
感知机是第一个人工神经网络,但通常会单列。而多层感知机(只有一个隐藏层时)又通常称为Vanllia神经网络 |
生成模型与判别模型
对于监督学习,相关算法在统计学上有两种表示:决策函数: Y = f(X) 或者条件概率分布:P( Y | X ),根据学习内容不同分为如下:
- 生成模型:由数据学习联合概率分布 P(X,Y)然后求出条件概率分布 P(Y|X)作为预测模型,之所以成为生成方法,是因为模型表示了给定输入 X 产生输出 Y的生成关系。
- 典型的生成模型:朴素贝叶斯法、隐马尔可夫模型。
- 判别模型:由数据直接学习决策函数 f(X) 或者条件概率分布 P(X,Y)作为预测的模型,关心的是对给定的输入 X,应该预测什么样的输出 Y。
- 典型的判别模型:k近邻、感知机、决策树、最大熵模型、支持向量机、条件随机场等。
算法(模型)评估
监督学习中,采用的是统计学上的损失函数来评估模型优劣,算法(模型)优化的目标是损失最小化。
单个样本的预测值与真实值的差称为损失,用于计算损失的函数称为损失函数 |
同时,也使用统计学上的过拟合(overfitting)和欠拟合(underfitting)两个定性概念来评估算法同训练数据(样本)的关系。以学校学习为例,过拟合指课后练习全对,但考试不行;欠拟合则是课后练习不正确。
对于分类任务,评价指标关注于分类准确率,使用精确率(Precision,P)、召回率(Recall, R)和F1值三个定量指标。
对于回归任务,评价指标关注于预测值和真实值之间的差别。最常用的指标是MSE(Mean Square Error)和MAE(Mean Absolute Error):MSE即预测值和真实值之差的平方的均值,再开根号就是R(oot)MSE;MAE即对预测值和真实值之差的绝对值求均值。
二、深度学习深度学习起源(人工)神经网络(简称ANN,或NN),随反向传播算法(Hinton 1986)的提出而广受关注,并复兴于2010年。之所以说复兴,是因为早期存在学习梯度消失问题(Vanishing gradient),但随着深度信念网络(DBN,Hinton 2006)提出并克服了前述问题,人们开发了众多网络结构,成功应用于人工智能各类现实任务中。
深度学习之所以大受欢迎,一个重要原因是深度学习可以自动学习/提取数据特征。传统机器学习(深度学习算法之前的机器学习)需要人工设计特征。以人脸识别为例,人会通过眼睛、鼻子、嘴巴、耳朵等不同部分来区分不同人脸。在各类现实任务中,人工设计特征固然可解释,但是不同任务所需的特征需要大量的专业知识,这就成为工程的巨大瓶颈。
深度学习的发展脉络人们围绕神经网络结构、激活函数等开展重点研究。提出了卷积神经网络(CNN)、循环神经网络(RNN)以及图神经网络(GNN)等新型网络结构,并引入了Softsign、Softplus、Relu、Maxout、Swish等新的激活函数,促进了深度学习在算法层面的发展。
深度学习所用神经网络结构又分为三类结构:
|
此外,还围绕超参数(Hyperparameter)开展了各类子项研究。其中,包括网络参数(网络层数、神经元数)以及算法参数(权重初始化、正则化等)以及训练优化参数(学习率、学习梯度、学习回合(epoch)、迭代大小)等。例如,针对学习梯度开发了各类算法,包括批量梯度下降(BGD)、随机梯度下降(SGD)、自适应梯度下降(AdaGrad)、共轭梯度(CG)等。
(图版权归清华大学李杰教授)
深度学习的发展里程碑
- Yann Lecun等人于1998年发明了深度卷积神经网络LeNet-5(CNN雏形)
- Geoffrey Hinton于2006年提出的前馈神经网络进行无监督逐层学习(预训练)
- Geoffrey Hinton于2010年提出Relu函数来改进限制波特曼机(RBM)
- Yoshua Bengio于2011年提出采用Relu激活函数
- Geoffrey Hinton于2012年提出应用Dropout算法
- Geoffrey Hinton于2012年提出AlexNet,基于CNN网络结构和 ReLu 激活函数进行有监督学习(预训练)
- 何恺明等人2016 年提出残差网络 ResNet
Geoffrey Hinton教授也是反向传播算法作者,2018年与Yann Lecun、Yoshua Bengio一起获图灵奖 |
如上所述,在 2006 年至 2012 年间,人们广泛地研究了DBN和SDA(以及相关算法),奠定了深度学习的发展方向:整个过程分为预训练(Pre-training)和精调(fine-tuning)两个步骤。不同算法之间的区别在于所应用的预训练不同(监督学习、无监督学习以及自监督学习)。
而预训练模型的提出,使得人们可以先在多元任务上预训练获得通用知识,然后使用少量目标任务上的标注数据(Label Data)进行微调,微调后模型能够很好地处理目标任务。这极大的推动了深度学习在工业界的应用。
早期预训练的主要工作是迁移学习。迁移学习是受人类学习的启发,面对新问题时使用以前学到的知识去解决问题。在迁移学习中,可能原任务和目标任务有不同的领域和任务设置,但是要求的知识是一致的。迁移学习中存在两种预训练方法:特征迁移和参数迁移 |
由于存在大量无标注数据,迁移学习和自监督学习成为预训练模型主要研究方向,目前主要关系如下(图版权归清华大学研究团队):
而为了学习更多通用知识,需要进行大规模预训练,并进一步向超大规模预训练演进;而大规模预训练则依赖于大规模数据和大规模算力。下一章节提到的GPT-3预训练模型在微软公有云上使用了1万块 GPU耗时一个月完成训练,费用估算超千万美元。
百度智能云“文心大模型”注重跨模态技术研发,应用场景广泛且落地实践丰富。阿里达摩院的“通义大模型”系列,在阿里内外积累了多个实践案例。华为既自主研发了盘古大模型,也开放华为昇思MindSpore框架支持进行大模型的训练。此外,还有智源研究院悟道2.0模型以及浪潮“源1.0”大模型等 |
自然语言处理(NLP,Nature Language Process)是一个跨学科领域的分支学科,覆盖计算语言学、计算科学和人工智能等领域。
典型应用和主要任务其典型应用场景分为三大门类
其中,语言理解门类下又分为三个大类任务:语法类、语义类和语用类,前两大类属于基础性任务,而语用类属于应用类任务。
自然语言理解的子任务
词法分析:中文分词、词性标注、命名实体识别 句法分析:短语结构树、依存语法树 段落分析:段落关系、语用意图、复句切分
语义分析:词义消岐、指代消融 信息抽取:概念抽取、关系抽取、事件抽取 关联推理:关联预测、知识补全 知识融合:本体匹配、实例匹配、属性对齐
文本分类:主题分类 情感分析:语句级、文档级、细粒度 搜索推荐:意图识别、召回排序 问答对话:检索问答、槽填充、知识问答、任务对话 摘要描述:抽取式摘要、生成式摘要 机器翻译 |
若从机器学习的基本任务角度,NLP又可以分为三大类任务:
- 分类任务,包括:文本分类、情感分析、意图识别等等;
- 基于序列的结构化预测任务,包括:槽填充,分词、词性标注、机器翻译等;
- 基于树和基于图的结构化预测任务,包括:关联推理、关系抽取等;
为了计算机可以处理文本,将自然语言文本的内容划分成不同粒度(字、词、短语/词组、句子、段落等)的符号或符号序列, 将其数值化或向量化处理后得到文本表征(text representation,也有文献翻译为文本表示)。
将文本向量化, 用向量组成矩阵, 这使得NLP可充分利用人工神经网络技术 |
除按粒度划分外,文本表示按不同的表示形式划分为两种。早期为离散表示(discrete representation);进入20世纪,分布/连续表示成为主流(Distributed/Continuous representation)(Hinton 2006)。
语言模型(Language Model),则是关于词的序列概率模型。由于文本表示和语言模型密不可分,在不少文献或网络文章里存在混用情况。
通常采用困惑度(Perplexity)来度量语言模型好坏,困惑度越小,语言模型越好。
基于统计的NLP20世纪80年代末至2010年代中期, 主要采用基于统计建模的统计语言模型(statistical language model, SLM)。统计语言模型把语言成分序列看作是一个随机事件,例如给定序列中语言成分的样本空间, 也就是词表(vocabulary) V, 由V中n个词W1,W2,…, Wn组成的句子S, 其概率P(S)=P(W1,W2,…, Wn), 表示S存在的可能性。
21世纪之前,业界主要开发各类生成模型以从语料库中发现语言规律,而从20世纪90年代后期起,则更多的采用判别模型。根据方法不同又可以分为:基于计数的统计模型和基于神经网络的统计模型。
基于计数的语言模型:
- n元语言模型(n-gram):典型代表模型,基于(n-1)阶马尔可夫链的一种生成式语言模型。通过n个语词出现的概率来推断语句的结构,当n=1时, 称为一元语言模型(unigram), 序列中每个词都和其他词独立, 也就是和它的上下文无关;当n=2时, 称为二元语言模型(bigram);当n=3时, 称为三元语言模型(trigram)。
- Class-based n-gram models,由IBM的Watson研究中心的Peter Brown于1992年开发。
- 还有其他基于统计算法的语言模型:决策树(Bahl, 1989)、最大熵(Ratnaparkhi 1997)、支持向量机(Vapnik 1998)、条件随机场(Lafferty 2001)以及感知机(Collins 2002)
基于神经网络的语言模型(Neural Network LM)也叫连续空间语言模型(Continuous-Space LM):
- 连续词袋模型(CBOW,Continuous Bag Of Words Model),利用上下文或周围的单词来预测中心词,由谷歌的Mikolov于2013年提出。
- 跳词模型(Skip-Gram, continuous Skip-Gram Model),与CBOW模型相反, 是利用目标词的向量表示计算上下文中的词向量,由谷歌的Mikolov于2013年提出。
Yoshua Bengio分别2000年和2003年发表了两篇同名《A Neural Language Model》论文,基于分布式文本表示,开创性的采用多层神经网络方法。后续,人们进一步采用RNN和CNN等多种算法不断改进模型 |
这个时期主要的文本表征技术如下:
离散表征
- 独热(One-Hot Vector):最简单的词向量。每个词表示成维数为词典长度的向量, 向量中该词对应的位置为1, 其余位置为0。
- 词袋模型(Bag of Word, BoW):基于频率的文本表征。将文档想象为一个袋子,袋子里有一堆词,统计每个单词出现的频率,将文档表示为向量。
- 词频-逆文本频率(TF-IDF,Term Frequency - Inverse Document Frequency):另一个基于频率的文本表征。词频(TF),指某个词在当前文本中出现的频率;逆文本频率(IDF),文本频率是指含有某个词的文本在整个语料库中所占的比例,逆文本频率是文本频率的倒数
分布式表征
- 共现矩阵(Co-occurrence Matrix):基于频率的矩阵表征。最常用的形式是构建一个大小为V×C的矩阵M, 其中V是词典大小, C是所限定的上下文范围大小。
- word2vec,特指由谷歌的Mikolov于2013年发布word2vec技术所构建的词向量。
- GloVe(Global Vector),特指由斯坦福大学的Pennington于2014年发表GloVe技术所构建的词向量。
独热也是一种词向量,传统采用计数的浅层统计模型所得到的文本表征是局部和表面的。而Word2Vec以及GloVe技术采用人工神经网络,通过嵌入得到了分布式表征:词汇语义通过在一个(几百或一千维)实数向量空间中的位置来表示,而意义或句法的相似性则通过在这个空间中的接近程度(距离远近)来表示。很多文献又称为词嵌入(Word Embedding) |
随着深度学习的再度复兴,NLP发展进入了一个新阶段。语音识别成为第一个受益于深度学习的工业应用。谷歌、微软、百度、科大讯飞等都推出了商业级别的产品。
深度学习应用于NLP问题有两个重要技术突破:seq2seq学习(Sutskever 2014)和注意力机制(Bahdanau 2015)。
注意力机制源于计算机视觉领域,能够使模型根据输入以及产生的内容选择需要关注的重要信息。这提供了更强大的模型方案:更容易对较长距离的语境进行建模,而且模型对具有相似含义的词汇或短语的泛化性更好,
在此之上形成了目前主流算法策略:对于给定任务,基于BiLSTM的标准序列模型,添加注意力机制,然后端到端的训练整个模型。
由于注意力机制的巨大成功,谷歌的Vaswani在2017年发表的《Attention is all you need》论文中提出了全新的深度学习底层算法——Transformer网络。
Transformer引入了强大的自监督学习(Self-Supervised Learning,一种无监督学习):模型从文本中自动创建预测任务(类似“完形填空”,在文本中填写一个被遮掩的词汇或短语),不断重复这样的预测任务,并在错误中学习和积累关于语言的一般知识。
基于自监督的预训练方法的影响是革命性的。通过这种方法,语言模型能在大量(20GB起步)未标记(unlabeled)的人类语言材料上学习到关于语言和现实世界的大部分知识。然后这些知识通过微调(Fine-Tuning)或提示(Prompting)可以轻而易举的被应用到下游的各种自然语言理解和生成任务中,比如文本分类、文本检索、情绪分析或阅读理解,并取得较好的结果。
2018年在Transformer之上诞生了两大预训练语言模型:
- GPT(Generative Pre-trained Transformer),用于自然语言生成,由OpenAI于2018年首次发布,目前最新版本是GPT-3。
- BERT(Bidirectional Encoder Representations from Transformers),用于自然语言理解,由谷歌于2018年开源,并于2019年发表《Pre-training of Deep Bidirectional Transformers for Language Understanding》论文。
- 2018年Matthew Peters公布了另一个预训练语言模型ELMo(Embedding from Language Models),该模型是基于BiLSTM,而非Transformer结构。它与GPT、BERT构成三大预训练语言模型。
随着BERT横空出世,自然语言理解相关任务的网络结构也从传统的word2vec BiLSTM转换为BERT BiLSTM。同时,产生了各种分支,包括:结合知识图谱、压缩、多模态、行业领域以及多语言等。
到2021年业界主要的预训练语言模型关系如下
(图版权归属清华大学研究团队)
预训练模型的规模
BERT刚推出时有3亿参数,其后的预训练模型参数愈来愈大。谷歌的T5(text-to-text-transfer-transformer)有110亿参数,OpenAI的GPT 3有1750亿个参数(最近大火的ChatGPT基于3.5版本)。GPT 4.0 是下一个版本,预计有100万亿个参数。
中文预训练语言模型
由于谷歌开源的BERT在训练中文模型时是基于字,而不是词,并不太适合中文处理。哈工大讯飞联合实验室在2021年发布了基于全词掩码(Whole Word Masking)技术的中文预训练模型BERT-wwm。
四、开源框架2014年开始,全球人工智能学术界及产业界各研发主体陆续开源旗下自主研发的深度学习软件框架,并以框架为主体搭建人工智能开源开放平台。经历了百花齐放后,由谷歌开发的tensorflow及由Meta团队开发的PyTorch两款深度学习软件框架占据业界相对主导地位,而CNTK、theano和Chainer走向终止。同时国内厂商异军突起,布局开源框架, 百度飞桨PaddlePaddle、腾讯优图NCNN、 华为MindSpore、阿里XDL等自研的开源深度学习软件框架加速升级。
主流的开发框架:Python/c目前,国内外主流深度学习软件框架发展历程如下:
(图版权归属沙利文研究团队)
国内的深度学习软件框架厂商中百度竞争力综合排名第一,在应用能力、技术能力和生态能力层面均具备显著优势。
(图版权归属沙利文研究团队)
Deeplearning4j:Java体系的深度学习框架不论是国外的谷歌、Meta,还是国内百度、华为等,其开源深度学习框架都是基于Python 或C/C 开发的。对于大多数政府以及企事业单位,大量的业务应用是基于Java平台,海量数据存储在Hive、HDFS、HBase之上,分布式计算基于spark。若有一个基于Java的深度学习框架,不但可以方便Java工程师参与到人工智能的浪潮中,还可以与已有的项目/产品无缝衔接。
Deeplearning4j (以下简称DL4J)是由美国 AI 创业公司 Skymind 开源的一个基于 Java的深度学习框架,支持在Apache Spark上进行分布式模型训练。DL4J于2017 年下半年加入Eclipse开源社区,目前最新版本是1.0.0 M2.1。
DL4J提供了对经典神经网络结构的支持,例如:
- 多层感知机/全连接网络(MLP)
- 受限玻尔兹曼机(RBM)
- 卷积神经网络(CNN)及相关操作,如池化(Pooling)、解卷积(Deconvolution)、空洞卷积(Dilated/Atrous Convolution)等
- 循环神经网络(RNN)及其变种,如长短时记忆网络(LSTM)、双向 LSTM(Bi-LSTM)等
DL4J预置了常见的Image模型架构,包括:AlexNet、DarkNet、ResNet50、VGG19等。
DL4J还提供NLP支持,集成ClearTK分词器,支持Apache UIMA自然语言处理框架,内置多种支持词/句的分布式表达(包括:word2vec/GloVe/doc2vec等)。
DL4J也提供了对 Pytorch, Tensorflow和Keras模型的导入,可支持的网络结构将不再局限于自身框架。
DL4J分为多个子项目,具体如下:
- Samediff:类似tensorflow/pytorch的框架。属于底层运行框架,提供了运行onnx 和tensorflow的api
- Nd4j:类似于python的numpy 。包含numpy和 tensorflow/pytorch操作能力
- Libnd4j:一个轻量级、独立的c 库,使提供跨设备运行数学运算能力
- Python4j:一个python脚本执行框架
- Apache Spark 集成:与Spark框架的集成,支持在spark上执行深度学习
- Datavec:一个数据ETL库,将原始数据转换为适合运行神经网络输入数据
DL4J 所有项目都支持 Windows、Linux 和 macOS。硬件支持包括 CUDA GPU(10.0、10.1、10.2,OSX 除外)、x86 CPU(x86_64、avx2、avx512)、ARM CPU(arm、arm64、armhf)和 PowerPC (ppc64le)。
参考文献1.DistributionalStructure,Zellig Harris,19572.Introduction to Modern Information Retrieval, Salton, McGraw-Hill College, 19833.Learning representations by back-propagating errors, Hinton, Nature Vol 323, 19864.Learning distributed representations of concepts, Hinton, 19865.Class-Based n-gram Models of Natural Language, Brown, Computational Linguistics, Vol 18, 19926.A Neural Probabilistic Language Model, Yoshua Bengio, JMLR 20037.A Fast Learning Algorithm for Deep Belief Nets,Hinton,Neural Computation 18, 1527-1554,20068.Reducingthe Dimensionality of Data with Neural Networks,Hinton,ScienceVol 313,20069.Rectified Linear Units Improve Restricted Boltzmann Machines, Hinton, 27thML, 201010.Improving neural networks by preventing co-adaptation of feature detectors, Hinton, 201211.Deep Sparse Rectifier Neural Networks, Yoshua Bengio, 14thAISTATS, 201112.ImageNetClassification with Deep Convolutional Neural Networks, Hinton, 25thNIPS, 201213.统计学习方法,李航,清华大学出版社,201214.统计自然语言处理,宗成庆,清华大学出版社,201315.Efficient Estimation of Word Representations in Vector Space, Mikolov, 201316.Distributed representations of words and phrases and their compositionality, Mikolov, 201317.GloVe: Global Vectors for Word Representation,Pennington, 201418.Sequence to Sequence Learning with Neural Networks, Sutskever, 201419.Neural machine translation by jointly learning to align and translate, Bahdanau, ICLR, 201520.机器学习,周志华,清华大学出版社,201621.深度学习-Java语言实现,巢笼悠辅,机械工业出版社,201722.Attention Is All You Need, Ashish Vaswani, 31th NIPS, 201723.Deep contextualized word representations,Matthew Peters,NAACL,201824.Generative Pre-training Transformer,Alec Radford,201825.Improving Language Understanding with Unsupervised Learning: GPT,Alec Radford,201826.A Comprehensive Survey on Word Representation Models: From Classical to State-Of-The-Art Word Representation Language Models,Usman Naseem,201827.Language Models are Unsupervised Multitask Learners: GPT-2,Alec Radford,201928.Pre-training of Deep Bidirectional Transformers for Language Understanding,Jacob Devlin,201929.自然语言处理入门,何晗,人民邮电出版社,201930.深度学习:基于案例理解深度网络,米凯卢奇,机械工业出版社,201931.基于深度学习的自然语言处理,邓力,清华大学出版社,202032.浅谈人工智能的下一个十年, 唐杰,智能系统学报, 202033.深度学习进阶:自然语言处理,斋藤康毅,人民邮电出版社,202034.Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer,Colin Raffel,JMLR,202035.预训练语言模型,邵浩,电子工业出版社,202136.Pre-Training With Whole Word Masking for Chinese BERT,Yiming Cui,202137.Pre-Trained Models: Past, Present and Future,Xu Han, 202138.自然语言理解与行业知识图谱:概念、方法与工程落地,王楠,机械工业出版社,202239.中国深度学习软件框架市场研究报告(2021),沙利文,2022,