3.线性神经网络

#pic_center

R 1 R_1 R1

R 2 R^2 R2

目录

  • 知识框架
  • No.1 线性回归+基础优化算法
    • 一、线性回归
      • 1、买房案例
      • 2、买房模型简化
      • 3、线性模型
      • 4、神经网络
      • 5、损失函数
      • 6、训练数据
      • 7、参数学习
      • 8、显示解
      • 9、总结
    • 二、 基础优化算法
      • 1、梯度下降
      • 2、学习率
      • 3、小批量随机梯度下降
      • 4、批量大小
      • 5、总结
    • 三、 线性回归的从零开始实现
      • 1、D2L注意点
    • 四、线性回归的简洁实现
    • 五、QA
  • No.2 Softmax回归+损失函数+图片分类数据集
    • 一、Softmax回归
    • 二、损失函数
    • 三、图片分类数据集
    • 四、Softmax回归从零开始
    • 五、Softmax回归简单实现
    • 六、QA

知识框架

No.1 线性回归+基础优化算法

一、线性回归

线性回归是机器学习最基础的一个模型;也是我们理解之后所有深度学习模型的基础;所以我们从线性回归开始

image-20231018225819250

1、买房案例

这个应用是说如何在美国买房;在美国买房;跟在任何地方买房都是一样;就说我们先得去看一下那个房;了解一下房子的各种信息;他可能跟很多地方不一样的地方在于是说我看中一个房之后;我要买它的话我是需要讲价;就是说举个例子;这里有一个房;这里显示它的基本信息是说;这个房的出价;售价是说大概550万美金;它有7个卧室5个卫生间;它的居住面积是4,865 square feed;折合大概是460平米的样子;但是呢;注意到这个价格它不是你的成交价;它是说我的卖房经纪人他的列价;那下面你可以看到是有一个;美国一个比较有名的卖房的网站;他对这个房子的估价是;大概是540十万的样子;但这两个价格都是给你做参考用的;你最终是说你得去出一个价格;所以这是一个预测问题;就说你得根据现在的行情得预测;说你大概多少钱能买下这个房子;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以可以看到是说我给你的是标价;给你的是预计价格;然后呢我们要出一个价;这里是说;你的出价真的很重要;因为是真正的钱;我们再来看两套房子;

然后你的x轴是你的年份;然后呢这个曲线;这个曲线是说;根据历史信息你周围的房子;系统对你的评估价格;然后这一个dollar符号是说;你在此你在什么时候;出了多少钱买下了这个房子;所以你的最好的;当然是说;你的出的价格是远低于你的系统的估价;就说那你就赚到了这个房子还可以;就说就是他的估价跟;出价和估价是差不多的;

然后这一个其实就是我了;是我们第一次买房不懂那么多规矩;我们就多出了10万块钱;所以看到就是说;这个是;在一年之后;系统对这个房子的评估;仍然比我们的出价还要低一些;所以这个大概是10万美金的差价;所以呢从此以后我们就开始关心房价预测这个问题;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、买房模型简化

接下来;我们通过这个应用来引出线性回归;这里我们做一个简化的模型;我们有做两个假设;第一个假设是说;影响房价的关键因素是三个;卧室的个数;卫生间的个数和居住面积;我们记为X1 X2 X3;其实你还有很多别的因素;我们先做一个最简单的假设;第二个假设是说我的成交价;是我关键因素的加权和;那就是说我的成交价y;就是W1乘以X1加上W2乘X2加上W3乘X3;再加上一个b;这里权重W1 W2 W3和偏差b;的实际值我们之后再来决定;

但是我们假设我们这些值已经有了;那么我们的成交价就是这四个项加和;这是我们的核心模型;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3、线性模型

