当前位置:首页 » 《我的小黑屋》 » 正文

AI大模型原理科普(深度好文)

20 人参与  2024年04月28日 11:26  分类 : 《我的小黑屋》  评论

点击全文阅读


目录

认识AI大模型家族

AI是什么?

机器学习是什么?

机器学习有哪些分支?

什么是强化学习?

深度学习属于哪一类学习?

生成式AI和深度学习是什么关系?

大语言模型是什么?

所有大语言模型都是生成式AI?

大语言模型LLM (large language model)到底是个啥?

大模型LLM的“大”是什么含义?

LLM核心技术到底是什么?

为什么Transformer模型能一统江湖?

Transformer的自注意力机制是干什么的?

Transformer背后的黑科技是什么?

Transformer演变了哪些成功的模型?

Transformer在CV计算机视觉上,为什么大放异彩?


    天地转,光阴迫。一万年太久,只争朝夕。数字时代,要顺势而为,让我们系统性掌握AI大模型家族的技术本领,成为行业翘楚!

    今天,我们突然发现,AI可以帮忙生成文字、图片、音频和视频等等内容了,而且让人难以分清背后的创作者到底是人类还是AI。这些AI生成的内容被叫做AIGC,它是AI generated content,即AI生成内容的简写。像ChatGPT生成的文章、GitHub Copilot生成的代码、Midjourney生成的图片等,都属于AIGC。而当AIGC这个词在国内火爆的同时,海外更流行的是另外一个词Generative AI,即生成式AI。从字面上来看,生成式AI,这之间的关系很好理解,生成式AI所生成的内容就是AIGC。所以,ChatGPT、GitHub Copilot、Midjourney等都属于生成式AI。由此可见,AIGC和生成式AI的概念都是很容易理解。因为AI这个词,在国内比生成式AI更加流行,很多语境下AIGC也被用于指代生成式AI。

AIGC主要有两种类型:一种是基于模板的自动化生成,另一种是基于深度学习技术的自动化生成。

首先,基于模板的自动化生成是一种较为简单的AIGC方法。其基本原理是先设计一个模板,然后填充模板中的空白部分以生成内容。这种方法的优点是生成的内容结构清晰、逻辑严谨,但缺点是生成的内容形式单一、难以与其他文章区分开来。

其次,基于深度学习技术的自动化生成则更加灵活,可以根据需求自由生成不同风格、不同主题的内容。与基于模板的自动化生成相比,基于深度学习技术的自动化生成能够更好地满足用户的需求,但也存在着一些问题,例如生成的内容质量和可信度难以保证,需要经过人工编辑和审核。

AIGC将走过三个发展阶段:第一个阶段是“助手阶段”,AIGC用来辅助人类进行内容生产;第二个阶段是“协作阶段”,AIGC以虚实并存的虚拟人形态出现,形成人机共生的局面;第三个阶段是“原创阶段”,AIGC将独立完成内容创作。

认识AI大模型家族

生成式AI、监督学习、无监督学习、强化学习、深度学习、大语言模型、Transformer等,这些算法之间又是什么关系呢?

其实,这些AI知识点,如何了解原理,可以一言以蔽之,先通过一张图,感性认识它们之间的关系。

AI是什么?

人工智能(Artificial Intelligence),英文缩写为AI。是计算机科学的一个分支学科,旨在让计算机系统去模拟人类的智能,从而解决问题和完成任务。早在1956年,AI就被确立为了一个学科领域,在此后数十年间经历过多轮低谷与繁荣。AI是新一轮科技革命和产业变革的重要驱动力量,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是智能学科重要的组成部分,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能是十分广泛的科学,包括机器人、语言识别、图像识别、自然语言处理、专家系统、机器学习,计算机视觉等。 AI发展经历了很多举足轻重的关键里程碑,例如:从1943年的神经网络诞生,到2024年的Sora风靡全球,经历了81年的心路历程。

机器学习是什么?

机器学习是AI的一个子集,它的核心在于不需要人类做显示编程,而是让计算机通过算法自行学习和改进,去识别模式,做出预测和决策。比如,如果我们通过代码告诉电脑,图片里有红色说明是玫瑰,图片里有橙色说明是向日葵,程序对花种类的判断就是通过人类直接明确编写逻辑达成的,不属于机器学习。举例:如果我的电脑,有大量玫瑰和向日葵的图片,让电脑自行识别模式,总结规律,从而能对没见过的图片进行预测和判断,这种就是机器学习。

