构建机器学习算法

Posted by RAIS on 2020-04-12
  • 本文首发自公众号:RAIS,点击直接关注。

前言

本系列文章为《Deep Learning》读书笔记,可以参看原书一起阅读,效果更佳。我们前面也介绍了一些构建机器学习或深度学习的一些内容,理解了其中部分原理和这么做的原因,接下来我们总结一下,跳出来从更高一点的方面去概括的看一看,也许会有不同的感觉。

构建机器学习算法

构建机器学习算法是有套路的:特定的数据集、代价函数、优化过程和模型。数据集比较好理解,没有数据模型就没办法训练,需要做的事情可能是把不好是数据处理成好的数据,这属于特征工程方面的问题,在深度学习研究者中也有大量的时间花在了特征工程上。代价函数,机器学习的训练模型的过程就是优化代价函数的过程,尽可能使代价函数减小。一般的优化算法就是找损失函数梯度为零,或者说找到最小值(极小值)的一组参数。代价函数一般与 损失函数目标函数 进行一个对比,他们的区别是:

  • 损失函数:通常定义在一个数据点上来计算误差;
  • 代价函数:通常定义在整个训练集上来计算误差,是损失函数的平均值;
  • 目标函数:训练期间优化任何功能的最通用的术语,包括目标损失和结构损失(如代价函数 + 正则化)

具体那个式子叫做什么其实还是有一点争议的,不过不要纠结了,明确具体需要做什么就好了。我们这里需要提醒一下,由于模型的不同,不是所有的时候都能找到闭式解,例如非线性模型,这时需要用到数值优化的方法,比如梯度下降的方法逼近目标,不是这里的重点,注意就好。

遇到的问题

促使一门学科的发展从来都不是已经比较好解决了的问题,都是那些没有解决的问题,深度学习机器学习也是一样的,正是因为还存在各种问题才推动着其继续向前发展。

维数灾难

又名维数的诅咒,是不是有那么一种命中注定的感觉。每增加一个维度数据空间的大小都成指数级增长,要填满数据空间所需要的数据量就会急剧膨胀,反过来来说,数据量没那么大的情况下就会让数据在其空间的分布变得稀疏,也就是大量的特征没有数据去进行训练,必然会导致模型的泛化能力减弱。

维数灾难

局部不变性

为了更好的泛化,机器学习应该由先验引导应该学习什么类型的函数,其中最广泛的是平滑先验(局部不变性先验),说的是我们学习的函数不应该在小区域内发生很大的变化,这是我们可以直观理解的。一般情况下,这都能表现良好,问题是在高维空间上,即使非常平滑的函数在同维度上也有不同的变化,如果函数在不同的区间表现不一样,那就没办法用一组训练样本去刻画函数,也就没办法很好的泛化。

流形学习

流形学习可以用在维数约简方面,主要做法就是将高维的数据映射到低维,在低维上数据能够反映高维数据的本质特征,其中去除的是高维数据的一些冗余。反过来,也是因为这假设的是这个高维数据是原来低纬数据嵌入到高维空间中,流形学习是求其逆运算。

流形学习

总结

本文介绍了构建机器学习方法的一般步骤,及其所遇到的问题。