深度学习:第四章:循环神经网络RNN和LSTM-CSDN博客
机器学习是人工智能中的一个重要分支,涉及概率论、逼近论等多门学科。研究的是计算机如何模拟实现人类的学习行为---获取知识并利用知识改善自身性能
机器学习通过从大量数据中学习规律,对新的样本进行预测
机器学习通过训练数据构造函数f(数据)=标签,并用训练出的函数解决泛化问题的过程
发展历程:
一、感知器:模拟神经元的作用
神经元的特点:可进行多输入单输出的处理,神经元之间连接强度决定信号传递的强弱,连接强度可以随训练改变,信号输入可以是刺激作用也可以是抑制作用,可以有一个阈值
感知器:
对输入加权求和,激活函数是阶跃函数(01函数),可解决线性二分类问题
二、人工神经网络
多个感知器,多层结合
可以拟合任何函数,可解决高维非线性问题,可解决异或问题
三、BP算法(误差向后传递算法)
误差向后传递,可以使用梯度下降法等优化,可以自动训练多层的网络
四、卷积+池化 1989年才提出
相较于普通的全连接层,参数要少得多,更容易训练
机器学习方法
一、有监督学习:从有标注的训练数据集中学习出函数
二、无监督学习:数据集没有标签。常见无监督如聚类算法
三、半监督学习:少量有标签,大多没有
半监督基于两个假设:聚类假设---处在相同聚类中的样本大概率有相同标签;流形假设---一个很小区域内的样本有相似的性质,因此标签应该也相似
四、增强学习:外部环境对输出只给出评价信息而非正确答案
这种环境没有“正确答案”如俄罗斯方块。人为给电脑一个目标“如更高的分数”。通过奖惩措施提高计算机水平
五、多任务学习:单任务学习中,每个任务的模型相互独立。但实际上,有些不同的任务间是有关联的。多任务学习可以在学习时共享一些因素。相关联的多任务学习比单任务的泛化效果好。
损失函数 loss function
用来衡量一组参数质量的函数,衡量的方式是比较网络输出和真实值的差异。
损失函数用来指导训练过程,使得网络的参数向损失降低的方向改变。
常用的损失函数:不同的任务需要不同的loss
回归问题 ;绝对值误差、平方差 分类问题:hinge loss, Cross-entropy loss
一、绝对值函数---L1范数 (Absolute value, L1-norm)
得到的解比较稀疏(使一些不相关特征的权重为零)
预测速度快
对异常值不敏感
二、方差函数---L2范数 (Square error, L2-norm)
比绝对误差函数得到的结果更精准
对大的误差输出更敏感、对异常值很敏感
三、softmax---用于分类问题
分类问题的输出是对每一个类别的预测值,softmax将每一类的概率转为在0~1间
四、独热编码 (One・hot encoding)
将一个类别标签转换为一个向量(每一个元素的值为1或者0)。向量的元素个数为总的类别的数量K,1对应正确的类别
五、交叉熵函数 (Cross-entropy loss)
P为真实值,q为预测值
一般交叉熵函数比方差函数在分类问题上表现更好。因为方差函数对误差的输出惩罚非常大,如果使用Softmax激活函数,加上方差函数作为损失函数,当输出接近0.0或者1.0的时候,梯度值非常小,网络的训练会比较慢。
训练过程:随机梯度下降法SGD
为了可以误差向后传递,损失函数为每一个独立训练样本的损失的均值
调整参数的大小和方向取决于损失函数相对于参数的偏导数
前提:可导,且容易求导
损失函数的理想情况: 损失值越大,优化效果越明显
归一化,标准化,零均值化
归一化:
通过该公式,某个特征的值会被映射到[0,1]之间,使不同的特征具有可比性
标准化:
其中x为某个特征的原始值,μ为该特征在所有样本中的平均值,σ为该特征在所有样本中的标准差,x∗ 为经过标准化处理后的特征值。即将原值减去均值后除以标准差,使得得到的特征满足均值为0,标准差为1的正态分布。
具体应该选择归一化还是标准化呢,如果把所有维度的变量一视同仁,在最后计算距离中发挥相同的作用应该选择标准化,如果想保留原始数据中由标准差所反映的潜在权重关系或数据不符合正态分布时应该选择归一化。另外,标准化更适合现代嘈杂大数据场景。
零均值化:
方法不唯一,如:对于一张图像,将每个像素的值减去训练集上所有像素值的平均值,比如已计算得所有像素点的平均值为128,所以减去128后,现在的像素值域即为[-128,127],即满足均值为零。
零均值化可以避免“Z型更新”的情况:以激活函数为sigmoid为例,sigmoid输出值均为正,所以其反向传播的所有特征值同为正或同为负。以二维特征为例,优化方向只能是第一、三象限(w1,w2同正/负),对于最优解在第二、四象限的模型,其收敛速度慢。
激活函数
引入非线性因素,如果没有激活函数,那么输出就仅仅是一个简单的线性函数,拟合能力有限。激活函数需要满足非线性、单调性、可微性、覆盖取值范围
常见激活函数
Sigmoid: 也被称作逻辑函数(Logistic函数)
将[-无穷,无穷]转到[0,1] ,常用于二分类问题
sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0, 。当其后向传递时,参数一旦落入饱和区,就越趋近于0,这就导致向后传递的梯度越来越小。因而,网络也很难得到有效的训练,这就是梯度消失问题。其二,sigmoid的输出一直是大于0的,这种使输出不为零均值的现象,将其称为偏置。
软饱和:当输入值(的绝对值)大于特定值,f(x)趋近于零
硬饱和:当输入值(的绝对值)大于特定值,f(x)趋等于零
总结:梯度消失,非零均值(输出不以0为中心),指数运算
Tanh函数:
将[-无穷,无穷]转到[-1,1] 导数图与sigmoid很像
总结:梯度消失,指数运算,输出零均值
ReLU:
常在CNN中使用;保留了生物学启发,超出数值时才激活;简单;不存在梯度消失;一旦输入负数,ReLU函数将失效。
Leak ReLU
在ReLU函数的基础上,给负值赋予一个非零斜率,上图为a=2
Softplus
是对ReLU的平滑
最速下降法
最简单的优化方法,方向取当前位置梯度的负值(梯度:函数增长最快的方向)
(正比于) 其中:
(这里E函数写成这样只是为了后面好算,写成别的,只要表达出“对真实值与输出值差异的描述即可”只是难以计算)
以一元函数为例。如图,该点的梯度值大于0,也就是说该点在x>0方向上增长最快,因此最速下降方向△w<0 。
现在知道方向了,那么应该在这个方向上移动多少距离呢? 如公式(t是距离,p是方向)所述:应当取使该方向上函数值最小的距离。更新后的
结束条件:△x<e或△f(x)<e
在网络中, 其中: 所以: 所以: (i=k)
P68
机器学习面临的困难:
1数据稀疏性:训练需要大量数据,但实际数据往往比较稀疏(即:数据集中绝大多数数据缺失、不完整)
2对高质量标注数据的需求:标定数据需要大量人力,且人会出错
3冷启动问题:一个产品初期,面临数据不足的问题
4泛化能力:训练数据不能全面均衡的代表真实数据
5模型抽象:将一个实际问题表达成数学公式困难
6寻找最优解复杂
数据清洗:去脏数据
1数据完整性2数据唯一性(避免重复)3数据合法性(没有离谱的数据)4数据一致性(不同来源的数据,内涵不得冲突---同名不同义、同义不同名)5数据的权威性
数据不平衡:正负样本分布不均
正样本 >> 负样本,且量都挺大 欠采样
正样本 >> 负样本,量不大:过采样,修改损失函数,调整权重,收集更多数据
欠采样:删除一些多数类 过采样:复制一些少数类
数据集拆分
训练集:训练模型
验证集:辅助训练模型,调整参数的参考
测试集:评估模型
拆分方法:
留出法:直接将数据集划分为互斥的集合,通常选择 70% 训练集,30%测试集
K-折交叉验证法:将数据集划分为 k 个大小相似的互斥子集,可以获取 k 组训练 - 测试集,进行 k 次训练和测试,k通常取值为10
特征:数据中抽取出来的对结果预测有用的信息
特征工程:使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
特征选择:
冗余:部分特征的相关度太高了,消耗计算性能。
噪声:部分特征是对预测结果有负影响
特征编码:将数据转化为数值的形式,便于建模