机器学习有哪些分支?

机器学习有多个分支,包括监督学习、无监督学习、强化学习。在监督学习里,机器学习算法会接受有标签的训练数据,标签就是期望的输出值,所以每个训练数据点都既包括输入特征,也包括期望的输出值。算法的目标:是学习输入和输出之间的映射关系,从而在给定新的输入特征后,能够准确预测出相应的输出值。监督学习任务包括分类和回归,分类数据划分为不同的类别。举例:拿一堆猫和狗的照片,和照片对应的猫狗标签进行训练,然后让模型根据没见过的照片预测是猫还是狗,这就属于分类。举例:拿一些房子特征的数据,比如面积、卧室数、是否带阳台等和相应的房价作为标签进行训练。回归是让模型根据没见过的房子的特征预测房价是什么数值,这就属于回归。无监督学习,和监督学习不同,主要是学习的数据是没有标签的,所以算法的任务是自主发现数据里的规律。无监督学习任务包括聚类,就是把数据进行分组,举例:拿一堆新闻文章,让模型根据主题或内容的特征,自动把相似文章进行组织。

什么是强化学习?

强化学习,是让模型在环境里采取行动,获得结果反馈,从反馈里学习,从而能在给力情况下采取最佳行动来最大化奖励或是最小化损失。举例:和训练小狗类似,刚开始的时候,小狗会随心所欲做出很多动作,但随着和训犬师的互动,小伙会发现某些动作能够获得零食,某些动作没有流失,某些动作甚至会遭受惩罚。通过观察动作和奖惩之间的联系,小狗的行为会逐渐接近训犬师的期望。强化学习可以应用在很多任务上,举例:让模型下围棋时,获得不同行动导致的奖励或损失反馈,从而在一局游戏里优化策略,学习如何采取行动达到高分。

深度学习属于哪一类学习?

深度学习属于机器学习中的特殊类,深度学习是机器学习的一个分支,核心在于:使用人工神经网络模仿人脑处理信息的方式,通过层次化的方法提取和表示数据的特征,专注于非结构化数据处理。神经网络,是有许多基本的计算和储存单元组成,这些单元被称为神经元。这些神经元通过层层连接来处理数据,并且深度学习模型通常有很多层,因此称为深度。举例:要用计算机识别小猫的照片。在深度学习中,数据首先被传递到一个输入层,就像人类的眼睛看到图片一样。然后数据通过多个隐藏层,每一层都会对数据进行一些复杂的数学运算,来帮助计算机理解图片中的特征,例如小猫的耳朵、眼睛等等。最后计算机会输出一个答案,表明这是否是一张小猫的图片。神经网络可以用于监督学习、无监督学习、强化学习,所以深度学习不属于他们的子集。

总之,深度学习是机器学习的一个特定领域,它利用人工神经网络模型进行学习和训练。深度学习模型由多个层次(称为神经网络的层)组成,每一层都会对输入数据进行变换和表示。这些网络层通过一系列的非线性转换将输入数据映射到输出结果。深度学习模型的核心是深度神经网络(Deep Neural Network,DNN),它可以通过大量的标记数据进行训练,从而实现高度准确的预测和分类任务。

    这里必须提一下,卷积神经网络(CNN)是深度学习的杰出代表作,革命性提升了AI模型在江湖上的多年霸主地位,卷积神经网络作为深度学习中的一种重要网络结构,具有自动提取特征和高效分类的能力。随着深度学习技术的发展,CNN在计算机视觉、自然语言处理、语音识别等领域取得了显著的成果。详解参见:深入浅出图解CNN-卷积神经网络-CSDN博客

生成式AI和深度学习是什么关系?

其是深度学习的一种应用,它利用神经网络来识别现有的模式和结构,学习生成新的内容,内容形式可以是文本、图片、音频。而大语言模型也叫LLM (large language model),也是深度学习的一种应用,专门用于进行自然语言处理任务。

