今天我们来聊一聊,机器学习与深度学习的模型设计。
运用机器学习算法进行研究,其实就是寻找目标函数的过程。通过构建机器学习模型(形成函数集),用训练数据做驱动,寻找与训练数据匹配,并且在测试数据中表现优异的函数。所以构建机器学习模型就显得十分的重要了。以线性回归为例子,大家可以看一下下面的图。
取自李宏毅老师的课程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对处理序列非常在行。所以大家还是要对每种算法都要了解清楚,选择合适自己的算法。
好的 ,今天就聊到这里,这篇差不多写了一个小时。想跟我交流的同学,欢迎大家在文章下面留言,如何你觉得我的文章还可以请点赞并关注我,谢谢。
网友评论