人工智能原理概述 - ChatGPT 背后的故事

大家好,我是比特桃。如果说 2023 年最火的事情是什么,毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点,都离不开AI。其实对于互联网行业来说,自从深度学习出来后就一直很火。但由于之前 AI 在可变现能力方面,最广泛的应用是推荐算法,导致普罗大众对 AI 这个词也有点乏味了。不过2022年11月 ChatGPT 横空出世,短短在两个月内迅速破圈,月活用户达到一亿成为全球的顶级产品。有人说这是 AI 技术的奇点,AI 很快就能代替更多的工作;也有人说它总会说套话,只是一个更聪明的聊天机器人罢了。无论如何不可否认的是,人工智能就是下个技术革命的开始。AI 并不会淘汰人类,AI 只会淘汰不会使用 AI 的人类。

目录

  • 一、人工智能历史
  • 二、机器学习
    • 2.1 预测函数
    • 2.2 代价函数
    • 2.3 梯度计算
  • 三、深度学习
    • 3.1 神经网络
    • 3.2 CNN
    • 3.3 模型 = 黑匣子
    • 3.4 显卡 = 算力
  • 四、ChatGPT 原理
    • 4.1 LLM
    • 4.2 生成过程
    • 4.3 训练过程
    • 4.4 Prompt
  • 五、总结

一、人工智能历史

虽然 AI 出现在大众视野中的时间并不长,但相关理论在上个世纪就已经有了雏形。

  • 1940年,控制论中阐述探索调节系统的跨学科研究,它用于研究控制系统的结构、局限和发展。这是关于人、动物和机器如何相互控制和通信的科学研究。
  • 1943年,美国神经科学家麦卡洛克、皮茨提出神经网络,并制作了一个模型叫 M-P 模型。
  • 1950年,随着计算机科学、神经科学、数学的发展,图灵发表了一个跨时代的论文,提出了一个很有哲理的The Imitation Game也称为图灵测试。大意是指:人与机器聊天的过程中,如果无法发现对方是机器,则称为通过图灵测试。
  • 1956年,马文明.斯基、约翰.麦卡锡、克劳德.香农(信息论奠基者)举行了一个会议:达特茅斯会议。其主要议题就是人们到底能否像人一样思考,并且出现了 AI 这个词。
  • 1966年,MIT 的聊天机器人Eliza, 之前的系统都是基于 PatternMatching 模式匹配,基于规则的。
  • 1997年,IBM 深蓝战胜了象棋冠军。多伦多大学的辛顿将反向传播算法BP引入到人工智能当中;纽约大学的杨立昆,著名贡献就是卷积神经网络CNN;蒙特利尔大学的本吉奥(神经概率语言模型、生成对抗性网络)。
  • 2010年,机器学习里面的一个领域 Artificial Neural Networks 人工人神经网络开始闪光。
    在这里插入图片描述

二、机器学习

机器学习的常见任务就是通过训练算法,自动发现数据背后的规律,不断改进模型,然后做出预测。机器学习中的算法众多,其中最经典的算法当属:梯度下降算法。它可以帮我们去处理分类、回归的问题。通过y=wx+b这种式子线性拟合,让结果趋近于正确值。

2.1 预测函数

假设我们有一组因果关系的样本点,分别代表一组有因果关系的变量。比如是房子的价格和面积,人的身高和步幅等等。常识告诉我们,他们的分布是正比例的。首先,梯度下降算法会确定一个小目标–预测函数,也就是一条过原点的直线 y = wx。我们的任务就是设计一个算法,让这个机器可以拟合这些数据,帮助我们算出直线的参数w。
在这里插入图片描述
一个简单的办法就是随机选一条过原点的直线,然后计算所有样本点和它的偏离程度。再根据误差大小来调整直线斜率 w
通过调整参数,让损失函数变的越小,说明预测的越精准。在这个例子中 y = wx 就是所谓的预测函数。
在这里插入图片描述

2.2 代价函数

找误差的这个过程就是计算代价函数。通过量化数据的偏离程度,也就是误差,最常见的就是均方误差(误差平方和的平均值)。比如误差值是 e ,因为找误差的系数是平方和的式子,所以 e 的函数图像如下图右侧所示。我们会发现当e的函数在最低点的时候,左侧图中的误差就会越小,也就是拟合的越精准。
在这里插入图片描述

2.3 梯度计算

