【Note】MV-机器学习系列|【Note】MV-机器学习系列 之 有趣的机器学习
本篇相当于该系列的科普文。一、机器学习方法 1、机器学习 Machine Learning 通常来说,机器学习的方法包括:
- 监督学习 supervised learning
有数据和标签的学习方法。大家熟悉的神经网络即为监督学习的方式。 - 非监督学习 unsupervised learning
只有数据没有标签的学习方法。 - 半监督学习 semi-supervised learning
综合了监督学习和非监督学习的学习方法。 - 强化学习 reinforcement learning
从经验中总结和提升的学习方法。
在规划机器人的行为准则方面,有一种机器学习方法叫强化学习。 - 遗传算法 genetic algorithm
这种方法是模拟我们熟知的进化理论,淘汰弱者,适者生存。通过这种淘汰机制去选择最优的设计或者模型。
1、科普:人工神经网络 VS 生物神经网络 人工神经网络靠的是正向和反向传播(误差反向传播)来更新神经元, 从而形成一个好的神经系统, 本质上, 这是一个能让计算机处理和优化的数学模型. 而生物神经网络是通过刺激, 产生新的联结, 让信号能够通过新的联结传递而形成反馈.
2、神经网络 Neural Network 1、分为 input layer,hide layer,output layer
2、神经网络的工作方式:构建神经网络,输入数据/图片,将输出结果和正确答案进行对比并将误差反向传播回去,调整神经元的参数以更改神经网络的结构。
3、每个神经元都有自己的刺激函数 activated function,计算机很重视被激活/激励的神经元传递的信息。若输出的信息跟正确答案有出入,就会改动神经元的参数,不断进行下去,不断靠近正确的结果。
3、卷积神经网络 Convolutional Neural Network CNN 最常被应用的方面是计算机的图像识别,后期也被应用在视频分析、nlp、药物发现等等。近期最火的 Alpha Go 同样有运用到这门技术。
卷积 和 神经网络
我们先把卷积神经网络这个词拆开来看. “卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解. 具体来说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等. 再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来. 最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了.
池化 pooling
研究发现, 在每一次卷积的时候, 神经层可能会无意地丢失一些信息. 这时, 池化 (pooling) 就可以很好地解决这一问题. 而且池化是一个筛选过滤的过程, 能将 layer 中有用的信息筛选出来, 给下一个层分析. 同时也减轻了神经网络的计算负担 (具体细节参考). 也就是说在卷集的时候, 我们不压缩长宽, 尽量地保留更多信息, 压缩的工作就交给池化了,这样的一项附加工作能够很有效的提高准确性. 有了这些技术,我们就可以搭建一个属于我们自己的卷积神经网络啦.
流行的 CNN 结构
文章图片
比较流行的一种搭建结构是这样, 从下到上的顺序, 首先是输入的图片(image), 经过一层卷积层 (convolution), 然后在用池化(pooling)方式处理卷积的信息, 这里使用的是 max pooling 的方式. 然后在经过一次同样的处理, 把得到的第二次处理的信息传入两层全连接的神经层 (fully connected),这也是一般的两层神经网络层,最后在接上一个分类器(classifier)进行分类预测. 这仅仅是对卷积神经网络在图片处理上一次简单的介绍.
4、循环神经网络 Recurrent Neural Network RNN 在语言分析、序列化数据中应用自如。
普通的 NN 不能包含输入数据之间的顺序关系,因此 RNN 出现了。
文章图片
如上图,对于输入 x(t+1),RNN运算完之后会生成相应的中间状态 s(t+1),但此时的输出 y(t+1) 是由此时的中间状态和上一时刻的中间状态共同决定的,即 RNN 相对于普通的 NN 有了记忆的功能。使得之前的输入对现在的输出也产生了影响。
RNN 的应用:让 RNN 描述图片,让 RNN 写学术论文,让 RNN 写程序脚本,让 RNN 作曲。
5、LSTM RNN 循环神经网络 LSTM,long-short term memory,长短时记忆。
前面有提到,RNN 是针对顺序数据进行处理的,但是 RNN 比较健忘。比如关心的关键信息在输入数据的前部,那么这个信息要经过长途跋涉才能到达最后一个时间点,然后得到误差,此时在反向传播误差的时候,很容易发生
梯度消失/梯度弥散(Gradient vanishing)
或是梯度爆炸(Gradient exploding)
。这就是普通 RNN 没办法回忆起久远记忆的原因。而 LSTM 就是为了解决这个问题而诞生的。相比普通的 RNN 多了三个控制器,输入/输出/忘记。当前关键信息的更新是由
输入控制
和忘记控制
来更新的,输出控制
则负责判断最后要输出什么。所以 LSTM 相当于治疗 RNN 健忘的良药。6、自编码 Autoencoder 本节会聊聊如何用神经网络进行非监督形式的学习,也即 Autoencoder。
压缩 与 解压
文章图片
- 为何要经过压缩-解压这一负责的步骤呢?
- 自编码的工作方式是什么?
编码器 Encoder
文章图片
这部分叫做 encoder 编码器。
文章图片
这是一个通过自编码整理出来的数据, 他能从原数据中总结出每种类型数据的特征, 如果把这些特征类型都放在一张二维的图片上, 每种类型都已经被很好的用原数据的精髓区分开来. 如果你了解 PCA 主成分分析, 在提取主要特征时, 自编码和它一样,甚至超越了 PCA. 换句话说, 自编码可以像 PCA 一样 给特征属性降维.
解码器 decoder
解码器就是将压缩后的精髓解压成原始信息,解压器的作用就相当于生成器,类似于 GAN。那做这件事的一种特殊自编码叫做 variational autoencoders,可以在这里找到他的具体说明。
7、生成对抗网络 Generative Adversarial Nets 神经网络有很多种,有普通的前向传播神经网络,有分析图片的 CNN,有分析序列化数据(语音)的 RNN,这些网络都是用来输入数据得到想要的结果。这些神经网络可以很好地将数据与结果通过某种关系联系起来。
但还有另外一种形式的神经网络,不是用来把数据对应上结果的,而是凭借随机数来捏造结果的,就是 GAN。
文章图片
Generator 会根据随机数来生成有意义的数据 , Discriminator 会学习如何判断哪些是真实数据 , 哪些是生成数据, 然后将学习的经验反向传递给 Generator, 让 Generator 能根据随机数生成更像真实数据的数据. 这样训练出来的 Generator 可以有很多用途, 比如最近有人就拿它来生成各种卧室的图片.
甚至你还能玩点新花样, 比如让图片来做加减法, 戴眼镜的男人 减去 男人 加上 女人, 他居然能生成 戴眼镜的女人的图片. 甚至还能根据你随便画的几笔草图来生成可能是你需要的蓝天白云大草地图片.
8、科普:神经网络的黑盒不黑
文章图片
我们现在举个栗子,比如一个黑盒的输入是宝宝,输出是奶瓶。对应的输入层和输出层就是已知的。现在将左边的红线向右侧移动一步,红线左侧仍旧可以看作是“输入”,不过不是真实世界中的宝宝的输入,而是计算机可以理解的输入,也即宝宝的原始特征(feature)经过一层神经网络输出的代表特征(feature representation)。随着红线的右移,代表特征不断地被加工成新的代表特征,而黑盒也随之点亮,因此,黑盒的加工处理就是在将一种代表特征转换为另一种代表特征,一次次特征之间的转换,也就是一次次更有深度的理解。
有时候代表特征太多了,以至于人类没办法看懂他们代表的是什么,所以认定其为黑盒。但是计算机却能看清楚它学到的规律。这种
代表特征
的理解方式其实非常有用,以至于人们拿着它去研究更高级的神经网络玩法,比如迁移学习
。9、神经网络 梯度下降 神经网络是目前最流行的一种深度学习框架,基本原理其实就是一种梯度下降机制,现在来看看这神奇的优化模式吧。
【【Note】MV-机器学习系列|【Note】MV-机器学习系列 之 有趣的机器学习】Optimization 大家族
比如说牛顿法 (Newton’s method), 最小二乘法(Least Squares method), 梯度下降法 (Gradient Descent) 等等. 而神经网络就是属于梯度下降法这个分支中的一个. 大学里面学习过的求导求微分就是传说中”梯度下降”里面的”梯度” (gradient)啦.
梯度下降
简而言之, 就是找到梯度线躺平的点. 可是神经网络的梯度下降可没这么简单.
神经网络中的 W 可不止一个, 如果只有一个 W, 我们就能画出之前那样的误差曲线, 如果有两个 W 也简单, 我们可以用一个3D 图来展示, 可是超过3个 W, 我们可就没办法很好的可视化出来啦. 这可不是最要命的. 在通常的神经网络中, 误差曲线可没这么优雅.
全局 and 局部最优
文章图片
在简化版的误差曲线中, 只要找到梯度线躺平的地方, 就能迅速找到误差最小时的 W. 可是很多情况是这样的, 误差曲线并不只有一个沟, 而且梯度躺平的点也不止一个. 不同的 W 初始化的位置, 将会带来不同的下降区域. 不同的下降区域, 又会带来不同的 W 解. 在这个图像当中, W 的全局最优解(Global minima)在大黄点标注的位置, 而其它的解都是局部最优(Local minima). 全局最优固然是最好, 但是很多时候, 你手中的都是一个局部最优解, 这也是无可避免的. 不过你可以不必担心, 因为虽然不是全局最优, 但是神经网络也能让你的局部最优足够优秀, 以至于即使拿着一个局部最优也能出色的完成手中的任务.
10、迁移学习 Transfer Learning 迁移学习,通俗点讲,就是“站在巨人的肩膀上”,即要善于学习先辈的经验,一个人的成功往往还取决于先辈们累积的知识。
比如说原先训练好了一个神经网络,现在任务变了,但是训练好的神经网络对现在完成任务很有帮助,只不过输出是不一样的结果。那么我们现在就可以把输出层摘掉,然后替换成新构建的网络层,此时训练这个拼接型的网络,就可以省去很多时间。
但并不是一定要利用原先已有的网络结构,比如现在处理的数据和之前的处理数据有着很大的不同,那么此时训练新的神经网络反而要比拼接型网络更好。
三、神经网络技巧
1、检验神经网络 Evaluation Training and Test data
一般收集到的数据,70% 用来训练,30% 用来测试。类比于我们学生时代的作业题和考试题。所以测试数据虽然量小,但是还是很重要。
误差曲线
一般刚开始下降的很快后来下降的很慢的曲线,已经是很不错的学习成果了。
准确度曲线
相当于误差曲线的互补曲线。
正规化
当训练数据表现得很好时,往往容易出现 overfitting,解决方法有很多种,如 L1,L2正规化,dropout 方法。
交叉验证
交叉验证不仅仅可以用于神经网络的调参,还能用于其他机器学习方法的调参。曲线同样是选择想观看的误差值或者是精确度,不过横坐标不再是学习时间,而是要测试的某一参数,比如说神经网络参数。
文章图片
图中可以看出神经层越多, 计算机所需要消耗的时间和资源就越多, 所以我们只需要找到那个能满足误差要求, 有节约资源的层结构. 比如说误差在0.005一下都能接受 , 那我们就可以采用30层的神经网络结构 .
2、特征标准化 Feature Normalization 本节主要介绍特征数据的标准化,也可以说是正常化,归一化,正规化等等。
我们以经典的房屋预测为例,比如现在房屋价格的决定因素有两种,X1 房屋面积,X2 离市中心的距离。那么可以数学化表示为
W = a * X1 + b * X2
,而我们要做的就是求出参数 a,b。其中 X1 的单位是 m^2,X2 的单位是 km,很明显的,X1 在数值上要远大于 X2,那么此时 X1 稍微的改动都会比 X2 很大的改动对式子产生的影响大。换句话说,就是 X1 对式子的贡献和 X2 对式子的贡献不一样大,那么这时候求出来的参数很可能有偏差。所以我们要标准化我们的输入数据 X1 和 X2。常用的 特征标准化 的路径有两种,一种是
min max normalization
,会将所有的特征数据按比例缩放到 0-1 的取值区间。另一种是standard deviation normalization
,会将所有的特征数据缩放成均值为0 方差为1 的数据。使用这些标准化手段,不仅可以快速推进机器学习的学习速度,还可以避免机器学习学习过程扭曲。
3、选择好特征 Good Features 什么是好的特征呢?以分类器为例:
- 避免无意义的信息,即对分类结果没有贡献
- 避免重复性的信息。例如描述距离的时候数据有 m 和 km 两种单位
- 避免复杂的信息。例如我们要预测从 A 地到 B 地所需要的时间,一种输入特征信息是 AB 两地的经纬度,一种是 AB 间的距离,显而易见,这时候选第二种输入特征信息进行机器学习预测。
因为激励函数可以解决日常生活中不能用线性方程 linear function 所概括的问题。
比如说我们可以把神经网络简化为 Y = WX,但是这样只能描述一个线性问题,于是就需要激励函数来将这条直线“掰弯”,即 Y = AF(WX)。
AF 其实就是激励函数,常有的选择是 relu sigmoid tanh,把这些掰弯利器嵌套在原有的结果就可以强行把原先的线性结果扭曲成曲线了。同时我们也可以自己创造激励函数,不过要求是必须可微分,因为在 back propagation 误差反向传递时,只有可微分的激励函数才能把误差传递回去。
恰当地使用激励函数,是有窍门的。
- 少量层结构中,对于隐藏层使用任意的激励函数不会有很大的影响。一般地,在 CNN 的卷积层中推荐 Relu,在 RNN 中推荐 tanh 或 Relu。(具体怎么选,看之后 RNN 中详细介绍)
- 多层神经网络中,掰弯利器不能随意选择,因为会涉及到
梯度爆炸
和梯度消失
的问题。
那么解决过拟合的方法是什么呢?
- 增大数据量。其实某种意义上,有时不好实现。
-
运用正规化。这种方法适用于大部分的机器学习,当然也包括神经网络。思想就是:首先简化机器学习公式 Y = WX,当过拟合时,W的值往往变化得过大或者过小,所以我们可以让 cost 的变化和 W 的变化关联起来,加入惩罚机制。原先,cost = (预测值-真实值)^2,现在
文章图片
这里 abs 是绝对值,这一种形式的 正规化, 叫做 L1 正规化。 L2 正规化和 L1 类似,只是绝对值换成了平方。其他的 L3 L4 也都是换成了立方和4次方等等,形式类似。用这些方法,我们就能保证让学出来的线条不会过于扭曲。
- 还有一种专门用在神经网络的正规化的方法,叫作 dropout。在训练的时候,随机忽略掉一些神经元和神经联结 使得神经网络变得”不完整”,用一个不完整的神经网络训练一次。到第二次再随机忽略另一些,变成另一个不完整的神经网络。有了这些随机 drop 掉的规则,保证让每一次预测结果都不会依赖于其中某部分特定的神经元。像l1, l2正规化一样,过度依赖的 W,也就是训练参数的数值会很大,而 l1, l2会惩罚这些大的参数。Dropout 的做法是从根本上让神经网络没机会过度依赖。
数据量很大的时候,如果重复不断地把整套数据放入 NN 中训练,将很耗时间和内存。但是如果如果把数据拆分成小批小批的,然后分批不断得放入 NN 中计算,那么就可以在很大程度上加速 NN 的训练过程,而且也不会丢失太多准确率。
文章图片
事实证明,SGD 并不是最快速的训练方法。红色的线是 SGD,但它达到学习目标的时间却是最长的。
Momentum
文章图片
那除此之外,还有其他方法吗?答案当然是有的,大多数其他途径是在 NN 更新参数的那一步动动手脚。W 的更新一般是下列形式,
W += -Learning rate * dx
,但这种方法可能会让学习过程看起来曲折无比。
文章图片
那如果我们把这个小黑人从平地上放到一个斜坡上,只要他往下坡方向走一点点,就会由于惯性一直往下走,弯路也会更加平滑,这就是
Momentum 参数更新
。
AdaGrad
文章图片
这种方法是在学习率上动手脚,即使得每个参数更新都有自己与众不同的学习率。如果说 Momentum 是安排一个下坡,那么 AdaGrad 就是给小黑人一双不好走路的鞋子,使得他不得不为了避免脚疼而往前直着走。公式如图。
RMSProp
文章图片
把下坡和不好走的鞋子结合起来就是 RMSProp 方法啦!有了 momentum 的惯性原则,加上 adagrad 对错误方向的阻力,RMSProp 就能同时具备两种方法的优势。不过图中 RMSProp 似乎缺少了对红方框部分的处理,所以我们在下述方法 Adam 中补上了这种想法。
Adam
文章图片
计算 m 时有 momentum 下坡的属性, 计算 v 时有 adagrad 阻力的属性, 然后再更新参数时把 m 和 v 都考虑进去。实验证明,大多数时候使用 adam 都能又快又好的达到目标,迅速收敛。所以说,在加速神经网络训练的时候,一个下坡和一双破鞋子,功不可没。
7、处理不均衡数据 Imbalanced data 何为不均衡数据?
例如,我们现在有苹果和梨两种水果,如果手中的数据显示几乎全世界的人都只会吃梨。那么这时候随便抓一个路人甲,我们肯定会猜他吃梨。
不均衡的数据预测起来很简单,比如吃梨:吃苹果的人 = 9:1,这时候只要每次猜吃梨,预测准确率就能高达 90%。机器学习也懂这个小伎俩啊,但是我们怎么防止呢?
A. 获得更多数据
有时候收集过程汇总前期呈现某种趋势,但随着数据量的增加,趋势会改变。
B. 更换评判方式
在不均衡数据面前,
准确率 accuracy
和误差 cost
就变得没那么重要了。我们需要通过confusion matrix
来计算precision
和recall
,然后通过这两者计算F1 Score
/F-score
。这种方式能成功区分不均衡数据,给出更好的评判分数,具体计算过程烦请自行查找。C. 重组数据
简单粗暴,重组数据使之均衡。方式一:复制或者合成少数部分的样本,使之和多数部分差不多数量;方式二:砍掉一些多数部分,使两者数量差不多。
D. 使用其他机器学习方法
如果使用的机器学习方法如 NN 在面对不均衡数据时通常束手无策,但是像决策树这种机器学习方法就不会收到影响。
E. 修改算法
文章图片
假设使用的 activation function 是 Sigmoid,它会有一个预测门槛,若落在这一段就预测为苹果,若另一段就预测为梨。那如果现在的梨是多数派,我们就把门槛调整得偏向苹果那边,使得只有很自信的时候才会预测是苹果,达到机器学习学习到更好的结果。
8、批标准化 Batch Normalization 为什么出现 Batch Normalization?
文章图片
之前有提到过普通的数据标准化,首先来复习下为何需要(普通)数据标准化。以激活函数 tanh 为例,到达一定的阈值,数据激活后都将被处理成 1 或 -1,即激活函数的有效数据范围很少,仅限于所给数据的一部分,为了让所有数据都起作用,必须尽量将原始数据处理进神经网络的敏感范围。
而这个不敏感问题不仅发生在神经网络的输入层,在隐藏层中也经常会发生,所以出现了 BN。BN 常常插在全连接网络和激励函数之间,以便于可以更好地利用 tanh 进行非线性化的过程。
BN 算法
文章图片
BN 不仅 normalize 了数据,它还进行了反 normalize 的操作。
图中引入了一些 batch normalization 的公式。前三步就是刚刚一直说的 normalization 工序,但公式的后面还有一个反向操作,将 normalize 后的数据再扩展和平移。这是为了让神经网络自己去学着使用和修改这个 扩展参数 gamma 和平移参数 β,这样神经网络就能自己慢慢琢磨出前面的 normalization 操作到底有没有起到优化的作用,如果没有起到作用,就使用 gamma 和 belt 来抵消一些 normalization 的操作。
9、L1/L2 正规化 Regularization
文章图片
正规化操作就是为了解决过拟合的问题。比如上图中我们希望最终学习到的模型是蓝线,因为它能更有效地概括数据。这时候可以看作红蓝两线都有 4 个参数,只不过学习的过程中 c 和 d 逐渐趋向于 0。那如何保证呢?L1/L2 正规化应运而生。
核心思想就是尽量让所有的参数对模型的贡献量相差不大,所以就出现了惩罚机制,而惩罚项的不同决定了是 L1 还是 L2。其中 L1 正规化通常也用来挑选对结果贡献最大的重要特征,而且相对于 L2而言,L1 解更不稳定。
文章图片
这是统一表达式。为了控制这种正规化的强度,通常会加上一个参数 lambda,并且通过交叉验证 cross validation 来选择比较好的 lambda。这时为了统一化这类型的正规化方法,我们还会使用 p 来代表对参数的正规化程度。这就是这一系列正规化方法的最终的表达形式啦。
四、强化学习
1、强化学习 Reinforcement Learning 2、强化学习方法汇总 3、Q Learning 4、Sarsa 5、Sarsa(lambda) 6、DQN 7、Policy Gradients 8、Actor Critic 9、Deep Deterministic Policy Gradient(DDPG) 10、Asynchronous Advantage Actor-Critic(A3C) 11、AlphaGo Zero 为什么更厉害? 五、进化算法
1、遗传算法 Genetic Algorithm 2、进化策略 Evolution Strategy 3、神经网络进化 Neuro-Evolution
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长