为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(一)...

news2024/11/24 9:56:59

 太长不看总结版:LLM大模型的本质在于计算某个词汇后面应该跟着哪些词汇的概率。当问题给定了特定的限定范围后,它能够找到一条相对明确的计算路径,从一系列概率分布中挑选出所需的答案。否则,它会根据最常见且最高概率的组合方式生成回答内容。

6d2a6d64b2034d4063a1ed04aa29c38d.png

01

缘起

在前面文章中:被卖到 2w 的 ChatGPT 提示词 Prompt 你确定不想要吗?

点燃创作灵感:Prompt 实践指南揭秘!让 ChatGPT 更智能的六种策略(上),我们曾提到,在向大模型提问时,告诉它扮演一个领域专家的角色,它的回答会更有针对性。

但为什么会这样呢?为什么大模型本质上只是预测词汇出现的概率就能让它输出问题的答案呢?

为了寻找这个问题的答案,找到了一篇科普文章,详细解释了大模型的工作原理和它为何能够发挥作用。文章以简明的方式科普了大模型的工作原理,让我们一起来探索吧!

原文地址(英文)在这里,有兴趣的朋友可以看原文:‍‍‍

https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/

原文比较长,我把它将分为三部分逐次向大家科普,以下为翻译的内容,“我”为原作者,“注”为我的理解。‍‍‍‍‍‍‍‍‍‍‍

02


只需一次添加一个单词

ChatGPT 可以自动生成一些读起来就像人类书写的文本一样的东西,它是如何做到的呢?为什么它有效?

我在这里的目的是粗略地概述 ChatGPT 内部正在发生的事情,然后探索为什么它可以很好地生成我们认为有意义的文本。虽然会提到一些工程细节,但我不会深入探讨它们。(这里所说的本质同样适用于其他当前的“大型语言模型”[LLM] 和 ChatGPT。)

首先要解释的是,ChatGPT 从根本上一直试图做的是,对迄今为止所获得的任何文本进行“合理的延续”。

“合理”的意思是“在看过人类已经写在数十亿个网页上的内容之后,可能期望会继续写些什么内容,等等。”

假设我们有这么一句话:“人工智能最好的是它的能力(The best thing about AI is its ability to)”。想象一下,扫描数十亿页的人类书写文本(例如在网络上和数字化书籍中)并找到该文本的所有实例,然后统计这句话接着出现词汇的次数。

ChatGPT 有效地做了类似的事情,除了它不查看文字文本;它寻找某种意义上“意义匹配”的事物。最终的结果是,它生成了一个可能跟随的单词的排名列表,以及“概率”:

59e817092fd0ad67a908e841f99d0517.png

值得注意的是,当 ChatGPT 做类似写文章之类的事情时,它本质上只是一遍又一遍地询问“给定到目前为止的文本,下一个单词应该是什么?”,并且每次都添加一个单词。(更准确地说,它添加了一个“标记”,它可能只是单词的一部分,这就是为什么它有时可以“组成新单词”。)

在每一步它都会得到一个带有概率的单词列表。但它实际上应该选择哪一篇来添加到它正在写的文章(或其他内容)中呢?人们可能认为它应该是“排名最高”的单词(即被分配最高“概率”的单词)。

但这就是一点 voodoo (注:指某种奇怪,无法科学解释的现象)开始蔓延的地方。因为出于某种原因——也许有一天我们会对它有一个科学式的理解——如果我们总是选择排名最高的单词,我们通常会得到一个非常好的单词。 “平淡”的文章,似乎从来没有“表现出任何创造力”(甚至有时逐字重复)。但如果有时(随机)我们选择排名较低的单词,我们会得到一篇“更有趣”的文章。

注:这也是为什么多数情况下,我们会觉得大语言模型回答问题的时候过于官方正式,风格有点像翻译腔,如果不用指定的提示词。)‍‍‍‍‍‍‍‍

事实上,这里存在随机性,这意味着如果我们多次使用相同的提示,我们每次都可能得到不同的文章。而且,为了与 voodoo 的思想保持一致,有一个特殊的所谓“温度(temperature)”参数,它决定了排名较低的单词的使用频率,对于论文生成,事实证明 0.8 的“温度”似乎是最好的。(值得强调的是,这里没有使用“理论”;这只是在实践中发现有效的数值。例如,“温度”的概念之所以存在,是因为碰巧使用了统计物理学中熟悉的指数分布,但不存在“物理”联系)