机器学习的目标是拟合出最接近训练数据分布的直线,也就是找到使得误差代价最小的参数,对应在代价函数上就是最低点。这个寻找最低点的过程就称为梯度下降
在这里插入图片描述
利用梯度下降算法训练这个参数,非常类似于人的学习和认知过程。皮亚杰的认知发展理论,所谓的同化和顺应,吃一堑长一智,这就和机器学习的过程是一模一样的。

三、深度学习

关于 AI 算法是否要使用类人脑的运作方式去实现,早期是存在较大争议的。并且在深度学习出来之前,大部分的计算机科学家都投身到了,类似于模式匹配的研究方向。现在看来那种方法,当然是很难让机器变的和人一样智能。但我们不能以现在的眼光来看待当时的人们,当时关于数据和算力都很匮乏,所以自然就有一套理论反驳采用类人脑的思路去实现。
计算机的运行原理怎么可能和人脑一样呢?我们还是要采用传统算法去解决问题。这也间接导致了 AI 在当时一直停滞不前的局面。对于当年研究这个方向的博士来说,现实是残酷的。所以才有那句话:人的努力固然重要,但也要看方向
1943 年神经科学家探究了人脑的运行原理,人的大脑是超过 100 亿个神经元通过网状链接,来判断和传递信息。
在这里插入图片描述
每一个神经元都是一个多输入,单输出。可以通过多个神经元得到信号,得到信号进行综合处理,如果有必要则会向下游输出信号。这个输出只有两个信号,要么就是0要么就是1,和计算机非常类似。所以他们就提出一个模型叫M-P模型。
人工神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。深度学习是一种以人工神经网络为架构,对资料进行表征学习的算法。
在这里插入图片描述

3.1 神经网络

如下图所示,一个圆就是神经元,而这些圆组成的就是神经网络。给神经网络足够多的数据,告诉神经网络做得好还是不好,不断训练神经网络,它就可以做的越来越好,完成识别图像这样的复杂任务。
在这里插入图片描述
其实神经元的计算就是一堆加法和乘法,只是因为它足够的多,所以就变得非常复杂。一个神经元可能有多个输入,只会有一个输出,但可以激活多个神经元。比如下图就是其中一个 Sigmoid 激活函数,可以发现它的值域为(0,1)。
在这里插入图片描述
如果只判断是否是X那么一层就够了,但我们实际中要理解别人语音,图像识别。所以人们就研究了多层神经元。如图所示一个输入,然后输入端连接每一个第一个隐层的神经元,第一个隐层把这些数据输出出来后,选择向下游输出,输出到第二层隐层,第二隐层输出结果又进入第三隐层。这就是所谓的多层神经网络。每两层之间就有大量的参数,我们让大量的参数调节到最优,使得最后的误差函数最小。
在这里插入图片描述
虽然神经元做的操作并不复杂,但场景一旦复杂后,数量级将会非常庞大。比如一个5*5的图片,每一层有25个神经元,每一层的参数就有625个,三层就两千多个。如果是个彩色图片,识别起来就比较复杂了,算起来非常慢。这也是前几次人工智能陷入低估的原因,不管是算力还是算法都跟不上。后来出现BP算法,反向传播,可以先调最后一层。最后一层调完了往前调,这种算法复杂度比以前的要低。BP 算法主要解决了神经网络多层之间信息传递过程的误差损失和误差计算,引领了第三次人工智能浪潮。

3.2 CNN

