神经网络初谈

文章目录

  • 简介
  • 神经网络的发展历程
    • 神经网络的初生
    • 神经网络的第一次折戟
    • 神经网络的新生,Hinton携BP算法登上历史舞台
    • 命途多舛,神经网络的第二次寒冬
    • 神经网络的重生,黄袍加身,一步封神
    • 神经网络的未来,众说纷纭
    • 其他时间点
  • 神经网络简介
    • 激活函数的作用
    • 偏置项的作用
    • 输出层
  • RNN
  • CNN
  • TensorFlow游乐场
  • 子问题拓展
    • 什么是感知机
    • 单层感知机为什么无法处理异或问题
    • 早期的单层感知机是怎么训练的,为什么这种训练的方式无法迁移到多层感知机上?
    • 八卦新闻之人工神经网络与支持向量机之争
    • LeCun大神简述
  • 参考文献

简介

深度学习、神经网络,近些年来人工智能领域最炙手可热的话题。保持垄断,直到强化学习被提出。
深度学习的应用领域广泛,文本、图像、音视频,只要能数据化的,没有NN处理不了的。(被戏称为万能逼近定理,炼丹工程师)
人脸识别,机器翻译,自动驾驶,AI换脸,你能听到的、能想到的黑科技,背后都有神经网络的支撑。
深度学习,这一概念正式提出于2006年,是Hinton(辛顿,神经网络之父)老爷子给出的定义:“多层神经网络及其相关学习方法”。
在这里插入图片描述

LeCun任职Facebook AI实验室时就说,如果把神经网络从Facebook中去掉,那Facebook将啥也不是。
在人工智能研究领域,Yann LeCun(法国绅士杨立昆)、Geoffrey Hinton (辛顿)和 Yoshua Bengio(本吉奥)一直被公认为深度学习三巨头(男子偶像天团,黑暗中最后的光)。
在这里插入图片描述

神经网络的发展历程

突然感觉花边新闻还不少。
目前公认的,神经网络的发展历程可以分为三个阶段:

  • 20世纪40年代~60年代,初生
  • 20世纪80年代~90年代,新生
  • 2006年至今,黄袍加身
    在这里插入图片描述

神经网络的初生

[1]我们用的神经网络实际上全称应该是人工神经网络,它并不是近年出现的新产品,而是一个名副其实的老古董。人工神经网络第一次出现是在20世纪50年代左右,准确的说是1943年,

1943年,神经科学家和控制论专家Warren McCulloch和逻辑学家Walter Pitts基于数学和阈值逻辑算法创造了一种神经网络计算模型。这个线性模型通过测试f(x,w)的值是正还是负,来识别两种类别的输入。从此之后,学界针对神经网络的研究正式分成了两部分,一是对大脑中生物过程的研究,二是将神经网络应用于人工智能的研究,即人工神经网络,(所谓的深度学习,依赖的框架,就是这个人工神经网络)[1]。

为叙述简便,以下将人工神经网络用神经网络代指

当时应该是叫做感知机,其实就是单层的人工神经网络

之后的几年里,到1969年之前,学界对这种新生的计算模型还是蛮有热情的,大家觉得这个东西很有发展潜力,陆陆续续有很多人围绕这个模型做了些研究,对人工神经网络的机制、计算思想等做了一些程度上的丰满。比如说

在这里插入图片描述

比较突出的贡献是,1957年,心理学家Frank Rosenblatt创造了模式识别算法感知机

学界呈现一片父慈子孝欣欣向荣的景象。

直到1969年。

神经网络的第一次折戟

1969年,Marvin Minsky(马文,人工智能之父)和Seymour Papert(西蒙)发现了神经网络的两个重大缺陷:

第一个问题是,单层感知机无法处理异或问题(XOR问题)感知机本质上是线性函数,所有的线性分类模型都无法处理异或问题,详情见后续“子问题拓展”小节,想要搞非线性分类(解决线性不可分问题)的话,必须要发展多层感知机。