那么把它拓展到一般化的线性模型;就是说;我们如果给定一个n维的输入x;它由x1一直到x n这n个项;然后我的线性模型呢;就会有一个n维的权重w;它包括了w1一直到w n;和一个标量的偏差b;那么我们的输出;就是我们的输入的加权和;就是从W1乘以X1一直加加加;加到w n乘x n;再加上偏差b;如果我们写成一个向量版本的话;那就是我的输入x一个向量和;权重w的累积;再加上我的标量偏差b;好这就是我的线性模型;

image-20231018230409200

线性模型;之所以我们讲这个模型;是因为它可以看作是一个单层的;神经网络;假设我们的神经网络;通常我们用这样子的图来表示;我们的输入层;还有这里我们是画了n个输入的元素;跟我们机器的n;第一个输入元素;跟我们机器的n是匹配的;那就是说我有输入的维度是d;然后呢;我输出的维度是一就是一个O1;

然后每一个箭头代表了一个权重;这里我们没有画偏差;那就是说;我这个神经网络是一个输入层;和一个输出层;它之所以叫做单层神经网络;是因为它带权重的层就是1;我们可以把输出层不当做一个层;因为我把权重跟输入层放在一起;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4、神经网络

我们第一次提到神经网络;其实最早源于神经科学;在很在60年代50年代;大家对神经科学的一些突破;使得大家来学想;我是不是能够做一个人工的神经网络;来模拟人的大脑;这里显示的是一个;真实的神经元的构造;

可以看到是说我们的输入;这个神经元的输入需要挺多的;然后我们的输入之后;会在神经元这个地方发生一些计算;它的输出结果会通过一个;这个输出到下一个神经元;他的计算就表示说;你的输入是不是能够过了我的阈值;如果过了我的阈值;我就会发射一个神经信号出去;如果没有的话那我就是不发射;

这也是为什么我们把这一类的模型叫做神经网络;因为它来自于神经科学;但实际上来说;在过去几十年的50年60年的发展中;神经网络已经;远远的超出了神经科学所了解的范畴我们也不那么去追求;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5、损失函数

我们已经有了模型了我们可以做预测;那么接下来一个很重要的事情是说;我们要衡量我们的;预测的质量会怎么样;也就是说我们要比较我们真实的值;就是卖房的成交价和预估值;就是我对这个房子的估计;所以我们要比较他们的区别;

但是区别越小我的模型质量越高;区别越大我的模型质量就越差;所以我们假设y是我们的真实值;y hat是我们的估计值;有一个很常见的一个比较是说1/2乘以真实值减去估计值的平方;这叫平方损失;因为它衡量的是说我们没有完全猜中真实值所带来的损失;或者说是经济损失了;在已知所有个1/2;是因为我们只有求导的时候;可以很方便的把它消去;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6、训练数据

定了模型;定了损失之后;我们就来学习我们的参数了;这是我们的权重和我们的偏差;我们怎么学习呢;我们是集数据来学习的;我们一般来说会先收集一些数据点;来训练我们的模型;例如说这个例子里面;我们可以去采集;过去6个月里面所有卖的房子;他的房子的信息和他的最终的成交价;这些数据我们一般会称之为训练数据;是用来训练我们模型的数据;通常来说是越多越好了;但实际上来说你会受限于很多事情;比如说这个世界上就那么多房子;每个月卖的房子;他其实是一个缓慢的;可能是在增加可能是减少的过程;但他不会有无穷多的房子;所以的话;我们就算把所有的房子的信息;采集下来;也可能就那么多;所以一般来说我们有很多技术来处理;当你的数据不够的时候会怎么办;我们之后会有非常多的算法来;探讨这个问题;这里我们先不再深入了解;我们先来看一下训练样本;假设我们有n个样本的话;那我们可以把它;假设我们一个样本;每一个x是一个列的相量的话;我们一排一排排好;然后作为转置;那我们的大x的每一行;对应的就是一个样本;的y同样的它是一个列项量;那也是有n个样本;每一个y i就是一个实数的数值;这就是我们的x和y;也就是我们的数据;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7、参数学习

