老饼讲解:一步一步上手深度学习
这这这这这非常非常重要!很多人不知道MLP为什么能拟合任意关系。
这节我们把MLP的原理给扒出来,就知道这家伙到底在干什么,为什么可以拟合任意关系了。
好了,上车!
既然都来玩深度学习了,这里咱不扯什么生物神经机制之类的行外话,咱直接从数学角度杀进去把它的原理掏得一干二白,看看三层MLP到底是个什么东西。
先来看一个具体的MLP结构,如下:

以上面的MLP为例,它单输入、单输出、且含3个隐神经元、且隐层激活函数为sigmoid,输出层的激活函数为恒等函数。可知,隐层的三个隐神经元的值分别为:
而输出层则是:
可以看到,输出y就是三个隐神经元与阈值的叠加和,而单个是啥呢?它其实就是一条可变的S型曲线,如下:

所以,三层MLP的每个隐神经元就代表了一个S曲线,它通过w,b来调整各个S曲线的高、宽、位置,来将多个sigmoid曲线凑合出整体的曲线:

MLP这东西说透了,就非常的简单,并不涉及太多生物神经的知识,就是靠拼凑多个S曲线来叠加出目标曲线。
好了,三层MLP能拟合任意关系,这点已经被证明。但为什么能拟合呢?这里我们简单地来理解一下。
设现在我随意地画一个曲线,用它来代表x和y的关系,如下:

这曲线真的是我很随意的画的,那么我们要拟合x,y的关系,也就是拟合上面这条曲线,那要怎么搞呢?这就要利用sigmoid函数的局部非线性了。
我们不妨对目标曲线逐段拟合,先来一个sigmoid,把一部分给拟合了!如下:

看哦,sigmoid具有局部非线性,它只利用非线性的那一段来拟合目标段,而局部之外就是一条横线,对原曲线的形态基本没有影响呢~好了,我这第一段就完成了,接下来看我再来拟合第二段:

酷不酷!还要看我的表演吗?不表演啦,都是苦力活,这样一路拟合下去就行了。
哎呀,有人可能会说我在Step2拟合的不够完美,那是因为我比较粗糙,下面再换个微观角度来看看。

如图,sigmoid就充当着一个分段函数,只要根据目标函数瞬时斜率来调整sigmoid的斜率,然后杠过去,就能拟合到目标曲线的瞬时小段了,因此,只要隐神经元足够多,就可以把整个曲线都拟合完了。
到了这里,就很清晰了。MLP就是靠着sigmoid来拟合曲线,每个sigmoid就像是它的小兵,而sigmoid越多,也就是隐神经元越多,它能拟合出来的形态就越自由,因此往往需要控制隐节点的个数,避免它能力过强,同时,也要保证隐节点足够多,使它具有拟合出目标曲线的资本。
从上面的分析我们就可以知道,三层MLP的核心功能就是可以拟合任意关系,而它的原理就是用多个sigmoid函数来拼凑出目标曲线。
所以呢,如果有某种关系我们不知道的时候,那么就可以用三层MLP来拟合它~这以后会在深度学习中经常遇到,在整个复杂模型中,只要某部分关系不知道,就可以直接扔一个三层MLP过去,让它拟合这部分关系,爽死了。
评论