前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Chapter 7:Neural Network

Chapter 7:Neural Network

作者头像
西红柿炒鸡蛋
发布2019-03-11 10:27:05
3970
发布2019-03-11 10:27:05
举报
文章被收录于专栏:自学笔记自学笔记

神经网络是一种生物启发式的模型,在时间序列上和视觉上已经有了很重要的工程应用。

①The Multi-layer Perceptron

对于上诉的公式证明,在理论上可以使用一些方法来类比计算,也就是说任何的一个在紧密集合上的连续函数都可以使用单步函数进行任意近似。单步函数可以说是最简单的函数,感知机perceptron好就是一种比较简单的step function。 在上诉的神经网络里面,输入层是不可以被看成是一层。而隐藏层是使用sign(.)作为输出。然而,问题是这些使用sign(.)的方法困难部分是在于他不是平滑的,一个平滑的近似函数是完全不同于sign(.),平滑的近似函数可以允许我们使用数学分析的方法来寻找最优权值。

②Notation and Forward Propagation

Notation:层数使用l = 1,2,3...L来表示,输入层将不能被看做是一个层,每一层会有

d^l + 1
d^l + 1

个节点,因为还要加上一个偏置项。输入层没有进来的权值,但是有输出的权值,输出层相反。

前向传播完成后,那么我们需要做的就是求

E_{in}
E_{in}

E_{in}(w) = \frac{1}{N}\sum^{N}_{n=1}(h(x_n;w)-y_n)^2 = \frac{1}{N}\sum^{N}_{n=1}(x_n^L-y_n)^2
E_{in}(w) = \frac{1}{N}\sum^{N}_{n=1}(h(x_n;w)-y_n)^2 = \frac{1}{N}\sum^{N}_{n=1}(x_n^L-y_n)^2

③The Simple Perceptron Revisited

tanh(x):

f(x) = \frac{e^x - e^{-x}}{e^x+e^{-x}}
f(x) = \frac{e^x - e^{-x}}{e^x+e^{-x}}

Nearly linear for x = 0 and nearly +/-1 for |x| large. tan(.)近似函数抓住了整体的趋势,如果我们最小化tanh-insample error,我们可以基本等同于是优化in-sample error了。 优化in-sample error的方法自然就是梯度下降了,首先初始化权值,然后再每一步的时候更新所有权值即可。但是对于一个神经网络来说就没有这么简单了,因为神经网络这么多层的叠加已经不再是一种简单的凸优化函数了,而是很复杂的函数叠加。如果初始权值初始化的太大了,那么

E_{in} = 0
E_{in} = 0

因此,我们需要选择比较小的权值使得一开始

tanh^2(w_n^Tx_n) = 0
tanh^2(w_n^Tx_n) = 0

一个比较好的选择就是使用高斯函数初始化。 终止点: 一个比较好的选择是当边缘error很小,而且迭代一定的次数之后就可以停止了。

④BackPropagation

主要就是使用链式法则。

需要注意的是,有时候我们会发现误差平面可能会看起来很平,也就是遇到了梯度消失,这是因为tanh已经饱和了,对于这种情况,可以使用一个不容易饱和的函数来修复,比如square error function。

⑤Approximation VS Generalization

A 3-layer neural network:

h(x) = \theta(w_0 + \sum^m_{j=1}w_j\theta(v_j^Tw))
h(x) = \theta(w_0 + \sum^m_{j=1}w_j\theta(v_j^Tw))

神经网络相对于非线性转化来说,能力会更强,在线性模型里面,非线性转化函数是先前就确定了的,也就是再没看到数据之前就确定了,而神经网络是在参数里面的,我们可以在看到数据的情况下继续调整参数。 如果我们假设数据是由一个目标函数生成的,而这个目标函数最高复杂度是C。如果用一个只有一层隐藏层,而隐藏层含有m个核的神经网络来学习:

E_{in}(h) = \frac{1}{N}(h(x_n)-y_n)^2 <= \frac{(2RC)^2}{m}
E_{in}(h) = \frac{1}{N}(h(x_n)-y_n)^2 <= \frac{(2RC)^2}{m}

而R = max(x),

E_(in) <= E_{out}^* + O(C/m)
E_(in) <= E_{out}^* + O(C/m)

所以如果神经元越多,那么可以得到越小的错误。 既然优化样本内错误的问题解决了,那么就是泛华的问题了。 对于两层的MLP,也就是一层隐藏层的神经网络:

d_{vc} <= (const)mdlog(md)
d_{vc} <= (const)mdlog(md)

现在就来证明一下:

假设每一个Hi的VC维是

d_i
d_i

那么每一个神经元对于一个数据点的二分最高次数是

N^{d_i}
N^{d_i}

一共这么多种组合方法,所以一共有

N^{\sum_{i=1}^md_i}
N^{\sum_{i=1}^md_i}

再加上后面最后一个输出函数:

N^{{\sum_{i=1}^md_i}+d_c}
N^{{\sum_{i=1}^md_i}+d_c}

根据之前的VC分析,我们可以得到

m(N) < 2^N
m(N) < 2^N

可以得到

N > 2Dlog_2^D
N > 2Dlog_2^D

如果m不是很大,我们可以用很好的泛化,而m大又容易过拟合。

⑥Regularization and Validation

首先是权值衰减,

还有另外一种衰减方式:

对于比较大的权值,惩罚项是近似常数,对于比较小的权值会衰减的更加快。 这是一种叫权重衰减的方法,还有一种是early stop,这种方法比较好理解,神经网络不是一次性就开发出所有的假设,是不断的在调整迭代的过程中才会慢慢的开放出新的权值,所以每一次迭代之后,他的假设集就会大一点,当迭代次数不多的时候,就假设集就会小,那么VC维也就不高了。

⑧Networks with many layers

神经网络的第一层会建立起比较低级别的特征,第二层会在第一层的基础上再建立一层更高级的特征,以此类推,所以神经网络可以发现很多机器学习发现不了的特征,这种自动选择特征是神经网络的一大特点。 对于神经网络的训练,一下方法比较常用:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.02.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ①The Multi-layer Perceptron
  • ②Notation and Forward Propagation
  • ③The Simple Perceptron Revisited
  • ④BackPropagation
  • ⑤Approximation VS Generalization
  • ⑥Regularization and Validation
  • ⑧Networks with many layers
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档