【鱼和熊掌可以兼得的机器学习】李宏毅2021/2022春机器学习课程笔记EP10(P33)
从今天开始我将学习李宏毅教授的机器学习视频,下面是课程的连接(强推)李宏毅2021/2022春机器学习课程_哔哩哔哩_bilibili。一共有155个视频,争取都学习完成吧。
那么首先这门课程需要有一定的代码基础,简单学习一下Python的基本用法,还有里面的NumPy库等等的基本知识。再就是数学方面的基础啦,微积分、线性代数和概率论的基础都是听懂这门课必须的。
在EP6(【浅谈机器学习原理】李宏毅2021/2022春机器学习课程笔记EP6(P23,P32) – -TobyKSKGD的个人博客-)中我们简单探讨了机器学习的原理。如果忘记了,这里放了一个传送门可以回去看。在这一节课的最后我们留下了一个问题,就是鱼和熊掌是否可以兼得的问题,那我们先来回顾一下这个问题。
当我们选择大的|H|,我们的理想损失会比较小,但是这样做的话,因为模型中的阈值h数量多,所以我们的理想和现实的差距会比较大。反过来说,如果我们选择的|H|比较小,我们一开始理想的损失会比较大,但是理想和现实的差距会比较小。所以我们就有了这个疑问,如何让理想和现实的损失都比较小呢?这个问题换句话说就是上图里面下面的这个式子,我们需要做的就是找到|H|中的h都比较有代表性,然后让h在整个资料集Dall中训练出来的loss低,如果上面两者同时成立的话,就可以让理想很小,并且让理想和现实很接近,也就是我们说的鱼和熊掌可以兼得。
这个鱼和熊掌都可以兼得的机器学习就是深度学习(Deep Learning)。
那有关深度学习的一些基本概念,我已经在EP1(李宏毅2021/2022春机器学习课程笔记EP1(P1-P4) – -TobyKSKGD的个人博客-)的博客中已经做过了笔记,如果忘记了,这里同样有个传送门可以回去看。
那我们先简单复习一下深度学习的比较重要的基本概念,然后我们就来探索深度学习是如何做到鱼和熊掌兼得的。
上图中给出了这个绿色的函数,通过第一节课的内容,我们知道说任何的函数都可以用一个常数项和多个激活函数表示出来,比如这里我们用了一个常数项加上一个看着像镜像过来的“Z”的函数来表示这个绿色的函数。然后这个镜像过来的“Z”我们也可以用一个经典的激活函数“ReLU”函数去表示。
接着我们就来探索深度学习是如何做到鱼和熊掌兼得的。
我们说,随着Layer的层数越叠越深,模型的|H|也就是复杂程度就会越来越大。这样子,我们理想的loss就会越来越小。并且,如果我们如果有足够的训练集量,理想和现实就不会差太多。如此,我们就通过深度学习得到了这个鱼与熊掌兼得的效果。
但是你可能会问,不加深Layer的层数,而是将一层Layer变胖,只往一层里面加东西可不可以呢?
从实验的结果上看,深度学习的结果比单单加深一层的神经网络效果好!
通过上面的实验数据,我们就得到了结论:当你有同样大小的模型时,与其把神经网络内部变胖,不如把网络深度变深。
当然,只看到这个数据你可能会不服,说为什么一定是深度学习的效果更好呢?
所以,下面我们来比较一下Deep和Shallow的区别。
先上结论,使用Deep的网络去产生上面图中绿色的函数,需要的参数更少更加高效。
这里也就和我们一般想象中的不一样了,如果我们使用深度学习去产生一个函数的时候,我们需要的参数往往会更少,也就是说更不容易发生过拟合的问题。
这里老师类比了三个例子让你去理解加深层数的意义。
第一个是数字逻辑电路的角度;第二个是代码的角度;最后是更具体的剪纸角度。
这里我们就说最后这个最容易让人理解的剪纸角度去说明。在剪纸中,我们把纸张对折的操作就相当于深度学习里加深层每一层里面在做的事情。
最后我们就来看看,这个“折”的操作具体指的是什么。
首先是一层的神经网络。
我们输入的参数是x,我们让这个x分别去过两个神经元,这两个神经元中的权重weight和bias假设我们都知道了,最后我们将通过这两个神经元的结果相加得到输出的结果。这里我们将输入和输出的关系放在上面的右图中。
接着是两层的神经网络。
也是一样,变得无非就是将前面两个通过神经元的输出作为下一个层的输入再通过一次神经元,最后相加得到输出。那同样的我们在右边放上输入和输出的关系图。那前面一个图是第一个输入x和第一层的输出a1之间的关系,第二个图是第一层的输出a1和最终输出结果a2的关系。那我们将前面的两个对应关系加起来,得到的就是最初的输入x与最终的输出a2之间的关系。我们简单解释一个两个函数的相加,想想看把x从0挪到1之后a2是什么样子的变化,从第一张图看,我们把x从0挪到中间0.5的位置的时候,a1的值就是从1变化到0,那看第二张图片a1从0到1对应的a2就是先从1到0再在x等于0.25的地方从0到1。同样的,x从0.5继续挪到1的地方,对应a1的变化就是从0到1对应的a2就是先从1到0再在x等于0.75的地方从0到1。最终我们得到的就是最初的输入x与最终的输出a2之间的关系。
最后是三层的神经网络。
和前面一层到两层的变化是一样的,这里就不赘述了。
最后可以发现,我们仅仅通过加深层的方式,就获得了像三层神经网络中这样子输入x和输出a3这样较为复杂的函数了。但是利用向一个层加深东西的方式,我们需要一个比较复杂的模型,也就是说shallow的网络更加需要大的资料,这样也就更加容易发生过拟合的问题。
所以,我们得出的结论就是:深度学习在复杂但是有规律的函数上效果更好。
以上就是李宏毅机器学习课程P33节的笔记。