生成式AI的原理主要基于深度学习技术和神经网络。其基本原理是,通过训练模型来学习从输入到输出的映射关系。这种映射关系通常由一组权重和偏置参数来定义,这些参数是通过优化损失函数来获得的。通过调整这些参数,模型可以逐渐改进其预测和生成结果的能力

生成式AI的神经网络通常采用前馈神经网络(Feedforward Neural Network)或循环神经网络(Recurrent Neural Network)。在前馈神经网络中,信息从输入层逐层传递到输出层,每个神经元只与前一层的神经元相连。而在循环神经网络中,信息在同一个网络中循环传递,每个神经元可以与自身的多个输出相连。这两种网络结构都可以用于生成式AI,但它们的应用场景有所不同。

生成式AI的优点在于,它可以高效地生成大量有意义的内容,比如文章、图像、音频等。此外,它还可以根据用户的个性化需求,生成符合用户兴趣和需求的内容。但是,生成式AI也存在一些缺点,比如它可能会出现语法错误、语义错误等问题,而且它生成的内容可能缺乏创新性和独特性。

2024年2月16日,OpenAI发布了“文生视频”(text-to-video)的大模型工具,Sora(利用自然语言描述,生成视频)这个消息一经发出,全球社交主流媒体平台以及整个世界都再次被OpenAI震撼了。AI视频的高度一下子被Sora拉高了,要知道Runway Pika等文生视频工具,都还在突破几秒内的连贯性,而Sora已经可以直接生成长达60s的一镜到底视频,要知道目前Sora还没有正式发布,就已经能达到这个效果。

大语言模型是什么?

公式:大模型 = 海量数据 + 深度学习算法 + 超强算力

数据是训练原材料,深度学习算法是计算法则,算力是硬件计算力,大模型是预测模型。

大语言模型里面的“大”:字,说明模型的参数量非常大,可能有数十亿甚至到万亿个,而且训练过程中也需要海量文本数据集,所以能更好的理解自然语言以及生成高质量的文本。大语言模型的例子有非常多,比如国外的GPT、LLaMA,国内的ERNIE、ChatGLM等,可以进行文本的理解和生成。举例:以GPT3这个模型为例子,它会根据输入Prompt提示词(提示词Prompt,简单来说,就是让告诉Chatgpt它需要做什么,类似程序员编程。但不同之处在于,你只需要输入纯文本,ChatGPT会尽可能地理解你的意思,并完成你提出的任务。)以及前面生成过的词,通过概率计算逐步生成下一个词或Token来输出文本序列。

补充:Token是个标记,是指将输入文本分解为更小的单位,例如单词、字母或字符。在自然语言处理中,将文本分解为标记有助于模型理解语义和语法结构。当一个Prompt被发送给GPT时,它会被分解成多个Token,这个过程被称为Tokenier。一般情况下,对于英文单词,四个字符表示一个标记Token。对于ChatGPT3.5来说,它最开始支持的Token最大值是4096。

所有大语言模型都是生成式AI?

不是所有的生成式AI都是大语言模型,而所有的大语言模型是否都是生成式AI,这也存在些许争议。生成图像的扩散模型(如:Sora)就不是大语言模型,它并不输出文本。因为,有些大元模型由于其架构特点不适合进行文本生成。举例:谷歌的BERT就是一个例子,它的参数量和训练数据很大,属于大语言模型。应用方面,BERT理解上下文的能力很强,因此被谷歌用在搜索上,用来提高搜索排名和信息摘录的准确性。它也被用于情感分析、文本分类等任务。但同时其不擅长文本生成。特别是连贯的常文本生成,所以,普遍认为此类模型不属于生成式AI的范畴。

大语言模型LLM (large language model)到底是个啥?

2022年10月30日,OpenAI发布ChatGPT,一跃成为当下最快达到100万用户的线上产品,也带动大语言模型成为了当下热点,更多AI聊天助手,如雨后春笋一般出现在大家的视野里。那大语言模型干什么了?大语言模型,也叫LLM ,是用于做自然语言相关任务的深度学习模型,可以模型一些文本内容输入,它能返回相应的输出,完成的具体任务可以是生成、分类、总结、改写等。大语言模型首先需要通过大量文本进行无监督学习。举例:以GPT3为例,它的训练数据有多个互联网文本语料库,覆盖线上书籍、新闻文章、科学论文、维基百科、社交媒体帖子等等。接受海量的训练文本数据,模型能更多了解单词与上下文之间的关系,从而更好地理解文本的含义,并形成更准确的预测。