那么第二个问题来了,当时世界的人,受限于多种原因,没有办法将多层感知机训练的足够好。比较突出的原因有两个,一是当时学界并没有发现一种能够应用于多层感知机上的有效算法。那么早期的单层感知机是怎么训练的?,二就是硬件限制了,当时的计算机的计算能力并不足以支撑复杂的神经网络。
在这里插入图片描述

自此,学术界的很多权威开始质疑神经网络,绝大部分研究人员都放弃了对神经网络的研究,神经网络的研究进入了寒冬。

神经网络的新生,Hinton携BP算法登上历史舞台

Hinton携BP算法登上历史舞台。

直到1986年,Rumelhart、Hinton和 Williams合著 Learning representations by backpropagating errors,正式提出使用反向传播(BP)算法来训练多层神经网络,再次唤起了学界对人工神经网络的研究热情。

这里需要提一句的是,作为破冰关键的BP算法,实际上在1974年就已经出现了。
1974年,Paul Werbos在自己的博士毕业论文中深刻分析了将反向传播算法运用于神经网络方面的可能性,但是遗憾的是,他并没有发表将BP算法应用于神经网络这方面的论文,大概是因为当时学界里的人已经失去了对这方面的兴趣,或者说信心。但好在不是所有人都这样,受此启发, LeCun Yann(他给自己取了个中文名杨立昆,深度学习三巨头之一)在Hinton实验室做博后期间,提出了BP应用于神经网络的雏形,并最终在1986年正式出现在世人眼前。
神经网络的发展迅速迎来第二春。

命途多舛,神经网络的第二次寒冬

然而好景不长。
20世纪90年代中期,由Vapnik(万普尼克, 战斗民族的骄傲,统计学习理论的创始人之一)等人发明的支持向量机诞生,它同样解决了线性不可分问题,在很多方面都强势碾压了刚复活没多久的多层神经网络,比如说,训练速度快、不需要大量调参、没有梯度消失等问题,泛化性能强、过拟合风险更小等,使得支持向量机一诞生,就迅速打败了自己的老前辈多层神经网络成为了学界的主流。后来甚至一度发展到,只要你的论文中包含了神经网络,那就非常容易被拒稿,学术界当时对神经网络的态度,已经不能拿嫌弃来形容了。神经网络的研究再次进入了寒冬。选择继续研究神经网络的学者寥寥无几,其中就包括了上面提到的Hinton老爷子。
长江后浪推前浪,浮事新人换旧人。

学界那帮男人的喜新厌旧,远超你的想象。

但好在我们有Hinton。

神经网络的重生,黄袍加身,一步封神

十年磨一剑,Hinton老爷子王者归来。

2006年,Hinton老爷子提出了“深度置信网络”,通过“预训练”+“微调”的优化方法,提高了神经网络的性能,且大大减少了训练时间。
但这都不是最重要的。
以后人的眼光来看,当时最重要的是,他为多层神经网络及相关学习方法赋予了一个新的名词:深度学习

2012年,Hinton老爷子用LeCun赖以成名的卷积神经网络,和自己的深度置信调优技术,以极大的优势(超出第二名11%,第二名和第三名只差1%)赢下了当年的ImageNet竞赛,狠狠的碾压了其他一众机器学习算法。
至此,深度学习引爆了人们的研究热情,并一步一步成了人工智能的代名词,发展垄断至今。Hinton、LeCun等人被直接送上神坛,跟神经网络有关的一切东西都开始被追捧,最初那段时间,甚至演变成,跟深度学习不沾边的论文很难发表了。直到前几年,强化学习的兴起,这股风气才有所收敛。

不过学界还是有比较清醒的学者的,对于做了几十年冷板凳的神经网络,突然被捧上巅峰,也有很多相对理智学者对神经网络的未来表示了担忧,比如说LeCun,他一直都在呼吁学界对深度学习保持冷静。

神经网络的未来,众说纷纭