这里我们还是拿一个在神经网络算法中比较经典的算法:CNN 卷积神经网络举例。其过程和动物的大脑识别也比较类似,图像映入大脑中也是由点到线再到物体最终识别出来它是什么。那计算机也一样,通过像素点-边缘方向-轮廓-细节-判断从而实现了图像识别。
在这里插入图片描述
比如我们想来识别一个图片是否是 X 这样一个字符,那一个图片对于计算机来说就是一个二维数组,比如黑色是1,白色是0。如下图所示:
在这里插入图片描述
给到计算机后,就可以通过一系列的训练过程,找到一大堆的参数以判断它是否是个X。找到一个损失最小的函数,那就是一次成功的训练。从此之后,我就能利用这一大堆参数判断一个图片是否是 X 了。
具体来说,我们可以通过提取图像中的特征,使用卷积核来进行卷积运算,比如卷积核就一个斜着的竖线(我们认为这是 X 图像的特征之一)。
在这里插入图片描述
通过卷积(一个斜着的竖线)核盖到这个图片上,进行运算,运算结果放到这个图片覆盖的中间。然后组合起来就是特征图。 算出来的特征,越大代表越能表达这个特征。
在这里插入图片描述
由于运算量太大,所以我们采用卷积核的东西,一个区域一个区域的扫描。将每个对应的数字相乘,再求和。就提取了区域数值特征。数据再经过池化,取区域内最大值,将特征数据量再浓缩,展平。输入全神经网络,因为涉及到卷积运算,所以又称卷积神经网络。卷积核的大小、步调、卷积层的数量等,都可以预先调节。机器输出的数值会和对目标结果预设的数值做比对。如果符合预期,即为成功。如果不符合预期,就会通过一系列运算,反向调节各个环节参数(BP),再算一次,不断重复,直到符合预期。这就是机器自主学习的原理。卷积 -> 池化 -> 激活。
在这里插入图片描述
通过卷积后的特征数据我们可以看到,数字越接近于1,说明这个地方越满足卷积核的特征。
在这里插入图片描述
卷积核最开始可能是人为设定的,但后面它会根据自己的数据去反向调节这个卷积核。类似训练的方法,去调节参数,训练的过程中会找到那个最合适的卷积核。有几个卷积核,就有几个特征图(三维的)这几个特征图挪到一块,就变成了一个三维立体的一个图形。
在这里插入图片描述
科学家的设计令人惊叹,几乎完美的模拟了人的思考过程。
我们把一大堆数据给到人工智能,然后人工智能通过一方法去调整自己的卷积核和参数,最终就可以分辨出来每一种不同物体是什么了。虽然我们并不知道它是如何设计卷积核以及这些参数的。

3.3 模型 = 黑匣子

我们现在知道了,通过神经网络不断地训练,我们可以让识别误差变小。从而实现一个智能的模型,用来做一些实际的工作。模型虽然是我们人训练出来的,但其实模型每一次具体识别的时候。我们并不知道它是怎么进行的,它对于我们还是黑匣子的存在。就如同牛顿并没有解释苹果为什么会落地,他是建立的引力的数学模型,只是用方法量化表达了出来,至于原因,还是很难用人话来表达。人工智能训练出来的模型也是一样,我们看到的特征其实和机器使用的特征并不一样,无论是特征数量还是特征内容。我们认为一个物体可能通过4个特征来判断,但计算机可能用了10个。内容也一样,我们人脑的内容和计算机的0和1也很难对等。要知道,神经网络是自主调节自主优化训练的,所以训练到最后你很难说他到底怎么做到的。就如同我们教会一个孩子识别猫和狗的区别,你通过带他见了大量的猫和狗,小孩终于会辨认了。但你能知道小孩子是怎么具体识别的嘛,其实很难阐述的。这也是为什么大家都说 AI 训练出的模型就是黑匣子了。

3.4 显卡 = 算力

如同上文所说的一样,虽然神经网络的研究在上世纪60年代就有一定的基础了。但一直迟迟没有发展起来的原因就是,因为缺了两样东西:算力和数据。神经网络中的每一个神经元,虽然不用算的非常精细,但需要大量的同时计算。巧妇难为无米之炊。计算并不复杂,都是加法和乘法,但运算量特别复杂。比如一个图片 800 x 600(像素点) = 144000 像素点。如果用三层卷积核(因为RGB是3)去做卷积,大概需要1300万次乘法 + 1200万次加法。这对当时的 CPU 是难以胜任的,甚至现在的CPU也做不了。这就需要 GPU 来展现身手了,我们知道 GPU 是用来做图形计算的。比如播放一个 4k 的视频,小一千万个像素点,假设每秒30帧。CPU撑死了64核128核,GPU可以成千上万个核。虽然一个像素点的计算非常简单,但还是适合 GPU 这种大量并发运算的设备来实现。下图就是非常形象的例子,CPU 像一个高精度的喷枪,指哪打哪:
在这里插入图片描述
GPU 由于高并发,可以瞬间将整个图形渲染出来:
在这里插入图片描述
这也是为什么我们经常听到做 AI 必须买显卡的原因,因为我们在训练的过程中需要大量这种并发运算(包括挖矿)。
目前 AI 训练基本被英伟达显卡垄断,这是因为老黄布局的很早。早在2006年英伟达就推出了CUDA,成功的让GPU可以编程。这样一来,以前专门设计3D处理图形的显卡,要想拿去计算编程,本来是需要一大堆顶尖工程师,现在只需要基于CUDA library就可以做。英伟达就把自己显卡的边界从游戏和3D图像处理,扩大到了整个加速计算的领域。比如航天、生物制药、天气预报、能源勘探等等。那等12年深度学习非常成熟的时候,自然就使用了英伟达的这个平台。导致现在说到AI训练就等于买显卡,买显卡就是英伟达。