大模型LLM的“大”是什么含义?

大模型的大,指的不仅仅是训练数据巨大,而是参数数量巨大。参数是模型内部的变量,可以理解为是模型在训练过程中学到的知识。参数决定了模型如何对输入数据做出反应,从而决定模型的行为。在过去的语言模型研究中发现,用更多的数据和算力来训练具有更多参数的模型,很多时候能带来更好的模型表现。这就需要AI学习。举例:做蛋糕,一是只允许AI调整面粉、糖蛋的量;二是可允许AI调整面粉、糖蛋、奶油、牛奶、苏打粉、可可粉的量,以及烤箱的时长和温度。因为后者由于可以调整的变量更多,更能让AI模仿做出更好吃的蛋糕。随着餐数的增加,它甚至有能力做出别的品类,创造一些全新的食品。所以,如今语言模型的参数数量可能是曾经的数万倍甚至数百万倍。以Open AI的第一个大模型GPT1为例,它有1.17亿个参数,到了GPT2,参数有15亿个参数,而这GPT3参数又增长到了1750亿个。这样,大模型不像小模型那样局限于单项或某几项任务,而是具有更加广泛的能力。比如在这之前,我们可能要训练单独的模型,分别去做总结、分类、提取等等任务,但现在一个大模型就可以搞定这一切。像GPT Cloud、文心一言、通义千问等AI聊天助手,都是基于大语言模型的应用。

LLM核心技术到底是什么?

大语言模型公众认知,其技术发展里程碑,其实要回溯到2017年6月,谷歌团队发表论文《Attention is all you need》,提出了transformer架构,至此,自然语言处理的发展方向被革命性的颠覆了。随后,出现了一系列基于transformer架构的模型,2018年OpenAI发布GPT1.0,谷歌发布BERT,2019年OpenAI发布了GPT2.0,百度发布ERNIE1.0等。所以,大语言模型的发展早就如火如荼了。

为什么Transformer模型能一统江湖?

GPT直接向公众开放,而且能让用户在网页上用对话的方式进行交互体验,很流畅丝滑,大众的目光才被GPT吸引过去,全称是Generative Pre-trained Transformer生成式预训练,Transformer是其中的关键。所以,要了解大语言模型,必须搞懂Transformer。在Transformer架构被提出之前,语言模型的主流架构主要是循环神经网络RNN,其按照顺序逐字处理每一步,输出取决于先前的隐藏状态和当前的输入,要等上一个步骤完成后,才能进行当前的计算。因此,无法完成并行计算,训练效率低,而且RNN不擅长处理长序列,因为难以捕捉到长距离依赖性的语义关系。接下来,为了捕捉到长距离依赖性,也出现了RNN的改良版本,就是LSTM长短期记忆网络,但是这也并没有解决传统并行计算的问题,而且在处理非常长的序列时也依然受到限制。最后,Transformer腾空出世了,他有能力学习输入序列里所有词的相关性和上下文,不会受到短时记忆的影响。能做到这一点的关键,在于Transformer的自注意力机制。也正如论文标题所说,Attention is all you need,注意力就是你所需要的一切。

Transformer的自注意力机制是干什么的?

简单来说,Transformer在处理每个词的时候,不仅会注意这个词本身以及它附近的词,还会去注意输入序列里所有其他的词,然后其余每个词不一样的注意力权重。权重是模型在训练过程中通过大量文本逐渐学习到,因此,Transformer有能力知道当前这个词和其他词之间的相关性有多强,然后去专注于输入里真正重要的部分。即使两个词的位置隔得很远,Transform依然可以捕获他们之间的依赖关系,举例:

给出一个句子,使用一些关键词animal和street来描述it到底指代什么?

题目写出了一些关键词(如animal,street)作为提示,其中这些给出的关键词就可以看作是key, 而整个的文本信息就相当于是query,脑子里浮现的答案信息是value,默认是street。

第一次看到这段文本后,脑子里基本上浮现的信息就只有提示这些信息,此时,key与value = street基本是相同的。

第二次进行深入理解后,脑子里想起来的东西原来越多,对query这一个句子,提取关键信息tired进行关联,这就是注意力作用的过程, 通过这个过程,我们最终脑子里的value发生了变化,变成了animal。

