机器学习方法、卷积神经网络CNN、循环神经网络RNN、LSTM RNN、自编码、生成对抗网络、神经网络梯度下降、迁移学习、强化学习、遗传算法

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/82850574

机器学习方法:

监督学习(supervised learning):有数据和数据的标签。

非监督学习(unsupervised learning):只有数据没有数据的标签。

半监督学习(semi-supervised learning):少量有标签数据和大量无标签数据。

强化学习(reinforcement learning):可以从经验中总结提升。

遗传算法(genetic algorithm):和强化学习类似,适者生存,不适者淘汰。

卷积神经网络CNN (Convolutional Neural Network):

卷积神经网络是近些年逐步兴起的一种人工神经网络结构, 利用卷积神经网络在图像和语音识别方面能够给出更优预测结果。卷积神经网络最常被应用的方面是计算机的图像识别, 现在它也被应用在视频分析, 自然语言处理, 药物发现, 等等。近期最火的 Alpha Go, 同样也运用到这门技术。

神经网络是由一连串的神经层组成,每一层神经层里面有存在有很多的神经元。这些神经元就是神经网络识别事物的关键。每一种神经网络都会有输入输出值, 当输入值是图片的时候, 实际上输入神经网络的并不是那些色彩缤纷的图案,而是一堆堆的数字。

卷积就是说神经网络不再是对每个像素的输入信息做处理,而是对图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性,使得神经网络能看到图形, 而非一个点。

具体地说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等。再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来. 最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果。

举一个google的例子:

这是一张猫的图片,这张图片有长, 宽, 高 三个参数。高,也就是通道,指的是计算机用于产生颜色使用的信息。如果是黑白照片的话, 高的单位就只有1, 如果是彩色照片, 就可能有红绿蓝三种颜色的信息, 这时的高度为3。过滤器就是影像中不断移动的东西, 他不断在图片收集小批小批的像素块, 收集完所有信息后, 输出的值, 我们可以理解成是一个高度更高,长和宽更小的”图片”。 这个图片里就能包含一些边缘信息。然后以同样的步骤再进行多次卷积, 将图片的长宽再压缩, 高度再增加, 就有了对输入图片更深的理解。 将压缩,增高的信息嵌套在普通的分类神经层上,我们就能对这种图片进行分类。

池化(pooling) :

在每一次卷积的时候, 神经层可能会无意地丢失一些信息。这时, 池化 (pooling) 就可以很好地解决这一问题。在有池化的情况下,我们每次卷积时可以不压缩长宽,尽量保留更多的信息,压缩的工作交给池化。

如:

如上图所示,最先输入的图片信息是image,然后经过一层卷积convolution,再经过一层池化max pooling,再经过一层卷积convolution,再经过一层池化max pooling,然后把得到的信息传入两层全连接的神经层(即两层一般的神经网络层),最后进入分类器classifier进行分类预测。

循环神经网络 RNN (Recurrent Neural Network):

假如有一组序列数据 Data 0,1,2,3. 在当预测 Result0 的时候,我们基于的是 Data0, 同样在预测其他数据的时候, 我们也都只单单基于单个数据。我们每次使用的神经网络都是同一个NN,但这些数据是有关联的,而NN不能了解这些数据之间的关联关系。

如何让数据间的关联关系也被 NN 加以分析呢? 最简单的方式就是记住之前发生的事情。

我们现在使用RNN而不是NN。每次RNN基于输入X(t)计算后会产生一个描述S(t)。然后RNN在分析X(t+1)时 , 会根据 X(t+1)产生S(t+1),但此时的Y(t+1) 是由S(t) 和S(t+1)共同创造的。

我们再分析 Data0 的时候,就使用上述原理把分析结果存入记忆。然后当分析 data1的时候, RNN会产生新的记忆, 但是新记忆和老记忆没有联系,我们就把老记忆调用过来, 一起分析。

RNN不止有上面一种形式,如:

分类问题的RNN,如判断一个人说的一句话带有的感情色彩是积极还是消极的,只输出最后一个判断:

用于图片描述的RNN,我们只需要一个输入的图片,然后生成对图片描述的一段话:

语言翻译的RNN,给出一段英文,然后要求其翻译成一段中文:

LSTM RNN循环神经网络 (LSTM):

LSTM(Long Short-Term Memory)长短期记忆网络,是一种时间递归神经网络。

RNN也有一些缺点,如:

输入一段话:我今天要做红烧排骨, 首先要准备排骨, 然后…., 最后美味的一道菜就出锅了’, shua ~ 说着说着就流口水了。现在让RNN 来分析,我今天做的是什么菜,RNN可能会给出“辣子鸡”这个答案。由于判断失误, RNN就要开始学习这个长序列和 ‘红烧排骨’ 的关系 , 但RNN需要的关键信息 ”红烧排骨”却出现在句子开头。

