感知机
感知机就是咱们前面学过的线性分类器加上一个激活函数。 线性分类器:web
v=wTx+b=(∑iwixi)+b
不少实际问题并非线性可分的,因此须要用一个非线性函数将上述结果变为非线性的。算法
y=φ(v)
经常使用的激活函数有sigmoid 、tanh、ReLU、Softplus:
它们的函数图像分别是:
网络
sigmoid(x)=11+e−x
tanh(x)=ex−e−xex+e−x
ReLU(x)=max(0,x)
softplus(x)=log(1+e−x)
多层神经网络
单层感知机没法处理或模拟像异或这种函数。若是将感知机链接起来构成一个多层神经网络,则能够知足类需求。也就说说多层神经网络的模拟能力远超过单层神经网络。。svg
设神经网络有L+1层,每一层的输出分别为
[h0,h1,h2,h3,...,hL
,其中
hi
均为增广向量。
h0
为输入
x⃗
,h_L 为
y⃗
。 函数
各层的权值为
[w1,w2,w3,...,bL]
和
[b1,b2,b3,...,wL]
。能够认为第0层没有权值,由于他的输出
h0
就是x,或者也能够认为
w0
为全一贯量。这样
h0=1˙x
.学习
令
φl
表示第
l
层的激活函数。atom
hl=φl(wTl−1hl−1+bl−1),l=1,2,...,L
(式1)
偏差函数
偏差函数采用 二阶范式 即
spa
L(w)=12N(y−ylabel)T(y−ylabel)
(式2)
R(w)=λ∑l=1LwTlwl+bl
(式3)
J(w)=L(w)+R(w)
(式4)
各类求导
为了下面的推导方便,咱们先给出各类函数的求导结果。
sigmoid :
3d
s′=s(1−s)
(式5)
tanh:
t′=1−t2
(式6)
ReLU:
r′={01 if x<0 if x≥0
(式7)
Softplus:
p′=sigmoid−1
(式8)
线性函数
xml
∂y/∂w=∂∂w(wTx)=x
(式9)
∂∂w(wTw)=w
(式10)
反向传播算法
为了能对这个神经网络模型进行学习,咱们一样采用梯度降低法。咱们求损失函数
∂L(w)∂wl=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂hl˙∂hl∂wl
∂L(w)∂bl=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂hl˙∂hl∂bl
(式11)
这个式子是怎么获得的呢? 观察(式1)能够看出
hl
是
hl−1
的函数。因此运用复合函数求导法则,造成了上述公式。
咱们再计算一个L(w)对
wl+1
的偏导数
∂L(w)∂wl+1=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂wl+1
∂L(w)∂bl+1=∂L(w)∂hL˙∂hL∂hL−1...∂hl+2∂hl+1˙∂hl+1∂bl+1
(式12)
能够分析获得如下结论:
其1、最后一项为相应层的输出
hl
对相应 的
wl
求导, 前面的项从最后的偏差函数一直向前求导。
∂L(w)∂wl=∂L(w)∂hl˙∂hl∂wl
∂L(w)∂bl=∂L(w)∂hl˙∂hl∂bl
(式13)
其2、L(w)对
wl
求导和 对
wl+1
求导公式有不少相同项。令
σl=∂L(w)∂hl
(式14)
整理(式11)和(式12)获得
σl=σl+1˙∂hl+1∂hl
(式15)
对于最后一层,其输出就是整个神经网络的输出,因此不能用这个公式, 应该使用下面的公式。
σL=∂L(w)∂hL
这个
σl
称为偏差传播项,能够从高层向低层逐层计算。
那么
∂hl+1/∂hl
如何计算呢? 根据(式1),能够获得:
∂hl+1∂hl=∂φl+1∂vl+1˙∂vl+1∂hl=∂φl+1∂v˙wl+1
(式16)
其中
∂φl+1/∂v
就是 (式5) - (式10)给出的,根据这个层的激活函数选用对应的偏导数。
有了偏差L(w)对
wl
的偏导数,咱们就可使用梯度降低法求更新权值了。
wl=wl−α∂L(w)∂wl
bl=wbl−α∂L(w)∂bl
(式17)
代入(式13)和(式14),获得
wl=wl−α∂L(w)∂hl˙∂hl∂wl=wl−σl∂hl∂φl˙∂φl∂wl=wl−σl∂hl∂φlhl−1
bl=bl−α∂L(w)∂hl˙∂hl∂bl=wl−σl∂hl∂φl˙∂φl∂bl=wl−σl∂hl∂φl
(式18)
程序实现思路
有了(式15)这个最核心的公式,咱们就能够将每一个层作成一个类,而后将他们串联起来就能够构造任意的多层神经网络。
matlab中没有类的概念,但有结构体,咱们定义一个结构体并定义一组方法来构成一个“类”。
应该具备的方法有:
(1)前向传播 ,根据(式1)从底向上逐层计算每层的输出,最后一层的输出即神经网络的输出
hl
。
(2)偏差后向传播。 根据(式15),从顶到底计算每一层的偏差传播项
σl
(3)根据(式17)从底向上更新权值。
Matlab 实现