线性分类与感知机
线性回归
线性回归要素:
- 训练集 或者训练数据,是流程中输入数据,一般称为x;
- 输出数据 ,一般称为y;
- 拟合的函数(或者称为假设或者模型 ):一般写做y=h(x);如果是直线,则为y=kx+b
- 训练数据的条目数:一条训练数据是由一对输入数据和输出数据组成的,输入数据的维度n(特征个数)。
线性模型,假设房价和房屋面积、年限有关:
y
=
θ
1
x
1
+
θ
2
x
2
+
θ
0
y={{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+{{\theta }_{0}}
y=θ1x1+θ2x2+θ0
扩展原有问题,假设和n个因素有关,则有:
y
=
θ
T
x
y={{\text{} \!\!\theta\!\!\text{ }}^{\text{T}}}\text{x}
y=θ Tx
假设给定样本
(
x
(
i
)
,
y
(
i
)
)
\left( {{x}^{\left( i \right)}},{{y}^{\left( i \right)}} \right)
(x(i),y(i)),
构造代价(误差、损失)函数:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
2
J\left( \theta \right)=\frac{1}{2}{{\sum\limits_{i=1}^{m}{\left( {{y}^{\left( i \right)}}-{{h}_{\theta }}\left( {{x}^{\left( i \right)}} \right) \right)}}^{2}}
J(θ)=21i=1∑m(y(i)−hθ(x(i)))2
目标:找到超平面参数
θ
{\theta}
θ,使得
J
(
θ
)
J\left( \theta \right)
J(θ)最小,即求解
min
θ
J
(
θ
)
\underset{\theta }{\mathop{\min }}\,J\left( \theta \right)
θminJ(θ)
求解:令
∂
J
(
θ
)
∂
θ
=
0
\frac{\partial J\left( \theta \right)}{\partial \theta }=0
∂θ∂J(θ)=0,
即可得到:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta ={{\left( {{X}^{T}}X \right)}^{-1}}{{X}^{T}}y
θ=(XTX)−1XTy
线性二分类问题
线性分类
定义 样本通过直线(或超平面)可分
线性分类与线性回归差别 :
线性分类 | 线性回归 |
---|---|
属于某类概率 | 回归具体值 |
最佳分类直线 | 最佳拟合直线 |
二维分类 | 一维回归 |
最终需要概率,结果在0-1之间,因此需要用Sigmoid函数对值进行变换
构造代价(误差、损失)函数:
J
(
θ
)
=
1
2
∑
i
=
1
N
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
2
J\left( \theta \right)=\frac{1}{2}{{\sum\limits_{i=1}^{N}{\left( {{y}^{\left( i \right)}}-{{h}_{\theta }}\left( {{x}^{\left( i \right)}} \right) \right)}}^{2}}
J(θ)=21i=1∑N(y(i)−hθ(x(i)))2
这里
h
θ
(
x
(
i
)
)
=
1
1
+
e
−
θ
T
x
(
i
)
{{h}_{\theta }}\left( {{x}^{\left( i \right)}} \right)=\frac{1}{1+{{e}^{-{{\theta }^{T}}x\left( i \right)}}}
hθ(x(i))=1+e−θTx(i)1
用梯度下降法解非线性的J,让
J
(
θ
)
→
0
J\left( \theta \right)\to 0
J(θ)→0
J
(
θ
k
+
1
)
=
J
(
θ
k
)
+
[
d
J
d
θ
]
T
Δ
θ
k
J\left( {{\theta }_{k+1}} \right)=J\left( {{\theta }_{k}} \right)+{{\left[ \frac{dJ}{d\theta } \right]}^{T}}\Delta {{\theta }_{k}}
J(θk+1)=J(θk)+[dθdJ]TΔθk
令
Δ
θ
k
=
−
α
d
J
d
θ
=
−
α
∇
θ
J
\Delta {{\theta }_{k}}=-\alpha \frac{dJ}{d\theta }=-\alpha {{\nabla }_{\theta }}J
Δθk=−αdθdJ=−α∇θJ,则
J
(
θ
k
+
1
)
≤
J
(
θ
k
)
J\left( {{\theta }_{k+1}} \right)\le J\left( {{\theta }_{k}} \right)
J(θk+1)≤J(θk)
对数回归与多分类问题
Softmax
取代价函数:
J
(
θ
)
=
−
[
∑
i
=
1
m
∑
k
=
1
K
1
{
y
(
i
)
=
k
}
log
exp
(
θ
(
k
)
T
x
(
i
)
)
∑
j
=
1
K
exp
(
θ
(
j
)
T
x
(
i
)
)
]
J\left( \theta \right)=-\left[ \sum\limits_{i=1}^{m}{\sum\limits_{k=1}^{K}{1\left\{ {{y}^{\left( i \right)}}=k \right\}\log \frac{\exp \left( {{\theta }^{\left( k \right)T}}x{}^{\left( i \right)} \right)}{\sum\limits_{j=1}^{K}{\exp \left( {{\theta }^{\left( j \right)T}}x{}^{\left( i \right)} \right)}}}} \right]
J(θ)=−
i=1∑mk=1∑K1{y(i)=k}logj=1∑Kexp(θ(j)Tx(i))exp(θ(k)Tx(i))
对应梯度:
∇
θ
(
k
)
J
(
θ
)
=
−
∑
i
=
1
m
[
x
(
i
)
(
1
{
y
(
i
)
=
k
}
−
P
(
y
(
i
)
=
k
∣
x
(
i
)
;
θ
)
)
]
{{\nabla }_{\theta \left( k \right)}}J\left( \theta \right)=-\sum\limits_{i=1}^{m}{\left[ {{x}^{\left( i \right)}}\left( 1\left\{ {{y}^{\left( i \right)}}=k \right\}-P\left( {{y}^{\left( i \right)}}=k\left| {{x}^{\left( i \right)}} \right.;\theta \right) \right) \right]}
∇θ(k)J(θ)=−i=1∑m[x(i)(1{y(i)=k}−P(y(i)=k
x(i);θ))]
交叉熵损失
l
(
y
,
y
^
)
=
−
∑
j
=
1
K
y
i
log
y
^
j
l\left( y,\hat{y} \right)=-\sum\limits_{j=1}^{K}{{{y}_{i}}}\log {{\hat{y}}_{j}}
l(y,y^)=−j=1∑Kyilogy^j
神经元模型
神经元模型
人工神经元模型:M-P模型
单神经元模型
y
=
f
(
∑
j
=
1
n
w
j
x
j
−
θ
)
y=f\left( \sum\limits_{j=1}^{n}{{{w}_{j}}{{x}_{j}}-\theta } \right)
y=f(j=1∑nwjxj−θ)
作用函数
- 非对称型Sigmoid函数(Log Sigmoid)
f ( x ) = 1 1 + e − x f\left( x \right)=\frac{1}{1+{{e}^{-x}}} f(x)=1+e−x1 - 对称型Sigmoid函数(Tangent Sigmoid)
f ( x ) = 1 − e − x 1 + e − x f\left( x \right)=\frac{1-{{e}^{-x}}}{1+{{e}^{-x}}} f(x)=1+e−x1−e−x - 对称型阶跃函数,即具有阶跃作用函数的神经元,称为阈值逻辑单元
f ( x ) = { + 1 , x ≥ 0 − 1 , x < 0 f\left( x \right)=\left\{ \begin{matrix} +1,x\ge 0 \\ -1,x<0 \\ \end{matrix} \right. f(x)={+1,x≥0−1,x<0
Hebb规则
连接权值的调整量与输入与输出的乘积成正比:
Δ
w
=
α
⋅
x
⋅
y
\Delta w=\alpha \cdot x\cdot y
Δw=α⋅x⋅y
感知机模型
感知机解决线性分类问题
原理:
公式中的直线方程为ax+by+c=0,假设任一点的坐标为
(
x
0
,
y
0
)
\left( {{x}_{0}},{{y}_{0}} \right)
(x0,y0),到直线距离为:
d
=
a
x
0
+
b
y
0
+
c
a
2
+
b
2
d=\frac{a{{x}_{0}}+b{{y}_{0}}+c}{\sqrt{{{a}^{2}}+{{b}^{2}}}}
d=a2+b2ax0+by0+c
如果是高维情况,分类面为超平面,则有:
d
=
w
T
x
∥
w
∥
d=\frac{{{w}^{T}}x}{\left\| w \right\|}
d=∥w∥wTx
感知机与神经元模型类比具有完全相同的形式。
多层前馈网络与误差反传算法
多层感知机
在输入和输出层间加一或多层隐单元,构成多层感知器(多层前馈神经网络)
加一层隐节点(单元)为三层网络,可解决异或(XOR)问题
多层感知器网络定理:
- 若隐节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数;
- 若隐节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。
激活函数(activation function)
通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。 大多数激活函数都是非线性的。
- ReLU函数
最受欢迎的激活函数是修正线性单元(Rectified linear unit,ReLU), 因为它实现简单,同时在各种预测任务中表现良好。 ReLU提供了一种非常简单的非线性变换;
下图为ReLU函数图像及其导数图像
- sigmoid函数
sigmoid函数将输入变换为区间(0, 1)上的输出。 因此,sigmoid通常称为挤压函数(squashing function): 它将范围(-inf, inf)中的任意输入压缩到区间(0, 1)中的某个值。
下图为sigmoid函数图像及其导数图像
- tanh函数
与sigmoid函数类似, tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。
下图为tanh函数图像及其导数图像
BP算法
多层前馈网络的反向传播学习算法,简称BP算法,是有导师学习,它是梯度下降法在多层前馈网中的应用。
网络结构:u、y是网络的输入、输出向量,神经元用节点表示,由输入层、隐层和输出层节点组成,隐层可一层,也可多层(图中为单隐层),前层至后层节点通过权连接。
BP学习算法由正向传播和反向传播组成
- 正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。
- 反向传播是将误差按原联结通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。
网络训练的目的,是使对每一个输入样本,调整网络参数,使输出均方误差最小化,这是一个最优化问题。
BP算法基本思想
- 设置初始权系数 w 0 {{w}_{0}} w0为较小的随机非零值;
- 给定输入/输出样本对,计算网络输出,完成前向传播;
- 计算目标函数J。如 J < ε J<\varepsilon J<ε,训练成功,退出;否则转入4
- 反向传播计算由输出层,按梯度下降法将误差反向传播,逐层调整权值。
前向传播
考虑三层神经网络。对于当前样本,隐含层输出:对于第l层第i个神经元,
w
i
j
l
x
j
w_{ij}^{l}{{x}_{j}}
wijlxj
a
i
[
l
]
=
f
(
z
i
[
l
]
)
=
f
(
w
i
[
l
]
⋅
a
[
l
−
1
]
)
=
f
(
∑
j
=
0
n
w
i
j
[
l
]
⋅
a
j
[
l
−
1
]
)
a_{i}^{\left[ l \right]}=f\left( z_{i}^{\left[ l \right]} \right)=f\left( w_{i}^{\left[ l \right]}\cdot {{a}^{\left[ l-1 \right]}} \right)=f\left( \sum\limits_{j=0}^{n}{w_{ij}^{\left[ l \right]}\cdot a_{j}^{\left[ l-1 \right]}} \right)
ai[l]=f(zi[l])=f(wi[l]⋅a[l−1])=f(j=0∑nwij[l]⋅aj[l−1])
f可选取为Log Sigmoid函数
假设仅有一层隐层,则输出:
a
i
=
f
(
w
[
2
]
⋅
a
[
1
]
)
=
f
(
∑
j
=
0
n
w
i
j
[
2
]
⋅
a
j
[
1
]
)
{{a}_{i}}=f\left( {{w}^{\left[ 2 \right]}}\cdot {{a}^{\left[ 1 \right]}} \right)=f\left( \sum\limits_{j=0}^{n}{w_{ij}^{\left[ 2 \right]}\cdot a_{j}^{\left[ 1 \right]}} \right)
ai=f(w[2]⋅a[1])=f(j=0∑nwij[2]⋅aj[1])
计算误差:
e
=
y
−
a
e=y-a
e=y−a
第i个输出:
e
i
=
y
i
−
a
i
[
2
]
{{e}_{i}}={{y}_{i}}-a_{i}^{\left[ 2 \right]}
ei=yi−ai[2]
计算:
Δ
w
k
=
−
α
d
J
d
w
\Delta {{w}_{k}}=-\alpha \frac{dJ}{dw}
Δwk=−αdwdJ
要求:
d
J
d
w
∣
w
=
w
k
\frac{dJ}{dw}\left| _{w={{w}_{k}}} \right.
dwdJ∣w=wk
误差反传
如果当前是输出层:
δ
i
[
l
]
=
a
i
(
1
−
a
i
)
e
i
\delta _{i}^{\left[ l \right]}={{a}_{i}}\left( 1-{{a}_{i}} \right){{e}_{i}}
δi[l]=ai(1−ai)ei
隐含层(按从后向前更新顺序):
δ
i
[
l
]
=
[
∑
j
=
1
m
w
j
i
[
l
+
1
]
δ
j
[
l
+
1
]
]
(
a
i
[
l
]
)
′
\delta _{i}^{\left[ l \right]}=\left[ \sum\limits_{j=1}^{m}{w_{ji}^{\left[ l+1 \right]}\delta _{j}^{\left[ l+1 \right]}} \right]{{\left( a_{i}^{\left[ l \right]} \right)}^{\prime }}
δi[l]=[j=1∑mwji[l+1]δj[l+1]](ai[l])′
然后更新:
Δ
w
i
j
[
l
]
(
k
)
=
α
⋅
δ
i
[
l
]
a
j
[
l
−
1
]
\Delta w_{ij}^{\left[ l \right]}\left( k \right)=\alpha \cdot \delta _{i}^{\left[ l \right]}a_{j}^{\left[ l-1 \right]}
Δwij[l](k)=α⋅δi[l]aj[l−1]
a
j
[
0
]
=
x
j
a_{j}^{\left[ 0 \right]}={{x}_{j}}
aj[0]=xj
总结
- 优点
学习完全自主
可逼近任意非线性函数 - 缺点
算法非全局收敛
收敛速度慢
学习速率 α \alpha α选择
神经网路设计层数节点数
性能优化
动量法
随机梯度下降问题(stochastic gradient descent,SGD)
梯度下降算法每一步的更新都需要计算所有超参数的梯度,迭代速度会很慢,用随机梯度下降算法速度较快:算法的流程就是在每次更新的时候使用一个样本进行梯度下降,可以随机用一个样本来表示所有的样本,来调整超参数
θ
\theta
θ,因为样本是随机的,所以每次迭代没有办法得到一个准确的梯度,虽然每一次迭代得到的损失函数不一定是朝着全局最优方向,但是大体的方向还是朝着全局最优解的方向靠近,直到最后,得到的结果通常就会在全局最优解的附近。
随机梯度下降算法相比普通梯度下降算法,收敛的速度更快,所以在一般神经网络模型训练中,随机梯度下降算法 SGD 是一种常见的优化算法。
自适应梯度算法
Adaptive Gradient 自适应梯度
参数自适应变化:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率
具体来说,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根
AdaGrad问题
学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束
需要设置一个全局的初始学习率
RMSProp: Root Mean Square Prop
RMSProp 解决AdaGrad 方法中学习率过度衰减的问题
Adam算法
Adam 在 RMSProp 方法的基础上更进一步