四、ChatGPT 原理

想必大家都直接或间接的用过 ChatGPT 了,它和我们平时使用的 Siri 、小爱同学截然不同。和前者聊天我们本身就会把它当做人工智障来使用,但和 ChatGPT 对话的过程中,我们是真的可以解决一些实际的问题。比如让它分析一下未知领域关键技术点,写算法题找bug等等。那 ChatGPT 为什么会变得如此聪明,它背后到底用到了什么技术,下面我们就来一起探究一下。

4.1 LLM

语言模型是一种基于统计学和机器学习方法的自然语言处理技术,它用于评估和预测一个给定序列的概率分布,通常是单词序列或字符序列。语言模型的主要应用是文本生成、机器翻译、语音识别等任务。近些年,神经网络架构的语言模型参数规模已经达到几千亿,为了表示与传统语言模型的区别,大家习惯称之为大语言模型(LLM)。

在机器学习中一般使用 Recurrent Neural Network 循环神经网络(RNN)来处理文字,需要一个词一个词的看,没办法同时大量处理。而且句子也不能太长,要不然学到后面前面都忘了。
直到2017年的时候Google出来了一篇论文,提出了一个新的学习框架叫做:Transformer。他可以让机器同时学习大量的文字,如同串联和并联的区别。现在很多NLP的模型都是建立在Transformer之上的。Google BERT里头的T,ChatGPT里的T都是指这个Transformer。
在这里插入图片描述
GPT团队基于Transformer,18年发表了一篇论文介绍了一个新的语言模型,Generative Pre-trained Transformer,也就是GPT。大型语言模型 (LLM) 可通过根据文本中先前使用的单词预测单词的可能性,来生成类似人类的文本。
之前的语言学习模型基本上都需要人监督或者人为给他设定一些标签。但GPT基本不怎么需要了,就把一堆数据放进去,一顿学就给学明白了。像这种大语言模型主要靠算法和参数量,同样的数据进去学的比谁都快比谁都好,参数量需要大量的计算,说白了就是砸钱。在GPT3之后加入了人工反馈的强化学习,他的每个词都是靠前文的相关性和上下文来计算出来的。

4.2 生成过程

我们知道了,ChatGPT的核心是LLM Large Language Model 大语言模型。大预言模型是一种基于神经网络的模型,它经过大量文本数据的训练来理解和生成人类语言。该模型使用训练数据来学习,语言中单词之间的统计模式和关系,然后利用这些知识来预测后续单词,一次一个单词进行。GPT 3.5最大模型拥有1750亿个参数,分布在神经网络的96层中,使其成为有史以来最大的深度学习模型之一。
在这里插入图片描述
ChatGPT 中模型的输入和输出按 Token 组织,Token 是单词的数字表示。更准确的说,是单词的一部分。其实就是根据每个单词所在句子中的上下文,来判断下个单词更适合输出什么来进行的。
在这里插入图片描述
使用数字而不是单词来表示标记,因为数字可以更有效地处理。GPT-3.5基于大量互联网数据进行训练,原数据集包含5000亿个 Token。也就是说该模型接受了数千亿个单词的训练。
在这里插入图片描述
该模型经过训练,可以在给定输入Token序列的情况下预测下一个Token。它能够生成语法正确且语义类似于其所训练的互联网数据的结构化文本。
在这里插入图片描述

4.3 训练过程