神经网络已经神化了,就像前几年的“互联网+”一样,无人不知无人不晓。
就像年轻那会儿出去做项目,我跟他说我改进了预处理的手段,我修改了优化器的细节,我降低了错误率多少多少,他是不在意的,但是你跟他讲我用了深度学习,他会对你肃然起敬。
但幸好学界还是有比较清醒的学者的,对于做了几十年冷板凳的神经网络,突然被捧上巅峰,也有很多理智学者对神经网络的未来表示了担忧,比如说LeCun,他一直都在呼吁学界对深度学习保持冷静。
不过LeCun这位法国绅士说话很直,他呼吁的方式简单来说就是泼凉水。
2018年的时候,LeCun在推特上说应该放弃深度学习,惊爆了世人的眼球。我不知道国外的媒体是怎么报道的,反正那段时间微信公众号给我推送的都是这种标题:
震惊,深度学习巨头竟直言放弃深度学习,是人性的扭曲还是道德的沦丧?
但实际上他的意思是换一个名词来解释深度学习的工作,即“可微分编程”,Lecun想告诉大家的是,人们对深度学习的期望太高了,终结者?天网?都不是,DL只是“将各种参数化的函数模块网络组装起来,做成新软件,同时以某种基于梯度的优化再将其训练出来”
这跟普通的编程工作没有区别。

其他时间点

其他一些同样比较重要的时间点,记录一下:

在这里插入图片描述

在这里插入图片描述

神经网络简介

跟所有的分类一样,神经网络可以将输入映射到输出,自动学习拟合x和y之间的函数关系f(x)=y。它会自己找到它觉得最好的一个映射f。需要提一句的是,这个f的具体形式你是不知道的,这也是神经网络不可解释性的一方面。它就是个黑盒。

在这里插入图片描述

一个简单的神经网络,输入层、隐藏层和输出层。

隐层可以有多个。

每一层的输出同时也是下一层的输入。每层由一个个神经元组成,每层中每个神经元是独立的。

神经元之间的连线,在生物学中叫做突触,而在数学模型中,这样的突触有一个加权数据,叫做权重。

以下是单个神经元的示意图:

在这里插入图片描述

每个神经元,或者说节点,将输入数据x与一组权重结合,通过(权重)来放大或者抑制输入,来指定其在模型中的重要性。

(w0又称偏置,以下用b(bias)表示)

在这里插入图片描述

输入数据和权重的乘积之和将会进入神经元的激活函数,来判断信号是否继续向下传播,或者说来决定多少信号会继续向下传播,

  • a 1 , a 2 , … , a n a_1,a_2, \dots, a_n a1,a2,,an为输入向量的各个分量;
  • w 1 , w 2 , … , w n w_1,w_2, \dots, w_n w1,w2,,wn为神经元各个突触的权重值;
  • b b b是偏置;
  • f f f是神经元的激活函数(activation function), 通常是非线性函数;
  • t t t是神经元的输出;

所以一个神经元的数学表示为: t = f ( W T ∗ A + b ) t=f(W^T*A+b) t=f(WTA+b)

  • W W W为权值向量, W T W^T WT是它的转置;
  • A A A是输入向量
  • b b b是偏置
  • f f f是activation function

可见, 一个神经元的作用是, 求得输入向量和权重向量的内积之后, 将其输入到激活函数, 得到一个标量结果作为神经元的输出;

激活函数的作用

激活函数在数学上的作用是,将(−∞,+∞)之间的数映射到指定区间之间,如(0,1)或者(-1, 1),前者如sigmoid、relu,后者如tanh。

为什么要使用激活函数?

这个说法其实并不严谨,严谨的说法应该是问,为什么要使用非线性激活函数?

答案是为了给神经网络引入非线性。

假设有一个神经网络,激活函数是恒等激活函数,即g(z)=z,那么

在这里插入图片描述