在这里,我是使用更简单的GPT-2 系统来解释大语言模型是怎么工作的。该系统具有一个很好的功能,即它足够小,可以在标准台式计算机上运行。因此,对于我展示的基本上所有内容,提供了 Wolfram 语言代码,您可以立即在计算机上运行它们。

例如,以下是如何获取上面的概率表。首先,我们必须检索底层的“语言模型”神经网络:

5b31ba64bdf35b11835dd9331651ef7f.png

稍后,我们将深入研究这个神经网络,并讨论它是如何工作的。但目前我们可以将这个“网络模型”作为黑盒应用到我们的文本中,并根据模型所说的概率来询问前 5 个单词:

e30f98cb58e915c768cca970920738bc.png

获取该结果并将其放入显式格式化的“数据集”中:

e2f77da7d3c941c942d4cb1d3f1bb691.png

如果重复“应用模型”,会发生以下情况 - 在每一步添加具有最高概率的单词(在此代码中指定为模型的“决策”):

6ba9e43b3285dc943f5c1ef01e0b5d6a.png

如果一个人持续更长时间会发生什么?在这种(“零温度”)情况下,结果很快就会变得相当混乱和重复:

27a47c022832889761fddab8c61f8737.png

但是,如果不是总是选择“顶部”单词,而是有时随机选择“非顶部”单词(“随机性”对应于“温度”0.8)呢?再次可以构建文本:

01b3f888fe51cda1e41a52ca6e1f763e.png

每次这样做时,都会做出不同的随机选择,并且文本也会不同 - 正如以下 5 个示例所示:

cc4f07b86a0bbf3cbaa8231e0b1ef406.png

值得注意的是,即使在第一步,也有很多可能的“下一个单词”可供选择(温度为 0.8),尽管它们的概率下降得很快(这个对数图上的直线对应于n –1 “幂律”衰减,这是语言一般统计的特征):

7efb869f76f105cdf6af6aa4437bd7bc.png

那么如果这个句子持续继续下去会发生什么呢?这是一个随机的例子。它比开始单词(temperature=0)的情况要好,但仍然有点奇怪:

0e17e72417220eb3ac60e176a7c1c2f3.png

这是使用简单的 GPT-2 模型(2019 年起)完成的。使用更新、更大的 GPT-3 模型,结果会更好。这是使用相同“提示”生成的开始单词(temperature=0),但是还是有一点奇怪:

6ac6afa966e142263b7f2c2851f1414e.png

这是“temperature=0.8”下的随机示例:

76fcd2b940cbb03e8c4262f5bfa61b33.png

03

概率从何而来?

ChatGPT 总是根据概率选择下一个单词,这些概率从何而来?

让我们从一个更简单的问题开始。让我们考虑一次生成一个字母(而不是单词)的英语文本。我们如何计算出每个字母的概率应该是多少?

(注:很多年前,有人就根据字母的出现的概率开发了一款用于检查拼写错误的软件,微软将其用于 Office 办公软件系列中,效果比之前用规则检查的方法好很多。)‍‍‍‍‍‍‍

我们能做的最简单的事情就是获取英文文本样本,并计算其中不同字母出现的频率。例如,这对维基百科关于“猫”的文章中的字母进行计数:

269bf14d1d40e34914183e4f1bc7f71e.png

这对“狗”也有同样的作用:

5c82164341b05c50e42c0955bc3c733b.png

结果相似,但不一样(“o”无疑在“dogs”文章中更常见,因为毕竟它出现在“dog”一词本身中)。尽管如此,如果我们采用足够大的英语文本样本,我们可以期望最终得到至少相当一致的结果:

f8ae93156c13f3836d992c06b09ba88f.png

如果我们只是生成具有这些概率的字母序列,我们会得到以下示例:

43c26ebeea56c1a47144cfe4c524f28d.png

我们可以通过添加空格将其分解为“单词”,就好像它们是具有一定概率的字母一样:

1822eaed0eeb42f85e542a6374f263b4.png

我们可以通过强制“单词长度”的分布与英语中的一致来更好地制作“单词”:

4bbf9115c9f7553394bc17de710b2fa4.png

我们在这里没有碰巧得到任何“实际的单词”,但结果看起来稍微好一些。然而,为了更进一步,我们需要做的不仅仅是随机挑选每个字母。例如,我们知道如果我们有一个“q”,那么下一个字母基本上必须是“u”。

这是字母本身的概率图:

c9015060ea498add9b9b65460861313a.png

下面的图显示了典型英语文本中字母对(“2-grams”)的概率。可能的第一个字母显示在整个页面上,第二个字母显示在页面下方:

04708539eb9201487c38f96099d75b5d.png

例如,我们在这里看到,除了“u”行之外,“q”列是空白的(零概率)。好的,现在我们不再一次生成一个字母的“单词”,而是使用这些“2-gram”概率一次查看两个字母来生成它们。这是结果的示例,其中恰好包含一些“实际单词”:

924dafa178d1233eb68da909b13df6a8.png

有了足够多的英文文本,我们不仅可以对单个字母或字母对(2-grams)的概率进行很好的估计,而且还可以对较长的字母序列进行估计。如果我们生成n元语法概率逐渐变长的“随机词”,我们会看到它们逐渐变得“更现实”:

0b365835b537924b07a21bf8cd58502e.png

但现在让我们假设(或多或少像 ChatGPT 一样)我们正在处理整个单词,而不是字母。英语中大约有 40,000 个合理常用的单词。通过查看大量的英语文本语料库(比如几百万本书,总共有几千亿个单词),我们可以估计每个单词的常见程度。使用它,我们可以开始生成“句子”,其中每个单词都是独立随机挑选的,其出现在语料库中的概率相同。这是我们得到的示例:

b8b4cd55bbf38faf4b661d09b804de86.png

毫不奇怪,这是无稽之谈。那么我们怎样才能做得更好呢?就像字母一样,我们不仅可以开始考虑单个单词的概率,还可以考虑单词对或更长n元语法的概率。成对进行此操作,以下是我们得到的 5 个示例,所有情况都从单词“cat”开始:

bb5215f7f3955fe5542b97cbe34a3c24.png

它变得稍微“看起来更明智”了。我们可能会想象,如果我们能够使用足够长的n元语法,我们基本上会“得到一个 ChatGPT”——从某种意义上说,我们会得到一些东西,可以生成具有“正确的整体文章”的文章长度的单词序列。概率”。但问题是:目前还没有足够的英文文本来推断这些概率。

网络爬行中可能有几千亿个单词;数字化的书籍中可能还有数千亿字。但对于 40,000 个常见单词,即使可能的 2-gram 数量也已经是 16 亿个,而可能的 3-gram 数量则达到 60 万亿个。因此,即使从现有的文本中我们也无法估计所有这些的概率。当我们写到20个字的“论文片段”时,可能性的数量比宇宙中的粒子数量还多,所以从某种意义上说,它们永远不可能全部写下来。

所以,我们能做些什么?最重要的想法是建立一个模型,让我们能够估计序列出现的概率——即使我们从未在我们所查看的文本语料库中明确看到过这些序列。ChatGPT 的核心正是所谓的“大语言模型”(LLM),它的构建是为了很好地估计这些概率。

04

什么是模型?

假设想知道(正如伽利略在 1500 年代末所做的那样)从比萨斜塔每一层投下的炮弹需要多长时间才能落地。

可以在每种情况下进行测量并制作结果表格。或者可以做理论科学的本质:建立一个模型,给出某种计算答案的程序,而不仅仅是测量和记住每个案例。

假设我们有(有点理想化的)炮弹从不同楼层落下所需时间的数据:

36cf63e296b239512af5cc4b2ff3f06c.png

我们如何计算从没有明确数据的地板上掉下来需要多长时间?在这种特殊情况下,我们可以使用已知的物理定律来解决这个问题。但假设我们拥有的只是数据,而我们不知道管辖这些数据的基本法律是什么。然后我们可能会做出一个数学猜测,比如也许我们应该使用直线作为模型:

6c03d5a876e2c484695f594cb06c50d7.png

我们可以选择不同的直线。但这是平均最接近我们给出的数据的一个。从这条直线我们可以估算出任何楼层的跌落时间。

我们怎么知道在这里尝试使用直线?在某种程度上我们没有。这只是数学上简单的东西,我们已经习惯了这样一个事实:我们测量的大量数据结果与数学上简单的东西非常吻合。我们可以尝试一些数学上更复杂的东西——比如a + b x + c x 2——然后在这种情况下我们做得更好:

edc18e52fd50ddc9140429053ffd1be4.png

不过,事情也可能会变得很糟糕。就像这是我们可以用a + b / x + c sin( x )做的最好的事情:

5040d5d34ad7c38cc3b76dddd2b4c9f7.png

永远不存在“无模型模型”。使用的任何模型都有一些特定的底层结构 - 然后是一组特定的“可以转动的旋钮”(即可以设置的参数)来适应实际的数据。就 ChatGPT 而言,使用了大量此类“旋钮”——实际上,有 1750 亿个。

但值得注意的是,ChatGPT 的底层结构——“仅仅”有那么多参数——足以建立一个模型,“足够好”地计算下一个单词的概率,从而为我们提供合理的论文长度的文本片段。

05

模仿人的模型

我们上面给出的例子涉及为数据建立一个模型,该模型本质上来自简单的物理学——几个世纪以来我们都知道“简单的数学适用”。

但对于 ChatGPT,我们必须建立一个由人脑产生的人类语言文本模型。对于类似的事情,我们(至少现在)还没有“简单数学”之类的东西。

那么它的模型会是什么样子呢?

在讨论语言之前,我们先讨论另一个模仿人的任务:识别图像。作为一个简单的例子,让我们考虑数字图像(一个经典的机器学习示例):

a7226248f84a5dd9bdd2ff044cb378b0.png

我们为每个数字建立一堆样本图像:

26bfd841d9f2db49d268bb8b483bad78.png

然后,为了查明我们作为输入给出的图像是否对应于特定数字,我们可以与我们拥有的样本进行显式的逐像素比较。但作为人类,我们似乎确实做得更好——因为我们仍然可以识别数字,即使它们是手写的,并且有各种修改和扭曲:

c792a2925785d9e583cabeacc2a86a43.png

当我们为上面的数值数据创建模型时,我们能够获取给定的数值x ,然后计算特定的a和b的a + bx。因此,如果我们将这里每个像素的灰度值视为某个变量x i,是否存在所有这些变量的某个函数——在评估时——告诉我们图像的数字是多少?事实证明,构造这样的函数是可能的。毫不奇怪,但它并不是特别简单。一个典型的例子可能涉及五十万次数学运算。

但最终的结果是,如果我们将图像的像素值集合输入到这个函数中,就会得到一个数字,指定我们拥有图像的哪个数字。稍后,我们将讨论如何构造这样的函数以及神经网络的思想。但现在让我们将该函数视为黑匣子,我们在其中输入手写数字的图像(作为像素值数组),然后得到这些对应的数字:

dfb9d71228ff74be46c6da1c10d138fc.png

但这里到底发生了什么?假设我们逐渐模糊一个数字。有一段时间我们的函数仍然“识别”它,这里是“2”。但很快它就“失去了它”,并开始给出“错误”的结果:

68c138a951097ef013c53bd70b6c81c7.png

但为什么我们说这是“错误”的结果呢?在这种情况下,我们知道我们通过模糊“2”获得了所有图像。但如果我们的目标是建立一个人类在识别图像方面可以做什么的模型,那么真正要问的问题是,如果人类看到其中一张模糊图像而不知道它来自哪里,他会做什么。

如果我们从函数中得到的结果通常与人类所说的一致,那么我们就有了一个“好模型”。重要的科学事实是,对于这样的图像识别任务,我们现在基本上知道如何构建执行此操作的函数。

我们可以“从数学上证明”它们有效吗?嗯,不能。

