浅谈机器学习与深度学习的模型设计

今天我们来聊一聊,机器学习与深度学习的模型设计。

运用机器学习算法进行研究,其实就是寻找目标函数的过程。通过构建机器学习模型(形成函数集),用训练数据做驱动,寻找与训练数据匹配,并且在测试数据中表现优异的函数。所以构建机器学习模型就显得十分的重要了。以线性回归为例子,大家可以看一下下面的图。

《浅谈机器学习与深度学习的模型设计》 取自李宏毅老师的课程ppt

在寻找目标函数时,假如函数集范围太小,正如图左所示只是一次式项,那么很有可能目标函数不在函数集里面,也就说bias(偏差)比较大,远离了目标函数(也就是图中的靶心),这是我们经常说的欠拟合。而如果我们尽量把函数集设大一点(函数集尽可能的大就有希望能够包含目标函数),这样bias会变小,但是也带来了坏处,模型对噪音数据会特别敏感,一不小心就会出现过拟合的情况。因为我们本身并不知道目标函数到底长什么样,所以我们就要不断测试修改模型,希望能达到好的效果。下面是一点tips,大家可以参考一下。

欠拟合:1 增加特征 2 调整为更加复杂的模型
过拟合:1 增加数据量 2 正则化

上面说的是传统机器学习中模型的设计,那么在深度学习中,我们又该如何设计?首先大家要理解一点,为什么要“deep”?下面大家继续看图。

《浅谈机器学习与深度学习的模型设计》 同样是取自李宏毅老师的课堂PPT

大家仔细看图就会发现,1.随着隐藏层的增加,错误率在减低。2. 7X2K 对应的错误率是17.1% ,而与之参数量相当的1X16K 对应的错误率却是22.1% 。 理论上说,只要一层隐藏层里面神经元够多,那么这个模型足以接近任何函数。也就是说,我们没必要把神经网络弄deep,但是大家看图就会发现,deep 要比 一层效果好。其实这就包含了拆分与共享的思想,看图。

《浅谈机器学习与深度学习的模型设计》 统一处理 单层隐藏层
《浅谈机器学习与深度学习的模型设计》 拆分 共享 多层隐藏层

原来我也觉得深度学习应该会需要大量的数据,事实上并不是,我使用mnist数做过实验,在数据量较少时,多层神经网络的效果要比单层神经网络要好,意不意外?惊不惊喜?所以当你数据较少又想用深度学习来处理数据时,不妨多搭几层。

最后还要谈一下 no free lunch理论,no free lunch理论指的是没有最好的算法,只有最适合的算法。深度学习的模型有许多种,大家在选择是一定要根据自己问题来选择模型,比如说CNN对处理图像信息就非常的有用,而RNN对处理序列非常在行。所以大家还是要对每种算法都要了解清楚,选择合适自己的算法。

好的 ,今天就聊到这里,这篇差不多写了一个小时。想跟我交流的同学,欢迎大家在文章下面留言,如何你觉得我的文章还可以请点赞并关注我,谢谢。

    原文作者:CV_lsc
    原文地址: https://www.jianshu.com/p/edeebe28bec4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