深度学习的数学:神经网络的数学基础 - 阅读笔记

业余民科学习者阅读笔记,垃圾内容

simoid函数

早期神经网络使用sigmoidsigmoid函数作为神经元的**函数,它有如下的形式。

σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}

现在我还没有足够的知识理解为什么使用sigmoidsigmoid函数作为神经网络的**函数,大家众说纷纭,没有足够有说服力的答案。大致总结如下:

优点:

  • 神经网络中的**函数,其作用就是引入非线性
  • sigmoid的优点在于输出范围有限,所以数据在传递的过程中不容易发散
  • sigmoid还有一个优点是输出范围为(0, 1),所以可以用作输出层,输出表示概率
  • 求导容易

缺点:

  • 饱和的时候梯度太小
  • 直观理解是熵大的模型比熵小的更健壮(robust)

搜索的时候,遇到了无关的内容,记录下来,下面介绍了神经网络背后的数学原理。

神经网络背后的数学原理
任何连续多元函数都能被一组一元函数的有限次叠加而成,其中每一个一元函数的自变量都是一组连续单变量函数的有限次加权叠加。而这内层的每一个单变量函数的自变量都是一个(即一维)变量。举个例子,x*y = exp(log(x+1)+log(y+1))-(x+0.5)-(y+0.5)。在这个式子中,exp(log(x+1)+log(y+1))是一元函数,其自变量log(x+1)+log(y+1)是两个连续单变量函数的和;(x+0.5)和(y+0.5)也都是一元函数。Remark:这个数学原理被称为Kolmogorov-Arnold representation theorem是对于Hilbert第13问题的部分回答。两层有限次叠加足够准确表示任何多元函数。这比多项式逼近要厉害多了,用多项式去准确表示一个连续多元(非多项式)函数需要无穷多项。这个叠加定理被封存了很多年,因为没法用。它只是说明了存在性,却没有告诉我们如何去构造内层和外层的这些一元函数(就算构造出来,能不能算也是麻烦)。即便如此,大概1990年左右被研究神经网络的数学家挖出来,作为“指导哲学”:固定一种统一的有限层计算网络结构,调整每个节点的参数和每层节点之间叠加计算的权重,来一致逼近任意一个多元函数。更进一步,这些数学家还希望每个节点的一元函数都具有统一的形式,(比如都是sigmoidal-type,也就是说每个节点都是sigmoid函数,只不过参数不一样)。1989年,George Cybenko在Approximation by Superpositions of a Sigmoidal Function 中提出了这一设想,并证明(存在性)只要一个隐藏层并使用sigmoidal-type函数就能一致逼近任意一个多元连续函数。不过隐藏层的单元数可能会非常大。这一结论不基于KST,而是基于Stone-Weierstrass定理。1990年,Kurt Hornik在Approximation Capabilities of Multilayer Feedforward Networks 中指出,如果仅考虑一致逼近,关键不在于sigmoidal-type的**函数函数,而是多层网络的前馈结构。他写道:it is not the specific choice of the activation function, but rather the multilayer feedforward architecture itself which gives neural networks the potential of being universal learning machines除了sigmoidal-type,也可以选择其他**函数,只要他们在连续函数空间上稠密,例如(exp,atan)。他的这一结论也没有用到KST,也基于Stone-Weierstrass定理。(当然这并不是一个非常出人意料的结论,傅里叶级数一直都能做这样的事情)他在最后指出,"it should be emphasized that our results does not mean that all activation functions will perform equally well in specific learning problems. In applications, additional issues as, for example, minimal redundancy or computational efficiency, have to be taken into account as well."以上这种思路:基于稠密函数族的一致逼近,是目前的主流。KST在这里仅仅扮演了一个哲学指导的作用。对于任意给定的精度,任意连续的多元函数都能通过有限个节点多层的神经网络来表示。但是表示效率(节点和层数越少越好)就取决于具体问题和具体的**函数。另一个不算主流的思路就是去逼近KST所揭示的精确表示。1991年,捷克数学家Vera Kurkova 在Kolmogorov’s Theorem and Multilayer Neural Networks 中提出了这一观点,他写道:"by sacrificing exactness of a representation, we can eliminate this difficulty. We give an approximation version of Kolmogorov’s theorem, where all one-variable functions are finite linear combinations of affine transformations with an arbitrary sigmoidal function."并尝试估计用sigmoidal-type**函数的隐藏层节点数。
.
作者:MMMarvin
链接:https://www.zhihu.com/question/24259872/answer/623699200
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

