视频地址:http://www.mooc.ai/course/41 莫烦《机器学习理论基础》
1.机器学习 各类方法
1.1 什么是机器学习
- 监督学习:学习过程中,既提供数据,又提供标签。
- 非监督学习:学习过程中,只提供数据不提供标签。
- 半监督学习:利用少量有标签的样本和大量无标签的样本进行训练与分类。
- 强化学习:把计算机丢到一个完全陌生的环境,自己尝试各种方法,从经验中总结学习。
- 遗传算法:适者生存,不适者淘汰。
1.2 什么是神经网络
- 多层神经网络: 输入 - 隐藏 -输出 隐藏层记录信息
- 神经网络加工过程: 计算机看一只猫时,神经网络只有部分的神经元被激活,被激活的神经元传递的信息是最重要的信息,根据预测的结果,所有的参数就会被调整。被调整的参数渐渐能预测出正确的结果。
1.3 什么是卷积神经网络 CNN
卷积:批量过滤器持续不断的在图片上滚动收集图像信息,每一次收集的信息是一小块像素区域,在整理各个块信息获得整体信息,最后输入普通全连接神经网络获得结果。
-
池化:卷积的时候不压缩长宽,尽量保留了更多的信息。使用池化进行信息压缩。
-
常用的卷积结构
1.4 什么是循环神经网络 RNN
适用语言分析、序列数据,在有序的数据上学习,拥有对先前事件的记忆
特点:下一个时间点的神经网络进行预测时用到了上一个时间点的神经网络的结果
循环神经网络要求每一个时刻都有一个输入,但是不一定每一个时刻都需要有输出。针对不同的应用有多种变体:
- 多对一,分类问题:例如文本情绪识别,输入文文本序列,输出为情绪类别标签。
-
一对多,例如生成图片描述,输入为一张图片,输出为一段文本序列。
-
多对多,例如语言翻译,输入为一段文本序列,输出也是。
1.5 什么是LSTM RNN
普通RNN,在传输误差的时候,存在如下问题
-
梯度消失 权值w < 1
-
梯度爆炸 权值w > 1
LSTM内部结构:跟普通RNN相比,多了一条控制全局的控制主线。如果分线对主线十分重要,会按重要性排序对分线剧情进行分析,忘记机制会利用分支更新主线内容。
1.6 自编码神经网络
自编码器类似于将图片打码之后再还原,即有一个压缩 - 解压的过程,可以达到降维的目的。
在深度学习中,一般只用到前半部分,将从高维数据中提取到的精髓传入神经网络。
2 机器学习 小窍门
2.1 如何检验神经网络
如何找到问题出在哪?是数据问题还是参数问题?首先按一定比例将原始数据划分为训练集与测试集,根据测试集上的表现评价神经网络
评价分数: 分类常用Acc 回归常用R2 数据不均衡常用F1
-
过拟合: 训练集误差减小的同时,测试集误差在增大。解决方法有L1 L2正则化、Dropout。
-
交叉验证调试参数
如图,随着网络层数的增加,误差逐渐减小,但如果误差精度达到0.005即可满足需求,则选择N-layers为30,找到既满足要求又节约资源的参数。
2.2 为什么要特征标准化(归一化、正常化)
eg.根据“离公司的距离”与“面积”构建线性模型预测放假,由于“离公司的距离”取值一般在10以内,而“面积”可以由0到两三百,“离公司的距离”略微修改数值便能造成很大的影响,而“面积”相反,需要较大的改动。为了加快学习速度以及避免扭曲的学习,需要进行标准化。
对于gradient descent算法来说,learning rate的大小对其收敛速度至关重要。如果feature的scale不同,理论上不同的feature就需要设置不同的learning rate,但是gradient descent只有一个learning rate,这就导致不同feature的收敛效果不同,从而影响总体的收敛效果。所以在求解模型之前归一化不同feature的scale,可以有效提高gradient descent的收敛速。
常用的标准化方法:
- min-max:原始数据进行线性变换把数据映射到[0,1]之间,也称归一化
- Z-score标准化方法:使数据呈均值为0,方差为1的标准正态分布
归一化与标准化的区别?
归一化的依据非常简单,不同变量往往量纲不同,归一化可以消除量纲对最终结果的影响,使不同变量具有可比性。比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,归一化之后就不会有这样的问题。
标准化,是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值。同时,它还带来两个附加的好处:均值为0,标准差为1。
实际上,在中文中由于大家混用,标准化与归一化常常代指如下四种Feature scaling(特征缩放)方法:
2.3 怎样区分好特征
-
避免无意义的信息:不具备区分能力的信息
如图,黄色或者白色并不能区分初金毛和吉娃娃,如果使用该单一特征则毫无意义。而身高则有些明显的分界线,如果大于40cm完全可以判定为金毛,这才是有意义的特征。
- 避免重复性的信息:比如描述长度的米和千米同时存在
-
避免复杂的信息: 比如A-B之间的距离,使用长度代替经纬度描述
2.4 为什么需要激活函数
激活函数的出现是为了解决现实生活中不能用线性函数表示的问题,很多时候要描述的状况是非线性的。激活函数,能将原有的线性特征改变为非线性特征。
常见的激活函数如下:
- 也可以自定义激活函数,但必须可微分,因为在bp反传时才可将误差反传回去
激活函数的选择问题:
- 层次数目一般的神经网络,可任意选择激活函数。对于层次较多的多层神经网络,涉及到梯度爆炸、梯度消失的问题,不可随意选择激活函数。
一般,CNN推荐relu,RNN推荐tanh或者relu
2.5 什么是过拟合
过拟合意味着机器学习模型变得自负。
误差越大不一定越好,过拟合意味着虽然完美的拟合了训练集把误差降到了最低,但是测试集上表现差。
- 增加数据
-
L1 L2 正则化 : 假设机器学习算法为 y= WX, W为机器学习要学习的参数,过拟合时W变化率较大,为了不让W变化太大,我们让误差cost随着W变大一起变大,保证学出的拟合曲线不会太扭曲。
- Dropout:只用于神经网络,随机丢弃部分信息,使预测结果不会依赖于特点的神经元
2.6 如何加速神经网络训练
SGD: 每次使用批量数据,加快速度的同时也保留了大部分信息
-
从权值更新上做修改:SGD类似喝醉的人回家的时候摇摇换换,步履曲折。我们把平地变成斜坡,利用惯性,在下降的时候让他一直往下走,这是momentum。它在相关方向加速SGD,抑制振荡,从而加快收敛。在梯度指向同一方向的维度,momentum项增加; 在梯度改变方向的维度,momentum项减少更新。
-
从学习率上做修改:给他加上一双鞋子,走弯路的时候给与阻力,逼着他走直线,这是AdaGrad。把下坡和不好走的鞋子结合,momentum的惯性原则+AdaGrad对错误方向的阻力,合并成RMSProp。RMSProp没有完全用到momentum,Adam是完全合并的结果。计算m时用momentum的下坡属性,计算v时用AdaGrad的阻力属性,更新W时全部利用,则是Adam。
实验证明,大多数情况使用Adam能最快找到最优解。
2.7 如何处理不均衡数据
不均衡时机器往往会全部预测为多数的一类,且这样也能达到较高的准确率。
处理方法:
增加数据
换个评价方式。针对不均衡数据,高的Accuracy和低的cost变得不那么重要,一般通过混淆矩阵来计算F1-score进行评判,或者通过绘制ROC曲线计算AUC值。
-
重组数据,较少的相随机复制增加,较多的项随机采样减少
使用其他机器学习算法:决策树对数据不均衡无太大影响,神经网络受影响较大。
-
修改算法:例如sigmoid函数,修改判定分类结果的阈值。一般大于0.5为苹果,则由于苹果数量远小于梨,我们可以修改为>0.9则为苹果。
2.8 为什么要批标准化
批标准化与普通标准化类似,将分散的数据统一的一种方法,使得数据具体统一规格,让机器更容易学得规律。
输入层:如图,WX2取较大的值,WX1取较小的值,在经过激活函数tanh的输出之后,两者均逼近于1,可见tanh对较大的W值的大小不再敏感。
隐藏层:在隐藏层之后添加一层BN。计算结果的值的分布对激活函数相当重要,如图分布在中间能更有效的进行传递,BN之后的数据能更有效的利用tanh的非线性化过程。
如图BN之前输出值不是1就是-1,标准化之后输出值在各个区间均有分布。
BN: 加上一道反工序。在标准化之后自己学着扩展与平移。让神经网络自己判断标准化是否起到了优化作用,如果没有则进行抵消。