虽然经过上述过程,ChatGPT已经可以自主的组织句子回答了。但如果没有适当的指导,该模型也可能生成不真实或者负面的输出。
在这里插入图片描述
为了使模型更安全,并能够以聊天机器人的方式提问和回答。该模型经过进一步的微调后,成为目前 ChatGPT 中使用的版本。微调是将不太符合人类价值观的模型,转变为可控的 ChatGPT。微调模型的这个过程称为人类反馈强化训练(RLHF)。
在这里插入图片描述
OpenAI 解释了他们如何在模型上运行RLHF,使用 RLHF 微调 GPT 3.5 就像提高厨师的技能,使他们的菜肴更加美味。
最初,厨师接受了大量食谱和烹饪技术数据集的培训。然而,有时厨师不知道要根据客户定制要求制作那道菜。为了帮助解决这个问题,我们收集真实用户反馈来创建新的数据集。第一步是创建比较数据集,我们要求厨师根据给定要求准备多种菜肴,然后让人们根据口味和外观对菜肴进行排名。这有助于厨师了解顾客喜欢那些菜肴。
下一步是奖励建模,厨师利用这些反馈创建奖励模型,就像了解顾客偏好的指南。奖励越高,菜品越好。接下来,我们使用PPO(即临近策略优化)训练模型,在这个类比中,厨师在遵循奖励模型的同时练习制作菜肴。他们使用一种称为“近端策略优化”的技术来提高他们的技能。这就像厨师将他们当前的菜肴与略有不同的版本进行比较,并根据奖励模型了解那一个更好。
这个过程会重复几次,厨师会根据最新的客户反馈来完善他们的技能。通过每次迭代,厨师都会更好地准备满足顾客喜好的菜肴。从另一个角度看,GPT-3.5 通过收集人们的反馈、根据他们的偏好创建奖励模型,然后使用 PPO 迭代改进模型性能,对 RLHF 进行了微调。这使得GPT-3.5能够针对特定用户请求生成更好的响应。

4.4 Prompt

通过 GPT 训练员针对它的教导后,我们就可以使用 ChatGPT 了。但由于基于大语言模型的 GPT 参数过于繁杂,其实准确表达出我们需求也是非常关键的。也就是说,想要更好的和 AI 进行对话,就需要 Prompt “语言”。现在网上有很多教程教会大家,如何能更高效的使用 Prompt 和 AI 沟通。
在这里插入图片描述
下图就是 Prompt 的具体逻辑,其实就是描述的越准确,ChatGPT 就会给你的越精准。
在这里插入图片描述
从概念上说,Prompt 就像输入给ChatGPT模型并返回输出一样简单。事实上,情况要复杂一些。首先 ChatGPT 了解聊天对话上下文,这是通过每次输入新提示时 ChatGPT UI 向模型提供整个对话来完成的。
在这里插入图片描述
这称为会话 Prompt 注入,这就是ChatGPT具有上下文感知能力的方式。

其次,ChatGPT包括隐含的 Prompt 内容,这些是在用户提示之前和之后注入的指令,用于指导模型使用对话语气。这些提示对于用户来说是不可见的。比如,它会事先分析你的输入是什么语气的,什么语言等等。
在这里插入图片描述
第三,Prompt 会传递到审核API以警告或阻止某些类型的不安全内容。Prompt会传递到审核API以警告或阻止某些类型的不安全内容。注:如果你的 Prompt 足够强悍,其实是可以让它输出一些特殊内容呦。
在这里插入图片描述
生成的结果也可能会在返回给用户之前传递给审核API
在这里插入图片描述
创建ChatGPT使用的模型需要进行大量工程设计,其背后的技术不断发展,为新的可能性打开了大门,并重塑了我们的沟通方式。ChatGPT 正在彻底改变软件开发人员的工作方式,展示它如何增强我们的日常任务并提高效率。为了不落后,我们应当了解,如何利用ChatGPT的强大功能,并在这个快速发展的软件开发世界中保持领先地位。

五、总结

在历史上发生了几次工业革命,每一次工业革命都是以科学的突破和根技术的发展为基础的。例如第一次工业革命,18世纪牛顿经典力学和热力学出现了突破。瓦特改良了蒸汽机,带领人类走进了蒸汽时代,他让英国成为日不落帝国。19世纪末20世纪初,法拉第发现了电磁感应现象,麦克斯韦阐述了电磁波原理。人类发明了发电机,电动机和无线电通讯。这就是第二次工业革命,他让美国成为了世界第一强国。20世纪中叶,因为电子技术计算机技术发展,人类迅速进入了电子时代,这就是第三次工业革命。日本抓住了这个机会,迅速从战争的阴影中走了出来,成为世界最发达国家俱乐的一员。前三次工业革命中国都没赶上,而现在世界正处于无线互联网、人工智能、新能源和生物科技为代表的第四次工业革命当中。这一次中国人没有缺席,无论是5G还是人工智能,亦或是新能源或者生物科技。中国的科学家和工程师用了二十多年实现了追赶,在很多新科学和新技术方面,走在了世界的前列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/92598.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程练习(1)

目录 一.选择题 第一题: 第二题: 第三题: 第四题: 第五题: ​编辑 二.编程题 第一题: 第二题: 1.暴力方法: 2.数组法: 一.选择题 第一题: 解析&…

学习 Iterator 迭代器

