神经网络讲解

1)人工神经网络的结构

我们在这里介绍一个最简单的神经网络。这个简单的神经网络有三层结构:输入层,隐藏层,输出层。如下图所示(图片来自谷歌)

顾名思义:在输入层,我们对神经网络输入变量;在隐藏层和输出层,我们进行计算并输出。在神经网络的隐藏层上,存在着依靠Activation function来进行运算的“神经元”。这些具体计算流程我们稍后一起讲。

假设我们有一个由M个输入变量构成的向量\mathbf{x} \in \mathbb{R}^{1\times M},神经网络有N个的神经元,只有一个最终的输出变量y \in\mathbb{R}^{1\times 1}。那么在输入层进入隐藏层的时候,神经网络是进行下述计算的

\mathbf{z} = \mathbf{x}\mathbf{w}^T + \mathbf{b}_0, \qquad \mathbf{w} \in \mathbb{R}^{N\times M}, \mathbf{b}_0 \in \mathbb{R}^{1\times N}

其中,矩阵W是连接输入层与隐藏层的桥梁,叫做weight。然后,每个神经元上都有一个常数变量b0,我们叫作bias。N个神经元有N的bias,所以这些bias构成了一个常数向量b0。在隐藏层的神经元接收到了向量z之后,神经元会进行Activation function的计算

\sigma(\mathbf{z}) \in \mathbb{R}^{1\times N}

在这里,\sigma(\cdot)就是所谓的Activation function,常用的选择有sigmoid function,tanh等等。这是几种常见Activation function的选择列表(来自于Wikipedia)

在完成了神经元上的计算后,计算继续向输出层移动。从隐藏层到输出层,我们也有一个weight向量,在这里我们计作\theta \in \mathbb{R}^{N\times 1}。然后,在完成下述计算后,数值会移动到输出层

y = \sigma(\mathbf{z})\theta + b_1 \quad \in\mathbb{R}^{1\times 1}

在输出层,类似于在隐藏层,我们还要添加一个bias b1,这个bias的维度和输出的维度是一致的。

总结来说,假如我们有M个输入变量组成的向量X,N个神经元,L个输出变量组成的向量Y。则神经网络的计算公式就是

y = \sigma(\mathbf{x}\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1

其中

\mathbf{w} \in \mathbb{R}^{N\times M}, \mathbf{b}_0 \in \mathbb{R}^{1\times N}, \theta \in \mathbb{R}^{N\times 1}, b_1 \in \mathbb{R}^{1\times 1}

在这里,W,b0,theta,b1都是神经网络自身的变量。而所谓的神经网络训练,也就是让这些变量与training data“拟合”。

2)人工神经网络的训练

最常用的神经网络训练方式是反向传播算法(backpropagation)。反向传播算法有两个要素,简单来说就是:正向计算得到误差函数,反向求导梯度下降。以上述神经网络为例,假设我们有K组训练用的输入与输出数据\left( \mathbf{x}_i, y_i \right)_{i = 1, ..., K},我们来推导一下训练的算法。

首先,我们的训练其实就是使得定义的误差函数最小化,那么什么是误差函数?常用的误差函数有很多,我们以平方和为例

L(\mathbf{w}, \mathbf{b}_0, \theta, b_1) = \sum_{i = 1}^{K} \frac{1}{2}\left[ N(\mathbf{x}_i;\mathbf{w}, \mathbf{b}_0, \theta, b_1) - y_i\right]^2

其中,函数N(\cdot)代表着人工神经网络这个函数。这样,我们首先要做的就是初始化神经网络的一些自身变量,然后将初始化的变量代入神经网络,加上所有的训练数据,得到初始的误差函数值如下

L(\mathbf{w}, \mathbf{b}_0, \theta, b_1) = \sum_{i = 1}^{K} \frac{1}{2}\left[ \sigma(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1 - y_i\right]^2

第二步,我们就是要update神经网络的自身变量,使得神经网络的误差函数在更新之后的自身变量下缩小。而我们使用的主要方法,和牛顿法求零点一样,是梯度下降。所以,我们需要求出误差函数关于神经网络自身变量(W、b0、theta、b1)的偏导数。

\frac{\partial L}{\partial \mathbf{w}} = \sum_{i = 1}^{K} \left(\left[ \sigma(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1 - y_i\right] \theta^T \circ \sigma^{\prime}(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0) \right)^T \mathbf{x}_i
\frac{\partial L}{\partial \mathbf{b}_0} = \sum_{i = 1}^{K} \left[ \sigma(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1 - y_i\right] \theta^T \circ \sigma^{\prime}(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0)
\frac{\partial L}{\partial \theta} = \sum_{i = 1}^{K} \left[ \sigma(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1 - y_i\right] \sigma^T(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0)
\frac{\partial L}{\partial b_1} = \sum_{i = 1}^{K} \left[ \sigma(\mathbf{x}_i\mathbf{w}^T + \mathbf{b}_0){\theta} + b_1 - y_i\right]

其中,空心圆代表矩阵点乘。

在得到了偏导数之后,我们利用下式来更新我们的变量

\mathbf{w} = \mathbf{w}-r \frac{\partial L}{\partial \mathbf{w}}, \quad \mathbf{b}_0 = \mathbf{b}_0 - r \frac{\partial L}{\partial \mathbf{b}_0}, \quad \theta = \theta - r \frac{\partial L}{\partial \theta}, \quad b_1 = b_1 - r \frac{\partial L}{\partial b_1}

其中,r被称作learning rate,代表了神经网络的学习速度与质量。关于r的选取,是一个要权衡利弊的问题:r太小,梯度下降太慢,训练时间很长;r太大,可能无法训练成功。

在这里,反向传播算法更新神经网络的方式就是梯度下降,原理与牛顿法、最小二乘法是一致的。就这样,我们不断的重复上述步骤,直到误差函数缩小到一个可接受范围,则我们就完成了神经网络对训练数据的学习。

3)Universal approximation theorem

乍得一看,神经网络对一个未知函数的估计是很暴力的。但其实它背后是有理论支撑的,那就是这一个定理。这个定理的大白话描述(不是严谨的)就是,如果你的activation function是单调增、有上下界、非常数且连续,那么给定一个任意的连续函数,总是存在一个有限的N,使得含有N个神经元的单隐藏层神经网络可以无限逼近这个连续函数。

这个定理的证明用到了Hahn-Banach theorem、Riesz representation theorem和Fourier analysis,有兴趣的朋友可以去自己查看一下。

但是,在选取N上,如果你的N选择过多,你的问题就会有两种:1,训练速度缓慢;2,overfiting,增加预测值的误差。而如果选择过少的N,你的主要问题就是,难以训练成功。因此,在N的选择上,要注意使用cross-validation来做test,以避免overfiting的问题。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值