RNN在学习时可能会出现下面两种情况:

红烧排骨这个信息原的记忆要进过长途跋涉才能抵达最后一个时间点。然后我们得到误差,在反向传递得到的误差的时候, 每一步都会乘以一个自己的参数 W。

如果W是一个小于1 的数,比如0.9,这个0.9 不断乘以误差,误差传到初始时间点会是一个接近于零的数, 所以对于初始时刻, 误差相当于就消失了。这叫做梯度消失或者梯度弥散(Gradient vanishing)。

如果W是一个大于1 的数, 比如1.1 不断累乘, 则到最后变成了无穷大的数。这种情况我们叫做剃度爆炸(Gradient exploding)。

这就是普通 RNN 没有办法回忆起久远记忆的原因。

LSTM:

LSTM 和普通 RNN 相比, 多出了三个控制器。(输入控制, 输出控制, 忘记控制)。

我们把粗线当成成电影或游戏当中的主线剧情,而原本的 RNN 体系就是分线剧情。三个控制器都加在原本的RNN 体系上。

主线剧情的更新取决于输入和忘记控制:

如果此时的分线剧情对于剧终结果十分重要,输入控制就会将这个分线剧情按重要程度写入主线剧情进行分析。

如果此时的分线剧情更改了我们对之前剧情的想法, 那么忘记控制就会将之前的某些主线剧情忘记,,按比例替换成现在的新剧情。

输出控制会基于目前的主线剧情和分线剧情判断要输出的到底是什么。

基于这些控制机制, LSTM可以带来更好的结果。

自编码 (Autoencoder):

当我们为神经网络输入高清图片时,输入的信息量可能会很大,直接让神经网络从上千万个信息源中学习是一件很吃力的工作。

为了解决这个问题,我们提取出原图片中的最具代表性的信息,缩减输入信息量,再把缩减过后的信息放进神经网络学习。这就叫自编码。

如图所示,我们将原数据白色的X压缩,解压 成黑色的X,然后通过对比黑白 X,求出预测误差,进行反向传递,逐步提升自编码的准确性,训练好的自编码中间这一部分就是能总结原数据的精髓。

这个过程中我们只用到了输入数据 X,并没有用到 X 对应的数据标签,所以也可以说自编码是一种非监督学习。

编码器(Encoder):

下图所示部分就是一个编码器。编码器能得到原数据的精髓,然后我们只需要再创建一个小的神经网络学习这个精髓的数据。

如:

这是一个通过自编码整理出来的数据,他能从原数据中总结出每种类型数据的特征。如果把这些特征类型都放在一张二维的图片上, 每种类型都已经被很好的用原数据的精髓区分开来。如果你了解 PCA 主成分分析, 在提取主要特征时, 自编码和它一样,甚至超越了 PCA。换句话说,自编码 可以像PCA一样给特征属性降维。

解码器(Decoder):

 解码器在训练时将精髓信息解压成原始信息,相当于解压器或生成器(类似GAN)。训练用的特殊自编码叫做variational autoencoders。

生成对抗网络 (GAN):

生成对抗网络 (GAN)即Generative Adversarial Nets。

神经网络分很多种, 有普通的前向传播神经网络 , 有分析图片的 CNN 卷积神经网络 , 有分析序列化数据,如语音的 RNN 循环神经网络 , 这些神经网络都是通过输入数据来得到想要的结果。

生成对抗网络 (GAN)不是用来把数据对应上结果,而是用来”凭空”捏造结果, 这里的”凭空”指的是一些随机数,即用没有意义的随机数来生成有有意义的结果。

Generator会根据随机数来生成有意义的数据 , Discriminator 会学习如何判断哪些是真实数据 , 哪些是生成数据, 然后将学习的经验反向传递给 Generator, 让 Generator 能根据随机数生成更像真实数据的数据。

实际中的应用,如:

根据你随便画的几笔草图来生成可能是你需要的蓝天白云大草地图片。

神经网络:梯度下降

在学习机器学习中的线性回归时,我们会遇到一种误差方程(Cost Function),用来计算预测出来的和我们实际中的值有多大差别。在预测数值的问题中, 我们常用平方差 (Mean Squared Error) 来代替。

如上图所示,W是我们的参数, x, y 都是我们的数据。假如现在的数据输入后误差值曲线是这样。我们初始时w在蓝点位置,而这个点的斜率是这条线,这就是梯度下降中的梯度

Cost 误差最小的时候正是这条 cost 曲线最低的地方, 但我们在蓝点所在位置时并不知道, 此时我们所知道的就是梯度线为自己在这个位置指出了一个下降的方向,我们就要朝着这个蓝色梯度的方向下降一点点,再重新做一条切线, 发现又指出了下降的方向还是继续向左, 那我就朝着梯度的方向继续下降, 这时, 再展示出现在的梯度, 因为梯度线已经躺平了, 我们已经指不出哪边是下降的方向了, 直到找到斜率为0的点。