今天看到一个面试题, 让下面解构赋值成立。 let [a,b] {a:1,b:2} 如果我们直接在浏览器输出这行代码,会直接报错,说是 {a:1,b:2} 不能迭代。 看了es6文档后,具有迭代器的就一下几种类型,没有Object类型,…

k8s service

1、认识Service 程序在容器中、容器在Pod中,可以通过pod的ip来访问应用程序,但是podIP会随着创建销毁而改变。由此,Service出现: Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问…

【Docker】Docker使用之容器技术发展史

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正&#xff0…

WSL2 Ubuntu子系统安装OpenCV

文章目录 前言一、基本概念二、操作步骤1.下载源码2.安装依赖3.运行编译4.配置路径 前言 OpenCV用C语言编写,它的主要接口也是C语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语…

KafkaStream:基本使用

简介: kafkaStream:提供了对存储在kafka中的数据进行流式处理和分析的功能 特点: KafkasSream提供了一个非常简单轻量的Library,它可以非常方便的嵌入到java程序中,也可以任何方式打包部署 入门案例: 1、…

Kotlin优点及为什么使用Kotlin

文章目录 一 Hello Kotlin二 Kotlin优点三 团队为什么采用 Kotlin 一 Hello Kotlin Kotlin和Andriod 二 Kotlin优点 三 团队为什么采用 Kotlin

安卓:网络框架okhttp

目录 一、okhttp介绍 1. OkHttpClient类: 常用方法: 2. Request类: 常用方法: 3. Response类: 常用方法: 4. Call类: 常用方法: 5. Interceptor接口: 常用方法&…

使用蓝牙外设却不小心把台式机电脑蓝牙关了

起因 今天犯了一个贼SB的错误,起因是蓝牙键盘突然就不能输入了(虽然是连接状态,但是按什么键都没有反应) 原来我的解决方法就是重启一下电脑,但是那会电脑开了贼多的软件。我就想重启也太麻烦了,既然重启…

Docker 基本管理(一)

目录 一、虚拟化简介 1.1.虚拟化概述 1.2.cpu的时间分片(cpu虚拟化) 1.3.cpu虚拟化性性能瓶颈 1.4.虚拟化工作原理 1.5 虚拟化类型 1.6 虚拟化功能 ​二、Docker容器概述 2.1 docker是什么? 2.2 使用docker有什么意义&#xff…

支持https访问

文章目录 1. 打开自己的云服务器的 80 和 443 端口2. 安装 nginx3. 安装 snapd4. 安装 certbot5. 生成证书6. 拷贝生成的证书到项目工作目录7. 修改 main.go 程序如下8. 编译程序9. 启动程序10. 使用 https 和端口 8081 访问页面成功11. 下面修改程序,支持 https 和…

读书笔记 |【项目思维与管理】➾ 顺势而动

读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 💖The Begin💖点点关注,收藏不迷路💖 …

MySQL 函数

mysql 函数语法 create function 函数名(参数名 参数类型,。。。) returns type —返回值类型 ----returns 有个 s [characteristics…] begin 函数体 ### 函数体中肯定有 return 语句 end 参数列表 指定参数为 IN | out | INOUT 只对存储过程…

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…

Android:自定义沿着曲线轨迹移动

前言 前几天,后台有老铁留言,说有个需求,画两条曲线,中间是一个小球,沿着两条线中间的轨迹从左往右移动,让提供个思路,做为一个极度宠粉的博主,思路不仅要提供,实现方案也…

八大排序超详解(动图+源码)

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注&…

【Linux】IO多路转接——select接口

目录 I/O多路转接之select select初识 select函数 socket就绪条件 select基本工作流程 select服务器 select的优点 select的缺点 select的适用场景 I/O多路转接之select select初识 select是系统提供的一个多路转接接口。 select系统调用可以让我们的程序同时监视多…

拦截器和过滤器的区别

😀前言 本篇博文是关于拦截器VS 过滤器的分享,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我…

【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值

数据预处理 💫数据预处理的重要性💫处理缺失值⭐️识别表格中的数据⭐️计算每列缺失值的数量⭐️删除含有缺失值的样本或特征⭐️填充缺失值 💫处理异常值⭐️异常值的鉴别⭐️异常值的处理 💫将数据集划分为训练数据集和测试数据…

Jmeter-压力测试工具

文章目录 Jmeter快速入门1.1.下载1.2.解压1.3.运行 2.快速入门2.1.设置中文语言2.2.基本用法 Jmeter快速入门 1s内发送大量请求,模拟高QPS,用以测试网站能承受的压力有多大 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK&#xff0…