总结一下, 使用一般注意力机制,是使用不同于给定文本的关键词表示它。 而自注意力机制,需要用给定文本自身来表达自己,也就是说你需要从给定文本中抽取关键词来表述它,相当于对文本自身的一次特征提取。

Transformer背后的黑科技是什么?

Transformer目标是:是通过预测出现概率最高的下一个词,来实现文本生成的,这种效果有点像搜索引擎的自动补全。每当我们输入一个新的字或词,输入框就开始预测后面的文本,概率越高的排在越上面。但模型具体到底是如何得到各个词出现的概率呢?

有两个核心部分组成,编码器Encoder和解码器Decoder。举例:做中文翻英语的任务,给编码器输入一句英语,解码器返回对应的法语。“我是一个学生”的翻译如何工作的?

第一步:转换为计算机可以计算的向量Token。中文的每个字,被理解为是文本的一个基本单位,翻译成不同的token。是指将输入文本分解为更小的单位,例如单词、字母或字符。在自然语言处理中,将文本分解为标记有助于模型理解语义和语法结构。当一个Prompt被发送给GPT时,它会被分解成多个Token,这个过程被称为Tokenier。短单词可能每个词是一个token,长单词可能被拆成多个token。每个token会被用一个整数数字表示,这个数字被叫做token ID。这是因为,计算机内部是无法储存文字的,任何字符最终都得用数字来表示。有了数字表示的输入文本后,再把它传入嵌入层。如下是官网提供的Tokenization示意图。

第二步:Embedding嵌入层。其作用是让每个token都用向量表示,向量可以被简单的看为一串数字,举例:假设把向量长度简化为1-521,实际中向量长度可以非常长。为什么要用一串数字表示token?重要原因是,一串数字能表达的含义是大于一个数字的,能包含更多语法、语义信息等等。这就好比对人的画像,如果只有男人和女人这两个属性,太少维度的描述,需要增加籍贯,身高,爱好和专业等维度,才能更好的刻画人的特征。多个数字就是多个特征,我们就可以进行更多维度的表示特征。嵌入层的向量里面包含了词汇之间语法、语义等关系。向量长度到底可以多长呢?在transformer 论文里,向量长度是512,GPT3里设置为12288,可以想象能包含多少信息。

第三步:位置编码。Transformer的一项关键机制是位置编码。在语言里,顺序很重要,即使句子里包含的字都是一样的,但顺序不一样也能导致意思大相迳庭。这是为什么自然语言处理领域会用序列这个词,因为它表示一系列按照特定顺序排序的元素。前面提到,RNN和人类阅读文本一样,对输入序列同样是按顺序依次处理,这就造成了训练速度的瓶颈,因为只能串行,没办法并行,也就是没法同时去学习所有信息。Transformer把词输入给神经网络前,除了会先对词进行嵌入转换成向量,也就是把词用一串数字表示,它会把每个词在句子中的位置也各用一串数字表示,添加到输入序列的表示中,然后把这个结果给神经网络,模型既可以理解每个词的意义,又能够捕获词在句子中的位置。从而,理解不同词之间的顺序关系。借助位置编码,可以不按顺序输入给Transformer模型,可以同时处理输入序列里的所有位置,而不需要像RNN那样依次处理。那么,在计算时每个输出都可以独立的计算,不需要等待其他位置的计算,结果这大大提高了训练速度。训练速度一快,训练出巨大的模型也不是这么难了。位置编码,就是把表示各个词在文本里顺序的向量和上一步得到词向量相加,然后把得到的结果传给编码器。这样做的意义是,模型既可以理解每个词的意义,又能够捕捉词在句子中的位置,从而理解不同词之间的顺序关系。