论文:
Multilayer feedforward networks are universal approximators

类似问题:
1.Can neural networks approximate mathematical functions?
2.神经网络为什么可以(理论上)拟合任何函数?
3.神经网络是不是可以拟合任何问题?

向量

向量被充分应用在后述的梯度下降法中”,

  • 向量的坐标表示:a=(a1,a2,...,an)a=(a_1, a_2, ..., a_n)
  • 内积的坐标表示:对于两个向量a=(a1,a2,...,an)a=(a_1, a_2, ..., a_n)b=(b1,b2,...,nn)b=(b_1, b_2, ..., n_n),其内积aba\cdot b如下式所示。

ab=a1b1+a2b2+...+anbna\cdot b=a_1b_1+a_2b_2+...+ a_nb_n

  • 柯西-施瓦茨不等式: ababab-|a||b|\leq a\cdot b \leq |a||b|

我们可以向量内积来表示神经元的输出与输入的关系,如下所示:

z=wx+bz=w\cdot x + b 其中w=(w1,w2,...,wn)w=(w_1, w_2, ..., w_n)x=(x1,x2,...,xn)x=(x_1, x_2, ..., x_n)
深度学习的数学:神经网络的数学基础 - 阅读笔记

偏导数

求导是在对权重偏置进行最优化中不可少的方法,本书介绍了导数的概念以及常见的求导法则,其中对sigmoid函数求导如下:

σ(x)=11+exσ(x)=σ(x)(1σ(x))\sigma(x)=\frac{1}{1+e_{-x}}\newline \sigma'(x)=\sigma(x)(1-\sigma(x))

并指出f(a)=0f'(a)=0是函数f(x)f(x)x=ax=a处取得最小值的必要条件。

“关于某个特定变量的导数就称之为偏导数”,例如对于函数z=f(x,y)z=f(x,y),xxyy的偏导数如下所示:

δzδx=δf(x,y)δx=limΔx0f(x+Δx,y)fx,yΔx\frac{\delta z}{\delta x}=\frac {\delta f(x,y)}{\delta x}=lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x, y) - f{x,y}}{\Delta x}

δzδy=δf(x,y)δy=limΔy0f(x,y+Δy)fx,yΔy\frac{\delta z}{\delta y}=\frac {\delta f(x,y)}{\delta y}=lim_{\Delta y \rightarrow 0} \frac{f(x, y+\Delta y) - f{x,y}}{\Delta y}

对于多变量函数而言,它的最小值条件和单变量函数相似。例如对于函数z=f(x,y)z=f(x,y)取得最小值的必要条件是δfδx=0,δfδy=0\frac{\delta f}{\delta x}=0, \frac{\delta f}{\delta y}=0,可以将其扩展到具有nn个变量的情形。

例如欲求函数
z=x2+y2z=x^2 + y^2
的最小值时xxyy的值,通过δzδx=2x\frac{\delta z}{\delta x}=2xδzδy=2y\frac{\delta z}{\delta y}=2y,可得x=0x=0y=0y=0

另外本书介绍了拉格朗日乘数法,这个方法简直是高中数学求极值问题的通法,可惜需要先学习微分,

链式法则

链式法则是为了复合函数求导问题,对于后面的误差反向传播很有必要。例如已知y=f(u)y=f(u)u=g(x)u=g(x),复合函数f(g(x))f(g(x))的导函数如下:
dydx=dydududx\frac {dy}{dx}=\frac {dy}{du} \frac {du}{dx}