因为要做到这一点,我们必须对人类所做的事情有一个数学理论。拍摄“2”图像并更改一些像素。我们可能会想象,只有几个像素“不合适”,我们仍然应该将图像视为“2”。但这应该走多远呢?这是人类视觉感知的问题。是的,对于蜜蜂或章鱼来说,答案无疑会有所不同,对于假定的外星人来说,答案也可能完全不同。

注:当我明白大模型的统计学原理后,也就明白为什么 ChatGPT 的token 是连问题带回答一起计算的字数。因为大模型并不知道答案是什么,它是把问题的词汇后面最有可能出现的词汇呈现出来。)‍‍‍‍‍‍‍‍‍

下期预告:ChatGPT 真正发挥作用的是什么?‍

学习AI过程中,寻找过不少资料来学习人工智能是怎么工作的,也包括机器学习等范畴的内容,觉得这篇写得深入浅出,我能看明白,所以在这里推荐给朋友们。‍‍‍‍‍‍‍‍‍‍

人工智能的发展经历了多个技术路线的演进,过去的发展技术路线如下:

  1. 符号推理(Symbolic Reasoning):在上世纪50年代和60年代,人工智能的早期研究主要集中在符号推理上。这种方法使用逻辑规则和符号表示来模拟人类的推理过程。

  2. 专家系统(Expert Systems):在上世纪70年代和80年代,专家系统成为人工智能的主流技术。专家系统利用专家的知识和规则来解决特定领域的问题。

  3. 机器学习(Machine Learning):在上世纪80年代末和90年代,机器学习开始引起广泛关注。机器学习通过从数据中学习模式和规律来进行预测和决策。包括监督学习、无监督学习和强化学习等技术。

  4. 神经网络(Neural Networks):神经网络是一种受到人脑神经元结构启发的模型,它能够通过大规模的训练数据进行模式识别和分类。然而,在上世纪90年代,神经网络的发展进入了低谷。

  5. 深度学习(Deep Learning):深度学习是指使用深层神经网络进行机器学习的技术。通过引入更深的神经网络结构和更强大的计算资源,深度学习在近年来取得了巨大的突破,并在图像识别、语音识别和自然语言处理等领域取得了显著成果。

除了上述技术路线外,还有其他的人工智能技术和方法,例如进化算法、自然语言处理、计算机视觉等。随着技术的不断演进和融合,人工智能正不断推动着科技和社会的进步。

往期热门文章推荐:

终于部署成功!GPU 云环境搭建 ChatGLM2-6B 坎坷路

ChatGLM2-6B 初体验

两个把 ChatGPT 利用到极致的技巧

拥抱未来,学习 AI 技能!关注我,免费领取 AI 学习资源。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浑元太极马老师和小薇-UMLChina建模知识竞赛第4赛季第7轮[更新]

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 第7轮一直无人得分,再次更换题目。 因有的题目之前已经出过,本轮需要最先答对全…

聊天室(二)__ unipush 推送如何实现?

你想搞个自己的聊天室 app 吗?好多前端同学会好奇聊天室app的推送是怎么搞的?今天就以前端同学使用最多的 uniapp 开发的 app 推送为例,悄悄告诉大家推送是如何实现的! 项目技术栈: 项目基于 vue3 的 uniapp 推送基于…

从小白到大神之路之学习运维第51天---第三阶段----redis高可用集群数据库的安装部署

第三阶段基础 时 间:2023年7月3日 参加人:全班人员 内 容: 生产级redis cluster部署 目录 一、环境配置:【两台服务器】 二、redis多实例配置: 三、构建redis cluster集群 四、生产集群部署 五、集群故障切…

Makefile:1: *** 遗漏分隔符 (null)。 停止。解决方法

在使用ubuntu时,make命令后,直接弹出了个错误。。。。。。 Makefile: n n表示出问题的行数,仔细检查代码的内容,主要问题可能是该有的空格是否添加或者使用$引入的参数是否存在等 我的问题是这个 ifneq 后面的空格没有加 耐心查…

论文浅尝 | 大语言模型综述

笔记整理:刘康为、方润楠,浙江大学硕士,研究方向为自然语言处理 链接:https://arxiv.org/abs/2303.18223 一、介绍 在当前机遇和挑战的背景下,对大语言模型的研究和开发需要更多的关注。为了让读者对大语言模型有一个基…