那么我们就可以求解我们的模型了;我们的怎么根据我们之前的损失;给定我们的数据;那么我们来评估说对于我们的模型;在每一个数据上的损失求均值;就会得到我们的一个损失函数;我们把它写出来;就是说它是关于我们的数据;x和y关于我们的权重;关于我们的偏差;它可以写开;就是说;1/2这个像来自于我们的损失函数;n分之一就是我们要求平均;然后呢对于每一个样本;我们的真实YI;减去后面是我们的预测值;就是;一i个样本的x和我们的权重的累积;和我们的偏差;当然我们可以写成一个向量版本;就是一个y向量版本的y减去;矩阵x乘以向量w再减去b;b是一个标量;然后对向量求l to no;这就是我们的损失函数;那我们的目标呢;就是说我们要找到一个w和一个b;使得我们的整个这一项的值最小;也就是说;我们可以最小我们的损失函数;来学习参数;我们选取一个WB;使得能最小化这一项;把这个最小化的它做为我们的解;也就是w和b;好这个整个就是我们的求解过程;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8、显示解

线性模型了;所以它是有显示解的;我们来看一下它的显示解;长成什么样子;;我们最简单是说因为我们有偏差;我们先把偏差加入我们的权重;使得我们的写起来方便一点;具体怎么加呢;就是我们加入一列特征全1的特征;加进我们的x里面;让我们再把偏差放到权重的最后面;放到我们的w里面;那么我们的预测就是x乘以w了;那我们的损失函数可以写成;2 n分之一;然后y减去x是w它的l作弄;

回忆下我们之前介绍的;矩阵计算里面我们可以对它来;展开求导;就是大家也回忆一下;我们是讲过这个例子的;它就是等于1/2;y减去x w;也就是我们的预计的一个偏差;再转置乘以x;因为这是线性模型;所以它的损失是一个凸函数;我们并没有解释什么是凸函数;你可认为就是一个比较简单的一个这样子的函数;

所以呢突函数它的性质是说;它的最有解是满足于一定是;使得它的t do等于0的地方;所以我们把它带进去;最后会得到是说我们的最优解w*;其实可以计算成为x转置乘以x;然后再求逆;再乘以x再乘以y;这是我们最优解的形式;当然是说;这个是我们;唯一的一个有最优解的模型;我们之后所有的解都不会有最优解了;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9、总结

线性回归;是对n维输入的一个加权和;再加上一个偏差;这是它的对一个输出值的预估;然后对于;他跟预测值和真实值距的差异;通常是用平方损失来衡量;

线性回归是有一个;是一个非常特别的一个模型;它有显示解;我们;这堂课所有别的模型都没有显示解;因为有显示解的模型;一般来说过于简单;机器学习通常是用来解决;NP难的问题;如果你一个模型可以很快求解的话;通常来说它的复杂度有限;难于衡量特别复杂的数据和复杂的是应用;所以来说我们一般不会再去追求显示解;

最后的话;我们之所以解释线性回归;是因为线性回归;确实是可以看作是一个单层的神经网络它是最简单的一种神经网络;好我们线性回归就介绍到这里;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、 基础优化算法

在我们提供线性回归的实现之前;我们先来很简单的介绍一下优化方法;我们在接下来会有一大章的内容;来解释各种不一样的优化方法;但是我们在这里;先给大家做一个直观上的理解

image-20231019000530208

1、梯度下降

最常见的算法叫做梯度下降;就是说当我一个模型没有显示解的时候;我怎么办呢;我的一个做法是说;我首先挑选一个参数的随机初始值;可以随便在什么地方都没关系;然后呢我们记为W0;在接下来的时刻里面;我们不断的去更新W0;使得它接近我们的最优解;

具体来说我们的更新法则是这样子的;WT;它等于上一个时刻W(t-1)减去一个at;这是一个标量和损失函数;关于W(t-1)处的梯度;好这有两个项;第一个是它的梯度;第二个是它的学习率;这就a它;

