神经网络-机器学习
作者:互联网
神经网络( Artificial Neural Networks——ANNs)
神经网络表示
Pomerleau(1993)的 ALVINN 系统是 ANN 学习的一个典型实例,这个系统使用一个学习到的 ANN 以正常的速度在高速公路上驾驶汽车。 ANN 的输入是一个 30×32 像素的网格,像素的亮度来自一个安装在车辆上的前向摄像机。 ANN 的输出是车辆行进的方向。
适合神经网络学习的问题
ANN学习适合于这样的问题:训练集合为含有噪声的复杂传感器数据,例如来自摄像机和麦克风的数据。
组成神经网络的主要单元
感知器
感知器以一个实数值向量作为输入,计算这些输入的线性组合,然后如果结果大于某个阈值就输出 1,否则输出-1。更精确地,如果输入为 x1 到 xn,那么感知器计算的输出为:
o
(
x
1
,
…
,
x
n
)
=
{
1
i
f
w
0
+
w
1
x
1
+
w
2
x
2
+
⋯
+
w
n
x
n
>
0
−
1
o
t
h
e
r
w
i
s
e
o(x_1,\dots,x_n)=\begin{cases}1 \quad if\; w_0+w_1x_1+w_2x_2+\dots+w_nx_n >0 \\ -1 \quad otherwise \end{cases}
o(x1,…,xn)={1ifw0+w1x1+w2x2+⋯+wnxn>0−1otherwise
其中每一个 wi 是一个实数常量,或叫做权值(weight),用来决定输入 xi对感知器输出的贡献率。请注意,常量(-w0)是一个阈值,它是为了使感知器输出 1,输入的加权和
w
1
x
1
+
w
2
x
2
+
⋯
+
w
n
x
n
w_1x_1 + w_2 x_2 +\dots + w_n x_n
w1x1+w2x2+⋯+wnxn 必须超过的阈值。为了简化表示,我们假想有一个附加的常量输入 x0=1,那么我们就可以把上边的不等式写为
∑
i
=
0
n
w
i
x
i
>
0
\sum^{n}_{i=0}w_ix_i \; > 0
∑i=0nwixi>0为了简短起见,我们有时会把感知器函数写为:
o
(
x
⃗
)
=
s
g
n
(
w
⃗
⋅
x
⃗
)
o(\vec{x}) = sgn(\vec{w}·\vec{x})
o(x
)=sgn(w
⋅x
)
其中,
s
g
n
(
y
)
=
{
1
i
f
y
>
0
−
1
o
t
h
e
r
w
i
s
e
sgn(y)=\begin{cases} 1 \quad if \; y>0 \\ -1 \quad otherwise\end{cases}
sgn(y)={1ify>0−1otherwise
学习一个感知器意味着选择权
w
0
,
…
,
w
n
w_0, …, w_n
w0,…,wn 的值。
感知器的表征能力
我们可以把感知器看作是 n 维实例空间(即点空间)中的超平面决策面。对于超平面一侧的实例,感知器输出 1,对于另一侧的实例输出-1。这个决策超平面方程是
w
⃗
⋅
x
⃗
=
0
\vec{w} ⋅ \vec{x} = 0
w
⋅x
=0 。
单独的感知器可以用来表示很多布尔函数。
两输入的感知器来实现与函数(AND)的一种方法是设置权
w
0
=
−
0.8
w_0= -0.8
w0=−0.8 并且
w
1
=
w
2
=
0.5
w_1=w_2=0.5
w1=w2=0.5。
用这个感知器来表示或函数(OR),那么只要改变它的阈值
w
0
=
−
0.3
w_0=-0.3
w0=−0.3。
事实上,仅用两层深度的感知器网络就可以表示所有的布尔函数。
注意,要把一个 AND 感知器的输入求否定,只要简单地改变相应输入权的符号。
这里我们考虑两种:感知器法则和 delta 法则(delta rule)。
感知器训练法则
为得到可接受的权向量,一种办法是从随机的权值开始,然后反复地应用这个感知器到每个训练样例,只要它误分类样例就修改感知器的权值。重复这个过程,直到感知器正确分类所有的训练样例。
每一步根据感知器训练法则(perceptron training rule)来修改权值,也就是根据下面的法则修改与输入
x
i
x_i
xi 对应的权
w
i
w_i
wi:
w
i
←
w
i
+
∆
w
i
w_i\leftarrow w_i+∆w_i
wi←wi+∆wi
其中
∆
w
i
=
η
(
t
−
o
)
x
i
∆w_i =η(t-o)x_i
∆wi=η(t−o)xi
这里
t
t
t 是当前训练样例的目标输出, o 是感知器的输出,
η
η
η是一个正的常数称为学习速率(learning rate)。学习速率的作用是缓和每一步调整权的程度。它通常被设为一个小的数
值(例如 0.1),而且有时会使其随着权调整次数的增加而衰减。
感知器的函数为o,所以带有o的符号表示的便是感知器函数的结果输出。
缺点:当训练样例线性可分时,感知器法则可以成功地找到一个权向量,但如果样例不是线性可分时它将不能收敛。
所以,设计了另一个训练法则来克服这个不足,称为 delta法则(delta rule)。
delta法则
delta 法则的关键思想是使用梯度下降(gradient descent) 来搜索可能权向量的假设空间,以找到最佳拟合训练样例的权向量。
这个法则很重要,因为它提供了反向传播算法的基础。
最好把 delta 训练法则理解为训练一个无阈值的感知器,也就是一个线性单元(linear unit),它的输出 o 如下:
o
(
x
⃗
)
=
w
⃗
⋅
x
⃗
o(\vec{x})=\vec{w}·\vec{x}
o(x
)=w
⋅x
于是,一个线性单元对应于感知器的第一阶段,不带有阈值。
为了推导线性单元的权值学习法则,先指定一个度量标准来衡量假设(权向量)相对于训练样例的训练误差。一个常用的特别方便的度量标准为:
最小均分法:
E
(
w
⃗
)
=
1
2
∑
d
∈
D
(
t
d
−
o
d
)
2
E(\vec{w})=\frac{1}{2}\sum_{d\in D}(t_d-o_d)^2
E(w
)=21d∈D∑(td−od)2
其中
D
D
D 是训练样例集合,
t
d
t_d
td 是训练样例
d
d
d 的目标输出,
o
d
o_d
od 是线性单元对训练样例
d
d
d 的输出。
梯度下降权值更新法则:
△
w
i
=
η
∑
d
∈
D
(
t
d
−
o
d
)
x
i
d
\triangle w_i=η \sum_{d\in D}(t_d-o_d)x_{id}
△wi=ηd∈D∑(td−od)xid
感知器法则 vs Delta法则
感知器法则和Delta法则的关键区别:
感知机法则根据阈值化的感知器输出中的误差更新权重。
Delta法则根据非阈值化线性组合的误差来更新权重。
收敛属性的差异:
假设训练样例线性可分, 感知器训练法则经过有限次迭代后收敛到一个能够理想分类训练数据的假设。
Delta法则渐进收敛到最小误差假设,可能需要极长时间,而无论训练数据是否线性可分均可以收敛
训练线性单元的梯度下降算法:
多层网络和反向传播网络
例如,下图描述了一个典型的多层网络和它
的决策曲面。这个语音识别任务要区分出现在“h_d”上下文中的 10 种元音(例如, “hid”,
“had”, “head”, “hood”等)。
输入的语音信号用两个参数表示,网络的 10 个输出对应于 10 个可能的元音。这个网络的预测是其中有最大值的输出。
应该使用什么类型的单元来作为构建多层网络的基础?起初我们可以尝试选择前面讨论的线性单元,因为我们已经为这种单元导出了一个梯度下降学习法则。然而,多个线性单元的连接仍旧产生线性函数,而我们更希望选择能够表征非线性函数的网络。感知器单元是另一种选择,但它的不连续阈值使它不可微,所以不适合梯度下降算法。我们所需要的是这样的单元, 它的输出是输入的非线性函数, 并且输出是输入的可微函数。
一种答案是sigmoid单元(sigmoid unit),sigmoid 单元这样计算它的输出:
o
=
σ
(
w
⃗
⋅
x
⃗
)
o = σ(\vec{w}·\vec{x})
o=σ(w
⋅x
)
其中
σ
(
y
)
=
1
1
+
e
−
y
σ(y)=\frac{1}{1+e^{-y}}
σ(y)=1+e−y1
sigmoid 函数有一个有用的特征,它的导数很容易以它的输出表示:
d
σ
(
y
)
d
y
=
σ
(
y
)
⋅
(
1
−
σ
(
y
)
)
\frac{dσ (y)}{dy}=σ(y)⋅(1-σ(y))
dydσ(y)=σ(y)⋅(1−σ(y))
反向传播算法
对于由一系列确定的单元互连形成的多层网络, 反向传播算法可用来学习这个网络的权值。它采用梯度下降方法试图最小化网络输出值和目标值之间的误差平方。
因为我们要考虑多个输出单元的网络,而不是像以前只考虑单个单元,所以我们先重新定义误差 E,以便对所有网络输出的误差求和。
E
(
w
⃗
)
=
1
2
∑
d
∈
D
∑
k
∈
o
u
t
p
u
t
s
(
t
k
d
−
o
k
d
)
2
E(\vec{w})=\frac{1}{2}\sum_{d\in D}\sum_{k\in outputs}(t_{kd}-o_{kd})^2
E(w
)=21d∈D∑k∈outputs∑(tkd−okd)2
其中
o
u
t
p
u
t
s
outputs
outputs 是网络输出单元的集合,
t
k
d
t_{kd}
tkd 和
o
k
d
o_{kd}
okd 是与训练样例
d
d
d 和第
k
k
k 个输出单元相关的输出值。
多层网络的一个主要不同是它的误差曲面可能有多个局部极小值, 而图 4-4 表示的抛物曲面仅有一个最小值。不幸的是,这意味着梯度下降仅能保证收敛到局部极小值,而未必得到全局最小的误差。尽管有这个障碍,已经发现对于实践中很多应用反向传播算法都产生了出色的结果。
这里的
g
j
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
g_j=\hat{y}^k_j(1-\hat{y}^k_j)(y^k_j-\hat{y}^k_j)
gj=y^jk(1−y^jk)(yjk−y^jk),图中有误。
增加冲量项
因为反向传播算法的应用如此广泛,所以已经开发出了很多反向传播算法的变体。其中最常见的是修改算法中公式的权值更新法则,使第 n 次迭代的权值更新部分地依赖于发生在第 n-1 次迭代时的更新。
∆
w
j
i
=
η
δ
j
x
j
i
+
α
∆
w
j
i
(
n
–
1
)
∆ w_{ji}=ηδ_jx_{ji} + α∆w_{ji}(n – 1)
∆wji=ηδjxji+α∆wji(n–1)
BP算法可能面临的问题
- 结构学习问题
如何确定隐含层神经元个数仍是个问题,目前实际应用中是根据经验来确定或者靠试错法来调整 - 初始化问题
连接权和偏置都需要初始化为不同的小随机数。
不同”保证网络可以学习;“小随机数”可以防止其值过大而提前进入饱和状态,达到局部极小值。
如果遇到局部极小值怎么解决:重新初始化 - 步长设置问题:
BP网络的收敛是基于无穷小的修改量,学习率控制着算法每一轮迭代中的更新步长。
(1)步长太小,收敛速度就会过慢
(2)步长太大,又可能会导致网络的不稳定、甚至瘫痪
(3)自适应步长,让步长随着网络的训练而不断变化 - 权值与阈值的更新问题:
基本的BP算法采用的是样例更新,即每处理一个训练样例就更新一次权值与阈值。
样例更新的缺陷:
(1)参数更新频繁, 不同样例可能抵消, 需要迭代的次数较多。
(2)训练样例的输入顺序对训练结果有较大影响,它更“偏爱”较后输入的样例。
(3)给训练样例安排一个适当的顺序,又是非常困难的。
解决的办法就是采用周期更新,即每处理一遍所有的训练样例才更新一次权值与阈值。
在很多实际任务中, 周期更新的累计误差下降到一定程度后, 进一步下降会非常缓慢,这时样例更新往往会获得较好的解,尤其当训练集非常大时效果更明显。 - 过拟合问题
神经网络由于强大的表示能力,经常遭遇过拟合。具体表现为:训练误差持续降低,但测试误差却可能上升。
为什么过度拟合往往发生在迭代的后期?
(1)权值被初始化为较小的随机值,只能描述光滑的表面。
(1)随着训练的进行,权值开始增加,学习到的表面的复杂性也会增加。
(1)权值调整迭代次数足够多,将会产生过于过度复杂的决策面,拟合了所有的样例。
缓解过拟合的策略:
(1)权值衰减:误差E小于阈值,每次迭代以某个小因子降低每个权值。
(2)早停就是在训练过程中, 若训练误差降低, 但验证误差升高, 则停止训练。
(3)正则化就是在误差目标函数中增加一项描述网络复杂程度的部分,比如连接权值与阈值的平方和。
(4)最成功的方法是交叉验证。
收敛性和局部极小值
BP算法仅保证收敛到误差E的某个局部极小值,误差曲面可能含有多个不同的局部极小值,梯度下降可能陷入这些局部极小值中的任何一个。
缓解局部极小值的问题:
关于局部极小值问题的一些启发式规则:
(1)添加动量项
(2)使用随机梯度而不是真实梯度下降
(3)训练多个网络,选择最佳网络(验证集性能最优)
深层神经网络的定义
典型的深度学习模型就是很深层的神经网络:包含2个以上隐含层的神经网络。
标签:输出,感知器,机器,训练,样例,学习,神经网络,权值,法则 来源: https://blog.csdn.net/worldvagrant/article/details/122240947