可以看到,不管是a1还是a2,都只是x的线性组合,所以不管多少层,效果都跟一层一样。所以我们需要非线性激活函数,来为神经网络的拟合引入无限可能。

以下是一些激活函数的曲线图

sigmoid,在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

relu解决了梯度消失的问题,因为它导数是1.。。因为是分段函数,所以也算是非线性。但有的神经元可能永远不会被激活,因为左侧全是0.

针对这种情况,学界又提出两种PRelu和ELU,特别对左侧做了处理:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

softmax,

在这里插入图片描述

可以看出来,softmax跟其他激活函数不一样,其他激活函数是神经元之间各自激活各自,而softmax是把所有神经元搞到一起做了个归一化,所以softmax往往被用于在最后的输出层,用来计算概率(加起来等于1)。

参考文献:

  1. 各种激活函数, 图像, 导数及其特点

偏置项的作用

很简单,为决策平面添加水平方向的偏移量,如果不加偏置的话,我们所有的分割线或者说决策平面都是经过原点的,但是现实问题并不会是经过原点线性可分的。
在这里插入图片描述
在这里插入图片描述

参考文献:神经网络中w,b参数的作用(为何需要偏置b的解释)

输出层

在分类问题中,输出层输出的是概率,比如说我有五个类别,那输出层就对应5个神经元,每个神经元表示一个概率,即输入样本是本类的概率。

输出层除了生成概率外,还有一个比较重要的作用是计算损失值。

损失函数的存在,有两个重要的目的,一是为了给神经网络一个优化的目标,就是损失函数最小化,最理想的情况就是,一个属于类别2的样本,其输出层第二个神经元输出的概率是1,其他神经元全是0.

第二个作用是为参数的更新提供参考,神经网络每次训练都会调整每个权重参数的值,那怎么调?每个参数调多少?都是由损失函数决定的,损失函数提供一个初始的梯度值,然后逆向回传梯度,每个参数的更新法则是:

w n e w = w o l d − l r ∗ 该参数对应的梯度 w_{new} = w_{old} - lr * 该参数对应的梯度 wnew=woldlr该参数对应的梯度

RNN

RNN很适合用来做自然语言处理。

在这里插入图片描述
在这里插入图片描述
这块能说很久,有时间之后再补充。
在自然语言处理领域,之前是无法处理语序问题的,只能利用词频。而RNN的诞生使得利用语序成为可能。
为什么要关注语序呢,直观点讲,“你是我爹”和“我是你爹”所表示的语义是不一样的。

CNN

参考文献:一文简单介绍卷积神经网络(CNN)

垄断图像领域的卷积神经网络CNN,其中最重要的就是卷积层。

在CNN中的第一层卷积层,先选择一个局部区域(filter)去扫描整张图片,局部区域所圈起来的所有节点会和filter做乘法累加操作,再连接到下一层的一个节点上。假设要扫描的图片是一张灰度图片(也就是只有一个颜色通道),所有的filter也是个二维的矩阵,那个该卷积过程可以用如下动图表示。
在这里插入图片描述
那假如卷积层要扫描的图片是张彩色图片(也就是该图片有RGB三个通道),那么图片的像素可以表示成三维结构,所选用的filter也是个三维结构,如图所示:
在这里插入图片描述
那卷积过程就如图:

在这里插入图片描述
比较有意思的是,在这个过程中,你可以把生成的三维矩阵重新图片化,可以看到一个原图的一个边缘细节。之前有论文是这么展示的,用来形象展示CNN的每一层都在做什么,可惜我没存。
突然有点好奇,文本这样做会出来什么?比较难,毕竟语言模型的向量空间实际上是离散的。

TensorFlow游乐场

可视化游乐场 这个比较有意思

子问题拓展

神经网络的作用极大,LeCun任职Facebook ai实验室时就说,如果把神经网络从Facebook中去掉,那Facebook将啥也不是。
而且,真实的神经网络比上面介绍的麻烦的多,日常使用的时候,我们需要选择好权重初始化器,优化器,乱七八糟一堆。batch size的大小、学习率、dropout、标准化。每个稍不注意,都会对最终的结果产生很严重的影响。