第四步:编码器。它的主要任务是把输入转换成一种更抽象的表示形式,这个表示形式也是向量表示的一串数字,里面既保留了输入文本的词汇信息和顺序关系,也捕捉了语法语义上的关键特征。捕捉关键特征的核心是编码器的自注意力机制。模型在处理每个词的时候,不仅会关注这个词本身和它附近的词,还会关注序列中所有其他词。正如transformer论文标题所说,自注意力机制通过计算每对词之间的相关性,来决定注意力权重。实际上执行中,Transformer使用了多头注意力机制,也就是编码器不只有一个注意力机制模块,每个头都有他自己的注意力权重,用来关注文本里不同特征或方面,比如有的关注动词,有的关注修饰词,有的关注情感,有的关注病理实体等等。而且他们之间可以做并行运算,也就是计算进展上互不影响。举例:我们想测试部门中谁的关系最近,先对部门中的每个成员进行个体画像,再总结关系最近的人是谁。这个可以分组进行,第一组(第一个头)就是按照个人信息进行关联,第二组(第二个头)按照大家的项目经验关联;第三组(第三个头)按照个人职业规划进行关联;通过多组并行打分操作,可以很快发现个体之间的关系。每个自注意力头的权重,都是模型在之前的训练过程中,通过大量文本里逐渐学习和调整的。在多头注意力机制后面,还有一个前馈神经网络,它会对输出进行进一步增强表达能力。

第五步:解码器。它是大语言模型生成一个个词的关键。通过前面的编码器,我们有了输入序列里各个token的抽象表示,可以把它传给解码器。解码器还会先接收一个特殊值,这个值表示输出序列的开头。这样做的原因是,解码器不仅会把来自编码器的输入序列的抽象表示作为输入,还会把之前已经生成的,来保持输出的连贯性和上下文相关性。刚开始,还没有任何已生成的文本,所以把表示开头的特殊值先作为输入。具体的生成过程仍然是要经过多个步骤。首先和编码器一样,文本要经过我们已经了解过的嵌入层和位置编码,然后被输入进多头自注意力层,但它和编码器里的多头自注意力层却不一样。当编码器在处理各个词的时候,他会关注输入序列里所有其他词,但解码器中自注意力机制只会关注这个词和它前面的其他词,后面的词要被遮住而不去关注。这样做是为了确保解码器生成文本时遵循正确的时间顺序,不能先让他偷看后面的词,在预测下一个词时,只是用前面的词作为上下文。这种类型的多头注意力机制被叫做带掩码的多头注意力机制。另外的一个注意力机制,会捕捉编码器的输出和解码器即将生成的输出之间的对应关系,从而将原始输入序列的信息融合到输出序列的生成过程中。解码器里的前馈神经网络作用和编码器里的类似,也是通过额外的计算,来增强模型的表达能力。最后,和编码器一样,解码器同样是多个堆叠到一起的,这可以增加模型的性能,有助于处理复杂的输入输出关系。解码器的最后阶段,包含了一个线性和一个softmax层,他们加一块的作用是,把解码器输出的表示转化为词汇表的概率分布,这个词汇表的概率分布代表下一个次被生成token的概率,一般来说,模型会选择概率最高的token作为下一个输出。因此,解码器就是预测下一个输出的token,就像GPT的功能类似。

Transformer演变了哪些成功的模型?

第一个是仅编码器模型,也叫自编码器模型;比如BERT,让模型猜文本里被遮出的词是什么情感分析,让模型判断文本情感是积极还是消极。目标是:理解语言的任务。

第二个是仅解码器模型,也叫自回归模型;如GPT2,GPT3,,通过预测下一个词来预测文本生成。目标:文本生成。

第三个是编码器和解码器模型,也叫序列到序列模型;比如T5,BART,一个序列转换为另外一个序列,目标:翻译,总结。

总之,各个模块总结如下:

注意力层:使用多头注意力(Multi-Head Attention)机制整合上下文语义,它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构,从而更好地解决文本的长程依赖。
位置感知前馈层(Position-wise FFN):通过全连接层对输入文本序列中的每个单词表示进行更复杂的变换。
残差连接:对应图中的Add 部分。它是一条分别作用在上述两个子层当中的直连通路,被用于连接它们的输入与输出。从而使得信息流动更加高效,有利于模型的优化。
层归一化:对应图中的Norm 部分。作用于上述两个子层的输出表示序列中,对表示序列进行层归一化操作,同样起到稳定优化的作用。

Transformer在CV计算机视觉上,为什么大放异彩?

请参见博客:

Swin Transformer 最强CV大模型的图解(一文全面解析)_swin大模型-CSDN博客


点击全文阅读


本文链接:http://zhangshiyu.com/post/101447.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1