深度学习因为其强大的效果渐渐被应用到不同的领域,深度学习,或者说深层神经网络,说到底还是神经网络,只是基于不同的问题可能会添加一些额外的结构,或者增加大量的隐含层以达到所谓的更深的深度,但这些都只是后话,毕竟即使只是一个简单的线性回归模型我们同样可以做各式各样的改进,为什么就轮不到它那么火呢,这里我想谈一下我个人的一些看法。
首先我想先说一下我个人对机器学习的看法,目前我们都在图像、信息处理、自然语言等不同领域都大量应用了机器学习的模型,即使领域不同,但我认为应用的思路都是一致的,那就是先建立数学模型,然后通过求解一个个函数去解决问题。
什么是建立一个数学模型,简单来说就是把一个问题数学化,比如图像处理中,我们会把一副图像看成一个个像素点,每个像素点有不同的颜色,这些都可以用数值来表示,所以到最后一幅图像就变成了一个多维矩阵,而图像处理就变成了对矩阵的处理了。
建立了一个数学模型之后,就是求解这个模型,也就是求解一个个函数,这里的求解,一般是指针对我们的问题求解一系列最优的函数参数,所以从另一个角度来说,我们也可以这么想象,我们的问题本身有一个很复杂的函数可以描述,但是我们不知道,所以我们就需要去分析拟合出这个函数。
所以总的来说,我们应用机器学习,就是应用机器学习的模型去拟合函数,机器学习的学习就体现在可以根据损失函数利用各种优化方法调整参数,使得它们逐渐逼近“真实函数”的“真实参数”。
那么神经网络和线性回归这些简单模型相比,又是什么导致它的强大之处呢?
首先从另一个角度来回顾一下最简单的全连接神经网络,这里我把它看成两个部分,一个是神经元,一个是网络结构。
所谓神经元,我觉得有点类似广义线性模型,以激活函数为sigmoid函数作为例子,本质上,如果一个神经元以sigmoid函数作为激活函数,那么它就是一个logistic回归模型了:把多个输入进行线性组合,然后通过sigmoid函数进行一个非线性变换:
S ( x ) = 1 1 + e ω x + b S(x) = \frac{1}{1+e^{\omega x + b}} S(x)=1+eωx+b1
为什么一定要非线性变换,如果不是非线性变换,那么到头来神经网络就只是一个复杂一点的线性回归模型了,所以这里的激活函数是神经网络的重点,虽然可能在不同情况下会采取不同的激活函数,但非线性变换是必须的。
第二点是网络结构,网络结构的核心就是把上一层的输出作为下一层的输入,比如上一层有三个输出:S1、S2、S3,那么对于下一层的某个神经元来说,就有:
S 4 ( x ) = 1 1 + e ω 1 S 1 ( X ) + ω 2 S 2 ( x ) + ω 3 S 3 ( x ) + b S_4(x) = \frac{1}{1+e^{\omega _1 S_1(X) + \omega _2 S_2(x) + \omega _3 S_3(x) + b}} S4(x)=1+eω1S1(X)+ω2S2(x)+ω3S3(x)+b1
这里还是以sigmoid函数作为激活函数,从这个函数的形式我们就能看出,上一层有三个输出,他们之间是一种线性组合,这个结论当然很明显,但是进一步推广,如果我们有一个可以表达整个神经网络的函数,那么我们就能通过线性组合这个特征去判断在同一层的神经元了。
上面的结论,主要是为了引出下面的另一个结论,首先我们来看一个复杂一点的函数:
o u t p u t = ω 1 S 1 + ω 2 S 2 + ω 3 S 3 output =\omega _1 S_1 + \omega _2 S_2 + \omega _3 S_3 output=ω1S1+ω2S2+ω3S3
S 1 = 1 1 + e ω 4 S 4 + ω 5 S 5 + b 1 S_1 =\frac{1}{1+e^{\omega _4 S_4 + \omega _5 S_5 + b_1}} S1=1+eω4S4+ω5S5+b11
S 2 = 1 1 + e ω 6 S 6 + ω 7 S 7 + b 2 S_2 =\frac{1}{1+e^{\omega _6 S_6 + \omega _7 S_7 + b_2}} S2=1+eω6S6+ω7S7+b21
S 3 = 1 1 + e ω 8 S 8 + ω 9 S 9 + b 3 S_3 =\frac{1}{1+e^{\omega _8 S_8 + \omega _9 S_9 + b_3}} S3=1+eω8S8+ω9S9+b31
S4至S9也分别有对应具体的函数,这里不再具体写出来,主要想说明的是,从函数的角度就能看出,对于不同层的神经元,我们可以通过它经历的非线性变换次数判断所在的层数,也可以说是sigmoid函数的内嵌次数去判断层数,为什么要强调内嵌,因为我想说明,整个神经网络函数虽然看起来很复杂,但本质上就是一个个sigmoid函数不断地嵌套生成的。
这种同一函数不断嵌套而复杂化的结构,是我本科毕业论文的课题,当时我研究的主要是多项式求根公式的嵌套结构以及与分形结构的关系,所以接下来我也想从多项式求根公式、分形的角度去分析神经网络结构。
根据上面的讨论,我们首先有一个结论,神经网络的结构,就是激活函数的不断内嵌的结构(暂假设整个神经网络都采取同一种激活函数),那么这种不断内嵌的结构有什么优点呢?
首先从多项式求根公式的角度来说一下,以最简单的二次和三次多项式的求根公式为例,对二次多项式的求根公式:
x 1 , 2 = − 1 2 ⋅ b a + ϵ 1 1 4 ⋅ ( b a ) 2 − c a x_{1,2} = - \frac{1}{2} \cdot \frac{b}{a} + \epsilon_1 \sqrt {\frac{1}{4} \cdot (\frac{b}{a})^2 - \frac{c}{a} } x1,2=−21⋅ab+ϵ141⋅(ab)2−ac
其中,
ϵ 1 = ± 1 \epsilon_1 = \pm 1 ϵ1=±1
两个根分别为:
x 1 = − 1 2 ⋅ b a + 1 4 ⋅ ( b a ) 2 − c a x_{1} = - \frac{1}{2} \cdot \frac{b}{a} + \sqrt {\frac{1}{4} \cdot (\frac{b}{a})^2 - \frac{c}{a} } x1=−21⋅ab+41⋅(ab)2−ac
x 2 = − 1 2 ⋅ b a − 1 4 ⋅ ( b a ) 2 − c a x_{2} = - \frac{1}{2} \cdot \frac{b}{a} - \sqrt {\frac{1}{4} \cdot (\frac{b}{a})^2 - \frac{c}{a} } x2=−21⋅ab−41⋅(ab)2−ac
对三次多项式的求根公式:
x 1 , 2 , 3 = ϵ 2 − q 2 + q 2 4 + p 3 27 3 + ϵ 2 2 − q 2 − q 2 4 + p 3 27 3 x_{1,2,3} = \epsilon_2 \sqrt[3] {\frac{-q}{2} \ + \sqrt{\frac{q^2}{4} + \frac{p^3}{27}} } + \epsilon_2 ^2 \sqrt[3] {\frac{-q}{2} - \sqrt{\frac{q^2}{4} + \frac{p^3}{27}} } x1,2,3=ϵ232−q +4q2+27p3+ϵ2232−q−4q2+27p3
其中,
ϵ
2
=
1
,
ω
,
ω
2
\epsilon_2 = 1, \omega, \omega ^2
ϵ2=1,ω,ω2
ω
=
−
1
2
+
3
2
i
\omega = -\frac{1}{2} + \frac{\sqrt{3}}{2} i
ω=−21+23i
这里做一些变量代换:
b
a
=
q
\frac{b}{a} = q
ab=q
−
c
a
=
p
3
27
-\frac{c}{a} = \frac{p^3}{27}
−ac=27p3
可得到:
x 1 , 2 , 3 = ϵ 2 x 1 3 + ϵ 2 2 x 2 3 x_{1,2,3} = \epsilon_2 \sqrt[3]{x_1} + \epsilon_2 ^2 \sqrt[3]{x_2} x1,2,3=ϵ23x1+ϵ223x2
上式就反映了,其实三次多项式的求根公式内嵌了二次多项式的求根公式,而且通过三次开根运算实现了非线性变换。
以上这种结构对于一次到四次多项式的求根公式都是存在的(五次多项式没有求根公式,这也是我当时研究的另一个问题),也就是说四次多项式的求根公式由三次多项式的求根公式构成,三次又由二次构成,二次由一次构成,但是这种结构不是一种简单的内嵌结构,就像神经网络一样,如果没有非线性变换,那么再复杂的神经网络也只是一个线性模型,而求根公式中的非线性变换就是开方运算。
对多项式来说,这种结构有什么意义,首先我们来想一下,假如现在有一个集合,由一次方程的根构成,那么里面会有无限不循环小数吗,不存在的,因为这是一个有理数集合,甚至连根号2都不存在。
好了,当我们把这个集合扩张一下,引入二次方程的根,那么我们当然多了很多元素了(比如刚刚所说的根号2),这个过程就是数域的扩张,对三次多项式也是这样,也就是说,我们通过这种嵌套的结构,可以达到数域扩张的目的,也就是说,我们的方程,可以表示更多的数、更多的结果了。
那么把求根公式类比成我们的神经网络,同样的,因为它的网络结构,就使得它天然就比一般的模型能够表达更多的数值,再复杂的解它都能表示出来。
然后再从分形的角度看一下,所谓分形图形,简单来说就是每一个小部分都和整体具有同等的复杂度,不会因为放大它而导致复杂度降低。这里我介绍一种特别的分形曲线:希尔伯特曲线,它的特别之处就在于可以充满一个平面:

按照常识而言,线是不可能充满整个平面的,但是因为分形可以达到任意的复杂度,使得分形曲线可以逼近充满整个平面。这种逼近是一种极限的思想,也可以这样表述:如果我们在一个平面指定任意的点,它都在一条线上,我们就可以说这条线充满了整个平面。假如把平面看成一个解空间,我们的模型看成一条线,模型有很多,比如多项式回归,只要次数足够高,项数足够多,理论上它也可以拟合出很复杂的函数,也就是说它可以变成一条十分弯曲复杂的曲线,但是再弯曲的曲线也没法充满整个空间。
反观神经网络,它的网络结构使得它具备自相似性,所以理论上是可以充满整个解空间,所以,神经网络就成为了确确实实的万能函数生成器了。(或者说神经网络可以逼近任意的多项式回归模型,而多项式回归模型未必能逼近任意的神经网络)
根据上面的讨论,从另一个角度也可以看出,只有在我们要拟合的函数十分复杂的情况下神经网络才能有很好的效果(这里主要指耗时等各方面的权衡),不然拟合一个线性模型也用神经网络就是大炮打蚊子。
最后我也想顺便提一下,之所以同时提到多项式求根公式的嵌套结构和分形,主要是我认为两者之间也是有联系的,虽然对求根公式来说,如果我们只看二次求根公式当然复杂度比四次的要低,可是假如对于非整数次多项式也存在求根公式,那么这种嵌套的结构就使得复杂度是趋于一致的了,这是一种极限的思想,当时我在思考极限是不是就是五次方程,所以才导致五次方程没有求根公式,很遗憾当时学识不足,能力欠缺,没能分析下去。恰逢最近在学习神经网络,又发现这种嵌套结构的存在,所以真的很激动,不是很确定这之间是不是有什么联系,或许还需要更深入的学习才能有更深的理解。
以上的讨论就是我个人关于神经网络的看法,因为还是初学者,可能对部分知识理论的理解有点偏差,欢迎讨论。
想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客