什么是感知机

以下基于参考文献2

感知机(perceptron)是一种二元分类的线性分类模型,输入样本的特征向量,输出样本的类别。

感知机只有一个输出值,通过与阈值的对比来决定最终输出+1还是-1。

感知机引入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,进行训练,这个训练,实际上就是最优化求解的问题啦。

感知器的数学定义,直接贴图了:

在这里插入图片描述

用通俗的语言描述感知机的学习(训练)过程:

  1. 对感知机的权重w进行随机赋值;
  2. 对于训练集中一个样本的输入值x,计算其在感知机里的输出值f(x);
  3. 如果根据输出值得到的分类不对,则计算损失函数值,用损失函数来调整权重;
  4. 继续输入下一个样本,重复步骤2,3
  5. 重复步骤4,一直到感知机不再出错。

单层感知机为什么无法处理异或问题

单层感知机实际上就是一种线性模型,线性模型都无法处理异或问题,

那什么是异或问题?

在这里插入图片描述

右图坐标系红色表示一类,蓝色表示一类,我们需要知道找到一个超平面把这两个类别分开,明显可见的是,我们没法找到一条直线能完成这个工作。

以上参考文献:感知机不能表示“异或”

关于逻辑回归是线性还是非线性,似乎是个好问题,逻辑回归本身的f(x)是线性的,加上g(x)的sigmoid之后是非线性的。

判断一个模型是线性还是非线性,这个似乎是个众说纷纭的故事,

有文献提过,区分是否为线性模型,主要是看一个乘法式子中自变量x前的系数w,如果自变量只被一个参数影响,那么此模型为线性模型。机器学习中线性模型和非线性的区别

当然最直观的还是看决策平面是否直线。

还有一种说法,源于,机器学习中的线性和非线性判断 ,

上面讲线性的定义是:F(ax+y) = aF(x) + F(y),其中x和y是变量而a是常数。卷积满足这个定义,所以是线性操作,而非线性的操作有:

  • x n x^n xn,n不为1
  • ∣ x ∣ |x| x,即变量在绝对值中
  • sgn(x),指出x的正负号,x大于0则返回1,小于0则返回-1,等于0返回0;

早期的单层感知机是怎么训练的,为什么这种训练的方式无法迁移到多层感知机上?

神经元的学习机制是基于将错误最小化的微积分

八卦新闻之人工神经网络与支持向量机之争

参考文献3

1989年,LeCun提出了卷积神经网络,在图像领域取得了不错的效果,上世纪90年代末期已经处理了美国10%-20%支票数字识别。但是因为神经网络本身的不可解释性,CNN也受到了不少的质疑。比如说支持向量机之父,数学家Vladinmir Vapnik,之后神经网络进入二次寒冬,就是他干的。

1995年3月的一个下午,Vapnik和Larry Jackel(把LeCun招进贝尔实验室的人)打了一个赌。Jackel认为到2000年,我们能够明确了解人工神经网络能够发挥多大作用。Vapnik不同意这个观点,他认为就算到2005年,也没有人能够理解如何使用神经网络,与1995年的状况相差无几。他们的赌注是一顿奢华的晚餐,双方在证人面前签字画押,而LeCun则是第三方签名人,Bottou是非官方见证人。

现在来看,Vapnik(之后称为阿V)赢了一半,因为直到现在,研究人员也没有完整的搞明白神经网络内部的工作原理,虽然时不时就有几篇相关论文发表,但是似乎并没有什么明显的反响。个人感觉这方面的研究最突出的贡献就是给这种现象总结了个术语,就是神经网络的不可解释性。但是Larry也赢了一半,因为神经网络到目前仍然活跃在人工智能的一线上。

据说,2000年,两人在享用完一顿奢侈晚餐后,平分了账单。

这就是著名的贝尔实验室学术豪赌