在神经网络中,W通常不止一个,如果只有一个w,则可以用上面二维坐标图表示,如果有两个w,则可以用下面的三维坐标图表示。

但大于等于三个w时,我们就无法用图像来表示了。并且实际情况下,误差曲线并不像上面的线性回归中所举的例子中那么好。

我们还是举只有一个w时的情况,实际的误差曲线往往是下面这样:

实际的误差曲线往往不止有一个梯度为0的点,因此在不同的 W 初始化的位置, 将会产生不同的w解。

在上面这个图中, W 的全局最优解(Global minima)大黄色圆点位置。而其它的梯度为0的解都是局部最优解(Local minima)

实际情况中,很多时候你只能找到一个或多个局部最优解,而不一定能找到全局最优解。 但很多时候我们即使用一个局部最优解也能完成手中的任务。

迁移学习(Transfer Learning):

迁移学习,就是把一层层神经网络中训练得来的每个节点的权重从一个训练好的网络迁移到一个全新的网络里,而不是从头开始,为每个特定的任务训练一个神经网络。

如:

上面的神经网络已经能正确区分图片中具体描述的是男人,女人还是眼镜。这个神经网络已经具备对图片信息一定的理解能力,这些理解能力就以参数的形式存放在每一个神经节点中。

这时我们想要训练出一个预测图片里实物价值的模型。因为这个训练好的模型中已经有了一些对图片的理解能力,而模型最后输出层的作用是分类之前的图片,对于现在计算价值的任务是用不到的,所以只要将最后一层替换掉, 变为服务于现在这个任务的输出层。 接着只要训练新加的输出层,让理解力保持始终不变,前面的神经层庞大的参数不用再训练。这样就节省了很多时间。

注意:

不是所有时候我们都需要迁移学习,如神经网络很简单,训练小的神经网络并不需要特别多的时间,我们完全可以直接重头开始训练。另外,如果迁移前的数据和迁移后的数据差距很大,这时,迁移来的模型并不会起多大作用,还可能干扰结果的产生。

强化学习 (Reinforcement Learning):

强化学习(Reinforcement Learning,简称RL)是机器学习的一个重要分支。

在强化学习中,包含两种基本的元素:状态动作在某个状态下执行某种动作,这便是一种策略,学习器要做的就是通过不断地探索学习,从而获得一个好的策略。

如果将状态看作为属性,动作看作为标记,易知:监督学习和强化学习都是在试图寻找一个映射,从已知属性/状态推断出标记/动作,这样强化学习中的策略相当于监督学习中的分类/回归器。但在实际问题中,强化学习并没有监督学习那样的标记信息,通常都是在尝试动作后才能获得结果,因此强化学习是通过反馈的结果信息不断调整之前的策略,从而算法能够学习到:在什么样的状态下选择什么样的动作可以获得最好的结果。

强化学习任务通常使用马尔可夫决策过程(Markov Decision Process,简称MDP)来描述。即:机器处在一个环境中,每个状态为机器对当前环境的感知;机器只能通过动作来影响环境,当机器执行一个动作后,会使得环境按某种概率转移到另一个状态;同时,环境会根据潜在的奖赏函数反馈给机器一个奖赏。

强化学习主要包含四个要素:状态、动作、转移概率以及奖赏函数。

状态(X):机器对环境的感知,所有可能的状态称为状态空间;
动作(A):机器所采取的动作,所有能采取的动作构成动作空间;
转移概率(P):当执行某个动作后,当前状态会以某种概率转移到另一个状态;
奖赏函数(R):在状态转移的同时,环境给反馈给机器一个奖赏。

强化学习包含了很多种算法, 如有通过行为的价值来选取特定行为的方法, 包括使用表格学习的 q learning, sarsa, 使用神经网络学习的deep q network, 还有直接输出行为的 policy gradients等。

遗传算法 (Genetic Algorithm):

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

名词解释:

基因型(genotype):性状染色体的内部表现;

表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;

进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。

适应度(fitness):度量某个物种对于生存环境的适应程度。

选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。

复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。

交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;

变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。

编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。

解码(decoding):基因型到表现型的映射。

个体(individual):指染色体带有特征的实体;

种群(population):个体的集合,该集合内个体数称为种群。

遗传算法的一般步骤:

  1. 随机产生种群。
  2. 根据策略判断个体的适应度,是否符合优化准则,若符合,输出最佳个体及其最优解,结束。否则,进行下一步。
  3. 依据适应度选择父母,适应度高的个体被选中的概率高,适应度低的个体被淘汰。
  4. 用父母的染色体按照一定的方法进行交叉,生成子代。
  5. 对子代染色体进行变异。

由交叉和变异产生新一代种群,返回步骤2,直到最优解产生。

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/82850574