本质上,神经网络是通用函数逼近器,他可以近似拟合各种函数 ,这是靠激活函数压缩变化曲线实现的。
下边以ReLU拟合分段函数为例:这个分段函数有四个段,所以用一个隐藏层,隐藏层中有四个神经元,神经元①拟合最左边段......神经元④拟合最右边段:
ReLU=max(x,0);
首先ReLU的本质:使小于0的部分曲线消失,只保留大于0的部分,故我可以设法用多个ReLU做出多段曲线,然后叠加,就可以生成对应多段曲线:如下蓝色线为不同ReLU实际生效部分
所以一个隐藏层中,不同神经元可处理片段曲线,即可实现同一层神经元处理图片不同部分,然后叠加,就处理完了整张图片。
sigmoid做激活函数也可以实现拟合不同段曲线
一、所以可以理解神经网络处理图片的过程:
比如说有三个隐藏层:
隐藏层①有4个神经元
隐藏层②有3个神经元
隐藏层③有2个神经元
输入层输入数据到隐藏层
隐藏层①的神经元可以分别处理左上、左下、右上、右下部分图片,然后综合信息传到隐藏层②
隐藏层②的神经元可以进一步处理上、中、下部分图片,然后综合信息传到隐藏层③
隐藏层③的神经元可以处理上、下部分图片,然后整合,得到图片处理完的结果
所以一般随着隐藏层递进,神经元个数是逐渐减小的,因为要把部分得到的信息一步步综合,得到整张图片的信息。所以越靠近输入层的神经元,个数越多,因为安排每个神经元处理图片不同微小部分的信息。然后信息一步步综合,越靠近输出层的神经元,处理的信息面越广,所要神经元的个数也就越少。
二、那为什么有时候一开始会把输入层的信息先放大,即输入层n个特征,先放大数量到隐藏层①,其中隐藏层①有m个神经元(m>n):
因为可以泛化图片,把特征数先扩大,相当于给输入多加了一点噪声,此时得到的模型是不易过拟合的
三、理解迁移学习:
迁移学习是指我想训练某个模型,但是我没有足够多的数据,我可以把别人已经做好的能实现类似功能的模型搬过来,自己调一下输出等,就可以给自己用。
那为什么迁移学习有效呢?以处理图片为例,神经元是功能的载体,它不知道自己处理的是什么图片,它只知道自己要怎么处理那部分 。整个神经网络是实现功能的工具,我放入图片可以得到类似的处理,我把我要处理的图片放进模型,然后根据得出的结果,调整输出,就可能可以得到能处理自己图片的模型(对于迁移学习还不是很了解,深入学了再补一下内容)