LeCun大神简述

参考文献4

1988年,年仅27岁的法国绅士LeCun走进了贝尔实验室,接触到了大量数据集和运行飞快的电脑,一个拥有5000个训练样本的USPS数据集——在当时算是数一数二的庞大数据集了。

Yann LeCun,CNN之父,纽约大学终身教授,与Geoffrey Hinton、Yoshua Bengio并成为“深度学习三巨头”

参考文献5

LeCun比较真性情,说话很直,18年推特上说应该放弃深度学习,被媒体过度解读,实际上他的意思是换一个名词来解释深度学习的工作,即“可微分编程”,Lecun想告诉大家的是,人们对深度学习的期望太高了,终结者?天网?都不是,DL只是“将各种参数化的函数模块网络组装起来,做成新软件,同时以某种基于梯度的优化再将其训练出来”

他跟普通的编程工作并没有区别。

18年有个比较火的全球第一个机器人公民,号称人类末日的苏菲娅,LeCun直接在推特上开骂“招摇撞骗,脑子里全是屎”

参考文献

  1. 神经网络的历史?
  2. 什么是感知机? 对原理讲的特别好,深浅适中且清晰
  3. 研究人工智能三十年,Facebook AI 负责人Yann LeCun到底有多牛?
  4. 【AI大咖】再认识Yann LeCun,一个可能是拥有最多中文名的男人
  5. 怼完Sophia怼深度学习!细数完大神Yann LeCun 这些年怼过的N件事,原来顶级高手是这样怼人的…

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

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

相关文章

STM32 Proteus仿真LCD12864俄罗斯方块-FZ0063

STM32 Proteus仿真LCD12864俄罗斯方块-FZ0063 Proteus仿真小实验: STM32 Proteus仿真LCD12864俄罗斯方块-FZ0063 功能: 硬件组成:STM32F103R6单片机 LCD12864显示器多个按键 1.标准俄罗斯方块经典游戏玩法,带计时&#xff0c…

Kong 服务和路由的添加

管理服务 这里参考DB-less-Mode,因为使用的是yaml配置文件的形式,所以所有的相关配置只需要往初始化的kong.yml文件中添加就可以了,就像nginx的配置文件 DB-less-Mode 创建服务 vim /etc/kong/kong.yml services: - name: my-service #…

MySQL---表数据高效率查询(简述)

目录 前言 一、聚合查询 💖聚合函数 💖GROUP BY子句 💖HAVING 二、联合查询 💖内连接 💖外连接 💖自连接 💖子查询 💖合并查询 🎁博主介绍:博客名…

Idea 修改默认 Maven 为自己的

每次我们打开新项目时,都要去配置一遍 maven,很麻烦,其实可以去修改 idea 里面默认的 maven 配置,这样后面不管是打开新项目还是老项目,就都是用的自己的 maven 了. 1.文件->新项目设置->新项目的设置 File->Other Settings -> Settings for New Project 2.然后和…

git下载源码及环境搭建之数据库(二)

学习目标: 数据库 新项目使用 数据库文件 的配置 及相关属性的设置 步骤: 数据库 下图所示为开发时所用数据库 第一步:新建一个数据库 注意: 字符集与排序规则我们应该选择utf-8 相关 选中新创建的表,点击备份—还…

MySQL单表查询练习题

