\documentclass[lettersize,journal,twocolumn]{IEEEtran}
\usepackage{amsmath,amsfonts}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{array}
\usepackage{listings}
\usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
\usepackage{textcomp}
\usepackage{stfloats}
\usepackage{url}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage{cite}
\usepackage[UTF8]{ctex}
\usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolor=blue, linkcolor=blue, urlcolor=blue]{hyperref}
\hyphenation{op-tical net-works semi-conduc-tor IEEE-Xplore}
% 代码块基础设置
\lstset{
% basicstyle=\footnotesize, % 设置整体的字体大小
showstringspaces=false, % 不显示字符串中的空格
frame=single, % 设置代码块边框
numbers=left, % 在左侧显示行号
% numberstyle=\footnotesize\color{gray}, % 设置行号格式
numberstyle=\color{darkgray}, % 设置行号格式
backgroundcolor=\color{white}, % 设置背景颜色
keywordstyle=\color{blue}, % 设置关键字颜色
commentstyle=\it\color[RGB]{0,100,0}, % 设置代码注释的格式
stringstyle=\sl\color{red}, % 设置字符串格式
}
% 页眉
\markboth{深度学习与大模型综述,叶晓良,华东师范大学软件工程学院,May~2024}%
{Shell \MakeLowercase{\textit{et al.}}: A Sample Article Using IEEEtran.cls for IEEE Journals}
% 标题
\title{深度学习与大模型综述\Deep Learning and Large Models Review}
\author{叶晓良,~\IEEEmembership{华东师范大学软件工程学院}\Ye Xiaoliang,~\IEEEmembership{School of Software Engineering, East China Normal University}}
\date{\today}
% 正文
\begin{document}
\maketitle
\begin{abstract}
本文综述了深度学习与大模型的过去、现在、未来,探究其在各个领域的技术进展和应用现状。首先介绍深度学习的基本原理和发展历程,分析概述深度学习基本模型,重点探讨深度神经网络的结构、训练方法以及优化技术,对前馈神经网络、反馈神经网络以及双向神经网络的代表性深度神经网络模型进行分析,解释其原理以及特性。随后,介绍现今涌现和流行的大模型,阐述了大型模型的特点和优势,包括参数数量的增加、模型规模的扩展以及计算资源的需求,详细介绍在各个领域各公司研究的大模型历史与发展,解释大模型的基础模型Transformer以及其他如火如荼发展的大模型原理,如GPT、GLM等系列。在应用方面,本文以自然语言处理、计算机视觉、语音识别和多模态处理为例,分析了大型模型在这些领域的应用案例,并评估了它们的性能和效果,分析模型原理及其优缺点和未来前景。同时,讨论了训练大型模型所面临的挑战,包括计算资源的限制、数据的质量和数量等,并提出了未来发展的方向,如模型压缩、自动化调参等技术的应用。本文旨在为此人工智能领域的初学者提供一个基本了解与认知。
\end{abstract}
\renewcommand{\abstractname}{Abstract}
\begin{abstract}
This article reviews the past, present, and future of deep learning and large models, exploring the technological advancements and current applications in various fields. It first introduces the basic principles and development history of deep learning, analyzes the basic models of deep learning, and focuses on the structure, training methods, and optimization techniques of deep neural networks. It analyzes representative deep neural network models such as feedforward neural networks, feedback neural networks, and bidirectional neural networks, explaining their principles and characteristics.Subsequently, it introduces the emerging and popular large models of today, elaborating on the characteristics and advantages of large models, including the increase in the number of parameters, the expansion of model scale, and the demand for computational resources. It details the historical development of large models in various fields and companies, explaining the basic model Transformer and other rapidly developing large model principles such as the GPT and GLM series. In terms of applications, the article takes natural language processing, computer vision, speech recognition, and multimodal processing as examples, analyzing the application cases of large models in these fields, evaluating their performance and effects, analyzing the principles, advantages, disadvantages, and future prospects of the models.At the same time, it discusses the challenges faced in training large models, including limitations in computational resources, data quality, and quantity, and proposes future development directions such as the application of technologies like model compression and automated hyperparameter tuning. The aim of this article is to provide a basic understanding and awareness for beginners in the field of artificial intelligence.
\end{abstract}
\section{\textbf{\large 引言}}
\subsection{深度学习概述与发展历史}
深度学习建立模型模拟人类大脑的神经连接结构,在处理图像、声音和文本这些信号时,通过多个变换阶段分层对数据特征进行描述,进而给出数据的解释。深度学习架构由多层非线性运算单元组成,每个较低层的输出作为更高层的输入,可以从大量输入数据中学习有效的特征表示,学习到的高阶表示中包含输入数据的许多结构信息,是一种从数据中提取表示的好方法,能够用于分类、回归和信息检索等特定问题中。深度学习之所以被称为“深度”,是相对支撑向量机(support vector machine,SVM)、提升方法(boosting)、最大熵方法等“浅层学习”方法而言的,深度学习所学得的模型中,非线性操作的层级数更多。深度学习与浅学习相比具有许多优点,说明了引入深度学习的必要性:
a)在网络表达复杂目标函数的能力方面:浅结构神经网络有时无法很好地实现高变函数等复杂高维函数的表示,而用深度结构神经网络能够较好地表征。
b)在网络结构的计算复杂度方面:当用深度为k的网络结构能够紧凑地表达某一函数时,在采用深度小于k的网络结构表达该函数时,可能需要增加指数级规模数量的计算因子,大大增加了计算的复杂度。另外,需要利用训练样本对计算因子中的参数值进行调整,当一个网络结构的训练样本数量有限而计算因子数量增加时,其泛化能力会变得很差。
c)在仿生学角度方面:深度学习网络结构是对人类大脑皮层的最好模拟。与大脑皮层一样,深度学习对输入数据的处理是分层进行的,用每一层神经网络提取原始数据不同水平的特征。
d)在信息共享方面:深度学习获得的多重水平的提取特征可以在类似的不同任务中重复使用,相当于对任务求解提供了一些无监督的数据,可以获得更多的有用信息。
浅层学习依靠人工经验抽取样本特征,网络模型学习后获得的是没有层次结构的单层特征;而深度学习通过对原始信号进行逐层特征变换,将样本在原空间的特征表示变换到新的特征空间,自动地学习得到层次化的特征表示,从而更有利于分类或特征的可视化。深度学习理论的另外一个理论动机是:如果一个函数可用k层结构以简洁的形式表达,那么用k-1层的结构表达则可能需要指数级数量的参数(相对于输入信号),且泛化能力不足。
深度学习的历史可以追溯到早期的神经网络模型提出。
1943年,McCulloch和Pitts提出MP神经元数学模型。1958年,Rosenblatt提出的第一代神经网络单层感知器。第一代神经网络能够区分三角形、正方形等基本形状,让人类觉得有可能发明出真正能感知、学习、记忆的智能机器,但是第一代神经网络基本原理的限制打破了人类的梦想。1969年,Minskey发表感知器专著:单层感知器无法解决异或XOR问题。神经网络的特征层是固定的,是由人类设计的,此与真正智能机器的定义不相符。1986年,Hinton等提出第二代神经网络。他们研究的第二代神经网络,将原始单一固定的特征层替换成多个隐藏层,激活函数采用Sigmoid函数,利用误差的反向传播算法来训练模型,能有效解决非线性分类问题。同时,这个第二代神经网络也成为了后续神经网络发展的基础结构模型。1989年,Cybenko、Hornik等专家证明了万能逼近定理(universal approximation theorem):任何函数都可以被三层神经网络以任意精度逼近。同年,LeCun等发明了卷积神经网络(convolutional neural network,CNN)用来识别手写体。这个项目后续也成为神经网络学习者的入门实验。1991年,反向传播算法被指出存在梯度消失问题。此后十多年,各种浅层机器学习模型相继被提出,包括1995年Cortes与Vapnik发明的支持向量机,神经网络的研究被搁置。2006年,Hinton等探讨大脑中的图模型,提出自编码器(autoencoder)来降低数据的维度,并提出用预训练的方式快速训练深度信念网,来抑制梯度消失问题。Bengio等证明预训练的方法还适用于自编码器等无监督学习,Poultney等用基于能量的模型来有效学习稀疏表示。这些论文奠定了深度学习的基础,从此深度学习进入快速发展期。
2010年,美国国防部DARPA计划首次资助深度学习项目。2011年,Glorot等提出ReLU激活函数,能有效抑制梯度消失问题。深度学习在语音识别上最先取得重大突破,微软和谷歌先后采用深度学习将语音识别错误率降低至20%~30%,是该领域10年来最大突破。2012年,Hinton和他的学生将ImageNet图片分类问题的Top5错误率由26%降低至15%,从此深度学习进入爆发期。
在2014与2015年,Dauohin、Choromanska等分别证明局部极小值问题通常来说不是严重的问题,消除了笼罩在神经网络上的局部极值阴霾。深度学习发展历史如图1所示。图1中的空心圆圈表示深度学习热度上升与下降的关键转折点,实心圈圈的大小表示深度学习在这一年的突破大小,斜向上的直线表示深度学习热度正处于上升期,斜向下的直线表示深度学习热度处于下降期。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习发展历史.png}
\caption{深度学习发展历史}
\label{fig1}
\end{figure}
2016年3月,“人工智能”一词被写入中国“十三五”规划纲要。2016年10月美国政府发布《美国国家人工智能研究与发展战略规划》文件Google、Microsoft、Facebook、百度、腾讯、阿里巴巴等各大互联网公司也纷纷加大对人工智能的投入。2022年2月,谷歌(Google)旗下的DeepMind公司推出了AlphaCode,这是一款大规模生成编程代码的系统。包括2021年,OpenAI发表ChatGPT,随着算力提升和数据集的增加,ChatGPT以惊人的速度更新迭代,一直到现今ChatGPT-4o模型上线… …各类人工智能创业公司层出不穷,各种人工智能应用逐渐改变人类的生活。
深度学习其实是机器学习的一部分,机器学习经历了从浅层机器学习到深度学习两次浪潮。深度学习模型与浅层机器学习模型之间存在重要区别。浅层机器学习模型不使用分布式表示(distributed representations),而且需要人为提取特征,模型本身只是根据特征进行分类或预测,人为提取的特征好坏很大程度上决定了整个系统的好坏。特征提取需要专业的领域知识,而且特征提取、特征工程需要花费大量时间。深度学习是一种表示学习,能够学到数据更高层次的抽象表示,能够自动从数据中提取特征。而且深度学习里的隐藏层相当于是输入特征的线性组合,隐藏层与输入层之间的权重相当于输入特征在线性组合中的权重。另外,深度学习的模型能力会随着深度的增加而呈指数增长。
\subsection{大模型概述与发展历史}
大模型是指具有庞大参数数量的机器学习模型,通常用于处理复杂的任务和大规模数据集。这些模型通常基于深度学习算法,如深度神经网络,具有数十亿甚至数千亿个参数。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。
小模型通常指参数较少、层数较浅的模型,它们具有轻量级、高效率、易于部署等优点,适用于数据量较小、计算资源有限的场景,例如移动端应用、嵌入式设备、物联网等。而当模型的训练数据和参数不断扩大,直到达到一定的临界规模后,其表现出了一些未能预测的、更复杂的能力和特性,模型能够从原始训练数据中自动学习并发现新的、更高层次的特征和模式,这种能力被称为“涌现能力”(涌现(emergence)或称创发、突现、呈展、演生,是一种现象,为许多小实体相互作用后产生了大实体,而这个大实体展现了组成它的小实体所不具有的特性。引申到模型层面,涌现能力指的是当模型的训练数据突破一定规模,模型突然涌现出之前小模型所没有的、意料之外的、能够综合分析和解决更深层次问题的复杂能力和特性,展现出类似人类的思维和智能。涌现能力也是大模型最显著的特点之一)。而具备涌现能力的机器学习模型就被认为是独立意义上的大模型,这也是其和小模型最大意义上的区别。相比小模型,大模型通常参数较多、层数较深,具有更强的表达能力和更高的准确度,但也需要更多的计算资源和时间来训练和推理,适用于数据量较大、计算资源充足的场景,例如云端计算、高性能计算、人工智能等。
大模型的原理是基于深度学习,它利用大量的数据和计算资源来训练具有大量参数的神经网络模型。通过不断地调整模型参数,使得模型能够在各种任务中取得最佳表现。通常说的大模型的“大”的特点体现在:参数数量庞大、训练数据量大、计算资源需求高等。很多先进的模型由于拥有很“大”的特点,使得模型参数越来越多,泛化性能越来越好,在各种专门的领域输出结果也越来越准确。现在市面上比较流行的任务有AI生成语言(ChatGPT类产品)、AI生成图片(Midjourney类产品)等,都是围绕生成这个概念来展开应用。“生成”简单来说就是根据给定内容,预测和输出接下来对应内容的能力。比如最直观的例子就是成语接龙,可以把大语言模型想象成成语接龙功能的智能版本,也就是根据最后一个字输出接下来一段文章或者一个句子。
在图2中,我们可以清楚地看到大模型的发展历程。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/大模型的发展历程.png}
\caption{大模型的发展历程}
\label{fig2}
\end{figure}
萌芽期(1950-2005):以CNN为代表的传统神经网络模型阶段
· 1956年,从计算机专家约翰·麦卡锡提出“人工智能”概念开始,AI发展由最开始基于小规模专家知识逐步发展为基于机器学习。
· 1980年,卷积神经网络的雏形CNN诞生。
· 1998年,现代卷积神经网络的基本结构LeNet-5诞生,机器学习方法由早期基于浅层机器学习的模型,变为了基于深度学习的模型,为自然语言生成、计算机视觉等领域的深入研究奠定了基础,对后续深度学习框架的迭代及大模型发展具有开创性的意义。
探索沉淀期(2006-2019):以Transformer为代表的全新神经网络模型阶段
· 2013年,自然语言处理模型Word2Vec诞生,首次提出将单词转换为向量的“词向量模型”,以便计算机更好地理解和处理文本数据。
· 2014年,被誉为21世纪最强大算法模型之一的GAN(对抗式生成网络)诞生,标志着深度学习进入了生成模型研究的新阶段。
· 2017年,Google颠覆性地提出了基于自注意力机制的神经网络结构———Transformer架构,奠定了大模型预训练算法架构的基础。
· 2018年,OpenAI和Google分别发布了GPT-1与BERT大模型,意味着预训练大模型成为自然语言处理领域的主流。在探索期,以Transformer为代表的全新神经网络架构,奠定了大模型的算法架构基础,使大模型技术的性能得到了显著提升。
迅猛发展期(2020-至今):以GPT为代表的预训练大模型阶段
· 2020年,OpenAI公司推出了GPT-3,模型参数规模达到了1750亿,成为当时最大的语言模型,并且在零样本学习任务上实现了巨大性能提升。随后,更多策略如基于人类反馈的强化学习(RHLF)、代码预训练、指令微调等开始出现,被用于进一步提高推理能力和任务泛化。
· 2022年11月,搭载了GPT3.5的ChatGPT横空出世,凭借逼真的自然语言交互与多场景内容生成能力,迅速引爆互联网。
· 2023年3月,最新发布的超大规模多模态预训练大模型———GPT-4,具备了多模态理解与多类型内容生成能力。在迅猛发展期,大数据、大算力和大算法完美结合,大幅提升了大模型的预训练和生成能力以及多模态多场景应用能力。如ChatGPT的巨大成功,就是在微软Azure强大的算力以及wiki等海量数据支持下,在Transformer架构基础上,坚持GPT模型及人类反馈的强化学习(RLHF)进行精调的策略下取得的。
按照输入数据类型的不同,大模型主要可以分为四大类。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/大模型的分类.jpg}
\caption{大模型的分类}
\label{fig3}
\end{figure}
a)大语言模型(Large Language Models,LLM):是指在自然语言处理(Natural Language Processing,NLP)领域中的一类大模型,通常用于处理文本数据和理解自然语言。这类大模型的主要特点是它们在大规模语料库上进行了训练,以学习自然语言的各种语法、语义和语境规则。例如:GPT系列(OpenAI)、Bard(Google)、文心一言(百度)。
b)计算机视觉模型(Computer Vision Models,CV):是指在计算机视觉(Computer Vision,CV)领域中使用的大模型,通常用于图像处理和分析。这类模型通过在大规模图像数据上进行训练,可以实现各种视觉任务,如图像分类、目标检测、图像分割、姿态估计、人脸识别等。例如:VIT系列(Google)、文心UFO、华为盘古CV、INTERN(商汤)。
c)音频模型(Audio Models,AM):音频模型专门设计用于处理音频数据,执行语音识别、语音生成、情感识别等任务。这些模型可以分析音频信号,提取语音特征,并进行准确的语音处理和理解。例如:WaveNet、DeepSpeech、Transformer-based ASR models。
d)多模态大模型(Multimodal Large Models,MMLM):是指能够处理多种不同类型数据的大模型,例如文本、图像、音频等多模态数据。这类模型结合了NLP和CV的能力,以实现对多模态信息的综合理解和分析,从而能够更全面地理解和处理复杂的数据。例如:DingoDB多模向量数据库(九章云极 DataCanvas)、DALL-E(OpenAI)、悟空画画(华为)、midjourney。
按照应用领域的不同,大模型主要可以分为L0、L1、L2三个层级:
a)通用大模型L0:是指可以在多个领域和任务上通用的大模型。它们利用大算力、使用海量的开放数据与具有巨量参数的深度学习算法,在大规模无标注数据上进行训练,以寻找特征并发现规律,进而形成可“举一反三”的强大泛化能力,可在不进行微调或少量微调的情况下完成多场景任务,相当于AI完成了“通识教育”。
b)行业大模型L1:是指那些针对特定行业或领域的大模型。它们通常使用行业相关的数据进行预训练或微调,以提高在该领域的性能和准确度,相当于AI成为“行业专家”。
c)垂直大模型L2:是指那些针对特定任务或场景的大模型。它们通常使用任务相关的数据进行预训练或微调,以提高在该任务上的性能和效果。
大模型在面对新的、未见过的数据时,能够正确理解和预测这些数据的能力,这就是大模型的泛化能力。同时我们在给定预训练模型(Pre-trained model)下,基于模型进行微调(Fine-tune),使用少量带标签的数据对预训练模型进行再次训练,以适应特定任务。相对于从头开始训练(Training a model from scatch),这样的微调可以省去大量计算资源和计算时间,提高计算效率,甚至提高准确率。在这个过程中,模型的参数会根据新的数据分布进行调整。这种方法的好处在于,它利用了预训练模型的强大能力,同时还能够适应新的数据分布。因此,模型微调能够提高模型的泛化能力,减少过拟合现象。
常见的模型微调方法:
a)Fine-tuning:这是最常用的微调方法。通过在预训练模型的最后一层添加一个新的分类层,然后根据新的数据集进行微调。
b)Feature augmentation:这种方法通过向数据中添加一些人工特征来增强模型的性能。这些特征可以是手工设计的,也可以是通过自动特征生成技术生成的。
c)Transfer learning:这种方法是使用在一个任务上训练过的模型作为新任务的起点,然后对模型的参数进行微调,以适应新的任务。
追寻大模型的“万恶之源”,大抵应该从那篇《Attention is All You Need》开始,基于这篇由谷歌机器翻译团队提出的由多组Encoder、Decoder构成的机器翻译模型Transformer开始,大模型的发展大致走上了两条路,一条路是舍弃Decoder部分,仅仅使用Encoder作为编码器的预训练模型,其最出名的代表就是Bert家族,如图4。这些模型开始尝试“无监督预训练”的方式来更好的利用相较其他数据而言更容易获得的大规模的自然语言数据,而“无监督”的方式就是Masked Language Model(MLM),通过让Mask掉句子中的部分单词,让模型去学习使用上下文去预测被Mask掉的单词的能力。在Bert问世之初,在NLP领域也算是一颗炸弹,同时在许多自然语言处理的常见任务如情感分析、命名实体识别等中都刷到了SOTA,Bert家族的出色代表除了谷歌提出的Bert 、ALBert之外,还有百度的ERNIE、Meta的RoBERTa、微软的DeBERTa等等。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Bert家谱树.png}
\caption{Bert家谱树}
\label{fig4}
\end{figure}
可惜的是,Bert的进路没能突破Scale Law,而这一点则由当下大模型的主力军,即大模型发展的另一条路,通过舍弃Encoder部分而基于Decoder部分的GPT家族真正做到了,如图5。GPT家族的成功来源于一个研究人员惊异的发现:“扩大语言模型的规模可以显著提高零样本(zero-shot)与小样本(few-shot)学习的能力”,这一点与基于微调的Bert家族有很大的区别,也是当下大规模语言模型神奇能力的来源。GPT家族基于给定前面单词序列预测下一个单词来进行训练,因此GPT最初仅仅是作为一个文本生成模型而出现的,而GPT-3的出现则是GPT家族命运的转折点,GPT-3第一次向人们展示了大模型带来的超越文本生成本身的神奇能力,显示了这些自回归语言模型的优越性。而从GPT-3开始,当下的ChatGPT、GPT-4、Bard以及PaLM、LLaMA百花齐放百家争鸣,带来了当下的大模型盛世。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/GPT家谱树.png}
\caption{GPT家谱树}
\label{fig5}
\end{figure}
从合并这两支家谱树的图6中,可以看到早期的Word2Vec、FastText,再到预训练模型的早期探索ELMo、ULMFiT,再到Bert横空出世红极一时,到GPT家族默默耕耘直到GPT-3惊艳登场,ChatGPT一飞冲天,技术的迭代之外也可以看到OpenAI默默坚持自己的技术路径最终成为目前LLMs无可争议的领导者,看到Google对整个Encoder-Decoder模型架构做出的重大理论贡献,看到Meta对大模型开源事业的持续慷慨的参与,当然也看到从GPT-3之后LLMs逐渐趋向于“闭”源的趋势,未来很有可能大部分研究不得不变成API-Based的研究。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/大模型家谱树.png}
\caption{大模型家谱树}
\label{fig6}
\end{figure}
大模型是未来人工智能发展的重要方向和核心技术,未来,随着AI技术的不断进步和应用场景的不断拓展,大模型将在更多领域展现其巨大的潜力,为人类万花筒般的AI未来拓展无限可能性。
\section{\textbf{\large 深度学习综述}}
\subsection{深度学习表示模型}
深度学习方法试图找到数据的内部结构,发现变量之间的真正关系形式。大量研究表明,数据表示的方式对训练学习的成功产生很大的影响,好的表示能够消除输入数据中与学习任务无关因素的改变对学习性能的影响,同时保留对学习任务有用的信息。
深度学习中数据的表示有局部表示(local representation)、分布表示(distributed representation)和稀疏分布表示(sparse representation)三种表示形式。
a)局部表示(local representation):局部表示通常指的是将数据或特征表示为局部结构的组合。这意味着每个特征或数据点都被表示为其周围局部信息的组合。例如,在图像处理中,局部表示可以是提取图像中每个局部区域的特征,例如图像块或局部特征点的描述符。局部表示侧重于捕获数据的局部结构和特征。
b)分布式表示(distributed representation):分布式表示是指将数据或特征表示为多个部分的组合,每个部分都对整体信息的某个方面进行编码。这意味着每个特征或数据点都由多个分布式的部分组合而成,每个部分对整体信息的不同方面进行编码。例如,在自然语言处理中,分布式表示可以是词嵌入,其中每个词被表示为一个固定长度的向量,向量的不同维度编码了不同的语义信息。分布式表示侧重于捕获数据的全局结构和语义信息。
c)稀疏表示(sparse representation):稀疏表示是指将数据或特征表示为具有大部分零值的形式。这意味着表示中的大多数元素都是零,只有少数非零元素。稀疏表示可以通过各种方法实现,例如使用稀疏编码或稀疏自编码器。稀疏表示通常用于处理高维数据,以减少存储和计算成本,并且有助于提取数据中的重要信息。
对于特定的任务需要选择合适的表示形式才能对学习性能起到改进的作用。当表示一个特定的输入分布时,一些结构是不可能的,因为它们不相容。例如在语言建模中,运用局部表示可以直接用词汇表中的索引编码词的特性,而在句法特征、形态学特征和语义特征提取中,运用分布表示可以通过连接一个向量指示器来表示一个词。分布表示由于其具有的优点,常常用于深度学习中表示数据的结构。由于聚类簇之间在本质上互相不存在包含关系,因此聚类算法不专门建立分布表示,而独立成分分析(independent component analysis,ICA)和主成分分析(principal component analysis,PCA)通常用来构造数据的分布表示。
\subsection{深度神经网络基础介绍}
人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。
关于神经网络有很多不可或缺的基本概念:
a)超参数(hyperparameters):在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。超参数具体来讲比如算法中的学习率(learning rate)、梯度下降法迭代的数量(iterations)、隐藏层数目(hidden layers)、隐藏层单元数目、激活函数(activation function)都需要根据实际情况来设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。
b)激活函数(activation functions):激活函数将非线性特性引入到我们的网络中,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。常见的激活函数包括:Sigmoid函数、Tanh函数、ReLU函数(Rectified Liner Unit)、Leaky ReLU函数、Parametric ReLu函数… …每种激活函数都有其独特的特点和适用场景。
c)优化算法(optimization algorithms):优化算法是在机器学习和深度学习中用于调整模型参数以最小化损失函数的一大类算法。常见的优化算法有:梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent,SGD)、小批量梯度下降(Mini-batch Gradient Descent)、Adam、RMSprop、Adagrad… …这些优化算法各有特点,根据具体问题的特点选择合适的算法有助于提高模型的收敛速度和性能。
d)损失函数(loss function):损失函数是评估模型预测结果与真实值之间差异的函数。常见的损失函数包括:均方误差(Mean Squared Error,MSE)、交叉熵损失(Cross-Entropy Loss)、对数损失(Log Loss)、Hinge Loss、Huber Loss… …选择合适的损失函数取决于问题类型和模型的特性。
最简单的神经网络模型无疑是感知机(perception),由美国心理学家Frank Rosenblatt在1957年提出,是神经网络和支持向量机的基础。它是一种二元分类器,用于将输入向量划分到两个可能的类别中。感知机接受多个输入,并输出一个二元结果,表示输入属于哪一类。它通过学习一组权重来实现分类任务,这些权重用于对输入进行加权求和,并将结果传递给激活函数进行分类。如图8所示,感知机的工作原理类似于图7中的神经细胞,它对输入信号进行加权求和,并将结果传递给激活函数,激活函数根据加权和的结果输出一个二元值。感知机的学习算法通常采用随机梯度下降等方法,通过不断调整权重来使感知机逐渐学习正确的分类。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/神经细胞.png}
\caption{神经细胞}
\label{fig7}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/感知机模型.png}
\caption{感知机模型}
\label{fig8}
\end{figure}
尽管感知机是最简单的神经网络模型之一,但它为后续深度学习和神经网络的发展奠定了基础,并在一定程度上启发了后来的神经网络模型的设计和学习算法的发展。我们也可以从图9中的感知机模型看到神经网络的基本单位。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/感知机详细模型.jpg}
\caption{感知机详细模型}
\label{fig9}
\end{figure}
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。从图10我们可以看到几种常用的网络结构。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/常用网络结构.png}
\caption{常用网络结构}
\label{fig10}
\end{figure}
深度神经网络是由多个单层非线性网络叠加而成的,常见的单层网络按照编码解码情况分为3类:只包含编码器部分、只包含解码器部分、既有编码器部分也有解码器部分。编码器提供从输入到隐含特征空间的自底向上的映射,解码器以重建结果尽可能接近原始输入为目标将隐含特征映射到输入空间。深度神经网络分为以下3类(如图11所示)。
a)前馈深度网络(feed-forward deep networks,FFDN):由多个编码器层叠加而成,如多层感知机(multi-layer perceptrons,MLP)、卷积神经网络(convolutional neural networks,CNN)等。前馈神经网络是最初的人工神经网络模型之一。在这种网络中,信息只沿一个方向流动,从输入单元通过一个或多个隐层到达输出单元,在网络中没有封闭环路。
b)反馈深度网络(feed-back deep networks,FBDN):由多个解码器层叠加而成,如反卷积网络(deconvolutional networks,DN)、层次稀疏编码网络(hierarchical sparse coding,HSC)等。与前馈网络不同,反馈网络并不是对输入信号进行编码,而是通过解反卷积或学习数据集的基,对输入信号进行反解。前馈网络是对输入信号进行编码的过程,而反馈网络则是对输入信号解码的过程。
c)双向深度网络(bi-directional deep networks,BDDN),通过叠加多个编码器层和解码器层构成(每层可能是单独的编码过程或解码过程,也可能既包含编码过程也包含解码过程),如深度玻尔兹曼机(deep Boltzmann machines,DBM)、深度信
念网络(deep belief networks,DBN)、栈式自编码器(stacked auto-encoders,SAE)等。双向网络的结构结合了编码器和解码器2类单层网络结构,双向网络的学习则结合了前馈网络和反馈网络的训练方法,通常包括单层网络的预训练和逐层反向迭代误差2个部分。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度神经网络分类结构.png}
\caption{深度神经网络分类结构}
\label{fig11}
\end{figure}
图12整理了大部分神经网络模型图。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/神经网络集成图.jpg}
\caption{神经网络集成图}
\label{fig12}
\end{figure}
典型的深度神经网络有多层感知器(multilayer perception,MLP)、卷积神经网络(convolutional neural network,CNN)、循环神经网络(recurrent neural network,RNN)、深度信念网络(deep belief networks,DBN)和堆栈自编码网络(stacked auto-encoders networks,SAE)等,下面对这些模型进行描述。
\subsection{多层感知机(multilayer perception,MLP)}
多层感知器(multilayer perception,MLP)也叫前向传播网络、前馈深度网络,是最基本的深度学习网络结构。MLP由若干层组成,每一层包含若干个神经元。激活函数采用径向基函数的多层感知器被称为径向基网络(radial basis function network)。多层感知器的前向传播如图13、图14所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/多层感知机的前向传播.png}
\caption{多层感知机的前向传播}
\label{fig13}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/多层感知机简易模型.png}
\caption{多层感知机简易模型}
\label{fig14}
\end{figure}
输出层可以不止有1个神经元,隐藏层可以只有1层,也可以有多层。输出层为多个神经元的神经网络例如图15所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/多层感知机复杂模型.png}
\caption{多层感知机复杂模型}
\label{fig15}
\end{figure}
MLP的前向传播公式如式(1)、式(2)所示:
\begin{equation}
{z}{i}^{l+1} = \sum{j}W_{ji}{l}y_{j}{l} + b_{i}^{l}
\end{equation}
\begin{equation}
y_{i}^{l+1} = f(z_{i}^{l+1})
\end{equation}
其中,yjly_{j}^{l}yjl是第lll层的第jjj个神经元的输出,zil+1z_{i}^{l+1}zil+1是第l+1l+1l+1层的第iii个神经元被激活函数作用之前的值,WjilW_{ji}^{l}Wjil是第lll层的第jjj个神经元与第l+1l+1l+1层的第iii个神经元之间的权重,bilb_{i}^{l}bil是偏置,f(⋅)f(·)f(⋅)是非线性激活函数,常见的有径向基函数、ReLU、PReLU、Tanh、Sigmoid等。
如果采用均方误差(mean squared error),则损失函数为
\begin{equation}
J=\frac{1}{2}\sum_{i}(y_{i}{L}-y_{i}){2}
\end{equation}
其中,yiLy_{i}^{L}yiL是神经网络最后一层第iii个神经元的输出,yiy_{i}yi是第iii个神经元的真实值。神经网络训练的目标是最小化损失函数,优化方法通常采用批梯度下降法。
\subsection{卷积神经网络(convolutional neural networks,CNN)}
卷积神经网络(convolution neural network,CNN)适合处理空间数据,在计算机视觉领域应用广泛。一维卷积神经网络也被称为时间延迟神经网络(time delay neural network),可以用来处理一维数据。CNN的设计思想受到了视觉神经科学的启发,主要由卷积层(convolutional layer)和池化层(pooling layer)组成。卷积层能够保持图像的空间连续性,能将图像的局部特征提取出来。池化层可以采用最大池化(max-pooling)或平均池化(mean-pooling),池化层能降低中间隐藏层的维度,减少接下来各层的运算量,并提供了旋转不变性。
1981年的诺贝尔医学奖,颁发给了David Hubel和TorstenWiesel,以及Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”——可视皮层是分级的:从原始信号摄入开始(瞳孔摄入像素Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。人的视觉系统的信息处理是分级的。从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,就越利于分类。对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的。那么可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?答案是肯定的,这也是许多深度学习算法(包括CNN)的灵感来源。
关于CNN有很多不可或缺的基本概念:
a)卷积(convolution):卷积神经网络中的核心即为卷积运算,其相当于图像处理中的滤波器运算。对于一个m×n大小的卷积核,其对某一原图像X进行卷积运算的过程为:卷积核W中的每一个权值w分别和覆盖的原图像X中所对应的像素x相乘,然后再求和。所以一幅图像的一个完整的卷积运算过程为:卷积核以一定的间隔滑动,并对所覆盖的区域进行卷积运算得到值z,直至遍历完整幅图像。
b)步长(stride):滑动一定的间距,但这个间距该如何定义呢?这个概念就是卷积的“步长”(stride)。stride=1表示卷积核滑过每一个相距是1的像素,是最基本的单步滑动,作为标准卷积模式。stride是2表示卷积核的移动步长是2,跳过相邻像素,输出图像缩小为原来的1/2。stride是3表示卷积核的移动步长是3,跳过2个相邻像素,图像缩小为原来的1/3,以此类推… …
c)填充(padding):在标准的卷积过程中,存在两个问题:1)每次卷积运算后,图像就会缩小尺寸。在经历多次运算后,图像最终会失去其本来的形状,变为1×1的“柱状”。2)对于图像边缘的像素,只被一个输出使用,但图像中间的像素,则被多个输出使用。这意味着卷积过程丢掉了图像边缘位置的许多信息。对于这个问题,可以采用额外的“假”像素(通常值为0,因此经常使用的术语“零填充”)填充边缘。
d)池化(pooling):对不同位置区域提取出有代表性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操作就叫做池化,池化的过程通常也被称为特征映射的过程(特征降维)。为了有效地减少计算量,池化就是将输入图像进行缩小,减少像素信息,只保留重要信息;为了有效地解决过拟合问题,池化可以减少数据,但特征的统计属性仍能够描述图像,而由于降低了数据维度,可以有效地避免过拟合。池化主要分为两种,最大值池化(max-pooling)和平均值池化(average-pooling),CNN中随机池化使用的较少。最大池化可以获取局部信息,可以更好保留纹理上的特征。如果不用观察物体在图片中的具体位置,只关心其是否出现,则使用最大池化效果比较好。平均池化往往能保留整体数据的特征,能凸出背景的信息。随机池化中元素值大的被选中的概率也大,但不是像最大池化总是取最大值。随机池化一方面最大化地保证了max值的取值,一方面又确保了不会完全是max值起作用,造成过度失真。除此之外,其可以在一定程度上避免过拟合。
e)局部感知:人类对外界的认知一般是从局部到全局、从片面到全面,先对局部有感知的认识,再逐步对全体有认知,这是人类的认识模式。类似的,在机器识别图像时也没有必要把整张图像按像素全部都连接到神经网络中,局部范围内的像素之间联系较为紧密,而距离较远的像素则相关性较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。这种模式就是卷积神经网络中降低参数数目的重要神器:局部感受野,节省了内存。
f)参数(权值)共享:每张自然图像(人物、山水、建筑等)都有其固有特性,也就是说,图像其中一部分的统计特性与其它部分是接近的。这也意味着这一部分学习的特征也能用在另一部分上。因此,在局部连接中隐藏层的每一个神经元连接的局部图像的权值参数(例如5×5),将这些权值参数共享给其它剩下的神经元使用,那么此时不管隐藏层有多少个神经元,需要训练的参数就是这个局部图像的权值参数(例如5×5),也就是卷积核的大小,这样大大减少了训练参数。
卷积与池化操作示意图如图16所示,图中采用3×3的卷积核和2×2的pooling。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/卷积与池化操作示意图.png}
\caption{卷积与池化操作示意图}
\label{fig16}
\end{figure}
从图17可见,第1层的卷积层中提取了边缘或斑块等“低级”信息,而在堆叠了多层的CNN中,随着层次加深,提取的信息(准确说,是响应强烈的神经元)也越来越抽象。第1层的神经元对边缘或斑块有响应,第3层对纹理有响应,第5层对物体部件有响应,最后的全连接层对物体的类别(狗或车)有响应。也就是说,随着层次加深,神经元从简单的形状向“高级”信息变化。换句话说,就像我们理解东西的“含义”一样,响应的对象在逐渐变化。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/CNN的可视化具体解释.png}
\caption{CNN的可视化具体解释}
\label{fig17}
\end{figure}
在无监督预训练出现之前,训练深度神经网络通常非常困难,而其中一个特例是卷积神经网络。第一个卷积神经网络计算模型是在Fukushima的神经认知机中提出的,基于神经元之间的局部连接和分层组织图像转换,将有相同参数的神经元应用于前一层神经网络的不同位置,得到一种平移不变神经网络结构形式。后来,LeCun等人在该思想的基础上,用误差梯度设计并训练卷积神经网络,在一些模式识别任务上得到优越的性能。至今,基于卷积神经网络的模式识别系统是最好的实现系统之一,尤其在手写体字符识别任务上表现出非凡的性能。最早期的卷积神经网络模型是LeCun等在1998年提出的LeNet-5,其结构图如图18所示。输入的MNIST图片大小为32×32,经过卷积操作,卷积核大小为5×5,得到28×28的图片,经过池化操作,得到14×14的图片,然后再卷积再池化,最后得到5×5的图片.接着依次有120、84、10个神经元的全连接层,最后经过Softmax函数作用,得到数字0~9的概率,取概率最大的作为神经网络的预测结果。随着卷积和池化操作,网络越高层,图片大小越小,但图片数量越多。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LeNet-5 结构图.png}
\caption{LetNet-5 结构图}
\label{fig18}
\end{figure}
CNN提供了视觉数据的分层表示,CNN每层的权重实际上学到了图像的某些成分,越高层,成分越具体。CNN将原始信号经过逐层的处理,依次识别出部分到整体。可以对CNN进行可视化来理解CNN:CNN的第二层能识别出拐角、边和颜色;第三层能识别出纹理、文字等更复杂的不变性;第四层能识别出狗的脸、鸟的腿等具体部位;第五层能识别出键盘、狗等具体物体。比如说人脸识别,CNN先是识别出点、边、颜色、拐角,再是眼角、嘴唇、鼻子,再是整张脸。CNN容易在 FPGA等硬件上实现并获得加速;CNN同一卷积层内权值共享,都为卷积核的权重。CNN的局部连接、权值共享、池化操作等特性减少了模型参数,降低了网络复杂性,也提供了平移、扭曲、旋转、缩放不变性。
在训练卷积神经网络时,最常用的方法是采用反向传播法则以及有监督的训练方式,算法流程如图19所示。网络中信号是前向传播的,即从输入特征向输出特征的方向传播,第1层的输入X,经过多个卷积神经网络层,变成最后一层输出的特征图O。将输出特征图O与期望的标签T进行比较,生成误差项E。通过遍历网络的反向路径,将误差逐层传递到每个节点,根据权值更新公式,更新相应的卷积核权值。在训练过程中,网络中权值的初值通常随机初始化(也可通过无监督的方式进行预训练),网络误差随迭代次数的增加而减少,并且这一过程收敛于一个稳定的权值集合,额外的训练次数呈现出较小的影响.
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/卷积神经网络的训练过程.png}
\caption{卷积神经网络的训练过程}
\label{fig19}
\end{figure}
卷积神经网络的特征检测层通过训练数据来进行学习,避免了显式的特征提取,而是隐式地从训练数据中学习特征,而且同一特征映射面上的神经元权值相同,网络可以并行学习,这也是卷积神经网络相对于其他神经网络的一个优势。权值共享降低了网络的复杂性,特别是多维向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。
卷积神经网络的成功依赖于两个假设:a)每个神经元有非常少的输入,这有助于将梯度在尽可能多的层中进行传播;b)分层局部连接结构是非常强的先验结构,特别适合计算机视觉任务,如果整个网络的参数处于合适的区域,基于梯度的优化算法能得到很好的学习效果。卷积神经网络的网络结构更接近实际的生物神经网络,在语音识别和图像处理方面具有独特的优越性,尤其是在视觉图像处理领域进行的实验,得到了很好的结果。
ImageNet比赛(ImageNet large scale visual recognition competition,ILSVRC)极大促进了卷积神经网络的发展,不断有新发明的卷积神经网络刷新了ImageNet成绩。从2012年的AlexNet,到2013年的ZF Net,2014年的VGGNet、GoogLeNet,再到2015年的ResNet,网络层数不断增加,模型能力也不断增强。AlexNet第一次展现了深度学习的强大能力,ZF Net是可视化理解卷积神经网络的结果,VGGNet表明网络深度能显著提高深度学习的效果,GooLeNet第一次打破了卷积层池化层堆叠的模式,ResNet首次成功训练了深度达到152层的神经网络。CNN应用于物体检测的主流方法是R-CNN及其之后的改进Fast R-CNN、Faster R-CNN、Mask R-CNN。改进的过程其实是用深度学习模型来替代浅层机器学习模型的过程,实现端到端的训练,速度也越来越快。另外,网中网结构创新性地提出在网络里嵌套网络的想法;空间变换网络说明模型效果的提升不一定需要改变网络结构,还可以通过对输入数据进行变换。
\subsection{循环神经网络(recurrent neural networks,RNN)}
循环神经网络(recurrent neural networks,RNN)适合处理时序且输入的序列长度是不固定的数据,在语音处理、自然语言处理领域应用广泛。人类的语音和语言天生具有时序性,循环神经网络具有一定的记忆能力,能够按时序依次处理任意长度的信息。
循环神经网络(RNN),神经元的输出可以在下一个时间戳直接作用到自身(作为输入)。从图20的对比图可以看出RNN相比经典的神经网络结构多了一个循环圈,这个圈就代表着神经元的输出在下一个时间戳还会返回来作为输入的一部分,这些循环让RNN看起来似乎很神秘,然而,换个角度想想,也不比一个经典的神经网络难于理解。RNN可以被看做是对同一神经网络的多次赋值,第i层神经元在t时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(t-1)时刻的输出,如果我们按时间点将RNN展开,将得到图21的结构图。在不同的时间点,RNN的输入都与将之前的时间状态有关,tnt_{n}tn时刻网络的输出结果是该时刻的输入和所有历史共同作用的结果,这就达到了对时间序列建模的目的。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RNN与其他神经网络的对比.png}
\caption{RNN与其他神经网络的对比}
\label{fig20}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RNN与时间相关的结构图.png}
\caption{RNN与时间相关的结构图}
\label{fig21}
\end{figure}
RNN及其展开图如图22所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RNN及其展开图.png}
\caption{RNN及其展开图}
\label{fig22}
\end{figure}
RNN的前向传播公式如式(4)~(6)所示:
\begin{equation}
z_{h}^{t} = \sum_{i=1}{I}w_{ij}x_{i}{t} + \sum_{h{\prime}=1}{H}w_{h{\prime}h}a_{h{\prime}}^{t-1}
\end{equation}
\begin{equation}
a_{h}^{t} = f_{h}(z_{h}^{t})
\end{equation}
\begin{equation}
y_{k}^{t} = \sum_{h=1}{H}w_{hk}a_{h}{t}
\end{equation}
其中,xitx_{i}^{t}xit是ttt时刻输入层的第iii个神经元,ah′t−1a_{h^{\prime}}^{t-1}ah′t−1是t−1t-1t−1隐藏层的第h′h^{\prime}h′个神经元,zhtz_{h}^{t}zht是ttt时刻隐藏层第hhh个神经元被激活函数作用之前的值,ykty_{k}^{t}ykt是ttt时刻输出层的第kkk个神经元,wihw_{ih}wih、wh′hw_{h^{\prime}h}wh′h、whkw_{hk}whk分别是输入层与隐藏层、隐藏层与隐藏层、隐藏层与输出层之间的权重,ff(⋅)f_{f}(·)ff(⋅)是非线性激活函数。
RNN将上一时刻隐藏层的输出也作为这一时刻隐藏层的输入,能够利用过去时刻的信息,即RNN具有记忆性。RNN在各个时间上共享权重,大幅减少了模型参数。但RNN训练难度依然较大,因此Sutskever等和Pascanu等都对RNN的训练方法进行了改进。
理论上,RNN可以使用先前所有时间点的信息作用到当前的任务上,也就是长期依赖(long-term dependencies),如果RNN可以做到这点,将变得非常有用,例如在自动问答中,可以根据上下文实现更加智能化的问答。然而在现实应用中,会面临着不同的情况,例如:
a)有一个语言模型是基于先前的词来预测下一个词。如果现在要预测以下这句话的最后一个单词 “白云飘浮在(天空)”,我们并不需要任何其它上下文,最后一个词很显然就应该是天空。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,如图23所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RNN中相关信息与预测值间隔小.png}
\caption{RNN中相关信息与预测值间隔小}
\label{fig23}
\end{figure}
b)假设我们要预测“我从小生长在四川… …我会讲流利的(四川话)”最后一个词,根据最后一句话的信息建议最后一个词可能是一种语言的名字,但是如果我们要弄清楚是什么语言,则需要找到离当前位置很远的“四川”那句话的上下文。这说明相关信息和当前预测位置之间的间隔就变得相当大,如图24所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RNN中相关信息与预测值间隔大.png}
\caption{RNN中相关信息与预测值间隔大}
\label{fig24}
\end{figure}
不幸的是,随着间隔的不断增大,RNN会出现“梯度消失”或“梯度爆炸”的现象,这就是RNN的长期依赖问题。例如我们常常使用sigmoid作为神经元的激励函数,如对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,到最后梯度指数衰减到底层基本上接受不到有效的信号,这种情况就是 “梯度消失”。因此,随着间隔的增大,RNN会丧失学习到连接如此远的信息的能力。
1997年Sepp Hochreiter和Jürgen Schmidhuber提出长短期记忆网络(long short term memory,LSTM)解决了长期依赖的问题。作为一种循环神经网络(RNN)的变体,LSTM通过门控单元的设计来控制信息的流动,包括输入门、遗忘门和输出门。这些门控制着信息的存储和输出,使得LSTM能够更好地处理长期依赖关系,从而在语音识别、文本生成等任务上取得了显著的成功。
从图25展示的一个LSTM单元的结构,我们可以看到中间有一个cell(细胞),这也是LSTM用于判断信息是否有用的“处理器”。同时,cell旁边被放置了三扇门,分别是输入门(input gate)、遗忘门(forget gate)和输出门(output gate)。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用,只有符合要求的信息才会被留下,不符合的信息则会通过遗忘门被遗忘。LSTM巧妙地通过“门”的形式,利用开关实现时间上的记忆功能,是解决长期依赖问题的有效技术。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LSTM单元.png}
\caption{LSTM单元}
\label{fig25}
\end{figure}
与图26展示的按时间展开的传统RNN过程简化图相比,在图27的LSTM过程图中,我们可以看到重复的模块拥有一个不同的结构,LSTM中的重复模块包含四个交互的层,其中输入门(input gate)、遗忘门(forget gate)和输出门(output gate)便在这里面。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/按时间展开的传统RNN过程简化图.png}
\caption{按时间展开的传统RBB过程简化图}
\label{fig26}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/按时间展开的LSTM过程简化图.png}
\caption{按时间展开的LSTM过程简化图}
\label{fig27}
\end{figure}
通过一个例子来了解一下LSTM的工作过程:“小明刚吃完米饭,现在准备要吃水果,然后拿起了一个()”。
\textit{\textbf{a)遗忘门(forget gate):}}
该门的示意图如图28,该门会读取ht−1h_{t-1}ht−1和xtx_{t}xt的信息,通过sigmoid层输出一个介于0到1之间的数值,作为给每个在细胞状态Ct−1C_{t-1}Ct−1中的数字,0表示“完全舍弃”,1表示“完全保留”。结合上面讲到的语言预测模型例子,“小明刚吃完米饭”,这句话主语是“小明”,宾语是“米饭”,下一句话“现在准备要吃水果”,这时宾语已经变成了新的词“水果”,那第三句话要预测的词,就是跟“水果”有关了,跟“米饭”已经没有什么关系,因此,这时便可以利用“遗忘门”将“米饭”遗忘掉。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LSTM遗忘门.png}
\caption{LSTM遗忘门}
\label{fig28}
\end{figure}
\textit{\textbf{b)输入门(input gate):}}
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两部分:首先是经过“输入门”,这一层是决定我们将要更新什么值;然后,一个tanh层创建一个新的候选值向量,加入到状态中,如图29。在这个语言预测模型的例子中,我们希望将新的代词“水果”增加到细胞状态中,来替代旧的需要忘记的代词“米饭”。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LSTM输入门.png}
\caption{LSTM输入门}
\label{fig29}
\end{figure}
现在来更新旧细胞的状态,由Ct−1C_{t-1}Ct−1更新为CtC_{t}Ct,更新方式为:(1)把旧状态Ct−1C_{t-1}Ct−1与ftf_{t}ft相乘(回顾一下,ftf_{t}ft就是遗忘门,输出遗忘程度,即0到1之间的值),丢弃掉需要丢弃的信息(如遗忘门输出0,则相乘后变成0,该信息就被丢弃了);(2)然后再加上iti_{t}it与候选值相乘(计算公式见上图)。这两者合并后就变成一个新的候选值,如图30。在这个语言预测模型的例子中,这就是根据前面确定的目标,丢弃旧的代词信息(米饭)并添加新的信息(水果)的地方。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LSTM更新.png}
\caption{LSTM更新}
\label{fig30}
\end{figure}
\textit{\textbf{b)输出门(output gate):}}
最后我们要确定输出什么值,首先,通过一个sigmoid层来确定细胞状态的哪个部分将要输出出去,接着,把细胞状态通过tanh进行处理(得到一个介于-1到1之间的值)并将它和sigmoid的输出结果相乘,最终将会仅仅输出我们需要的那部分信息,如图31。在这个语言模型的例子中,因为看到了一个新的代词(水果),可能需要输出与之相关的信息(苹果、梨、香蕉… …)。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LSTM输出门.png}
\caption{LSTM输出门}
\label{fig31}
\end{figure}
以上就是标准LSTM的原理介绍,LSTM也出现了不少的变体,其中一个很流行的变体是Gated Recurrent Unit(GRU),它将遗忘门和输入门合成了一个单一的更新门,同样还混合了细胞状态和隐藏状态,以及其它一些改动。
循环神经网络存在梯度消失或者梯度爆炸问题,无法利用过去长时间的信息,例如当激活函数是Sigmoid函数时,其导数是个小于1的数,多个小于1的导数连乘就会导致梯度消失问题。LSTM、分层RNN都是针对这个问题的解决方案。RNN一般只能处理时间序列等一维数据,多维RNN被提出来处理图像等多维数据。针对很多自然语言处理任务都需要利用上下文信息,双向RNN通过双向处理同一个序列来利用上下文信息。RNN存在训练算法复杂、计算量大的问题,回声状态网络不需要反复计算梯度就能达到很高的精度,为RNN的训练提供了新思路。循环神经网络缺乏推理功能,无法完成需要推理的任务,神经图灵机与记忆网络通过增加记忆模块来解决此问题。
\subsection{深度信念网络(deep belief networks,DBN)}
深度置信网络(deep belief networks)DBN算法是机器学习之神经网络的一种,既可以用于非监督学习,也可以用于监督学习。DBN是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布。通过训练其神经元间的权重,可以让整个神经网络按照最大概率来生成训练数据。不仅可以使用DBN来识别特征、分类数据,还可以用它来生成数据。DBN算法是一种非常实用的学习算法,应用范围较广,扩展性也强,可应用于机器学习之手写字识别、语音识别和图像处理等领域。
DBN由多层神经元构成,这些神经元又分为显性神经元和隐性神经元(以下简称显元和隐元)。显元用于接受输入,隐元用于提取特征。因此隐元也有个别名,叫特征检测器(feature detectors)。最顶上的两层间的连接是无向的,组成联合内存(associative memory)。较低的其他层之间有连接上下的有向连接。最底层代表了数据向量(data vectors),每一个神经元代表数据向量的一维。
DBN的组成元件是受限玻尔兹曼机(Restricted Boltzmann Machines,RBM)。训练DBN的过程是一层一层地进行的。在每一层中,用数据向量来推断隐层,再把这一隐层当作下一层(高一层)的数据向量。事实上,每一个RB 都可以单独用作聚类器。RBM只有两层神经元,一层叫做显层(visible layer),由显元(visible units)组成,用于输入训练数据。另一层叫做隐层(hidden layer),相应地,由隐元(hidden units)组成,用作特征检测器(feature detectors)。图32为受限玻尔兹曼机的结构。图中的较上一层神经元组成隐层,较下的神经元组成显元。每一层都可以用一个向量来表示,每一维表示每个神经元。注意这两层间的对称(双向)连接。可见层输入以后,通过权值和偏置的叠加,变成概率的计算,决定隐藏层出现什么样的数据。而隐藏层可以反过来重构可见层,一直以这样的规则继续下去。这个过程就是吉布斯采样,吉布斯采样是一个逐渐逼近玻尔兹曼分布,最终的理想结果是最终迭代的结果和预先训练好的向量,达到分类的目的。除了分类的用途,另一个用途是,因为隐藏层在不断的迭代过程中会逐渐在一个概率范围内,这些概率就是输入进去的特征,在隐藏层抽取的特征是计算的概率。这些抽取的概率可以达到压缩数据的目的。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/RBM基本模型.jpg}
\caption{RBM基本模型}
\label{fig32}
\end{figure}
为了更好的理解DBN,我们先介绍一下玻尔兹曼机(Boltzmann machine,BM)。玻尔兹曼机是一种随机的递归神经网络,由G.E.Hinton等提出,是能通过学习数据固有内在表示、解决复杂学习问题的最早的人工神经网络之一。玻尔兹曼机由二值神经元构成,每个神经元只取0或1两种状态,状态1代表该神经元处于激活状态,0表示该神经元处于抑制状态。然而,即使使用模拟退火算法,这个网络的学习过程也十分慢。
如图33,玻尔兹曼机同时可以理解为一个随机动力系统,每个变量的状态都以一定的概率受到其他变量的影响。玻尔兹曼机可以用概率无向图模型来描述,一个具有K个节点的玻尔兹曼机满足以下三个性质:
a)二值化。每个节点的状态值只有0和1。
b)一个玻尔兹曼机包括两类节点。一类是可观察的节点有N个,一类是不可观察的节点,即隐藏节点,有(K-N)个。
c)节点之间是全连接的。每个节点都和其他节点连接。
d)每两个变量之间的互相影响是对称的。这里的对称和上面无向其实是一个概念,说白了就是已知A点的状态值,那么求B的状态值和已知B的状态值,求A的状态值的影响是相等的。如果你还是没有理解这句话,碰巧你又了解过一点概率论的知识,那么你可以将上述理解为P(B|A) = P(A|B)。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/玻尔兹曼模型.png}
\caption{玻尔兹曼模型}
\label{fig33}
\end{figure}
玻尔兹曼机中,随机向量X的联合概率,也就是节点的状态值,是满足玻尔兹曼分布的。(玻尔兹曼分布是描述粒子处于特定状态下的概率,是关于状态能量E(x)与系统温度T的函数。一个粒子处于状态α的概率P(α)是关于状态能量E(x)与系统温度T的函数。)在玻尔兹曼机中,配分函数Z通常很难计算,因此,联合概率分布P(x)一般通过马尔科夫链蒙特卡洛方法(MCMC方法)来做近似计算。玻尔兹曼机采用了基于吉布斯采样的样本生成方法来训练的。玻尔兹曼机的吉布斯采样过程为:随机选择一个变量XiX_{i}Xi,然后根据其全条件概率P(Xi∣X−i)P(X_{i}|X_{-i})P(Xi∣X−i)来设置其状态值,即以P(Xi=1∣X−i)P(X_{i=1}|X_{-i})P(Xi=1∣X−i)的概率将变量XiX_{i}Xi设为1,否则为0。在固定的温度T下,运行足够时间后,玻尔兹曼机会达到热平衡状态。此时,任何全局状态的概率都服从玻尔兹曼分布P(x),只和系统的能量有关,和初始状态无关。BM的典型训练算法有变分近似法、随机近似法(stochastic approximation procedure,SAP)、对比散度算法(contrastive divergence,CD)、持续对比散度算法(persistent contrastive divergence,PCD)、快速持续对比散度算法(fast persistent conreastive divergence,FPCD)和回火MCMC算法等。
全连接的玻尔兹曼机在理论上固然有趣,但是由于其复杂性,目前为止并没有广泛运用。实际应用中,用得更多的是基于玻尔兹曼机改造的一个版本——受限玻尔兹曼机(RBM)。Hinton等提出的受限玻尔兹曼机去掉了玻尔兹曼机同层之间的连接,从而大大提高了学习效率。受限玻尔兹曼机分为可见层v以及隐层h,可见层和隐层的节点通过权值w相连接,2层节点之间是全连接,同层节点间互不相连,如图34。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/受限玻尔兹曼机模型.png}
\caption{受限玻尔兹曼模型}
\label{fig34}
\end{figure}
受限玻尔兹曼机一种典型的训练方法如图35所示,首先随机初始化可见层,然后在可见层与隐层之间交替进行吉布斯采样:用条件分布概率P(h|v)计算隐层;再根据隐层节点,同样用条件分布概率P(v|h) 来计算可见层;重复这一采样过程直到可见层和隐层达到平稳分布。而Hinton提出了一种快速算法,称作对比离差(contrastive divergence,CD)学习算法。这种算法使用训练数据初始化可见层,只需迭代k次上述采样过程(即每次迭代包括从可见层更新隐层,以及从隐层更新可见层),就可获得对模型的估计(通常k=1)。RBM的训练过程,实际上是求出一个最能产生训练样本的概率分布。也就是说,要求一个分布,在这个分布里,训练样本的概率最大。由于这个分布的决定性因素在于权值w,所以我们训练RBM的目标就是寻找最佳的权值。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/受限玻尔兹曼机的训练过程.png}
\caption{受限玻尔兹曼的训练过程}
\label{fig35}
\end{figure}
将多个受限玻尔兹曼机堆叠,前一层的输出作为后一层的输入,便构成了深度玻尔兹曼机,如图36所示。网络中所有节点间的连线都是双向的。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度玻尔兹曼机.png}
\caption{深度玻尔兹曼机}
\label{fig36}
\end{figure}
深度玻尔兹曼机训练分为2个阶段:预训练阶段和微调阶段,如图37所示。
在预训练阶段,采用无监督的逐层贪心训练方法来训练网络每层的参数,即先训练网络的第1个隐含层,然后接着训练第2,3,… …个隐含层,最后用这些训练好的网络参数值作为整体网络参数的初始值。预训练之后,将训练好的每层受限玻尔兹曼机叠加形成深度玻尔兹曼机。利用有监督的学习对网络进行训练(一般采用反向传播算法)。由于深度玻尔兹曼机随机初始化权值以及微调阶段采用有监督的学习方法,这些都容易使网络陷入局部最小值。而采用无监督预训练的方法,有利于避免陷入局部最小值问题。从非监督学习来讲,其目的是尽可能地保留原始特征的特点,同时降低特征的维度。从监督学习来讲,其目的在于使得分类错误率尽可能地小。而不论是监督学习还是非监督学习,DBN算法本质都是Feature Learning的过程,即如何得到更好的特征表达。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度玻尔兹曼机逐层贪心训练方法.png}
\caption{深度玻尔兹曼机逐层贪心训练方法}
\label{fig37}
\end{figure}
\subsection{堆栈自编码网络(stacked auto-encoders networks,SAE)}
我们都是知道深度神经网络里面的网络一般是比较深的,在训练之初,模型参数的初始化对模型影响十分深远。当初始化选的好时,模型可以很快的收敛,可以避开一些局部最优点;当初始化选的不好时,模型要么就收敛到局部最优的马鞍点,要么就是收敛的特别慢。同时,现实生活中,那些打好标签的数据其实是很少的,在有监督学习中这些没有label是用不来的,自编码网络就提供一种无监督聚类的能力。所以为了解决参数初始化的问题和无标签数据使用问题,Hinton等提出了使用大量的无label的数据来“无监督”算法逐层预训练网络的初值,再使用有label的数值来微调网络参数的算法。这时,就提出了自编码网络(Autoencoder)。
自编码网络(Autoencoder)的概念最早可以追溯到1980年代。1987年,D. E. Rumelhart,G. E. Hinton和R. J. Williams发表了一篇影响深远的论文,介绍了通过反向传播算法训练神经网络的方法,这为自编码器的发展提供了技术基础。此后,自编码器作为一种特殊类型的神经网络,在机器学习领域逐渐被广泛使用。最早的自编码网络被用于降维和特征学习。它们在无监督学习中起着重要作用,可以用于数据压缩、去噪、特征提取等任务。自编码网络由编码器和解码器组成,通过编码器将输入数据映射到潜在空间,再通过解码器将潜在表示映射回原始数据。
自编码模型(AE)是一个两层的浅层神经网络,第一层称为编码层,第二层称为解码层。如图38所示,训练该模型的目的是用编码器c(⋅)c(·)c(⋅)将输入xxx编码成表示c(x)c(x)c(x),再用解码器g(⋅)g(·)g(⋅)从c(x)c(x)c(x)表示中解码重构输入r(x)=g(c(x))r(x)=g(c(x))r(x)=g(c(x))。因此,自编码模型的输出是其输入本身,通过最小化重构误差L(r(x),x)L(r(x),x)L(r(x),x)来执行训练。当隐层是线性的,并且L(r(x),x)=∣∣r(x)−x∣∣2L(r(x),x) = {||r(x) - x||}^{2}L(r(x),x)=∣∣r(x)−x∣∣2是平方误差时,c(x)c(x)c(x)训练网络将输入投影到数据的主分量空间中,此时自编码模型的作用等效于PCA;当隐层非线性时,与PCA不同,得到的表示可以堆栈成多层,自编码模型能够得到多模态输入分布。重构误差的概率分布可以解释为非归一化对数概率密度函数这种特殊形式的能量函数,意味着有低重构误差的样例对应的模型具有更高的概率。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/自编码模型结构.png}
\caption{自编码模型结构}
\label{fig38}
\end{figure}
自编码训练方式的“无监督”训练,其实它这个的无监督是指自编码网络的训练集可以是那些没有打上label的数据,而不是我们通常意思上说的监督学习的监督(通常监督学习是把样本真实的label当做期望输出,并以此监督学习的过程)。典型的自编码网络包含三层:输入层,隐含层,输出层。其中输入层与输出层的节点数一致。从输入层到隐层叫做数据的分析,而从隐层到输出层叫做数据的合成。
设输入层有u个神经元,隐层成有v个神经元,输出层有u个神经元。自编码的训练集样本无须打上label。TrainSet={xi,其中x∈Ru,i∈{0,1,2,...,n−1,n}}TrainSet = \left \{ x^{i}, 其中x \in R^{u}, i \in \left \{ 0, 1, 2, ..., n-1, n \right \}\right \}TrainSet={xi,其中x∈Ru,i∈{0,1,2,...,n−1,n}}训练集共n个样本,每个样本都是u维空间的向量。之后通过隐藏层与输出层的激活,利用误差函数计算模型效果,最后通过梯度下降算法更新参数,得到符合使用要求的自编码网络。
Restricted Boltzmann Machines(RBM)和Autoencoders(AE)是两种常见的无监督学习模型,它们在某些方面相似,但在工作原理和应用方面也有一些明显的区别。在结构上:RBM是一种双层神经网络,由可见层和隐藏层组成。可见层和隐藏层之间存在权重连接,AE也是一种双层神经网络,由编码器和解码器组成。编码器将输入数据编码为潜在表示,解码器将潜在表示解码为原始输入;在学习方式上RBM使用对比散度(contrastive divergence)等方法进行训练,通过最大化训练数据的似然函数来学习模型参数,AE通过最小化输入数据与解码器输出之间的重构误差来学习模型参数;在应用上RBM主要用于特征学习、降维和生成模型等任务,如在生成对抗网络(GANs)中充当生成器,AE用于数据压缩、特征学习、去噪和生成模型等任务,如变分自编码器(VAEs)是基于AE的一种生成模型。总体来说,RBM更专注于学习数据的分布和生成模型,而AE更专注于学习有效的数据表示和压缩重构。
上面介绍了简单的自编码网络,下面我们将自编码网络复合起来组成一个复杂的网络,就是堆栈自编码网络(stacked auto-encoders networks,SAE)。堆栈自编码网络的结构与DBN类似,由若干结构单元堆栈组成,不同之处在于其结构单元为自编码模型而不是RBM。我们在分类问题里面使用这个深度自编码网络。
接下来的思路就很自然了,我们已经通过AE得到特征表达,那么我们可不可以将特征表示再作为原始信息,训练一个新的自编码器,得到新的特征表达呢?当然可以,而且这就是所谓的堆叠自编码器(Stacked Autoencoder,SAE)。Stacked就是逐层堆叠的意思,这个跟“栈”有点像。当把多个自编码器Stack起来之后,这个系统看起来就像图39。这样就把自编码器改成了深度结构了,即《learning multiple levels of representation and abstraction》(Hinton, Bengio, LeCun, 2015)。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/SAE堆叠模型.png}
\caption{SAE堆叠模型}
\label{fig39}
\end{figure}
深度堆栈自编码网络有两个设计和模型训练步骤。第一个是设计自编码网络进行初始化参数进行预先学习,第二个步骤是设计分类器,然后使用分类器利用第一步学习到的初始化参数对模型进行微调。需要注意的是,整个网络的训练不是一蹴而就的,而是逐层进行的。比如说我们要训练一个n−>m−>kn−>m−>kn−>m−>kn−>m−>kn−>m−>kn−>m−>k结构的网络,实际上我们是先训练网络n−>m−>nn−>m−>nn−>m−>nn−>m−>nn−>m−>nn−>m−>n,得到n−>mn−>mn−>mn−>mn−>mn−>m的变换,然后再训练m−>k−>mm−>k−>mm−>k−>mm−>k−>mm−>k−>mm−>k−>m网络,得到m−>km−>km−>km−>km−>km−>k的变换。最终堆叠成SAE,即为n−>m−>kn−>m−>kn−>m−>kn−>m−>kn−>m−>kn−>m−>k的结果,整个过程就像一层层往上面盖房子,这就是大名鼎鼎的layer-wise unsuperwised pre-training (逐层非监督预训练)。
接下来我们来看一个具体的例子,假设你想要训练一个包含两个隐藏层的堆叠自编码器,用来训练MNIST手写数字分类。
首先,你需要用原始输入xkx_{k}xk训练第一个稀疏自编码器中,它能够通过特征函数学习得到原始输入的一阶特征表示hi(1)h_{i}^{(1)}hi(1),如图40所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/第一层AE.png}
\caption{第一层AE}
\label{fig40}
\end{figure}
接着,你需要把原始数据输入到上述训练好的稀疏自编码器中,对于每一个输入xkx_{k}xk,都可以得到它对应的一阶特征表示hi(1)h_{i}^{(1)}hi(1)。然后你再用这些一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征hj(2)h_{j}^{(2)}hj(2),如图41。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/第二层AE.png}
\caption{第二层AE}
\label{fig41}
\end{figure}
同样,再把一阶特征输入到刚训练好的第二层稀疏自编码器中,得到每个hi(1)h_{i}^{(1)}hi(1)对应的二阶特征激活值hj(2)h_{j}^{(2)}hj(2)。接下来,你可以把这些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。如下图42。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/第三层AE.png}
\caption{第三层AE}
\label{fig42}
\end{figure}
最终,你可以将这三层结合起来构建一个包含两个隐藏层和一个最终softmax分类器层的堆叠自编码网络,这个网络能够如你所愿地对MNIST数据集进行分类。最终模型如图43。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/三层AE组合.png}
\caption{三层AE组合}
\label{fig43}
\end{figure}
为什么逐层预训练的SAE有不错的效果?一个直观的解释是,预训练好的网络在一定程度上拟合了训练数据的结构,这使得整个网络的初始值是在一个合适的状态,便于有监督阶段加快迭代收敛。当然,有不少研究提出了很好的初始化策略,再加上现在常用的dropout、ReLU,直接去训练一个深层网络已经不是问题。除了AE和SAE这种逐层预训练的方式外,还有另外一条类似的主线,即限制玻尔兹曼机(RBM)与深度信念网络(DBN)。
堆栈自编码网络的结构单元除了上述的自编码模型之外,还可以使用自编码模型的一些变形,如降噪自编码模型和收缩自编码模型等。
降噪自编码模型避免了一般的自编码模型可能会学习得到无编码功能的恒等函数和需要样本的个数大于样本的维数的限制,尝试通过最小化降噪重构误差,从含随机噪声的数据中重构真实的原始输入。降噪自编码模型使用由少量样本组成的微批次样本执行随机梯度下降算法,这样可以充分利用图处理单元(graphical processing unit,GPU)的矩阵到矩阵快速运算使得算法能够更快地收敛。文献中说明降噪自编码模型与得分匹配方法直接相关。得分匹配是一种归纳原理,当所求解的问题易于处理时,可以用来代替极大似然求解过程。得分匹配的目标函数是模型得分和产生数据的真实概率密度的得分之间的平方差,其中模型得分是似然函数对输入的梯度∂logp(x)∂x\frac{\partial \log{p(x)}}{\partial x}∂x∂logp(x),而生成数据的概率密度是未知的。当把自编码模型的重构误差作为能量函数时,来自自编码模型的样例重构表示KaTeX parse error: Undefined control sequence: \Tilde at position 3: r(\̲T̲i̲l̲d̲e̲{x})通常从低概率(高能量)结构输入到附近的高概率(低能量)结构,因此重构和输入之间的差值KaTeX parse error: Undefined control sequence: \Tilde at position 3: r(\̲T̲i̲l̲d̲e̲{x}) - \Tilde{x…是概率即模型得分(model’s score)的一个最大增长方向;另一方面,取一个训练样本xxx并将其随机加入噪声后记为KaTeX parse error: Undefined control sequence: \Tilde at position 1: \̲T̲i̲l̲d̲e̲{x},通常得到一个较低概率的近邻,即向量KaTeX parse error: Undefined control sequence: \Tilde at position 5: x - \̲T̲i̲l̲d̲e̲{x}表示概率快速增长的方向。在重构损失函数选为平方误差的情况下,这两个差值KaTeX parse error: Undefined control sequence: \Tilde at position 3: r(\̲T̲i̲l̲d̲e̲{x}) - \Tilde{x…和KaTeX parse error: Undefined control sequence: \Tilde at position 5: x - \̲T̲i̲l̲d̲e̲{x}的平方差就是降噪重构误差KaTeX parse error: Undefined control sequence: \Tilde at position 4: {r(\̲T̲i̲l̲d̲e̲{x}) - x}^{2}。
收缩自编码模型的训练目标函数是重构误差和收缩罚项(contraction penalty)的总和,通过最小化该目标函数使已学习到的表示c(x)c(x)c(x)尽量对输入xxx保持不变。为了避免出现平凡解,编码器权值趋于零而解码器权值趋于无穷,并且收缩自编码模型采用固定的权值,令解码器权值为编码器权值的置换阵。与其他自编码模型相比,收缩自编码模型趋于找到尽量少的几个特征值,特征值的数量对应局部秩和局部维数。收缩自编码模型可以利用隐单元建立复杂非线性流形模型。
SAE(Stacked Autoencoder)和DBN(Deep Belief Network)都是深度学习中常见的模型,它们之间的主要区别在于结构和训练方式。在结构上:SAE是一种堆叠式的自编码器,由多层自编码器(通常是多层DNN)组成,每一层都可以用无监督学习方式预训练,然后使用监督学习进行微调。DBN是由多层Restricted Boltzmann Machines(RBM)组成的深度信念网络,它包含一个可视层和多个隐藏层,通常使用贪婪逐层训练的方式来训练。在训练方式上:SAE的训练方式通常是无监督逐层预训练,然后使用监督学习进行微调。这种逐层贪婪预训练的方式有助于解决深度神经网络训练过程中的梯度消失等问题。DBN使用贪婪逐层训练的方式,先训练每一层的RBM,然后通过反向传播算法进行整体的微调。
我们具体区分一下就是:自编码器的输入维度与输出维度相等,训练目的是使数据的特征得到最大的保留,去除冗余信息。简化来看就是输入层->隐藏层->输出层,自编码器的目的就是使重建(reconstruction)的输出层能尽量还原输入层,同时获得中间隐藏层即是降维的结果。若输入层到隐藏层间的部分称为编码器,记号为f(x)f(x)f(x),隐藏层到输出层之间的部分称为解码器,记号为g(x)g(x)g(x),那么自编码器的数学训练目标就是:x≈g(f(x))x \approx g(f(x))x≈g(f(x))。受限制玻尔兹曼机是一个双层结构,可见层(visible)与隐藏层(hidden),图结构为一个二分图,即可见层只与隐藏层之间有连接,但是层内是无连接的(即受限制的玻尔兹曼机),因此RBM的性质:当给定可见层神经元的状态时,各隐藏层神经元的激活条件独立;反之当给定隐藏层神经元的状态时,可见层神经元的激活也条件独立。受限制玻尔兹曼机的训练目的是为了最大程度的保留概率分布。就像RBM是由物理模型转化过来一样,训练方法与传统的反向传播(BP)也不一样,RBM最早的训练方法有Gibbs sampling,通过不断地来回采样来训练,然而这样的方法太慢,所以Hinton又提出了CD-k(contrastive divergence)算法,即只需要来回重复k次就可以完成一次迭代,这就像是两种不同温度的液体进行混合,如果两者的温度差距较大,在混合的过程中就会产生较大的梯度,而受限制玻尔兹曼机的训练目标就是使得两边的“温度”能够尽量的相近,而在数据中这个“温度”的体现就是数据分布。也就是说,使用RBM进行模型的初始化训练能够最大程度的保留数据分布,防止梯度爆炸和梯度消失问题的出现。由多层受限制玻尔兹曼机堆叠起来的网络叫作深度信念网络(DBN)。深度信念网络在最后一层接入一个Softmax层用作分类,训练的时候采取逐层训练+微调的方式。逐层训练就是从输入层开始将网络的相邻两层当作一个受限制玻尔兹曼机进行无监督训练,训练后将上一个RBM的隐藏层当作下一个RBM的可见层继续训练。逐层无监督训练完毕后,将进行反向传播训练对模型进行微调,从输入端输入数据,最后从输出端开始进行反向传播。自编码器虽然只是要保证输出端与输入端尽量接近,但是随着自编码器堆叠深度的加深,就会出现类似梯度扩散(Gradient diffusion)与梯度爆炸等问题,Hinton大神同样也使用了类似RBM的训练方法对深度自编码器进行逐层训练,使模型的得到了很好的初始化,加快了模型的解的最优性和收敛速度。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/DBN与SAE的区别.png}
\caption{DBN与SAE的区别}
\label{fig44}
\end{figure}
总的来说,SAE(Stacked Autoencoder)是一种无监督学习算法,用于特征学习和降维,而DBN(Deep Belief Network)是一种概率生成模型,也可以用于特征学习,但其结构更加复杂,包含多个层次的隐藏单元。它们都是深度学习的重要模型,在不同的场景下有着不同的优势和应用价值。
\subsection{深度学习的训练优化}
\subsubsection{参数初始化}
实验结果表明,对深度结构神经网络采用随机初始化的方法,基于梯度的优化使训练结果陷入局部极值,而找不到全局最优值,并且随着网络结构层次的加深,更难以得到好的泛化性能,使得深度结构神经网络在随机初始化后得到的学习结果甚至不如只有一个或两个隐层的浅结构神经网络得到的学习结果好。由于随机初始化深度结构神经网络的参数得到的训练结果和泛化性能都很不理想,在2006年以前,深度结构神经网络在机器学习领域文献中并没有进行过多讨论。
通过实验研究发现,用无监督学习算法对深度结构神经网络进行逐层预训练,能够得到较好的学习结果。最初的实验对每层采用RBM生成模型,后来的实验采用自编码模型来训练每一层,两种模型得到相似的实验结果。一些实验和研究结果证明了无监督预训练相比随机初始化具有很大的优势,无监督预训练不仅初始化网络得到好的初始参数值,而且可以提取关于输入分布的有用信息,有助于网络找到更好的全局最优解。对深度学习来说,无监督学习和半监督学习是成功的学习算法的关键组成部分,主要原因包括以下几个方面:
a)与半监督学习类似,深度学习中缺少有类标签的样本,并且样例大多无类标签。
b)逐层的无监督学习利用结构层上的可用信息进行学习,避免了监督学习梯度传播的问题,可减少对监督准则函数梯度给出的不可靠更新方向的依赖。
c)无监督学习使得监督学习的参数进入一个合适的预置区域内,在此区域内进行梯度下降能够得到很好的解。
d)在利用深度结构神经网络构造一个监督分类器时,无监督学习可看做学习先验信息,使得深度结构神经网络训练结果的参数在大多情况下都具有意义。
e)在深度结构神经网络的每一层采用无监督学习将一个问题分解成若干与多重表示水平提取有关的子问题,是一种常用的可行方法,可提取输入分布较高水平表示的重要特征信息。
基于上述思想,Hinton等人在2006年引入了DBN并给出了一种训练该网络的贪婪逐层预训练算法。贪婪逐层无监督预训练学习的基本思想为:首先采用无监督学习算法对深度结构神经网络的较低层进行训练,生成第一层深度结构神经网络的初始参数值;然后将第一层的输出作为另外一层的输入,同样采用无监督学习算法对该层参数进行初始化。在对多层进行初始化后,用监督学习算法对整个深度结构神经网络进行微调,得到的学习性能具有很大程度的提高。
以堆栈自编码网络(SAE)为例,深度结构神经网络的训练过程如下所示:
a)将第一层作为一个自编码模型,采用无监督训练,使原始输入的重建误差最小。
b)将自编码模型的隐单元输出作为另一层的输入。
c)按步骤b)迭代初始化每一层的参数。
d)采用最后一个隐层的输出作为输入施加于一个有监督的层(通常为输出层),并初始化该层的参数。
e)根据监督准则调整深度结构神经网络的所有参数,堆栈所有自编码模型组成堆栈自编码网络。
基本的无监督学习方法在2006年被Hinton等人提出用于训练深度结构神经网络,该方法的学习步骤如下:
a)令h0(x)=xh_{0}(x) = xh0(x)=x为可观察的原始输入xxx的最低阶表示。
b)对l=1,...,Ll = 1,...,Ll=1,...,L,训练无监督学习模型,将可观察数据看做l−1l-1l−1阶上表示的训练样例hl−1(x)h_{l-1}(x)hl−1(x),训练后产生下一阶的表示hl(x)=Rl(hl−1(x))h_{l}(x) = R_{l}(h_{l-1}(x))hl(x)=Rl(hl−1(x))。
随后出现了一些该算法的变形拓展,最常见的是有监督的微调方法,该方法的学习步骤如下所示:
a)初始化监督预测器。
(a)用参数表示函数hL(x)h_{L}(x)hL(x)。
(b)将hL(x)h_{L}(x)hL(x)作为输入得到线性或非线性预测器。
b)基于已标记训练样本对(x,y)(x,y)(x,y)采用监督训练准则微调监督预测器,在表示阶段和预测器阶段优化参数。
\subsubsection{模型结构}
a)和-积网络:深度学习最主要的困难是配分函数的学习,如何选择深度结构神经网络的结构使得配分函数更容易计算?Poon等人提出一种新的深度模型结构———和-积网络(sum-product network,SPN),引入多层隐单元表示配分函数,使得配分函数更容易计算。SPN是有根节点的有向无环图,图中的叶节点为变量,中间节点执行和运算与积运算,连接节点的边带有权值,它们在Caltech-101和Olivetii两个数据集上进行实验证明了SPN的性能优于DBN和最近邻方法。
b)基于rectified单元的学习:Glorot与Mesnil等人用降噪自编码模型来处理高维输入数据。与通常的S型和正切非线性隐单元相比,该自编码模型使用rectified单元,使隐单元产生更加稀疏的表示。在此之前,文献已经对随机rectified单元进行了介绍;对于高维稀疏数据,Dauphin等人采用抽样重构算法,训练过程只需要计算随机选择的很小的样本子集的重构和重构误差,在很大程度上提高了学习速度,实
验结果显示提速了20倍。Glorot等人提出在深度结构神经网络中,在图像分类和情感分类问题中用rectified非线性神经元代替双曲正切或S型神经元,指出rectified神经元网络在零点产生与双曲正切神经元网络相当或者有更好的性能,能够产生有真正零点的稀疏表示,非常适合本质稀疏数据的建模,在理解训练纯粹深度监督神经网络的困难,搞清使用或不使用无监督预训练学习的神经网络造成的性能差异方面,可以看做新的里程碑;Glorot等人还提出用增加L1正则化项来促进模型稀疏性,使用无穷大的激活函数防止算法运行过程中可能引起的数值问题。在此之前,Nair等人提出在RBM环境中rectified神经元产生的效果比逻辑斯蒂S型激活单元好,他们用无限数量的权值相同但是负偏差变大的一组单元替换二值单元,生成用于RBM的更好的一类隐单元,将RBM泛化,可以用噪声rectified线性单元有效近似这些S型单元。用这些单元组成的RBM在NORB数据集上进行目标识别以及在数据集上进行已标记人脸实际验证,得到比二值单元更好的性能,并且可以更好地解决大规模像素强度值变化很大的问题。
c)卷积神经网络:文献研究了用生成式子抽样单元组成的卷积神经网络,在MNIST数字识别任务和Caltech-101目标分类基准任务上进行实验,显示出非常好的学习性能。Huang等人提出一种新的卷积学习模型———局部卷积RBM,利用对象类中的总体结构学习特征,不假定图像具有平稳特征,在实际人脸数据集上进行实验,得到性能很好的实验结果。
\subsubsection{学习算法}
1)深度费希尔映射方法:Wong等人提出一种新的特征提取方法———正则化深度费希尔映射(regularized deep Fisher mapping,RDFM)方法,学习从样本空间到特征空间的显式映射,根据Fisher准则用深度结构神经网络提高特征的区分度。深度结构神经网络具有深度非局部学习结构,从更少的样本中学习变化很大的数据集中的特征,显示出比核方法更强的特征识别能力,同时RDFM方法的学习过程由于引入正则化因子,解决了学习能力过强带来的过拟合问题。在各种类型的数据集上进行实验,得到的结果说明了在深度学习微调阶段运用无监督正则化的必要性。
2)非线性变换方法:Raiko等人提出了一种非线性变换方法,该变换方法使得多层感知器(multilayer perceptron,MLP)网络的每个隐神经元的输出具有零输出和平均值上的零斜率,使学习MLP变得更容易。将学习整个输入输出映射函数的线性部分和非线性部分尽可能分开,用shortcut权值建立线性映射模型,令Fisher信息阵接近对角阵,使得标准梯度接近自然梯度。通过实验证明非线性变换方法的有效性,该变换使得基本随机梯度学习与当前的学习算法在速度上不相上下,并有助于找到泛化性能更好的分类器。用这种非线性变换方法实现的深度无监督自编码模型进行图像分类和学习图像的低维表示的实验,说明这些变换有助于学习深度至少达到五个隐层的深度结构神经网络,证明了变换的有效性,提高了基本随机梯度学习算法的速度,有助于找到泛化性更好的分类器。
3)稀疏编码对称机算法:Ranzato等人提出一种新的有效的无监督学习算法———稀疏编码对称机(sparse encoding symmetric machine,SESM),能够在无须归一化的情况下有效产生稀疏表示。SESM的损失函数是重构误差和稀疏罚函数的加权总和,基于该损失函数比较和选择不同的无监督学习机,提出一种与文献算法相关的迭代在线学习算法,并在理论和实验上将SESM与RBM和PCA进行比较,在手写体数字识别MNIST数据集和实际图像数据集上进行实验,表明该方法的优越性。
4)迁移学习算法:在许多常见学习场景中训练和测试数据集中的类标签不同,必须保证训练和测试数据集中的相似性进行迁移学习。Mesnil等人研究了用于无监督迁移学习场景中学习表示的不同种类模型结构,将多个不同结构的层堆栈使用无监督学习算法用于五个学习任务,并研究了用于少量已标记训练样本的简单线性分类器堆栈深度结构学习算法。Bengio研究了无监督迁移学习问题,讨论了无监督预训练有用的原因,如何在迁移学习场景中利用无监督预训练,以及在什么情况下需要注意从不同数据分布得到的样例上的预测问题。
5)自然语言解析算法:Collobert基于深度递归卷积图变换网络(graph transformer network,GTN)提出一种快速可扩展的判别算法用于自然语言解析,将文法解析树分解到堆栈层中,只用极少的基本文本特征,得到的性能与现有的判别解析器和标准解析器的性能相似,而在速度上有了很大提升。
6)学习率自适应方法:学习率自适应方法可用于提高深度结构神经网络训练的收敛性并且去除超参数中的学习率参数,其中包括全局学习率、层次学习率、神经元学习率和参数学习率等。研究人员提出了一些新的学习率自适应方法,如Duchi等人提出的自适应梯度方法和Schaul等人提出的学习率自适应方法;Hinton提出了收缩学习率方法使得平均权值更新在权值大小的1/1000数量级上;LeRoux等人提出自然梯度的对角低秩在线近似方法,并说明该算法在一些学习场景中能加速训练过程。
\subsection{深度学习的典型应用}
深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展,尤其在图像识别和计算机视觉、自然语言处理(NLP)、语音识别和语音助手和推荐系统等领域取得了突破性的进展。随着算法和模型的改进、计算能力的提升以及数据量的增长,深度学习的应用范围不断扩大,对各行各业产生了深远的影响。
\subsubsection{图像识别和计算机视觉}
深度学习的出现使得图像识别和计算机视觉任务的性能得到了显着提高。在庞大的数据集上训练深度神经网络,计算机现在可以可靠地分类和理解图像,从而开辟了广泛的应用。智能手机应用程序可以从照片中快速确定狗的品种,以及采用计算机视觉算法检测行人、交通标志和其他路障以实现安全导航的自动驾驶汽车,是实践中的两个例子。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的图像识别和计算机视觉.png}
\caption{深度学习下的图像识别和计算机视觉}
\label{fig45}
\end{figure}
a)用于图像分类的深度学习模型:对照片进行分类的过程需要根据图像的内容给它们贴上标签。卷积神经网络(CNN)是一种深度学习模型,在这方面表现得非常好。他们可以通过学习识别视觉表示中的模式和特征来对图像中的对象、情况甚至特定属性进行分类。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/用于图像分类的深度学习模型.png}
\caption{用于图像分类的深度学习模型}
\label{fig46}
\end{figure}
b)使用深度学习进行对象检测和定位:对象检测和定位超越了图像分类,通过识别和定位图像中的各种事物。深度学习方法可以实时识别和定位对象,例如You Only Look Once(YOLO)和基于区域的卷积神经网络(R-CNNs)。这在机器人、自动驾驶汽车和监控系统等领域都有使用。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的对象检测和定位.png}
\caption{深度学习下的对象检测和定位}
\label{fig47}
\end{figure}
c)面部识别和生物识别中的应用:深度学习彻底改变了面部识别领域。因此,允许使用他们的面部特征精确识别人。安全系统、访问控制、监控和执法使用面部识别技术。深度学习方法也已应用于生物识别技术,以实现语音识别、虹膜扫描和指纹识别等功能。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的面部识别和生物识别.png}
\caption{深度学习下的面部识别和生物识别}
\label{fig48}
\end{figure}
\subsubsection{自然语言处理(NLP)}
自然语言处理(NLP)旨在使计算机能够理解,翻译和创建人类语言。NLP主要在深度学习方面取得了长足的进步,在几个与语言相关的活动中取得很大进步。像苹果的Siri和亚马逊的Alexa这样的虚拟语音助手,可以理解口头命令和问题,就是一个实用的例子。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/自然语言处理(NLP).png}
\caption{自然语言处理(NLP)}
\label{fig49}
\end{figure}
a)用于文本分类和情感分析的深度学习:文本分类需要将文本材料分为几组或几个部门。循环神经网络(RNN)和长短期记忆(LSTM)网络等深度学习模型经常用于文本分类任务。为了确定文本中表达的情绪或意见,无论是好的、消极的还是中立的,情绪分析是文本分类的广泛使用。
b)用深度学习进行语言翻译和生成:由于深度学习,机器翻译系统有了很大的改进。基于深度学习的神经机器翻译(NMT)模型已被证明在跨多种语言转换文本时表现更好。这些算法可以收集上下文数据并生成更精确和流畅的翻译。深度学习模型也已应用于创建新闻报道、诗歌和其他类型的文本,包括连贯的段落。
c)使用深度学习的问答和聊天机器人系统:聊天机器人和问答程序使用深度学习来识别和回复人类查询。转换器和注意力机制以及其他深度学习模型在理解问题的上下文和语义以及产生相关答案方面取得了巨大进展。信息检索系统、虚拟助手和客户服务都使用这项技术。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的问答和聊天机器人系统.png}
\caption{深度学习下的问答和聊天机器人系统}
\label{fig50}
\end{figure}
\subsubsection{语音识别和语音助手}
能够理解和响应人类语音的语音助手的创建以及语音识别系统的进步都大大受益于深度学习。一个真实的例子是使用智能手机的语音识别功能来口述消息,而不是输入它们并要求智能扬声器播放您喜欢的音乐或提供天气预报。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的语音识别和语音助手.png}
\caption{深度学习下的语音识别和语音助手}
\label{fig51}
\end{figure}
a)用于自动语音识别的深度学习模型:自动语音识别(ASR)系统将口语翻译成书面文本。特别是递归神经网络和基于注意力的模型,大大提高了ASR的准确性。结果是,为有语言障碍的人提供更好的语音命令、转录服务和辅助工具。一些例子是搜索引擎中的语音搜索功能,如谷歌、必应等。
b)由深度学习算法提供支持的语音助手:每天,我们严重依赖Siri,Google,Assistant和Amazon Alexa等语音助手。猜猜是什么驱使他们?是深度学习。这些智能设备使用深度学习技术来识别和执行语音请求。该技术还使语音助手能够识别语音,破译用户意图,并通过深度学习模型提供精确和相关的响应。
c)转录和语音控制系统中的应用:基于深度学习的语音识别在转录服务中具有应用,其中必须将大量音频内容准确转换为文本。语音控制系统,如智能家居和车载信息娱乐系统,利用深度学习算法,通过语音命令实现免提控制和交互。
\subsubsection{推荐系统}
推荐系统使用深度学习算法,根据人们的品味和行为为他们提供个性化的推荐。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/深度学习下的推荐系统.png}
\caption{深度学习下的推荐系统}
\label{fig52}
\end{figure}
a)基于深度学习的协同过滤:推荐系统中根据用户与其他用户的相似程度向用户推荐产品/服务的标准方法是协同过滤。协同过滤提高了准确性和性能,这要归功于矩阵分解和深度自动编码器等深度学习模型,这些模型产生了更精确和个性化的建议。
b)使用深度神经网络的个性化推荐:深度神经网络已被用于识别用户行为数据中复杂的链接和模式,从而提供更精确和个性化的建议。深度学习算法可以通过查看用户交互、购买历史和人口统计数据来预测用户偏好并提出相关的产品、电影或内容推荐。这方面的一个例子是流媒体服务根据您的兴趣和历史推荐电影或电视节目。
c)电子商务和内容流平台中的应用:深度学习算法被广泛用于推动电子商务平台和Netflix和Spotify等视频流服务的推荐系统。这些程序通过帮助用户找到适合其口味和偏好的新商品、娱乐或音乐来提高用户的乐趣和参与度。
\subsubsection{其他领域}
生活中的各个领域均有深度学习的身影。
a)自动驾驶汽车:深度学习极大地影响了自动驾驶汽车理解和导航周围环境的能力。这些车辆可以使用强大的深度学习算法实时分析大量传感器数据。因此,使他们能够做出明智的决定,在具有挑战性的路线上导航,并保证乘客和行人的安全。这项改变游戏规则的技术为无人驾驶汽车将彻底改变我们的出行方式铺平了道路。
b)医疗保健和医学成像:深度学习通过协助诊断、疾病检测和患者护理,在彻底改变医疗保健和医学成像方面显示出巨大的潜力。使用人工智能驱动的算法彻底改变诊断,可以从医学成像中精确识别早期肿瘤,就是如何做到这一点的一个例子。这将有助于及时做出治疗决策并改善患者的预后。
c)欺诈检测和网络安全:深度学习在检测异常、识别欺诈模式和加强网络安全系统方面变得至关重要。当在大型数据集中发现异常或异常值时,这些系统会大放异彩。通过从典型模式中学习,深度学习模型可以识别意外行为、网络入侵和欺诈操作。这些方法用于网络监控、网络安全系统和金融交易。摩根大通银行(JP Morgan Chase)、PayPal和其他企业只是使用这些技术的少数几家。
d)游戏和虚拟现实:深度学习显著改善了游戏 AI、角色动画和沉浸式环境,使游戏行业和虚拟现实体验受益。例如,虚拟现实游戏可以使用深度学习算法根据玩家的实时动作和反应调整和自定义其游戏体验。
在人工智能中,深度学习已经成为一项强大的技术,可以让机器人学习并做出明智的决策。人工智能中的深度学习有很多用途,从图像识别和NLP到网络安全和医疗保健。它大大提高了人工智能系统的能力,导致各个领域的创新以及整个行业的颠覆。深度学习在AI中的常见应用,埃森哲在其AI计划中利用深度学习来增强数据分析、客户体验和运营效率。
经过近几十年来大量研究人员对人工神经网络的理论和实验研究,深度学习领域的研究取得了一定进展,实验结果表明了其良好的学习性能。但是目前深度学习领域的研究仍然存在许多有待进一步解决的问题,未来深度学习的研究在理论分析、数据表示与模型、特征提取、训练与优化求解以及研究拓展等方面需要进一步研究。
\section{\textbf{\large 大模型综述}}
\subsection{数据———大模型的力量泉源}
归根结底,大模型的神奇能力是来源于GPT么?我觉得答案是否定的,GPT家族几乎每一次能力的跃迁,都在预训练数据的数量、质量、多样性等方面做出了重要的提升。大模型的训练数据包括书籍、文章、网站信息、代码信息等等,这些数据输入到大模型中的目的,实质在于全面准确的反应“人类”这个东西,通过告诉大模型单词、语法、句法和语义的信息,让模型获得识别上下文并生成连贯响应的能力,以捕捉人类的知识、语言、文化等等方面。
一般而言,面对许多NLP的任务,我们可以从数据标注信息的角度将其分类为零样本、少样本与多样本,如图53。无疑,零样本的任务LLMs是最合适的方法,几乎没有例外,大模型在零样本任务上遥遥领先于其他的模型。同时,少样本任务也十分适合大模型的应用,通过为大模型展示“问题-答案”对,可以增强大模型的表现性能,这种方式我们一般也称为上下文学习(In-Context Learning)。而多样本任务尽管大模型也可以去覆盖,但是微调可能仍然是最好的方法,当然在一些如隐私、计算等约束条件下,大模型可能仍然有用武之地。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/零样本、少样本与多样本的数据影响.png}
\caption{零样本、少样本与多样本的数据影响}
\label{fig53}
\end{figure}
同时,微调的模型很有可能会面对训练数据与测试数据分布变化的问题,显著的,微调的模型在OOD数据上一般表现都非常差。而相应的,LLMs由于并没有一个显式的拟合过程,因此表现要好许多,典型的ChatGPT基于人类反馈的强化学习(RLHF)在大部分分布外的分类与翻译任务中都表现优异,在专为OOD评估设计的医学诊断数据集DDXPlus上也表现出色。
据OpenAI披露,此前GPT-3.5的文本数据多达45TB,相当于472万套中国四大名著,而GPT-4在之前训练数据集的基础上又增加了多模态数据。预训练数据的数量、质量、多样性成为大模型能力表现的关键性因素,数据对于人工智能领域的重要性值得我们重新审视。
AI大模型是指在机器学习和自然语言处理等领域中,使用的庞大的神经网络模型。这些模型通常具有数以亿计的参数,并通过大规模数据集进行训练,最终更好地理解和处理复杂的任务,如图像识别、自然语言理解、语言生成等。近年来,由于计算能力的提升、大规模数据集的可用性以及算法的改进,AI大模型进入爆发增长期。算力、算法、数据,是大模型发展的关键。在训练的阶段,算力越大,可做出的模型就越大,更新迭代的速度就越快。庞大的数据库,是人工智能得以处理、分析的基础。算力可以推进大模型的迅速发展,但数据却是推动大模型高质量发展的关键。大模型在今天展现出强大的能力,得益于背后的海量数据、蕴含了丰富的“人类”知识和智能。
a)数据“质量”的重要性:在2023年世界人工智能大会期间,大模型“幻觉”这一词被高频提起。大模型“幻觉”指模型生成不正确、无意义或不真实的文本的现象。造成这一现象的主要原因是大模型缺乏数据支撑,因为其核心技术原理是通过Transformer架构下的Next Token Prediction,即“下一个字符的预测”。因此,提高数据的质量和多样性对于大模型的性能至关重要。丰富的数据集可以帮助模型更好地理解和捕捉不同的概念、语义和语法结构。多样化的数据也可以使模型在各种任务和领域中表现出更好的泛化能力,从而演绎出正确的、有意义的文本。
b)数据“数量”的重要性:过拟合是指模型在训练数据上表现良好,但在未见过的数据上表现不佳。通常发生在模型的复杂度过高、训练数据有限或不平衡的情况下。这时,数据数量的重要性就体现出来了。通过使用大量的数据进行训练,可以减少过拟合的风险,使模型更好地适应各种陌生的输入,并在不同的情况下保持稳定的性能。例如机器学习模型必须分析照片并识别其中包含狗的照片。如果机器学习模型在数据集上进行训练,该数据集主要包含显示室外公园内狗的照片,则该模型可能学习使用草作为分类特征,并且可能无法识别室内的狗。
c)数据“多样性”的重要性:数据的多样性也是影响模型表现的重要因素之一。大模型的目标是能够适应各种不同的输入,并对未见过的数据进行准确的预测。通过使用大量的训练数据,模型可以学习更广泛的上下文和语言规律,从而提高其泛化能力。从而提高模型预测的准确性,防止过拟合,适应新数据,节约资源和时间,使机器学习模型更具有实用性和可靠性。数据在质量上的提高,才能够推动整个数据值智能的飞跃,而非是单纯数量的增加。举个例子,如果是简单的同类型数据反馈,单条数据反馈和十条同类型数据反馈,虽然在数据的数量上增加了10倍,但模型的智能并没有得到拓展和增加。
数据对于大模型的重要性,除以上提到的观点外,还可以用于模型的调试和改进。通过分析数据集中的样本,可以发现数据中的噪声、错误或偏差,并采取相应的措施来纠正这些问题。此外,可以使用数据来评估模型的性能,并根据反馈进行改进和优化。
“以数据为中心”,成为越来越多业内人士的共识,要推动大模型常态化、高质量发展,就要追求数量多、高质量、多样化的数据来源,实现人工智能技术的突破。在当前算力和算法难以拉开巨大差距的情况下,“数据”成为大模型企业突围的关键赛点。如何在维持数据安全和伦理的情况下,突破数据壁垒、得到更多高质量的数据成为大模型企业重要的课题。
\subsection{大语言模型(Large Language Models,LLM)}
\textbf{\textit{A\mathfrak{A}A.LLM概述与历史}}
大语言模型是一种基于神经网络的自然语言处理技术,可以学习和预测自然语言文本的规律和模式。简单来说,大语言模型就是一个能够理解和生成自然语言的AI程序。在大语言模型中,神经网络模型可以通过学习大量的语料数据,来自动地提取自然语言文本中的特征和模式,从而实现自然语言的理解和生成。具体来说,大语言模型的基本思想是将自然语言文本看作是一种序列数据,例如单词序列或字符序列。神经网络模型可以通过输入这些序列数据,并通过多层神经元的计算和转换,来生成对应的输出序列。在大语言模型中,神经网络模型通常采用循环神经网络(RNN)、长短时记忆网络(LSTM)、门控循环单元(GRU)等结构,来处理序列数据的信息。
机器学习是人工智能(AI)的一个子领域,它的核心是让计算机系统能够通过对数据的学习来提高性能。在机器学习中,我们不是直接编程告诉计算机如何完成任务,而是提供大量的数据,让机器通过数据找出隐藏的模式或规律,然后用这些规律来预测新的、未知的数据。深度学习是机器学习的一个子领域,它尝试模拟人脑的工作方式,创建所谓的人工神经网络来处理数据。这些神经网络包含多个处理层,因此被称为“深度”学习。深度学习模型能够学习和表示大量复杂的模式,这使它们在诸如图像识别、语音识别和自然语言处理等任务中非常有效。大语言模型是深度学习的应用之一,尤其在自然语言处理(NLP)领域。这些模型的目标是理解和生成人类语言。为了实现这个目标,模型需要在大量文本数据上进行训练,以学习语言的各种模式和结构。如ChatGPT,就是一个大语言模型的例子。被训练来理解和生成人类语言,以便进行有效的对话和解答各种问题。见图54。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/大语言模型是深度学习的分支.png}
\caption{大语言模型是深度学习的分支}
\label{fig54}
\end{figure}
与传统的自然语言处理技术相比,大语言模型具有以下几个特点:
a)数据驱动:大语言模型需要大量的语料数据来进行训练和优化,从而学习自然语言的规律和模式。
b)端到端学习:大语言模型可以直接从原始文本数据中学习,不需要进行人工特征工程或规则设计。
c)上下文感知:大语言模型可以根据上下文信息来生成自然语言文本,从而实现更加准确和连贯的响应。
d)通用性:大语言模型可以应用于多种自然语言处理任务,例如文本分类、机器翻译、聊天机器人等。
大语言模型的发展可以追溯到上世纪80年代,当时科学家们开始尝试使用神经网络来处理自然语言。但由于当时计算机硬件和数据资源的限制,这些神经网络模型往往只能处理非常简单的自然语言任务。随着计算机硬件和数据资源的不断提升,神经网络模型在自然语言处理领域的应用也得到了快速发展。在2010年左右,科学家们开始尝试使用深度神经网络来进行自然语言处理,例如使用卷积神经网络进行文本分类等任务。在2013年,Tomas Mikolov等人提出了一种基于循环神经网络(RNN)的语言模型,称为RNNLM。这种模型可以根据前面的单词来预测下一个单词,从而实现对文本的生成和预测。RNNLM不仅可以生成自然语言文本,还可以用于机器翻译、语音识别等任务。在2014年,Bengio等人提出了一种基于长短时记忆网络(LSTM)的语言模型,称为LSTMLM。这种模型可以解决RNNLM中存在的梯度消失和梯度爆炸等问题,并且可以在更长的上下文中进行预测和生成。在2018年,OpenAI推出了第一代GPT模型,其参数量达到了1.17亿个。这个模型在各种自然语言处理任务中都取得了非常好的效果,例如文本分类、语言模型等。而在2019年,OpenAI推出了更加强大的第二代GPT模型,其参数量达到了15亿个。这个模型在生成自然语言文本方面表现出了更加出色的性能,例如可以生成更长、更连贯的文本。
在过去的几年里,大型语言模型(LLM)如GPT(生成式预训练转换器)和BERT(双向编码器表示器)等引起了巨大轰动。它们代表了自然语言处理领域的一项重大技术进步,重新定义了语言理解和生成的范式。
a)从RNN到Transformer:一个技术进步的故事。循环神经网络(RNN)曾经是自然语言处理领域的主流,但它们面临着长距离依赖和梯度消失等问题,限制了其在处理长文本序列时的表现。随后,Transformer模型的出现改变了这一局面。Transformer模型使用了自注意力机制来处理输入序列,有效地捕捉了长距离依赖关系,并且可以高效并行地进行计算,大大加速了训练过程。
b)GPT、BERT等:标志性LLM的诞生。以GPT和BERT为代表的大型语言模型利用了Transformer架构的优势,并通过大规模的预训练来学习语言的表示。GPT采用了自回归的预训练目标,在生成式任务上表现出色;而BERT则采用了双向编码器的预训练目标,在各种下游任务上取得了显著的性能提升。这些模型的诞生标志着大型语言模型在自然语言处理领域的崭新时代的来临。
c)LLM的关键技术突破。大型语言模型的兴起离不开多方面的技术突破。首先是模型架构的创新,Transformer架构的引入使得模型能够更好地捕获文本中的长距离依赖关系。其次是大规模的预训练技术,通过在大规模文本数据上进行预训练,使得模型可以学习到更加通用的语言表示。此外,优化算法、计算硬件等方面的进步也为大型语言模型的训练提供了重要支持。
在大语言模型的历史进程中,有许多里程碑事件:
· 1986年,Rumelhart等人提出了一种基于神经网络的语言模型,称为“RNN语言模型”。
· 2000年,Bengio等人提出了一种基于神经网络的语言模型,称为“神经网络语言模型”。
· 2003年,Mikolov等人提出了一种基于N-gram的语言模型,称为“N-gram语言模型”。
· 2010年,Collobert等人提出了一种基于卷积神经网络的语言模型,称为“卷积神经网络语言模型”。
· 2011年,Mikolov等人提出了一种基于神经网络的语言模型,称为“CBOW模型”。
· 2013年,Mikolov等人提出了一种基于神经网络的语言模型,称为“Skip-gram模型”。
· 2014年,Google推出了一种基于神经网络的语言模型,称为“Word2Vec”。
· 2017年,OpenAI推出了一种基于神经网络的语言模型,称为“GPT模型”。
· 2018年,Google推出了一种基于神经网络的语言模型,称为“BERT模型”。
· 2019年,OpenAI推出了一种基于神经网络的语言模型,称为“GPT-2模型”。
· 2020年,OpenAI推出了一种基于神经网络的语言模型,称为“GPT-3模型”。
这些技术突破共同推动了大型语言模型的发展,并为自然语言处理领域带来了前所未有的机会和挑战。
LLM已经在许多领域产生了深渊的影响。在自然语言处理领域,它可以帮助计算机更好地理解和生成文本,包括写文章、回答问题、翻译语言。在信息检索领域,它可以改进搜索引擎,让我们更轻松地找到所需的信息。在计算机视觉领域,研究人员还在努力让计算机理解图像和文字,以改善多媒体交互。最重要的是,LLM的出现让人们重新思考了通用人工智能(AGI)的可能性。AGI是一种像人类一样思考和学习的人工智能。LLM被认为是AGI的一种早起形式,这引发了对未来人工智能发展的许多思考和计划。总之,LLM是一种令人兴奋的技术,它让计算机更好地理解和使用语言,正在改变着我们与技术互动的方式,同时也引发了对未来人工智能的无限探索。
LLM的发展历程虽然只有短短不到五年的时间,但是发展速度相当惊人,截至现在,国内外有超过百种大模型相继发布。按照时间线给出了2019年至2023年6月比较有影响力并且模型数量超过100亿的大语言模型,如图55所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LLM模型汇总.png}
\caption{LLM模型汇总}
\label{fig55}
\end{figure}
接下来主要介绍一下LLM的模型基础Transformer、当今流行的GPT和Bert大模型。
\textbf{\textit{B\mathfrak{B}B.Transformer}}
Transformer是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence)任务的深度学习模型架构,它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制(self-attention mechanism),这是一个关键的创新,使其在处理序列数据时表现出色。
Transformer的一些重要组成部分和特点有:
a)自注意力机制(Self-Attention):这是Transformer的核心概念之一,它使模型能够同时考虑输入序列中的所有位置,而不是像循环神经网络(RNN)或卷积神经网络(CNN)一样逐步处理。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。
b)多头注意力(Multi-Head Attention):Transformer中的自注意力机制被扩展为多个注意力头,每个头可以学习不同的注意权重,以更好地捕捉不同类型的关系。多头注意力允许模型并行处理不同的信息子空间。
c)堆叠层(Stacked Layers):Transformer通常由多个相同的编码器和解码器层堆叠而成。这些堆叠的层有助于模型学习复杂的特征表示和语义。
d)位置编码(Positional Encoding):由于Transformer没有内置的序列位置信息,它需要额外的位置编码来表达输入序列中单词的位置顺序。
e)残差连接和层归一化(Residual Connections and Layer Normalization):这些技术有助于减轻训练过程中的梯度消失和爆炸问题,使模型更容易训练。
f)编码器和解码器:Transformer通常包括一个编码器用于处理输入序列和一个解码器用于生成输出序列,这使其适用于序列到序列的任务,如机器翻译。
在正式介绍Transformer之前,我们先了解一下Encoder-Decoder和Attention。
Encoder-Decoder框架顾名思义也就是编码-解码框架,目前大部分Attention模型都是依附于Encoder-Decoder框架进行实现,在NLP中Encoder-Decoder框架主要被用来处理序列-序列问题。也就是输入一个序列,生成一个序列的问题。这两个序列可以分别是任意长度。具体到NLP中的任务比如:
· 文本摘要:输入一篇文章(序列数据),生成文章的摘要(序列数据)。
· 文本翻译:输入一句或一篇英文(序列数据),生成翻译后的中文(序列数据)。
· 问答系统:输入一个question(序列数据),生成一个answer(序列数据)。
基于Encoder-Decoder框架具体使用什么模型实现,用的较多的应该就是seq2seq模型和Transformer。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Encoder-Decoder结构图.png}
\caption{Encoder-Decoder结构图}
\label{fig56}
\end{figure}
图56就是Encoder-Decoder框架在NLP领域中抽象后的最简单的结构图。Encoder作为编码器,对于输入的序列<x1,x2,x3...xn><x_{1},x_{2},x_{3}...x_{n}><x1,x2,x3...xn>进行编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3...xn><x_{1},x_{2},x_{3}...x_{n}><x1,x2,x3...xn>的信息。Encoder的编码方式有很多种,在文本处理领域主要有RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU,根据具体情况选择编码方式。我们以RNN为例来具体说明一下:以图56为例,输入<x1,x2,x3,x4><x_{1},x_{2},x_{3},x_{4}><x1,x2,x3,x4>,通过RNN生成隐藏层的状态值<h1,h2,h3,h4><h_{1},h_{2},h_{3},h_{4}><h1,h2,h3,h4>,如何确定语义编码C呢?最简单的办法直接用最后时刻输出的hth_{t}ht作为C的状态值,这里也就是可以用h4h_{4}h4直接作为语义编码C的值,也可以将所有时刻的隐藏层的值进行汇总,然后生成语义编码C的值,这里就是C=q(h1,h2,h3,h4)C=q(h1,h2,h3,h4)C=q(h1,h2,h3,h4),qqq是非线性激活函数。得到了语义编码C之后,接下来就是要在Decoder中对语义编码C进行解码了。
Decoder作为解码器,根据输入的语义编码C,然后将其解码成序列数据,解码方式也可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。Decoder和Encoder的编码解码方式可以任意组合,并不是说Encoder使用了RNN,Decoder就一定也需要使用RNN才能解码,Decoder可以使用LSTM,BiRNN这些。Decoder基于seq2seq模型有两种解码方式:a)语义编码C包含了整个输入序列的信息,所以在解码的每一步都引入C。见图57,Ecoder-Decoder均是使用RNN,在计算每一时刻的输出yTy_{T}yT时,都应该输入语义编码C,即hT=f(hT−1,yT−1,C)h_{T}=f(h_{T-1},y_{T-1},C)hT=f(hT−1,yT−1,C),p(yT)=f(hT,yT−1,C)p(y_{T})=f(h_{T},y_{T−1},C)p(yT)=f(hT,yT−1,C)。hTh_{T}hT为当前T时刻的隐藏层的值,yT−1y_{T-1}yT−1为上一时刻的预测输出,作为T时刻的输入,每一时刻的语义编码C是相同地。b)如图58,在Decoder的初始输入引入语义编码C,将语义编码C作为隐藏层状态值h0h_{0}h0的初始值,p(yT)=f(hT,yT−1)p(y_{T})=f(h_{T},y_{T−1})p(yT)=f(hT,yT−1)。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Decoder解码方式a.png}
\caption{Decoder解码方式a}
\label{fig57}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Decoder解码方式b.png}
\caption{Decoder解码方式b}
\label{fig58}
\end{figure}
至于Decoder到底使用哪一种呢,答案是两种都不建议使用。普通的Encoder-Decoder结构还是存在很多问题:
a)如果按照方式a解码,每一时刻的输出为y1=f(C);y2=f(C,y1);y3=f(C,y1,y2)y_{1} = f(C);y_{2} = f(C,y_{1});y_{3} = f(C,y_{1},y_{2})y1=f(C);y2=f(C,y1);y3=f(C,y1,y2),从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,是y1y_{1}y1,y2y_{2}y2也好,还是y3y_{3}y3也好,他们使用的语义编码C都是一样的,没有任何区别。而语义编码C是由输入序列X的每个单词经过Encoder编码产生的,这意味着不论是生成哪个单词,y1y_{1}y1,y2y_{2}y2还是y3y_{3}y3,其实输入序列X中任意单词对生成某个目标单词yiy_{i}yi来说影响力都是相同的,没有任何区别(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的,估计这也是为何Google提出Sequence to Sequence模型时发现把输入句子逆序输入做翻译效果会更好的小Trick的原因)
b)将整个序列的信息压缩在了一个语义编码C中,用一个语义编码C来记录整个序列的信息,序列较短还行,如果序列是长序列,比如是一篇上万字的文章,我们要生成摘要,那么只是用一个语义编码C来表示整个序列的信息肯定会损失很多信息,而且序列一长,就可能出现梯度消失问题,这样将所有信息压缩在一个C里面显然就不合理。
既然一个C不行,那就用多个C,这个时候基于Encoder-Decoder的attention model就出现了。
注意力机制(Attention Mechanism)是一种模仿人类注意力机制的计算模型,用于在机器学习中处理序列数据和提高模型性能。在深度学习中,注意力机制可以帮助模型专注于输入数据中最重要的部分,而不是平等对待整个输入序列。简而言之,注意力机制允许模型在处理输入序列时动态地分配不同位置的重要性权重,以便更好地捕捉关键信息。这有助于改善神经网络模型对长序列数据的处理能力,并提高其性能和泛化能力。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Attention结构图.png}
\caption{Attention结构图}
\label{fig59}
\end{figure}
图59就是引入了Attention机制的Encoder-Decoder框架。改进之后的模型不再只有一个单一的语义编码C,而是有多个C1C_{1}C1,C2C_{2}C2,C3C_{3}C3这样的编码。当我们在预测Y1Y_{1}Y1时,可能Y1Y_{1}Y1的注意力是放在C1C_{1}C1上,那我们就用C1C_{1}C1作为语义编码,当预测Y2Y_{2}Y2时,Y2Y_{2}Y2的注意力集中在C2C_{2}C2上,那我们就用C2C_{2}C2作为语义编码,以此类推,就模拟了人类的注意力机制。
那么现在剩下的问题就是怎么计算C1C_{1}C1,C2C_{2}C2,C3C_{3}C3…CnC_{n}Cn,如何判断每次在做解码的时候注意力应该放在哪个位置。
以机器翻译例子"Tom chase Jerry" - "汤姆追逐杰瑞"来说明:当我们在翻译"杰瑞"的时候,为了体现出输入序列中英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:(Tom,0.3)(Chase,0.2)(Jerry,0.5)每个英文单词的概率代表了翻译当前单词“杰瑞”时,注意力分配模型分配给不同英文单词的注意力大小。这对于正确翻译目标语单词肯定是有帮助的,因为引入了新的信息。同理,目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词YiY_{i}Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的CiC_{i}Ci。理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的CiC_{i}Ci。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Attention下的ED模型结构图.png}
\caption{Attention下的ED模型结构图}
\label{fig60}
\end{figure}
以普通的RNN-RNN Encoder-Decoder结构为例,注意图60中Decoder初始输入用初始符,这里使用eos作为初始符。将输入eos与初始S0S_{0}S0通过RNN生成h(eos)h(eos)h(eos),然后分别计算h(eos)h(eos)h(eos)与h1,h2,h3...hmh_{1},h_{2},h_{3}...h_{m}h1,h2,h3...hm的相关性。得到h(eos)h(eos)h(eos)与h1,h2,h3...hmh_{1},h_{2},h_{3}...h_{m}h1,h2,h3...hm的相关性评分[f1,f2,f3...fm][f_{1},f_{2},f_{3}...f_{m}][f1,f2,f3...fm],然后跟多分类一样使用softmax,就能得到相关性的概率分布α(eos)\alpha (eos)α(eos),如图61。推广到预测Decoder的每一个输出值YiY_{i}Yi:Decoder上一时刻的输出值Yi−1Y_{i-1}Yi−1与上一时刻传入的隐藏层的值Si−1S_{i-1}Si−1通过RNN生成HiH_{i}Hi,然后计算HiH_{i}Hi与h1,h2,h3...hmh_{1},h_{2},h_{3}...h_{m}h1,h2,h3...hm的相关性,得到相关性评分[f1,f2,f3...fm][f_{1},f_{2},f_{3}...f_{m}][f1,f2,f3...fm],然后对FiF_{i}Fi进行softmax就得到注意力分配αij{\alpha}_{ij}αij。然后将Encoder的输出值hhh与对应的概率分布αij{\alpha}_{ij}αij进行点乘求和,就能得到注意力attention值了。注意一下,这里我们使用的是Soft Attention是所有的数据都会注意,都会计算出相应的注意力权值,不会设置筛选条件。还有一种Hard Attention会在生成注意力权重后筛选掉一部分不符合条件的注意力,让它的注意力权值为0,即可以理解为不再注意这些不符合条件的部分。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Attention模型权值计算png.png}
\caption{Attention模型权值计算}
\label{fig61}
\end{figure}
上面基于Encoder-Decoder框架来介绍Attention,Attention机制并不是一定要基于Encoder-Decoder框架,那么他的本质思想以及在上面遗留下来的HiH_{i}Hi与h1,h2,h3...hmh_{1},h_{2},h_{3}...h_{m}h1,h2,h3...hm的相关性到底应该怎么算,可以根据图62进行理解。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Attention原理图.png}
\caption{Attention原理图}
\label{fig62}
\end{figure}
参照图62可以这么来理解Attention,将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成(对应到上面的例子,key和value是相等的,都是Encoder的输出值h),此时给定Target中的某个元素Query(对应到上面的例子也就是Decoder中的hi),通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:Attention(Query,Source)=∑i=1LxSimilarity(Query,Keyi)∗ValueiAttention(Query,Source)= \sum_{i=1}^{L_{x}}Similarity(Query,{Key}_{i})*{Value}_{i}Attention(Query,Source)=∑i=1LxSimilarity(Query,Keyi)∗Valuei。LxL_{x}Lx表示Source的长度,Similarity(Query,Keyi)Similarity(Query,{Key}_{i})Similarity(Query,Keyi)利用点积、Cosine相似性-余弦相似度或者MLP多层感知机进行计算。MLP多层感知机使用较少,点积就是将QueryQueryQuery和Keyi{Key}_{i}Keyi进行点积,Transformer中使用的就是点积。Cosine相似性-余弦相似度中分子就是两个向量QueryQueryQuery与KeyKeyKey的点积,分母就是两个向量的L2范数(L2范数:指向量各元素的平方和然后求平方根)。计算出QueryQueryQuery与KeyiKey_{i}Keyi的相似性后,第二阶段引入类似SoftMax的计算方式对第一阶段的相似性得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。第二阶段的计算结果即为Valuei{Value}_{i}Valuei对应的权重系数,然后进行加权求和即可得到Attention数值。
通过如上三个阶段的计算,即可求出针对Query的Attention数值,目前绝大多数的注意力机制计算方法都符合上述的三阶段计算过程。最后根据图63对上述计算Attention值的三个阶段做一个总结。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Attention值计算图.png}
\caption{Attention值计算图}
\label{fig63}
\end{figure}
阶段1:Query与每一个Key计算相似性得到相似性评分s。
阶段2:将s评分进行softmax转换成[0,1]之间的概率分布。
阶段3:将a1,a2,a3...ama_{1},a_{2},a_{3}...a_{m}a1,a2,a3...am作为权值矩阵对Value进行加权求和得到最后的Attention值。
同时,为了弥补Attention只能在Decoder阶段实现并行运算,Encoder部分因为依旧采用的是RNN,LSTM这些按照顺序编码的模型,无法实现并行运算,并且无法获取两个中长距离的词相互之间的关系的缺陷,Self-Attention应声出场。
在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素和Source中的所有元素之间。而Self-Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,相当于是Query=Key=Value,计算过程与Attention一致。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/可视化Self-Attention实例.png}
\caption{可视化Self-Attention实例}
\label{fig64}
\end{figure}
例如图64是Self-Attention的一个例子:我们想知道这句话中的its,在这句话里its指代的是什么,与哪一些单词相关,那么就可以将its作为Query,然后将这一句话作为Key和Value来计算attention值,找到与这句话中its最相关的单词。通过Self-Attention我们发现its在这句话中与之最相关的是Law和application,通过我们分析语句意思也十分吻合。如此引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。但是Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self-Attention对于增加计算的并行性也有直接帮助作用。正好弥补了Attention机制的两个缺点,这就是为何Self-Attention逐渐被广泛使用的主要原因。
了解Attention机制后,介绍Transformer模型:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图.png}
\caption{Transformer结构图}
\label{fig65}
\end{figure}
图65是Transformer的完整结构图。将其分为输入、Encoder block、Decoder block、输出四个模块进行分析,见图66。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图分解.png}
\caption{Transformer结构图分解}
\label{fig66}
\end{figure}
\textbf{a)Transformer的Inputs输入}
见输入模块在Transformer中的位置如图67。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图输入模块.png}
\caption{Transformer结构图输入模块}
\label{fig67}
\end{figure}
Transformer输入是一个序列数据,还是以上篇中提到的"Tom chase Jerry"翻译成中文"汤姆追逐杰瑞"为例:Encoder的inputs就是"Tom chase Jerry"分词后的词向量。可以是任意形式的词向量,如word2vec,GloVe,one-hot编码。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/输入层词向量.png}
\caption{输入层词向量}
\label{fig68}
\end{figure}
假设图68中每一个词向量都是一个512维的词向量。我们注意到,输入Input Embedding后需要给每个word的词向量添加位置编码Positional Encoding,为什么需要添加位置编码呢?首先,一句话中同一个词,如果词语出现位置不同,意思可能发生翻天覆地的变化,就比如:我欠他100W和他欠我100W。这两句话的意思一个地狱一个天堂。可见获取词语出现在句子中的位置信息是一件很重要的事情。但是Transformer是完全基于Self-Attention,而Self-Attention是不能获取词语位置信息,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算Attention值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。所以在输入的时候需要给每一个词向量添加位置编码,见图69。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/输入层词向量处理.png}
\caption{输入层词向量处理}
\label{fig69}
\end{figure}
获取Positional Encoding一般有两种方式:
-
可以通过数据训练学习得到Positional Encoding,类似于训练学习词向量,Goole在之后的Bert中的Positional Encoding便是由训练得到地。
-
《Attention Is All You Need》论文中Transformer使用的是正余弦位置编码。位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加,位置向量维度必须和词向量的维度一致。
相对于将Positional Encoding与词向量相加,完美更倾向于将其拼接。因为本身词向量的维度512维就已经很大,再拼接一个512维的位置向量,变成1024维,这样训练起来会相对较慢,影响效率,而两者的效果无明显差异,因此我们选择学习习难度较小的相加。
\textbf{b)Transformer的Outputs输入}
Transformer的Decoder的输入与Encoder的输出处理方法步骤一致,一个接受source数据,一个接受target数据,对应到上面例子里面就是:Encoder接受英文"Tom chase Jerry",Decoder接受中文"汤姆追逐杰瑞"。只是在有target数据时也就是在进行有监督训练时才会接受Outputs Embedding,进行预测时则不会接收。
\textbf{c)Transformer的Encoder}
见Encoder模块在Transformer中的位置如图70。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图Encoder模块.png}
\caption{Transformer结构图Encoder模块}
\label{fig70}
\end{figure}
Encoder block是由6个Encoder堆叠而成。图70中的灰框部分就是一个Encoder的内部结构,从图中我们可以看出一个Encoder由Multi-Head Attention和全连接神经网络Feed Forward Network构成。
- Multi-Head Attention:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Multi-Head Attention.png}
\caption{Multi-Head Attention}
\label{fig71}
\end{figure}
如图71,我们知道Self-Attention机制是,假如输入序列是"Thinking Machines",x1x_{1}x1,x2x_{2}x2就是对应地"Thinking"和"Machines"添加过Positional Encoding之后的词向量,然后词向量通过三个权值矩阵WQW_{Q}WQ,WKW_{K}WK,WVW_{V}WV,转变成为计算Attention值所需的Query,Keys,Values向量,如图71。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/QKV的转变.png}
\caption{QKV的转变}
\label{fig72}
\end{figure}
在实际使用中,每一个样本,也就是每一条序列数据都是以矩阵的形式输入,故可以看到图72中,X矩阵是由"Tinking"和"Machines"词向量组成的矩阵,然后跟过变换得到Q,K,V。假设词向量是512维,X矩阵的维度是(2,512),WQW_{Q}WQ,WKW_{K}WK,WVW_{V}WV均是(512,64)维,得到的Query,Keys,Values就都是(2,64)维。得到Q,K,V之后,接下来就是计算Attention值了:
步骤1:输入序列中每个单词之间的相关性得分,计算相关性得分可以使用点积法,就是用Q中每一个向量与K中每一个向量计算点积,具体到矩阵的形式:score=Q⋅KTscore = Q \cdotp K^{T}score=Q⋅KT,score是一个(2,2)的矩阵。
步骤2:对于输入序列中每个单词之间的相关性得分进行归一化,归一化的目的主要是为了训练时梯度能够稳定。
步骤3:通过softmax函数,将每个单词之间的得分向量转换成[0,1]之间的概率分布,同时更加凸显单词之间的关系。经过softmax后,score转换成一个值分布在[0,1]之间的(2,2)α概率分布矩阵。
步骤4:根据每个单词之间的概率分布,然后乘上对应的Values值,α与V进行点积,V的为维度是(2,64),(2,2)x(2,64)最后得到的Z是(2,64)维的矩阵。
Multi-Head Attention就是在Self-Attention的基础上,对于输入的Embedding矩阵,Self-Attention只使用了一组WQW_{Q}WQ,WKW_{K}WK,WVW_{V}WV来进行变换得到Query,Keys,Values。而Multi-Head Attention使用多组WQW_{Q}WQ,WKW_{K}WK,WVW_{V}WV得到多组Query,Keys,Values,然后每组分别计算得到一个Z矩阵,最后将得到的多个Z矩阵进行拼接。Transformer里面是使用了8组不同的WQW_{Q}WQ,WKW_{K}WK,WVW_{V}WV。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Multi-Head Attention内部结构.png}
\caption{Multi-Head Attention内部结构}
\label{fig73}
\end{figure}
从图73中可以看到,在经过Multi-Head Attention得到矩阵Z之后,并没有直接传入全连接神经网络FNN,而是经过了一步:Add&Normalize。
- Add&Normalize:
Add,就是在Z的基础上加了一个残差块X,加入残差块X的目的是为了防止在深度神经网络训练中发生退化问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。举个例子:假如某个神经网络的最优网络层数是18层,但是我们在设计的时候并不知道到底多少层是最优解,本着层数越深越好的理念,我们设计了32层,那么32层神经网络中有14层其实是多余地,我们要想达到18层神经网络的最优效果,必须保证这多出来的14层网络必须进行恒等映射,恒等映射的意思就是说,输入什么,输出就是什么,可以理解成F(x)=x这样的函数,因为只有进行了这样的恒等映射咱们才能保证这多出来的14层神经网络不会影响我们最优的效果。但现实是神经网络的参数都是训练出来地,要想保证训练出来地参数能够很精确的完成F(x)=x的恒等映射其实是很困难地。多余的层数较少还好,对效果不会有很大影响,但多余的层数一多,可能结果就不是很理想了。ResNet残差神经网络由此诞生,目标是解决神经网络退化的问题。
Z添加了残差块后,上述的要完成恒等映射的函数变成h(X)=F(X)+X,我们要让h(X)=X,相当于只需要让F(X)=0。神经网络通过训练变成0比变成X容易很多,初始化神经网络的参数的时候就是设置的[0,1]之间的随机数。所以经过网络变换后很容易接近于0。举个例子:假设该网络只经过线性变换,没有bias也没有激活函数。我们发现因为随机初始化权重一般偏向于0,那么经过该网络的输出值为[0.6 0.6],很明显会更接近与[0 0],而不是[2 1],相比与学习h(x)=x,模型要更快到学习F(x)=0。并且ReLU能够将负数激活为0,过滤了负数的线性变化,也能够更快的使得F(x)=0。这样当网络自己决定哪些网络层为冗余层时,使用ResNet的网络很大程度上解决了学习恒等映射的问题,用学习残差F(x)=0更新该冗余层的参数来代替学习h(x)=x更新冗余层的参数。这样当网络自行决定了哪些层为冗余层后,通过学习残差F(x)=0来让该层网络恒等映射上一层的输入,使得有了这些冗余层的网络效果与没有这些冗余层的网络效果相同,这样很大程度上解决了网络的退化问题。
因此,Transformer中加上的X也就是Multi-Head Attention的输入,X矩阵。
在神经网络进行训练之前,都需要对于输入数据进行Normalize归一化,目的有二:1,能够加快训练的速度。2.提高训练的稳定性。相较于使用Batch Normalization(BN)进行归一化,我们更倾向于使用Layer Normalization(LN)。LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。BN是对于相同的维度进行归一化,但是NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是不适合的,因此这里选用的是LN。
- Feed-Forward Networks
这里的全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。这里的x就是我们Multi-Head Attention的输出Z,还是引用上面的例子,那么Z是(2,64)维的矩阵,假设W1是(64,1024),其中W2与W1维度相反(1024,64),那么按照上面的公式:FFN(Z)=(2,64)x(64,1024)x(1024,64)=(2,64)FFN(Z)=(2,64)x(64,1024)x(1024,64)=(2,64)FFN(Z)=(2,64)x(64,1024)x(1024,64)=(2,64),我们发现维度没有发生变化,这两层网络就是为了将输入的Z映射到更加高维的空间中(2,64)x(64,1024)=(2,1024),然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度。
然后经过Add&Normalize,输入下一个Encoder中,经过6个Encoder后输入到Decoder中。
\textbf{d)Transformer的Decoder}
见Decoder模块在Transformer中的位置如图74。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图Decoder模块.png}
\caption{Transformer结构图Decoder模块}
\label{fig74}
\end{figure}
Decoder block也是由6个decoder堆叠而成,上图73中的灰框部分就是一个Decoder的内部结构,从图中我们可以看出一个Decoder由Masked Multi-Head Attention,Multi-Head Attention和全连接神经网络FNN构成。比Encoder多了一个Masked Multi-Head Attention,其他的结构与Encoder相同。
Decoder的输入分为两类:一种是训练时的输入,一种是预测时的输入。训练时的输入就是已经对准备好对应的target数据。例如翻译任务,Encoder输入"Tom chase Jerry",Decoder输入"汤姆追逐杰瑞"。预测时的输入,一开始输入的是起始符,然后每次输入是上一时刻Transformer的输出。例如,输入"“,输出"汤姆”,输入"汤姆",输出"汤姆追逐",输入"汤姆追逐",输出"汤姆追逐杰瑞",输入"汤姆追逐杰瑞",输出"汤姆追逐杰瑞"结束。
- Masked Multi-Head Attention
与Encoder的Multi-Head Attention计算原理一样,只是多加了一个mask码。mask表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer模型里面涉及两种mask,分别是padding mask和sequence mask。
padding mask:因为每个批次输入序列长度是不一样的,也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的Attention机制不应该把注意力放在这些位置上,因此我们需要进行一些处理。
具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0。
sequence mask:为了使得Decoder不能看见未来的信息。对于一个序列,在time-step为t的时刻,我们的解码输出应该只能依赖于t时刻之前的输出,而不能依赖t之后的输出。因此我们需要想一个办法,把t之后的信息给隐藏起来。这在训练的时候有效,因为训练的时候每次我们是将target数据完整输入进Decoder中,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。产生一个上三角矩阵,上三角的值全为0,把这个矩阵作用在每一个序列上,就可以达到我们的目的。
同样在Encoder中的Multi-Head Attention也是需要进行mask,只不过Encoder中只需要padding mask即可,而Decoder中需要padding mask和sequence mask。
- Multi-Head Attention
Encoder中的Multi-Head Attention是基于Self-Attention,Decoder中的第二个Multi-Head Attention就只是基于Attention,它的输入Query来自于Masked Multi-Head Attention的输出,Keys和Values来自于Encoder中最后一层的输出。第一个Masked Multi-Head Attention是为了得到之前已经预测输出的信息,相当于记录当前时刻的输入之间的信息。第二个Multi-Head Attention是为了通过当前输入的信息得到下一时刻的信息,也就是输出的信息,是为了表示当前的输入与经过Encoder提取过的特征向量之间的关系来预测输出。
经过了第二个Multi-Head Attention之后的Feed Forward Network与Encoder中一样,然后就是输出进入下一个Decoder,如此经过6层Decoder之后到达最后的输出层。
\textbf{e)Transformer的输出}
见输出模块在Transformer中的位置如图75。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Transformer结构图输出模块.png}
\caption{Transformer结构图输出模块}
\label{fig75}
\end{figure}
Output如图74中所示,首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出。
在深度学习领域中,Transformer可以说是一个里程碑式的进展。它的提出彻底改变了序列建模的方式,并在自然语言处理等领域取得了巨大成功。Transformer的自注意力机制解决了传统循环神经网络(RNN)和长短期记忆网络(LSTM)等结构存在的长距离依赖建模难题,并且具有更好的并行计算性能,使得训练速度更快。由于其出色的性能和广泛应用,Transformer在深度学习领域的地位是非常显赫的,被视为一个重要的里程碑和标志性的模型架构。
\textbf{\textit{C\mathfrak{C}C.GPT}}
OpenAI公司在2018年提出的GPT(Generative Pre-Training)模型是典型的生成式预训练语言模型之一。GPT模型的基本原则是通过语言建模将世界知识压缩到仅解码器的Transformer模型中,这样它就可以恢复(或记忆)世界知识的语义,并充当通用任务求解器。它能够成功的两个关键点:1.训练能够准确预测下一个单词的仅解码器的Transformer语言模型。2.扩展语言模型的大小。
总体而言,OpenAI在LLM上的研究大致可以分为图76中的几个阶段:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/GPT的发展历程.png}
\caption{GPT的发展历程}
\label{fig76}
\end{figure}
2022年11月,OpenAI发布了基于GPT模型(GPT3.5和GPT-4)的会话应用ChatGPT。由于与人类交流的出色能力,ChatGPT自发布以来就引发了人工智能社区的兴奋。ChatGPT是基于强大的GPT模型开发的,具有特别优化的会话能力。
ChatGPT从本质上来说是一个LLM应用,它是基于GPT-3.5和GPT-4开发出来的,与GPT-4有本质的区别。现在的ChatGPT支持最长达32000个字符,知识截止日期是2021年9月,它可以执行各种任务,包括代码编写、数学问题求解、写作建议等。ChatGPT在与人类交流方面表现出了卓越的能力:拥有丰富的知识储备,对数学问题进行推理的技能,在多回合对话中准确追踪上下文,并且与人类安全使用的价值观非常一致。后来,ChatGPT支持插件机制,这进一步扩展了ChatGPT与现有工具或应用程序的能力。到目前为止,它似乎是人工智能历史上最强大的聊天机器人。ChatGPT的推出对未来的人工智能研究具有重大影响,它为探索人类人工智能系统提供了启示。
2023年3月发布的GPT-4,它将文本输入扩展到多模态信号。总体而言,GPT3.5拥有1750亿个参数,而GPT-4的参数量官方并没有公布,但有相关人员猜测,GPT-4在120层中总共包含了1.8万亿参数,也就是说,GPT-4的规模是GPT-3的10倍以上。因此,GPT-4比GPT-3.5解决复杂任务的能力更强,在许多评估任务上表现出较大的性能提升。
最近的一项研究通过对人为生成的问题进行定性测试来研究GPT-4的能力,这些问题包含了各种各样的困难任务,并表明GPT-4可以比之前的GPT模型(如GPT3.5)实现更优越的性能。此外,由于六个月的迭代校准(在RLHF训练中有额外的安全奖励信号),GPT-4对恶意或挑衅性查询的响应更安全。在技术报告中,OpenAI强调了如何安全地开发GPT-4,并应用了一些干预策略来缓解LLM可能出现的问题,如幻觉、隐私和过度依赖。例如,他们引入了称为红队评估(red teaming)的机制,以减少危害或有毒物质的产生。作为另一个重要方面,GPT4是在一个完善的深度学习基础设施上开发的,并使用改进的优化方法。他们引入了一种称为可预测扩展(predictable scaling)的新机制,可以在模型训练期间使用一小部分计算准确预测最终性能。
让我们首先了解生成式语言模型的工作原理。见图77,基本的想法是:它们以n个标记作为输入,并生成一个标记作为输出。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/生成式语言模型工作原理.png}
\caption{生成式语言模型工作原理}
\label{fig77}
\end{figure}
这似乎是一个相当直观的概念,但为了真正理解它,我们需要知道什么是标记。
标记是一段文本的片段。在OpenAI的GPT模型中,常见和短的单词通常对应一个标记,例如下面图78中的单词“We”。长且不常用的单词通常被拆分为多个标记。例如下面图片中的单词“anthropomorphizing”被拆分为三个标记。缩写词如“ChatGPT”可以表示为一个标记,也可以拆分为多个标记,这取决于字母组合出现的频率。可以访问OpenAI的Tokenizer页面,输入文本,查看它如何被拆分为标记。可以选择“GPT-3”的分词方式,用于处理文本,或选择“Codex”的分词方式,用于处理代码。我们将保持默认的“GPT-3”设置。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/token解释.png}
\caption{token解释}
\label{fig78}
\end{figure}
还可以使用OpenAI的开源tiktoken库以Python代码进行分词。OpenAI提供了几种不同的分词器,每种分词器的行为略有不同。
让我们考虑一些其他的分词选项。假设我们尝试最简单的实现,其中每个字母都是一个标记。这样可以很容易地将文本分割为标记,并且可以保持不同标记的总数较小。然而,与OpenAI的方法相比,我们无法编码nearly同样多的信息。11个标记只能编码“We need to”,而11个OpenAI的标记可以编码整个句子。事实证明,当前的语言模型对它们可以接收的标记的最大数量有限制。因此,我们希望在每个标记中尽可能多地包含信息。
现在让我们考虑每个单词作为一个标记的情况。与OpenAI的方法相比,我们只需要七个标记来表示相同的句子,这似乎更高效。而且按单词拆分也很容易实现。然而,语言模型需要拥有可能遇到的所有标记的完整列表,对于整个单词来说这是不可行的,不仅因为词典中有很多单词,而且因为很难跟上特定领域术语和任何新创造的单词。
因此,OpenAI选择了两个极端之间的解决方案也就不足为奇了。其他公司也发布了遵循类似方法的分词器,例如Google的Sentence Piece。
GPT模型的训练三步骤基本为:预训练(Pretraining)、指令微调阶段(Instruction Tuning Stage)、对齐微调(Alignment Tuning)。
- 预训练(Pretraining)
预训练是大模型训练的第一步,目的是让模型学习语言的统计模式和语义信息。主流的预训练阶段步骤基本都是近似的,其中最重要的就是数据,需要收集大量的无标注数据,例如互联网上的文本、新闻、博客、论坛等等。这些数据可以是多种语言的,并且需要经过一定的清洗和处理,以去除噪音,无关信息以及个人隐私相关的,最后会以tokenizer粒度输入到上文提到的语言模型中。这些数据经过清洗和处理后,用于训练和优化语言模型。预训练过程中,模型会学习词汇、句法和语义的规律,以及上下文之间的关系。OpenAI的ChatGPT4能有如此惊人的效果,主要的一个原因就是他们训练数据源比较优质。
- 指令微调阶段(Instruction Tuning Stage)
在完成预训练后,就可以通过指令微调去挖掘和增强语言模型本身具备的能力,这步也是很多企业以及科研研究人员利用大模型的重要步骤。
Instruction tuning(指令微调)是大模型训练的一个阶段,它是一种有监督微调的特殊形式,旨在让模型理解和遵循人类指令。在指令微调阶段,首先需要准备一系列的NLP任务,并将每个任务转化为指令形式,其中指令包括人类对模型应该执行的任务描述和期望的输出结果。然后,使用这些指令对已经预训练好的大语言模型进行监督学习,使得模型通过学习和适应指令来提高其在特定任务上的表现。
为了让模型训练更加高效和简单,这个阶段还有一种高效的fine-tuning技术,这为普通的从业者打开了通向使用大模型的捷径。
Parameter-Efficient Fine-Tuning (PEFT)旨在通过最小化微调参数的数量和计算复杂度,达到高效的迁移学习的目的,提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。在训练过程中,预训练模型的参数保持不变,只需微调少量的额外参数,就可以达到与全量微调相当的性能。
目前,很多研究对PEFT方法进行了探索,例如Adapter Tuning和Prefix Tuning等。其中,Adapter Tuning方法在面对特定的下游任务时,将预训练模型中的某些层固定,只微调接近下游任务的几层参数,如图79。而Prefix Tuning方法则是在预训练模型的基础上,添加一些额外的参数,这些参数在训练过程中会根据特定的任务进行更新和调整,如图80。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Adapter Tuning.png}
\caption{Adapter Tuning}
\label{fig79}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Prefix Tuning.png}
\caption{Prefix Tuning}
\label{fig80}
\end{figure}
工业界现在常用的Adapter Tuning的技术是Low-Rank Adaptation(LoRA)。它通过最小化微调参数的数量和计算复杂度,实现高效的迁移学习,以提高预训练模型在新任务上的性能。LoRA的核心思想是将预训练模型的权重矩阵分解为两个低秩矩阵的乘积。通过这种分解,可以显著减少微调参数的数量,并降低计算复杂度。该方式和机器学习中经典的降维的思想很类似,类似地,LoRA使用了矩阵分解技术中的奇异值分解(Singular Value Decomposition, SVD)或低秩近似(Low-Rank Approximation)方法,将原始权重矩阵分解为两个低秩矩阵的乘积,见图81。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LoRA技术.png}
\caption{LoRA技术}
\label{fig81}
\end{figure}
在微调过程中,LoRA只更新这两个低秩矩阵的参数,而保持其他预训练参数固定不变。这样可以显著减少微调所需的计算资源和时间,并且在很多任务上取得了与全量微调相当的性能。
LoRA技术的引入使得在大规模预训练模型上进行微调更加高效和可行,为实际应用提供了更多可能性。
- 对齐微调(Alignment Tuning)
主要目标在于将语言模型与人类的偏好、价值观进行对齐,其中最重要的技术就是使用RLHF(reinforcement learning from human feedback)来进行对齐微调,见图82。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/对齐微调.png}
\caption{对齐微调}
\label{fig82}
\end{figure}
Step 1. 预训练模型的有监督微调
先收集一个提示词集合,并要求标注人员写出高质量的回复,然后使用该数据集以监督的方式微调预训练的基础模型。
Step 2. 训练奖励模型
这个过程涉及到与人类评估者进行对话,并根据他们的反馈来进行调整和优化。评估者会根据个人偏好对模型生成的回复进行排序,从而指导模型生成更符合人类期望的回复。这种基于人类反馈的训练方式可以帮助模型捕捉到更多人类语言的特点和习惯,从而提升模型的生成能力。
Step 3。 利用强化学习模型微调
主要使用了强化学习的邻近策略优化(PPO,proximal policy optimization)算法,对于每个时间步,PPO算法会计算当前产生和初始化的KL散度,根据这个分布来计算一个状态或动作的预期回报,然后使用这个回报来更新策略,达到对SFT模型进一步优化。
但是这种算法存在一些比较明显的缺点,比如PPO是on-policy算法,每一次更新都需要收集新的样本,这就会导致算法的效率低下,并且更新是在每次训练时进行的,因此策略更新比较频繁,这就会导致算法的稳定性较差。
所以当前有很多新的技术出来替代RLHF技术,见图83:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/DPO与RLHF的对比.png}
\caption{DPO与RLHF对比}
\label{fig83}
\end{figure}
直接偏好优化(DPO)是一种对传统RLHF替代的技术,作者在论文中提出拟合一个反映人类偏好的奖励模型,将奖励函数和最优策略之间的映射联系起来,从而把约束奖励最大化问题转化为一个单阶段的策略训练问题。然后通过强化学习来微调大型无监督语言模型,以最大化这个预估的奖励。这个算法具有简单有效和计算轻量级的特点,不需要拟合奖励模型,只需要进行单阶段训练,也不需要大量的超参数调节,所以在响应质量方面也通常优于传统的RLHF。另外还有RLAIF从采样方式,生成训练奖励模型的评分的角度来替代原有的PPO的RLHF进行训练。
对齐微调是一个关键的阶段,这一阶段使用强化学习从人类反馈中进行微调,以进一步优化模型的生成能力。它通过与人类评估者和用户的互动,不断优化模型的生成能力,以更好地满足人类期望和需求。
Prompt作为大模型的一个技术分支,很多人接触大模型的第一步就是写prompt,而这的确也是大模型发展的其中一个重要方向技术,也是很多实际运用问题解决的关键步骤。
Prompt技术的基本思想是,通过给模型提供一个或多个提示词或短语,来指导模型生成符合要求的输出。本质上是通过恰当的初始化参数(也就是适当的输入语言描述),来激发语言模型本身的潜力。例如,在文本分类任务中,我们可以给模型提供一个类别标签的列表,并要求它生成与这些类别相关的文本;在机器翻译任务中,我们可以给模型提供目标语言的一段文本,并要求它翻译这段文本。
Prompt根据常用的使用场景可以概括为以下四种:
· Zero-Shot Prompt:在零样本场景下使用,模型根据提示或指令进行任务处理,不需要针对每个新任务或领域都进行专门的训练,这类一般作为训练通用大模型的最常见的评估手段。
· Few-Shot Prompt: 在少样本场景下使用,模型从少量示例中学习特定任务,利用迁移学习的方法来提高泛化性能,该类prompt也是很多实际应用案例都采取来进行大模型微调训练的方式。
· Chain-of-thought prompt:这类prompt常见于推理复杂任务,它通过引导模型逐步解决问题,以一系列连贯的步骤展示推理的思路和逻辑关系。通过这种逐步推理的方式,模型可以逐渐获得更多信息,并在整个推理过程中累积正确的推断,见图84。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Chain-of-Thought Prompting.png}
\caption{Chain-of-thought Prompting}
\label{fig84}
\end{figure}
· Multimodal prompt:这类prompt包含的信息就更丰富,主要是将不同模态的信息(如文本、图像、音频等)融合到一起,形成一种多模态的提示,以帮助模型更好地理解和处理输入数据。比如在问答系统中,可以将问题和相关图像作为多模态输入,以帮助模型更好地理解问题的含义和上下文背景,并生成更加准确和全面的答案,见图85。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Multimodal Prompting.png}
\caption{Multimodel Prompting}
\label{fig85}
\end{figure}
在具体实践中,根据场景设计合适的prompt进行优化,评估也是大模型工程中重要的一步,对大模型准确率和可靠性提升是必不可少的,这步也是将模型潜在强大能力兑现的关键一环。
\textbf{\textit{D\mathfrak{D}D.Claude}}
Claude系列模型是由OpenAI离职人员创建的Anthropic公司开发的闭源语言大模型,可以完成摘要总结、搜索、协助创作、问答、编码等任务。目前包含Claude和Claude-Instant两种模型可供选择,其中Claude Instant的延迟更低,性能略差,价格比完全体的Claude-v1要便宜,两个模型的上下文窗口都是9000个token(约5000个单词,或15页)它的目标是“更安全”、“危害更小”的人工智能。最早的Claude于2023年3月15日发布,并在202 年7月11日,更新至Claude-2。Claude 2的训练参数官方并未公开,但是相关的猜测大概是860.1亿个参数。
该系列模型通过无监督预训练、基于人类反馈的强化学习和Constitutional AI技术(包含监督训练和强化学习)进行训练,旨在改进模型的有用性、诚实性和无害性。值得一提的是,Claude最高支持100K词元的上下文,而Claude-2更是拓展到了200K词元的上下文。相比于Claude 1.3,Claude 2拥有更强的综合能力,同时能够生成更长的相应。
总的来说,Claude 2注重提高以下能力:
-
Anthropic致力于提高Claude作为编码助理的能力,Claude 2在编码基准和人类反馈评估方面性能显著提升。
-
长上下文(long-context)模型对于处理长文档、少量prompt以及使用复杂指令和规范进行控制特别有用。Claude的上下文窗口从9K token扩展到了100K token(Claude 2已经扩展到200K token,但目前发布版本仅支持100K token)。
-
以前的模型经过训练可以编写相当短的回答,但许多用户要求更长的输出。Claude 2经过训练,可以生成最多4000个token的连贯文档,相当于大约3000个单词。
-
Claude通常用于将长而复杂的自然语言文档转换为结构化数据格式。Claude 2经过训练,可以更好地生成JSON、XML、YAML、代码和Markdown格式的正确输出。虽然Claude的训练数据仍然主要是英语,但Claude 2的训练数据中非英语数据比例已经明显增加。
-
Claude 2的训练数据包括2022年和2023年初更新的数据。这意味着它知道最近发生的事件,但它仍然可能会产生混淆。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Claude.png}
\caption{Claude}
\label{fig86}
\end{figure}
\textbf{\textit{E\mathfrak{E}E.PaLM}}
PaLM系列语言大模型由Google开发。其初始版本于2022年4月发布,并在2023年3月公开了API。PaLM基于Google提出的Pathways机器学习系统搭建,训练数据总量达780B个字符,内容涵盖网页、书籍、新闻、开源代码等多种形式的语料。前PaLM共有8B、62B、540B三个不同参数量的模型版本。Google还开发了多种PaLM的改进版本。Med-PaLM是PaLM 540B在医疗数据上进行了微调后的版本,在MedQA等医疗问答数据集上取得了最好成绩。PaLM-E是PaLM的多模态版本,能够在现实场景中控制机器人完成简单任务。
2023年5月,Google发布了PaLM 2,但并未公开其技术细节。Google内部文件显示其参数量为340B,训练数据为PaLM的5倍左右。它是PaLM(540B)的升级版,能够处理“多语言任务”。它使用了一个覆盖100多种语言的语料库进行训练。而PaLM 2实际上是一系列模型,可以根据规模分为:Gecko、Otter、Bison和Unicorn,可以根据不同的领域和需求进行微调,最小模型可以部署在移动端,最大的参数量也只有14.7B。现已部署在Google的25个产品和功能中,包括Bard和Google Worksapce应用,针对不同的领域又可以变成专有模型,比如Med-PaLM 2,是第一个在美国医疗执照考试类问题上表现出“专家”水平的大型语言模型。
PaLM 2的几大突破:
-
最优的缩放比例(训练数据大小/模型参数量),通过compute-optimal scaling的研究,可以得知数据大小与模型大小同样重要。根据谷歌的研究,数据和模型大小大致按照1:1的比例缩放,可以达到最佳性能。(过去常认为,模型参数量的大小大致为数据集3倍更佳)。
-
训练数据集非纯英文语料,混合了百种语言,包括了网络文档、书籍、代码、数学和对话数据,比用于训练PaLM的语料库大得多。并在研究中发现,越大的模型越是能处理更多的非英文数据集,而且包含更高比例的非英语数据,对多语言任务(如翻译和多语言问题回答)是有利的,因为模型会接触到更多的语言和文化。这使得该模型能够学习每种语言的细微差别。
图87是Google基于PaLM 2开发的对话应用Bard。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Bard.png}
\caption{Bard}
\label{fig87}
\end{figure}
\textbf{\textit{F\mathfrak{F}F.文心一言}}
文心一言是基于百度文心大模型的知识增强语言大模型,于2023年3月在国内率先开启邀测。文心一言的基础模型文心大模型于2019年发布1.0版,现已更新到4.0版本。更进一步划分,文心大模型包括NLP大模型、CV大模型、跨模态大模型、生物计算大模型、行业大模型,其中NLP大模型主要为ERNIE系列模型,是打造文心一言的关键。文心大模型参数量非常大,达到了2600亿。
2023年8月31日,文心一言率先向全社会全面开放,提供APP、网页版、API接口等多种形式的开放服务。文心一言一方面采用有监督精调、人类反馈的强化学习、提示等技术,还具备知识增强、检索增强和对话增强等关键技术。当前,以文心一言为代表的大模型已经逐步赶超国外最优水平。文心一言基于飞桨深度学习框架进行训练,算法与框架的协同优化后效果和效率都得到提升,模型训练速度达到优化前的3倍,推理速度达到优化前的30多倍。文心一言还建设了插件机制,通过外部工具、服务的调用,拓展大模型的能力的边界。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/文心一言.png}
\caption{文心一言}
\label{fig88}
\end{figure}
\textbf{\textit{G\mathfrak{G}G.星火大模型}}
讯飞星火认知大模型是科大讯飞于2023年5月6日发布的语言大模型,提供了基于自然语言处理的多元能力,支持多种自然语言处理任务,同时联合中科院人工智能产学研创新联盟和长三角人工智能产业链联盟在业内提出了覆盖7大类481项任务的《通用人工智能评测体系》;6月9日星火大模型升级到V1.5版,实现了开放式知识问答、多轮对话、逻辑和数学能力的提升;8月15日星火大模型升级到V2.0版,对于代码和多模态能力进行了提升。
讯飞星火V2.0升级发布的多模态能力,已实现图像描述、图像理解、图像推理、识图创作、文图生成、虚拟人合成。星火大模型包含超过1700亿个参数,来源于数十亿的语言数据集。尽管比ChatGPT 3.5模型1.5万亿个差着数量级,但ChatGPT覆盖了全球主要语言,汉语不到其中 10% 的数据量。所以在现有数据基础上,星火大模型比ChatGPT更懂中文。基于代码和多模态能力的发布,智能编程助手iFlyCode1.0和讯飞智作2.0两款应用产品也在发布会上发布,进一步解放编程和内容生产力。同时,讯飞和华为还联合重磅发布了国内首款支持大模型训练私有化的全国产化产品“星火一体机”,可支持企业快速实现讯飞星火大模型的私有化部署、场景赋能和专属大模型训练优化。
2023年10月24日,2023科大讯飞全球1024开发者上,现场发布了讯飞星火认知大模型V3.0,此次七大能力持续提升,并且全面对标ChatGPT,见图89。尤其像中文能力客观评测上超越ChatGPT,在医疗、法律、教育等专业表现也格外突出,还有在代码项目级理解能力、小样本学习、多模态指令跟随与细节表达等能力有所提升。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/讯飞星火 vs GPT.png}
\caption{讯飞星火 vs GPT}
\label{fig89}
\end{figure}
图90是讯飞星火的使用界面。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/讯飞星火.png}
\caption{讯飞星火}
\label{fig90}
\end{figure}
\textbf{\textit{H\mathfrak{H}H.LLaMA}}
LLaMA系列模型是Meta开源的一组参数规模从7B到70B的基础语言模型,它们都是在数万亿个字符上训练的,展示了如何仅使用公开可用的数据集来训练最先进的模型,而不需要依赖专有或不可访问的数据集。这些数据集包括Common Crawl、Wikipedia、OpenWebText2、RealNews、Books等。LLaMA模型使用了大规模的数据过滤和清洗技术,以提高数据质量和多样性,减少噪声和偏见。LLaMA模型还使用了高效的数据并行和流水线并行技术,以加速模型的训练和扩展。特别地,LLaMA 13B在CommonsenseQA等9个基准测试中超过了GPT-3(175B),而LLaMA 65B与最优秀的模型Chinchilla-70B和PaLM-540B相媲美。LLaMA通过使用更少的字符来达到最佳性能,从而在各种推理预算下具有优势。
与GPT系列相同,LLaMA模型也采用了decoder-only架构,但同时结合了一些前人工作的改进,例如:
· Pre-normalization:为了提高训练稳定性,LLaMA对每个Transformer子层的输入进行了RMSNorm归一化,这种归一化方法可以避免梯度爆炸和消失的问题,提高模型的收敛速度和性能。
· SwiGLU激活函数:将ReLU非线性替换为SwiGLU激活函数,增加网络的表达能力和非线性,同时减少参数量和计算量。
· RoPE位置编码:模型的输入不再使用位置编码,而是在网络的每一层添加了位置编码,RoPE位置编码可以有效地捕捉输入序列中的相对位置信息,并且具有更好的泛化能力。
这些改进使得LLaMA模型在自然语言理解、生成、对话等任务上都取得了较好的结果。
\textbf{\textit{I\mathfrak{I}I.GLM}}
GLM系列模型是清华大学和智谱AI等合作研发的开源语言大模型。ChatGLM是基于GLM结构开发的具有62亿参数量的语言大模型,支持2048的上下文长度。其使用了包含1万亿字符的中英文语料进行训练,能够支持中文和英文两种语言的任务。通过监督微调、反馈自助、人类反馈强化学习等多种训练技术,ChatGLM拥有强大的生成能力,能够生成更符合人类偏好的内容。与GLM相似,通过INT4量化和P-Tuning v2等高效微调的算法,ChatGLM能够在7G显存的条件下进行微调。
在ChatGLM的基础上,2023年6月发布的ChatGLM 2使用了包含1.4万亿字符的中英预料进行预训练,并使用人类偏好的数据对模型进行对齐训练,拥有比前一版本更加强大的能力,在多个任务上取得提升。
· 通过FlashAttention技术,ChatGLM 2能够处理更长的长下文,支持的长下文长度达到了3.2万字符。
· 通过Multi-Query Attention技术,ChatGLM 2能够进一步地提升推理速度,减小对显卡的显存占用。
在2023年10月27日的2023中国计算机大会(CNCC)上,智谱AI推出了ChatGLM3,ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了如下特性:
· 更强大的基础模型:ChatGLM3-6B的基础模型ChatGLM3-6B-Base采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base具有在10B以下的基础模型中最强的性能。
· 更完整的功能支持:ChatGLM3-6B采用了全新设计的Prompt格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和Agent任务等复杂场景。
· 更全面的开源序列:除了对话模型ChatGLM3-6B ,还开源了基础模型ChatGLM3-6B-Base、长文本对话模型ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
此外,还开源了多模态CogVLM-17B 、以及智能体AgentLM,具体来说:
· 在对话模型上,对标ChatGPT的是ChatGLM。
· 在文生图方面,对标DALL.E 的是CogView。
· 代码生成上,与Codex相对的是CodeGeeX。
· 搜索增强上,与WebGPT相对的是WebGLM。
· 在多模态、图文理解领域,与GPT-4V对标的有ChatGLM3。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/GLM vs GPT.png}
\caption{GLM vs GPT}
\label{fig91}
\end{figure}
图92为智谱清言的使用界面:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/智谱清言.png}
\caption{智谱清言}
\label{fig92}
\end{figure}
随着人工神经网络和深度学习技术的不断发展和应用场景的不断拓展,大型语言模型已经成为了自然语言处理领域中的重要研究方向之一。清华大学作为国内领先的科研机构之一,一直在该领域不断探索和创新。2022年,清华大学发布了一款具有重要意义的GLM大模型,它不仅在中文语言处理方面取得了显著的进展,还在英文语言处理方面表现出了强大的能力。GLM大模型区别于OpenAI GPT在线大模型只能通过API方式获取在线支持的窘境,GLM大模型属于开源大模型,可以本地部署进行行业微调、也可通过API方式在线获取GLM模型能力。因此对于开发者而言,GLM开源大模型更值得去探索和研究。
随着Google 2017年发布的一篇名为“Attention is All You Need”的论文开始,人们便开始了基于Transformer架构的自注意力机制(self-attention mechanism)的前馈神经网络模型在自然语言处理领域的突飞猛进的探索,Google Transformer逐渐成为自然语言处理领域的重要研究方向,后续提出的BERT、GPT大模型均是基于Transformer模型,这些模型在各种自然语言处理任务上都取得了非常好的效果。而就在GPT-3、BERT、T5等大模型发布之后,预训练语言模型大体可分为GPT系列的自回归模型、BERT系列的自编码模型、T5系列的编码-解码模型,它们每一个都在各自的领域上表现不俗,但是没有一个预训练模型能够很好地完成所有任务。为了应对这一挑战,由清华大学实验室和智谱AI共同研发的一款通用预训练语言模型GLM(Generative Language Model)也紧随其后陆续登场,它在自然语言理解(NLU)、条件文本生成(conditional generation)和非条件文本生成(unconditional generation)任务上都有着不错的表现。从而在竞争激烈的大模型领域呈现着一抹中国色。
智谱AI是一家清华大学技术成果转化的公司,致力于打造新一代认知智能通用模型,他和清华大学的深度合作,将技术成果在具体产品上落地和推广。在大模型领域,2022年发布了双语千亿级超大规模预训练模型GLM-130B,构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎。且在斯坦福大学基础模型中心的评测中,GLM-130B在准确性和公平性指标上与GPT-3 175B(davinci)接近或持平,鲁棒性、校准误差和无偏性优于GPT-3 175B。基于GLM-130B模型的对话模型ChatGLM-6B通过有监督微调等技术初步实现与人类意图对齐,初具理解人类指令意图的能力,并支持在单张2080Ti上进行推理使用。开源ChatGLM-6B具备独立部署潜质,可以成为千行百业大模型业务落地的基石。智谱AI相继推出认知大模型平台Bigmodel.ai,其中包括CodeGeeX和CogView等产品,提供智能API服务,链接物理世界的亿级用户、赋能元宇宙数字人、成为具身机器人的基座,赋予机器像人一样“思考”的能力。可见在智谱AI大模型行业应用的推动下,基于GLM大模型的技术深入和应用探索会有更大的想象空间,值得期待。
自然语言处理NLP技术中通常包含三类任务:自然语言理解(包括文本分类、分词、句法分析、信息抽取等)、有条件生成任务(seq-seq,如翻译任务、QA)和无条件生成任务(用预训练模型直接生成内容)。当前预训练模型也主要包括三类:自编码模型、自回归模型和编码解码模型。但这些预训练模型都不足以在所有NLP任务中都能展现出良好的性能。清华大学针对上述三种任务提出了一种基于自回归空白填充的通用语言模型(GLM),在兼顾三方面任务,且性能表现良好。在持续的探索中,GLM系列模型发布了GLM-130B、ChatGLM、ChatGLM-6B、ChatGLM2-6B等大模型组。
a)GLM-130B
GLM-130B由清华智谱AI于2022年8月开源发布。它是GLM系列模型中最大的模型,拥有1300亿参数,支持中英文双语,其目标是能够训练出开源开放的高精度千亿中英双语语言模型,让每个人都能用的上的千亿模型。
GLM-130B其表现性能上与GPT3相当,相比于百亿或更小参数规模的模型来说,千亿模型显得尤为难以训练,在训练过程中会遇到很多意想不到的技术与工程相关的问题,因此千亿规模大模型的训练过程和模型参数对公众是难以获得的,而清华大学完全开源了GLM-130B的参数、代码和训练过程,揭示了如何成功地预训练一个高质量的千亿参数大语言模型的方法和过程。
GLM-130B大模型第一次将千亿模型量化到int4层次,并且在没有量化感知训练的条件下,性能损失也很少,这让模型能够在4块3090(24G)或8块2080Ti(11G)就可以推理GLM-130B模型。且GLM-130B从预训练到评估都是可复现的,所有评估代码也是开源的。这对于不具备大语言业务深耕经验的开发者而言带来了本地快速部署的可能,为行业大语言模型提供了重要的基石支撑。
· ChatGLM千亿模型
ChatGLM千亿模型于2023年3月开启申请内测,目前已暂停了公开申请。该模型是为了解决大基座模型在复杂问题、动态知识、人类对齐场景的不足,基于GLM-130B,引入面向对话的用户反馈,进行指令微调后,得到的对话机器人。
· ChatGLM-6B
在进行ChatGLM千亿模型内测的同时,清华团队也开放出了同样技术的小参数量的版本,方便开发者和研发者们进行学习和开发,并于2023年3月进行了开源。ChatGLM-6B使用了和ChatGPT相似的技术,针对中文问答和对话进行了优化。经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62亿参数的ChatGLM-6B已经能生成相当符合人类偏好的回答。并且62亿的小参数规模模型可以支持在单张2080Ti上进行推理使用,这也使得个人开发者和研究者自己微调和部署ChatGLM-6B成为可能。
ChatGLM-6B开源三个月,Hugging Face全球下载量达到300万,GitHub星标数达到3万。科技部在23年中关村论坛上发布的《中国人工智能大模型地图研究报告》显示ChatGLM-6B位列大模型开源影响力第一名。
· ChatGLM2-6B
2023年6月25日ChatGLM-6B的二代模型ChatGLM2-6B模型开源发布,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上具有更强大的性能表现:1)更强大的性能:基于ChatGLM初代模型的开发经验,全面升级了ChatGLM2-6B的基座模型。ChatGLM2-6B使用了GLM的混合目标函数,经过了1.4T中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在MMLU(+23%)、CEval(+33%)、GSM8K(+571%)、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。2)更长的上下文:基于FlashAttention技术,将基座模型的上下文长度(Context Length)由ChatGLM-6B的2K扩展到了32K,并在对话阶段使用8K的上下文长度训练,允许更多轮次的对话。但当前版本的ChatGLM2-6B对单轮超长文档的理解能力有限,会在后续迭代升级中着重进行优化。3)更高效的推理:基于Multi-Query Attention技术,ChatGLM2-6B有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了42%,INT4量化下,6G显存支持的对话长度由1K提升到了8K。4)更开放的协议:ChatGLM2-6B对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。
近几年来,大模型技术已在全球形成庞大技术群,衍生出涵盖各种参数规模、技术架构、模态和场景的大模型家族。从全球大模型发展态势来看,美国谷歌、OpenAI等企业机构不断引领大模型技术前沿发展,欧洲、俄罗斯、以色列等地的研发团队也投入到大模型研发中。从全球已发布的大模型分布来看,中国和美国大幅领先,超过全球总数的80%,美国的大模型数量居全球之首,中国自2020年起进入大模型快速发展期,整体增长态势与美国保持同步。美国以ChatGPT为代表的人工智能大模型引领新一轮全球人工智能技术发展浪潮,大模型相关新研究、新产品竞相涌现。目前,中国在大模型方面已建立起涵盖理论方法和软硬件技术的体系化研发能力,形成了紧跟世界前沿的大模型技术群,涌现出多个具有行业影响力的预训练大模型。清华大学的开源大模型GLM为中国大模型的发展贡献者积极的力量,更是为行业应用的大模型的本地部署提供的重要的基石,GLM系列模型还在不断的更新和迭代,未来定会有不俗的表现。
ChatGLM系列模型,经过大量标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术对齐人类意图,具备问答、多轮对话、代码生成等能力。在逻辑推理、内容创作、代码生成和信息提取等各业务场景上有着出色的表现。详细信息如下:
· 注入知识及代码预训练,初具推理能力。ChatGLM系列模型具备广博的知识面以及灵活的知识关联能力,并通过注入代码预训练加强了推理能力;可以根据输入的指令提示,迅速联想出相关的大量知识及概念,并找出最适合的推理链条。
· 海量数据预训练,极具潜力的创作能力。ChatGLM大模型基于海量数据预训练,获得了关于语言、知识和创作技巧的深入理解;使得大模型能够释放出极具潜力的创作能力,能够持续源源不断的产生丰富、广泛、新颖的高质量原创内容。
· 根据指令生成代码,并给出代码解释。ChatGLM系列模型经过代码数据的预训练,支持根据自然语言提示快速生成代码,并给出代码解释;同时支持多种编程语言,支持续写、翻译、注释、bugfix等能力。
· 强大的语言理解能力,智能信息提取。ChatGLM系列模型具备强大的语言理解能力,可以深入理解文本信息之间的逻辑关系,从非结构化的文本信息中抽取所需的结构化信息。
现有预训练模型中主要有三种建模方式,分别为自编码模型、自回归模型、编码-解码模型。它们在不同的任务和应用中具有不同的特点和适用性。
a)自编码模型(Autoencoder Model)是一种无监督学习的模型,旨在通过输入数据的重构来学习抽取特征。即对学习数据进行压缩表示,并重建原始数据的过程。编码器将输入数据压缩编码为低维表示,解码器将这个低维表示转换回原始数据空间。自编码模型的目标是最小化重建误差,即输入数据与解码器重建的数据的差异。如BERT模型就是一种自编码器,它通过Mask改变了部分Token,然后试图通过其上下文的其它Token来恢复这些被Mask的Token。自编码模型通过去噪目标学习双向上下文编码器,在语言理解相关的文本表示效果很好。但是存在不能直接用于文本生成的缺点。
b)自回归模型(Autoregressive Model)是一种条件生成模型,使用上下文信息预测下一项,通过在生成序列时考虑先前生成的单词或标记来建模序列的联合概率分布。在生成每个单词时,模型会依赖于前面已经生成的单词。这种模型通常采用序列式的生成方式,对于文本生成任务而言尤为常见。自回归模型通常采用循环神经网络(Recurrent Neural Network,RNN)或者转换器模型(Transformer)来建模序列数据。GPT系列语言模型就是自回归模型。自回归模型从左到右学习语言模型,适合于长文本生成和少样本学习,但不能捕捉上下文词之间的双向依赖关系。
c)编码解码模型(Encoder-Decoder Model)是一种用于序列到序列(Sequence-to-Sequence)任务的模型,它由一个编码器和一个解码器组成。编码器将输入序列编码为一个固定长度的向量,解码器将这个向量作为输入,生成目标序列。编码解码模型通常使用注意力机制(Attention)来捕捉输入序列和输出序列之间的对应关系,编码器使用双向注意力,解码器使用单向注意力,并且有交叉注意力连接两者,在有条件生成任务(seq-seq)中表现良好(文本摘要,回答生成)。经典的编码解码模型是机器翻译模型,其中最著名的是基于Transformer模型的模型。
这三种模型方式在预训练模型中都有广泛的应用,每种模型都有自己的优势和适用性。根据不同的任务和需求,选择适当的模型方式可以帮助提高模型的性能和表现。
以上三种预训练模型框架都不足以在所有NLP任务中具有出色的表现力。以往的尝试通过多任务学习将不同的框架的目标结合起来,从而获得多方的优势,但实际上,由于自编码和自回归目标性质上的不同,简单方案结合不能充分继承两者的优势。基于此,清华大学提出了一种基于自回归空白填充的通用语言模型(GLM),来解决这一挑战。
GLM是一种用于自然语言理解和生成的通用预训练框架,是一种基于自回归空白填充的模型,用于生成文本或完成填空任务,以此来兼容三种训练目标。自回归空白填充模型中,对于采样输入文本中的部分片段,将其进行掩码留白标记,然后预测掩码留白标记所对应的文本片段。与自编码语言模型不同的是,预测的过程是采用自回归的方式,即需要考虑上下文信息。这样即具有自回归模型特性优势,也具备自编码模型的特性。GLM通过引入二维位置编码(2D position embedding)和允许任意顺序的去预测跨度(span),使得它在NLU任务上的表现优于Bert、T5。同时GLM可以通过改变空白的数目和长度来训练不同类型的任务。在同等模型参数大小和训练数据的情况下,GLM的表现在NLU、条件生成和非条件生成这三类任务上的表现都超过Bert、T5、GPT。
当前AI大模型的发展根据模型开发方式可以分为在线大模型和开源大模型。在线大模型是指部署在云端或网络上的大型机器学习或深度学习模型。这些模型通常由云服务提供商或在线平台提供,并通过接口或API的方式进行访问和使用。在线大模型的优点是用户无需关注底层的硬件和软件架构,只需通过网络请求即可获得模型的预测结果。在线大模型还可以实现实时或按需的模型调用,适用于各种应用场景,如语音识别、图像处理和自然语言处理等。OpenAI的GPT系列大模型就是典型的在线大模型,用户可以使用OpenAI的相关产品而享受大模型的服务,而开发者可以通过大模型开放的API接口来访问获取大模型的服务从而提升产品的能力。开源大模型是基于开源软件许可协议发布的大型深度学习模型。通常由研究者、开发者或社区共同开发和维护,并在公开的代码库中提供。优点是可以免费获取和使用,开放的代码使得用户可以自由地查看、修改和定制模型,以适应特定的需求和任务。开源大模型也促进了学术界和业界之间的知识共享和合作。GLM系列大模型就属于这样的开源大模型。因此对于GLM系列模型的应用场景大体可以分为如下三类:
a)用户直接使用GLM系列模型产品化功能
这种场景下用户使用GLM大模型产品化的业务功能,这些功能来源于清华大学或智谱AI公司提供的产品。如:ChatGLM是一款初具问答和对话能力的千亿基座对话模型机器人;CodeGeeX是一款具有130亿参数,支持20多种编程语言,具备代码生成、续写、翻译等能力的编程大模型;CogView是一款图像多模态大模型,基于Transformer架构的文本生成图像模型,支持根据指令生成和编辑图像,实现“以文生图”和“以文改图”的功能。
b)开发者通过API获取GLM系列模型在线服务
智谱AI将GLM系列模型产品均提供了可供开发者使用的API,并且创立了AI开放平台,搭建了基于GLM系列大模型MaaS开放平台,新一代认知智能大模型,生成式AI时代的基座,基于领先的千亿级多语言、多模态预训练模型,打造高效率、通用化的“模型即服务”AI开发新范式。智谱AI为方便用户使用,提供了SDK和原生HTTP来实现模型API的调用,开发者可以使用SDK进行调用以获得更好的编程体验。企业用户已经开始使用GLM大模型API接入功能来提升自身产品能力。
c)开发者本地部署GLM系列模型服务并进行私有化定制模型业务
GLM系列模型属于开源大模型,可支持开发者进行本地部署GLM系列大模型,本地部署可根据具体的行业特性进行深度定制微调,私有化定制属于行业自己的大模型应用,让大模型能够在行业内快速落地和赋能,如利用ChatGLM + Langchain进行本地知识库的搭建、行业版的ChatGLM-6B微调等。很多企业用户已经开始使用开源GLM大模型进行私有化部署来提出行业版大模型。
GLM属于开源大模型,同时具备开源大模型和在线大模型的所有开发范式,为用户、开发者、企业提供了强大的千亿级规模大模型快速在行业内落地生花的基石和指导,相信基于GLM开源大模型的人工智能的开发和应用会有新的突破,也期待创新技术和应用的不断涌现。
近几年来,大模型技术已在全球形成庞大技术群,衍生出涵盖各种参数规模、技术架构、模态和场景的大模型家族。美国谷歌、OpenAI等企业机构不断引领大模型技术前沿发展,美国的大模型数量居全球之首,中国自2020年起进入大模型快速发展期,整体增长态势与美国保持同步。美国以ChatGPT为代表的人工智能大模型引领新一轮全球人工智能技术发展浪潮,大模型相关新研究、新产品竞相涌现。目前,中国在大模型方面已建立起涵盖理论方法和软硬件技术的体系化研发能力,形成了紧跟世界前沿的大模型技术群,涌现出多个具有行业影响力的预训练大模型。
清华大学研发的GLM大模型是一款具有重要意义的语言模型,它在中文和英文语言处理方面均表现出了强大的能力,为中国大模型的发展贡献着积极的力量,更是为行业应用的大模型的本地部署提供的重要的基石。未来,随着GLM大模型的不断完善和升级,将会在更多领域得到应用,推动自然语言处理技术的发展和进步。
\textbf{\textit{J\mathfrak{J}J.通义千问}}
通义千问由阿里巴巴基于“通义”大模型研发,于2023年4月正式发布。2023年8月,阿里云开源了Qwen(通义千问)系列工作,当前开源模型的参数规模为70亿(7B)和140亿(14B)。本次开源包括基础模型Qwen,即Qwen-7B和Qwen-14B,以及对话模型Qwen-Chat,即Qwen-7B-Chat和Qwen-14B-Chat。
它能够以自然语言方式响应人类的各种指令,拥有强大的能力,如回答问题、创作文字、编写代码、提供各类语言的翻译服务、文本润色、文本摘要以及角色扮演对话等。借助于阿里云丰富的算力资源和平台服务,通义千问能够实现快速迭代和创新功能。此外,阿里巴巴完善的产品体系以及广泛的应用场景使得通义千问更具可落地性和市场可接受程度。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/通义千问.png}
\caption{通义千问}
\label{fig93}
\end{figure}
\textbf{\textit{K\mathfrak{K}K.Baichuan}}
Baichuan是由百川智能开发的开源可商用的语言大模型,在权威的中文和英文benchmark上均取得同尺寸最好的效果,其基于Transformer解码器架构。
Baichuan-7B是在大约1.2万亿字符上训练的70亿参数模型,支持中英双语,最大4096的上下文窗口长度。
Baichuan-13B在Baichuan-7B的基础上进一步扩大参数量到130亿,并且在高质量的语料上训练了1.4万亿字符,超过LLaMA-13B 40%,是当前开源13B尺寸下训练数据量最多的模型。其支持中英双语,使用ALiBi位置编码,最大4096的上下文窗口长度,使用rotary-embedding,是现阶段被大多数模型采用的位置编码方案,具有很好的外推性。百川同时开源了预训练和对齐模型,预训练模型是面向开发者的“基座”,而对齐模型则面向广大需要对话功能的普通用户。除了原始权重,为实现更高效的推理,百川开源了INT8和INT4的量化版本,相对非量化版本在几乎没有效果损失的情况下大大降低了部署的机器资源需求。
Baichuan 2是百川智能推出的新一代开源大语言模型,Baichuan2-7B和Baichuan2-13B,均基于2.6万亿Tokens的高质量语料训练,在保留了上一代开源模型良好的生成与创作能力,流畅的多轮对话能力以及部署门槛较低等众多特性的基础上,两个模型在数学、代码、安全、逻辑推理、语义理解等能力有显著提升。Baichuan 2在多个权威的中文、英文和多语言的通用、领域benchmark上取得同尺寸最佳的效果。本次发布包含有7B、13B的Base和Chat版本,并提供了Chat版本的4bits量化。
2023年10月30日,百川智能发布Baichuan2-192K大模型,上下文窗口长度高达192K,发布时是全球最长的上下文窗口(但不久后就被零一万物的首款开源大模型———Yi打破纪录达到200K,可直接处理40万汉字超长文本输入)。Baichuan2-192K能够一次处理约35万个汉字,是目前支持长上下文窗口最优秀大模型Claude2(支持100K上下文窗口,实测约8万字)的4.4倍。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/百川大模型.png}
\caption{Baixhuan}
\label{fig94}
\end{figure}
\textbf{\textit{L\mathfrak{L}L.Fine-tune}}
微调(fine-tuning)是深度学习中迁移学习的一种方法,其中预训练模型的权重会在新数据上进行训练。在机器学习领域当中,微调是指在已经训练好的模型基础上,进一步调整,让你模型的输出能够更符合你的预期。透过微调,我们可以不用重新训练一个新的模型,这让我们能够省去训练新模型的高昂成本。微调可以在整个神经网络上执行,也可以仅在其部分层上执行,此时未进行微调的层会被“冻结”(在反向传播步骤中不更新)。模型还可以通过“适配器”进行增强,适配器的参数远少于原始模型,通过调整适配器的权重并保持模型的其余权重不变的方式,以参数有效的方式进行微调。
对于一些体系结构,比如卷积神经网络,通常会将较早的层(靠近输入层的层)冻结,因为它们捕捉到较低层次的特征,而较后的层通常能够识别更高层次的特征,这些特征可能更相关于模型训练的任务。
对于在大型和通用语料库上进行预训练的模型,通常通过重用模型的参数作为起点,并添加一个从头开始训练的任务特定层进行微调。对整个模型进行微调也很常见,通常会产生更好的结果,但计算成本更高。
微调通常通过监督学习完成,但也有使用弱监督进行模型微调的技术。微调可以与基于人类反馈的强化学习目标相结合,以生成像ChatGPT(GPT-3的微调版本)和Sparrow等语言模型。
fine-tuning已经成为了使用DL网络的一个常用技巧。使用深度网络做图像处理任务时,使用一个在大的数据集上预训练好的模型在自己数据上微调往往可以得到比直接用自己数据训练更好的效果,这是因为ImageNet上预训练的模型参数从微调一开始就处于一个较好的位置,这样微调能够更快的使网络收敛。对于相同类别的任务我们可以默认这样去做比较好。然而当我们要做一个不同的任务,那么可能直接拿预训练的模型进行微调就不是最好的了。一般我们在训练from scratch的时候往往要在一些超大型的数据集上训练,一个目的是为了让训练得到的特征(尤其是底层特征)更加多样。而从generative pre-training(生成式预训练)到discriminative fine-tuning(判别微调)的过程是一个对泛化特征进行面向任务的特化的过程。首先,如果你将底层特征可视化出来,会发现底层特征多是一些边、角之类的基础几何形状,高层特征可能会发生一些有趣的变化,直接反映出你的task。在大数据集上进行预训练的目的之一是为了获得丰富、一般化的底层特征,换言之就是学到丰富的“基础几何形状”。有了这些丰富的基础几何形状,等过渡到小数据集上fine-tune的时候,就可以通过它们组合出上层具有强判别力的特征。此时,如果你再将组合出来的上层特征可视化,就会发现它们已经有模有样了。底层特征非常重要,如果底层特征不够好,特征类型不够充分,很可能训练不出来好的高层抽象。这就是为什么需要在大规模数据集上进行genertive training的原因之一。网络越深,底层的参数越难得到有效训练,这也是为什么经常有人用vggNet fine-tune的原因之一。使用backpropagation(反向传播)进行训练的时候残差逐层传递,有可能到底层的时候残差就很小了(gradient vanishing),导致底层的参数不动。
fine-tune就是直接从别人已经训练好的网络上拷贝参数,然后针对自己的数据训练新的模型。这时候需要比较小的learning-rate,因为要在不破坏原有模型的情况下fit自己的数据,fine-tune的好处就是可以直接获得我们难以或者无法训练的底层参数。
大模型微调的步骤:在选定相关数据集和预训练模型的基础上,通过设置合适的超参数并对模型进行必要的调整,使用特定任务的数据对模型进行训练以优化其性能。见图95,大模型微调包含以下四个核心步骤:
a)数据准备:选择与任务相关的数据集,对数据进行预处理,包括清洗、分词、编码等。
b)选择基础模型:选择一个预训练好的大语言模型,如BERT、GPT-3等。
c)设置微调参数:设定学习率、训练轮次(epochs)、批处理大小(batch size)等超参数。根据需要设定其他超参数,如权重衰减、梯度剪切等。
d)微调流程:加载预训练的模型和权重;根据任务需求对模型进行必要的修改,如更改输出层;选择合适的损失函数和优化器;使用选定的数据集进行微调训练,包括前向传播、损失计算、反向传播和权重更新。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/fine-tune过程.png}
\caption{fine-tune过程}
\label{fig95}
\end{figure}
微调过程有很多重要的方法,其中非常重要的就是RLHF(Reinforcement Learning from Human Feedback),一种利用人类反馈作为奖励信号来训练强化学习模型的方法,旨在提升模型生成文本等内容的质量,使其更符合人类偏好。是对齐微调中的重要概念。
强化学习(Reinforcement Learning)结合人类反馈(Human Feedback)来微调大语言模型(Large Language Models)的一般过程:
1)使用监督数据微调语言模型:这一步与传统的fine-tuning类似,即使用标注过的数据来调整预训练模型的参数,使其更好地适应特定任务或领域。见图96。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/传统微调语言模型.png}
\caption{传统微调语言模型}
\label{fig96}
\end{figure}
2)训练奖励模型:奖励模型用于评估文本序列的质量,它接受一个文本作为输入,并输出一个数值,表示该文本符合人类偏好的程度。训练数据通常由多个语言模型生成的文本序列组成,这些序列经过人工评估或使用其他模型(如ChatGPT)进行打分。这个奖励信号在后续的强化学习训练中至关重要,因为它指导模型生成更符合人类期望的文本。见图97。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/fine-tune训练奖励模型.png}
\caption{fine-tune训练奖励模型}
\label{fig97}
\end{figure}
3)训练RL模型:在强化学习框架中,需要定义状态空间、动作空间、策略函数和价值函数。状态空间是输入序列的分布,动作空间是所有可能的token(即词汇表中的词)。价值函数结合了奖励模型的输出和策略约束,用于评估在给定状态下采取特定动作的价值。策略函数就是经过微调的大型语言模型,它根据当前状态选择下一个动作(token),以最大化累计奖励。见图98。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/fine-tune训练RL模型.png}
\caption{fine-tune训练RL模型}
\label{fig98}
\end{figure}
大模型微调的方式可通过全量调整所有参数以充分适应新任务,或采用参数高效微调技术仅优化部分参数以实现快速且低成本的迁移学习。全量微调(Full Fine-Tuning)利用特定任务数据调整预训练模型的所有参数,以充分适应新任务。它依赖大规模计算资源,但能有效利用预训练模型的通用特征。参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)旨在通过最小化微调参数数量和计算复杂度,实现高效的迁移学习。它仅更新模型中的部分参数,显著降低训练时间和成本,适用于计算资源有限的情况。PEFT技术包括Prefix Tuning、Prompt Tuning、Adapter Tuning等多种方法,可根据任务和模型需求灵活选择,见图99。
a)Prefix Tuning:在输入前添加可学习的virtual tokens作为Prefix。特点:仅更新Prefix参数,Transformer其他部分固定。优点:减少需要更新的参数数量,提高训练效率。
b)Prompt Tuning;在输入层加入prompt tokens。特点:简化版的Prefix Tuning,无需MLP调整。优点:随着模型规模增大,效果接近full fine-tuning。
c)P-Tuning:将Prompt转换为可学习的Embedding层,并用MLP+LSTM处理。特点:解决Prompt构造对下游任务效果的影响。优点:提供更大的灵活性和更强的表示能力。
d)P-Tuning v2:在多层加入Prompt tokens。特点:增加可学习参数数量,对模型预测产生更直接影响。优点:在不同任务和模型规模上实现更好的性能。
e)Adapter Tuning:设计Adapter结构并嵌入Transformer中。特点:仅对新增的Adapter结构进行微调,原模型参数固定。优点:保持高效性的同时引入少量额外参数。
f)LoRA:在矩阵相乘模块中引入低秩矩阵来模拟full fine-tuning。特点:更新语言模型中的关键低秩维度。优点:实现高效的参数调整,降低计算复杂度。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/参数高效微调.png}
\caption{参数高效微调}
\label{fig99}
\end{figure}
大型语言模型通过微调可以适应不同任务,而中文微调数据集为模型在中文领域的应用提供了关键资源。可支持微调的模型见图100,常用中文微调数据集见图101。常用的中文数据集有:中文问答数据集(如CMRC 2018、DRCD等),用于训练问答系统;中文情感分析数据集(如ChnSentiCorp、Fudan News等),用于训练情感分类模型;中文文本相似度数据集(如LCQMC、BQ Corpus等),用于训练句子对匹配和相似度判断任务;中文摘要生成数据集(如LCSTS、NLPCC等),用于训练文本摘要生成模型。中文对话数据集(如LCCC、ECDT等),用于训练聊天机器人或对话系统。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/支持微调的模型.png}
\caption{支持微调的模型}
\label{fig100}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/大模型微调开源中文数据集.png}
\caption{大模型微调开源中文数据集}
\label{fig101}
\end{figure}
\textbf{\textit{M\mathfrak{M}M.LLM小结}}
当前大模型已经在很多领域开始产品化落地,除了ChatGPT这类大家熟知的产品,主要还有以下一些主流的应用:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/LLM应用.png}
\caption{LLM应用}
\label{fig102}
\end{figure}
1)办公Copilot类产品:微软首先尝试使用大模型能力来接入旗下的Office系列软件,在Word中可以对文档进行总结并提出修改编辑的建议,也可以对所给的文章进行总结;此前一直头疼Excel各种复杂操作的用户现在也降低了使用门槛,可以直接通过描述就处理数据;PowerPoint中通过对提出要求识别就能自动生成一份展示内容;在Outlook中直接使用自然语言来生成邮件内容等功能,实现真正的AI秘书。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/办公Copliot.png}
\caption{办公Copilot}
\label{fig103}
\end{figure}
2)Github Copilot类产品:直接通过对话方式进行各种功能代码的生成,包括帮忙写测试用例,解释代码片段和debug程序问题,这个功能对解放程序员生产力取得了革命性的进步,能让开发人员更多的关注到业务理解,系统设计,架构设计等更高级需求的事情上。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/GitHub Copilot.png}
\caption{Github Copilot}
\label{fig104}
\end{figure}
2)教育知识类产品:得益于大模型强大的理解以及知识储备,很多公司也嵌入其知识类产品进行应用,比如chatPDF就可以帮助经常看论文的科研人员快速地通过问答的方式进行文章的信息提取,理解以及总结重要内容,大大提升了阅读新论文的效率;对于学习语言的人来说,一款叫Call Annie的软件基本能取代口语老师的角色,并且可以无限时间,随时随地进行口语对话练习。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/ChatPDF.png}
\caption{ChatPDF}
\label{fig105}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Call Annie.png}
\caption{Call Annie}
\label{fig106}
\end{figure}
4)搜索引擎和推荐系统:大模型可以应用于企业的搜索引擎和推荐系统,通过深度学习算法,对用户的搜索意图进行准确理解,提供更精准的搜索结果和个性化的推荐内容。这有助于提升用户体验,增加用户黏性,提高企业的转化率和销售额。
5)公司业务定制化大模型:大模型具有通用性能力,但是在很多零样本的场景的表现依然比不上那个领域正在使用的产品,例如在某些垂直领域,包括工业领域,医药领域,管理领域等场景下进行专业问题,研究型问题的使用依然需要特定场景的数据进行微调,这种定制化的服务也能给企业带来巨大的效率提升和节省成本的收益,属于比较有前景的业务。
6)计算相关上下游相关产业:很多公司正在积极探索基于GPU、FPGA和ASIC等硬件加速制造技术,以支持大模型的训练和推理速度。此外,云计算技术的发展也为大模型的训练提供了更多的计算资源支持,未来科技公司将积极探索基于云计算的分布式训练和推理技术。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/nVIDIA.png}
\caption{nVIDIA}
\label{fig107}
\end{figure}
除这些外还包括算法优化、隐私和数据安全以及模型可解释性等方面的研究和应用,每天还有很多大模型的应用正在不断涌现,大模型在未来仍然有很大的发展潜力,国内的优秀大模型代表例如百度文心大模型也正在搭建全系统产业化的大模型全景。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/文心全景图.png}
\caption{文心全景图}
\label{fig108}
\end{figure}
大模型也存在一些现实挑战:
1.数据安全隐患:一方面大模型训练需要大量的数据支持,但很多数据涉及到机密以及个人隐私问题,如客户信息、交易数据等。需要保证在训练大模型的同时保障数据安全,防止数据泄露和滥用。OpenAI在发布ChatGPT模型的时候用了数月来保证数据安全以及符合人类正常价值观标准。
2.成本高昂:大模型的训练和部署需要大量的计算资源和人力资源,成本非常高昂。对于一些中小型企业而言,难以承担这些成本,也难以获得足够的技术支持和资源。
3.无法保障内容可信:大模型会编造词句,无法保障内容真实可信、有据可查。当前使用者只能根据自己需求去验证生成的内容是否真实可信,很难具有权威说服力。
4.无法实现成本可控:直接训练和部署千亿级参数大模型成本过高,企业级应用应使用百亿级基础模型,根据不同需求训练不同的垂直模型,企业则只需要负担垂直训练成本。但是,如何实现高效的垂直训练,如何控制成本,仍是大模型面临的问题之一。
以上挑战依然有很大空间值得改进,需要进一步研究和探索新的技术和方法。比如可以采用数据加密、隐私保护等技术来保障数据安全;可以通过改进模型架构、优化训练算法、利用分布式计算等方式来提高大模型的效率和性能;此外,还可以通过开源和共享模型资源来降低成本、促进大模型的普及和应用等方式。
大模型的发展是当前人工智能时代科技进步的必然趋势,甚至可以媲美工业革命般的历史意义。近期,有MIT的研究者发现语言模型竟然能理解这个世界的时间和空间,这项研究也进一步说明大模型还有很多隐藏的能力等着我们去发掘。长期看,训练出通用人工智能技术(AGI)应该只是时间问题。作为相关从业人员,可以开发更高效,更稳定的训练算法,不断探索大模型的上限,作为普通人,我们更需要拥抱这个技术,至少在日常工作和生活中也能享受到其带来的巨大便利。
大型语言模型(LLM)的出现标志着自然语言处理领域的重大进步,它为我们提供了强大的工具来处理和理解自然语言。通过深入浅出地解读大型语言模型,我们可以更好地认识到它在人工智能领域的重要性以及对未来发展的影响。LLM不仅在文本生成、问答系统、摘要生成等任务上取得了显著成就,还在许多实际应用中展现了巨大潜力。然而,我们也应该意识到,LLM在实际应用中面临着诸多挑战,如隐私保护、法律合规、跨语言适应等方面,需要我们持续努力解决。未来,随着技术的不断发展和创新,我们可以期待着更多优化与创新,例如模型压缩与优化技术、多模态模型的整合、小样本学习等,这些将进一步推动大型语言模型向更广泛的应用领域拓展,并为人们的生活和工作带来更多便利与创新。
\subsection{计算机视觉模型(Computer Vision Models,CV)}
计算机视觉(Computer Vision)是人工智能领域的一个重要分支。它的目的是:看懂图片里的内容。计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取“信息”的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。
计算机视觉任务包括用于获取,处理,分析和理解数字图像的方法,以及从现实世界中提取高维数据以便例如以决策的形式产生数字或符号信息。在这种情况下理解意味着将视觉图像(视网膜的输入)转换为可以与其他思维过程交互并引出适当行动的世界描述。这种图像理解可以看作是利用几何学,物理学,统计学和学习理论构建的模型从图像数据中解开符号信息。作为一门科学学科,计算机视觉关注从图像中提取信息的人工系统背后的理论。图像数据可以采用多种形式,例如视频序列,来自多个相机的视图或来自医学扫描仪的多维数据。作为一门技术学科,计算机视觉试图将其理论和模型应用于计算机视觉系统的构建。计算机视觉的子域包括场景重建,事件检测,视频跟踪,对象识别,3D姿态估计,学习,索引,运动估计和图像恢复。
人的大脑皮层,有差不多70%都是在处理视觉信息。视觉是人类获取信息最主要的渠道,没有之一。在网络世界,照片和视频(图像的集合)也正在发生爆炸式的增长。图109是网络上新增数据的占比趋势图。灰色是结构化数据,蓝色是非结构化数据(大部分都是图像和视频)。可以很明显的发现,图片和视频正在以指数级的速度在增长。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/网络信息量变化图.png}
\caption{网络信息量变化图}
\label{fig109}
\end{figure}
而在计算机视觉出现之前,图像对于计算机来说是黑盒的状态。一张图片对于机器只是一个文件。机器并不知道图片里的内容到底是什么,只知道这张图片是什么尺寸,多少MB,什么格式的。如果计算机、人工智能想要在现实世界发挥重要作用,就必须看懂图片。这就是计算机视觉要解决的问题。
目前主流的基于深度学习的机器视觉方法,其原理跟人类大脑工作的原理比较相似。人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。机器的方法也是类似:构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类。
对于人类来说看懂图片是一件很简单的事情,但是对于机器来说这是一个非常难的事情,有2个典型的难点:1)特征难以提取:同一只猫在不同的角度,不同的光线,不同的动作下。像素差异是非常大的。就算是同一张照片,旋转90度后,其像素差异也非常大。所以图片里的内容相似甚至相同,但是在像素层面,其变化会非常大。这对于特征提取是一大挑战。2)需要计算的数据量巨大:手机上随便拍一张照片就是1000*2000像素的。每个像素RGB3个参数,一共有1000X2000X3=6,000,000。随便一张照片就要处理600万个参数,再算算现在越来越流行的4K视频。就知道这个计算量级有多恐怖了。
而深度学习中出现的CNN模型,很好的解决了上面的难题:CNN可以有效的提取图像里的特征;CNN可以将海量的数据(不影响特征提取的前提下)进行有效的降维,大大减少了对算力的要求。
视觉识别是计算机视觉的关键组成部分,如图像分类、定位和检测。神经网络和深度学习的最新进展极大地推动了这些最先进的视觉识别系统的发展。接下来介绍5种主要的计算机视觉技术。
\textbf{1)图像分类}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/图像分类.png}
\caption{图像分类}
\label{fig110}
\end{figure}
给定一组各自被标记为单一类别的图像,我们对一组新的测试图像的类别进行预测,并测量预测的准确性结果,这就是图像分类问题。图像分类问题需要面临以下几个挑战:视点变化、尺度变化、类内变化、图像变形、图像遮挡、照明条件和背景杂斑。
编写一个图像分类算法,计算机视觉研究人员提出了一种基于数据驱动的方法。该算法并不是直接在代码中指定每个感兴趣的图像类别,而是为计算机每个图像类别都提供许多示例,然后设计一个学习算法,查看这些示例并学习每个类别的视觉外观。也就是说,首先积累一个带有标记图像的训练集,然后将其输入到计算机中,由计算机来处理这些数据。
因此,可以按照下面的步骤来分解:输入是由N个图像组成的训练集,共有K个类别,每个图像都被标记为其中一个类别。然后,使用该训练集训练一个分类器,来学习每个类别的外部特征。最后,预测一组新图像的类标签,评估分类器的性能,我们用分类器预测的类别标签与其真实的类别标签进行比较。
目前较为流行的图像分类架构是卷积神经网络(CNN)———将图像送入网络,然后网络对图像数据进行分类。卷积神经网络从输入“扫描仪”开始,该输入“扫描仪”也不会一次性解析所有的训练数据。比如输入一个大小为100100的图像,你也不需要一个有10,000个节点的网络层。相反,你只需要创建一个大小为1010的扫描输入层,扫描图像的前1010个像素。然后,扫描仪向右移动一个像素,再扫描下一个1010的像素,这就是滑动窗口。见图110。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/CNN运用于计算机视觉.png}
\caption{CNN在计算机视觉中的应用}
\label{fig111}
\end{figure}
输入数据被送入卷积层,而不是普通层。每个节点只需要处理离自己最近的邻近节点,卷积层也随着扫描的深入而趋于收缩。除了卷积层之外,通常还会有池化层。池化是过滤细节的一种方法,常见的池化技术是最大池化,它用大小为2*2的矩阵传递拥有最多特定属性的像素。
现在,大部分图像分类技术都是在ImageNet数据集上训练的,ImageNet数据集中包含了约120万张高分辨率训练图像。测试图像没有初始注释(即没有分割或标签),并且算法必须产生标签来指定图像中存在哪些对象。
现存的很多计算机视觉算法,都是被来自牛津、INRIA和XRCE等顶级的计算机视觉团队在ImageNet数据集上实现的。通常来说,计算机视觉系统使用复杂的多级管道,并且,早期阶段的算法都是通过优化几个参数来手动微调的。
第一届ImageNet竞赛的获奖者是Alex Krizhevsky(NIPS 2012),他在Yann LeCun开创的神经网络类型基础上,设计了一个深度卷积神经网络。该网络架构除了一些最大池化层外,还包含7个隐藏层,前几层是卷积层,最后两层是全连接层。在每个隐藏层内,激活函数为线性的,要比逻辑单元的训练速度更快、性能更好。除此之外,当附近的单元有更强的活动时,它还使用竞争性标准化来压制隐藏活动,这有助于强度的变化。就硬件要求而言,Alex在2个Nvidia GTX 580 GPU(速度超过1000个快速的小内核)上实现了非常高效的卷积网络。GPU非常适合矩阵间的乘法且有非常高的内存带宽。这使他能在一周内完成训练,并在测试时快速的从10个块中组合出结果。如果我们能够以足够快的速度传输状态,就可以将网络分布在多个内核上。
随着内核越来越便宜,数据集越来越大,大型神经网络的速度要比老式计算机视觉系统更快。在这之后,已经有很多种使用卷积神经网络作为核心,并取得优秀成果的模型,如ZFNet(2013),GoogLeNet(2014),VGGNet(2014),RESNET(2015),DenseNet(2016)等。
\textbf{2)对象检测}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/对象检测.png}
\caption{对象检测}
\label{fig112}
\end{figure}
识别图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签。这不同于分类/定位任务———对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位。在对象检测中,你只有2个对象分类类别,即对象边界框和非对象边界框。例如,在汽车检测中,你必须使用边界框检测所给定图像中的所有汽车。
如果使用图像分类和定位图像这样的滑动窗口技术,我们则需要将卷积神经网络应用于图像上的很多不同物体上。由于卷积神经网络会将图像中的每个物体识别为对象或背景,因此我们需要在大量的位置和规模上使用卷积神经网络,但是这需要很大的计算量。
为了解决这一问题,神经网络研究人员建议使用区域(region)这一概念,这样我们就会找到可能包含对象的“斑点”图像区域,这样运行速度就会大大提高。第一种模型是基于区域的卷积神经网络(R-CNN),其算法原理为:在R-CNN中,首先使用选择性搜索算法扫描输入图像,寻找其中的可能对象,从而生成大约2,000个区域建议;然后,在这些区域建议上运行一个卷积神网络;最后,将每个卷积神经网络的输出传给支持向量机(SVM),使用一个线性回归收紧对象的边界框。见图113。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/R-CNN在计算机视觉中的应用.png}
\caption{R-CNN在计算机视觉中的应用}
\label{fig113}
\end{figure}
实质上,我们将对象检测转换为一个图像分类问题。但是也存在这些问题:训练速度慢,需要大量的磁盘空间,推理速度也很慢。
R-CNN的第一个升级版本是Fast R-CNN,通过使用了2次增强,大大提了检测速度。在建议区域之前进行特征提取,因此在整幅图像上只能运行一次卷积神经网络;用一个softmax层代替支持向量机,对用于预测的神经网络进行扩展,而不是创建一个新的模型。见图114。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Fast R-CNN在计算机视觉中的应用.png}
\caption{Fast R-CNN在计算机视觉中的应用}
\label{fig114}
\end{figure}
Fast R-CNN的运行速度要比R-CNN快的多,因为在一幅图像上它只能训练一个CNN。但是选择性搜索算法生成区域提议仍然要花费大量时间。
Faster R-CNN是基于深度学习对象检测的一个典型案例。该算法用一个快速神经网络代替了运算速度很慢的选择性搜索算法:通过插入区域提议网络(RPN),来预测来自特征的建议。RPN决定查看“哪里”,这样可以减少整个推理过程的计算量。 RPN快速且高效地扫描每一个位置,来评估在给定的区域内是否需要作进一步处理,其实现方式如下:通过输出k个边界框建议,每个边界框建议都有2个值———代表每个位置包含目标对象和不包含目标对象的概率。见图115。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Faster R-CNN在计算机视觉中的应用.png}
\caption{Faster R-CNN在计算机视觉中的应用}
\label{fig115}
\end{figure}
一旦我们有了区域建议,就直接将它们送入Fast R-CNN。并且,我们还添加了一个池化层、一些全连接层、一个softmax分类层以及一个边界框回归器。
总之,Faster R-CNN的速度和准确度更高。值得注意的是,虽然以后的模型在提高检测速度方面做了很多工作,但很少有模型能够大幅度的超越Faster R-CNN。换句话说,Faster R-CNN可能不是最简单或最快速的目标检测方法,但仍然是性能最好的方法之一。
近年来,主要的目标检测算法已经转向更快、更高效的检测系统。这种趋势在You Only Look Once(YOLO),Single Shot MultiBox Detector(SSD)和基于区域的全卷积网络(R-FCN)算法中尤为明显,这三种算法转向在整个图像上共享计算。因此,这三种算法和上述的3种造价较高的R-CNN技术有所不同。
\textbf{3)目标跟踪}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/目标跟踪.png}
\caption{目标跟踪}
\label{fig116}
\end{figure}
目标跟踪,是指在特定场景跟踪某一个或多个特定感兴趣对象的过程。传统的应用就是视频和真实世界的交互,在检测到初始对象之后进行观察。现在,目标跟踪在无人驾驶领域也很重要,例如Uber和特斯拉等公司的无人驾驶。
根据观察模型,目标跟踪算法可分成2类:生成算法和判别算法。
a)生成算法使用生成模型来描述表观特征,并将重建误差最小化来搜索目标,如主成分分析算法(PCA)。
c)判别算法用来区分物体和背景,其性能更稳健,并逐渐成为跟踪对象的主要手段(判别算法也称为Tracking-by-Detection,深度学习也属于这一范畴)。
为了通过检测实现跟踪,我们检测所有帧的候选对象,并使用深度学习从候选对象中识别想要的对象。有两种可以使用的基本网络模型:堆叠自动编码器(SAE)和卷积神经网络(CNN)。
目前,最流行的使用SAE进行目标跟踪的网络是Deep Learning Tracker(DLT),它使用了离线预训练和在线微调。其过程为:离线无监督预训练使用大规模自然图像数据集获得通用的目标对象表示,对堆叠去噪自动编码器进行预训练。堆叠去噪自动编码器在输入图像中添加噪声并重构原始图像,可以获得更强大的特征表述能力。将预训练网络的编码部分与分类器合并得到分类网络,然后使用从初始帧中获得的正负样本对网络进行微调,来区分当前的对象和背景。DLT使用粒子滤波作为意向模型(motion model),生成当前帧的候选块。分类网络输出这些块的概率值,即分类的置信度,然后选择置信度最高的块作为对象。在模型更新中,DLT使用有限阈值。
鉴于CNN在图像分类和目标检测方面的优势,它已成为计算机视觉和视觉跟踪的主流深度模型。一般来说,大规模的卷积神经网络既可以作为分类器和跟踪器来训练。具有代表性的基于卷积神经网络的跟踪算法有全卷积网络跟踪器(FCNT)和多域卷积神经网络(MD Net)。
FCNT充分分析并利用了VGG模型中的特征映射,这是一种预先训练好的ImageNet数据集,并有如下效果:
· 卷积神经网络特征映射可用于定位和跟踪。
· 对于从背景中区分特定对象这一任务来说,很多卷积神经网络特征映射是噪音或不相关的。
· 较高层捕获对象类别的语义概念,而较低层编码更多的具有区性的特征,来捕获类别内的变形。
因此,FCNT设计了特征选择网络,在VGG网络的卷积4-3和卷积5-3层上选择最相关的特征映射。然后为避免噪音的过拟合,FCNT还为这两个层的选择特征映射单独设计了两个额外的通道(即SNet和GNet):GNet捕获对象的类别信息;SNet将该对象从具有相似外观的背景中区分出来。
这两个网络的运作流程如下:都使用第一帧中给定的边界框进行初始化,以获取对象的映射。而对于新的帧,对其进行剪切并传输最后一帧中的感兴趣区域,该感兴趣区域是以目标对象为中心。最后,通过SNet和GNet,分类器得到两个预测热映射,而跟踪器根据是否存在干扰信息,来决定使用哪张热映射生成的跟踪结果。FCNT如图117所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/FCNT.png}
\caption{FCNT}
\label{fig117}
\end{figure}
与FCNT的思路不同,MD Net使用视频的所有序列来跟踪对象的移动。上述网络使用不相关的图像数据来减少跟踪数据的训练需求,并且这种想法与跟踪有一些偏差。该视频中的一个类的对象可以是另一个视频中的背景,因此,MD Net提出了“多域”这一概念,它能够在每个域中独立的区分对象和背景,而一个域表示一组包含相同类型对象的视频。
如图118所示,MD Net可分为两个部分,即K个特定目标分支层和共享层:每个分支包含一个具有softmax损失的二进制分类层,用于区分每个域中的对象和背景;共享层与所有域共享,以保证通用表示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/MD Net.png}
\caption{MD Net}
\label{fig118}
\end{figure}
近年来,深度学习研究人员尝试使用了不同的方法来适应视觉跟踪任务的特征,并且已经探索了很多方法:应用到诸如循环神经网络(RNN)和深度信念网络(DBN)等其他网络模型;设计网络结构来适应视频处理和端到端学习,优化流程、结构和参数;或者将深度学习与传统的计算机视觉或其他领域的方法(如语言处理和语音识别)相结合。
\textbf{4)语义分割}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/语义分割.png}
\caption{语义分割}
\label{fig119}
\end{figure}
计算机视觉的核心是分割,它将整个图像分成一个个像素组,然后对其进行标记和分类。特别地,语义分割试图在语义上理解图像中每个像素的角色(比如,识别它是汽车、摩托车还是其他的类别)。如上图所示,除了识别人、道路、汽车、树木等之外,我们还必须确定每个物体的边界。因此,与分类不同,我们需要用模型对密集的像素进行预测。
与其他计算机视觉任务一样,卷积神经网络在分割任务上取得了巨大成功。最流行的原始方法之一是通过滑动窗口进行块分类,利用每个像素周围的图像块,对每个像素分别进行分类。但是其计算效率非常低,因为我们不能在重叠块之间重用共享特征。
解决方案就是加州大学伯克利分校提出的全卷积网络(FCN),它提出了端到端的卷积神经网络体系结构,在没有任何全连接层的情况下进行密集预测。 这种方法允许针对任何尺寸的图像生成分割映射,并且比块分类算法快得多,几乎后续所有的语义分割算法都采用了这种范式。见图120。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/FCN.png}
\caption{FCN}
\label{fig120}
\end{figure}
但是,这也仍然存在一个问题:在原始图像分辨率上进行卷积运算非常昂贵。为了解决这个问题,FCN在网络内部使用了下采样和上采样:下采样层被称为条纹卷积(striped convolution);而上采样层被称为反卷积(transposed convolution)。
尽管采用了上采样和下采样层,但由于池化期间的信息丢失,FCN会生成比较粗糙的分割映射。SegNet是一种比FCN(使用最大池化和编码解码框架)更高效的内存架构。在SegNet解码技术中,从更高分辨率的特征映射中引入了shortcut/skip connections,以改善上采样和下采样后的粗糙分割映射。见图121。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/SegNet.png}
\caption{SegNet}
\label{fig121}
\end{figure}
目前的语义分割研究都依赖于完全卷积网络,如空洞卷积(Dilated Convolutions)、DeepLab和RefineNet。
\textbf{5)实例分割}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/实例分割.png}
\caption{实例分割}
\label{fig122}
\end{figure}
除了语义分割之外,实例分割将不同类型的实例进行分类,比如用5种不同颜色来标记5辆汽车。分类任务通常来说就是识别出包含单个对象的图像是什么,但在分割实例时,我们需要执行更复杂的任务。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界、差异和彼此之间的关系。
到目前为止,我们已经看到了如何以多种有趣的方式使用卷积神经网络的特征,通过边界框有效定位图像中的不同对象。我们可以将这种技术进行扩展吗?也就是说,对每个对象的精确像素进行定位,而不仅仅是用边界框进行定位?Facebook AI则使用了Mask R-CNN 架构对实例分割问题进行了探索。
就像Fast R-CNN和Faster R-CNN一样,Mask R-CNN的底层是鉴于Faster R-CNN在物体检测方面效果很好,我们是否可以将其扩展到像素级分割?
Mask R-CNN通过向Faster R-CNN添加一个分支来进行像素级分割,该分支输出一个二进制掩码,该掩码表示给定像素是否为目标对象的一部分:该分支是基于卷积神经网络特征映射的全卷积网络。将给定的卷积神经网络特征映射作为输入,输出为一个矩阵,其中像素属于该对象的所有位置用1表示,其他位置则用0表示,这就是二进制掩码。见图123。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/Mask R-CNN.png}
\caption{Mask R-CNN}
\label{fig123}
\end{figure}
另外,当在原始Faster R-CNN架构上运行且没有做任何修改时,感兴趣池化区域(RoIPool)选择的特征映射区域或原始图像的区域稍微错开。由于图像分割具有像素级特性,这与边界框不同,自然会导致结果不准确。Mask R-CNN通过调整RoIPool来解决这个问题,使用感兴趣区域对齐(Roialign)方法使其变的更精确。本质上,RoIlign使用双线性插值来避免舍入误差,这会导致检测和分割不准确。
一旦生成这些掩码,Mask R-CNN将RoIAlign与来自Faster R-CNN的分类和边界框相结合,以便进行精确的分割。
上述这5种主要的计算机视觉技术可以协助计算机从单个或一系列图像中提取、分析和理解有用的信息。
计算机视觉大模型在未来的发展前景非常广阔。随着深度学习技术的不断进步,计算机视觉领域的大模型将变得更加强大和智能,能够处理更复杂的视觉任务和场景。随着硬件技术的进步和算法的优化,计算机视觉大模型的性能和精度将不断提高。未来的大模型可能具有更高的分辨率、更快的处理速度和更准确的预测能力。未来的计算机视觉大模型可能会融合多种传感器数据,如图像、视频、声音等,从而实现更全面的感知和理解能力。这种多模态融合将使大模型在各种应用场景中更加灵活和强大。自监督学习是一种无监督学习方法,可以从未标记的数据中学习表示。未来的计算机视觉大模型可能会越来越多地采用自监督学习方法,从而减少对标记数据的依赖,提高模型的泛化能力和适应性。迁移学习和增量学习是两种可以帮助模型在新任务上快速学习的技术。未来的计算机视觉大模型可能会更好地利用这些技术,从而实现更快速的模型更新和部署。
未来计算机视觉大模型的发展方向将更加注重模型的智能化、通用性和可靠性,以应对越来越复杂和多样化的视觉任务和挑战。同时,随着技术的不断进步,我们可以期待看到更多令人兴奋的突破和应用。
\subsection{音频模型(Audio Models,AM)}
音频大模型是近年来人工智能领域的一个热门研究方向,它利用深度学习和大数据处理技术,从海量音频数据中提取有用的信息,进而实现音频的识别、分类、生成等任务。音频大模型的出现,极大地推动了音频处理技术的发展,为语音识别、音乐生成、音频分析等领域带来了新的突破。
音频大模型的基本原理主要基于深度学习和信号处理技术。它首先通过大量的音频数据训练深度学习模型,使模型能够自动学习音频数据的特征表示。然后,利用这些特征表示进行音频的识别、分类、生成等任务。音频大模型的核心在于其强大的特征提取能力和泛化性能,使得它能够在复杂的音频环境下实现高效、准确的音频处理。
音频大模型在实际应用中具有广泛的价值。在语音识别领域,音频大模型可以帮助我们实现高效的语音转文字功能,提高语音交互的便捷性和准确性。在音乐生成领域,音频大模型可以自动生成具有创新性和艺术性的音乐作品,为音乐创作带来新的灵感。此外,音频大模型还可以应用于音频分析、音频降噪、音频增强等领域,提升音频处理的整体效果。
随着技术的不断进步和应用需求的日益增长,音频大模型的发展前景十分广阔。随着深度学习算法的不断优化和计算资源的不断提升,音频大模型的性能将得到进一步提升,实现更高效的音频处理任务。音频大模型可以与其他模态的数据(如文本、图像等)进行融合,形成多模态的音频处理模型。这将有助于实现更丰富的音频应用场景,如音视频同步处理、多语种语音识别等。随着用户对个性化需求的不断增加,音频大模型可以针对不同用户、不同场景进行定制化训练,实现个性化的音频处理服务。例如,为不同用户定制专属的语音助手、智能音乐推荐等。音频大模型可以在不同领域进行应用拓展,如医疗诊断、环境监测等。通过训练具有领域特色的音频大模型,我们可以实现对特定领域音频数据的高效分析和处理,为相关领域的发展提供有力支持。
音频大模型作为人工智能领域的一个重要分支,将在未来继续发挥重要作用。随着技术的不断进步和应用需求的日益增长,我们有理由相信音频大模型将在更多领域实现突破和创新,为人类的生活带来更多便利和惊喜。
\subsection{多模态大模型(Multimodal Large Models,MMLM)}
多模态学习(Multimodal learning)是机器学习的一个重要分支。模态(Modality),就是数据的一种形式,例如图像、文本、语音等。通常意义的多模态学习,就是利用模型去同时处理多个模态数据,例如同时处理图文,图生文本、文本生图等。通过多模态大模型,可以更好地理解和处理复杂的多模态数据,提高人工智能的应用性能。
多模态大模型在许多领域都有广泛的应用,应用方向不限于自然语言处理、计算机视觉、音频处理等。具体任务又可以分为文本和图像的语义理解、图像描述、视觉定位、对话问答、视觉问答、视频的分类和识别、音频的情感分析和语音识别等。
由图124可见多模态模型发展关系及时间线。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/多模态大模型发展时间线.png}
\caption{多模态大模型的发展时间线}
\label{fig124}
\end{figure}
上述的大多多模态模型结构可以总结为五个主要关键组件,具体如图125所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{picture/多模态大模型原理.png}
\caption{多模态大模型原理}
\label{fig125}
\end{figure}
· 模态编码器(Modality Encoder, ME): 图像编码器(Image Encoder)、视频编码器(Video Encoder)、音频编码器(Audio Encoder)。
· 输入投影器(Input Projector, IP): 线性投影器(Linear Projector)、多层感知器(Multi-Layer Perceptron, MLP)、交叉注意力(Cross-Attention)、Q-Former等。
· 大模型基座(LLM Backbone): ChatGLM、LLaMA、Qwen、Vicuna等。
· 输出投影器(Output Projector, OP): Tiny Transformer、Multi-Layer Perceptron (MLP)等。
· 模态生成器(Modality Generator, MG): Stable Diffusion、Zeroscope、AudioLDM。
目前,主流的多模态大模型大多以Transformer为基础。Transformer是一种由谷歌在2017年提出的深度学习模型,主要用于自然语言处理(NLP)任务,特别是序列到序列(Sequence-to-Sequence)的学习问题,如文本生成。Transformer彻底改变了之前基于循环神经网络(RNNs)和长短期记忆网络(LSTMs)的序列建模范式,并且在性能提升上取得了显著成效。在前面有对Transformer的详细介绍,这里不再赘述。
多模态大模型十分重要的一部分就是多模态任务对齐。
a)文本转Embedding:Tokenization也称作分词,是把一段文本切分成模型能够处理的token或子词的过程,通常会使用BPE或WordPiece的分词算法,有助于控制词典大小的同时保留了表示文本序列的能力。Embedding将token或子词用映射到多维空间中的向量表示,用以捕捉语义含义。这些连续的向量使模型能够在神经网络中处理离散的token,从而使其学习单词之间的复杂关系。经典的文本转Embedding可采用Tramsformer(bert)模型具体步骤:输入文本:“thank you very much”;Tokenization后: [“thank”,“you”,“very”,“much”];Embedding:假设每个token被映射到一个2048维的向量,“thank you very much”被转换成4*2048的embeddings。
b)图像转换Embedding:图像转Emdedding一般采用Vit Transformer模型。首先,把图像分成固定大小的patch,类比于LLM中的Tokenization操作;然后通过线性变换得到patch embedding,类比LLM中的Embedding操作。由于Transformer的输入就是token embeddings序列,所以将图像的patch embedding送入Transformer后就能够直接进行特征提取,得到图像全局特征的embeddings。图像预处理:输入图像大小:224x224像素,3个颜色通道(RGB)+ 预处理;归一化,但不改变图像大小图像切分;假设每个patch大小为14x14像素,图像被切分成(224/14) × (224/14) =256个patches 线性嵌入;将每个14x14x3的patch展平成一个一维向量,向量大小为 14×14×3=588;通过一个线性层将每个patch的向量映射到其他维的空间(假设是D维),例如D=768 , 每个patch被表示为一个D维的向量。最后,由于Transformer内部不改变这些向量的大小,就可以用256*768的embeddings表示一张图像。
上述介绍文本和图像都被转换成向量的形式,但这并不意味着它们可以直接结合使用。问题在于,这两种模态的向量是在不同的向量空间中学习并形成的,它们各自对事物的理解存在差异。例如,图像中“小狗”的Embedding和文本中“小狗”的Embedding,在两种模态中的表示可能截然不同。这就引出了一个重要的概念——模态对齐。
多模态大型语言模型的训练流程主要分为两个阶段:多模态预训练(MM PT)和多模态指令调优(MM IT)。
1)多模态预训练:目标:预训练阶段的目标是通过训练输入和输出投影器(IP和OP)来实现不同模态之间的对齐,以便LLM主干能够有效地处理多模态输入。数据集:通常使用X-Text数据集,包含图像-文本(Image-Text)、视频-文本(Video-Text)和音频-文本(Audio-Text)对,以及交错的图像-文本语料库等。优化:训练过程中,主要优化的是输入和输出投影器的参数,以最小化条件文本生成损失。通常涉及到将模态编码器的输出特征与文本特征对齐,生成的对齐特征作为LLM主干的输入。
2)多模态指令调优:目标:指令调优阶段的目标是通过指令格式化的数据集对预训练的MM-LLM进行微调,以提高模型遵循新指令的能力,从而增强其在未见任务上的性能。方法:指令调优的训练方法可以分为监督式微调(SFT)和基于人类反馈的强化学习(RLHF)。SFT将PT阶段的数据转换为指令感知格式,而RLHF则依赖于对模型响应的人类反馈进行进一步微调。数据集:使用的数据集通常包括视觉问答(VQA)、指令遵循任务等,数据集结构可以是单轮问答或多轮对话。
除了提升模型的基础能力(如支持的输入/输出形式、性能指标)外,还有一些有意思的问题以及待探索的方向。如多模态幻觉、多模态上下文学习(Multimodal InContext Learning,M-ICL)、多模态思维链(Multimodal Chain of Thought,M-CoT)和LLM辅助的视觉推理(LLM-Aided Visual Reasoning,LAVR)等。
多模态幻觉的研究主要关注模型生成的回答与图片内容不符的问题。视觉和文本本质上是异构的信息,完全对齐两者本身就具有相当大的挑战。增大图像分辨率和提升训练数据质量是降低多模态幻觉的两种最直观的方式,此外我们仍然需要在原理上探索多模态幻觉的成因和解法。例如,当前的视觉信息的Token化方法、多模态对齐的范式、多模态数据和LLM存储知识的冲突等对多模态幻觉的影响仍需深入研究。
多模态上下文学习技术为少样本学习方法,旨在使用少量的问答样例提示模型,提升模型的few-shot性能。提升性能的关键在于让模型有效地关注上下文,并将内在的问题模式泛化到新的问题上。以Flamingo为代表的工作通过在图文交错的数据上训练来提升模型关注上下文的能力。目前对于多模态上下文学习的研究还比较初步,有待进一步探索。
多模态思维链的基本思想是通过将复杂的问题分解为较简单的子问题,然后分别解决并汇总。相较于纯文本的推理,多模态的推理涉及更多的信息来源和更复杂的逻辑关系,因此要复杂得多。当前该方面的工作也比较少。
LLM辅助的视觉推理方法探索如何利用LLM强大的内嵌知识与能力,并借助其他工具,设计各种视觉推理系统,解决各种现实问题。相比于通过端到端训练获得单一模型,这类方法一般关注如何通过免训练的方式扩展和加强LLM的能力,从而构建一个综合性的系统。
现有MLLM处理多模态长上下文的能力有限,导致模型在长视频理解、图文交错内容理解等任务中面临巨大挑战。以Gemini 1.5 Pro为代表的MLLM正在掀起长视频理解的浪潮,而多模态图文交错阅读理解(即长文档中既有图像也有文本)则相对空白,很可能会成为接下来的研究热点。MLLM服从复杂指令的能力不足。例如,GPT-4V可以理解复杂的指令来生成问答对甚至包含推理信息,但其他模型这方面的能力则明显不足,仍有较大的提升空间。MLLM的上下文学习和思维链研究依然处于初步阶段,相关的能力也较弱,亟需相关底层机制以及能力提升的研究探索。开发基于MLLM的智能体是一个研究热点。要实现这类应用,需要全面提升模型的感知、推理和规划能力。MLLM容易受设计的恶意攻击影响,生成有偏的或不良的回答。该方面的相关研究也仍然欠缺。目前MLLM在训练时通常都会解冻LLM,虽然在训练过程中也会加入部分单模态的文本训练数据,但大规模的多模态和单模态数据共同训练时究竟对彼此互有增益还是互相损害仍然缺乏系统深入的研究。
\subsection{大模型总结}
随着人工智能技术的飞速发展,大模型逐渐成为人们关注的焦点。这些大模型,如GPT-3、BERT等,不仅在学术界引起了广泛的讨论,也在工业界掀起了新的应用浪潮。
大模型,顾名思义,就是参数量巨大的模型。这些模型通常具有数十亿甚至千亿级别的参数,因此也被称为大规模预训练模型。它们的出现,标志着人工智能技术进入了一个新的阶段。
大模型的优势在于,它们具有强大的拟合能力。由于参数量巨大,这些模型能够捕捉到更加复杂的特征,从而在多个任务上取得令人瞩目的成绩。例如,GPT-3在自然语言处理领域取得了令人瞩目的成绩,能够生成流畅、连贯的文章,甚至能够完成一些简单的逻辑推理任务。
此外,大模型还具有很好的迁移能力。由于这些模型在预训练阶段接触到了大量的数据,因此它们能够很好地泛化到新的任务上。这意味着,我们只需要对模型进行简单的微调,就能够将其应用于新的任务上。这种迁移能力大大降低了人工智能技术的门槛,使得更多的人能够参与到人工智能的应用中来。
然而,大模型并非没有缺点。首先,它们的计算成本非常高。由于参数量巨大,这些模型需要大量的计算资源进行训练。这不仅需要昂贵的硬件设备,还需要大量的电力。因此,这些模型在训练过程中会产生大量的碳排放,对环境造成影响。
其次,大模型也存在着数据隐私的问题。由于这些模型需要大量的数据进行训练,因此它们可能会接触到一些敏感的数据。如果没有妥善的保护措施,这些数据可能会被泄露,从而对用户的隐私造成威胁。
此外,大模型还存在着过拟合的风险。由于参数量巨大,这些模型很容易在训练数据上过拟合,从而无法很好地泛化到新的数据上。因此,如何有效地解决过拟合问题,也是大模型需要面对的挑战之一。
尽管大模型存在着一些问题,但它们的出现无疑为人工智能领域带来了新的机遇。大模型具有强大的拟合能力和迁移能力,能够为人工智能的应用带来更多的可能性。同时,大模型也带来了一些挑战,如计算成本、数据隐私和过拟合等。因此,我们需要在推动大模型发展的同时,也要关注这些问题,寻找有效的解决方案。
在未来,我们期待大模型能够在更多的领域发挥出重要的作用,如医疗、教育、金融等。同时,我们也希望大模型能够变得更加智能、高效和可靠,为人类社会带来更多的福祉。
\section{\textbf{\large 总结}}
在过去的几年里,深度学习和大模型技术取得了巨大的进展,它们已经成为了人工智能领域最热门的话题之一。本文综述了深度学习和大模型的发展历程、基本原理、关键技术、应用领域以及未来发展趋势等方面的内容,希望能够为初学者提供一些参考和帮助。
深度学习是一种通过多层神经网络模型对数据进行特征提取和分类的机器学习方法,它的核心思想是将输入数据逐层进行特征转换,最终得到输出结果。深度学习模型通常由输入层、隐藏层和输出层组成,其中隐藏层的数量和大小可以根据具体任务进行调整。深度学习模型在图像识别、语音识别、自然语言处理等领域取得了显著的应用效果,其性能已经超过了传统机器学习方法的水平。
大模型是一种通过增加模型参数规模和模型复杂度来提高模型性能的方法,它可以有效地提高模型的拟合能力和泛化能力。大模型通常需要大量的数据和计算资源进行训练,但是它们可以带来更好的性能和更高的准确性。近年来,大模型已经在自然语言处理、计算机视觉、推荐系统等领域取得了显著的进展,它们的出现也推动了人工智能技术的发展和应用。
本文对深度学习和大模型的研究现状和未来发展趋势进行了综述,希望能够为初学者提供一些参考和帮助。然而,本文只是一个初学者的文献综述,它整合了大牛资料和自身感悟所得,希望能够为初学者提供一些资源和便利,同时也希望能够为人工智能的基本认知提供一些帮助。
在未来,深度学习和大模型技术将继续发展和进步,它们在人工智能领域的应用也将越来越广泛。我相信,随着深度学习和大模型技术的不断发展和完善,它们将会在图像识别、语音识别、自然语言处理等领域取得更加出色的表现,同时也将会为人工智能技术的发展和应用带来更多的机遇和挑战。
最后,本文的综述只是一个初步的尝试,我希望它能够为初学者提供一些参考和帮助,同时也希望能够引起更多人对深度学习和大模型技术的关注和研究。我相信,在未来的发展中,深度学习和大模型技术将会取得更加出色的表现,同时也将会为人工智能技术的发展和应用带来更多的机遇和挑战。
让我们尽情期待这AI盛世吧!
\begin{thebibliography}{1}
\bibliographystyle{IEEEtran}
\bibitem{张荣2018深度学习研究综述}张荣, 李伟平 & 莫同 .深度学习研究综述. {\em 信息与控制}. \textbf{47}, 385-397 (2018)
\bibitem{尹宝才2015深度学习研究综述}尹宝才, 王文通, 王立春 & Others .深度学习研究综述. {\em 北京工业大学学报}. \textbf{41}, 48-59 (2015)
\bibitem{刘建伟2014深度学习研究进展}刘建伟, 刘媛 & 罗雄麟 .深度学习研究进展… {\em Application Research Of Computers/Jisuanji Yingyong Yanjiu}. \textbf{31} (2014)
\bibitem{vaswani2017attention}Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A., Kaiser, Ł. & Polosukhin, I. Attention is all you need. {\em Advances In Neural Information Processing Systems}. \textbf{30} (2017)
\bibitem{yang2024harnessing}Yang, J., Jin, H., Tang, R., Han, X., Feng, Q., Jiang, H., Zhong, S., Yin, B. & Hu, X. Harnessing the power of llms in practice: A survey on chatgpt and beyond. {\em ACM Transactions On Knowledge Discovery From Data}. \textbf{18}, 1-32 (2024)
\bibitem{zhao2023survey}Zhao, W., Zhou, K., Li, J., Tang, T., Wang, X., Hou, Y., Min, Y., Zhang, B., Zhang, J., Dong, Z. & Others A survey of large language models. {\em ArXiv Preprint ArXiv:2303.18223}. (2023)
\bibitem{han2021transformer}Han, K., Xiao, A., Wu, E., Guo, J., Xu, C. & Wang, Y. Transformer in transformer. {\em Advances In Neural Information Processing Systems}. \textbf{34} pp. 15908-15919 (2021)
\bibitem{brown2020language}Brown, T., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A. & Others Language models are few-shot learners. {\em Advances In Neural Information Processing Systems}. \textbf{33} pp. 1877-1901 (2020)
\bibitem{devlin2018bert}Devlin, J., Chang, M., Lee, K. & Toutanova, K. Bert: Pre-training of deep bidirectional transformers for language understanding. {\em ArXiv Preprint ArXiv:1810.04805}. (2018)
\bibitem{cho2014learning}Cho, K., Van Merriënboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H. & Bengio, Y. Learning phrase representations using RNN encoder-decoder for statistical machine translation. {\em ArXiv Preprint ArXiv:1406.1078}. (2014)
\bibitem{sutskever2014sequence}Sutskever, I., Vinyals, O. & Le, Q. Sequence to sequence learning with neural networks. {\em Advances In Neural Information Processing Systems}. \textbf{27} (2014)
\bibitem{du2021glm}Du, Z., Qian, Y., Liu, X., Ding, M., Qiu, J., Yang, Z. & Tang, J. Glm: General language model pretraining with autoregressive blank infilling. {\em ArXiv Preprint ArXiv:2103.10360}. (2021)
\bibitem{zhang2024mm}Zhang, D., Yu, Y., Li, C., Dong, J., Su, D., Chu, C. & Yu, D. Mm-llms: Recent advances in multimodal large language models. {\em ArXiv Preprint ArXiv:2401.13601}. (2024)
\bibitem{yin2024survey}Yin, S., Fu, C., Zhao, S., Li, K., Sun, X., Xu, T. & Chen, E. A Survey on Multimodal Large Language Models. (2024)
\end{thebibliography}
\end{document}