C++实现打包工具代码框架(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、打包工具二、packtool框架前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近…

windows10安装wsl2,centos内核

windows10安装wsl2,centos内核 检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】>>【程序】>>【程序和功能】>>【启…

apple pencil平替笔哪个好用?适用于绘画的电容笔推荐

由于ipad的版本一直在升级,其功能也在增加,其功能已经达到了与手提电脑相媲美的程度。而且随着科技的发展,ipad也不仅仅是一个娱乐的工具,更是一个可以用来学习、画画、工作的强大工具。想要提高生产力,那么电容笔就是…

mysql 8.0版本更换用户密码

1、首先 cmd 进入命令行 mysql -uroot -p 2、查询版本号 select version(); 3、看一下数据库 show databases; 4、使用mysql即可 5、进行查询 user、host select user,host from user; 6、修改root的密码 alter user root% identified by 1234; 7、刷新权限 flush privi…

Kubernetes 服务发布方式(蓝绿发布、灰度发布和滚动发布)

目录 一、三种常用的项目发布方式1.1 蓝绿发布1.2 灰度发布(金丝雀发布)1.3 滚动发布 二、金丝雀的方式升级发布实验三、总结 一、三种常用的项目发布方式 应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境&…

Windows服务器——部署WSUS服务与综合测试

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 本章结构: 一.WSUS概述 1.WSUS概述 2.WSUS的特点 3.WSUS常见部署…

fastboot连接@设备识别问题

文章目录 fastboot模式(MIUI)界面变换fastboot链接电脑设备识别问题连接部件的兼容性 fastboot模式(MIUI)界面变换 老设备新设备 fastboot链接电脑设备识别问题 通常一根普通的数据线和PC就能够识别处于fastboot(bootloader)模式下的android设备 扫描已连接的bootloader模式…

软件设计模式与体系结构-设计模式-结构型软件设计模式-外观模式

目录 三、外观模式概念外观模式分析实例一:实例二:图形绘制外观模式讨论一个系统有多个外观类?不要试图通过外观类为子系统增加新行为外观模式与迪米特法则抽象外观类的引入 (因为违背开闭原则)使用外观模式的目的适配…

机器人学科建设沙盘套件!mechArm机械臂智慧农业3D分拣套装详解

作为最热门的技术领域,机器人技术正在彻底改变产业,并推动全球的创新。为了满足这个快速发展的领域对技术人才日益增长的需求,高校开发了一个开创性的机器人教育解决方案。这个创新的解决方案将自动化水果采摘机的模拟与水果分拣和运送的自动…

《AutoSar实战》读写DID之二:工具链配置

文章目录 前言一、配置DID存储功能1. 新建Ram memory2. 新建NvM Block Needs3. 检查 二、关联client/server接口1. 关联2. 生成代码并验证 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点: 1&#…

【ARM】-SWI 和未定义指令异常中断处理程序的返回

文章目录 处理流程示例代码实现SWI未定义指令 附录源码 处理流程 SWI 和未定义指令异常中断是由当前执行的指令自身产生的,当 SWI 和未定义指令异常中断产生时,程序计数器的 PC 的值还未更新,它指向当前指令后面第 2 条指令(对于…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(一)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

异步的终极方案Async-Await 和Generator

Async-Await 基本介绍 之前解决异步我们一直使用Promise的.then()方案,虽然解决了回调地狱的情况,但使用链式写法也并不特别优雅。比如看下面的代码。 所以就出现了一种号称异步的终极方案Async、Await。我们看他的定义 async 函数是使用async关键字…

手枪钻改台钻(3D打印)

所需工具: 1、3D模型打印; 2、手枪钻; 首先在SOLIDWORKS里面新建一个电钻夹的模型: 第二步导出“STL”文件: 第三步将"STL"文件导入到3D切片工具 Cura_15.02.1 里面进行切片: 第四步导出“g-…

显示器方案

概述: USB HUB连接Host与Device之间,可以扩展出多个USB设备接口,使得一个Host能同时与多个Device进行数据连接。 注:普遍而言,一颗HUB扩展芯片可扩展4个USB下行接口,市面上1 to 7的HUB,一般使用…