目录 第一题 第二题 第三题 第一题 1.创建数据表pet,并对表进行插入、更新与删除操作,pet表结构如表8.3所示。 (1)首先创建数据表pet,使用不同的方法将表8.4中的记录插入到pet表中。 mysql> create table pet( name varchar(…

centos7.9php8swoole5swoft2环境安装遇到确实redis扩展的解决办法

1、环境介绍 运行系统:centos7.9 php版本:php8.0.29 swoole版本:swoole5 swoft版本:swoft2.02、遇到的问题 The requested PHP extension ext-redis * is missing from your system. Install or enable PHPs redis extension。这…

python爬虫哪个库用的最多

目录 常用的python爬虫库有哪些 1. Requests: 2. BeautifulSoup: 3. Scrapy: 4. Selenium: 5. Scrapy-Redis: 哪个爬虫库用的最多 Scrapy示例代码 总结 常用的python爬虫库有哪些 Python拥有许多常用的爬虫库…

Java反射与“整活--(IOC容器)”

文章目录 前言反射什么是反射基本操作获取类对象获取类属性获取类方法方法的执行对构造方法的操作 注解定义获取注解 整活(IOC容器)项目结构IOC/DI流程ApplicationContextBeanDefinitionReaderBeanDefinitionBeanWrappergetBean()…

Django_admin数据管理后台

目录 一、基础操作 二、自定义后台操作数据行为 源码等资料获取方法 admin数据管理后台是django内置的一个后台管理界面,能查看已注册模型类的数据结构,以及对数据的增删改。 一、基础操作 1.1 检查项目目录下的urls.py有没有如下配置 1.2 创建djan…

技术讨论:我心中TOP1的编程语言

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术…

Flutter——最详细(NavigationBar)使用教程

NavigationBar简介 Material 3 导航栏组件! 导航栏提供了一种持久且便捷的方式来在应用程序的主要目的地之间进行切换。 使用场景: 底部菜单栏模块 属性作用onDestinationSelected选择索引回调监听器selectedIndex目前选定目的地的索引destinations存放菜单按钮back…

七大排序算法——冒泡排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、冒泡排序核心思想代码实现 三、性能分析四、七大排序算法 一、排序的概念 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或…

C++之工厂模式

目录 一、为什么要使用工厂模式 优点 缺点 二、简单工厂(Simple Factory) 好处: 不足: 三、工厂方法: 好处: 不足: 四、抽象工厂(Abstract Factory) 一、为什…

【HCIA】10.VLAN间通信

VLAN间通信的解决方法 使用路由器的物理接口 路由器三层接口作为网关,转发本网段前往其它网段的流量。路由器三层接口无法处理携带VLAN Tag的数据帧,因此交换机上联路由器的接口需配置为Access。路由器的一个物理接口作为一个VLAN的网关,因此…

Django_re_path_使用正则匹配url

与path定义的路由相比,re_path 定义的路由可以使用正则表达式匹配url。 需要注意的是: 如果未定义匹配结果的变量名,匹配的结果默认传入视图的第2个形参。如果定义了匹配结果的变量名,匹配的结果会传给视图的同名字段&#xff0…

【GitOps系列】从零上手GitOps

文章目录 GitOps 介绍如何将业务代码构建为容器镜像?如何将容器镜像部署到K8s?K8s如何实现自动扩容和自愈?1.传统的扩容和自愈2.k8s自愈机制3.k8s弹性扩容 如何借助GitOps实现应用秒级自动发布和回滚?1.传统 K8s 应用发布流程2.从…

【Arduino小车实践】陀螺仪的使用

一、MPU6050简介 MPU6050是一款陀螺仪模块,可以测量X、Y、Z三轴的角速度和加速度,还带有温度传感器和数字运动处理器(DMP)。 二、学习步骤 1. I2C协议 MPU6050是通过I2C协议进行驱动的,配置寄存器和获取数据都需要通过I2C协议去实现开发板与…

CentOS环境下的Nginx安装

Nginx 安装 下载 nginx 下载地址:http://nginx.org/en/download.html 将下载好的压缩包拷贝到根目录下 通过xshell如果出现 bash: rz: 未找到命令 ,需要先运行下面的命令 yum -y install lrzsz安装 解压到当前目录 tar -zxvf nginx-1.22.1.tar.gz安…

Hive SQL 迁移 Flink SQL 在快手的实践

摘要:本文整理自快手数据架构工程师张芒,阿里云工程师刘大龙,在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分: Flink 流批一体引擎 Flink Batch 生产实践 核心优化解读 未来规划 点击查看原文视频…