链式法则对多变量函数同样有效。多变量函数在下面的梯度下降中会用到。

梯度下降

梯度下降法简单来说就是一种寻找目标函数局部最小化的方法,主要方式在当前位置找到函数值下降最快(或者上升最快)的方向(这里就会用到前面介绍的向量内积)。本书首先引入了近似公式的概念,

例如对于函数z=f(x,y)z=f(x,y)来说,近似公式如下:
f(x+Δx,y+Δy)f(x,y)+δf(x,y)δxΔx+δf(x,y)δyΔyf(x + \Delta x,y + \Delta y) \fallingdotseq f(x,y) + \frac{\delta f(x,y)}{\delta x}\Delta x + \frac{\delta f(x,y)}{\delta y}\Delta y

而对应的函数值得变化量,如下所示:

ΔzδzδxΔx+δzδyΔy\Delta z \fallingdotseq \frac {\delta z}{\delta x}\Delta x + \frac{\delta z}{\delta y}\Delta y
而这个变化量可以表示成两个向量的内积,一个向量表示各个变量的微分,一个向量表示各个自变量的变化量。如下所示:
Δz=δzδw,δzδx,δzδy,  Δx=(Δw,Δx,Δy)\Delta z = \lgroup \frac {\delta z}{\delta w}, \frac {\delta z}{\delta x}, \frac {\delta z}{\delta y} \rgroup,\ \ \Delta x=(\Delta w, \Delta x, \Delta y)

同时通过近似公式,本书引出了泰勒展开式

前面介绍了函数取得最小值的条件是导数为0,在导数为0的解比较难解的情况下,梯度下降法是一个具有代表性的替代方法。前面我们提到了,

Δz(δzδx,δzδy)(Δx,Δy)\Delta z \fallingdotseq (\frac {\delta z}{\delta x}, \frac{\delta z}{\delta y}) \cdot (\Delta x, \Delta y)

现在的问题就是求向量(Δx,Δy)(\Delta x, \Delta y),使得Δz\Delta z最小。例如对于函数z=x2+y2z=x^2 + y^2来说,就是求(2x,2y)(Δx,Δy)(2x, 2y) \cdot (\Delta x, \Delta y)使得Δz\Delta z最小,给定点(x=1,y=2)(x=1, y=2),使得(2,4)(Δx,Δy)(2,4) \cdot (\Delta x, \Delta y)最小。易知(Δx,Δy)=(1,2)(\Delta x, \Delta y) = (-1,-2)

深度学习的数学:神经网络的数学基础 - 阅读笔记
其实有一个关于梯度下降的通式,\bigtriangledown称为哈密顿算子。
f=(δfδx,δfδy,...,δfδn)\bigtriangledown f = (\frac {\delta f}{\delta x}, \frac {\delta f}{\delta y}, ..., \frac {\delta f}{\delta n})

(Δx,Δy,...,Δn)=ηf(\Delta x, \Delta y, ..., \Delta n) = -\eta \bigtriangledown f

另外关于η\eta,本书也进行了讨论,如何确定微小量η\eta是一个问题。η\eta用于确定下一步移动到哪个点,如果η\eta较大,则可能越过了最小值点。η\eta称为学习率,只能通过反复试验来寻找恰当的值,没有明确的标准。

最优化和回归分析

对于神经网络来说,参数直接决定了最后模型的精确程度。

从数学上来说,确定神经网络的参数是一个最优化问题,具体就是对神经网络的参数(即权重和偏置)进行拟合,使得神经网络的输出与实际数据相吻合

本书通过最小二乘法引出了神经网络的最优化问题。最小二乘法中用到了前面介绍的多元函数到达极值的条件,也就是偏导数为0。最小二乘法使用平方差的和来表示误差总和CTC_T,基于一组有限的数据,求CTC_T的极值。

除了CTC_T之外,回归分析还有其它的误差函数,也就是代价函数。

读书的重点在于思考和理解,否则无疑是向脑子里倾倒垃圾