这一节可能会需要一些基本的线性代数知识,希望大家能懂,只是个人看了论文的一些理解和思考,欢迎讨论?
在这里我们讨论什么是线性、非线性?为什么深度学习模型里要大量用激活函数进行非线性操作以拟合任何函数,为什么?如果从神经科学的角度出发,当然是为了类似人脑的神经元激活方式设计的,但是从数学角度理解为啥是这样的呢?首先我们都学过基本的线性代数,假如对一个向量 {x},我们有 {y} = w{x} + b , {y} 就是对应我们的标签, {x} 就是我们的输入特征矩阵, w 和 b 就是我们需要去训练的参数,其中 w 可以叫做权重矩阵, b 叫做偏置。
假设我们知道 {x} = m{a} + b_{1} ,那么 {y} = w({ m{a} + b_{1}}) + b ,也就是说在没有激活函数的情况下,所有的函数都是一次函数就可以表征(此处用一次函数解释是为了方便大家理解,不够严谨),并且多个一次函数的叠加最后还是一个一次函数,这就是所谓的线性,线性函数是无法满足在广大世界中大部分数据的特征分布的,也就是说要想拟合大多数的特征分布就需要一种能够弯曲的曲线,来拟合大部分数据的特征分布,这就是非线性的作用,但是非线性这样解释只是为了大家能够理解。
接下来我们从线性代数的角度去理解激活函数的作用到底是什么?因为打字篇幅有限,请看下图所示。
上图这种思想需要深刻理解,我也是看的是一篇哈佛大学丘成桐教授的一篇论文介绍的,我只是通俗的讲解出来,其实进一步理解就是通过激活函数将高维线性空间划分成不同的区域块,以增加非线性,就好比微积分学习的时候,要把区域面积划分成很小很小的块那种思想,最后一句,最重要的是,现在大火的预训练模型+微调模式,还有迁移学习,其实就是在大规模的数据集上训练出高维的空间区域块,然后在做下游任务的时候就不需要从头开始耗费大量资源去训练参数,只需要在自己的区域块内寻找合适的参数。
以上就是我个人的总结和理解,有什么不一样的想法欢迎讨论,最后留一个问题?希望大家回去也思考,做科研真的需要多思考,只看论文不思考感觉不会太大的进步。
留的问题是?打个比方在图像数据集中,输入到模型的像素值都是大于0的,那这时候relu激活函数就是线性作用的,那relu还起到什么作用呢?这个问题很多人在跑代码的时候都会写到,但是肯定有一部分人没考虑过这个问题?谢谢!