我们来直观上解释下这是什么意思;我们来看一下这个图;这是一个很简单的二次函数的一个等高图;这个最优点在这个地方这是最小值;外面是最大值;如果看过地图的话也就是一个;每一个圈就是函数值等于一个固定值;同样值的一条曲线;

那么假设我们的W0是取在;这个地方的话;就是一般来说是随机取在一个地方;那么我们记得我们解释过它的梯度;也就是;使得这个函数的值增加最快的方向;那么它的负梯度就是它的;值下降最快的方向就是比如说这个黄线的方向;那么就是;负的这个梯度的值就是指向这个方向;接下来学习率就是;它代表是说我沿着这个方向;每一次走多远;比如说这个地方我走了大概那么远;然后把这个两个就说这一个;整个这一向就代表是这一条;这个点到这个点之间的向量;好我们把W0和这个相邻;加就可以拉得到W1的位置;同样的话在W1处;我们继续计算它的梯度;那就是在这个点上梯度;函数值下降最快的方向;然后我再沿着它再走一步;

就是你可认为我去爬山的时候;我可以不走大路对吧;我可以每一次沿着最陡的那条路;一直一直走下去;那我可以走到山顶;这就是梯度下降的一个直观解释;所以这里面学习率就是步长;它是一个叫做超参数的东西;超参数的话它一叫做hyperprameter;它就是一个我们需要;人为来指定的一个值;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、学习率

首先我们不能选太小;就说如果选太小的话;那么每一次走的步长很有限;我们到达一个点;我们需要走非常非常多的步骤;这个不是一件很好的事情;这是因为计算梯度是一件很贵的事情;我们之前有讲过;在自动求导里面说过;计算梯度和;是一件基本上是我们;整个模型训练里面最贵的那一个部分;所以我们尽量的要少来计算梯度;但是反过来讲我们也不能走太大;为什么是因为;比如说;我们这个地方一下子步子迈太大了;就迈过了我们在下降的地方;迈到了很远的地方;使得我们一直在震荡;并没有真正的在下降;所以就是说我们学习率不能太大;也不能太小;我们接下来会有一系列的教程教大家怎么选取合适的学习率

image-20231019000935934

3、小批量随机梯度下降

在实际中我们很少直接使用梯度下降;;深度学习最常见的梯度下降版本叫做;小批量随机梯度下降;这是因为述说梯度下降里面;我们每次计算梯度;要对整个损失函数求导;这个损失函数;是对我们所有的样本的一个;平均损失;

所以这意味着是说求一次梯度;我们要把整个样本给你重新算一遍;这个是很贵的一件事情;它可能需要数分钟或者数个小时;一般来说;我们需要可能走个几百步;或者几千步的样子;这样子我们的计算代价太大了;那么一个近似的办法怎么做呢;就是我可以回忆一下我的损失;就是我们所有的样本的;损失的平均;那么我们近似他的话;我们可以随机采样第一个样本;用他的损失的平均;来近似于整个样本集上的损失的平均;当你的b很大的时候;这个近似当然很精确;当你b等于小的时候;它的近似不那么精确;但是b你很小的时候计算它的梯度;那就是比较容易;因为梯度的计算复杂度是跟样本的;个数是线性相关的;所以这里又叫做批量大小;是另外一个重要的超参数;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image-20231019001018798

4、批量大小

批量大小不能太大;也不能太小;如果你太小的话;一个问题是说;我每次就算那么几个样本的梯度;很难以定型;之后我们会利用GPU来做计算;GPU的话动不动就上百上千个核;当你批量太小那就是计算不好;很大很好利用;但你也不能太大;太大的话;内存;跟你的批量大小很多时候是成正比的;所以你的特别是用GPU的话;内存是一个呃很大的一个瓶颈;因为你可能就那么16GB或者32GB的内存;接下来是说你也可能会浪费计算;举一个极端的例子;所有的样本都是一样的话;那么你不管批量大小多大;你用一个样本计算剃度;还是用10个还是用100个;计算的效果都是一样的;所以的话;假设你一个批量里面;存在着大量的差不多的样本的时候;那么呢你就在很多时候浪费了计算了;所以不要太大;

image-20231019001148076

5、总结

总结一下就是说;梯度下降;就是不断的沿着梯度的反方向来;更新我们的模型;求解它的好处是说;我不需要有知道这个显示解什么样子;我只要不断的知道怎么求导数就行了;我们知道在自动求导那一章;我们讲过说;我给你一个函数;给你一个模型;我的深度学习框架;是能够帮你自动求导的;所以的话这一块就是做的比较简单了;

另外一个是说;小批量随机梯度下降;是深度学习默认的求解方法;虽然我们还有更好的算法;但是呢一般来说它是最稳定的;而且是最简单的;所以我们通常使用它;其中小批量随机梯度下降;里面有两个重要的超参数;一个是批量的大小;一个是学习率;我们待会在今后给大家解释;如何选择合适的批量大小;和学习率;这就是非常简单的优化算法的介绍;当然;优化算法是一个非常大的一个方向;我们会有可能会有几节课专门来讨论更好的更稳定的一些算法;但是;知道这个最简单版本已经在接下来的几个星期里面我们先是够用了;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三、 线性回归的从零开始实现

1、D2L注意点

来实现我们所有;讲过的算法和一些技术细节;这样的好处是说;可以帮助大家从很底层的地方;了解每一个模块;具体是怎么实现的

四、线性回归的简洁实现

五、QA

No.2 Softmax回归+损失函数+图片分类数据集

一、Softmax回归

二、损失函数

三、图片分类数据集

四、Softmax回归从零开始

五、Softmax回归简单实现

六、QA

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记43:ResNet 结构详解

笔记本地地址:D:\work_file\DeepLearning_Learning\03_个人笔记\2.图像处理任务\ResNet网络学习 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a

C语言 每日一题 PTA 10.27 day5

1.高速公路超速处罚 按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10 % 则处200元罚款; 若达到或超出50 % ,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。 输入格式 : 输入在一行中给出2个正…

子集生成算法:给定一个集合,枚举所有可能的子集

给定一个集合,枚举所有可能的子集。 (为简单起见,本文讨论的集合中没有重复元素) 1、方法一:增量构造法 第一种思路是一次选出一个元素放到集合中,程序如下: void print_subset(int n, int …

Fabric.js 使用自定义字体

本文简介 点赞 关注 收藏 学会了 如果你使用 Fabric.js 做编辑类的产品,有可能需要给用户配置字体。 这次就讲讲在 Fabric.js 中创建文本时怎么使用自定义字体、在项目运行时怎么修改字体、以及推荐一个精简字体库的工具。 学习本文前,你必须有一点…

二维码智慧门牌管理系统升级解决方案:采集计划精细化管理的艺术

文章目录 前言一、采集计划的定义和配置流程二、多采集计划配置策略三、采集计划的实践应用 前言 在数字化时代,建设智慧城市需要借助各种先进的技术工具。其中,二维码智慧门牌管理系统在城市管理、资源调配和公众服务等方面扮演着举足轻重的角色。关键…

实现寄生组合继承

寄生组合继承是一种继承方式,它通过组合使用构造函数继承和原型继承的方式,实现了高效而且正确的继承方式。 具体实现步骤如下: ① 定义一个父类,实现其属性和方法: function Person(name) {this.name namethis.age…

贝锐花生壳内网穿透推出全新功能,远程业务连接更安全

贝锐旗下内网穿透兼动态域名解析品牌花生壳目前推出了全新的“访问控制”功能,可精确设置访问权限,充分保障信息安全,满足更多用户安全远程访问内网服务的需求。 通过这一功能,可实现指定时间、IP、地区等条件下才能远程访问映射的…

什么是React中的高阶组件(Higher Order Component,HOC)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

PyCharm 安装 cx_Oracle 失败

我在PyCharm的终端用 pip安装cx_Oracle失败,报错情况如下: ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因: python 的版本太高了,我的是3.11版本的&…

百度迁徒数据爬虫方法

百度迁徙数据是由百度公司提供的免费开放数据集,主要包含了全国范围内各大城市的每日人口流入流出情况。这些数据来源于百度地图上的用户位置信息,通过计算得到每个小时的流入流出人数,并且可以按照省级、市级等多种维度进行分析。 百度迁徙 …

缓解光纤激光切割机老化之如何保养光纤激光切割机的光学镜片

激光切割头具备极高的精密度和昂贵的价格,是光纤激光切割机最关键的运行部分之一。在日常的光纤激光切割机维修过程中频繁出现的关于切割头使用寿命的问题就是内部光学镜片的污染及损坏。 部分导致光纤激光切割机激光切割头光学镜片污染的原因主要包括:对…

c++ qt连接操作sqlite

qt客户端编程,用到数据库的场景不多,但是部分项目还是需要数据库来保存同步数据,客户端用到的数据库,一般是sqlite。 Qt提供了数据库模块,但是qt本身的数据库模块并不好用,会有各种问题, 建议大家不要,可以自己封装数据库的操作。本篇博客介绍qt连接操作sqlite。 sqlit…

如何使用react-router v6快速搭建路由?

前言 之前一直使用react-router V5,上次搭建一个小项目,下载的react-router V6, 本以为没什么区别,就按照v5的那一套用了,区区小功能,奈何不了我的。然后自信满满的运行,哦豁,不生效…

c语言从入门到实战——数组

数组 前言1. 数组的概念2. 一维数组的创建和初始化2.1 数组创建2.2 数组的初始化2.3 数组的类型 3. 一维数组的使用3.1 数组下标3.2 数组元素的打印3.3 数组的输入 4. 一维数组在内存中的存储5. sizeof计算数组元素个数6. 二维数组的创建6.1 二维数组得概念6.2 二维数组的创建 …

DAY36 738.单调递增的数字 + 968.监控二叉树

738.单调递增的数字 题目要求&#xff1a;给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单…

vue3 源码解析(2)— ref、toRef、toRefs、shallowRef 响应式的实现

前言 vue3 源码解析&#xff08;1&#xff09;— reactive 响应式实现 介绍完 reactive 之后还有另一个很重要的响应式API&#xff0c;其中包括 ref、toRef、toRefs 和 shallowRef。这些API在vue3中起着至关重要的作用&#xff0c;它们帮助我们更好地管理和跟踪响应式数据的变…

一文搞懂 MineCraft 服务器启动操作和常见问题 2023年10月

文章目录 前言1. 新建文件夹2. 创建 bat 文件3. 编辑 bat 文件4. 启动服务器5. 恭喜完成 文章持续更新中&#xff0c;如果你有问题可以通过 qq 1317699264 获取免费协助&#xff0c;解决的问题将会被更新到本文章中 前言 无论你是使用服务端整合包&#xff0c;还是从上一篇我的…

基本选择器

目录 1 标签选择器 2 类选择器 3 id选择器 作用&#xff1a;选择页面上的某一个或某一类元素 1 标签选择器 标签选择器会选择页面上所有的标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…

Spigot 通过 BuildTools 构建 MineCraft Spigot 官方服务端文件

文章目录 从 Spigot 官方下载 BuildTools spigotmc / buildtools确保你有正确版本的 Java&#xff08;例如构建 1.20.2 的服务端一般需要有 Java17&#xff09;在 BuildTools.jar 同名文件夹打开 cmd 命令行&#xff08;点击红色圈圈区域输入 cmd 按 enter 即可&#xff09; …

【黑产攻防道03】利用JS参数更新检测黑产的协议破解

任何业务在运营一段时间之后都会面临黑产大量的破解。验证码和各种爬虫的关系就像猫和老鼠一样, 会永远持续地进行博弈。极验根据十一年和黑产博弈对抗的经验&#xff0c;将黑产的破解方式分为三类&#xff1a; 1.通过识别出验证码图片答案实现批量破解验证&#xff0c;即图片…